webform-admin.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. (function ($) {
  2. /**
  3. * Webform node form interface enhancments.
  4. */
  5. Drupal.behaviors.webformAdmin = {};
  6. Drupal.behaviors.webformAdmin.attach = function(context) {
  7. // Apply special behaviors to fields with default values.
  8. Drupal.webform.defaultValues(context);
  9. // On click or change, make a parent radio button selected.
  10. Drupal.webform.setActive(context);
  11. // Update the template select list upon changing a template.
  12. Drupal.webform.updateTemplate(context);
  13. // Select all link for file extensions.
  14. Drupal.webform.selectCheckboxesLink(context);
  15. // Enhance the normal tableselect.js file to support indentations.
  16. Drupal.webform.tableSelectIndentation(context);
  17. }
  18. Drupal.webform = Drupal.webform || {};
  19. Drupal.webform.defaultValues = function(context) {
  20. var $fields = $('.webform-default-value:not(.error)', context);
  21. var $forms = $fields.parents('form:first');
  22. $fields.each(function() {
  23. this.defaultValue = $(this).attr('rel');
  24. if (this.value != this.defaultValue) {
  25. $(this).removeClass('webform-default-value');
  26. }
  27. $(this).focus(function() {
  28. if (this.value == this.defaultValue) {
  29. this.value = '';
  30. $(this).removeClass('webform-default-value');
  31. }
  32. });
  33. $(this).blur(function() {
  34. if (this.value == '') {
  35. $(this).addClass('webform-default-value');
  36. this.value = this.defaultValue;
  37. }
  38. });
  39. });
  40. // Clear all the form elements before submission.
  41. $forms.submit(function() {
  42. $fields.focus();
  43. });
  44. };
  45. Drupal.webform.setActive = function(context) {
  46. var setActive = function(e) {
  47. $('.form-radio', $(this).parent().parent()).attr('checked', true);
  48. e.preventDefault();
  49. };
  50. $('.webform-set-active', context).click(setActive).change(setActive);
  51. };
  52. Drupal.webform.updateTemplate = function(context) {
  53. var defaultTemplate = $('#edit-templates-default').val();
  54. var $templateSelect = $('#webform-template-fieldset select#edit-template-option', context);
  55. var $templateTextarea = $('#webform-template-fieldset textarea:visible', context);
  56. var updateTemplateSelect = function() {
  57. if ($(this).val() == defaultTemplate) {
  58. $templateSelect.val('default');
  59. }
  60. else {
  61. $templateSelect.val('custom');
  62. }
  63. }
  64. var updateTemplateText = function() {
  65. if ($(this).val() == 'default' && $templateTextarea.val() != defaultTemplate) {
  66. if (confirm(Drupal.settings.webform.revertConfirm)) {
  67. $templateTextarea.val(defaultTemplate);
  68. }
  69. else {
  70. $(this).val('custom');
  71. }
  72. }
  73. }
  74. $templateTextarea.keyup(updateTemplateSelect);
  75. $templateSelect.change(updateTemplateText);
  76. }
  77. Drupal.webform.selectCheckboxesLink = function(context) {
  78. function selectCheckboxes() {
  79. var group = this.className.replace(/.*?webform-select-link-([^ ]*).*/, '$1');
  80. var $checkboxes = $('.webform-select-group-' + group + ' input[type=checkbox]');
  81. var reverseCheck = !$checkboxes[0].checked;
  82. $checkboxes.each(function() {
  83. this.checked = reverseCheck;
  84. });
  85. $checkboxes.trigger('change');
  86. return false;
  87. }
  88. $('a.webform-select-link', context).click(selectCheckboxes);
  89. }
  90. Drupal.webform.tableSelectIndentation = function(context) {
  91. var $tables = $('th.select-all', context).parents('table');
  92. $tables.find('input.form-checkbox').change(function() {
  93. var $rows = $(this).parents('table:first').find('tr');
  94. var row = $(this).parents('tr:first').get(0);
  95. var rowNumber = $rows.index(row);
  96. var rowTotal = $rows.size();
  97. var indentLevel = $(row).find('div.indentation').size();
  98. for (var n = rowNumber + 1; n < rowTotal; n++) {
  99. if ($rows.eq(n).find('div.indentation').size() <= indentLevel) {
  100. break;
  101. }
  102. $rows.eq(n).find('input.form-checkbox').attr('checked', this.checked);
  103. }
  104. });
  105. }
  106. })(jQuery);