Author: croberts Date: 2011-08-16 15:31:16 +0000 (Tue, 16 Aug 2011) New Revision: 4932
Modified: trunk/cumin/python/cumin/grid/tags.py trunk/cumin/python/cumin/grid/tags.strings trunk/cumin/python/cumin/widgets.py trunk/cumin/python/cumin/widgets.strings Log: Making the hybrid select tool code more portable and moving it to the cumin/widget class so it could be reused.
Modified: trunk/cumin/python/cumin/grid/tags.py =================================================================== --- trunk/cumin/python/cumin/grid/tags.py 2011-08-15 20:32:42 UTC (rev 4931) +++ trunk/cumin/python/cumin/grid/tags.py 2011-08-16 15:31:16 UTC (rev 4932) @@ -329,23 +329,15 @@ def render_title(self, session): return("Tag name(s): ")
- class TagsList(CheckboxItemSetField): + class TagsList(PageableFilteredSelect): ''' - This class, note the rendering handled in tags.strings::filtered_select_html, - takes care of displaying the tags for the given node in a filterable select box + This class takes care of displaying the tags for the given node in a filterable select box that is pageable. ''' def __init__(self, app, name): - item_parameter = SymbolParameter(app, "tag") - super(RemoveTags.TagsList, self).__init__(app, name, item_parameter) - self._tmpl = WidgetTemplate(self, "filtered_select_html") + super(RemoveTags.TagsList, self).__init__(app, name)
- def do_render(self, session): - writer = Writer() - self._tmpl.render(writer, session) - return writer.to_string() - - def render_tags(self, session): + def render_items(self, session): items = self.do_get_items(session) tags_string = ""
@@ -504,25 +496,15 @@ def render_form_class(self, session): return " ".join((super(EditNodeTagsForm, self).render_form_class(session), "mform"))
- class TagsList(CheckboxItemSetField): + class TagsList(PageableFilteredSelect): ''' This class takes care of displaying the tags for the given node in a filterable select box - that is pageable. Note the rendering handled in tags.strings::filtered_select_html + that is pageable. ''' def __init__(self, app, name): - item_parameter = SymbolParameter(app, "tag") - super(EditNodeTagsForm.TagsList, self).__init__(app, name, item_parameter) - #self._tmpl = WidgetTemplate(self, "double_filtered_select_html") - self._tmpl = WidgetTemplate(self, "filtered_select_html") - - self.update_enabled = False - - def do_render(self, session): - writer = Writer() - self._tmpl.render(writer, session) - return writer.to_string() + super(EditNodeTagsForm.TagsList, self).__init__(app, name)
- def render_tags(self, session): + def render_items(self, session): items = self.do_get_items(session) tags_string = ""
@@ -537,18 +519,6 @@
return tags_string
- def render_starting_tags(self, session): - tags_from_session= self.form.tags.get(session) - tags_string = "" - items = [] - if tags_from_session != "": - items = [x.strip() for x in tags_from_session.split(',')] - - for i, tag in enumerate(items): - tags_string = tags_string + "<option id='init" + str(i) + "'>" + tag + "</option>\n" - - return tags_string - def do_get_items(self, session): tags = fetchTags(self, session)
@@ -644,18 +614,11 @@ def render_form_class(self, session): return " ".join((super(EditTagNodesForm, self).render_form_class(session), "mform"))
- class NodesList(CheckboxItemSetField): + class NodesList(PageableFilteredSelect): def __init__(self, app, name): - item_parameter = SymbolParameter(app, "tag") - super(EditTagNodesForm.NodesList, self).__init__(app, name, item_parameter) - self._tmpl = WidgetTemplate(self, "filtered_select_html") + super(EditTagNodesForm.NodesList, self).__init__(app, name)
- def do_render(self, session): - writer = Writer() - self._tmpl.render(writer, session) - return writer.to_string() - - def render_nodes(self, session): + def render_items(self, session): items = self.do_get_items(session) nodes_string = ""
Modified: trunk/cumin/python/cumin/grid/tags.strings =================================================================== --- trunk/cumin/python/cumin/grid/tags.strings 2011-08-15 20:32:42 UTC (rev 4931) +++ trunk/cumin/python/cumin/grid/tags.strings 2011-08-16 15:31:16 UTC (rev 4932) @@ -83,144 +83,4 @@
//]]> -</script> - - -[NodesList.filtered_select_html] - <script type="text/javascript"> -//<![CDATA[ -window.addEvent('domready', function (){ - $$('.multiselect').each(function(multiselect){ - new MTMultiWidget({'datasrc': multiselect, - 'widgetcls':'mtmultiselect', - 'selectedcls':'selected', - 'paginator_on_bottom':'true', - 'items_per_page':15, - 'case_sensitive':false, - 'setview':'total'}); - }); -}); - -//]]> - </script> - <tr> - <th><div class="title">{title}</div></th> - <td> - <div style='width:250px;height:375px;'> - <select class='multiselect' name="{id}.inputs.param" multiple="multiple" id="{id}.inputs.param" size="10" style="width:400px"> - {nodes} - </select> - </div> - </td> - </tr> - - -[TagsList.filtered_select_html] - <script type="text/javascript"> -//<![CDATA[ -window.addEvent('domready', function (){ - $$('.multiselect').each(function(multiselect){ - new MTMultiWidget({'datasrc': multiselect, - 'widgetcls':'mtmultiselect', - 'selectedcls':'selected', - 'paginator_on_bottom':'true', - 'items_per_page':15, - 'case_sensitive':false, - 'setview':'total'}); - }); -}); - -//]]> - </script> - <tr> - <th><div class="title">{title}</div></th> - <td> - <div style='width:250px;height:375px;'> - <select class='multiselect' name="{id}.inputs.param" multiple="multiple" id="{id}.inputs.param" size="10" style="width:400px"> - {tags} - </select> - </div> - </td> - </tr> - - - -[TagsList.double_filtered_select_html] - <script type="text/javascript"> -//<![CDATA[ - MyUtil = new Object(); - MyUtil.selectFilterData = new Object(); - MyUtil.selectFilter = function(selectId, filter) { - var list = document.getElementById(selectId); - if(!MyUtil.selectFilterData[selectId]) { //if we don't have a list of all the options, cache them now' - MyUtil.selectFilterData[selectId] = new Object(); - for(var i = 0; i < list.options.length; i++) MyUtil.selectFilterData[selectId][list.options[i].id] = list.options[i]; - } - - //go through all the options in the current list and set the selection status to the cached options - for(var i = 0; i < list.options.length; i++) MyUtil.selectFilterData[selectId][list.options[i].id] = list.options[i]; - - list.options.length = 0; //remove all elements from the list - for(var id in MyUtil.selectFilterData[selectId]) { //add elements from cache if they match filter - var o = MyUtil.selectFilterData[selectId][id]; - if(o.text.toLowerCase().indexOf(filter.toLowerCase()) >= 0) list.add(o, null); - } - } - - window.addEvent('domready', function() { - $('add').addEvent('click', function() { - $('{id}2.inputs.param').getSelected().each(function(el) { - el.inject($('{id}.inputs.param')); - }); - }); - $('remove').addEvent('click', function() { - $('{id}.inputs.param').getSelected().each(function(el) { - el.inject($('{id}2.inputs.param')); - }); - }); - }); - - // when the form is submitted, we want to grab everything in the "selected tags" box whether it is highlighted or not - $$('form').each(function(form) { - form.addEvent('submit',function(event){ - sbox = $('{id}.inputs.param'); - for(var i = 0; i < sbox.length; i++) { - sbox.options[i].selected = true; - } - }); - }); -//]]> - </script> - - <tr> - <th><div class="title">Filter available tags</div></th> - <td> - <input id='{id}.filter' type="text" onkeyup="MyUtil.selectFilter('{id}2.inputs.param', $('{id}.filter').value);"/> - </td> - </tr> - <tr> - <th><div class="title">Tags</div></th> - <td> - <div style="width:500px;"> - <div class='lfloat'> - <div><label for='{id}2.inputs.param' class='title'>Available Tags</label></div> - <div> - <select name="{id}2.inputs.param" multiple="multiple" id="{id}2.inputs.param" size="10" style="width:200px"> - {tags} - </select> - </div> - <div><input type="button" id="add" onclick="javascript:return false;" value="Add to selected tags"/></div> - </div> - <div class='rfloat'> - <div><label for='{id}.inputs.param' class='title'>Selected Tags</label></div> - <div> - <select name="{id}.inputs.param" multiple="multiple" id="{id}.inputs.param" size="10" style="width:200px"> - {starting_tags} - </select> - </div> - <div><input type="button" id="remove" onclick="javascript:return false;" value="Remove"/></div> - </div> - </div> - </td> - </tr> - +</script> \ No newline at end of file
Modified: trunk/cumin/python/cumin/widgets.py =================================================================== --- trunk/cumin/python/cumin/widgets.py 2011-08-15 20:32:42 UTC (rev 4931) +++ trunk/cumin/python/cumin/widgets.py 2011-08-16 15:31:16 UTC (rev 4932) @@ -1573,4 +1573,44 @@ res = self.version_string if self.version_local: res += ", devel instance" - return res + return res + +class PageableFilteredSelect(CheckboxItemSetField): + def __init__(self, app, name): + item_parameter = SymbolParameter(app, "iparam") + super(PageableFilteredSelect, self).__init__(app, name, item_parameter) + + def render_items(self, session): + items = self.do_get_items(session) + items_string = "" + + for i, item in enumerate(items): + items_string = items_string + "<option id='" + str(i) + "' name='" + item + "' value='" + item + "'" + ">" + item + "</option>" + + return items_string + + def render_datasrc(self, session): + return "multiselect" + + def render_class(self, session): + return "mtmultiselect" + + def render_selected_class(self, session): + return "selected" + + def render_items_per_page(self, session): + return 15 + + def render_title(self, session): + return "Make your selections" + + def render_width(self, session): + return "400px" + + def render_container_width(self, session): + return "250px" + + def render_container_height(self, session): + return "375px" + + \ No newline at end of file
Modified: trunk/cumin/python/cumin/widgets.strings =================================================================== --- trunk/cumin/python/cumin/widgets.strings 2011-08-15 20:32:42 UTC (rev 4931) +++ trunk/cumin/python/cumin/widgets.strings 2011-08-16 15:31:16 UTC (rev 4932) @@ -920,3 +920,31 @@ {version} </div>
+[PageableFilteredSelect.html] +<script type="text/javascript"> +//<![CDATA[ +window.addEvent('domready', function (){ + $$('.multiselect').each(function(multiselect){ + new MTMultiWidget({'datasrc': {datasrc}, + 'widgetcls':'{class}', + 'selectedcls':'{selected_class}', + 'paginator_on_bottom':'true', + 'items_per_page':{items_per_page}, + 'case_sensitive':false, + 'setview':'total'}); + }); +}); + +//]]> + </script> + <tr> + <th><div class="title">{title}</div></th> + <td> + <div style='width:{container_width};height:{container_height};'> + <select class='{datasrc}' name="{id}.inputs.param" multiple="multiple" id="{id}.inputs.param" size="10" style="width:{width};"> + {items} + </select> + </div> + </td> + </tr> +
cumin-developers@lists.fedorahosted.org