bootstrap3_autocomplete_input 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +32 -0
- data/app/inputs/autocomplete_input.rb +65 -0
- data/lib/assets/javascripts/bootstrap3-autocomplete-input.js +87 -0
- data/lib/assets/javascripts/bootstrap3-autocomplete-input.min.js +1 -0
- data/lib/assets/javascripts/bootstrap3-typeahead.js +476 -0
- data/lib/assets/javascripts/bootstrap3-typeahead.min.js +1 -0
- data/lib/bootstrap3_autocomplete_input.rb +24 -0
- data/lib/bootstrap3_autocomplete_input/controllers/autocomplete.rb +66 -0
- data/lib/bootstrap3_autocomplete_input/orm.rb +7 -0
- data/lib/bootstrap3_autocomplete_input/orm/active_record.rb +51 -0
- data/lib/bootstrap3_autocomplete_input/orm/mongo_mapper.rb +30 -0
- data/lib/bootstrap3_autocomplete_input/orm/mongoid.rb +44 -0
- data/lib/bootstrap3_autocomplete_input/rails/engine.rb +15 -0
- data/lib/bootstrap3_autocomplete_input/simple_form_inputs.rb +78 -0
- data/lib/bootstrap3_autocomplete_input/version.rb +3 -0
- data/lib/generators/autocomplete/install_generator.rb +0 -0
- data/lib/tasks/bootstrap3_autocomplete_input_tasks.rake +4 -0
- data/test/bootstrap3_autocomplete_input_test.rb +7 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +18 -0
- data/test/dummy/app/assets/stylesheets/application.css.scss +3 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/clients_controller.rb +58 -0
- data/test/dummy/app/controllers/orders_controller.rb +60 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/clients_helper.rb +2 -0
- data/test/dummy/app/helpers/orders_helper.rb +2 -0
- data/test/dummy/app/models/client.rb +3 -0
- data/test/dummy/app/models/order.rb +3 -0
- data/test/dummy/app/views/clients/_form.html.erb +18 -0
- data/test/dummy/app/views/clients/edit.html.erb +6 -0
- data/test/dummy/app/views/clients/index.html.erb +24 -0
- data/test/dummy/app/views/clients/new.html.erb +5 -0
- data/test/dummy/app/views/clients/show.html.erb +4 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/orders/_form.html.erb +50 -0
- data/test/dummy/app/views/orders/edit.html.erb +6 -0
- data/test/dummy/app/views/orders/index.html.erb +23 -0
- data/test/dummy/app/views/orders/new.html.erb +5 -0
- data/test/dummy/app/views/orders/show.html.erb +4 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +78 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/simple_form.rb +166 -0
- data/test/dummy/config/initializers/simple_form_bootstrap.rb +136 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/locales/simple_form.en.yml +31 -0
- data/test/dummy/config/routes.rb +62 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20141224031843_create_clients.rb +10 -0
- data/test/dummy/db/migrate/20141224031854_create_orders.rb +12 -0
- data/test/dummy/db/migrate/20141224032000_add_client_to_order.rb +6 -0
- data/test/dummy/db/schema.rb +30 -0
- data/test/dummy/lib/templates/erb/scaffold/_form.html.erb +13 -0
- data/test/dummy/log/development.log +163 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/assets/application-c75a9a9deda9531070f576f4b4f75c82.js +5 -0
- data/test/dummy/public/assets/application-c75a9a9deda9531070f576f4b4f75c82.js.gz +0 -0
- data/test/dummy/public/assets/application-f44356f250333028ca1fd1097ad49074.css +8146 -0
- data/test/dummy/public/assets/application-f44356f250333028ca1fd1097ad49074.css.gz +0 -0
- data/test/dummy/public/assets/bootstrap/glyphicons-halflings-regular-195cb410b49d75c104a5bc6ad385ac77.woff +0 -0
- data/test/dummy/public/assets/bootstrap/glyphicons-halflings-regular-38831bbd01504eaf996d291c5e157661.ttf +0 -0
- data/test/dummy/public/assets/bootstrap/glyphicons-halflings-regular-69ff52480052cf785cc3f4472e1d56d9.eot +0 -0
- data/test/dummy/public/assets/bootstrap/glyphicons-halflings-regular-8acb5264b8eab48469867b225a7f3eb5.svg +229 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-cf2b341a1531cbc2fc6ef5ad4701a2f2.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_flat_75_ffffff_40x100-5858cfe74efe6264f22d7173d47d59ff.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_glass_55_fbf9ee_1x400-ea25ba87e2239186bff03593a01ee8b9.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_glass_65_ffffff_1x400-c338312c804e21990fd135b4cfd47e34.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_glass_75_dadada_1x400-f341292284f79753f6c7437a4a56706e.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_glass_75_e6e6e6_1x400-d78f160584dc06a42b7309e5d6a6f181.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-e9751011cbae1cab664dca499087cf35.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-648c6d3e57afdb3827bcf9da30572df6.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-icons_222222_256x240-af300280aedd6d5650563b1c4ddb4170.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-icons_2e83ff_256x240-6e705c14341602e315c8320420582407.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-icons_454545_256x240-79df93e060c7f26739b6bdab208a83bb.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-icons_888888_256x240-a37e590d37d1a4614f1e05f9a3fa270c.png +0 -0
- data/test/dummy/public/assets/jquery-ui/ui-icons_cd0a0a_256x240-d350ff5c368b707165371738d74a45f3.png +0 -0
- data/test/dummy/public/assets/manifest-2c14fa9337f42e56d7ee7bc25e91853c.json +1 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/controllers/clients_controller_test.rb +49 -0
- data/test/dummy/test/controllers/orders_controller_test.rb +49 -0
- data/test/dummy/test/fixtures/clients.yml +11 -0
- data/test/dummy/test/fixtures/orders.yml +11 -0
- data/test/dummy/test/helpers/clients_helper_test.rb +4 -0
- data/test/dummy/test/helpers/orders_helper_test.rb +4 -0
- data/test/dummy/test/models/client_test.rb +7 -0
- data/test/dummy/test/models/order_test.rb +7 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/00c0d190ddd8c2872a4734aa8f23fac8f3f4f27c/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/826344a9bdbb4ce67201515fbc2643c96b5692c8/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/a39e0369930579ee8c9c371998d66bc75345b4be/application.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/cec4c201800e8a79a141df13cd1029773a871cb4/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/cec4c201800e8a79a141df13cd1029773a871cb4/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/05304e2722415bbc5142bded0d637d5b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/067de15f6eed2b96ff2fef4779e1495f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/097f3cf94fac7a339daf65b4fbbbf469 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/09e7eed3751645884590e16723e8c7b4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0bf93caacb628748207c7b18f44e2ce5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13bbf50c11c4a0032c43cfedab28589c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/14ff7948a4a406b91a86768262212334 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/158c207e246f777fd1b202837deb4d2a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/15bf67bdb925b7dd96d635ec0088a5e1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1e9dbac6bb0ab62a1258e8e450ffc43a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/278146df7d7c18920d86a4ae7852fd8b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/28105053ec5c84ff23ba9a772770ae92 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2acf447a8c29da6e4d89163a70ef0ae8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/32f6f752901c13c529a37eb337113f1f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/346e797e518b143a4d66645c95d73528 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/38929ac56b95af9ff0142cfe13972e8f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3afb0d89e1e96802e9878dbf7b9ba3a8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3b5b4cd2a1abf7f59590adc0be9c2e4b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3e25f4c5c007ec48c5febf3a06a6c301 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4127f13a5b8ce6faf84acfa698bcfbaf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/423defc0a61e0f9d7158ad173b4440d0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4708cc029aeffd33fd6d871326a69195 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4a5472adf761a1d2f647e7900b5ef968 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4bdbccbeace1fffd0d66c45b11c1cd39 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4f494d96ea9500f27cd13f8f0023387b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/50dea07ea281a8cbea66d410c600a2ff +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5629567743085156cc027749c19c1ffb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/56bc640a0f9583792c60571e60eddae5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5d8aa60f935c97dcad777bcd7b918e91 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/61049b8df6c1b633546ac4d6b352977e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/69770d4ab285a55d14293db680d92d76 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/720375e2e5e9dbdd1d2596eb6f4ffea2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7403249712f49d78cd3a754390ee69d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7a356d0e966dd72c226bcf7135d06241 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7c653abf8262bcbff815599a9d6eb6bc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8940a3fa55913c130433eaf2b1147b8a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8ab512c9b33ac90e699b73469d71f061 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8eda70465594d269ff72217d71e139f7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/92f86cdf28d08db9f59aa10f2eb19a6e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b033013c82fee3eadfd068f18eb5fde +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a42a698569fb032e296fd80b809d31e1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a4d0dcd6736789a4e61a05c0b0d4f6d8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b2e65f0fccfa235b5d60262df3e10aae +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b48b23ce9dee63a2449cc13d923a587e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bafa439ba35a0831ed26638af2634282 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bb06a5a9c23f9fedeb77029977958bed +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bcca522c6302f184f12fe0e8a7d7e71a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c13fc73ceafa45876a901b3e775b83ae +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c1539958d8d5f93bfaad4f3cc9d21047 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c99fb99f69104b46f747c743409df324 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d2c64b08d25425455b7d9d66e142fa0b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d5a46b2a46d7423c5287fc57e24aba11 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d5e8ebed7a8e96a30f28d4b06fa5a6c4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d6f08cc14c885cf7a55e95ed54172a89 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dab5e3951e6d81b6edca28eb6c66964c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/db8ec0c14f31d98a8ceb8365ade470e6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ee91e123536718a81d5d676d83f421c4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f2ad9aef860b7792f7542318c4731fe0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f62fbf566f3d7493edb2d257079b377a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f8f634cf3fb2563597257d30d0cc25fc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fc1c8dd76249106a788624558da20062 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fff835239214e2c684bd8ff954854862 +0 -0
- data/test/test_helper.rb +16 -0
- metadata +558 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f9ff47d919377d27c92add43fea84e923e9d4aae
|
4
|
+
data.tar.gz: b1f33ef2c07de48cf3a423863c7ef00e5559db8f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bd34548871bec34c6d3e73e5a1ff819b1a61f59032574a098cb2caef206aa16692b2084f0d3c52bdc48eb12231f3e835e3b958c2b9e7c057a9a277065e99f9af
|
7
|
+
data.tar.gz: b45f6b531d1abd6b589e5f04e03f0bc9cc27656c71d42dbb35165c87cbdd902a04221cbf3de8f12026458a0b4355550a4567a75a7209182149716348a68b6cce
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 Max Ivak
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Bootstrap3AutocompleteInput'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
22
|
+
require 'rake/testtask'
|
23
|
+
|
24
|
+
Rake::TestTask.new(:test) do |t|
|
25
|
+
t.libs << 'lib'
|
26
|
+
t.libs << 'test'
|
27
|
+
t.pattern = 'test/**/*_test.rb'
|
28
|
+
t.verbose = false
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
task default: :test
|
@@ -0,0 +1,65 @@
|
|
1
|
+
class AutocompleteInput < SimpleForm::Inputs::TextInput
|
2
|
+
#enable :placeholder, :maxlength
|
3
|
+
|
4
|
+
def input(wrapper_options = nil)
|
5
|
+
out = ActiveSupport::SafeBuffer.new
|
6
|
+
|
7
|
+
# prepare options
|
8
|
+
new_html_options = merge_wrapper_options(prepare_html_options, wrapper_options)
|
9
|
+
|
10
|
+
|
11
|
+
# hidden field
|
12
|
+
if add_field_id?
|
13
|
+
hidden_name = "#{attribute_name}_id"
|
14
|
+
hidden_id = "#{object_name}_#{attribute_name}_id"
|
15
|
+
new_html_options["data-field-id"] ||= hidden_id
|
16
|
+
|
17
|
+
hidden_options = {}
|
18
|
+
hidden_options[:id] = hidden_id
|
19
|
+
|
20
|
+
# value
|
21
|
+
value_method = hidden_options[:id]
|
22
|
+
if object.respond_to?(value_method)
|
23
|
+
hidden_options[:value] = object.send(value_method)
|
24
|
+
end
|
25
|
+
|
26
|
+
out << @builder.hidden_field(hidden_name, hidden_options)
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
out << @builder.text_field(attribute_name, new_html_options)
|
31
|
+
out
|
32
|
+
end
|
33
|
+
|
34
|
+
def prepare_html_options
|
35
|
+
new_options = {}
|
36
|
+
|
37
|
+
new_options[:class] = [input_html_options[:class], options[:class]].compact
|
38
|
+
|
39
|
+
#
|
40
|
+
new_options["data-provide"] ||= "typeahead"
|
41
|
+
new_options["autocomplete"] ||= "off"
|
42
|
+
|
43
|
+
# source
|
44
|
+
if options[:source]
|
45
|
+
new_options["data-source"] = options[:source]
|
46
|
+
elsif options[:source_query]
|
47
|
+
new_options["data-source-query"] = options[:source_query]
|
48
|
+
elsif options[:source_array]
|
49
|
+
#new_options["data-source-array"] = options[:source_array].inspect.to_s # problem with quotes "
|
50
|
+
new_options["data-source-array"] = '['+options[:source_array].map{|r| ""#{r}""}.join(',')+']'
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
# data options
|
55
|
+
new_options["data-items"] = options[:items] || 8
|
56
|
+
new_options["data-min-length"] = options[:minLength] || 1
|
57
|
+
|
58
|
+
input_html_options.merge new_options
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_field_id?
|
62
|
+
!options[:source_array] && (options[:field_id].nil? || options[:field_id])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
var autocomplete_data_static = {};
|
2
|
+
|
3
|
+
$(document).ready(function() {
|
4
|
+
|
5
|
+
// local array
|
6
|
+
$( 'input[data-provide="typeahead"][data-source-array]' ).each(function() {
|
7
|
+
obj = $(this);
|
8
|
+
var arr = JSON.parse(obj.attr('data-source-array').replace(/"/g, '"'));
|
9
|
+
|
10
|
+
obj.typeahead({
|
11
|
+
source: arr
|
12
|
+
, items: obj.attr('data-items')
|
13
|
+
, minLength: obj.attr('data-min-length')
|
14
|
+
});//typeahead
|
15
|
+
});
|
16
|
+
|
17
|
+
|
18
|
+
// static data from server
|
19
|
+
$( 'input[data-provide="typeahead"][data-source]' ).each(function() {
|
20
|
+
obj = $(this);
|
21
|
+
var name = obj.attr('id');
|
22
|
+
autocomplete_data_static[name] = {"map":[], "values": []};
|
23
|
+
|
24
|
+
$.get(obj.attr('data-source'), function(data){
|
25
|
+
$.each(data, function (i, row) {
|
26
|
+
autocomplete_data_static[name]["values"].push(row[1]);
|
27
|
+
autocomplete_data_static[name]["map"][row[1]]=row[0];
|
28
|
+
});
|
29
|
+
|
30
|
+
obj.typeahead({
|
31
|
+
source: autocomplete_data_static[name]["values"]
|
32
|
+
, updater: function (item) {
|
33
|
+
// save the id value the hidden field
|
34
|
+
obj_id = $('#'+obj.attr("data-field-id"));
|
35
|
+
if (obj_id)
|
36
|
+
obj_id.val(autocomplete_data_static[name]["map"][item]);
|
37
|
+
|
38
|
+
return item;
|
39
|
+
}
|
40
|
+
, items: obj.attr('data-items')
|
41
|
+
, minLength: obj.attr('data-min-length')
|
42
|
+
});//typeahead
|
43
|
+
},
|
44
|
+
'json'
|
45
|
+
);//get
|
46
|
+
});
|
47
|
+
|
48
|
+
|
49
|
+
// query data from server
|
50
|
+
$('input[data-provide="typeahead"][data-source-query]').each(function() {
|
51
|
+
obj = $(this);
|
52
|
+
|
53
|
+
obj.typeahead({
|
54
|
+
source: function (q, process) {
|
55
|
+
obj = this.$element;
|
56
|
+
rows = [];
|
57
|
+
|
58
|
+
var name = obj.attr('name');
|
59
|
+
autocomplete_data_static[name] = {"map":[], "values": []};
|
60
|
+
|
61
|
+
// load data from remote server
|
62
|
+
$.getJSON( obj.attr('data-source-query'), {q: q},
|
63
|
+
function( data ) {
|
64
|
+
$.each(data, function (i, row) {
|
65
|
+
autocomplete_data_static[name]["values"].push(row[1]);
|
66
|
+
autocomplete_data_static[name]["map"][row[1]]=row[0];
|
67
|
+
});
|
68
|
+
process(autocomplete_data_static[name]["values"]);
|
69
|
+
}
|
70
|
+
);// get json
|
71
|
+
}//source
|
72
|
+
, updater: function (item) {
|
73
|
+
obj = this.$element;
|
74
|
+
var name = obj.attr('name');
|
75
|
+
// save the id value the hidden field
|
76
|
+
obj_id = $('#'+obj.attr("data-field-id"));
|
77
|
+
if (obj_id)
|
78
|
+
obj_id.val(autocomplete_data_static[name]["map"][item]);
|
79
|
+
|
80
|
+
return item;
|
81
|
+
}
|
82
|
+
, items: obj.attr('data-items')
|
83
|
+
, minLength: obj.attr('data-min-length')
|
84
|
+
});// typeahead
|
85
|
+
});// each
|
86
|
+
|
87
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
var autocomplete_data_static={};$(document).ready(function(){$('input[data-provide="typeahead"][data-source-array]').each(function(){obj=$(this);var e=JSON.parse(obj.attr("data-source-array").replace(/"/g,'"'));obj.typeahead({source:e,items:obj.attr("data-items"),minLength:obj.attr("data-min-length")})});$('input[data-provide="typeahead"][data-source]').each(function(){obj=$(this);var e=obj.attr("id");autocomplete_data_static[e]={map:[],values:[]};$.get(obj.attr("data-source"),function(t){$.each(t,function(t,n){autocomplete_data_static[e]["values"].push(n[1]);autocomplete_data_static[e]["map"][n[1]]=n[0]});obj.typeahead({source:autocomplete_data_static[e]["values"],updater:function(t){obj_id=$("#"+obj.attr("data-field-id"));if(obj_id)obj_id.val(autocomplete_data_static[e]["map"][t]);return t},items:obj.attr("data-items"),minLength:obj.attr("data-min-length")})},"json")});$('input[data-provide="typeahead"][data-source-query]').each(function(){obj=$(this);obj.typeahead({source:function(e,t){obj=this.$element;rows=[];var n=obj.attr("name");autocomplete_data_static[n]={map:[],values:[]};$.getJSON(obj.attr("data-source-query"),{q:e},function(e){$.each(e,function(e,t){autocomplete_data_static[n]["values"].push(t[1]);autocomplete_data_static[n]["map"][t[1]]=t[0]});t(autocomplete_data_static[n]["values"])})},updater:function(e){obj=this.$element;var t=obj.attr("name");obj_id=$("#"+obj.attr("data-field-id"));if(obj_id)obj_id.val(autocomplete_data_static[t]["map"][e]);return e},items:obj.attr("data-items"),minLength:obj.attr("data-min-length")})})})
|
@@ -0,0 +1,476 @@
|
|
1
|
+
/* =============================================================
|
2
|
+
* bootstrap3-typeahead.js v3.1.0
|
3
|
+
* https://github.com/bassjobsen/Bootstrap-3-Typeahead
|
4
|
+
* =============================================================
|
5
|
+
* Original written by @mdo and @fat
|
6
|
+
* =============================================================
|
7
|
+
* Copyright 2014 Bass Jobsen @bassjobsen
|
8
|
+
*
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the 'License');
|
10
|
+
* you may not use this file except in compliance with the License.
|
11
|
+
* You may obtain a copy of the License at
|
12
|
+
*
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
14
|
+
*
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
16
|
+
* distributed under the License is distributed on an 'AS IS' BASIS,
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
18
|
+
* See the License for the specific language governing permissions and
|
19
|
+
* limitations under the License.
|
20
|
+
* ============================================================ */
|
21
|
+
|
22
|
+
|
23
|
+
(function (root, factory) {
|
24
|
+
|
25
|
+
'use strict';
|
26
|
+
|
27
|
+
// CommonJS module is defined
|
28
|
+
if (typeof module !== 'undefined' && module.exports) {
|
29
|
+
module.exports = factory(require('jquery'));
|
30
|
+
}
|
31
|
+
// AMD module is defined
|
32
|
+
else if (typeof define === 'function' && define.amd) {
|
33
|
+
define(['jquery'], function ($) {
|
34
|
+
return factory ($);
|
35
|
+
});
|
36
|
+
} else {
|
37
|
+
factory(root.jQuery);
|
38
|
+
}
|
39
|
+
|
40
|
+
}(this, function ($) {
|
41
|
+
|
42
|
+
'use strict';
|
43
|
+
// jshint laxcomma: true
|
44
|
+
|
45
|
+
|
46
|
+
/* TYPEAHEAD PUBLIC CLASS DEFINITION
|
47
|
+
* ================================= */
|
48
|
+
|
49
|
+
var Typeahead = function (element, options) {
|
50
|
+
this.$element = $(element);
|
51
|
+
this.options = $.extend({}, $.fn.typeahead.defaults, options);
|
52
|
+
this.matcher = this.options.matcher || this.matcher;
|
53
|
+
this.sorter = this.options.sorter || this.sorter;
|
54
|
+
this.select = this.options.select || this.select;
|
55
|
+
this.autoSelect = typeof this.options.autoSelect == 'boolean' ? this.options.autoSelect : true;
|
56
|
+
this.highlighter = this.options.highlighter || this.highlighter;
|
57
|
+
this.render = this.options.render || this.render;
|
58
|
+
this.updater = this.options.updater || this.updater;
|
59
|
+
this.displayText = this.options.displayText || this.displayText;
|
60
|
+
this.source = this.options.source;
|
61
|
+
this.delay = this.options.delay;
|
62
|
+
this.$menu = $(this.options.menu);
|
63
|
+
this.$appendTo = this.options.appendTo ? $(this.options.appendTo) : null;
|
64
|
+
this.shown = false;
|
65
|
+
this.listen();
|
66
|
+
this.showHintOnFocus = typeof this.options.showHintOnFocus == 'boolean' ? this.options.showHintOnFocus : false;
|
67
|
+
this.afterSelect = this.options.afterSelect;
|
68
|
+
this.addItem = false;
|
69
|
+
};
|
70
|
+
|
71
|
+
Typeahead.prototype = {
|
72
|
+
|
73
|
+
constructor: Typeahead,
|
74
|
+
|
75
|
+
select: function () {
|
76
|
+
var val = this.$menu.find('.active').data('value');
|
77
|
+
this.$element.data('active', val);
|
78
|
+
if(this.autoSelect || val) {
|
79
|
+
var newVal = this.updater(val);
|
80
|
+
this.$element
|
81
|
+
.val(this.displayText(newVal) || newVal)
|
82
|
+
.change();
|
83
|
+
this.afterSelect(newVal);
|
84
|
+
}
|
85
|
+
return this.hide();
|
86
|
+
},
|
87
|
+
|
88
|
+
updater: function (item) {
|
89
|
+
return item;
|
90
|
+
},
|
91
|
+
|
92
|
+
setSource: function (source) {
|
93
|
+
this.source = source;
|
94
|
+
},
|
95
|
+
|
96
|
+
show: function () {
|
97
|
+
var pos = $.extend({}, this.$element.position(), {
|
98
|
+
height: this.$element[0].offsetHeight
|
99
|
+
}), scrollHeight;
|
100
|
+
|
101
|
+
scrollHeight = typeof this.options.scrollHeight == 'function' ?
|
102
|
+
this.options.scrollHeight.call() :
|
103
|
+
this.options.scrollHeight;
|
104
|
+
|
105
|
+
(this.$appendTo ? this.$menu.appendTo(this.$appendTo) : this.$menu.insertAfter(this.$element))
|
106
|
+
.css({
|
107
|
+
top: pos.top + pos.height + scrollHeight
|
108
|
+
, left: pos.left
|
109
|
+
})
|
110
|
+
.show();
|
111
|
+
|
112
|
+
this.shown = true;
|
113
|
+
return this;
|
114
|
+
},
|
115
|
+
|
116
|
+
hide: function () {
|
117
|
+
this.$menu.hide();
|
118
|
+
this.shown = false;
|
119
|
+
return this;
|
120
|
+
},
|
121
|
+
|
122
|
+
lookup: function (query) {
|
123
|
+
var items;
|
124
|
+
if (typeof(query) != 'undefined' && query !== null) {
|
125
|
+
this.query = query;
|
126
|
+
} else {
|
127
|
+
this.query = this.$element.val() || '';
|
128
|
+
}
|
129
|
+
|
130
|
+
if (this.query.length < this.options.minLength) {
|
131
|
+
return this.shown ? this.hide() : this;
|
132
|
+
}
|
133
|
+
|
134
|
+
var worker = $.proxy(function() {
|
135
|
+
|
136
|
+
if($.isFunction(this.source)) this.source(this.query, $.proxy(this.process, this));
|
137
|
+
else if (this.source) {
|
138
|
+
this.process(this.source);
|
139
|
+
}
|
140
|
+
}, this);
|
141
|
+
|
142
|
+
clearTimeout(this.lookupWorker);
|
143
|
+
this.lookupWorker = setTimeout(worker, this.delay);
|
144
|
+
},
|
145
|
+
|
146
|
+
process: function (items) {
|
147
|
+
var that = this;
|
148
|
+
|
149
|
+
items = $.grep(items, function (item) {
|
150
|
+
return that.matcher(item);
|
151
|
+
});
|
152
|
+
|
153
|
+
items = this.sorter(items);
|
154
|
+
|
155
|
+
if (!items.length && !this.options.addItem) {
|
156
|
+
return this.shown ? this.hide() : this;
|
157
|
+
}
|
158
|
+
|
159
|
+
if (items.length > 0) {
|
160
|
+
this.$element.data('active', items[0]);
|
161
|
+
} else {
|
162
|
+
this.$element.data('active', null);
|
163
|
+
}
|
164
|
+
|
165
|
+
// Add item
|
166
|
+
if (this.options.addItem){
|
167
|
+
items.push(this.options.addItem);
|
168
|
+
}
|
169
|
+
|
170
|
+
if (this.options.items == 'all') {
|
171
|
+
return this.render(items).show();
|
172
|
+
} else {
|
173
|
+
return this.render(items.slice(0, this.options.items)).show();
|
174
|
+
}
|
175
|
+
},
|
176
|
+
|
177
|
+
matcher: function (item) {
|
178
|
+
var it = this.displayText(item);
|
179
|
+
return ~it.toLowerCase().indexOf(this.query.toLowerCase());
|
180
|
+
},
|
181
|
+
|
182
|
+
sorter: function (items) {
|
183
|
+
var beginswith = []
|
184
|
+
, caseSensitive = []
|
185
|
+
, caseInsensitive = []
|
186
|
+
, item;
|
187
|
+
|
188
|
+
while ((item = items.shift())) {
|
189
|
+
var it = this.displayText(item);
|
190
|
+
if (!it.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item);
|
191
|
+
else if (~it.indexOf(this.query)) caseSensitive.push(item);
|
192
|
+
else caseInsensitive.push(item);
|
193
|
+
}
|
194
|
+
|
195
|
+
return beginswith.concat(caseSensitive, caseInsensitive);
|
196
|
+
},
|
197
|
+
|
198
|
+
highlighter: function (item) {
|
199
|
+
var html = $('<div></div>');
|
200
|
+
var query = this.query;
|
201
|
+
var i = item.toLowerCase().indexOf(query.toLowerCase());
|
202
|
+
var len, leftPart, middlePart, rightPart, strong;
|
203
|
+
len = query.length;
|
204
|
+
if(len === 0){
|
205
|
+
return html.text(item).html();
|
206
|
+
}
|
207
|
+
while (i > -1) {
|
208
|
+
leftPart = item.substr(0, i);
|
209
|
+
middlePart = item.substr(i, len);
|
210
|
+
rightPart = item.substr(i + len);
|
211
|
+
strong = $('<strong></strong>').text(middlePart);
|
212
|
+
html
|
213
|
+
.append(document.createTextNode(leftPart))
|
214
|
+
.append(strong);
|
215
|
+
item = rightPart;
|
216
|
+
i = item.toLowerCase().indexOf(query.toLowerCase());
|
217
|
+
}
|
218
|
+
return html.append(document.createTextNode(item)).html();
|
219
|
+
},
|
220
|
+
|
221
|
+
render: function (items) {
|
222
|
+
var that = this;
|
223
|
+
var self = this;
|
224
|
+
var activeFound = false;
|
225
|
+
items = $(items).map(function (i, item) {
|
226
|
+
var text = self.displayText(item);
|
227
|
+
i = $(that.options.item).data('value', item);
|
228
|
+
i.find('a').html(that.highlighter(text));
|
229
|
+
if (text == self.$element.val()) {
|
230
|
+
i.addClass('active');
|
231
|
+
self.$element.data('active', item);
|
232
|
+
activeFound = true;
|
233
|
+
}
|
234
|
+
return i[0];
|
235
|
+
});
|
236
|
+
|
237
|
+
if (this.autoSelect && !activeFound) {
|
238
|
+
items.first().addClass('active');
|
239
|
+
this.$element.data('active', items.first().data('value'));
|
240
|
+
}
|
241
|
+
this.$menu.html(items);
|
242
|
+
return this;
|
243
|
+
},
|
244
|
+
|
245
|
+
displayText: function(item) {
|
246
|
+
return item.name || item;
|
247
|
+
},
|
248
|
+
|
249
|
+
next: function (event) {
|
250
|
+
var active = this.$menu.find('.active').removeClass('active')
|
251
|
+
, next = active.next();
|
252
|
+
|
253
|
+
if (!next.length) {
|
254
|
+
next = $(this.$menu.find('li')[0]);
|
255
|
+
}
|
256
|
+
|
257
|
+
next.addClass('active');
|
258
|
+
},
|
259
|
+
|
260
|
+
prev: function (event) {
|
261
|
+
var active = this.$menu.find('.active').removeClass('active')
|
262
|
+
, prev = active.prev();
|
263
|
+
|
264
|
+
if (!prev.length) {
|
265
|
+
prev = this.$menu.find('li').last();
|
266
|
+
}
|
267
|
+
|
268
|
+
prev.addClass('active');
|
269
|
+
},
|
270
|
+
|
271
|
+
listen: function () {
|
272
|
+
this.$element
|
273
|
+
.on('focus', $.proxy(this.focus, this))
|
274
|
+
.on('blur', $.proxy(this.blur, this))
|
275
|
+
.on('keypress', $.proxy(this.keypress, this))
|
276
|
+
.on('keyup', $.proxy(this.keyup, this));
|
277
|
+
|
278
|
+
if (this.eventSupported('keydown')) {
|
279
|
+
this.$element.on('keydown', $.proxy(this.keydown, this));
|
280
|
+
}
|
281
|
+
|
282
|
+
this.$menu
|
283
|
+
.on('click', $.proxy(this.click, this))
|
284
|
+
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
|
285
|
+
.on('mouseleave', 'li', $.proxy(this.mouseleave, this));
|
286
|
+
},
|
287
|
+
|
288
|
+
destroy : function () {
|
289
|
+
this.$element.data('typeahead',null);
|
290
|
+
this.$element.data('active',null);
|
291
|
+
this.$element
|
292
|
+
.off('focus')
|
293
|
+
.off('blur')
|
294
|
+
.off('keypress')
|
295
|
+
.off('keyup');
|
296
|
+
|
297
|
+
if (this.eventSupported('keydown')) {
|
298
|
+
this.$element.off('keydown');
|
299
|
+
}
|
300
|
+
|
301
|
+
this.$menu.remove();
|
302
|
+
},
|
303
|
+
|
304
|
+
eventSupported: function(eventName) {
|
305
|
+
var isSupported = eventName in this.$element;
|
306
|
+
if (!isSupported) {
|
307
|
+
this.$element.setAttribute(eventName, 'return;');
|
308
|
+
isSupported = typeof this.$element[eventName] === 'function';
|
309
|
+
}
|
310
|
+
return isSupported;
|
311
|
+
},
|
312
|
+
|
313
|
+
move: function (e) {
|
314
|
+
if (!this.shown) return;
|
315
|
+
|
316
|
+
switch(e.keyCode) {
|
317
|
+
case 9: // tab
|
318
|
+
case 13: // enter
|
319
|
+
case 27: // escape
|
320
|
+
e.preventDefault();
|
321
|
+
break;
|
322
|
+
|
323
|
+
case 38: // up arrow
|
324
|
+
// with the shiftKey (this is actually the left parenthesis)
|
325
|
+
if (e.shiftKey) return;
|
326
|
+
e.preventDefault();
|
327
|
+
this.prev();
|
328
|
+
break;
|
329
|
+
|
330
|
+
case 40: // down arrow
|
331
|
+
// with the shiftKey (this is actually the right parenthesis)
|
332
|
+
if (e.shiftKey) return;
|
333
|
+
e.preventDefault();
|
334
|
+
this.next();
|
335
|
+
break;
|
336
|
+
}
|
337
|
+
|
338
|
+
e.stopPropagation();
|
339
|
+
},
|
340
|
+
|
341
|
+
keydown: function (e) {
|
342
|
+
this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]);
|
343
|
+
if (!this.shown && e.keyCode == 40) {
|
344
|
+
this.lookup();
|
345
|
+
} else {
|
346
|
+
this.move(e);
|
347
|
+
}
|
348
|
+
},
|
349
|
+
|
350
|
+
keypress: function (e) {
|
351
|
+
if (this.suppressKeyPressRepeat) return;
|
352
|
+
this.move(e);
|
353
|
+
},
|
354
|
+
|
355
|
+
keyup: function (e) {
|
356
|
+
switch(e.keyCode) {
|
357
|
+
case 40: // down arrow
|
358
|
+
case 38: // up arrow
|
359
|
+
case 16: // shift
|
360
|
+
case 17: // ctrl
|
361
|
+
case 18: // alt
|
362
|
+
break;
|
363
|
+
|
364
|
+
case 9: // tab
|
365
|
+
case 13: // enter
|
366
|
+
if (!this.shown) return;
|
367
|
+
this.select();
|
368
|
+
break;
|
369
|
+
|
370
|
+
case 27: // escape
|
371
|
+
if (!this.shown) return;
|
372
|
+
this.hide();
|
373
|
+
break;
|
374
|
+
default:
|
375
|
+
this.lookup();
|
376
|
+
}
|
377
|
+
|
378
|
+
e.stopPropagation();
|
379
|
+
e.preventDefault();
|
380
|
+
},
|
381
|
+
|
382
|
+
focus: function (e) {
|
383
|
+
if (!this.focused) {
|
384
|
+
this.focused = true;
|
385
|
+
if (this.options.showHintOnFocus) {
|
386
|
+
this.lookup('');
|
387
|
+
}
|
388
|
+
}
|
389
|
+
},
|
390
|
+
|
391
|
+
blur: function (e) {
|
392
|
+
this.focused = false;
|
393
|
+
if (!this.mousedover && this.shown) this.hide();
|
394
|
+
},
|
395
|
+
|
396
|
+
click: function (e) {
|
397
|
+
e.stopPropagation();
|
398
|
+
e.preventDefault();
|
399
|
+
this.select();
|
400
|
+
this.$element.focus();
|
401
|
+
},
|
402
|
+
|
403
|
+
mouseenter: function (e) {
|
404
|
+
this.mousedover = true;
|
405
|
+
this.$menu.find('.active').removeClass('active');
|
406
|
+
$(e.currentTarget).addClass('active');
|
407
|
+
},
|
408
|
+
|
409
|
+
mouseleave: function (e) {
|
410
|
+
this.mousedover = false;
|
411
|
+
if (!this.focused && this.shown) this.hide();
|
412
|
+
}
|
413
|
+
|
414
|
+
};
|
415
|
+
|
416
|
+
|
417
|
+
/* TYPEAHEAD PLUGIN DEFINITION
|
418
|
+
* =========================== */
|
419
|
+
|
420
|
+
var old = $.fn.typeahead;
|
421
|
+
|
422
|
+
$.fn.typeahead = function (option) {
|
423
|
+
var arg = arguments;
|
424
|
+
if (typeof option == 'string' && option == 'getActive') {
|
425
|
+
return this.data('active');
|
426
|
+
}
|
427
|
+
return this.each(function () {
|
428
|
+
var $this = $(this)
|
429
|
+
, data = $this.data('typeahead')
|
430
|
+
, options = typeof option == 'object' && option;
|
431
|
+
if (!data) $this.data('typeahead', (data = new Typeahead(this, options)));
|
432
|
+
if (typeof option == 'string') {
|
433
|
+
if (arg.length > 1) {
|
434
|
+
data[option].apply(data, Array.prototype.slice.call(arg ,1));
|
435
|
+
} else {
|
436
|
+
data[option]();
|
437
|
+
}
|
438
|
+
}
|
439
|
+
});
|
440
|
+
};
|
441
|
+
|
442
|
+
$.fn.typeahead.defaults = {
|
443
|
+
source: []
|
444
|
+
, items: 8
|
445
|
+
, menu: '<ul class="typeahead dropdown-menu" role="listbox"></ul>'
|
446
|
+
, item: '<li><a href="#" role="option"></a></li>'
|
447
|
+
, minLength: 1
|
448
|
+
, scrollHeight: 0
|
449
|
+
, autoSelect: true
|
450
|
+
, afterSelect: $.noop
|
451
|
+
, addItem: false
|
452
|
+
, delay: 0
|
453
|
+
};
|
454
|
+
|
455
|
+
$.fn.typeahead.Constructor = Typeahead;
|
456
|
+
|
457
|
+
|
458
|
+
/* TYPEAHEAD NO CONFLICT
|
459
|
+
* =================== */
|
460
|
+
|
461
|
+
$.fn.typeahead.noConflict = function () {
|
462
|
+
$.fn.typeahead = old;
|
463
|
+
return this;
|
464
|
+
};
|
465
|
+
|
466
|
+
|
467
|
+
/* TYPEAHEAD DATA-API
|
468
|
+
* ================== */
|
469
|
+
|
470
|
+
$(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
|
471
|
+
var $this = $(this);
|
472
|
+
if ($this.data('typeahead')) return;
|
473
|
+
$this.typeahead($this.data());
|
474
|
+
});
|
475
|
+
|
476
|
+
}));
|