PageRenderTime 25ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/ninja-forms/client/dashboard/models/formCollection.js

https://bitbucket.org/djmdigital/total-auto-care-wordpress
JavaScript | 191 lines | 155 code | 27 blank | 9 comment | 5 complexity | 7b31f0c39ab002dcfa0e16ed9554a334 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.0, 0BSD
  1. /**
  2. * Collection that holds our form models.
  3. *
  4. * @package Ninja Forms client
  5. * @copyright (c) 2017 WP Ninjas
  6. * @since 3.0
  7. */
  8. define( ['models/formModel'], function( FormModel ) {
  9. var collection = Backbone.Collection.extend( {
  10. model: FormModel,
  11. comparator: 'title',
  12. tmpNum: 1,
  13. url: function() {
  14. return ajaxurl + "?action=nf_forms&security=" + nfAdmin.ajaxNonce;
  15. },
  16. initialize: function() {
  17. this.newIDs = [];
  18. this.baseUrl = window.location.href.split('?')[0];
  19. this.listenTo( nfRadio.channel( 'dashboard' ), 'forms:delete', this.modalConfirm );
  20. this.listenTo( nfRadio.channel( 'dashboard' ), 'forms:duplicate', this.duplicate );
  21. this.modal = new jBox( 'Modal', {
  22. width: 400,
  23. addClass: 'dashboard-modal',
  24. overlay: true,
  25. closeOnClick: 'body'
  26. } );
  27. },
  28. parse: function( response, options ){
  29. if (response.data.hasOwnProperty('error')) {
  30. alert(response.data.error);
  31. return null;
  32. }
  33. return response.data;
  34. },
  35. modalConfirm: function( view ){
  36. var message, container, messageBox, title, buttons, confirm, cancel, lineBreak;
  37. var formID = view.model.get( 'id' );
  38. var formTitle = view.model.get( 'title' );
  39. container = document.createElement( 'div' );
  40. container.style.paddingRight = '20px';
  41. container.style.paddingLeft = '20px';
  42. container.style.paddingBottom = '20px';
  43. messageBox = document.createElement( 'p' );
  44. title = document.createElement( 'em' );
  45. buttons = document.createElement( 'div' );
  46. confirm = document.createElement( 'button' );
  47. cancel = document.createElement( 'div' );
  48. container.classList.add( 'message' );
  49. title.innerHTML = formTitle;
  50. messageBox.innerHTML += nfi18n.deleteWarningA + ' (<strong>'
  51. + formTitle + '</strong>). ' + nfi18n.deleteWarningB;
  52. messageBox.appendChild( document.createElement( 'br') );
  53. messageBox.appendChild( document.createElement( 'br') );
  54. var exportFormLink = document.createElement( 'a' );
  55. // link to export page with this form selected
  56. exportFormLink.href = this.baseUrl + '?page=nf-import-export&exportFormId='
  57. + formID;
  58. exportFormLink.innerHTML = '<i class="fa fa-download"' +
  59. ' style="padding:5px;"></i>' + nfi18n.deleteXForm;
  60. exportFormLink.target = '_blank'; // open in new tab
  61. messageBox.appendChild( exportFormLink );
  62. messageBox.appendChild( document.createElement( 'br') );
  63. var exportSubmissionLink = document.createElement( 'a' );
  64. // link to export submissions page
  65. exportSubmissionLink.href = this.baseUrl + '?page=nf-processing&action=download_all_subs&form_id='
  66. + formID + '&redirect=' + encodeURIComponent( this.baseUrl.replace( 'admin.php', 'edit.php' ) + '?post_status=all&post_type=nf_sub&form_id='
  67. + formID );
  68. exportSubmissionLink.target = '_blank';
  69. exportSubmissionLink.innerHTML = '<i class="fa fa-download" ' +
  70. 'style="padding:5px;"></i>' + nfi18n.deleteXSubs;
  71. messageBox.appendChild( exportSubmissionLink );
  72. messageBox.appendChild( document.createElement( 'br') );
  73. container.appendChild( messageBox );
  74. var inputLabel = document.createElement( 'label' );
  75. inputLabel.for = 'confirmDeleteFormInput';
  76. inputLabel.innerHTML = nfi18n.deleteConfirmA + ' <span style="color:red;">DELETE</span> ' + nfi18n.deleteConfirmB;
  77. var deleteInput = document.createElement( 'input' );
  78. deleteInput.type = 'text';
  79. deleteInput.id = 'confirmDeleteFormInput';
  80. deleteInput.style.marginTop = '10px';
  81. deleteInput.style.width = '100%';
  82. deleteInput.style.height = '2.5em';
  83. deleteInput.style.fontSize = '1em';
  84. container.appendChild( inputLabel );
  85. container.appendChild( document.createElement( 'br' ) );
  86. container.appendChild( deleteInput );
  87. container.appendChild( document.createElement( 'br' ) );
  88. container.appendChild( document.createElement( 'br' ) );
  89. confirm.innerHTML = nfi18n.delete;
  90. confirm.classList.add( 'confirm', 'nf-button', 'primary', 'pull-right' );
  91. cancel.innerHTML = nfi18n.cancel;
  92. cancel.classList.add( 'cancel', 'nf-button', 'secondary' );
  93. buttons.appendChild( cancel );
  94. buttons.appendChild( confirm );
  95. buttons.classList.add( 'buttons' );
  96. container.appendChild( buttons );
  97. message = document.createElement( 'div' );
  98. message.appendChild( container );
  99. this.modal.setContent( message.innerHTML );
  100. this.modal.setTitle( nfi18n.deleteTitle );
  101. this.modal.open();
  102. var that = this;
  103. var btnCancel = this.modal.container[0].getElementsByClassName('cancel')[0];
  104. btnCancel.addEventListener('click', function() {
  105. that.modalClose();
  106. } );
  107. var btnConfirm = this.modal.container[0].getElementsByClassName('confirm')[0];
  108. btnConfirm.addEventListener('click', function( e ) {
  109. e.preventDefault();
  110. var deleteInputVal = document.getElementById( 'confirmDeleteFormInput' ).value;
  111. if( 'DELETE' === deleteInputVal ) {
  112. that.confirmDelete(view);
  113. } else {
  114. that.modalClose();
  115. }
  116. } );
  117. },
  118. modalClose: function() {
  119. this.modal.close();
  120. },
  121. confirmDelete: function( view ) {
  122. jQuery( view.el ).removeClass( 'show-actions' );
  123. jQuery( view.el ).addClass( 'deleting' );
  124. jQuery( view.el ).animate({
  125. 'opacity': 0,
  126. 'line-height': 0,
  127. 'display': 'none'
  128. }, 500 );
  129. console.log(view);
  130. view.model.destroy();
  131. this.modalClose();
  132. },
  133. duplicate: function( view ) {
  134. var message = '<div class="message">Duplicating <em>' + view.model.get( 'title' ) +
  135. '</em>...' + '<div class="nf-loading-spinner"></div></div>';
  136. this.modal.setContent( message );
  137. this.modal.setTitle( 'Please Wait' );
  138. this.modal.open();
  139. var that = this;
  140. jQuery.ajax({
  141. type: "POST",
  142. url: ajaxurl + '?action=nf_forms&clone_id=' + view.model.get( 'id' ) + '&security=' + nfAdmin.ajaxNonce,
  143. success: function( response ){
  144. var response = JSON.parse( response );
  145. if(response.data.hasOwnProperty('error')) {
  146. alert(response.data.error);
  147. } else {
  148. var newID = response.data.new_form_id;
  149. var clone = view.model.clone();
  150. clone.set({
  151. id: newID,
  152. title: clone.get( 'title' ) + ' - copy',
  153. created_at: new Date(),
  154. });
  155. clone.initShortcode( newID );
  156. view.model.collection.add( clone );
  157. }
  158. that.modalClose();
  159. }
  160. });
  161. }
  162. } );
  163. return collection;
  164. } );