spiderfw 0.5.19 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. data/CHANGELOG +7 -0
  2. data/VERSION +1 -1
  3. data/apps/core/auth/lib/rbac.rb +7 -2
  4. data/apps/core/auth/models/mixins/rbac_provider.rb +66 -4
  5. data/apps/core/components/assets.rb +63 -33
  6. data/apps/core/components/public/js/jquery/{jquery-1.4.3.js → jquery-1.5.2.js} +2617 -1126
  7. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/overlay/overlay.apple.js +155 -0
  8. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/overlay/overlay.js +293 -0
  9. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/scrollable/scrollable.js +335 -0
  10. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/tabs/tabs.css +59 -0
  11. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/tabs/tabs.js +283 -0
  12. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/toolbox/toolbox.expose.js +224 -0
  13. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/tooltip/tooltip.dynamic.js +150 -0
  14. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/tooltip/tooltip.js +343 -0
  15. data/apps/core/components/public/js/jquery/jquery-tools-1.2.5/tooltip/tooltip.slide.js +78 -0
  16. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/button_bg.png +0 -0
  17. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/datepicker.gif +0 -0
  18. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/icon_sprite.png +0 -0
  19. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/progress_bar.gif +0 -0
  20. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/slider_h_bg.gif +0 -0
  21. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/slider_handles.png +0 -0
  22. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/slider_v_bg.gif +0 -0
  23. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/tab_bg.gif +0 -0
  24. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/the_gradient.gif +0 -0
  25. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-anim_basic_16x16.gif +0 -0
  26. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  27. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  28. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_flat_10_000000_40x100.png +0 -0
  29. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  30. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  31. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  32. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  33. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  34. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  35. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-icons_222222_256x240.png +0 -0
  36. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-icons_228ef1_256x240.png +0 -0
  37. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-icons_ef8c08_256x240.png +0 -0
  38. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-icons_ffd27a_256x240.png +0 -0
  39. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/images/ui-icons_ffffff_256x240.png +0 -0
  40. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4 → jquery-ui-1.8.11}/css/Aristo/jquery-ui.custom.css +0 -0
  41. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-af.js +0 -0
  42. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-ar-DZ.js +23 -0
  43. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ar.js +7 -8
  44. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-az.js +0 -0
  45. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-bg.js +0 -0
  46. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-bs.js +0 -0
  47. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ca.js +0 -0
  48. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-cs.js +0 -0
  49. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-da.js +0 -0
  50. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-de.js +0 -0
  51. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-el.js +0 -0
  52. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-en-AU.js +23 -0
  53. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-en-GB.js +0 -0
  54. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-en-NZ.js +23 -0
  55. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-eo.js +0 -0
  56. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-es.js +0 -0
  57. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-et.js +0 -0
  58. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-eu.js +0 -0
  59. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-fa.js +0 -0
  60. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-fi.js +0 -0
  61. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-fo.js +0 -0
  62. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-fr-CH.js +0 -0
  63. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-fr.js +12 -10
  64. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-gl.js +23 -0
  65. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-he.js +0 -0
  66. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-hr.js +0 -0
  67. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-hu.js +1 -1
  68. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-hy.js +0 -0
  69. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-id.js +0 -0
  70. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-is.js +0 -0
  71. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-it.js +0 -0
  72. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ja.js +0 -0
  73. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ko.js +0 -0
  74. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-kz.js +23 -0
  75. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-lt.js +0 -0
  76. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-lv.js +0 -0
  77. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-ml.js +23 -0
  78. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ms.js +0 -0
  79. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-nl.js +0 -0
  80. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-no.js +23 -0
  81. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-pl.js +0 -0
  82. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-pt-BR.js +0 -0
  83. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-pt.js +22 -0
  84. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-rm.js +21 -0
  85. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ro.js +0 -0
  86. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ru.js +1 -1
  87. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-sk.js +0 -0
  88. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-sl.js +0 -0
  89. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-sq.js +0 -0
  90. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-sr-SR.js +0 -0
  91. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-sr.js +0 -0
  92. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-sv.js +0 -0
  93. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-ta.js +0 -0
  94. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-th.js +1 -1
  95. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/i18n/jquery.ui.datepicker-tj.js +23 -0
  96. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-tr.js +0 -0
  97. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-uk.js +0 -0
  98. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-vi.js +0 -0
  99. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-zh-CN.js +0 -0
  100. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-zh-HK.js +0 -0
  101. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/i18n/jquery.ui.datepicker-zh-TW.js +0 -0
  102. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.blind.js +3 -3
  103. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.bounce.js +3 -3
  104. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.clip.js +3 -3
  105. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.core.js +48 -15
  106. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.drop.js +3 -3
  107. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.explode.js +2 -2
  108. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/jquery.effects.fade.js +32 -0
  109. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.fold.js +3 -3
  110. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.highlight.js +2 -2
  111. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.pulsate.js +2 -2
  112. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.scale.js +4 -4
  113. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.shake.js +3 -3
  114. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.slide.js +4 -4
  115. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.effects.transfer.js +2 -2
  116. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.accordion.js +33 -20
  117. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.autocomplete.js +104 -42
  118. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.button.js +35 -13
  119. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.core.js +111 -84
  120. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.datepicker.js +87 -46
  121. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.dialog.js +105 -75
  122. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.draggable.js +17 -15
  123. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.droppable.js +5 -5
  124. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.mouse.js +16 -11
  125. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.position.js +51 -32
  126. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.progressbar.js +24 -10
  127. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.resizable.js +7 -7
  128. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.selectable.js +3 -3
  129. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.slider.js +9 -7
  130. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.sortable.js +22 -20
  131. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.tabs.js +15 -14
  132. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → jquery-ui-1.8.11}/ui/jquery.ui.widget.js +50 -25
  133. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → plugins/bsmselect}/GPL-LICENSE.txt +1 -1
  134. data/apps/core/components/public/js/jquery/{jquery-ui-1.8.4/development-bundle → plugins/bsmselect}/MIT-LICENSE.txt +3 -7
  135. data/apps/core/components/public/js/jquery/plugins/bsmselect/README.md +185 -0
  136. data/apps/core/components/public/js/jquery/plugins/bsmselect/css/jquery.bsmselect.css +64 -0
  137. data/apps/core/components/public/js/jquery/plugins/bsmselect/js/jquery.bsmselect.compatibility.js +60 -0
  138. data/apps/core/components/public/js/jquery/plugins/bsmselect/js/jquery.bsmselect.js +381 -0
  139. data/apps/core/components/public/js/jquery/plugins/bsmselect/js/jquery.bsmselect.sortable.js +49 -0
  140. data/apps/core/components/public/js/plugins/sortable.js +16 -7
  141. data/apps/core/components/public/js/spider.js +60 -41
  142. data/apps/core/components/widgets/admin/admin.shtml +1 -1
  143. data/apps/core/components/widgets/list/list.shtml +2 -2
  144. data/apps/core/components/widgets/month_calendar/month_calendar.shtml +23 -20
  145. data/apps/core/components/widgets/switcher/switcher.rb +77 -21
  146. data/apps/core/components/widgets/switcher/templates/default.shtml +8 -0
  147. data/apps/core/components/widgets/switcher/templates/table.shtml +15 -0
  148. data/apps/core/components/widgets/table/table.rb +4 -1
  149. data/apps/core/components/widgets/table/table.shtml +10 -8
  150. data/apps/core/forms/public/css/form.css +9 -1
  151. data/apps/core/forms/public/date_time.js +14 -2
  152. data/apps/core/forms/public/input.js +1 -1
  153. data/apps/core/forms/public/select.js +4 -3
  154. data/apps/core/forms/tags/element_row.erb +11 -2
  155. data/apps/core/forms/widgets/inputs/date_time/date_time.rb +9 -0
  156. data/apps/core/forms/widgets/inputs/date_time/date_time.shtml +1 -1
  157. data/apps/core/forms/widgets/inputs/html_area/html_area.shtml +2 -2
  158. data/apps/core/forms/widgets/inputs/input/input.rb +0 -3
  159. data/apps/core/forms/widgets/inputs/select/select.shtml +2 -2
  160. data/apps/messenger/backends/email/sendmail.rb +20 -0
  161. data/apps/messenger/backends/email/smtp.rb +12 -14
  162. data/apps/messenger/backends/email/test.rb +20 -0
  163. data/apps/messenger/config/options.rb +9 -9
  164. data/apps/messenger/config/test.config.yml +2 -0
  165. data/apps/messenger/controllers/mixins/messenger_helper.rb +41 -15
  166. data/apps/messenger/lib/email_backend.rb +10 -0
  167. data/apps/messenger/messenger.rb +45 -26
  168. data/apps/messenger/test/features/attachments.feature +26 -0
  169. data/apps/messenger/test/features/messenger_helper.feature +31 -0
  170. data/apps/messenger/test/features/sending_email.feature +10 -0
  171. data/apps/messenger/test/features/step_definitions/common_steps.rb +11 -0
  172. data/apps/messenger/test/features/step_definitions/email_steps.rb +98 -0
  173. data/apps/messenger/test/features/support/env.rb +11 -0
  174. data/apps/messenger/test/files/test_file1.txt +1 -0
  175. data/apps/messenger/test/lib/controllers/mail_test_controller.rb +34 -0
  176. data/apps/messenger/test/templates/email/multipart.html.erb +1 -0
  177. data/apps/messenger/test/templates/email/multipart.txt.erb +1 -0
  178. data/apps/messenger/test/templates/email/simple.erb +1 -0
  179. data/apps/messenger/test/templates/email/vars.erb +1 -0
  180. data/lib/spiderfw/cmd/cmd.rb +4 -0
  181. data/lib/spiderfw/cmd/commands/webserver.rb +12 -59
  182. data/lib/spiderfw/config/configuration.rb +4 -0
  183. data/lib/spiderfw/config/options/spider.rb +25 -8
  184. data/lib/spiderfw/controller/controller.rb +10 -4
  185. data/lib/spiderfw/controller/first_responder.rb +6 -20
  186. data/lib/spiderfw/controller/http_controller.rb +2 -1
  187. data/lib/spiderfw/controller/mixins/http_mixin.rb +12 -1
  188. data/lib/spiderfw/controller/mixins/visual.rb +3 -16
  189. data/lib/spiderfw/env.rb +1 -1
  190. data/lib/spiderfw/http/server.rb +178 -2
  191. data/lib/spiderfw/model/base_model.rb +142 -111
  192. data/lib/spiderfw/model/data_type.rb +15 -0
  193. data/lib/spiderfw/model/datatypes/decimal.rb +8 -0
  194. data/lib/spiderfw/model/datatypes/pk.rb +29 -0
  195. data/lib/spiderfw/model/datatypes.rb +1 -0
  196. data/lib/spiderfw/model/element.rb +5 -1
  197. data/lib/spiderfw/model/extended_models/managed.rb +1 -1
  198. data/lib/spiderfw/model/junction.rb +23 -0
  199. data/lib/spiderfw/model/mappers/db_mapper.rb +96 -80
  200. data/lib/spiderfw/model/mappers/document_mapper.rb +315 -0
  201. data/lib/spiderfw/model/mappers/mapper.rb +164 -75
  202. data/lib/spiderfw/model/mixins/list.rb +1 -0
  203. data/lib/spiderfw/model/mixins/versioned.rb +63 -27
  204. data/lib/spiderfw/model/model.rb +36 -9
  205. data/lib/spiderfw/model/query_funcs.rb +3 -0
  206. data/lib/spiderfw/model/query_set.rb +21 -1
  207. data/lib/spiderfw/model/storage/base_storage.rb +259 -6
  208. data/lib/spiderfw/model/storage/{db/db_connection_pool.rb → connection_pool.rb} +25 -21
  209. data/lib/spiderfw/model/storage/db/adapters/mysql.rb +25 -5
  210. data/lib/spiderfw/model/storage/db/adapters/oracle.rb +1 -1
  211. data/lib/spiderfw/model/storage/db/connectors/jdbc_oracle.rb +2 -2
  212. data/lib/spiderfw/model/storage/db/connectors/oci8.rb +3 -4
  213. data/lib/spiderfw/model/storage/db/db_storage.rb +18 -219
  214. data/lib/spiderfw/model/storage/document/adapters/mongodb.rb +307 -0
  215. data/lib/spiderfw/model/storage/document/document.rb +7 -0
  216. data/lib/spiderfw/model/storage/document/document_storage.rb +34 -0
  217. data/lib/spiderfw/model/storage.rb +23 -11
  218. data/lib/spiderfw/model/unit_of_work.rb +45 -22
  219. data/lib/spiderfw/spider.rb +660 -0
  220. data/lib/spiderfw/templates/blocks/html.rb +4 -2
  221. data/lib/spiderfw/templates/blocks/run.rb +1 -1
  222. data/lib/spiderfw/templates/blocks/tag_if.rb +1 -1
  223. data/lib/spiderfw/templates/blocks/widget.rb +1 -1
  224. data/lib/spiderfw/templates/layout.rb +29 -5
  225. data/lib/spiderfw/templates/template.rb +72 -7
  226. data/lib/spiderfw/templates/template_blocks.rb +1 -1
  227. data/lib/spiderfw/test/capybara.rb +7 -0
  228. data/lib/spiderfw/test/cucumber.rb +12 -0
  229. data/lib/spiderfw/test/page_object.rb +29 -0
  230. data/lib/spiderfw/test/spec.rb +20 -0
  231. data/lib/spiderfw/test/stubs/mapper_stub.rb +18 -0
  232. data/lib/spiderfw/test/stubs/storage_stub.rb +23 -0
  233. data/lib/spiderfw/test/unit.rb +23 -0
  234. data/lib/spiderfw/test.rb +89 -0
  235. data/lib/spiderfw/utils/json.rb +6 -0
  236. data/lib/spiderfw/utils/logger.rb +17 -4
  237. data/lib/spiderfw/utils/loggers/apache_commons_logger.rb +61 -0
  238. data/lib/spiderfw/utils/monkey/date_time.rb +2 -2
  239. data/lib/spiderfw/utils/monkey/module.rb +3 -1
  240. data/lib/spiderfw/utils/profiling.rb +2 -2
  241. data/lib/spiderfw/widget/widget.rb +31 -13
  242. data/lib/spiderfw.rb +1 -597
  243. data/spider.gemspec +9 -10
  244. metadata +193 -132
  245. data/apps/admin/_init.rb +0 -9
  246. data/apps/admin/controllers/admin_controller.rb +0 -12
  247. data/apps/admin/widgets/dashboard_widget/dashboard_widget.rb +0 -8
  248. data/apps/core/components/public/js/jquery/jquery-ui-1.8.4/development-bundle/AUTHORS.txt +0 -30
  249. data/apps/core/components/public/js/jquery/jquery-ui-1.8.4/development-bundle/ui/i18n/jquery-ui-i18n.js +0 -1176
  250. data/apps/core/components/public/js/jquery/jquery-ui-1.8.4/development-bundle/ui/i18n/jquery.ui.datepicker-no.js +0 -23
  251. data/apps/core/components/public/js/jquery/jquery-ui-1.8.4/development-bundle/version.txt +0 -1
  252. data/apps/core/components/public/js/jquery/plugins/asmselect/jquery.asmselect.css +0 -64
  253. data/apps/core/components/public/js/jquery/plugins/asmselect/jquery.asmselect.js +0 -407
  254. data/apps/core/components/widgets/switcher/switcher.shtml +0 -17
  255. data/apps/master/po/master.pot +0 -400
