/wp-content/plugins/contact-form-7/admin/js/tag-generator.js

https://bitbucket.org/joelkriteman/argento · JavaScript · 241 lines · 206 code · 35 blank · 0 comment · 32 complexity · 806b8425920abb5246d86f85b747293c MD5 · raw file

  1. (function($) {
  2. if (typeof _wpcf7 == 'undefined' || _wpcf7 === null) {
  3. _wpcf7 = {};
  4. }
  5. _wpcf7.taggen = {};
  6. $(function() {
  7. $('form.tag-generator-panel').each(function() {
  8. _wpcf7.taggen.update($(this));
  9. });
  10. });
  11. $('form.tag-generator-panel').submit(function(event) {
  12. return false;
  13. });
  14. $('form.tag-generator-panel .control-box :input').change(function(event) {
  15. var form = $(this).closest('form.tag-generator-panel');
  16. _wpcf7.taggen.normalize($(this));
  17. _wpcf7.taggen.update(form);
  18. });
  19. $('input.insert-tag').click(function(event) {
  20. var form = $(this).closest('form.tag-generator-panel');
  21. var tag = form.find('input.tag').val();
  22. _wpcf7.taggen.insert(tag);
  23. tb_remove(); // close thickbox
  24. return false;
  25. });
  26. _wpcf7.taggen.update = function($form) {
  27. var id = $form.attr('data-id');
  28. var name = '';
  29. var name_fields = $form.find('input[name="name"]');
  30. if (name_fields.length) {
  31. name = name_fields.val();
  32. if ('' == name) {
  33. name = id + '-' + Math.floor(Math.random() * 1000);
  34. name_fields.val(name);
  35. }
  36. }
  37. if ($.isFunction(_wpcf7.taggen.update[id])) {
  38. return _wpcf7.taggen.update[id].call(this, $form);
  39. }
  40. $form.find('input.tag').each(function() {
  41. var tag_type = $(this).attr('name');
  42. if ($form.find(':input[name="tagtype"]').length) {
  43. tag_type = $form.find(':input[name="tagtype"]').val();
  44. }
  45. if ($form.find(':input[name="required"]').is(':checked')) {
  46. tag_type += '*';
  47. }
  48. components = _wpcf7.taggen.compose(tag_type, $form);
  49. $(this).val(components);
  50. });
  51. $form.find('span.mail-tag').text('[' + name + ']');
  52. $form.find('input.mail-tag').each(function() {
  53. $(this).val('[' + name + ']');
  54. });
  55. };
  56. _wpcf7.taggen.update.captcha = function($form) {
  57. var captchac = _wpcf7.taggen.compose('captchac', $form);
  58. var captchar = _wpcf7.taggen.compose('captchar', $form);
  59. $form.find('input.tag').val(captchac + ' ' + captchar);
  60. };
  61. _wpcf7.taggen.compose = function(tagType, $form) {
  62. var name = $form.find('input[name="name"]').val();
  63. var scope = $form.find('.scope.' + tagType);
  64. if (! scope.length) {
  65. scope = $form;
  66. }
  67. var options = [];
  68. var size = scope.find(':input[name="size"]').val() || '';
  69. var maxlength = scope.find(':input[name="maxlength"]').val() || '';
  70. var cols = scope.find(':input[name="cols"]').val() || '';
  71. var rows = scope.find(':input[name="rows"]').val() || '';
  72. if ((cols || rows) && maxlength) {
  73. options.push(cols + 'x' + rows + '/' + maxlength);
  74. } else if (cols || rows) {
  75. options.push(cols + 'x' + rows);
  76. } else if (size || maxlength) {
  77. options.push(size + '/' + maxlength);
  78. }
  79. scope.find('input.option').not(':checkbox,:radio').each(function(i) {
  80. var excluded = ['size', 'maxlength', 'cols', 'rows'];
  81. if (-1 < $.inArray($(this).attr('name'), excluded)) {
  82. return;
  83. }
  84. var val = $(this).val();
  85. if (! val) {
  86. return;
  87. }
  88. if ($(this).hasClass('filetype')) {
  89. val = val.split(/[,|\s]+/).join('|');
  90. }
  91. if ($(this).hasClass('color')) {
  92. val = '#' + val;
  93. }
  94. if ('class' == $(this).attr('name')) {
  95. $.each(val.split(' '), function(i, n) { options.push('class:' + n) });
  96. } else {
  97. options.push($(this).attr('name') + ':' + val);
  98. }
  99. });
  100. scope.find('input:checkbox.option').each(function(i) {
  101. if ($(this).is(':checked')) {
  102. options.push($(this).attr('name'));
  103. }
  104. });
  105. options = (options.length > 0) ? options.join(' ') : '';
  106. var value = '';
  107. if (scope.find(':input[name="values"]').val()) {
  108. $.each(scope.find(':input[name="values"]').val().split("\n"), function(i, n) {
  109. value += ' "' + n.replace(/["]/g, '&quot;') + '"';
  110. });
  111. }
  112. var components = [];
  113. $.each([tagType, name, options, value], function(i, v) {
  114. v = $.trim(v);
  115. if ('' != v) {
  116. components.push(v);
  117. }
  118. });
  119. components = $.trim(components.join(' '));
  120. return '[' + components + ']';
  121. }
  122. _wpcf7.taggen.normalize = function($input) {
  123. var val = $input.val();
  124. if ($input.is('input[name="name"]')) {
  125. val = val.replace(/[^0-9a-zA-Z:._-]/g, '').replace(/^[^a-zA-Z]+/, '');
  126. }
  127. if ($input.is('.numeric')) {
  128. val = val.replace(/[^0-9.-]/g, '');
  129. }
  130. if ($input.is('.idvalue')) {
  131. val = val.replace(/[^-0-9a-zA-Z_]/g, '');
  132. }
  133. if ($input.is('.classvalue')) {
  134. val = $.map(val.split(' '), function(n) {
  135. return n.replace(/[^-0-9a-zA-Z_]/g, '');
  136. }).join(' ');
  137. val = $.trim(val.replace(/\s+/g, ' '));
  138. }
  139. if ($input.is('.color')) {
  140. val = val.replace(/[^0-9a-fA-F]/g, '');
  141. }
  142. if ($input.is('.filesize')) {
  143. val = val.replace(/[^0-9kKmMbB]/g, '');
  144. }
  145. if ($input.is('.filetype')) {
  146. val = val.replace(/[^0-9a-zA-Z.,|\s]/g, '');
  147. }
  148. if ($input.is('.date')) {
  149. if (! val.match(/^\d{4}-\d{2}-\d{2}$/)) { // 'yyyy-mm-dd' ISO 8601 format
  150. val = '';
  151. }
  152. }
  153. if ($input.is(':input[name="values"]')) {
  154. val = $.trim(val);
  155. }
  156. $input.val(val);
  157. if ($input.is(':checkbox.exclusive')) {
  158. _wpcf7.taggen.exclusiveCheckbox($input);
  159. }
  160. }
  161. _wpcf7.taggen.exclusiveCheckbox = function($cb) {
  162. if ($cb.is(':checked')) {
  163. $cb.siblings(':checkbox.exclusive').prop('checked', false);
  164. }
  165. };
  166. _wpcf7.taggen.insert = function(content) {
  167. $('textarea#wpcf7-form').each(function() {
  168. this.focus();
  169. if (document.selection) { // IE
  170. var selection = document.selection.createRange();
  171. selection.text = content;
  172. } else if (this.selectionEnd || 0 === this.selectionEnd) {
  173. var val = $(this).val();
  174. var end = this.selectionEnd;
  175. $(this).val(val.substring(0, end) + content + val.substring(end, val.length));
  176. this.selectionStart = end + content.length;
  177. this.selectionEnd = end + content.length;
  178. } else {
  179. $(this).val($(this).val() + content);
  180. }
  181. this.focus();
  182. });
  183. };
  184. })(jQuery);