term-row-view.js 2.77 KB
/*globals _, TaxonomyTranslation, document, Backbone, jQuery */

(function () {
	"use strict";

	TaxonomyTranslation.views.TermRowView = Backbone.View.extend({

		tagName: "tr",
		model: TaxonomyTranslation.models.TermRow,
		termViews: {},
		className: '',
		events: {
			'click .js-copy-to-all-langs': 'copyToAllLangs'
		},

		initialize: function () {
			var self = this;

			self.listenTo(TaxonomyTranslation.classes.taxonomy, 'syncDataLoaded', self.maybeHide);
		},
		maybeHide: function () {
			var self = this;
			var visible = false;
			var terms = self.model.get("terms");
			_.each(TaxonomyTranslation.data.syncData, function (correction) {
				_.each(terms, function (term) {
					if (correction.translated_id == term.get("term_taxonomy_id")) {
						visible = true;
					}
				});
			});
			if (visible) {
				self.$el.show();
			} else {
				self.$el.hide();
			}
		},

		render: function () {
			var termsFragments = {};
			var self  = this;
			var langs = TaxonomyTranslation.util.langCodes;
			var terms = self.model.get("terms");
			var originalTerm = null;
			
			_.each(langs, function (lang) {
				var term = terms[lang];
				if (term === undefined) {
					term = new TaxonomyTranslation.models.Term({language_code: lang, trid: self.model.get("trid")});
					terms[lang] = term;
					self.model.set("terms", terms, {silent: true});
				}
				if ( term.isOriginal() ) {
					originalTerm = term;
				}
				var newView = new TaxonomyTranslation.views.TermView({model: term});
				self.termViews[lang] = newView;
				if (TaxonomyTranslation.mainView.mode === 'sync') {
					termsFragments[lang] = newView.loadSyncData().el;
				} else {
					termsFragments[lang] = newView.render().el;
				}
			});

			if ( originalTerm ) {
				var newRowFragment = document.createDocumentFragment();
	
				if ( TaxonomyTranslation.mainView.mode !== 'sync' ) {
					var originalView = new TaxonomyTranslation.views.TermOriginalView({model: originalTerm });
					newRowFragment.appendChild( originalView.render().el );
				
					var newRowLangs = document.createElement( 'td' );
					jQuery( newRowLangs ).addClass( 'wpml-col-languages' );
					_.each(langs, function(lang){
						newRowLangs.appendChild(termsFragments[lang]);
					});
		
					newRowFragment.appendChild( newRowLangs );
				} else {
					_.each(langs, function(lang){
						var newRowTD = document.createElement( 'td' );
						newRowTD.appendChild(termsFragments[lang]);
						newRowFragment.appendChild( newRowTD );
					});
				}
				self.$el.html(newRowFragment);
			}
			
			return self;

		},
		copyToAllLangs: function () {
			var self = this;
			TaxonomyTranslation.classes.copyAllPopUpView = new TaxonomyTranslation.views.CopyAllPopUpView( { model: self.model } );
			TaxonomyTranslation.classes.copyAllPopUpView.open( );
			
		}
	});
}(TaxonomyTranslation));