rails-angular-strap 2.1.6 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -10
  3. data/lib/rails-angular-strap/version.rb +1 -1
  4. data/vendor/assets/javascripts/angular-strap.js +1 -1
  5. data/vendor/assets/javascripts/angular-strap.min.js +1 -1
  6. data/vendor/assets/javascripts/angular-strap/angular-strap.js +1405 -1104
  7. data/vendor/assets/javascripts/angular-strap/angular-strap.min.js +4 -5
  8. data/vendor/assets/javascripts/angular-strap/angular-strap.tpl.js +15 -15
  9. data/vendor/assets/javascripts/angular-strap/angular-strap.tpl.min.js +2 -2
  10. metadata +2 -192
  11. data/vendor/assets/javascripts/angular-strap-unstable.js +0 -2
  12. data/vendor/assets/javascripts/angular-strap-unstable.min.js +0 -2
  13. data/vendor/assets/javascripts/angular-strap/angular-strap.min.js.map +0 -1
  14. data/vendor/assets/javascripts/angular-strap/modules/affix.js +0 -249
  15. data/vendor/assets/javascripts/angular-strap/modules/affix.min.js +0 -9
  16. data/vendor/assets/javascripts/angular-strap/modules/affix.min.js.map +0 -1
  17. data/vendor/assets/javascripts/angular-strap/modules/alert.js +0 -120
  18. data/vendor/assets/javascripts/angular-strap/modules/alert.min.js +0 -9
  19. data/vendor/assets/javascripts/angular-strap/modules/alert.min.js.map +0 -1
  20. data/vendor/assets/javascripts/angular-strap/modules/alert.tpl.js +0 -14
  21. data/vendor/assets/javascripts/angular-strap/modules/alert.tpl.min.js +0 -8
  22. data/vendor/assets/javascripts/angular-strap/modules/aside.js +0 -96
  23. data/vendor/assets/javascripts/angular-strap/modules/aside.min.js +0 -9
  24. data/vendor/assets/javascripts/angular-strap/modules/aside.min.js.map +0 -1
  25. data/vendor/assets/javascripts/angular-strap/modules/aside.tpl.js +0 -14
  26. data/vendor/assets/javascripts/angular-strap/modules/aside.tpl.min.js +0 -8
  27. data/vendor/assets/javascripts/angular-strap/modules/button.js +0 -177
  28. data/vendor/assets/javascripts/angular-strap/modules/button.min.js +0 -9
  29. data/vendor/assets/javascripts/angular-strap/modules/button.min.js.map +0 -1
  30. data/vendor/assets/javascripts/angular-strap/modules/collapse.js +0 -273
  31. data/vendor/assets/javascripts/angular-strap/modules/collapse.min.js +0 -9
  32. data/vendor/assets/javascripts/angular-strap/modules/collapse.min.js.map +0 -1
  33. data/vendor/assets/javascripts/angular-strap/modules/date-formatter.js +0 -61
  34. data/vendor/assets/javascripts/angular-strap/modules/date-formatter.min.js +0 -9
  35. data/vendor/assets/javascripts/angular-strap/modules/date-formatter.min.js.map +0 -1
  36. data/vendor/assets/javascripts/angular-strap/modules/date-parser.js +0 -273
  37. data/vendor/assets/javascripts/angular-strap/modules/date-parser.min.js +0 -9
  38. data/vendor/assets/javascripts/angular-strap/modules/date-parser.min.js.map +0 -1
  39. data/vendor/assets/javascripts/angular-strap/modules/datepicker.js +0 -640
  40. data/vendor/assets/javascripts/angular-strap/modules/datepicker.min.js +0 -9
  41. data/vendor/assets/javascripts/angular-strap/modules/datepicker.min.js.map +0 -1
  42. data/vendor/assets/javascripts/angular-strap/modules/datepicker.tpl.js +0 -14
  43. data/vendor/assets/javascripts/angular-strap/modules/datepicker.tpl.min.js +0 -8
  44. data/vendor/assets/javascripts/angular-strap/modules/debounce.js +0 -62
  45. data/vendor/assets/javascripts/angular-strap/modules/debounce.min.js +0 -9
  46. data/vendor/assets/javascripts/angular-strap/modules/debounce.min.js.map +0 -1
  47. data/vendor/assets/javascripts/angular-strap/modules/dimensions.js +0 -156
  48. data/vendor/assets/javascripts/angular-strap/modules/dimensions.min.js +0 -9
  49. data/vendor/assets/javascripts/angular-strap/modules/dimensions.min.js.map +0 -1
  50. data/vendor/assets/javascripts/angular-strap/modules/dropdown.js +0 -149
  51. data/vendor/assets/javascripts/angular-strap/modules/dropdown.min.js +0 -9
  52. data/vendor/assets/javascripts/angular-strap/modules/dropdown.min.js.map +0 -1
  53. data/vendor/assets/javascripts/angular-strap/modules/dropdown.tpl.js +0 -14
  54. data/vendor/assets/javascripts/angular-strap/modules/dropdown.tpl.min.js +0 -8
  55. data/vendor/assets/javascripts/angular-strap/modules/modal.js +0 -349
  56. data/vendor/assets/javascripts/angular-strap/modules/modal.min.js +0 -9
  57. data/vendor/assets/javascripts/angular-strap/modules/modal.min.js.map +0 -1
  58. data/vendor/assets/javascripts/angular-strap/modules/modal.tpl.js +0 -14
  59. data/vendor/assets/javascripts/angular-strap/modules/modal.tpl.min.js +0 -8
  60. data/vendor/assets/javascripts/angular-strap/modules/navbar.js +0 -72
  61. data/vendor/assets/javascripts/angular-strap/modules/navbar.min.js +0 -9
  62. data/vendor/assets/javascripts/angular-strap/modules/navbar.min.js.map +0 -1
  63. data/vendor/assets/javascripts/angular-strap/modules/parse-options.js +0 -76
  64. data/vendor/assets/javascripts/angular-strap/modules/parse-options.min.js +0 -9
  65. data/vendor/assets/javascripts/angular-strap/modules/parse-options.min.js.map +0 -1
  66. data/vendor/assets/javascripts/angular-strap/modules/popover.js +0 -112
  67. data/vendor/assets/javascripts/angular-strap/modules/popover.min.js +0 -9
  68. data/vendor/assets/javascripts/angular-strap/modules/popover.min.js.map +0 -1
  69. data/vendor/assets/javascripts/angular-strap/modules/popover.tpl.js +0 -14
  70. data/vendor/assets/javascripts/angular-strap/modules/popover.tpl.min.js +0 -8
  71. data/vendor/assets/javascripts/angular-strap/modules/raf.js +0 -61
  72. data/vendor/assets/javascripts/angular-strap/modules/raf.min.js +0 -9
  73. data/vendor/assets/javascripts/angular-strap/modules/raf.min.js.map +0 -1
  74. data/vendor/assets/javascripts/angular-strap/modules/scrollspy.js +0 -261
  75. data/vendor/assets/javascripts/angular-strap/modules/scrollspy.min.js +0 -9
  76. data/vendor/assets/javascripts/angular-strap/modules/scrollspy.min.js.map +0 -1
  77. data/vendor/assets/javascripts/angular-strap/modules/select.js +0 -325
  78. data/vendor/assets/javascripts/angular-strap/modules/select.min.js +0 -9
  79. data/vendor/assets/javascripts/angular-strap/modules/select.min.js.map +0 -1
  80. data/vendor/assets/javascripts/angular-strap/modules/select.tpl.js +0 -14
  81. data/vendor/assets/javascripts/angular-strap/modules/select.tpl.min.js +0 -8
  82. data/vendor/assets/javascripts/angular-strap/modules/tab.js +0 -186
  83. data/vendor/assets/javascripts/angular-strap/modules/tab.min.js +0 -9
  84. data/vendor/assets/javascripts/angular-strap/modules/tab.min.js.map +0 -1
  85. data/vendor/assets/javascripts/angular-strap/modules/tab.tpl.js +0 -14
  86. data/vendor/assets/javascripts/angular-strap/modules/tab.tpl.min.js +0 -8
  87. data/vendor/assets/javascripts/angular-strap/modules/timepicker.js +0 -485
  88. data/vendor/assets/javascripts/angular-strap/modules/timepicker.min.js +0 -9
  89. data/vendor/assets/javascripts/angular-strap/modules/timepicker.min.js.map +0 -1
  90. data/vendor/assets/javascripts/angular-strap/modules/timepicker.tpl.js +0 -14
  91. data/vendor/assets/javascripts/angular-strap/modules/timepicker.tpl.min.js +0 -8
  92. data/vendor/assets/javascripts/angular-strap/modules/tooltip.js +0 -690
  93. data/vendor/assets/javascripts/angular-strap/modules/tooltip.min.js +0 -9
  94. data/vendor/assets/javascripts/angular-strap/modules/tooltip.min.js.map +0 -1
  95. data/vendor/assets/javascripts/angular-strap/modules/tooltip.tpl.js +0 -14
  96. data/vendor/assets/javascripts/angular-strap/modules/tooltip.tpl.min.js +0 -8
  97. data/vendor/assets/javascripts/angular-strap/modules/typeahead.js +0 -266
  98. data/vendor/assets/javascripts/angular-strap/modules/typeahead.min.js +0 -9
  99. data/vendor/assets/javascripts/angular-strap/modules/typeahead.min.js.map +0 -1
  100. data/vendor/assets/javascripts/angular-strap/modules/typeahead.tpl.js +0 -14
  101. data/vendor/assets/javascripts/angular-strap/modules/typeahead.tpl.min.js +0 -8
  102. data/vendor/assets/javascripts/angular-strap/unstable/angular-strap.js +0 -5040
  103. data/vendor/assets/javascripts/angular-strap/unstable/angular-strap.min.js +0 -11
  104. data/vendor/assets/javascripts/angular-strap/unstable/angular-strap.min.js.map +0 -1
  105. data/vendor/assets/javascripts/angular-strap/unstable/angular-strap.tpl.js +0 -89
  106. data/vendor/assets/javascripts/angular-strap/unstable/angular-strap.tpl.min.js +0 -8
  107. data/vendor/assets/javascripts/angular-strap/unstable/modules/affix.js +0 -249
  108. data/vendor/assets/javascripts/angular-strap/unstable/modules/affix.min.js +0 -9
  109. data/vendor/assets/javascripts/angular-strap/unstable/modules/affix.min.js.map +0 -1
  110. data/vendor/assets/javascripts/angular-strap/unstable/modules/alert.js +0 -120
  111. data/vendor/assets/javascripts/angular-strap/unstable/modules/alert.min.js +0 -9
  112. data/vendor/assets/javascripts/angular-strap/unstable/modules/alert.min.js.map +0 -1
  113. data/vendor/assets/javascripts/angular-strap/unstable/modules/alert.tpl.js +0 -14
  114. data/vendor/assets/javascripts/angular-strap/unstable/modules/alert.tpl.min.js +0 -8
  115. data/vendor/assets/javascripts/angular-strap/unstable/modules/aside.js +0 -96
  116. data/vendor/assets/javascripts/angular-strap/unstable/modules/aside.min.js +0 -9
  117. data/vendor/assets/javascripts/angular-strap/unstable/modules/aside.min.js.map +0 -1
  118. data/vendor/assets/javascripts/angular-strap/unstable/modules/aside.tpl.js +0 -14
  119. data/vendor/assets/javascripts/angular-strap/unstable/modules/aside.tpl.min.js +0 -8
  120. data/vendor/assets/javascripts/angular-strap/unstable/modules/button.js +0 -177
  121. data/vendor/assets/javascripts/angular-strap/unstable/modules/button.min.js +0 -9
  122. data/vendor/assets/javascripts/angular-strap/unstable/modules/button.min.js.map +0 -1
  123. data/vendor/assets/javascripts/angular-strap/unstable/modules/collapse.js +0 -273
  124. data/vendor/assets/javascripts/angular-strap/unstable/modules/collapse.min.js +0 -9
  125. data/vendor/assets/javascripts/angular-strap/unstable/modules/collapse.min.js.map +0 -1
  126. data/vendor/assets/javascripts/angular-strap/unstable/modules/date-formatter.js +0 -61
  127. data/vendor/assets/javascripts/angular-strap/unstable/modules/date-formatter.min.js +0 -9
  128. data/vendor/assets/javascripts/angular-strap/unstable/modules/date-formatter.min.js.map +0 -1
  129. data/vendor/assets/javascripts/angular-strap/unstable/modules/date-parser.js +0 -273
  130. data/vendor/assets/javascripts/angular-strap/unstable/modules/date-parser.min.js +0 -9
  131. data/vendor/assets/javascripts/angular-strap/unstable/modules/date-parser.min.js.map +0 -1
  132. data/vendor/assets/javascripts/angular-strap/unstable/modules/datepicker.js +0 -640
  133. data/vendor/assets/javascripts/angular-strap/unstable/modules/datepicker.min.js +0 -9
  134. data/vendor/assets/javascripts/angular-strap/unstable/modules/datepicker.min.js.map +0 -1
  135. data/vendor/assets/javascripts/angular-strap/unstable/modules/datepicker.tpl.js +0 -14
  136. data/vendor/assets/javascripts/angular-strap/unstable/modules/datepicker.tpl.min.js +0 -8
  137. data/vendor/assets/javascripts/angular-strap/unstable/modules/debounce.js +0 -62
  138. data/vendor/assets/javascripts/angular-strap/unstable/modules/debounce.min.js +0 -9
  139. data/vendor/assets/javascripts/angular-strap/unstable/modules/debounce.min.js.map +0 -1
  140. data/vendor/assets/javascripts/angular-strap/unstable/modules/dimensions.js +0 -156
  141. data/vendor/assets/javascripts/angular-strap/unstable/modules/dimensions.min.js +0 -9
  142. data/vendor/assets/javascripts/angular-strap/unstable/modules/dimensions.min.js.map +0 -1
  143. data/vendor/assets/javascripts/angular-strap/unstable/modules/dropdown.js +0 -149
  144. data/vendor/assets/javascripts/angular-strap/unstable/modules/dropdown.min.js +0 -9
  145. data/vendor/assets/javascripts/angular-strap/unstable/modules/dropdown.min.js.map +0 -1
  146. data/vendor/assets/javascripts/angular-strap/unstable/modules/dropdown.tpl.js +0 -14
  147. data/vendor/assets/javascripts/angular-strap/unstable/modules/dropdown.tpl.min.js +0 -8
  148. data/vendor/assets/javascripts/angular-strap/unstable/modules/modal.js +0 -357
  149. data/vendor/assets/javascripts/angular-strap/unstable/modules/modal.min.js +0 -9
  150. data/vendor/assets/javascripts/angular-strap/unstable/modules/modal.min.js.map +0 -1
  151. data/vendor/assets/javascripts/angular-strap/unstable/modules/modal.tpl.js +0 -14
  152. data/vendor/assets/javascripts/angular-strap/unstable/modules/modal.tpl.min.js +0 -8
  153. data/vendor/assets/javascripts/angular-strap/unstable/modules/navbar.js +0 -72
  154. data/vendor/assets/javascripts/angular-strap/unstable/modules/navbar.min.js +0 -9
  155. data/vendor/assets/javascripts/angular-strap/unstable/modules/navbar.min.js.map +0 -1
  156. data/vendor/assets/javascripts/angular-strap/unstable/modules/parse-options.js +0 -76
  157. data/vendor/assets/javascripts/angular-strap/unstable/modules/parse-options.min.js +0 -9
  158. data/vendor/assets/javascripts/angular-strap/unstable/modules/parse-options.min.js.map +0 -1
  159. data/vendor/assets/javascripts/angular-strap/unstable/modules/popover.js +0 -112
  160. data/vendor/assets/javascripts/angular-strap/unstable/modules/popover.min.js +0 -9
  161. data/vendor/assets/javascripts/angular-strap/unstable/modules/popover.min.js.map +0 -1
  162. data/vendor/assets/javascripts/angular-strap/unstable/modules/popover.tpl.js +0 -14
  163. data/vendor/assets/javascripts/angular-strap/unstable/modules/popover.tpl.min.js +0 -8
  164. data/vendor/assets/javascripts/angular-strap/unstable/modules/raf.js +0 -61
  165. data/vendor/assets/javascripts/angular-strap/unstable/modules/raf.min.js +0 -9
  166. data/vendor/assets/javascripts/angular-strap/unstable/modules/raf.min.js.map +0 -1
  167. data/vendor/assets/javascripts/angular-strap/unstable/modules/scrollspy.js +0 -261
  168. data/vendor/assets/javascripts/angular-strap/unstable/modules/scrollspy.min.js +0 -9
  169. data/vendor/assets/javascripts/angular-strap/unstable/modules/scrollspy.min.js.map +0 -1
  170. data/vendor/assets/javascripts/angular-strap/unstable/modules/select.js +0 -328
  171. data/vendor/assets/javascripts/angular-strap/unstable/modules/select.min.js +0 -9
  172. data/vendor/assets/javascripts/angular-strap/unstable/modules/select.min.js.map +0 -1
  173. data/vendor/assets/javascripts/angular-strap/unstable/modules/select.tpl.js +0 -14
  174. data/vendor/assets/javascripts/angular-strap/unstable/modules/select.tpl.min.js +0 -8
  175. data/vendor/assets/javascripts/angular-strap/unstable/modules/tab.js +0 -186
  176. data/vendor/assets/javascripts/angular-strap/unstable/modules/tab.min.js +0 -9
  177. data/vendor/assets/javascripts/angular-strap/unstable/modules/tab.min.js.map +0 -1
  178. data/vendor/assets/javascripts/angular-strap/unstable/modules/tab.tpl.js +0 -14
  179. data/vendor/assets/javascripts/angular-strap/unstable/modules/tab.tpl.min.js +0 -8
  180. data/vendor/assets/javascripts/angular-strap/unstable/modules/timepicker.js +0 -485
  181. data/vendor/assets/javascripts/angular-strap/unstable/modules/timepicker.min.js +0 -9
  182. data/vendor/assets/javascripts/angular-strap/unstable/modules/timepicker.min.js.map +0 -1
  183. data/vendor/assets/javascripts/angular-strap/unstable/modules/timepicker.tpl.js +0 -14
  184. data/vendor/assets/javascripts/angular-strap/unstable/modules/timepicker.tpl.min.js +0 -8
  185. data/vendor/assets/javascripts/angular-strap/unstable/modules/tooltip.js +0 -705
  186. data/vendor/assets/javascripts/angular-strap/unstable/modules/tooltip.min.js +0 -9
  187. data/vendor/assets/javascripts/angular-strap/unstable/modules/tooltip.min.js.map +0 -1
  188. data/vendor/assets/javascripts/angular-strap/unstable/modules/tooltip.tpl.js +0 -14
  189. data/vendor/assets/javascripts/angular-strap/unstable/modules/tooltip.tpl.min.js +0 -8
  190. data/vendor/assets/javascripts/angular-strap/unstable/modules/typeahead.js +0 -266
  191. data/vendor/assets/javascripts/angular-strap/unstable/modules/typeahead.min.js +0 -9
  192. data/vendor/assets/javascripts/angular-strap/unstable/modules/typeahead.min.js.map +0 -1
  193. data/vendor/assets/javascripts/angular-strap/unstable/modules/typeahead.tpl.js +0 -14
  194. data/vendor/assets/javascripts/angular-strap/unstable/modules/typeahead.tpl.min.js +0 -8
