EBEAST: b/toggle.vue: add <b-toggle/> element

Signed-off-by: Tim Janik <6ec6ff229c4e1c5bbd5933ee92e6c5832ff023bb@gnu.org>

<!-- This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0 -->

<docs>
  # B-TOGGLE
  This element provides a toggle button for boolean inputs.
  It supports the Vue
  [v-model](https://vuejs.org/v2/guide/components-custom-events.html#Customizing-Component-v-model)
  protocol by emitting an `input` event on value changes and accepting inputs via the `value` prop.
  ## Props:
  *value*
  : Boolean, the toggle value to be displayed, the values are `true` or `false`.
  *label*
  : String, label to be displayed inside the toggle button.
  ## Events:
  *input (value)*
  : Value change notification event, the first argument is the new value.
</docs>

<style lang="scss">
  @import 'mixins.scss';
  .b-toggle {
    display: flex; position: relative;
    margin: 0; padding: 0; text-align: center;
    user-select: none;
    height: 5em;
    &:hover { background: #00f; }
  }
  .b-toggle-label {
    flex-grow: 0;
    .b-toggle-off &            	{ background: #444;
      &.b-toggle-press:hover  	{ background: #383838; } }
    .b-toggle-on &             	{ background: #f55;
      &.b-toggle-press:hover	{ background: #f33; } }
  }
</style>

<!-- NOTE: This implementation assumes the HTML embeds etoggle.svg -->

<template>
  <div    class="b-toggle" ref="btoggle" :style="style (1)"
	  data-tip="**CLICK** Toggle Value" >
    <div  class="b-toggle-label" ref="button" @pointerdown="pointerdown" @dblclick="dblclick" >
      {{ label }}
    </div>
  </div>
</template>

<script>
export default {
  name: 'b-toggle',
  props: { value: { default: false },
	   label: { default: "Toggle" }, },
  data: () => ({
    value_: 0,
    buttondown_: false,
  }),
  beforeDestroy () {
    window.removeEventListener ('pointerup', this.pointerup);
  },
  methods: {
    style (div = 0) {
      return ""; // FIXME
    },
    dom_update() {
      if (!this.$el) // we need a second Vue.render() call for DOM alterations
	return this.$forceUpdate();
      this.value_ = this.value;
      if (this.value_)
	{
	  this.$el.classList.add ('b-toggle-on');
	  this.$el.classList.remove ('b-toggle-off');
	}
      else
	{
	  this.$el.classList.remove ('b-toggle-on');
	  this.$el.classList.add ('b-toggle-off');
	}
    },
    emit_value (v) {
      this.$emit ('input', v);
    },
    dblclick (ev) {
      // prevent double-clicks from propagating, since we always
      // handled it as single click already
      ev.preventDefault();
      ev.stopPropagation();
    },
    pointerdown (ev) {
      // trigger only on primary button press
      if (!this.buttondown_ && ev.buttons == 1)
	{
	  this.buttondown_ = true;
	  this.$refs.button.classList.add ('b-toggle-press');
	  window.addEventListener ('pointerup', this.pointerup);
	  ev.preventDefault();
	  ev.stopPropagation();
	}
    },
    pointerup (ev) {
      window.removeEventListener ('pointerup', this.pointerup);
      this.$refs.button.classList.remove ('b-toggle-press');
      if (this.buttondown_)
	{
	  this.buttondown_ = false;
	  ev.preventDefault();
	  ev.stopPropagation();
	  if (this.$refs.button.matches (':hover'))
	    this.emit_value (!this.value_);
	}
    },
  },
};

</script>

error: pathspec 'ebeast/b/toggle.vue' did not match any file(s) known to git


fix(MdTextarea): fix input event handler not triggering (#1341)

add `onInput` as `input` to listeners

fix #1340

<template>
  <textarea
    class="md-textarea"
    :style="textareaStyles"
    v-model="model"
    v-bind="attributes"
    v-on="listeners"
    @focus="onFocus"
    @blur="onBlur">
  </textarea>
</template>

<script>
  import MdComponent from 'core/MdComponent'
  import MdUuid from 'core/utils/MdUuid'
  import MdFieldMixin from '../MdFieldMixin'

  function calculateContentHeight (el, lineHeight) {
    const origHeight = el.style.height
    const height = el.offsetHeight
    const scrollHeight = el.scrollHeight

    el.style.overflow = 'hidden'

    if (height >= scrollHeight) {
      el.style.height = (height + lineHeight) + 'px'

      if (scrollHeight < el.scrollHeight) {
        el.style.height = origHeight

        return height
      }
    }

    return scrollHeight
  }

  export default new MdComponent({
    name: 'MdTextarea',
    mixins: [MdFieldMixin],
    inject: ['MdField'],
    props: {
      id: {
        type: String,
        default: () => 'md-textarea-' + MdUuid()
      },
      mdAutogrow: Boolean
    },
    computed: {
      listeners () {
        return {
          ...this.$listeners,
          input: this.onInput
        }
      },
      textareaStyles () {
        return {
          height: this.textareaHeight
        }
      }
    },
    methods: {
      getTextAreaLineSize () {
        const style = window.getComputedStyle(this.$el)

        return parseInt(style.lineHeight, 10)
      },
      setTextAreaSize (height) {
        let newHeight = height

        if (!height) {
          const size = this.getTextAreaLineSize()

          newHeight = calculateContentHeight(this.$el, size)
        }

        this.textareaHeight = newHeight + 'px'
      },
      async applyStyles () {
        if (this.mdAutogrow) {
          this.setTextAreaSize(32)
          await this.$nextTick()
          this.setTextAreaSize()
          window.setTimeout(() => {
            this.$el.style.overflow = 'auto'
          }, 10)
        }
      },
      setTextarea () {
        this.MdField.textarea = true
      },
      setAutogrow () {
        this.MdField.autogrow = this.mdAutogrow
      },
      onInput () {
        this.setFieldValue()
        this.applyStyles()
      }
    },
    created () {
      this.setTextarea()
      this.setAutogrow()
    },
    async mounted () {
      await this.$nextTick()
      this.applyStyles()
    },
    beforeDestroy () {
      this.setTextarea(false)
    }
  })
</script>

<template>
  <textarea
    class="md-textarea"
    :style="textareaStyles"
    v-model="model"
    v-bind="attributes"
    v-on="listeners"
    @focus="onFocus"
    @blur="onBlur">
  </textarea>
</template>

<script>
  import MdComponent from 'core/MdComponent'
  import MdUuid from 'core/utils/MdUuid'
  import MdFieldMixin from '../MdFieldMixin'

  function calculateContentHeight (el, lineHeight) {
    const origHeight = el.style.height
    const height = el.offsetHeight
    const scrollHeight = el.scrollHeight

    el.style.overflow = 'hidden'

    if (height >= scrollHeight) {
      el.style.height = (height + lineHeight) + 'px'

      if (scrollHeight < el.scrollHeight) {
        el.style.height = origHeight

        return height
      }
    }

    return scrollHeight
  }

  export default new MdComponent({
    name: 'MdTextarea',
    mixins: [MdFieldMixin],
    inject: ['MdField'],
    props: {
      id: {
        type: String,
        default: () => 'md-textarea-' + MdUuid()
      },
      mdAutogrow: Boolean
    },
    computed: {
      listeners () {
        var l =  {...this.$listeners}
        delete l.input
        return l
      },
      textareaStyles () {
        return {
          height: this.textareaHeight
        }
      }
    },
    methods: {
      getTextAreaLineSize () {
        const style = window.getComputedStyle(this.$el)

        return parseInt(style.lineHeight, 10)
      },
      setTextAreaSize (height) {
        let newHeight = height

        if (!height) {
          const size = this.getTextAreaLineSize()

          newHeight = calculateContentHeight(this.$el, size)
        }

        this.textareaHeight = newHeight + 'px'
      },
      async applyStyles () {
        if (this.mdAutogrow) {
          this.setTextAreaSize(32)
          await this.$nextTick()
          this.setTextAreaSize()
          window.setTimeout(() => {
            this.$el.style.overflow = 'auto'
          }, 10)
        }
      },
      setTextarea () {
        this.MdField.textarea = true
      },
      setAutogrow () {
        this.MdField.autogrow = this.mdAutogrow
      },
      onInput () {
        this.setFieldValue()
        this.applyStyles()
      }
    },
    created () {
      this.setTextarea()
      this.setAutogrow()
    },
    async mounted () {
      await this.$nextTick()
      this.applyStyles()
    },
    beforeDestroy () {
      this.setTextarea(false)
    }
  })
</script>


Changes class to id

Changes class to id

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NathanielDavid/Sumie.git/'


export: remove debug

export: remove debug

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/parksandwildlife/gokart.git/'


Change : game cover resolution 1x

Change : game cover resolution 1x

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Gramatiik/radion-vue.git/'


fix: typo in nofo

fix: typo in nofo

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ICJIA/icjia-gata.git/'


fixes up search ‘clear’ button in IE10

fixes up search ‘clear’ button in IE10

<template>

      <input
        type="search"
        v-el:search
        placeholder="Find content..."
        autocomplete="off"
        v-focus="searchOpen"
        v-model="localSearchTerm"
        id="search"
        name="search"
        @keyup="search() | debounce 500"
        @keydown.esc.prevent="clear()">
      <button class="reset" type="reset" @click="clear()" :style="{ visibility: localSearchTerm ? 'inherit' : 'hidden' }">
        <svg height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
          <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path>
          <path d="M0 0h24v24H0z" fill="none"></path>
        </svg>
      </button>

        {{ message }}

      <card-grid v-if="topics.length && showTopics">
        <topic-card
          v-for="topic in topics"
          class="card"
          :id="topic.id"
          :title="topic.title"
          :ntotal="topic.n_total"
          :ncomplete="topic.n_complete">
        </topic-card>
      </card-grid>

      <card-grid v-if="contents.length">
        <content-card
          v-for="content in contents"
          class="card"
          :title="content.title"
          :thumbnail="content.thumbnail"
          :kind="content.kind"
          :progress="content.progress"
          :id="content.id">
        </content-card>
      </card-grid>

</template>


Project detail route added

Project detail route added

<template>

Projeto

{{ project.title }}

{{ project.description }}

Equipe

                <team-list v-bind:team="project.team"></team-list>

</template>

error: pathspec 'web/assets/js/vue/routes/ProjectView.vue' did not match any file(s) known to git


emit2

emit2

update

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Emberla/vue-test.git/'


fix: CSS breaks when overwritten

fix: CSS breaks when overwritten

<template>

			<BellIcon :type="notification.type"/>

				<CloseIcon @click="deleteNotification(notification.id)"/>

</template>


fix lazy-media figure height

fix lazy-media figure height

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/frontools/magnolia-megaton.git/'


Add new oauth page file

Add new oauth page file

<template>
  <Page class="page--settings">

      <SettingsSidebar class="grid-cell--col4" :userModel="user" :baseUrl="baseUrl" />

        <SettingsTabs></SettingsTabs>
        <router-view></router-view>

  </Page>
</template>

error: pathspec 'lib/assets/javascripts/new-dashboard/pages/Apps/OAuthApps.vue' did not match any file(s) known to git


switch to function short-hand

switch to function short-hand

<template>

      <button v-on:click="downloadContent">Download</button>

      This content is not available.

</template>


vue

vue

  -- fix checkbox

<template>
    <form :class="css.checkbox.root">

                <input type="checkbox" :name="question.name" :value="item.value" v-model="selectedValues" :id="question.inputId + '_' + item.value" :disabled="!isEditMode" />
                {{item.text}}

        <survey-other-choice v-show="question.hasOther && isOtherSelected" :class="css.radiogroup.other" :question="question" :isEditMode="isEditMode" :css="css"/>
    </form>
</template>

<template>
    <form :class="css.checkbox.root">

                <input type="checkbox" :name="question.name" :value="item.value" v-model="question.value" :id="question.inputId + '_' + item.value" :disabled="!isEditMode" />
                {{item.text}}

        <survey-other-choice v-show="question.hasOther && isOtherSelected" :class="css.radiogroup.other" :question="question" :isEditMode="isEditMode" :css="css"/>
    </form>
</template>


Added channel 13 to VendorModel add component.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evercam/evercam-admin.git/'


Added movie url

Added movie url

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starmage/my-movies.git/'


Adds stream contraints, updates reader

Adds stream contraints, updates reader


:tada:添加禁用当天时间的后一天之前的日期例子

:tada:添加禁用当天时间的后一天之前的日期例子

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/dantefung/Front-End.git/'


Add disclaimer

Add disclaimer

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/egoconf/egoconf.git/'


measure: add titles to button widgets

measure: add titles to button widgets


render those results real good

render those results real good

error: pathspec 'src/components/Results.vue' did not match any file(s) known to git


Remove Yahoo, Google login method

Remove Yahoo, Google login method

Signed-off-by: ZhiFeng Hu <abb672b28ca55a560b8a96028ef4fd2c71d0292b@gmail.com>

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lolipos/lolipos.git/'


Change the Default of Resources' Ratio into 1/1/1/3

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/emiru/fsg.git/'


删除不必要的内容，但是使用的slider插件仍然存在不能两次加载的问题，考虑重新选择一个slider插件

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/firery/mirs-web-vue.git/'


Change layout to final one

Change layout to final one


Update document view for dynamic table of contents

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mplusmuseum/mplusmuseum-stories.git/'


注册页面使用验证码插件

注册页面使用验证码插件


Add route component: v-home

Add route component: v-home

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wenkanglin/aldnoah.git/'


Change invisible to hidden to fix wrapping

<template>

    <template v-if="edit && this.$perms.change_entry">

            <select2 id="entry-project"
                     v-model="project"
                     v-bind:options="projects"
                     v-bind:selected="project"></select2>

            <input name="entry-note"
                   type="text"
                   class="form-control form-control-sm"
                   ref="note"
                   placeholder="Note"
                   v-model="note" />

            <input name="entry-duration"
                   type="text"
                   class="form-control form-control-sm text-right font-weight-bold"
                   ref="duration"
                   placeholder="0:00"
                   v-model="duration" />

            <button name="entry-save"
                    class="btn btn-success btn-sm w-100"
                    v-block-during-fetch
                    v-on:click="saveEntry">
                Save
            </button>

    </template>

    <template v-else>

                {{ project_details.client_details.name }}

            {{ project_details.name }}

                {{ task_details.name }}

            {{ note }}

            {{ duration }}

            {{ checkInvoiced(invoiced) }}

        <template v-if="editable">

                <template v-if="this.$perms.change_entry || this.$perms.delete_entry">
                    <button name="entry-menu"
                            class="btn btn-faded btn-sm btn-icon dropdown-toggle"
                            type="button"
                            data-toggle="dropdown"
                            aria-haspopup="true"
                            aria-expanded="false">

                    </button>

                            Edit

                            Restart

                            Delete

                </template>

        </template>
    </template>

</template>


[Logbook] Hooked up quick editor to logbook

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/joshStillerman/NDM.git/'


Don't log any simple answer. Change overflow-x behaviour to allow tooltips to display.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/christianmemije/kolibri-exercise-perseus-plugin.git/'


Update App.vue

Update App.vue

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/KunTengRom/xfrps.git/'


open links in new window

open links in new window

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/aligerum/keyring.git/'


remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/sharkspeed/dororis.git/'


Add function to toggle sidenav and add page title

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/praneetloke/vue-material.git/'


Improve article lazyloading method

Improve article lazyloading method


Revert "删除"

Revert "删除"

This reverts commit ca0db7793930b039d58920e25dc5a41134a6c9c5.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tykgit/tykWarehouse.git/'


Card-list-item updates

Card-list-item updates

<template>

  <router-link class="list-item" :to="link">
    <h2>
      <content-icon :kind="kind"/>
      {{ title }}
    </h2>
  </router-link>

</template>

<script>

  module.exports = {
    props: {
      title: {
        type: String,
        required: true,
      },
      link: {
        type: Object,
        required: true,
      },
      kind: {
        type: String,
        required: true,
      },
    },
  };

</script>

<style lang="stylus" scoped>

  @require '~kolibri.styles.coreTheme'
  @require '../../learn.styl'

  .list-item
    background-color: $core-bg-light
    border-radius: $radius
    display: block
    text-decoration: none
    padding-right: 0.5em
    padding-left: 0.5em
    padding-top: 0.25em
    padding-bottom: 0.25em

  h2
    font-size: 1.1em
    color: $core-text-default

</style>

<template>

  <router-link class="root" :to="link">
    <h2>
      <content-icon :kind="kind"/>
      {{ title }}
    </h2>
  </router-link>

</template>

<script>

  module.exports = {
    props: {
      title: {
        type: String,
        required: true,
      },
      link: {
        type: Object,
        required: true,
      },
      kind: {
        type: String,
        required: true,
      },
    },
  };

</script>

<style lang="stylus" scoped>

  @require '~kolibri.styles.coreTheme'
  @require '../../learn.styl'
  @require 'jeet'

  $min-height = 60px         // min card height

  .root
    position: relative
    display: block
    min-height: 60px
    background-color: $core-bg-light
    border-radius: $radius
    display: table
    width: 100%
    text-decoration: none

  .thumb-wrapper
    position: absolute
    left: 0.4em
    width: $min-height
    height: $min-height
    border-radius: $radius 0 0 $radius

  .text
    position: relative
    width: 100%
    font-size: 0.9rem
    font-weight: bold
    color: $core-text-default
    display: table-row

  .title
    display: table-cell
    width: 100%
    height: $min-height
    padding: 0.8em
    padding-left: $min-height
    vertical-align: middle

</style>


Rename grant sort/filter buttons

Rename grant sort/filter buttons

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ICJIA/icjia-gata.git/'


cleanup - removed dummy component

cleanup - removed dummy component

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/LinusBorg/vue-component-droparea.git/'


Adjust Login.vue with new libs

Adjust Login.vue with new libs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/m31271n/darkness.git/'


clean up unused functions

clean up unused functions

<template>

        {{$tr('tableTitle')}}

        <mat-svg class="icon" category="action" name="search" aria-hidden="true"/>
        <input
          id="search-field"
          :aria-label="$tr('searchText')"
          type="search"
          v-model="searchFilter"
          :placeholder="$tr('searchText')">

        <router-link :to="classEnrollLink" class="table-name">
          <icon-button
          class="enroll-user-button"
          :text="$tr('enrollUsers')"
          :primary="true"/>
        </router-link>

    <user-remove-modal
      v-if="removeUser"
      :classname="className"
      :classid="classId"
      :username="currentUserRemove.username"
      :userid="currentUserRemove.id"
      @close="closeRemoveUserModal"
    />

{{$tr('users')}}

           {{$tr('fullName')}}
           {{$tr('username')}}
           {{$tr('role')}}

              {{user.full_name}}

            {{user.username}}

              {{ user.kind === LEARNER ? $tr('learner') : $tr('coach') }}

            <icon-button
              :text="$tr('remove')"
              class="remove-user-btn"
              @click="openRemoveUserModal(user)">
            </icon-button>

{{ $tr('noUsersExist') }}

{{ $tr('allUsersFilteredOut') }}

</template>


Add validation error messages to each field

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/hiddenwaffle/flying.git/'


Removed preventClicks workaround

Removed preventClicks workaround

<template>

      <router-link
        class="no-underline"
        :to="{
          name: product.type_id + '-product',
          params: {
            parentSku: product.parentSku ? product.parentSku : product.sku,
            slug: product.slug,
            childSku: product.sku
          }
        }"
      >

          <transition name="fade" appear>

          </transition>

{{ product.name | htmlDecode }}

         0"
        >
          {{ product.originalPriceInclTax | price }}

         0"
        >
          {{ product.priceInclTax | price }}

         0">
          {{ product.priceInclTax | price }}

      </router-link>

</template>


feat: allow disabled input

feat: allow disabled input

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/buckless/datetime-picker.git/'


Fixed mising collections button

Fixed mising collections button

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/codeweavers/Consign.git/'


[UNFINISHED] translation: component/table

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/iview/iview-doc.git/'


src: improve Notifications

src: improve Notifications

<template>
  <div :class="['notification', 'animated', type ? `is-${type}` : '']" :transition="transition" transition-mode="in-out">
    <button class="delete touchable" @click="close()"></button>

{{ title }}

    {{ message }}

</template>


Grid component english translation

Grid component english translation


Adapt submitting system, submit must collapse

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/egoconf/egoconf.git/'


welcome page

welcome page

<template>

                Welcome to cass

</template>

error: pathspec 'src/views/Welcome.vue' did not match any file(s) known to git


Icons: add sizing, colors for material-design-icons

<template>

Font Awesome

          More Examples

             fa-lg

             fa-2x

             fa-3x

             fa-4x

             fa-5x

Material Design Icons

          More Examples

            face

            face 18px

            face 24px

            face 36px

            face 48px

</template>


Small refactor, and a realization that I need a form class

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NathanielDavid/Sumie.git/'


Fix seating plan

Fix seating plan

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JosefFriedrich-nodejs/baldr.git/'


Fix for changing tabs.

Fix for changing tabs.


Add mediaElement to media file component


🐛Close #87: Annoying ETA Limit warning after each page reload

Merge pull request #130 from timeragent/fix-87

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/digitalideastudio/timeragent.git/'


footer updates

footer updates

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jcock/jcock.rocks.nuxt.git/'


Update blog post component content block styling

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mplusmuseum/mplusmuseum-stories.git/'


Add style for categories on home page

Add style for categories on home page

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/barprive/barprive.com.git/'


Add InputVue component

Add InputVue component

Signed-off-by: Marco Ambrosini <3397c7e210a9d1588196cfebb12b2c6b133f6934@pm.me>

<!--
   - @copyright Copyright (c) 2022, Marco Ambrosini <marcoambrosini@pm.me>
   -
   - @author Marco Ambrosini <marcoambrosini@pm.me>
   -
   - @license GNU AGPL version 3 or any later version
   -
   - This program is free software: you can redistribute it and/or modify
   - it under the terms of the GNU Affero General Public License as
   - published by the Free Software Foundation, either version 3 of the
   - License, or (at your option) any later version.
   -
   - This program is distributed in the hope that it will be useful,
   - but WITHOUT ANY WARRANTY; without even the implied warranty of
   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   - GNU Affero General Public License for more details.
   -
   - You should have received a copy of the GNU Affero General Public License
   - along with this program. If not, see <http://www.gnu.org/licenses/>.
   -
   -->

<template>
	<input class="input-vue"
		type="text"
		:value="value"
		@input="handleInput">
</template>

<script>
export default {
	name: 'InputVue',
	props: {
		value: {
			type: String,
			required: true,
		},
	},
	methods: {
		handleInput(event) {
			this.$emit('update:value', event.target.value)
		},
	},
}
</script>

 <style lang="scss" scoped>
.input-vue {
	width: 100%;
	border-radius: var(--border-radius-large);
	padding-left: 16px;
 }
 </style>

error: pathspec 'src/components/InputVue.vue' did not match any file(s) known to git


cleanup

cleanup


Fix auth-message in content-management-page

<template>

    <template v-if="isSuperuser">
      <component v-if="pageState.wizardState.shown" :is="wizardComponent"/>

        <task-status
          :type="pageState.taskList[0].type"
          :status="pageState.taskList[0].status"
          :percentage="pageState.taskList[0].percentage"
          :id="pageState.taskList[0].id"
        />

{{$tr('title')}}

            <icon-button
              :text="$tr('import')"
              class="button"
              @click="startImportWizard"
              :primary="true">
              <mat-svg category="content" name="add"/>
            </icon-button>
            <icon-button
              :text="$tr('export')"
              class="button"
              :primary="true"
              @click="startExportWizard">
              <ion-svg name="ios-upload-outline"/>
            </icon-button>

{{$tr('noChannels')}}

                  {{ channel.title }}

    </template>
    <auth-message v-else :header="$tr('notAdminHeader')" :details="$tr('notAdminDetails')" />

</template>

<template>

    <template v-if="isSuperuser">
      <component v-if="pageState.wizardState.shown" :is="wizardComponent"/>

        <task-status
          :type="pageState.taskList[0].type"
          :status="pageState.taskList[0].status"
          :percentage="pageState.taskList[0].percentage"
          :id="pageState.taskList[0].id"
        />

{{$tr('title')}}

            <icon-button
              :text="$tr('import')"
              class="button"
              @click="startImportWizard"
              :primary="true">
              <mat-svg category="content" name="add"/>
            </icon-button>
            <icon-button
              :text="$tr('export')"
              class="button"
              :primary="true"
              @click="startExportWizard">
              <ion-svg name="ios-upload-outline"/>
            </icon-button>

{{$tr('noChannels')}}

                  {{ channel.title }}

    </template>
    <auth-message v-else :details="$tr('notAdmin')" />

</template>


Add Fek component

Add Fek component

<template>

      Αρ.ΦΕΚ
      <input name="fek_number" type="text" class="form-control">

      Τεύχος ΦΕΚ
      <select class="selectpicker pickers" title="Τεύχος ΦΕΚ" data-live-search="true" id="fek_issue" name="fek_issue" data-width="auto">
        <option v-for="issue in issues" :data-tokens="issue.keywords" :value="issue.text">{{issue.text}}</option>
      </select>

      Έτος ΦΕΚ
      <input type="text" name="fek_year" id="fek_year" maxlength="4" minlength="4" class="form-control">

</template>

error: pathspec 'n3-composer/components/specific-decision-fields/common-properties/Fek.vue' did not match any file(s) known to git


change logo to router link :ok_hand:

change logo to router link :ok_hand:

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Wheatability/lets-group.git/'


Added searchbar (only mockup)

Added searchbar (only mockup)

<template>
  <v-responsive :max-width="searchFocused ? 350 : 200" class="align-center transition-swing">
    <v-text-field rounded
                  hide-details solo
                  dark label="Suchen…"
                  solo-inverted single-line
                  flat class="align-center px-2"
                  append-icon="mdi-magnify"
                  @focus="searchFocused = true"
                  @blur="searchFocused = false"
                  color="white" dense />
  </v-responsive>
</template>

<script>
export default {
  name: 'GlobalSearch',
  data () {
    return {
      searchFocused: false
    }
  }
}
</script>

<style scoped>

</style>

error: pathspec 'frontend/src/components/Search.vue' did not match any file(s) known to git


cleanup

cleanup

<template>

{{ 'Meta' | trans }}

            <button class="uk-button uk-button-primary" type="submit">{{ 'Save' | trans }}</button>

            {{ 'Description' | trans }}

                <textarea id="form-meta-description" class="uk-form-width-large" rows="5" v-model="config.meta.description"></textarea>

            {{ 'Image' | trans }}

                <input-image :source.sync="config.meta.image"></input-image>

            {{ 'Facebook ID' | trans }}

                <input id="form-meta-facebook" type="text" class="uk-form-width-large" v-model="config.meta.fb_id"></input>

            {{ 'Twitter Site' | trans }}

                <input id="form-meta-twitter" type="text" class="uk-form-width-large" v-model="config.meta.twitter"></input>

</template>

<template>

{{ 'Meta' | trans }}

            <button class="uk-button uk-button-primary" type="submit">{{ 'Save' | trans }}</button>

            {{ 'Facebook ID' | trans }}

                <input id="form-meta-facebook" type="text" class="uk-form-width-large" v-model="config.meta.fb_id"></input>

            {{ 'Twitter Site' | trans }}

                <input id="form-meta-twitter" type="text" class="uk-form-width-large" v-model="config.meta.twitter"></input>

            {{ 'Image' | trans }}

                <input-image :source.sync="config.meta.image"></input-image>

            {{ 'Description' | trans }}

                <textarea id="form-meta-description" class="uk-form-width-large" rows="5" v-model="config.meta.description"></textarea>

</template>


adapt font size to available space

adapt font size to available space

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Shuunen/vienyl.git/'


affixの調整

affixの調整

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/slackpulse/slackpulse.github.io.git/'


Update Portfolio.vue

Update Portfolio.vue

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/LokeCarlsson/lokecarlsson.git/'


Added burger menu button to main layout

Added burger menu button to main layout

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/umschlag/umschlag-ui.git/'


Adds renew date

Adds renew date


Fixed #55

Fixed #55

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/04n0/goldfish.git/'


Updated policies fetching path in token creator page


maintenance

maintenance

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/LinusBorg/vue-component-droparea.git/'


Add year filter

Add year filter

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/parksandwildlife/gokart.git/'


Flip event name and location

Flip event name and location

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/stefanjudis/stefan-judis-website.git/'


Copy tweaking.

Copy tweaking.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/paulstraw/paulstraw.com.git/'


Fixed nav button

Fixed nav button


fixed bugs

fixed bugs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lostrack/homepage.git/'


[removed] google maps (temp)

[removed] google maps (temp)

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mtlong29/JBShop_Site.git/'


ui redesign

ui redesign

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tomwang1013/jinge.git/'


Add menu to card example

Add menu to card example

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/praneetloke/vue-material.git/'


user entrance

user entrance

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NewDadaFE/newdada-daojia.git/'


Add code doc to avatar

Add code doc to avatar


Added title/year input

Added title/year input

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starmage/my-movies.git/'


because 2019

because 2019

<template>
  <Layout>

          a wise person once said...

    <g-link
      :to="item.node.path"
      v-for="item in $page.posts.edges"
      :key="item.node.id"
      class="journal-post"
    >

{{ item.node.title }}

{{ item.node.excerpt }}

    </g-link>

  </Layout>
</template>

<page-query>
query Journal {
	posts: allJournalPost {
    edges {
      node {
        id
        path
        title
        excerpt
      }
    }
  }
}
</page-query>

<template>
  <Layout>

          A wise man once said...

    <g-link
      :to="item.node.path"
      v-for="item in $page.posts.edges"
      :key="item.node.id"
      class="journal-post"
    >

{{ item.node.title }}

{{ item.node.excerpt }}

    </g-link>

  </Layout>
</template>

<page-query>
query Journal {
	posts: allJournalPost {
    edges {
      node {
        id
        path
        title
        excerpt
      }
    }
  }
}
</page-query>


Updated profile

Updated profile

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/moso/moso-vue.git/'


Add : platforms details presented in modals

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Gramatiik/radion-vue.git/'


Added projects

Added projects


Change : grid on pulses page

Change : grid on pulses page


Accept/decline invitation

Accept/decline invitation

<template lang="pug">
  div
    h2 You have been invited to {{pool.name}}, do you like to join?
    button(
      @click="acceptInvitation"
    ) yes
    button(
      @click="declineInvitation"
    ) no
</template>

<script>
  import { database } from 'config/firebase';
  import Pool from 'models/pool';
  import Invite from 'models/invite';
  import router from 'config/router';

  export default {
    computed: {
      invite() {
        return new Invite(this.invites[this.$route.params.id]);
      },

      pool() {
        return (this.invite)
          ? new Pool(this.pools[this.invite.pool])
          : new Pool();
      },
    },

    methods: {
      acceptInvitation() {

      },

      declineInvitation() {
        this.invite.remove();
        router.go('/');
      },
    },

    firebase: {
      pools: {
        source: database.ref('/pools'),
        asObject: true,
      },
      invites: {
        source: database.ref('/invites'),
        asObject: true,
      },
    },
  };
</script>

error: pathspec 'src/components/invite/invitation.vue' did not match any file(s) known to git


it now locks the send button when awaiting a response, and animates it to make it obvious that it is waiting

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/codeweavers/Consign.git/'


Styling for button-wrapper that ecloses the 2 icon buttons

<template>

  <core-modal
    title="Please choose a source..."
    :enablebgclickcancel="false"
    @cancel="cancelImportExportWizard"
  >

        <icon-button text="Internet" @click="showImportNetworkWizard">
          <svg src="./world.svg"></svg>
        </icon-button>
        <icon-button text="Local Drives" @click="showImportLocalWizard">
          <svg src="./storage.svg"></svg>
        </icon-button>

        <button class="text-only-buttons" @click="cancelImportExportWizard">
          Cancel
        </button>

  </core-modal>

</template>


Reloaded the state when the projects page is entered

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/riggerthegeek/ci-menu.git/'


Added watchfaces component

Added watchfaces component

<template>

Example Watchface

            193

Example Watchface

            193

Example Watchface

            193

</template>

error: pathspec 'src/components/pages/Watchfaces.vue' did not match any file(s) known to git


Update Skills.vue

Update Skills.vue

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mubaidr/gh-pages.git/'


Fixed

Fixed

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/CranePHP/core-ui.git/'


Started the footer

Started the footer


Add auxiliaryList and modify style

Add auxiliaryList and modify style

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/notadd/administration.git/'


add incomes and refactor

add incomes and refactor

<template>
    <div>
        <canvas id="sum-by-month"></canvas>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                dates: [],
                expenses: [],
                incomes: []
            };
        },
        mounted() {
            this.getEntries();
        },
        methods: {
            /**
             * Get entries
             */
            getEntries() {
                axios
                    .post('/macope/journal/sum-by-month', {
                        date_from: moment().subtract(11, 'M').format('Y-M-01'),
                        date_to: moment().format('Y-M-D')
                    })
                    .then(response => {
                        response.data.forEach(data => {
                            this.dates.push(moment(data.year + '-' + data.month, 'Y-M').format('MM/Y'));
                            this.expenses.push(data.debit);
                            this.incomes.push(data.credit);
                        });
                        this.buildChart();
                    })
                    .catch(error => {
                        document.getElementById("sum-by-month").parentNode.innerHTML  = 'Oups, an error occured.'
                    });
            },
            /*
             * Build the chart
             */
            buildChart() {
                var chart = new Chart(document.getElementById("sum-by-month"), {
                    type: 'bar',
                    data: {
                        labels: this.dates,
                        datasets: [{
                            label: 'Expenses',
                            data: this.expenses,
                            backgroundColor: 'rgba(27, 12, 232, 0.8)'
                        }, {
                            label: 'Incomes',
                            data: this.incomes,
                            backgroundColor: 'rgba(13, 255, 163, 0.8)'
                        }]
                    },
                });
            }
        }
    }
</script>

error: pathspec 'src/resources/assets/js/components/EntriesSumByMonth.vue' did not match any file(s) known to git


Add wrapper component for column

Add wrapper component for column

<template>

			<input class="column_label" type="text" :value="column.name" />

</template>

error: pathspec 'app/modules/Column.vue' did not match any file(s) known to git


Add dynamic routes to the Nav component

Add dynamic routes to the Nav component

Dynamic routes are used so that the event tab's date parameter would
always be updated. This does introduce the issue of the `is-active`
class flickering on and off though, but for the most part works as
expected.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/astronote/astronote-docker.git/'


Main layout

Main layout

<template>
  <q-layout view="hHh lpR fFf">

    <q-header elevated class="bg-primary text-white">
      <q-toolbar>
        <q-btn dense flat round icon="fas fa-bars" @click="toggleLeftDrawer"/>

        <q-toolbar-title>
          <q-avatar>

          </q-avatar>
          Firefly III
        </q-toolbar-title>

        <q-select
          ref="search" dark dense standout use-input hide-selected
          class="q-mx-xs"
          color="black" :stack-label="false" label="Search"
          v-model="search"
          style="width: 250px"
        >

          <template v-slot:append>

          </template>

          <template v-slot:option="scope">
            <q-item
              v-bind="scope.itemProps"
              class=""
            >
              <q-item-section side>
                <q-icon name="collections_bookmark"/>
              </q-item-section>
              <q-item-section>
                <q-item-label v-html="scope.opt.label"/>
              </q-item-section>
              <q-item-section side class="default-type">
                <q-btn outline dense no-caps text-color="blue-grey-5" size="12px" class="bg-grey-1 q-px-sm">
                  {{ 'Jump to' }}
                  <q-icon name="subdirectory_arrow_left" size="14px"/>
                </q-btn>
              </q-item-section>
            </q-item>
          </template>
        </q-select>

        <q-separator dark vertical inset/>
        <q-btn flat icon="fas fa-skull-crossbones" :to="{name: 'development.index'}" class="q-mx-xs"/>
        <q-separator dark vertical inset/>
        <q-btn flat icon="fas fa-question-circle" @click="showHelpBox" class="q-mx-xs"/>
        <q-separator dark vertical inset/>

        <q-btn v-if="$q.screen.gt.xs && $route.meta.dateSelector" flat class="q-mx-xs">

            <q-icon name="fas fa-calendar" size="20px"/>
            <q-icon name="fas fa-caret-down" size="12px" right/>

          <q-menu>
            <DateRange></DateRange>
          </q-menu>
        </q-btn>
        <q-separator dark vertical inset v-if="$route.meta.dateSelector"/>

        <q-btn v-if="$q.screen.gt.xs" flat class="q-mx-xs">

            <q-icon name="fas fa-dragon" size="20px"/>
            <q-icon name="fas fa-caret-down" size="12px" right/>

          <q-menu auto-close>
            <q-list style="min-width: 120px">
              <q-item clickable :to="{ name: 'webhooks.index' }">
                <q-item-section>Webhooks</q-item-section>
              </q-item>
              <q-item clickable :to="{ name: 'currencies.index' }">
                <q-item-section>Currencies</q-item-section>
              </q-item>
              <q-item clickable :to="{ name: 'admin.index' }">
                <q-item-section>Administration</q-item-section>
              </q-item>
            </q-list>
          </q-menu>
        </q-btn>
        <q-separator dark vertical inset/>

        <q-btn v-if="$q.screen.gt.xs" flat class="q-mx-xs">

            <q-icon name="fas fa-user-circle" size="20px"/>
            <q-icon name="fas fa-caret-down" right size="12px"/>

          <q-menu auto-close>
            <q-list style="min-width: 180px">

              <q-item clickable :to="{ name: 'profile.index' }">
                <q-item-section> Profile</q-item-section>
              </q-item>
              <q-item clickable :to="{ name: 'profile.daa' }">
                <q-item-section> Data management</q-item-section>
              </q-item>
              <q-item clickable :to="{ name: 'preferences.index' }">
                <q-item-section>Preferences</q-item-section>
              </q-item>
              <q-item clickable :to="{ name: 'export.index' }">
                <q-item-section>Export data</q-item-section>
              </q-item>
              <q-separator/>
              <q-item clickable :to="{ name: 'logout' }">
                <q-item-section>Logout</q-item-section>
              </q-item>
            </q-list>
          </q-menu>
        </q-btn>
      </q-toolbar>
    </q-header>
    <q-drawer show-if-above v-model="leftDrawerOpen" side="left" bordered>
      <q-scroll-area class="fit">

          <q-list>
            <q-item clickable v-ripple :to="{ name: 'index' }">
              <q-item-section avatar>
                <q-icon name="fas fa-tachometer-alt"/>
              </q-item-section>
              <q-item-section>
                Dashboard
              </q-item-section>
            </q-item>
            <q-item clickable v-ripple :to="{ name: 'budgets.index' }">
              <q-item-section avatar>
                <q-icon name="fas fa-chart-pie"/>
              </q-item-section>
              <q-item-section>
                Budgets
              </q-item-section>
            </q-item>
            <q-item clickable v-ripple :to="{ name: 'subscriptions.index' }">
              <q-item-section avatar>
                <q-icon name="far fa-calendar-alt"/>
              </q-item-section>
              <q-item-section>
                Subscriptions
              </q-item-section>
            </q-item>
            <q-item clickable v-ripple :to="{ name: 'piggy-banks.index' }">
              <q-item-section avatar>
                <q-icon name="fas fa-piggy-bank"/>
              </q-item-section>
              <q-item-section>
                Piggy banks
              </q-item-section>
            </q-item>

            <q-expansion-item
              expand-separator
              icon="fas fa-exchange-alt"
              label="Transactions"
              :default-opened="this.$route.name === 'transactions.index' || this.$route.name === 'transactions.show'"
            >
              <q-item :inset-level="1" clickable v-ripple :to="{ name: 'transactions.index', params: {type: 'withdrawal'} }">
                <q-item-section>
                  Withdrawals
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'deposit'} }">
                <q-item-section>
                  Deposits
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'transfers'} }">

                <q-item-section>
                  Transfers
                </q-item-section>
              </q-item>

            </q-expansion-item>

            <q-expansion-item
              expand-separator
              icon="fas fa-microchip"
              label="Automation"
              default-unopened
            >
              <q-item :inset-level="1" clickable v-ripple :to="{ name: 'rules.index' }">
                <q-item-section>
                  Rules
                </q-item-section>
              </q-item>
              <q-item :inset-level="1" clickable v-ripple :to="{ name: 'recurring.index' }">
                <q-item-section>
                  Recurring transactions
                </q-item-section>
              </q-item>

            </q-expansion-item>

            <q-expansion-item
              expand-separator
              icon="fas fa-credit-card"
              label="Accounts"
              :default-opened="this.$route.name === 'accounts.index' || this.$route.name === 'accounts.show'"
            >
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'asset'} }">
                <q-item-section>
                  Asset accounts
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'expense'} }">
                <q-item-section>
                  Expense accounts
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'revenue'} }">
                <q-item-section>
                  Revenue accounts
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'liabilities'} }">
                <q-item-section>
                  Liabilities
                </q-item-section>
              </q-item>

            </q-expansion-item>

            <q-expansion-item
              expand-separator
              icon="fas fa-tags"
              label="Classification"
              default-unopened
            >
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'categories.index' }">
                <q-item-section>
                  Categories
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'tags.index' }">
                <q-item-section>
                  Tags
                </q-item-section>
              </q-item>
              <q-item clickable v-ripple :inset-level="1" :to="{ name: 'groups.index'}">
                <q-item-section>
                  Groups
                </q-item-section>
              </q-item>
            </q-expansion-item>
            <q-item clickable v-ripple :to="{ name: 'reports.index'}">
              <q-item-section avatar>
                <q-icon name="far fa-chart-bar"/>
              </q-item-section>
              <q-item-section>
                Reports
              </q-item-section>
            </q-item>
          </q-list>

      </q-scroll-area>
    </q-drawer>

    <q-page-container>
      <Alert></Alert>

