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 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)