cms/app-client/app/components/playlist-component.js
author ymh <ymh.work@gmail.com>
Tue, 22 Nov 2016 18:41:04 +0100
changeset 434 58df2c256e00
parent 433 65e357e5eecb
child 459 6a296e92887f
permissions -rw-r--r--
remove uncesessary attribute

import Ember from 'ember';
import SocialShareKit from 'socialsharekit';

export default Ember.Component.extend({

    classNames: ['playlist-component'],

    filter: Ember.inject.service(),
    player: Ember.inject.service(),

    isLoading: false,

    model: [],
    documents: Ember.computed('model', 'filter.location', 'filter.language', 'filter.discourse', 'filter.date', 'filter.theme', function() {
        return this.get('model');
    }),

    documentsLoaded: Ember.observer('documents', function() {
        this.get('player').set('items', this.get('documents').map(function(document) {
            return document.get('id');
        }));
        if(this.get('player').get('items').length && this.get('player').get('playing') === false) {
            this.get('player').set('item', this.get('player').get('items')[0]);
        }
    }).on('init'),

    playerItemObserver: Ember.observer('player.item', function() {
        if(this.$() && this.get('player').get('item')) {
            var ul = this.$().find('ul');
            var li = this.$().find('li#' + this.get('player').get('item').replace('.', '\\.').replace('/', '\\/'));
            if(li.length) {
                if(li.offset().top - ul.offset().top < 0) {
                    ul.animate({
                        'scrollTop': ul.scrollTop() + li.offset().top - ul.offset().top
                    });
                } else if(li.offset().top + li.outerHeight() - ul.offset().top > ul.outerHeight()) {
                    ul.animate({
                        'scrollTop': ul.scrollTop() + li.offset().top  + li.outerHeight() - ul.offset().top  - ul.height()
                    });
                }
            }
        }
    }),

    didRender: function() {
        this._super(...arguments);
        this.$().find('ul').height(Ember.$('.corpus-app-wrapper').outerHeight() - (Ember.$('.filter-component').outerHeight() + this.$().find('h2').outerHeight()));
    },

    actions: {

        previous: function() {
            this.sendAction('pageAction', 'previous');
        },

        next: function() {
            this.sendAction('pageAction', 'next');
        },

        select: function(id) {
            this.get('player').select(id);
            this.get('player').displayMetadata('notice');
        },

        play: function(id) {
            this.get('player').play(id);
        },

        pause: function() {
            this.get('player').pause();
        },

        displayTranscript: function() {
            this.get('player').displayAdditionalInformation('transcript');
        },

        displayNotice: function() {
            if(this.get('player').get('window') !== 'notice') {
                this.get('player').displayMetadata('notice');
            } else {
                this.get('player').displayMetadata(false);
            }
        },

        shareLinkRender: (elemId) => {
            SocialShareKit.init({selector: "#"+elemId+" .ssk"});
            Ember.$("#"+elemId+" .playlist-share-button-close").click(function() {
                // This is done like this because I was not able to register an action directly on the button like shgown on ember-tooltips documentaion (https://github.com/sir-dunxalot/ember-tooltips#popover-on-element)
                Ember.$("#corpus-app").click();
            });
            return true;
        },

        shareLinkShow: (elemId) => {
            let input = Ember.$("#"+elemId+" input");
            input.get(0).setSelectionRange(0, input.val().length);
            input.get(0).select(0, input.val().length);
            return true;
        },

    }

});