{{ $t($route.meta.pageTitle || 'firefly.welcome_back') }}

            <q-breadcrumbs align="right">
              <q-breadcrumbs-el label="Home" :to="{ name: 'index' }"/>
              <q-breadcrumbs-el v-for="step in $route.meta.breadcrumbs" :label="$t('breadcrumbs.' + step.title)"
                                :to="step.route ? {name: step.route, params: step.params} : ''"/>
            </q-breadcrumbs>

      <router-view/>
    </q-page-container>

    <q-footer elevated class="bg-grey-8 text-white">
      <q-toolbar>

          Firefly III v TODO © James Cole, AGPL-3.0-or-later.

      </q-toolbar>
    </q-footer>

  </q-layout>
</template>

error: pathspec 'frontend/src/layouts/MainLayout.vue' did not match any file(s) known to git


popup confirmation

popup confirmation

<template>

      <svg viewBox="0 0 100 100" class="app-icon">
        <use xlink:href="#app-icon-close"></use>
      </svg>

Parbleu !

Votre choix est fait !

On aime votre assurance !

Diantre !

Tout ceci s'annonce compliqué !

Les éléments sont contre vous !

</template>

error: pathspec 'src/components/commons/popup/Confirmation.vue' did not match any file(s) known to git


Navbar: add animated classes

