PageRenderTime 44ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/wp-content/plugins/ninja-forms-multi-part/deprecated/js/dev/ninja-forms-mp-admin.js

https://bitbucket.org/djmdigital/total-auto-care-wordpress
JavaScript | 509 lines | 366 code | 81 blank | 62 comment | 39 complexity | 290e0fee27ae8538c046503d0d368735 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.0, 0BSD
  1. // Setup our page data models to track which pages exist and what fields are on them.
  2. // Model to hold our page settings.
  3. var nfPage = Backbone.Model.extend( {
  4. duplicate: function() {
  5. var form_id = ninja_forms_settings.form_id;
  6. nfFields.updateData();
  7. var field_data = JSON.stringify( nfFields.toJSON() );
  8. // Show our MP spinner
  9. jQuery( '.mp-spinner' ).show();
  10. jQuery.post( ajaxurl, { form_id: form_id, field_ids: this.get( 'fields' ), field_data: field_data, action: 'nf_mp_copy_page', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  11. // Hide our MP spinner
  12. jQuery( '.mp-spinner' ).hide();
  13. // Update our page and field data models
  14. // Update our page data model.
  15. nfPages.add( { num: response.new_part.num, divider_id: response.new_part.id, page_title: response.new_part.page_title, fields: response.new_part.fields } );
  16. // Increase our page count.
  17. nfPages.count++;
  18. // Add our new fields to the fields data model.
  19. _.each( response.new_part.fields, function( field_id ) {
  20. // Add our field to our backbone data model.
  21. nfFields.add( { id: field_id, metabox_state: 0 } );
  22. } );
  23. nfPages.updateView( response.new_nav, response.new_slide, nfPages.count );
  24. } );
  25. },
  26. remove: function() {
  27. var answer = confirm( nf_mp.remove_page_text );
  28. if( answer ) {
  29. var form_id = ninja_forms_settings.form_id;
  30. var current_page = this.get( 'num' );
  31. var page_count = nfPages.count;
  32. if(page_count > 1){
  33. jQuery("#ninja_forms_field_list_" + current_page).find("._page_divider-li").removeClass("not-sortable");
  34. }
  35. var fields = this.get( 'fields' );
  36. if( fields.length > 0 ){
  37. // Hide our - symbol
  38. jQuery( '.mp-remove-page' ).find( '.symbol' ).hide();
  39. // Add our spinner-specific CSS
  40. jQuery( '.mp-remove-page' ).css( 'padding', '4px 0 0 0' );
  41. // Show our MP spinner
  42. jQuery( '.mp-remove-page' ).find('.spinner' ).show();
  43. if ( current_page > 1 ) {
  44. move_to_page = current_page - 1;
  45. }else{
  46. move_to_page = 1;
  47. }
  48. var that = this;
  49. var order = nf_mp_get_field_order();
  50. jQuery.post( ajaxurl, { form_id: form_id, fields: fields, move_to_page: move_to_page, order: order, action: 'nf_mp_delete_page', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  51. // Hide our MP spinner
  52. jQuery( '.mp-remove-page' ).find( '.spinner' ).hide();
  53. // Remove our padding CSS
  54. jQuery( '.mp-remove-page' ).css( 'padding', '0' );
  55. // Show our - symbol
  56. jQuery( '.mp-remove-page' ).find( '.symbol' ).show();
  57. // Remove our current page from the nfPages collection
  58. nfPages.remove( that );
  59. // Remove the current page from our nfFields collection
  60. var divider_id = that.get( 'id' );
  61. var divider = nfFields.get( divider_id );
  62. nfFields.remove( divider );
  63. if( page_count == 2 ){
  64. nfPages.reset();
  65. jQuery( '._page_divider-li' ).remove();
  66. nfPages.updateView( response.new_nav, response.new_slide, 1 );
  67. jQuery( '#ninja_forms_mp_pagination' ).fadeOut( 'fast' );
  68. jQuery( '#nf_mp_enable' ).fadeIn();
  69. }else{
  70. // Recalculate our part numbers
  71. var x = 1;
  72. _.each( nfPages.models, function( part ) {
  73. part.set( 'num', x );
  74. x++;
  75. } );
  76. nfPages.updateView( response.new_nav, response.new_slide, move_to_page );
  77. }
  78. nfPages.count--;
  79. } );
  80. }
  81. }
  82. }
  83. } );
  84. // Collection to hold our fields.
  85. var nfPages = Backbone.Collection.extend({
  86. model: nfPage,
  87. enable: function() {
  88. // Hide our "enable multi-part" button.
  89. jQuery( '#nf_mp_enable' ).fadeOut();
  90. // Get our current form ID.
  91. var form_id = ninja_forms_settings.form_id;
  92. // Post to our PHP handler.
  93. jQuery.post( ajaxurl, { form_id: form_id, action: 'nf_mp_enable', nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function( response ) {
  94. // Add our newly created page dividers to the field list.
  95. _.each( response.new_parts, function( part ) {
  96. // Add our newly created pages to our part model.
  97. nfPages.add( { num: part.num, divider_id: part.id, page_title: '', fields: part.fields } );
  98. // Add our field to our backbone data model.
  99. nfFields.add( { id: part.id, metabox_state: 0 } );
  100. } );
  101. // Set our page count to 2.
  102. nfPages.count = 2;
  103. nfPages.updateView( response.new_nav, response.new_slide, 1 );
  104. } );
  105. },
  106. addNew: function() {
  107. // Hide our - symbol
  108. jQuery( '.mp-add-page' ).find( '.symbol' ).hide();
  109. // Add our spinner-specific CSS
  110. jQuery( '.mp-add-page' ).css( 'padding', '4px 0 0 0' );
  111. // Show our MP spinner
  112. jQuery( '.mp-add-page' ).find('.spinner' ).show();
  113. nfFields.updateData();
  114. var form_id = ninja_forms_settings.form_id;
  115. var that = this;
  116. var order = nf_mp_get_field_order();
  117. // Send a post request with our form id to create a new part.
  118. jQuery.post( ajaxurl, { form_id: form_id, order: order, action: 'nf_mp_new_page', nf_ajax_nonce: ninja_forms_settings.nf_ajax_nonce }, function( response ) {
  119. // Increase our part count
  120. that.count++;
  121. // Add a new part to our collection.
  122. that.add( [ {
  123. num: that.count,
  124. fields: response.new_part.fields,
  125. divider_id: response.new_part.id
  126. } ] );
  127. // Add our new part to the field model
  128. nfFields.add( { id: response.new_part.id, metabox_state: 0 } );
  129. // Update our view
  130. that.updateView( response.new_nav, response.new_slide, nfPages.count );
  131. // Fire our added event.
  132. jQuery( document ).triggerHandler( 'nfMpAddPart', [ response ] );
  133. // Hide our MP spinner
  134. jQuery( '.mp-add-page' ).find( '.spinner' ).hide();
  135. // Show our - symbol
  136. jQuery( '.mp-add-page' ).find( '.symbol' ).show();
  137. } );
  138. },
  139. updateView: function( new_nav, new_slide, move_to_page ) {
  140. // Update our page navigation.
  141. jQuery( '#ninja_forms_mp_pagination' ).html( new_nav );
  142. // Update our field list HTML.
  143. jQuery( '#ninja-forms-slide' ).html( new_slide );
  144. // Update our sortables
  145. this.updateSortables();
  146. // Show our newly added multi-part pagination.
  147. jQuery( '#ninja_forms_mp_pagination' ).fadeIn();
  148. if ( false != move_to_page ) {
  149. // Move to our previous/next page.
  150. nf_mp_change_page( move_to_page );
  151. }
  152. },
  153. updateSortables: function() {
  154. // Make our newly added field lists sortable.
  155. jQuery( '.ninja-forms-field-list' ).sortable({
  156. handle: '.menu-item-handle',
  157. items: "li:not(.not-sortable)",
  158. connectWith: '.ninja-forms-field-list',
  159. //cursorAt: {left: -10, top: -1},
  160. start: function(e, ui){
  161. var wp_editor_count = jQuery(ui.item).find('.wp-editor-wrap').length;
  162. if(wp_editor_count > 0){
  163. jQuery(ui.item).find('.wp-editor-wrap').each(function(){
  164. var ed_id = this.id.replace('wp-', '');
  165. ed_id = ed_id.replace('-wrap', '');
  166. tinyMCE.execCommand( 'mceRemoveControl', false, ed_id );
  167. });
  168. }
  169. },
  170. stop: function(e,ui) {
  171. var wp_editor_count = jQuery(ui.item).find('.wp-editor-wrap').length;
  172. if( wp_editor_count > 0 ){
  173. jQuery( ui.item ).find( '.wp-editor-wrap' ).each( function() {
  174. var ed_id = this.id.replace( 'wp-', '' );
  175. ed_id = ed_id.replace( '-wrap', '' );
  176. tinyMCE.execCommand( 'mceAddControl', true, ed_id );
  177. });
  178. }
  179. jQuery( this ).sortable( 'refresh' );
  180. nfForm.set( 'saved', false );
  181. }
  182. } );
  183. jQuery( '.mp-add-page' ).droppable({
  184. accept: '.ninja-forms-field-list li',
  185. hoverClass: 'drop-hover',
  186. tolerance: 'pointer',
  187. drop: function( event, ui ) {
  188. var item = ui.draggable;
  189. jQuery( document ).on( 'nfMpAddPart.drop', function( response ) {
  190. item.hide( 'slow', function() {
  191. jQuery( this ).appendTo( '#ninja_forms_field_list_' + nfPages.count ).show( 'slow' );
  192. });
  193. } );
  194. nfPages.addNew();
  195. }
  196. } );
  197. jQuery( '#mp-page-list' ).sortable({
  198. helper: 'clone',
  199. tolerance: 'pointer',
  200. update: function( event, ui ) {
  201. var found = false;
  202. jQuery( '#mp-page-list li' ).each( function( index ) {
  203. var new_part = index + 1;
  204. var current_part = jQuery( this ).data( 'page' );
  205. // Set our data attribute for this li
  206. jQuery( this ).data( 'page', new_part );
  207. // Change our page # html
  208. jQuery( this ).html( new_part );
  209. // Change our page id
  210. jQuery( this ).prop( 'id', 'ninja_forms_mp_page_' + new_part );
  211. // Store the new page temporarily in our data model.
  212. nfPages.findWhere( { num: current_part } ).set( 'new_num', new_part );
  213. jQuery( '#ninja_forms_field_list_' + current_part ).data( 'page', new_part );
  214. if ( nfPages.current_page == current_part && ! found ) {
  215. nfPages.current_page = new_part;
  216. found = true;
  217. }
  218. } );
  219. // Update our data model.
  220. nfPages.each( function ( part ) {
  221. var num = part.get( 'num' );
  222. var new_num = part.get( 'new_num' );
  223. part.set( 'num', new_num );
  224. part.unset( 'new_num' );
  225. } );
  226. var div = jQuery( '#ninja-forms-slide' );
  227. uls = div.children( 'ul' );
  228. uls.each( function( index ) {
  229. var page = jQuery( this ).data( 'page' );
  230. jQuery( this ).prop( 'id', 'ninja_forms_field_list_' + page );
  231. });
  232. uls.detach().sort(function(a,b) {
  233. return jQuery(a).data( 'page' ) - jQuery(b).data( 'page' );
  234. });
  235. div.append( uls );
  236. nf_mp_change_page( nfPages.current_page );
  237. }
  238. } );
  239. jQuery( '#mp-page-list' ).disableSelection();
  240. jQuery( '.mp-page-nav' ).droppable({
  241. accept: '.ninja-forms-field-list li',
  242. hoverClass: 'drop-hover',
  243. tolerance: 'pointer',
  244. drop: function( event, ui ) {
  245. var page_number = jQuery( this ).data( 'page' );
  246. ui.draggable.hide( 'slow', function() {
  247. jQuery( this ).appendTo( '#ninja_forms_field_list_' + page_number ).show( 'slow' );
  248. });
  249. }
  250. });
  251. }
  252. });
  253. nfForm.saveTitle = function() {
  254. var title = jQuery( '#modal-contents-wrapper' ).find( '#nf-form-title' ).val();
  255. var show_insert_submit = this.get( 'show_insert_submit' );
  256. var insert_submit = jQuery( '#modal-contents-wrapper' ).find( '#nf-insert-submit' ).prop( 'checked' );
  257. this.set( 'title', title );
  258. this.set( 'status', '' );
  259. // Insert our submit button if we checked the box.
  260. if ( show_insert_submit && insert_submit ) {
  261. var that = this;
  262. // Add our custom addField behaviour
  263. jQuery( document ).on( 'addField.insertSubmit', function( e, response ) {
  264. jQuery( '#ninja_forms_field_' + response.new_id + '_toggle' ).click();
  265. jQuery( '#nf-save-title' ).nfAdminModal( 'close' );
  266. that.save();
  267. jQuery( document ).off( 'addField.insertSubmit' );
  268. } );
  269. if ( nfPages.count > 1 ) {
  270. nf_mp_change_page( nfPages.count, function() { jQuery( '#_submit' ).click(); } );
  271. } else {
  272. jQuery( '#_submit' ).click();
  273. }
  274. } else {
  275. jQuery( '#nf-save-title' ).nfAdminModal( 'close' );
  276. this.save();
  277. }
  278. }
  279. // Instantiate our fields collection.
  280. var nfPages = new nfPages();
  281. jQuery(document).ready(function($) {
  282. nfPages.current_page = 1;
  283. nfPages.count = 1;
  284. // Loop through our MP pages JSON that is already on the page and populate our collection with it.
  285. if( 'undefined' !== typeof nf_mp.pages ) {
  286. var x = 1;
  287. _.each( nf_mp.pages, function( page ) {
  288. nfPages.add( { num: x, divider_id: page.id, page_title: page.page_title, fields: page.fields } );
  289. x++;
  290. } );
  291. nfPages.count = x - 1;
  292. }
  293. $( document ).on( 'click', '.mp-add-page', function( e ) {
  294. e.preventDefault();
  295. nfPages.addNew();
  296. } );
  297. $( document ).on( 'click', '#nf_mp_enable', function( e ) {
  298. e.preventDefault();
  299. nfPages.enable();
  300. } );
  301. $(document).on( 'click', '.mp-page-nav', function(e){
  302. var page_number = $( this ).data( 'page' );
  303. var current_page = nfPages.current_page;
  304. if( page_number != current_page ) {
  305. nf_mp_change_page( page_number );
  306. }
  307. });
  308. $( document ).on( 'click', '.mp-remove-page', function( e ) {
  309. var current_page = nfPages.current_page;
  310. var part = nfPages.findWhere( { num: current_page } );
  311. part.remove();
  312. });
  313. // Filter our order variable before we save fields.
  314. $( document ).on( 'nfAdminSaveFields.mpFilter', function( e ) {
  315. $( '._page_divider-li' ).removeClass( 'not-sortable' );
  316. $( '.ninja-forms-field-list' ).sortable( 'refresh' );
  317. var current_order = '';
  318. $( '.ninja-forms-field-list' ).each(function(){
  319. if(current_order != ''){
  320. current_order = current_order + ',';
  321. }
  322. current_order = current_order + $( this ).sortable( 'toArray' );
  323. });
  324. current_order = current_order.split( ',' );
  325. var order = {};
  326. for ( var i = 0; i < current_order.length; i++ ) {
  327. order[i] = current_order[i];
  328. };
  329. order = JSON.stringify( order );
  330. $( document ).data( 'field_order', order );
  331. } );
  332. // Remove our default addField behaviour
  333. $( document ).off( 'addField.default' );
  334. // Add our custom addField behaviour
  335. $( document ).on( 'addField.mpAdd', function( e, response ) {
  336. var current_page = nfPages.current_page;
  337. jQuery("#ninja_forms_field_list_" + current_page).append(response.new_html);
  338. var field_id = response.new_id;
  339. if ( response.new_type == 'List' ) {
  340. //Make List Options sortable
  341. jQuery(".ninja-forms-field-list-options").sortable({
  342. helper: 'clone',
  343. handle: '.ninja-forms-drag',
  344. items: 'div',
  345. placeholder: "ui-state-highlight",
  346. });
  347. }
  348. if ( typeof nf_ajax_rte_editors !== 'undefined' ) {
  349. for (var x = nf_ajax_rte_editors.length - 1; x >= 0; x--) {
  350. var editor_id = nf_ajax_rte_editors[x];
  351. tinyMCE.init( tinyMCEPreInit.mceInit[ editor_id ] );
  352. try { quicktags( tinyMCEPreInit.qtInit[ editor_id ] ); } catch(e){}
  353. };
  354. }
  355. jQuery( '#ninja_forms_field_' + field_id + '_inside' ).find( '.nf-field-settings .inside' ).each( function() {
  356. var html = jQuery.trim( jQuery( this ).html() );
  357. if ( html == '' ) {
  358. jQuery( this ).parent().remove();
  359. }
  360. } );
  361. // Add our field to our backbone data model.
  362. nfFields.add( { id: response.new_id, metabox_state: 1 } );
  363. // Add our field to this page.
  364. var page = nfPages.findWhere( { num: current_page } );
  365. if ( 'undefined' !== typeof page ) {
  366. var page_fields = page.get( 'fields' );
  367. page_fields.push( response.new_id.toString() );
  368. page.set( 'fields', page_fields );
  369. }
  370. } );
  371. // Add our custom removeField behaviour
  372. // This function removes the field id from its page model when the field is removed.
  373. $( document ).on( 'removeField', function( e, field_id ) {
  374. var page = nfPages.findWhere( { num: nfPages.current_page } );
  375. if ( 'undefined' !== typeof page ) {
  376. var page_fields = page.get( 'fields' );
  377. page_fields = nf_mp_remove_array_value( page_fields, field_id );
  378. page.set( 'fields', page_fields );
  379. }
  380. } );
  381. // When a user clicks the "copy mp page" link, copy the page and add it to the editor.
  382. $( document ).on( 'click', '.mp-copy-page', function( e ) {
  383. e.preventDefault();
  384. var current_page = nfPages.current_page;
  385. var part = nfPages.findWhere( { num: current_page } );
  386. part.duplicate();
  387. } );
  388. $( '#mp-page-list' ).disableSelection();
  389. nfPages.updateSortables();
  390. } ); // Main document.ready
  391. function nf_mp_change_page( page_number, callback ){
  392. if ( !callback ) {
  393. var callback = '';
  394. }
  395. nfPages.current_page = page_number;
  396. jQuery( '.mp-page-nav' ).removeClass( 'active' );
  397. jQuery( '#ninja_forms_mp_page_' + page_number ).addClass( 'active' );
  398. var new_page = jQuery( '#ninja_forms_field_list_' + page_number ).position().left;
  399. jQuery( '#ninja-forms-slide').animate({left: -new_page},'300', callback );
  400. }
  401. function nf_mp_get_field_order() {
  402. jQuery( '._page_divider-li' ).removeClass( 'not-sortable' );
  403. jQuery( '.ninja-forms-field-list' ).sortable( 'refresh' );
  404. var current_order = '';
  405. jQuery( '.ninja-forms-field-list' ).each(function(){
  406. if(current_order != ''){
  407. current_order = current_order + ',';
  408. }
  409. current_order = current_order + jQuery( this ).sortable( 'toArray' );
  410. });
  411. current_order = current_order.split( ',' );
  412. var order = {};
  413. for ( var i = 0; i < current_order.length; i++ ) {
  414. order[i] = current_order[i];
  415. };
  416. jQuery( '._page_divider-li' ).addClass( 'not-sortable' );
  417. return JSON.stringify( order );
  418. }
  419. function nf_mp_remove_array_value( arr ) {
  420. var what, a = arguments, L = a.length, ax;
  421. while (L > 1 && arr.length) {
  422. what = a[--L];
  423. while ((ax= arr.indexOf(what)) !== -1) {
  424. arr.splice(ax, 1);
  425. }
  426. }
  427. return arr;
  428. }