@@ -1,7 +1,7 @@
1
1
  /*
2
- * jQuery UI Datepicker 1.8.4
2
+ * jQuery UI Datepicker @VERSION
3
3
  *
4
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
5
  * Dual licensed under the MIT or GPL Version 2 licenses.
6
6
  * http://jquery.org/license
7
7
  *
@@ -12,7 +12,7 @@
12
12
  */
13
13
  (function( $, undefined ) {
14
14
 
15
- $.extend($.ui, { datepicker: { version: "1.8.4" } });
15
+ $.extend($.ui, { datepicker: { version: "@VERSION" } });
16
16
 
17
17
  var PROP_NAME = 'datepicker';
18
18
  var dpuuid = new Date().getTime();
@@ -107,7 +107,7 @@ function Datepicker() {
107
107
  autoSize: false // True to size the input for the date format, false to leave as is
108
108
  };
109
109
  $.extend(this._defaults, this.regional['']);
110
- this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');
110
+ this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>');
111
111
  }
112
112
 
113
113
  $.extend(Datepicker.prototype, {
@@ -167,7 +167,7 @@ $.extend(Datepicker.prototype, {
167
167
 
168
168
  /* Create a new instance object. */
169
169
  _newInst: function(target, inline) {
170
- var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\$1'); // escape jQuery meta chars
170
+ var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
171
171
  return {id: id, input: target, // associated target
172
172
  selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
173
173
  drawMonth: 0, drawYear: 0, // month being drawn
@@ -272,6 +272,7 @@ $.extend(Datepicker.prototype, {
272
272
  this._setDate(inst, this._getDefaultDate(inst), true);
273
273
  this._updateDatepicker(inst);
274
274
  this._updateAlternate(inst);
275
+ inst.dpDiv.show();
275
276
  },
276
277
 
277
278
  /* Pop-up the date picker in a "dialog" box.
@@ -443,7 +444,14 @@ $.extend(Datepicker.prototype, {
443
444
  this._hideDatepicker();
444
445
  }
445
446
  var date = this._getDateDatepicker(target, true);
447
+ var minDate = this._getMinMaxDate(inst, 'min');
448
+ var maxDate = this._getMinMaxDate(inst, 'max');
446
449
  extendRemove(inst.settings, settings);
450
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
451
+ if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
452
+ inst.settings.minDate = this._formatDate(inst, minDate);
453
+ if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
454
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
447
455
  this._attachments($(target), inst);
448
456
  this._autoSize(inst);
449
457
  this._setDateDatepicker(target, date);
@@ -499,8 +507,8 @@ $.extend(Datepicker.prototype, {
499
507
  case 9: $.datepicker._hideDatepicker();
500
508
  handled = false;
501
509
  break; // hide on tab out
502
- case 13: var sel = $('td.' + $.datepicker._dayOverClass, inst.dpDiv).
503
- add($('td.' + $.datepicker._currentClass, inst.dpDiv));
510
+ case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' +
511
+ $.datepicker._currentClass + ')', inst.dpDiv);
504
512
  if (sel[0])
505
513
  $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
506
514
  else
@@ -564,7 +572,7 @@ $.extend(Datepicker.prototype, {
564
572
  if ($.datepicker._get(inst, 'constrainInput')) {
565
573
  var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
566
574
  var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
567
- return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
575
+ return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
568
576
  }
569
577
  },
570
578
 
@@ -624,6 +632,8 @@ $.extend(Datepicker.prototype, {
624
632
  }
625
633
  var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
626
634
  $.datepicker._pos = null;
635
+ //to avoid flashes on Firefox
636
+ inst.dpDiv.empty();
627
637
  // determine sizing offscreen
628
638
  inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
629
639
  $.datepicker._updateDatepicker(inst);
@@ -638,10 +648,12 @@ $.extend(Datepicker.prototype, {
638
648
  var duration = $.datepicker._get(inst, 'duration');
639
649
  var postProcess = function() {
640
650
  $.datepicker._datepickerShowing = true;
641
- var borders = $.datepicker._getBorders(inst.dpDiv);
642
- inst.dpDiv.find('iframe.ui-datepicker-cover'). // IE6- only
643
- css({left: -borders[0], top: -borders[1],
651
+ var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
652
+ if( !! cover.length ){
653
+ var borders = $.datepicker._getBorders(inst.dpDiv);
654
+ cover.css({left: -borders[0], top: -borders[1],
644
655
  width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
656
+ }
645
657
  };
646
658
  inst.dpDiv.zIndex($(input).zIndex()+1);
647
659
  if ($.effects && $.effects[showAnim])
@@ -660,12 +672,12 @@ $.extend(Datepicker.prototype, {
660
672
  _updateDatepicker: function(inst) {
661
673
  var self = this;
662
674
  var borders = $.datepicker._getBorders(inst.dpDiv);
663
- inst.dpDiv.empty().append(this._generateHTML(inst))
664
- .find('iframe.ui-datepicker-cover') // IE6- only
665
- .css({left: -borders[0], top: -borders[1],
666
- width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
667
- .end()
668
- .find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
675
+ inst.dpDiv.empty().append(this._generateHTML(inst));
676
+ var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
677
+ if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
678
+ cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
679
+ }
680
+ inst.dpDiv.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
669
681
  .bind('mouseout', function(){
670
682
  $(this).removeClass('ui-state-hover');
671
683
  if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
@@ -695,8 +707,21 @@ $.extend(Datepicker.prototype, {
695
707
  inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
696
708
  'Class']('ui-datepicker-rtl');
697
709
  if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
698
- inst.input.is(':visible') && !inst.input.is(':disabled'))
710
+ // #6694 - don't focus the input if it's already focused
711
+ // this breaks the change event in IE
712
+ inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
699
713
  inst.input.focus();
714
+ // deffered render of the years select (to avoid flashes on Firefox)
715
+ if( inst.yearshtml ){
716
+ var origyearshtml = inst.yearshtml;
717
+ setTimeout(function(){
718
+ //assure that inst.yearshtml didn't change.
719
+ if( origyearshtml === inst.yearshtml ){
720
+ inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
721
+ }
722
+ origyearshtml = inst.yearshtml = null;
723
+ }, 0);
724
+ }
700
725
  },
701
726
 
702
727
  /* Retrieve the size of left and top borders for an element.
@@ -736,7 +761,7 @@ $.extend(Datepicker.prototype, {
736
761
  _findPos: function(obj) {
737
762
  var inst = this._getInst(obj);
738
763
  var isRTL = this._get(inst, 'isRTL');
739
- while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
764
+ while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
740
765
  obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
741
766
  }
742
767
  var position = $(obj).offset();
@@ -950,6 +975,8 @@ $.extend(Datepicker.prototype, {
950
975
  if (value == '')
951
976
  return null;
952
977
  var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
978
+ shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
979
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
953
980
  var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
954
981
  var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
955
982
  var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
@@ -968,9 +995,9 @@ $.extend(Datepicker.prototype, {
968
995
  };
969
996
  // Extract a number from the string value
970
997
  var getNumber = function(match) {
971
- lookAhead(match);
998
+ var isDoubled = lookAhead(match);
972
999
  var size = (match == '@' ? 14 : (match == '!' ? 20 :
973
- (match == 'y' ? 4 : (match == 'o' ? 3 : 2))));
1000
+ (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
974
1001
  var digits = new RegExp('^\\d{1,' + size + '}');
975
1002
  var num = value.substring(iValue).match(digits);
976
1003
  if (!num)
@@ -982,7 +1009,7 @@ $.extend(Datepicker.prototype, {
982
1009
  var getName = function(match, shortNames, longNames) {
983
1010
  var names = (lookAhead(match) ? longNames : shortNames);
984
1011
  for (var i = 0; i < names.length; i++) {
985
- if (value.substr(iValue, names[i].length) == names[i]) {
1012
+ if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) {
986
1013
  iValue += names[i].length;
987
1014
  return i + 1;
988
1015
  }
@@ -1300,16 +1327,16 @@ $.extend(Datepicker.prototype, {
1300
1327
  }
1301
1328
  return new Date(year, month, day);
1302
1329
  };
1303
- date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) :
1304
- (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
1305
- date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
1306
- if (date) {
1307
- date.setHours(0);
1308
- date.setMinutes(0);
1309
- date.setSeconds(0);
1310
- date.setMilliseconds(0);
1330
+ var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
1331
+ (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
1332
+ newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
1333
+ if (newDate) {
1334
+ newDate.setHours(0);
1335
+ newDate.setMinutes(0);
1336
+ newDate.setSeconds(0);
1337
+ newDate.setMilliseconds(0);
1311
1338
  }
1312
- return this._daylightSavingAdjust(date);
1339
+ return this._daylightSavingAdjust(newDate);
1313
1340
  },
1314
1341
 
1315
1342
  /* Handle switch to/from daylight saving.
@@ -1326,13 +1353,13 @@ $.extend(Datepicker.prototype, {
1326
1353
 
1327
1354
  /* Set the date(s) directly. */
1328
1355
  _setDate: function(inst, date, noChange) {
1329
- var clear = !(date);
1356
+ var clear = !date;
1330
1357
  var origMonth = inst.selectedMonth;
1331
1358
  var origYear = inst.selectedYear;
1332
- date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
1333
- inst.selectedDay = inst.currentDay = date.getDate();
1334
- inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
1335
- inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
1359
+ var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
1360
+ inst.selectedDay = inst.currentDay = newDate.getDate();
1361
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
1362
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
1336
1363
  if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
1337
1364
  this._notifyChange(inst);
1338
1365
  this._adjustInstDate(inst);
@@ -1493,7 +1520,7 @@ $.extend(Datepicker.prototype, {
1493
1520
  (otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
1494
1521
  (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
1495
1522
  (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
1496
- (printDate.getTime() == selectedDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
1523
+ (printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
1497
1524
  (otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
1498
1525
  '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
1499
1526
  printDate.setDate(printDate.getDate() + 1);
@@ -1548,6 +1575,7 @@ $.extend(Datepicker.prototype, {
1548
1575
  if (!showMonthAfterYear)
1549
1576
  html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
1550
1577
  // year selection
1578
+ inst.yearshtml = '';
1551
1579
  if (secondary || !changeYear)
1552
1580
  html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
1553
1581
  else {
@@ -1564,16 +1592,24 @@ $.extend(Datepicker.prototype, {
1564
1592
  var endYear = Math.max(year, determineYear(years[1] || ''));
1565
1593
  year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
1566
1594
  endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
1567
- html += '<select class="ui-datepicker-year" ' +
1595
+ inst.yearshtml += '<select class="ui-datepicker-year" ' +
1568
1596
  'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
1569
1597
  'onclick="DP_jQuery_' + dpuuid + '.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
1570
1598
  '>';
1571
1599
  for (; year <= endYear; year++) {
1572
- html += '<option value="' + year + '"' +
1600
+ inst.yearshtml += '<option value="' + year + '"' +
1573
1601
  (year == drawYear ? ' selected="selected"' : '') +
1574
1602
  '>' + year + '</option>';
1575
1603
  }
1576
- html += '</select>';
1604
+ inst.yearshtml += '</select>';
1605
+ //when showing there is no need for later update
1606
+ if( ! $.browser.mozilla ){
1607
+ html += inst.yearshtml;
1608
+ inst.yearshtml = null;
1609
+ } else {
1610
+ // will be replaced later with inst.yearshtml
1611
+ html += '<select class="ui-datepicker-year"><option value="' + drawYear + '" selected="selected">' + drawYear + '</option></select>';
1612
+ }
1577
1613
  }
1578
1614
  html += this._get(inst, 'yearSuffix');
1579
1615
  if (showMonthAfterYear)
@@ -1601,9 +1637,9 @@ $.extend(Datepicker.prototype, {
1601
1637
  _restrictMinMax: function(inst, date) {
1602
1638
  var minDate = this._getMinMaxDate(inst, 'min');
1603
1639
  var maxDate = this._getMinMaxDate(inst, 'max');
1604
- date = (minDate && date < minDate ? minDate : date);
1605
- date = (maxDate && date > maxDate ? maxDate : date);
1606
- return date;
1640
+ var newDate = (minDate && date < minDate ? minDate : date);
1641
+ newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
1642
+ return newDate;
1607
1643
  },
1608
1644
 
1609
1645
  /* Notify change of month/year. */
@@ -1627,7 +1663,7 @@ $.extend(Datepicker.prototype, {
1627
1663
 
1628
1664
  /* Find the number of days in a given month. */
1629
1665
  _getDaysInMonth: function(year, month) {
1630
- return 32 - new Date(year, month, 32).getDate();
1666
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
1631
1667
  },
1632
1668
 
1633
1669
  /* Find the day of the week of the first of a month. */
@@ -1697,7 +1733,12 @@ function isArray(a) {
1697
1733
  Object - settings for attaching new datepicker functionality
1698
1734
  @return jQuery object */
1699
1735
  $.fn.datepicker = function(options){
1700
-
1736
+
1737
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
1738
+ if ( !this.length ) {
1739
+ return this;
1740
+ }
1741
+
1701
1742
  /* Initialise the date picker. */
1702
1743
  if (!$.datepicker.initialized) {
1703
1744
  $(document).mousedown($.datepicker._checkExternalClick).
@@ -1723,7 +1764,7 @@ $.fn.datepicker = function(options){
1723
1764
  $.datepicker = new Datepicker(); // singleton instance
1724
1765
  $.datepicker.initialized = false;
1725
1766
  $.datepicker.uuid = new Date().getTime();
1726
- $.datepicker.version = "1.8.4";
1767
+ $.datepicker.version = "@VERSION";
1727
1768
 
1728
1769
  // Workaround for #4055
1729
1770
  // Add another global to avoid noConflict issues with inline event handlers
@@ -1,7 +1,7 @@
1
1
  /*
2
- * jQuery UI Dialog 1.8.4
2
+ * jQuery UI Dialog @VERSION
3
3
  *
4
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
5
  * Dual licensed under the MIT or GPL Version 2 licenses.
6
6
  * http://jquery.org/license
7
7
  *
@@ -19,10 +19,25 @@
19
19
  (function( $, undefined ) {
20
20
 
21
21
  var uiDialogClasses =
22
- 'ui-dialog ' +
23
- 'ui-widget ' +
24
- 'ui-widget-content ' +
25
- 'ui-corner-all ';
22
+ 'ui-dialog ' +
23
+ 'ui-widget ' +
24
+ 'ui-widget-content ' +
25
+ 'ui-corner-all ',
26
+ sizeRelatedOptions = {
27
+ buttons: true,
28
+ height: true,
29
+ maxHeight: true,
30
+ maxWidth: true,
31
+ minHeight: true,
32
+ minWidth: true,
33
+ width: true
34
+ },
35
+ resizableRelatedOptions = {
36
+ maxHeight: true,
37
+ maxWidth: true,
38
+ minHeight: true,
39
+ minWidth: true
40
+ };
26
41
 
27
42
  $.widget("ui.dialog", {
28
43
  options: {
@@ -42,7 +57,6 @@ $.widget("ui.dialog", {
42
57
  position: {
43
58
  my: 'center',
44
59
  at: 'center',
45
- of: window,
46
60
  collision: 'fit',
47
61
  // ensure that the titlebar is never outside the document
48
62
  using: function(pos) {
@@ -67,10 +81,11 @@ $.widget("ui.dialog", {
67
81
  this.originalTitle = "";
68
82
  }
69
83
 
84
+ this.options.title = this.options.title || this.originalTitle;
70
85
  var self = this,
71
86
  options = self.options,
72
87
 
73
- title = options.title || self.originalTitle || '&#160;',
88
+ title = options.title || '&#160;',
74
89
  titleId = $.ui.dialog.getTitleId(self.element),
75
90
 
76
91
  uiDialog = (self.uiDialog = $('<div></div>'))
@@ -212,7 +227,7 @@ $.widget("ui.dialog", {
212
227
 
213
228
  close: function(event) {
214
229
  var self = this,
215
- maxZ;
230
+ maxZ, thisZ;
216
231
 
217
232
  if (false === self._trigger('beforeClose', event)) {
218
233
  return;
@@ -241,7 +256,10 @@ $.widget("ui.dialog", {
241
256
  maxZ = 0;
242
257
  $('.ui-dialog').each(function() {
243
258
  if (this !== self.uiDialog[0]) {
244
- maxZ = Math.max(maxZ, $(this).css('z-index'));
259
+ thisZ = $(this).css('z-index');
260
+ if(!isNaN(thisZ)) {
261
+ maxZ = Math.max(maxZ, thisZ);
262
+ }
245
263
  }
246
264
  });
247
265
  $.ui.dialog.maxZ = maxZ;
@@ -293,9 +311,6 @@ $.widget("ui.dialog", {
293
311
  uiDialog = self.uiDialog;
294
312
 
295
313
  self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
296
- if (uiDialog.next().length) {
297
- uiDialog.appendTo('body');
298
- }
299
314
  self._size();
300
315
  self._position(options.position);
301
316
  uiDialog.show(options.show);
@@ -328,8 +343,8 @@ $.widget("ui.dialog", {
328
343
  uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
329
344
  uiDialog.get()))).eq(0).focus();
330
345
 
331
- self._trigger('open');
332
346
  self._isOpen = true;
347
+ self._trigger('open');
333
348
 
334
349
  return self;
335
350
  },
@@ -356,10 +371,16 @@ $.widget("ui.dialog", {
356
371
  });
357
372
  }
358
373
  if (hasButtons) {
359
- $.each(buttons, function(name, fn) {
374
+ $.each(buttons, function(name, props) {
375
+ props = $.isFunction( props ) ?
376
+ { click: props, text: name } :
377
+ props;
360
378
  var button = $('<button type="button"></button>')
361
- .text(name)
362
- .click(function() { fn.apply(self.element[0], arguments); })
379
+ .attr( props, true )
380
+ .unbind('click')
381
+ .click(function() {
382
+ props.click.apply(self.element[0], arguments);
383
+ })
363
384
  .appendTo(uiButtonSet);
364
385
  if ($.fn.button) {
365
386
  button.button();
@@ -506,18 +527,40 @@ $.widget("ui.dialog", {
506
527
  this.uiDialog
507
528
  // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
508
529
  .css({ top: 0, left: 0 })
509
- .position(position);
530
+ .position($.extend({ of: window }, position));
510
531
  if (!isVisible) {
511
532
  this.uiDialog.hide();
512
533
  }
513
534
  },
514
535
 
515
- _setOption: function(key, value){
536
+ _setOptions: function( options ) {
516
537
  var self = this,
517
- uiDialog = self.uiDialog,
518
- isResizable = uiDialog.is(':data(resizable)'),
538
+ resizableOptions = {},
519
539
  resize = false;
520
540
 
541
+ $.each( options, function( key, value ) {
542
+ self._setOption( key, value );
543
+
544
+ if ( key in sizeRelatedOptions ) {
545
+ resize = true;
546
+ }
547
+ if ( key in resizableRelatedOptions ) {
548
+ resizableOptions[ key ] = value;
549
+ }
550
+ });
551
+
552
+ if ( resize ) {
553
+ this._size();
554
+ }
555
+ if ( this.uiDialog.is( ":data(resizable)" ) ) {
556
+ this.uiDialog.resizable( "option", resizableOptions );
557
+ }
558
+ },
559
+
560
+ _setOption: function(key, value){
561
+ var self = this,
562
+ uiDialog = self.uiDialog;
563
+
521
564
  switch (key) {
522
565
  //handling of deprecated beforeclose (vs beforeClose) option
523
566
  //Ticket #4669 http://dev.jqueryui.com/ticket/4669
@@ -527,10 +570,9 @@ $.widget("ui.dialog", {
527
570
  break;
528
571
  case "buttons":
529
572
  self._createButtons(value);
530
- resize = true;
531
573
  break;
532
574
  case "closeText":
533
- // convert whatever was passed in to a string, for text() to not throw up
575
+ // ensure that we always pass a string
534
576
  self.uiDialogTitlebarCloseText.text("" + value);
535
577
  break;
536
578
  case "dialogClass":
@@ -546,44 +588,21 @@ $.widget("ui.dialog", {
546
588
  }
547
589
  break;
548
590
  case "draggable":
549
- if (value) {
550
- self._makeDraggable();
551
- } else {
552
- uiDialog.draggable('destroy');
553
- }
554
- break;
555
- case "height":
556
- resize = true;
557
- break;
558
- case "maxHeight":
559
- if (isResizable) {
560
- uiDialog.resizable('option', 'maxHeight', value);
591
+ var isDraggable = uiDialog.is( ":data(draggable)" );
592
+ if ( isDraggable && !value ) {
593
+ uiDialog.draggable( "destroy" );
561
594
  }
562
- resize = true;
563
- break;
564
- case "maxWidth":
565
- if (isResizable) {
566
- uiDialog.resizable('option', 'maxWidth', value);
567
- }
568
- resize = true;
569
- break;
570
- case "minHeight":
571
- if (isResizable) {
572
- uiDialog.resizable('option', 'minHeight', value);
573
- }
574
- resize = true;
575
- break;
576
- case "minWidth":
577
- if (isResizable) {
578
- uiDialog.resizable('option', 'minWidth', value);
595
+
596
+ if ( !isDraggable && value ) {
597
+ self._makeDraggable();
579
598
  }
580
- resize = true;
581
599
  break;
582
600
  case "position":
583
601
  self._position(value);
584
602
  break;
585
603
  case "resizable":
586
604
  // currently resizable, becoming non-resizable
605
+ var isResizable = uiDialog.is( ":data(resizable)" );
587
606
  if (isResizable && !value) {
588
607
  uiDialog.resizable('destroy');
589
608
  }
@@ -602,15 +621,9 @@ $.widget("ui.dialog", {
602
621
  // convert whatever was passed in o a string, for html() to not throw up
603
622
  $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
604
623
  break;
605
- case "width":
606
- resize = true;
607
- break;
608
624
  }
609
625
 
610
626
  $.Widget.prototype._setOption.apply(self, arguments);
611
- if (resize) {
612
- self._size();
613
- }
614
627
  },
615
628
 
616
629
  _size: function() {
@@ -618,11 +631,12 @@ $.widget("ui.dialog", {
618
631
  * divs will both have width and height set, so we need to reset them
619
632
  */
620
633
  var options = this.options,
621
- nonContentHeight;
634
+ nonContentHeight,
635
+ minContentHeight,
636
+ isVisible = this.uiDialog.is( ":visible" );
622
637
 
623
638
  // reset content sizing
624
- // hide for non content measurement because height: 0 doesn't work in IE quirks mode (see #4350)
625
- this.element.css({
639
+ this.element.show().css({
626
640
  width: 'auto',
627
641
  minHeight: 0,
628
642
  height: 0
@@ -639,16 +653,26 @@ $.widget("ui.dialog", {
639
653
  width: options.width
640
654
  })
641
655
  .height();
642
-
643
- this.element
644
- .css(options.height === 'auto' ? {
645
- minHeight: Math.max(options.minHeight - nonContentHeight, 0),
646
- height: 'auto'
647
- } : {
648
- minHeight: 0,
649
- height: Math.max(options.height - nonContentHeight, 0)
650
- })
651
- .show();
656
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
657
+
658
+ if ( options.height === "auto" ) {
659
+ // only needed for IE6 support
660
+ if ( $.support.minHeight ) {
661
+ this.element.css({
662
+ minHeight: minContentHeight,
663
+ height: "auto"
664
+ });
665
+ } else {
666
+ this.uiDialog.show();
667
+ var autoHeight = this.element.css( "height", "auto" ).height();
668
+ if ( !isVisible ) {
669
+ this.uiDialog.hide();
670
+ }
671
+ this.element.height( Math.max( autoHeight, minContentHeight ) );
672
+ }
673
+ } else {
674
+ this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
675
+ }
652
676
 
653
677
  if (this.uiDialog.is(':data(resizable)')) {
654
678
  this.uiDialog.resizable('option', 'minHeight', this._minHeight());
@@ -657,7 +681,7 @@ $.widget("ui.dialog", {
657
681
  });
658
682
 
659
683
  $.extend($.ui.dialog, {
660
- version: "1.8.4",
684
+ version: "@VERSION",
661
685
 
662
686
  uuid: 0,
663
687
  maxZ: 0,
@@ -693,7 +717,10 @@ $.extend($.ui.dialog.overlay, {
693
717
  if ($.ui.dialog.overlay.instances.length) {
694
718
  $(document).bind($.ui.dialog.overlay.events, function(event) {
695
719
  // stop events if the z-index of the target is < the z-index of the overlay
696
- return ($(event.target).zIndex() >= $.ui.dialog.overlay.maxZ);
720
+ // we cannot return true when we don't want to cancel the event (#3523)
721
+ if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
722
+ return false;
723
+ }
697
724
  });
698
725
  }
699
726
  }, 1);
@@ -728,7 +755,10 @@ $.extend($.ui.dialog.overlay, {
728
755
  },
729
756
 
730
757
  destroy: function($el) {
731
- this.oldInstances.push(this.instances.splice($.inArray($el, this.instances), 1)[0]);
758
+ var indexOf = $.inArray($el, this.instances);
759
+ if (indexOf != -1){
760
+ this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
761
+ }
732
762
 
733
763
  if (this.instances.length === 0) {
734
764
  $([document, window]).unbind('.dialog-overlay');