PluginProbe
Polylang / 2.0.12
Polylang v2.0.12
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 +163 -240 2.72.0.12 View file →
@@ -1,267 +1,190 @@
1 -jQuery( document ).ready(
2 - function( $ ) {
3 - var transitionTimeout;
1 +jQuery( document ).ready(function( $ ) {
2 + var transitionTimeout;
4 3
5 - // languages list table
6 - // accessibility to row actions on focus
7 - // mainly copy paste of WP code from common.js
8 - $( 'table.languages' ).on(
9 - { // restricted to languages list table
10 - focusin: function() {
11 - clearTimeout( transitionTimeout );
12 - focusedRowActions = $( this ).find( '.row-actions' );
13 - // transitionTimeout is necessary for Firefox, but Chrome won't remove the CSS class without a little help.
14 - $( '.row-actions' ).not( this ).removeClass( 'visible' );
15 - focusedRowActions.addClass( 'visible' );
16 - },
17 - focusout: function() {
18 - // Tabbing between post title and .row-actions links needs a brief pause, otherwise
19 - // the .row-actions div gets hidden in transit in some browsers ( ahem, Firefox ).
20 - transitionTimeout = setTimeout(
21 - function() {
22 - focusedRowActions.removeClass( 'visible' );
23 - },
24 - 30
25 - );
26 - }
27 - },
28 - 'tr'
29 - ); // acts on the whole tr instead of single td as we have actions links in several columns
4 + // languages list table
5 + // accessibility to row actions on focus
6 + // mainly copy paste of WP code from common.js
7 + $( 'table.languages' ).on({ // restricted to languages list table
8 + focusin: function() {
9 + clearTimeout( transitionTimeout );
10 + focusedRowActions = $( this ).find( '.row-actions' );
11 + // transitionTimeout is necessary for Firefox, but Chrome won't remove the CSS class without a little help.
12 + $( '.row-actions' ).not( this ).removeClass( 'visible' );
13 + focusedRowActions.addClass( 'visible' );
14 + },
15 + focusout: function() {
16 + // Tabbing between post title and .row-actions links needs a brief pause, otherwise
17 + // the .row-actions div gets hidden in transit in some browsers ( ahem, Firefox ).
18 + transitionTimeout = setTimeout(function() {
19 + focusedRowActions.removeClass( 'visible' );
20 + }, 30 );
21 + }
22 + }, 'tr' ); // acts on the whole tr instead of single td as we have actions links in several columns
30 23
31 - // Common functions for overriding language and flag dropdown list.
32 - var selectmenuRenderItem = function( wrapper, item ) {
33 - var li = $( '<li>' ).text( item.label ).prepend( $( item.element ).data( 'flag-html' ) );
34 - li.children( 'img' ).addClass( 'ui-icon' );
35 - return li.appendTo( wrapper );
36 - };
37 - var selectmenuRefreshButtonText = function( selectElement ) {
38 - var buttonText = $( selectElement ).selectmenu( 'instance' ).buttonText;
39 - buttonText.prepend( $( selectElement ).children( ':selected' ).data( 'flag-html' ) );
40 - buttonText.children( 'img' ).addClass( 'ui-icon' );
41 - };
42 - // Overrides the flag dropdown list with our customized jquery ui selectmenu.
24 + // extends selectmenu to add flags in menu items
25 + $.widget( "custom.iconselectmenu", $.ui.selectmenu, {
26 + _renderItem: function( ul, item ) {
27 + var li = $( "<li>", { text: item.label } );
43 28
44 - // Inject flag image when jQuery UI selectmenu is created or an item is selected.
45 - $( '#flag_list' ).on(
46 - 'selectmenucreate selectmenuselect',
47 - function(){
48 - selectmenuRefreshButtonText( this );
29 + if ( item.value ) {
30 + $( "<img>", {
31 + src: pll_flag_base_url + item.value + '.png',
32 + "class": "ui-icon"
33 + }).appendTo( li );
49 34 }
50 - );
51 - // Refresh jQuery UI selectmenu when the value is changed programmatically: select another language or edit an existing language.
52 - // For putting the focus in the list on the selected item and injecting the right flag on the selected item.
53 - $( '#flag_list' ).on(
54 - 'selectmenuopen',
55 - function(){
56 - $( this ).selectmenu( 'refresh' ).trigger( 'selectmenuselect' );
57 - }
58 - );
59 - // Create the jQuery UI selectmenu widget
60 - $( '#flag_list' ).selectmenu( { width: '100%' } );
61 - // Overrides each item in the jQuery UI selectmenu list by injecting flag image.
62 - $( '#flag_list' ).selectmenu( 'instance' )._renderItem = selectmenuRenderItem;
63 35
64 - // Language choice in predefined languages in Polylang Languages settings page and wizard.
65 - // Overrides the predefined language dropdown list with our customized jquery ui selectmenu.
36 + return li.appendTo( ul );
37 + }
38 + });
66 39
67 - // Inject flag image when jQuery UI selectmenu is created or an item is selected.
68 - $( '#lang_list' ).on(
69 - 'selectmenucreate selectmenuselect',
70 - function() {
71 - selectmenuRefreshButtonText( this );
72 - }
73 - );
74 - // Create the jQuery UI selectmenu widget
75 - $( '#lang_list' ).selectmenu( { width: '100%' } );
76 - // Overrides each element in the jQuery UI selectmenu list by injecting flag image.
77 - $( '#lang_list' ).selectmenu( 'instance' )._renderItem = selectmenuRenderItem;
40 + // allows to display the flag for the selected menu item
41 + function add_icon( event, ui ) {
42 + var value = $( this ).val();
43 + if ( value ) {
44 + var txt = $( this ).iconselectmenu( "widget" ).children( ":last" );
45 + var img = $( '<img class="ui-icon" >' ).appendTo( txt );
46 + img.attr( "src", pll_flag_base_url + value + '.png' );
47 + }
48 + }
78 49
79 - // Languages form
80 - // Fills the fields based on the language dropdown list choice
81 - $( '#add-lang #lang_list' ).on(
82 - 'selectmenuchange',
83 - function() {
84 - var value = $( this ).val().split( ':' );
85 - var selected = $( "option:selected", this ).text().split( ' - ' );
86 - $( '#lang_slug' ).val( value[0] );
87 - $( '#lang_locale' ).val( value[1] );
88 - $( 'input[name="rtl"]' ).val( [value[2]] );
89 - $( '#lang_name' ).val( selected[0] );
90 - $( '#flag_list').val( value[3] );
50 + // overrides the flag dropdown list with our customized jquery ui selectmenu
51 + $( "#flag_list" ).iconselectmenu({
52 + create: add_icon,
53 + select: add_icon,
54 + });
91 55
92 - // Refresh the jQuery UI selectmenu flags list.
93 - $( '#flag_list' ).selectmenu( 'refresh' ).trigger( 'selectmenuselect' );
94 - }
95 - );
56 + // languages form
57 + // fills the fields based on the language dropdown list choice
58 + $( '#lang_list' ).change(function() {
59 + var value = $( this ).val().split( ':' );
60 + var selected = $( "select option:selected" ).text().split( ' - ' );
61 + $( '#lang_slug' ).val( value[0] );
62 + $( '#lang_locale' ).val( value[1] );
63 + $( 'input[name="rtl"]' ).val( [value[2]] );
64 + $( '#lang_name' ).val( selected[0] );
65 + $( '#flag_list option[value="' + value[3] + '"]' ).attr( 'selected', 'selected' );
96 66
97 - // strings translations
98 - // save translations when pressing enter
99 - $( '.translation input' ).keypress(
100 - function( event ){
101 - if ( 13 === event.keyCode ) {
102 - event.preventDefault();
103 - $( '#submit' ).click();
104 - }
105 - }
106 - );
67 + // recreate the jquery ui selectmenu
68 + $( "#flag_list" ).iconselectmenu( 'destroy' ).iconselectmenu({
69 + create: add_icon,
70 + select: add_icon,
71 + })
72 + });
107 73
108 - // settings page
109 - // click on configure link
110 - $( '#the-list' ).on(
111 - 'click',
112 - '.configure>a',
113 - function(){
114 - $( '.pll-configure' ).hide().prev().show();
115 - $( this ).closest( 'tr' ).hide().next().show();
116 - return false;
117 - }
118 - );
74 + // strings translations
75 + // save translations when pressing enter
76 + $( '.translation input' ).keypress(function( event ){
77 + if ( 13 === event.keyCode ) {
78 + event.preventDefault();
79 + $( '#submit' ).click();
80 + }
81 + });
119 82
120 - // cancel
121 - $( '#the-list' ).on(
122 - 'click',
123 - '.cancel',
124 - function(){
125 - $( this ).closest( 'tr' ).hide().prev().show();
126 - }
127 - );
83 + // settings page
84 + // click on configure link
85 + $( '#the-list' ).on( 'click', '.configure>a', function(){
86 + $( '.pll-configure' ).hide().prev().show();
87 + $( this ).closest( 'tr' ).hide().next().show();
88 + return false;
89 + });
128 90
129 - // save settings
130 - $( '#the-list' ).on(
131 - 'click',
132 - '.save',
133 - function(){
134 - var tr = $( this ).closest( 'tr' );
135 - var parts = tr.attr( 'id' ).split( '-' );
91 + // cancel
92 + $( '#the-list' ).on( 'click', '.cancel', function(){
93 + $( this ).closest( 'tr' ).hide().prev().show();
94 + });
136 95
137 - var data = {
138 - action: 'pll_save_options',
139 - pll_ajax_settings: true,
140 - module: parts[parts.length - 1],
141 - _pll_nonce: $( '#_pll_nonce' ).val()
142 - };
96 + // save settings
97 + $( '#the-list' ).on( 'click', '.save', function(){
98 + var tr = $( this ).closest( 'tr' );
99 + var parts = tr.attr( 'id' ).split( '-' );
143 100
144 - data = tr.find( ':input' ).serialize() + '&' + $.param( data );
101 + var data = {
102 + action: 'pll_save_options',
103 + pll_ajax_settings: true,
104 + module: parts[parts.length - 1],
105 + _pll_nonce: $( '#_pll_nonce' ).val()
106 + }
145 107
146 - $.post(
147 - ajaxurl,
148 - data,
149 - function( response ) {
150 - var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
151 - $.each(
152 - res.responses,
153 - function() {
154 - switch ( this.what ) {
155 - case 'license-update':
156 - $( '#pll-license-' + this.data ).replaceWith( this.supplemental.html );
157 - break;
158 - case 'success':
159 - tr.hide().prev().show(); // close only if there is no error
160 - case 'error':
161 - $( '.settings-error' ).remove(); // remove previous messages if any
162 - $( 'h1' ).after( this.data );
108 + data = tr.find( ':input' ).serialize() + '&' + $.param( data );
163 109
164 - // Make notices dismissible
165 - // copy paste of common.js from WP 4.2.2
166 - $( '.notice.is-dismissible' ).each(
167 - function() {
168 - var $this = $( this ),
169 - $button = $( '<button type="button" class="notice-dismiss"><span class="screen-reader-text"></span></button>' ),
170 - btnText = commonL10n.dismiss || '';
110 + $.post( ajaxurl, data, function( response ) {
111 + var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
112 + $.each( res.responses, function() {
113 + switch ( this.what ) {
114 + case 'license-update':
115 + $( '#pll-license-' + this.data ).replaceWith( this.supplemental.html );
116 + break;
117 + case 'success':
118 + tr.hide().prev().show(); // close only if there is no error
119 + case 'error':
120 + $( '.settings-error' ).remove(); // remove previous messages if any
121 + $( '.nav-tab-wrapper' ).after( this.data );
171 122
172 - // Ensure plain text
173 - $button.find( '.screen-reader-text' ).text( btnText );
123 + // Make notices dismissible
124 + // copy paste of common.js from WP 4.2.2
125 + $( '.notice.is-dismissible' ).each(function() {
126 + var $this = $( this ),
127 + $button = $( '<button type="button" class="notice-dismiss"><span class="screen-reader-text"></span></button>' ),
128 + btnText = commonL10n.dismiss || '';
174 129
175 - // Whitelist because of how the button is built. See above
176 - $this.append( $button ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append
130 + // Ensure plain text
131 + $button.find( '.screen-reader-text' ).text( btnText );
177 132
178 - $button.on(
179 - 'click.wp-dismiss-notice',
180 - function( event ) {
181 - event.preventDefault();
182 - $this.fadeTo(
183 - 100,
184 - 0,
185 - function() {
186 - $( this ).slideUp(
187 - 100,
188 - function() {
189 - $( this ).remove();
190 - }
191 - );
192 - }
193 - );
194 - }
195 - );
196 - }
197 - );
198 - break;
199 - }
200 - }
201 - );
202 - }
203 - );
204 - }
205 - );
133 + $this.append( $button );
206 134
207 - // act when pressing enter or esc in configurations
208 - $( '.pll-configure' ).keypress(
209 - function( event ){
210 - if ( 13 === event.keyCode ) {
211 - event.preventDefault();
212 - $( this ).find( '.save' ).click();
135 + $button.on( 'click.wp-dismiss-notice', function( event ) {
136 + event.preventDefault();
137 + $this.fadeTo( 100 , 0, function() {
138 + $( this ).slideUp( 100, function() {
139 + $( this ).remove();
140 + });
141 + });
142 + });
143 + });
144 + break;
213 145 }
146 + });
147 + });
148 + });
214 149
215 - if ( 27 === event.keyCode ) {
216 - event.preventDefault();
217 - $( this ).find( '.cancel' ).click();
218 - }
219 - }
220 - );
150 + // act when pressing enter or esc in configurations
151 + $( '.pll-configure' ).keypress(function( event ){
152 + if ( 13 === event.keyCode ) {
153 + event.preventDefault();
154 + $( this ).find( '.save' ).click();
155 + }
221 156
222 - // settings URL modifications
223 - // manages visibility of fields
224 - $( "input[name='force_lang']" ).change(
225 - function() {
226 - function pll_toggle( a, test ) {
227 - test ? a.show() : a.hide();
228 - }
157 + if ( 27 === event.keyCode ) {
158 + event.preventDefault();
159 + $( this ).find( '.cancel' ).click();
160 + }
161 + });
229 162
230 - var value = $( this ).val();
231 - pll_toggle( $( '#pll-domains-table' ), 3 == value );
232 - pll_toggle( $( "#pll-hide-default" ), 3 > value );
233 - pll_toggle( $( "#pll-rewrite" ), 2 > value );
234 - pll_toggle( $( "#pll-redirect-lang" ), 2 > value );
235 - }
236 - );
163 + // settings URL modifications
164 + // manages visibility of fields
165 + $( "input[name='force_lang']" ).change(function() {
166 + function pll_toggle( a, test ) {
167 + test ? a.show() : a.hide();
168 + }
237 169
238 - // settings license
239 - // deactivate button
240 - $( '.pll-deactivate-license' ).on(
241 - 'click',
242 - function() {
243 - var data = {
244 - action: 'pll_deactivate_license',
245 - pll_ajax_settings: true,
246 - id: $( this ).attr( 'id' ),
247 - _pll_nonce: $( '#_pll_nonce' ).val()
248 - };
249 - $.post(
250 - ajaxurl,
251 - data,
252 - function( response ){
253 - $( '#pll-license-' + response.id ).replaceWith( response.html );
254 - }
255 - );
256 - }
257 - );
170 + var value = $( this ).val();
171 + pll_toggle( $( '#pll-domains-table' ), 3 == value );
172 + pll_toggle( $( "#pll-hide-default" ), 3 > value );
173 + pll_toggle( $( "#pll-rewrite" ), 2 > value );
174 + });
258 175
259 - // Manage closing the metabox.
260 - // close postboxes that should be closed
261 - $( '.if-js-closed' ).removeClass( 'if-js-closed' ).addClass( 'closed' );
262 - // postboxes setup
263 - if ( 'undefined' !== typeof postboxes ) {
264 - postboxes.add_postbox_toggles( pagenow );
176 + // settings license
177 + // deactivate button
178 + $( '.pll-deactivate-license' ).on( 'click', function() {
179 + var data = {
180 + action: 'pll_deactivate_license',
181 + pll_ajax_settings: true,
182 + id: $( this ).attr( 'id' ),
183 + _pll_nonce: $( '#_pll_nonce' ).val()
265 184 }
266 - }
267 -);
185 + $.post( ajaxurl, data , function( response ){
186 + $( '#pll-license-' + response.id ).replaceWith( response.html );
187 + });
188 + });
189 +
190 +});