term-row.js 3.86 KB
Newer Older
Den Isahac's avatar
Den Isahac committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
(function () {
    TaxonomyTranslation.models.TermRow = Backbone.Model.extend({

        defaults: function () {
            return {
                terms: {},
                trid: false,
                allTranslated: false,
                parents: {}
            };
        },

        idAttribute: "trid",

        initialize: function (data, options) {
            var self = this;
            self.updateAllTranslated();
            var parents = {};
            _.each(data.terms, function (term, lang) {
                parents[lang] = term.get("parent");
            });

            self.set("parents", parents);
        },

        parentOf: function (parentID) {
            var self = this;
            var parents = self.get("parents");
            var res = false;
            _.each(parents, function (parent, lang) {
                if (parent == parentID) {
                    res = true;
                    return res;
                }
            });

            return res;
        },

        add: function (term) {

            if (!this.get("trid") && term.get("trid")) {
                this.set("trid", term.get("trid"), {silent: true});
            }

            if (term.get("trid") == this.get("trid") && term.get("language_code") && term.get("name")) {
                var terms = this.get("terms");
                terms[term.get("language_code")] = term;
                this.set("terms", terms, {silent: true});
            }
            this.updateAllTranslated();
        },

        updateAllTranslated: function () {
            var self = this;
            var terms = self.get("terms");
            self.set("allTranslated", true, {silent: true});
            _.each(TaxonomyTranslation.util.langCodes, function (lang) {
                if (terms === undefined || terms[lang] === undefined || !terms[lang].get("name")) {
                    self.set("allTranslated", false, {silent: true});
                }
            });
            return self;
        },

        allTermsTranslated: function () {
            this.updateAllTranslated();
            return this.get("allTranslated");
        },
        translatedIn: function (lang) {
            var self = this;
            var terms = self.get("terms");
            var res = true;
            if (terms === undefined || terms[lang] === undefined || !terms[lang].get("name")) {
                res = false;
            }
            return res;
        },
        matches: function (search) {
            var self = this;
            var terms = self.get("terms");
            var res = false;
            _.each(TaxonomyTranslation.util.langCodes, function (lang) {
                if (self.matchesInLang(search, lang) === true) {
                    res = true;
                    return true;
                }
            });
            return res;
        },
        matchesInLang: function (search, lang) {
            var self = this;
            var terms = self.get("terms");
            var res = false;
            if (
                terms !== undefined
                && terms[lang] !== undefined
                && terms[lang].get("name")
                && terms[lang].get("name").toLowerCase().indexOf(search.toLowerCase()) > -1
            ) {
                res = true;
            }
            return res;
        },
        unSyncFilter: function () {
            var self = this;
            var syncData = TaxonomyTranslation.data.syncData;
            var terms = self.get("terms");
            var res = false;
            _.each(syncData, function (correction) {
                _.each(TaxonomyTranslation.util.langCodes, function (lang) {
                    if (terms[lang] !== undefined && correction.translated_id == terms[lang].get('term_taxonomy_id')) {
                        res = true;
                    }
                });
            });

            return res;
        }
    })
})(TaxonomyTranslation);