Navbar: add animated classes

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/f00-/ncompass-node-mockup.git/'


Fix SEO description

Fix SEO description

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/barprive/barprive.com.git/'


Add offset

Add offset

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/LokeCarlsson/lokecarlsson.git/'


bug fixes for multiple not updating properly

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/stephane/vuetify.git/'


Added to all controls.

Added to all controls.

<template>

  <div v-el:videowrapperwrapper class="videowrapperwrapper">
    <loading-spinner v-show="loading"></loading-spinner>
    <div v-el:videowrapper v-show="!loading" class="videowrapper">
      <video v-el:video class="video-js vjs-default-skin" @seeking="handleSeek" @timeupdate="updateTime">
        <template v-for="video in videoSources">
          <source :src="video.storage_url" :type="'video/' + video.extension">
        </template>
        <template v-for="track in trackSources">
          <track kind="captions" :src="track.storage_url" :srclang="track.lang" :label="getLangName(track.lang)">
        </template>
      </video>
    </div>
  </div>

</template>

<script>

  const videojs = require('video.js');
  const langcodes = require('./langcodes.json');
  const customButtons = require('./videojs-replay-forward-btns');
  const debounce = require('vue').util.debounce;

  module.exports = {

    $trNameSpace: 'videoRender',

    $trs: {
      replay: 'Replay',
      forward: 'Forward',
    },

    props: ['files'],

    data: () => ({
      videoWidth: 0,
      videoHeight: 0,
      dummyTime: 0,
      progressStartingPoint: 0,
      lastUpdateTime: 0,
      loading: true,
    }),

    computed: {
      posterSource() {
        const posterFileExtensions = ['png', 'jpg'];
        const posterArray = this.files.filter(
          (file) => posterFileExtensions.some((ext) => ext === file.extension)
        );
        if (posterArray.length === 0) {
          return '';
        }
        return posterArray[0].storage_url;
      },

      videoSources() {
        const videoFileExtensions = ['mp4', 'webm', 'ogg'];
        return this.files.filter(
          (file) => videoFileExtensions.some((ext) => ext === file.extension)
        );
      },

      trackSources() {
        const trackFileExtensions = ['vtt'];
        return this.files.filter(
          (file) => trackFileExtensions.some((ext) => ext === file.extension)
        );
      },

      aspectRatio() {
        return this.videoWidth / this.videoHeight;
      },

    },

    methods: {
      getLangName(langCode) {
        return langcodes.filter(
            (lang) => lang.code === langCode
        )[0].lang;
      },

      setPlayState(state) {
        this.recordProgress();
        if (state === true) {
          this.$emit('startTracking');
        } else {
          this.$emit('stopTracking');
        }
      },

      loadedMetaData() {
        this.videoWidth = this.videoPlayer.videoWidth();
        this.videoHeight = this.videoPlayer.videoHeight();
        this.resizeVideo();
        this.videoPlayerIsReady();
        this.loading = false;
      },

      resizeVideo() {
        const wrapperWrapperWidth = this.$els.videowrapperwrapper.clientWidth;
        const wrapperWrapperHeight = this.$els.videowrapperwrapper.clientHeight;

        const neededHeightGivenWidth = wrapperWrapperWidth * (1 / this.aspectRatio);
        const neededWidthGivenHeight = wrapperWrapperHeight * this.aspectRatio;

        let newWidth = 0;
        let newHeight = 0;

        if (neededHeightGivenWidth <= wrapperWrapperHeight) {
          newWidth = wrapperWrapperWidth;
          newHeight = neededHeightGivenWidth;
        } else {
          newWidth = neededWidthGivenHeight;
          newHeight = wrapperWrapperHeight;
        }

        this.$els.videowrapper.setAttribute('style', `width:${newWidth}px;height:${newHeight}px`);
      },

      get debouncedResizeVideo() {
        return debounce(this.resizeVideo, 300);
      },

      videoPlayerIsReady() {
        videojs(this.$els.video).on('play', () => {
          this.setPlayState(true);
        });

        videojs(this.$els.video).on('pause', () => {
          this.setPlayState(false);
        });

        videojs(this.$els.video).on('ended', () => {
          this.setPlayState(false);
        });
      },

      updateTime() {
        this.dummyTime = this.videoPlayer.currentTime();
        if (this.dummyTime - this.lastUpdateTime >= 5) {
          this.recordProgress();
          this.lastUpdateTime = this.dummyTime;
        }
      },

      /* Catches when a user jumps around/skips while playing the video */
      handleSeek() {
        /* Record any progress up to this point */
        this.recordProgress();
        /* Set last check to be where player is at now */
        this.dummyTime = this.videoPlayer.currentTime();
        this.lastUpdateTime = this.dummyTime;
      },

      recordProgress() {
        this.$emit('progressUpdate', Math.max(0,
          (this.dummyTime - this.progressStartingPoint) /
          Math.floor(this.videoPlayer.duration())));
        this.progressStartingPoint = this.videoPlayer.currentTime();
      },
    },

    created() {
      customButtons.ReplayButton.prototype.controlText_ = this.$tr('replay');
      customButtons.ForwardButton.prototype.controlText_ = this.$tr('forward');
      videojs.registerComponent('ReplayButton', customButtons.ReplayButton);
      videojs.registerComponent('ForwardButton', customButtons.ForwardButton);
    },

    ready() {
      this.videoPlayer = videojs(this.$els.video, {
        fluid: true,
        autoplay: false,
        controls: true,
        textTrackDisplay: true,
        bigPlayButton: true,
        inactivityTimeout: 1000,
        preload: 'metadata',
        // poster: this.posterSource,
        playbackRates: [0.5, 1.0, 1.25, 1.5, 2.0],
        controlBar: {
          children: [
            { name: 'progressControl' },
            { name: 'currentTimeDisplay' },
            { name: 'TimeDivider' },
            { name: 'durationDisplay' },
            { name: 'ReplayButton' },
            { name: 'playToggle' },
            { name: 'ForwardButton' },
            {
              name: 'VolumeMenuButton',
              inline: false,
              vertical: true,
            },
            { name: 'playbackRateMenuButton' },
            { name: 'captionsButton' },
            { name: 'fullscreenToggle' },
          ],
        },
      });

      this.videoPlayer.on('loadedmetadata', this.loadedMetaData);
      global.addEventListener('resize', this.debouncedResizeVideo);
    },
    beforeDestroy() {
      this.recordProgress();
      this.$emit('stopTracking');
      global.removeEventListener('resize', this.debouncedResizeVideo);
      this.videoPlayer.dispose();
    },
  };

