simple-job-board-admin.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. /**
  2. * Simple Job Board Admin Core JS File - V 1.3.0
  3. *
  4. * @author PressTigers <support@presstigers.com>, 2016
  5. *
  6. * Actions List
  7. * - Settings' Tabs Toggle Callbacks
  8. * - Setting & Meta boxes "Job Features" and "Application Form Builder" Callbacks
  9. * - Color Picker Callback
  10. * - Settings & Meta Boxes' Fields Sorting Callback
  11. * - Upload Company Logo Callbacks
  12. * - Settings & Meta Boxes' Labels Editing Callback
  13. *
  14. * @since 1.0.0
  15. * @since 1.3.0 Added "Applicant Column Name" in SJB Form Builder
  16. */
  17. (function ($) {
  18. 'use strict';
  19. $(function () {
  20. var rx_pP = "[\\x21-\\x23\\x25-\\x2A\\x2C-\\x2F\\x3A\\x3B\\x3F\\x40\\x5B-\\x5D\\x5F\\x7B\\x7D\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E44\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]";
  21. var rx_pS = "[\\x24\\x2B\\x3C-\\x3E\\x5E\\x60\\x7C\\x7E\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BE\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u23FE\\u2400-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B98-\\u2BB9\\u2BBD-\\u2BC8\\u2BCA-\\u2BD1\\u2BEC-\\u2BEF\\u2CE5-\\u2CEA\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u32FE\\u3300-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9B\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD83B[\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD10-\\uDD2E\\uDD30-\\uDD6B\\uDD70-\\uDDAC\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED2\\uDEE0-\\uDEEC\\uDEF0-\\uDEF6\\uDF00-\\uDF73\\uDF80-\\uDFD4]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDD10-\\uDD1E\\uDD20-\\uDD27\\uDD30\\uDD33-\\uDD3E\\uDD40-\\uDD4B\\uDD50-\\uDD5E\\uDD80-\\uDD91\\uDDC0]";
  22. /* Setting Page -> Tab Menu */
  23. $('.nav-tab-wrapper a').on("click", function (e) {
  24. var id = $(e.target).attr("href").substr(1);
  25. window.location.hash = id;
  26. $('.sjb-admin-settings').hide();
  27. $('.nav-tab-active').removeClass('nav-tab-active');
  28. $($(this).attr('href')).show();
  29. $(this).addClass('nav-tab-active');
  30. return false;
  31. });
  32. /* Display Settings Tabs Previous State on Form Submit */
  33. if (window.location.hash.length > 0) {
  34. $('.sjb-admin-settings').hide();
  35. $('.nav-tab-active').removeClass('nav-tab-active');
  36. $(window.location.hash).show();
  37. $('a[href="' + window.location.hash + '"]').addClass('nav-tab-active');
  38. }
  39. var feature_form = $("#job_feature_form");
  40. var jobapp_form = $("#job_app_form");
  41. /* Setting Page -> Job Feature Settings */
  42. $('#settings_addFeature').on("click", function () {
  43. // Regular expression for all languages' characters
  44. var rgx_exp = new RegExp( rx_pP + "|" + rx_pS, "g" );
  45. var field_name_raw = $('#settings_jobfeature_name').val(); // Get Raw value.
  46. var job_feature_value = $('#settings_jobfeature_value').val(); //Job Feature value
  47. field_name_raw = field_name_raw.trim(); // Remove White Spaces from both ends.
  48. var fieldName = field_name_raw.split(' ').join('_').toLowerCase().replace(rgx_exp, "_"); //Replace white space with _ & sanitize key.
  49. if (fieldName != '') {
  50. var jobfeature_value_textbox;
  51. if ('' == job_feature_value) {
  52. jobfeature_value_textbox = '<input type="hidden" value="empty" name="jobfeature_' + fieldName + '[value]">';
  53. } else {
  54. jobfeature_value_textbox = '<input type="text" value="' + job_feature_value + '" name="jobfeature_' + fieldName + '[value]">';
  55. }
  56. $('#settings_job_features').append('<li class="jobfeature_' + fieldName + '"><label class="sjb-editable-label">' + application_form.settings_jquery_alerts['field_name'] + ': ' + field_name_raw + '</label>\n\
  57. <input type="hidden" name="jobfeature_' + fieldName + '[label]" value="' + field_name_raw + '">\n\
  58. ' + jobfeature_value_textbox + ' &nbsp;\n\
  59. <div class="button removeField" >' + application_form.settings_jquery_alerts['delete'] + '</div></li>');
  60. $('#settings_jobfeature_name').val(""); //Reset Field value.
  61. $('#settings_jobfeature_value').val(""); //Reset Field value.
  62. } else {
  63. /* Empty Job Feature Alert -> Making Translation Ready String Through Script Locaization */
  64. alert(application_form.settings_jquery_alerts['empty_feature_name']);
  65. $('#settings_jobfeature_name').focus(); //Keep focus on this input
  66. }
  67. });
  68. /* Remove Job App or Job Feature Fields */
  69. $('.settings-fields').on('click', 'li .removeField', function () {
  70. if ('col-lg-5 col-md-5' === $(this).parent()[0]['className']) {
  71. $(this).parent().parent('li').remove(); // remove HTML
  72. } else {
  73. $(this).parent('li').remove(); // remove HTML
  74. }
  75. });
  76. /* On Click Save button */
  77. $('#jobfeature_form').on('click', function () {
  78. feature_form.submit();
  79. });
  80. /* Setting Page -> Job Application Form Fields */
  81. $('#app_add_field').on("click", function () {
  82. // Regular expression for all languages' characters
  83. var rgx_exp = new RegExp( rx_pP + "|" + rx_pS, "g" );
  84. var app_field_raw = $('#setting_jobapp_name').val(); // Get Raw value.
  85. var app_field_raw = app_field_raw.trim(); // Remove White Spaces from both ends.
  86. var app_field_name = app_field_raw.split(' ').join('_').toLowerCase().replace( rgx_exp, "_"); //Replace white space with _.
  87. var app_field_type = $('#settings-jobapp-field-types').val();
  88. var field_options = $('#settings_jobapp_field_options');
  89. var fieldOptions = field_options.val();
  90. var isRequired = $("#settings-jobapp-required-field").attr("checked") ? "checked" : "unchecked";
  91. var applicantColumns = $("#settings-jobapp-applicant-columns").attr("checked") ? "checked" : "unchecked";
  92. var fieldTypeHtml = $('#settings-jobapp-field-types').html();
  93. if (app_field_name != '') {
  94. // Show Options for [Checkbox],[Radio] and [Dropdown]
  95. var application_field_option;
  96. if (!('checkbox' === app_field_type || 'dropdown' === app_field_type || 'radio' === app_field_type)) {
  97. application_field_option = '<input type="text" name="jobapp_' + app_field_name + '[option]" value="' + fieldOptions + '" placeholder="Option1, option2, option3" style="display:none;">';
  98. } else {
  99. application_field_option = '<input type="text" name="jobapp_' + app_field_name + '[option]" value="' + fieldOptions + '" placeholder="Option1, option2, option3">';
  100. }
  101. $('#settings_app_form_fields').append('<li class="jobapp_' + app_field_name + '">\n\
  102. <div class="col-lg-2 col-md-2"><label>' + app_field_raw + '</label>\n\
  103. <input type="hidden" name="jobapp_' + app_field_name + '[label]" value="' + app_field_raw + '">\n\
  104. </div>\n\
  105. <div class="col-lg-2 col-md-2">\n\
  106. <select class="settings_jobapp_field_type" name="jobapp_' + app_field_name + '[type]" >\n\
  107. ' + fieldTypeHtml +
  108. '</select>\n\
  109. ' + application_field_option + ' \n\
  110. </div>\n\
  111. <div class="col-lg-5 col-md-5">\n\
  112. <label>\n\
  113. <input type="checkbox" class="settings-jobapp-required-field" ' + isRequired + '>\n\
  114. <input type="hidden" name="jobapp_' + app_field_name + '[optional]" value="' + isRequired + '">' + application_form.settings_jquery_alerts['required'] + '&nbsp;\n\
  115. </label>\n\
  116. &nbsp;<div class="button removeField">' + application_form.settings_jquery_alerts['delete'] + '</div>&nbsp;\n\
  117. <label>\n\
  118. <input type="radio" class="settings-applicant-columns" name="[applicant_column]" ' + applicantColumns + '>' + application_form.settings_jquery_alerts['applicant_listing_col'] + '\n\
  119. <input type="hidden" class="settings-jobapp-applicant-column" name="jobapp_' + app_field_name + '[applicant_column]" value="' + applicantColumns + '">\n\
  120. </label>\n\
  121. </div></li>');
  122. $('.jobapp_' + app_field_name + ' .' + app_field_type).attr('selected', 'selected');
  123. $('#setting_jobapp_name').val('');
  124. field_options.hide();
  125. field_options.val('');
  126. $('#settings-jobapp-field-types').val('text');
  127. $('#settings_jobapp_required_field').prop('checked', true);
  128. } else {
  129. /* Empty Form Field Name Alert -> Making Translation Ready String Through Script Locaization */
  130. alert(application_form.settings_jquery_alerts['empty_field_name']);
  131. $('#setting_jobapp_name').focus(); //Keep focus on this input
  132. }
  133. });
  134. // Settings Field Types on Change
  135. $('#settings_app_form_fields').on('change', 'li .settings_jobapp_field_type', function () {
  136. var fieldType = $(this).val();
  137. if ('checkbox' == fieldType || 'dropdown' == fieldType || 'radio' == fieldType) {
  138. $(this).next().show();
  139. } else {
  140. $(this).next().hide();
  141. $(this).next().val('');
  142. }
  143. });
  144. // Field Types on Change
  145. $('#settings-jobapp-field-types').on('change', function () {
  146. var fieldType = $(this).val();
  147. if ('checkbox' == fieldType || 'dropdown' == fieldType || 'radio' == fieldType) {
  148. $(this).next().show();
  149. } else {
  150. $(this).next().hide();
  151. $(this).next().val('');
  152. }
  153. });
  154. /* Change the Required & Optional Field Parameter */
  155. $('#settings_app_form_fields').on("change", '.settings-jobapp-required-field', function () {
  156. var input = $(this);
  157. input.attr("checked") ? input.next().val("checked") : input.next().val("unchecked");
  158. });
  159. /* Change the Radio Button Check */
  160. $('#settings_app_form_fields').on("change", 'li .settings-applicant-columns', function () {
  161. $(".settings-applicant-columns").each(function () {
  162. var input = $(this);
  163. input.attr("checked") ? input.next().val("checked") : input.next().val("unchecked");
  164. });
  165. });
  166. /* Job Application Form Submission */
  167. $('#jobapp_btn').on('click', function () {
  168. jobapp_form.submit();
  169. });
  170. /**
  171. * Meta Boxes JS
  172. */
  173. /*Job Application Field Type change*/
  174. $('#jobapp_field_type').on('change', function (e) {
  175. var fieldType = $(this).val();
  176. if (fieldType == 'checkbox' || fieldType == 'dropdown' || fieldType == 'radio') {
  177. $('#jobapp_field_options').show();
  178. } else {
  179. $('#jobapp_field_options').hide();
  180. $('#jobapp_field_options').val('');
  181. }
  182. });
  183. /*Add Application Field (Group Fields)*/
  184. $('#addField').on("click", function (e) {
  185. // Regex Experession for all language characters
  186. var rgx_exp = new RegExp( rx_pP + "|" + rx_pS, "g" );
  187. var fieldNameRaw = $('#jobapp_name').val(); // Get Raw value.
  188. var fieldNameRaw = fieldNameRaw.trim(); // Remove White Spaces from both ends.
  189. var fieldName = fieldNameRaw.split(' ').join('_').toLowerCase().replace( rgx_exp, "_" ); //Replace white space with _.
  190. var fieldType = $('#jobapp_field_type').val();
  191. var fieldOptions = $('#jobapp_field_options').val();
  192. var fieldRequired = $("#jobapp_required_field").attr("checked") ? "checked" : "unchecked";
  193. var applicantColumns = $("#jobapp-applicant-columns").attr("checked") ? "checked" : "unchecked";
  194. var fieldTypeHtml = $('#jobapp_field_type').html();
  195. if (fieldName != '') {
  196. if (!(fieldType == 'checkbox' || fieldType == 'dropdown' || fieldType == 'radio')) {
  197. $('#app_form_fields').append('<li class="' + fieldName + '"><label>' + fieldNameRaw + '</label>\n\
  198. <input type="hidden" name="jobapp_' + fieldName + '[label]" value="' + fieldNameRaw + '">\n\
  199. <select class="jobapp_field_type" name="jobapp_' + fieldName + '[type]">' + fieldTypeHtml + '</select>\n\
  200. <input type="text" class="' + fieldName + ' jobapp_field_options" name="jobapp_' + fieldName + '[options]" value="' + fieldOptions + '" placeholder="Option1, option2, option3" style="display:none;">\n\
  201. <input type="checkbox" class="jobapp-required-field" ' + fieldRequired + '>\n\
  202. <input type="hidden" name="jobapp_' + fieldName + '[optional]" value="' + fieldRequired + '">' + application_form.settings_jquery_alerts['required'] + '&nbsp; \n\
  203. <div class="button removeField">' + application_form.settings_jquery_alerts['delete'] + '</div>\n\
  204. <input type="radio" class="applicant-columns" name="[applicant_column]" ' + applicantColumns + '>' + application_form.settings_jquery_alerts['applicant_listing_col'] + '\n\
  205. <input type="hidden" class="jobapp-applicant-column" name="jobapp_' + fieldName + '[applicant_column]" value="' + applicantColumns + '">\n\
  206. </li>');
  207. $('.' + fieldName + ' .' + fieldType).attr('selected', 'selected');
  208. $('#jobapp_name').val('');
  209. $('#jobapp_field_type').val('text');
  210. $('#jobapp_required_field').prop("checked", true);
  211. $('#jobapp-applicant-columns').prop("checked", false);
  212. } else {
  213. $('#app_form_fields').append('<li class="' + fieldName + '"><label>' + fieldNameRaw + '</label>\n\
  214. <input type="hidden" name="jobapp_' + fieldName + '[label]" value="' + fieldNameRaw + '">\n\
  215. <select class="jobapp_field_type" name="jobapp_' + fieldName + '[type]">' + fieldTypeHtml + '</select>\n\
  216. <input type="text" class="' + fieldName + ' jobapp_field_options" name="jobapp_' + fieldName + '[options]" value="' + fieldOptions + '">\n\
  217. <input type="checkbox" class="jobapp-required-field" ' + fieldRequired + ' >\n\
  218. <input type="hidden" name="jobapp_' + fieldName + '[optional]" value="' + fieldRequired + '">' + application_form.settings_jquery_alerts['required'] + ' &nbsp;\n\
  219. <div class="button removeField">' + application_form.settings_jquery_alerts['delete'] + '</div>\n\
  220. <input type="radio" class="applicant-columns" name="[applicant_column]" ' + applicantColumns + '>' + application_form.settings_jquery_alerts['applicant_listing_col'] + '\n\
  221. <input type="hidden" class="jobapp-applicant-column" name="jobapp_' + fieldName + '[applicant_column]" value="' + applicantColumns + '">\n\</li>');
  222. $('.' + fieldName + ' .' + fieldType).attr('selected', 'selected');
  223. $('#jobapp_name').val('');
  224. $('#jobapp_field_type').val('text');
  225. $('#jobapp_field_options').val('');
  226. $('#jobapp_field_options').hide();
  227. $('#jobapp_required_field').prop("checked", true);
  228. }
  229. } else {
  230. alert(application_form.settings_jquery_alerts['empty_field_name']);
  231. $('#jobapp_name').focus(); //Keep focus on this input
  232. }
  233. });
  234. /* Job Application Field Type change (added) */
  235. $('#app_form_fields').on('change', 'li .jobapp_field_type', function () {
  236. var fieldType = $(this).val();
  237. if (fieldType == 'checkbox' || fieldType == 'dropdown' || fieldType == 'radio') {
  238. $(this).next().show();
  239. } else {
  240. $(this).next().hide();
  241. }
  242. });
  243. /* Change the Required & Optional Field Parameter*/
  244. $('#app_form_fields').on("change", 'li .jobapp-required-field', function () {
  245. var input = $(this);
  246. input.attr("checked") ? input.next().val("checked") : input.next().val("unchecked");
  247. });
  248. /* Change the Radio Button Check */
  249. $('#app_form_fields').on("change", 'li .applicant-columns', function () {
  250. $(".applicant-columns").each(function () {
  251. var input = $(this);
  252. input.attr("checked") ? input.next().val("checked") : input.next().val("unchecked");
  253. });
  254. });
  255. // Add Job Feature
  256. $('#addFeature').click(function () {
  257. // Regex Experession for all language characters
  258. var rgx_exp = new RegExp( rx_pP + "|" + rx_pS, "g" );
  259. var fieldNameRaw = $('#jobfeature_name').val(); // Get Raw value.
  260. var fieldNameRaw = fieldNameRaw.trim(); // Remove White Spaces from both ends.
  261. var fieldName = fieldNameRaw.split(' ').join('_').toLowerCase().replace( rgx_exp, "_" ); //Replace white space with _.
  262. var fieldVal = $('#jobfeature_value').val();
  263. var fieldVal = fieldVal.trim();
  264. if (fieldName != '' && fieldVal != '') {
  265. $('#job_features').append('<li class="' + fieldName + '"><label class="sjb-editable-label">' + fieldNameRaw + '</label><input type="hidden" name="jobfeature_' + fieldName + '[label]" value="' + fieldNameRaw + '"><input type="text" name="jobfeature_' + fieldName + '[value]" value="' + fieldVal + '" > &nbsp; <div class="button removeField">' + application_form.settings_jquery_alerts['delete'] + '</div></li>');
  266. $('#jobfeature_name').val(""); // Reset Field value
  267. $('#jobfeature_value').val(""); // Reset Field value
  268. } else {
  269. alert(application_form.settings_jquery_alerts['empty_feature_name']);
  270. $('#jobfeature_name').focus(); // Keep focus on this input
  271. }
  272. });
  273. // Remove Job app or job Feature Fields
  274. $('.jobpost_fields').on('click', 'li .removeField', function () {
  275. $(this).parent('li').remove();
  276. });
  277. /* Add Color Picker to all inputs that have 'sjb-color-picker' class */
  278. $('.sjb-color-picker').wpColorPicker();
  279. /* Sortable Fields */
  280. if ($('#settings_job_features , #settings_app_form_fields , #job_features , #app_form_fields').length) {
  281. $("#settings_job_features , #settings_app_form_fields , #job_features , #app_form_fields").sortable();
  282. }
  283. // Upload logo & show url in textbox
  284. if ($('.simple-job-board-upload-button').length) {
  285. window.simple_job_board_uploadfield = '';
  286. // On upload button click -> Show media upload ifram.
  287. $('.simple-job-board-upload-button').live('click', function () {
  288. window.simple_job_board_uploadfield = $('.upload_field', $(this).parents('.file_url'));
  289. tb_show('Upload', 'media-upload.php?type=image&TB_iframe=true', false);
  290. return false;
  291. });
  292. // Show uploaded logo url in textbox
  293. window.simple_job_board_send_to_editor_backup = window.send_to_editor;
  294. window.send_to_editor = function (html) {
  295. if (window.simple_job_board_uploadfield) {
  296. if ($('img', html).length >= 1) {
  297. var image_url = $('img', html).attr('src');
  298. } else {
  299. var image_url = $($(html)[0]).attr('src');
  300. }
  301. $(window.simple_job_board_uploadfield).val(image_url);
  302. window.simple_job_board_uploadfield = '';
  303. tb_remove();
  304. } else {
  305. window.simple_job_board_send_to_editor_backup(html);
  306. }
  307. }
  308. }
  309. // Edit Form Builder Labels with class 'sjb-editable-label'
  310. $(".sjb-editable-label").each(function () {
  311. // Regex Experession for all language characters
  312. var rgx_exp = new RegExp( rx_pP + "|" + rx_pS, "g" );
  313. // Reference the Label.
  314. var label = $(this);
  315. // Add a TextBox next to the Label.
  316. label.after('<input type = "text" style = "display:none;">');
  317. // Reference the TextBox.
  318. var textbox = label.next();
  319. // Assign the value of Label to TextBox.
  320. textbox.val(label.html());
  321. // On label click
  322. label.click(function () {
  323. label.hide();
  324. textbox.show();
  325. textbox.focus();
  326. });
  327. // When focus is lost from TextBox, hide TextBox and show Label.
  328. textbox.focusout(function () {
  329. // Get current & parent elements of label
  330. var label = $(this);
  331. label.hide();
  332. label.prev().html(label.val());
  333. label.next().val(label.val());
  334. // Key generator for keys
  335. var key = label.val().trim(); // Remove White Spaces from both ends.
  336. var key = key.split(' ').join('_').toLowerCase().replace( rgx_exp, "_"); //Replace white space with _.
  337. if ('app_form_fields' === label.parents(':eq(1)').attr('id')) {
  338. var element_class = label.parent().attr('class').split(' ')[0];
  339. var element = $('.' + element_class);
  340. // Update indexes of all fields
  341. label.next().attr('name', 'jobapp_' + key + '[label]');
  342. element.find(".jobapp_field_type").attr('name', 'jobapp_' + key + '[type]');
  343. element.find(".jobapp-field-options").attr('name', 'jobapp_' + key + '[options]');
  344. element.find(".jobapp-optional-field").attr('name', 'jobapp_' + key + '[optional]');
  345. element.find(".jobapp-applicant-column").attr('name', 'jobapp_' + key + '[applicant_column]');
  346. $('.' + element_class).removeClass(element_class).addClass('jobapp_' + key);
  347. } else if ('settings_app_form_fields' === label.parents(':eq(2)').attr('id')) {
  348. var element_class = label.parents(':eq(1)').attr('class').split(' ')[0];
  349. var element = $('.' + element_class);
  350. // Update indexes of all fields
  351. label.next().attr('name', 'jobapp_' + key + '[label]');
  352. element.find(".settings_jobapp_field_type").attr('name', 'jobapp_' + key + '[type]');
  353. element.find(".settings-field-options").attr('name', 'jobapp_' + key + '[option]');
  354. element.find(".settings-jobapp-optional-field").attr('name', 'jobapp_' + key + '[optional]');
  355. element.find(".settings-jobapp-applicant-column").attr('name', 'jobapp_' + key + '[applicant_column]');
  356. $('.' + element_class).removeClass(element_class).addClass('jobapp_' + key);
  357. } else {
  358. // Update indexes of all fields
  359. label.next().attr('name', 'jobfeature_' + key + '[label]');
  360. label.next().next().attr('name', 'jobfeature_' + key + '[value]');
  361. }
  362. label.prev().show();
  363. });
  364. });
  365. });
  366. })(jQuery);