rails-angular-strap 2.1.6 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
- });