</script>

<style lang="stylus">

  /* Default videojs stylesheet.
     Unable to reference the videojs using require since videojs doesn't have good webpack support
  */
  @require '~core-theme.styl'
  @import '../../../../../../node_modules/video.js/dist/video-js.css'

  $video-player-color = black
  $video-player-accent-color = $core-action-normal

  .videowrapperwrapper
    width: 100%
    height: 100%
    background-color: rgba(0, 0, 0, 0)
    position: relative

  .videowrapper
    top: 50%
    left: 50%
    transform: translate(-50%, -50%)
    position: relative
    height: 100%
    background-color: black

  @media screen and (max-width: 840px)
    .video-js
      font-size: 0.8em

  @media screen and (min-width: 841px)
    .video-js
      font-size: 1em

  @media screen and (max-width: 841px)
    .video-js
      .vjs-control-bar,
      .vjs-menu-button .vjs-menu-content
        font-size: 0.8em

  @media screen and (min-width: 841px)
    .video-js
      .vjs-control-bar,
      .vjs-menu-button .vjs-menu-content
        font-size: 1em

  .video-js
    color: white

    &:hover
      .vjs-big-play-button
        background-color: $video-player-color

    .vjs-big-play-button
      position: absolute
      top: 50%
      left: 50%
      transform: translate(-50%, -50%)
      height: 2.5em
      width: 2.5em
      font-size: 2.5em
      line-height: 2.5em
      border-radius: 50%
      border: none
      background-color: $video-player-color

    .vjs-slider
      background-color: grey

    .vjs-progress-control
      position: absolute
      left: 0
      right: 0
      width: auto
      height: 2em
      top: -1em
      visibility: inherit
      opacity: inherit

    .vjs-progress-holder
      margin: 0

    .vjs-load-progress
      background: darkgrey

    .vjs-play-progress
      background-color: $video-player-accent-color

    .vjs-progress-control
      &:hover
        .vjs-progress-holder
          font-size: 1em

    .vjs-control-bar,
    .vjs-menu-button .vjs-menu-content
      background-color: $video-player-color

    .vjs-control-bar
      justify-content: center

    .vjs-current-time,
    .vjs-time-divider,
    .vjs-duration,
    .vjs-volume-menu-button,
    .vjs-playback-rate,
    .vjs-fullscreen-control
      position: absolute
      visibility: inherit
      opacity: inherit

    .vjs-current-time
      display: block
      left: 0

    .vjs-time-divider
      display: block
      left: 3em

    .vjs-duration
      display: block
      left: 4em

    .vjs-menu,
      li
        &:focus,
        &:hover
          background-color: grey

    .vjs-volume-menu-button
      right: 6em
      .vjs-slider
        background-color: grey

    .vjs-playback-rate
      right: 3em

    .vjs-fullscreen-control
      right: 0

    .videoreplay
      background: url('../icons/replay.svg')
      background-repeat: no-repeat
      background-position: center
      background-size: 45%

    .videoforward
      background: url('../icons/forward.svg')
      background-repeat: no-repeat
      background-position: center
      background-size: 45%

