Removing a saved search removes the item in the left pane.

Search dialog:
 - should work now.
 - Any/All control
 - All 8 operators
Add search button uses an icon
This commit is contained in:
David Norton 2006-08-10 22:39:21 +00:00
parent 9c496770a6
commit d815154efa
7 changed files with 65 additions and 39 deletions

View file

@ -34,9 +34,18 @@
conditionsBox.removeChild(conditionsBox.firstChild);
var conditions = this.search.getSearchConditions();
if(conditions.length)
for(var i = 0, len = conditions.length; i<len; i++)
this.addCondition(i);
for(var id in conditions)
{
if(conditions[id]['condition'] == 'joinMode')
{
this.id('joinModeMenu').setAttribute('condition',id);
this.id('joinModeMenu').value = conditions[id]['operator'];
}
else
{
this.addCondition(conditions[id]);
}
}
]]>
</setter>
@ -44,12 +53,12 @@
<method name="onAddClicked">
<body>
<![CDATA[
this.addCondition(this.search.addCondition("itemType","is","1"));
this.addCondition(this.search.getSearchCondition(this.search.addCondition("title","contains","")));
]]>
</body>
</method>
<method name="addCondition">
<parameter name="id"/>
<parameter name="ref"/>
<body>
<![CDATA[
var conditionsBox = this.id('conditions');
@ -58,26 +67,42 @@
conditionsBox.appendChild(condition);
condition.initWithParentAndConditionID(this, id);
condition.initWithParentAndCondition(this, ref);
conditionsBox.childNodes[0].id('remove').hidden = (conditionsBox.childNodes.length == 1);
]]>
</body>
</method>
<method name="removeCondition">
<parameter name="idx"/>
<parameter name="id"/>
<body>
<![CDATA[
var conditionsBox = this.id('conditions');
this.search.removeCondition(idx);
conditionsBox.removeChild(conditionsBox.childNodes[idx]);
for(var i = idx, len=conditionsBox.childNodes.length; i < len; i++)
conditionsBox.childNodes[i].conditionID = i;
this.search.removeCondition(id);
for(var i = 0, len=conditionsBox.childNodes.length; i < len; i++)
if(conditionsBox.childNodes[i].conditionID == id)
{
conditionsBox.removeChild(conditionsBox.childNodes[i]);
i = len;
}
conditionsBox.childNodes[0].id('remove').hidden = (conditionsBox.childNodes.length == 1);
]]>
</body>
</method>
<method name="updateJoinMode">
<body>
<![CDATA[
var menu = this.id('joinModeMenu');
if(menu.hasAttribute('condition'))
this.search.updateCondition(menu.getAttribute('condition'),'joinMode',menu.value,null);
else
menu.setAttribute('condition', this.search.addCondition('joinMode',menu.value,null));
]]>
</body>
</method>
<method name="save">
<body>
<![CDATA[
@ -87,8 +112,7 @@
for(var i = 0, len=conditionsBox.childNodes.length; i < len; i++)
conditionsBox.childNodes[i].updateSearch();
this.search.save();
return this.search.save();
]]>
</body>
</method>
@ -107,10 +131,10 @@
<xul:groupbox xbl:inherits="flex">
<xul:caption align="center">
<xul:label value="Match"/>
<xul:menulist>
<xul:menulist id="joinModeMenu" oncommand="this.parentNode.parentNode.parentNode.updateJoinMode();">
<xul:menupopup>
<xul:menuitem label="Any" value="any"/>
<xul:menuitem label="All" value="all"/>
<xul:menuitem label="All" value="all" selected="true"/>
</xul:menupopup>
</xul:menulist>
<xul:label value="of the following:"/>
@ -124,10 +148,12 @@
<implementation>
<constructor>
<![CDATA[
this.operators = new Array('is', 'isNot', 'contains', 'doesNotContain');
var operators = new Array('is', 'isNot', 'contains', 'doesNotContain', 'lessThan', 'greaterThan', 'isBefore', 'isAfter');
var operatorsList = this.id('operatorsmenu');
for(i in operators)
operatorsList.appendItem(Scholar.getString('searchOperator.'+operators[i]),operators[i]);
var conditionsList = this.id('conditionsmenu');
conditionsList.removeAllItems;
var conditions = Scholar.SearchConditions.getStandardConditions();
for(var i=0, len=conditions.length; i<len; i++)
@ -156,22 +182,20 @@
]]>
</body>
</method>
<field name="operators"/>
<field name="dontupdate"/>
<field name="parent"/>
<field name="conditionID"/>
<method name="initWithParentAndConditionID">
<method name="initWithParentAndCondition">
<parameter name="parent"/>
<parameter name="id"/>
<parameter name="condition"/>
<body>
<![CDATA[
this.parent = parent;
this.conditionID = id;
this.conditionID = condition['id'];
if(this.parent.search)
{
this.dontupdate = true; //so that the search doesn't get updated while we are creating controls.
var condition = this.parent.search.getSearchCondition(this.conditionID);
this.id('conditionsmenu').value = condition['condition'];
this.id('operatorsmenu').value = condition['operator'];
@ -226,12 +250,7 @@
<xul:menupopup/>
</xul:menulist>
<xul:menulist id="operatorsmenu">
<xul:menupopup>
<xul:menuitem label="is" value="is"/>
<xul:menuitem label="isNot" value="isNot"/>
<xul:menuitem label="contains" value="contains"/>
<xul:menuitem label="doesNotContain" value="doesNotContain"/>
</xul:menupopup>
<xul:menupopup/>
</xul:menulist>
<xul:textbox id="valuefield" flex="1"/>
<xul:toolbarbutton id="remove" class="clicky" label="-" oncommand="this.parentNode.parentNode.onRemoveClicked();"/>

View file

@ -65,10 +65,7 @@ Scholar.CollectionTreeView.prototype.refresh = function()
var savedSearches = Scholar.Searches.getAll();
for(var i = 0; i < savedSearches.length; i++)
{
this._showItem(new Scholar.ItemGroup('search',savedSearches[i]), 0, this._dataItems.length); //itemgroup ref, level, beforeRow
Scholar.debug(i);
}
this._refreshHashMap();
}
@ -106,6 +103,8 @@ Scholar.CollectionTreeView.prototype.notify = function(action, type, ids)
{
var madeChanges = false;
Scholar.debug(action+', '+type+', '+ids);
if(action == 'remove')
{
ids = Scholar.flattenArguments(ids);
@ -310,7 +309,10 @@ Scholar.CollectionTreeView.prototype.deleteSelection = function()
if(group.isCollection())
group.ref.erase();
else if(group.isSearch())
{
Scholar.Searches.erase(group.ref['id']);
this._hideItem(rows[i]-i); //we don't have the notification system set up with searches.
}
}
this._treebox.endUpdateBatch();

View file

@ -177,7 +177,7 @@ var ScholarPane = new function()
window.openDialog('chrome://scholar/content/searchDialog.xul','','chrome,modal',io);
if(io.dataOut)
getCollectionsView().reload();
getCollectionsView().reload(); //we don't have notification support for searches
}
function onCollectionSelected()
@ -300,7 +300,7 @@ var ScholarPane = new function()
var io = {dataIn: {search: s, name: collection.getName()}, dataOut: null};
window.openDialog('chrome://scholar/content/searchDialog.xul','','chrome,modal',io);
if(io.dataOut)
onCollectionSelected();
onCollectionSelected(); //reload itemsView
}
}
}

