/*global wpml_tm_strings, jQuery, Backbone, icl_ajxloaderimg, ajaxurl, ProgressBar */ /*jslint laxbreak: true */ var WPML_TM = WPML_TM || {}; (function () { 'use strict'; WPML_TM.Dashboard = Backbone.View.extend({ events: { 'click td[scope="row"] :checkbox': 'update_td', "click td.check-column :checkbox": 'icl_tm_select_all_documents', "change #icl_tm_languages :radio": 'change_radio', "change #parent-filter-control": 'populate_parent_list', "change #icl_language_selector": 'populate_parent_list', "click #duplicate-all": 'icl_tm_bulk_batch_selection', "click #translate-all": 'icl_tm_bulk_batch_selection', "click #update-none": 'icl_tm_bulk_batch_selection', "submit #icl_tm_dashboard_form": 'submit', "change #filter_type": 'show_hide_parent_controls' }, counts: { all: 0, duplicate: 0, translate: 0 }, init: function ( $ ) { var self = this; self.$ = $; self.counts.all = self.setElement( '.icl_tm_wrap' ); self.change_radio(); self.show_hide_parent_controls(); }, submit: function (e) { var self = this; self.recount(); if (self.counts.duplicate > 0) { e.preventDefault(); var post_ids = []; var langs = []; var radios = jQuery('#icl_tm_languages').find('tbody').find(':radio:checked').filter('[value=2]'); radios.each(function () { langs.push(jQuery(this).attr('name').replace('tr_action[', '').replace(']', '')); }); var languagesCount = langs.length; if (0 < languagesCount) { var post_id_boxes = self.$el.find('#icl-tm-translation-dashboard tbody td :checkbox:checked'); var post_ids_count = post_id_boxes.length; for (var p = 0; p < post_ids_count; p++) { for (var l = 0; l < languagesCount; l++) { post_ids.push({ postId: jQuery(post_id_boxes[p]).val(), languageCode: langs[l] }); } } var duplication_ui = new PostDuplication(post_ids, jQuery('#icl_dup_ovr_warn')); duplication_ui.sendBatch(); } } }, iclTmUpdateDashboardSelection: function () { var self = this; if (self.$el.find(':checkbox:checked').length > 0) { var checked_items = self.$el.find('td.check-column :checkbox'); if (self.$el.find('td[scope="row"] :checkbox:checked').length === self.$el.find('td[scope="row"] :checkbox').length) { checked_items.prop('checked', true); } else { checked_items.prop('checked', false); } } }, recount: function(){ var self = this; var radios = jQuery('#icl_tm_languages').find('tbody').find(':radio:checked'); self.counts.duplicate = radios.filter('[value=2]').length; self.counts.translate = radios.filter('[value=1]').length; self.counts.all = radios.length; return self; }, change_radio: function () { var bulk_select_radio, bulk_select_val, self; self = this; self.recount(); self.icl_tm_enable_submit(); self.icl_tm_dup_warn(); bulk_select_val = self.counts.duplicate === self.counts.all ? "2" : false; bulk_select_val = self.counts.translate === self.counts.all ? "1" : bulk_select_val; bulk_select_val = self.counts.translate === 0 && self.counts.duplicate === 0 ? "0" : bulk_select_val; bulk_select_radio = bulk_select_val !== false ? self.$el.find('[name="radio-action-all"]').filter('[value=' + bulk_select_val + ']') : self.$el.find('[name="radio-action-all"]'); bulk_select_radio.prop('checked', !!bulk_select_val); }, update_td: function () { var self = this; self.icl_tm_update_word_count_estimate(); self.iclTmUpdateDashboardSelection(); }, icl_tm_select_all_documents: function (e) { var self = this; self.$el.find('#icl-tm-translation-dashboard').find(':checkbox').prop('checked', !!jQuery(e.target).prop('checked')); self.icl_tm_update_word_count_estimate(); self.icl_tm_update_doc_count(); self.icl_tm_enable_submit(); }, icl_tm_update_word_count_estimate: function () { var self = this; self.icl_tm_enable_submit(); var element_rows = self.$el.find('tbody').find('tr'); var current_overall_word_count = 0; var icl_tm_estimated_words_count = jQuery('#icl-tm-estimated-words-count'); jQuery.each(element_rows, function () { var row = jQuery(this); if (row.find(':checkbox').prop('checked')) { var item_word_count = row.data('word_count'); var val = parseInt(item_word_count); val = isNaN(val) ? 0 : val; current_overall_word_count += val; } }); icl_tm_estimated_words_count.html(current_overall_word_count); self.icl_tm_update_doc_count(); }, populate_parent_list: function () { var self = this, parent_select = self.$( '#parent-filter-control' ), parent_taxonomy_item_container = self.$( '[name="parent-taxonomy-item-container"]' ), val = parent_select.val(); if ( val ) { parent_taxonomy_item_container.hide(); if ( val != 'any' ) { var ajax_loader = self.$( '' ); ajax_loader.insertBefore( parent_taxonomy_item_container ).css( { visibility: "visible", float: "none" } ); self.$.ajax( { type: "POST", url: ajaxurl, dataType: 'json', data: { action: 'icl_tm_parent_filter', type: val, from_lang: self.$( 'select[name="filter[from_lang]"]' ).val(), parent_id: self.$( '[name="filter[parent_id]"]' ).val() }, success: function ( response ) { parent_taxonomy_item_container.html( response.data.html ); parent_taxonomy_item_container.show(); ajax_loader.remove(); } } ); } } }, show_hide_parent_controls: function (e) { var self = this, selected_option = self.$( '#filter_type option:selected' ), parent_data = selected_option.data( 'parent' ), taxonomy_data = selected_option.data( 'taxonomy' ); if ( parent_data || taxonomy_data ) { self.$( '#parent-taxonomy-container' ).show(); self.fill_parent_type_select( parent_data, taxonomy_data ); self.populate_parent_list(); } else { self.$( '#parent-taxonomy-container' ).hide(); } }, fill_parent_type_select: function ( parent_data, taxonomy_data ) { var self = this, parent_select = self.$( '#parent-filter-control' ); parent_select.find( 'option' ).remove(); parent_select.append( '' ); if ( parent_data ) { parent_select.append( '' ); } if ( taxonomy_data ) { taxonomy_data = taxonomy_data.split( ',' ); for ( var i = 0; i < taxonomy_data.length; i++ ) { var parts = taxonomy_data[i].split( '=' ); parent_select.append( '' ); } } parent_select.val( parent_select.data( 'original' ) ); parent_select.data( 'original', '' ); if ( ! parent_select.val() ) { parent_select.val( 'any' ); } }, icl_update_button_label: function (dupl_count, trans_count) { var button_label; if (dupl_count > 0 && trans_count === 0) { button_label = wpml_tm_strings.BB_duplicate_all; } else if (dupl_count > 0 && trans_count > 0) { button_label = wpml_tm_strings.BB_mixed_actions; } else if (dupl_count === 0 && trans_count > 0) { button_label = wpml_tm_strings.BB_default; } else { button_label = wpml_tm_strings.BB_no_actions; } jQuery('#icl_tm_jobs_submit').html(button_label); }, icl_update_button_class: function (dupl_count, trans_count) { var button= jQuery('#icl_tm_jobs_submit'); var button_class= 'wpml-tm-button-basket'; if (dupl_count > 0 && trans_count === 0) { button.removeClass(button_class); } else { button.addClass(button_class); } }, icl_tm_dup_warn: function () { var self = this; if (self.counts.duplicate > 0 !== self.$el.find('[id="icl_dup_ovr_warn"]:visible').length > 0) { self.$el.find('#icl_dup_ovr_warn').fadeToggle(400); } self.icl_update_button_label(self.counts.duplicate, self.counts.translate); self.icl_update_button_class(self.counts.duplicate, self.counts.translate); }, icl_tm_bulk_batch_selection: function (e) { var self = this; var element = jQuery(e.target); var value = element.val(); element.prop('checked', true); self.$el.find('#icl_tm_languages').find('tbody input:radio[value=' + value + ']').prop('checked', true); self.change_radio(); return self; }, icl_tm_enable_submit: function () { var self = this; var hasSelection = (self.counts.duplicate > 0 || self.counts.translate > 0) && jQuery('#icl-tm-translation-dashboard').find('td :checkbox:checked').length > 0; jQuery('#icl_tm_jobs_submit').prop('disabled', !hasSelection); }, icl_tm_update_doc_count: function () { var self = this; var dox = self.$el.find('tbody td :checkbox:checked').length; jQuery('#icl-tm-sel-doc-count').html(dox); if (dox) { jQuery('#icl-tm-doc-wrap').fadeIn(); } else { jQuery('#icl-tm-doc-wrap').fadeOut(); } } }); var PostDuplication = Backbone.View.extend({ ui: {}, posts: [], duplicatedIDs: [], langs: '', initialize: function (posts, element) { var self = this; self.posts = posts; self.ui = new ProgressBar(); self.ui.overall_count = posts.length; self.ui.actionText = wpml_tm_strings.duplicating; element.replaceWith(self.ui.getDomElement()); self.ui.start(); }, sendBatch: function () { var nonce; var p; var postsToSend; var languages; var self = this; var postsDataToSend = self.posts.splice(0, 5); var postsDataToSendCount = postsDataToSend.length; if(0 < postsDataToSendCount) { postsToSend = []; languages = []; for (p = 0; p < postsDataToSendCount; p++) { if (-1 === jQuery.inArray(postsDataToSend[p].postId, postsToSend)) { postsToSend.push(postsDataToSend[p].postId); } if (-1 === jQuery.inArray(postsDataToSend[p].languageCode, languages)) { languages.push(postsDataToSend[p].languageCode); } } if(0 < postsToSend.length && 0 < languages.length) { nonce = wpml_tm_strings.wpml_duplicate_dashboard_nonce; jQuery.ajax({ type: "POST", url: ajaxurl, dataType: 'json', data: { action: 'wpml_duplicate_dashboard', duplicate_post_ids: postsToSend, duplicate_target_languages: languages, _icl_nonce: nonce }, success: function () { self.ui.change(postsToSend.length); self.duplicatedIDs = self.duplicatedIDs.concat(postsToSend); if (0 < self.posts.length) { self.sendBatch(); } else { self.ui.complete(wpml_tm_strings.duplication_complete, false); jQuery('#icl_tm_languages').find('tbody').find(':radio:checked').filter('[value=2]').prop('checked', false); self.setHierarchyNoticeAndSubmit(); } } }); } } }, setHierarchyNoticeAndSubmit: function () { var self = this; jQuery.ajax({ type: "POST", url: ajaxurl, dataType: 'json', data: { action: 'wpml_need_sync_message', duplicated_post_ids: self.duplicatedIDs.join(','), _icl_nonce: wpml_tm_strings.wpml_need_sync_message_nonce }, success: function () { jQuery('#icl_tm_dashboard_form').submit(); } }); } }); jQuery(function () { var tmDashboard = new WPML_TM.Dashboard(); tmDashboard.init(jQuery); }); }());