</style>

<template>

  <div v-el:videowrapperwrapper class="videowrapperwrapper">
    <loading-spinner v-show="loading"></loading-spinner>
    <div v-el:videowrapper v-show="!loading" class="videowrapper">
      <video v-el:video class="video-js vjs-default-skin" @seeking="handleSeek" @timeupdate="updateTime">
        <template v-for="video in videoSources">
          <source :src="video.storage_url" :type="'video/' + video.extension">
        </template>
        <template v-for="track in trackSources">
          <track kind="captions" :src="track.storage_url" :srclang="track.lang" :label="getLangName(track.lang)">
        </template>
      </video>
    </div>
  </div>

</template>

<script>

  const videojs = require('video.js');
  const langcodes = require('./langcodes.json');
  const customButtons = require('./videojs-replay-forward-btns');
  const debounce = require('vue').util.debounce;

  module.exports = {

    $trNameSpace: 'videoRender',

    $trs: {
      replay: 'Replay',
      forward: 'Forward',
    },

    props: ['files'],

    data: () => ({
      videoWidth: 0,
      videoHeight: 0,
      dummyTime: 0,
      progressStartingPoint: 0,
      lastUpdateTime: 0,
      loading: true,
    }),

    computed: {
      posterSource() {
        const posterFileExtensions = ['png', 'jpg'];
        const posterArray = this.files.filter(
          (file) => posterFileExtensions.some((ext) => ext === file.extension)
        );
        if (posterArray.length === 0) {
          return '';
        }
        return posterArray[0].storage_url;
      },

      videoSources() {
        const videoFileExtensions = ['mp4', 'webm', 'ogg'];
        return this.files.filter(
          (file) => videoFileExtensions.some((ext) => ext === file.extension)
        );
      },

      trackSources() {
        const trackFileExtensions = ['vtt'];
        return this.files.filter(
          (file) => trackFileExtensions.some((ext) => ext === file.extension)
        );
      },

      aspectRatio() {
        return this.videoWidth / this.videoHeight;
      },

    },

    methods: {
      getLangName(langCode) {
        return langcodes.filter(
            (lang) => lang.code === langCode
        )[0].lang;
      },

      setPlayState(state) {
        this.recordProgress();
        if (state === true) {
          this.$emit('startTracking');
        } else {
          this.$emit('stopTracking');
        }
      },

      loadedMetaData() {
        this.videoWidth = this.videoPlayer.videoWidth();
        this.videoHeight = this.videoPlayer.videoHeight();
        this.resizeVideo();
        this.videoPlayerIsReady();
        this.loading = false;
      },

      resizeVideo() {
        const wrapperWrapperWidth = this.$els.videowrapperwrapper.clientWidth;
        const wrapperWrapperHeight = this.$els.videowrapperwrapper.clientHeight;

        const neededHeightGivenWidth = wrapperWrapperWidth * (1 / this.aspectRatio);
        const neededWidthGivenHeight = wrapperWrapperHeight * this.aspectRatio;

        let newWidth = 0;
        let newHeight = 0;

        if (neededHeightGivenWidth <= wrapperWrapperHeight) {
          newWidth = wrapperWrapperWidth;
          newHeight = neededHeightGivenWidth;
        } else {
          newWidth = neededWidthGivenHeight;
          newHeight = wrapperWrapperHeight;
        }

        this.$els.videowrapper.setAttribute('style', `width:${newWidth}px;height:${newHeight}px`);
      },

      get debouncedResizeVideo() {
        return debounce(this.resizeVideo, 300);
      },

      videoPlayerIsReady() {
        videojs(this.$els.video).on('play', () => {
          this.setPlayState(true);
        });

        videojs(this.$els.video).on('pause', () => {
          this.setPlayState(false);
        });

        videojs(this.$els.video).on('ended', () => {
          this.setPlayState(false);
        });
      },

      updateTime() {
        this.dummyTime = this.videoPlayer.currentTime();
        if (this.dummyTime - this.lastUpdateTime >= 5) {
          this.recordProgress();
          this.lastUpdateTime = this.dummyTime;
        }
      },

      /* Catches when a user jumps around/skips while playing the video */
      handleSeek() {
        /* Record any progress up to this point */
        this.recordProgress();
        /* Set last check to be where player is at now */
        this.dummyTime = this.videoPlayer.currentTime();
        this.lastUpdateTime = this.dummyTime;
      },

      recordProgress() {
        this.$emit('progressUpdate', Math.max(0,
          (this.dummyTime - this.progressStartingPoint) /
          Math.floor(this.videoPlayer.duration())));
        this.progressStartingPoint = this.videoPlayer.currentTime();
      },
    },

    created() {
      customButtons.ReplayButton.prototype.controlText_ = this.$tr('replay');
      customButtons.ForwardButton.prototype.controlText_ = this.$tr('forward');
      videojs.registerComponent('ReplayButton', customButtons.ReplayButton);
      videojs.registerComponent('ForwardButton', customButtons.ForwardButton);
    },

    ready() {
      this.videoPlayer = videojs(this.$els.video, {
        fluid: true,
        autoplay: false,
        controls: true,
        textTrackDisplay: true,
        bigPlayButton: true,
        inactivityTimeout: 1000,
        preload: 'metadata',
        // poster: this.posterSource,
        playbackRates: [0.5, 1.0, 1.25, 1.5, 2.0],
        controlBar: {
          children: [
            { name: 'progressControl' },
            { name: 'currentTimeDisplay' },
            { name: 'TimeDivider' },
            { name: 'durationDisplay' },
            { name: 'ReplayButton' },
            { name: 'playToggle' },
            { name: 'ForwardButton' },
            {
              name: 'VolumeMenuButton',
              inline: false,
              vertical: true,
            },
            { name: 'playbackRateMenuButton' },
            { name: 'captionsButton' },
            { name: 'fullscreenToggle' },
          ],
        },
      });

      this.videoPlayer.on('loadedmetadata', this.loadedMetaData);
      global.addEventListener('resize', this.debouncedResizeVideo);
    },
    beforeDestroy() {
      this.recordProgress();
      this.$emit('stopTracking');
      global.removeEventListener('resize', this.debouncedResizeVideo);
      this.videoPlayer.dispose();
    },
  };

