Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1. $(function() {
  2. $.fn.serializeObject = function(options) {
  3. options = jQuery.extend({}, options);
  4.  
  5. var self = this,
  6. json = {},
  7. push_counters = {},
  8. patterns = {
  9. "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
  10. "key": /[a-zA-Z0-9_]+|(?=\[\])/g,
  11. "push": /^$/,
  12. "fixed": /^\d+$/,
  13. "named": /^[a-zA-Z0-9_]+$/
  14. };
  15.  
  16.  
  17. this.build = function(base, key, value) {
  18. base[key] = value;
  19. return base;
  20. };
  21.  
  22. this.push_counter = function(key) {
  23. if (push_counters[key] === undefined) {
  24. push_counters[key] = 0;
  25. }
  26.  
  27. return push_counters[key]++;
  28. };
  29.  
  30. jQuery.each(jQuery(this).serializeArray(), function() {
  31. if(!patterns.validate.test(this.name)) {
  32. return;
  33. }
  34.  
  35. var k,
  36. keys = this.name.match(patterns.key),
  37. merge = this.value,
  38. reverse_key = this.name;
  39.  
  40. while ((k = keys.pop()) !== undefined) {
  41. reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
  42.  
  43. if (k.match(patterns.push)) {
  44. merge = self.build([], self.push_counter(reverse_key), merge);
  45. } else if(k.match(patterns.fixed)) {
  46. merge = self.build([], k, merge);
  47. } else if(k.match(patterns.named)) {
  48. merge = self.build({}, k, merge);
  49. }
  50. }
  51.  
  52. json = jQuery.extend(true, json, merge);
  53. });
  54.  
  55. return json;
  56. };
  57.  
  58. $.fn.increment = function (from, to, duration, easing, complete) {
  59. var params = $.speed(duration, easing, complete);
  60.  
  61. return this.each(function(){
  62. var self = this;
  63. params.step = function(now) {
  64. self.innerText = now << 0;
  65. };
  66.  
  67. $({number: from}).animate({number: to}, params);
  68. });
  69. };
  70. });
  71.  
  72. function Form(form, messenger, messages, successCallback) {
  73. var $form = form,
  74. messenger = messenger,
  75. messages = messages,
  76. successCallback = successCallback,
  77. errorBox = '<label class="error">{{ error }}</label>';
  78.  
  79. this.cleanErrors = function() {
  80. $form.find('input').each(function() {
  81. $(this).parent().removeClass('has-error');
  82. });
  83. $('.error').each(function() {
  84. $(this).remove();
  85. });
  86. };
  87.  
  88. this.post = function() {
  89. $.ajax({
  90. context: this,
  91. url: $form.attr('action'),
  92. type: $form.attr('method'),
  93. data: JSON.stringify($form.serializeObject()),
  94. contentType: "application/json; charset=utf-8",
  95. dataType: 'json',
  96. beforeSend: function () {
  97. this.blockSubmitButton();
  98. this.cleanErrors();
  99. messenger.post({
  100. message: messages.beforeSend,
  101. hideAfter: 3,
  102. showCloseButton: true
  103. });
  104. },
  105. success: function (data, status, request) {
  106. messenger.post(messages.success);
  107. $form.find('input').each(function() {
  108. $(this).val('');
  109. });
  110.  
  111. if (request.status == 201
  112. && request.getResponseHeader('Content-Disposition') == 'attachment'
  113. ) {
  114. $.fileDownload(request.getResponseHeader('Location'));
  115. }
  116.  
  117. typeof successCallback === 'function'
  118. ? successCallback(data) : window.location.reload();
  119. },
  120. error: function (data) {
  121. switch (data.status) {
  122. case 500:
  123. messenger.post({
  124. message: messages.error,
  125. type: 'error',
  126. showCloseButton: true
  127. });
  128.  
  129. break;
  130. case 200:
  131. break;
  132. default:
  133. this.renderErrors(data);
  134. }
  135. },
  136. complete: function () {
  137. this.unblockSubmitButton();
  138. }
  139. });
  140. };
  141.  
  142. this.blockSubmitButton = function() {
  143. $form.find('#submit-form').prop('disabled', true);
  144. };
  145.  
  146. this.unblockSubmitButton = function() {
  147. $form.find('#submit-form').prop('disabled', false);
  148. };
  149.  
  150. this.renderErrors = function(data) {
  151. data = data.responseJSON;
  152. messenger.post({ message: data.message, type: 'error', showCloseButton: true });
  153. if (!data.hasOwnProperty('errors')) {
  154. return;
  155. }
  156.  
  157. $.each(data.errors, function (field, error) {
  158. var $parent = '',
  159. fieldAsArray = field.split('.'),
  160. fieldName = fieldAsArray.shift();
  161.  
  162. if (fieldAsArray.length > 0) {
  163. $.each(fieldAsArray, function (key, value) {
  164. fieldName += '[' + value + ']';
  165. })
  166. }
  167.  
  168. $('[name="' + fieldName + '"]').parent().addClass('has-error');
  169.  
  170. $parent = $('[name="' + fieldName + '"]').parent();
  171. $parent.after(errorBox.replace(/{{ error }}/, error));
  172. });
  173. };
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement