UNPKG

toloframework

Version:

Javascript/HTML/CSS compiler for Firefox OS or nodewebkit apps using modules in the nodejs style.

60 lines (50 loc) 1.76 kB
"use strict"; var $ = require("dom"); var CODE_BEHIND = { onKeyUp: onKeyUp, onValueChanged: onValueChanged }; var MAX_AUTOCOMPLETION_SUGGESTIONS = 99; function onKeyUp( evt ) { if( evt.key === 'Enter' ) this.action = this.value; } function onValueChanged( v ) { var that = this; var list = this.list; if( !Array.isArray( list ) || list.length === 0 ) return; var elemCompletion = this.$elements.completion; $.clear( elemCompletion ); var textToSearch = v.trim().toLowerCase(); var elementsCount = 0; list.forEach(function (completionText) { var pos = completionText.toLowerCase().indexOf( textToSearch ); if( pos !== 0 ) return; elementsCount++; if( elementsCount > MAX_AUTOCOMPLETION_SUGGESTIONS ) return; addCompletionItem.call( that, elemCompletion, completionText, pos, textToSearch.length ); }); if( elementsCount < MAX_AUTOCOMPLETION_SUGGESTIONS ) { list.forEach(function (completionText) { var pos = completionText.toLowerCase().indexOf( textToSearch ); if( pos < 1 ) return; elementsCount++; if( elementsCount > MAX_AUTOCOMPLETION_SUGGESTIONS ) return; addCompletionItem.call( that, elemCompletion, completionText, pos, textToSearch.length ); }); } } function addCompletionItem( elemCompletion, completionText, begin, length ) { var that = this; var elem = $.div(); if( begin > 0 ) { $.add( elem, $.tag('span', [completionText.substr(0, begin)]) ); } $.add( elem, $.tag('b', [completionText.substr(begin, length)]) ); if( begin + length < completionText.length ) { $.add( elem, $.tag('span', [completionText.substr(begin + length)]) ); } $.on( elem, function(v) { that.value = completionText; }); $.add( elemCompletion, elem ); }