docs(VAvatar): update advanced example

docs(VAvatar): update advanced example

resolves #10551

<template>
  <v-container fluid>
    <v-row justify="center">
      <v-subheader>Today</v-subheader>

      <v-expansion-panels popout>
        <v-expansion-panel
          v-for="(message, i) in messages"
          :key="i"
          hide-actions
        >
          <v-expansion-panel-header>
            <v-row
              align="center"
              class="spacer"
              no-gutters
            >
              <v-col
                cols="4"
                sm="2"
                md="1"
              >
                <v-avatar
                  size="36px"
                >

                  <v-icon
                    v-else
                    :color="message.color"
                    v-text="message.icon"
                  ></v-icon>
                </v-avatar>
              </v-col>

              <v-col
                class="hidden-xs-only"
                sm="5"
                md="3"
              >

                   ({{ message.total }})

              </v-col>

              <v-col
                class="text-no-wrap"
                cols="5"
                sm="3"
              >
                <v-chip
                  v-if="message.new"
                  :color="`${message.color} lighten-4`"
                  class="ml-0 mr-2 black--text"
                  label
                  small
                >
                  {{ message.new }} new
                </v-chip>

              </v-col>

              <v-col
                v-if="message.excerpt"
                class="grey--text text-truncate hidden-sm-and-down"
              >
                —
                {{ message.excerpt }}
              </v-col>
            </v-row>
          </v-expansion-panel-header>

          <v-expansion-panel-content>
            <v-divider></v-divider>
            <v-card-text v-text="lorem"></v-card-text>
          </v-expansion-panel-content>
        </v-expansion-panel>
      </v-expansion-panels>
    </v-row>
  </v-container>
</template>

<template>
  <v-container fluid>
    <v-row justify="center">
      <v-subheader>Today</v-subheader>

      <v-expansion-panels popout>
        <v-expansion-panel
          v-for="(message, i) in messages"
          :key="i"
          hide-actions
        >
          <v-expansion-panel-header>
            <v-row
              align="center"
              class="spacer"
              no-gutters
            >
              <v-col
                cols="4"
                sm="2"
                md="1"
              >
                <v-avatar
                  size="36px"
                >

                  <v-icon
                    v-else
                    :color="message.color"
                    v-text="message.icon"
                  ></v-icon>
                </v-avatar>
              </v-col>

              <v-col
                class="hidden-xs-only"
                sm="5"
                md="3"
              >

                   ({{ message.total }})

              </v-col>

              <v-col
                class="text-no-wrap"
                cols="5"
                sm="3"
              >
                <v-chip
                  v-if="message.new"
                  :color="`${message.color} lighten-4`"
                  class="ml-0"
                  label
                  small
                >
                  {{ message.new }} new
                </v-chip>

              </v-col>

              <v-col
                v-if="message.excerpt"
                class="grey--text text-truncate hidden-sm-and-down"
              >
                —
                {{ message.excerpt }}
              </v-col>
            </v-row>
          </v-expansion-panel-header>

          <v-expansion-panel-content>
            <v-divider></v-divider>
            <v-card-text v-text="lorem"></v-card-text>
          </v-expansion-panel-content>
        </v-expansion-panel>
      </v-expansion-panels>
    </v-row>
  </v-container>
</template>


docs(Settings): disable drawer route watcher

is invoked when the ToC updates the route

<template>
  <v-navigation-drawer
    id="settings-drawer"
    v-model="settings"
    :color="dark ? '#272727' : undefined"
    :right="!rtl"
    disable-route-watcher
    fixed
    hide-overlay
    temporary
    width="300"
  >
    <default-settings-drawer-prepend />

    <v-container>
      <template v-if="!!install">
        <default-settings-pwa />

          <v-divider />

      </template>

      <default-settings-theme />

        <v-divider />

      <default-settings-drawer-grouping />

        <v-divider />

      <default-settings-rtl />
    </v-container>
  </v-navigation-drawer>
</template>

<template>
  <v-navigation-drawer
    id="settings-drawer"
    v-model="settings"
    :color="dark ? '#272727' : undefined"
    :right="!rtl"
    fixed
    hide-overlay
    temporary
    width="300"
  >
    <default-settings-drawer-prepend />

    <v-container>
      <template v-if="!!install">
        <default-settings-pwa />

          <v-divider />

      </template>

      <default-settings-theme />

        <v-divider />

      <default-settings-drawer-grouping />

        <v-divider />

      <default-settings-rtl />
    </v-container>
  </v-navigation-drawer>
</template>


bug fix on appointment export

bug fix on appointment export

<template>

    <common-header></common-header>

      <navigator module="booking"></navigator>

          您的当前位置 : 约课管理 > 约课信息管理

          <el-form ref="form" :inline="true" :model="form" class="demo-form-inline" label-width="80px">
            <el-form-item label="约课主题">
              <el-input v-model="form.name" placeholder="约课主题"></el-input>
            </el-form-item>
            <el-form-item label="发起时间">
              <el-col>
                <el-date-picker type="date" placeholder="发起时间" v-model="form.date1" style="width: 100%;"></el-date-picker>
              </el-col>
            </el-form-item>
            <el-form-item>
              <button type="button" class="inf_btn ml20" v-on:click="queryAppointment">查  询</button>
              <el-button type="button" v-on:click="exportAppointment" :loading="showloading" class="inf_btn ml20 export_bor">导  出</el-button>
              <el-dialog title="电子表格文件生成成功" :visible.sync="dialogTableVisible">

                  下  载
                  <button v-on:click="dialogTableVisible = false" type="button" class="qx_btn ml20">取 消</button>

              </el-dialog>
            </el-form-item>
          </el-form>
          <el-table :data="tableData" border style="width: 100%">
            <el-table-column prop="appointmentTitle" label="约课主题" width="">
            </el-table-column>
            <el-table-column prop="sponsorName" label="发起者" width="">
            </el-table-column>
            <el-table-column prop="sponsorDate" label="发起时间" width="">
              <template scope="scope" >
                {{scope.row.sponsorDate | formatDate}}
              </template>
            </el-table-column>
            <el-table-column prop="thisR" label="操作" width="" >
              <template scope="scope" >
                <el-button v-on:click="routeByName(scope.row)" type="text" size="small">查看</el-button>
                <el-button  type="text" size="small" @click="closeAppointment(scope.row)">关闭约课</el-button>
              </template>
            </el-table-column>
          </el-table>

            <el-pagination @current-change="handleCurrentChange" :current-page="currentPage"  :page-size="take" layout="total, prev, pager, next" :total="total"></el-pagination>

</template>


Fixed id

Fixed id

<template>

      Manage Users of MBU Online

      Use this page to view current users of this website.

              Role:

              <select id="user-list-role-filter"
                      v-model="selectedRole">
                <option v-for="option in roles" :value="option.value">
                  {{ option.text }}
                </option>
              </select>

              Search:

              <input class="input"
                     id="user-list-find"
                     v-model="search"></input>

    <general-table v-if="selectedRole === 'all' || selectedRole === 'admin'"
                  :users="usersToDisplay"></general-table>
    <coordinators-table v-if="selectedRole === 'coordinator'"
                        :coordinators="usersToDisplay"></coordinators-table>

</template>


Add footer slot on autocomplete component (#1399)

<template>

        <b-input
            v-model="newValue"
            ref="input"
            type="text"
            :size="size"
            :loading="loading"
            :rounded="rounded"
            :icon="icon"
            :icon-pack="iconPack"
            :maxlength="maxlength"
            :autocomplete="newAutocomplete"
            v-bind="$attrs"
            @input="onInput"
            @focus="focused"
            @blur="onBlur"
            @keyup.native.esc.prevent="isActive = false"
            @keydown.native.tab="tabPressed"
            @keydown.native.enter.prevent="enterPressed"
            @keydown.native.up.prevent="keyArrows('up')"
            @keydown.native.down.prevent="keyArrows('down')"
        />

        <transition name="fade">

 0 || hasEmptySlot || hasHeaderSlot)"
                ref="dropdown">

                        <slot name="header"/>

                        <slot
                            v-if="hasDefaultSlot"
                            :option="option"
                            :index="index"
                        />

                            {{ getValue(option, true) }}

                        <slot name="empty"/>

                        <slot name="footer"/>

        </transition>

</template>

<template>

        <b-input
            v-model="newValue"
            ref="input"
            type="text"
            :size="size"
            :loading="loading"
            :rounded="rounded"
            :icon="icon"
            :icon-pack="iconPack"
            :maxlength="maxlength"
            :autocomplete="newAutocomplete"
            v-bind="$attrs"
            @input="onInput"
            @focus="focused"
            @blur="onBlur"
            @keyup.native.esc.prevent="isActive = false"
            @keydown.native.tab="tabPressed"
            @keydown.native.enter.prevent="enterPressed"
            @keydown.native.up.prevent="keyArrows('up')"
            @keydown.native.down.prevent="keyArrows('down')"
        />

        <transition name="fade">

 0 || hasEmptySlot || hasHeaderSlot)"
                ref="dropdown">

                        <slot name="header"/>

                        <slot
                            v-if="hasDefaultSlot"
                            :option="option"
                            :index="index"
                        />

                            {{ getValue(option, true) }}

                        <slot name="empty"/>

        </transition>

</template>


Add course id to course-list

Add course id to course-list

<template src='./courses-list.html'></template>

<style scoped src='./courses-list.css'></style>

<script>
import courseCard from '../course-card/course-card'
import gql from 'graphql-tag'

// GraphQL query
// const courseList = gql`
//    query CourseList($test: String!) {
//        courses(title: $test)
//    }
// `

const courseList = gql`
    {
        courses {
            id
            title
            pitch
            member_limit
            member_count
        }
    }
`

export default {
    name: 'courses-list',
    data: function () {
        return {
            courses: ''
        }
    },
    props: {
        subject: {
            type: String
        }
    },
    components: {
        courseCard
    },
    watch: {
        subject: function (itemToSearch) {
            this.$apollo.query({
                query: courseList
                // variables: {
                //    courses: {
                //        test: 'casa'
                //    }
                // }
            })
            .then(res => {
                this.courses = res.data.courses
            })
        }
    }
}
</script>

