xfn.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. jQuery( document ).ready(function( $ ) {
  2. $( '#link_rel' ).prop( 'readonly', true );
  3. $( '#linkxfndiv input' ).bind( 'click keyup', function() {
  4. var isMe = $( '#me' ).is( ':checked' ), inputs = '';
  5. $( 'input.valinp' ).each( function() {
  6. if ( isMe ) {
  7. $( this ).prop( 'disabled', true ).parent().addClass( 'disabled' );
  8. } else {
  9. $( this ).removeAttr( 'disabled' ).parent().removeClass( 'disabled' );
  10. if ( $( this ).is( ':checked' ) && $( this ).val() !== '') {
  11. inputs += $( this ).val() + ' ';
  12. }
  13. }
  14. });
  15. $( '#link_rel' ).val( ( isMe ) ? 'me' : inputs.substr( 0,inputs.length - 1 ) );
  16. });
  17. });
  18. // Privacy request action handling
  19. jQuery( document ).ready( function( $ ) {
  20. var strings = window.privacyToolsL10n || {};
  21. function setActionState( $action, state ) {
  22. $action.children().hide();
  23. $action.children( '.' + state ).show();
  24. }
  25. function clearResultsAfterRow( $requestRow ) {
  26. $requestRow.removeClass( 'has-request-results' );
  27. if ( $requestRow.next().hasClass( 'request-results' ) ) {
  28. $requestRow.next().remove();
  29. }
  30. }
  31. function appendResultsAfterRow( $requestRow, classes, summaryMessage, additionalMessages ) {
  32. var itemList = '',
  33. resultRowClasses = 'request-results';
  34. clearResultsAfterRow( $requestRow );
  35. if ( additionalMessages.length ) {
  36. $.each( additionalMessages, function( index, value ) {
  37. itemList = itemList + '<li>' + value + '</li>';
  38. });
  39. itemList = '<ul>' + itemList + '</ul>';
  40. }
  41. $requestRow.addClass( 'has-request-results' );
  42. if ( $requestRow.hasClass( 'status-request-confirmed' ) ) {
  43. resultRowClasses = resultRowClasses + ' status-request-confirmed';
  44. }
  45. if ( $requestRow.hasClass( 'status-request-failed' ) ) {
  46. resultRowClasses = resultRowClasses + ' status-request-failed';
  47. }
  48. $requestRow.after( function() {
  49. return '<tr class="' + resultRowClasses + '"><th colspan="5">' +
  50. '<div class="notice inline notice-alt ' + classes + '">' +
  51. '<p>' + summaryMessage + '</p>' +
  52. itemList +
  53. '</div>' +
  54. '</td>' +
  55. '</tr>';
  56. });
  57. }
  58. $( '.export-personal-data-handle' ).click( function( event ) {
  59. var $this = $( this ),
  60. $action = $this.parents( '.export-personal-data' ),
  61. $requestRow = $this.parents( 'tr' ),
  62. requestID = $action.data( 'request-id' ),
  63. nonce = $action.data( 'nonce' ),
  64. exportersCount = $action.data( 'exporters-count' ),
  65. sendAsEmail = $action.data( 'send-as-email' ) ? true : false;
  66. event.preventDefault();
  67. event.stopPropagation();
  68. $action.blur();
  69. clearResultsAfterRow( $requestRow );
  70. function onExportDoneSuccess( zipUrl ) {
  71. setActionState( $action, 'export-personal-data-success' );
  72. if ( 'undefined' !== typeof zipUrl ) {
  73. window.location = zipUrl;
  74. } else if ( ! sendAsEmail ) {
  75. onExportFailure( strings.noExportFile );
  76. }
  77. }
  78. function onExportFailure( errorMessage ) {
  79. setActionState( $action, 'export-personal-data-failed' );
  80. if ( errorMessage ) {
  81. appendResultsAfterRow( $requestRow, 'notice-error', strings.exportError, [ errorMessage ] );
  82. }
  83. }
  84. function doNextExport( exporterIndex, pageIndex ) {
  85. $.ajax(
  86. {
  87. url: window.ajaxurl,
  88. data: {
  89. action: 'wp-privacy-export-personal-data',
  90. exporter: exporterIndex,
  91. id: requestID,
  92. page: pageIndex,
  93. security: nonce,
  94. sendAsEmail: sendAsEmail
  95. },
  96. method: 'post'
  97. }
  98. ).done( function( response ) {
  99. var responseData = response.data;
  100. if ( ! response.success ) {
  101. // e.g. invalid request ID
  102. onExportFailure( response.data );
  103. return;
  104. }
  105. if ( ! responseData.done ) {
  106. setTimeout( doNextExport( exporterIndex, pageIndex + 1 ) );
  107. } else {
  108. if ( exporterIndex < exportersCount ) {
  109. setTimeout( doNextExport( exporterIndex + 1, 1 ) );
  110. } else {
  111. onExportDoneSuccess( responseData.url );
  112. }
  113. }
  114. }).fail( function( jqxhr, textStatus, error ) {
  115. // e.g. Nonce failure
  116. onExportFailure( error );
  117. });
  118. }
  119. // And now, let's begin
  120. setActionState( $action, 'export-personal-data-processing' );
  121. doNextExport( 1, 1 );
  122. });
  123. $( '.remove-personal-data-handle' ).click( function( event ) {
  124. var $this = $( this ),
  125. $action = $this.parents( '.remove-personal-data' ),
  126. $requestRow = $this.parents( 'tr' ),
  127. requestID = $action.data( 'request-id' ),
  128. nonce = $action.data( 'nonce' ),
  129. erasersCount = $action.data( 'erasers-count' ),
  130. hasRemoved = false,
  131. hasRetained = false,
  132. messages = [];
  133. event.stopPropagation();
  134. $action.blur();
  135. clearResultsAfterRow( $requestRow );
  136. function onErasureDoneSuccess() {
  137. var summaryMessage = strings.noDataFound;
  138. var classes = 'notice-success';
  139. setActionState( $action, 'remove-personal-data-idle' );
  140. if ( false === hasRemoved ) {
  141. if ( false === hasRetained ) {
  142. summaryMessage = strings.noDataFound;
  143. } else {
  144. summaryMessage = strings.noneRemoved;
  145. classes = 'notice-warning';
  146. }
  147. } else {
  148. if ( false === hasRetained ) {
  149. summaryMessage = strings.foundAndRemoved;
  150. } else {
  151. summaryMessage = strings.someNotRemoved;
  152. classes = 'notice-warning';
  153. }
  154. }
  155. appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, messages );
  156. }
  157. function onErasureFailure() {
  158. setActionState( $action, 'remove-personal-data-failed' );
  159. appendResultsAfterRow( $requestRow, 'notice-error', strings.removalError, [] );
  160. }
  161. function doNextErasure( eraserIndex, pageIndex ) {
  162. $.ajax({
  163. url: window.ajaxurl,
  164. data: {
  165. action: 'wp-privacy-erase-personal-data',
  166. eraser: eraserIndex,
  167. id: requestID,
  168. page: pageIndex,
  169. security: nonce
  170. },
  171. method: 'post'
  172. }).done( function( response ) {
  173. var responseData = response.data;
  174. if ( ! response.success ) {
  175. onErasureFailure();
  176. return;
  177. }
  178. if ( responseData.items_removed ) {
  179. hasRemoved = hasRemoved || responseData.items_removed;
  180. }
  181. if ( responseData.items_retained ) {
  182. hasRetained = hasRetained || responseData.items_retained;
  183. }
  184. if ( responseData.messages ) {
  185. messages = messages.concat( responseData.messages );
  186. }
  187. if ( ! responseData.done ) {
  188. setTimeout( doNextErasure( eraserIndex, pageIndex + 1 ) );
  189. } else {
  190. if ( eraserIndex < erasersCount ) {
  191. setTimeout( doNextErasure( eraserIndex + 1, 1 ) );
  192. } else {
  193. onErasureDoneSuccess();
  194. }
  195. }
  196. }).fail( function() {
  197. onErasureFailure();
  198. });
  199. }
  200. // And now, let's begin
  201. setActionState( $action, 'remove-personal-data-processing' );
  202. doNextErasure( 1, 1 );
  203. });
  204. });
  205. ( function( $ ) {
  206. // Privacy policy page, copy button.
  207. $( document ).on( 'click', function( event ) {
  208. var $target = $( event.target );
  209. var $parent, $container, range;
  210. if ( $target.is( 'button.privacy-text-copy' ) ) {
  211. $parent = $target.parent().parent();
  212. $container = $parent.find( 'div.wp-suggested-text' );
  213. if ( ! $container.length ) {
  214. $container = $parent.find( 'div.policy-text' );
  215. }
  216. if ( $container.length ) {
  217. try {
  218. window.getSelection().removeAllRanges();
  219. range = document.createRange();
  220. $container.addClass( 'hide-privacy-policy-tutorial' );
  221. range.selectNodeContents( $container[0] );
  222. window.getSelection().addRange( range );
  223. document.execCommand( 'copy' );
  224. $container.removeClass( 'hide-privacy-policy-tutorial' );
  225. window.getSelection().removeAllRanges();
  226. } catch ( er ) {}
  227. }
  228. }
  229. });
  230. } ( jQuery ) );