Commit graph

328 commits

Author SHA1 Message Date
Simon Kornblith
098078627c - Make events listening for DOMContentLoaded listen for load, because DOMContentLoaded does not seem ready for prime time (hey, it's undocumented, what can you expect)
- Make Amazon scraper work with multiple documents
- Fix bugs in processDocuments
- Make Scholar.Ingester.Utilities.getItemArray() willing to take an array of DOM nodes to search for links, and finally take advantage of the fact that objects have no length
2006-06-23 03:02:30 +00:00
Simon Kornblith
470f7c463f The Voyager scraper now actually works on the search results page. 2006-06-22 20:50:57 +00:00
Simon Kornblith
3890e5f122 - Made ingester automatically create hidden browser objects, given a window object. This should make things much easier for both David and me.
- Multiple item detection code is now a part of the scraperJavaScript, rather than the scrapeDetectCode, and code to choose which items to add is part of Scholar.Ingester.Utilities, accessible from inside scrapers. The alternative approach would result in one request (or, in the case of JSTOR, three requests) per new item, while in some cases (e.g. Voyager) only one request is necessary to get all of the items.
2006-06-22 15:50:46 +00:00
Dan Stillman
726364d091 Scholar.History -- i.e. undo/redo functionality
Partially integrated into data layer, but I'm waiting to commit that part until I'm sure it won't break everything
2006-06-22 14:01:54 +00:00
Simon Kornblith
ca3a0e6e5d Beginnings of search result scraping (does not yet actually do the scraping, but does present the menu) 2006-06-22 02:43:40 +00:00
David Norton
428eab6a95 A cog menu each for collections and items (the same as the contextual menu, for now)
Moved the capture icon into the URL bar (invisible until you visit a scrapable page. Currently just displays a Book, but will change to the correct item types in the future?)
2006-06-22 00:13:21 +00:00
David Norton
718d613cdc Command-shift-S should now work as soon as you start Firefox.
Lots of localization, moving style out of XUL and into overlay.css
2006-06-21 23:22:37 +00:00
David Norton
27025befef Added "Disable automatic scraper updates" preference. (Up to Dan to implement this) 2006-06-21 22:31:52 +00:00
David Norton
77b8bfd0b2 Added tabs: Tags, Files (nothing there yet)
Added 'search options' toolbar on quick search (doesn't do anything yet)
2006-06-21 22:23:42 +00:00
Simon Kornblith
9a9621f39d Make net appear even before first page has loaded 2006-06-21 18:19:49 +00:00
Dan Stillman
6b2d9bb3e6 Don't break the extension right before we show it 2006-06-21 16:06:41 +00:00
Dan Stillman
336f92a832 Set repository check timer to 1 hour during development 2006-06-21 16:04:45 +00:00
Simon Kornblith
6d1e447154 - Remove load eventListener after it has been called once
- Capture editors from Google Books
2006-06-21 15:18:18 +00:00
Simon Kornblith
7d3deb5b9f - Make Scholar.Ingester.Utilities.loadDocument() attach an event handler to load rather than DOMContentLoaded to resolve an issue with the Ex Libris/Aleph scraper (VCU)
- When possible, corporate creators/contributors are categorized with their own RDF types (prefixDummy + "corporateCreator/corporateContributor)
- Remove extraneous debug code in extensions
2006-06-21 01:41:07 +00:00
Dan Stillman
6c89acbe0d Scholar.inArray(needle, haystack) and Scholar.arraySearch(needle, haystack) -- versions of the PHP functions for JS 2006-06-20 17:32:40 +00:00
David Norton
6b002f7566 Got some new icons for the lists
Toolbar buttons are now icons
2006-06-20 17:08:30 +00:00
Simon Kornblith
09d79d6dd7 Fix overly optimistic JSTOR scraper 2006-06-20 17:06:41 +00:00
Dan Stillman
a3df0c39e2 - DB parameters can now be bound using the native JS type rather than by specifying the type explicitly (e.g. Scholar.DB.query(sql, [1, 2, "hello"]) -- for use when the data is generated internally and trusted, obviously
- Don't try to display an SQLite error when it's "not an error" (i.e. when the error is in something else)

- Switch to nsIFile instead of nsILocalFile to retrieve the profile directory
2006-06-20 15:42:01 +00:00
Dan Stillman
d239e6e4ba Typo in trigger() call in Collection.addItem() (thanks David) 2006-06-20 15:28:20 +00:00
Dan Stillman
95ca76545f QA testing of extension performance aboard trains
Fix in Collection.erase() -- when the DB methods started returning values in their native type, the collection id became an int rather than a string and "new Array(this._id)" became a length declaration rather than an elements declaration
2006-06-20 15:23:44 +00:00
David Norton
8f38c09c2e Ignore case on sorting. 2006-06-20 14:36:49 +00:00
Simon Kornblith
5af10b1061 - Fix small bug in ingester interface 2006-06-20 14:16:15 +00:00
David Norton
9f1cbf3177 Added back the Add menu with itemTypes.
Minor text changes
2006-06-20 13:59:59 +00:00
Simon Kornblith
c983a8e7e4 - Re-named Scholar.Ingester.Interface to Scholar_Ingester_Interface (since Scholar object is defined in XPCOM and thus global) 2006-06-20 00:52:15 +00:00
David Norton
d87f68e8e8 Double click an item to un-collapse the item pane.
The item pane remembers whether or not it was collapsed.
2006-06-19 18:43:21 +00:00
David Norton
8d50874d6b [interface] You can now change an item's type via menu. 2006-06-19 15:45:32 +00:00
David Norton
c345b90b9a Contextual menus - Collections, Items.
Moved close button to a more sensible place.
On Item Add: Clear search text, and select Info tab.
Minor function renames.
2006-06-19 15:00:13 +00:00
Simon Kornblith
20369f41b3 - Move commonly used scraper functions to ingester.js, rather than re-defining them in each scraper. This breaks Piggy Bank compatibility in our scrapers, but we will still be able to export our scrapers in a Piggy Bank compatible form.
- Better handling of scraper RDF to item mapping.
- Improved date handling. All scrapers now return ISO-style dates when possible.
2006-06-18 19:04:32 +00:00
Simon Kornblith
3d881eec13 - Make scrapers return standard ISO-style YYYY-MM-DD dates. Still need to work on journal article scrapers.
- Ingester lets callback function save items, rather than saving them itself.
- Better handling of multiple items in API, although no scrapers currently implement this.
2006-06-17 21:21:15 +00:00
David Norton
953b1f9d20 Lots of little things:
- Fix item modify notify() on 1st row.
 - Ensure that new items are visible when added.
 - New functionality for creating new items (prevents a lot of problems).
 - Number-based fields display properly.
 - Fixed bug when creating and saving the first notes on an item.
 - New notes won't save empty.
2006-06-17 00:57:50 +00:00
Dan Stillman
32ce0da44a Restore the statement.reset() in valueQuery() that I accidentally deleted in r216 2006-06-16 22:17:46 +00:00
Dan Stillman
bfa25cae37 Display SQLite error in exceptions thrown from commitTransaction() and rollbackTransaction() (like the ones on field value updates that I'm trying to figure out at the moment) 2006-06-16 22:15:07 +00:00
Dan Stillman
e8ed4281f9 Change the DB query functions to return values of the actual types they are, rather than to return everything as strings -- this will prevent the need for parseInt on COUNT(*) values, etc. and is generally better
This will temporarily break the display of numeric fields on the interface side
2006-06-16 21:44:41 +00:00
Dan Stillman
936ef86584 Fix Item.numNotes() and Item.getNotes() to work on items not yet in the DB (return 0 and [], respectively) 2006-06-16 21:33:03 +00:00
David Norton
bf0626cb58 [interface] All editing elements that look like labels but provide functionality now offer hover feedback
[fix] You shouldn't lose your changes if you select another item in the middle of editing a field.
[fix] The dropdown menu to select notes doesn't steal the focus
2006-06-16 17:21:30 +00:00
David Norton
380584986a [fix] If you do a sort, modify a note, etc. it does not reload the selected item
[interface/fix] There will always be a secondary sort on date modified. (fixes the infamous Turkle Toggle issue once and for all)
2006-06-16 16:30:03 +00:00
Dan Stillman
4904c04e3e Add dateCreated and dateModified columns to itemNotes
Update itemNotes.dateModified on item update
2006-06-16 16:09:18 +00:00
Dan Stillman
3f27a12b0f Trigger notify('modify', 'item', noteID) on note modify
Added method Item.updateDateModified to just change the date -- used on note updates

Delete item notes on item delete
2006-06-16 15:57:52 +00:00
David Norton
942c6d5da2 [interface] Number of notes column in items tree 2006-06-16 15:27:22 +00:00
Dan Stillman
08a570a38a Item.numNotes() 2006-06-16 15:18:01 +00:00
David Norton
3cdcf3093a [interface] Confirms delete of note
[fix] Minor fix - no more exception on ItemTreeView when you hit the left or right arrow
[ignore] simplified some checking in the note code.
2006-06-16 15:15:42 +00:00
David Norton
8ff6c48001 [interface] Custom textbox binding: multiline and timed together.
[interface] Multiple notes: works like a charm
2006-06-16 14:39:18 +00:00
Dan Stillman
47d59f2dc1 Add note contents to search 2006-06-16 08:04:01 +00:00
Dan Stillman
7a8ddb1beb Fix logic in _noteToTitle in itemPane.js (if no newline in note the title would be "Untitled Note") -- though it'd be better to do what Stickies do and just find the first bit of text, even if it's not on the
first line (regex is probably easiest)
2006-06-16 07:44:55 +00:00
Dan Stillman
fd85af40f8 Many-to-one item note support in the schema and data layer -- still some issues on (I think) the interface side 2006-06-16 07:32:48 +00:00
David Norton
e417d8e690 [interface] Although commented out, code in place to accept URL drags into collections (waiting on an Ingester.scrapeURL function)
[interface] Multi-notes functionality (waiting on data layer)
[docs] Major internal documentation written for itemTreeView.js and collectionTreeView.js (this actually does work ;-))
2006-06-15 22:35:48 +00:00
Dan Stillman
f635ee7788 Make the retry interval 60 minutes, not 60 seconds 2006-06-15 21:24:04 +00:00
Dan Stillman
8e97675cc9 Added a timer to run repository checks while the browser is up
Added a separate retry interval so that the extension retries sooner after failures (browser offline, request failure, etc.)

Revision 200 -- w00t i am victorious
2006-06-15 21:06:24 +00:00
Dan Stillman
2d20fe717d Added Scholar.HTTP.browserIsOffline() and changed doGet() and doPost() to return false if so 2006-06-15 16:52:46 +00:00
Dan Stillman
11a056ecd4 _getDBVersion() caches the version number, so make sure _updateDBVersion() updates it 2006-06-15 16:28:11 +00:00
Dan Stillman
70216ea2c7 - Added automatic scraper update mechanism (more details on Basecamp: http://chnm.grouphub.com/C2687015)
- Removed localLastUpdated field from scrapers table and renamed centralLastUpdated to lastUpdated; updated scraper queries accordingly

- Added query in scrapers.sql to update version table 'repository' row to prevent immediate downloads of newly installed scrapers

- Get version property from extension manager in Scholar.init() and assign to Scholar.version
2006-06-15 06:13:02 +00:00
David Norton
70be7cf8fd Switched Notes and Info tabs.
The tabbox should always fill the allotted space. Hopefully?
2006-06-14 17:43:02 +00:00
Dan Stillman
8ed37732c1 JS Date() takes months 0-11, for reasons that are far from clear 2006-06-14 16:59:29 +00:00
David Norton
2399f044e1 [Drag and Drop] in the Collections Tree: Now checks to make sure that the correct type is being dragged, and that you aren't dropping a folder into subfolders, etc.
[Drag and Drop] in Items Tree: You can drag items from one window into another, directly into the Items list.
[Editing] Close the edit box and save when you click on its label
2006-06-14 15:51:05 +00:00
Dan Stillman
c8a74e96cd Don't be dumb 2006-06-14 15:41:25 +00:00
David Norton
3e11379c3a Notes now automatically save - no "save" button.
The collections list does not resize randomly now.
The pane on the right stays open all the time - even when 0/multiple items are selected. This is to avoid frequent resizing of the items pane.
Temporarily, if the first "word" of a field's value is more than 29 characters long, it will set it to crop. This is for the long URLs, etc.
2006-06-13 20:45:30 +00:00
Dan Stillman
ba16889bb0 Moved the Scholar.Hash constructor out of the main Scholar constructor, where I had put it for some reason -- ignore 2006-06-13 15:14:22 +00:00
Dan Stillman
ca2045a305 Scholar.Date.sqlToDate(string sqldate) -- function to convert SQL-formatted date (e.g. '2006-06-13 11:03:05' or '2006-06-13') into a JS date object 2006-06-13 15:07:08 +00:00
Dan Stillman
39f9d2c3b3 Wrapper functions for XMLHTTPRequest in scholar.js, stolen and adapted slightly from Simon's ingester code (those override the mime type to text/plain and only use responseText, I assume to conform to the Piggy Bank API, so unfortunately we can't use the same ones elsewhere)
Scholar.HTTP.doGet(url, onStatus, onDone) and Scholar.HTTP.doPost(url, body, onStatus, onDone) -- onStatus and onDone are callbacks to call on non-200 responses and the response body, respectively
2006-06-13 14:53:38 +00:00
Dan Stillman
d42258b168 Changed schema of scrapers table to use single GUID for scraperID
Assigned guids to scrapers, replaced INSERT queries with REPLACE queries, and removed table DELETE query at top -- this will allow scrapers to be updated without deleting any others that may exist (e.g. that someone is developing, third-party, etc.)
2006-06-12 15:43:24 +00:00
Dan Stillman
0b1765b549 Move CreatorTypes constructor in code -- ignore 2006-06-12 13:08:36 +00:00
Dan Stillman
c24c148e0b Cache creator type names to prevent repeated DB lookups in CreatorTypes.getTypeName() 2006-06-12 13:05:30 +00:00
Dan Stillman
5a045f5b50 Cache item type names to prevent repeated DB lookups in ItemTypes.getTypeName() 2006-06-12 12:59:25 +00:00
David Norton
b1389bfc61 [interface] Item Type column (will show up on the right if you already have Scholar installed, but on the left for all new installations.), sortable.
[style] Better add/remove Creator buttons.
[fix] The sorting should not randomly switch the order of two items with the same sort value (eg, Barnes vs. Barnes).
[fix] The browser should not open with two sorted columns.
2006-06-12 12:43:20 +00:00
David Norton
cebd6bde5b [interface] Images now appear on the collections tree and items tree. (yes, they are ugly). 2006-06-09 16:36:18 +00:00
David Norton
68fed95e8f Renamed metadataPane.js/xul to match previous change. 2006-06-09 15:54:44 +00:00
David Norton
a7b35c0286 [interface] Preliminary note editing support.
[other] MetadataPane renamed ScholarItemPane.
2006-06-09 15:52:40 +00:00
David Norton
fbcd247b09 Cleaned up the code in the tree views.
Fixed a bug on 'add' - items showing up in Library even if they were already there.
2006-06-09 14:42:53 +00:00
David Norton
9f7437f5ca [interface] itemsTreeView correctly handles notify(erase)
[data access] Collection.removeItem() calls trigger() with the right type
2006-06-09 14:01:07 +00:00
David Norton
14ba1b8fbc [interface] collection stays selected on drag-and-drop.
[interface] Collections notify() cleaned up a bit.
2006-06-08 21:47:33 +00:00
Dan Stillman
9daa0d3303 Added 'notes' field to fields table and sample data (changes are less messy than they look--I just put 'notes' after 'rights' and 'source' and incremented the other fieldIDs)
scholar.properties addition is just to keep metadata panel from breaking and could probably be removed once interface is hard-coded to not display the notes field there
2006-06-08 21:30:22 +00:00
Dan Stillman
c3acdf04a6 Don't mark item as changed if setField('') is called on an empty field (i.e. prevent unnecessary save() calls) 2006-06-08 21:08:50 +00:00
Dan Stillman
3715f2c89e - Send a 'modify' to collections in addItem() and removeItem() when collections become or stop being empty
- Send a 'delete' rather than a 'remove' to itemViews when items are actually deleted (removals from collections still get 'remove' unless it's part of a collection erase)
2006-06-08 20:41:37 +00:00
David Norton
368724b7de [interface] Collections should keep their open state on a drop. 2006-06-08 20:28:50 +00:00
Dan Stillman
7c9b1f785c Only send itemView 'remove' notifictions for items if they're actually deleted from the DB, not if they're just removed from a collection 2006-06-08 20:02:26 +00:00
Dan Stillman
01f50b9e4b On Collection.changeParent(), change notify() action to 'move', and always send a three-value array in the order [collectionID, previousParent, newParent] -- 2nd or 3rd param will be null if moving from/to root 2006-06-08 19:58:54 +00:00
David Norton
1336842d74 [interface] You should now be able to drop collections below the library (into root).
[interface] New items are automatically selected.
2006-06-08 19:34:58 +00:00
Dan Stillman
4545a5d8a8 Collection.hasDescendent(type, id) -- type is 'collection' or 'item', for now 2006-06-08 19:11:10 +00:00
Dan Stillman
15ec35c927 Reload collections (all, for now) on changeParent() to refresh hasChildCollections() 2006-06-08 18:53:49 +00:00
David Norton
1d14c69ad5 [interface] Preliminary drag-and-drop.
1) Items into collections.
  2) Collections into collections.
	Dan S, please check this out, I am getting some exceptions from the data access portion.
[interface] Temporarily, "metadata" pane on the right is not resizable.
2006-06-08 18:42:55 +00:00
Simon Kornblith
076ee0fad2 Add PubMed scraper, fix a few other small bugs 2006-06-08 01:26:40 +00:00
Dan Stillman
393d19ca85 Fix SQL error on middle creator remove
Added creatorTypeID to the PK in itemCreators, because a creator could conceivably have two roles on an item

Throw an error if attempt to save() an item with two identical creator/creatorTypeID combinations, since, assuming this shouldn't be allowed (i.e. we don't have a four-column PK), there's really no way to handle this elegantly on my end -- interface code can use new method Item.creatorExists(firstName, lastName, creatorTypeID, skipIndex), with skipIndex set to the current index, to make sure this isn't done
2006-06-08 00:16:35 +00:00
David Norton
8fc4a02814 [interface] You can resize the view/edit pane on the right.
[interface] You can press 'escape' on editing a field to cancel changes.
[style] The add/remove creator buttons provide rollover feedback.
2006-06-07 18:20:45 +00:00
David Norton
eba82e2ac6 ItemTreeView remembers the selection on notify().
MetadataPane editing updated a lot -- creator support added.

Source column is hidden on default.
2006-06-07 16:19:56 +00:00
Dan Stillman
393807b152 This isn't quite done (I'm discussing changing the scrapers schema with Simon to better handle scraper updates) but in the interest of getting the scrapers in for testing, I'll commit this now.
Integrated the scrapers with the schema update mechanism. Changed a bunch of schema methods to handle both schema.sql and scrapers.sql (or others, if need be) and altered the version table to track mu
ltiple versions for different files. This theoretically should detect that the version table has changed and force a reinitialization of the DB--let me know if there are problems.
2006-06-07 15:27:21 +00:00
Dan Stillman
882a96ee40 Fixed brokenness on schema reinitialization 2006-06-07 14:35:04 +00:00
Dan Stillman
448fde9ff1 Made the schema update system moderately less convoluted
- Broke schema functions into separate object and got rid of DB_VERSION config constant in favor of a toVersion variable in the _migrateSchema command (which isn't technically necessary either, since the version number at the top of schema.sql is now always compared to the DB version at startup) but will help reduce the chance that someone will update the schema file without adding migration steps)

- Removed Amazon scraper from schema.sql, as it will be loaded with the rest of the scrapers
2006-06-07 01:02:59 +00:00
David Norton
098e90fea9 Search field now searches only selection Library/Project.
- Sort stays
 - Selection remembered

New functions: saveSelection(), rememberSelection() on ItemTreeView
2006-06-06 22:43:58 +00:00
Simon Kornblith
0753d78910 - Add VLTS scraper
- Fix loadDocument/processDocuments (broken by r145)
2006-06-06 21:35:23 +00:00
Dan Stillman
9bcaad5946 Added optional second param to Items.search() to restrict search to a particular collectionID 2006-06-06 20:46:08 +00:00
David Norton
2513c829a6 Simple, yet inefficient, searching from upper right-hand corner. 2006-06-06 20:33:49 +00:00
Dan Stillman
c807d335e9 Changed Items.get() to return a regularly indexed array instead of one indexed by itemID--nothing actually used the keyed array, and this way it can be used for building trees directly (e.g. Scholar.Items.get(Scholar.Items.search('barnes'))) 2006-06-06 20:15:50 +00:00
David Norton
b65a56b4d9 Fairly major metadatapane reworking. It is now nextdoor to the items list.
-  Lots of work to be done. For example, the present way of showing a textbox is sort of a hack - taking a label, assigning certain properties to a textbox, then removing the label and placing the textbox in its place. I will be looking into our options.
   -  Also, I need to figure out adding/editing/deleting creators.
   -  When the textbox loses focus, it updates and saves the item (like iCal).

Date: removed Scholare.Date functions, as they are overkill. We can use the built-in Date.toLocaleString()
2006-06-06 19:53:27 +00:00
Dan Stillman
3aae8d3f89 Fix Scholar.getItems() to not trigger an SQL query for every item 2006-06-06 19:06:40 +00:00
Simon Kornblith
152c9bf9e7 - Small changes to MARC record support
- Implemented loadDocument API, for loading and parsing the DOMs of HTML documents in the background
- Added scraper code to SVN repository (now includes 12 scrapers, see Writeboard for details)

To update to the latest versions of all scrapers, ensure you have an up-to-date version of sqlite3, then run:
sqlite3 ~/Library/Application\ Support/Firefox/Profiles/profileName/scholar.sqlite < scrapers.sql
2006-06-06 18:25:45 +00:00
Dan Stillman
6c55e63eab Add ' et al.' to firstCreator field when more than one creator 2006-06-06 17:37:52 +00:00
Dan Stillman
60f7c8fccd Scholar.Items.search(text) -- (extremely) simple fulltext search on all fields -- returns an array of ids of matching items
The real search function will be considerably more advanced/flexible, but this should work as a placeholder for the moment. Probably quick enough for FAYT, at least with a ~0.5 second delay to avoid unnecessary calls while people are typing (which is probably a good idea anyway). This search doesn't use indexes at all, so if more speed is needed, one option would be to maintain a manual FULLTEXT-type index (using triggers, ideally) that could be quickly searched, but we'd lose intra-word filtering, which people would probably expect...
2006-06-06 08:02:29 +00:00
Dan Stillman
9675ac9d01 New function Scholar.Collection.changeParent([parentCollectionID]) -- move a collection into another collection in the DB
parentCollectionID is optional and defaults to moving item to root

Returns true on success, false on attempt to move collection into its existing parent, itself or a descendent collection; throws exception on invalid parentCollectionID

Sends a columnTree notify() with previous parent ID, id of collection itself, and new parent ID (unless the previous or new are the root, in which case it's omitted) -- that may or may not make sense for the interface code and can be changed if needed
2006-06-05 21:58:01 +00:00
Dan Stillman
b31be7af7e Put square brackets around ids in notifier debug output if multiple ids passed 2006-06-05 21:51:21 +00:00
David Norton
3796741911 Changed all references of 'folder' to 'collection' in code to correspond to database / dataacess nomenclature. 2006-06-05 18:01:53 +00:00
David Norton
560864ad6b Converted interface strings into localized entities/properties.
Fixed: New Item shows the metadata pane if it is not already shown.
2006-06-05 17:47:36 +00:00
David Norton
0a234c9f70 Implemented Scholar.Date, a group of functions for handling date formatting, etc. 2006-06-05 16:19:11 +00:00
David Norton
5411d4b67f Sorting on a colum: Much, much, much, better. (hope)fully implemented! 2006-06-05 15:49:11 +00:00
David Norton
56b1e37c13 New items are properly displayed on a notify()
New items are automatically selected.

When adding a new item, or editing an item without a creator, display an empty creator box.

Edit button changed from toggling to Save/Cancel buttons.
Simple "Do you want to save changes?" dialog if you select a different item while in edit mode.
2006-06-05 13:56:59 +00:00
David Norton
adfcc5cd73 Collection rename works (presently, using a somewhat awkward "rename collection" button)
Scholar Toolbar split into two (you can't really see much difference) - one for collections, one for items.
Scholar Toolbar moved above lists.
2006-06-05 13:08:16 +00:00
David Norton
c4d2e77b27 Interface: Add Collections (debugged to view properly)
Interface: Delete collection now reselects correctly.
2006-06-05 11:58:16 +00:00
Dan Stillman
d22d77fedf More helpful exceptions in itemFields methods when given an invalid fieldID or a fieldID with no associated itemTypes (neither should actually happen once things are set up right) 2006-06-04 19:37:03 +00:00
Dan Stillman
1d9fa85c15 Missing association of ISSN with journalArticle type -- added to sample data (thanks Simon) 2006-06-04 18:53:22 +00:00
Simon Kornblith
85d8153024 Add library, hooks for scraping MARC records. 2006-06-03 22:26:01 +00:00
Dan Stillman
bd840a4c58 Collection names must be non-empty -- interface side might follow iTunes behavior ('untitled playlist') here 2006-06-03 20:51:48 +00:00
Dan Stillman
e2c9ee0387 - Collection.rename(name) -- renames collection in DB
- Collection.add( name [, parentCollectionID] ) -- saves new collection in DB and returns new Collection object; defaults to root if parent not provided

	Currently some exceptions in folderTreeView.js when notified on collection add

- Added back Item.isCollection() and Collection.isCollection(), as they seem to still be used

- Collection._load() now takes optional ids for loading new collections
2006-06-03 20:41:23 +00:00
Dan Stillman
d01ff389d4 Use the Hash datatype in Notifier to store observers and improve debug output to display how many we have registered when trigger() is called 2006-06-03 20:26:31 +00:00
Dan Stillman
98f42001cc New function Scholar.getRandomID( table, column [, max] ) for getting unique random keys in a DB table, because auto_increments make me feel dirty -- max is optional and defaults to 16383 (which should store in 2 bytes in SQLite), but increases automatically if a unique id can't be found after 10 tries 2006-06-03 20:23:19 +00:00
Dan Stillman
bbbb243315 Accept 'null':true as bound parameter type 2006-06-03 20:06:57 +00:00
Simon Kornblith
93652a137c Fix issues with asynchronous scraping and XMLHttpRequest 2006-06-02 23:53:42 +00:00
David Norton
c42991a5bf Metadata now is much more compact when not being edited.
Close buttons on the Metadata and Notes.

The Collections list no longer throws an exception when the header is clicked.
More minor interface improvements.
2006-06-02 23:05:24 +00:00
Dan Stillman
c561ca129e Reverting r111 change to bound parameters for Item.erase() (minus the exception fix) -- bound parameters/multiple statements/no can do
Item deleting should work properly now
2006-06-02 21:11:14 +00:00
Dan Stillman
338bb54fdc Adjust flattenArguments() to properly handle scalar values -- so now it can be passed pretty much anything and just return a flattened array
Fixed typo in notifier debug() statement
2006-06-02 20:51:34 +00:00
Dan Stillman
013af36855 Fixed some issues with object reloading -- because of the way JS closures work, simply overwriting the old object doesn't work, since the interface code retains a reference to the old object -- in other words, a memory leak and stale data. Existing item objects now reload in place instead. Same change made to collections, though I'll have to test that after I add Collection editing and save().
This behavior of JS has some implications for how interface code handles things like deletes. The following won't do what one might expect/desire (and my apologies if this is obvious or redundant, but I figure it's worth pointing out):

var item = Scholar.Items.get(1);
Scholar.debug(item);
Scholar.DB.query("DELETE FROM items WHERE itemID=1");
Scholar.Items.reloadAll();
Scholar.debug(item);

The last line will still display the old object, even though _items[1] has been deleted inside Scholar.Items. The following does work, however:

var item = Scholar.Items.get(1);
Scholar.debug(item);
Scholar.DB.query("DELETE FROM items WHERE itemID=1");
Scholar.Items.reloadAll();
var item = Scholar.Items.get(1);
Scholar.debug(item);

Now item is properly undefined. Moral of the story: object references need to be deleted manually after receiving delete notifications, for if external code still has references to deleted data objects, the data layer can't do much about it.
2006-06-02 19:48:22 +00:00
Simon Kornblith
bb57e6ba7d Provide visual feedback for scraping 2006-06-02 18:22:34 +00:00
Dan Stillman
8f34487205 Fixed error in new item itemData insert (trying to bind across multiple statements) (yes we need unit tests)
Missing parens in Items._load() causing it to load all items in !all mode

Show type in debug output when binding params
2006-06-02 16:37:17 +00:00
Dan Stillman
60ada26e8d Delete from the right array when unregistered itemTrees 2006-06-02 15:41:11 +00:00
David Norton
f37ab47b39 Revised the way the ItemTreeView handles multiple-selection deletes.
Revised the way the dateAdded and dateModified columns are displayed.
Views are now unregistered on window close.

A few functions in overlay.js were renamed.
Began better commenting of the interface code.
2006-06-02 15:27:52 +00:00
David Norton
2a117168a9 Interface code for delete selected collection. (doesn't the function deleteCollectionSelection just sound great?)
Although I do not yet have interface code for it, collections do not have any sort of setName(), save() functions.
Collections list now implements notify()
2006-06-02 14:11:23 +00:00
David Norton
fdd8245eec Some experimentation with drag and drop (doesn't work yet)
Made some fixes on itemTreeView to allow for notify() on multiple deletes
	(shifts the row identifier up 1 for each previous delete, etc.)
	One more thing -- this might not happen because the tree calls each Item.erase() or Collection.removeItem() individually.
Bug fix on notifier.js so that register*Tree() actually returns the hash. :-)
	Unfortunately, unregister*Tree() does not seem to actually work, there is still an object at _observers['itemTree'][hash]
(temporary): When you select an item Scholar no longer loads a page into the browser.
	The javascript bugs on those HTML pages were frustrating the debugger.
2006-06-02 12:59:58 +00:00
Dan Stillman
bebf0f223a Fix exception when erasing items and switch to bound parameter 2006-06-02 07:11:54 +00:00
Dan Stillman
daa1a6e8a5 Fix debug message in Notifier to properly handle int or array for ids 2006-06-02 07:04:13 +00:00
Dan Stillman
a7d5685da7 Updated Item.save() to use bound parameters for most queries so that values are properly escaped (and for somewhat cleaner code) 2006-06-02 07:03:24 +00:00
Simon Kornblith
639a006efb XPCOM-ize ingester, fix swapped first and last name in ingested info, stop ingesting pages field (this should be for pages of the source used, not the total number of pages, right?) 2006-06-02 03:19:12 +00:00
Dan Stillman
864fa537b5 Last of the update triggers, I think 2006-06-02 01:17:44 +00:00
Dan Stillman
70630a2e70 - Change: Scholar.Notifier.trigger() can be passed an array of ids in some cases rather than a single id -- trees that implement notify() should use Scholar.flattenArguments(ids) to get an array either way
- Added Notifier triggers to Item.erase() (which only runs if not in a nested transaction) and Collections.erase()

- notify() in ItemTreeView updated with example of taking multiple ids, though it doesn't actually work (and notify() implementations may decide just to refresh the whole tree when ids.length>1 rather than dealing with changes individually)

- When deleting collections, use DB tables that actually exist
2006-06-01 22:19:21 +00:00
Dan Stillman
4e0dbb3885 DB.transactionInProgress() -- this generally shouldn't be needed externally, but due to nested transactions there can be cases where it's unavoidable 2006-06-01 22:04:09 +00:00
Dan Stillman
38d87463af Item.inCollection(collectionID) -- test if an item belongs to a given collection (currently uses a DB call--I'll optimize that later)
Scholar.Notifier framework to handle update notifications between data layer and interface

 - Notifier.registerColumnTree(ref) and Notifier.registerItemTree(ref) pass back a unique hash that can be used to unregister the tree later with unregister*(hash) (and must be, lest we leak treeViews and probably entire browser windows if the browser window is closed without unregistering the treeView)

 - Data layer calls Scholar.Notify.trigger(event, type, id) after various events (only two calls in the data layer at the moment--more coming later)

 - Notify.trigger() calls notify(event, type, id) on all registered trees of the appropriate type -- the data layer usually knows what collection the action pertains to, but we decided that it's cleaner to just let the tree decide what it wants to do rather than add all that logic into the data layer)

 (Note: Item collection adds appear to be buggy on the interface side, but removes seem to be working)
2006-06-01 20:03:53 +00:00
Dan Stillman
0d27815694 Scholar.randomString( [int len] ) -- generate a random string 2006-06-01 19:46:57 +00:00
David Norton
c2c0f0f614 "New Item..." fixed for new Metadatapane overlay.
Minor interface improvements.

(Revision 100!!!!!!!!!!!!!!!!!!)
2006-06-01 18:50:16 +00:00
Dan Stillman
024e1f78e3 Call varDump automatically in Scholar.debug() on non-strings -- no more nesting varDump() 2006-06-01 18:43:44 +00:00
David Norton
d65bf82e0e ItemTreeView now has support for receiving change events. (needs support on the data layer, and probably bug fixes).
(+ some cosmetic changes)
2006-06-01 17:54:41 +00:00
David Norton
c1241b608a Removed organizeWindow.xul/js (All this functionality is in overlay)
Removed view.xul/js/css (see above)
Enabled deletion (exception when deleting from library)
2006-06-01 16:40:43 +00:00
Dan Stillman
b9a5c7dc38 Fixed creators not getting inserted into itemCreators on new item save() 2006-06-01 07:29:39 +00:00
Simon Kornblith
551582eb7e Still getting the hang of Subversion...the rest of the ingester code 2006-06-01 06:53:39 +00:00
Dan Stillman
db1b85881c Scrapers table and sample scraper from Simon 2006-06-01 06:35:33 +00:00
David Norton
2be758e488 Updated trees to work with new setup. Some New Item functionality. etc. 2006-06-01 03:50:34 +00:00
Dan Stillman
03637a6c63 Updated schema for new collections ("projects"?) model and updated sample data accordingly; added a couple extra indexes; made 'rights' and 'source' regular metadata fields so that items can be used for things like notes
Overhauled data access layer to support new model:

	- Changed Item.getParent to Item.getCollections() to get ids of parent collections
	- Removed Item.setPosition() -- item positions are set internally when items are added to and deleted from collections, but the orderIndex is not currently used or manipulatable externally
	- Item constructor/Items.getNewItemByType()/Items.add() no longer take folderID and orderIndex as parameters
	- Split getTreeRows() into Scholar.getCollections(parent) and Scholar.getItems(parent), which return root collections or all library items, respectively, if no parent given
	- All references to folders in object/method/property names changed to collections
	- New methods Collection.addItem(itemID), Collection.hasItem(itemID), Collection.removeItem(itemID)
	- Collection.erase() takes optional deleteItems parameter to delete items from DB -- otherwise just removes association and leaves item in library (does, however, delete all descendent collections from DB regardless)

* Note: This will break displaying of items until interface code is updated. *
2006-06-01 00:22:18 +00:00
David Norton
041e607dd7 Some toggling options for the Scholar pane (persists). 2006-05-31 22:01:31 +00:00
David Norton
7f1d3edf69 Editing metadata works.
The metadata and notes panes are aligned along the right side of view.
The CSS and XUL for view.xul are now better structured.
2006-05-31 21:06:16 +00:00
David Norton
22cd938ecc Some new CSS placeholders once the designers start making this look good.
Scholar.TreeView is now Scholar.FolderTreeView (SourcesTreeView later? depends)
Some changes to the way FolderTreeView works.
New Scholar.ItemGroup -- used by FolderTreeView and ItemTreeView.
the root folder is not currently displayed -- doesn't really matter because we are changing the way it all works.
(note: the Scholar.Items.getAll() function does not seem to be working correctly -- try clicking on the library)
2006-05-31 20:29:46 +00:00
David Norton
a1ae5c13c9 View item interface prototype (click View, Metadata, Notes, to toggle.) Styles need a lot of work. 2006-05-31 17:50:33 +00:00
David Norton
233a2414e7 Some temporary viewing in-browser. 2006-05-30 22:06:33 +00:00
Dan Stillman
a4a1f9bd2b Looks like the name@domain format is indeed the recommended format for extension ids rather than GUIDs (thanks David). My bad.
Switching to scholar@chnm.gmu.edu -- SVN folks should rename the text file in their FF profile directories. (Used to be scholar@chnm, so you need to make the change even if you hadn't changed to the GUID yet.) Anyone who's tried the XPI yet will need to reinstall just once from the URL (http://chnm.gmu.edu/firefoxscholar/download/scholar-dev.xpi), as the old version won't find updates with its id.
2006-05-30 21:01:34 +00:00
David Norton
b7f78aa189 Drag and drop column reorder on items tree.
Some basic editing capabilities. (interface needs work, fixing).
2006-05-30 19:24:57 +00:00