diff options
Diffstat (limited to 'data/js/lexer-input.js')
-rw-r--r-- | data/js/lexer-input.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/data/js/lexer-input.js b/data/js/lexer-input.js new file mode 100644 index 000000000..62b59650d --- /dev/null +++ b/data/js/lexer-input.js @@ -0,0 +1,51 @@ +(function () { +'use strict'; +define(['util', 'underscore', 'jquery-ui'], function (Util, _) { + var PrivateFunctions = { + switchLexer: function (lexer, baseUrl) { + var url = baseUrl + '/' + Util.fixedEncodeURIComponent(lexer); + window.location = url; + }, + lexerSelected: function (event, ui) { + event.preventDefault(); + var baseUrl = $(event.target).data('base-url'); + this.switchLexer(ui.item.value, baseUrl); + }, + setupAutocomplete: function (lexers) { + var lexerSource = []; + for (var key in lexers) { + lexerSource.push({ label: lexers[key], value: key }); + } + + $('.lexer-form input').autocomplete({ + source: lexerSource, + select: _.bind(PrivateFunctions.lexerSelected, PrivateFunctions) + }); + }, + setupEvents: function () { + $('.lexer-form').on('submit', _.bind(function (event) { + event.preventDefault(); + var input = $(event.target).find('input'); + var lexer = input.val(); + var baseUrl = input.data('base-url'); + this.switchLexer(lexer, baseUrl); + }, this)); + + $('.lexer-toggle').on('click', function(event) { + setTimeout(function() { + var dropDown = $(event.target).siblings('.dropdown-menu'); + dropDown.find('input').focus(); + }, 0); + }); + } + }; + var LexerInput = { + initialize: function (lexers) { + PrivateFunctions.setupAutocomplete(lexers); + PrivateFunctions.setupEvents(); + } + }; + + return LexerInput; +}); +})(); |