diff --git a/themis/fields/orderedselectandadd_input.pt b/themis/fields/orderedselectandadd_input.pt index af0381e..e61c11f 100644 --- a/themis/fields/orderedselectandadd_input.pt +++ b/themis/fields/orderedselectandadd_input.pt @@ -151,6 +151,21 @@ function newElem(name) function selectionError() {alert("Must select something!")} +function formwidgetadd_autocomplete_ready(event, data, formatted) { + (function($) { + var input_box = $(event.target); + + name = input_box.attr('id'); + name = name.substr(0, name.lastIndexOf('-')); + var tgt = document.getElementById(name+'-to'); + + temp = new Option(data[1], data[0]); + tgt.options[tgt.length] = temp; + temp.selected = true; + copyDataForSubmit(name); + }(jQuery)); +} + /* ]]> */ @@ -267,9 +282,7 @@ function selectionError() - diff --git a/themis/fields/vocabs.py b/themis/fields/vocabs.py index fdc696f..0527521 100644 --- a/themis/fields/vocabs.py +++ b/themis/fields/vocabs.py @@ -139,7 +139,7 @@ class ContactsVocabulary(SimpleVocabulary): def search(self, qs): q = qs.lower() - t = [self.getTermByToken(kw) for kw in self.contact_ids if q in kw.lower()] + t = [self.by_value.get('contact:'+kw) for kw in self.contact_ids if q in kw.lower()] return t diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py index 0292cbc..a60f5ae 100644 --- a/themis/fields/widgets.py +++ b/themis/fields/widgets.py @@ -131,8 +131,11 @@ def RadioChoiceFieldWidget(field, request): class OrderedSelectAndAddWidget(OrderedSelectWidget): implementsOnly(IOrderedSelectAndAddWidget) - formatItem = 'function(row, idx, count, value) { return row[1]; }' - formatResult = 'function(row, idx, count) { return ""; }' + formatItem = '''function(row, idx, count, value) { console.log(row, idx, + count, value); return row[1]; }''' + formatResult = '''function(row, idx, count) { console.log("t2", row, idx, + count); return ""; }''' + js_template = """\ (function($) { @@ -160,12 +163,7 @@ class OrderedSelectAndAddWidget(OrderedSelectWidget): def js(self): # Use a template if it exists, in case anything overrode this interface - js_callback = 'formwidget_autocomplete_ready' - if hasattr(self,'js_callback_template'): - js_callback = self.js_callback_template % dict(id=self.id, - name=self.name, klass=self.klass, title=self.title, - termCount=len(self.terms)) - + js_callback = 'formwidgetadd_autocomplete_ready' return self.js_template % dict(id=self.id, url=self.autocomplete_url(), formatItem=self.formatItem, formatResult=self.formatResult, klass=self.klass, title=self.title, @@ -189,6 +187,22 @@ class OrderedSelectAndAddWidget(OrderedSelectWidget): self._bound_source = source return self._bound_source + def deselect(self): + selecteditems = [] + notselecteditems = [] + for selecteditem in self.selectedItems: + selecteditems.append(selecteditem['content']) + for item in self.items: + if not item['content'] in selecteditems: + if item['value'].startswith('contact:'): + # skip simple contacts, to avoid the list growing too large + # ideally we would have something like "favourite" contacts + # populated automatically on usage frequence... + continue + notselecteditems.append(item) + return notselecteditems + + @adapter(IRelatedDoc, IFormLayer) @implementer(IFieldWidget)