PluginProbe
Polylang / 2.6.3
Polylang v2.6.3
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/classic-editor.js +159 -190 2.9 → 2.6.3 View file →
@@ -1,213 +1,182 @@
1 -/**
2 - * @package Polylang
3 - */
4 -
5 1 // tag suggest in metabox
6 -jQuery(
7 - function( $ ) {
8 - $.ajaxPrefilter(
9 - function( options, originalOptions, jqXHR ) {
10 - var lang = $( '.post_lang_choice' ).val();
11 - if ( 'string' === typeof options.data && -1 !== options.url.indexOf( 'action=ajax-tag-search' ) && lang ) {
12 - options.data = 'lang=' + lang + '&' + options.data;
13 - }
14 - }
15 - );
16 - }
17 -);
2 +(function( $ ){
3 + $.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
4 + if ( 'string' === typeof options.data && -1 !== options.url.indexOf( 'action=ajax-tag-search' ) && ( lang = $( '.post_lang_choice' ).val() ) ) {
5 + options.data = 'lang=' + lang + '&' + options.data;
6 + }
7 + });
8 +})( jQuery );
18 9
19 10 // overrides tagBox.get
20 -jQuery(
21 - function( $ ) {
22 - // overrides function to add the language
23 - tagBox.get = function( id ) {
24 - var tax = id.substr( id.indexOf( '-' ) + 1 );
11 +(function( $ ){
12 + // overrides function to add the language
13 + tagBox.get = function( id ) {
14 + var tax = id.substr( id.indexOf( '-' ) + 1 );
25 15
26 - // add the language in the $_POST variable
27 - var data = {
28 - action: 'get-tagcloud',
29 - lang: $( '.post_lang_choice' ).val(),
30 - tax: tax
16 + // add the language in the $_POST variable
17 + var data = {
18 + action: 'get-tagcloud',
19 + lang: $( '.post_lang_choice' ).val(),
20 + tax: tax
21 + }
22 +
23 + $.post( ajaxurl, data, function( r, stat ) {
24 + if ( 0 == r || 'success' != stat ) {
25 + r = wpAjax.broken;
31 26 }
32 27
33 - $.post(
34 - ajaxurl,
35 - data,
36 - function( r, stat ) {
37 - if ( 0 == r || 'success' != stat ) {
38 - r = wpAjax.broken;
39 - }
28 + r = $( '<div id="tagcloud-' + tax + '" class="the-tagcloud">' + r + '</div>' );
29 + $( 'a', r ).click(function(){
30 + tagBox.flushTags( $( this ).closest( '.inside' ).children( '.tagsdiv' ), this );
31 + return false;
32 + });
40 33
41 - // @see code from WordPress core https://github.com/WordPress/WordPress/blob/5.2.2/wp-admin/js/tags-box.js#L291
42 - // @see wp_generate_tag_cloud function which generate the escaped HTML https://github.com/WordPress/WordPress/blob/a02b5cc2a8eecb8e076fbb7cf4de7bd2ec8a8eb1/wp-includes/category-template.php#L966-L975
43 - r = $( '<div />' ).addClass( 'the-tagcloud' ).attr( 'id', 'tagcloud-' + tax ).html( r ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
44 - $( 'a', r ).click(
45 - function(){
46 - tagBox.flushTags( $( this ).closest( '.inside' ).children( '.tagsdiv' ), this );
47 - return false;
48 - }
49 - );
50 -
51 - var tagCloud = $( '#tagcloud-' + tax );
52 - // add an if else condition to allow modifying the tags outputed when switching the language
53 - var v = tagCloud.css( 'display' );
54 - if ( v ) {
55 - // See the comment above when r variable is created.
56 - $( '#tagcloud-' + tax ).replaceWith( r ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.replaceWith
57 - $( '#tagcloud-' + tax ).css( 'display', v );
58 - }
59 - else {
60 - // See the comment above when r variable is created.
61 - $( '#' + id ).after( r ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.after
62 - }
63 - }
64 - );
65 - }
34 + // add an if else condition to allow modifying the tags outputed when switching the language
35 + if ( v = $( '.the-tagcloud' ).css( 'display' ) ) {
36 + $( '.the-tagcloud' ).replaceWith( r );
37 + $( '.the-tagcloud' ).css( 'display', v );
38 + }
39 + else {
40 + $( '#' + id ).after( r );
41 + }
42 + });
66 43 }
67 -);
44 +})( jQuery );
68 45
69 -jQuery(
70 - function ( $ ) {
71 - // collect taxonomies - code partly copied from WordPress
72 - var taxonomies = new Array();
73 - $( '.categorydiv' ).each(
74 - function(){
75 - var this_id = $( this ).attr( 'id' ), taxonomyParts, taxonomy;
46 +jQuery( document ).ready(function( $ ) {
47 + // collect taxonomies - code partly copied from WordPress
48 + var taxonomies = new Array();
49 + $( '.categorydiv' ).each(function(){
50 + var this_id = $( this ).attr( 'id' ), taxonomyParts, taxonomy;
76 51
77 - taxonomyParts = this_id.split( '-' );
78 - taxonomyParts.shift();
79 - taxonomy = taxonomyParts.join( '-' );
80 - taxonomies.push( taxonomy ); // store the taxonomy for future use
52 + taxonomyParts = this_id.split( '-' );
53 + taxonomyParts.shift();
54 + taxonomy = taxonomyParts.join( '-' );
55 + taxonomies.push( taxonomy ); // store the taxonomy for future use
81 56
82 - // add our hidden field in the new category form - for each hierarchical taxonomy
83 - // to set the language when creating a new category
84 - // html code inserted come from html code itself.
85 - $( '#' + taxonomy + '-add-submit' ).before( // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.before
86 - $( '<input />' ).attr( 'type', 'hidden' )
87 - .attr( 'id', taxonomy + '-lang' )
88 - .attr( 'name', 'term_lang_choice' )
89 - .attr( 'value', $( '.post_lang_choice' ).val() )
90 - );
91 - }
57 + // add our hidden field in the new category form - for each hierarchical taxonomy
58 + // to set the language when creating a new category
59 + $( '#' + taxonomy + '-add-submit' ).before( $( '<input />' )
60 + .attr( 'type', 'hidden' )
61 + .attr( 'id', taxonomy + '-lang' )
62 + .attr( 'name', 'term_lang_choice' )
63 + .attr( 'value', $( '.post_lang_choice' ).val() )
92 64 );
65 + });
93 66
94 - // ajax for changing the post's language in the languages metabox
95 - $( '.post_lang_choice' ).change(
96 - function() {
97 - var value = $( this ).val();
98 - var lang = $( this ).children( 'option[value="' + value + '"]' ).attr( 'lang' );
99 - var dir = $( '.pll-translation-column > span[lang="' + lang + '"]' ).attr( 'dir' );
67 + // ajax for changing the post's language in the languages metabox
68 + $( '.post_lang_choice' ).change(function() {
69 + var value = $( this ).val();
70 + var lang = $( this ).children( 'option[value="' + value + '"]' ).attr( 'lang' );
71 + var dir = $( '.pll-translation-column > span[lang="' + lang + '"]' ).attr( 'dir' );
100 72
101 - var data = {
102 - action: 'post_lang_choice',
103 - lang: value,
104 - post_type: $( '#post_type' ).val(),
105 - taxonomies: taxonomies,
106 - post_id: $( '#post_ID' ).val(),
107 - _pll_nonce: $( '#_pll_nonce' ).val()
73 + var data = {
74 + action: 'post_lang_choice',
75 + lang: value,
76 + post_type: $( '#post_type' ).val(),
77 + taxonomies: taxonomies,
78 + post_id: $( '#post_ID' ).val(),
79 + _pll_nonce: $( '#_pll_nonce' ).val()
80 + }
81 +
82 + $.post( ajaxurl, data , function( response ) {
83 + var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
84 + $.each( res.responses, function() {
85 + switch ( this.what ) {
86 + case 'translations': // translations fields
87 + $( '.translations' ).html( this.data );
88 + init_translations();
89 + break;
90 + case 'taxonomy': // categories metabox for posts
91 + var tax = this.data;
92 + $( '#' + tax + 'checklist' ).html( this.supplemental.all );
93 + $( '#' + tax + 'checklist-pop' ).html( this.supplemental.populars );
94 + $( '#new' + tax + '_parent' ).replaceWith( this.supplemental.dropdown );
95 + $( '#' + tax + '-lang' ).val( $( '.post_lang_choice' ).val() ); // hidden field
96 + break;
97 + case 'pages': // parent dropdown list for pages
98 + $( '#parent_id' ).html( this.data );
99 + break;
100 + case 'flag': // flag in front of the select dropdown
101 + $( '.pll-select-flag' ).html( this.data );
102 + break;
103 + case 'permalink': // Sample permalink
104 + var div = $( '#edit-slug-box' );
105 + if ( '-1' != this.data && div.children().length ) {
106 + div.html( this.data );
107 + }
108 + break;
108 109 }
110 + });
109 111
110 - $.post(
111 - ajaxurl,
112 - data,
113 - function( response ) {
114 - var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
115 - $.each(
116 - res.responses,
117 - function() {
118 - switch ( this.what ) {
119 - case 'translations': // translations fields
120 - // Data is built and come from server side and is well escaped when necessary
121 - $( '.translations' ).html( this.data ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
122 - init_translations();
123 - break;
124 - case 'taxonomy': // categories metabox for posts
125 - var tax = this.data;
126 - // @see wp_terms_checklist https://github.com/WordPress/WordPress/blob/5.2.2/wp-admin/includes/template.php#L175
127 - // @see https://github.com/WordPress/WordPress/blob/5.2.2/wp-admin/includes/class-walker-category-checklist.php#L89-L111
128 - $( '#' + tax + 'checklist' ).html( this.supplemental.all ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
129 - // @see wp_popular_terms_checklist https://github.com/WordPress/WordPress/blob/5.2.2/wp-admin/includes/template.php#L236
130 - $( '#' + tax + 'checklist-pop' ).html( this.supplemental.populars ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
131 - // @see wp_dropdown_categories https://github.com/WordPress/WordPress/blob/5.5.1/wp-includes/category-template.php#L336
132 - // which is called by PLL_Admin_Classic_Editor::post_lang_choice to generate supplemental.dropdown
133 - $( '#new' + tax + '_parent' ).replaceWith( this.supplemental.dropdown ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.replaceWith
134 - $( '#' + tax + '-lang' ).val( $( '.post_lang_choice' ).val() ); // hidden field
135 - break;
136 - case 'pages': // parent dropdown list for pages
137 - // @see wp_dropdown_pages https://github.com/WordPress/WordPress/blob/5.2.2/wp-includes/post-template.php#L1186-L1208
138 - // @see https://github.com/WordPress/WordPress/blob/5.2.2/wp-includes/class-walker-page-dropdown.php#L88
139 - $( '#parent_id' ).html( this.data ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
140 - break;
141 - case 'flag': // flag in front of the select dropdown
142 - // Data is built and come from server side and is well escaped when necessary
143 - $( '.pll-select-flag' ).html( this.data ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
144 - break;
145 - case 'permalink': // Sample permalink
146 - var div = $( '#edit-slug-box' );
147 - if ( '-1' != this.data && div.children().length ) {
148 - // @see get_sample_permalink_html https://github.com/WordPress/WordPress/blob/5.2.2/wp-admin/includes/post.php#L1425-L1454
149 - div.html( this.data ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
150 - }
151 - break;
152 - }
153 - }
154 - );
112 + // modifies the language in the tag cloud
113 + $( '.tagcloud-link' ).each(function() {
114 + var id = $( this ).attr( 'id' );
115 + tagBox.get( id );
116 + });
155 117
156 - // modifies the language in the tag cloud
157 - $( '.tagcloud-link' ).each(
158 - function() {
159 - var id = $( this ).attr( 'id' );
160 - tagBox.get( id );
161 - }
162 - );
118 + // Modifies the text direction
119 + $( 'body' ).removeClass( 'pll-dir-rtl' ).removeClass( 'pll-dir-ltr' ).addClass( 'pll-dir-' + dir );
120 + $( '#content_ifr' ).contents().find( 'html' ).attr( 'lang', lang ).attr( 'dir', dir );
121 + $( '#content_ifr' ).contents().find( 'body' ).attr( 'dir', dir );
122 + });
123 + });
163 124
164 - // Modifies the text direction
165 - $( 'body' ).removeClass( 'pll-dir-rtl' ).removeClass( 'pll-dir-ltr' ).addClass( 'pll-dir-' + dir );
166 - $( '#content_ifr' ).contents().find( 'html' ).attr( 'lang', lang ).attr( 'dir', dir );
167 - $( '#content_ifr' ).contents().find( 'body' ).attr( 'dir', dir );
168 - }
169 - );
170 - }
171 - );
125 + // translations autocomplete input box
126 + function init_translations() {
127 + $( '.tr_lang' ).each(function(){
128 + var tr_lang = $( this ).attr( 'id' ).substring( 8 );
129 + var td = $( this ).parent().parent().siblings( '.pll-edit-column' );
172 130
173 - // translations autocomplete input box
174 - function init_translations() {
175 - $( '.tr_lang' ).each(
176 - function(){
177 - var tr_lang = $( this ).attr( 'id' ).substring( 8 );
178 - var td = $( this ).parent().parent().siblings( '.pll-edit-column' );
131 + $( this ).autocomplete({
132 + minLength: 0,
179 133
180 - $( this ).autocomplete(
181 - {
182 - minLength: 0,
183 - source: ajaxurl + '?action=pll_posts_not_translated' +
184 - '&post_language=' + $( '.post_lang_choice' ).val() +
185 - '&translation_language=' + tr_lang +
186 - '&post_type=' + $( '#post_type' ).val() +
187 - '&_pll_nonce=' + $( '#_pll_nonce' ).val(),
188 - select: function( event, ui ) {
189 - $( '#htr_lang_' + tr_lang ).val( ui.item.id );
190 - // ui.item.link is built and come from server side and is well escaped when necessary
191 - td.html( ui.item.link ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
192 - },
193 - }
194 - );
134 + source: ajaxurl + '?action=pll_posts_not_translated' +
135 + '&post_language=' + $( '.post_lang_choice' ).val() +
136 + '&translation_language=' + tr_lang +
137 + '&post_type=' + $( '#post_type' ).val() +
138 + '&_pll_nonce=' + $( '#_pll_nonce' ).val(),
195 139
196 - // when the input box is emptied
197 - $( this ).on(
198 - 'blur',
199 - function() {
200 - if ( ! $( this ).val() ) {
201 - $( '#htr_lang_' + tr_lang ).val( 0 );
202 - // Value is retrieved from HTML already generated server side
203 - td.html( td.siblings( '.hidden' ).children().clone() ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
204 - }
205 - }
206 - );
140 + select: function( event, ui ) {
141 + $( '#htr_lang_' + tr_lang ).val( ui.item.id );
142 + td.html( ui.item.link );
143 + },
144 + });
145 +
146 + // when the input box is emptied
147 + $( this ).blur(function() {
148 + if ( ! $( this ).val() ) {
149 + $( '#htr_lang_' + tr_lang ).val( 0 );
150 + td.html( td.siblings( '.hidden' ).children().clone() );
207 151 }
208 - );
152 + });
153 + });
154 + }
155 +
156 + init_translations();
157 +
158 + // Handle the response to a click on a Languages metabox button
159 + $( '#ml_box' ).on( 'click', '.pll-button', function(){
160 + var value = $( this ).hasClass( 'wp-ui-text-highlight' );
161 + var id = $( this ).attr( 'id' );
162 + var post_id = $( '#htr_lang_' + id.replace( 'pll_sync_post[', '' ).replace( ']', '' ) ).val();
163 +
164 + if ( 'undefined' == typeof( post_id ) || 0 == post_id || value || confirm( confirm_text ) ) {
165 + var data = {
166 + action: 'toggle_' + id,
167 + value: value,
168 + post_type: $( '#post_type' ).val(),
169 + _pll_nonce: $( '#_pll_nonce' ).val()
170 + }
171 +
172 + $.post( ajaxurl, data , function( response ){
173 + var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
174 + $.each( res.responses, function() {
175 + id = id.replace( '[', '\\[' ).replace( ']', '\\]' );
176 + $( '#' + id ).toggleClass( 'wp-ui-text-highlight' ).attr( 'title', this.data ).children( 'span' ).html( this.data );
177 + $( 'input[name="' + id + '"]' ).val( ! data['value'] );
178 + });
179 + });
209 180 }
210 -
211 - init_translations();
212 - }
213 -);
181 + });
182 +});