<template src='./courses-list.html'></template>

<style scoped src='./courses-list.css'></style>

<script>
import courseCard from '../course-card/course-card'
import gql from 'graphql-tag'

// GraphQL query
// const courseList = gql`
//    query CourseList($test: String!) {
//        courses(title: $test)
//    }
// `

const courseList = gql`
    {
        courses {
            title
            pitch
            member_limit
            member_count
        }
    }
`

export default {
    name: 'courses-list',
    data: function () {
        return {
            courses: ''
        }
    },
    props: {
        subject: {
            type: String
        }
    },
    components: {
        courseCard
    },
    watch: {
        subject: function (itemToSearch) {
            this.$apollo.query({
                query: courseList
                // variables: {
                //    courses: {
                //        test: 'casa'
                //    }
                // }
            })
            .then(res => {
                this.courses = res.data.courses
            })
        }
    }
}
</script>


Removed Forms component

Removed Forms component

<template>
  <v-ons-page>

    <v-ons-list>
      <v-ons-list-header>Text input</v-ons-list-header>
      <v-ons-list-item :modifier="$ons.platform.isAndroid() ? 'nodivider' : ''">

          <v-ons-icon icon="md-face" class="list-item__icon"></v-ons-icon>

          <v-ons-input float maxlength="20"
            placeholder="Name"
            v-model="name"
          >
          </v-ons-input>

      </v-ons-list-item>
      <v-ons-list-item :modifier="$ons.platform.isAndroid() ? 'nodivider' : ''">

          <v-ons-icon icon="fa-question-circle-o" class="list-item__icon"></v-ons-icon>

          <v-ons-search-input maxlength="20"
            placeholder="Search"
            v-model="name"
          >
          </v-ons-search-input>

      </v-ons-list-item>
      <v-ons-list-item>

          Hello {{ name || 'anonymous' }}!<v-ons-icon icon="fa-hand-spock-o" size="lg" class="right-icon"></v-ons-icon>

      </v-ons-list-item>

      <v-ons-list-header>Switches</v-ons-list-header>
      <ons-list-item>

          Switch ({{ switchOn ? 'on' : 'off' }})

          <v-ons-switch input-id="switch1" v-model="switchOn">
          </v-ons-switch>

      </ons-list-item>
      <ons-list-item>

          {{ switchOn ? 'Enabled switch' : 'Disabled switch' }}

          <v-ons-switch input-id="switch2" :disabled="!switchOn">
          </v-ons-switch>

      </ons-list-item>

      <v-ons-list-header>Select</v-ons-list-header>
      <ons-list-item>

          <v-ons-select style="width: 120px" v-model="selectedItem">
            <option v-for="item in items" :value="item.value">
              {{ item.text }}
            </option>
          </v-ons-select>

          <s v-show="selectedItem !== 'Vue'">{{ selectedItem }}</s> Vue is awesome!

      </ons-list-item>

      <v-ons-list-header>Radio buttons</v-ons-list-header>
      <v-ons-list-item v-for="(vegetable, $index) in vegetables" :key="vegetable"
        tappable
        :modifier="($index === vegetables.length - 1) ? 'longdivider' : ''"
      >

          <v-ons-radio
            :input-id="'radio-' + $index"
            :value="vegetable"
            v-model=" selectedVegetable"
          >
          </v-ons-radio>

          {{ vegetable }}

      </v-ons-list-item>
      <v-ons-list-item>

          I love {{ selectedVegetable }}!

      </v-ons-list-item>

      <v-ons-list-header>Checkboxes - {{checkedColors}}</v-ons-list-header>
      <v-ons-list-item v-for="(color, $index) in colors" :key="color" tappable>

          <v-ons-checkbox
            :input-id="'checkbox-' + $index"
            :value="color"
            v-model="checkedColors"
          >
          </v-ons-checkbox>

          {{ color }}

      </v-ons-list-item>

      <v-ons-list-header>Range slider</v-ons-list-header>
      <v-ons-list-item>
        Adjust the volume:
        <v-ons-row>
          <v-ons-col width="40px" style="text-align: center; line-height: 31px;">
            <v-ons-icon icon="md-volume-down"></v-ons-icon>
          </v-ons-col>
          <v-ons-col>

            <v-ons-range v-model="volume" style="width: 100%;"></v-ons-range>

          </v-ons-col>
          <v-ons-col width="40px" style="text-align: center; line-height: 31px;">
            <v-ons-icon icon="md-volume-up"></v-ons-icon>
          </v-ons-col>
        </v-ons-row>
        Volume: {{ volume }}  80"> (careful, that's loud)
      </v-ons-list-item>
    </v-ons-list>
  </v-ons-page>
</template>


Add watches button.

Add watches button.

<template>
  <v-card>
    <v-card-title @click="show = !show" class="title py-2">

{{course}}
          {{crosslists}}

          <course-name>{{course}}</course-name>

        <v-btn flat color="info" @click.stop="addWatchDialog = !addWatchDialog" v-if="show" disabled>
          <v-icon left>add_alert</v-icon>
          Watches aren't working yet, sorry!
        </v-btn>
        <template v-else>
          <term-offering-indicator v-for="period of periods" :key="period.name" :period="period"
            :course="course" :matches="Array.from(filter.keys()).some(term => term.indexOf(period.name) > -1)"></term-offering-indicator>
        </template>
        <v-dialog v-model="addWatchDialog" max-width="500px">
          <v-card>
            <v-card-title>
              Which term?
            </v-card-title>
            <v-card-text>
              <v-radio-group v-model="radioGroup">
                <v-radio
                  v-for="term in futureTerms"
                  :key="term"
                  :label="term"
                  :value="term"
                ></v-radio>
              </v-radio-group>
            </v-card-text>
            <v-card-actions>
              <v-btn color="primary" flat @click.stop="dialog2=false">Notify me</v-btn>
              <v-btn flat @click.stop="addWatchDialog = false">Nevermind</v-btn>
            </v-card-actions>
          </v-card>
        </v-dialog>

    </v-card-title>
    <v-slide-y-transition>
      <course-detail v-if="show" :filter="filter">{{course}}</course-detail>
    </v-slide-y-transition>
  </v-card>
</template>

<template>
  <v-card>
    <v-card-title @click="show = !show" class="title py-2">

{{course}}
          {{crosslists}}

          <course-name>{{course}}</course-name>

        <term-offering-indicator v-for="period of periods" :key="period.name" :period="period"
          :course="course" :matches="Array.from(filter.keys()).some(term => term.indexOf(period.name) > -1)"></term-offering-indicator>

    </v-card-title>
    <v-slide-y-transition>
      <course-detail v-if="show" :filter="filter">{{course}}</course-detail>
    </v-slide-y-transition>
  </v-card>
</template>


Fixed typecheck on myplan component prop

<template>
  <uw-card
    v-if="student && shouldDisplayAtAll && (!loaded || hasDataToDisplay)"
    :loaded="loaded"
    :errored="errored"
    :errored-show="!isSummerReg || (isSummerReg && period === 'A')"
  >
    <template #card-heading>

        Registration: {{ quarter }} {{ year }}

        {{ forQuarter }} Registration

    </template>
    <template #card-body>
      <uw-est-reg-date :est-reg-data="estRegData" />
      <uw-holds
        v-if="regHoldsNotices && regHoldsNotices.length"
        :reg-holds-notices="regHoldsNotices"
        :is-my-plan-peak-load="myPlanPeakLoad"
      />

            {{ pendingMajors.length > 1 ? 'Majors' : 'Major' }}
            Beginning

            {{ quarter }}

              {{ major.degree_abbr }}

            {{ pendingMinors.length > 1 ? 'Minors' : 'Minor' }}
            Beginning

            {{ quarter }}

              {{ minor.abbr }}

      <uw-myplan
        v-if="!myPlanPeakLoad && myPlanData !== null"
        :my-plan-data="myPlanData"
        :year="year"
        :quarter="quarter"
      />

      <uw-resources
        :my-plan-data="myPlanData"
        :registration-is-open="
          estRegData.noticeMyRegIsOpen ||
            (!estRegData.hasEstRegDataNotice && regPeriod1Started)
        "
        :next-term-year="year"
        :next-term-quarter="quarter"
        :pre-reg-notices="preRegNotices"
      />

      <uw-fin-aid
        v-if="finAidNotices && finAidNotices.length && isSummerReg"
        :fin-aid-notices="finAidNotices"
      />
    </template>
  </uw-card>
</template>

<template>
  <uw-card
    v-if="student && shouldDisplayAtAll && (!loaded || hasDataToDisplay)"
    :loaded="loaded"
    :errored="errored"
    :errored-show="!isSummerReg || (isSummerReg && period === 'A')"
  >
    <template #card-heading>

        Registration: {{ quarter }} {{ year }}

        {{ forQuarter }} Registration

    </template>
    <template #card-body>
      <uw-est-reg-date :est-reg-data="estRegData" />
      <uw-holds
        v-if="regHoldsNotices && regHoldsNotices.length"
        :reg-holds-notices="regHoldsNotices"
        :is-my-plan-peak-load="myPlanPeakLoad"
      />

            {{ pendingMajors.length > 1 ? 'Majors' : 'Major' }}
            Beginning

            {{ quarter }}

              {{ major.degree_abbr }}

            {{ pendingMinors.length > 1 ? 'Minors' : 'Minor' }}
            Beginning

            {{ quarter }}

              {{ minor.abbr }}

      <uw-myplan
        v-if="!myPlanPeakLoad"
        :my-plan-data="myPlanData"
        :year="year"
        :quarter="quarter"
      />

      <uw-resources
        :my-plan-data="myPlanData"
        :registration-is-open="
          estRegData.noticeMyRegIsOpen ||
            (!estRegData.hasEstRegDataNotice && regPeriod1Started)
        "
        :next-term-year="year"
        :next-term-quarter="quarter"
        :pre-reg-notices="preRegNotices"
      />

      <uw-fin-aid
        v-if="finAidNotices && finAidNotices.length && isSummerReg"
        :fin-aid-notices="finAidNotices"
      />
    </template>
  </uw-card>
