PageRenderTime 26ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

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

https://bitbucket.org/wallindev/wallindev-wp
JavaScript | 182 lines | 147 code | 26 blank | 9 comment | 2 complexity | 8cc9234312708a90c0924e94f482df50 MD5 | raw file
Possible License(s): GPL-3.0
  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";
  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. return response.data;
  30. },
  31. modalConfirm: function( view ){
  32. var message, container, messageBox, title, buttons, confirm, cancel, lineBreak;
  33. var formID = view.model.get( 'id' );
  34. var formTitle = view.model.get( 'title' );
  35. container = document.createElement( 'div' );
  36. container.style.paddingRight = '20px';
  37. container.style.paddingLeft = '20px';
  38. container.style.paddingBottom = '20px';
  39. messageBox = document.createElement( 'p' );
  40. title = document.createElement( 'em' );
  41. buttons = document.createElement( 'div' );
  42. confirm = document.createElement( 'button' );
  43. cancel = document.createElement( 'div' );
  44. container.classList.add( 'message' );
  45. title.innerHTML = formTitle;
  46. messageBox.innerHTML += nfi18n.deleteWarningA + ' (<strong>'
  47. + formTitle + '</strong>). ' + nfi18n.deleteWarningB;
  48. messageBox.appendChild( document.createElement( 'br') );
  49. messageBox.appendChild( document.createElement( 'br') );
  50. var exportFormLink = document.createElement( 'a' );
  51. // link to export page with this form selected
  52. exportFormLink.href = this.baseUrl + '?page=nf-import-export&exportFormId='
  53. + formID;
  54. exportFormLink.innerHTML = '<i class="fa fa-download"' +
  55. ' style="padding:5px;"></i>' + nfi18n.deleteXForm;
  56. exportFormLink.target = '_blank'; // open in new tab
  57. messageBox.appendChild( exportFormLink );
  58. messageBox.appendChild( document.createElement( 'br') );
  59. var exportSubmissionLink = document.createElement( 'a' );
  60. // link to export submissions page
  61. exportSubmissionLink.href = this.baseUrl + '?page=nf-processing&action=download_all_subs&form_id='
  62. + formID + '&redirect=' + encodeURIComponent( this.baseUrl.replace( 'admin.php', 'edit.php' ) + '?post_status=all&post_type=nf_sub&form_id='
  63. + formID );
  64. exportSubmissionLink.target = '_blank';
  65. exportSubmissionLink.innerHTML = '<i class="fa fa-download" ' +
  66. 'style="padding:5px;"></i>' + nfi18n.deleteXSubs;
  67. messageBox.appendChild( exportSubmissionLink );
  68. messageBox.appendChild( document.createElement( 'br') );
  69. container.appendChild( messageBox );
  70. var inputLabel = document.createElement( 'label' );
  71. inputLabel.for = 'confirmDeleteFormInput';
  72. inputLabel.innerHTML = nfi18n.deleteConfirmA + ' <span style="color:red;">DELETE</span> ' + nfi18n.deleteConfirmB;
  73. var deleteInput = document.createElement( 'input' );
  74. deleteInput.type = 'text';
  75. deleteInput.id = 'confirmDeleteFormInput';
  76. deleteInput.style.marginTop = '10px';
  77. deleteInput.style.width = '100%';
  78. deleteInput.style.height = '2.5em';
  79. deleteInput.style.fontSize = '1em';
  80. container.appendChild( inputLabel );
  81. container.appendChild( document.createElement( 'br' ) );
  82. container.appendChild( deleteInput );
  83. container.appendChild( document.createElement( 'br' ) );
  84. container.appendChild( document.createElement( 'br' ) );
  85. confirm.innerHTML = nfi18n.delete;
  86. confirm.classList.add( 'confirm', 'nf-button', 'primary', 'pull-right' );
  87. cancel.innerHTML = nfi18n.cancel;
  88. cancel.classList.add( 'cancel', 'nf-button', 'secondary' );
  89. buttons.appendChild( cancel );
  90. buttons.appendChild( confirm );
  91. buttons.classList.add( 'buttons' );
  92. container.appendChild( buttons );
  93. message = document.createElement( 'div' );
  94. message.appendChild( container );
  95. this.modal.setContent( message.innerHTML );
  96. this.modal.setTitle( nfi18n.deleteTitle );
  97. this.modal.open();
  98. var that = this;
  99. var btnCancel = this.modal.container[0].getElementsByClassName('cancel')[0];
  100. btnCancel.addEventListener('click', function() {
  101. that.modalClose();
  102. } );
  103. var btnConfirm = this.modal.container[0].getElementsByClassName('confirm')[0];
  104. btnConfirm.addEventListener('click', function( e ) {
  105. e.preventDefault();
  106. var deleteInputVal = document.getElementById( 'confirmDeleteFormInput' ).value;
  107. if( 'DELETE' === deleteInputVal ) {
  108. that.confirmDelete(view);
  109. } else {
  110. that.modalClose();
  111. }
  112. } );
  113. },
  114. modalClose: function() {
  115. this.modal.close();
  116. },
  117. confirmDelete: function( view ) {
  118. jQuery( view.el ).removeClass( 'show-actions' );
  119. jQuery( view.el ).addClass( 'deleting' );
  120. jQuery( view.el ).animate({
  121. 'opacity': 0,
  122. 'line-height': 0,
  123. 'display': 'none'
  124. }, 500 );
  125. console.log(view);
  126. view.model.destroy();
  127. this.modalClose();
  128. },
  129. duplicate: function( view ) {
  130. var message = '<div class="message">Duplicating <em>' + view.model.get( 'title' ) +
  131. '</em>...' + '<div class="nf-loading-spinner"></div></div>';
  132. this.modal.setContent( message );
  133. this.modal.setTitle( 'Please Wait' );
  134. this.modal.open();
  135. var that = this;
  136. jQuery.ajax({
  137. type: "POST",
  138. url: ajaxurl + '?action=nf_forms&clone_id=' + view.model.get( 'id' ),
  139. success: function( response ){
  140. var response = JSON.parse( response );
  141. var newID = response.data.new_form_id;
  142. var clone = view.model.clone();
  143. clone.set({
  144. id: newID,
  145. title: clone.get( 'title' ) + ' - copy',
  146. created_at: new Date(),
  147. });
  148. clone.initShortcode( newID );
  149. view.model.collection.add( clone );
  150. that.modalClose();
  151. }
  152. });
  153. }
  154. } );
  155. return collection;
  156. } );