</script>

<style lang="stylus">

  /* Default videojs stylesheet.
     Unable to reference the videojs using require since videojs doesn't have good webpack support
  */
  @require '~core-theme.styl'
  @import '../../../../../../node_modules/video.js/dist/video-js.css'

  $video-player-color = black
  $video-player-accent-color = $core-action-normal

  .videowrapperwrapper
    width: 100%
    height: 100%
    background-color: rgba(0, 0, 0, 0)
    position: relative

  .videowrapper
    top: 50%
    left: 50%
    transform: translate(-50%, -50%)
    position: relative
    height: 100%
    background-color: black

  @media screen and (max-width: 840px)
    .video-js
      font-size: 0.8em

  @media screen and (min-width: 841px)
    .video-js
      font-size: 1em

  @media screen and (max-width: 841px)
    .video-js
      .vjs-control-bar,
      .vjs-menu-button .vjs-menu-content
        font-size: 0.8em

  @media screen and (min-width: 841px)
    .video-js
      .vjs-control-bar,
      .vjs-menu-button .vjs-menu-content
        font-size: 1em

  .video-js
    color: white

    &:hover
      .vjs-big-play-button
        background-color: $video-player-color

    .vjs-big-play-button
      position: absolute
      top: 50%
      left: 50%
      transform: translate(-50%, -50%)
      height: 2.5em
      width: 2.5em
      font-size: 2.5em
      line-height: 2.5em
      border-radius: 50%
      border: none
      background-color: $video-player-color

    .vjs-slider
      background-color: grey

    .vjs-progress-control
      position: absolute
      left: 0
      right: 0
      width: auto
      height: 2em
      top: -1em
      visibility: inherit
      opacity: inherit

    .vjs-progress-holder
      margin: 0

    .vjs-load-progress
      background: darkgrey

    .vjs-play-progress
      background-color: $video-player-accent-color

    .vjs-progress-control
      &:hover
        .vjs-progress-holder
          font-size: 1em

    .vjs-control-bar,
    .vjs-menu-button .vjs-menu-content
      background-color: $video-player-color

    .vjs-control-bar
      justify-content: center

    .vjs-current-time,
    .vjs-time-divider,
    .vjs-duration,
    .vjs-volume-menu-button,
    .vjs-playback-rate,
    .vjs-fullscreen-control
      position: absolute

    .vjs-current-time
      display: block
      left: 0

    .vjs-time-divider
      display: block
      left: 3em

    .vjs-duration
      display: block
      left: 4em

    .vjs-menu,
      li
        &:focus,
        &:hover
          background-color: grey

    .vjs-volume-menu-button
      right: 6em
      .vjs-slider
        background-color: grey

    .vjs-playback-rate
      right: 3em

    .vjs-fullscreen-control
      right: 0

    .videoreplay
      background: url('../icons/replay.svg')
      background-repeat: no-repeat
      background-position: center
      background-size: 45%

    .videoforward
      background: url('../icons/forward.svg')
      background-repeat: no-repeat
      background-position: center
      background-size: 45%

</style>


agregamos el componenete de notifications para la visualizacion de los mismos

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/irvv17/laratter.git/'


Add menu in a button text

Add menu in a button text

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/praneetloke/vue-material.git/'


Add ExpenseExpenditureApproval component

<template>

Στοιχεία φορέα που υλοποιεί την δωρεά

      Τύπος ΑΦΜ Φορέα που υλοποιεί την Δωρεά
      <select class="afm_type" title="Τύπος ΑΦΜ" data-live-search="true" name="sponsor_afm_type" data-width="auto" v-model="selected">
        <option v-for="afmType in afmTypes" :data-tokens="afmType.keywords" :value="afmType.text">{{afmType.text}}</option>
      </select>

        ΑΦΜ Φορέα
        <input type="text" class="form-control" name="sponsor_afm">

        Επωνυμία Φορέα
        <input type="text" readonly="readonly" name="sponsor_name" value="ΕΠΩΝΥΜΙΑ Χ" class="form-control text-center">

        ΑΦΜ Φορέα
        <input type="text" class="form-control" name="sponsor_afm">

        Επωνυμία Φορέα
        <input type="text" name="sponsor_name" class="form-control text-center">

        Χώρα που υπάγεται ο φορέας
        <select title="Χώρα" data-live-search="true" name="country" data-width="auto" id="countries">
          <option v-for="country in countries" :data-tokens="country.keywords" :value="country.text">{{country.text}}</option>
        </select>

        ΑΦΜ Φορέα
        <input type="text" class="form-control" name="sponsor_afm">

        Επωνυμία Φορέα
        <input type="text" name="sponsor_name" class="form-control text-center" readonly="readonly" value="ΕΠΩΝΥΜΙΑ Χ">

        Χώρα που υπάγεται ο φορέας
        <select title="Χώρα" data-live-search="true" name="country" data-width="auto" id="countries">
          <option v-for="country in countries" :data-tokens="country.keywords" :value="country.text">{{country.text}}</option>
        </select>

        ΑΦΜ Φορέα
        <input type="text" class="form-control" name="sponsor_afm">

        Επωνυμία Φορέα
        <input type="text" name="sponsor_name" class="form-control text-center" value="ΕΠΩΝΥΜΙΑ Χ">

        Οργανισμοί χωρίς Α.Φ.Μ.
        <select title="Οργανισμοί Χωρίς Α.Φ.Μ." data-live-search="true" name="sponsor_name" data-width="auto" id="sponsor_name">
          <option v-for="noafm in noAfmOrganizations" :data-tokens="noafm.text" :value="noafm.text">{{noafm.text}}</option>
        </select>

