lanes 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/Rakefile +0 -42
- data/client/{javascripts/component → lanes/components}/Base.coffee +10 -10
- data/client/{javascripts/component → lanes/components}/ChoicesInput.coffee +0 -0
- data/client/lanes/components/enabled.js.erb +3 -0
- data/client/{javascripts/lib/create-namespace.js → lanes/components/enabled.scss.erb} +0 -0
- data/client/{javascripts/component → lanes/components}/grid/Editor.coffee +10 -13
- data/client/{javascripts/component → lanes/components/grid}/Grid.coffee +6 -6
- data/client/{javascripts/component → lanes/components}/grid/PopOverEditor.coffee +3 -3
- data/client/{javascripts/component → lanes/components}/grid/RowEditor.coffee +2 -3
- data/client/lanes/components/grid/config.json +3 -0
- data/client/{stylesheets/compoonents/grid-editors.scss → lanes/components/grid/editors.scss} +0 -0
- data/client/{stylesheets/compoonents → lanes/components/grid}/grid.scss +8 -6
- data/client/lanes/components/grid/index.js +8 -0
- data/client/{javascripts/component → lanes/components}/grid/popover-editor.html +0 -0
- data/client/{javascripts/component → lanes/components}/grid/row-editor.html +0 -0
- data/client/{javascripts/component/grid.html → lanes/components/grid/template.html} +0 -0
- data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/dataTables.bootstrap.js +0 -0
- data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/dataTables.scroller.js +0 -0
- data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/datatables.responsive.js +0 -0
- data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/index.js +0 -0
- data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/jquery.dataTables.js +1 -0
- data/client/lanes/components/index.js +2 -0
- data/client/lanes/components/modal/ModalDialog.coffee +47 -0
- data/client/lanes/components/modal/index.js +2 -0
- data/client/lanes/components/modal/modal.scss +20 -0
- data/client/{javascripts/component/modal.html → lanes/components/modal/template.html} +5 -4
- data/client/{javascripts/component → lanes/components/popover}/PopOver.coffee +4 -4
- data/client/lanes/components/popover/index.js +2 -0
- data/client/lanes/components/popover/popover.scss +1 -0
- data/client/{javascripts/component/popover.html → lanes/components/popover/template.html} +0 -0
- data/client/{javascripts/component → lanes/components/radio_group}/RadioGroup.coffee +1 -1
- data/client/{javascripts/component → lanes/components/record_finder}/RecordFinder.coffee +4 -4
- data/client/{javascripts/component/record-finder → lanes/components/record_finder}/clause.skr +0 -0
- data/client/{javascripts/component/record-finder → lanes/components/record_finder}/dialog.skr +0 -0
- data/client/{javascripts/component/record-finder → lanes/components/record_finder}/field.skr +0 -0
- data/client/lanes/components/select_field/SelectField.coffee +87 -0
- data/client/{screens/user-management → lanes/components/select_field}/index.js +0 -1
- data/client/{javascripts/workspace/tab.html → lanes/components/select_field/select_field.scss} +0 -0
- data/client/{javascripts → lanes}/data/Bootstrap.coffee +0 -0
- data/client/{javascripts → lanes}/data/ChangeSet.coffee +0 -0
- data/client/{javascripts → lanes}/data/Collection.coffee +37 -6
- data/client/{javascripts → lanes}/data/Config.coffee +0 -0
- data/client/{javascripts → lanes}/data/Model.coffee +8 -9
- data/client/{javascripts → lanes}/data/PubSub.coffee +0 -0
- data/client/{javascripts → lanes}/data/Query.coffee +0 -0
- data/client/{javascripts → lanes}/data/Screens.coffee +48 -19
- data/client/{javascripts → lanes}/data/Sync.coffee +5 -5
- data/client/lanes/data/User.coffee +46 -0
- data/client/{javascripts → lanes}/data/index.js +1 -2
- data/client/{javascripts → lanes}/data/mixins/HasCodeField.coffee +1 -1
- data/client/{javascripts → lanes}/extension/Base.coffee +1 -1
- data/client/lanes/extension/EarlyExtensions.js.erb +3 -0
- data/client/{javascripts → lanes}/extension/Extensions.coffee +5 -0
- data/client/{javascripts → lanes}/extension/GlAccounts.coffee +0 -0
- data/client/lanes/extension/LateLoaded.js.erb +3 -0
- data/client/lanes/extension/index.js +5 -0
- data/client/lanes/extension/namespace-available.js.erb +3 -0
- data/client/lanes/index.js +11 -0
- data/client/{javascripts → lanes}/lib/MakeBaseClass.coffee +0 -0
- data/client/{javascripts → lanes}/lib/ModuleSupport.coffee +0 -0
- data/client/{javascripts → lanes}/lib/Templates.coffee +2 -5
- data/{spec/client/foo_spec.js → client/lanes/lib/create-namespace.js} +0 -0
- data/client/{javascripts → lanes}/lib/debounce.coffee +0 -0
- data/client/{javascripts → lanes}/lib/defer.coffee +0 -0
- data/client/{javascripts → lanes}/lib/el.js +0 -0
- data/client/{javascripts → lanes}/lib/index.js +0 -4
- data/client/{javascripts → lanes}/lib/loader.coffee +15 -10
- data/client/{javascripts → lanes}/lib/namespace.coffee +3 -0
- data/client/{javascripts → lanes}/lib/noConflict.coffee +1 -0
- data/client/{javascripts → lanes}/lib/promise_helpers.coffee +0 -0
- data/client/{javascripts → lanes}/lib/results.coffee +0 -0
- data/client/{javascripts → lanes}/lib/utilFunctions.coffee +11 -13
- data/client/{javascripts → lanes}/plugins/ResizeSensor.js +0 -0
- data/client/lanes/plugins/index.js +1 -0
- data/client/{javascripts → lanes}/plugins/overlay.coffee +0 -0
- data/client/{javascripts → lanes}/plugins/trigger.coffee +0 -0
- data/client/lanes/screens/Base.coffee +40 -0
- data/client/{javascripts/view/mixins/ScreenChangeListener.coffee → lanes/screens/ChangeListener.coffee} +2 -2
- data/client/lanes/screens/Router.coffee +6 -0
- data/client/lanes/screens/index.js +1 -0
- data/client/{javascripts/view → lanes/screens}/screen-definitions.js.erb +0 -0
- data/client/{javascripts → lanes}/vendor/bootstrap/affix.js +43 -23
- data/client/{javascripts → lanes}/vendor/bootstrap/alert.js +6 -4
- data/client/{javascripts → lanes}/vendor/bootstrap/button.js +16 -10
- data/client/{javascripts → lanes}/vendor/bootstrap/carousel.js +27 -10
- data/client/{javascripts → lanes}/vendor/bootstrap/collapse.js +69 -28
- data/client/{javascripts → lanes}/vendor/bootstrap/dropdown.js +20 -10
- data/client/{javascripts → lanes}/vendor/bootstrap/modal.js +67 -23
- data/client/{javascripts → lanes}/vendor/bootstrap/popover.js +13 -7
- data/client/{javascripts → lanes}/vendor/bootstrap/scrollspy.js +12 -7
- data/client/{javascripts → lanes}/vendor/bootstrap/tab.js +41 -16
- data/client/{javascripts → lanes}/vendor/bootstrap/tooltip.js +60 -39
- data/client/{javascripts → lanes}/vendor/bootstrap/transition.js +1 -1
- data/client/{javascripts → lanes}/vendor/jquery-2.js +0 -0
- data/client/{javascripts → lanes}/vendor/jquery.tap.js +0 -0
- data/client/{javascripts → lanes}/vendor/magicsuggest.js +0 -0
- data/client/{javascripts → lanes}/vendor/message-bus.js +0 -0
- data/client/lanes/vendor/modern-stack.js +27 -0
- data/client/lanes/vendor/packaged.js +13698 -0
- data/client/{javascripts/view → lanes/views}/Assets.coffee +1 -1
- data/client/lanes/views/Base.coffee +426 -0
- data/client/{javascripts/view → lanes/views}/FormBindings.coffee +1 -1
- data/client/{javascripts/view → lanes/views}/Functions.coffee +1 -1
- data/client/{javascripts/view → lanes/views}/Helpers.coffee +6 -6
- data/client/{javascripts/view → lanes/views}/Keys.coffee +3 -3
- data/client/{javascripts/view → lanes/views}/ModelObserver.coffee +1 -1
- data/client/{javascripts/view → lanes/views}/ModelUpdate.coffee +2 -2
- data/client/{javascripts/view → lanes/views}/PubSub.coffee +3 -3
- data/client/{javascripts/view → lanes/views}/RenderContext.coffee +1 -1
- data/client/{javascripts/view → lanes/views}/SaveNotify.coffee +2 -2
- data/client/{javascripts/view → lanes/views}/TimedHighlight.coffee +1 -1
- data/client/{javascripts/view → lanes/views}/TimedMask.coffee +1 -1
- data/client/{javascripts/view/InterfaceState.coffee → lanes/views/Viewport.coffee} +18 -18
- data/client/{javascripts/view → lanes/views}/_button.html +0 -0
- data/client/{javascripts/view → lanes/views}/_toolbar.html +0 -0
- data/client/lanes/views/index.js +2 -0
- data/client/{javascripts/view → lanes/views}/model-update.html +0 -0
- data/client/{javascripts → lanes}/workspace/ActiveScreensSwitcher.coffee +23 -27
- data/client/{javascripts → lanes}/workspace/Instance.es6 +25 -21
- data/client/{javascripts → lanes}/workspace/Layout.coffee +6 -5
- data/client/{javascripts → lanes}/workspace/Navbar.coffee +2 -2
- data/client/{javascripts → lanes}/workspace/Pages.coffee +9 -13
- data/client/{javascripts → lanes}/workspace/ScreensMenu.coffee +11 -11
- data/client/{javascripts → lanes}/workspace/index.js +7 -5
- data/client/{javascripts → lanes}/workspace/layout.html +0 -0
- data/client/{javascripts → lanes}/workspace/menu.html +0 -0
- data/client/{javascripts → lanes}/workspace/menu_toggle.html +0 -0
- data/client/{javascripts → lanes}/workspace/navbar.html +0 -0
- data/client/{javascripts → lanes}/workspace/pages.html +0 -0
- data/client/{javascripts → lanes}/workspace/screens-menu.html +0 -0
- data/client/{javascripts → lanes}/workspace/screens-switcher.html +0 -0
- data/client/lanes/workspace/tab.html +0 -0
- data/client/lanes/workspace.scss.erb +21 -0
- data/client/{javascripts/lanes-complete.js → lanes-complete.js} +0 -0
- data/client/lanes-workspace.scss.erb +21 -0
- data/client/{stylesheets/compoonents → styles/components}/all.scss +0 -0
- data/client/{stylesheets/compoonents → styles/components}/changes-notification.scss +0 -0
- data/client/{stylesheets/compoonents → styles/components}/record-finder.scss +0 -0
- data/client/{stylesheets/compoonents → styles/components}/suggest.scss +0 -0
- data/client/{stylesheets → styles}/fonts/icomoon.eot +0 -0
- data/client/{stylesheets → styles}/fonts/icomoon.svg +0 -0
- data/client/{stylesheets → styles}/fonts/icomoon.ttf +0 -0
- data/client/{stylesheets → styles}/fonts/icomoon.woff +0 -0
- data/client/{stylesheets → styles}/fonts/selection.json +0 -0
- data/client/{stylesheets/fonts/style.css → styles/fonts/style.scss} +0 -0
- data/client/{stylesheets → styles}/fonts.scss +6 -6
- data/client/{stylesheets → styles}/forms.scss +0 -0
- data/client/{stylesheets → styles}/index.css +0 -0
- data/client/{stylesheets → styles}/keybindings.scss +0 -0
- data/client/{stylesheets → styles}/layout.scss +1 -1
- data/client/{stylesheets → styles}/plugins/all.scss +0 -0
- data/client/{stylesheets → styles}/plugins/overlay.scss +1 -1
- data/client/{stylesheets → styles}/plugins/resize-sensor.scss +0 -0
- data/client/{stylesheets → styles}/screens.scss +0 -0
- data/client/{stylesheets → styles}/tabs.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_alerts.scss +0 -0
- data/client/styles/vendor/bootstrap/_badges.scss +63 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_breadcrumbs.scss +0 -0
- data/client/styles/vendor/bootstrap/_button-groups.scss +243 -0
- data/client/styles/vendor/bootstrap/_buttons.scss +160 -0
- data/client/styles/vendor/bootstrap/_carousel.scss +267 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_close.scss +0 -0
- data/client/styles/vendor/bootstrap/_code.scss +69 -0
- data/client/styles/vendor/bootstrap/_component-animations.scss +38 -0
- data/client/styles/vendor/bootstrap/_dropdowns.scss +213 -0
- data/client/styles/vendor/bootstrap/_forms.scss +548 -0
- data/client/styles/vendor/bootstrap/_glyphicons.scss +234 -0
- data/client/styles/vendor/bootstrap/_grid.scss +84 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_input-groups.scss +0 -0
- data/client/styles/vendor/bootstrap/_jumbotron.scss +49 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_labels.scss +0 -0
- data/client/styles/vendor/bootstrap/_list-group.scss +124 -0
- data/client/styles/vendor/bootstrap/_media.scss +47 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_mixins.scss +0 -0
- data/client/styles/vendor/bootstrap/_modals.scss +148 -0
- data/client/styles/vendor/bootstrap/_navbar.scss +662 -0
- data/client/styles/vendor/bootstrap/_navs.scss +244 -0
- data/client/styles/vendor/bootstrap/_normalize.scss +427 -0
- data/client/styles/vendor/bootstrap/_pager.scss +54 -0
- data/client/styles/vendor/bootstrap/_pagination.scss +88 -0
- data/client/styles/vendor/bootstrap/_panels.scss +261 -0
- data/client/styles/vendor/bootstrap/_popovers.scss +135 -0
- data/client/styles/vendor/bootstrap/_print.scss +107 -0
- data/client/styles/vendor/bootstrap/_progress-bars.scss +87 -0
- data/client/styles/vendor/bootstrap/_responsive-embed.scss +35 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_responsive-utilities.scss +0 -0
- data/client/styles/vendor/bootstrap/_scaffolding.scss +150 -0
- data/client/styles/vendor/bootstrap/_tables.scss +234 -0
- data/client/styles/vendor/bootstrap/_theme.scss +272 -0
- data/client/styles/vendor/bootstrap/_thumbnails.scss +38 -0
- data/client/styles/vendor/bootstrap/_tooltip.scss +103 -0
- data/client/styles/vendor/bootstrap/_type.scss +298 -0
- data/client/styles/vendor/bootstrap/_utilities.scss +56 -0
- data/client/styles/vendor/bootstrap/_variables.scss +864 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/_wells.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_alerts.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_background-variant.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_border-radius.scss +0 -0
- data/client/styles/vendor/bootstrap/mixins/_buttons.scss +52 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_center-block.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_clearfix.scss +0 -0
- data/client/styles/vendor/bootstrap/mixins/_forms.scss +88 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_gradients.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_grid-framework.scss +0 -0
- data/client/styles/vendor/bootstrap/mixins/_grid.scss +122 -0
- data/client/styles/vendor/bootstrap/mixins/_hide-text.scss +21 -0
- data/client/styles/vendor/bootstrap/mixins/_image.scss +33 -0
- data/client/styles/vendor/bootstrap/mixins/_labels.scss +12 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_list-group.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_nav-divider.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_nav-vertical-align.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_opacity.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_pagination.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_panels.scss +0 -0
- data/client/styles/vendor/bootstrap/mixins/_progress-bar.scss +10 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_reset-filter.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_resize.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_responsive-visibility.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_size.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_tab-focus.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_table-row.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_text-emphasis.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_text-overflow.scss +0 -0
- data/client/styles/vendor/bootstrap/mixins/_vendor-prefixes.scss +222 -0
- data/client/styles/vendor/bootstrap/old/_alerts.scss +68 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_badges.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_breadcrumbs.scss +26 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_button-groups.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_buttons.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_carousel.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_close.scss +35 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_code.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_component-animations.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_dropdowns.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_forms.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_glyphicons.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_grid.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_input-groups.scss +166 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_jumbotron.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_labels.scss +66 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_list-group.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_media.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_mixins.scss +39 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_modals.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_navbar.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_navs.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_normalize.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_pager.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_pagination.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_panels.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_popovers.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_print.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_progress-bars.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_responsive-embed.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_responsive-utilities.scss +174 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_scaffolding.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_tables.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_theme.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_thumbnails.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_tooltip.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_type.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_utilities.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_variables.scss +0 -0
- data/client/styles/vendor/bootstrap/old/_wells.scss +29 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/bootstrap.scss +0 -0
- data/client/styles/vendor/bootstrap/old/mixins/_alerts.scss +14 -0
- data/client/styles/vendor/bootstrap/old/mixins/_background-variant.scss +11 -0
- data/client/styles/vendor/bootstrap/old/mixins/_border-radius.scss +18 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_buttons.scss +0 -0
- data/client/styles/vendor/bootstrap/old/mixins/_center-block.scss +7 -0
- data/client/styles/vendor/bootstrap/old/mixins/_clearfix.scss +22 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_forms.scss +0 -0
- data/client/styles/vendor/bootstrap/old/mixins/_gradients.scss +58 -0
- data/client/styles/vendor/bootstrap/old/mixins/_grid-framework.scss +81 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_grid.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_hide-text.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_image.scss +0 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_labels.scss +0 -0
- data/client/styles/vendor/bootstrap/old/mixins/_list-group.scss +31 -0
- data/client/styles/vendor/bootstrap/old/mixins/_nav-divider.scss +10 -0
- data/client/styles/vendor/bootstrap/old/mixins/_nav-vertical-align.scss +9 -0
- data/client/styles/vendor/bootstrap/old/mixins/_opacity.scss +8 -0
- data/client/styles/vendor/bootstrap/old/mixins/_pagination.scss +23 -0
- data/client/styles/vendor/bootstrap/old/mixins/_panels.scss +24 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_progress-bar.scss +0 -0
- data/client/styles/vendor/bootstrap/old/mixins/_reset-filter.scss +8 -0
- data/client/styles/vendor/bootstrap/old/mixins/_resize.scss +6 -0
- data/client/styles/vendor/bootstrap/old/mixins/_responsive-visibility.scss +21 -0
- data/client/styles/vendor/bootstrap/old/mixins/_size.scss +10 -0
- data/client/styles/vendor/bootstrap/old/mixins/_tab-focus.scss +9 -0
- data/client/styles/vendor/bootstrap/old/mixins/_table-row.scss +28 -0
- data/client/styles/vendor/bootstrap/old/mixins/_text-emphasis.scss +11 -0
- data/client/styles/vendor/bootstrap/old/mixins/_text-overflow.scss +8 -0
- data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_vendor-prefixes.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap-custom-grid.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap-custom-modals.scss +0 -0
- data/client/{stylesheets → styles}/vendor/bootstrap.scss +14 -9
- data/client/{stylesheets → styles}/vendor/dataTables.scss +0 -0
- data/lanes.gemspec +5 -1
- data/lib/lanes/api/controller.rb +47 -6
- data/lib/lanes/api/helper_methods.rb +2 -10
- data/lib/lanes/api/javascript_processor.rb +17 -7
- data/lib/lanes/api/null_authentication_provider.rb +33 -0
- data/lib/lanes/api/request_wrapper.rb +49 -28
- data/lib/lanes/api/root.rb +12 -30
- data/lib/lanes/api/routing.rb +37 -0
- data/lib/lanes/api/sprockets_compressor.rb +35 -0
- data/lib/lanes/api/sprockets_extension.rb +69 -0
- data/lib/lanes/api/test_specs.rb +13 -9
- data/lib/lanes/api.rb +2 -18
- data/lib/lanes/cli.rb +22 -2
- data/lib/lanes/command/app.rb +49 -0
- data/lib/lanes/command/client_model_update.rb +65 -0
- data/lib/lanes/command/console.rb +20 -0
- data/lib/lanes/command/db.rb +33 -0
- data/lib/lanes/command/db.usage +1 -0
- data/lib/lanes/command/generate.rb +21 -0
- data/lib/lanes/command/generate_model.rb +105 -0
- data/lib/lanes/command/generate_model.usage +45 -0
- data/lib/lanes/command/generate_screen.rb +31 -0
- data/lib/lanes/command/generate_screen.usage +11 -0
- data/lib/lanes/command/generate_view.rb +22 -0
- data/lib/lanes/command/generate_view.usage +13 -0
- data/lib/lanes/command/model_attribute.rb +188 -0
- data/lib/lanes/command/named_command.rb +27 -0
- data/lib/lanes/command/server.rb +19 -0
- data/lib/lanes/command/server.usage +3 -0
- data/lib/lanes/command/templates/Gemfile +10 -0
- data/lib/lanes/{generators/app → command/templates}/Guardfile +0 -0
- data/lib/lanes/command/templates/Rakefile +2 -0
- data/lib/lanes/command/templates/client/Extension.coffee +5 -0
- data/lib/lanes/command/templates/client/components/.gitkeep +0 -0
- data/lib/lanes/command/templates/client/components/Component.coffee +1 -0
- data/lib/lanes/command/templates/client/data/Model.coffee +24 -0
- data/lib/lanes/command/templates/client/namespace-extension.js +17 -0
- data/lib/lanes/command/templates/client/screens/Screen.coffee +9 -0
- data/lib/lanes/command/templates/client/screens/index.js +5 -0
- data/lib/lanes/command/templates/client/screens/layout.html +3 -0
- data/lib/lanes/command/templates/client/screens/styles.scss +9 -0
- data/lib/lanes/command/templates/client/styles/styles.scss +1 -0
- data/lib/lanes/command/templates/client/views/.gitkeep +0 -0
- data/lib/lanes/command/templates/client/views/View.coffee +9 -0
- data/lib/lanes/command/templates/client/views/template.html +3 -0
- data/lib/lanes/{generators/app → command/templates}/config/database.yml +0 -0
- data/lib/lanes/command/templates/config/lanes.rb +7 -0
- data/lib/lanes/command/templates/config/routes.rb +2 -0
- data/lib/lanes/{generators/app → command/templates}/config.ru +1 -0
- data/lib/lanes/command/templates/db/create_table_migration.rb +19 -0
- data/lib/lanes/command/templates/gitignore +1 -0
- data/lib/lanes/command/templates/lib/namespace/extension.rb +13 -0
- data/lib/lanes/command/templates/lib/namespace/model.rb +7 -0
- data/lib/lanes/command/templates/lib/namespace/screen.rb +17 -0
- data/lib/lanes/command/templates/lib/namespace/version.rb +3 -0
- data/lib/lanes/command/templates/lib/namespace.rb +12 -0
- data/lib/lanes/command/templates/spec/client/data/ModelSpec.coffee +5 -0
- data/lib/lanes/command/templates/spec/client/views/ViewSpec.coffee +5 -0
- data/lib/lanes/command/templates/spec/fixtures/namespace/model.yml +16 -0
- data/lib/lanes/command/templates/spec/namespace/model_spec.rb +10 -0
- data/lib/lanes/command/templates/spec/spec_helper.rb +15 -0
- data/lib/lanes/command/update.rb +13 -0
- data/lib/lanes/command/update_model.rb +125 -0
- data/lib/lanes/command/update_model.usage +2 -0
- data/lib/lanes/command.rb +37 -0
- data/lib/lanes/components.rb +45 -0
- data/lib/lanes/concerns/set_attribute_data.rb +2 -2
- data/lib/lanes/configuration.rb +3 -3
- data/lib/lanes/db.rb +5 -39
- data/lib/lanes/extension.rb +64 -19
- data/lib/lanes/guard_tasks.rb +7 -5
- data/lib/lanes/rake_tasks.rb +47 -0
- data/lib/lanes/screens.rb +1 -48
- data/{spec → lib/lanes}/spec_helper.rb +0 -0
- data/lib/lanes/version.rb +1 -1
- data/lib/lanes.rb +1 -3
- data/npm-build/compile.coffee +1 -1
- data/npm-build/package.json +5 -5
- data/npm-build/template.js +13 -13
- data/spec/api/javascript_processor_spec.rb +1 -1
- data/spec/client/view/BaseSpec.coffee +166 -0
- data/spec/helpers/jasmine-jquery.js +813 -0
- data/spec/helpers/jasmine-matchers.js +1586 -0
- data/tasks/migrations.rake +1 -1
- data/views/index.erb +9 -13
- metadata +419 -268
- data/client/javascripts/component/ModalDialog.coffee +0 -44
- data/client/javascripts/component/SelectField.coffee +0 -43
- data/client/javascripts/component/TaggedField.coffee +0 -27
- data/client/javascripts/component/index.js +0 -5
- data/client/javascripts/data/Roles.coffee +0 -91
- data/client/javascripts/data/User.coffee +0 -70
- data/client/javascripts/extension/index.js +0 -6
- data/client/javascripts/extension/load.js.erb +0 -3
- data/client/javascripts/lanes-workspace.js +0 -1
- data/client/javascripts/lib/underscore.inflection.js +0 -210
- data/client/javascripts/plugins/index.js +0 -4
- data/client/javascripts/vendor/modern-stack.js +0 -14
- data/client/javascripts/vendor/packaged.js +0 -13769
- data/client/javascripts/view/Base.coffee +0 -231
- data/client/javascripts/view/Screen.coffee +0 -30
- data/client/javascripts/view/index.js +0 -10
- data/client/javascripts/workspace/LoginDialog.coffee +0 -33
- data/client/javascripts/workspace/login-dialog.html +0 -16
- data/client/screens/user-management/UserEditScreen.coffee +0 -21
- data/client/screens/user-management/UserManagement.coffee +0 -24
- data/client/screens/user-management/grid-popover-editor.html +0 -33
- data/client/screens/user-management/index.css +0 -4
- data/client/screens/user-management/user-management-styles.scss +0 -7
- data/client/screens/user-management/user-management.html +0 -8
- data/client/stylesheets/compoonents/modal-dialog.scss +0 -23
- data/client/stylesheets/lanes-workspace.scss +0 -17
- data/config/puma.rb +0 -7
- data/db/seed.rb +0 -37
- data/foo/Gemfile +0 -5
- data/foo/Guardfile +0 -13
- data/foo/foo/Gemfile +0 -5
- data/foo/foo/lib/foo.rb +0 -7
- data/foo/lib/foo/version.rb +0 -3
- data/foo/lib/foo.rb +0 -8
- data/lib/lanes/access/locked_fields.rb +0 -43
- data/lib/lanes/access/role.rb +0 -58
- data/lib/lanes/access/role_collection.rb +0 -75
- data/lib/lanes/access/roles/administrator.rb +0 -25
- data/lib/lanes/access/roles/support.rb +0 -13
- data/lib/lanes/access/user_maint_screen.rb +0 -32
- data/lib/lanes/access.rb +0 -50
- data/lib/lanes/api/asset_pipeline.rb +0 -59
- data/lib/lanes/api/authentication_helper.rb +0 -21
- data/lib/lanes/api/authentication_provider.rb +0 -45
- data/lib/lanes/api/default_routes.rb +0 -35
- data/lib/lanes/api/skr_templates.rb +0 -60
- data/lib/lanes/concerns/track_modifications.rb +0 -51
- data/lib/lanes/db/seed.rb +0 -27
- data/lib/lanes/generators/app/Gemfile +0 -5
- data/lib/lanes/generators/app/Rakefile +0 -9
- data/lib/lanes/generators/app/lib/main_class/version.rb +0 -3
- data/lib/lanes/generators/app/lib/main_class.rb +0 -8
- data/lib/lanes/generators/app.rb +0 -36
- data/lib/lanes/user.rb +0 -127
- data/spec/client/component/ChoicesInputSpec.coffee +0 -12
- data/spec/client/component/foo_spec.coffee +0 -4
- data/spec/client/support/jasmine.yml +0 -128
- data/spec/client/support/jasmine_helper.rb +0 -15
- data/spec/helpers/SpecHelper.js +0 -18
@@ -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 )
|
@@ -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.
|
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.
|
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('
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
23
|
+
Lanes.Views.TimedHighlight.on(view, scope.time || @defaultTime)
|
24
24
|
|
25
25
|
@setScopeTimer() unless scope.permanent
|
26
26
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# Responsible for adding and removing a view's model(s) from Data.PubSub
|
2
|
-
class Lanes.
|
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
|
-
|
8
|
+
Lanes.dom.removeClass(field,"updated")
|
9
9
|
|
10
10
|
showUpdate: (field)->
|
11
|
-
|
11
|
+
Lanes.dom.addClass(field,"updated")
|
12
12
|
_.delay(@hideUpdate, 3000, field )
|
13
13
|
|
14
14
|
onChange: (model,change)->
|
@@ -2,7 +2,7 @@
|
|
2
2
|
class ModelSaver
|
3
3
|
|
4
4
|
constructor: ( @element, @options )->
|
5
|
-
@mask = new Lanes.
|
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.
|
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)
|
@@ -11,14 +11,14 @@ BREAKPOINTS = {
|
|
11
11
|
|
12
12
|
ALL_INSTANCES = []
|
13
13
|
|
14
|
-
class Lanes.
|
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
|
-
@
|
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:
|
38
|
-
menu_view:
|
39
|
-
|
40
|
-
|
41
|
-
|
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: ['
|
67
|
-
if this.
|
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: ['
|
70
|
+
deps: ['width','screen_menu_preference'], fn: ->
|
71
71
|
return @screen_menu_preference if @screen_menu_preference
|
72
|
-
width = this.
|
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: ['
|
79
|
-
@
|
78
|
+
deps: ['width','screen_menu_size'], fn: ->
|
79
|
+
@width - @menu_width
|
80
80
|
|
81
81
|
screens_height:
|
82
|
-
deps: ['
|
83
|
-
@
|
82
|
+
deps: ['height'], fn: ->
|
83
|
+
@height - NAVBAR_HEIGHT
|
84
84
|
|
85
85
|
nextSidebarState: ->
|
86
86
|
if ! @screen_menu_preference
|
File without changes
|
File without changes
|
File without changes
|