PluginProbe
Polylang / 2.5.2
Polylang v2.5.2
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/block-editor.js +60 -168 2.82.5.2 View file →
@@ -1,28 +1,22 @@
1 1 /**
2 - * @package Polylang
3 - */
4 -
5 -/**
6 2 * Filter REST API requests to add the language in the request
7 3 *
8 4 * @since 2.5
9 5 */
10 -wp.apiFetch.use(
11 - function( options, next ) {
12 - // If options.url is defined, this is not a REST request but a direct call to post.php for legacy metaboxes.
13 - if ( 'undefined' === typeof options.url ) {
14 - if ( 'undefined' === typeof options.data ) {
15 - // GET
16 - options.path += ( ( options.path.indexOf( '?' ) >= 0 ) ? '&lang=' : '?lang=' ) + getCurrentLanguage();
17 - } else {
18 - // PUT, POST
19 - options.data.lang = getCurrentLanguage();
20 - }
6 +wp.apiFetch.use( function( options, next ) {
7 + // If options.url is defined, this is not a REST request but a direct call to post.php for legacy metaboxes.
8 + if ( 'undefined' === typeof options.url ) {
9 + if ( 'undefined' === typeof options.data ) {
10 + // GET
11 + options.path += ( ( options.path.indexOf ( '?' ) >= 0 ) ? '&lang=' : '?lang=' ) + getCurrentLanguage();
12 + } else {
13 + // PUT, POST
14 + options.data.lang = getCurrentLanguage();
21 15 }
22 - return next( options );
23 16 }
24 -);
17 + return next( options );
18 +} );
25 19
26 20 /**
27 21 * Get the language from the HTML form
28 22 *
@@ -34,167 +28,65 @@
34 28 return document.querySelector( '[name=post_lang_choice]' ).value;
35 29 }
36 30
37 31 /**
38 - * Save post after lang choice is done and redirect to the same page for refreshing all the data
32 + * save post after lang choice is done and redirect to the same page for refreshing all the data
39 33 *
40 34 * @since 2.5
41 35 */
42 -jQuery( document ).ready(
43 - function( $ ) {
44 - // savePost after changing the post's language and reload page for refreshing post translated data
45 - $( '.post_lang_choice' ).change(
46 - function() {
47 - const select = wp.data.select;
48 - const dispatch = wp.data.dispatch;
49 - const subscribe = wp.data.subscribe;
36 +jQuery( document ).ready(function( $ ) {
37 + // savePost after changing the post's language and reload page for refreshing post translated data
38 + $( '.post_lang_choice' ).change(function() {
39 + const select = wp.data.select;
40 + const dispatch = wp.data.dispatch;
41 + const subscribe = wp.data.subscribe;
50 42
51 - let unsubscribe = null;
43 + let unsubscribe = null;
52 44
53 - // Listen if the savePost is done
54 - const savePostIsDone = new Promise(
55 - function( resolve, reject ) {
56 - unsubscribe = subscribe(
57 - function() {
58 - const isSavePostSucceeded = select( 'core/editor' ).didPostSaveRequestSucceed();
59 - const isSavePostFailed = select( 'core/editor' ).didPostSaveRequestFail();
60 - if ( isSavePostSucceeded || isSavePostFailed ) {
61 - if ( isSavePostFailed ) {
62 - reject();
63 - } else {
64 - resolve();
65 - }
66 - }
67 - }
68 - );
45 + // Listen if the savePost is done
46 + const savePostIsDone = new Promise( function( resolve, reject ) {
47 + unsubscribe = subscribe( function() {
48 + const isSavePostSucceeded = select('core/editor').didPostSaveRequestSucceed();
49 + const isSavePostFailed = select('core/editor').didPostSaveRequestFail();
50 + if ( isSavePostSucceeded || isSavePostFailed ) {
51 + if ( isSavePostFailed ) {
52 + reject();
53 + } else {
54 + resolve();
69 55 }
70 - );
71 -
72 - // Specific case for empty posts
73 - if ( location.pathname.match( /post-new.php/gi ) ) {
74 - const title = select( 'core/editor' ).getEditedPostAttribute( 'title' );
75 - const content = select( 'core/editor' ).getEditedPostAttribute( 'content' );
76 - const excerpt = select( 'core/editor' ).getEditedPostAttribute( 'excerpt' );
77 - if ( '' === title && '' === content && '' === excerpt ) {
78 - // Change the new_lang parameter with the new language value for reloading the page
79 - // WPCS location.search is never written in the page, just used to relaoad page ( See line 94 ) with the right value of new_lang
80 - // new_lang input is controlled server side in PHP. The value come from the dropdown list of language returned and escaped server side
81 - if ( -1 != location.search.indexOf( 'new_lang' ) ) {
82 - // use regexp non capturing group to replace new_lang parameter no matter where it is and capture other parameters which can be behind it
83 - window.location.search = window.location.search.replace( /(?:new_lang=[^&]*)(&)?(.*)/, 'new_lang=' + this.value + '$1$2' ); // phpcs:ignore WordPressVIPMinimum.JS.Window.location, WordPressVIPMinimum.JS.Window.VarAssignment
84 - } else {
85 - window.location.search = window.location.search + ( ( -1 != window.location.search.indexOf( '?' ) ) ? '&' : '?' ) + 'new_lang=' + this.value; // phpcs:ignore WordPressVIPMinimum.JS.Window.location, WordPressVIPMinimum.JS.Window.VarAssignment
86 - }
87 - }
88 56 }
57 + } );
58 + });
89 59
90 - // For empty posts savePost does nothing
91 - dispatch( 'core/editor' ).savePost();
92 -
93 - savePostIsDone.then(
94 - function() {
95 - // If the post is well saved, we can reload the page
96 - unsubscribe();
97 - window.location.reload();
98 - },
99 - function() {
100 - // If the post save failed
101 - unsubscribe();
102 - }
103 - ).catch(
104 - function() {
105 - // If an exception is thrown
106 - unsubscribe();
107 - }
108 - );
109 - }
110 - );
111 - }
112 -);
113 -
114 -/**
115 - * Handles internals of the metabox:
116 - * Language select, autocomplete input field.
117 - *
118 - * @since 1.5
119 - */
120 -jQuery( document ).ready(
121 - function( $ ) {
122 - // Ajax for changing the post's language in the languages metabox
123 - $( '.post_lang_choice' ).change(
124 - function() {
125 - var data = {
126 - action: 'post_lang_choice',
127 - lang: $( this ).val(),
128 - post_type: $( '#post_type' ).val(),
129 - post_id: $( '#post_ID' ).val(),
130 - _pll_nonce: $( '#_pll_nonce' ).val()
60 + // Specific case for empty posts
61 + if ( location.pathname.match( /post-new.php/gi ) ) {
62 + const title = select('core/editor').getEditedPostAttribute('title');
63 + const content = select('core/editor').getEditedPostAttribute('content');
64 + const excerpt = select('core/editor').getEditedPostAttribute('excerpt');
65 + if ( '' === title && '' === content && '' === excerpt ) {
66 + // Change the new_lang parameter with the new language value for reloading the page
67 + if ( -1 != location.search.indexOf( 'new_lang' ) ) {
68 + window.location.search = window.location.search.replace( /(?:new_lang=[^&]*)(&)?(.*)/, 'new_lang=' + this.value + '$1$2' );;
69 + } else {
70 + window.location.search = window.location.search + ( ( -1 != window.location.search.indexOf( '?' ) ) ? '&' : '?' ) + 'new_lang=' + this.value;
131 71 }
132 -
133 - $.post(
134 - ajaxurl,
135 - data,
136 - function( response ) {
137 - var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
138 - $.each(
139 - res.responses,
140 - function() {
141 - switch ( this.what ) {
142 - case 'translations': // Translations fields
143 - // Data is built and come from server side and is well escaped when necessary
144 - $( '.translations' ).html( this.data ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
145 - init_translations();
146 - break;
147 - case 'flag': // Flag in front of the select dropdown
148 - // Data is built and come from server side and is well escaped when necessary
149 - $( '.pll-select-flag' ).html( this.data ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
150 - break;
151 - }
152 - }
153 - );
154 - }
155 - );
156 72 }
157 - );
73 + }
158 74
159 - // Translations autocomplete input box
160 - function init_translations() {
161 - $( '.tr_lang' ).each(
162 - function(){
163 - var tr_lang = $( this ).attr( 'id' ).substring( 8 );
164 - var td = $( this ).parent().parent().siblings( '.pll-edit-column' );
75 + // For empty posts savePost does nothing
76 + dispatch( 'core/editor' ).savePost();
165 77
166 - $( this ).autocomplete(
167 - {
168 - minLength: 0,
169 -
170 - source: ajaxurl + '?action=pll_posts_not_translated' +
171 - '&post_language=' + $( '.post_lang_choice' ).val() +
172 - '&translation_language=' + tr_lang +
173 - '&post_type=' + $( '#post_type' ).val() +
174 - '&_pll_nonce=' + $( '#_pll_nonce' ).val(),
175 -
176 - select: function( event, ui ) {
177 - $( '#htr_lang_' + tr_lang ).val( ui.item.id );
178 - // ui.item.link is built and come from server side and is well escaped when necessary
179 - td.html( ui.item.link ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
180 - },
181 - }
182 - );
183 -
184 - // When the input box is emptied
185 - $( this ).blur(
186 - function() {
187 - if ( ! $( this ).val() ) {
188 - $( '#htr_lang_' + tr_lang ).val( 0 );
189 - // Value is retrieved from HTML already generated server side
190 - td.html( td.siblings( '.hidden' ).children().clone() ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
191 - }
192 - }
193 - );
194 - }
195 - );
196 - }
197 -
198 - init_translations();
199 - }
200 -);
78 + savePostIsDone
79 + .then( function() {
80 + // If the post is well saved, we can reload the page
81 + unsubscribe();
82 + window.location.reload();
83 + }, function() {
84 + // If the post save failed
85 + unsubscribe();
86 + } )
87 + .catch( function() {
88 + // If an exception is thrown
89 + unsubscribe();
90 + } );
91 + } );
92 +} );