PluginProbe
Polylang / 2.8
Polylang v2.8
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | js/admin.js +66 -204 2.92.8 View file →
@@ -1,20 +1,20 @@
1 1 /**
2 2 * @package Polylang
3 3 */
4 4
5 -jQuery(
5 +jQuery( document ).ready(
6 6 function( $ ) {
7 + var transitionTimeout;
7 8
8 9 // languages list table
9 10 // accessibility to row actions on focus
10 11 // mainly copy paste of WP code from common.js
11 - var transitionTimeout;
12 12 $( 'table.languages' ).on(
13 13 { // restricted to languages list table
14 14 focusin: function() {
15 15 clearTimeout( transitionTimeout );
16 - var focusedRowActions = $( this ).find( '.row-actions' );
16 + focusedRowActions = $( this ).find( '.row-actions' );
17 17 // transitionTimeout is necessary for Firefox, but Chrome won't remove the CSS class without a little help.
18 18 $( '.row-actions' ).not( this ).removeClass( 'visible' );
19 19 focusedRowActions.addClass( 'visible' );
20 20 },
@@ -31,216 +31,81 @@
31 31 },
32 32 'tr'
33 33 ); // acts on the whole tr instead of single td as we have actions links in several columns
34 34
35 - /**
36 - * Common functions and variables for overriding languages and flags dropdown list by a jQuery UI selectmenu widget.
37 - */
38 -
39 - // Add a boolean variable to be able to check jQuery UI >= 1.12 which is introduced in WP 5.6.
40 - // Backward compatibility WP < 5.6
41 - var isJqueryUImin112 = $.ui.version >= '1.12.0';
42 - // Allow to check if a flag list dropdown is present. Not present in the Wizard steps or other settings page.
43 - var flagListExist = $( "#flag_list" ).length;
44 - // Allow to check if a language list dropdown is present. Not present in other settings page.
45 - var langListExist = $( "#lang_list" ).length;
46 - // jQuery UI selectmenu widget width option
47 - var defaultSelectmenuWidth = '95%';
48 - var wizardSelectmenuWidth = '100%';
49 -
50 - // Inject flag image when jQuery UI selectmenu is created or an item is selected.
51 - // jQuery UI 1.12 introduce a wrapper inside de li tag which is necessary to selectmenu widget to work correctly.
52 - // Mainly copy from the orginal jQuery UI 1.12 selectmenu widget _renderItem method.
53 - // Note this code works fine with jQuery UI 1.11.4 too.
54 - var selectmenuRenderItem = function( ul, item ) {
55 - var li = $( '<li>' );
56 - var wrapper = $( '<div>');
57 -
58 - if ( item.disabled ) {
59 - this._addClass( li, null, "ui-state-disabled" );
60 - }
61 - this._setText( wrapper, item.label );
62 -
63 - // Add the flag from the data attribute in the selected element.
64 - wrapper.prepend( $( item.element ).data( 'flag-html' ) );
65 - wrapper.children( 'img' ).addClass( 'ui-icon' );
66 -
67 - return li.append( wrapper ).appendTo( ul );
35 + // Common functions for overriding language and flag dropdown list.
36 + var selectmenuRenderItem = function( wrapper, item ) {
37 + var li = $( '<li>' ).text( item.label ).prepend( $( item.element ).data( 'flag-html' ) );
38 + li.children( 'img' ).addClass( 'ui-icon' );
39 + return li.appendTo( wrapper );
68 40 };
69 - // Override selected item to inject flag for jQuery UI less than 1.12.
70 41 var selectmenuRefreshButtonText = function( selectElement ) {
71 42 var buttonText = $( selectElement ).selectmenu( 'instance' ).buttonText;
72 43 buttonText.prepend( $( selectElement ).children( ':selected' ).data( 'flag-html' ) );
73 44 buttonText.children( 'img' ).addClass( 'ui-icon' );
74 45 };
75 - // Override selected item since jQuery UI 1.12 which introduces extension point method _renderButtonItem.
76 - // @see https://api.jqueryui.com/1.12/selectmenu/#method-_renderButtonItem _renderButtonItem documentation.
77 - var selectmenuRenderButtonItem = function ( selectElement ) {
78 - var buttonItem = $( '<span>' );
79 - this._setText( buttonItem, selectElement.label );
80 - this._addClass( buttonItem, "ui-selectmenu-text" );
46 + // Overrides the flag dropdown list with our customized jquery ui selectmenu.
81 47
82 - // Add the flag from the data attribute in the selected element.
83 - buttonItem.prepend( $( selectElement.element ).data( 'flag-html' ) );
84 - buttonItem.children( 'img' ).addClass( 'ui-icon' );
48 + // Inject flag image when jQuery UI selectmenu is created or an item is selected.
49 + $( '#flag_list' ).on(
50 + 'selectmenucreate selectmenuselect',
51 + function(){
52 + selectmenuRefreshButtonText( this );
53 + }
54 + );
55 + // Refresh jQuery UI selectmenu when the value is changed programmatically: select another language or edit an existing language.
56 + // For putting the focus in the list on the selected item and injecting the right flag on the selected item.
57 + $( '#flag_list' ).on(
58 + 'selectmenuopen',
59 + function(){
60 + $( this ).selectmenu( 'refresh' ).trigger( 'selectmenuselect' );
61 + }
62 + );
63 + // Create the jQuery UI selectmenu widget
64 + $( '#flag_list' ).selectmenu( { width: '100%' } );
65 + // Overrides each item in the jQuery UI selectmenu list by injecting flag image.
66 + $( '#flag_list' ).selectmenu( 'instance' )._renderItem = selectmenuRenderItem;
85 67
86 - return buttonItem;
87 - }
68 + // Language choice in predefined languages in Polylang Languages settings page and wizard.
69 + // Overrides the predefined language dropdown list with our customized jquery ui selectmenu.
88 70
89 - /**
90 - * Initialize a jQuery UI selectmenu widget on a DOM element
91 - *
92 - * @param {*} element - The jQuery object representing the DOM element to attach the widget with.
93 - * @param {*} config - All the parameters - options and callbacks - necessary to configure the jQuery UI selectmenu widget.
94 - * @return {Object} - The jQuery UI selectmenu widget object instance.
95 - */
96 - function initializeSelectmenuWidget( element, config ) {
97 - // Create the jQuery UI selectmenu widget for flags list dropdown and return its instance.
98 - var selectmenuWidgetInstance = element.selectmenu( config ).selectmenu( 'instance' );
99 - // Overrides each item in the jQuery UI selectmenu list by injecting flag image.
100 - selectmenuWidgetInstance._renderItem = selectmenuRenderItem;
101 - // Override the selected item rendering for jQuery UI 1.12
102 - if ( isJqueryUImin112 ) {
103 - selectmenuWidgetInstance._renderButtonItem = selectmenuRenderButtonItem;
104 - // Need to refresh to take in account the new button item rendering method after the selectmenu widget instanciaion.
105 - selectmenuWidgetInstance.refresh();
71 + // Inject flag image when jQuery UI selectmenu is created or an item is selected.
72 + $( '#lang_list' ).on(
73 + 'selectmenucreate selectmenuselect',
74 + function() {
75 + selectmenuRefreshButtonText( this );
106 76 }
107 - return selectmenuWidgetInstance
108 - }
109 - /**
110 - * Selectmenu widget common parameters for its configuration: options and callbacks.
111 - */
77 + );
78 + // Create the jQuery UI selectmenu widget
79 + $( '#lang_list' ).selectmenu( { width: '100%' } );
80 + // Overrides each element in the jQuery UI selectmenu list by injecting flag image.
81 + $( '#lang_list' ).selectmenu( 'instance' )._renderItem = selectmenuRenderItem;
112 82
113 - // Selectmenu widget options
114 - var selectmenuOptions = { width: defaultSelectmenuWidth };
83 + // Languages form
84 + // Fills the fields based on the language dropdown list choice
85 + $( '#add-lang #lang_list' ).on(
86 + 'selectmenuchange',
87 + function() {
88 + var value = $( this ).val().split( ':' );
89 + var selected = $( "option:selected", this ).text().split( ' - ' );
90 + $( '#lang_slug' ).val( value[0] );
91 + $( '#lang_locale' ).val( value[1] );
92 + $( 'input[name="rtl"]' ).val( [value[2]] );
93 + $( '#lang_name' ).val( selected[0] );
94 + $( '#flag_list').val( value[3] );
115 95
116 - // Selectmenu widget callbacks
117 - var selectmenuFlagListCallbacks = {};
118 - // Callbacks when Selectmenu widget create or select event is triggered.
119 - var createSelectCallback = function( event, ui ) {
120 - selectmenuRefreshButtonText( event.target );
121 - }
96 + // Refresh the jQuery UI selectmenu flags list.
97 + $( '#flag_list' ).selectmenu( 'refresh' ).trigger( 'selectmenuselect' );
98 + }
99 + );
122 100
123 - /**
124 - * Overrides the flag dropdown list with our customized jquery ui selectmenu.
125 - */
126 -
127 - // Callbacks when Selectmenu widget change or open event is triggered.
128 - // Needed to correctly refresh the selected element in the list when editing an existing language or when the value change is triggered by the language choice.
129 - // jQuery UI 1.11 callback version.
130 - var changeOpenCallback = function( event, ui ){
131 - selectmenuRefreshButtonText( $( event.target ).selectmenu( 'refresh' ) );
132 - }
133 - // jQueryUI 1.12 callback version.
134 - var changeOpenCallbackjQueryUI112 = function( event, ui ){
135 - // Just a refresh of the menu is needed with jQuery UI 1.12 because _renderButtonItem is triggered and then inject correctly the flag.
136 - $( event.target ).selectmenu( 'refresh' );
137 - }
138 - // There is no need of create and select callbacks with jQuery UI 1.12 because overriding _renderButtonItem method do the job.
139 - if ( isJqueryUImin112 ) {
140 - selectmenuFlagListCallbacks =
141 - {
142 - change: changeOpenCallbackjQueryUI112,
143 - open: changeOpenCallbackjQueryUI112,
144 - };
145 - } else {
146 - selectmenuFlagListCallbacks = {
147 - create: createSelectCallback,
148 - select: createSelectCallback,
149 - change: changeOpenCallback,
150 - open: changeOpenCallback,
151 - };
152 - }
153 -
154 - // Create the selectmenu widget only if the field is present.
155 - if ( flagListExist ) {
156 - // Create the jQuery UI selectmenu widget for flags list dropdown and return its instance.
157 - var selectmenuFlagList = initializeSelectmenuWidget( $( '#flag_list' ), Object.assign( {}, selectmenuOptions, selectmenuFlagListCallbacks ) );
158 - $( '#lang_list' ).on(
159 - 'languageChanged',
160 - function( event, flag ) {
161 - // Refresh the flag field
162 - selectmenuFlagList.element.val( flag );
163 - selectmenuFlagList._trigger( 'change' );
164 - }
165 - );
166 - }
167 -
168 - /**
169 - * Language choice in predefined languages in Polylang Languages settings page and wizard.
170 - * Overrides the predefined language dropdown list with our customized jQuery ui selectmenu widget.
171 - */
172 -
173 - /**
174 - * Fill the other language form fields from the language element selected in the language list dropdown.
175 - *
176 - * @param {Object} language - language object of the selected element in the language list dropdown.
177 - */
178 - function fillLanguageFields( language ) {
179 - $( '#lang_slug' ).val( language.slug );
180 - $( '#lang_locale' ).val( language.locale );
181 - $( 'input[name="rtl"]' ).val( language.rtl );
182 - $( '#lang_name' ).val( language.name );
183 - }
184 -
185 - /**
186 - * Parse selected language element in the language list dropdown.
187 - *
188 - * @param {object} event - jQuery triggered event.
189 - * @return {object} The language object with its named properties.
190 - */
191 - function parseSelectedLanguage( event ) {
192 - var selectedElement = $('option:selected', event.target);
193 - var values = selectedElement.val().split(':')
194 - return {
195 - slug: values[0],
196 - locale: values[1],
197 - rtl: [values[2]],
198 - flag: values[3],
199 - name: selectedElement.text().split(' - ')[0] // At the moment there is no need of the 2nd part because it corresponds on the locale which is already known by splitting the selected element value
200 - };
201 - }
202 -
203 - // Callback when selectmenu widget change event is triggered.
204 - var changeCallback = function( event, ui ) {
205 - var language = parseSelectedLanguage( event );
206 -
207 - fillLanguageFields( language );
208 -
209 - $( event.target ).trigger( 'languageChanged', language.flag );
210 - };
211 -
212 - // Create the jQuery UI selectmenu widget languages list dropdown and return its instance.
213 - var selectmenuLangListCallbacks = {};
214 - // For the wizard we need a 100% width. So we override the previous defined value of selectmenuOptions.
215 - if( $( '#lang_list' ).closest( '.pll-wizard-content' ).length > 0 ) {
216 - selectmenuOptions = Object.assign( selectmenuOptions, { width: wizardSelectmenuWidth } );
217 - }
218 -
219 - // There is no need of create and select callbacks with jQuery UI 1.12 because overrinding _renderButtonItem method do the job.
220 - if ( isJqueryUImin112 ) {
221 - selectmenuLangListCallbacks = {
222 - change: changeCallback,
223 - };
224 - } else {
225 - selectmenuLangListCallbacks = {
226 - create: createSelectCallback,
227 - select: createSelectCallback,
228 - change: changeCallback,
229 - };
230 - }
231 - if ( langListExist ) {
232 - initializeSelectmenuWidget( $( '#lang_list' ), Object.assign( {}, selectmenuOptions, selectmenuLangListCallbacks ) );
233 - }
234 -
235 101 // strings translations
236 102 // save translations when pressing enter
237 - $( '.translation input' ).on(
238 - 'keydown',
103 + $( '.translation input' ).keypress(
239 104 function( event ){
240 - if ( 'Enter' === event.key ) {
105 + if ( 13 === event.keyCode ) {
241 106 event.preventDefault();
242 - $( '#submit' ).trigger( 'click' );
107 + $( '#submit' ).click();
243 108 }
244 109 }
245 110 );
246 111
@@ -305,9 +170,9 @@
305 170 $( '.notice.is-dismissible' ).each(
306 171 function() {
307 172 var $this = $( this ),
308 173 $button = $( '<button type="button" class="notice-dismiss"><span class="screen-reader-text"></span></button>' ),
309 - btnText = pll_dismiss_notice || '';
174 + btnText = commonL10n.dismiss || '';
310 175
311 176 // Ensure plain text
312 177 $button.find( '.screen-reader-text' ).text( btnText );
313 178
@@ -343,19 +208,18 @@
343 208 }
344 209 );
345 210
346 211 // act when pressing enter or esc in configurations
347 - $( '.pll-configure' ).on(
348 - 'keydown',
212 + $( '.pll-configure' ).keypress(
349 213 function( event ){
350 - if ( 'Enter' === event.key ) {
214 + if ( 13 === event.keyCode ) {
351 215 event.preventDefault();
352 - $( this ).find( '.save' ).trigger( 'click' );
216 + $( this ).find( '.save' ).click();
353 217 }
354 218
355 - if ( 'Escape' === event.key ) {
219 + if ( 27 === event.keyCode ) {
356 220 event.preventDefault();
357 - $( this ).find( '.cancel' ).trigger( 'click' );
221 + $( this ).find( '.cancel' ).click();
358 222 }
359 223 }
360 224 );
361 225
@@ -360,10 +224,9 @@
360 224 );
361 225
362 226 // settings URL modifications
363 227 // manages visibility of fields
364 - $( "input[name='force_lang']" ).on(
365 - 'change',
228 + $( "input[name='force_lang']" ).change(
366 229 function() {
367 230 function pll_toggle( a, test ) {
368 231 test ? a.show() : a.hide();
369 232 }
@@ -405,5 +268,4 @@
405 268 postboxes.add_postbox_toggles( pagenow );
406 269 }
407 270 }
408 271 );
409 -