156 lines
4.6 KiB
JavaScript
156 lines
4.6 KiB
JavaScript
/*globals labels */
|
|
|
|
(function () {
|
|
TaxonomyTranslation.views.TermPopUpView = Backbone.View.extend({
|
|
|
|
tagName: 'div',
|
|
template: WPML_core[ 'templates/taxonomy-translation/term-popup.html' ],
|
|
model: TaxonomyTranslation.models.Term,
|
|
|
|
events: {
|
|
'click .cancel': 'close',
|
|
'click .term-save': 'saveTerm',
|
|
'click .js-button-copy': 'copyOriginal',
|
|
'keydown': 'handleEnter',
|
|
'input #term-name': 'updateUI',
|
|
'focusout input#term-name': 'generateSlug'
|
|
},
|
|
initialize: function () {
|
|
var self = this;
|
|
self.listenTo(self.model, 'translationSaved', self.close);
|
|
self.listenTo(self.model, 'saveFailed', self.render);
|
|
self.dialog = null;
|
|
return self;
|
|
},
|
|
|
|
render: function () {
|
|
|
|
var self = this,
|
|
trid = self.model.get('trid'),
|
|
term = self.model.getNameSlugAndDescription(),
|
|
term_meta = self.model.getMetaData(),
|
|
original_term_meta = TaxonomyTranslation.classes.taxonomy.getOriginalTermMeta( trid ),
|
|
original_term = TaxonomyTranslation.classes.taxonomy.getOriginalTerm( trid );
|
|
|
|
self.$el.html(
|
|
this.template({
|
|
trid: trid,
|
|
lang: self.model.get('language_code'),
|
|
source_lang: original_term.get( 'language_code' ),
|
|
langs: TaxonomyTranslation.data.activeLanguages,
|
|
ttid: self.model.get('term_taxonomy_id'),
|
|
term: term,
|
|
original_term: original_term.getNameSlugAndDescription(),
|
|
term_meta: term_meta,
|
|
original_term_meta: original_term_meta
|
|
})
|
|
);
|
|
|
|
self.delegateEvents();
|
|
return self;
|
|
},
|
|
handleEnter: function (e) {
|
|
var self = this;
|
|
if (self.$el.find('input:focus').length !== 0 && e.keyCode == 13) {
|
|
self.saveTerm(e);
|
|
}
|
|
return self;
|
|
},
|
|
saveTerm: function (e) {
|
|
var self = this,
|
|
meta_data = {};
|
|
|
|
self.undelegateEvents();
|
|
|
|
e.preventDefault();
|
|
var name = self.$el.find('#term-name').val(),
|
|
slug = self.$el.find('#term-slug').val(),
|
|
description = self.$el.find('#term-description').val();
|
|
|
|
|
|
var term_metas = self.$el.find('.term-meta');
|
|
_.each( term_metas, function ( meta_object ) {
|
|
meta_data[ meta_object.dataset.metaKey ] = meta_object.value;
|
|
});
|
|
|
|
if (name) {
|
|
self.$el.find('.spinner').show();
|
|
self.$el.find('.term-save').prop( 'disabled', true );
|
|
self.$el.find('.cancel').prop( 'disabled', true );
|
|
self.model.save(name, slug, description, meta_data);
|
|
}
|
|
|
|
return self;
|
|
},
|
|
open: function ( trid, lang ) {
|
|
var self = this;
|
|
self.render();
|
|
var popUpDomEl = jQuery('#' + trid + '-popup-' + lang);
|
|
popUpDomEl.append( self.$el );
|
|
|
|
self.dialog = jQuery( '#icl_tt_form_' + trid + '_' + lang );
|
|
self.dialog.dialog({
|
|
autoOpen: true,
|
|
modal: true,
|
|
minWidth: self.getMinDialogWidth(),
|
|
resizable: false,
|
|
draggable: false,
|
|
dialogClass: 'dialog-fixed otgs-ui-dialog'
|
|
});
|
|
self.setElement( self.dialog );
|
|
self.delegateEvents();
|
|
self.updateUI();
|
|
|
|
},
|
|
getMinDialogWidth: function ( ) {
|
|
return 800;
|
|
},
|
|
close: function () {
|
|
if ( this.dialog ) {
|
|
this.dialog.dialog( 'close' );
|
|
this.undelegateEvents();
|
|
this.remove();
|
|
this.dialog = null;
|
|
}
|
|
},
|
|
copyOriginal: function ( e ) {
|
|
var self = this,
|
|
original = jQuery( e.currentTarget ).prev().val();
|
|
jQuery( e.currentTarget ).next().val( original );
|
|
self.generateSlug();
|
|
self.updateUI();
|
|
},
|
|
updateUI: function ( ) {
|
|
var self = this;
|
|
self.$el.find( '.term-save' ).prop( 'disabled', self.$el.find( '#term-name').val() === '' );
|
|
},
|
|
generateSlug: function() {
|
|
var self = this,
|
|
term_slug = self.$el.find( '#term-slug' ),
|
|
term_name = self.$el.find( '#term-name' );
|
|
if ('' === term_slug.val() && '' !== term_name.val()) {
|
|
term_slug.prop('disabled', true);
|
|
term_slug.css('background', 'url(' + window.icl_ajxloaderimg_src + ') no-repeat left center');
|
|
jQuery.ajax({
|
|
url: ajaxurl,
|
|
type: "POST",
|
|
data: {
|
|
action: 'wpml_generate_term_slug',
|
|
term: term_name.val(),
|
|
nonce: labels.wpml_generate_unique_slug_nonce,
|
|
language_code: self.model.get('language_code'),
|
|
taxonomy: TaxonomyTranslation.classes.taxonomy.get("taxonomy"),
|
|
},
|
|
success: function(response) {
|
|
if( true === response.success ) {
|
|
term_slug.val( response.data.slug );
|
|
}
|
|
term_slug.prop('disabled', false);
|
|
term_slug.css('background', '');
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
});
|
|
})(TaxonomyTranslation); |