</template>


Make bottom padding consistent in AuthBase (Fixes #7491)

<template>

            <CoreLogo
              v-if="$kolibriBranding.signIn.topLogo"
              class="logo"
              :src="$kolibriBranding.signIn.topLogo.src"
              :alt="$kolibriBranding.signIn.topLogo.alt"
              :style="$kolibriBranding.signIn.topLogo.style"
            />

              {{ logoText }}

              {{ $tr('restrictedAccess') }}

{{ $tr('restrictedAccessDescription') }}

            <CoreLogo
              v-if="$kolibriBranding.signIn.topLogo"
              class="logo"
              :src="$kolibriBranding.signIn.topLogo.src"
              :alt="$kolibriBranding.signIn.topLogo.alt"
              :style="$kolibriBranding.signIn.topLogo.style"
            />

              {{ logoText }}

              <KButton
                v-if="oidcProviderFlow"
                :text="$tr('poweredByKolibri')"
                appearance="basic-link"
                @click="whatsThisModalVisible = true"
              />
              <KExternalLink
                v-else
                :text="$tr('poweredByKolibri')"
                :primary="true"
                href="https://learningequality.org/r/powered_by_kolibri"
                target="_blank"
                appearance="basic-link"
              />

            <slot></slot>

              <router-link :to="signUpPage">
                <KButton
                  :text="AuthSelectStrings.$tr('createAccountAction')"
                  :to="signUpPage"
                  :primary="false"
                  appearance="raised-button"
                  :disabled="busy"
                  style="width: 100%;"
                  data-test="createUser"
                />
              </router-link>

              <component :is="component" v-for="component in loginOptions" :key="component.name" />

              <KExternalLink
                :text="$tr('accessAsGuest')"
                :href="guestURL"
                :primary="true"
                appearance="basic-link"
              />

          <LanguageSwitcherFooter />

              {{ versionMsg }}

            <CoreLogo
              v-if="this.$kolibriBranding.signIn.showKolibriFooterLogo"
              class="footer-logo"
            />
             •
            <KButton
              :text="coreString('usageAndPrivacyLabel')"
              appearance="basic-link"
              @click="privacyModalVisible = true"
            />

    <PrivacyInfoModal
      v-if="privacyModalVisible"
      @submit="privacyModalVisible = false"
      @cancel="privacyModalVisible = false"
    />

    <KModal
      v-if="whatsThisModalVisible"
      :title="$tr('whatsThis')"
      :submitText="coreString('closeAction')"
      @submit="whatsThisModalVisible = false"
      @cancel="whatsThisModalVisible = false"
    >

{{ $tr('oidcGenericExplanation') }}

        <KExternalLink
          text="https://learningequality.org/kolibri"
          :primary="true"
          href="https://learningequality.org/r/powered_by_kolibri"
          target="_blank"
          appearance="basic-link"
        />

    </KModal>

</template>


fix typo

fix typo

<template>
  <div id="ice-surface">
  </div>
</template>

<script>
  import { renderSimulation } from 'curling-physics/lib/simulation'

  import redStone from '../assets/stone_red_game.png'
  import yellowStone from '../assets/stone_yellow_game.png'
  import track from '../assets/track_cropped.png'

  // Sprites for the stones of the different teams
  const sprites = {
    'team_1': 'dist/stone_red_game.png',
    'team_2': 'dist/stone_yellow_game.png',
  }
  const background = 'dist/track_cropped.png'

  export default {
    props: ['activeGameId'],
    data () {
      return {

      }
    },
    methods: {

    },
    mounted() {
      const socket = io.connect('ws://localhost:9999');

      let game_id = this.activeGameId;

      socket.on('connect', function() {
        socket.emit('subscribe', { game_id });
      });

      socket.on('new_delivery', (data) => {
        const iceSurface = document.getElementById('ice-surface')
        const { delivery, stones } = data;
        renderSimulation(delivery, stones, sprites, background, iceSurface);

        this.$emit('newDelivery', data);
      });
    }
  }
</script>

<template>
  <div id="ice-surface">
  </div>
</template>

<script>
  import { renderSimulation } from 'curling-physics/lib/simulation'

  import redStone from '../assets/stone_red_game.png'
  import yellowStone from '../assets/stone_yellow_game.png'
  import track from '../assets/track_cropped.png'

  // Sprites for the stones of the different teams
  const sprites = {
    'team_1': 'dist/stone_red_game.png',
    'team_2': 'dist/stone_yellow_game.png',
  }
  const background = 'dist/track_cropped.png'

  export default {
    props: ['activeGameId'],
    data () {
      return {

      }
    },
    methods: {

    },
    mounted() {
      const socket = io.connect('ws://localhost:9999');

      let game_id = this.activeGameId;

      socket.on('connect', function() {
        socket.emit('subscribe', { game_id });
      });

      socket.on('new_delivery', function(data) {
        const iceSurface = document.getElementById('ice-surface')
        const { delivery, stones } = data;
        renderSimulation(delivery, stones, sprites, background, iceSurface);

        this.$emit('newDelivery', data);
      });
    }
  }
</script>


Table: fix scroll delta check bug (#6581)

* Table : fix summary scroll delta check bug
bug description: when scroll event triggered in footerWrapper,it's not event.deltaX that changed, it's event.deltaY.

* Table : fix summary scroll delta check bug
bug description: when scroll event triggered in footerWrapper,it's not event.deltaX that changed, it's event.deltaY.

* Table: fix wheelEvent check bug

* Update table.vue

* Update table.vue

<template>
  <div class="el-table"
    :class="{
      'el-table--fit': fit,
      'el-table--striped': stripe,
      'el-table--border': border,
      'el-table--hidden': isHidden,
      'el-table--fluid-height': maxHeight,
      'el-table--enable-row-hover': !store.states.isComplex,
      'el-table--enable-row-transition': (store.states.data || []).length !== 0 && (store.states.data || []).length < 100
    }"
    @mouseleave="handleMouseLeave($event)">

<slot></slot>

        <slot name="empty">{{ emptyText || t('el.table.emptyText') }}</slot>

 0">

 0"
      :style="[
        { width: layout.fixedWidth ? layout.fixedWidth + 'px' : '' },
        fixedHeight
      ]">

 0">

 0"
      :style="[
        { width: layout.rightFixedWidth ? layout.rightFixedWidth + 'px' : '' },
        { right: layout.scrollY ? (border ? layout.gutterWidth : (layout.gutterWidth || 1)) + 'px' : '' },
        fixedHeight
      ]">

 0">

 0"
      :style="{ width: layout.scrollY ? layout.gutterWidth + 'px' : '0', height: layout.headerHeight + 'px' }">

</template>


fix группы на фронте

fix группы на фронте

<template>

Разделы статистики

          {{ c.label }}

Отчёты

не выбрано

          {{ r.title }}

Настройка

не выбрано

          <LaboratoryPicker
            v-model="values.lab"
            :with-all="checkReportParam(PARAMS_TYPES.LABORATORY_WITH_ALL)"
            v-if="checkReportParam(PARAMS_TYPES.LABORATORY, PARAMS_TYPES.LABORATORY_WITH_ALL)"
            :key="PARAMS_TYPES.LABORATORY_WITH_ALL"
          />

            Пользователи:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="true"
              :disable-branch-nodes="true"
              :options="users"
              placeholder="Пользователи не выбраны"
              v-model="values.users"
            />

          <div class="input-group" v-if="checkReportParam(PARAMS_TYPES.USER_OR_DEP)" :key="`${PARAMS_TYPES.USER_OR_DEP}_user`">
            Пользователь:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="false"
              :disable-branch-nodes="true"
              :options="users"
              :clearable="true"
              placeholder="Пользователь не выбан"
              :disabled="values.dep"
              v-model="values.user"
            />

или

          <div class="input-group" v-if="checkReportParam(PARAMS_TYPES.USER_OR_DEP)" :key="`${PARAMS_TYPES.USER_OR_DEP}_dep`">
            Подразделение:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="false"
              :disable-branch-nodes="true"
              :options="deps"
              :clearable="true"
              placeholder="Подразделение не выбано"
              :disabled="values.user"
              v-model="values.dep"
            />

Услуга:

              <ResearchesPicker
                v-model="values.research"
                autoselect="none"
                :just_search="true"
                :hidetemplates="true"
                :oneselect="true"
              />

            Компания:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="false"
              :disable-branch-nodes="true"
              :options="companies"
              :clearable="true"
              placeholder="Компания не выбана"
              v-model="values.company"
            />

            Источник финансирования:
            <select v-model="values.finSource" class="form-control">
              <option :value="-1">не выбрано</option>
              <optgroup :label="b.title" v-for="b in bases" :key="b.pk">
                <option v-for="f in b.fin_sources.filter(x => !x.hide)" :key="f.pk" :value="f.pk">
                  {{ b.title }} – {{ f.title }}
                </option>
              </optgroup>
            </select>

            Год
            <input v-model.number="values.year" type="number" min="2020" max="3000" class="form-control" />
            Месяц
            <select v-model="values.month" class="form-control">
              <option :value="1">Январь</option>
              <option :value="2">Февраль</option>
              <option :value="3">Март</option>
              <option :value="4">Апрель</option>
              <option :value="5">Май</option>
              <option :value="6">Июнь</option>
              <option :value="7">Июль</option>
              <option :value="8">Август</option>
              <option :value="9">Сентябрь</option>
              <option :value="10">Октябрь</option>
              <option :value="11">Ноябрь</option>
              <option :value="12">Декабрь</option>
            </select>

          <DatePicker
            v-model="values.dateRange"
            mode="date"
            :masks="masks"
            is-range
            :max-date="new Date()"
            v-if="checkReportParam(PARAMS_TYPES.DATE_RANGE)"
            :rows="2"
            :step="1"
            :key="PARAMS_TYPES.DATE_RANGE"
          >
            <template v-slot="{ inputValue, inputEvents }">

                Дата:
                <input class="form-control" :value="inputValue.start" v-on="inputEvents.start" />
                —
                <input class="form-control" :value="inputValue.end" v-on="inputEvents.end" />

            </template>
          </DatePicker>

            <DateSelector :date_type.sync="values.dateType" :values.sync="values.dateValues" />

            Сформировать отчёт

            Диапазон дат должен быть не больше двух месяцев

