lanes 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (446) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +1 -1
  4. data/Rakefile +0 -42
  5. data/client/{javascripts/component → lanes/components}/Base.coffee +10 -10
  6. data/client/{javascripts/component → lanes/components}/ChoicesInput.coffee +0 -0
  7. data/client/lanes/components/enabled.js.erb +3 -0
  8. data/client/{javascripts/lib/create-namespace.js → lanes/components/enabled.scss.erb} +0 -0
  9. data/client/{javascripts/component → lanes/components}/grid/Editor.coffee +10 -13
  10. data/client/{javascripts/component → lanes/components/grid}/Grid.coffee +6 -6
  11. data/client/{javascripts/component → lanes/components}/grid/PopOverEditor.coffee +3 -3
  12. data/client/{javascripts/component → lanes/components}/grid/RowEditor.coffee +2 -3
  13. data/client/lanes/components/grid/config.json +3 -0
  14. data/client/{stylesheets/compoonents/grid-editors.scss → lanes/components/grid/editors.scss} +0 -0
  15. data/client/{stylesheets/compoonents → lanes/components/grid}/grid.scss +8 -6
  16. data/client/lanes/components/grid/index.js +8 -0
  17. data/client/{javascripts/component → lanes/components}/grid/popover-editor.html +0 -0
  18. data/client/{javascripts/component → lanes/components}/grid/row-editor.html +0 -0
  19. data/client/{javascripts/component/grid.html → lanes/components/grid/template.html} +0 -0
  20. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/dataTables.bootstrap.js +0 -0
  21. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/dataTables.scroller.js +0 -0
  22. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/datatables.responsive.js +0 -0
  23. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/index.js +0 -0
  24. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/jquery.dataTables.js +1 -0
  25. data/client/lanes/components/index.js +2 -0
  26. data/client/lanes/components/modal/ModalDialog.coffee +47 -0
  27. data/client/lanes/components/modal/index.js +2 -0
  28. data/client/lanes/components/modal/modal.scss +20 -0
  29. data/client/{javascripts/component/modal.html → lanes/components/modal/template.html} +5 -4
  30. data/client/{javascripts/component → lanes/components/popover}/PopOver.coffee +4 -4
  31. data/client/lanes/components/popover/index.js +2 -0
  32. data/client/lanes/components/popover/popover.scss +1 -0
  33. data/client/{javascripts/component/popover.html → lanes/components/popover/template.html} +0 -0
  34. data/client/{javascripts/component → lanes/components/radio_group}/RadioGroup.coffee +1 -1
  35. data/client/{javascripts/component → lanes/components/record_finder}/RecordFinder.coffee +4 -4
  36. data/client/{javascripts/component/record-finder → lanes/components/record_finder}/clause.skr +0 -0
  37. data/client/{javascripts/component/record-finder → lanes/components/record_finder}/dialog.skr +0 -0
  38. data/client/{javascripts/component/record-finder → lanes/components/record_finder}/field.skr +0 -0
  39. data/client/lanes/components/select_field/SelectField.coffee +87 -0
  40. data/client/{screens/user-management → lanes/components/select_field}/index.js +0 -1
  41. data/client/{javascripts/workspace/tab.html → lanes/components/select_field/select_field.scss} +0 -0
  42. data/client/{javascripts → lanes}/data/Bootstrap.coffee +0 -0
  43. data/client/{javascripts → lanes}/data/ChangeSet.coffee +0 -0
  44. data/client/{javascripts → lanes}/data/Collection.coffee +37 -6
  45. data/client/{javascripts → lanes}/data/Config.coffee +0 -0
  46. data/client/{javascripts → lanes}/data/Model.coffee +8 -9
  47. data/client/{javascripts → lanes}/data/PubSub.coffee +0 -0
  48. data/client/{javascripts → lanes}/data/Query.coffee +0 -0
  49. data/client/{javascripts → lanes}/data/Screens.coffee +48 -19
  50. data/client/{javascripts → lanes}/data/Sync.coffee +5 -5
  51. data/client/lanes/data/User.coffee +46 -0
  52. data/client/{javascripts → lanes}/data/index.js +1 -2
  53. data/client/{javascripts → lanes}/data/mixins/HasCodeField.coffee +1 -1
  54. data/client/{javascripts → lanes}/extension/Base.coffee +1 -1
  55. data/client/lanes/extension/EarlyExtensions.js.erb +3 -0
  56. data/client/{javascripts → lanes}/extension/Extensions.coffee +5 -0
  57. data/client/{javascripts → lanes}/extension/GlAccounts.coffee +0 -0
  58. data/client/lanes/extension/LateLoaded.js.erb +3 -0
  59. data/client/lanes/extension/index.js +5 -0
  60. data/client/lanes/extension/namespace-available.js.erb +3 -0
  61. data/client/lanes/index.js +11 -0
  62. data/client/{javascripts → lanes}/lib/MakeBaseClass.coffee +0 -0
  63. data/client/{javascripts → lanes}/lib/ModuleSupport.coffee +0 -0
  64. data/client/{javascripts → lanes}/lib/Templates.coffee +2 -5
  65. data/{spec/client/foo_spec.js → client/lanes/lib/create-namespace.js} +0 -0
  66. data/client/{javascripts → lanes}/lib/debounce.coffee +0 -0
  67. data/client/{javascripts → lanes}/lib/defer.coffee +0 -0
  68. data/client/{javascripts → lanes}/lib/el.js +0 -0
  69. data/client/{javascripts → lanes}/lib/index.js +0 -4
  70. data/client/{javascripts → lanes}/lib/loader.coffee +15 -10
  71. data/client/{javascripts → lanes}/lib/namespace.coffee +3 -0
  72. data/client/{javascripts → lanes}/lib/noConflict.coffee +1 -0
  73. data/client/{javascripts → lanes}/lib/promise_helpers.coffee +0 -0
  74. data/client/{javascripts → lanes}/lib/results.coffee +0 -0
  75. data/client/{javascripts → lanes}/lib/utilFunctions.coffee +11 -13
  76. data/client/{javascripts → lanes}/plugins/ResizeSensor.js +0 -0
  77. data/client/lanes/plugins/index.js +1 -0
  78. data/client/{javascripts → lanes}/plugins/overlay.coffee +0 -0
  79. data/client/{javascripts → lanes}/plugins/trigger.coffee +0 -0
  80. data/client/lanes/screens/Base.coffee +40 -0
  81. data/client/{javascripts/view/mixins/ScreenChangeListener.coffee → lanes/screens/ChangeListener.coffee} +2 -2
  82. data/client/lanes/screens/Router.coffee +6 -0
  83. data/client/lanes/screens/index.js +1 -0
  84. data/client/{javascripts/view → lanes/screens}/screen-definitions.js.erb +0 -0
  85. data/client/{javascripts → lanes}/vendor/bootstrap/affix.js +43 -23
  86. data/client/{javascripts → lanes}/vendor/bootstrap/alert.js +6 -4
  87. data/client/{javascripts → lanes}/vendor/bootstrap/button.js +16 -10
  88. data/client/{javascripts → lanes}/vendor/bootstrap/carousel.js +27 -10
  89. data/client/{javascripts → lanes}/vendor/bootstrap/collapse.js +69 -28
  90. data/client/{javascripts → lanes}/vendor/bootstrap/dropdown.js +20 -10
  91. data/client/{javascripts → lanes}/vendor/bootstrap/modal.js +67 -23
  92. data/client/{javascripts → lanes}/vendor/bootstrap/popover.js +13 -7
  93. data/client/{javascripts → lanes}/vendor/bootstrap/scrollspy.js +12 -7
  94. data/client/{javascripts → lanes}/vendor/bootstrap/tab.js +41 -16
  95. data/client/{javascripts → lanes}/vendor/bootstrap/tooltip.js +60 -39
  96. data/client/{javascripts → lanes}/vendor/bootstrap/transition.js +1 -1
  97. data/client/{javascripts → lanes}/vendor/jquery-2.js +0 -0
  98. data/client/{javascripts → lanes}/vendor/jquery.tap.js +0 -0
  99. data/client/{javascripts → lanes}/vendor/magicsuggest.js +0 -0
  100. data/client/{javascripts → lanes}/vendor/message-bus.js +0 -0
  101. data/client/lanes/vendor/modern-stack.js +27 -0
  102. data/client/lanes/vendor/packaged.js +13698 -0
  103. data/client/{javascripts/view → lanes/views}/Assets.coffee +1 -1
  104. data/client/lanes/views/Base.coffee +426 -0
  105. data/client/{javascripts/view → lanes/views}/FormBindings.coffee +1 -1
  106. data/client/{javascripts/view → lanes/views}/Functions.coffee +1 -1
  107. data/client/{javascripts/view → lanes/views}/Helpers.coffee +6 -6
  108. data/client/{javascripts/view → lanes/views}/Keys.coffee +3 -3
  109. data/client/{javascripts/view → lanes/views}/ModelObserver.coffee +1 -1
  110. data/client/{javascripts/view → lanes/views}/ModelUpdate.coffee +2 -2
  111. data/client/{javascripts/view → lanes/views}/PubSub.coffee +3 -3
  112. data/client/{javascripts/view → lanes/views}/RenderContext.coffee +1 -1
  113. data/client/{javascripts/view → lanes/views}/SaveNotify.coffee +2 -2
  114. data/client/{javascripts/view → lanes/views}/TimedHighlight.coffee +1 -1
  115. data/client/{javascripts/view → lanes/views}/TimedMask.coffee +1 -1
  116. data/client/{javascripts/view/InterfaceState.coffee → lanes/views/Viewport.coffee} +18 -18
  117. data/client/{javascripts/view → lanes/views}/_button.html +0 -0
  118. data/client/{javascripts/view → lanes/views}/_toolbar.html +0 -0
  119. data/client/lanes/views/index.js +2 -0
  120. data/client/{javascripts/view → lanes/views}/model-update.html +0 -0
  121. data/client/{javascripts → lanes}/workspace/ActiveScreensSwitcher.coffee +23 -27
  122. data/client/{javascripts → lanes}/workspace/Instance.es6 +25 -21
  123. data/client/{javascripts → lanes}/workspace/Layout.coffee +6 -5
  124. data/client/{javascripts → lanes}/workspace/Navbar.coffee +2 -2
  125. data/client/{javascripts → lanes}/workspace/Pages.coffee +9 -13
  126. data/client/{javascripts → lanes}/workspace/ScreensMenu.coffee +11 -11
  127. data/client/{javascripts → lanes}/workspace/index.js +7 -5
  128. data/client/{javascripts → lanes}/workspace/layout.html +0 -0
  129. data/client/{javascripts → lanes}/workspace/menu.html +0 -0
  130. data/client/{javascripts → lanes}/workspace/menu_toggle.html +0 -0
  131. data/client/{javascripts → lanes}/workspace/navbar.html +0 -0
  132. data/client/{javascripts → lanes}/workspace/pages.html +0 -0
  133. data/client/{javascripts → lanes}/workspace/screens-menu.html +0 -0
  134. data/client/{javascripts → lanes}/workspace/screens-switcher.html +0 -0
  135. data/client/lanes/workspace/tab.html +0 -0
  136. data/client/lanes/workspace.scss.erb +21 -0
  137. data/client/{javascripts/lanes-complete.js → lanes-complete.js} +0 -0
  138. data/client/lanes-workspace.scss.erb +21 -0
  139. data/client/{stylesheets/compoonents → styles/components}/all.scss +0 -0
  140. data/client/{stylesheets/compoonents → styles/components}/changes-notification.scss +0 -0
  141. data/client/{stylesheets/compoonents → styles/components}/record-finder.scss +0 -0
  142. data/client/{stylesheets/compoonents → styles/components}/suggest.scss +0 -0
  143. data/client/{stylesheets → styles}/fonts/icomoon.eot +0 -0
  144. data/client/{stylesheets → styles}/fonts/icomoon.svg +0 -0
  145. data/client/{stylesheets → styles}/fonts/icomoon.ttf +0 -0
  146. data/client/{stylesheets → styles}/fonts/icomoon.woff +0 -0
  147. data/client/{stylesheets → styles}/fonts/selection.json +0 -0
  148. data/client/{stylesheets/fonts/style.css → styles/fonts/style.scss} +0 -0
  149. data/client/{stylesheets → styles}/fonts.scss +6 -6
  150. data/client/{stylesheets → styles}/forms.scss +0 -0
  151. data/client/{stylesheets → styles}/index.css +0 -0
  152. data/client/{stylesheets → styles}/keybindings.scss +0 -0
  153. data/client/{stylesheets → styles}/layout.scss +1 -1
  154. data/client/{stylesheets → styles}/plugins/all.scss +0 -0
  155. data/client/{stylesheets → styles}/plugins/overlay.scss +1 -1
  156. data/client/{stylesheets → styles}/plugins/resize-sensor.scss +0 -0
  157. data/client/{stylesheets → styles}/screens.scss +0 -0
  158. data/client/{stylesheets → styles}/tabs.scss +0 -0
  159. data/client/{stylesheets → styles}/vendor/bootstrap/_alerts.scss +0 -0
  160. data/client/styles/vendor/bootstrap/_badges.scss +63 -0
  161. data/client/{stylesheets → styles}/vendor/bootstrap/_breadcrumbs.scss +0 -0
  162. data/client/styles/vendor/bootstrap/_button-groups.scss +243 -0
  163. data/client/styles/vendor/bootstrap/_buttons.scss +160 -0
  164. data/client/styles/vendor/bootstrap/_carousel.scss +267 -0
  165. data/client/{stylesheets → styles}/vendor/bootstrap/_close.scss +0 -0
  166. data/client/styles/vendor/bootstrap/_code.scss +69 -0
  167. data/client/styles/vendor/bootstrap/_component-animations.scss +38 -0
  168. data/client/styles/vendor/bootstrap/_dropdowns.scss +213 -0
  169. data/client/styles/vendor/bootstrap/_forms.scss +548 -0
  170. data/client/styles/vendor/bootstrap/_glyphicons.scss +234 -0
  171. data/client/styles/vendor/bootstrap/_grid.scss +84 -0
  172. data/client/{stylesheets → styles}/vendor/bootstrap/_input-groups.scss +0 -0
  173. data/client/styles/vendor/bootstrap/_jumbotron.scss +49 -0
  174. data/client/{stylesheets → styles}/vendor/bootstrap/_labels.scss +0 -0
  175. data/client/styles/vendor/bootstrap/_list-group.scss +124 -0
  176. data/client/styles/vendor/bootstrap/_media.scss +47 -0
  177. data/client/{stylesheets → styles}/vendor/bootstrap/_mixins.scss +0 -0
  178. data/client/styles/vendor/bootstrap/_modals.scss +148 -0
  179. data/client/styles/vendor/bootstrap/_navbar.scss +662 -0
  180. data/client/styles/vendor/bootstrap/_navs.scss +244 -0
  181. data/client/styles/vendor/bootstrap/_normalize.scss +427 -0
  182. data/client/styles/vendor/bootstrap/_pager.scss +54 -0
  183. data/client/styles/vendor/bootstrap/_pagination.scss +88 -0
  184. data/client/styles/vendor/bootstrap/_panels.scss +261 -0
  185. data/client/styles/vendor/bootstrap/_popovers.scss +135 -0
  186. data/client/styles/vendor/bootstrap/_print.scss +107 -0
  187. data/client/styles/vendor/bootstrap/_progress-bars.scss +87 -0
  188. data/client/styles/vendor/bootstrap/_responsive-embed.scss +35 -0
  189. data/client/{stylesheets → styles}/vendor/bootstrap/_responsive-utilities.scss +0 -0
  190. data/client/styles/vendor/bootstrap/_scaffolding.scss +150 -0
  191. data/client/styles/vendor/bootstrap/_tables.scss +234 -0
  192. data/client/styles/vendor/bootstrap/_theme.scss +272 -0
  193. data/client/styles/vendor/bootstrap/_thumbnails.scss +38 -0
  194. data/client/styles/vendor/bootstrap/_tooltip.scss +103 -0
  195. data/client/styles/vendor/bootstrap/_type.scss +298 -0
  196. data/client/styles/vendor/bootstrap/_utilities.scss +56 -0
  197. data/client/styles/vendor/bootstrap/_variables.scss +864 -0
  198. data/client/{stylesheets → styles}/vendor/bootstrap/_wells.scss +0 -0
  199. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_alerts.scss +0 -0
  200. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_background-variant.scss +0 -0
  201. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_border-radius.scss +0 -0
  202. data/client/styles/vendor/bootstrap/mixins/_buttons.scss +52 -0
  203. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_center-block.scss +0 -0
  204. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_clearfix.scss +0 -0
  205. data/client/styles/vendor/bootstrap/mixins/_forms.scss +88 -0
  206. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_gradients.scss +0 -0
  207. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_grid-framework.scss +0 -0
  208. data/client/styles/vendor/bootstrap/mixins/_grid.scss +122 -0
  209. data/client/styles/vendor/bootstrap/mixins/_hide-text.scss +21 -0
  210. data/client/styles/vendor/bootstrap/mixins/_image.scss +33 -0
  211. data/client/styles/vendor/bootstrap/mixins/_labels.scss +12 -0
  212. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_list-group.scss +0 -0
  213. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_nav-divider.scss +0 -0
  214. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  215. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_opacity.scss +0 -0
  216. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_pagination.scss +0 -0
  217. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_panels.scss +0 -0
  218. data/client/styles/vendor/bootstrap/mixins/_progress-bar.scss +10 -0
  219. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_reset-filter.scss +0 -0
  220. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_resize.scss +0 -0
  221. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_responsive-visibility.scss +0 -0
  222. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_size.scss +0 -0
  223. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_tab-focus.scss +0 -0
  224. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_table-row.scss +0 -0
  225. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_text-emphasis.scss +0 -0
  226. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_text-overflow.scss +0 -0
  227. data/client/styles/vendor/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  228. data/client/styles/vendor/bootstrap/old/_alerts.scss +68 -0
  229. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_badges.scss +0 -0
  230. data/client/styles/vendor/bootstrap/old/_breadcrumbs.scss +26 -0
  231. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_button-groups.scss +0 -0
  232. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_buttons.scss +0 -0
  233. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_carousel.scss +0 -0
  234. data/client/styles/vendor/bootstrap/old/_close.scss +35 -0
  235. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_code.scss +0 -0
  236. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_component-animations.scss +0 -0
  237. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_dropdowns.scss +0 -0
  238. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_forms.scss +0 -0
  239. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_glyphicons.scss +0 -0
  240. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_grid.scss +0 -0
  241. data/client/styles/vendor/bootstrap/old/_input-groups.scss +166 -0
  242. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_jumbotron.scss +0 -0
  243. data/client/styles/vendor/bootstrap/old/_labels.scss +66 -0
  244. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_list-group.scss +0 -0
  245. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_media.scss +0 -0
  246. data/client/styles/vendor/bootstrap/old/_mixins.scss +39 -0
  247. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_modals.scss +0 -0
  248. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_navbar.scss +0 -0
  249. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_navs.scss +0 -0
  250. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_normalize.scss +0 -0
  251. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_pager.scss +0 -0
  252. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_pagination.scss +0 -0
  253. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_panels.scss +0 -0
  254. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_popovers.scss +0 -0
  255. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_print.scss +0 -0
  256. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_progress-bars.scss +0 -0
  257. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_responsive-embed.scss +0 -0
  258. data/client/styles/vendor/bootstrap/old/_responsive-utilities.scss +174 -0
  259. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_scaffolding.scss +0 -0
  260. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_tables.scss +0 -0
  261. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_theme.scss +0 -0
  262. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_thumbnails.scss +0 -0
  263. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_tooltip.scss +0 -0
  264. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_type.scss +0 -0
  265. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_utilities.scss +0 -0
  266. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_variables.scss +0 -0
  267. data/client/styles/vendor/bootstrap/old/_wells.scss +29 -0
  268. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/bootstrap.scss +0 -0
  269. data/client/styles/vendor/bootstrap/old/mixins/_alerts.scss +14 -0
  270. data/client/styles/vendor/bootstrap/old/mixins/_background-variant.scss +11 -0
  271. data/client/styles/vendor/bootstrap/old/mixins/_border-radius.scss +18 -0
  272. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_buttons.scss +0 -0
  273. data/client/styles/vendor/bootstrap/old/mixins/_center-block.scss +7 -0
  274. data/client/styles/vendor/bootstrap/old/mixins/_clearfix.scss +22 -0
  275. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_forms.scss +0 -0
  276. data/client/styles/vendor/bootstrap/old/mixins/_gradients.scss +58 -0
  277. data/client/styles/vendor/bootstrap/old/mixins/_grid-framework.scss +81 -0
  278. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_grid.scss +0 -0
  279. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_hide-text.scss +0 -0
  280. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_image.scss +0 -0
  281. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_labels.scss +0 -0
  282. data/client/styles/vendor/bootstrap/old/mixins/_list-group.scss +31 -0
  283. data/client/styles/vendor/bootstrap/old/mixins/_nav-divider.scss +10 -0
  284. data/client/styles/vendor/bootstrap/old/mixins/_nav-vertical-align.scss +9 -0
  285. data/client/styles/vendor/bootstrap/old/mixins/_opacity.scss +8 -0
  286. data/client/styles/vendor/bootstrap/old/mixins/_pagination.scss +23 -0
  287. data/client/styles/vendor/bootstrap/old/mixins/_panels.scss +24 -0
  288. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_progress-bar.scss +0 -0
  289. data/client/styles/vendor/bootstrap/old/mixins/_reset-filter.scss +8 -0
  290. data/client/styles/vendor/bootstrap/old/mixins/_resize.scss +6 -0
  291. data/client/styles/vendor/bootstrap/old/mixins/_responsive-visibility.scss +21 -0
  292. data/client/styles/vendor/bootstrap/old/mixins/_size.scss +10 -0
  293. data/client/styles/vendor/bootstrap/old/mixins/_tab-focus.scss +9 -0
  294. data/client/styles/vendor/bootstrap/old/mixins/_table-row.scss +28 -0
  295. data/client/styles/vendor/bootstrap/old/mixins/_text-emphasis.scss +11 -0
  296. data/client/styles/vendor/bootstrap/old/mixins/_text-overflow.scss +8 -0
  297. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_vendor-prefixes.scss +0 -0
  298. data/client/{stylesheets → styles}/vendor/bootstrap-custom-grid.scss +0 -0
  299. data/client/{stylesheets → styles}/vendor/bootstrap-custom-modals.scss +0 -0
  300. data/client/{stylesheets → styles}/vendor/bootstrap.scss +14 -9
  301. data/client/{stylesheets → styles}/vendor/dataTables.scss +0 -0
  302. data/lanes.gemspec +5 -1
  303. data/lib/lanes/api/controller.rb +47 -6
  304. data/lib/lanes/api/helper_methods.rb +2 -10
  305. data/lib/lanes/api/javascript_processor.rb +17 -7
  306. data/lib/lanes/api/null_authentication_provider.rb +33 -0
  307. data/lib/lanes/api/request_wrapper.rb +49 -28
  308. data/lib/lanes/api/root.rb +12 -30
  309. data/lib/lanes/api/routing.rb +37 -0
  310. data/lib/lanes/api/sprockets_compressor.rb +35 -0
  311. data/lib/lanes/api/sprockets_extension.rb +69 -0
  312. data/lib/lanes/api/test_specs.rb +13 -9
  313. data/lib/lanes/api.rb +2 -18
  314. data/lib/lanes/cli.rb +22 -2
  315. data/lib/lanes/command/app.rb +49 -0
  316. data/lib/lanes/command/client_model_update.rb +65 -0
  317. data/lib/lanes/command/console.rb +20 -0
  318. data/lib/lanes/command/db.rb +33 -0
  319. data/lib/lanes/command/db.usage +1 -0
  320. data/lib/lanes/command/generate.rb +21 -0
  321. data/lib/lanes/command/generate_model.rb +105 -0
  322. data/lib/lanes/command/generate_model.usage +45 -0
  323. data/lib/lanes/command/generate_screen.rb +31 -0
  324. data/lib/lanes/command/generate_screen.usage +11 -0
  325. data/lib/lanes/command/generate_view.rb +22 -0
  326. data/lib/lanes/command/generate_view.usage +13 -0
  327. data/lib/lanes/command/model_attribute.rb +188 -0
  328. data/lib/lanes/command/named_command.rb +27 -0
  329. data/lib/lanes/command/server.rb +19 -0
  330. data/lib/lanes/command/server.usage +3 -0
  331. data/lib/lanes/command/templates/Gemfile +10 -0
  332. data/lib/lanes/{generators/app → command/templates}/Guardfile +0 -0
  333. data/lib/lanes/command/templates/Rakefile +2 -0
  334. data/lib/lanes/command/templates/client/Extension.coffee +5 -0
  335. data/lib/lanes/command/templates/client/components/.gitkeep +0 -0
  336. data/lib/lanes/command/templates/client/components/Component.coffee +1 -0
  337. data/lib/lanes/command/templates/client/data/Model.coffee +24 -0
  338. data/lib/lanes/command/templates/client/namespace-extension.js +17 -0
  339. data/lib/lanes/command/templates/client/screens/Screen.coffee +9 -0
  340. data/lib/lanes/command/templates/client/screens/index.js +5 -0
  341. data/lib/lanes/command/templates/client/screens/layout.html +3 -0
  342. data/lib/lanes/command/templates/client/screens/styles.scss +9 -0
  343. data/lib/lanes/command/templates/client/styles/styles.scss +1 -0
  344. data/lib/lanes/command/templates/client/views/.gitkeep +0 -0
  345. data/lib/lanes/command/templates/client/views/View.coffee +9 -0
  346. data/lib/lanes/command/templates/client/views/template.html +3 -0
  347. data/lib/lanes/{generators/app → command/templates}/config/database.yml +0 -0
  348. data/lib/lanes/command/templates/config/lanes.rb +7 -0
  349. data/lib/lanes/command/templates/config/routes.rb +2 -0
  350. data/lib/lanes/{generators/app → command/templates}/config.ru +1 -0
  351. data/lib/lanes/command/templates/db/create_table_migration.rb +19 -0
  352. data/lib/lanes/command/templates/gitignore +1 -0
  353. data/lib/lanes/command/templates/lib/namespace/extension.rb +13 -0
  354. data/lib/lanes/command/templates/lib/namespace/model.rb +7 -0
  355. data/lib/lanes/command/templates/lib/namespace/screen.rb +17 -0
  356. data/lib/lanes/command/templates/lib/namespace/version.rb +3 -0
  357. data/lib/lanes/command/templates/lib/namespace.rb +12 -0
  358. data/lib/lanes/command/templates/spec/client/data/ModelSpec.coffee +5 -0
  359. data/lib/lanes/command/templates/spec/client/views/ViewSpec.coffee +5 -0
  360. data/lib/lanes/command/templates/spec/fixtures/namespace/model.yml +16 -0
  361. data/lib/lanes/command/templates/spec/namespace/model_spec.rb +10 -0
  362. data/lib/lanes/command/templates/spec/spec_helper.rb +15 -0
  363. data/lib/lanes/command/update.rb +13 -0
  364. data/lib/lanes/command/update_model.rb +125 -0
  365. data/lib/lanes/command/update_model.usage +2 -0
  366. data/lib/lanes/command.rb +37 -0
  367. data/lib/lanes/components.rb +45 -0
  368. data/lib/lanes/concerns/set_attribute_data.rb +2 -2
  369. data/lib/lanes/configuration.rb +3 -3
  370. data/lib/lanes/db.rb +5 -39
  371. data/lib/lanes/extension.rb +64 -19
  372. data/lib/lanes/guard_tasks.rb +7 -5
  373. data/lib/lanes/rake_tasks.rb +47 -0
  374. data/lib/lanes/screens.rb +1 -48
  375. data/{spec → lib/lanes}/spec_helper.rb +0 -0
  376. data/lib/lanes/version.rb +1 -1
  377. data/lib/lanes.rb +1 -3
  378. data/npm-build/compile.coffee +1 -1
  379. data/npm-build/package.json +5 -5
  380. data/npm-build/template.js +13 -13
  381. data/spec/api/javascript_processor_spec.rb +1 -1
  382. data/spec/client/view/BaseSpec.coffee +166 -0
  383. data/spec/helpers/jasmine-jquery.js +813 -0
  384. data/spec/helpers/jasmine-matchers.js +1586 -0
  385. data/tasks/migrations.rake +1 -1
  386. data/views/index.erb +9 -13
  387. metadata +419 -268
  388. data/client/javascripts/component/ModalDialog.coffee +0 -44
  389. data/client/javascripts/component/SelectField.coffee +0 -43
  390. data/client/javascripts/component/TaggedField.coffee +0 -27
  391. data/client/javascripts/component/index.js +0 -5
  392. data/client/javascripts/data/Roles.coffee +0 -91
  393. data/client/javascripts/data/User.coffee +0 -70
  394. data/client/javascripts/extension/index.js +0 -6
  395. data/client/javascripts/extension/load.js.erb +0 -3
  396. data/client/javascripts/lanes-workspace.js +0 -1
  397. data/client/javascripts/lib/underscore.inflection.js +0 -210
  398. data/client/javascripts/plugins/index.js +0 -4
  399. data/client/javascripts/vendor/modern-stack.js +0 -14
  400. data/client/javascripts/vendor/packaged.js +0 -13769
  401. data/client/javascripts/view/Base.coffee +0 -231
  402. data/client/javascripts/view/Screen.coffee +0 -30
  403. data/client/javascripts/view/index.js +0 -10
  404. data/client/javascripts/workspace/LoginDialog.coffee +0 -33
  405. data/client/javascripts/workspace/login-dialog.html +0 -16
  406. data/client/screens/user-management/UserEditScreen.coffee +0 -21
  407. data/client/screens/user-management/UserManagement.coffee +0 -24
  408. data/client/screens/user-management/grid-popover-editor.html +0 -33
  409. data/client/screens/user-management/index.css +0 -4
  410. data/client/screens/user-management/user-management-styles.scss +0 -7
  411. data/client/screens/user-management/user-management.html +0 -8
  412. data/client/stylesheets/compoonents/modal-dialog.scss +0 -23
  413. data/client/stylesheets/lanes-workspace.scss +0 -17
  414. data/config/puma.rb +0 -7
  415. data/db/seed.rb +0 -37
  416. data/foo/Gemfile +0 -5
  417. data/foo/Guardfile +0 -13
  418. data/foo/foo/Gemfile +0 -5
  419. data/foo/foo/lib/foo.rb +0 -7
  420. data/foo/lib/foo/version.rb +0 -3
  421. data/foo/lib/foo.rb +0 -8
  422. data/lib/lanes/access/locked_fields.rb +0 -43
  423. data/lib/lanes/access/role.rb +0 -58
  424. data/lib/lanes/access/role_collection.rb +0 -75
  425. data/lib/lanes/access/roles/administrator.rb +0 -25
  426. data/lib/lanes/access/roles/support.rb +0 -13
  427. data/lib/lanes/access/user_maint_screen.rb +0 -32
  428. data/lib/lanes/access.rb +0 -50
  429. data/lib/lanes/api/asset_pipeline.rb +0 -59
  430. data/lib/lanes/api/authentication_helper.rb +0 -21
  431. data/lib/lanes/api/authentication_provider.rb +0 -45
  432. data/lib/lanes/api/default_routes.rb +0 -35
  433. data/lib/lanes/api/skr_templates.rb +0 -60
  434. data/lib/lanes/concerns/track_modifications.rb +0 -51
  435. data/lib/lanes/db/seed.rb +0 -27
  436. data/lib/lanes/generators/app/Gemfile +0 -5
  437. data/lib/lanes/generators/app/Rakefile +0 -9
  438. data/lib/lanes/generators/app/lib/main_class/version.rb +0 -3
  439. data/lib/lanes/generators/app/lib/main_class.rb +0 -8
  440. data/lib/lanes/generators/app.rb +0 -36
  441. data/lib/lanes/user.rb +0 -127
  442. data/spec/client/component/ChoicesInputSpec.coffee +0 -12
  443. data/spec/client/component/foo_spec.coffee +0 -4
  444. data/spec/client/support/jasmine.yml +0 -128
  445. data/spec/client/support/jasmine_helper.rb +0 -15
  446. data/spec/helpers/SpecHelper.js +0 -18
