%PDF- %PDF-
Direktori : /home/lightco1/upgrade.lightco.com.au/libraries/cegcore/assets/gplugins/gcompleter/ |
Current File : /home/lightco1/upgrade.lightco.com.au/libraries/cegcore/assets/gplugins/gcompleter/gcompleter.js |
jQuery.gcompleter = { 'height' : '250px', 'placeholder' : '', 'label' : '', 'minimumInputLength' : 2, }; (function($){ $.fn.gcompleter = function(options, params){ if(this.length > 0){ if($.type(params) === 'undefined' && $.type(options) === 'object'){ params = options; } if($.type(options) === 'undefined' || $.type(options) === 'object'){ params = $.extend(true, {}, $.gcompleter, params); return this.each(function(){ if(!$(this).data('gcompleter')){ $(this).data('gcompleter', new Gcompleter(this, params)); } }); } if($.type(options) === 'string'){ params = $.extend(true, {}, $.gcompleter, params); var completer = $(this).data('gcompleter'); switch (options){ case 'get': return completer.get(); case 'show': return completer.show(); case 'hide': return completer.hide(); case 'toggle': return completer.toggle(); } } } } var Gcompleter = function(elem, params){ this.element = elem; this.settings = params; this.vals = []; this.options = []; this.term = ''; this.multi = false; this.div = null; this.display = null; this.arrow = null; this.dropdown = null; this.input = null; this.label = null; this.fields = null; this.init(); }; Gcompleter.prototype = { init: function(){ var completer = this; //set initial options if($(completer.element).prop('tagName') == 'SELECT'){ $(completer.element).children('option').each(function(opt){ completer.options.push({'value' : $(this).val(), 'text' : $(this).text()}); }); var value = $(completer.element).val(); var text = $(completer.element).find('option:selected').text(); }else if($(completer.element).data('options')){ completer.options = $(completer.element).data('options'); }else{ //empty, wait for results } //hide main element $(completer.element).hide(); //initalize the completer div completer.initDiv(); //initalize the completer dropdown completer.initDropdown(); $(completer.element).after(completer.div); $(completer.element).on('term.gcompleter', function(){ completer.updateLabel(); completer.checkDynamic(); completer.updateList(); }); //set value completer.setVal(value, text); //set placeholder completer.setPlaceholder(); }, checkDynamic: function(){ var completer = this; if(completer.settings.ajax){ if(completer.settings.minimumInputLength <= completer.term.length){ var ajax_object = { "type" : "GET", "data" : {}, "cache" : false, "async": false, "beforeSend" : function(res){ completer.label.addClass('gcompleter-ajax-loading'); }, "success" : function(res){ completer.options = []; $.each($.parseJSON(res), function(id, val){ completer.options.push(val); }); completer.label.removeClass('gcompleter-ajax-loading'); }, }; ajax_object = $.extend(true, {}, ajax_object, completer.settings.ajax); ajax_object.data[ajax_object.term] = completer.term; $.ajax($.extend(true, {}, ajax_object, completer.settings.ajax)); } } }, initDiv: function(){ var completer = this; //create the completer element var div = completer.createDiv(); completer.div = div; completer.display = div.children('.gcompleter-text').first(); completer.arrow = div.children('.gcompleter-arrow'); completer.fields = div.children('.gcompleter-fields').first(); /*completer.div.on('focusout', function(){ completer.dropdown.gdropdown('hide'); });*/ }, initDropdown: function(){ var completer = this; var dropdown = completer.createDropdown(); completer.dropdown = dropdown; completer.input = completer.dropdown.children('.gcompleter-input').first(); completer.label = completer.dropdown.children('.gcompleter-label').first(); completer.div.find('.gdropdown').remove(); completer.div.append(dropdown); completer.dropdown.gdropdown(); /*if(opened == true){ completer.dropdown.gdropdown('show'); }*/ completer.dropdown.on('show.gdropdown', function(){ completer.updateList(); }); completer.dropdown.on('shown.gdropdown', function(){ completer.input.focus(); }); if(completer.arrow){ completer.dropdown.on('show.gdropdown', function(){ completer.arrow.html('▴'); }); completer.dropdown.on('hide.gdropdown', function(){ completer.arrow.html('▾'); }); } completer.div.find('.gcompleter-text, .gcompleter-arrow').on('click', function(){ completer.dropdown.gdropdown('toggle'); }); }, updateList: function(){ var completer = this; var newList = completer.createList(); completer.dropdown.find('.gcompleter-list').remove(); completer.dropdown.append(newList); }, setVal: function(value, text){ var completer = this; if(value != null){ if(completer.multi == true){ completer.vals.push({'value' : value, 'text' : text}); }else{ completer.vals[0] = {'value' : value, 'text' : text}; } //set display completer.display.html(text); //add hidden fields completer.fields.empty(); completer.vals.each(function(v, k){ var field = $('<input type="hidden" name="'+ $(completer.element).prop('name') +'" value="'+ v.value +'" />'); completer.fields.append(field); }); } }, setPlaceholder: function(){ var completer = this; if(completer.settings.placeholder && completer.vals.length == 0){ completer.display.html(completer.settings.placeholder); } }, get: function(){ var completer = this; return completer; }, createDiv: function(){ var completer = this; var $div = $('<div class="gcompleter"></div>'); //var props = ['float', 'position', 'width', 'height', ]; $div.html('<div class="gcompleter-text">'+ completer.settings.placeholder +'</div><div class="gcompleter-arrow">▾</div><div class="gcompleter-fields"></div>'); var arrow_width = 18; var arrow_height = $(completer.element).outerHeight() - parseInt($(completer.element).css('border-top-width')) - parseInt($(completer.element).css('border-bottom-width')); $div.children('.gcompleter-arrow').css('width', arrow_width); $div.children('.gcompleter-arrow').css('min-width', arrow_width); $div.children('.gcompleter-arrow').css('height', arrow_height); var completer_width = $(completer.element).outerWidth(); var completer_height = $(completer.element).outerHeight(); $div.css('width', completer_width); $div.css('max-width', completer_width); $div.css('height', completer_height); $div.children('.gcompleter-text').css('padding-top', $(completer.element).css('padding-top')); $div.children('.gcompleter-text').css('padding-bottom', $(completer.element).css('padding-bottom')); $div.children('.gcompleter-text').css('padding-left', $(completer.element).css('padding-left')); $div.children('.gcompleter-text').css('padding-right', $(completer.element).css('padding-right')); var display_width = completer_width - 18 - parseInt($div.css('border-left-width')) - parseInt($div.css('border-right-width')); var display_height = $(completer.element).outerHeight() - parseInt($(completer.element).css('padding-top')) - parseInt($(completer.element).css('padding-bottom')) - parseInt($div.css('border-top-width')) - parseInt($div.css('border-bottom-width')); $div.children('.gcompleter-text').css('width', display_width); $div.children('.gcompleter-text').css('max-width', display_width); $div.children('.gcompleter-text').css('height', display_height); $div.children().css('line-height', $div.children('.gcompleter-text').height() + 'px'); return $div; }, createList: function(){ var completer = this; var $ul = $('<ul class="gcompleter-list"></ul>'); completer.options.each(function(opt, n){ if(completer.term != ''){ if(opt.text.toLowerCase().indexOf(completer.term) < 0){ return; } } var $li = $('<li><a href="#" data-value="'+opt.value+'" data-text="'+opt.text+'">'+ opt.text +'</a></li>'); completer.vals.each(function(v, k){ if(opt.value == v.value){ $li.addClass('active'); return false; } }); /*if($.inArray(opt.value, completer.vals) > -1){ $li.addClass('active'); }*/ $ul.append($li); }); $ul.find('li').children('a').on('click', function(e){ e.preventDefault(); var $a = $(this); //completer.display.html($a.data('text')); completer.dropdown.gdropdown('hide'); completer.setVal($a.data('value'), $a.data('text')); }); if(completer.settings.height){ $ul.css('max-height', completer.settings.height); } return $ul; }, createDropdown: function(){ var completer = this; var $dd = $('<div class="gdropdown"></div>'); $dd.css('border-radius', '0px'); $dd.css('min-width', completer.div.width() - parseInt(completer.div.css('border-left-width')) - parseInt(completer.div.css('border-right-width'))); $dd.css('width', 'auto'); $dd.append(completer.createInput()); $dd.append(completer.createLabel()); $dd.append(completer.createList()); return $dd; }, createInput: function(){ var completer = this; var $input = $('<input type="text" class="gcompleter-input" />'); //$input.css('padding', '0px'); $input.css('margin', '2% 4%'); $input.css('width', '92%'); $input.css('height', 'auto'); $input.on('keyup', function(){ completer.term = $input.val(); $(completer.element).trigger('term.gcompleter'); }); return $input; }, createLabel: function(){ var completer = this; var $label = $('<label class="gcompleter-label">'+ completer.settings.label +'</label>'); if(completer.settings.label){ if(completer.settings.minimumInputLength > completer.term.length){ $label.html(completer.settings.label.replace('%s', completer.settings.minimumInputLength - completer.term.length)); } }else{ $label.hide(); } $label.css('margin', '2% 4%'); $label.css('width', '92%'); $label.css('height', 'auto'); return $label; }, updateLabel: function(content){ var completer = this; if(completer.settings.label){ if(completer.settings.minimumInputLength > completer.term.length){ completer.label.show(); completer.label.html(completer.settings.label.replace('%s', completer.settings.minimumInputLength - completer.term.length)); return; } } if(content){ completer.label.show(); completer.label.html(content); return; } completer.label.html(''); completer.label.hide(); }, show: function(){ var completer = this; $(completer.element).show(); }, hide: function(){ var completer = this; $(completer.element).hide(); }, toggle: function(){ var completer = this; $(completer.element).toggle(); }, }; }(jQuery));