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