@@ -1,4 +1,4 @@
1
- Lanes.View.Assets = {
1
+ Lanes.Views.Assets = {
2
2
  path: (asset)->
3
3
  path = @paths[ asset ]
4
4
  Lanes.log( "Path for #{asset} was not found" ) unless path
@@ -0,0 +1,426 @@
1
+ amp = Lanes.Vendor.Ampersand
2
+ delegateEventSplitter = /^(\S+)\s*(.*)$/
3
+ class ViewBase
4
+
5
+ @extended_properties = ['ui']
6
+
7
+ # Custom datatypes for views
8
+ dataTypes:
9
+ element:
10
+ compare: (a, b)-> a is b
11
+ set: (newVal)->
12
+ val: newVal
13
+ type: (if newVal instanceof Element then "element" else typeof newVal)
14
+
15
+ collection:
16
+ compare: (currentVal, newVal)-> currentVal is newVal
17
+ set: (newVal)->
18
+ val: newVal
19
+ type: (if newVal and newVal.isCollection then "collection" else typeof newVal)
20
+
21
+ session:
22
+ el : "element"
23
+ model : "state"
24
+ collection : "collection"
25
+ pubSub : "boolean"
26
+ parent : "object"
27
+ subviewId : { type: "string", setOnce: true }
28
+
29
+
30
+ derived:
31
+ '$el':
32
+ deps: ['el'], cached: false
33
+ fn: -> Lanes.$(this.el)
34
+
35
+ root_view:
36
+ deps: ['parent'], fn: ->
37
+ view = this
38
+ while view.parent
39
+ view = view.parent
40
+ if view == this then null else view
41
+
42
+ rendered:
43
+ deps: ["el"], fn: -> !!@el
44
+
45
+ hasData:
46
+ deps: ["model"], fn: -> !!@model
47
+
48
+ viewport:
49
+ deps: ['parent'], fn:->
50
+ this.root_view?.viewport
51
+
52
+
53
+ constructor: (attrs={})->
54
+
55
+ this.cid = _.uniqueId('view');
56
+ attrs || (attrs = {});
57
+ parent = attrs.parent;
58
+ delete attrs.parent;
59
+
60
+ this._substituteEventUI()
61
+
62
+ Lanes.Vendor.Ampersand.State.call(this, attrs, {init: false, parent: parent})
63
+
64
+ this.on('change:$el', this._onElementChange, this)
65
+ this.on('change:model', this._onModelChange, this)
66
+ this.on('change:collection', this._onCollectionChange, this)
67
+ this._onModelChange() if @model
68
+ this._onCollectionChange() if @collection
69
+ this._parsedBindings = Lanes.Vendor.Ampersand.Bindings(this.bindings, this)
70
+ this._initializeBindings();
71
+ if attrs.el && !this.autoRender
72
+ this._onElementChange();
73
+
74
+ this._initializeSubviews();
75
+ this.initialize.apply(this, arguments);
76
+
77
+ this.set(_.pick(attrs, 'model', 'collection', 'el'))
78
+
79
+ this.render() if this.autoRender && this.template
80
+
81
+ if !this.pubSub? # if it's unset, not true/false; default to parent or true
82
+ this.pubSub = if this.parent?.pubSub? then this.parent.pubSub else true
83
+
84
+
85
+ this.initializeFormBindings() if @form_bindings
86
+
87
+ if @keyBindings
88
+ Lanes.Views.Keys.add(this, @keyBindings, @keyScope)
89
+
90
+ if @pubSub
91
+ this._pubSub = new Lanes.Views.PubSub(this)
92
+
93
+
94
+ _normalizeUIString: (uiString, ui)->
95
+ uiString.replace(/@ui\.[a-zA-Z_$0-9]*/g, (r)->
96
+ return ui[r.slice(4)]
97
+ )
98
+
99
+ _substituteEventUI: ->
100
+ return unless @ui
101
+ if @events
102
+ for selector in _.keys(@events)
103
+ replaced_selector = this._normalizeUIString(selector,@ui)
104
+ if replaced_selector != selector
105
+ @events[replaced_selector] = @events[selector]
106
+ delete @events[selector]
107
+ # TODO - also apply ui to binding keys
108
+
109
+
110
+ # Initialize is an empty function by default. Override it with your own
111
+ # initialization logic.
112
+ initialize: Lanes.emptyFn
113
+
114
+ # **render** is the core function that your view can override, its job is
115
+ # to populate its element (`this.el`), with the appropriate HTML.
116
+ render: ->
117
+ this.withRenderContext( this.renderWithTemplate )
118
+ return this;
119
+
120
+ withRenderContext: (fn, args...)->
121
+ Lanes.Views.RenderContext.push( @subviewId, @model )
122
+ returned = fn.apply(this,args)
123
+ Lanes.Views.RenderContext.pop()
124
+ this.onRender?()
125
+ returned
126
+
127
+ renderContextFree: ->
128
+ this.renderWithTemplate();
129
+ this
130
+
131
+
132
+ # ## listenToAndRun
133
+ # Shortcut for registering a listener for a model
134
+ # and also triggering it right away.
135
+ listenToAndRun: (object, events, handler)->
136
+ bound = _.bind(handler, this)
137
+ this.listenTo(object, events, bound)
138
+ bound();
139
+
140
+ # Shortcut for doing everything we need to do to
141
+ # render and fully replace current root element.
142
+ # Either define a `template` property of your view
143
+ # or pass in a template directly.
144
+ # The template can either be a string or a function.
145
+ # If it's a function it will be passed the `context`
146
+ # argument.
147
+ renderWithTemplate: (templateArg)->
148
+ template = templateArg || this.resultsFor('template')
149
+ throw new Error('Template string or function needed.') unless template
150
+ template_fn = Lanes.Templates.find(template, this.namespace.name)
151
+ newDom = if template_fn then template_fn( _.result(this,'templateData')) else template
152
+ newDom = Lanes.Vendor.domify(newDom) if _.isString(newDom);
153
+ parent = this.el && this.el.parentNode;
154
+ parent.replaceChild(newDom, this.el) if parent
155
+ if newDom.nodeName == '#document-fragment'
156
+ throw new Error('Views can only have one root element.')
157
+ if newDom.nodeName == '#text'
158
+ throw new Error('Views must have a root element.')
159
+ this.el = newDom;
160
+ return this;
161
+
162
+ template: ->
163
+ this.namespace.name.toLowerCase() + "/views/" + _.underscore( this.constructor.name );
164
+
165
+ namespace: NAMESPACE
166
+
167
+ templateData: ->
168
+ { model: this.model, collection: this.collection }
169
+
170
+ renderTemplate:(name,data={})->
171
+ template = Lanes.Templates.find(name, this.namespace.name)
172
+ if template
173
+ template(data)
174
+ else
175
+ Lanes.fatal( "Template #{name} doesn't exist!" )
176
+ ''
177
+
178
+ renderTemplateMethod: (method)->
179
+ return null unless name = _.result(this, method)
180
+ this.renderTemplate(name, _.result(this, "#{method}Data") || @model)
181
+
182
+
183
+ # Remove this view by taking the element out of the DOM, and removing any
184
+ # applicable events listeners.
185
+ remove: ->
186
+ parsedBindings = this._parsedBindings;
187
+ if this.el && this.el.parentNode then this.el.parentNode.removeChild(this.el);
188
+ if this._subviews then _.chain(this._subviews).flatten().invoke('remove');
189
+ this.stopListening();
190
+ # TODO: Not sure if this is actually necessary.
191
+ # Just trying to de-reference this potentially large
192
+ # amount of generated functions to avoid memory leaks.
193
+ _.each(parsedBindings, (properties, modelName)->
194
+ _.each(properties, (value, key)->
195
+ delete parsedBindings[modelName][key];
196
+ );
197
+ delete parsedBindings[modelName];
198
+ );
199
+ this._unbindFromObject(@model, @modelEvents) if @model and @modelEvents
200
+ this._unbindFromObject(@collection, @collectionEvents) if @collection and @collectionEvents
201
+
202
+ Lanes.Views.Keys.remove(this, @key_bindings, @key_scope) if @key_bindings
203
+ this.trigger('remove', this);
204
+ return this;
205
+
206
+ # Change the view's element (`this.el` property), including event re-delegation.
207
+ _onElementChange: (element, delegate) ->
208
+ if changes = this.changedAttributes()
209
+ Lanes.$(changes['el']).off('.delegateEvents' + this.cid) if changes['el']
210
+ this.bindEvents()
211
+ this._cacheUI()
212
+ this._applyBindingsForKey();
213
+
214
+ _cacheUI:->
215
+ return unless this.ui
216
+ # store the ui hash in _uiBindings so they can be reset later
217
+ # and so re-rendering the view will be able to find the bindings
218
+ this._uiBindings = this.ui unless this._uiBindings
219
+
220
+ # get the bindings result, as a function or otherwise
221
+ bindings = _.result(this, '_uiBindings')
222
+
223
+ # empty the ui so we don't have anything to start with
224
+ this.ui = {};
225
+
226
+ # bind each of the selectors
227
+ for key, selector of bindings
228
+ this.ui[key] = this.$(selector)
229
+
230
+
231
+ # Sets callbacks, where `this.events` is a hash of
232
+ #
233
+ # *{"event selector": "callback"}*
234
+ #
235
+ # {
236
+ # 'mousedown .title': 'edit',
237
+ # 'click .button': 'save',
238
+ # 'click .open': function (e) { ... }
239
+ # }
240
+ #
241
+ # pairs. Callbacks will be bound to the view, with `this` set properly.
242
+ # Uses event delegation for efficiency.
243
+ # Omitting the selector binds the event to `this.el`.
244
+ # This only works for delegate-able events: not `focus`, `blur`, and
245
+ # not `change`, `submit`, and `reset` in Internet Explorer.
246
+ bindEvents: (events)->
247
+ return this if (!(events || (events = _.result(this, 'events'))))
248
+ this.unbindEvents();
249
+ for key, method of events
250
+ method = this[ method ] unless _.isFunction(method);
251
+ continue unless method
252
+ match = key.match( delegateEventSplitter )
253
+ this.bindEvent(match[1], match[2], _.bind(method, this))
254
+
255
+ return this;
256
+
257
+ # Add a single event listener to the view's element (or a child element
258
+ # using `selector`). This only works for delegate-able events: not `focus`,
259
+ # `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.
260
+ bindEvent: (eventName, selector, listener)->
261
+ this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener)
262
+
263
+ # Clears all callbacks previously bound to the view with `delegateEvents`.
264
+ # You usually don't need to use this, but may wish to if you have multiple
265
+ # views attached to the same DOM element.
266
+ unbindEvents: ->
267
+ this.$el.off('.delegateEvents' + this.cid) if this.el
268
+ return this;
269
+
270
+ # A finer-grained `unbind` for removing a single delegated event.
271
+ # `selector` and `listener` are both optional.
272
+ unbind: (eventName, selector, listener)->
273
+ this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener)
274
+
275
+
276
+ _applyBindingsForKey: (name)->
277
+ return unless this.el
278
+ for item, fns of this._parsedBindings.getGrouped(name)
279
+ for fn in fns
280
+ fn(this.el, _.getPath(this, item), _.last(item.split('.')))
281
+
282
+ _initializeBindings: ->
283
+ return unless this.bindings
284
+ this.on('all', (eventName)->
285
+ if eventName.slice(0, 7) == 'change:'
286
+ this._applyBindingsForKey(eventName.split(':')[1]);
287
+ ,this);
288
+
289
+ # ## _initializeSubviews
290
+ # this is called at setup and grabs declared subviews
291
+ _initializeSubviews: ->
292
+ return unless this.subviews
293
+ for name, definition of this.subviews
294
+ this._parseSubview(definition, name)
295
+
296
+ # ## _subviewClass
297
+ # helper to detect the class for a given subviev
298
+ _subviewClass: (subview)->
299
+ klass = if subview.component
300
+ Lanes.getPath(subview.component, Lanes.Components)
301
+ else if subview.view
302
+ if _.isString(subview.view)
303
+ Lanes.getPath(subview.view, this.namespace.ref['Views'] )
304
+ else
305
+ subview.view
306
+ Lanes.warn( "Unable to obtain view for %o", subview) if ! klass
307
+ klass
308
+
309
+ # ## _parseSubview
310
+ # helper for parsing out the subview declaration and registering
311
+ # the `waitFor` if need be.
312
+ _parseSubview: (subview, name)->
313
+ self = this;
314
+ opts = {
315
+ selector: subview.container || "[data-hook='#{subview.hook||name}']"
316
+ waitFor: subview.waitFor || '',
317
+ prepareView: subview.prepareView || (el,options)->
318
+ klass = self._subviewClass(subview)
319
+ if subview.collection
320
+ new Lanes.Vendor.Ampersand.CollectionView({
321
+ el: el, parent: self, viewOptions: options, view: klass,
322
+ collection: _.getPath(this,subview.collection)
323
+ })
324
+ else
325
+ new klass(_.extend(options,{ el: el, parent: self }))
326
+
327
+ }
328
+
329
+ action = ->
330
+ return if (!this.el || !(el = this.query(opts.selector)))
331
+ if (!opts.waitFor || _.getPath(this, opts.waitFor))
332
+ options = this.subviewOptions(name,subview)
333
+ options.subviewId = name
334
+ subview = this[name] = opts.prepareView.call(this, el, options);
335
+ subview.render();
336
+ this.off('change', action);
337
+
338
+ # we listen for main `change` items
339
+ this.on('change', action, this);
340
+
341
+ # ## subviewOptions
342
+ # Options to initailize a subview with when it's created
343
+ # Subviews will always be passed the parent (this) and the el.
344
+ # Additional options can be given by specifying "options" on the definition
345
+ # The options can be a method name to call or an object
346
+ # This method can also be overridden to specify the same options to all subviews
347
+ subviewOptions: (name,definition)->
348
+ this.resultsFor(definition.options, name, definition) || {}
349
+
350
+ # ## query
351
+ # Get an single element based on CSS selector scoped to this.el
352
+ # if you pass an empty string it return `this.el`.
353
+ # If you pass an element we just return it back.
354
+ # This lets us use `get` to handle cases where users
355
+ # can pass a selector or an already selected element.
356
+ query: (selector)->
357
+ return this el unless selector
358
+ if typeof selector == 'string'
359
+ return this.el if this.$el.is(selector)
360
+ return this.el.querySelector(selector) || undefined;
361
+ return selector;
362
+
363
+ # Called when a different model is set
364
+ _onModelChange: ->
365
+ for name, definition of this.subviews
366
+ continue unless ( view = this[name] )
367
+ view.model = Lanes.getPath(definition.model, this) if definition.model
368
+ view.collection = Lanes.getPath(definition.collection, this) if definition.collection
369
+ prev = this.previous('model')
370
+ return if prev == @model
371
+ this._unBindFromObject(prev, @modelEvents) if prev
372
+ this._bindToObject(@model, @modelEvents)
373
+
374
+ _onCollectionChange: ->
375
+ prev = this.previous('collection')
376
+ return if prev == @collection
377
+ this._unBindFromObject(prev, @collectionEvents) if prev
378
+ this._bindToObject(@collection, @collectionEvents)
379
+
380
+ _bindToObject: (state_object,events)->
381
+ for event, fn of events
382
+ fn = this[fn] unless _.isFunction(fn)
383
+ this.listenTo(state_object, event, fn, this)
384
+
385
+ _unbindFromObject: (state_object,events)->
386
+ for event, fn of events
387
+ fn = this[fn] unless _.isFunction(fn)
388
+ this.stopListening(state_object, event, fn, this)
389
+
390
+ initializeKeyBindings: Lanes.emptyFn
391
+
392
+ initializeFormBindings: ->
393
+ @_form_bindings = {}
394
+ for data, selector of @form_bindings
395
+ @_form_bindings[data] = new Lanes.Views.FormBindings(this, data, selector)
396
+
397
+ setFieldsFromBindings: ->
398
+ binding.setAllFields() for name, binding of @_form_bindings
399
+
400
+ viewpath: ''
401
+
402
+ detach: ->
403
+ this.el.parentNode.removeChild(this.el) if this.el.parentNode
404
+
405
+ $: (selector)->
406
+ this.$el.find(selector)
407
+
408
+
409
+ belongsToScreen: ->
410
+ view = this
411
+ while view and ! ( view instanceof Lanes.Views.Screen )
412
+ view = view.parent
413
+ view
414
+
415
+ @extended: (klass)->
416
+ # perhaps we should merge 'events','bindings'?
417
+
418
+
419
+ Lanes.lib.ModuleSupport.includeInto(@)
420
+ @include Lanes.lib.defer
421
+ @include Lanes.lib.debounce
422
+ @include Lanes.lib.results
423
+
424
+
425
+
426
+ Lanes.Views.Base = Lanes.lib.MakeBaseClass( Lanes.Vendor.Ampersand.State, ViewBase )
@@ -1,4 +1,4 @@
1
- class Lanes.View.FormBindings
1
+ class Lanes.Views.FormBindings
2
2
 
