| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | import { ReactiveCache } from '/imports/reactiveCache';const translationsPerPage = 25;BlazeComponent.extendComponent({  mixins() {    return [Mixins.InfiniteScrolling];  },  onCreated() {    this.error = new ReactiveVar('');    this.loading = new ReactiveVar(false);    this.translationSetting = new ReactiveVar(true);    this.findTranslationsOptions = new ReactiveVar({});    this.numberTranslations = new ReactiveVar(0);    this.page = new ReactiveVar(1);    this.loadNextPageLocked = false;    this.callFirstWith(null, 'resetNextPeak');    this.autorun(() => {      const limitTranslations = this.page.get() * translationsPerPage;      this.subscribe('translation', this.findTranslationsOptions.get(), 0, () => {        this.loadNextPageLocked = false;        const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');        this.calculateNextPeak();        const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');        if (nextPeakBefore === nextPeakAfter) {          this.callFirstWith(null, 'resetNextPeak');        }      });    });  },  events() {    return [      {        'click #searchTranslationButton'() {          this.filterTranslation();        },        'keydown #searchTranslationInput'(event) {          if (event.keyCode === 13 && !event.shiftKey) {            this.filterTranslation();          }        },        'click #newTranslationButton'() {          Popup.open('newTranslation');        },        'click a.js-translation-menu': this.switchMenu,      },    ];  },  filterTranslation() {    const value = $('#searchTranslationInput').first().val();    if (value === '') {      this.findTranslationsOptions.set({});    } else {      const regex = new RegExp(value, 'i');      this.findTranslationsOptions.set({        $or: [          { language: regex },          { text: regex },          { translationText: regex },        ],      });    }  },  loadNextPage() {    if (this.loadNextPageLocked === false) {      this.page.set(this.page.get() + 1);      this.loadNextPageLocked = true;    }  },  calculateNextPeak() {    const element = this.find('.main-body');    if (element) {      const altitude = element.scrollHeight;      this.callFirstWith(this, 'setNextPeak', altitude);    }  },  reachNextPeak() {    this.loadNextPage();  },  setError(error) {    this.error.set(error);  },  setLoading(w) {    this.loading.set(w);  },  translationList() {    const translations = ReactiveCache.getTranslations(this.findTranslationsOptions.get(), {      sort: { modifiedAt: 1 },      fields: { _id: true },    });    this.numberTranslations.set(translations.length);    return translations;  },  translationNumber() {    return this.numberTranslations.get();  },  switchMenu(event) {    const target = $(event.target);    if (!target.hasClass('active')) {      $('.side-menu li.active').removeClass('active');      target.parent().addClass('active');      const targetID = target.data('id');      this.translationSetting.set('translation-setting' === targetID);    }  },}).register('translation');Template.translationRow.helpers({  translationData() {    return ReactiveCache.getTranslation(this.translationId);  },});Template.editTranslationPopup.helpers({  translation() {    return ReactiveCache.getTranslation(this.translationId);  },  errorMessage() {    return Template.instance().errorMessage.get();  },});Template.newTranslationPopup.onCreated(function () {  this.errorMessage = new ReactiveVar('');});Template.newTranslationPopup.helpers({  translation() {    return ReactiveCache.getTranslation(this.translationId);  },  errorMessage() {    return Template.instance().errorMessage.get();  },});BlazeComponent.extendComponent({  onCreated() {},  translation() {    return ReactiveCache.getTranslation(this.translationId);  },  events() {    return [      {        'click a.edit-translation': Popup.open('editTranslation'),        'click a.more-settings-translation': Popup.open('settingsTranslation'),      },    ];  },}).register('translationRow');BlazeComponent.extendComponent({  events() {    return [      {        'click a.new-translation': Popup.open('newTranslation'),      },    ];  },}).register('newTranslationRow');Template.editTranslationPopup.events({  submit(event, templateInstance) {    event.preventDefault();    const translation = ReactiveCache.getTranslation(this.translationId);    const translationText = templateInstance.find('.js-translation-translation-text').value.trim();    Meteor.call(      'setTranslationText',      translation,      translationText    );    Popup.back();  },});Template.newTranslationPopup.events({  submit(event, templateInstance) {    event.preventDefault();    const language = templateInstance.find('.js-translation-language').value.trim();    const text = templateInstance.find('.js-translation-text').value.trim();    const translationText = templateInstance.find('.js-translation-translation-text').value.trim();    Meteor.call(      'setCreateTranslation',      language,      text,      translationText,      function(error) {        const textMessageElement = templateInstance.$('.text-taken');        if (error) {          const errorElement = error.error;          if (errorElement === 'text-already-taken') {            textMessageElement.show();          }        } else {          textMessageElement.hide();          Popup.back();        }      },    );    Popup.back();  },});Template.settingsTranslationPopup.events({  'click #deleteButton'(event) {    event.preventDefault();    Translation.remove(this.translationId);    Popup.back();  }});
 |