Στοιχεία Αναδόχων

        ΑΦΜ
        ΕΠΩΝΥΜΙΑ
        ΠΟΣΟ ΜΕ ΦΠΑ
        CPV
        Αριθμός ΚΑΕ
        ΠΡΟΣΘΗΚΗ

            <input type="text" :name="getAFM(expense)" class="form-control">

              <input type="text" readonly="readonly" :name="getSponsored(expense)" value="ΕΠΩΝΥΜΙΑ Χ" class="form-control text-center">

              Ποσό
              <input type="text" :name="getExpense(expense)" class="form-control">

                <currencies :number="expense"></currencies>

            <cpv :number="expense"></cpv>

            <kae :number="expense"></kae>

        <input type="hidden" :value="expense" :name="getExpenseIndex(expense)">

        <input type="hidden" value="Εθνικό" :name="getAfmTypeName(expense)">
        <button type="button" class="btn btn-default" v-on:click="incrementExpenses">Προσθήκη {{nextExpense}}ου Ποσού</button>

      ΑΔΑ Σχετικής Ανάληψης Υποχρέωσης
      <input name="has_related_undertaking" class="form-control">

</template>

error: pathspec 'n3-composer/components/specific-decision-fields/common-properties/ExpenseExpenditureApproval.vue' did not match any file(s) known to git


Add dummy animation between state change

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wappulehti-apy/diilikone-front-2017.git/'


Add index query

Add index query

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/zhaoyingjie/newBlog_Frontend.git/'


Test observer

Test observer

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JosefFriedrich-nodejs/baldr.git/'


chore: add login cache

chore: add login cache

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/medz/fans-material-spa.git/'


add: changing head index

add: changing head index

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/amatelus/swipevideo.git/'


Revert "Fix detail temperature chart and status sorting again"

This reverts commit a9745e8550ef92ee25714d157756c9a2c6adf45e.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/modum-io/web.git/'


added sample js transition hooks

added sample js transition hooks

error: pathspec '02' did not match any file(s) known to git
error: pathspec 'vue-cli/14/src/App.vue' did not match any file(s) known to git


Create Dashboard for launching aida on local image data

<template>

    <v-toolbar
      fixed
      dark
      dense
      app
      class="primary pointers-please"
      >

      <v-toolbar-title class="white--text">
        AIDA
      </v-toolbar-title>

      <v-spacer/>

      <v-btn
        icon
        to="/">
        <v-icon>
          apps
        </v-icon>
      </v-btn>

      <v-btn
        icon
        href="https://aida.gitbook.io/docs/" >
        <v-icon small> fa-book </v-icon>
      </v-btn>

    </v-toolbar>
    <v-container fluid>
      <v-layout row wrap>
        <v-flex xs10>

 Images

          <v-data-table
            :headers="headers"
            :items="images"
            hide-actions
            class="elevation-1"
          >
            <template slot="items" slot-scope="props">

                {{ props.item }}

                  <v-btn flat icon small class="text-xs-right" :to="'/loading/' + props.item">
                    <v-tooltip left>
                      <v-icon slot="activator" v-show="hoverImage === props.item" small color='#0D47A1'>launch</v-icon>
                       View in AIDA
                    </v-tooltip>
                  </v-btn>

            </template>
          </v-data-table>
        </v-flex>
      </v-layout>
    </v-container>

</template>

error: pathspec 'src/components/Dashboard.vue' did not match any file(s) known to git


RbServices

RbServices

<template>

    <template v-if="about">

RbServices <rb-services>

 Display status for a collection of services

        <v-container fluid>
            <v-layout>
                <v-flex xs3>Property</v-flex>
                <v-flex xs3>Default</v-flex>
                <v-flex xs8>Description</v-flex>
            </v-layout>
            <v-layout>
                <v-flex xs3>about</v-flex>
                <v-flex xs3>false</v-flex>
                <v-flex xs8>Show this descriptive text</v-flex>
            </v-layout>
            <v-layout>
                <v-flex xs3>services</v-flex>
                <v-flex xs3>["test","badService"]</v-flex>
                <v-flex xs8>Array of service names</v-flex>
            </v-layout>
        </v-container>
        <v-subheader>Example</v-subheader>
        <v-divider/>
    </template>

Service Status
            <v-btn icon dark small flat class="btn--dark-flat-focused" :loading="loading!==0"
                 @click.native="update()"
                 :disabled="loading!==0" ><v-icon>refresh</v-icon></v-btn>

        <template v-for='service of services' >
            <rb-identity :service="service"></rb-identity>
        </template>

Client State

 RestBundles share client state using the Vuex Store singleton.

        <v-card flat hover v-tooltip:bottom='{html:"<rb-state>"}' class="mb-4">
            <rb-state></rb-state>
        </v-card>

        <v-alert error :value="error">{{error}}</v-alert>

</template>

error: pathspec 'src/ui/RbServices.vue' did not match any file(s) known to git


create firestore component functionalities

<template>

        <md-layout md-gutter>
            <md-layout md-flex-large="100" md-flex-xsmall="100" md-align="center">
                Cloud Firestore Example
            </md-layout>
            <md-layout md-flex-large="100" md-flex-xsmall="100" md-align="center">
                <md-whiteframe class="data-container">
                    <md-list>
                        <md-subheader>Data Example</md-subheader>
                        <md-list-item v-for="snapshot in Persons" :key="snapshot['.key']">

                                {{snapshot.name}}

                            <md-button @click.native="remove(snapshot)" class="md-icon-button md-list-action">
                                <md-icon class="md-accent">delete</md-icon>
                            </md-button>
                        </md-list-item>
                        <md-list-item>
                            <md-input-container>
                                Write
                                <md-input v-model="username" v-on:keyup.enter.native="add()" placeholder="Write something..."></md-input>
                            </md-input-container>
                            <md-button class="md-icon-button md-list-action" @click.native="add()">
                                <md-icon class="md-primary">send</md-icon>
                            </md-button>
                        </md-list-item>
                    </md-list>
                </md-whiteframe>
            </md-layout>
        </md-layout>

</template>

error: pathspec 'src/components/Firestore.vue' did not match any file(s) known to git