</template>

<template>

Разделы статистики

          {{ c.label }}

Отчёты

не выбрано

          {{ r.title }} {{ r.group }}

Настройка

не выбрано

          <LaboratoryPicker
            v-model="values.lab"
            :with-all="checkReportParam(PARAMS_TYPES.LABORATORY_WITH_ALL)"
            v-if="checkReportParam(PARAMS_TYPES.LABORATORY, PARAMS_TYPES.LABORATORY_WITH_ALL)"
            :key="PARAMS_TYPES.LABORATORY_WITH_ALL"
          />

            Пользователи:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="true"
              :disable-branch-nodes="true"
              :options="users"
              placeholder="Пользователи не выбраны"
              v-model="values.users"
            />

          <div class="input-group" v-if="checkReportParam(PARAMS_TYPES.USER_OR_DEP)" :key="`${PARAMS_TYPES.USER_OR_DEP}_user`">
            Пользователь:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="false"
              :disable-branch-nodes="true"
              :options="users"
              :clearable="true"
              placeholder="Пользователь не выбан"
              :disabled="values.dep"
              v-model="values.user"
            />

или

          <div class="input-group" v-if="checkReportParam(PARAMS_TYPES.USER_OR_DEP)" :key="`${PARAMS_TYPES.USER_OR_DEP}_dep`">
            Подразделение:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="false"
              :disable-branch-nodes="true"
              :options="deps"
              :clearable="true"
              placeholder="Подразделение не выбано"
              :disabled="values.user"
              v-model="values.dep"
            />

Услуга:

              <ResearchesPicker
                v-model="values.research"
                autoselect="none"
                :just_search="true"
                :hidetemplates="true"
                :oneselect="true"
              />

            Компания:
            <treeselect
              class="treeselect-noborder treeselect-wide"
              :multiple="false"
              :disable-branch-nodes="true"
              :options="companies"
              :clearable="true"
              placeholder="Компания не выбана"
              v-model="values.company"
            />

            Источник финансирования:
            <select v-model="values.finSource" class="form-control">
              <option :value="-1">не выбрано</option>
              <optgroup :label="b.title" v-for="b in bases" :key="b.pk">
                <option v-for="f in b.fin_sources.filter(x => !x.hide)" :key="f.pk" :value="f.pk">
                  {{ b.title }} – {{ f.title }}
                </option>
              </optgroup>
            </select>

            Год
            <input v-model.number="values.year" type="number" min="2020" max="3000" class="form-control" />
            Месяц
            <select v-model="values.month" class="form-control">
              <option :value="1">Январь</option>
              <option :value="2">Февраль</option>
              <option :value="3">Март</option>
              <option :value="4">Апрель</option>
              <option :value="5">Май</option>
              <option :value="6">Июнь</option>
              <option :value="7">Июль</option>
              <option :value="8">Август</option>
              <option :value="9">Сентябрь</option>
              <option :value="10">Октябрь</option>
              <option :value="11">Ноябрь</option>
              <option :value="12">Декабрь</option>
            </select>

          <DatePicker
            v-model="values.dateRange"
            mode="date"
            :masks="masks"
            is-range
            :max-date="new Date()"
            v-if="checkReportParam(PARAMS_TYPES.DATE_RANGE)"
            :rows="2"
            :step="1"
            :key="PARAMS_TYPES.DATE_RANGE"
          >
            <template v-slot="{ inputValue, inputEvents }">

                Дата:
                <input class="form-control" :value="inputValue.start" v-on="inputEvents.start" />
                —
                <input class="form-control" :value="inputValue.end" v-on="inputEvents.end" />

            </template>
          </DatePicker>

            <DateSelector :date_type.sync="values.dateType" :values.sync="values.dateValues" />

            Сформировать отчёт

            Диапазон дат должен быть не больше двух месяцев

</template>


fix: Video Links in learn section

fix: Video Links in learn section

<template>

		{{ label || __(name) }}

			{{ label || __(name) }}

{{ __("You need to create these first: ") }}

{{ __(incomplete_dependencies.join(", ")) }}

</template>


use slider for expert mode toggle

use slider for expert mode toggle

<template>

                <button type="button" class="btn btn-outline-secondary" v-show="showFilterOptions" @click="toggleShowFilterOptions()">

                </button>
                Query Options

            <button type="submit" class="btn btn-outline-primary mt-2 col-md-12" form="filter-form">
                 Filter
            </button>
            <form role="form" class="mt-2" id="filter-form" name="filter-form" @submit.prevent="applyFilter()">

                    Apply Changes immediately

                        <input type="checkbox" id="apply-changes-toggle" v-model="instantFilter" />

                    Expert Mode

                        <input type="checkbox" id="apply-changes-toggle" v-model="expertMode" />

                    Table

                        <multiselect
                            label="label"
                            track-by="name"
                            v-model="origin"
                            :allowEmpty="false"
                            :closeOnSelect="true"
                            :hideSelected="true"
                            :multiple="false"
                            :options="origins"
                            @input="updateOrigin">
                        </multiselect>

                        Query

                        <textarea class="form-control" rows="6" v-model="query" :disabled="true" :readonly="true"></textarea>

            </form>

                Filters

                    Hides {{ hiddenByFilter }} results

                TODO

                    Expert Mode is still WIP

Active Order Rules

                        {{order.col}} {{order.dir}}

                    No order rules

                            <draggable
                                class="h-100 scroll-y-auto"
                                v-model="filters.active.groups[i]"
                                :key="i"
                                :options="{group: 'filters'}"
                                @add="filterMoved"
                                @end="drag=false"
                                @start="drag=true">

                                    {{ filter.name }}

                            </draggable>

                            Add new Group

Inactive

                    <draggable
                        class="h-100 scroll-y-auto"
                        v-model="filters.inactive"
                        :options="{group: 'filters'}"
                        @add="filterMoved"
                        @end="drag=false"
                        @start="drag=true">

                            {{ filter.name }}

                    </draggable>

                <button type="button" class="btn btn-outline-secondary" v-show="!showFilterOptions" @click="toggleShowFilterOptions()">

                </button>
                Results {{overallResultCount}}

                Query returned no results or you didn't run the query yet.

                    {{page.from}}-{{page.to}} / {{page.total}}

                             Raw

                             Query Builder

                             Visualization

                             Export

                                        First Page

                                         Previous {{previousResultCount}} results

                                        Next {{nextResultCount}} results

                                        Last Page

                                Metadata Columns

                                    <input type="checkbox" id="metadata-columns-toggle" v-model="showAmbiguous" />

                        <analysis-table
                            :columns="resultColumns"
                            :data="combinedResults"
                            :show-hidden="showAmbiguous"
                            :on-add-filter="addFilter">
                        </analysis-table>

                                        {{ k }}

                                        {{ r[k] }}

                    Visualization

                        Supported export formats are

CSV

XLSX

JSON

PDF

                        <button type="button" class="btn btn-default" @click="exportRows('csv', true)">
                            Export
                        </button>
                        <button type="button" class="btn btn-default dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                            Toggle Dropdown
                        </button>

                                As CSV (All: {{page.total}} entries)

                                As XLSX (All: {{page.total}} entries)

                                As JSON (All: {{page.total}} entries)

                                As PDF (All: {{page.total}} entries)

                                As CSV (Current Selection: {{page.from}}-{{page.to}})

                                As XLSX (Current Selection: {{page.from}}-{{page.to}})

                                As JSON (Current Selection: {{page.from}}-{{page.to}})

                                As PDF (Current Selection: {{page.from}}-{{page.to}})

</template>

<template>

                <button type="button" class="btn btn-outline-secondary" v-show="showFilterOptions" @click="toggleShowFilterOptions()">

                </button>
                Query Options

            <button type="submit" class="btn btn-outline-primary mt-2 col-md-12" form="filter-form">
                 Filter
            </button>
            <form role="form" class="mt-2" id="filter-form" name="filter-form" @submit.prevent="applyFilter()">

                    Apply Changes immediately

                        <input type="checkbox" id="apply-changes-toggle" v-model="instantFilter" />

                    Table

                        <multiselect
                            label="label"
                            track-by="name"
                            v-model="origin"
                            :allowEmpty="false"
                            :closeOnSelect="true"
                            :hideSelected="true"
                            :multiple="false"
                            :options="origins"
                            @input="updateOrigin">
                        </multiselect>

                    <input type="checkbox" class="form-check-input" id="expert-mode-toggle" v-model="expertMode" @change="onToggleExpertMode" />
                    Expert Mode

                        Query

                        <textarea class="form-control" rows="6" v-model="query" :disabled="true" :readonly="true"></textarea>

            </form>

                Filters

                    Hides {{ hiddenByFilter }} results

                TODO

                    Expert Mode is still WIP

Active Order Rules

                        {{order.col}} {{order.dir}}

                    No order rules

                            <draggable
                                class="h-100 scroll-y-auto"
                                v-model="filters.active.groups[i]"
                                :key="i"
                                :options="{group: 'filters'}"
                                @add="filterMoved"
                                @end="drag=false"
                                @start="drag=true">

                                    {{ filter.name }}

                            </draggable>

                            Add new Group

Inactive

                    <draggable
                        class="h-100 scroll-y-auto"
                        v-model="filters.inactive"
                        :options="{group: 'filters'}"
                        @add="filterMoved"
                        @end="drag=false"
                        @start="drag=true">

                            {{ filter.name }}

                    </draggable>

                <button type="button" class="btn btn-outline-secondary" v-show="!showFilterOptions" @click="toggleShowFilterOptions()">

                </button>
                Results {{overallResultCount}}

                Query returned no results or you didn't run the query yet.

                    {{page.from}}-{{page.to}} / {{page.total}}

                             Raw

                             Query Builder

                             Visualization

                             Export

                                        First Page

                                         Previous {{previousResultCount}} results

                                        Next {{nextResultCount}} results

                                        Last Page

                                Metadata Columns

                                    <input type="checkbox" id="metadata-columns-toggle" v-model="showAmbiguous" />

                        <analysis-table
                            :columns="resultColumns"
                            :data="combinedResults"
                            :show-hidden="showAmbiguous"
                            :on-add-filter="addFilter">
                        </analysis-table>

                                        {{ k }}

                                        {{ r[k] }}

                    Visualization

                        Supported export formats are

