tennpipes-init 3.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.rdoc +163 -0
  4. data/Rakefile +1 -0
  5. data/bin/tennpipes-init +16 -0
  6. data/lib/tennpipes-init.rb +73 -0
  7. data/lib/tennpipes-init/command.rb +18 -0
  8. data/lib/tennpipes-init/generators/actions.rb +630 -0
  9. data/lib/tennpipes-init/generators/app.rb +75 -0
  10. data/lib/tennpipes-init/generators/app/app.rb.tt +72 -0
  11. data/lib/tennpipes-init/generators/app/app.rb.tt~ +72 -0
  12. data/lib/tennpipes-init/generators/cli.rb +57 -0
  13. data/lib/tennpipes-init/generators/component.rb +73 -0
  14. data/lib/tennpipes-init/generators/components/actions.rb +208 -0
  15. data/lib/tennpipes-init/generators/components/mocks/mocha.rb +10 -0
  16. data/lib/tennpipes-init/generators/components/mocks/rr.rb +13 -0
  17. data/lib/tennpipes-init/generators/components/orms/activerecord.rb +201 -0
  18. data/lib/tennpipes-init/generators/components/orms/couchrest.rb +55 -0
  19. data/lib/tennpipes-init/generators/components/orms/datamapper.rb +140 -0
  20. data/lib/tennpipes-init/generators/components/orms/dynamoid.rb +67 -0
  21. data/lib/tennpipes-init/generators/components/orms/minirecord.rb +165 -0
  22. data/lib/tennpipes-init/generators/components/orms/mongoid.rb +113 -0
  23. data/lib/tennpipes-init/generators/components/orms/mongomapper.rb +43 -0
  24. data/lib/tennpipes-init/generators/components/orms/mongomatic.rb +84 -0
  25. data/lib/tennpipes-init/generators/components/orms/ohm.rb +65 -0
  26. data/lib/tennpipes-init/generators/components/orms/ripple.rb +75 -0
  27. data/lib/tennpipes-init/generators/components/orms/sequel.rb +99 -0
  28. data/lib/tennpipes-init/generators/components/renderers/erb.rb +3 -0
  29. data/lib/tennpipes-init/generators/components/renderers/haml.rb +3 -0
  30. data/lib/tennpipes-init/generators/components/renderers/liquid.rb +4 -0
  31. data/lib/tennpipes-init/generators/components/renderers/slim.rb +3 -0
  32. data/lib/tennpipes-init/generators/components/scripts/dojo.rb +10 -0
  33. data/lib/tennpipes-init/generators/components/scripts/extcore.rb +10 -0
  34. data/lib/tennpipes-init/generators/components/scripts/jquery.rb +10 -0
  35. data/lib/tennpipes-init/generators/components/scripts/mootools.rb +10 -0
  36. data/lib/tennpipes-init/generators/components/scripts/prototype.rb +12 -0
  37. data/lib/tennpipes-init/generators/components/scripts/rightjs.rb +10 -0
  38. data/lib/tennpipes-init/generators/components/stylesheets/compass.rb +39 -0
  39. data/lib/tennpipes-init/generators/components/stylesheets/compass/application.scss +43 -0
  40. data/lib/tennpipes-init/generators/components/stylesheets/compass/partials/_base.scss +12 -0
  41. data/lib/tennpipes-init/generators/components/stylesheets/less.rb +25 -0
  42. data/lib/tennpipes-init/generators/components/stylesheets/sass.rb +15 -0
  43. data/lib/tennpipes-init/generators/components/stylesheets/scss.rb +16 -0
  44. data/lib/tennpipes-init/generators/components/tests/bacon.rb +103 -0
  45. data/lib/tennpipes-init/generators/components/tests/cucumber.rb +86 -0
  46. data/lib/tennpipes-init/generators/components/tests/minitest.rb +110 -0
  47. data/lib/tennpipes-init/generators/components/tests/riot.rb +117 -0
  48. data/lib/tennpipes-init/generators/components/tests/rspec.rb +111 -0
  49. data/lib/tennpipes-init/generators/components/tests/shoulda.rb +114 -0
  50. data/lib/tennpipes-init/generators/components/tests/steak.rb +114 -0
  51. data/lib/tennpipes-init/generators/controller.rb +77 -0
  52. data/lib/tennpipes-init/generators/helper.rb +50 -0
  53. data/lib/tennpipes-init/generators/mailer.rb +52 -0
  54. data/lib/tennpipes-init/generators/migration.rb +43 -0
  55. data/lib/tennpipes-init/generators/model.rb +113 -0
  56. data/lib/tennpipes-init/generators/plugin.rb +67 -0
  57. data/lib/tennpipes-init/generators/project.rb +160 -0
  58. data/lib/tennpipes-init/generators/project/config.ru +9 -0
  59. data/lib/tennpipes-init/generators/project/config/apps.rb.tt +35 -0
  60. data/lib/tennpipes-init/generators/project/config/boot.rb +49 -0
  61. data/lib/tennpipes-init/generators/project/public/favicon.ico +0 -0
  62. data/lib/tennpipes-init/generators/project/public/images/booking.com.png +0 -0
  63. data/lib/tennpipes-init/generators/project/public/images/causes.png +0 -0
  64. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bg.jpg +0 -0
  65. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.png +0 -0
  66. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.svg +68 -0
  67. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.png +0 -0
  68. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.svg +65 -0
  69. data/lib/tennpipes-init/generators/project/public/images/forever21.png +0 -0
  70. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.eot +0 -0
  71. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.svg +970 -0
  72. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.ttf +0 -0
  73. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.woff +0 -0
  74. data/lib/tennpipes-init/generators/project/public/images/icons/tennpipes-icons.css +598 -0
  75. data/lib/tennpipes-init/generators/project/public/images/image1.jpg +0 -0
  76. data/lib/tennpipes-init/generators/project/public/images/image11.jpg +0 -0
  77. data/lib/tennpipes-init/generators/project/public/images/image2.jpg +0 -0
  78. data/lib/tennpipes-init/generators/project/public/images/image3.jpg +0 -0
  79. data/lib/tennpipes-init/generators/project/public/images/intuit.png +0 -0
  80. data/lib/tennpipes-init/generators/project/public/images/krispykreme.png +0 -0
  81. data/lib/tennpipes-init/generators/project/public/images/placeholders/README.md +302 -0
  82. data/lib/tennpipes-init/generators/project/public/images/placeholders/bower.json +4 -0
  83. data/lib/tennpipes-init/generators/project/public/images/placeholders/composer.json +34 -0
  84. data/lib/tennpipes-init/generators/project/public/images/placeholders/gulpfile.js +92 -0
  85. data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.js +1920 -0
  86. data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.min.js +12 -0
  87. data/lib/tennpipes-init/generators/project/public/images/placeholders/package.json +46 -0
  88. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/holder.js +1411 -0
  89. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/augment.js +27 -0
  90. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/ondomready.js +155 -0
  91. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/polyfills.js +177 -0
  92. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/scenegraph.js +101 -0
  93. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/utils.js +129 -0
  94. data/lib/tennpipes-init/generators/project/public/images/priceline.com.png +0 -0
  95. data/lib/tennpipes-init/generators/project/public/images/stripe.png +0 -0
  96. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes.min.js +6081 -0
  97. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.abide.js +340 -0
  98. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.accordion.js +67 -0
  99. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.alert.js +43 -0
  100. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.clearing.js +556 -0
  101. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.dropdown.js +448 -0
  102. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.equalizer.js +77 -0
  103. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.interchange.js +354 -0
  104. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.joyride.js +932 -0
  105. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.js +703 -0
  106. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.magellan.js +203 -0
  107. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.offcanvas.js +152 -0
  108. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.orbit.js +476 -0
  109. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.reveal.js +471 -0
  110. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.slider.js +263 -0
  111. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tab.js +237 -0
  112. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tooltip.js +307 -0
  113. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.topbar.js +452 -0
  114. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/fastclick.js +8 -0
  115. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.cookie.js +8 -0
  116. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.js +26 -0
  117. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/modernizr.js +8 -0
  118. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/placeholder.js +2 -0
  119. data/lib/tennpipes-init/generators/project/public/stylesheets/app.css~ +178 -0
  120. data/lib/tennpipes-init/generators/project/public/stylesheets/app1.css~ +177 -0
  121. data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css +214 -0
  122. data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css~ +214 -0
  123. data/lib/tennpipes-init/generators/project/public/stylesheets/normalize.css +427 -0
  124. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css +6201 -0
  125. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css~ +6201 -0
  126. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.min.css +1 -0
  127. data/lib/tennpipes-init/generators/runner.rb +139 -0
  128. data/lib/tennpipes-init/generators/task.rb +45 -0
  129. data/lib/tennpipes-init/generators/templates/Gemfile.tt +32 -0
  130. data/lib/tennpipes-init/generators/templates/Rakefile.tt +8 -0
  131. data/lib/tennpipes-init/generators/templates/controller.rb.tt +22 -0
  132. data/lib/tennpipes-init/generators/templates/gem/README.md.tt +29 -0
  133. data/lib/tennpipes-init/generators/templates/gem/gemspec.tt +19 -0
  134. data/lib/tennpipes-init/generators/templates/gem/lib/libname.tt +6 -0
  135. data/lib/tennpipes-init/generators/templates/gem/lib/libname/version.tt +3 -0
  136. data/lib/tennpipes-init/generators/templates/helper.rb.tt +13 -0
  137. data/lib/tennpipes-init/generators/templates/initializer.rb.tt +5 -0
  138. data/lib/tennpipes-init/generators/templates/mailer.rb.tt +54 -0
  139. data/lib/tennpipes-init/generators/templates/project_bin.tt +14 -0
  140. data/lib/tennpipes-init/generators/templates/task.rb.tt +7 -0
  141. data/lib/tennpipes-init/tennpipes-tasks/activerecord.rb +377 -0
  142. data/lib/tennpipes-init/tennpipes-tasks/database.rb +12 -0
  143. data/lib/tennpipes-init/tennpipes-tasks/datamapper.rb +94 -0
  144. data/lib/tennpipes-init/tennpipes-tasks/minirecord.rb +19 -0
  145. data/lib/tennpipes-init/tennpipes-tasks/mongoid.rb +215 -0
  146. data/lib/tennpipes-init/tennpipes-tasks/mongomapper.rb +55 -0
  147. data/lib/tennpipes-init/tennpipes-tasks/sequel.rb +85 -0
  148. data/lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb +72 -0
  149. data/test/fixtures/admin_template.rb +7 -0
  150. data/test/fixtures/example_template.rb +15 -0
  151. data/test/fixtures/git_template.rb +4 -0
  152. data/test/fixtures/plugin_template.rb +13 -0
  153. data/test/fixtures/rake_template.rb +9 -0
  154. data/test/helper.rb +103 -0
  155. data/test/test_app_generator.rb +142 -0
  156. data/test/test_cli.rb +27 -0
  157. data/test/test_component_generator.rb +98 -0
  158. data/test/test_controller_generator.rb +272 -0
  159. data/test/test_generator.rb +13 -0
  160. data/test/test_helper_generator.rb +133 -0
  161. data/test/test_mailer_generator.rb +69 -0
  162. data/test/test_migration_generator.rb +222 -0
  163. data/test/test_model_generator.rb +553 -0
  164. data/test/test_plugin_generator.rb +152 -0
  165. data/test/test_project_generator.rb +757 -0
  166. data/test/test_task_generator.rb +53 -0
  167. metadata +285 -0
