Closes #127, Display files under files tab
Closes #128, Display files as children of item in items list Fixes #132, On Full-screen mode, browser content disappears but Scholar content does not stretch. Fixes #133, When Scholar on top, pane automatically resizes depending on item info height.
This commit is contained in:
parent
441696767a
commit
49d1eec9e8
8 changed files with 147 additions and 26 deletions
|
@ -25,8 +25,8 @@
|
|||
<![CDATA[
|
||||
this.noteRef = val;
|
||||
|
||||
if(this.note.getNoteSource())
|
||||
this.item = Scholar.Items.get(this.note.getNoteSource());
|
||||
if(this.note.getSource())
|
||||
this.item = Scholar.Items.get(this.note.getSource());
|
||||
|
||||
this.id('noteField').setAttribute('value',this.note.getNote());
|
||||
this.id('links').item = this.note;
|
||||
|
|
|
@ -25,6 +25,9 @@ ScholarItemPane = new function()
|
|||
this.modifyCreator = modifyCreator;
|
||||
this.removeNote = removeNote;
|
||||
this.addNote = addNote;
|
||||
this.removeFile = removeFile;
|
||||
this.addFileFromDialog = addFileFromDialog;
|
||||
this.addFileFromPage = addFileFromPage;
|
||||
|
||||
function onLoad()
|
||||
{
|
||||
|
@ -34,6 +37,8 @@ ScholarItemPane = new function()
|
|||
_creatorTypeMenu = document.getElementById('creatorTypeMenu');
|
||||
_notesList = document.getElementById('editpane-dynamic-notes');
|
||||
_notesLabel = document.getElementById('editpane-notes-label');
|
||||
_filesList = document.getElementById('editpane-dynamic-files');
|
||||
_filesLabel = document.getElementById('editpane-files-label');
|
||||
_tagsBox = document.getElementById('editpane-tags');
|
||||
_relatedBox = document.getElementById('editpane-related');
|
||||
|
||||
|
@ -50,7 +55,7 @@ ScholarItemPane = new function()
|
|||
|
||||
var itemTypes = Scholar.ItemTypes.getTypes();
|
||||
for(var i = 0; i<itemTypes.length; i++)
|
||||
if(itemTypes[i]['id'] != 1)
|
||||
if(itemTypes[i]['name'] != 'note' && itemTypes[i]['name'] != 'file')
|
||||
_itemTypeMenu.appendItem(Scholar.getString("itemTypes."+itemTypes[i]['name']),itemTypes[i]['id']);
|
||||
|
||||
return true;
|
||||
|
@ -76,7 +81,6 @@ ScholarItemPane = new function()
|
|||
|
||||
if(index == 0)
|
||||
{
|
||||
Scholar.debug('loading FIELDS');
|
||||
while(_dynamicFields.hasChildNodes())
|
||||
_dynamicFields.removeChild(_dynamicFields.firstChild);
|
||||
|
||||
|
@ -120,7 +124,6 @@ ScholarItemPane = new function()
|
|||
}
|
||||
else if(index == 1)
|
||||
{
|
||||
Scholar.debug('loading NOTES');
|
||||
//NOTES:
|
||||
while(_notesList.hasChildNodes())
|
||||
_notesList.removeChild(_notesList.firstChild);
|
||||
|
@ -160,18 +163,51 @@ ScholarItemPane = new function()
|
|||
}
|
||||
else if(index == 2)
|
||||
{
|
||||
Scholar.debug('loading FILES');
|
||||
//FILES
|
||||
while(_filesList.hasChildNodes())
|
||||
_filesList.removeChild(_filesList.firstChild);
|
||||
|
||||
var files = Scholar.Items.get(_itemBeingEdited.getFiles());
|
||||
if(files.length)
|
||||
{
|
||||
for(var i = 0; i < files.length; i++)
|
||||
{
|
||||
var icon = document.createElement('image');
|
||||
icon.setAttribute('src','chrome://scholar/skin/treeitem-file.png');
|
||||
|
||||
var label = document.createElement('label');
|
||||
label.setAttribute('value',files[i].getField('title'));
|
||||
label.setAttribute('crop','end');
|
||||
|
||||
var box = document.createElement('box');
|
||||
// box.setAttribute('onclick',"ScholarPane.openNoteWindow("+files[i].getID()+");");
|
||||
box.setAttribute('class','clicky');
|
||||
box.appendChild(icon);
|
||||
box.appendChild(label);
|
||||
|
||||
var removeButton = document.createElement('label');
|
||||
removeButton.setAttribute("value","-");
|
||||
removeButton.setAttribute("class","clicky");
|
||||
removeButton.setAttribute("onclick","ScholarItemPane.removeFile("+files[i].getID()+")");
|
||||
|
||||
var row = document.createElement('row');
|
||||
row.appendChild(box);
|
||||
row.appendChild(removeButton);
|
||||
|
||||
_filesList.appendChild(row);
|
||||
}
|
||||
}
|
||||
|
||||
_updateFileCount();
|
||||
|
||||
}
|
||||
else if(index == 3)
|
||||
{
|
||||
Scholar.debug('loading TAGS');
|
||||
//TAGS:
|
||||
_tagsBox.item = _itemBeingEdited;
|
||||
}
|
||||
else if(index == 4)
|
||||
{
|
||||
Scholar.debug('loading RELATED');
|
||||
//RELATED
|
||||
_relatedBox.item = _itemBeingEdited;
|
||||
}
|
||||
|
@ -388,6 +424,37 @@ ScholarItemPane = new function()
|
|||
|
||||
_notesLabel.value = Scholar.getString('pane.item.notes.count.'+(c != 1 ? "plural" : "singular")).replace('%1',c) + ":";
|
||||
}
|
||||
|
||||
function _updateFileCount()
|
||||
{
|
||||
var c = _filesList.childNodes.length;
|
||||
|
||||
_filesLabel.value = Scholar.getString('pane.item.files.count.'+(c != 1 ? "plural" : "singular")).replace('%1',c) + ":";
|
||||
}
|
||||
|
||||
function removeFile(id)
|
||||
{
|
||||
var file = Scholar.Items.get(id);
|
||||
if(file)
|
||||
if(confirm(Scholar.getString('pane.item.files.delete.confirm')))
|
||||
file.erase();
|
||||
}
|
||||
|
||||
function addFileFromDialog()
|
||||
{
|
||||
var nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
var fp = Components.classes["@mozilla.org/filepicker;1"]
|
||||
.createInstance(nsIFilePicker);
|
||||
fp.init(window, "Select a File", nsIFilePicker.modeOpen);
|
||||
|
||||
if(fp.show() == nsIFilePicker.returnOK)
|
||||
Scholar.Files.importFromFile(fp.file, _itemBeingEdited.getID());
|
||||
}
|
||||
|
||||
function addFileFromPage()
|
||||
{
|
||||
Scholar.Files.importFromDocument(window.document, _itemBeingEdited.getID());
|
||||
}
|
||||
}
|
||||
|
||||
addEventListener("load", function(e) { ScholarItemPane.onLoad(e); }, false);
|
||||
|
|
|
@ -34,8 +34,19 @@
|
|||
<rows id="editpane-dynamic-notes" flex="1"/>
|
||||
</grid>
|
||||
</vbox>
|
||||
<vbox align="center" pack="center">
|
||||
<label value="Coming soon"/>
|
||||
<vbox flex="1">
|
||||
<hbox align="center">
|
||||
<label id="editpane-files-label"/>
|
||||
<button label="Add File..." oncommand="ScholarItemPane.addFileFromDialog();"/>
|
||||
<button label="Save Page" oncommand="ScholarItemPane.addFileFromPage();"/>
|
||||
</hbox>
|
||||
<grid flex="1">
|
||||
<columns>
|
||||
<column flex="1"/>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows id="editpane-dynamic-files" flex="1"/>
|
||||
</grid>
|
||||
</vbox>
|
||||
<tagsbox id="editpane-tags" flex="1"/>
|
||||
<seealsobox id="editpane-related" flex="1"/>
|
||||
|
|
|
@ -116,7 +116,9 @@ Scholar.ItemTreeView.prototype.notify = function(action, type, ids)
|
|||
{
|
||||
var item = Scholar.Items.get(ids);
|
||||
|
||||
if((this._itemGroup.isLibrary() || item.inCollection(this._itemGroup.ref.getID())) && this._itemRowMap[ids] == null && (!item.isNote() || !item.getNoteSource()))
|
||||
if((this._itemGroup.isLibrary() || item.inCollection(this._itemGroup.ref.getID())) //if the item belongs in this collection
|
||||
&& this._itemRowMap[ids] == null //if we haven't already added it to our hash map
|
||||
&& (item.isRegularItem() || !item.getSource())) //if it's stand-alone
|
||||
{
|
||||
this._showItem(new Scholar.ItemTreeView.TreeRow(item,0,false),this.rowCount);
|
||||
this._treebox.rowCountChanged(this.rowCount-1,1);
|
||||
|
@ -205,7 +207,7 @@ Scholar.ItemTreeView.prototype.getImageSrc = function(row, col)
|
|||
|
||||
Scholar.ItemTreeView.prototype.isContainer = function(row)
|
||||
{
|
||||
return !this._getItemAtRow(row).isNote();
|
||||
return this._getItemAtRow(row).isRegularItem();
|
||||
}
|
||||
|
||||
Scholar.ItemTreeView.prototype.isContainerOpen = function(row)
|
||||
|
@ -215,7 +217,7 @@ Scholar.ItemTreeView.prototype.isContainerOpen = function(row)
|
|||
|
||||
Scholar.ItemTreeView.prototype.isContainerEmpty = function(row)
|
||||
{
|
||||
return (this._getItemAtRow(row).numNotes() == 0);
|
||||
return (this._getItemAtRow(row).numNotes() == 0 && this._getItemAtRow(row).numFiles() == 0);
|
||||
}
|
||||
|
||||
Scholar.ItemTreeView.prototype.getLevel = function(row)
|
||||
|
@ -260,7 +262,19 @@ Scholar.ItemTreeView.prototype.toggleOpenState = function(row)
|
|||
else
|
||||
{
|
||||
var item = this._getItemAtRow(row).ref;
|
||||
var newRows = Scholar.Items.get(item.getNotes()); //Get children
|
||||
//Get children
|
||||
var files = item.getFiles();
|
||||
var notes = item.getNotes();
|
||||
|
||||
var newRows;
|
||||
if(files && notes)
|
||||
newRows = files.concat(notes);
|
||||
else if(files)
|
||||
newRows = files;
|
||||
else if(notes)
|
||||
newRows = notes;
|
||||
|
||||
newRows = Scholar.Items.get(newRows);
|
||||
|
||||
for(var i = 0; i < newRows.length; i++)
|
||||
{
|
||||
|
@ -430,7 +444,7 @@ Scholar.ItemTreeView.prototype.deleteSelection = function()
|
|||
this._treebox.beginUpdateBatch();
|
||||
for (var i=0; i<items.length; i++)
|
||||
{
|
||||
if(this._itemGroup.isLibrary() || items[i].isNote()) //erase item from DB
|
||||
if(this._itemGroup.isLibrary() || !items[i].isRegularItem()) //erase item from DB
|
||||
items[i].ref.erase();
|
||||
else if(this._itemGroup.isCollection())
|
||||
this._itemGroup.ref.removeItem(items[i].ref.getID());
|
||||
|
@ -601,7 +615,7 @@ Scholar.ItemTreeView.prototype.getCellProperties = function(row, col, prop) { }
|
|||
|
||||
Scholar.ItemTreeView.TreeRow = function(ref, level, isOpen)
|
||||
{
|
||||
this.ref = ref; //the item/note associated with this
|
||||
this.ref = ref; //the item associated with this
|
||||
this.level = level;
|
||||
this.isOpen = isOpen;
|
||||
}
|
||||
|
@ -611,6 +625,16 @@ Scholar.ItemTreeView.TreeRow.prototype.isNote = function()
|
|||
return this.ref.isNote();
|
||||
}
|
||||
|
||||
Scholar.ItemTreeView.TreeRow.prototype.isFile = function()
|
||||
{
|
||||
return this.ref.isFile();
|
||||
}
|
||||
|
||||
Scholar.ItemTreeView.TreeRow.prototype.isRegularItem = function()
|
||||
{
|
||||
return this.ref.isRegularItem();
|
||||
}
|
||||
|
||||
Scholar.ItemTreeView.TreeRow.prototype.getField = function(field)
|
||||
{
|
||||
if(this.isNote() && field == 'title')
|
||||
|
@ -638,8 +662,16 @@ Scholar.ItemTreeView.TreeRow.prototype.getType = function()
|
|||
|
||||
Scholar.ItemTreeView.TreeRow.prototype.numNotes = function()
|
||||
{
|
||||
if(this.isNote())
|
||||
return 0;
|
||||
else
|
||||
if(this.isRegularItem())
|
||||
return this.ref.numNotes();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
Scholar.ItemTreeView.TreeRow.prototype.numFiles = function()
|
||||
{
|
||||
if(this.isRegularItem())
|
||||
return this.ref.numFiles();
|
||||
else
|
||||
return 0;
|
||||
}
|
|
@ -44,6 +44,7 @@ var ScholarPane = new function()
|
|||
newPane.setAttribute('id','scholar-pane');
|
||||
newPane.setAttribute('collapsed',true);
|
||||
newPane.setAttribute('flex','1');
|
||||
newPane.height = oldPane.height;
|
||||
while(oldPane.hasChildNodes())
|
||||
newPane.appendChild(oldPane.firstChild);
|
||||
appContent.removeChild(oldPane);
|
||||
|
@ -168,19 +169,22 @@ var ScholarPane = new function()
|
|||
noteEditor.note = item.ref;
|
||||
document.getElementById('scholar-view-note').lastChild.setAttribute('noteID',item.ref.getID());
|
||||
document.getElementById('item-pane').selectedIndex = 2;
|
||||
document.getElementById('scholar-view-tabs').setAttribute('hidden',true);
|
||||
}
|
||||
else if(item.isFile())
|
||||
{
|
||||
document.getElementById('scholar-file-label').setAttribute('value',item.getField('title'));
|
||||
document.getElementById('scholar-file-links').item = item.ref;
|
||||
document.getElementById('item-pane').selectedIndex = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
ScholarItemPane.viewItem(item.ref);
|
||||
document.getElementById('item-pane').selectedIndex = 1;
|
||||
document.getElementById('scholar-view-tabs').setAttribute('hidden',false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('item-pane').selectedIndex = 0;
|
||||
document.getElementById('scholar-view-tabs').setAttribute('hidden',true);
|
||||
|
||||
var label = document.getElementById('scholar-view-selected-label');
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<vbox id="appcontent">
|
||||
<!-- Changes to attributes of scholar-splitter and scholar-pane must be mirrored on overlay.js's onLoad() function -->
|
||||
<splitter id="scholar-splitter" resizebefore="closest" resizeafter="closest" collapsed="true"/>
|
||||
<hbox id="scholar-pane" persist="height" collapsed="true">
|
||||
<hbox id="scholar-pane" persist="height" collapsed="true" flex="1">
|
||||
<popupset>
|
||||
<popup id="scholar-collectionmenu" onpopupshowing="ScholarPane.buildCollectionContextMenu();">
|
||||
<menuitem label="&toolbar.newCollection.label;" command="cmd_scholar_newCollection"/>
|
||||
|
@ -166,7 +166,7 @@
|
|||
<tab label="&tabs.related.label;"/>
|
||||
</tabs>
|
||||
</caption>
|
||||
<deck id="item-pane" selectedIndex="0" flex="1">
|
||||
<deck id="item-pane" selectedIndex="0" flex="1" onselect="document.getElementById('scholar-view-tabs').setAttribute('hidden',(this.selectedIndex != 1));">
|
||||
<box pack="center" align="center">
|
||||
<label id="scholar-view-selected-label"/>
|
||||
</box>
|
||||
|
@ -175,6 +175,10 @@
|
|||
<noteeditor id="scholar-note-editor" flex="1"/>
|
||||
<button label="Edit in a separate window" oncommand="ScholarPane.openNoteWindow(this.getAttribute('noteID'));"/>
|
||||
</vbox>
|
||||
<vbox id="scholar-view-file" flex="1">
|
||||
<label id="scholar-file-label"/>
|
||||
<linksbox id="scholar-file-links" flex="1"/>
|
||||
</vbox>
|
||||
</deck>
|
||||
</groupbox>
|
||||
</vbox>
|
||||
|
|
|
@ -18,9 +18,12 @@ pane.item.selected.multiple = %1 items selected
|
|||
|
||||
pane.item.changeType = Are you sure you want to change the item type? Certain fields may be lost.
|
||||
pane.item.notes.untitled = Untitled Note
|
||||
pane.item.notes.delete.confirm = Are you sure you want to delete the selected note?
|
||||
pane.item.notes.delete.confirm = Are you sure you want to delete this note?
|
||||
pane.item.notes.count.singular = %1 note
|
||||
pane.item.notes.count.plural = %1 notes
|
||||
pane.item.files.delete.confirm = Are you sure you want to delete this file?
|
||||
pane.item.files.count.singular = %1 file
|
||||
pane.item.files.count.plural = %1 files
|
||||
|
||||
itemFields.title = Title
|
||||
itemFields.dateAdded = Date Added
|
||||
|
|
BIN
chrome/chromeFiles/skin/default/scholar/treeitem-file.png
Executable file
BIN
chrome/chromeFiles/skin/default/scholar/treeitem-file.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 620 B |
Loading…
Reference in a new issue