CSV

XLSX

JSON

PDF

                        <button type="button" class="btn btn-default" @click="exportRows('csv', true)">
                            Export
                        </button>
                        <button type="button" class="btn btn-default dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                            Toggle Dropdown
                        </button>

                                As CSV (All: {{page.total}} entries)

                                As XLSX (All: {{page.total}} entries)

                                As JSON (All: {{page.total}} entries)

                                As PDF (All: {{page.total}} entries)

                                As CSV (Current Selection: {{page.from}}-{{page.to}})

                                As XLSX (Current Selection: {{page.from}}-{{page.to}})

                                As JSON (Current Selection: {{page.from}}-{{page.to}})

                                As PDF (Current Selection: {{page.from}}-{{page.to}})

</template>


add max width for traceback

add max width for traceback

<template>

        {{ item.time | datetime }}

          Call

          Return

          {{ item | expr }}

                  {{ bt.address }}
                  {{ bt.moduleName }}!{{ bt.name }}

</template>


Convert formattedPercentage back to Number

<template>

      <mat-svg
        v-if="!taskHasFailed"
        category="action"
        name="autorenew"
        class="inprogress"
      />
      <mat-svg
        v-else
        category="alert"
        name="error"
        class="error"
      />

        {{ stageText }}

      <ui-progress-linear
        class="progress-linear"
        :progress="formattedPercentage"
        :type="progressBarType"
        color="primary"
      />

      {{ progressMessage }}

      <k-button
        :text="taskHasCompleted ? $tr('close') : $tr('cancel')"
        :primary="false"
        :raised="false"
        @click="endTask()"
      />

</template>


Let the application reload after sync'ing the library

<template>

Last parsed song

{{song}}

      <button type="button" @click.prevent="stopSync">{{buttonText}}

</template>


subtle button fix

subtle button fix

<template>
  <component
    :is="href ? 'a' : 'button'"
    v-on="href ? {} : {click: click}"
    :href="href.length ? href : false"
    class="apos-button"
    :class="modifierClass"
    :tabindex="tabindex"
    :disabled="isDisabled"
    :type="buttonType"
    :role="role"
    v-tooltip="tooltip"
    :id="attrs.id ? attrs.id : id"
    v-bind="attrs"
  >
    <transition name="fade">
      <AposSpinner :color="spinnerColor" v-if="busy" />
    </transition>

      <AposIndicator
        v-if="icon"
        :icon="icon"
        :icon-size="iconSize"
        class="apos-button__icon"
        fill-color="currentColor"
      />

        {{ label }}

  </component>
</template>


Pass viewMode back to navbar on change

Pass viewMode back to navbar on change

<template>

    <navbar v-model="navbarInput"></navbar>

        <editor
          v-model="mdContent"
        ></editor>

        <viewer
          :editor-content="mdContent"
          :file-format="fileFormat"
          >
        </viewer>

</template>


fixed bug

fixed bug

<template>

        <search
            @result-click="resultClick"
            @on-change="getResult"
            @on-cancel="onCancel"
            v-model="keyword"
            :results="results"
            position="absolute"
            auto-scroll-to-top
            placeholder="可按姓名，学号，拼音搜索"
            @on-focus="onFocus"
            ref="search">
        </search>
        <div class="tip" v-if="Object.getOwnPropertyNames(studentInfo).length <= 1">
            输入学生姓名或学号以修改

        <template v-else>
            <group>
                <cell title="学号" :value="studentInfo.student_num"></cell>
                <cell title="姓名" :value="studentInfo.student_name"></cell>
                <cell title="班级" :value="studentInfo.department_class"></cell>
                <cell title="身份证" :value="studentInfo.id_card_with_mosaic"></cell>
                <x-switch ref="isAllowReportSwitch" title="允许报到" v-model="allowReport"></x-switch>
                <x-switch ref="isReportSwitch" v-if="allowReport" title="是否报到" v-model="isReport"></x-switch>
                <cell title="报到时间" v-if="isReport && allowReport" :value="studentInfo.report_at"></cell>
                <cell title="到宿时间" v-if="isReport && allowReport" :value="studentInfo.arrive_dorm_at != null ? studentInfo.arrive_dorm_at : '尚未到宿'"></cell>
            </group>
            <box gap="10px" v-if="isReport && allowReport">
                <load-more style="margin-bottom: 10px;" tip="可选宿舍" :show-loading="false" background-color="#fbf9fe"></load-more>
                <checker
                    v-model="selectedDormId"
                    default-item-class="dorm_select_item"
                    selected-item-class="dorm_select_item_selected"
                >

                        <checker-item :value="dorm.id">

{{dorm.galleryful}}人间

                                {{dorm.dorm_num}}
                                剩余：{{dorm.galleryful_in_this_class - dorm.already_selected_num_in_this_class}}/{{dorm.galleryful_in_this_class}}

                        </checker-item>

                </checker>
            </box>
        </template>

</template>

<template>

        <search
            @result-click="resultClick"
            @on-change="getResult"
            v-model="keyword"
            :results="results"
            position="absolute"
            auto-scroll-to-top
            placeholder="可按姓名，学号，拼音搜索"
            @on-focus="onFocus"
            ref="search">
        </search>
        <div class="tip" v-if="Object.getOwnPropertyNames(studentInfo).length <= 1">
            输入学生姓名或学号以修改

        <template v-else>
            <group>
                <cell title="学号" :value="studentInfo.student_num"></cell>
                <cell title="姓名" :value="studentInfo.student_name"></cell>
                <cell title="班级" :value="studentInfo.department_class"></cell>
                <cell title="身份证" :value="studentInfo.id_card_with_mosaic"></cell>
                <x-switch ref="isAllowReportSwitch" title="允许报到" v-model="allowReport"></x-switch>
                <x-switch ref="isReportSwitch" v-if="allowReport" title="是否报到" v-model="isReport"></x-switch>
                <cell title="报到时间" v-if="isReport && allowReport" :value="studentInfo.report_at"></cell>
                <cell title="到宿时间" v-if="isReport && allowReport" :value="studentInfo.arrive_dorm_at != null ? studentInfo.arrive_dorm_at : '尚未到宿'"></cell>
            </group>
            <box gap="10px" v-if="isReport && allowReport">
                <load-more style="margin-bottom: 10px;" tip="可选宿舍" :show-loading="false" background-color="#fbf9fe"></load-more>
                <checker
                    v-model="selectedDormId"
                    default-item-class="dorm_select_item"
                    selected-item-class="dorm_select_item_selected"
                >

                        <checker-item :value="dorm.id">

{{dorm.galleryful}}人间

                                {{dorm.dorm_num}}
                                剩余：{{dorm.galleryful_in_this_class - dorm.already_selected_num_in_this_class}}/{{dorm.galleryful_in_this_class}}

                        </checker-item>

                </checker>
            </box>
        </template>

</template>


Invalidate negative numbers

Invalidate negative numbers

<template>
    <transition name="fade">

{{ coin.name + ' (' + coin.code + ')' }}

BTC: 1

USD: {{ coin.price }}

Apx. Value: {{ value() }}

            <input :class="{ 'tracker-input' : true, 'input-danger': hasError }" type="number" v-model="amount" value="0">

Source: {{ coin.provider }}

    </transition>
</template>


form to post done

form to post done

<template lang="html">

						Posts
						Personalizar
						Usuarios
						Configurações

			<form class="form" v-on:submit.prevent>

					Titulo
					<input class="form-control" v-model="post.title">

					Descrição curta
					<textarea class="form-control" rows="3" v-model="post.previous"></textarea>

					Conteudo Principal
					<textarea class="form-control" rows="10" v-model="post.text"></textarea>

				<button class="btn btn-default" v-on:click="storePost">Salvar</button>
			</form>

					Imagem prévia
					<input type="file" name="image" class="form-control">

					Imagem Principal
					<input type="file" name="image" class="form-control">

					Imagem final
					<input type="file" name="image" class="form-control">

					Categoria
					<input class="form-control" v-model="post.categoria">

				Status
				<select class="form-control" v-model="post.status">
					<option>Oculto</option>
					<option>Visível</option>
				</select>

</template>

<template lang="html">

						Posts
						Personalizar
						Usuarios
						Configurações

			<form class="form">

					Titulo
					<input class="form-control">

					Descrição curta
					<textarea class="form-control" rows="3"></textarea>

					Conteudo Principal
					<textarea class="form-control" rows="10"></textarea>

				<button class="btn btn-default">Salvar</button>
			</form>

					Imagem prévia
					<input type="file" name="image" class="form-control">

					Imagem Principal
					<input type="file" name="image" class="form-control">

					Imagem final
					<input type="file" name="image" class="form-control">

					Categoria
					<input class="form-control">

				Status
				<select class="form-control">
					<option>Oculto</option>
					<option>Visível</option>
				</select>

</template>


DateTimePicker Options updated

DateTimePicker Options updated

/**
* Created by Christoffer Isenberg on 19-May-16.
*/

<template>

                {{ trans('schedule.start_date') }}

                <input v-model="event.start_date" type="text" name="start_date" id="inputStart_date" class="form-control" required="required" title="">

                {{ trans('schedule.end_date') }}

                <input v-model="event.end_date" type="text" name="start_date" id="inputEnd_date" class="form-control">

                {{ trans('schedule.start_time') }}

                <input v-model="event.start_time" type="text" name="start_time" id="inputStart_time" required="required" class="form-control">

                {{ trans('schedule.end_time') }}

                <input v-model="event.end_time" type="text" name="end_time" id="inputEnd_time" required="required" class="form-control">

</template>


Sneaks in a Register For Class card margin fix.