@@ -0,0 +1,340 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ Tennpipes.libs.abide = {
5
+ name : 'abide',
6
+
7
+ version : '5.5.1',
8
+
9
+ settings : {
10
+ live_validate : true,
11
+ validate_on_blur : true,
12
+ focus_on_invalid : true,
13
+ error_labels : true, // labels with a for="inputId" will recieve an `error` class
14
+ error_class : 'error',
15
+ timeout : 1000,
16
+ patterns : {
17
+ alpha : /^[a-zA-Z]+$/,
18
+ alpha_numeric : /^[a-zA-Z0-9]+$/,
19
+ integer : /^[-+]?\d+$/,
20
+ number : /^[-+]?\d*(?:[\.\,]\d+)?$/,
21
+
22
+ // amex, visa, diners
23
+ card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,
24
+ cvv : /^([0-9]){3,4}$/,
25
+
26
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
27
+ email : /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,
28
+
29
+ url : /^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/,
30
+ // abc.de
31
+ domain : /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,
32
+
33
+ datetime : /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,
34
+ // YYYY-MM-DD
35
+ date : /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,
36
+ // HH:MM:SS
37
+ time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,
38
+ dateISO : /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,
39
+ // MM/DD/YYYY
40
+ month_day_year : /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,
41
+ // DD/MM/YYYY
42
+ day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,
43
+
44
+ // #FFF or #FFFFFF
45
+ color : /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
46
+ },
47
+ validators : {
48
+ equalTo : function (el, required, parent) {
49
+ var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
50
+ to = el.value,
51
+ valid = (from === to);
52
+
53
+ return valid;
54
+ }
55
+ }
56
+ },
57
+
58
+ timer : null,
59
+
60
+ init : function (scope, method, options) {
61
+ this.bindings(method, options);
62
+ },
63
+
64
+ events : function (scope) {
65
+ var self = this,
66
+ form = self.S(scope).attr('novalidate', 'novalidate'),
67
+ settings = form.data(this.attr_name(true) + '-init') || {};
68
+
69
+ this.invalid_attr = this.add_namespace('data-invalid');
70
+
71
+ form
72
+ .off('.abide')
73
+ .on('submit.fndtn.abide validate.fndtn.abide', function (e) {
74
+ var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name()));
75
+ return self.validate(self.S(this).find('input, textarea, select').get(), e, is_ajax);
76
+ })
77
+ .on('reset', function () {
78
+ return self.reset($(this));
79
+ })
80
+ .find('input, textarea, select')
81
+ .off('.abide')
82
+ .on('blur.fndtn.abide change.fndtn.abide', function (e) {
83
+ if (settings.validate_on_blur === true) {
84
+ self.validate([this], e);
85
+ }
86
+ })
87
+ .on('keydown.fndtn.abide', function (e) {
88
+ if (settings.live_validate === true && e.which != 9) {
89
+ clearTimeout(self.timer);
90
+ self.timer = setTimeout(function () {
91
+ self.validate([this], e);
92
+ }.bind(this), settings.timeout);
93
+ }
94
+ });
95
+ },
96
+
97
+ reset : function (form) {
98
+ form.removeAttr(this.invalid_attr);
99
+ $(this.invalid_attr, form).removeAttr(this.invalid_attr);
100
+ $('.' + this.settings.error_class, form).not('small').removeClass(this.settings.error_class);
101
+ },
102
+
103
+ validate : function (els, e, is_ajax) {
104
+ var validations = this.parse_patterns(els),
105
+ validation_count = validations.length,
106
+ form = this.S(els[0]).closest('form'),
107
+ submit_event = /submit/.test(e.type);
108
+
109
+ // Has to count up to make sure the focus gets applied to the top error
110
+ for (var i = 0; i < validation_count; i++) {
111
+ if (!validations[i] && (submit_event || is_ajax)) {
112
+ if (this.settings.focus_on_invalid) {
113
+ els[i].focus();
114
+ }
115
+ form.trigger('invalid').trigger('invalid.fndtn.abide');
116
+ this.S(els[i]).closest('form').attr(this.invalid_attr, '');
117
+ return false;
118
+ }
119
+ }
120
+
121
+ if (submit_event || is_ajax) {
122
+ form.trigger('valid').trigger('valid.fndtn.abide');
123
+ }
124
+
125
+ form.removeAttr(this.invalid_attr);
126
+
127
+ if (is_ajax) {
128
+ return false;
129
+ }
130
+
131
+ return true;
132
+ },
133
+
134
+ parse_patterns : function (els) {
135
+ var i = els.length,
136
+ el_patterns = [];
137
+
138
+ while (i--) {
139
+ el_patterns.push(this.pattern(els[i]));
140
+ }
141
+
142
+ return this.check_validation_and_apply_styles(el_patterns);
143
+ },
144
+
145
+ pattern : function (el) {
146
+ var type = el.getAttribute('type'),
147
+ required = typeof el.getAttribute('required') === 'string';
148
+
149
+ var pattern = el.getAttribute('pattern') || '';
150
+
151
+ if (this.settings.patterns.hasOwnProperty(pattern) && pattern.length > 0) {
152
+ return [el, this.settings.patterns[pattern], required];
153
+ } else if (pattern.length > 0) {
154
+ return [el, new RegExp(pattern), required];
155
+ }
156
+
157
+ if (this.settings.patterns.hasOwnProperty(type)) {
158
+ return [el, this.settings.patterns[type], required];
159
+ }
160
+
161
+ pattern = /.*/;
162
+
163
+ return [el, pattern, required];
164
+ },
165
+
166
+ // TODO: Break this up into smaller methods, getting hard to read.
167
+ check_validation_and_apply_styles : function (el_patterns) {
168
+ var i = el_patterns.length,
169
+ validations = [],
170
+ form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'),
171
+ settings = form.data(this.attr_name(true) + '-init') || {};
172
+ while (i--) {
173
+ var el = el_patterns[i][0],
174
+ required = el_patterns[i][2],
175
+ value = el.value.trim(),
176
+ direct_parent = this.S(el).parent(),
177
+ validator = el.getAttribute(this.add_namespace('data-abide-validator')),
178
+ is_radio = el.type === 'radio',
179
+ is_checkbox = el.type === 'checkbox',
180
+ label = this.S('label[for="' + el.getAttribute('id') + '"]'),
181
+ valid_length = (required) ? (el.value.length > 0) : true,
182
+ el_validations = [];
183
+
184
+ var parent, valid;
185
+
186
+ // support old way to do equalTo validations
187
+ if (el.getAttribute(this.add_namespace('data-equalto'))) { validator = 'equalTo' }
188
+
189
+ if (!direct_parent.is('label')) {
190
+ parent = direct_parent;
191
+ } else {
192
+ parent = direct_parent.parent();
193
+ }
194
+
195
+ if (validator) {
196
+ valid = this.settings.validators[validator].apply(this, [el, required, parent]);
197
+ el_validations.push(valid);
198
+ }
199
+
200
+ if (is_radio && required) {
201
+ el_validations.push(this.valid_radio(el, required));
202
+ } else if (is_checkbox && required) {
203
+ el_validations.push(this.valid_checkbox(el, required));
204
+ } else {
205
+
206
+ if (el_patterns[i][1].test(value) && valid_length ||
207
+ !required && el.value.length < 1 || $(el).attr('disabled')) {
208
+ el_validations.push(true);
209
+ } else {
210
+ el_validations.push(false);
211
+ }
212
+
213
+ el_validations = [el_validations.every(function (valid) {return valid;})];
214
+
215
+ if (el_validations[0]) {
216
+ this.S(el).removeAttr(this.invalid_attr);
217
+ el.setAttribute('aria-invalid', 'false');
218
+ el.removeAttribute('aria-describedby');
219
+ parent.removeClass(this.settings.error_class);
220
+ if (label.length > 0 && this.settings.error_labels) {
221
+ label.removeClass(this.settings.error_class).removeAttr('role');
222
+ }
223
+ $(el).triggerHandler('valid');
224
+ } else {
225
+ this.S(el).attr(this.invalid_attr, '');
226
+ el.setAttribute('aria-invalid', 'true');
227
+
228
+ // Try to find the error associated with the input
229
+ var errorElem = parent.find('small.' + this.settings.error_class, 'span.' + this.settings.error_class);
230
+ var errorID = errorElem.length > 0 ? errorElem[0].id : '';
231
+ if (errorID.length > 0) {
232
+ el.setAttribute('aria-describedby', errorID);
233
+ }
234
+
235
+ // el.setAttribute('aria-describedby', $(el).find('.error')[0].id);
236
+ parent.addClass(this.settings.error_class);
237
+ if (label.length > 0 && this.settings.error_labels) {
238
+ label.addClass(this.settings.error_class).attr('role', 'alert');
239
+ }
240
+ $(el).triggerHandler('invalid');
241
+ }
242
+ }
243
+ validations.push(el_validations[0]);
244
+ }
245
+ validations = [validations.every(function (valid) {return valid;})];
246
+ return validations;
247
+ },
248
+
249
+ valid_checkbox : function (el, required) {
250
+ var el = this.S(el),
251
+ valid = (el.is(':checked') || !required || el.get(0).getAttribute('disabled'));
252
+
253
+ if (valid) {
254
+ el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
255
+ } else {
256
+ el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
257
+ }
258
+
259
+ return valid;
260
+ },
261
+
262
+ valid_radio : function (el, required) {
263
+ var name = el.getAttribute('name'),
264
+ group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find("[name='" + name + "']"),
265
+ count = group.length,
266
+ valid = false,
267
+ disabled = false;
268
+
269
+ // Has to count up to make sure the focus gets applied to the top error
270
+ for (var i=0; i < count; i++) {
271
+ if( group[i].getAttribute('disabled') ){
272
+ disabled=true;
273
+ valid=true;
274
+ } else {
275
+ if (group[i].checked){
276
+ valid = true;
277
+ } else {
278
+ if( disabled ){
279
+ valid = false;
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ // Has to count up to make sure the focus gets applied to the top error
286
+ for (var i = 0; i < count; i++) {
287
+ if (valid) {
288
+ this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
289
+ } else {
290
+ this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
291
+ }
292
+ }
293
+
294
+ return valid;
295
+ },
296
+
297
+ valid_equal : function (el, required, parent) {
298
+ var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
299
+ to = el.value,
300
+ valid = (from === to);
301
+
302
+ if (valid) {
303
+ this.S(el).removeAttr(this.invalid_attr);
304
+ parent.removeClass(this.settings.error_class);
305
+ if (label.length > 0 && settings.error_labels) {
306
+ label.removeClass(this.settings.error_class);
307
+ }
308
+ } else {
309
+ this.S(el).attr(this.invalid_attr, '');
310
+ parent.addClass(this.settings.error_class);
311
+ if (label.length > 0 && settings.error_labels) {
312
+ label.addClass(this.settings.error_class);
313
+ }
314
+ }
315
+
316
+ return valid;
317
+ },
318
+
319
+ valid_oneof : function (el, required, parent, doNotValidateOthers) {
320
+ var el = this.S(el),
321
+ others = this.S('[' + this.add_namespace('data-oneof') + ']'),
322
+ valid = others.filter(':checked').length > 0;
323
+
324
+ if (valid) {
325
+ el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
326
+ } else {
327
+ el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
328
+ }
329
+
330
+ if (!doNotValidateOthers) {
331
+ var _this = this;
332
+ others.each(function () {
333
+ _this.valid_oneof.call(_this, this, null, null, true);
334
+ });
335
+ }
336
+
337
+ return valid;
338
+ }
339
+ };
340
+ }(jQuery, window, window.document));
@@ -0,0 +1,67 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ Tennpipes.libs.accordion = {
5
+ name : 'accordion',
6
+
7
+ version : '5.5.1',
8
+
9
+ settings : {
10
+ content_class : 'content',
11
+ active_class : 'active',
12
+ multi_expand : false,
13
+ toggleable : true,
14
+ callback : function () {}
15
+ },
16
+
17
+ init : function (scope, method, options) {
18
+ this.bindings(method, options);
19
+ },
20
+
21
+ events : function () {
22
+ var self = this;
23
+ var S = this.S;
24
+ S(this.scope)
25
+ .off('.fndtn.accordion')
26
+ .on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) {
27
+ var accordion = S(this).closest('[' + self.attr_name() + ']'),
28
+ groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()),
29
+ settings = accordion.data(self.attr_name(true) + '-init') || self.settings,
30
+ target = S('#' + this.href.split('#')[1]),
31
+ aunts = $('> .accordion-navigation', accordion),
32
+ siblings = aunts.children('.' + settings.content_class),
33
+ active_content = siblings.filter('.' + settings.active_class);
34
+
35
+ e.preventDefault();
36
+
37
+ if (accordion.attr(self.attr_name())) {
38
+ siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class);
39
+ aunts = aunts.add('[' + groupSelector + '] .accordion-navigation');
40
+ }
41
+
42
+ if (settings.toggleable && target.is(active_content)) {
43
+ target.parent('.accordion-navigation').toggleClass(settings.active_class, false);
44
+ target.toggleClass(settings.active_class, false);
45
+ settings.callback(target);
46
+ target.triggerHandler('toggled', [accordion]);
47
+ accordion.triggerHandler('toggled', [target]);
48
+ return;
49
+ }
50
+
51
+ if (!settings.multi_expand) {
52
+ siblings.removeClass(settings.active_class);
53
+ aunts.removeClass(settings.active_class);
54
+ }
55
+
56
+ target.addClass(settings.active_class).parent().addClass(settings.active_class);
57
+ settings.callback(target);
58
+ target.triggerHandler('toggled', [accordion]);
59
+ accordion.triggerHandler('toggled', [target]);
60
+ });
61
+ },
62
+
63
+ off : function () {},
64
+
65
+ reflow : function () {}
66
+ };
67
+ }(jQuery, window, window.document));
@@ -0,0 +1,43 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ Tennpipes.libs.alert = {
5
+ name : 'alert',
6
+
7
+ version : '5.5.1',
8
+
9
+ settings : {
10
+ callback : function () {}
11
+ },
12
+
13
+ init : function (scope, method, options) {
14
+ this.bindings(method, options);
15
+ },
16
+
17
+ events : function () {
18
+ var self = this,
19
+ S = this.S;
20
+
21
+ $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) {
22
+ var alertBox = S(this).closest('[' + self.attr_name() + ']'),
23
+ settings = alertBox.data(self.attr_name(true) + '-init') || self.settings;
24
+
25
+ e.preventDefault();
26
+ if (Modernizr.csstransitions) {
27
+ alertBox.addClass('alert-close');
28
+ alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) {
29
+ S(this).trigger('close').trigger('close.fndtn.alert').remove();
30
+ settings.callback();
31
+ });
32
+ } else {
33
+ alertBox.fadeOut(300, function () {
34
+ S(this).trigger('close').trigger('close.fndtn.alert').remove();
35
+ settings.callback();
36
+ });
37
+ }
38
+ });
39
+ },
40
+
41
+ reflow : function () {}
42
+ };
43
+ }(jQuery, window, window.document));