cms/app-client/app/controllers/application.js
author Chloe Laisne <chloe.laisne@gmail.com>
Fri, 24 Jun 2016 02:07:09 +0200
changeset 204 dd969e178944
parent 203 2ee21302dc47
child 209 35cb7200bb0a
permissions -rw-r--r--
Fix linting, remove logs and dead code

import Ember from 'ember';

export default Ember.Controller.extend({

    queryParams: ['location', 'date', 'detail', {
        language: 'langue',
        discourse: 'discours',
        theme: 'thematique'
    }],

    date: [],
    discourse: null,
    language: null,
    location: null,
    theme: null,

    filter: Ember.inject.service(),
    setFilter: Ember.observer('discourse', 'language', 'location', 'theme', function(sender, key) {
        this.get('filter').set(key, this.get(key));
    }),
    filterObserver: Ember.observer('filter.discourse', 'filter.language', 'filter.location', 'filter.theme', function(sender, key) {
        key = key.split('.').pop();
        this.set(key, this.get('filter').get(key));
    }),

    setDateFilter: Ember.observer('date', function(sender, key) {
        var intervals = [];
        this.get(key).forEach(function(interval) {
            interval = interval.split('-');
            if(interval.length > 1) {
                var array = [];
                for(var i = interval[0]; i <= interval[1]; i++) {
                    array.push(parseInt(i));
                }
                interval = array;
            } else {
                interval = parseInt(interval);
            }
            intervals = intervals.concat(interval);
        });
        this.get('filter').set(key, intervals);
    }),
    dateFilterObserver: Ember.observer('filter.date', function(sender, key) {
        key = key.split('.').pop();
        var intervals = [];
        this.get('filter').get(key).forEach(function(date) {
            var isInterval = false;
            intervals.forEach(function(interval) {
                if(interval.length && (interval.includes(date + 1) || interval.includes(date - 1))) {
                    interval.push(date);
                    isInterval = true;
                }
            });
            if (!isInterval) {
                intervals.push([date]);
            }
        });
        intervals.forEach(function(interval, index) {
            if(interval.length > 1) {
               intervals[index] =  interval.shift() + '-' + interval.pop();
            } else {
               intervals[index] =  interval.toString();
            }
        });
        if(!this.arraysEqual(this.get(key).toArray(), intervals)) {
            this.set(key, intervals);    
        }
    }),

    arraysEqual: function(a, b) {
        if (a === b) {
            return true;
        }
        if (a == null || b == null) {
            return false;
        }
        if (a.length !== b.length) {
            return false;
        }
        for(var i = 0; i < a.length; ++i) {
            if(a[i] !== b[i]) {
                return false;
            }
        }
        return true;
    },

    detail: null,

    currentId: null,
    currentItem: Ember.computed('currentId', function() {
        Ember.$(".result-item").toggleClass("playing", false);
        if (this.get('currentId') === null){
            return null;
        }
        Ember.$("div[id='" + this.get('currentId') + "']").toggleClass("playing", true);
        return this.store.findRecord('document', this.get('currentId'));
    }),

    modalItem: Ember.computed('detail', function() {
        return this.store.findRecord('document', this.get('detail'));
    }),

    actions: {

        changeDocument: function(docDirection){
            var direction = (docDirection === "next") ? 1 : -1;
            var currentObject = this.get("filteredDocuments").findBy('id', this.get("currentItem").get('id'));
            if ( currentObject !== 'undefined'){
                var index = this.get("filteredDocuments").indexOf(currentObject);
                if ( typeof(this.get("filteredDocuments").objectAt(index+direction)) !== 'undefined'){
                    return this.set('currentId', this.get("filteredDocuments").objectAt(index+direction).id);
                }
            }
            return this.set('currentId', this.get('filteredDocuments').get('firstObject').id);
        },
        play: function(item){
            this.set("currentId", item.id);
        },

        showMore: function(item){
            var domItem = Ember.$("#"+item.id.replace( /(:|\.|\[|\]|,)/g, "\\$1" ));
            if (domItem.hasClass("show-more")){
                domItem.toggleClass("show-more", false);
            } else{
                Ember.$(".result-item").toggleClass("show-more", false);
                domItem.toggleClass("show-more", true);
            }
        },

        toggleModal: function(item){
            if (typeof(item) !== 'undefined'){
                this.set("detail", item.id);
            } else {
                this.set("detail", null);
            }
        }

    }
});