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 Tabs 1.8.4
2
+ * jQuery UI Tabs @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
  *
@@ -63,7 +63,7 @@ $.widget( "ui.tabs", {
63
63
  },
64
64
 
65
65
  _tabId: function( a ) {
66
- return a.title && a.title.replace( /\s/g, "_" ).replace( /[^A-Za-z0-9\-_:\.]/g, "" ) ||
66
+ return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
67
67
  this.options.idPrefix + getNextTabId();
68
68
  },
69
69
 
@@ -103,7 +103,7 @@ $.widget( "ui.tabs", {
103
103
  fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
104
104
 
105
105
  this.list = this.element.find( "ol,ul" ).eq( 0 );
106
- this.lis = $( "li:has(a[href])", this.list );
106
+ this.lis = $( " > li:has(a[href])", this.list );
107
107
  this.anchors = this.lis.map(function() {
108
108
  return $( "a", this )[ 0 ];
109
109
  });
@@ -126,10 +126,10 @@ $.widget( "ui.tabs", {
126
126
 
127
127
  // inline tab
128
128
  if ( fragmentId.test( href ) ) {
129
- self.panels = self.panels.add( self._sanitizeSelector( href ) );
129
+ self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
130
130
  // remote tab
131
131
  // prevent loading the page itself if href is just "#"
132
- } else if ( href !== "#" ) {
132
+ } else if ( href && href !== "#" ) {
133
133
  // required for restore on destroy
134
134
  $.data( a, "href.tabs", href );
135
135
 
@@ -139,7 +139,7 @@ $.widget( "ui.tabs", {
139
139
 
140
140
  var id = self._tabId( a );
141
141
  a.href = "#" + id;
142
- var $panel = $( "#" + id );
142
+ var $panel = self.element.find( "#" + id );
143
143
  if ( !$panel.length ) {
144
144
  $panel = $( o.panelTemplate )
145
145
  .attr( "id", id )
@@ -210,13 +210,13 @@ $.widget( "ui.tabs", {
210
210
  this.lis.removeClass( "ui-tabs-selected ui-state-active" );
211
211
  // check for length avoids error when initializing empty list
212
212
  if ( o.selected >= 0 && this.anchors.length ) {
213
- this.panels.eq( o.selected ).removeClass( "ui-tabs-hide" );
213
+ self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
214
214
  this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
215
215
 
216
216
  // seems to be expected behavior that the show callback is fired
217
217
  self.element.queue( "tabs", function() {
218
218
  self._trigger( "show", null,
219
- self._ui( self.anchors[ o.selected ], self.panels[ o.selected ] ) );
219
+ self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
220
220
  });
221
221
 
222
222
  this.load( o.selected );
@@ -337,7 +337,7 @@ $.widget( "ui.tabs", {
337
337
  var el = this,
338
338
  $li = $(el).closest( "li" ),
339
339
  $hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
340
- $show = $( self._sanitizeSelector( el.hash ) );
340
+ $show = self.element.find( self._sanitizeSelector( el.hash ) );
341
341
 
342
342
  // If tab is already selected and not collapsible or tab disabled or
343
343
  // or is already loading or click callback returns false stop here.
@@ -346,6 +346,7 @@ $.widget( "ui.tabs", {
346
346
  if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
347
347
  $li.hasClass( "ui-state-disabled" ) ||
348
348
  $li.hasClass( "ui-state-processing" ) ||
349
+ self.panels.filter( ":animated" ).length ||
349
350
  self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
350
351
  this.blur();
351
352
  return false;
@@ -495,7 +496,7 @@ $.widget( "ui.tabs", {
495
496
  $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
496
497
 
497
498
  // try to find an existing element before creating a new one
498
- var $panel = $( "#" + id );
499
+ var $panel = self.element.find( "#" + id );
499
500
  if ( !$panel.length ) {
500
501
  $panel = $( o.panelTemplate )
501
502
  .attr( "id", id )
@@ -603,7 +604,7 @@ $.widget( "ui.tabs", {
603
604
  return this;
604
605
  },
605
606
 
606
- load: function( index ) {
607
+ load: function( index ) {
607
608
  index = this._getIndex( index );
608
609
  var self = this,
609
610
  o = this.options,
@@ -629,7 +630,7 @@ $.widget( "ui.tabs", {
629
630
  this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
630
631
  url: url,
631
632
  success: function( r, s ) {
632
- $( self._sanitizeSelector( a.hash ) ).html( r );
633
+ self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
633
634
 
634
635
  // take care of tab labels
635
636
  self._cleanup();
@@ -697,7 +698,7 @@ $.widget( "ui.tabs", {
697
698
  });
698
699
 
699
700
  $.extend( $.ui.tabs, {
700
- version: "1.8.4"
701
+ version: "@VERSION"
701
702
  });
702
703
 
703
704
  /*
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * jQuery UI Widget 1.8.4
2
+ * jQuery UI Widget @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
  *
@@ -9,20 +9,30 @@
9
9
  */
10
10
  (function( $, undefined ) {
11
11
 
12
- var _remove = $.fn.remove;
13
-
14
- $.fn.remove = function( selector, keepData ) {
15
- return this.each(function() {
16
- if ( !keepData ) {
17
- if ( !selector || $.filter( selector, [ this ] ).length ) {
18
- $( "*", this ).add( [ this ] ).each(function() {
19
- $( this ).triggerHandler( "remove" );
20
- });
21
- }
12
+ // jQuery 1.4+
13
+ if ( $.cleanData ) {
14
+ var _cleanData = $.cleanData;
15
+ $.cleanData = function( elems ) {
16
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
17
+ $( elem ).triggerHandler( "remove" );
22
18
  }
23
- return _remove.call( $(this), selector, keepData );
24
- });
25
- };
19
+ _cleanData( elems );
20
+ };
21
+ } else {
22
+ var _remove = $.fn.remove;
23
+ $.fn.remove = function( selector, keepData ) {
24
+ return this.each(function() {
25
+ if ( !keepData ) {
26
+ if ( !selector || $.filter( selector, [ this ] ).length ) {
27
+ $( "*", this ).add( [ this ] ).each(function() {
28
+ $( this ).triggerHandler( "remove" );
29
+ });
30
+ }
31
+ }
32
+ return _remove.call( $(this), selector, keepData );
33
+ });
34
+ };
35
+ }
26
36
 
27
37
  $.widget = function( name, base, prototype ) {
28
38
  var namespace = name.split( "." )[ 0 ],
@@ -80,7 +90,7 @@ $.widget.bridge = function( name, object ) {
80
90
  options;
81
91
 
82
92
  // prevent calls to internal methods
83
- if ( isMethodCall && options.substring( 0, 1 ) === "_" ) {
93
+ if ( isMethodCall && options.charAt( 0 ) === "_" ) {
84
94
  return returnValue;
85
95
  }
86
96
 
@@ -90,6 +100,15 @@ $.widget.bridge = function( name, object ) {
90
100
  methodValue = instance && $.isFunction( instance[options] ) ?
91
101
  instance[ options ].apply( instance, args ) :
92
102
  instance;
103
+ // TODO: add this back in 1.9 and use $.error() (see #5972)
104
+ // if ( !instance ) {
105
+ // throw "cannot call methods on " + name + " prior to initialization; " +
106
+ // "attempted to call method '" + options + "'";
107
+ // }
108
+ // if ( !$.isFunction( instance[options] ) ) {
109
+ // throw "no such method '" + options + "' for " + name + " widget instance";
110
+ // }
111
+ // var methodValue = instance[ options ].apply( instance, args );
93
112
  if ( methodValue !== instance && methodValue !== undefined ) {
94
113
  returnValue = methodValue;
95
114
  return false;
@@ -99,10 +118,7 @@ $.widget.bridge = function( name, object ) {
99
118
  this.each(function() {
100
119
  var instance = $.data( this, name );
101
120
  if ( instance ) {
102
- if ( options ) {
103
- instance.option( options );
104
- }
105
- instance._init();
121
+ instance.option( options || {} )._init();
106
122
  } else {
107
123
  $.data( this, name, new object( options, this ) );
108
124
  }
@@ -133,7 +149,7 @@ $.Widget.prototype = {
133
149
  this.element = $( element );
134
150
  this.options = $.extend( true, {},
135
151
  this.options,
136
- $.metadata && $.metadata.get( element )[ this.widgetName ],
152
+ this._getCreateOptions(),
137
153
  options );
138
154
 
139
155
  var self = this;
@@ -142,8 +158,12 @@ $.Widget.prototype = {
142
158
  });
143
159
 
144
160
  this._create();
161
+ this._trigger( "create" );
145
162
  this._init();
146
163
  },
164
+ _getCreateOptions: function() {
165
+ return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
166
+ },
147
167
  _create: function() {},
148
168
  _init: function() {},
149
169
 
@@ -164,12 +184,11 @@ $.Widget.prototype = {
164
184
  },
165
185
 
166
186
  option: function( key, value ) {
167
- var options = key,
168
- self = this;
187
+ var options = key;
169
188
 
170
189
  if ( arguments.length === 0 ) {
171
190
  // don't return a reference to the internal hash
172
- return $.extend( {}, self.options );
191
+ return $.extend( {}, this.options );
173
192
  }
174
193
 
175
194
  if (typeof key === "string" ) {
@@ -180,11 +199,17 @@ $.Widget.prototype = {
180
199
  options[ key ] = value;
181
200
  }
182
201
 
202
+ this._setOptions( options );
203
+
204
+ return this;
205
+ },
206
+ _setOptions: function( options ) {
207
+ var self = this;
183
208
  $.each( options, function( key, value ) {
184
209
  self._setOption( key, value );
185
210
  });
186
211
 
187
- return self;
212
+ return this;
188
213
  },
189
214
  _setOption: function( key, value ) {
190
215
  this.options[ key ] = value;
@@ -275,4 +275,4 @@ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
275
  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
276
  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
277
  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
- POSSIBILITY OF SUCH DAMAGES.
278
+ POSSIBILITY OF SUCH DAMAGES.
@@ -1,9 +1,5 @@
1
- Copyright (c) 2010 Paul Bakaus, http://jqueryui.com/
2
-
3
- This software consists of voluntary contributions made by many
4
- individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
5
- contribution history, see the revision history and logs, available
6
- at http://jquery-ui.googlecode.com/svn/
1
+ Copyright (c) 2008 by Ryan Cramer, http://www.ryancramer.com
2
+ Copyright (c) 2010 by Victor Berchet
7
3
 
8
4
  Permission is hereby granted, free of charge, to any person obtaining
9
5
  a copy of this software and associated documentation files (the
@@ -22,4 +18,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
18
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
19
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
20
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,185 @@
1
+ # bsmSelect - Better Select Multiple #
2
+
3
+ based on asmSelect - Alternate Select Multiple by Ryan Cramer
4
+
5
+ * [Google code project](http://code.google.com/p/jquery-asmselect/)
6
+ * [Github page](http://github.com/ryancramerdesign/jquery-asmSelect)
7
+ * [Ryan's article about asmSelect](http://www.ryancramer.com/journal/entries/select_multiple/)
8
+ * the original README can be found in the project root folder
9
+
10
+ ## Demo ##
11
+
12
+ [bsmSelect demo](http://www.suumit.com/projects/bsmSelect/examples/index.html)
13
+
14
+ ## Usage ##
15
+
16
+ Include jquery, bsmSelect, and css in document head:
17
+
18
+ <script type="text/javascript" src="jquery.js"></script>
19
+ <script type="text/javascript" src="jquery.bsmselect.js"></script>
20
+ <link rel="stylesheet" type="text/css" href="jquery.bsmselect.css" />
21
+
22
+ Use a jQuery selector in your document ready function:
23
+
24
+ jQuery(function($) {
25
+ $("select[multiple]").bsmSelect();
26
+ });
27
+
28
+ If desired, you can specify options when you call the plugin:
29
+
30
+ jQuery(function($) {
31
+ $("select[multiple]").bsmSelect({
32
+ addItemTarget: 'top'
33
+ });
34
+ });
35
+
36
+ The newly created select default option is the original select title attribute:
37
+
38
+ <select name="cities" multiple="multiple" title="Please select a city">
39
+ ...
40
+ </select>
41
+
42
+ ## Requirements ##
43
+
44
+ * jQuery 1.4+
45
+
46
+ ## Options ##
47
+
48
+ ### Primary Options ###
49
+
50
+ * listType:
51
+
52
+ * Specify what list will be created or used as part of the bsmSelect.
53
+ * Can accept a callback that accepts the original <select> as an argument and returns a jQuery object with a single list.
54
+ * Allowed values:
55
+ * 'ol'
56
+ * 'ul'
57
+ * function(originalSelect) { // your code; return $('&lt;ul&gt;'); }
58
+ * Default: 'ol'
59
+
60
+ * highlightEffect:
61
+
62
+ * Show a quick highlight of what item was added or removed?
63
+ * Allowed values:
64
+ * an animation function
65
+ * Default: $.noop (no effect)
66
+
67
+ * showEffect:
68
+
69
+ * Animate the addition of an item to the list
70
+ * Allowed values:
71
+ * an animation function
72
+ * Default: $.bsmSelect.effects.show
73
+
74
+ * hideEffect:
75
+
76
+ * Animate the removal of an items from the list
77
+ * Allowed values:
78
+ * an animation function
79
+ * Default: $.bsmSelect.effects.remove
80
+
81
+ * hideWhenAdded:
82
+
83
+ * Stop showing in select after item has been added?
84
+ * Allowed values: true or false
85
+ * Default: false
86
+ * Note: Only functional in Firefox 3 at this time.
87
+
88
+ * addItemTarget:
89
+
90
+ * Where to place new selected items that are added to the list.
91
+ * Allowed values: 'top' or 'bottom' or 'original' to keep the original select sort order
92
+ * Default: 'bottom'
93
+ * Note: When using the 'original' mode, the sort order can be overriden by setting the 'bsm-order' data on each option.
94
+
95
+ * debugMode:
96
+
97
+ * Keeps original select multiple visible so that you can monitor live changes made to it when debugging.
98
+ * Default: false
99
+
100
+ * extractLabel:
101
+
102
+ * A function to compute the list element name from the option object
103
+ * Default: extract the option html
104
+
105
+ * plugins
106
+
107
+ * An array of plugins objects to enable (they only are required to have an `init` method which is called on init with the Bsmselect instance as single argument).
108
+ * Default: an empty array (no plugin enabled by default)
109
+
110
+ ### Text Labels ###
111
+
112
+ * title
113
+
114
+ * Text used for the default select label (when original select title attribute is not set)
115
+ * Default: 'Select...'
116
+
117
+ * removeLabel:
118
+
119
+ * Text used for the remove link of each list item.
120
+ * Default: 'remove'
121
+
122
+ * highlightAddedLabel:
123
+
124
+ * Text that precedes highlight of item added.
125
+ * Default: 'Added: '
126
+
127
+ * highlightRemovedLabel:
128
+
129
+ * Text that precedes highlight of item removed.
130
+ * Default: 'Removed: '
131
+
132
+ ### Modifiable CSS Classes ###
133
+
134
+ * containerClass:
135
+
136
+ * Class for container that wraps the entire bsmSelect.
137
+ * Default: 'bsmContainer'
138
+
139
+ * selectClass:
140
+
141
+ * Class for the newly created <select>.
142
+ * Default: 'bsmSelect'
143
+
144
+ * listClass:
145
+
146
+ * Class for the newly created list of listType (ol or ul).
147
+ * Default: 'bsmList'
148
+
149
+ * listSortableClass:
150
+
151
+ * Another class given to the list when sortable is active.
152
+ * Default: 'bsmListSortable'
153
+
154
+ * listItemClass:
155
+
156
+ * Class given to the <li> list items.
157
+ * Default: 'bsmListItem'
158
+
159
+ * listItemLabelClass:
160
+
161
+ * Class for the label text that appears in list items.
162
+ * Default: 'bsmListItemLabel'
163
+
164
+ * removeClass:
165
+
166
+ * Class given to the remove link in each list item.
167
+ * Any element found in the <li> with this class will remove it.
168
+ * If you give the <li> this class, clicking anywhere on the <li> will remove it.
169
+ * Default: 'bsmListItemRemove'
170
+
171
+ * highlightClass:
172
+
173
+ * Class given to the highlight <span>.
174
+ * Default: 'bsmHighlight'
175
+
176
+ ## Authors and contributors ##
177
+
178
+ * [Ryan Cramer](http://www.ryancramer.com/) is the author of the original asmSelect
179
+ * [Victor Berchet](http://github.com/vicb) is the author of bsmSelect
180
+ * [Andy Fowler](http://github.com/andyfowler) has contributed many enhancements
181
+
182
+ ## History ##
183
+
184
+ see [history.md](history.md).
185
+
@@ -0,0 +1,64 @@
1
+ .bsmContainer {
2
+ /* container that surrounds entire bsmSelect widget */
3
+ }
4
+
5
+ .bsmSelect {
6
+ /* the newly created regular 'select' */
7
+ display: inline;
8
+ }
9
+
10
+ .bsmOptionDisabled {
11
+ /* disabled options in new select */
12
+ color: #999;
13
+ }
14
+
15
+ .bsmHighlight {
16
+ /* the highlight span */
17
+ float: right;
18
+ padding: 0;
19
+ margin: 0 0 0 1em;
20
+ }
21
+
22
+ .bsmList {
23
+ /* html list that contains selected items */
24
+ margin: 0.25em 0 1em 0;
25
+ position: relative;
26
+ display: block;
27
+ padding-left: 0;
28
+ list-style: none;
29
+ }
30
+
31
+ .bsmListItem {
32
+ /* li item from the html list above */
33
+ position: relative;
34
+ margin-left: 0;
35
+ padding-left: 0;
36
+ list-style: none;
37
+ background: #ddd;
38
+ border: 1px solid #bbb;
39
+ width: 100%;
40
+ margin: 0 0 -1px 0;
41
+ line-height: 1em;
42
+ }
43
+
44
+ .bsmListItem:hover {
45
+ background-color: #e5e5e5;
46
+ }
47
+
48
+ .bsmListItemLabel {
49
+ /* this is a span that surrounds the text in the item, except for the remove link */
50
+ padding: 5px;
51
+ display: block;
52
+ }
53
+
54
+ .bsmListSortable .bsmListItemLabel {
55
+ cursor: move;
56
+ }
57
+
58
+ .bsmListItemRemove {
59
+ /* the remove link in each list item */
60
+ position: absolute;
61
+ right: 0;
62
+ top: 0;
63
+ padding: 5px;
64
+ }
@@ -0,0 +1,60 @@
1
+ /*
2
+ * Better Select Multiple Compatibility Plugin - jQuery Plugin
3
+ *
4
+ * Copyright (c) 2010 by Victor Berchet - http://www.github.com/vicb
5
+ *
6
+ * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
7
+ *
8
+ * version: v1.0.0 - 2010-09-05
9
+ */
10
+ (function($) {
11
+ $.bsmSelect.plugins.compatibility = function()
12
+ {
13
+ if (!(this instanceof arguments.callee)) {
14
+ return new arguments.callee();
15
+ }
16
+ }
17
+
18
+ $.extend($.bsmSelect.plugins.compatibility.prototype, {
19
+ init: function(bsm) {
20
+
21
+ var o = bsm.options;
22
+
23
+ if (typeof o.animate != 'undefined')
24
+ {
25
+ if (o.animate === true) {
26
+ o.showEffect = $.bsmSelect.effects.verticalListAdd;
27
+ o.hideEffect = $.bsmSelect.effects.verticalListRemove;
28
+ } else if ($.isFunction(o.animate.add)) {
29
+ o.showEffect = o.animate.add;
30
+ } else if (typeof(o.animate.add) == 'string' && $.isFunction($.bsmSelect.effects[o.animate.add])) {
31
+ o.showEffect = $.bsmSelect.effects[o.animate.add];
32
+ } else {
33
+ o.showEffect = $.bsmSelect.effects.show;
34
+ }
35
+
36
+ if ($.isFunction(o.animate.drop)) {
37
+ o.hideEffect = o.animate.drop;
38
+ } else if (typeof(o.animate.drop) == 'string' && $.isFunction($.bsmSelect.effects[o.animate.drop])) {
39
+ o.hideEffect = $.bsmSelect.effects[o.animate.drop];
40
+ } else {
41
+ o.hideEffect = $.bsmSelect.effects.remove;
42
+ }
43
+ }
44
+
45
+ if (typeof o.highlight != 'undefined')
46
+ {
47
+ if (o.highlight === true) {
48
+ o.highlightEffect = $.bsmSelect.effects.highlight;
49
+ } else if ($.isFunction(o.highlight)) {
50
+ o.highlightEffect = o.highlight;
51
+ } else if (typeof(o.highlight) == 'string' && $.isFunction($.bsmSelect.effects[o.highlight])) {
52
+ o.highlightEffect = $.bsmSelect.effects[o.highlight];
53
+ }
54
+ }
55
+
56
+ }
57
+
58
+ });
59
+ })(jQuery);
60
+