<template>
  <uw-card
    v-if="student && (!isReady || hasRegisterNotices)"
    :loaded="isReady"
    :errored="isErrored"
    :errored-show="showError"
  >
    <template #card-heading>

        To Register For Classes

    </template>
    <template #card-body>

 0">

    </template>
  </uw-card>
</template>


Misc UI fixes

Misc UI fixes

- Disabled autocompletion on quicksearch fields (apparently a thing on mobile)
- Restore the menu to its initial state on page transitions.

<template>
	<v-app id="demyo">
		<v-navigation-drawer
			v-if="!$vuetify.breakpoint.smAndDown"
			v-model="displayDetailsPane" right app clipped
			width="33vw" mobile-breakpoint="sm"
			:disable-resize-watcher="true"
		>
			<portal-target name="appSidePane" />
		</v-navigation-drawer>

		<v-navigation-drawer v-model="mainMenu" app temporary width="20em">
			<v-list class="l-DefaultLayout__menuList">
				<v-list-group v-if="readerLoaded">
					<template #activator>
						<v-list-item-icon>
							<LetterIcon :letter="currentReader.identifyingName[0]" :color="currentReader.colour" />
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ currentReader.identifyingName }}</v-list-item-title>
						</v-list-item-content>
					</template>

					<v-list-item :to="`/readers/${currentReader.id}/favourites`">
						<v-list-item-icon>
							<v-icon>mdi-heart</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.faves') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item :to="`/readers/${currentReader.id}/readingList`">
						<v-list-item-icon>
							<v-icon>mdi-library</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.readingList') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item :to="`/readers/${currentReader.id}/configuration`">
						<v-list-item-icon>
							<v-icon>mdi-cog</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.configuration') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item @click="promptReaderSelection = true">
						<v-list-item-icon>
							<v-icon>mdi-account-convert</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.switch') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item :to="`/readers/`">
						<v-list-item-icon>
							<v-icon>mdi-account-multiple</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.manage') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
				</v-list-group>

				<v-divider />

				<v-list-item id="l-DefaultLayout__menuSearch">
					<v-list-item-content>
						<v-text-field
							ref="menuSearch"
							v-model="quicksearchQuery" clearable hide-details
							autocomplete="off"
							prepend-icon="mdi-magnify" @keyup="performSearch"
							@click:clear="clearSearch" @keydown.enter="enterSearch"
						/>
					</v-list-item-content>
				</v-list-item>

				<v-list-item to="/">
					<v-list-item-icon>
						<v-icon>mdi-home</v-icon>
					</v-list-item-icon>
					<v-list-item-content>
						<v-list-item-title>{{ $t('menu.main.home') }}</v-list-item-title>
					</v-list-item-content>
				</v-list-item>

				<v-list-group v-for="section in menuItems" :key="section.title" v-model="section.active">
					<template #activator>
						<v-list-item-content>
							<v-list-item-title v-text="$t(section.title)" />
						</v-list-item-content>
					</template>

					<v-list-item v-for="item in section.subItems" :key="item.title" :to="item.url" exact>
						<v-list-item-icon>
							<v-icon v-text="item.icon" />
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title v-text="$t(item.title)" />
						</v-list-item-content>
					</v-list-item>
				</v-list-group>
			</v-list>
		</v-navigation-drawer>
		<v-app-bar color="primary" dark app clipped-right>
			<v-app-bar-nav-icon @click.stop="mainMenu = !mainMenu" />
			<v-toolbar-title>{{ pageTitle }}</v-toolbar-title>
			<v-spacer />
			<template v-if="!suppressSearch">
				<v-btn id="l-DefaultLayout__toolbarSearchButton" icon @click="showQuicksearch = true; focus()">
					<v-icon>mdi-magnify</v-icon>
				</v-btn>
				<v-expand-x-transition>

						<v-text-field
							ref="toolbarSearch"
							v-model="quicksearchQuery" clearable hide-details
							autocomplete="off"
							@click:clear="showQuicksearch = false; clearSearch()"
							@blur="blur" @keyup="performSearch" @keydown.enter="enterSearch"
						/>

				</v-expand-x-transition>
			</template>
			<portal-target name="appBarAddons" />
			<portal-target name="appTasks" />
		</v-app-bar>

		<v-main id="l-DefaultLayout__mainContent">

			<v-dialog v-if="$vuetify.breakpoint.smAndDown" v-model="displayDetailsPane">
				<v-card>
					<portal-target name="appSidePane" />
				</v-card>
			</v-dialog>
			<v-container id="l-DefaultLayout__mainContainer" fluid>
				<ReaderSelection
					v-if="requireReaderSelection || promptReaderSelection" :require-selection="requireReaderSelection"
					@cancel="promptReaderSelection = false" @select="promptReaderSelection = false"
				/>
				<v-overlay absolute z-index="4" :value="globalOverlay" class="l-DefaultLayout__overlay">
					<v-progress-circular :indeterminate="true" color="primary" size="96" width="8" />
					{{ $t('core.loading') }}
				</v-overlay>
				<QuickSearchResults
					v-if="isRelevantSearchQuery" :results="quicksearchResults"
					:loading="quicksearchLoading" @click="showQuicksearch = false; clearSearch()"
				/>

					<slot />

				<AppSnackbar :shown="displaySnackbar" :message="snackbarMessage" @close="closeSnackbar" />
			</v-container>
		</v-main>
		<v-footer color="secondary" dark>
			<v-col>
				Demyo "{{ demyoCodename }}"
			</v-col>
		</v-footer>
	</v-app>
</template>

<template>
	<v-app id="demyo">
		<v-navigation-drawer
			v-if="!$vuetify.breakpoint.smAndDown"
			v-model="displayDetailsPane" right app clipped
			width="33vw" mobile-breakpoint="sm"
			:disable-resize-watcher="true"
		>
			<portal-target name="appSidePane" />
		</v-navigation-drawer>

		<v-navigation-drawer v-model="mainMenu" app temporary width="20em">
			<v-list class="l-DefaultLayout__menuList">
				<v-list-group v-if="readerLoaded">
					<template #activator>
						<v-list-item-icon>
							<LetterIcon :letter="currentReader.identifyingName[0]" :color="currentReader.colour" />
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ currentReader.identifyingName }}</v-list-item-title>
						</v-list-item-content>
					</template>

					<v-list-item :to="`/readers/${currentReader.id}/favourites`">
						<v-list-item-icon>
							<v-icon>mdi-heart</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.faves') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item :to="`/readers/${currentReader.id}/readingList`">
						<v-list-item-icon>
							<v-icon>mdi-library</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.readingList') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item :to="`/readers/${currentReader.id}/configuration`">
						<v-list-item-icon>
							<v-icon>mdi-cog</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.configuration') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item @click="promptReaderSelection = true">
						<v-list-item-icon>
							<v-icon>mdi-account-convert</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.switch') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
					<v-list-item :to="`/readers/`">
						<v-list-item-icon>
							<v-icon>mdi-account-multiple</v-icon>
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title>{{ $t('menu.reader.manage') }}</v-list-item-title>
						</v-list-item-content>
					</v-list-item>
				</v-list-group>

				<v-divider />

				<v-list-item id="l-DefaultLayout__menuSearch">
					<v-list-item-content>
						<v-text-field
							ref="menuSearch"
							v-model="quicksearchQuery" clearable hide-details
							prepend-icon="mdi-magnify" @keyup="performSearch"
							@click:clear="clearSearch" @keydown.enter="enterSearch"
						/>
					</v-list-item-content>
				</v-list-item>

				<v-list-item to="/">
					<v-list-item-icon>
						<v-icon>mdi-home</v-icon>
					</v-list-item-icon>
					<v-list-item-content>
						<v-list-item-title>{{ $t('menu.main.home') }}</v-list-item-title>
					</v-list-item-content>
				</v-list-item>

				<v-list-group v-for="section in menuItems" :key="section.title" v-model="section.active">
					<template #activator>
						<v-list-item-content>
							<v-list-item-title v-text="$t(section.title)" />
						</v-list-item-content>
					</template>

					<v-list-item v-for="item in section.subItems" :key="item.title" :to="item.url" exact>
						<v-list-item-icon>
							<v-icon v-text="item.icon" />
						</v-list-item-icon>
						<v-list-item-content>
							<v-list-item-title v-text="$t(item.title)" />
						</v-list-item-content>
					</v-list-item>
				</v-list-group>
			</v-list>
		</v-navigation-drawer>
		<v-app-bar color="primary" dark app clipped-right>
			<v-app-bar-nav-icon @click.stop="mainMenu = !mainMenu" />
			<v-toolbar-title>{{ pageTitle }}</v-toolbar-title>
			<v-spacer />
			<template v-if="!suppressSearch">
				<v-btn id="l-DefaultLayout__toolbarSearchButton" icon @click="showQuicksearch = true; focus()">
					<v-icon>mdi-magnify</v-icon>
				</v-btn>
				<v-expand-x-transition>

						<v-text-field
							ref="toolbarSearch"
							v-model="quicksearchQuery" clearable hide-details
							@click:clear="showQuicksearch = false; clearSearch()"
							@blur="blur" @keyup="performSearch" @keydown.enter="enterSearch"
						/>

				</v-expand-x-transition>
			</template>
			<portal-target name="appBarAddons" />
			<portal-target name="appTasks" />
		</v-app-bar>

		<v-main id="l-DefaultLayout__mainContent">

			<v-dialog v-if="$vuetify.breakpoint.smAndDown" v-model="displayDetailsPane">
				<v-card>
					<portal-target name="appSidePane" />
				</v-card>
			</v-dialog>
			<v-container id="l-DefaultLayout__mainContainer" fluid>
				<ReaderSelection
					v-if="requireReaderSelection || promptReaderSelection" :require-selection="requireReaderSelection"
					@cancel="promptReaderSelection = false" @select="promptReaderSelection = false"
				/>
				<v-overlay absolute z-index="4" :value="globalOverlay" class="l-DefaultLayout__overlay">
					<v-progress-circular :indeterminate="true" color="primary" size="96" width="8" />
					{{ $t('core.loading') }}
				</v-overlay>
				<QuickSearchResults
					v-if="isRelevantSearchQuery" :results="quicksearchResults"
					:loading="quicksearchLoading" @click="showQuicksearch = false; clearSearch()"
				/>

					<slot />

				<AppSnackbar :shown="displaySnackbar" :message="snackbarMessage" @close="closeSnackbar" />
			</v-container>
		</v-main>
		<v-footer color="secondary" dark>
			<v-col>
				Demyo "{{ demyoCodename }}"
			</v-col>
		</v-footer>
	</v-app>
