wpml-tm-editor-footer-view.js 4.84 KB
/*global jQuery, ajaxurl, Backbone, WpmlTmEditorModel, window, tmEditorStrings, _ */

var WPML_TM = WPML_TM || {};

(function () {
	"use strict";

	WPML_TM.editorFooterView = Backbone.View.extend({
		tagName: 'footer',
		className: 'wpml-translation-action-buttons',

		events: {
			'click .js-save': 'save',
			'click .js-resign': 'resign',
			'click .js-dialog-cancel': 'cancel',
			'click .js-save-and-close': 'save_and_close',
			'change .js-toggle-translated': 'toggleTranslated'
		},
		initialize: function (options) {
			var self = this;
			self.mainView = options.mainView;
			self.listenTo(self.model, 'translationUpdated', self.setDirty);
		},
		save: function () {
			var self = this;
			self.doSave();
		},
		editIndependently: function () {
			WpmlTmEditorModel.is_duplicate = false;
		},
		doSave: function () {
			var self = this;
			var saveMessage = jQuery('.js-saving-message');
			saveMessage.show();
			self.disableButtons(true);
			self.listenToOnce(self.model, 'saveJobSuccess', function () {
				saveMessage.hide();
				self.disableButtons(false);
			});
			self.model.save(jQuery('#icl_tm_editor').serialize());

			self.setDirty(false);
			return self;
		},
		resign: function () {
			if (window.confirm(tmEditorStrings.resign_translation)) {
				window.location.href = WPML_core.sanitize( tmEditorStrings.resign_url );
			}
		},
		cancel: function () {
			this.redirect_to_return_url('wpml_tm_cancel=1');
		},
		save_and_close: function () {
			var self = this;
			self.listenToOnce(self.model, 'saveJobSuccess', function () {
				self.setDirty(false);
				this.redirect_to_return_url('wpml_tm_saved=1');
			});

			self.save();
		},
		redirect_to_return_url: function (param_string) {
			var url = WpmlTmEditorModel.return_url;
			if (url.indexOf('?') < 0) {
				url += '?' + param_string;
			} else {
				url += '&' + param_string;
			}
			window.location = WPML_core.sanitize( url );
		},
		render: function () {
			var self = this;
			self.$el.html(WPML_TM['templates/translation-editor/footer.html'](tmEditorStrings));
			self.progressBar = self.$el.find('.js-progress-bar');
			self.translationComplete = self.$el.find(':checkbox[name=complete]');
			self.showProgressBar();
			self.maybeShowTranslationComplete();
			self.maybeHideHideCompletedSwitcher();

			window.onbeforeunload = function (e) {
				if (self.isDirty()) {
					return tmEditorStrings.confirmNavigate;
				}
			};
			_.defer(_.bind(self.maybeShowDuplicateDialog, self));
		},
		maybeShowDuplicateDialog: function () {
			var self = this;
			if (WpmlTmEditorModel.is_duplicate) {
				self.dialog = new WPML_TM.editorEditIndependentlyDialog(self);
			}
		},
		showProgressBar: function () {

			var self = this;
			self.progressBar.css('display', WpmlTmEditorModel.requires_translation_complete_for_each_field ? 'inline-block' : 'none');
			self.progressBar.find('.ui-progressbar-value').height(self.progressBar.find('.progress-bar-text').height());
			self.progressBar.progressbar({});
			var value = parseInt(self.model.progressPercentage(), 10);
			self.progressBar.find('.progress-bar-text').html(value + '% Complete');
			self.progressBar.find('.ui-progressbar-value').attr('data-progressbar-text', value + '% Complete');
			self.progressBar.progressbar({value: value});
			self.progressBar.find('.ui-progressbar-value').height(self.progressBar.find('.progress-bar-text').height());

			return self;
		},
		setCompleteCheckBox: function () {
			var self = this;
			if (WpmlTmEditorModel.requires_translation_complete_for_each_field) {
				self.translationComplete.prop('checked', self.model.progressPercentage() === 100);
			}
			return self;
		},
		maybeShowTranslationComplete: function () {
			var self = this;
			if (WpmlTmEditorModel.requires_translation_complete_for_each_field) {
				self.translationComplete.parent().hide();
			} else {
				self.translationComplete.prop('checked', WpmlTmEditorModel.translation_is_complete);
			}
		},
		maybeHideHideCompletedSwitcher: function () {
			var self = this;
			if (!WpmlTmEditorModel.display_hide_completed_switcher) {
				self.$el.find('#wpml_tm_toggle_translated').parent().hide();
			}
		},
		progressBar: function () {
			return this.$el.find('.js-progress-bar');
		},
		setDirty: function (value) {
			this.model.set('is_dirty', value);
		},
		isDirty: function () {
			return this.model.get('is_dirty');
		},
		disableButtons: function (state) {
			this.$el.find('.js-save, .js-resign, .js-dialog-cancel, .js-save-and-close').prop('disabled', state);
		},
		disableSaveButtons: function (state) {
			this.$el.find('.js-save, .js-save-and-close').prop('disabled', state);
		},
		hideResignButton: function (state) {
			if (state) {
				this.$el.find('.js-resign').hide();
			} else {
				this.$el.find('.js-resign').show();
			}
		},
		toggleTranslated: function() {
			var toggle = this.$el.find('.js-toggle-translated');
			this.mainView.hideTranslated(toggle.is(':checked'));
		}
	});
}());