PluginProbe
Polylang / 2.7
Polylang v2.7
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
polylang / js / post.js

post.js in Polylang 2.7, at js/post.js

238 lines 6.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Tag suggest in quick edit
3 */
4
5 (function( $ ){
6 $.ajaxPrefilter(
7 function( options, originalOptions, jqXHR ) {
8 if ( 'string' === typeof options.data && -1 !== options.data.indexOf( 'action=ajax-tag-search' ) && ( lang = $( ':input[name="inline_lang_choice"]' ).val() ) ) {
9 options.data = 'lang=' + lang + '&' + options.data;
10 }
11 }
12 );
13 })( jQuery );
14
15 /**
16 * Quick edit
17 */
18 (function( $ ) {
19 $( document ).bind(
20 'DOMNodeInserted',
21 function( e ) {
22 var t = $( e.target );
23
24 // WP inserts the quick edit from
25 if ( 'inline-edit' == t.attr( 'id' ) ) {
26 var post_id = t.prev().attr( 'id' ).replace( "post-", "" );
27
28 if ( post_id > 0 ) {
29 // language dropdown
30 var select = t.find( ':input[name="inline_lang_choice"]' );
31 var lang = $( '#lang_' + post_id ).html();
32 select.val( lang ); // populates the dropdown
33
34 filter_terms( lang ); // initial filter for category checklist
35 filter_pages( lang ); // initial filter for parent dropdown
36
37 // modify category checklist an parent dropdown on language change
38 select.change(
39 function() {
40 filter_terms( $( this ).val() );
41 filter_pages( $( this ).val() );
42 }
43 );
44 }
45 }
46
47 // filter category checklist
48 function filter_terms( lang ) {
49 if ( "undefined" != typeof( pll_term_languages ) ) {
50 $.each(
51 pll_term_languages,
52 function( lg, term_tax ) {
53 $.each(
54 term_tax,
55 function( tax, terms ) {
56 $.each(
57 terms,
58 function( i ) {
59 id = '#' + tax + '-' + pll_term_languages[ lg ][ tax ][ i ];
60 lang == lg ? $( id ).show() : $( id ).hide();
61 }
62 );
63 }
64 );
65 }
66 );
67 }
68 }
69
70 // filter parent page dropdown list
71 function filter_pages( lang ) {
72 if ( "undefined" != typeof( pll_page_languages ) ) {
73 $.each(
74 pll_page_languages,
75 function( lg, pages ) {
76 $.each(
77 pages,
78 function( i ) {
79 v = $( '#post_parent option[value="' + pll_page_languages[ lg ][ i ] + '"]' );
80 lang == lg ? v.show() : v.hide();
81 }
82 );
83 }
84 );
85 }
86 }
87 }
88 );
89 })( jQuery );
90
91 /**
92 * Update rows of translated posts when the language is modified in quick edit
93 * Acts on ajaxSuccess event
94 */
95 (function( $ ) {
96 $( document ).ajaxSuccess(
97 function( event, xhr, settings ) {
98 function update_rows( post_id ) {
99 // collect old translations
100 var translations = new Array();
101 $( '.translation_' + post_id ).each(
102 function() {
103 translations.push( $( this ).parent().parent().attr( 'id' ).substring( 5 ) );
104 }
105 );
106
107 var data = {
108 action: 'pll_update_post_rows',
109 post_id: post_id,
110 translations: translations.join( ',' ),
111 post_type: $( "input[name='post_type']" ).val(),
112 screen: $( "input[name='screen']" ).val(),
113 _pll_nonce: $( "input[name='_inline_edit']" ).val() // reuse quick edit nonce
114 };
115
116 // get the modified rows in ajax and update them
117 $.post(
118 ajaxurl,
119 data,
120 function( response ) {
121 if ( response ) {
122 var res = wpAjax.parseAjaxResponse( response, 'ajax-response' );
123 $.each(
124 res.responses,
125 function() {
126 if ( 'row' == this.what ) {
127 $( "#post-" + this.supplemental.post_id ).replaceWith( this.data );
128 }
129 }
130 );
131 }
132 }
133 );
134 }
135
136 if ( 'string' == typeof( settings.data ) ) { // Need to check the type due to block editor sometime sending FormData objects
137 var data = wpAjax.unserialize( settings.data ); // what were the data sent by the ajax request?
138 if ( 'undefined' != typeof( data['action'] ) && 'inline-save' == data['action'] ) {
139 update_rows( data['post_ID'] );
140 }
141 }
142 }
143 );
144 })( jQuery );
145
146 /**
147 * Media list table
148 * When clicking on attach link, filters find post list per media language
149 */
150 (function( $ ){
151 $.ajaxPrefilter(
152 function ( options, originalOptions, jqXHR ) {
153 if ( 'string' === typeof options.data && -1 !== options.data.indexOf( 'action=find_posts' ) ) {
154 options.data = 'pll_post_id=' + $( '#affected' ).val() + '&' + options.data;
155 }
156 }
157 );
158 })( jQuery );
159
160 /**
161 * Bulk translate
162 */
163 jQuery( document ).ready(
164 function( $ ) {
165 var t = this;
166
167 $( '.editinline' ).click(
168 function(){
169 $( '#pll-translate' ).find( '.cancel' ).click(); // Close the form on quick edit
170 }
171 );
172
173 $( '#doaction, #doaction2' ).click(
174 function( e ){
175 t.whichBulkButtonId = $( this ).attr( 'id' );
176 var n = t.whichBulkButtonId.substr( 2 );
177
178 if ( 'pll_translate' === $( 'select[name="' + n + '"]' ).val() ) {
179 e.preventDefault();
180
181 if ( typeof inlineEditPost !== 'undefined' ) { // Not available for media.
182 inlineEditPost.revert(); // Close Bulk edit and Quick edit if open.
183 }
184
185 $( '#pll-translate td' ).attr( 'colspan', $( 'th:visible, td:visible', '.widefat:first thead' ).length );
186 $( 'table.widefat tbody' ).prepend( $( '#pll-translate' ) ).prepend( '<tr class="hidden"></tr>' ); // The hidden tr allows to keep the background color
187 } else {
188 $( '#pll-translate' ).find( '.cancel' ).click();
189 }
190 }
191 );
192
193 // Cancel
194 $( '#pll-translate' ).on(
195 'click',
196 '.cancel',
197 function(){
198 // Close the form on any other bulk action
199 $( '#pll-translate' ).siblings( '.hidden' ).remove();
200 // #pll-translate is built and come from server side and is well escaped when necessary
201 $( '#pll-bulk-translate' ).append( $( '#pll-translate' ) ); //phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append
202
203 // Move focus back to the Bulk Action button that was activated.
204 $( '#' + t.whichBulkButtonId ).focus();
205 }
206 );
207
208 // Act when pressing enter or esc
209 $( '#pll-translate' ).keydown(
210 function( event ){
211 if ( 13 === event.keyCode && ! $( event.target ).hasClass( 'cancel' ) ) {
212 event.preventDefault();
213 $( this ).find( 'input[type=submit]' ).click();
214 }
215 if ( 27 === event.keyCode ) {
216 event.preventDefault();
217 $( this ).find( '.cancel' ).click();
218 }
219 }
220 );
221
222 // Clean DOM in case of file download
223 $( '#posts-filter' ).on(
224 'submit',
225 function() {
226 $( '.settings-error' ).remove();
227 setTimeout(
228 function() {
229 $( 'input[type=checkbox]:checked' ).attr( 'checked', false );
230 $( '#pll-translate' ).find( '.cancel' ).trigger( 'click' );
231 },
232 500
233 );
234 }
235 );
236 }
237 );
238