Fixes #24, tags for notes.

This is now a new control, <tagsbox> which is pretty darn portable.
This commit is contained in:
David Norton 2006-07-05 15:08:24 +00:00
parent 7333a1b538
commit 1cdd1f3de2
4 changed files with 135 additions and 55 deletions

View file

@ -68,6 +68,8 @@
this.item = Scholar.Items.get(this.note.getNoteSource());
document.getAnonymousNodes(this)[0].childNodes[1].setAttribute('value',this.note.getNote());
document.getAnonymousNodes(this)[0].lastChild.firstChild.item = this.note;
this.updateTagsSummary();
]]>
</setter>
</property>
@ -98,6 +100,22 @@
]]>
</body>
</method>
<method name="updateTagsSummary">
<body>
<![CDATA[
var popup = document.getAnonymousNodes(this)[0].lastChild;
var label = popup.previousSibling;
var v = popup.firstChild.summary;
if(!v || v == "")
v = "[click here]";
while(label.hasChildNodes())
label.removeChild(label.firstChild);
label.appendChild(document.createTextNode("Tags: " + v));
]]>
</body>
</method>
</implementation>
<handlers>
</handlers>
@ -106,7 +124,115 @@
<xul:label/>
<xul:textbox multiline="true" type="timed" timeout="1000" flex="1" oncommand="this.parentNode.parentNode.save();"/>
<xul:label value="See also: (coming soon)"/>
<xul:label value="Tags: (coming soon)"/>
<xul:label onclick="this.nextSibling.showPopup(this,-1,-1,'popup',0,0);"/>
<xul:popup width="300" onpopuphidden="this.updateTagsSummary();">
<xul:tagsbox/>
</xul:popup>
</xul:vbox>
</content>
</binding>
<binding id="tags-box">
<implementation>
<field name="itemRef"/>
<property name="item" onget="return this.itemRef;">
<setter>
<![CDATA[
this.itemRef = val;
this.reloadTags();
]]>
</setter>
</property>
<property name="summary">
<getter>
<![CDATA[
var r = "";
if(this.item)
{
var tags = this.item.getTags();
for(var i = 0; i < tags.length; i++)
{
r = r + Scholar.Tags.getName(tags[i]) + ", ";
}
r = r.substr(0,r.length-2);
}
return r;
]]>
</getter>
</property>
<method name="reloadTags">
<body>
<![CDATA[
var rows = document.getAnonymousNodes(this)[0].lastChild.lastChild;
while(rows.hasChildNodes())
rows.removeChild(rows.firstChild);
if(this.item)
{
var tags = this.item.getTags();
for(var i = 0; i < tags.length; i++)
{
var icon= document.createElement("image");
icon.setAttribute('src','chrome://scholar/skin/tag.png');
var label = document.createElement("label");
label.setAttribute('value', Scholar.Tags.getName(tags[i]));
var remove = document.createElement("label");
remove.setAttribute('value','-');
remove.setAttribute('onclick',"this.parentNode.parentNode.parentNode.parentNode.parentNode.removeTag('"+tags[i]+"');");
remove.setAttribute('class','clicky');
var row = document.createElement("row");
row.appendChild(icon);
row.appendChild(label);
row.appendChild(remove);
rows.appendChild(row);
}
}
]]>
</body>
</method>
<method name="addTag">
<body>
<![CDATA[
t = prompt('Add Tag:');
if(t && this.item)
{
this.item.addTag(t);
this.reloadTags();
}
]]>
</body>
</method>
<method name="removeTag">
<parameter name="id"/>
<body>
<![CDATA[
if(id)
{
this.item.removeTag(id);
this.reloadTags();
}
]]>
</body>
</method>
</implementation>
<content>
<xul:vbox xbl:inherits="flex">
<xul:button label="Add Tag" oncommand="this.parentNode.parentNode.addTag();"/>
<xul:grid>
<xul:columns>
<xul:column/>
<xul:column flex="1"/>
<xul:column/>
</xul:columns>
<xul:rows/>
</xul:grid>
</xul:vbox>
</content>
</binding>

View file

@ -22,8 +22,6 @@ ScholarItemPane = new function()
this.modifyCreator = modifyCreator;
this.removeNote = removeNote;
this.addNote = addNote;
this.removeTag = removeTag;
this.addTag = addTag;
function onLoad()
{
@ -147,34 +145,7 @@ ScholarItemPane = new function()
_updateNoteCount();
//TAGS:
while(_tagsList.hasChildNodes())
_tagsList.removeChild(_tagsList.firstChild);
var tags = _itemBeingEdited.getTags();
if(tags.length)
{
for(var i = 0; i < tags.length; i++)
{
var icon = document.createElement('image');
icon.setAttribute('src','chrome://scholar/skin/tag.png');
var label = document.createElement('label');
label.setAttribute('value',Scholar.Tags.getName(tags[i]));
label.setAttribute('crop','end');
var removeButton = document.createElement('label');
removeButton.setAttribute("value","-");
removeButton.setAttribute("class","clicky");
removeButton.setAttribute("onclick","ScholarItemPane.removeTag("+tags[i]+")");
var row = document.createElement('row');
row.appendChild(icon);
row.appendChild(label);
row.appendChild(removeButton);
_tagsList.appendChild(row);
}
}
_tagsList.item = _itemBeingEdited;
}
function changeTypeTo(id)
@ -387,18 +358,6 @@ ScholarItemPane = new function()
_notesLabel.value = Scholar.getString('pane.item.notes.count.'+(c != 1 ? "plural" : "singular")).replace('%1',c) + ":";
}
function removeTag(id)
{
_itemBeingEdited.removeTag(id);
}
function addTag()
{
var t = prompt("Add Tag:");
if(t)
_itemBeingEdited.addTag(t);
}
}
addEventListener("load", function(e) { ScholarItemPane.onLoad(e); }, false);

View file

@ -42,18 +42,7 @@
</grid>
</vbox>
<vbox flex="1">
<hbox align="center">
<label id="editpane-tags-label"/>
<button label="Add Tag" oncommand="ScholarItemPane.addTag();"/>
</hbox>
<grid flex="1">
<columns>
<column/>
<column flex="1"/>
<column/>
</columns>
<rows id="editpane-dynamic-tags" flex="1"/>
</grid>
<tagsbox id="editpane-dynamic-tags" flex="1"/>
</vbox>
<vbox align="center" pack="center">
<label value="Coming soon"/>

View file

@ -8,6 +8,12 @@ noteeditor
-moz-binding: url('chrome://scholar/content/customControls.xml#note-editor');
}
tagsbox
{
-moz-binding: url('chrome://scholar/content/customControls.xml#tags-box');
}
#scholar-progress-box
{
border: 2px solid #7a0000;