</template>


remove txhash from mutationlist show localized data header

<template>

{{ formatDate(group.date) }}

          <fa-icon :icon="['fal', mutationIcon(mutation)]" />

{{ formatTime(mutation.timestamp) }}

{{ formatAmount(mutation.change) }}

</template>

<template>

{{ formatDate(group.date) }}

          <fa-icon :icon="['fal', mutationIcon(mutation)]" />

{{ formatTime(mutation.timestamp) }}

{{ mutation.txHash }}

{{ formatAmount(mutation.change) }}

</template>


Renderer height fixed in IE 10

Renderer height fixed in IE 10

<template>

  <core-base>

      <error-page class='error' v-show='error'></error-page>
      <side-nav class='nav'></side-nav>

        <button class='search-btn' :class="{ active: searchOpen }" @click='toggleSearch'>
          <svg height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
            <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
            <path d="M0 0h24v24H0z" fill="none"></path>
          </svg>
        </button>

        <explore-page v-if='showExplorePage'></explore-page>
        <content-page v-if='showContentPage'></content-page>
        <learn-page v-if='showLearnPage'></learn-page>
        <scratchpad-page v-if='showScratchpadPage'></scratchpad-page>

        <search-widget
          class='search-pane'
          :show-topics="exploreMode">
        </search-widget>

    <router-view></router-view>

  </core-base>

</template>