@@ -1,9 +0,0 @@
1
- /**
2
- * angular-strap
3
- * @version v2.1.6 - 2015-01-11
4
- * @link http://mgcrea.github.io/angular-strap
5
- * @author Olivier Louvignes (olivier@mg-crea.com)
6
- * @license MIT License, http://www.opensource.org/licenses/MIT
7
- */
8
- "use strict";angular.module("mgcrea.ngStrap.helpers.dateParser",[]).provider("$dateParser",["$localeProvider",function(){function t(){this.year=1970,this.month=0,this.day=1,this.hours=0,this.minutes=0,this.seconds=0,this.milliseconds=0}function e(){}function s(t){return!isNaN(parseFloat(t))&&isFinite(t)}function n(t,e){for(var s=t.length,n=e.toString().toLowerCase(),r=0;s>r;r++)if(t[r].toLowerCase()===n)return r;return-1}t.prototype.setMilliseconds=function(t){this.milliseconds=t},t.prototype.setSeconds=function(t){this.seconds=t},t.prototype.setMinutes=function(t){this.minutes=t},t.prototype.setHours=function(t){this.hours=t},t.prototype.getHours=function(){return this.hours},t.prototype.setDate=function(t){this.day=t},t.prototype.setMonth=function(t){this.month=t},t.prototype.setFullYear=function(t){this.year=t},t.prototype.fromDate=function(t){return this.year=t.getFullYear(),this.month=t.getMonth(),this.day=t.getDate(),this.hours=t.getHours(),this.minutes=t.getMinutes(),this.seconds=t.getSeconds(),this.milliseconds=t.getMilliseconds(),this},t.prototype.toDate=function(){return new Date(this.year,this.month,this.day,this.hours,this.minutes,this.seconds,this.milliseconds)};var r=t.prototype,i=this.defaults={format:"shortDate",strict:!1};this.$get=["$locale","dateFilter",function(o,a){var u=function(u){function h(t){var e,s=Object.keys(d),n=[],r=[],i=t;for(e=0;e<s.length;e++)if(t.split(s[e]).length>1){var o=i.search(s[e]);t=t.split(s[e]).join(""),d[s[e]]&&(n[o]=d[s[e]])}return angular.forEach(n,function(t){t&&r.push(t)}),r}function l(t){return t.replace(/\//g,"[\\/]").replace("/-/g","[-]").replace(/\./g,"[.]").replace(/\\s/g,"[\\s]")}function c(t){var e,s=Object.keys(m),n=t;for(e=0;e<s.length;e++)n=n.split(s[e]).join("${"+e+"}");for(e=0;e<s.length;e++)n=n.split("${"+e+"}").join("("+m[s[e]]+")");return t=l(t),new RegExp("^"+n+"$",["i"])}var M,f,g=angular.extend({},i,u),p={},m={sss:"[0-9]{3}",ss:"[0-5][0-9]",s:g.strict?"[1-5]?[0-9]":"[0-9]|[0-5][0-9]",mm:"[0-5][0-9]",m:g.strict?"[1-5]?[0-9]":"[0-9]|[0-5][0-9]",HH:"[01][0-9]|2[0-3]",H:g.strict?"1?[0-9]|2[0-3]":"[01]?[0-9]|2[0-3]",hh:"[0][1-9]|[1][012]",h:g.strict?"[1-9]|1[012]":"0?[1-9]|1[012]",a:"AM|PM",EEEE:o.DATETIME_FORMATS.DAY.join("|"),EEE:o.DATETIME_FORMATS.SHORTDAY.join("|"),dd:"0[1-9]|[12][0-9]|3[01]",d:g.strict?"[1-9]|[1-2][0-9]|3[01]":"0?[1-9]|[1-2][0-9]|3[01]",MMMM:o.DATETIME_FORMATS.MONTH.join("|"),MMM:o.DATETIME_FORMATS.SHORTMONTH.join("|"),MM:"0[1-9]|1[012]",M:g.strict?"[1-9]|1[012]":"0?[1-9]|1[012]",yyyy:"[1]{1}[0-9]{3}|[2]{1}[0-9]{3}",yy:"[0-9]{2}",y:g.strict?"-?(0|[1-9][0-9]{0,3})":"-?0*[0-9]{1,4}"},d={sss:r.setMilliseconds,ss:r.setSeconds,s:r.setSeconds,mm:r.setMinutes,m:r.setMinutes,HH:r.setHours,H:r.setHours,hh:r.setHours,h:r.setHours,EEEE:e,EEE:e,dd:r.setDate,d:r.setDate,a:function(t){var e=this.getHours()%12;return this.setHours(t.match(/pm/i)?e+12:e)},MMMM:function(t){return this.setMonth(n(o.DATETIME_FORMATS.MONTH,t))},MMM:function(t){return this.setMonth(n(o.DATETIME_FORMATS.SHORTMONTH,t))},MM:function(t){return this.setMonth(1*t-1)},M:function(t){return this.setMonth(1*t-1)},yyyy:r.setFullYear,yy:function(t){return this.setFullYear(2e3+1*t)},y:r.setFullYear};return p.init=function(){p.$format=o.DATETIME_FORMATS[g.format]||g.format,M=c(p.$format),f=h(p.$format)},p.isValid=function(t){return angular.isDate(t)?!isNaN(t.getTime()):M.test(t)},p.parse=function(e,s,n){n&&(n=o.DATETIME_FORMATS[n]||n),angular.isDate(e)&&(e=a(e,n||p.$format));var r=n?c(n):M,i=n?h(n):f,u=r.exec(e);if(!u)return!1;for(var l=(new t).fromDate(s&&!isNaN(s.getTime())?s:new Date(1970,0,1,0)),g=0;g<u.length-1;g++)i[g]&&i[g].call(l,u[g+1]);var m=l.toDate();return parseInt(l.day,10)!==m.getDate()?!1:m},p.getDateForAttribute=function(t,e){var n;if("today"===e){var r=new Date;n=new Date(r.getFullYear(),r.getMonth(),r.getDate()+("maxDate"===t?1:0),0,0,0,"minDate"===t?0:-1)}else n=angular.isString(e)&&e.match(/^".+"$/)?new Date(e.substr(1,e.length-2)):s(e)?new Date(parseInt(e,10)):angular.isString(e)&&0===e.length?"minDate"===t?-1/0:+1/0:new Date(e);return n},p.getTimeForAttribute=function(t,e){var n;return n="now"===e?(new Date).setFullYear(1970,0,1):angular.isString(e)&&e.match(/^".+"$/)?new Date(e.substr(1,e.length-2)).setFullYear(1970,0,1):s(e)?new Date(parseInt(e,10)).setFullYear(1970,0,1):angular.isString(e)&&0===e.length?"minTime"===t?-1/0:+1/0:p.parse(e,new Date(1970,0,1,0))},p.daylightSavingAdjust=function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},p.init(),p};return u}]}]);
9
- //# sourceMappingURL=date-parser.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["helpers/date-parser.js"],"names":[],"mappings":"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","file":"date-parser.min.js","sourcesContent":["'use strict';\n\nangular.module('mgcrea.ngStrap.helpers.dateParser', [])\n\n.provider('$dateParser', function($localeProvider) {\n\n // define a custom ParseDate object to use instead of native Date\n // to avoid date values wrapping when setting date component values\n function ParseDate() {\n this.year = 1970;\n this.month = 0;\n this.day = 1;\n this.hours = 0;\n this.minutes = 0;\n this.seconds = 0;\n this.milliseconds = 0;\n }\n\n ParseDate.prototype.setMilliseconds = function(value) { this.milliseconds = value; };\n ParseDate.prototype.setSeconds = function(value) { this.seconds = value; };\n ParseDate.prototype.setMinutes = function(value) { this.minutes = value; };\n ParseDate.prototype.setHours = function(value) { this.hours = value; };\n ParseDate.prototype.getHours = function() { return this.hours; };\n ParseDate.prototype.setDate = function(value) { this.day = value; };\n ParseDate.prototype.setMonth = function(value) { this.month = value; };\n ParseDate.prototype.setFullYear = function(value) { this.year = value; };\n ParseDate.prototype.fromDate = function(value) {\n this.year = value.getFullYear();\n this.month = value.getMonth();\n this.day = value.getDate();\n this.hours = value.getHours();\n this.minutes = value.getMinutes();\n this.seconds = value.getSeconds();\n this.milliseconds = value.getMilliseconds();\n return this;\n };\n\n ParseDate.prototype.toDate = function() {\n return new Date(this.year, this.month, this.day, this.hours, this.minutes, this.seconds, this.milliseconds);\n };\n\n var proto = ParseDate.prototype;\n\n function noop() {\n }\n\n function isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function indexOfCaseInsensitive(array, value) {\n var len = array.length, str=value.toString().toLowerCase();\n for (var i=0; i<len; i++) {\n if (array[i].toLowerCase() === str) { return i; }\n }\n return -1; // Return -1 per the \"Array.indexOf()\" method.\n }\n\n var defaults = this.defaults = {\n format: 'shortDate',\n strict: false\n };\n\n this.$get = function($locale, dateFilter) {\n\n var DateParserFactory = function(config) {\n\n var options = angular.extend({}, defaults, config);\n\n var $dateParser = {};\n\n var regExpMap = {\n 'sss' : '[0-9]{3}',\n 'ss' : '[0-5][0-9]',\n 's' : options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n 'mm' : '[0-5][0-9]',\n 'm' : options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n 'HH' : '[01][0-9]|2[0-3]',\n 'H' : options.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]',\n 'hh' : '[0][1-9]|[1][012]',\n 'h' : options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n 'a' : 'AM|PM',\n 'EEEE' : $locale.DATETIME_FORMATS.DAY.join('|'),\n 'EEE' : $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n 'dd' : '0[1-9]|[12][0-9]|3[01]',\n 'd' : options.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]',\n 'MMMM' : $locale.DATETIME_FORMATS.MONTH.join('|'),\n 'MMM' : $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n 'MM' : '0[1-9]|1[012]',\n 'M' : options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n 'yyyy' : '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}',\n 'yy' : '[0-9]{2}',\n 'y' : options.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}',\n };\n\n var setFnMap = {\n 'sss' : proto.setMilliseconds,\n 'ss' : proto.setSeconds,\n 's' : proto.setSeconds,\n 'mm' : proto.setMinutes,\n 'm' : proto.setMinutes,\n 'HH' : proto.setHours,\n 'H' : proto.setHours,\n 'hh' : proto.setHours,\n 'h' : proto.setHours,\n 'EEEE' : noop,\n 'EEE' : noop,\n 'dd' : proto.setDate,\n 'd' : proto.setDate,\n 'a' : function(value) { var hours = this.getHours() % 12; return this.setHours(value.match(/pm/i) ? hours + 12 : hours); },\n 'MMMM' : function(value) { return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.MONTH, value)); },\n 'MMM' : function(value) { return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.SHORTMONTH, value)); },\n 'MM' : function(value) { return this.setMonth(1 * value - 1); },\n 'M' : function(value) { return this.setMonth(1 * value - 1); },\n 'yyyy' : proto.setFullYear,\n 'yy' : function(value) { return this.setFullYear(2000 + 1 * value); },\n 'y' : proto.setFullYear\n };\n\n var regex, setMap;\n\n $dateParser.init = function() {\n $dateParser.$format = $locale.DATETIME_FORMATS[options.format] || options.format;\n regex = regExpForFormat($dateParser.$format);\n setMap = setMapForFormat($dateParser.$format);\n };\n\n $dateParser.isValid = function(date) {\n if(angular.isDate(date)) return !isNaN(date.getTime());\n return regex.test(date);\n };\n\n $dateParser.parse = function(value, baseDate, format) {\n // check for date format special names\n if(format) format = $locale.DATETIME_FORMATS[format] || format;\n if(angular.isDate(value)) value = dateFilter(value, format || $dateParser.$format);\n var formatRegex = format ? regExpForFormat(format) : regex;\n var formatSetMap = format ? setMapForFormat(format) : setMap;\n var matches = formatRegex.exec(value);\n if(!matches) return false;\n // use custom ParseDate object to set parsed values\n var date = baseDate && !isNaN(baseDate.getTime()) ? new ParseDate().fromDate(baseDate) : new ParseDate().fromDate(new Date(1970, 0, 1, 0));\n for(var i = 0; i < matches.length - 1; i++) {\n formatSetMap[i] && formatSetMap[i].call(date, matches[i+1]);\n }\n // convert back to native Date object\n var newDate = date.toDate();\n\n // check new native Date object for day values overflow\n if (parseInt(date.day, 10) !== newDate.getDate()) {\n return false;\n }\n\n return newDate;\n };\n\n $dateParser.getDateForAttribute = function(key, value) {\n var date;\n\n if(value === 'today') {\n var today = new Date();\n date = new Date(today.getFullYear(), today.getMonth(), today.getDate() + (key === 'maxDate' ? 1 : 0), 0, 0, 0, (key === 'minDate' ? 0 : -1));\n } else if(angular.isString(value) && value.match(/^\".+\"$/)) { // Support {{ dateObj }}\n date = new Date(value.substr(1, value.length - 2));\n } else if(isNumeric(value)) {\n date = new Date(parseInt(value, 10));\n } else if (angular.isString(value) && 0 === value.length) { // Reset date\n date = key === 'minDate' ? -Infinity : +Infinity;\n } else {\n date = new Date(value);\n }\n\n return date;\n };\n\n $dateParser.getTimeForAttribute = function(key, value) {\n var time;\n\n if(value === 'now') {\n time = new Date().setFullYear(1970, 0, 1);\n } else if(angular.isString(value) && value.match(/^\".+\"$/)) {\n time = new Date(value.substr(1, value.length - 2)).setFullYear(1970, 0, 1);\n } else if(isNumeric(value)) {\n time = new Date(parseInt(value, 10)).setFullYear(1970, 0, 1);\n } else if (angular.isString(value) && 0 === value.length) { // Reset time\n time = key === 'minTime' ? -Infinity : +Infinity;\n } else {\n time = $dateParser.parse(value, new Date(1970, 0, 1, 0));\n }\n\n return time;\n };\n\n /* Handle switch to/from daylight saving.\n * Hours may be non-zero on daylight saving cut-over:\n * > 12 when midnight changeover, but then cannot generate\n * midnight datetime, so jump to 1AM, otherwise reset.\n * @param date (Date) the date to check\n * @return (Date) the corrected date\n *\n * __ copied from jquery ui datepicker __\n */\n $dateParser.daylightSavingAdjust = function(date) {\n if (!date) {\n return null;\n }\n date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n return date;\n };\n\n // Private functions\n\n function setMapForFormat(format) {\n var keys = Object.keys(setFnMap), i;\n var map = [], sortedMap = [];\n // Map to setFn\n var clonedFormat = format;\n for(i = 0; i < keys.length; i++) {\n if(format.split(keys[i]).length > 1) {\n var index = clonedFormat.search(keys[i]);\n format = format.split(keys[i]).join('');\n if(setFnMap[keys[i]]) {\n map[index] = setFnMap[keys[i]];\n }\n }\n }\n // Sort result map\n angular.forEach(map, function(v) {\n // conditional required since angular.forEach broke around v1.2.21\n // related pr: https://github.com/angular/angular.js/pull/8525\n if(v) sortedMap.push(v);\n });\n return sortedMap;\n }\n\n function escapeReservedSymbols(text) {\n return text.replace(/\\//g, '[\\\\/]').replace('/-/g', '[-]').replace(/\\./g, '[.]').replace(/\\\\s/g, '[\\\\s]');\n }\n\n function regExpForFormat(format) {\n var keys = Object.keys(regExpMap), i;\n\n var re = format;\n // Abstract replaces to avoid collisions\n for(i = 0; i < keys.length; i++) {\n re = re.split(keys[i]).join('${' + i + '}');\n }\n // Replace abstracted values\n for(i = 0; i < keys.length; i++) {\n re = re.split('${' + i + '}').join('(' + regExpMap[keys[i]] + ')');\n }\n format = escapeReservedSymbols(format);\n\n return new RegExp('^' + re + '$', ['i']);\n }\n\n $dateParser.init();\n return $dateParser;\n\n };\n\n return DateParserFactory;\n\n };\n\n});\n"],"sourceRoot":"/source/"}
@@ -1,640 +0,0 @@
1
- /**
2
- * angular-strap
3
- * @version v2.1.6 - 2015-01-11
4
- * @link http://mgcrea.github.io/angular-strap
5
- * @author Olivier Louvignes (olivier@mg-crea.com)
6
- * @license MIT License, http://www.opensource.org/licenses/MIT
7
- */
8
- 'use strict';
9
-
10
- angular.module('mgcrea.ngStrap.datepicker', [
11
- 'mgcrea.ngStrap.helpers.dateParser',
12
- 'mgcrea.ngStrap.helpers.dateFormatter',
13
- 'mgcrea.ngStrap.tooltip'])
14
-
15
- .provider('$datepicker', function() {
16
-
17
- var defaults = this.defaults = {
18
- animation: 'am-fade',
19
- prefixClass: 'datepicker',
20
- placement: 'bottom-left',
21
- template: 'datepicker/datepicker.tpl.html',
22
- trigger: 'focus',
23
- container: false,
24
- keyboard: true,
25
- html: false,
26
- delay: 0,
27
- // lang: $locale.id,
28
- useNative: false,
29
- dateType: 'date',
30
- dateFormat: 'shortDate',
31
- modelDateFormat: null,
32
- dayFormat: 'dd',
33
- monthFormat: 'MMM',
34
- yearFormat: 'yyyy',
35
- monthTitleFormat: 'MMMM yyyy',
36
- yearTitleFormat: 'yyyy',
37
- strictFormat: false,
38
- autoclose: false,
39
- minDate: -Infinity,
40
- maxDate: +Infinity,
41
- startView: 0,
42
- minView: 0,
43
- startWeek: 0,
44
- daysOfWeekDisabled: '',
45
- iconLeft: 'glyphicon glyphicon-chevron-left',
46
- iconRight: 'glyphicon glyphicon-chevron-right'
47
- };
48
-
49
- this.$get = ["$window", "$document", "$rootScope", "$sce", "$dateFormatter", "datepickerViews", "$tooltip", "$timeout", function($window, $document, $rootScope, $sce, $dateFormatter, datepickerViews, $tooltip, $timeout) {
50
-
51
- var bodyEl = angular.element($window.document.body);
52
- var isNative = /(ip(a|o)d|iphone|android)/ig.test($window.navigator.userAgent);
53
- var isTouch = ('createTouch' in $window.document) && isNative;
54
- if(!defaults.lang) defaults.lang = $dateFormatter.getDefaultLocale();
55
-
56
- function DatepickerFactory(element, controller, config) {
57
-
58
- var $datepicker = $tooltip(element, angular.extend({}, defaults, config));
59
- var parentScope = config.scope;
60
- var options = $datepicker.$options;
61
- var scope = $datepicker.$scope;
62
- if(options.startView) options.startView -= options.minView;
63
-
64
- // View vars
65
-
66
- var pickerViews = datepickerViews($datepicker);
67
- $datepicker.$views = pickerViews.views;
68
- var viewDate = pickerViews.viewDate;
69
- scope.$mode = options.startView;
70
- scope.$iconLeft = options.iconLeft;
71
- scope.$iconRight = options.iconRight;
72
- var $picker = $datepicker.$views[scope.$mode];
73
-
74
- // Scope methods
75
-
76
- scope.$select = function(date) {
77
- $datepicker.select(date);
78
- };
79
- scope.$selectPane = function(value) {
80
- $datepicker.$selectPane(value);
81
- };
82
- scope.$toggleMode = function() {
83
- $datepicker.setMode((scope.$mode + 1) % $datepicker.$views.length);
84
- };
85
-
86
- // Public methods
87
-
88
- $datepicker.update = function(date) {
89
- // console.warn('$datepicker.update() newValue=%o', date);
90
- if(angular.isDate(date) && !isNaN(date.getTime())) {
91
- $datepicker.$date = date;
92
- $picker.update.call($picker, date);
93
- }
94
- // Build only if pristine
95
- $datepicker.$build(true);
96
- };
97
-
98
- $datepicker.updateDisabledDates = function(dateRanges) {
99
- options.disabledDateRanges = dateRanges;
100
- for(var i = 0, l = scope.rows.length; i < l; i++) {
101
- angular.forEach(scope.rows[i], $datepicker.$setDisabledEl);
102
- }
103
- };
104
-
105
- $datepicker.select = function(date, keep) {
106
- // console.warn('$datepicker.select', date, scope.$mode);
107
- if(!angular.isDate(controller.$dateValue)) controller.$dateValue = new Date(date);
108
- if(!scope.$mode || keep) {
109
- controller.$setViewValue(angular.copy(date));
110
- controller.$render();
111
- if(options.autoclose && !keep) {
112
- $timeout(function() { $datepicker.hide(true); });
113
- }
114
- } else {
115
- angular.extend(viewDate, {year: date.getFullYear(), month: date.getMonth(), date: date.getDate()});
116
- $datepicker.setMode(scope.$mode - 1);
117
- $datepicker.$build();
118
- }
119
- };
120
-
121
- $datepicker.setMode = function(mode) {
122
- // console.warn('$datepicker.setMode', mode);
123
- scope.$mode = mode;
124
- $picker = $datepicker.$views[scope.$mode];
125
- $datepicker.$build();
126
- };
127
-
128
- // Protected methods
129
-
130
- $datepicker.$build = function(pristine) {
131
- // console.warn('$datepicker.$build() viewDate=%o', viewDate);
132
- if(pristine === true && $picker.built) return;
133
- if(pristine === false && !$picker.built) return;
134
- $picker.build.call($picker);
135
- };
136
-
137
- $datepicker.$updateSelected = function() {
138
- for(var i = 0, l = scope.rows.length; i < l; i++) {
139
- angular.forEach(scope.rows[i], updateSelected);
140
- }
141
- };
142
-
143
- $datepicker.$isSelected = function(date) {
144
- return $picker.isSelected(date);
145
- };
146
-
147
- $datepicker.$setDisabledEl = function(el) {
148
- el.disabled = $picker.isDisabled(el.date);
149
- };
150
-
151
- $datepicker.$selectPane = function(value) {
152
- var steps = $picker.steps;
153
- // set targetDate to first day of month to avoid problems with
154
- // date values rollover. This assumes the viewDate does not
155
- // depend on the day of the month
156
- var targetDate = new Date(Date.UTC(viewDate.year + ((steps.year || 0) * value), viewDate.month + ((steps.month || 0) * value), 1));
157
- angular.extend(viewDate, {year: targetDate.getUTCFullYear(), month: targetDate.getUTCMonth(), date: targetDate.getUTCDate()});
158
- $datepicker.$build();
159
- };
160
-
161
- $datepicker.$onMouseDown = function(evt) {
162
- // Prevent blur on mousedown on .dropdown-menu
163
- evt.preventDefault();
164
- evt.stopPropagation();
165
- // Emulate click for mobile devices
166
- if(isTouch) {
167
- var targetEl = angular.element(evt.target);
168
- if(targetEl[0].nodeName.toLowerCase() !== 'button') {
169
- targetEl = targetEl.parent();
170
- }
171
- targetEl.triggerHandler('click');
172
- }
173
- };
174
-
175
- $datepicker.$onKeyDown = function(evt) {
176
- if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;
177
- evt.preventDefault();
178
- evt.stopPropagation();
179
-
180
- if(evt.keyCode === 13) {
181
- if(!scope.$mode) {
182
- return $datepicker.hide(true);
183
- } else {
184
- return scope.$apply(function() { $datepicker.setMode(scope.$mode - 1); });
185
- }
186
- }
187
-
188
- // Navigate with keyboard
189
- $picker.onKeyDown(evt);
190
- parentScope.$digest();
191
- };
192
-
193
- // Private
194
-
195
- function updateSelected(el) {
196
- el.selected = $datepicker.$isSelected(el.date);
197
- }
198
-
199
- function focusElement() {
200
- element[0].focus();
201
- }
202
-
203
- // Overrides
204
-
205
- var _init = $datepicker.init;
206
- $datepicker.init = function() {
207
- if(isNative && options.useNative) {
208
- element.prop('type', 'date');
209
- element.css('-webkit-appearance', 'textfield');
210
- return;
211
- } else if(isTouch) {
212
- element.prop('type', 'text');
213
- element.attr('readonly', 'true');
214
- element.on('click', focusElement);
215
- }
216
- _init();
217
- };
218
-
219
- var _destroy = $datepicker.destroy;
220
- $datepicker.destroy = function() {
221
- if(isNative && options.useNative) {
222
- element.off('click', focusElement);
223
- }
224
- _destroy();
225
- };
226
-
227
- var _show = $datepicker.show;
228
- $datepicker.show = function() {
229
- _show();
230
- // use timeout to hookup the events to prevent
231
- // event bubbling from being processed imediately.
232
- $timeout(function() {
233
- // if $datepicker is no longer showing, don't setup events
234
- if(!$datepicker.$isShown) return;
235
- $datepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);
236
- if(options.keyboard) {
237
- element.on('keydown', $datepicker.$onKeyDown);
238
- }
239
- }, 0, false);
240
- };
241
-
242
- var _hide = $datepicker.hide;
243
- $datepicker.hide = function(blur) {
244
- if(!$datepicker.$isShown) return;
245
- $datepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);
246
- if(options.keyboard) {
247
- element.off('keydown', $datepicker.$onKeyDown);
248
- }
249
- _hide(blur);
250
- };
251
-
252
- return $datepicker;
253
-
254
- }
255
-
256
- DatepickerFactory.defaults = defaults;
257
- return DatepickerFactory;
258
-
259
- }];
260
-
261
- })
262
-
263
- .directive('bsDatepicker', ["$window", "$parse", "$q", "$dateFormatter", "$dateParser", "$datepicker", function($window, $parse, $q, $dateFormatter, $dateParser, $datepicker) {
264
-
265
- var defaults = $datepicker.defaults;
266
- var isNative = /(ip(a|o)d|iphone|android)/ig.test($window.navigator.userAgent);
267
-
268
- return {
269
- restrict: 'EAC',
270
- require: 'ngModel',
271
- link: function postLink(scope, element, attr, controller) {
272
-
273
- // Directive options
274
- var options = {scope: scope, controller: controller};
275
- angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'autoclose', 'dateType', 'dateFormat', 'modelDateFormat', 'dayFormat', 'strictFormat', 'startWeek', 'startDate', 'useNative', 'lang', 'startView', 'minView', 'iconLeft', 'iconRight', 'daysOfWeekDisabled', 'id'], function(key) {
276
- if(angular.isDefined(attr[key])) options[key] = attr[key];
277
- });
278
-
279
- // Visibility binding support
280
- attr.bsShow && scope.$watch(attr.bsShow, function(newValue, oldValue) {
281
- if(!datepicker || !angular.isDefined(newValue)) return;
282
- if(angular.isString(newValue)) newValue = !!newValue.match(/true|,?(datepicker),?/i);
283
- newValue === true ? datepicker.show() : datepicker.hide();
284
- });
285
-
286
- // Initialize datepicker
287
- var datepicker = $datepicker(element, controller, options);
288
- options = datepicker.$options;
289
- // Set expected iOS format
290
- if(isNative && options.useNative) options.dateFormat = 'yyyy-MM-dd';
291
-
292
- var lang = options.lang;
293
-
294
- var formatDate = function(date, format) {
295
- return $dateFormatter.formatDate(date, format, lang);
296
- };
297
-
298
- var dateParser = $dateParser({format: options.dateFormat, lang: lang, strict: options.strictFormat});
299
-
300
- // Observe attributes for changes
301
- angular.forEach(['minDate', 'maxDate'], function(key) {
302
- // console.warn('attr.$observe(%s)', key, attr[key]);
303
- angular.isDefined(attr[key]) && attr.$observe(key, function(newValue) {
304
- // console.warn('attr.$observe(%s)=%o', key, newValue);
305
- datepicker.$options[key] = dateParser.getDateForAttribute(key, newValue);
306
- // Build only if dirty
307
- !isNaN(datepicker.$options[key]) && datepicker.$build(false);
308
- validateAgainstMinMaxDate(controller.$dateValue);
309
- });
310
- });
311
-
312
- // Watch model for changes
313
- scope.$watch(attr.ngModel, function(newValue, oldValue) {
314
- datepicker.update(controller.$dateValue);
315
- }, true);
316
-
317
- // Normalize undefined/null/empty array,
318
- // so that we don't treat changing from undefined->null as a change.
319
- function normalizeDateRanges(ranges) {
320
- if (!ranges || !ranges.length) return null;
321
- return ranges;
322
- }
323
-
324
- if (angular.isDefined(attr.disabledDates)) {
325
- scope.$watch(attr.disabledDates, function(disabledRanges, previousValue) {
326
- disabledRanges = normalizeDateRanges(disabledRanges);
327
- previousValue = normalizeDateRanges(previousValue);
328
-
329
- if (disabledRanges) {
330
- datepicker.updateDisabledDates(disabledRanges);
331
- }
332
- });
333
- }
334
-
335
- function validateAgainstMinMaxDate(parsedDate) {
336
- if (!angular.isDate(parsedDate)) return;
337
- var isMinValid = isNaN(datepicker.$options.minDate) || parsedDate.getTime() >= datepicker.$options.minDate;
338
- var isMaxValid = isNaN(datepicker.$options.maxDate) || parsedDate.getTime() <= datepicker.$options.maxDate;
339
- var isValid = isMinValid && isMaxValid;
340
- controller.$setValidity('date', isValid);
341
- controller.$setValidity('min', isMinValid);
342
- controller.$setValidity('max', isMaxValid);
343
- // Only update the model when we have a valid date
344
- if(isValid) controller.$dateValue = parsedDate;
345
- }
346
-
347
- // viewValue -> $parsers -> modelValue
348
- controller.$parsers.unshift(function(viewValue) {
349
- // console.warn('$parser("%s"): viewValue=%o', element.attr('ng-model'), viewValue);
350
- // Null values should correctly reset the model value & validity
351
- if(!viewValue) {
352
- controller.$setValidity('date', true);
353
- // BREAKING CHANGE:
354
- // return null (not undefined) when input value is empty, so angularjs 1.3
355
- // ngModelController can go ahead and run validators, like ngRequired
356
- return null;
357
- }
358
- var parsedDate = dateParser.parse(viewValue, controller.$dateValue);
359
- if(!parsedDate || isNaN(parsedDate.getTime())) {
360
- controller.$setValidity('date', false);
361
- // return undefined, causes ngModelController to
362
- // invalidate model value
363
- return;
364
- } else {
365
- validateAgainstMinMaxDate(parsedDate);
366
- }
367
- if(options.dateType === 'string') {
368
- return formatDate(parsedDate, options.modelDateFormat || options.dateFormat);
369
- } else if(options.dateType === 'number') {
370
- return controller.$dateValue.getTime();
371
- } else if(options.dateType === 'unix') {
372
- return controller.$dateValue.getTime() / 1000;
373
- } else if(options.dateType === 'iso') {
374
- return controller.$dateValue.toISOString();
375
- } else {
376
- return new Date(controller.$dateValue);
377
- }
378
- });
379
-
380
- // modelValue -> $formatters -> viewValue
381
- controller.$formatters.push(function(modelValue) {
382
- // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);
383
- var date;
384
- if(angular.isUndefined(modelValue) || modelValue === null) {
385
- date = NaN;
386
- } else if(angular.isDate(modelValue)) {
387
- date = modelValue;
388
- } else if(options.dateType === 'string') {
389
- date = dateParser.parse(modelValue, null, options.modelDateFormat);
390
- } else if(options.dateType === 'unix') {
391
- date = new Date(modelValue * 1000);
392
- } else {
393
- date = new Date(modelValue);
394
- }
395
- // Setup default value?
396
- // if(isNaN(date.getTime())) {
397
- // var today = new Date();
398
- // date = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0);
399
- // }
400
- controller.$dateValue = date;
401
- return getDateFormattedString();
402
- });
403
-
404
- // viewValue -> element
405
- controller.$render = function() {
406
- // console.warn('$render("%s"): viewValue=%o', element.attr('ng-model'), controller.$viewValue);
407
- element.val(getDateFormattedString());
408
- };
409
-
410
- function getDateFormattedString() {
411
- return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.dateFormat);
412
- }
413
-
414
- // Garbage collection
415
- scope.$on('$destroy', function() {
416
- if(datepicker) datepicker.destroy();
417
- options = null;
418
- datepicker = null;
419
- });
420
-
421
- }
422
- };
423
-
424
- }])
425
-
426
- .provider('datepickerViews', function() {
427
-
428
- var defaults = this.defaults = {
429
- dayFormat: 'dd',
430
- daySplit: 7
431
- };
432
-
433
- // Split array into smaller arrays
434
- function split(arr, size) {
435
- var arrays = [];
436
- while(arr.length > 0) {
437
- arrays.push(arr.splice(0, size));
438
- }
439
- return arrays;
440
- }
441
-
442
- // Modulus operator
443
- function mod(n, m) {
444
- return ((n % m) + m) % m;
445
- }
446
-
447
- this.$get = ["$dateFormatter", "$dateParser", "$sce", function($dateFormatter, $dateParser, $sce) {
448
-
449
- return function(picker) {
450
-
451
- var scope = picker.$scope;
452
- var options = picker.$options;
453
-
454
- var lang = options.lang;
455
- var formatDate = function(date, format) {
456
- return $dateFormatter.formatDate(date, format, lang);
457
- };
458
- var dateParser = $dateParser({format: options.dateFormat, lang: lang, strict: options.strictFormat});
459
-
460
- var weekDaysMin = $dateFormatter.weekdaysShort(lang);
461
- var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek));
462
- var weekDaysLabelsHtml = $sce.trustAsHtml('<th class="dow text-center">' + weekDaysLabels.join('</th><th class="dow text-center">') + '</th>');
463
-
464
- var startDate = picker.$date || (options.startDate ? dateParser.getDateForAttribute('startDate', options.startDate) : new Date());
465
- var viewDate = {year: startDate.getFullYear(), month: startDate.getMonth(), date: startDate.getDate()};
466
- var timezoneOffset = startDate.getTimezoneOffset() * 6e4;
467
-
468
- var views = [{
469
- format: options.dayFormat,
470
- split: 7,
471
- steps: { month: 1 },
472
- update: function(date, force) {
473
- if(!this.built || force || date.getFullYear() !== viewDate.year || date.getMonth() !== viewDate.month) {
474
- angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});
475
- picker.$build();
476
- } else if(date.getDate() !== viewDate.date) {
477
- viewDate.date = picker.$date.getDate();
478
- picker.$updateSelected();
479
- }
480
- },
481
- build: function() {
482
- var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1), firstDayOfMonthOffset = firstDayOfMonth.getTimezoneOffset();
483
- var firstDate = new Date(+firstDayOfMonth - mod(firstDayOfMonth.getDay() - options.startWeek, 7) * 864e5), firstDateOffset = firstDate.getTimezoneOffset();
484
- var today = new Date().toDateString();
485
- // Handle daylight time switch
486
- if(firstDateOffset !== firstDayOfMonthOffset) firstDate = new Date(+firstDate + (firstDateOffset - firstDayOfMonthOffset) * 60e3);
487
- var days = [], day;
488
- for(var i = 0; i < 42; i++) { // < 7 * 6
489
- day = dateParser.daylightSavingAdjust(new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i));
490
- days.push({date: day, isToday: day.toDateString() === today, label: formatDate(day, this.format), selected: picker.$date && this.isSelected(day), muted: day.getMonth() !== viewDate.month, disabled: this.isDisabled(day)});
491
- }
492
- scope.title = formatDate(firstDayOfMonth, options.monthTitleFormat);
493
- scope.showLabels = true;
494
- scope.labels = weekDaysLabelsHtml;
495
- scope.rows = split(days, this.split);
496
- this.built = true;
497
- },
498
- isSelected: function(date) {
499
- return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth() && date.getDate() === picker.$date.getDate();
500
- },
501
- isDisabled: function(date) {
502
- var time = date.getTime();
503
-
504
- // Disabled because of min/max date.
505
- if (time < options.minDate || time > options.maxDate) return true;
506
-
507
- // Disabled due to being a disabled day of the week
508
- if (options.daysOfWeekDisabled.indexOf(date.getDay()) !== -1) return true;
509
-
510
- // Disabled because of disabled date range.
511
- if (options.disabledDateRanges) {
512
- for (var i = 0; i < options.disabledDateRanges.length; i++) {
513
- if (time >= options.disabledDateRanges[i].start && time <= options.disabledDateRanges[i].end) {
514
- return true;
515
- }
516
- }
517
- }
518
-
519
- return false;
520
- },
521
- onKeyDown: function(evt) {
522
- if (!picker.$date) {
523
- return;
524
- }
525
- var actualTime = picker.$date.getTime();
526
- var newDate;
527
-
528
- if(evt.keyCode === 37) newDate = new Date(actualTime - 1 * 864e5);
529
- else if(evt.keyCode === 38) newDate = new Date(actualTime - 7 * 864e5);
530
- else if(evt.keyCode === 39) newDate = new Date(actualTime + 1 * 864e5);
531
- else if(evt.keyCode === 40) newDate = new Date(actualTime + 7 * 864e5);
532
-
533
- if (!this.isDisabled(newDate)) picker.select(newDate, true);
534
- }
535
- }, {
536
- name: 'month',
537
- format: options.monthFormat,
538
- split: 4,
539
- steps: { year: 1 },
540
- update: function(date, force) {
541
- if(!this.built || date.getFullYear() !== viewDate.year) {
542
- angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});
543
- picker.$build();
544
- } else if(date.getMonth() !== viewDate.month) {
545
- angular.extend(viewDate, {month: picker.$date.getMonth(), date: picker.$date.getDate()});
546
- picker.$updateSelected();
547
- }
548
- },
549
- build: function() {
550
- var firstMonth = new Date(viewDate.year, 0, 1);
551
- var months = [], month;
552
- for (var i = 0; i < 12; i++) {
553
- month = new Date(viewDate.year, i, 1);
554
- months.push({date: month, label: formatDate(month, this.format), selected: picker.$isSelected(month), disabled: this.isDisabled(month)});
555
- }
556
- scope.title = formatDate(month, options.yearTitleFormat);
557
- scope.showLabels = false;
558
- scope.rows = split(months, this.split);
559
- this.built = true;
560
- },
561
- isSelected: function(date) {
562
- return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth();
563
- },
564
- isDisabled: function(date) {
565
- var lastDate = +new Date(date.getFullYear(), date.getMonth() + 1, 0);
566
- return lastDate < options.minDate || date.getTime() > options.maxDate;
567
- },
568
- onKeyDown: function(evt) {
569
- if (!picker.$date) {
570
- return;
571
- }
572
- var actualMonth = picker.$date.getMonth();
573
- var newDate = new Date(picker.$date);
574
-
575
- if(evt.keyCode === 37) newDate.setMonth(actualMonth - 1);
576
- else if(evt.keyCode === 38) newDate.setMonth(actualMonth - 4);
577
- else if(evt.keyCode === 39) newDate.setMonth(actualMonth + 1);
578
- else if(evt.keyCode === 40) newDate.setMonth(actualMonth + 4);
579
-
580
- if (!this.isDisabled(newDate)) picker.select(newDate, true);
581
- }
582
- }, {
583
- name: 'year',
584
- format: options.yearFormat,
585
- split: 4,
586
- steps: { year: 12 },
587
- update: function(date, force) {
588
- if(!this.built || force || parseInt(date.getFullYear()/20, 10) !== parseInt(viewDate.year/20, 10)) {
589
- angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});
590
- picker.$build();
591
- } else if(date.getFullYear() !== viewDate.year) {
592
- angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});
593
- picker.$updateSelected();
594
- }
595
- },
596
- build: function() {
597
- var firstYear = viewDate.year - viewDate.year % (this.split * 3);
598
- var years = [], year;
599
- for (var i = 0; i < 12; i++) {
600
- year = new Date(firstYear + i, 0, 1);
601
- years.push({date: year, label: formatDate(year, this.format), selected: picker.$isSelected(year), disabled: this.isDisabled(year)});
602
- }
603
- scope.title = years[0].label + '-' + years[years.length - 1].label;
604
- scope.showLabels = false;
605
- scope.rows = split(years, this.split);
606
- this.built = true;
607
- },
608
- isSelected: function(date) {
609
- return picker.$date && date.getFullYear() === picker.$date.getFullYear();
610
- },
611
- isDisabled: function(date) {
612
- var lastDate = +new Date(date.getFullYear() + 1, 0, 0);
613
- return lastDate < options.minDate || date.getTime() > options.maxDate;
614
- },
615
- onKeyDown: function(evt) {
616
- if (!picker.$date) {
617
- return;
618
- }
619
- var actualYear = picker.$date.getFullYear(),
620
- newDate = new Date(picker.$date);
621
-
622
- if(evt.keyCode === 37) newDate.setYear(actualYear - 1);
623
- else if(evt.keyCode === 38) newDate.setYear(actualYear - 4);
624
- else if(evt.keyCode === 39) newDate.setYear(actualYear + 1);
625
- else if(evt.keyCode === 40) newDate.setYear(actualYear + 4);
626
-
627
- if (!this.isDisabled(newDate)) picker.select(newDate, true);
628
- }
629
- }];
630
-
631
- return {
632
- views: options.minView ? Array.prototype.slice.call(views, options.minView) : views,
633
- viewDate: viewDate
634
- };
635
-
636
- };
637
-
638
- }];
639
-
640
- });