lanes 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.jshintrc +3 -0
- data/Gemfile +9 -0
- data/Guardfile +15 -0
- data/LICENSE-MIT.txt +21 -0
- data/README.md +15 -0
- data/Rakefile +74 -0
- data/bin/lanes +5 -0
- data/client/images/ajax-loader.gif +0 -0
- data/client/images/dataTables/Sorting icons.psd +0 -0
- data/client/images/dataTables/back_disabled.png +0 -0
- data/client/images/dataTables/back_enabled.png +0 -0
- data/client/images/dataTables/back_enabled_hover.png +0 -0
- data/client/images/dataTables/favicon.ico +0 -0
- data/client/images/dataTables/forward_disabled.png +0 -0
- data/client/images/dataTables/forward_enabled.png +0 -0
- data/client/images/dataTables/forward_enabled_hover.png +0 -0
- data/client/images/dataTables/loading-background.png +0 -0
- data/client/images/dataTables/sort_asc.png +0 -0
- data/client/images/dataTables/sort_asc_disabled.png +0 -0
- data/client/images/dataTables/sort_both.png +0 -0
- data/client/images/dataTables/sort_desc.png +0 -0
- data/client/images/dataTables/sort_desc_disabled.png +0 -0
- data/client/images/logo-sm.png +0 -0
- data/client/javascripts/component/Base.coffee +39 -0
- data/client/javascripts/component/ChoicesInput.coffee +47 -0
- data/client/javascripts/component/Grid.coffee +199 -0
- data/client/javascripts/component/ModalDialog.coffee +44 -0
- data/client/javascripts/component/PopOver.coffee +52 -0
- data/client/javascripts/component/RadioGroup.coffee +59 -0
- data/client/javascripts/component/RecordFinder.coffee +143 -0
- data/client/javascripts/component/SelectField.coffee +43 -0
- data/client/javascripts/component/TaggedField.coffee +27 -0
- data/client/javascripts/component/grid/Editor.coffee +65 -0
- data/client/javascripts/component/grid/PopOverEditor.coffee +29 -0
- data/client/javascripts/component/grid/RowEditor.coffee +31 -0
- data/client/javascripts/component/grid/popover-editor.html +18 -0
- data/client/javascripts/component/grid/row-editor.html +16 -0
- data/client/javascripts/component/grid.html +4 -0
- data/client/javascripts/component/index.js +5 -0
- data/client/javascripts/component/modal.html +17 -0
- data/client/javascripts/component/popover.html +5 -0
- data/client/javascripts/component/record-finder/clause.skr +35 -0
- data/client/javascripts/component/record-finder/dialog.skr +4 -0
- data/client/javascripts/component/record-finder/field.skr +8 -0
- data/client/javascripts/data/Bootstrap.coffee +8 -0
- data/client/javascripts/data/ChangeSet.coffee +50 -0
- data/client/javascripts/data/Collection.coffee +111 -0
- data/client/javascripts/data/Config.coffee +15 -0
- data/client/javascripts/data/Model.coffee +269 -0
- data/client/javascripts/data/PubSub.coffee +68 -0
- data/client/javascripts/data/Query.coffee +184 -0
- data/client/javascripts/data/Roles.coffee +91 -0
- data/client/javascripts/data/Screens.coffee +157 -0
- data/client/javascripts/data/Sync.coffee +62 -0
- data/client/javascripts/data/User.coffee +70 -0
- data/client/javascripts/data/index.js +7 -0
- data/client/javascripts/data/mixins/HasCodeField.coffee +13 -0
- data/client/javascripts/extension/Base.coffee +9 -0
- data/client/javascripts/extension/Extensions.coffee +17 -0
- data/client/javascripts/extension/GlAccounts.coffee +9 -0
- data/client/javascripts/extension/index.js +6 -0
- data/client/javascripts/extension/load.js.erb +3 -0
- data/client/javascripts/lanes-complete.js +3 -0
- data/client/javascripts/lanes-workspace.js +1 -0
- data/client/javascripts/lib/MakeBaseClass.coffee +55 -0
- data/client/javascripts/lib/ModuleSupport.coffee +22 -0
- data/client/javascripts/lib/Templates.coffee +47 -0
- data/client/javascripts/lib/create-namespace.js +0 -0
- data/client/javascripts/lib/debounce.coffee +15 -0
- data/client/javascripts/lib/defer.coffee +7 -0
- data/client/javascripts/lib/el.js +115 -0
- data/client/javascripts/lib/index.js +9 -0
- data/client/javascripts/lib/loader.coffee +95 -0
- data/client/javascripts/lib/namespace.coffee +9 -0
- data/client/javascripts/lib/noConflict.coffee +14 -0
- data/client/javascripts/lib/promise_helpers.coffee +4 -0
- data/client/javascripts/lib/results.coffee +15 -0
- data/client/javascripts/lib/underscore.inflection.js +210 -0
- data/client/javascripts/lib/utilFunctions.coffee +51 -0
- data/client/javascripts/plugins/ResizeSensor.js +144 -0
- data/client/javascripts/plugins/index.js +4 -0
- data/client/javascripts/plugins/overlay.coffee +41 -0
- data/client/javascripts/plugins/trigger.coffee +15 -0
- data/client/javascripts/vendor/bootstrap/affix.js +142 -0
- data/client/javascripts/vendor/bootstrap/alert.js +92 -0
- data/client/javascripts/vendor/bootstrap/button.js +110 -0
- data/client/javascripts/vendor/bootstrap/carousel.js +223 -0
- data/client/javascripts/vendor/bootstrap/collapse.js +170 -0
- data/client/javascripts/vendor/bootstrap/dropdown.js +151 -0
- data/client/javascripts/vendor/bootstrap/modal.js +280 -0
- data/client/javascripts/vendor/bootstrap/popover.js +113 -0
- data/client/javascripts/vendor/bootstrap/scrollspy.js +170 -0
- data/client/javascripts/vendor/bootstrap/tab.js +128 -0
- data/client/javascripts/vendor/bootstrap/tooltip.js +457 -0
- data/client/javascripts/vendor/bootstrap/transition.js +59 -0
- data/client/javascripts/vendor/dataTables/dataTables.bootstrap.js +156 -0
- data/client/javascripts/vendor/dataTables/dataTables.scroller.js +1185 -0
- data/client/javascripts/vendor/dataTables/datatables.responsive.js +666 -0
- data/client/javascripts/vendor/dataTables/index.js +2 -0
- data/client/javascripts/vendor/dataTables/jquery.dataTables.js +14380 -0
- data/client/javascripts/vendor/jquery-2.js +9190 -0
- data/client/javascripts/vendor/jquery.tap.js +401 -0
- data/client/javascripts/vendor/magicsuggest.js +1565 -0
- data/client/javascripts/vendor/message-bus.js +285 -0
- data/client/javascripts/vendor/modern-stack.js +14 -0
- data/client/javascripts/vendor/packaged.js +13769 -0
- data/client/javascripts/view/Assets.coffee +9 -0
- data/client/javascripts/view/Base.coffee +231 -0
- data/client/javascripts/view/FormBindings.coffee +98 -0
- data/client/javascripts/view/Functions.coffee +13 -0
- data/client/javascripts/view/Helpers.coffee +77 -0
- data/client/javascripts/view/InterfaceState.coffee +88 -0
- data/client/javascripts/view/Keys.coffee +59 -0
- data/client/javascripts/view/ModelObserver.coffee +31 -0
- data/client/javascripts/view/ModelUpdate.coffee +8 -0
- data/client/javascripts/view/PubSub.coffee +29 -0
- data/client/javascripts/view/RenderContext.coffee +32 -0
- data/client/javascripts/view/SaveNotify.coffee +30 -0
- data/client/javascripts/view/Screen.coffee +30 -0
- data/client/javascripts/view/TimedHighlight.coffee +38 -0
- data/client/javascripts/view/TimedMask.coffee +65 -0
- data/client/javascripts/view/_button.html +3 -0
- data/client/javascripts/view/_toolbar.html +27 -0
- data/client/javascripts/view/index.js +10 -0
- data/client/javascripts/view/mixins/ScreenChangeListener.coffee +43 -0
- data/client/javascripts/view/model-update.html +13 -0
- data/client/javascripts/view/screen-definitions.js.erb +7 -0
- data/client/javascripts/workspace/ActiveScreensSwitcher.coffee +117 -0
- data/client/javascripts/workspace/Instance.es6 +60 -0
- data/client/javascripts/workspace/Layout.coffee +18 -0
- data/client/javascripts/workspace/LoginDialog.coffee +33 -0
- data/client/javascripts/workspace/Navbar.coffee +44 -0
- data/client/javascripts/workspace/Pages.coffee +46 -0
- data/client/javascripts/workspace/ScreensMenu.coffee +126 -0
- data/client/javascripts/workspace/index.js +12 -0
- data/client/javascripts/workspace/layout.html +4 -0
- data/client/javascripts/workspace/login-dialog.html +16 -0
- data/client/javascripts/workspace/menu.html +356 -0
- data/client/javascripts/workspace/menu_toggle.html +9 -0
- data/client/javascripts/workspace/navbar.html +19 -0
- data/client/javascripts/workspace/pages.html +6 -0
- data/client/javascripts/workspace/screens-menu.html +11 -0
- data/client/javascripts/workspace/screens-switcher.html +7 -0
- data/client/javascripts/workspace/tab.html +0 -0
- data/client/screens/user-management/UserEditScreen.coffee +21 -0
- data/client/screens/user-management/UserManagement.coffee +24 -0
- data/client/screens/user-management/grid-popover-editor.html +33 -0
- data/client/screens/user-management/index.css +4 -0
- data/client/screens/user-management/index.js +2 -0
- data/client/screens/user-management/user-management-styles.scss +7 -0
- data/client/screens/user-management/user-management.html +8 -0
- data/client/stylesheets/compoonents/all.scss +6 -0
- data/client/stylesheets/compoonents/changes-notification.scss +44 -0
- data/client/stylesheets/compoonents/grid-editors.scss +65 -0
- data/client/stylesheets/compoonents/grid.scss +301 -0
- data/client/stylesheets/compoonents/modal-dialog.scss +23 -0
- data/client/stylesheets/compoonents/record-finder.scss +71 -0
- data/client/stylesheets/compoonents/suggest.scss +266 -0
- data/client/stylesheets/fonts/icomoon.eot +0 -0
- data/client/stylesheets/fonts/icomoon.svg +160 -0
- data/client/stylesheets/fonts/icomoon.ttf +0 -0
- data/client/stylesheets/fonts/icomoon.woff +0 -0
- data/client/stylesheets/fonts/selection.json +3565 -0
- data/client/stylesheets/fonts/style.css +451 -0
- data/client/stylesheets/fonts.scss +38 -0
- data/client/stylesheets/forms.scss +75 -0
- data/client/stylesheets/index.css +4 -0
- data/client/stylesheets/keybindings.scss +6 -0
- data/client/stylesheets/lanes-workspace.scss +17 -0
- data/client/stylesheets/layout.scss +272 -0
- data/client/stylesheets/plugins/all.scss +2 -0
- data/client/stylesheets/plugins/overlay.scss +63 -0
- data/client/stylesheets/plugins/resize-sensor.scss +24 -0
- data/client/stylesheets/screens.scss +66 -0
- data/client/stylesheets/tabs.scss +148 -0
- data/client/stylesheets/vendor/bootstrap/_alerts.scss +68 -0
- data/client/stylesheets/vendor/bootstrap/_badges.scss +57 -0
- data/client/stylesheets/vendor/bootstrap/_breadcrumbs.scss +26 -0
- data/client/stylesheets/vendor/bootstrap/_button-groups.scss +240 -0
- data/client/stylesheets/vendor/bootstrap/_buttons.scss +157 -0
- data/client/stylesheets/vendor/bootstrap/_carousel.scss +243 -0
- data/client/stylesheets/vendor/bootstrap/_close.scss +35 -0
- data/client/stylesheets/vendor/bootstrap/_code.scss +68 -0
- data/client/stylesheets/vendor/bootstrap/_component-animations.scss +35 -0
- data/client/stylesheets/vendor/bootstrap/_dropdowns.scss +215 -0
- data/client/stylesheets/vendor/bootstrap/_forms.scss +538 -0
- data/client/stylesheets/vendor/bootstrap/_glyphicons.scss +237 -0
- data/client/stylesheets/vendor/bootstrap/_grid.scss +84 -0
- data/client/stylesheets/vendor/bootstrap/_input-groups.scss +166 -0
- data/client/stylesheets/vendor/bootstrap/_jumbotron.scss +48 -0
- data/client/stylesheets/vendor/bootstrap/_labels.scss +66 -0
- data/client/stylesheets/vendor/bootstrap/_list-group.scss +132 -0
- data/client/stylesheets/vendor/bootstrap/_media.scss +56 -0
- data/client/stylesheets/vendor/bootstrap/_mixins.scss +39 -0
- data/client/stylesheets/vendor/bootstrap/_modals.scss +150 -0
- data/client/stylesheets/vendor/bootstrap/_navbar.scss +659 -0
- data/client/stylesheets/vendor/bootstrap/_navs.scss +242 -0
- data/client/stylesheets/vendor/bootstrap/_normalize.scss +425 -0
- data/client/stylesheets/vendor/bootstrap/_pager.scss +55 -0
- data/client/stylesheets/vendor/bootstrap/_pagination.scss +88 -0
- data/client/stylesheets/vendor/bootstrap/_panels.scss +243 -0
- data/client/stylesheets/vendor/bootstrap/_popovers.scss +133 -0
- data/client/stylesheets/vendor/bootstrap/_print.scss +101 -0
- data/client/stylesheets/vendor/bootstrap/_progress-bars.scss +105 -0
- data/client/stylesheets/vendor/bootstrap/_responsive-embed.scss +34 -0
- data/client/stylesheets/vendor/bootstrap/_responsive-utilities.scss +174 -0
- data/client/stylesheets/vendor/bootstrap/_scaffolding.scss +150 -0
- data/client/stylesheets/vendor/bootstrap/_tables.scss +233 -0
- data/client/stylesheets/vendor/bootstrap/_theme.scss +258 -0
- data/client/stylesheets/vendor/bootstrap/_thumbnails.scss +38 -0
- data/client/stylesheets/vendor/bootstrap/_tooltip.scss +95 -0
- data/client/stylesheets/vendor/bootstrap/_type.scss +304 -0
- data/client/stylesheets/vendor/bootstrap/_utilities.scss +57 -0
- data/client/stylesheets/vendor/bootstrap/_variables.scss +850 -0
- data/client/stylesheets/vendor/bootstrap/_wells.scss +29 -0
- data/client/stylesheets/vendor/bootstrap/bootstrap.scss +50 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_alerts.scss +14 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_background-variant.scss +11 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_border-radius.scss +18 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_buttons.scss +50 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_center-block.scss +7 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_clearfix.scss +22 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_forms.scss +84 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_gradients.scss +58 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_grid-framework.scss +81 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_grid.scss +122 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_hide-text.scss +21 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_image.scss +34 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_labels.scss +12 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_list-group.scss +31 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_nav-vertical-align.scss +9 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_opacity.scss +8 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_pagination.scss +23 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_panels.scss +24 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_progress-bar.scss +10 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_reset-filter.scss +8 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_resize.scss +6 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_responsive-visibility.scss +21 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_size.scss +10 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_tab-focus.scss +9 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_table-row.scss +28 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_text-emphasis.scss +11 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_text-overflow.scss +8 -0
- data/client/stylesheets/vendor/bootstrap/mixins/_vendor-prefixes.scss +219 -0
- data/client/stylesheets/vendor/bootstrap-custom-grid.scss +85 -0
- data/client/stylesheets/vendor/bootstrap-custom-modals.scss +150 -0
- data/client/stylesheets/vendor/bootstrap.scss +69 -0
- data/client/stylesheets/vendor/dataTables.scss +4 -0
- data/config/database.yml +9 -0
- data/config/puma.rb +7 -0
- data/config.ru +4 -0
- data/db/migrate/20140615031600_create_hip_users.rb +17 -0
- data/db/seed.rb +37 -0
- data/foo/Gemfile +5 -0
- data/foo/Guardfile +13 -0
- data/foo/foo/Gemfile +5 -0
- data/foo/foo/lib/foo.rb +7 -0
- data/foo/lib/foo/version.rb +3 -0
- data/foo/lib/foo.rb +8 -0
- data/lanes.gemspec +54 -0
- data/lib/generators/lanes/migrations/install_generator.rb +42 -0
- data/lib/lanes/access/locked_fields.rb +43 -0
- data/lib/lanes/access/role.rb +58 -0
- data/lib/lanes/access/role_collection.rb +75 -0
- data/lib/lanes/access/roles/administrator.rb +25 -0
- data/lib/lanes/access/roles/support.rb +13 -0
- data/lib/lanes/access/user_maint_screen.rb +32 -0
- data/lib/lanes/access.rb +50 -0
- data/lib/lanes/api/asset_pipeline.rb +59 -0
- data/lib/lanes/api/authentication_helper.rb +21 -0
- data/lib/lanes/api/authentication_provider.rb +45 -0
- data/lib/lanes/api/controller.rb +290 -0
- data/lib/lanes/api/default_routes.rb +35 -0
- data/lib/lanes/api/eco.js +516 -0
- data/lib/lanes/api/error_formatter.rb +37 -0
- data/lib/lanes/api/helper_methods.rb +32 -0
- data/lib/lanes/api/javascript_processor.rb +116 -0
- data/lib/lanes/api/pub_sub.rb +33 -0
- data/lib/lanes/api/request_wrapper.rb +42 -0
- data/lib/lanes/api/root.rb +103 -0
- data/lib/lanes/api/skr_templates.rb +60 -0
- data/lib/lanes/api/test_specs.rb +59 -0
- data/lib/lanes/api/updates.rb +38 -0
- data/lib/lanes/api.rb +27 -0
- data/lib/lanes/cli.rb +13 -0
- data/lib/lanes/concerns/all.rb +16 -0
- data/lib/lanes/concerns/api_path.rb +21 -0
- data/lib/lanes/concerns/association_extensions.rb +85 -0
- data/lib/lanes/concerns/attr_accessor_with_default.rb +62 -0
- data/lib/lanes/concerns/code_identifier.rb +43 -0
- data/lib/lanes/concerns/export_associations.rb +52 -0
- data/lib/lanes/concerns/export_join_tables.rb +39 -0
- data/lib/lanes/concerns/export_methods.rb +104 -0
- data/lib/lanes/concerns/export_scope.rb +66 -0
- data/lib/lanes/concerns/exported_limit_evaluator.rb +17 -0
- data/lib/lanes/concerns/immutable_model.rb +32 -0
- data/lib/lanes/concerns/locked_fields.rb +84 -0
- data/lib/lanes/concerns/pub_sub.rb +105 -0
- data/lib/lanes/concerns/queries.rb +20 -0
- data/lib/lanes/concerns/random_hash_code.rb +40 -0
- data/lib/lanes/concerns/sanitize_api_data.rb +15 -0
- data/lib/lanes/concerns/set_attribute_data.rb +154 -0
- data/lib/lanes/concerns/track_modifications.rb +51 -0
- data/lib/lanes/concerns/visible_id_identifier.rb +53 -0
- data/lib/lanes/configuration.rb +85 -0
- data/lib/lanes/db/migration_helpers.rb +178 -0
- data/lib/lanes/db/migrations.rb +13 -0
- data/lib/lanes/db/seed.rb +27 -0
- data/lib/lanes/db.rb +86 -0
- data/lib/lanes/environment.rb +19 -0
- data/lib/lanes/extension.rb +72 -0
- data/lib/lanes/generators/app/Gemfile +5 -0
- data/lib/lanes/generators/app/Guardfile +13 -0
- data/lib/lanes/generators/app/Rakefile +9 -0
- data/lib/lanes/generators/app/config/database.yml +9 -0
- data/lib/lanes/generators/app/config.ru +4 -0
- data/lib/lanes/generators/app/lib/main_class/version.rb +3 -0
- data/lib/lanes/generators/app/lib/main_class.rb +8 -0
- data/lib/lanes/generators/app.rb +36 -0
- data/lib/lanes/guard_tasks.rb +44 -0
- data/lib/lanes/logger.rb +37 -0
- data/lib/lanes/model.rb +26 -0
- data/lib/lanes/numbers.rb +72 -0
- data/lib/lanes/rails_engine.rb +5 -0
- data/lib/lanes/screens.rb +126 -0
- data/lib/lanes/spec_asset_expander.rb +43 -0
- data/lib/lanes/strings.rb +56 -0
- data/lib/lanes/user.rb +127 -0
- data/lib/lanes/validators/all.rb +2 -0
- data/lib/lanes/validators/email.rb +17 -0
- data/lib/lanes/validators/set.rb +18 -0
- data/lib/lanes/version.rb +5 -0
- data/lib/lanes.rb +22 -0
- data/npm-build/README +1 -0
- data/npm-build/compile.coffee +15 -0
- data/npm-build/package.json +59 -0
- data/npm-build/shims/underscore.js +1416 -0
- data/npm-build/template.js +33 -0
- data/public/javascripts/jasmine_examples/Player.js +22 -0
- data/public/javascripts/jasmine_examples/Song.js +7 -0
- data/spec/api/javascript_processor_spec.rb +107 -0
- data/spec/api/user_spec.rb +52 -0
- data/spec/client/component/ChoicesInputSpec.coffee +12 -0
- data/spec/client/component/foo_spec.coffee +4 -0
- data/spec/client/foo_spec.js +0 -0
- data/spec/client/jasmine_examples/PlayerSpec.js +0 -0
- data/spec/client/support/jasmine.yml +128 -0
- data/spec/client/support/jasmine_helper.rb +15 -0
- data/spec/concerns/api_path_spec.rb +14 -0
- data/spec/concerns/association_extensions_spec.rb +30 -0
- data/spec/concerns/attr_accessor_with_default_spec.rb +57 -0
- data/spec/concerns/code_identifier_spec.rb +45 -0
- data/spec/concerns/export_associations_spec.rb +7 -0
- data/spec/concerns/export_methods_spec.rb +43 -0
- data/spec/concerns/export_scope_spec.rb +15 -0
- data/spec/concerns/exported_limits_spec.rb +47 -0
- data/spec/concerns/pub_sub_spec.rb +83 -0
- data/spec/concerns/set_attribute_data_spec.rb +66 -0
- data/spec/configuration_spec.rb +26 -0
- data/spec/fixtures/lanes/users.yml +13 -0
- data/spec/helpers/.gitkeep +0 -0
- data/spec/helpers/SpecHelper.js +18 -0
- data/spec/locked_fields_spec.rb +27 -0
- data/spec/numbers_spec.rb +26 -0
- data/spec/role_collection_spec.rb +19 -0
- data/spec/spec_helper.rb +163 -0
- data/spec/strings_spec.rb +41 -0
- data/spec/testing_models.rb +54 -0
- data/spec/user_role_spec.rb +7 -0
- data/spec/user_spec.rb +53 -0
- data/tasks/migrations.rake +22 -0
- data/tasks/publish.rake +8 -0
- data/views/index.erb +29 -0
- data/views/specs.erb +25 -0
- data/yard_ext/all.rb +9 -0
- data/yard_ext/code_identifier_handler.rb +33 -0
- data/yard_ext/concern_meta_methods.rb +60 -0
- data/yard_ext/config_options.rb +27 -0
- data/yard_ext/exported_scope.rb +4 -0
- data/yard_ext/immutable_handler.rb +17 -0
- data/yard_ext/json_attr_accessor.rb +22 -0
- data/yard_ext/locked_fields_handler.rb +21 -0
- data/yard_ext/templates/default/layout/html/layout.erb +20 -0
- data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
- data/yard_ext/templates/default/method_details/setup.rb +3 -0
- data/yard_ext/validators.rb +1 -0
- data/yard_ext/visible_id_handler.rb +38 -0
- metadata +772 -0
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileOverview
|
|
3
|
+
* Copyright (c) 2013 Aaron Gloege
|
|
4
|
+
*
|
|
5
|
+
* Permission is hereby granted, free of charge, to any person
|
|
6
|
+
* obtaining a copy of this software and associated documentation
|
|
7
|
+
* files (the "Software"), to deal in the Software without restriction,
|
|
8
|
+
* including without limitation the rights to use, copy, modify, merge,
|
|
9
|
+
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
10
|
+
* and to permit persons to whom the Software is furnished to do so,
|
|
11
|
+
* subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be
|
|
14
|
+
* included in all copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
18
|
+
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
20
|
+
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
21
|
+
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
22
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
|
23
|
+
* OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* jQuery Tap Plugin
|
|
26
|
+
* Using the tap event, this plugin will properly simulate a click event
|
|
27
|
+
* in touch browsers using touch events, and on non-touch browsers,
|
|
28
|
+
* click will automatically be used instead.
|
|
29
|
+
*
|
|
30
|
+
* @author Aaron Gloege
|
|
31
|
+
* @version 1.1.0
|
|
32
|
+
*/
|
|
33
|
+
(function(document, $) {
|
|
34
|
+
'use strict';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Event namespace
|
|
38
|
+
*
|
|
39
|
+
* @type String
|
|
40
|
+
* @final
|
|
41
|
+
*/
|
|
42
|
+
var HELPER_NAMESPACE = '._tap';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Event namespace
|
|
46
|
+
*
|
|
47
|
+
* @type String
|
|
48
|
+
* @final
|
|
49
|
+
*/
|
|
50
|
+
var HELPER_ACTIVE_NAMESPACE = '._tapActive';
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Event name
|
|
54
|
+
*
|
|
55
|
+
* @type String
|
|
56
|
+
* @final
|
|
57
|
+
*/
|
|
58
|
+
var EVENT_NAME = 'tap';
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Max distance between touchstart and touchend to be considered a tap
|
|
62
|
+
*
|
|
63
|
+
* @type Number
|
|
64
|
+
* @final
|
|
65
|
+
*/
|
|
66
|
+
var MAX_TAP_DELTA = 10;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Max duration between touchstart and touchend to be considered a tap
|
|
70
|
+
*
|
|
71
|
+
* @type Number
|
|
72
|
+
* @final
|
|
73
|
+
*/
|
|
74
|
+
var MAX_TAP_TIME = 400;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Event variables to copy to touches
|
|
78
|
+
*
|
|
79
|
+
* @type String[]
|
|
80
|
+
* @final
|
|
81
|
+
*/
|
|
82
|
+
var EVENT_VARIABLES = 'clientX clientY screenX screenY pageX pageY'.split(' ');
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* jQuery body object
|
|
86
|
+
*
|
|
87
|
+
* @type jQuery
|
|
88
|
+
*/
|
|
89
|
+
var $BODY;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Last canceled tap event
|
|
93
|
+
*
|
|
94
|
+
* @type jQuery.Event
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
var _lastTap;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Last touchstart event
|
|
101
|
+
*
|
|
102
|
+
* @type jQuery.Event
|
|
103
|
+
* @private
|
|
104
|
+
*/
|
|
105
|
+
var _lastTouch;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Object for tracking current touch
|
|
109
|
+
*
|
|
110
|
+
* @type Object
|
|
111
|
+
* @static
|
|
112
|
+
*/
|
|
113
|
+
var TOUCH_VALUES = {
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Number of touches currently active on touchstart
|
|
117
|
+
*
|
|
118
|
+
* @property count
|
|
119
|
+
* @type Number
|
|
120
|
+
*/
|
|
121
|
+
count: 0,
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* touchstart/mousedown jQuery.Event object
|
|
125
|
+
*
|
|
126
|
+
* @property event
|
|
127
|
+
* @type jQuery.Event
|
|
128
|
+
*/
|
|
129
|
+
event: 0
|
|
130
|
+
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Create a new event from the original event
|
|
135
|
+
* Copy over EVENT_VARIABLES from the original jQuery.Event
|
|
136
|
+
*
|
|
137
|
+
* @param {String} type
|
|
138
|
+
* @param {jQuery.Event} e
|
|
139
|
+
* @return {jQuery.Event}
|
|
140
|
+
* @private
|
|
141
|
+
*/
|
|
142
|
+
var _createEvent = function(type, e) {
|
|
143
|
+
var originalEvent = e.originalEvent;
|
|
144
|
+
var event = $.Event(originalEvent);
|
|
145
|
+
|
|
146
|
+
event.type = type;
|
|
147
|
+
|
|
148
|
+
var i = 0;
|
|
149
|
+
var length = EVENT_VARIABLES.length;
|
|
150
|
+
|
|
151
|
+
for (; i < length; i++) {
|
|
152
|
+
event[EVENT_VARIABLES[i]] = e[EVENT_VARIABLES[i]];
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return event;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Determine if a valid tap event
|
|
160
|
+
*
|
|
161
|
+
* @param {jQuery.Event} e
|
|
162
|
+
* @return {Boolean}
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
165
|
+
var _isTap = function(e) {
|
|
166
|
+
if (e.isTrigger) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
var startEvent = TOUCH_VALUES.event;
|
|
171
|
+
var xDelta = Math.abs(e.pageX - startEvent.pageX);
|
|
172
|
+
var yDelta = Math.abs(e.pageY - startEvent.pageY);
|
|
173
|
+
var delta = Math.max(xDelta, yDelta);
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
e.timeStamp - startEvent.timeStamp < MAX_TAP_TIME &&
|
|
177
|
+
delta < MAX_TAP_DELTA &&
|
|
178
|
+
(!startEvent.touches || TOUCH_VALUES.count === 1) &&
|
|
179
|
+
Tap.isTracking
|
|
180
|
+
);
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Determine if mousedown event was emulated from the last touchstart event
|
|
185
|
+
*
|
|
186
|
+
* @function
|
|
187
|
+
* @param {jQuery.Event} e
|
|
188
|
+
* @returns {Boolean}
|
|
189
|
+
* @private
|
|
190
|
+
*/
|
|
191
|
+
var _isEmulated = function(e) {
|
|
192
|
+
if (!_lastTouch) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
var xDelta = Math.abs(e.pageX - _lastTouch.pageX);
|
|
197
|
+
var yDelta = Math.abs(e.pageY - _lastTouch.pageY);
|
|
198
|
+
var delta = Math.max(xDelta, yDelta);
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
Math.abs(e.timeStamp - _lastTouch.timeStamp) < 750 &&
|
|
202
|
+
delta < MAX_TAP_DELTA
|
|
203
|
+
);
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Normalize touch events with data from first touch in the jQuery.Event
|
|
208
|
+
*
|
|
209
|
+
* This could be done using the `jQuery.fixHook` api, but to avoid conflicts
|
|
210
|
+
* with other libraries that might already have applied a fix hook, this
|
|
211
|
+
* approach is used instead.
|
|
212
|
+
*
|
|
213
|
+
* @param {jQuery.Event} event
|
|
214
|
+
* @private
|
|
215
|
+
*/
|
|
216
|
+
var _normalizeEvent = function(event) {
|
|
217
|
+
if (event.type.indexOf('touch') === 0) {
|
|
218
|
+
event.touches = event.originalEvent.changedTouches;
|
|
219
|
+
var touch = event.touches[0];
|
|
220
|
+
|
|
221
|
+
var i = 0;
|
|
222
|
+
var length = EVENT_VARIABLES.length;
|
|
223
|
+
|
|
224
|
+
for (; i < length; i++) {
|
|
225
|
+
event[EVENT_VARIABLES[i]] = touch[EVENT_VARIABLES[i]];
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Normalize timestamp
|
|
230
|
+
event.timeStamp = Date.now ? Date.now() : +new Date();
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Tap object that will track touch events and
|
|
235
|
+
* trigger the tap event when necessary
|
|
236
|
+
*
|
|
237
|
+
* @class Tap
|
|
238
|
+
* @static
|
|
239
|
+
*/
|
|
240
|
+
var Tap = {
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Flag to determine if touch events are currently enabled
|
|
244
|
+
*
|
|
245
|
+
* @property isEnabled
|
|
246
|
+
* @type Boolean
|
|
247
|
+
*/
|
|
248
|
+
isEnabled: false,
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Are we currently tracking a tap event?
|
|
252
|
+
*
|
|
253
|
+
* @property isTracking
|
|
254
|
+
* @type Boolean
|
|
255
|
+
*/
|
|
256
|
+
isTracking: false,
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Enable touch event listeners
|
|
260
|
+
*
|
|
261
|
+
* @method enable
|
|
262
|
+
*/
|
|
263
|
+
enable: function() {
|
|
264
|
+
if (Tap.isEnabled) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
Tap.isEnabled = true;
|
|
269
|
+
|
|
270
|
+
// Set body element
|
|
271
|
+
$BODY = $(document.body)
|
|
272
|
+
.on('touchstart' + HELPER_NAMESPACE, Tap.onStart)
|
|
273
|
+
.on('mousedown' + HELPER_NAMESPACE, Tap.onStart)
|
|
274
|
+
.on('click' + HELPER_NAMESPACE, Tap.onClick);
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Disable touch event listeners
|
|
279
|
+
*
|
|
280
|
+
* @method disable
|
|
281
|
+
*/
|
|
282
|
+
disable: function() {
|
|
283
|
+
if (!Tap.isEnabled) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
Tap.isEnabled = false;
|
|
288
|
+
|
|
289
|
+
// unbind all events with namespace
|
|
290
|
+
$BODY.off(HELPER_NAMESPACE);
|
|
291
|
+
},
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Store touch start values and target
|
|
295
|
+
*
|
|
296
|
+
* @method onTouchStart
|
|
297
|
+
* @param {jQuery.Event} e
|
|
298
|
+
*/
|
|
299
|
+
onStart: function(e) {
|
|
300
|
+
if (e.isTrigger) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
_normalizeEvent(e);
|
|
305
|
+
|
|
306
|
+
if (e.touches) {
|
|
307
|
+
TOUCH_VALUES.count = e.touches.length;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (Tap.isTracking) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (!e.touches && _isEmulated(e)) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
Tap.isTracking = true;
|
|
319
|
+
|
|
320
|
+
TOUCH_VALUES.event = e;
|
|
321
|
+
|
|
322
|
+
if (e.touches) {
|
|
323
|
+
_lastTouch = e;
|
|
324
|
+
$BODY
|
|
325
|
+
.on('touchend' + HELPER_NAMESPACE + HELPER_ACTIVE_NAMESPACE, Tap.onEnd)
|
|
326
|
+
.on('touchcancel' + HELPER_NAMESPACE + HELPER_ACTIVE_NAMESPACE, Tap.onCancel);
|
|
327
|
+
} else {
|
|
328
|
+
$BODY.on('mouseup' + HELPER_NAMESPACE + HELPER_ACTIVE_NAMESPACE, Tap.onEnd);
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* If touch has not been canceled, create a
|
|
334
|
+
* tap event and trigger it on the target element
|
|
335
|
+
*
|
|
336
|
+
* @method onTouchEnd
|
|
337
|
+
* @param {jQuery.Event} e
|
|
338
|
+
*/
|
|
339
|
+
onEnd: function(e) {
|
|
340
|
+
var event;
|
|
341
|
+
|
|
342
|
+
if (e.isTrigger) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
_normalizeEvent(e);
|
|
347
|
+
|
|
348
|
+
if (_isTap(e)) {
|
|
349
|
+
event = _createEvent(EVENT_NAME, e);
|
|
350
|
+
_lastTap = event;
|
|
351
|
+
$(TOUCH_VALUES.event.target).trigger(event);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Cancel active tap tracking
|
|
355
|
+
Tap.onCancel(e);
|
|
356
|
+
},
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Cancel tap and remove event listeners for active tap tracking
|
|
360
|
+
*
|
|
361
|
+
* @method onTouchCancel
|
|
362
|
+
* @param {jQuery.Event} e
|
|
363
|
+
*/
|
|
364
|
+
onCancel: function(e) {
|
|
365
|
+
if (e && e.type === 'touchcancel') {
|
|
366
|
+
e.preventDefault();
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
Tap.isTracking = false;
|
|
370
|
+
|
|
371
|
+
$BODY.off(HELPER_ACTIVE_NAMESPACE);
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* If tap was canceled, cancel click event
|
|
376
|
+
*
|
|
377
|
+
* @method onClick
|
|
378
|
+
* @param {jQuery.Event} e
|
|
379
|
+
* @return {void|Boolean}
|
|
380
|
+
*/
|
|
381
|
+
onClick: function(e) {
|
|
382
|
+
if (
|
|
383
|
+
!e.isTrigger &&
|
|
384
|
+
_lastTap &&
|
|
385
|
+
_lastTap.isDefaultPrevented() &&
|
|
386
|
+
_lastTap.target === e.target &&
|
|
387
|
+
_lastTap.pageX === e.pageX &&
|
|
388
|
+
_lastTap.pageY === e.pageY &&
|
|
389
|
+
e.timeStamp - _lastTap.timeStamp < 750
|
|
390
|
+
) {
|
|
391
|
+
_lastTap = null;
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
// Enable tab when document is ready
|
|
399
|
+
$(document).ready(Tap.enable);
|
|
400
|
+
|
|
401
|
+
}(document, jQuery));
|