lanes 0.1.2 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -0
- data/client/lanes/access/Extension.coffee +19 -0
- data/client/lanes/access/LoginDialog.coffee +47 -0
- data/client/lanes/access/Roles.coffee +88 -0
- data/client/lanes/access/User.coffee +72 -0
- data/client/lanes/access/index.js +5 -0
- data/client/lanes/access/login-dialog.html +16 -0
- data/client/lanes/access/screens/user-management/GridUserEditor.coffee +25 -0
- data/client/lanes/access/screens/user-management/UserManagement.coffee +24 -0
- data/client/lanes/access/screens/user-management/grid-popover-editor.html +33 -0
- data/client/lanes/access/screens/user-management/index.js +3 -0
- data/client/lanes/access/screens/user-management/index.scss +7 -0
- data/client/lanes/access/screens/user-management/screen.html +7 -0
- data/client/lanes/{components/enabled.scss.erb → access/styles.scss} +0 -0
- data/{lib/lanes/command/templates/client/components → client/lanes/access/views}/.gitkeep +0 -0
- data/client/lanes/components/Base.coffee +3 -4
- data/client/lanes/components/enabled.js.erb +2 -0
- data/client/lanes/components/grid/Editor.coffee +1 -1
- data/client/lanes/components/grid/Grid.coffee +26 -27
- data/client/lanes/components/grid/{_index.scss → styles.scss} +0 -0
- data/client/lanes/components/grid/template.html +1 -1
- data/client/lanes/components/grid/vendor/dataTables.scroller.js +119 -42
- data/client/lanes/components/grid/vendor/jquery.dataTables.js +984 -526
- data/client/lanes/components/modal/ModalDialog.coffee +25 -4
- data/client/lanes/components/modal/styles.scss +19 -0
- data/client/lanes/components/modal/template.html +2 -2
- data/client/lanes/components/multi-select/MultiSelect.coffee +46 -0
- data/client/lanes/components/popover/PopOver.coffee +1 -1
- data/client/lanes/components/popover/styles.scss +2 -0
- data/client/lanes/components/{radio_group → radio-group}/RadioGroup.coffee +12 -23
- data/client/lanes/components/radio-group/index.js +1 -0
- data/client/lanes/components/radio-group/styles.scss +1 -0
- data/client/lanes/components/record-finder/Clause.coffee +38 -0
- data/client/lanes/components/record-finder/Dialog.coffee +45 -0
- data/client/lanes/components/record-finder/RecordFinder.coffee +55 -0
- data/client/lanes/components/{record_finder/clause.skr → record-finder/clause.html} +7 -5
- data/client/lanes/components/record-finder/config.json +3 -0
- data/client/lanes/components/{record_finder/dialog.skr → record-finder/dialog.html} +0 -0
- data/client/lanes/components/{record_finder/field.skr → record-finder/field.html} +1 -1
- data/client/lanes/components/record-finder/index.js +4 -0
- data/client/lanes/{styles/components/record-finder.scss → components/record-finder/styles.scss} +22 -20
- data/client/lanes/components/select-field/SelectField.coffee +62 -0
- data/client/lanes/components/{select_field → select-field}/index.js +0 -0
- data/client/lanes/components/{select_field/_index.scss → select-field/styles.scss} +0 -0
- data/client/lanes/extension/EarlyExtensions.js.erb +3 -3
- data/client/lanes/extension/Extensions.coffee +4 -1
- data/client/lanes/extension/LateLoaded.js.erb +3 -3
- data/client/lanes/index.js +2 -2
- data/client/lanes/index.scss.erb +30 -0
- data/client/lanes/lib/MakeBaseClass.coffee +20 -19
- data/client/lanes/lib/ModuleSupport.coffee +1 -1
- data/client/lanes/lib/results.coffee +1 -9
- data/client/lanes/lib/utilFunctions.coffee +56 -10
- data/client/lanes/models/Base.coffee +57 -116
- data/client/lanes/models/ChangeMonitor.coffee +29 -0
- data/client/lanes/models/ChangeSet.coffee +3 -3
- data/client/lanes/models/Collection.coffee +36 -4
- data/client/lanes/models/ModelAssociations.coffee +118 -0
- data/client/lanes/models/PubSub.coffee +5 -5
- data/client/lanes/models/Query.coffee +37 -27
- data/client/lanes/models/Sync.coffee +1 -1
- data/client/lanes/models/index.js +1 -0
- data/client/lanes/screens/Base.coffee +5 -8
- data/client/lanes/screens/ChangeListener.coffee +6 -3
- data/client/lanes/{models/Screens.coffee → screens/Definitions.coffee} +22 -9
- data/client/lanes/screens/Instance.coffee +22 -22
- data/client/lanes/screens/Router.coffee +1 -3
- data/client/lanes/screens/all.js.erb +3 -0
- data/client/lanes/screens/index.js +6 -1
- data/client/lanes/screens/{screen-definitions.js.erb → register.js.erb} +3 -3
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_alerts.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_badges.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_breadcrumbs.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_button-groups.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_buttons.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_carousel.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_close.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_code.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_component-animations.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_dropdowns.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_forms.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_glyphicons.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_grid.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_input-groups.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_jumbotron.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_labels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_list-group.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_media.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_mixins.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_modals.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_navbar.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_navs.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_normalize.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_pager.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_pagination.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_panels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_popovers.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_print.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_progress-bars.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_responsive-embed.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_responsive-utilities.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_scaffolding.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_tables.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_theme.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_thumbnails.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_tooltip.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_type.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_utilities.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_variables.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/_wells.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_alerts.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_background-variant.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_border-radius.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_buttons.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_center-block.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_clearfix.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_forms.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_gradients.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_grid-framework.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_grid.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_hide-text.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_image.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_labels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_list-group.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_nav-divider.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_nav-vertical-align.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_opacity.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_pagination.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_panels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_progress-bar.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_reset-filter.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_resize.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_responsive-visibility.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_size.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_tab-focus.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_table-row.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_text-emphasis.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_text-overflow.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/mixins/_vendor-prefixes.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_alerts.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_badges.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_breadcrumbs.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_button-groups.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_buttons.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_carousel.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_close.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_code.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_component-animations.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_dropdowns.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_forms.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_glyphicons.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_grid.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_input-groups.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_jumbotron.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_labels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_list-group.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_media.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_mixins.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_modals.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_navbar.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_navs.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_normalize.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_pager.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_pagination.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_panels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_popovers.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_print.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_progress-bars.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_responsive-embed.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_responsive-utilities.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_scaffolding.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_tables.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_theme.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_thumbnails.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_tooltip.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_type.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_utilities.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_variables.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/_wells.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/bootstrap.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_alerts.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_background-variant.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_border-radius.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_buttons.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_center-block.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_clearfix.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_forms.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_gradients.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_grid-framework.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_grid.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_hide-text.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_image.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_labels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_list-group.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_nav-divider.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_nav-vertical-align.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_opacity.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_pagination.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_panels.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_progress-bar.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_reset-filter.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_resize.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_responsive-visibility.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_size.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_tab-focus.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_table-row.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_text-emphasis.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_text-overflow.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap → bootstrap}/old/mixins/_vendor-prefixes.scss +0 -0
- data/client/lanes/styles/{vendor/bootstrap-custom-grid.scss → bootstrap-custom-grid.scss} +0 -0
- data/client/lanes/styles/{vendor/bootstrap-custom-modals.scss → bootstrap-custom-modals.scss} +0 -0
- data/client/lanes/styles/bootstrap.scss +71 -0
- data/client/lanes/styles/{vendor/dataTables.scss → dataTables.scss} +0 -0
- data/client/lanes/styles/fonts.scss +9 -20
- data/client/lanes/vendor/packaged.js +27 -25
- data/client/lanes/views/Base.coffee +47 -34
- data/client/lanes/views/FormBindings.coffee +10 -9
- data/client/lanes/views/Helpers.coffee +14 -16
- data/client/lanes/views/ModelObserver.coffee +4 -4
- data/client/lanes/views/ModelUpdate.coffee +5 -2
- data/client/lanes/views/PubSub.coffee +1 -1
- data/client/lanes/views/Viewport.coffee +8 -78
- data/client/lanes/views/_button.html +1 -1
- data/client/lanes/views/_toolbar.html +21 -25
- data/client/lanes/views/model-update.html +7 -5
- data/client/lanes/workspace/ActiveScreensSwitcher.coffee +6 -12
- data/client/lanes/workspace/Extension.coffee +3 -0
- data/client/lanes/workspace/Layout.coffee +13 -9
- data/client/lanes/workspace/Navbar.coffee +2 -18
- data/client/lanes/workspace/Pages.coffee +13 -14
- data/client/lanes/workspace/ScreensMenu.coffee +9 -18
- data/client/lanes/workspace/UIState.coffee +78 -0
- data/client/lanes/workspace/WorkspaceView.coffee +4 -1
- data/client/lanes/workspace/index.js +0 -3
- data/client/lanes/workspace/navbar.html +0 -4
- data/client/lanes/workspace/pages.html +1 -1
- data/client/lanes/workspace/styles/changes-notification.scss +57 -0
- data/client/lanes/{styles → workspace/styles}/forms.scss +0 -0
- data/client/lanes/workspace/styles/header.scss +42 -0
- data/client/lanes/{styles → workspace/styles}/keybindings.scss +0 -0
- data/client/lanes/workspace/styles/layout.scss +209 -0
- data/client/lanes/workspace/styles/screens.scss +67 -0
- data/client/lanes/workspace/styles/tabs.scss +147 -0
- data/client/lanes/workspace/styles/toolbar.scss +4 -0
- data/client/lanes/workspace/styles.scss +20 -0
- data/docs/model.md +39 -7
- data/docs/todo-example-part-1.md +7 -7
- data/docs/view.md +57 -40
- data/lib/lanes/access/authentication_provider.rb +59 -0
- data/lib/lanes/access/config/routes.rb +26 -0
- data/lib/lanes/access/config/screens.rb +16 -0
- data/lib/lanes/access/db/migrate/20140615031600_create_lanes_users.rb +12 -0
- data/lib/lanes/access/extension.rb +40 -0
- data/lib/lanes/access/locked_fields.rb +43 -0
- data/lib/lanes/access/role.rb +60 -0
- data/lib/lanes/access/role_collection.rb +76 -0
- data/lib/lanes/access/roles/administrator.rb +39 -0
- data/lib/lanes/access/roles/support.rb +15 -0
- data/lib/lanes/access/track_modifications.rb +48 -0
- data/lib/lanes/access/user.rb +128 -0
- data/lib/lanes/access/version.rb +5 -0
- data/lib/lanes/access.rb +51 -0
- data/lib/lanes/api/helper_methods.rb +2 -2
- data/lib/lanes/api/javascript_processor.rb +3 -3
- data/lib/lanes/api/null_authentication_provider.rb +1 -1
- data/lib/lanes/api/pub_sub.rb +3 -3
- data/lib/lanes/api/request_wrapper.rb +1 -1
- data/lib/lanes/api/root.rb +1 -2
- data/lib/lanes/api/sprockets_extension.rb +6 -4
- data/lib/lanes/api/test_specs.rb +2 -8
- data/lib/lanes/command/app.rb +30 -12
- data/lib/lanes/command/db.rb +3 -0
- data/lib/lanes/command/generate_model.rb +4 -4
- data/lib/lanes/command/generate_screen.rb +12 -10
- data/lib/lanes/command/generate_view.rb +12 -9
- data/lib/lanes/command/named_command.rb +7 -5
- data/lib/lanes/command/server.rb +1 -1
- data/lib/lanes/command.rb +2 -5
- data/lib/lanes/components.rb +1 -1
- data/lib/lanes/concerns/queries.rb +1 -1
- data/lib/lanes/concerns/set_attribute_data.rb +5 -7
- data/lib/lanes/db.rb +5 -4
- data/lib/lanes/extension/definition.rb +95 -0
- data/lib/lanes/extension.rb +34 -69
- data/lib/lanes/guard_tasks.rb +2 -2
- data/lib/lanes/screen.rb +8 -0
- data/lib/lanes/spec_helper.rb +1 -37
- data/lib/lanes/version.rb +1 -1
- data/lib/lanes/workspace/extension.rb +28 -0
- data/lib/lanes/workspace.rb +7 -0
- data/npm-build/package.json +2 -2
- data/spec/api/javascript_processor_spec.rb +1 -1
- data/spec/lanes/components/grid/GridSpec.coffee +31 -0
- data/{lib/lanes/command/templates/client/views → spec/lanes/helpers}/.gitkeep +0 -0
- data/spec/{helpers → lanes/helpers}/jasmine-matchers.js +0 -0
- data/spec/{helpers → lanes/helpers}/lanes-helpers.coffee +2 -4
- data/spec/lanes/helpers/mock-ajax.js +576 -0
- data/spec/lanes/models/BaseSpec.coffee +24 -37
- data/spec/lanes/models/CollectionSpec.coffee +15 -2
- data/spec/lanes/models/ModelAssociationsSpec.coffee +51 -0
- data/spec/lanes/views/BaseSpec.coffee +14 -14
- data/spec/server/command_spec.rb +39 -0
- data/spec/{concerns → server/concerns}/api_path_spec.rb +1 -1
- data/spec/{concerns → server/concerns}/association_extensions_spec.rb +1 -2
- data/spec/{concerns → server/concerns}/attr_accessor_with_default_spec.rb +0 -0
- data/spec/{concerns → server/concerns}/export_associations_spec.rb +1 -2
- data/spec/{concerns → server/concerns}/export_methods_spec.rb +1 -3
- data/spec/{concerns → server/concerns}/export_scope_spec.rb +2 -2
- data/spec/{concerns → server/concerns}/exported_limits_spec.rb +1 -2
- data/spec/{concerns → server/concerns}/pub_sub_spec.rb +1 -1
- data/spec/{concerns → server/concerns}/set_attribute_data_spec.rb +1 -1
- data/spec/{configuration_spec.rb → server/configuration_spec.rb} +1 -1
- data/spec/{helpers → server}/minitest_assertions.rb +1 -1
- data/spec/{numbers_spec.rb → server/numbers_spec.rb} +1 -2
- data/{lib/lanes/testing_models.rb → spec/server/spec_helper.rb} +17 -3
- data/spec/{strings_spec.rb → server/strings_spec.rb} +1 -1
- data/templates/Gemfile +6 -0
- data/{lib/lanes/command/templates → templates}/Guardfile +0 -0
- data/templates/Rakefile +2 -0
- data/templates/client/Extension.coffee +7 -0
- data/templates/client/Router.coffee +4 -0
- data/{lib/lanes/command/templates/public → templates/client/components}/.gitkeep +0 -0
- data/templates/client/components/Component.coffee +1 -0
- data/{lib/lanes/command/templates → templates}/client/index.js +1 -0
- data/templates/client/models/BaseModel.coffee +5 -0
- data/{lib/lanes/command/templates → templates}/client/models/Model.coffee +2 -3
- data/{lib/lanes/command/templates → templates}/client/screens/Screen.coffee +6 -1
- data/{lib/lanes/command/templates → templates}/client/screens/index.js +0 -0
- data/{lib/lanes/command/templates → templates}/client/screens/layout.html +0 -0
- data/{lib/lanes/command/templates → templates}/client/screens/styles.scss +1 -2
- data/{lib/lanes/command/templates → templates}/client/styles.scss +0 -0
- data/{spec/helpers → templates/client/views}/.gitkeep +0 -0
- data/templates/client/views/BaseView.coffee +5 -0
- data/templates/client/views/View.coffee +10 -0
- data/{lib/lanes/command/templates → templates}/client/views/template.html +0 -0
- data/{lib/lanes/command/templates → templates}/config/database.yml +0 -0
- data/{lib/lanes/command/templates → templates}/config/lanes.rb +0 -0
- data/{lib/lanes/command/templates → templates}/config/routes.rb +0 -0
- data/templates/config/screen.rb +12 -0
- data/{lib/lanes/command/templates → templates}/config.ru +1 -1
- data/{lib/lanes/command/templates → templates}/db/create_table_migration.rb +1 -1
- data/{lib/lanes/command/templates → templates}/gitignore +1 -0
- data/templates/lib/namespace/base_model.rb +11 -0
- data/{lib/lanes/command/templates → templates}/lib/namespace/extension.rb +3 -3
- data/{lib/lanes/command/templates → templates}/lib/namespace/model.rb +1 -1
- data/templates/lib/namespace/version.rb +3 -0
- data/templates/lib/namespace.rb +14 -0
- data/templates/public/.gitkeep +0 -0
- data/templates/spec/client/Screen.coffee +5 -0
- data/templates/spec/client/helpers/ClientHelpers.coffee +5 -0
- data/templates/spec/client/models/ModelSpec.coffee +5 -0
- data/templates/spec/client/views/ViewSpec.coffee +5 -0
- data/{lib/lanes/command/templates → templates}/spec/fixtures/namespace/model.yml +0 -0
- data/{lib/lanes/command/templates/spec/namespace → templates/spec/server}/model_spec.rb +2 -2
- data/{lib/lanes/command/templates/spec/spec_helper.rb → templates/spec/server/spec_helpers.rb} +3 -2
- data/views/index.erb +5 -4
- data/views/specs.erb +2 -1
- metadata +273 -238
- data/client/lanes/components/grid/vendor/dataTables.bootstrap.js +0 -156
- data/client/lanes/components/grid/vendor/datatables.responsive.js +0 -666
- data/client/lanes/components/modal/_index.scss +0 -20
- data/client/lanes/components/popover/_index.scss +0 -1
- data/client/lanes/components/record_finder/RecordFinder.coffee +0 -143
- data/client/lanes/components/select_field/SelectField.coffee +0 -87
- data/client/lanes/extension/GlAccounts.coffee +0 -9
- data/client/lanes/minimal.js +0 -11
- data/client/lanes/minimal.scss.erb +0 -12
- data/client/lanes/styles/components/all.scss +0 -6
- data/client/lanes/styles/components/changes-notification.scss +0 -44
- data/client/lanes/styles/components/suggest.scss +0 -266
- data/client/lanes/styles/index.css +0 -4
- data/client/lanes/styles/layout.scss +0 -272
- data/client/lanes/styles/screens.scss +0 -66
- data/client/lanes/styles/tabs.scss +0 -148
- data/client/lanes/styles/vendor/bootstrap.scss +0 -74
- data/client/lanes/workspace.scss.erb +0 -29
- data/client/lanes-complete.js +0 -3
- data/client/lanes-workspace.scss.erb +0 -21
- data/db/migrate/20140615031600_create_hip_users.rb +0 -17
- data/lib/lanes/command/templates/Gemfile +0 -9
- data/lib/lanes/command/templates/Rakefile +0 -2
- data/lib/lanes/command/templates/client/Extension.coffee +0 -5
- data/lib/lanes/command/templates/client/components/Component.coffee +0 -1
- data/lib/lanes/command/templates/client/models/BaseModel.coffee +0 -5
- data/lib/lanes/command/templates/client/views/BaseView.coffee +0 -5
- data/lib/lanes/command/templates/client/views/View.coffee +0 -7
- data/lib/lanes/command/templates/config/screen.rb +0 -8
- data/lib/lanes/command/templates/lib/namespace/base_model.rb +0 -9
- data/lib/lanes/command/templates/lib/namespace/version.rb +0 -3
- data/lib/lanes/command/templates/lib/namespace.rb +0 -12
- data/lib/lanes/command/templates/spec/client/Screen.coffee +0 -7
- data/lib/lanes/command/templates/spec/client/models/ModelSpec.coffee +0 -5
- data/lib/lanes/command/templates/spec/client/views/ViewSpec.coffee +0 -5
- data/lib/lanes/db/migration_helpers.rb +0 -178
- data/public/javascripts/jasmine_examples/Player.js +0 -22
- data/public/javascripts/jasmine_examples/Song.js +0 -7
- data/spec/command_spec.rb +0 -49
- data/spec/helpers/jasmine-jquery.js +0 -813
@@ -1,8 +1,16 @@
|
|
1
1
|
class Lanes.Components.ModalDialog extends Lanes.Components.Base
|
2
2
|
|
3
|
-
|
3
|
+
constructor: (options={})->
|
4
|
+
_.extend(this, _.pick(options, 'hideOnBackdropClick', 'hideButton'))
|
5
|
+
super
|
6
|
+
|
7
|
+
domEvents:
|
4
8
|
'hide.bs.modal': '_onHide'
|
5
9
|
|
10
|
+
hideOnEsc: true
|
11
|
+
showHideButton: true
|
12
|
+
hideOnBackdropClick: true
|
13
|
+
|
6
14
|
bindings:
|
7
15
|
'viewport.layout_size': { type:'class',selector:'.modal-dialog'}
|
8
16
|
'viewport.layout_size': { selector: '.modal', type: 'class' }
|
@@ -16,18 +24,26 @@ class Lanes.Components.ModalDialog extends Lanes.Components.Base
|
|
16
24
|
toggleShown: (show)->
|
17
25
|
if show then this.show() else this.hide()
|
18
26
|
|
27
|
+
bodyClass: 'base'
|
28
|
+
|
19
29
|
template: ->
|
20
30
|
tmpl = Lanes.Templates.find('lanes/components/modal/template')
|
21
31
|
tmpl({
|
22
32
|
size : @size || 'lg'
|
23
|
-
title : @title || context.dialog_title
|
33
|
+
title : @title# || context.dialog_title
|
24
34
|
body : this.renderTemplateMethod('bodyTemplate')
|
35
|
+
bodyClass: _.result(this,'bodyClass')
|
25
36
|
buttons : @buttons
|
37
|
+
showHideButton : @showHideButton
|
26
38
|
})
|
27
39
|
|
40
|
+
renderContextFree: ->
|
41
|
+
this.replaceEl( this.renderTemplateMethod() );
|
42
|
+
this
|
43
|
+
|
28
44
|
hide:->
|
29
45
|
this.$el.modal('hide')
|
30
|
-
|
46
|
+
this.notification?.resolve(this)
|
31
47
|
|
32
48
|
show: ->
|
33
49
|
if this.rendered
|
@@ -35,7 +51,12 @@ class Lanes.Components.ModalDialog extends Lanes.Components.Base
|
|
35
51
|
this.$el.modal('show')
|
36
52
|
else
|
37
53
|
this.render()
|
38
|
-
this.$el.modal({
|
54
|
+
this.$el.modal({
|
55
|
+
body: this.viewport.el
|
56
|
+
backdrop: if this.hideOnBackdropClick then true else 'static'
|
57
|
+
hideOnEsc: true
|
58
|
+
keyboard: @hideOnEsc
|
59
|
+
})
|
39
60
|
this.notification = new _.DeferredPromise
|
40
61
|
return this.notification.promise
|
41
62
|
|
@@ -2,10 +2,10 @@
|
|
2
2
|
<div class="modal-dialog modal-<%= @size %>">
|
3
3
|
<div class="modal-content">
|
4
4
|
<div class="modal-header">
|
5
|
-
|
5
|
+
<% if @hideBtn: %><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><% end %>
|
6
6
|
<h4 class="modal-title" id="myModalLabel"><%= @title %></h4>
|
7
7
|
</div>
|
8
|
-
<div class="modal-body">
|
8
|
+
<div class="modal-body <%= @bodyClass %>">
|
9
9
|
<%- @body %>
|
10
10
|
</div>
|
11
11
|
<div class="modal-footer">
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# provides common code for both RadioGroup and SelectField
|
2
|
+
#
|
3
|
+
class Lanes.Components.MultiSelect extends Lanes.Components.Base
|
4
|
+
session:
|
5
|
+
multiple: { type: 'boolean', default: false }
|
6
|
+
selections: 'collection'
|
7
|
+
association: 'string'
|
8
|
+
mappings: 'object'
|
9
|
+
|
10
|
+
constructor: (options={})->
|
11
|
+
if options.model
|
12
|
+
if options.association && ! options.field_name
|
13
|
+
options.field_name = options.model.associations.pk(options.association)
|
14
|
+
|
15
|
+
if options.field_name
|
16
|
+
listener = {}
|
17
|
+
listener["change:#{options.field_name}"] ='onModelAttributeChange'
|
18
|
+
this.modelEvents = _.extend( listener, this.modelEvents||{} )
|
19
|
+
|
20
|
+
super
|
21
|
+
|
22
|
+
if @association
|
23
|
+
klass = options.model.associations.getClassFor(@association)
|
24
|
+
@selections = if klass::isCollection then new klass else new klass.Collection
|
25
|
+
|
26
|
+
if options.choices
|
27
|
+
@selections ||= options.choices
|
28
|
+
|
29
|
+
@selections.ensureLoaded()
|
30
|
+
|
31
|
+
@mappings = _.extend({
|
32
|
+
id: 'id', title: 'title', selected: 'selected'
|
33
|
+
},options.mappings||{})
|
34
|
+
|
35
|
+
|
36
|
+
onModelChange: ->
|
37
|
+
if @selections
|
38
|
+
this.onModelAttributeChange(@model,@model.get(@field_name))
|
39
|
+
|
40
|
+
selectionForID: (id)->
|
41
|
+
q={}; q[@mappings.id]=parseInt(id)
|
42
|
+
@selections.findWhere( q )
|
43
|
+
|
44
|
+
onModelAttributeChange: (model,fkid)->
|
45
|
+
if ! this.el.binding_is_setting
|
46
|
+
this.select( this.selectionForID( fkid ) )
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
template: (scope)->
|
3
|
-
'<label><input type="radio" name="' + scope.field_name + '"/> <span></span></label>'
|
1
|
+
#= require ../multi-select/MultiSelect
|
4
2
|
|
5
|
-
|
3
|
+
class RadioInput extends Lanes.Views.Base
|
4
|
+
template: ->
|
5
|
+
'<label><input type="radio" name="' + this.field_name + '"/> <span></span></label>'
|
6
6
|
|
7
7
|
constructor: (options)->
|
8
8
|
@field_name=options.field_name
|
@@ -15,14 +15,9 @@ class RadioInput
|
|
15
15
|
super
|
16
16
|
|
17
17
|
|
18
|
-
Lanes.
|
18
|
+
class Lanes.Components.RadioGroup extends Lanes.Components.MultiSelect
|
19
19
|
|
20
|
-
|
21
|
-
class RadioGroup
|
22
|
-
constructor: -> super
|
23
|
-
|
24
|
-
events:
|
25
|
-
'change input': 'onInputChange'
|
20
|
+
FILE: FILE
|
26
21
|
|
27
22
|
writeTemplate: ->
|
28
23
|
"<span data-hook='choices-input'></span>"
|
@@ -31,13 +26,15 @@ class RadioGroup
|
|
31
26
|
fields:
|
32
27
|
hook: 'choices-input'
|
33
28
|
collection: 'selections'
|
34
|
-
|
29
|
+
waitFor: 'selections'
|
35
30
|
view: RadioInput
|
31
|
+
options: 'subViewOptions'
|
36
32
|
|
37
|
-
|
38
|
-
initialize: ->
|
33
|
+
constructor: (options)->
|
39
34
|
super
|
40
|
-
|
35
|
+
|
36
|
+
subViewOptions: ->
|
37
|
+
{ field_name: @field_name, mappings: @mappings }
|
41
38
|
|
42
39
|
onSelectionChange: (option)->
|
43
40
|
return unless option[@mappings.selected]
|
@@ -45,15 +42,7 @@ class RadioGroup
|
|
45
42
|
other_option[@mappings.selected] = other_option[@mappings.id] == option[@mappings.id]
|
46
43
|
,this)
|
47
44
|
|
48
|
-
onInputChange: (ev)->
|
49
|
-
@selections.each( (option)->
|
50
|
-
option[@mappings.selected] = option[@mappings.id] == ev.target.value
|
51
|
-
,this)
|
52
|
-
|
53
45
|
getSelected: ->
|
54
46
|
q={}
|
55
47
|
q[@mappings.selected]=true
|
56
48
|
@selections.findWhere(q)
|
57
|
-
|
58
|
-
|
59
|
-
Lanes.Component.RadioGroup = Lanes.Component.ChoicesInput.extend(RadioGroup)
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require ./RadioGroup
|
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Lanes.Components.RecordFinder.Clause extends Lanes.Components.Base
|
2
|
+
FILE: FILE
|
3
|
+
|
4
|
+
writeTemplateName: 'clause'
|
5
|
+
useFormBindings: true
|
6
|
+
domEvents:
|
7
|
+
'hidden.bs.dropdown': 'onQueryChange'
|
8
|
+
'click .del-clause': 'delClause'
|
9
|
+
'input input.query-string': 'onInput'
|
10
|
+
|
11
|
+
onInput: (ev)->
|
12
|
+
this.model.value = ev.target.value
|
13
|
+
|
14
|
+
bindings:
|
15
|
+
'model.description': '.query-field-description'
|
16
|
+
|
17
|
+
subviews:
|
18
|
+
fields:
|
19
|
+
component: 'RadioGroup', model:'model',
|
20
|
+
options: -> { choices: @model.fields, field_name: 'fields', access: 'write' }
|
21
|
+
|
22
|
+
operators:
|
23
|
+
component: 'RadioGroup', model: 'model'
|
24
|
+
options: -> { choices: @model.operators, field_name: 'operators', mappings: { title:'name', visible: 'valid' }, access: 'write' }
|
25
|
+
|
26
|
+
delClause: ->
|
27
|
+
@model.remove()
|
28
|
+
|
29
|
+
onQueryChange: ->
|
30
|
+
this.$('input.query-string').focus()
|
31
|
+
|
32
|
+
render: ->
|
33
|
+
super
|
34
|
+
@defer @focus, delay: 500
|
35
|
+
this
|
36
|
+
|
37
|
+
focus: ->
|
38
|
+
this.$('input.query-string').focus()
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Lanes.Components.RecordFinder.Dialog extends Lanes.Components.ModalDialog
|
2
|
+
FILE: FILE
|
3
|
+
|
4
|
+
domEvents:
|
5
|
+
'click .add-clause': 'addClause'
|
6
|
+
'click .run-query': 'runQuery'
|
7
|
+
'select-row .grid': 'onSelect'
|
8
|
+
'shown.bs.modal' : 'onShown'
|
9
|
+
|
10
|
+
subviews:
|
11
|
+
grid:
|
12
|
+
hook: 'grid'
|
13
|
+
component: 'Grid'
|
14
|
+
options: ->
|
15
|
+
{ recordQuery: @recordQuery }
|
16
|
+
query_clauses:
|
17
|
+
container: '.query-clauses'
|
18
|
+
view: Lanes.Components.RecordFinder.Clause, collection: 'clauses'
|
19
|
+
|
20
|
+
bodyTemplateName: 'dialog'
|
21
|
+
bodyClass: "record-finder"
|
22
|
+
|
23
|
+
session:
|
24
|
+
recordQuery: 'model'
|
25
|
+
clauses: 'collection'
|
26
|
+
|
27
|
+
initialize:(options)->
|
28
|
+
@clauses = @recordQuery.clauses
|
29
|
+
@debounceMethod( 'runQuery')
|
30
|
+
this.listenTo(@recordQuery,'change',@runQuery)
|
31
|
+
_.bindAll(this,'hide')
|
32
|
+
|
33
|
+
onShown: ->
|
34
|
+
this.grid.adjustColumnWidth()
|
35
|
+
|
36
|
+
onSelect: (ev, model)->
|
37
|
+
@record = model
|
38
|
+
ev.preventDefault()
|
39
|
+
_.delay(this.hide, 500)
|
40
|
+
|
41
|
+
addClause: ->
|
42
|
+
@recordQuery.addNewClause()
|
43
|
+
|
44
|
+
runQuery: ->
|
45
|
+
this.grid.reload() if @recordQuery.isValid()
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Lanes.Components.RecordFinder extends Lanes.Components.Base
|
2
|
+
FILE: FILE
|
3
|
+
|
4
|
+
writeTemplateName: 'field'
|
5
|
+
writeTemplateData: ->
|
6
|
+
{ fieldName: @fieldName || @recordQuery.initialField.id }
|
7
|
+
|
8
|
+
domEvents:
|
9
|
+
"keyup .record-finder-query-string": "onKey"
|
10
|
+
"click .record-finder-query": "displayFinder"
|
11
|
+
|
12
|
+
session:
|
13
|
+
withAssociations: 'array'
|
14
|
+
invalid_chars: 'regex'
|
15
|
+
recordQuery: 'model'
|
16
|
+
fieldName: 'string'
|
17
|
+
queryField: [ 'string', false, 'code' ]
|
18
|
+
|
19
|
+
ui:
|
20
|
+
input: '.record-finder-query-string'
|
21
|
+
|
22
|
+
constructor: (options={})->
|
23
|
+
super
|
24
|
+
this.access = 'write'
|
25
|
+
|
26
|
+
initialize:(options)->
|
27
|
+
@recordQuery = new Lanes.Models.Query(
|
28
|
+
fields: options.fields, modelClass: options.modelClass
|
29
|
+
)
|
30
|
+
|
31
|
+
displayFinder: ->
|
32
|
+
finder = new Lanes.Components.RecordFinder.Dialog(
|
33
|
+
parent:this, title: @title, recordQuery: @recordQuery
|
34
|
+
)
|
35
|
+
finder.show().then( (dlg)->
|
36
|
+
dlg.remove().record
|
37
|
+
).then( (record)=>
|
38
|
+
if record
|
39
|
+
if @withAssociations then record.withAssociations(@withAssociations...) else record
|
40
|
+
else
|
41
|
+
null
|
42
|
+
).then( (record)=>
|
43
|
+
@.$el.trigger("display-record", record) if record
|
44
|
+
, (e)->Lanes.warn(e) )
|
45
|
+
|
46
|
+
onKey: (ev)->
|
47
|
+
if 13 == ev.keyCode
|
48
|
+
this.runQuery(ev)
|
49
|
+
else if @invalid_chars && @ui.input.val().match( @invalid_chars )
|
50
|
+
@ui.input.val( @ui.input.val().replace( @invalid_chars, '' ) )
|
51
|
+
|
52
|
+
runQuery: (ev)->
|
53
|
+
code = this.$(ev.target).val()
|
54
|
+
@recordQuery.loadSingle(code.toUpperCase(),{ include: @withAssociations })
|
55
|
+
.then( (reply)=> this.$el.trigger("display-record", reply.record) if reply.record )
|
@@ -7,12 +7,14 @@
|
|
7
7
|
<span class="query-field-description"></span>
|
8
8
|
<span class="caret"></span>
|
9
9
|
</button>
|
10
|
-
<div class="query dropdown dropdown-menu">
|
10
|
+
<div class="query-field dropdown dropdown-menu">
|
11
11
|
<form>
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
<div class="<%= h.grid_widths 6 %>">
|
13
|
+
<div data-hook="fields"></div>
|
14
|
+
</div>
|
15
|
+
<div class="<%= h.grid_widths 6 %>">
|
16
|
+
<div data-hook="operators"></div>
|
17
|
+
</div>
|
16
18
|
</form>
|
17
19
|
</div>
|
18
20
|
</div>
|
File without changes
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class="input-group">
|
2
|
-
<input type="text" name="<%= @
|
2
|
+
<input type="text" name="<%= @fieldName %>" class="form-control record-finder-query-string">
|
3
3
|
<span class="input-group-btn">
|
4
4
|
<button type="button" class="btn btn-default record-finder-query">
|
5
5
|
<i class="icon-search"></i>
|
data/client/lanes/{styles/components/record-finder.scss → components/record-finder/styles.scss}
RENAMED
@@ -33,31 +33,33 @@
|
|
33
33
|
&.multiple {
|
34
34
|
|
35
35
|
}
|
36
|
-
}
|
37
36
|
|
38
|
-
.query {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
37
|
+
.query-field {
|
38
|
+
width: 300px;
|
39
|
+
|
40
|
+
label {
|
41
|
+
display: block;
|
42
|
+
}
|
43
|
+
|
44
|
+
.operators {
|
45
|
+
label {
|
46
|
+
display: block;
|
47
|
+
max-height: 3rem;
|
48
|
+
overflow: hidden;
|
49
|
+
&.invalid {
|
50
|
+
max-height: 0;
|
51
|
+
margin: 0;
|
52
|
+
opacity: 0;
|
53
|
+
}
|
54
|
+
transition-property: opacity, margin, max-height;
|
55
|
+
transition-duration: 0.2s, 0.4s;
|
56
|
+
}
|
54
57
|
}
|
55
|
-
transition-property: opacity, margin, max-height;
|
56
|
-
transition-duration: 0.2s, 0.4s;
|
57
|
-
}
|
58
58
|
}
|
59
|
+
|
59
60
|
}
|
60
61
|
|
62
|
+
|
61
63
|
.modal-dialog.tiny {
|
62
64
|
.skr-grid thead > tr > th {
|
63
65
|
font-size: unset;
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#= require ../multi-select/MultiSelect
|
2
|
+
|
3
|
+
class SelectOption extends Lanes.Views.Base
|
4
|
+
template: (scope)->
|
5
|
+
'<option></option>'
|
6
|
+
|
7
|
+
constructor: (options)->
|
8
|
+
@groupName=options.groupName
|
9
|
+
m = options.mappings
|
10
|
+
@bindings = {}
|
11
|
+
@bindings["model.#{m.id}"] = { type: 'value', selector: 'option' }
|
12
|
+
@bindings["model.#{m.selected}"] = { type: 'booleanAttribute', selector: 'option', name:'selected' }
|
13
|
+
@bindings["model.#{m.title}"] = 'option'
|
14
|
+
@bindings["model.#{m.visible}"] = { type: 'toggle' } if m.visible
|
15
|
+
super
|
16
|
+
|
17
|
+
|
18
|
+
class Lanes.Components.SelectField extends Lanes.Components.MultiSelect
|
19
|
+
|
20
|
+
|
21
|
+
subviews:
|
22
|
+
fields:
|
23
|
+
hook: 'choices-input'
|
24
|
+
collection: 'selections'
|
25
|
+
options: 'subViewOptions'
|
26
|
+
view: SelectOption
|
27
|
+
|
28
|
+
session:
|
29
|
+
multiple: { type: 'boolean', default: false }
|
30
|
+
|
31
|
+
subViewOptions: ->
|
32
|
+
{ field_name: @field_name, mappings: @mappings }
|
33
|
+
|
34
|
+
ui:
|
35
|
+
select: 'select'
|
36
|
+
|
37
|
+
domEvents:
|
38
|
+
'change' : 'onSelectChange'
|
39
|
+
|
40
|
+
onSelectChange: (ev)->
|
41
|
+
if @model && @association
|
42
|
+
@model.set(@association, this.selectionForID( this.ui.select.val() ))
|
43
|
+
|
44
|
+
constructor: (options={})->
|
45
|
+
super
|
46
|
+
|
47
|
+
writeTemplate: ->
|
48
|
+
multiple = if this.multiple then "multiple" else ""
|
49
|
+
"<div><select class='form-control' #{multiple} name='#{this.field_name}' data-hook='choices-input'></select></div>"
|
50
|
+
|
51
|
+
readTemplate: ->
|
52
|
+
"<div class='ro-input' name='#{this.field_name}'></div>"
|
53
|
+
|
54
|
+
select: (option)->
|
55
|
+
if this.readOnly
|
56
|
+
this.$el.text( if option then option.code else "" )
|
57
|
+
else if option
|
58
|
+
id = option.get(@mappings.id)
|
59
|
+
option = this.query("option[value=\"#{id}\"]")
|
60
|
+
option.selected = true
|
61
|
+
else
|
62
|
+
this.$el.find(":selected").prop('selected',false)
|
File without changes
|
File without changes
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<% Lanes::Extensions.
|
2
|
-
|
3
|
-
|
1
|
+
<% Lanes::Extensions.each_asset(phase: :early, type: :js) do | asset |
|
2
|
+
require_asset asset
|
3
|
+
end %>
|
@@ -11,14 +11,17 @@ Lanes.Extensions = {
|
|
11
11
|
instance.onAvailable?(application) for identifier, instance of @instances
|
12
12
|
|
13
13
|
setBootstrapData: (bootstrap_data)->
|
14
|
+
@controlling_id = bootstrap_data.controlling_extension
|
14
15
|
for identifier,data of bootstrap_data
|
15
16
|
instance = this.instances[identifier]
|
16
17
|
instance?.setBootstrapData?(data)
|
17
18
|
|
18
19
|
makeNamespace: (identifier)->
|
19
|
-
for ns in ['Models','Views','Controllers','Screens']
|
20
|
+
for ns in ['Models','Views','Controllers','Screens','Components']
|
20
21
|
Lanes.namespace("#{identifier}.#{ns}")
|
21
22
|
|
23
|
+
controlling: ->
|
24
|
+
this.get( @controlling_id )
|
22
25
|
|
23
26
|
get: (identifier)->
|
24
27
|
this.instances[identifier]
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<% Lanes::Extensions.
|
2
|
-
|
3
|
-
|
1
|
+
<% Lanes::Extensions.each_asset(phase: :late, type: :js) do | asset |
|
2
|
+
require_asset asset
|
3
|
+
end %>
|
data/client/lanes/index.js
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
//= require ./vendor/modern-stack
|
3
3
|
//= require ./lib
|
4
4
|
//= require ./extension
|
5
|
-
//= require ./
|
5
|
+
//= require ./models
|
6
6
|
//= require ./plugins
|
7
7
|
//= require ./views
|
8
|
-
//= require ./screens
|
9
8
|
//= require ./components/Base
|
10
9
|
//= require ./components/enabled
|
10
|
+
//= require ./screens
|
11
11
|
//= require ./extension/LateLoaded
|
@@ -0,0 +1,30 @@
|
|
1
|
+
@font-face {
|
2
|
+
font-family: 'lanes-icon';
|
3
|
+
src:url(font-path('lanes/styles/fonts/icomoon.eot') + '?-7u8s0f');
|
4
|
+
src:url(font-path('lanes/styles/fonts/icomoon.eot') + '?#iefix-7u8s0f') format('embedded-opentype'),
|
5
|
+
url(font-path('lanes/styles/fonts/icomoon.woff') + '?-7u8s0f') format('woff'),
|
6
|
+
url(font-path('lanes/styles/fonts/icomoon.ttf') + '?-7u8s0f') format('truetype'),
|
7
|
+
url(font-path('lanes/styles/fonts/icomoon.svg') + '?-7u8s0f#icomoon') format('svg');
|
8
|
+
font-weight: normal;
|
9
|
+
font-style: normal;
|
10
|
+
}
|
11
|
+
|
12
|
+
.lanes {
|
13
|
+
|
14
|
+
<% Lanes::Extensions.each_asset(phase: :all, type: :css) do | asset | %>
|
15
|
+
@import "<%= asset %>";
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% Lanes::Components.enabled_with_dependencies(self) do | component | %>
|
19
|
+
@import "lanes/components/<%= component %>/styles";
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
<% if !Lanes.config.initial_workspace_screen_id.blank? &&
|
23
|
+
screen = Lanes::Screen[Lanes.config.initial_workspace_screen_id]
|
24
|
+
%>
|
25
|
+
@import "<%= screen.css.remove(/\.css$/) + "/index.scss" %>"
|
26
|
+
<% end %>
|
27
|
+
|
28
|
+
@import "styles/plugins/all"
|
29
|
+
|
30
|
+
}
|