ninja-forms-admin.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792
  1. /*!
  2. * jQuery serializeFullArray - v0.1 - 28/06/2010
  3. * http://github.com/jhogendorn/jQuery-serializeFullArray/
  4. *
  5. * Copyright (c) 2010 Joshua Hogendorn
  6. *
  7. *
  8. * Whereas .serializeArray() serializes a form into a key:pair array, .serializeFullArray()
  9. * builds it into a n-tier object, respecting form input arrays.
  10. *
  11. */
  12. (function($){
  13. '$:nomunge'; // Used by YUI compressor.
  14. $.fn.serializeFullArray = function () {
  15. // Grab a set of name:value pairs from the form dom.
  16. var set = $(this).serializeArray();
  17. var output = {};
  18. for (var field in set)
  19. {
  20. if(!set.hasOwnProperty(field)) continue;
  21. // Split up the field names into array tiers
  22. var parts = set[field].name
  23. .split(/\]|\[/);
  24. // We need to remove any blank parts returned by the regex.
  25. parts = $.grep(parts, function(n) { return n != ''; });
  26. // Start ref out at the root of the output object
  27. var ref = output;
  28. for (var segment in parts)
  29. {
  30. if(!parts.hasOwnProperty(segment)) continue;
  31. // set key for ease of use.
  32. var key = parts[segment];
  33. var value = {};
  34. // If we're at the last part, the value comes from the original array.
  35. if (segment == parts.length - 1)
  36. {
  37. var value = set[field].value;
  38. }
  39. // Create a throwaway object to merge into output.
  40. var objNew = {};
  41. objNew[key] = value;
  42. // Extend output with our temp object at the depth specified by ref.
  43. $.extend(true, ref, objNew);
  44. // Reassign ref to point to this tier, so the next loop can extend it.
  45. ref = ref[key];
  46. }
  47. }
  48. return output;
  49. };
  50. })(jQuery);
  51. jQuery.fn.tinymce_textareas = function(){
  52. tinyMCE.init({
  53. skin : "wp_theme"
  54. // other options here
  55. });
  56. };
  57. jQuery.fn.nextElementInDom = function(selector, options) {
  58. var defaults = { stopAt : 'body' };
  59. options = jQuery.extend(defaults, options);
  60. var parent = jQuery(this).parent();
  61. var found = parent.find(selector);
  62. switch(true){
  63. case (found.length > 0):
  64. return found;
  65. case (parent.length === 0 || parent.is(options.stopAt)):
  66. return jQuery([]);
  67. default:
  68. return parent.nextElementInDom(selector);
  69. }
  70. };
  71. jQuery(document).ready(function($) {
  72. /* * * General JS * * */
  73. $(".ninja-forms-admin-date").datepicker( ninja_forms_settings.datepicker_args );
  74. //Select All Checkbox
  75. $(".ninja-forms-select-all").click(function(){
  76. var tmp_class = this.title;
  77. var checked = this.checked;
  78. $("." + tmp_class).prop("checked", checked);
  79. });
  80. //Make the Sidebar Sortable.
  81. $("#side-sortables").sortable({
  82. placeholder: "ui-state-highlight",
  83. helper: 'clone',
  84. handle: '.hndl',
  85. stop: function(e,ui) {
  86. var order = $("#side-sortables").sortable("toArray");
  87. var page = $("#_page").val();
  88. var tab = $("#_tab").val();
  89. $.post( ajaxurl, { order: order, page: page, tab: tab, action:"ninja_forms_side_sortable", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  90. });
  91. },
  92. });
  93. //Disble the enter key so that it doesn't submit our form if pressed.
  94. $(document).on( 'keydown', 'form input', function( event ){
  95. if(event.keyCode == 13) {
  96. var type = $(this).attr("type");
  97. if( type != "textarea" ){
  98. return false;
  99. }
  100. }
  101. });
  102. $( document ).on( 'click', '.metabox-item-edit', function( e ) {
  103. e.preventDefault();
  104. $( this ).parent().parent().find('.inside' ).slideToggle( 'fast' );
  105. } );
  106. $(".hndle").dblclick(function(event){
  107. $(this).prevAll(".item-controls:first").find("a").click();
  108. });
  109. //Listen to the Field Label and change the LI title and update select lists on KeyUp
  110. $(document).on( 'keyup', '.ninja-forms-field-label', function(){
  111. var field_id = this.id.replace("ninja_forms_field_", "");
  112. field_id = field_id.replace("_label", "");
  113. var label = this.value;
  114. label = ninja_forms_escape_html( label );
  115. if ( $.trim( label ) == '' ){
  116. label = $(this).parent().parent().parent().prev().find('.item-type:first').prop("innerHTML");
  117. }
  118. $("#ninja_forms_field_" + field_id + "_title").prop("innerHTML", label);
  119. if ( label.length > 15 ) {
  120. label = label.substring(0, 15);
  121. label += '...';
  122. }
  123. $(".ninja-forms-field-conditional-cr-field option[value='" + field_id + "']").each(function(){
  124. $(this).text(field_id + ' - ' + label);
  125. });
  126. $(".ninja-forms-calc-select option[value='" + field_id +"']").each(function(){
  127. $(this).text(field_id + ' - ' + label);
  128. });
  129. });
  130. //Show / Hide Help Textarea
  131. $(document).on( 'change', '.ninja-forms-show-help', function( event ){
  132. var field_id = this.id.replace("ninja_forms_field_", "");
  133. field_id = field_id.replace("_show_help", "");
  134. if(this.checked){
  135. $("#ninja_forms_field_" + field_id + "_help_span").show();
  136. }else{
  137. $("#ninja_forms_field_" + field_id + "_help_span").hide();
  138. }
  139. });
  140. //Show / Hide Description Textarea
  141. $(document).on( 'change', '.ninja-forms-show-desc', function( event ){
  142. var field_id = this.id.replace("ninja_forms_field_", "");
  143. field_id = field_id.replace("_show_desc", "");
  144. if(this.checked){
  145. $("#ninja_forms_field_" + field_id + "_desc_span").show();
  146. }else{
  147. $("#ninja_forms_field_" + field_id + "_desc_span").hide();
  148. }
  149. });
  150. // Delete Form JS
  151. $(".ninja-forms-delete-form").click(function(event){
  152. event.preventDefault();
  153. var form_id = this.id.replace('ninja_forms_delete_form_', '');
  154. var answer = confirm('Really delete this form? (Irreversible)');
  155. if(answer){
  156. $.post(ajaxurl, { form_id: form_id, action:"ninja_forms_delete_form", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  157. $("#ninja_forms_form_" + form_id + "_tr").css("background-color", "#FF0000").fadeOut('slow', function(){
  158. $(this).remove();
  159. });
  160. });
  161. }
  162. });
  163. //Delete individual submissions
  164. $(".ninja-forms-delete-sub").click(function(event){
  165. event.preventDefault();
  166. var sub_id = this.id.replace("ninja_forms_sub_", "");
  167. var answer = confirm("Permenantly delete this item?");
  168. if(answer){
  169. $.post(ajaxurl, { sub_id: sub_id, action:"ninja_forms_delete_sub", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  170. $("#ninja_forms_sub_" + sub_id + "_tr").css("background-color", "#FF0000").fadeOut('slow', function(){
  171. $(this).remove();
  172. });
  173. });
  174. }
  175. });
  176. /* * * End General JS * * */
  177. /* * * Field Specific JS * * * /
  178. /* Textbox Field JS */
  179. // Default Value
  180. $(document).on( 'change', '.ninja-forms-_text-default-value', function(){
  181. var id = this.id.replace('default_value_', '');
  182. if( this.value == '_custom' || this.value == 'querystring' ){
  183. $("#ninja_forms_field_" + id + "_default_value").val('');
  184. $("#default_value_label_" + id).show();
  185. $("#ninja_forms_field_" + id + "_default_value").focus();
  186. }else{
  187. $( '.querystring-error' ).hide();
  188. $( '#ninja_forms_field_' + id + '_default_value' ).removeClass( 'error' );
  189. $( '#default_value_label_' + id ).hide();
  190. $( '#ninja_forms_field_' + id + '_default_value' ).val(this.value);
  191. }
  192. if ( 'querystring' != this.value ) {
  193. $( '.querystring-error' ).hide();
  194. $( '#ninja_forms_field_' + id + '_default_value' ).removeClass( 'error' );
  195. $( '.nf-save-admin-fields' ).attr( 'disabled', false );
  196. }
  197. if(this.value != '' && this.value != 'today' ){
  198. $("#ninja_forms_field_" + id + "_datepicker").prop('checked', false);
  199. }
  200. });
  201. // Throw an error if we set a querystring that is reserved
  202. $( document ).on( 'keyup', '.nf-default-value-text', function() {
  203. var field_id = $( this ).data( 'field-id' );
  204. if ( -1 != wp_reserved_terms.indexOf( this.value ) && 'querystring' == $( '#default_value_' + field_id ).val() ) {
  205. $( '.querystring-error' ).show();
  206. $( this ).addClass( 'error' );
  207. $( '.nf-save-admin-fields' ).attr( 'disabled', true );
  208. } else {
  209. $( '.querystring-error' ).hide();
  210. $( this ).removeClass( 'error' );
  211. $( '.nf-save-admin-fields' ).attr( 'disabled', false );
  212. }
  213. } );
  214. // Input Mask
  215. $(document).on( 'change', '.ninja-forms-_text-mask', function(){
  216. var id = this.id.replace('mask_', '');
  217. if(this.value == '_custom'){
  218. $("#ninja_forms_field_" + id + "_mask").val('');
  219. $("#mask_label_" + id).show();
  220. $("#ninja_forms_field_" + id + "_mask").focus();
  221. }else{
  222. $("#mask_label_" + id).hide();
  223. $("#ninja_forms_field_" + id + "_mask").val(this.value);
  224. }
  225. if(this.value != ''){
  226. $("#ninja_forms_field_" + id + "_datepicker").prop('checked', false);
  227. }
  228. });
  229. //Input Mask Help
  230. $(document).on( 'click', '.ninja-forms-mask-help', function(event){
  231. event.preventDefault();
  232. if( !$("#tab-panel-mask_help").is(":visible") ){
  233. $("#tab-link-mask_help").find("a").click();
  234. $("#contextual-help-link").click().focus();
  235. }
  236. });
  237. // Datepicker
  238. $(document).on( 'change', '.ninja-forms-_text-datepicker', function(){
  239. var id = this.id.replace("ninja_forms_field_", "");
  240. id = id.replace("_datepicker", "");
  241. if(this.checked == true){
  242. //$("#ninja_forms_field_" + id + "_default_value").val("");
  243. if ( $("#ninja_forms_field_" + id + "_mask").val() != 'today' ) {
  244. $("#ninja_forms_field_" + id + "_mask").val("");
  245. }
  246. $("#default_value_" + id).val("");
  247. $("#default_value_label_" + id).hide();
  248. $("#mask_" + id).val("");
  249. $("#mask_label_" + id).hide();
  250. }
  251. });
  252. /* List Field JS */
  253. //Collapse List Options.
  254. $(document).on( 'click', '.ninja-forms-field-collapse-options', function(e){
  255. e.preventDefault();
  256. var field_id = this.id.replace("ninja_forms_field_", "");
  257. field_id = field_id.replace("_collapse_options", "");
  258. $("#ninja_forms_field_" + field_id + "_list_span").slideToggle(function(){
  259. /*
  260. if($("#ninja_forms_field_" + field_id + "_list_span").css("display") != 'none'){
  261. var label = "Collapse Options";
  262. }else{
  263. var label = "Expand Options";
  264. }
  265. $("#ninja_forms_field_" + field_id + "_collapse_options").prop("innerHTML", label);
  266. */
  267. });
  268. });
  269. //Listen to the "List Type" Select box and show the multi-size input box if "Multi-Select" is selected.
  270. $(document).on( 'change', '.ninja-forms-_list-list_type', function(){
  271. var field_id = this.id.replace("ninja_forms_field_", "");
  272. field_id = field_id.replace("_list_type", "");
  273. if(this.value == 'multi'){
  274. $("#ninja_forms_field_" + field_id+ "_multi_size_p").show();
  275. }else{
  276. $("#ninja_forms_field_" + field_id+ "_multi_size_p").hide();
  277. }
  278. if(this.value == 'radio' || this.value == 'checkbox'){
  279. $("#ninja_forms_field_" + field_id + "_label_pos").val('left');
  280. $("#ninja_forms_field_" + field_id + "_label_pos option[value='inside']").attr('disabled', true);
  281. }else{
  282. $("#ninja_forms_field_" + field_id + "_label_pos option[value='inside']").attr('disabled', false);
  283. }
  284. });
  285. //Make List Options sortable
  286. $(".ninja-forms-field-list-options").sortable({
  287. helper: 'clone',
  288. handle: '.ninja-forms-drag',
  289. items: 'div',
  290. placeholder: "ui-state-highlight",
  291. });
  292. // Listen to the Show list values checkboxes and show or hide those if necessary.
  293. $(document).on( 'change', '.ninja-forms-field-list-show-value', function(e){
  294. var field_id = this.id.replace("ninja_forms_field_", "");
  295. field_id = field_id.replace("_list_show_value", "");
  296. if(this.checked){
  297. $(".ninja-forms-field-" + field_id + "-list-option-value").show();
  298. }else{
  299. $(".ninja-forms-field-" + field_id + "-list-option-value").hide();
  300. }
  301. });
  302. //Add New List Option
  303. $(document).on( 'click', '.ninja-forms-field-add-list-option', function(event){
  304. event.preventDefault();
  305. var field_id = this.id.replace("ninja_forms_field_", "");
  306. field_id = field_id.replace("_list_add_option", "");
  307. var x = $(".ninja-forms-field-" + field_id + "-list-option").length;
  308. var hidden_value = $("#ninja_forms_field_" + field_id + "_list_show_value").prop("checked");
  309. if(hidden_value){
  310. hidden_value = 1;
  311. }else{
  312. hidden_value = 0;
  313. }
  314. $.post(ajaxurl, { field_id: field_id, x: x, hidden_value: hidden_value, action:"ninja_forms_add_list_option", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  315. $("#ninja_forms_field_" + field_id + "_list_options").append(response);
  316. $("#ninja_forms_field_" + field_id + "_list_option_" + x).fadeIn();
  317. $(".ninja-forms-field-conditional-value-list").each(function(){
  318. $(this).append("<option value='' title='" + x + "'></option>");
  319. });
  320. $("[name='ninja_forms_field_" + field_id + "\\[list\\]\\[options\\]\\[" + x + "\\]\\[label\\]']").focus();
  321. });
  322. });
  323. //Remove List Option
  324. $(document).on( 'click', '.nf-remove-list-option', function(event){
  325. event.preventDefault();
  326. var field_id = this.id.replace("ninja_forms_field_", "");
  327. field_id = field_id.replace("_list_remove_option", "");
  328. var x = $(this).parent().prop("id");
  329. x = x.replace("ninja_forms_field_" + field_id + "_list_option_", "");
  330. $(this).parent().parent().parent().parent().parent().fadeOut(300, function(){
  331. $(this).remove();
  332. });
  333. $(".ninja-forms-field-conditional-value-list").each(function(){
  334. $(this).children('option').each(function(){
  335. if(this.title == x){
  336. $(this).remove();
  337. }
  338. });
  339. });
  340. });
  341. //Listen to the option labels and values; if the enter key is pressed, add a new option.
  342. $(document).on( 'keydown', '.ninja-forms-field-list-option-label', function(event){
  343. if( event.keyCode == 13 ){
  344. var add_id = this.id.replace("option_label", "add_option");
  345. $("#" + add_id).click();
  346. return false;
  347. }
  348. });
  349. $(document).on( 'keydown', '.ninja-forms-field-list-option-value', function(event){
  350. if( event.keyCode == 13 ){
  351. var add_id = this.id.replace("option_value", "add_option");
  352. $("#" + add_id).click();
  353. return false;
  354. }
  355. });
  356. $(document).on( 'keydown', '.ninja-forms-field-list-option-calc', function(event){
  357. if( event.keyCode == 13 ){
  358. var add_id = this.id.replace("option_calc", "add_option");
  359. $("#" + add_id).click();
  360. return false;
  361. }
  362. });
  363. //Listen to List Option Labels and Values and change existing criteron option selects
  364. $(document).on( 'keyup', '.ninja-forms-field-list-option-label', function(){
  365. var field_id = this.id.replace("ninja_forms_field_", "");
  366. field_id = field_id.replace("_list_option_label", "");
  367. var label = this.value;
  368. var x = $(this).parent().prop("id").replace("ninja_forms_field_" + field_id + "_list_option_", "");
  369. var list_show_value = $("#ninja_forms_field_" + field_id + "_list_show_value").prop("checked");
  370. $(".ninja-forms-field-conditional-cr-field").each(function(){
  371. if(this.value == field_id){
  372. $(this).nextElementInDom('.ninja-forms-field-conditional-cr-value-list').each(function(){
  373. $(this).children('option').each(function(){
  374. if(this.title == x){
  375. this.text = label;
  376. if(!list_show_value){
  377. this.value = label;
  378. }
  379. }
  380. });
  381. });
  382. }
  383. });
  384. $(".ninja-forms-field-" + field_id + "-conditional-value").children('option').each(function(){
  385. if(this.title == x){
  386. this.text = label;
  387. if(!list_show_value){
  388. this.value = label;
  389. }
  390. }
  391. });
  392. });
  393. $(document).on( 'keyup', '.ninja-forms-field-list-option-value', function(){
  394. var field_id = this.id.replace("ninja_forms_field_", "");
  395. field_id = field_id.replace("_list_option_value", "");
  396. var value = this.value;
  397. var x = $(this).parent().parent().prop("id").replace("ninja_forms_field_" + field_id + "_list_option_", "");
  398. $(".ninja-forms-field-conditional-cr-field").each(function(){
  399. if(this.value == field_id){
  400. $(this).nextElementInDom('.ninja-forms-field-conditional-cr-value-list').each(function(){
  401. $(this).children('option').each(function(){
  402. if(this.title == x){
  403. this.value = value;
  404. }
  405. });
  406. });
  407. }
  408. });
  409. $(".ninja-forms-field-" + field_id + "-conditional-value").children('option').each(function(){
  410. if(this.title == x){
  411. this.value = value;
  412. }
  413. });
  414. });
  415. $(document).on( 'change', '.ninja-forms-hidden-default-value', function(){
  416. var field_id = $(this).attr("rel");
  417. if( this.value == 'custom' ){
  418. $("#ninja_forms_field_" + field_id + "_default_value").val("");
  419. $("#default_value_label_" + field_id).show();
  420. $("#ninja_forms_field_" + field_id + "_default_value").focus();
  421. }else{
  422. $("#ninja_forms_field_" + field_id + "_default_value").val(this.value);
  423. $("#default_value_label_" + field_id).hide();
  424. }
  425. });
  426. // Close the import popup when "cancel" is clicked.
  427. $(".cancel-list-import").click(function(e){
  428. e.preventDefault();
  429. tb_remove();
  430. });
  431. // Handle the importing of textarea data when the user clicks: "done"
  432. $(document).on( 'click', '.save-list-import', function(e){
  433. e.preventDefault();
  434. var options = $(this).parent().find("textarea").val();
  435. var field_id = $(this).attr("rel");
  436. $.post(ajaxurl, { options: options, field_id: field_id, action:"ninja_forms_import_list_options", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce}, function(response){
  437. $("#ninja_forms_field_" + field_id + "_list_options").append( response );
  438. tb_remove();
  439. });
  440. });
  441. // Fetch the HTML for exluding terms when the user decides to attach this list element to a term.
  442. $(document).on( 'change', '.ninja-forms-list-populate-term', function(e, data ){
  443. var field_id = $(this).attr("rel");
  444. if ( this.value != '' ) {
  445. $.post(ajaxurl, { field_id: field_id, tax_name: this.value, from_ajax: 1, action:"ninja_forms_list_terms_checkboxes", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce}, function(response){
  446. $("#ninja_forms_field_" + field_id + "_exclude_terms").html(response);
  447. $("#ninja_forms_field_" + field_id + "_exclude_terms").show();
  448. });
  449. } else {
  450. $("#ninja_forms_field_" + field_id + "_exclude_terms").hide();
  451. }
  452. });
  453. /* Password Field JS */
  454. $(document).on( 'change', '.ninja-forms-_profile_pass-reg_password', function(){
  455. if( this.checked ){
  456. $(".reg-password").parent().parent().show();
  457. }else{
  458. $(".reg-password").parent().parent().hide();
  459. }
  460. });
  461. /* Calculation Field JS */
  462. $(document).on( 'click', '.ninja-forms-field-add-calc', function(e){
  463. e.preventDefault();
  464. var field_id = $(this).attr("rel");
  465. var spinner = $(this).next(".spinner");
  466. $(spinner).show();
  467. var x = $("#ninja_forms_field_" + field_id + "_calc").find(".ninja-forms-calc-row:last").attr("rel");
  468. if ( isNaN( x ) ) {
  469. x = 0;
  470. } else {
  471. x = parseInt(x);
  472. x = x + 1;
  473. }
  474. $.post(ajaxurl, { field_id: field_id, x: x, action:"ninja_forms_add_calc_row", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  475. $("#ninja_forms_field_" + field_id + "_calc").append(response);
  476. $(spinner).hide();
  477. });
  478. });
  479. $(document).on( 'click', '.ninja-forms-field-remove-calc', function(e){
  480. e.preventDefault();
  481. var field_id = $(this).attr("rel");
  482. var x = $(this).attr("name");
  483. $("#ninja_forms_field_" + field_id + "_calc_row_" + x).hide( function(){
  484. $("#ninja_forms_field_" + field_id + "_calc_row_" + x).remove();
  485. });
  486. });
  487. // Listen to the calculation field "name" element and update the calculation select lists with the new values.
  488. $(document).on( 'keyup', '.ninja-forms-calc-name', function(){
  489. var field_id = $(this).prop("id");
  490. field_id = field_id.replace("ninja_forms_field_", "");
  491. field_id = field_id.replace("_calc_name", "");
  492. var label = this.value;
  493. label = ninja_forms_escape_html( label );
  494. if ( $.trim( label ) == '' ){
  495. label = 'calc_name';
  496. }
  497. // Set the LI label to this new text.
  498. $(this).parent().parent().parent().prev().find('.ninja-forms-field-title').html(label);
  499. });
  500. // Register a function to be called whenever a new field is added to the form.
  501. $(document).bind('addField', function(event, response){
  502. // Add this new calc field to all of our calculation selects
  503. $(".ninja-forms-calc-select").each(function(){
  504. $(this).append('<option value="' + response.new_id + '">' + response.new_id + ' - ' + response.new_type + '</option>');
  505. });
  506. });
  507. // Register a function to be called whenever a field is removed from the form.
  508. $(document).bind('removeField', function(event, field_id){
  509. $(".ninja-forms-calc-select option[value='" + field_id + "']").remove();
  510. });
  511. // Listen to the calculation display type select and show or hide the appropriate options.
  512. $(document).on( 'change', '.ninja-forms-calc-display', function(e){
  513. var field_id = this.id.replace("ninja_forms_field_", "");
  514. field_id = field_id.replace("_calc_display_type", "");
  515. // Show the extra settings if the "none" option isn't selected.
  516. if(this.value == 'html'){
  517. $("#ninja_forms_field_" + field_id + "_calc_text_display").hide();
  518. $("#ninja_forms_field_" + field_id + "_calc_html_display").show();
  519. $("#ninja_forms_field_" + field_id + "_calc_extra_display").show();
  520. $("#ninja_forms_field_" + field_id + "_label").val('');
  521. }else if(this.value == 'text'){
  522. $("#ninja_forms_field_" + field_id + "_calc_text_display").show();
  523. $("#ninja_forms_field_" + field_id + "_calc_html_display").hide();
  524. $("#ninja_forms_field_" + field_id + "_calc_extra_display").show();
  525. }else{
  526. $("#ninja_forms_field_" + field_id + "_calc_text_display").hide();
  527. $("#ninja_forms_field_" + field_id + "_calc_html_display").hide();
  528. $("#ninja_forms_field_" + field_id + "_calc_extra_display").hide();
  529. $("#ninja_forms_field_" + field_id + "_label").val('');
  530. }
  531. });
  532. // Listen to the calculation advanced equations checkbox and show the advanced calculations box if it is checked.
  533. $(document).on( 'change', '.ninja-forms-calc-method', function(e){
  534. if(this.value == 'auto'){
  535. // Hide both advanced options
  536. $(this).parent().parent().parent().find(".ninja-forms-calculations").hide();
  537. $(this).parent().parent().parent().find(".ninja-forms-eq").hide();
  538. }else if(this.value == 'fields'){
  539. $(this).parent().parent().parent().find(".ninja-forms-calculations").show();
  540. $(this).parent().parent().parent().find(".ninja-forms-eq").hide();
  541. }else{
  542. $(this).parent().parent().parent().find(".ninja-forms-calculations").hide();
  543. $(this).parent().parent().parent().find(".ninja-forms-eq").show();
  544. }
  545. });
  546. /* User Info Fields JS */
  547. // Listen to the user info field group name select list and show the custom name box if custom is selected.
  548. $(document).on( 'change', '.user-info-group-name', function(e){
  549. if ( this.value == 'custom' ) {
  550. $(this).parent().parent().next().find('.user-info-custom-group').show();
  551. $(this).parent().parent().next().find('label').show();
  552. } else {
  553. $(this).parent().parent().next().find('label').hide();
  554. $(this).parent().parent().next().find('.user-info-custom-group').hide();
  555. }
  556. });
  557. /* * * End Field Specific JS * * */
  558. /* * * Favorite Fields JS * * */
  559. //Add Field to the User's Favorites List
  560. $(document).on( 'click', '.ninja-forms-field-add-fav', function(event){
  561. event.preventDefault();
  562. var field_id = this.id.replace("ninja_forms_field_", "");
  563. field_id = field_id.replace("_fav", "");
  564. var field_data = new Object();
  565. var this_id = this.id;
  566. $("[name*='ninja_forms_field_" + field_id + "']").each(function(){
  567. tmp = this.name.replace("ninja_forms_field_" + field_id + "[", "");
  568. tmp = tmp.replace("]", "");
  569. if(this.type == 'checkbox'){
  570. if(this.checked){
  571. field_data['"' + tmp + '"']= this.value;
  572. }
  573. }else{
  574. field_data['"' + tmp + '"']= this.value;
  575. }
  576. })
  577. var fav_name = prompt( ninja_forms_settings.add_fav_prompt, '' );
  578. if(fav_name.length >= 1){
  579. $.post(ajaxurl, { fav_name: fav_name, field_data: field_data, field_id: field_id, action:"ninja_forms_add_fav", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  580. //document.write(response);
  581. $("#ninja_forms_field_" + field_id + "_fav").removeClass("ninja-forms-field-add-fav");
  582. $("#ninja_forms_field_" + field_id + "_fav").addClass("ninja-forms-field-remove-fav");
  583. $("#ninja_forms_sidebar_fav_fields").append(response.link_html);
  584. $("#ninja_forms_field_" + field_id + "_title").nextElementInDom('.item-type-name:first').prop("innerHTML", response.fav_name);
  585. $("#ninja_forms_field_" + field_id + "_fav_id").val(response.fav_id);
  586. });
  587. }else{
  588. var answer = confirm( ninja_forms_settings.add_fav_error );
  589. if(answer){
  590. $("#" + this_id).click();
  591. }
  592. }
  593. });
  594. //Remove a field from the user's favorites list
  595. $(document).on( 'click', '.ninja-forms-field-remove-fav', function(event){
  596. event.preventDefault();
  597. var field_id = this.id.replace("ninja_forms_field_", "");
  598. field_id = field_id.replace("_fav", "");
  599. $.post(ajaxurl, { field_id: field_id, action:"ninja_forms_remove_fav", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  600. $("#ninja_forms_insert_fav_field_" + response.fav_id + "_p").remove();
  601. $(".ninja-forms-field-fav-id").each(function(){
  602. if(this.value == response.fav_id){
  603. var remove_id = this.id.replace("ninja_forms_field_", "");
  604. remove_id = remove_id.replace("_fav_id", "");
  605. $("#ninja_forms_field_" + remove_id + "_fav").removeClass("ninja-forms-field-remove-fav");
  606. $("#ninja_forms_field_" + remove_id + "_fav").addClass("ninja-forms-field-add-fav");
  607. $("#ninja_forms_field_" + remove_id + "_title").nextElementInDom('.item-type-name:first').prop("innerHTML", response.type_name);
  608. }
  609. });
  610. });
  611. });
  612. /* * * End Favorite Fields JS * * */
  613. /* * * Defined Fields JS * * */
  614. //Add Field to the Defined Fields List
  615. $(document).on( 'click', '.ninja-forms-field-add-def', function(event){
  616. event.preventDefault();
  617. var field_id = this.id.replace("ninja_forms_field_", "");
  618. field_id = field_id.replace("_def", "");
  619. var field_data = new Object();
  620. var this_id = this.id;
  621. $("[name*='ninja_forms_field_" + field_id + "']").each(function(){
  622. tmp = this.name.replace("ninja_forms_field_" + field_id + "[", "");
  623. tmp = tmp.replace("]", "");
  624. if(this.type == 'checkbox'){
  625. if(this.checked){
  626. field_data['"' + tmp + '"']= this.value;
  627. }
  628. }else{
  629. field_data['"' + tmp + '"']= this.value;
  630. }
  631. })
  632. var def_name = prompt("What would you like to name this Defined Field?", "");
  633. if(def_name.length >= 1){
  634. $.post(ajaxurl, { def_name: def_name, field_data: field_data, field_id: field_id, action:"ninja_forms_add_def", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce }, function(response){
  635. $("#ninja_forms_sidebar_def_fields").append(response.link_html);
  636. $("#ninja_forms_field_" + field_id + "_title").nextElementInDom('.item-type:first').prop("innerHTML", response.def_name);
  637. $("#ninja_forms_field_" + field_id + "_def_id").val(response.def_id);
  638. });
  639. }else{
  640. var answer = confirm('You must supply a name for this Defined Field.');
  641. if(answer){
  642. $("#" + this_id).click();
  643. }
  644. }
  645. });
  646. //Remove a field from the defined fields list
  647. $(document).on( 'click', '.ninja-forms-field-remove-def', function(event){
  648. event.preventDefault();
  649. var field_id = this.id.replace("ninja_forms_field_", "");
  650. field_id = field_id.replace("_def", "");
  651. $.post(ajaxurl, { field_id: field_id, action:"ninja_forms_remove_def", nf_ajax_nonce:ninja_forms_settings.nf_ajax_nonce}, function(response){
  652. $("#ninja_forms_insert_def_field_" + response.def_id + "_p").remove();
  653. });
  654. });
  655. /* * * End Defined Fields JS * * */
  656. $( document ).on( 'click', '#nf_deactivate_all_licenses', function( e ) {
  657. var answer = confirm( ninja_forms_settings.deactivate_all_licenses_confirm );
  658. if ( ! answer ) {
  659. return false;
  660. }
  661. } );
  662. $( '.nf-delete-on-uninstall-prompt' ).nfAdminModal( { title: nf_nuke_title, buttons: '.nf-delete-on-uninstall-prompt-buttons' } );
  663. $( document ).on( 'click', '#delete_on_uninstall', function( e ) {
  664. if ( this.checked ) {
  665. this.checked = false;
  666. $( '.nf-delete-on-uninstall-prompt' ).nfAdminModal( 'open' );
  667. }
  668. } );
  669. $( document ).on( 'click', '.nf-delete-on-uninstall-yes', function( e ) {
  670. e.preventDefault();
  671. $( "#delete_on_uninstall" ).attr( 'checked', true );
  672. $( '.nf-delete-on-uninstall-prompt' ).nfAdminModal( 'close' );
  673. } );
  674. // JS for resetting form conversion
  675. $( '#nf-conversion-reset' ).nfAdminModal( { title: nf_conversion_title, buttons: '#nf-conversion-reset-buttons' } );
  676. $( document ).on( 'click', '.nf-reset-form-conversion', function( e ) {
  677. e.preventDefault();
  678. $( '#nf-conversion-reset' ).nfAdminModal( 'open' );
  679. } );
  680. }); //Document.ready();
  681. function ninja_forms_escape_html(html) {
  682. var escape = document.createElement('textarea');
  683. escape.innerHTML = html;
  684. return escape.innerHTML;
  685. }