3
3
  constructor: (@view, @keypath, @selector)->
4
4
  _.bindAll(this,'onFieldChange')
@@ -1,5 +1,5 @@
1
1
 
2
- Lanes.View.fn = {
2
+ Lanes.Views.fn = {
3
3
 
4
4
  toggleClass: (class_name, selector='')->
5
5
  {
@@ -3,9 +3,9 @@ impl = {
3
3
  field: (name, options, writeable_input, readonly_input)->
4
4
  readonly_input = writeable_input if ! readonly_input
5
5
  o = this.field_options(name, options)
6
- if options.writable || Lanes.View.RenderContext.canRead(name)
6
+ if options.writable || Lanes.Views.RenderContext.canRead(name)
7
7
  contents = if options.unwrapped then "" else "<label class='skr #{o.widths}'><b>#{o.title}:</b>"
8
- contents += if options.writable || Lanes.View.RenderContext.canWrite(name)
8
+ contents += if options.writable || Lanes.Views.RenderContext.canWrite(name)
9
9
  writeable_input
10
10
  else
11
11
  readonly_input
@@ -15,7 +15,7 @@ impl = {
15
15
  this.markSafe(contents)
16
16
 
17
17
  template: (template,data)->
18
- this.markSafe( Lanes.Templates.find('view/_'+template)(data) )
18
+ this.markSafe( Lanes.Templates.find('views/_'+template)(data) )
19
19
 
20
20
  markSafe: (str)->
21
21
  result = new String(str)
@@ -36,7 +36,7 @@ impl = {
36
36
  ( "col-#{width}#{type}-#{widths[index]}" for index,width of ['xs','sm','md','lg'] ).join(' ')
37
37
  }
38
38
 
39
- Lanes.View.Helpers = {
39
+ Lanes.Views.Helpers = {
40
40
 
41
41
  elid: -> 'id="' + _.uniqueId('v') + '"'
42
42
 
@@ -47,7 +47,7 @@ Lanes.View.Helpers = {
47
47
  if _.isString(options)
48
48
  options={ name: options, text: _.titleize(options) }
49
49
  _.defaults(options, { css: options.name, icon: "icon-#{options.name}" })
50
- if options.name == 'save' && !Lanes.View.RenderContext.canWrite(name)
50
+ if options.name == 'save' && !Lanes.Views.RenderContext.canWrite(name)
51
51
  ""
52
52
  else
53
53
  impl.template('button', options )
@@ -65,7 +65,7 @@ Lanes.View.Helpers = {
65
65
  )
66
66
 
67
67
  subview: (name,options={})->
68
- definition = Lanes.View.RenderContext.view().subviews[name]
68
+ definition = Lanes.Views.RenderContext.view().subviews[name]
69
69
  selector = if definition.hook
70
70
  "data-hook='#{definition.hook}'"
71
71
  else
@@ -1,6 +1,6 @@
1
1
  km = Lanes.Vendor.KeyMaster
2
2
 
3
- Lanes.View.Keys = {
3
+ Lanes.Views.Keys = {
4
4
 
5
5
  scopes:{}
6
6
  defaultTime: 5000
@@ -14,13 +14,13 @@ Lanes.View.Keys = {
14
14
  return unless @timeout
15
15
  clearTimeout(@timeout)
16
16
  this.setScopeTimer(scope)
17
- Lanes.View.TimedHighlight.reset(scope.time || @defaultTime)
17
+ Lanes.Views.TimedHighlight.reset(scope.time || @defaultTime)
18
18
 
19
19
  addScope:(scope)->
20
20
  km(scope.shortcut, (ev)=>
21
21
  km.setScope(scope.name)
22
22
  for view in scope.views
23
- Lanes.View.TimedHighlight.on(view, scope.time || @defaultTime)
23
+ Lanes.Views.TimedHighlight.on(view, scope.time || @defaultTime)
24
24
 
25
25
  @setScopeTimer() unless scope.permanent
26
26
 
@@ -1,4 +1,4 @@
1
- class Lanes.View.ModelObserver extends Lanes.Data.State
1
+ class Lanes.Views.ModelObserver extends Lanes.Data.State
2
2
 
3
3
  model_events: {}
4
4
 
@@ -1,6 +1,6 @@
1
- class Lanes.View.ModelUpdate extends Lanes.View.Base
1
+ class Lanes.Views.ModelUpdate extends Lanes.Views.Base
2
2
 
3
- templateName: 'view/model-update'
3
+ template: 'view/model-update'
4
4
 
5
5
  bindings:
6
6
  'model.name':{ selector: 'a', type: 'text' }
@@ -1,14 +1,14 @@
1
1
  # Responsible for adding and removing a view's model(s) from Data.PubSub
2
- class Lanes.View.PubSub extends Lanes.View.ModelObserver
2
+ class Lanes.Views.PubSub extends Lanes.Views.ModelObserver
3
3
 
4
4
  model_events:
5
5
  'remote-update': 'onChange'
6
6
 
7
7
  hideUpdate: (field)->
8
- _.dom.removeClass(field,"updated")
8
+ Lanes.dom.removeClass(field,"updated")
9
9
 
10
10
  showUpdate: (field)->
11
- _.dom.addClass(field,"updated")
11
+ Lanes.dom.addClass(field,"updated")
12
12
  _.delay(@hideUpdate, 3000, field )
13
13
 
14
14
  onChange: (model,change)->
@@ -1,4 +1,4 @@
1
- Lanes.View.RenderContext = {
1
+ Lanes.Views.RenderContext = {
2
2
 
3
3
  stack: []
4
4
 
@@ -2,7 +2,7 @@
2
2
  class ModelSaver
3
3
 
4
4
  constructor: ( @element, @options )->
5
- @mask = new Lanes.View.TimedMask( @element, @options.message )
5
+ @mask = new Lanes.Views.TimedMask( @element, @options.message )
6
6
  @mask.prefixActions( "Save" )
7
7
  _.bindAll(this,'_onError','_onSuccess')
8
8
 
@@ -23,7 +23,7 @@ class ModelSaver
23
23
  @options.callback(success,resp,@options.model) if @options.callback
24
24
 
25
25
 
26
- Lanes.View.SaveNotify = ( view, options={} )->
26
+ Lanes.Views.SaveNotify = ( view, options={} )->
27
27
  el = if view.jquery then view else view.$el
28
28
  _.defaults( options, { model: view.model, message: "Saving, Please Wait…"} )
29
29
  ms = new ModelSaver(el, options)
@@ -1,4 +1,4 @@
1
- Lanes.View.TimedHighlight = {
1
+ Lanes.Views.TimedHighlight = {
2
2
 
3
3
  cssClass: 'highlighted'
4
4
  displayLength: 2000
@@ -1,4 +1,4 @@
1
- class Lanes.View.TimedMask
1
+ class Lanes.Views.TimedMask
2
2
  stages:
3
3
  pending:
4
4
  msg: "Please Wait …"
@@ -11,14 +11,14 @@ BREAKPOINTS = {
11
11
 
12
12
  ALL_INSTANCES = []
13
13
 
14
- class Lanes.View.InterfaceState extends Lanes.Data.BasicModel
14
+ class Lanes.Views.Viewport extends Lanes.Data.BasicModel
15
15
 
16
16
  constructor: ->
17
17
  super
18
18
  ALL_INSTANCES.push(this)
19
19
 
20
20
  this.on('change:root', =>
21
- @viewport_width = @root.width()
21
+ @width = @root.width()
22
22
  @root.data()['ui']=@
23
23
  )
24
24
  this.on('change:menu_view', =>
@@ -34,15 +34,15 @@ class Lanes.View.InterfaceState extends Lanes.Data.BasicModel
34
34
  type: 'string',
35
35
  values: [ 'menu-wide', 'menu-narrow', 'menu-hidden' ]
36
36
  }
37
- root: 'element'
38
- menu_view: 'any'
39
- viewport: 'element'
40
- viewport_width: 'number'
41
- viewport_height: 'number'
37
+ root: 'element'
38
+ menu_view: 'any'
39
+ el: 'element'
40
+ width: 'number'
41
+ height: 'number'
42
+ http_error: 'string'
43
+ selector: 'string'
44
+ instance: 'object'
42
45
  screen_menu_shown: 'boolean'
43
- http_error: 'string'
44
- selector: 'string'
45
- instance: 'object'
46
46
 
47
47
  derived:
48
48
  menu_width:
@@ -63,24 +63,24 @@ class Lanes.View.InterfaceState extends Lanes.Data.BasicModel
63
63
  @layout_size == 'tiny'
64
64
 
65
65
  screen_menu_position:
66
- deps: ['viewport_width'], fn: ->
67
- if this.viewport_width < BREAKPOINTS.sm + MENU_NARROW_WIDTH then 'top' else 'side'
66
+ deps: ['width'], fn: ->
67
+ if this.width < BREAKPOINTS.sm + MENU_NARROW_WIDTH then 'top' else 'side'
68
68
 
69
69
  screen_menu_size:
70
- deps: ['viewport_width','screen_menu_preference'], fn: ->
70
+ deps: ['width','screen_menu_preference'], fn: ->
71
71
  return @screen_menu_preference if @screen_menu_preference
72
- width = this.viewport_width
72
+ width = this.width
73
73
  switch
74
74
  when width < BREAKPOINTS.sm + MENU_NARROW_WIDTH then 'menu-hidden'
75
75
  when width < BREAKPOINTS.lg + MENU_WIDE_WIDTH then 'menu-narrow'
76
76
  else 'menu-wide'
77
77
  screens_width:
78
- deps: ['viewport_width','screen_menu_size'], fn: ->
79
- @viewport_width - @menu_width
78
+ deps: ['width','screen_menu_size'], fn: ->
79
+ @width - @menu_width
80
80
 
81
81
  screens_height:
82
- deps: ['viewport_height'], fn: ->
83
- @viewport_height - NAVBAR_HEIGHT
82
+ deps: ['height'], fn: ->
83
+ @height - NAVBAR_HEIGHT
84
84
 
85
85
  nextSidebarState: ->
86
86
  if ! @screen_menu_preference
@@ -0,0 +1,2 @@
1
+ //= require ./RenderContext
2
+ //= require_tree .