def __call__(self, field, value, **attributes): from gluon.sqlhtml import StringWidget default = dict( _type='text', value=(not value is None and str(value)) or '', ) attr = StringWidget._attributes(field, default, **attributes) div_id = self.keyword + '_div' attr['_autocomplete'] = 'off' attr['_class'] = 'select2-chosen' select_script = """ $('#{0:s}').select2({{ placeholder: "Search for vulnerability...", minimumlength: {1:d}, ajax: {{ url: "{2:s}", dataType: 'json', data: function(term, page) {{ return {{ {3:s}: term }} }}, results: function (data) {{ return {{ results: $.map(data, function (item) {{ console.log(item); return {{ text: item.{4:s}, id: item.id }} }}) }}; }} }}, initSelection: '', dropdownCssClass: "bigdrop", }}); """.format(attr['_id'], self.min_length, self.url, self.keyword, self.fields[0].name) if self.is_reference: key2 = self.keyword + '_aux' attr['_class'] = 'string span8' # XXX: ugly hardcoding of span8! if 'requires' in attr: del attr['requires'] attr['_name'] = key2 value = attr['value'] record = self.db( self.fields[1] == value).select(self.fields[0]).first() attr['value'] = record and record[self.fields[0].name] return TAG[''](SPAN(**attr), SCRIPT(select_script)) else: attr['_name'] = field.name return TAG[''](SPAN(**attr), SCRIPT(select_script))
def __call__(self, field, value, **attributes): from gluon.sqlhtml import StringWidget default = dict( _type='text', value=(not value is None and str(value)) or '', ) attr = StringWidget._attributes(field, default, **attributes) div_id = self.keyword + '_div' attr['_autocomplete'] = 'off' attr['_class'] = 'select2-chosen' select_script = """ $('#{0:s}').select2({{ placeholder: "Search for vulnerability...", minimumlength: {1:d}, ajax: {{ url: "{2:s}", dataType: 'json', data: function(term, page) {{ return {{ {3:s}: term }} }}, results: function (data) {{ return {{ results: $.map(data, function (item) {{ console.log(item); return {{ text: item.{4:s}, id: item.id }} }}) }}; }} }}, initSelection: '', dropdownCssClass: "bigdrop", }}); """.format(attr['_id'], self.min_length, self.url, self.keyword, self.fields[0].name) if self.is_reference: key2 = self.keyword + '_aux' attr['_class'] = 'string span8' # XXX: ugly hardcoding of span8! if 'requires' in attr: del attr['requires'] attr['_name'] = key2 value = attr['value'] record = self.db(self.fields[1] == value).select( self.fields[0]).first() attr['value'] = record and record[self.fields[0].name] return TAG[''](SPAN(**attr), SCRIPT(select_script)) else: attr['_name'] = field.name return TAG[''](SPAN(**attr), SCRIPT(select_script))
def widget(self, field, value): TagsInputWidget.widget_files() wgt_default = StringWidget.widget( field, value, **{"_data-role": "tagsinput", "_placeholder": current.T("Add Tag")} ) wgt_id = wgt_default.attributes.get("_id", "no_id") wgt_value = wgt_default.attributes.get("_value", "") js = """ jQuery(document).ready(function(){ var tagnames = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: { url: '%(url_tags_json)s', filter: function(list) { return $.map(list, function(tagname) { return { name: tagname }; }); } } }); tagnames.clearPrefetchCache(); tagnames.initialize(true); $('#%(wgt_id)s').tagsinput({ typeaheadjs: { name: 'tagnames', displayKey: 'name', valueKey: 'name', source: tagnames.ttAdapter() } }); $('form').submit(function() { var value = $('#%(wgt_id)s').val(); $('#%(wgt_id)s').val(value); return true; }); }); """ % { "wgt_id": wgt_id, "url_tags_json": self.url, } jq_script = SCRIPT(js, _type="text/javascript") wrapper = DIV(_class="TagsInputWidget") wrapper.components.extend([wgt_default, jq_script]) return wrapper
def __call__(self, field, value, **attributes): default = dict( _type = 'text', value = (value!=None and str(value)) or '', ) attr = StringWidget._attributes(field, default, **attributes) div_id = self.keyword+'_div' attr['_autocomplete']='off' if self.is_reference: key2 = self.keyword+'_aux' key3 = self.keyword+'_auto' attr['_class']='string' name = attr['_name'] if 'requires' in attr: del attr['requires'] attr['_name'] = key2 value = attr['value'] record = self.db(self.fields[1]==value).select(self.fields[0]).first() attr['value'] = record and record[self.fields[0].name] attr['_onkeyup'] = "jQuery('#%(key3)s').val('');var e=event.which?event.which:event.keyCode; function %(u)s(){jQuery('#%(id)s').val(jQuery('#%(key)s :selected').text());jQuery('#%(key3)s').val(jQuery('#%(key)s').val())}; if(e==39) %(u)s(); else if(e==40) {if(jQuery('#%(key)s option:selected').next().length)jQuery('#%(key)s option:selected').attr('selected',null).next().attr('selected','selected'); %(u)s();} else if(e==38) {if(jQuery('#%(key)s option:selected').prev().length)jQuery('#%(key)s option:selected').attr('selected',null).prev().attr('selected','selected'); %(u)s();} else if(jQuery('#%(id)s').val().length>=%(min_length)s) jQuery.get('%(url)s?%(key)s='+escape(jQuery('#%(id)s').val()),function(data){if(data=='')jQuery('#%(key3)s').val('');else{jQuery('#%(id)s').next('.error').hide();jQuery('#%(div_id)s').html(data).show().focus();jQuery(document).bind('focusin.%(div_id)s click.%(div_id)s',function(e){if(jQuery(e.target).is('#%(key)s option') || (!jQuery(e.target).closest('##%(id)s,#%(div_id)s').length)){jQuery(document).unbind('.%(div_id)s'); jQuery('#%(div_id)s').fadeOut(%(dur)s)}}); jQuery('#%(div_id)s select').css('width',jQuery('#%(id)s').css('width'));jQuery('#%(key3)s').val(jQuery('#%(key)s').val());jQuery('#%(key)s').change(%(u)s);jQuery('#%(key)s').click(%(u)s);};}); else jQuery('#%(div_id)s').fadeOut('slow');" % \ dict(url=self.url,min_length=self.min_length, key=self.keyword,id=attr['_id'],key2=key2,key3=key3, name=name,div_id=div_id,u='F'+self.keyword, dur=self.fadeout_duration) if self.min_length==0: attr['_onfocus'] = attr['_onkeyup'] return TAG[''](INPUT(**attr),INPUT(_type='hidden',_id=key3,_value=value, _name=name,requires=field.requires), DIV(_id=div_id,_style='position:absolute; z-index: 99')) else: attr['_name']=field.name filter_str = '' if self.filter_keyword and self.filter_input_id: filter_str = "+'&%(filter_key)s='+escape(jQuery('#%(filter_id)s').val())" % \ dict(url=self.url,min_length=self.min_length, key=self.keyword,id=attr['_id'],div_id=div_id,u='F'+self.keyword, filter_key=self.filter_keyword, filter_id=self.filter_input_id, ) attr['_onkeyup'] = "var e=event.which?event.which:event.keyCode; function %(u)s(){jQuery('#%(id)s').val(jQuery('#%(key)s').val())}; if(e==39) %(u)s(); else if(e==40) {if(jQuery('#%(key)s option:selected').next().length)jQuery('#%(key)s option:selected').attr('selected',null).next().attr('selected','selected'); %(u)s();} else if(e==38) {if(jQuery('#%(key)s option:selected').prev().length)jQuery('#%(key)s option:selected').attr('selected',null).prev().attr('selected','selected'); %(u)s();} else if(jQuery('#%(id)s').val().length>=%(min_length)s) jQuery.get('%(url)s?%(key)s='+escape(jQuery('#%(id)s').val())%(filter_str)s,function(data){jQuery('#%(id)s').next('.error').hide();jQuery('#%(div_id)s').html(data).show().focus(); jQuery(document).bind('focusin.%(div_id)s click.%(div_id)s',function(e){if(jQuery(e.target).is('#%(key)s option') || (!jQuery(e.target).closest('##%(id)s,#%(div_id)s').length)){jQuery(document).unbind('.%(div_id)s'); jQuery('#%(div_id)s').fadeOut(%(dur)s)}}); jQuery('#%(div_id)s select').css('width',jQuery('#%(id)s').css('width'));jQuery('#%(key)s').change(%(u)s);jQuery('#%(key)s').click(%(u)s);}); else jQuery('#%(div_id)s').fadeOut('slow');" % \ dict(url=self.url,min_length=self.min_length, key=self.keyword,id=attr['_id'],div_id=div_id,u='F'+self.keyword, filter_str=filter_str, dur=self.fadeout_duration) if self.min_length==0: attr['_onfocus'] = attr['_onkeyup'] return TAG[''](INPUT(**attr),DIV(_id=div_id, _style='position:absolute; z-index: 99'))
def widget(self, field, value, **attributes): MaskWidget.widget_files() attributes["_class"] = "span4 string" attributes["_placeholder"] = self.mask wgt_default = StringWidget.widget(field, value, **attributes) wgt_id = wgt_default.attributes.get("_id", "no_id") js = """ jQuery(document).ready(function(){ jQuery('#%(field_name)s').each( function(){ jQuery(this).mask('%(mask)s'); }); }); """ % dict( field_name=wgt_id, mask=self.mask ) jq_script = SCRIPT(js, _type="text/javascript") wrapper = DIV(_class="onx-widget MaskWidget") wrapper.components.extend([wgt_default, jq_script]) return wrapper
def widget(self, field, value, **attr): attr["_type"] = "email" return StringWidget.widget(field, value, **attr)