docs(v-card): update .headline with .text-h5 (#13411)

<template>
  <v-card
    max-width="400"
    class="mx-auto"
  >
    <v-system-bar
      color="pink darken-2"
      dark
    >
      <v-spacer></v-spacer>

      <v-icon>mdi-window-minimize</v-icon>

      <v-icon>mdi-window-maximize</v-icon>

      <v-icon>mdi-close</v-icon>
    </v-system-bar>

    <v-app-bar
      dark
      color="pink"
    >
      <v-app-bar-nav-icon></v-app-bar-nav-icon>

      <v-toolbar-title>My Music</v-toolbar-title>

      <v-spacer></v-spacer>

      <v-btn icon>
        <v-icon>mdi-magnify</v-icon>
      </v-btn>
    </v-app-bar>

    <v-container>
      <v-row dense>
        <v-col cols="12">
          <v-card
            color="#385F73"
            dark
          >
            <v-card-title class="text-h5">
              Unlimited music now
            </v-card-title>

            <v-card-subtitle>Listen to your favorite artists and albums whenever and wherever, online and offline.</v-card-subtitle>

            <v-card-actions>
              <v-btn text>
                Listen Now
              </v-btn>
            </v-card-actions>
          </v-card>
        </v-col>

        <v-col
          v-for="(item, i) in items"
          :key="i"
          cols="12"
        >
          <v-card
            :color="item.color"
            dark
          >

                <v-card-title
                  class="text-h5"
                  v-text="item.title"
                ></v-card-title>

                <v-card-subtitle v-text="item.artist"></v-card-subtitle>

                <v-card-actions>
                  <v-btn
                    v-if="item.artist === 'Ellie Goulding'"
                    class="ml-2 mt-3"
                    fab
                    icon
                    height="40px"
                    right
                    width="40px"
                  >
                    <v-icon>mdi-play</v-icon>
                  </v-btn>

                  <v-btn
                    v-else
                    class="ml-2 mt-5"
                    outlined
                    rounded
                    small
                  >
                    START RADIO
                  </v-btn>
                </v-card-actions>

              <v-avatar
                class="ma-3"
                size="125"
                tile
              >
                <v-img :src="item.src"></v-img>
              </v-avatar>

          </v-card>
        </v-col>
      </v-row>
    </v-container>
  </v-card>
</template>

<template>
  <v-card
    max-width="400"
    class="mx-auto"
  >
    <v-system-bar
      color="pink darken-2"
      dark
    >
      <v-spacer></v-spacer>

      <v-icon>mdi-window-minimize</v-icon>

      <v-icon>mdi-window-maximize</v-icon>

      <v-icon>mdi-close</v-icon>
    </v-system-bar>

    <v-app-bar
      dark
      color="pink"
    >
      <v-app-bar-nav-icon></v-app-bar-nav-icon>

      <v-toolbar-title>My Music</v-toolbar-title>

      <v-spacer></v-spacer>

      <v-btn icon>
        <v-icon>mdi-magnify</v-icon>
      </v-btn>
    </v-app-bar>

    <v-container>
      <v-row dense>
        <v-col cols="12">
          <v-card
            color="#385F73"
            dark
          >
            <v-card-title class="headline">
              Unlimited music now
            </v-card-title>

            <v-card-subtitle>Listen to your favorite artists and albums whenever and wherever, online and offline.</v-card-subtitle>

            <v-card-actions>
              <v-btn text>
                Listen Now
              </v-btn>
            </v-card-actions>
          </v-card>
        </v-col>

        <v-col
          v-for="(item, i) in items"
          :key="i"
          cols="12"
        >
          <v-card
            :color="item.color"
            dark
          >

                <v-card-title
                  class="headline"
                  v-text="item.title"
                ></v-card-title>

                <v-card-subtitle v-text="item.artist"></v-card-subtitle>

                <v-card-actions>
                  <v-btn
                    v-if="item.artist === 'Ellie Goulding'"
                    class="ml-2 mt-3"
                    fab
                    icon
                    height="40px"
                    right
                    width="40px"
                  >
                    <v-icon>mdi-play</v-icon>
                  </v-btn>

                  <v-btn
                    v-else
                    class="ml-2 mt-5"
                    outlined
                    rounded
                    small
                  >
                    START RADIO
                  </v-btn>
                </v-card-actions>

              <v-avatar
                class="ma-3"
                size="125"
                tile
              >
                <v-img :src="item.src"></v-img>
              </v-avatar>

          </v-card>
        </v-col>
      </v-row>
    </v-container>
  </v-card>
</template>


2.16     + Статистика

2.16
    + Статистика

<template>

      Модель:
      <select v-model="model">
        <option v-for="m in models">{{m}}</option>
      </select>

      Отправить в задание на синхронизацию: с <input v-model.number="from" type="number" min="0"
                                                     :disabled="model === '' || insend"/>
      по <input v-model.number="to" :disabled="model === '' || insend" type="number" min="0"/>
      <button :disabled="model === '' || insend" @click="do_send">⇛</button>

      <progress :max="Math.max(to-from, 1)" :value="csended" style="width: 100%;"></progress>

Отправка {{csended}}/{{Math.max(to-from, 1)}} ({{Math.round(csended/(Math.max(to-from,
        1))*100)}}%)

Исполнение задания можно проверить в RabbitMQ Management или в приложении-интеграторе

</template>


Missing usercount

Missing usercount

<template>

{{ $tr('exercises', {count: exercisecount}) }} ● {{ $tr('contents', {count: contentcount}) }}

{{ usercount }} Users

{{ $tr('exercises', {count: exercisecount}) }}

        <progress-bar v-if="exerciseprogress !== undefined" :progress="exerciseprogress"></progress-bar>

{{ $tr('na') }}

{{ $tr('contents', {count: contentcount}) }}

        <progress-bar v-if="contentprogress !== undefined" :progress="contentprogress"></progress-bar>

{{ $tr('na') }}

{{ $tr('lastActive') }}:

 {{ lastActiveDate }}

        <progress-icon :progress="1" :kind="kind" :showtext="true"></progress-icon>

{{ completioncount }}/{{ usercount }} {{ $tr('mastered') }}

{{ $tr('lastActive') }}: {{ lastActiveDate }}

        <progress-icon :progress="contentprogress" :kind="kind" :showtext="true"></progress-icon>

          {{ completioncount }}/{{ usercount }}
          {{ $tr('watched') }}
          {{ $tr('listened') }}

{{ $tr('lastActive') }}: {{ lastActiveDate }}

        <progress-icon :progress="contentprogress" :kind="kind" :showtext="true"></progress-icon>

{{ completioncount }}/{{ usercount }} {{ $tr('viewed') }}

{{ $tr('lastActive') }}: {{ lastActiveDate }}

</template>

<template>

{{ $tr('exercises', {count: exercisecount}) }} ● {{ $tr('contents', {count: contentcount}) }}

{{ numusers }} Users

{{ $tr('exercises', {count: exercisecount}) }}

        <progress-bar v-if="exerciseprogress !== undefined" :progress="exerciseprogress"></progress-bar>

{{ $tr('na') }}

{{ $tr('contents', {count: contentcount}) }}

        <progress-bar v-if="contentprogress !== undefined" :progress="contentprogress"></progress-bar>

{{ $tr('na') }}

{{ $tr('lastActive') }}:

 {{ lastActiveDate }}

        <progress-icon :progress="1" :kind="kind" :showtext="true"></progress-icon>

{{ completioncount }}/{{ usercount }} {{ $tr('mastered') }}

{{ $tr('lastActive') }}: {{ lastActiveDate }}

        <progress-icon :progress="contentprogress" :kind="kind" :showtext="true"></progress-icon>

          {{ completioncount }}/{{ usercount }}
          {{ $tr('watched') }}
          {{ $tr('listened') }}

{{ $tr('lastActive') }}: {{ lastActiveDate }}

        <progress-icon :progress="contentprogress" :kind="kind" :showtext="true"></progress-icon>

{{ completioncount }}/{{ usercount }} {{ $tr('viewed') }}

{{ $tr('lastActive') }}: {{ lastActiveDate }}

</template>


:children_crossing: (categories) Blur clicked delete icon button

<template>

    <category-modal
      :show="showModal"
      :category="selectedCategory"
      :categoryNames="categories.map(c => c.label)"
      @content-update="editCategoryLabel"
      @content-error="showCategoryUpdateError"
      @close-modal="closeModal">
    </category-modal>

    <category-dialog
      backgroundColor="#ef494f"
      class="category-dialog"
      :show="showDialog"
      @close-dialog="closeDialog">

Delete category

        Do you really want to delete "{{ selectedCategoryLabel }}"?

      <button class="default" slot="cancel" @click="closeDialog">
        Cancel
      </button>
      <button class="warning" slot="confirm" @click="confirmDeleteCategory">
        Delete category
      </button>
    </category-dialog>

    <app-header :back="true" backPath="settings">

Manage Categories

    </app-header>

      <form class="add-category" @submit.prevent="submitNewCategory">

          <input required
            type="text"
            id="category-name"
            placeholder="Category"
            v-model="categoryName" />

        <button class="circle" aria-label="Add category">
          <feather-plus />
        </button>
      </form>

          <li v-for="(category, index) in categories" :key="`category-${index}`">

              {{ category.label }}

              <button
                class="icon inverse"
                aria-label="Edit category"
                @click="openCategoryModal(category)">
                <feather-edit />
              </button>
              <button
                class="icon inverse"
                aria-label="Delete category"
                @click="openCategoryDialog($event, category)">
                <feather-trash />
              </button>

            You don't have any categories yet.

</template>

<template>

    <category-modal
      :show="showModal"
      :category="selectedCategory"
      :categoryNames="categories.map(c => c.label)"
      @content-update="editCategoryLabel"
      @content-error="showCategoryUpdateError"
      @close-modal="closeModal">
    </category-modal>

    <category-dialog
      backgroundColor="#ef494f"
      class="category-dialog"
      :show="showDialog"
      @close-dialog="closeDialog">

Delete category

        Do you really want to delete "{{ selectedCategoryLabel }}"?

      <button class="default" slot="cancel" @click="closeDialog">
        Cancel
      </button>
      <button class="warning" slot="confirm" @click="confirmDeleteCategory">
        Delete category
      </button>
    </category-dialog>

    <app-header :back="true" backPath="settings">

Manage Categories

    </app-header>

      <form class="add-category" @submit.prevent="submitNewCategory">

          <input required
            type="text"
            id="category-name"
            placeholder="Category"
            v-model="categoryName" />

        <button class="circle" aria-label="Add category">
          <feather-plus />
        </button>
      </form>

          <li v-for="(category, index) in categories" :key="`category-${index}`">

              {{ category.label }}

              <button
                class="icon inverse"
                aria-label="Edit category"
                @click="openCategoryModal(category)">
                <feather-edit />
              </button>
              <button
                class="icon inverse"
                aria-label="Delete category"
                @click="openCategoryDialog(category)">
                <feather-trash />
              </button>

            You don't have any categories yet.

</template>


:art:

:art:

<template>

%fa:chalkboard .fw%%i18n:@dashboard%

%fa:users .fw%%i18n:@users%

			<x-dashboard/>

			<x-suspend-user/>
			<x-unsuspend-user/>
			<x-verify-user/>

</template>


Bug 710 - Misc Module stays prevalent when first clicked

<template>

                    <button class="nav-link"
                            id="organi`sation-contacts-tab"
                            data-bs-toggle="tab"
                            data-bs-target="#organisation-contacts"
                            type="button"
                            role="tab"
                            aria-controls="home"
                            aria-selected="true"
                    >
                        Organisation Contacts
                    </button>

                    <button class="nav-link"
                            id="document-uploads-tab"
                            data-bs-toggle="tab"
                            data-bs-target="#document-uploads"
                            type="button"
                            role="tab"
                            aria-controls="home"
                            aria-selected="true"
                    >
                        Document Uploads
                    </button>

                    <button class="nav-link"
                            id="associated-objects-tab"
                            data-bs-toggle="tab"
                            data-bs-target="#associated-objects"
                            type="button"
                            role="tab"
                            aria-controls="home"
                            aria-selected="true"
                    >
                        Associated Objects
                    </button>

                    <button class="nav-link"
                            id="misc-modules-tab"
                            data-bs-toggle="tab"
                            data-bs-target="#misc-modules"
                            type="button"
                            role="tab"
                            aria-controls="home"
                            aria-selected="true">Misc
                    </button>

 Contacts

                        Below are a list of contacts who are connected to this organisation.

                    <customers-list-module v-bind:customer-results="customerResults"
                    ></customers-list-module>

                            <button class="btn btn-primary save-changes"
                                    v-on:click="addNewContact"
                            >
                                Add Contact
                            </button>

                    <documents-module v-bind:destination="destination"
                                      v-bind:location-id="locationId"
                    ></documents-module>

                    <associated-objects v-bind:destination="destination"
                                        v-bind:location-id="locationId"
                    ></associated-objects>

                    <misc-module v-bind:destination="destination"
                                 v-bind:location-id="locationId"
                    ></misc-module>

        <new-customer-modal v-bind:organisation-id="locationId"
                            v-bind:title-list="titleList"
        ></new-customer-modal>

</template>

<template>

                    Organisation Contacts

                    Document Uploads

                    Associated Objects

                    Misc

 Contacts

                        Below are a list of contacts who are connected to this organisation.

                    <customers-list-module v-bind:customer-results="customerResults"
                    ></customers-list-module>

                            <button class="btn btn-primary save-changes"
                                    v-on:click="addNewContact"
                            >
                                Add Contact
                            </button>

                    <documents-module v-bind:destination="destination"
                                      v-bind:location-id="locationId"
                    ></documents-module>

                    <associated-objects v-bind:destination="destination"
                                        v-bind:location-id="locationId"
                    ></associated-objects>

                    <misc-module v-bind:destination="destination"
                                 v-bind:location-id="locationId"
                    ></misc-module>

        <new-customer-modal v-bind:organisation-id="locationId"
                            v-bind:title-list="titleList"
        ></new-customer-modal>

</template>


Fix inline version error

Fix inline version error

fixes #624

<template>

        <transition name="package__hint">

                <slot name="hint">
                    {{ hintClose }}

                        {{ hint }}

                </slot>

        </transition>

            <package-logo class="package__icon" :src="logo"/>

                    {{ title }}
                    {{ badge.text }}

{{ description }}

                    <slot name="additional"/>

                <slot name="release">

                </slot>

            <fieldset class="package__actions">
                <slot name="actions">

                </slot>
            </fieldset>

        <slot name="features"/>

</template>


Fix interface reloading not happening while the library was done synchronizing.

<template>

Last parsed song

{{song}}

      <button type="button" @click.prevent="stopSync">{{buttonText}}

</template>


Link KDS issue

Link KDS issue

<template>

    <KCheckbox
      v-if="showSelectAllCheckbox"
      :label="$tr('selectAllLabel')"
      :showLabel="true"
      :checked="allAreSelected"
      :disabled="disabled || !users || users.length === 0"
      class="select-all"
      :style="{ color: this.$themeTokens.annotation }"
      data-test="selectAllCheckbox"
      @change="selectAll($event)"
    />
    <CoreTable>
      <template #headers>

            {{ $tr('selectUserBy') }}

            {{ coreString('fullNameLabel') }}

            {{ $tr('role') }}

          {{ coreString('usernameLabel') }}

          {{ infoDescriptor }}

        <template v-if="showDemographicInfo">

            {{ coreString('identifierLabel') }}
            <CoreInfoIcon
              class="tooltip"
              :iconAriaLabel="coreString('identifierAriaLabel')"
              :tooltipText="coreString('identifierTooltip')"
            />

            {{ coreString('genderLabel') }}

            {{ coreString('birthYearLabel') }}

        </template>

            {{ coreString('userActionsColumnHeader') }}

      </template>

      <template #tbody>

              <KCheckbox
                v-if="selectable && enableMultipleSelection"
                :disabled="disabled"
                :checked="userIsSelected(user.id)"
                class="user-checkbox"
                data-test="userCheckbox"
                @change="selectUser(user.id, $event)"
              >
                <KLabeledIcon
                  :icon="isCoach ? 'coach' : 'person'"
                  :label="user.full_name"
                  data-test="fullName"
                />
                <UserTypeDisplay
                  aria-hidden="true"
                  :userType="user.kind"
                  :omitLearner="true"
                  class="role-badge"
                  data-test="userRoleBadge"
                  :style="{
                    color: $themeTokens.textInverted,
                    backgroundColor: $themeTokens.annotation,
                  }"
                />
              </KCheckbox>

              <KRadioButton
                v-else-if="selectable && !enableMultipleSelection"
                :disabled="disabled"
                :value="user.id"
                :currentValue="firstSelectedUser"
                :label="''"
                data-test="userRadioButton"
                @change="selectSingleUser(user.id)"
              >

                <KLabeledIcon
                  :icon="isCoach ? 'coach' : 'person'"
                  :label="user.full_name"
                  data-test="fullName"
                  :style="{ color: $themeTokens.text }"
                />
                <UserTypeDisplay
                  aria-hidden="true"
                  :userType="user.kind"
                  :omitLearner="true"
                  class="role-badge"
                  data-test="userRoleBadge"
                  :style="{
                    color: $themeTokens.textInverted,
                    backgroundColor: $themeTokens.annotation,
                  }"
                />
              </KRadioButton>
              <template v-else>
                <KLabeledIcon
                  :icon="isCoach ? 'coach' : 'person'"
                  :label="user.full_name"
                  data-test="fullName"
                />
                <UserTypeDisplay
                  aria-hidden="true"
                  :userType="user.kind"
                  :omitLearner="true"
                  class="role-badge"
                  data-test="userRoleBadge"
                  :style="{
                    color: $themeTokens.textInverted,
                    backgroundColor: $themeTokens.annotation,
                  }"
                />
              </template>

              {{ user.kind }}

                {{ user.username }}

            <template v-if="showDemographicInfo">

                  {{ user.id_number }}

                <KEmptyPlaceholder v-else />

                <GenderDisplayText :gender="user.gender" />

                <BirthYearDisplayText :birthYear="user.birth_year" />

            </template>

              <slot name="info" :user="user"></slot>

              <slot name="action" :user="user"></slot>

      </template>
    </CoreTable>

      {{ emptyMessage }}

</template>