aleph_analytics 0.0.0.alpha
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/CHANGELOG.md +0 -0
- data/Gemfile +70 -0
- data/Gemfile.lock +489 -0
- data/LICENSE +21 -0
- data/Procfile +2 -0
- data/README.md +1 -0
- data/ROADMAP.md +7 -0
- data/Rakefile +9 -0
- data/app/assets/fonts/octicons-local.ttf +0 -0
- data/app/assets/fonts/octicons.eot +0 -0
- data/app/assets/fonts/octicons.svg +183 -0
- data/app/assets/fonts/octicons.ttf +0 -0
- data/app/assets/fonts/octicons.woff +0 -0
- data/app/assets/javascripts/angular/aleph.js.es6 +90 -0
- data/app/assets/javascripts/angular/config/schema_completer_config.js.es6 +71 -0
- data/app/assets/javascripts/angular/controllers/alerts/alert_index_controller.js.es6 +16 -0
- data/app/assets/javascripts/angular/controllers/alerts/alert_show_controller.js.es6 +99 -0
- data/app/assets/javascripts/angular/controllers/controllers.js.es6 +65 -0
- data/app/assets/javascripts/angular/controllers/query/query_index_controller.js.es6 +80 -0
- data/app/assets/javascripts/angular/controllers/query/query_repl_controller.js.es6 +147 -0
- data/app/assets/javascripts/angular/controllers/query/query_show_controller.js.es6 +43 -0
- data/app/assets/javascripts/angular/controllers/schema/schema_index_controller.js.es6 +61 -0
- data/app/assets/javascripts/angular/controllers/snippet/snippet_index_controller.js.es6 +80 -0
- data/app/assets/javascripts/angular/directives/directives.js.es6 +30 -0
- data/app/assets/javascripts/angular/directives/query/query_details_directive.js.es6 +87 -0
- data/app/assets/javascripts/angular/directives/query/query_version_sidebar_directive.js.es6 +65 -0
- data/app/assets/javascripts/angular/directives/result/result_directive.js.es6 +59 -0
- data/app/assets/javascripts/angular/directives/result/results_directive.js.es6 +30 -0
- data/app/assets/javascripts/angular/directives/visualization_directive.js.es6 +101 -0
- data/app/assets/javascripts/angular/filters/filters.js.es6 +27 -0
- data/app/assets/javascripts/angular/services/alert/alert.js.es6 +51 -0
- data/app/assets/javascripts/angular/services/alert/alert_resource.js.es6 +10 -0
- data/app/assets/javascripts/angular/services/lib/ace_completers.js.es6 +29 -0
- data/app/assets/javascripts/angular/services/lib/ace_sql_parse.js.es6 +156 -0
- data/app/assets/javascripts/angular/services/lib/action_handler.js.es6 +73 -0
- data/app/assets/javascripts/angular/services/lib/alert_flash.js.es6 +30 -0
- data/app/assets/javascripts/angular/services/lib/default_ace_configurator_service.js.es6 +74 -0
- data/app/assets/javascripts/angular/services/lib/github_url_service.js.es6 +53 -0
- data/app/assets/javascripts/angular/services/lib/keyword_completer.js.es6 +36 -0
- data/app/assets/javascripts/angular/services/lib/local_resource.js.es6 +20 -0
- data/app/assets/javascripts/angular/services/lib/lock_service.js.es6 +48 -0
- data/app/assets/javascripts/angular/services/lib/locking_poll_service.js.es6 +42 -0
- data/app/assets/javascripts/angular/services/lib/matcher_runner.js.es6 +65 -0
- data/app/assets/javascripts/angular/services/lib/navigation_guard.js.es6 +45 -0
- data/app/assets/javascripts/angular/services/lib/open_repl_service.js.es6 +56 -0
- data/app/assets/javascripts/angular/services/lib/page_title_manager.js.es6 +38 -0
- data/app/assets/javascripts/angular/services/lib/pagination.js.es6 +114 -0
- data/app/assets/javascripts/angular/services/lib/pagination_components.js.es6 +91 -0
- data/app/assets/javascripts/angular/services/lib/parameter_methods.js.es6 +35 -0
- data/app/assets/javascripts/angular/services/lib/role_model.js.es6 +21 -0
- data/app/assets/javascripts/angular/services/lib/schema_completer.js.es6 +56 -0
- data/app/assets/javascripts/angular/services/lib/selection_tag_input.js.es6 +42 -0
- data/app/assets/javascripts/angular/services/lib/server_configurations.js.es6 +15 -0
- data/app/assets/javascripts/angular/services/lib/spinner_state.js.es6 +45 -0
- data/app/assets/javascripts/angular/services/lib/tag_resource.js.es6 +14 -0
- data/app/assets/javascripts/angular/services/model/collection_dirty_awareness.js.es6 +33 -0
- data/app/assets/javascripts/angular/services/model/collection_model_base.js.es6 +75 -0
- data/app/assets/javascripts/angular/services/model/dirty_aware_collection_model.js.es6 +31 -0
- data/app/assets/javascripts/angular/services/model/dirty_aware_model.js.es6 +50 -0
- data/app/assets/javascripts/angular/services/model/model_base.js.es6 +80 -0
- data/app/assets/javascripts/angular/services/model/model_state.js.es6 +51 -0
- data/app/assets/javascripts/angular/services/model/models.js.es6 +15 -0
- data/app/assets/javascripts/angular/services/model/unpersisted_model.js.es6 +20 -0
- data/app/assets/javascripts/angular/services/model_generation/model_factory.js.es6 +28 -0
- data/app/assets/javascripts/angular/services/model_generation/model_generation.js.es6 +13 -0
- data/app/assets/javascripts/angular/services/model_generation/model_manager.js.es6 +86 -0
- data/app/assets/javascripts/angular/services/model_generation/resource_factory.js.es6 +38 -0
- data/app/assets/javascripts/angular/services/model_generation/standard_collection_model.js.es6 +25 -0
- data/app/assets/javascripts/angular/services/model_generation/standard_model.js.es6 +38 -0
- data/app/assets/javascripts/angular/services/query/query.js.es6 +55 -0
- data/app/assets/javascripts/angular/services/query/query_handler.js.es6 +40 -0
- data/app/assets/javascripts/angular/services/query/query_loader.js.es6 +54 -0
- data/app/assets/javascripts/angular/services/query/query_request_transformers.js.es6 +26 -0
- data/app/assets/javascripts/angular/services/query/query_resource.js.es6 +21 -0
- data/app/assets/javascripts/angular/services/query/query_tab.js.es6 +63 -0
- data/app/assets/javascripts/angular/services/query/query_versions.js.es6 +21 -0
- data/app/assets/javascripts/angular/services/result/result.js.es6 +26 -0
- data/app/assets/javascripts/angular/services/result/result_poller.js.es6 +30 -0
- data/app/assets/javascripts/angular/services/result/result_runner.js.es6 +48 -0
- data/app/assets/javascripts/angular/services/result/results.js.es6 +10 -0
- data/app/assets/javascripts/angular/services/schema/schema_column.js.es6 +93 -0
- data/app/assets/javascripts/angular/services/schema/schema_column_resource.js.es6 +12 -0
- data/app/assets/javascripts/angular/services/schema/schema_columns.js.es6 +57 -0
- data/app/assets/javascripts/angular/services/schema/schema_comment_resource.js.es6 +12 -0
- data/app/assets/javascripts/angular/services/services.js.es6 +140 -0
- data/app/assets/javascripts/angular/services/snippet/ace_snippet_manager.js.es6 +44 -0
- data/app/assets/javascripts/angular/services/visualization/source_renderer.js.es6 +70 -0
- data/app/assets/javascripts/angular/services/visualization/visualization.js.es6 +47 -0
- data/app/assets/javascripts/angular/services/visualization/visualization_service.js.es6 +67 -0
- data/app/assets/javascripts/angular/services/visualization/visualizations.js.es6 +11 -0
- data/app/assets/javascripts/application.js +22 -0
- data/app/assets/javascripts/lib/key_binding.js +24 -0
- data/app/assets/javascripts/lib/serialized_storage.js +11 -0
- data/app/assets/javascripts/lib/underscore_contrib/array_builders.js +190 -0
- data/app/assets/javascripts/lib/underscore_contrib/function_predicates.js +95 -0
- data/app/assets/javascripts/lib/underscore_contrib/object_builders.js +111 -0
- data/app/assets/javascripts/lib/underscore_contrib/object_selectors.js +112 -0
- data/app/assets/javascripts/lib/underscore_contrib/util_existential.js +15 -0
- data/app/assets/javascripts/lib/utils.js +29 -0
- data/app/assets/stylesheets/alert_bar.css.sass +13 -0
- data/app/assets/stylesheets/alerts.css.sass +66 -0
- data/app/assets/stylesheets/application.css.sass +35 -0
- data/app/assets/stylesheets/comments.css.sass +7 -0
- data/app/assets/stylesheets/index_components.css.sass +105 -0
- data/app/assets/stylesheets/queries.css.sass +110 -0
- data/app/assets/stylesheets/repl.css.sass +59 -0
- data/app/assets/stylesheets/results.css.sass +25 -0
- data/app/assets/stylesheets/schemas.css.sass +56 -0
- data/app/assets/stylesheets/sessions.css.sass +9 -0
- data/app/assets/stylesheets/shared.css.sass +157 -0
- data/app/assets/stylesheets/sidebar.css.sass +85 -0
- data/app/assets/stylesheets/snippets.css.sass +15 -0
- data/app/assets/stylesheets/sort_bar.css.sass +10 -0
- data/app/assets/stylesheets/spinners.css.sass +67 -0
- data/app/assets/stylesheets/summary.css.sass +16 -0
- data/app/assets/stylesheets/variables.css.sass +110 -0
- data/app/assets/stylesheets/visualizations.css.sass +15 -0
- data/app/controllers/alerts_controller.rb +72 -0
- data/app/controllers/application_controller.rb +38 -0
- data/app/controllers/columns_controller.rb +21 -0
- data/app/controllers/queries_controller.rb +85 -0
- data/app/controllers/query_versions_controller.rb +38 -0
- data/app/controllers/result_csvs_controller.rb +29 -0
- data/app/controllers/results_controller.rb +53 -0
- data/app/controllers/roles_controller.rb +9 -0
- data/app/controllers/schema_comments_controller.rb +47 -0
- data/app/controllers/snippets_controller.rb +67 -0
- data/app/controllers/tags_controller.rb +19 -0
- data/app/controllers/visualizations_controller.rb +61 -0
- data/app/mailers/alert_mailer.rb +8 -0
- data/app/models/ability.rb +31 -0
- data/app/models/alert.rb +139 -0
- data/app/models/alert_execution.rb +25 -0
- data/app/models/query.rb +85 -0
- data/app/models/query_execution.rb +39 -0
- data/app/models/query_role.rb +3 -0
- data/app/models/query_version.rb +61 -0
- data/app/models/result.rb +67 -0
- data/app/models/schema_comment.rb +3 -0
- data/app/models/snippet.rb +3 -0
- data/app/models/user.rb +19 -0
- data/app/models/visualization.rb +7 -0
- data/app/serializers/alert_serializer.rb +10 -0
- data/app/serializers/query_index_serializer.rb +7 -0
- data/app/serializers/query_serializer.rb +8 -0
- data/app/serializers/query_version_serializer.rb +3 -0
- data/app/serializers/result_serializer.rb +3 -0
- data/app/views/alert_mailer/alert_failing_email.html.haml +17 -0
- data/app/views/alerts/_index.html.haml +10 -0
- data/app/views/alerts/_index_item.html.haml +25 -0
- data/app/views/alerts/_index_sidebar.html.haml +20 -0
- data/app/views/alerts/_index_sort_bar.html.haml +22 -0
- data/app/views/alerts/_show.html.haml +90 -0
- data/app/views/application/_rollbar.html.erb +9 -0
- data/app/views/application/index.html.haml +1 -0
- data/app/views/application/unauthorized.html.haml +5 -0
- data/app/views/application/unauthorized.json +3 -0
- data/app/views/devise/sessions/new.html.haml +22 -0
- data/app/views/layouts/application.html.haml +78 -0
- data/app/views/queries/_alert.html.haml +6 -0
- data/app/views/queries/_comments.html.haml +5 -0
- data/app/views/queries/_index.html.haml +15 -0
- data/app/views/queries/_index_item.html.haml +37 -0
- data/app/views/queries/_index_sidebar.html.haml +58 -0
- data/app/views/queries/_index_sort_bar.html.haml +29 -0
- data/app/views/queries/_query_details.html.haml +81 -0
- data/app/views/queries/_query_version_sidebar.html.haml +46 -0
- data/app/views/queries/_repl.html.haml +79 -0
- data/app/views/queries/_results.html.haml +29 -0
- data/app/views/queries/_role_template.html.haml +3 -0
- data/app/views/queries/_show.html.haml +28 -0
- data/app/views/queries/_tag_template.html.haml +3 -0
- data/app/views/results/_show.html.haml +45 -0
- data/app/views/schemas/_index.html.haml +47 -0
- data/app/views/snippets/_index.html.haml +30 -0
- data/app/views/snippets/_index_item.html.haml +20 -0
- data/app/views/visualizations/_show.html.haml +83 -0
- data/bin/aleph +71 -0
- data/bin/bundle +3 -0
- data/bin/executables/bundle_runner.rb +12 -0
- data/bin/executables/clock.rb +7 -0
- data/bin/executables/deps.rb +10 -0
- data/bin/executables/import_env_variables.rb +17 -0
- data/bin/executables/init_db.rb +7 -0
- data/bin/executables/lib/config_generator.rb +51 -0
- data/bin/executables/lib/env_writer.rb +25 -0
- data/bin/executables/lib/import_env_file.rb +19 -0
- data/bin/executables/lib/seeder.rb +14 -0
- data/bin/executables/lib/utils.rb +30 -0
- data/bin/executables/playground.rb +130 -0
- data/bin/executables/seed_playground_db.rb +9 -0
- data/bin/executables/update_db.rb +7 -0
- data/bin/executables/web_server.rb +12 -0
- data/bin/executables/worker.rb +7 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/config/application.rb +59 -0
- data/config/attribute-map.yml +4 -0
- data/config/boot.rb +4 -0
- data/config/database.yml +40 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +37 -0
- data/config/environments/playground.rb +55 -0
- data/config/environments/production.rb +68 -0
- data/config/environments/staging.rb +75 -0
- data/config/environments/test.rb +46 -0
- data/config/initializers/01_internalize_configurations.rb +70 -0
- data/config/initializers/action_controller_renderers.rb +15 -0
- data/config/initializers/active_model_serializer.rb +7 -0
- data/config/initializers/assets.rb +8 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/cookies_serializer.rb +3 -0
- data/config/initializers/default_enviorment_variables.rb +8 -0
- data/config/initializers/devise.rb +297 -0
- data/config/initializers/filter_parameter_logging.rb +4 -0
- data/config/initializers/haml.rb +1 -0
- data/config/initializers/inflections.rb +16 -0
- data/config/initializers/mime_types.rb +4 -0
- data/config/initializers/net_http.rb +1 -0
- data/config/initializers/pester.rb +15 -0
- data/config/initializers/rails_admin.rb +27 -0
- data/config/initializers/redis.rb +14 -0
- data/config/initializers/rollbar.rb +45 -0
- data/config/initializers/session_store.rb +3 -0
- data/config/initializers/sql_logging_patch.rb +7 -0
- data/config/initializers/to_bool.rb +29 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/devise.en.yml +62 -0
- data/config/locales/en.yml +23 -0
- data/config/puma.rb +10 -0
- data/config/resque-pool.yml +15 -0
- data/config/resque.yml +10 -0
- data/config/routes.rb +33 -0
- data/config/secrets.yml +26 -0
- data/config.ru +4 -0
- data/db/migrate/20140710204753_database_begin.rb +150 -0
- data/lib/aleph_log_formatter.rb +5 -0
- data/lib/authentication.rb +17 -0
- data/lib/aws_s3.rb +7 -0
- data/lib/clock.rb +7 -0
- data/lib/compilable_parameter.rb +50 -0
- data/lib/count_publisher.rb +26 -0
- data/lib/csv_helper/aws.rb +30 -0
- data/lib/csv_helper/base.rb +20 -0
- data/lib/csv_helper/local.rb +18 -0
- data/lib/csv_serializer.rb +23 -0
- data/lib/csv_service.rb +12 -0
- data/lib/github/blob.rb +23 -0
- data/lib/github/commit.rb +37 -0
- data/lib/github/pusher.rb +94 -0
- data/lib/github/refs.rb +39 -0
- data/lib/github/tree.rb +29 -0
- data/lib/github.rb +64 -0
- data/lib/interaction/query_creation.rb +27 -0
- data/lib/interaction/query_interaction.rb +35 -0
- data/lib/interaction/query_update.rb +62 -0
- data/lib/interaction/result_creation.rb +48 -0
- data/lib/pagination_search/attribute_set.rb +61 -0
- data/lib/pagination_search/base_relation.rb +80 -0
- data/lib/pagination_search/hash_paginate.rb +74 -0
- data/lib/pagination_search/paginated_records.rb +16 -0
- data/lib/pagination_search/pagination.rb +12 -0
- data/lib/pagination_search/search_conditions.rb +59 -0
- data/lib/query_version_support.rb +14 -0
- data/lib/redis_result_row_count.rb +26 -0
- data/lib/redshift_connection_pool.rb +8 -0
- data/lib/redshift_pg/connection.rb +44 -0
- data/lib/redshift_pg/redshift_pg.rb +15 -0
- data/lib/result_csv_generator.rb +40 -0
- data/lib/role.rb +40 -0
- data/lib/sample_skimmer.rb +30 -0
- data/lib/schema_comment_matcher.rb +27 -0
- data/lib/schemas/descriptor.rb +85 -0
- data/lib/schemas/descriptors.rb +10 -0
- data/lib/schemas/paginate.rb +21 -0
- data/lib/schemas/redis_store.rb +22 -0
- data/lib/simple_cache.rb +13 -0
- data/lib/sql_compiler.rb +33 -0
- data/lib/summarizer.rb +18 -0
- data/lib/tasks/karma.rake +32 -0
- data/lib/tasks/resque_setup.rake +18 -0
- data/playground_data/1.csv +13 -0
- data/playground_data/aleph.playground.sqlite3 +0 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +25 -0
- data/public/aleph.png +0 -0
- data/public/assets/.sprockets-manifest-24b5998edb20c5b4d6edf39d44cd3ff7.json +1 -0
- data/public/assets/FontAwesome-9ccfa32dd4cd1b8e83f68899d85bd5e6.otf +0 -0
- data/public/assets/ZeroClipboard-8b5c117b88fe37e32fd34a70fdf60026.swf +0 -0
- data/public/assets/angular/aleph.js-19b4df67407de5dab249abfc391c0eaf.es6 +90 -0
- data/public/assets/angular/config/schema_completer_config.js-1b696920b5e04f75620630d75117b201.es6 +71 -0
- data/public/assets/angular/controllers/alerts/alert_index_controller.js-4344581b1e9b456c3f991f96bb4d403d.es6 +16 -0
- data/public/assets/angular/controllers/alerts/alert_show_controller.js-a984dc82fbcac380cdc8682bf8986933.es6 +99 -0
- data/public/assets/angular/controllers/controllers.js-7431ae468ea2f0d392661448a61cfdf3.es6 +65 -0
- data/public/assets/angular/controllers/query/query_index_controller.js-828eadeee6a971b11b5c07f65f0c6def.es6 +80 -0
- data/public/assets/angular/controllers/query/query_repl_controller.js-3c4bac22e41766e2e83e720d53acade3.es6 +147 -0
- data/public/assets/angular/controllers/query/query_show_controller.js-020c83fd94ece7d55bd94b9981a40083.es6 +43 -0
- data/public/assets/angular/controllers/schema/schema_index_controller.js-d0d790d168b49caefa4b8f7993c928f1.es6 +61 -0
- data/public/assets/angular/controllers/snippet/snippet_index_controller.js-9191ee2e37d16d5807b8a7f45530a6c2.es6 +80 -0
- data/public/assets/angular/directives/directives.js-44fda752585bddc5d026feaab8b14108.es6 +30 -0
- data/public/assets/angular/directives/query/query_details_directive.js-2dd979e2463826558f166d9dc9e2c8a9.es6 +87 -0
- data/public/assets/angular/directives/query/query_version_sidebar_directive.js-b19ba8a9bf4e66c5740e9b9f9495cee1.es6 +65 -0
- data/public/assets/angular/directives/result/result_directive.js-76c151e9277e35578f92b076c2fa5b06.es6 +59 -0
- data/public/assets/angular/directives/result/results_directive.js-fcbf9750790823a11ca313e630bd2b0f.es6 +30 -0
- data/public/assets/angular/directives/visualization_directive.js-82cb45a52eba62deb283a3699add1b33.es6 +101 -0
- data/public/assets/angular/filters/filters.js-48cdb16fc89337e861c9f18ad57fd9bf.es6 +27 -0
- data/public/assets/angular/services/alert/alert.js-a76ea96e948de324fcc00f3ef3ecae4e.es6 +51 -0
- data/public/assets/angular/services/alert/alert_resource.js-ac68ea99936eb213c0fb37d4fbb1511a.es6 +10 -0
- data/public/assets/angular/services/lib/ace_completers.js-5353182bc538210dad12865ad6a060fd.es6 +29 -0
- data/public/assets/angular/services/lib/ace_sql_parse.js-4114a8ad4fe4dbf4f72c0ab7fca22e83.es6 +156 -0
- data/public/assets/angular/services/lib/action_handler.js-85a8f75f507efcf2fe950fa7717b6976.es6 +73 -0
- data/public/assets/angular/services/lib/alert_flash.js-7a4fe7ef5510a224677a12ecf2fe973b.es6 +30 -0
- data/public/assets/angular/services/lib/default_ace_configurator_service.js-9b83d6b53495dafe10bfed5074c3ec01.es6 +74 -0
- data/public/assets/angular/services/lib/github_url_service.js-719084a625f60d20c24097f00813b481.es6 +53 -0
- data/public/assets/angular/services/lib/keyword_completer.js-560b51694457619401c72431dd7b647e.es6 +36 -0
- data/public/assets/angular/services/lib/local_resource.js-9b57357ed203c783708e48154721242a.es6 +20 -0
- data/public/assets/angular/services/lib/lock_service.js-32eb33fda9c27fb5643b25c63099b52c.es6 +48 -0
- data/public/assets/angular/services/lib/locking_poll_service.js-d0271cc07d20ec73291e7175e1714d42.es6 +42 -0
- data/public/assets/angular/services/lib/matcher_runner.js-bd63f4c6ad965716c5b793d3c4602563.es6 +65 -0
- data/public/assets/angular/services/lib/navigation_guard.js-5c7497900f99319f3ef76b83662c20cd.es6 +45 -0
- data/public/assets/angular/services/lib/open_repl_service.js-2332490470ea58f3e5ce7f6fe5dd2659.es6 +56 -0
- data/public/assets/angular/services/lib/page_title_manager.js-227f9ddb49d23bfa934bf216ef96ccbd.es6 +38 -0
- data/public/assets/angular/services/lib/pagination.js-baa9a496d01b87f90c588c51864d1533.es6 +114 -0
- data/public/assets/angular/services/lib/pagination_components.js-4fcc03120d1299713347b487f1e8fd44.es6 +91 -0
- data/public/assets/angular/services/lib/parameter_methods.js-16ecb25ffb24d5870dfc17f9f408fa5b.es6 +35 -0
- data/public/assets/angular/services/lib/role_model.js-3d5072f279676294e7d17cbb4bb3adb5.es6 +21 -0
- data/public/assets/angular/services/lib/schema_completer.js-d04d49642967fd9f8e2c95e0df81f2ae.es6 +56 -0
- data/public/assets/angular/services/lib/selection_tag_input.js-86cc6d564c108d722951b6fcd2b51221.es6 +42 -0
- data/public/assets/angular/services/lib/server_configurations.js-fd8c16a3d02926e7597240566808c141.es6 +15 -0
- data/public/assets/angular/services/lib/spinner_state.js-315bb62df18f9370a89f8b865eb1766a.es6 +45 -0
- data/public/assets/angular/services/lib/tag_resource.js-8849bbdd579bd38b36a362bed926c2f2.es6 +14 -0
- data/public/assets/angular/services/model/collection_dirty_awareness.js-8a78450bd8b565fb03633ab735893508.es6 +33 -0
- data/public/assets/angular/services/model/collection_model_base.js-8092335acde425d28718c1a9fc677d39.es6 +75 -0
- data/public/assets/angular/services/model/dirty_aware_collection_model.js-6f4d2b409a033f5ffc6bd5a747df2046.es6 +31 -0
- data/public/assets/angular/services/model/dirty_aware_model.js-ec1a086f3ec459827dbd5381bd970975.es6 +50 -0
- data/public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6 +80 -0
- data/public/assets/angular/services/model/model_state.js-3e96e381ea7a9eff857081ffbf3a8bab.es6 +51 -0
- data/public/assets/angular/services/model/models.js-6798762a6e263be75c7c4e9f8a19da66.es6 +15 -0
- data/public/assets/angular/services/model/unpersisted_model.js-49597959c989e68c713fd826743bb7b5.es6 +20 -0
- data/public/assets/angular/services/model_generation/model_factory.js-0bccc6a2e9b4738c67230fc68d9780ae.es6 +28 -0
- data/public/assets/angular/services/model_generation/model_generation.js-f08c6eff199b5ad02b2e2bdf866d69ff.es6 +13 -0
- data/public/assets/angular/services/model_generation/model_manager.js-b05d8f00bc4499c50098ae31013de88c.es6 +86 -0
- data/public/assets/angular/services/model_generation/resource_factory.js-e8ce2f4be9383d885dbb965c8e425bab.es6 +38 -0
- data/public/assets/angular/services/model_generation/standard_collection_model.js-19c44dc3a937a85d825c5a2f020a6769.es6 +25 -0
- data/public/assets/angular/services/model_generation/standard_model.js-74439b041eebfc7e0fad454cf6e32192.es6 +38 -0
- data/public/assets/angular/services/query/query.js-7b6228d0a5c1a6ea76242f4aa49aafd0.es6 +55 -0
- data/public/assets/angular/services/query/query_handler.js-d8cb3c66bcf6d16cd13bb5bcd0921496.es6 +40 -0
- data/public/assets/angular/services/query/query_loader.js-1fbc8b859778d46b73b9adc300984851.es6 +54 -0
- data/public/assets/angular/services/query/query_request_transformers.js-522901477c7848324cd5c014005a85c8.es6 +26 -0
- data/public/assets/angular/services/query/query_resource.js-b809fbfd1c379619fa07ef8e52509810.es6 +21 -0
- data/public/assets/angular/services/query/query_tab.js-fe34f5e6d0c813d2d92838be14cd6783.es6 +63 -0
- data/public/assets/angular/services/query/query_versions.js-aa3aec9021354a7394797101ea500887.es6 +21 -0
- data/public/assets/angular/services/result/result.js-be8178c80c767a651a97537b2b0149d5.es6 +26 -0
- data/public/assets/angular/services/result/result_poller.js-b15617d53f164cbe5636bb5573a70504.es6 +30 -0
- data/public/assets/angular/services/result/result_runner.js-ce2c5b3121c8e67903c302e600749c14.es6 +48 -0
- data/public/assets/angular/services/result/results.js-53088d6088f6b4783b274a64322d361c.es6 +10 -0
- data/public/assets/angular/services/schema/schema_column.js-3908faecc9874fa08484d7490701a7d4.es6 +93 -0
- data/public/assets/angular/services/schema/schema_column_resource.js-a6982ce9698b104192c4e455300df455.es6 +12 -0
- data/public/assets/angular/services/schema/schema_columns.js-c63a16e2e0778a885bd27c7cf2ed7d88.es6 +57 -0
- data/public/assets/angular/services/schema/schema_comment_resource.js-20254ea1a4e7b4850c9f21f9619130ce.es6 +12 -0
- data/public/assets/angular/services/services.js-6225c5ea24a9082506d1932d7884b53b.es6 +140 -0
- data/public/assets/angular/services/snippet/ace_snippet_manager.js-dbbba5d8ad5040042b469b294c4d7228.es6 +44 -0
- data/public/assets/angular/services/visualization/source_renderer.js-d7274c88b067a35f2e91bf7f39be7d47.es6 +70 -0
- data/public/assets/angular/services/visualization/visualization.js-23e36c87721aa263dd3f99769027cabb.es6 +47 -0
- data/public/assets/angular/services/visualization/visualization_service.js-25de86b5ceef60cf2b1dfde5fb0e9216.es6 +67 -0
- data/public/assets/angular/services/visualization/visualizations.js-1227bc3dcd67e85c8050d82360a26d53.es6 +11 -0
- data/public/assets/application-9153e0bf570016651e5eb8c67e037d3a.css +10 -0
- data/public/assets/application-ef5c2ae95804ac9785f190a9aea7ad8b.js +149 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-448c34a56d699c29117adc64c43affeb.woff2 +0 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-89889688147bd7575d6327160d64e760.svg +288 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-f4769f9bdb7466be65088239c12046d1.eot +0 -0
- data/public/assets/bootstrap/glyphicons-halflings-regular-fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
- data/public/assets/fontawesome-webfont-4f0022f25672c7f501c339cbf98d9117.ttf +0 -0
- data/public/assets/fontawesome-webfont-776d58f453c8fe5d6a89e9c31ee223ff.svg +504 -0
- data/public/assets/fontawesome-webfont-90186830c9c50a0fed932494581761d9.eot +0 -0
- data/public/assets/fontawesome-webfont-926c93d201fe51c8f351e858468980c3.woff2 +0 -0
- data/public/assets/fontawesome-webfont-fdf491ce5ff5b2da02708cd0e9864719.woff +0 -0
- data/public/assets/glyphicons-halflings-regular-0a5c48c69a25a93e37ed62db813387fa.svg +229 -0
- data/public/assets/glyphicons-halflings-regular-47da44498fc073d9fff9ab0cdb0bef8e.ttf +0 -0
- data/public/assets/glyphicons-halflings-regular-5eae1f7217b606d3580dd70ac840fea1.woff +0 -0
- data/public/assets/glyphicons-halflings-regular-aa16cd35628e6dddf56e766c9aa4ae63.eot +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-2a44fbdb7360c60122bcf6dcef0387d8.png +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_75_ffffff_40x100-8692e6efddf882acbff144c38ea7dfdf.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_55_fbf9ee_1x400-f8f4558e0b92ff2cd6136781533902ec.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_65_ffffff_1x400-e5a8f32e28fd5c27bf0fed33c8a8b9b5.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_75_dadada_1x400-c12c6510dad3ebfa64c8a30e959a2469.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_75_e6e6e6_1x400-f4254356c2a8c9a383205ef2c4de22c4.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-5a3be2d8fff8324d59aec3df7b0a0c83.png +0 -0
- data/public/assets/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-72c593d16e998952cd8d798fee33c6f3.png +0 -0
- data/public/assets/jquery-ui/ui-icons_222222_256x240-9129e086dc488d8bcaf808510bc646ba.png +0 -0
- data/public/assets/jquery-ui/ui-icons_2e83ff_256x240-25162bf857a8eb83ea932a58436e1049.png +0 -0
- data/public/assets/jquery-ui/ui-icons_454545_256x240-771099482bdc1571ece41073b1752596.png +0 -0
- data/public/assets/jquery-ui/ui-icons_888888_256x240-faf6f5dc44e713178784c1fb053990aa.png +0 -0
- data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240-5d8808d43cefca6f6781a5316d176632.png +0 -0
- data/public/assets/octicons-0a82c1edade24862533bbe96ebeaea47.eot +0 -0
- data/public/assets/octicons-103abd6cc0199e2519ef6f1aac4bb0e0.ttf +0 -0
- data/public/assets/octicons-adc17600a2b7a648eba306c2e1426b85.svg +183 -0
- data/public/assets/octicons-be82065223a03ba577de159d97a5d63d.woff +0 -0
- data/public/assets/octicons-local-72e4167c13648cb89e9e96cdd212cb82.ttf +0 -0
- data/public/assets/rails_admin/aristo/images/bg_fallback-a7547e71656b1e538b93ddb49dfc98d3.png +0 -0
- data/public/assets/rails_admin/aristo/images/icon_sprite-415c1eec8a2d31d217d4d1d5a1d44345.png +0 -0
- data/public/assets/rails_admin/aristo/images/progress_bar-449b2fab5cf4122c17a416f6e26569fe.gif +0 -0
- data/public/assets/rails_admin/aristo/images/slider_handles-ba57b6efb64ca6263f77ce2624ad71ee.png +0 -0
- data/public/assets/rails_admin/aristo/images/ui-icons_222222_256x240-a2c05c5e967f9cf4dae51c1243b3b93c.png +0 -0
- data/public/assets/rails_admin/aristo/images/ui-icons_454545_256x240-a7a7eff72c4f562524dc472824aab656.png +0 -0
- data/public/assets/rails_admin/base/README-f7dd742c2237cb1959438b94c7503a41.txt +2 -0
- data/public/assets/rails_admin/bootstrap/glyphicons-halflings-d4fef5262f29f592560fb59918a1c052.png +0 -0
- data/public/assets/rails_admin/bootstrap/glyphicons-halflings-white-9bbc6e9602998a385c2ea13df56470fd.png +0 -0
- data/public/assets/rails_admin/bullet_black-06d345566cf9e0f97a23bb07ab3d50d9.png +0 -0
- data/public/assets/rails_admin/bullet_white-469b537fa21b7143f719578f7426825d.png +0 -0
- data/public/assets/rails_admin/calendar-697f5a44753da70028cfd04b98ac45d2.png +0 -0
- data/public/assets/rails_admin/clock-0cc82b549af3df4f730a02335f54b0df.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_background-7aaa2a726200c0ac3ba43c01f073a93d.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hex-cbc06f4015cbb276a3dd966e1be37c25.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hsb_b-2315aba3c2fbbcfcc22869b21836c31d.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hsb_h-3120023551e3601467cf52e1c8aaae9e.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_hsb_s-77a77892bdef0906fdfc3426d06108fd.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_indic-f485d07540a89502e36dc1a55cec05d0.gif +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_overlay-4b2dd6f78c4aac5cc932e845698b2db5.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_rgb_b-2315aba3c2fbbcfcc22869b21836c31d.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_rgb_g-475afe3f4f69e59ff30a445384a8d961.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_rgb_r-02de28945293fe2fd026c9be3b89955a.png +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_select-cdf55197d05f18c552dc35bdb858fa2a.gif +0 -0
- data/public/assets/rails_admin/colorpicker/colorpicker_submit-9912e5cf348e0be359ff9b1078fbb7da.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_background-a0ab8ff3e2b85b1f8ed5a4d86967471b.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hex-065e780d7b89f7dda63a472caa7c2bdd.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hsb_b-66f5963cf1a0a2680acbcac2bb77f40d.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hsb_h-cd1f2e27122aeca17af416f328b758cd.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_hsb_s-ca6f3e4f0c1fc2cb110c788018369e07.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_indic-04660eb352eb259581a36a0fe8da2d4d.gif +0 -0
- data/public/assets/rails_admin/colorpicker/custom_rgb_b-64bc0c5110f84efe32e82c58d50660f6.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_rgb_g-33fe011475956750a457b1f93f1b9075.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_rgb_r-18f2ee37089d850c52b212d8a31aac92.png +0 -0
- data/public/assets/rails_admin/colorpicker/custom_submit-9d0a14eebb9ae04edfb8099827a42968.png +0 -0
- data/public/assets/rails_admin/colorpicker/select-76bd5c10f34de24b73ff4454735d3e18.png +0 -0
- data/public/assets/rails_admin/colorpicker/select2-d3fea9a451ac2c29bcd4a82b6e4f326a.png +0 -0
- data/public/assets/rails_admin/colorpicker/slider-db040ce7280fc74269e330a862e738e6.png +0 -0
- data/public/assets/rails_admin/jquery.colorpicker-7c36c2fac54a031f6e0dfe6ad137cfb1.js +1 -0
- data/public/assets/rails_admin/jquery.colorpicker-e402a30af31a4ba5957fec816dc9239c.css +1 -0
- data/public/assets/rails_admin/logo-9b479a57b493ee824767163101a5409f.png +0 -0
- data/public/assets/rails_admin/magnifier-4fcdfd820ff2e951458af3d1309ab20c.png +0 -0
- data/public/assets/rails_admin/multiselect/icon_sprite-415c1eec8a2d31d217d4d1d5a1d44345.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-n-dark-32c1cfdd900379bf62658e475fb2ba38.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-n-light-73160d919a189ba13bd4387e3623b7e9.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-s-dark-c15e6bff59c80c5473236cf77870f31d.png +0 -0
- data/public/assets/rails_admin/multiselect/ui-icon-circle-triangle-s-light-fbf43811420f67d49d4dc64c7817f72c.png +0 -0
- data/public/assets/rails_admin/rails_admin-d25a684b9f690652469ceb212fbe7b95.js +328 -0
- data/public/assets/rails_admin/rails_admin-d85fb3c8bbff377491ed5af5239cf185.css +8 -0
- data/public/assets/resque_web/application-b29b34115c3ad5c539f26114fc91e584.css +4 -0
- data/public/assets/resque_web/application-d2bc6e68cf7c6215e804fe9e3f46f1d0.js +111 -0
- data/public/assets/resque_web/idle-53474088772d9917bd463b19efa32fc3.png +0 -0
- data/public/assets/resque_web/lifebuoy-0281230b31ba4078685f4df3e8169534.png +0 -0
- data/public/assets/resque_web/poll-af53f85832c41a9cde68b08cb09711f1.png +0 -0
- data/public/assets/resque_web/rails-9c0a079bdd7701d7e729bd956823d153.png +0 -0
- data/public/assets/resque_web/working-26a36c5119cbdcc64ebade2c5f8c389d.png +0 -0
- data/public/assets/twitter/bootstrap/glyphicons-halflings-2516339970d710819585f90773aebe0a.png +0 -0
- data/public/assets/twitter/bootstrap/glyphicons-halflings-white-9bbc6e9602998a385c2ea13df56470fd.png +0 -0
- data/public/bg_big.svg +2 -0
- data/public/bg_new.svg +2 -0
- data/public/favicon.ico +0 -0
- data/public/resources/keyword_config.json +51 -0
- data/public/resources/visualization/area.html +17 -0
- data/public/resources/visualization/area_step.html +17 -0
- data/public/resources/visualization/bar.html +17 -0
- data/public/resources/visualization/custom.html +6 -0
- data/public/resources/visualization/line.html +16 -0
- data/public/resources/visualization/presets.json +13 -0
- data/public/resources/visualization/scatter.html +17 -0
- data/public/resources/visualization/spline.html +17 -0
- data/public/resources/visualization/spline_area.html +17 -0
- data/public/resources/visualization/stacked_area.html +18 -0
- data/public/resources/visualization/stacked_bar.html +18 -0
- data/public/resources/visualization/stacked_spline_area.html +18 -0
- data/public/resources/visualization/template.json +12 -0
- data/public/robots.txt +2 -0
- data/vendor/assets/javascripts/ace/ace.js +18655 -0
- data/vendor/assets/javascripts/ace/ext-language_tools.js +1937 -0
- data/vendor/assets/javascripts/ace/mode-html.js +2794 -0
- data/vendor/assets/javascripts/ace/mode-pgsql.js +1503 -0
- data/vendor/assets/javascripts/ace/snippets/coffee.js +102 -0
- data/vendor/assets/javascripts/ace/snippets/css.js +974 -0
- data/vendor/assets/javascripts/ace/snippets/haml.js +27 -0
- data/vendor/assets/javascripts/ace/snippets/html.js +835 -0
- data/vendor/assets/javascripts/ace/snippets/html_elixir.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/html_ruby.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/javascript.js +202 -0
- data/vendor/assets/javascripts/ace/snippets/json.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/jsp.js +106 -0
- data/vendor/assets/javascripts/ace/snippets/jsx.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/less.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/mysql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/pgsql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/plain_text.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/rhtml.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/sass.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/scss.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/snippets.js +16 -0
- data/vendor/assets/javascripts/ace/snippets/sql.js +33 -0
- data/vendor/assets/javascripts/ace/snippets/sqlserver.js +76 -0
- data/vendor/assets/javascripts/ace/snippets/svg.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/text.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/textile.js +37 -0
- data/vendor/assets/javascripts/ace/theme-monokai.js +105 -0
- data/vendor/assets/javascripts/angular-filter/angular-filter.js +2271 -0
- data/vendor/assets/javascripts/angular-hotkeys/hotkeys.js +1523 -0
- data/vendor/assets/javascripts/angular-selection-model/selection-model.js +563 -0
- data/vendor/assets/javascripts/angular-spinner/treasure-overlay-spinner.js +53 -0
- data/vendor/assets/javascripts/angular-ui-ace/ui-ace.js +298 -0
- data/vendor/assets/javascripts/angular-ui-bootstrap/ui-bootstrap-tpls-0.14.3.js +8503 -0
- data/vendor/assets/javascripts/d3/c3.min.js +5 -0
- data/vendor/assets/javascripts/d3/d3.v3.min.js +5 -0
- data/vendor/assets/javascripts/infinite-scroll/infinite-scroll.js +186 -0
- data/vendor/assets/javascripts/ng-clip/ngClip.js +84 -0
- data/vendor/assets/javascripts/ng-tags-input/ng-tags-input.min.js +1 -0
- data/vendor/assets/javascripts/pluralize/pluralize.js +453 -0
- data/vendor/assets/javascripts/underscore-js/underscore.js +1548 -0
- data/vendor/assets/stylesheets/angular-hotkeys/hotkeys.css +110 -0
- data/vendor/assets/stylesheets/angular-spinner/treasure-overlay-spinner.css +136 -0
- data/vendor/assets/stylesheets/c3/c3.min.css +1 -0
- data/vendor/assets/stylesheets/ng-tags-input/ng-tags-input.bootstrap.min.css +1 -0
- data/vendor/assets/stylesheets/ng-tags-input/ng-tags-input.min.css +1 -0
- data/vendor/assets/stylesheets/octicons/README.md +1 -0
- data/vendor/assets/stylesheets/octicons/sprockets-octicons.scss +217 -0
- metadata +600 -0
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* The Selection Model module
|
|
4
|
+
*
|
|
5
|
+
* The ngRepeat companion. This module exists to give developers a lightweight
|
|
6
|
+
* option for easily managing selections in lists and tables. It also aims to
|
|
7
|
+
* play nicely with native angular features so you can leverage existing tools
|
|
8
|
+
* for filtering, sorting, animations, etc.
|
|
9
|
+
*
|
|
10
|
+
* @package selectionModel
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
angular.module('selectionModel', []);
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Selection Model Ignore
|
|
18
|
+
*
|
|
19
|
+
* For clickable elements that don't directly interact with `selectionModel`.
|
|
20
|
+
*
|
|
21
|
+
* Useful for when you want to manually change the selection, or for things like
|
|
22
|
+
* "delete" buttons that belong under `ngRepeat` but shouldn't select an item
|
|
23
|
+
* when clicked.
|
|
24
|
+
*
|
|
25
|
+
* @package selectionModel
|
|
26
|
+
* @copyright 2014 Justin Russell, released under the MIT license
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
angular.module('selectionModel').directive('selectionModelIgnore', [
|
|
30
|
+
function() {
|
|
31
|
+
'use strict';
|
|
32
|
+
return {
|
|
33
|
+
restrict: 'A',
|
|
34
|
+
link: function(scope, element, attrs) {
|
|
35
|
+
element.on('click', function(event) {
|
|
36
|
+
event.selectionModelIgnore = true;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* If jQuery is on the page `event` will actually be a jQuery Event
|
|
40
|
+
* and other handlers will only get to see a subset of the event
|
|
41
|
+
* properties that supported by all browsers. Our custom attribute
|
|
42
|
+
* will be dropped. We need to instead decorate the original event
|
|
43
|
+
* object.
|
|
44
|
+
*
|
|
45
|
+
* @see https://github.com/jtrussell/angular-selection-model/issues/27
|
|
46
|
+
*/
|
|
47
|
+
if(event.originalEvent) {
|
|
48
|
+
event.originalEvent.selectionModelIgnore = true;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
]);
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Selection Model - a selection aware companion for ngRepeat
|
|
59
|
+
*
|
|
60
|
+
* @package selectionModel
|
|
61
|
+
* @copyright 2014 Justin Russell, released under the MIT license
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
angular.module('selectionModel').directive('selectionModel', [
|
|
65
|
+
'selectionStack', 'uuidGen', 'selectionModelOptions',
|
|
66
|
+
function(selectionStack, uuidGen, selectionModelOptions) {
|
|
67
|
+
'use strict';
|
|
68
|
+
return {
|
|
69
|
+
restrict: 'A',
|
|
70
|
+
link: function(scope, element, attrs) {
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Defaults from the options provider
|
|
74
|
+
*
|
|
75
|
+
* Use `selectionModelOptionsProvider` when configuring your module to
|
|
76
|
+
* set application wide defaults
|
|
77
|
+
*/
|
|
78
|
+
var defaultOptions = selectionModelOptions.get()
|
|
79
|
+
, defaultSelectedAttribute = defaultOptions.selectedAttribute
|
|
80
|
+
, defaultSelectedClass = defaultOptions.selectedClass
|
|
81
|
+
, defaultType = defaultOptions.type
|
|
82
|
+
, defaultMode = defaultOptions.mode
|
|
83
|
+
, defaultCleanupStrategy = defaultOptions.cleanupStrategy;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The selection model type
|
|
87
|
+
*
|
|
88
|
+
* Controls how selections are presented on the underlying element. Use
|
|
89
|
+
* 'basic' (the default) to simplye assign a "selected" class to
|
|
90
|
+
* selected items. If set to 'checkbox' it'll also sync the checked
|
|
91
|
+
* state of the first checkbox child in each underlying `tr` or `li`
|
|
92
|
+
* element.
|
|
93
|
+
*
|
|
94
|
+
* Note that the 'checkbox' type assumes the first input child element
|
|
95
|
+
* will be the checkbox.
|
|
96
|
+
*/
|
|
97
|
+
var smType = attrs.selectionModelType || defaultType;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The selection mode
|
|
101
|
+
*
|
|
102
|
+
* Supports 'single', 'multi[ple]', and 'multi[ple]-additive'. Single
|
|
103
|
+
* mode will only allow one item to be marked as selected at a time.
|
|
104
|
+
* Vanilla multi mode allows for multiple selectioned items but requires
|
|
105
|
+
* modifier keys to select more than one item at a time. Additive-multi
|
|
106
|
+
* mode allows for multiple items to be selected and will not deselect
|
|
107
|
+
* other items when a vanilla click is made. Additive multi also allows
|
|
108
|
+
* for de-selection without a modifier key (think of `'multi-additive'`
|
|
109
|
+
* as turning every click into a ctrl-click.
|
|
110
|
+
*/
|
|
111
|
+
var smMode = attrs.selectionModelMode || defaultMode
|
|
112
|
+
, isMultiMode = /^multi(ple)?(-additive)?$/.test(smMode)
|
|
113
|
+
, isModeAdditive = /^multi(ple)?-additive/.test(smMode);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The item attribute to track selected status
|
|
117
|
+
*
|
|
118
|
+
* Use `selection-model-selected-attribute` to override the default
|
|
119
|
+
* attribute.
|
|
120
|
+
*/
|
|
121
|
+
var selectedAttribute = attrs.selectionModelSelectedAttribute || defaultSelectedAttribute;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The selected class name
|
|
125
|
+
*
|
|
126
|
+
* Will be applied to dom items (e.g. `tr` or `li`) representing
|
|
127
|
+
* selected items. Use `selection-model-selected-class` to override the
|
|
128
|
+
* default class name.
|
|
129
|
+
*/
|
|
130
|
+
var selectedClass = attrs.selectionModelSelectedClass || defaultSelectedClass;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* The cleanup strategy
|
|
134
|
+
*
|
|
135
|
+
* How to handle items that are removed from the current view. By
|
|
136
|
+
* default no action is taken, you may set this to `deselect` to force
|
|
137
|
+
* items to be deselected when they are filtered away, paged away, or
|
|
138
|
+
* otherwise no longer visible on the client.
|
|
139
|
+
*/
|
|
140
|
+
var cleanupStrategy = attrs.selectionModelCleanupStrategy || defaultCleanupStrategy;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The change callback
|
|
144
|
+
*
|
|
145
|
+
* To be executed whenever the item's selected state changes.
|
|
146
|
+
*/
|
|
147
|
+
var smOnChange = attrs.selectionModelOnChange;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The list of items
|
|
151
|
+
*
|
|
152
|
+
* selectionModel must be attached to the same element as an ngRepeat
|
|
153
|
+
*/
|
|
154
|
+
var repeatLine = attrs.ngRepeat;
|
|
155
|
+
if(!repeatLine) {
|
|
156
|
+
throw 'selectionModel must be used along side ngRepeat';
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* The list of selected items
|
|
161
|
+
*
|
|
162
|
+
* If used should resolve to an (initially empty) array. Use this in
|
|
163
|
+
* your view as **read only** if you'd like to do something with just
|
|
164
|
+
* the selected items. Note that order is not guarenteed and any items
|
|
165
|
+
* added to this array programmatically are ignored.
|
|
166
|
+
*/
|
|
167
|
+
var selectedItemsList = scope.$eval(attrs.selectionModelSelectedItems);
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The last-click stack id
|
|
171
|
+
*
|
|
172
|
+
* There may be multiple selection models on the page and each will need
|
|
173
|
+
* independent click stacks.
|
|
174
|
+
*/
|
|
175
|
+
var clickStackId = (function() {
|
|
176
|
+
if(!isMultiMode) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
var idAttr = 'data-selection-model-stack-id';
|
|
180
|
+
// Id may be cached on this element
|
|
181
|
+
var stackId = element.attr(idAttr);
|
|
182
|
+
if(stackId) {
|
|
183
|
+
return stackId;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Otherwise it may be on the partent
|
|
187
|
+
stackId = element.parent().attr(idAttr);
|
|
188
|
+
if(stackId) {
|
|
189
|
+
element.attr(idAttr, stackId);
|
|
190
|
+
return stackId;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// welp guess we're the first, create a new one and cache it on this
|
|
194
|
+
// element (for us) and the parent element (for others)
|
|
195
|
+
stackId = uuidGen.create();
|
|
196
|
+
element.attr(idAttr, stackId);
|
|
197
|
+
element.parent().attr(idAttr, stackId);
|
|
198
|
+
return stackId;
|
|
199
|
+
}());
|
|
200
|
+
|
|
201
|
+
var repeatParts = repeatLine.split(' in ')
|
|
202
|
+
, smItem = scope.$eval(repeatParts[0]);
|
|
203
|
+
|
|
204
|
+
var updateDom = function() {
|
|
205
|
+
if(smItem[selectedAttribute]) {
|
|
206
|
+
element.addClass(selectedClass);
|
|
207
|
+
} else {
|
|
208
|
+
element.removeClass(selectedClass);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if('checkbox' === smType) {
|
|
212
|
+
var cb = element.find('input');
|
|
213
|
+
cb.prop('checked', smItem[selectedAttribute]);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
var getAllVisibleItems = function() {
|
|
218
|
+
return scope.$eval(repeatParts[1]);
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Strips away filters - this lets us e.g. deselect items that are
|
|
222
|
+
// filtered out
|
|
223
|
+
var getAllItems = function() {
|
|
224
|
+
return scope.$eval(repeatParts[1].split(/[|=]/)[0]);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// Get us back to a "clean" state. Usually we'll want to skip
|
|
228
|
+
// deselection for items that are about to be selected again to avoid
|
|
229
|
+
// firing the `selection-mode-on-change` handler extra times.
|
|
230
|
+
//
|
|
231
|
+
// `except` param may be `undefined` (deselect all the things), a single
|
|
232
|
+
// item (don't deselect *that* item), or an array of two items (don't
|
|
233
|
+
// deselect anything between those items inclusively).
|
|
234
|
+
var deselectAllItemsExcept = function(except) {
|
|
235
|
+
var useSelectedArray = angular.isArray(selectedItemsList)
|
|
236
|
+
, isRange = angular.isArray(except) && 2 === except.length
|
|
237
|
+
, allItems = getAllItems()
|
|
238
|
+
, numItemsFound = 0
|
|
239
|
+
, doDeselect = false
|
|
240
|
+
, ixItem;
|
|
241
|
+
if(useSelectedArray) {
|
|
242
|
+
selectedItemsList.length = 0;
|
|
243
|
+
}
|
|
244
|
+
angular.forEach(allItems, function(item) {
|
|
245
|
+
if(isRange) {
|
|
246
|
+
ixItem = except.indexOf(item);
|
|
247
|
+
if(ixItem > -1) {
|
|
248
|
+
numItemsFound++;
|
|
249
|
+
doDeselect = false;
|
|
250
|
+
except.splice(ixItem, 1);
|
|
251
|
+
} else {
|
|
252
|
+
doDeselect = 1 !== numItemsFound;
|
|
253
|
+
}
|
|
254
|
+
} else {
|
|
255
|
+
doDeselect = item !== except;
|
|
256
|
+
}
|
|
257
|
+
if(doDeselect) {
|
|
258
|
+
item[selectedAttribute] = false;
|
|
259
|
+
} else {
|
|
260
|
+
if(useSelectedArray && item[selectedAttribute]) {
|
|
261
|
+
selectedItemsList.push(item);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
var selectItemsBetween = function(lastItem) {
|
|
268
|
+
var allItems = getAllVisibleItems()
|
|
269
|
+
, foundLastItem = false
|
|
270
|
+
, foundThisItem = false;
|
|
271
|
+
|
|
272
|
+
lastItem = lastItem || smItem;
|
|
273
|
+
|
|
274
|
+
angular.forEach(getAllVisibleItems(), function(item) {
|
|
275
|
+
foundThisItem = foundThisItem || item === smItem;
|
|
276
|
+
foundLastItem = foundLastItem || item === lastItem;
|
|
277
|
+
var inRange = (foundLastItem + foundThisItem) === 1;
|
|
278
|
+
if(inRange || item === smItem || item === lastItem) {
|
|
279
|
+
item[selectedAttribute] = true;
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Item click handler
|
|
286
|
+
*
|
|
287
|
+
* Use the `ctrl` key to select/deselect while preserving the rest of
|
|
288
|
+
* your selection. Note your your selection mode must be set to
|
|
289
|
+
* `'multiple'` to allow for more than one selected item at a time. In
|
|
290
|
+
* single select mode you still must use the `ctrl` or `shitft` keys to
|
|
291
|
+
* deselect an item.
|
|
292
|
+
*
|
|
293
|
+
* The `shift` key allows you to select ranges of items at a time. Use
|
|
294
|
+
* `ctrl` + `shift` to select a range while preserving your existing
|
|
295
|
+
* selection. In single select mode `shift` behaves like `ctrl`.
|
|
296
|
+
*
|
|
297
|
+
* When an item is clicked with no modifier keys pressed it will be the
|
|
298
|
+
* only selected item.
|
|
299
|
+
*
|
|
300
|
+
* On Mac the `meta` key is treated as `ctrl`.
|
|
301
|
+
*
|
|
302
|
+
* Note that when using the `'checkbox'` selection model type clicking
|
|
303
|
+
* on a checkbox will have no effect on any row other than the one the
|
|
304
|
+
* checkbox is in.
|
|
305
|
+
*/
|
|
306
|
+
var handleClick = function(event) {
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Set by the `selectionModelIgnore` directive
|
|
310
|
+
*
|
|
311
|
+
* Use `selectionModelIgnore` to cause `selectionModel` to selectively
|
|
312
|
+
* ignore clicks on elements. This is useful if you want to manually
|
|
313
|
+
* change a selection when certain things are clicked.
|
|
314
|
+
*/
|
|
315
|
+
if(event.selectionModelIgnore || (event.originalEvent && event.originalEvent.selectionModelIgnore)) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Never handle a single click twice.
|
|
320
|
+
if(event.selectionModelClickHandled || (event.originalEvent && event.originalEvent.selectionModelClickHandled)) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
event.selectionModelClickHandled = true;
|
|
324
|
+
if(event.originalEvent) {
|
|
325
|
+
event.originalEvent.selectionModelClickHandled = true;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
var isCtrlKeyDown = event.ctrlKey || event.metaKey || isModeAdditive
|
|
329
|
+
, isShiftKeyDown = event.shiftKey
|
|
330
|
+
, target = event.target || event.srcElement
|
|
331
|
+
, isCheckboxClick = 'checkbox' === smType &&
|
|
332
|
+
'INPUT' === target.tagName &&
|
|
333
|
+
'checkbox' === target.type;
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Guard against label + checkbox clicks
|
|
337
|
+
*
|
|
338
|
+
* Clicking a label will cause a click event to also be fired on the
|
|
339
|
+
* associated input element. If that input is nearby (i.e. under the
|
|
340
|
+
* selection model element) we'll suppress the click on the label to
|
|
341
|
+
* avoid duplicate click events.
|
|
342
|
+
*/
|
|
343
|
+
if('LABEL' === target.tagName) {
|
|
344
|
+
var labelFor = angular.element(target).attr('for');
|
|
345
|
+
if(labelFor) {
|
|
346
|
+
var childInputs = element[0].getElementsByTagName('INPUT'), ix;
|
|
347
|
+
for(ix = childInputs.length; ix--;) {
|
|
348
|
+
if(childInputs[ix].id === labelFor) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
} else if(target.getElementsByTagName('INPUT').length) {
|
|
353
|
+
// Label has a nested input element, we'll handle the click on
|
|
354
|
+
// that element
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Select multiple allows for ranges - use shift key
|
|
360
|
+
if(isShiftKeyDown && isMultiMode && !isCheckboxClick) {
|
|
361
|
+
// Use ctrl+shift for additive ranges
|
|
362
|
+
if(!isCtrlKeyDown) {
|
|
363
|
+
scope.$apply(function() {
|
|
364
|
+
deselectAllItemsExcept([smItem, selectionStack.peek(clickStackId)]);
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
selectItemsBetween(selectionStack.peek(clickStackId));
|
|
368
|
+
scope.$apply();
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Use ctrl/shift without multi select to true toggle a row
|
|
373
|
+
if(isCtrlKeyDown || isShiftKeyDown || isCheckboxClick) {
|
|
374
|
+
var isSelected = !smItem[selectedAttribute];
|
|
375
|
+
if(!isMultiMode) {
|
|
376
|
+
deselectAllItemsExcept(smItem);
|
|
377
|
+
}
|
|
378
|
+
smItem[selectedAttribute] = isSelected;
|
|
379
|
+
if(smItem[selectedAttribute]) {
|
|
380
|
+
selectionStack.push(clickStackId, smItem);
|
|
381
|
+
}
|
|
382
|
+
scope.$apply();
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Otherwise the clicked on row becomes the only selected item
|
|
387
|
+
deselectAllItemsExcept(smItem);
|
|
388
|
+
scope.$apply();
|
|
389
|
+
|
|
390
|
+
smItem[selectedAttribute] = true;
|
|
391
|
+
selectionStack.push(clickStackId, smItem);
|
|
392
|
+
scope.$apply();
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Routine to keep the list of selected items up to date
|
|
397
|
+
*
|
|
398
|
+
* Adds/removes this item from `selectionModelSelectedItems`.
|
|
399
|
+
*/
|
|
400
|
+
var updateSelectedItemsList = function() {
|
|
401
|
+
if(angular.isArray(selectedItemsList)) {
|
|
402
|
+
var ixSmItem = selectedItemsList.indexOf(smItem);
|
|
403
|
+
if(smItem[selectedAttribute]) {
|
|
404
|
+
if(-1 === ixSmItem) {
|
|
405
|
+
selectedItemsList.push(smItem);
|
|
406
|
+
}
|
|
407
|
+
} else {
|
|
408
|
+
if(-1 < ixSmItem) {
|
|
409
|
+
selectedItemsList.splice(ixSmItem, 1);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
element.on('click', handleClick);
|
|
416
|
+
if('checkbox' === smType) {
|
|
417
|
+
var elCb = element.find('input');
|
|
418
|
+
if(elCb[0] && 'checkbox' === elCb[0].type) {
|
|
419
|
+
element.find('input').on('click', handleClick);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// We might be coming in with a selection
|
|
424
|
+
updateDom();
|
|
425
|
+
updateSelectedItemsList();
|
|
426
|
+
|
|
427
|
+
// If we were given a cleanup strategy then setup a `'$destroy'`
|
|
428
|
+
// listener on the scope.
|
|
429
|
+
if('deselect' === cleanupStrategy) {
|
|
430
|
+
scope.$on('$destroy', function() {
|
|
431
|
+
var oldSelectedStatus = smItem[selectedAttribute];
|
|
432
|
+
smItem[selectedAttribute] = false;
|
|
433
|
+
updateSelectedItemsList();
|
|
434
|
+
if(smOnChange && oldSelectedStatus) {
|
|
435
|
+
scope.$eval(smOnChange);
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
scope.$watch(repeatParts[0] + '.' + selectedAttribute, function(newVal, oldVal) {
|
|
441
|
+
// Be mindful of programmatic changes to selected state
|
|
442
|
+
if(newVal !== oldVal) {
|
|
443
|
+
if(!isMultiMode && newVal && !oldVal) {
|
|
444
|
+
deselectAllItemsExcept(smItem);
|
|
445
|
+
smItem[selectedAttribute] = true;
|
|
446
|
+
}
|
|
447
|
+
updateDom();
|
|
448
|
+
updateSelectedItemsList();
|
|
449
|
+
|
|
450
|
+
if(smOnChange) {
|
|
451
|
+
scope.$eval(smOnChange);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
]);
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Default options for the selection model directive
|
|
463
|
+
*
|
|
464
|
+
*
|
|
465
|
+
*
|
|
466
|
+
* @package selectionModel
|
|
467
|
+
*/
|
|
468
|
+
|
|
469
|
+
angular.module('selectionModel').provider('selectionModelOptions', [function() {
|
|
470
|
+
'use strict';
|
|
471
|
+
|
|
472
|
+
var options = {
|
|
473
|
+
selectedAttribute: 'selected',
|
|
474
|
+
selectedClass: 'selected',
|
|
475
|
+
type: 'basic',
|
|
476
|
+
mode: 'single',
|
|
477
|
+
cleanupStrategy: 'none'
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
this.set = function(userOpts) {
|
|
481
|
+
angular.extend(options, userOpts);
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
this.$get = function() {
|
|
485
|
+
var exports = {
|
|
486
|
+
get: function() {
|
|
487
|
+
return angular.copy(options);
|
|
488
|
+
}
|
|
489
|
+
};
|
|
490
|
+
return exports;
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
}]);
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
angular.module('selectionModel').service('selectionStack', function() {
|
|
498
|
+
'use strict';
|
|
499
|
+
var exports = {}
|
|
500
|
+
, maxSize = 1000
|
|
501
|
+
, stacks = {};
|
|
502
|
+
|
|
503
|
+
exports.push = function(id, item) {
|
|
504
|
+
if(!stacks.hasOwnProperty(id)) {
|
|
505
|
+
stacks[id] = [];
|
|
506
|
+
}
|
|
507
|
+
var stack = stacks[id];
|
|
508
|
+
stack.push(item);
|
|
509
|
+
while(stack.length > maxSize) {
|
|
510
|
+
stack.shift();
|
|
511
|
+
}
|
|
512
|
+
return stack.length;
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
exports.pop = function(id) {
|
|
516
|
+
if(!stacks.hasOwnProperty(id)) {
|
|
517
|
+
stacks[id] = [];
|
|
518
|
+
}
|
|
519
|
+
var stack = stacks[id];
|
|
520
|
+
return stack.pop();
|
|
521
|
+
};
|
|
522
|
+
|
|
523
|
+
exports.peek = function(id) {
|
|
524
|
+
if(!stacks.hasOwnProperty(id)) {
|
|
525
|
+
stacks[id] = [];
|
|
526
|
+
}
|
|
527
|
+
var stack = stacks[id];
|
|
528
|
+
return stack.length ? stack[stack.length - 1] : undefined;
|
|
529
|
+
};
|
|
530
|
+
|
|
531
|
+
return exports;
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
/*jshint bitwise:false */
|
|
535
|
+
|
|
536
|
+
angular.module('selectionModel').service('uuidGen', function() {
|
|
537
|
+
'use strict';
|
|
538
|
+
var exports = {};
|
|
539
|
+
var uid = ['0', '0', '0'];
|
|
540
|
+
|
|
541
|
+
exports.create = function() {
|
|
542
|
+
var index = uid.length;
|
|
543
|
+
var digit;
|
|
544
|
+
while (index) {
|
|
545
|
+
index--;
|
|
546
|
+
digit = uid[index].charCodeAt(0);
|
|
547
|
+
if (digit === 57 /*'9'*/ ) {
|
|
548
|
+
uid[index] = 'A';
|
|
549
|
+
return uid.join('');
|
|
550
|
+
}
|
|
551
|
+
if (digit === 90 /*'Z'*/ ) {
|
|
552
|
+
uid[index] = '0';
|
|
553
|
+
} else {
|
|
554
|
+
uid[index] = String.fromCharCode(digit + 1);
|
|
555
|
+
return uid.join('');
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
uid.unshift('0');
|
|
559
|
+
return uid.join('');
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
return exports;
|
|
563
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
;(function (window) {
|
|
2
|
+
var angular = window.angular;
|
|
3
|
+
|
|
4
|
+
/** TEMPLATE /template/treasure-overlay-spinner/treasure-overlay-spinner.html
|
|
5
|
+
* <div class="treasure-overlay-spinner-content">
|
|
6
|
+
* <div class="treasure-overlay-spinner-container">
|
|
7
|
+
* <div class="treasure-overlay-spinner"></div>
|
|
8
|
+
* </div>
|
|
9
|
+
* <ng-transclude></ng-transclude>
|
|
10
|
+
* </div>
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// constants
|
|
14
|
+
var TEMPLATE_PATH = '/template/treasure-overlay-spinner/treasure-overlay-spinner.html';
|
|
15
|
+
var TEMPLATE = '';
|
|
16
|
+
TEMPLATE += '<div class="treasure-overlay-spinner-content">';
|
|
17
|
+
TEMPLATE += '<div class="treasure-overlay-spinner-container">';
|
|
18
|
+
TEMPLATE += '<div class="treasure-overlay-spinner"></div>';
|
|
19
|
+
TEMPLATE += '</div>';
|
|
20
|
+
TEMPLATE += '<ng-transclude></ng-transclude>';
|
|
21
|
+
TEMPLATE += '</div>';
|
|
22
|
+
|
|
23
|
+
// module
|
|
24
|
+
angular.module('treasure-overlay-spinner', ['ngAnimate']);
|
|
25
|
+
|
|
26
|
+
// directive
|
|
27
|
+
angular.module('treasure-overlay-spinner').directive('treasureOverlaySpinner', overlaySpinner);
|
|
28
|
+
overlaySpinner.$inject = ['$animate'];
|
|
29
|
+
function overlaySpinner ($animate) {
|
|
30
|
+
return {
|
|
31
|
+
templateUrl: TEMPLATE_PATH,
|
|
32
|
+
scope: {active: '='},
|
|
33
|
+
transclude: true,
|
|
34
|
+
restrict: 'E',
|
|
35
|
+
link: link
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
function link (scope, iElement) {
|
|
39
|
+
scope.$watch('active', statusWatcher);
|
|
40
|
+
function statusWatcher (active) {
|
|
41
|
+
$animate[active ? 'addClass' : 'removeClass'](iElement, 'treasure-overlay-spinner-active');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// template
|
|
47
|
+
angular.module('treasure-overlay-spinner').run(overlaySpinnerTemplate);
|
|
48
|
+
overlaySpinnerTemplate.$inject = ['$templateCache'];
|
|
49
|
+
function overlaySpinnerTemplate ($templateCache) {
|
|
50
|
+
$templateCache.put(TEMPLATE_PATH, TEMPLATE);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}.call(this, window));
|