View file

@ -69,8 +69,8 @@
<vbox id="collections-pane" persist="width" flex="1">
<toolbar>
<toolbarbutton id="tb-collection-add" tooltiptext="&toolbar.newCollection.label;" command="cmd_scholar_newCollection"/>
<toolbarbutton id="tb-collection-addsearch" tooltiptext="&toolbar.newSearch.label;" oncommand="ScholarPane.newSearch();"/>
<toolbarbutton id="tb-collection-rename" tooltiptext="&toolbar.renameCollection.label;" oncommand="ScholarPane.renameSelectedCollection();" disabled="true"/>
<toolbarbutton id="tb-collection-addsearch" label="Add Search" oncommand="ScholarPane.newSearch();"/>
<spacer flex="1"/>
<toolbarbutton id="tb-collection-menu" type="menu">
<menupopup>

View file

@ -39,6 +39,5 @@ function doUnload()
function doAccept()
{
document.getElementById('search-box').search.setName(document.getElementById('search-name').value);
document.getElementById('search-box').save();
io.dataOut = true;
io.dataOut = document.getElementById('search-box').save();
}

View file

@ -19,8 +19,9 @@
<!ENTITY collections.name_column "Name">
<!ENTITY toolbar.newItem.label "New Item">
<!ENTITY toolbar.removeItem.label "Remove Item...">
<!ENTITY toolbar.removeItem.label "Remove Item...">
<!ENTITY toolbar.newCollection.label "New Project">
<!ENTITY toolbar.newSearch.label "New Search">
<!ENTITY toolbar.renameCollection.label "Rename Project...">
<!ENTITY toolbar.removeCollection.label "Remove Project...">
<!ENTITY toolbar.exportCollection.label "Export Project...">

View file

@ -135,6 +135,11 @@
width: 150px;
}
#tb-collection-addsearch
{
list-style-image: url('chrome://scholar/skin/treesource-search.png');
}
#tb-search-cancel
{
margin: 0px;