--- /dev/null
+sdump('D_TRACE','Loading paged_tree.js\n');
+
+function paged_tree_init(p) {
+ sdump('D_PAGED_TREE',"TESTING: paged_tree.js: " + mw.G['main_test_variable'] + '\n');
+
+ p.w.display_count = 5;
+ p.w.current_idx = 0;
+
+ p.w.results_label = get_widget( p.w.document, p.nav_results );
+ p.w.range_label = get_widget( p.w.document, p.nav_range );
+ p.w.next_button = get_widget( p.w.document, p.nav_next );
+ p.w.prev_button = get_widget( p.w.document, p.nav_prev );
+
+ var cmd_next = get_widget( p.w.document, 'cmd_next' );
+ cmd_next.addEventListener(
+ 'command',
+ function (ev) {
+ return paged_tree_nav_next(p);
+ },
+ false
+ );
+
+ var cmd_prev = get_widget( p.w.document, 'cmd_prev' );
+ cmd_prev.addEventListener(
+ 'command',
+ function (ev) {
+ return paged_tree_nav_prev(p);
+ },
+ false
+ );
+
+ p.w.tree = get_widget(p.w.document,p.paged_tree);
+ p.w.treecols = p.w.tree.firstChild;
+ p.w.tc = p.w.tree.lastChild;
+
+ paged_tree_make_columns( p, p.w.treecols, p.cols )
+
+ p.w.add_rows = function (ids) { return paged_tree_add_rows(p,p.w.tc,ids); }
+
+ p.w.register_flesh_row_function = function (f) { p.w._flesh_row_function = f; }
+
+ p.w.register_select_callback = function (f) { p.w._select_callback = f; }
+
+ p.w.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
+
+ if (p.onload) {
+ try {
+ sdump('D_TRACE','trying psuedo-onload...\n');
+ p.onload(p.w);
+ } catch(E) {
+ sdump('D_ERROR', js2JSON(E) + '\n' );
+ }
+ }
+}
+
+function paged_tree_make_columns( p, treecols, cols ) {
+ sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
+ var d = p.w.document;
+ // cols[ idx ] = { 'id':???, 'label':???, 'primary':???, 'flex':??? }
+ for (var i = 0; i < cols.length; i++) {
+ var col = cols[i];
+ sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
+ var treecol = d.createElement( 'treecol' );
+ treecols.appendChild( treecol );
+ for (var j in col) {
+ treecol.setAttribute( j, col[j] );
+ }
+ }
+ return treecols;
+}
+
+function paged_tree_add_rows( p, tc, ids ) {
+ sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
+ var d = p.w.document;
+ var offset = 0;
+ if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
+ for (var i = 0; i < ids.length; i++) {
+ var id = ids[i];
+
+ var treeitem = d.createElement( 'treeitem' );
+ treeitem.setAttribute( 'id', i+offset+1 );
+ treeitem.setAttribute( 'record_id', id );
+ treeitem.setAttribute( 'retrieved', 'false' );
+ if ( (i+offset) < (p.w.display_count + p.w.current_idx) ) {
+ treeitem.setAttribute( 'hidden', 'false' );
+ } else {
+ treeitem.setAttribute( 'hidden', 'true' );
+ }
+ tc.appendChild( treeitem );
+
+ var treerow = d.createElement( 'treerow' );
+ treeitem.appendChild( treerow );
+
+ for (var j = 0; j < p.w.treecols.length; j++) {
+ var treecell = d.createElement( 'treecell' );
+ treecell.setAttribute('label', 'Retrieving...' );
+ treerow.appendChild( treecell );
+ }
+ }
+ paged_tree_update_visibility( p );
+ paged_tree_update_nav( p );
+ paged_tree_flesh_records( p );
+}
+
+function paged_tree_flesh_record(p,treeitem) {
+ treeitem.setAttribute('retrieved','true');
+ if (p.w._flesh_row_function) {
+ p.w._flesh_row_function( treeitem );
+ }
+}
+
+function paged_tree_flesh_records(p) {
+ for (var i = 0; i < p.w.tc.childNodes.length; i++) {
+ var treeitem = p.w.tc.childNodes[i];
+ if ( (treeitem.hidden == false) && (treeitem.getAttribute('retrieved')=='false') ) {
+ paged_tree_flesh_record(p,treeitem);
+ }
+ }
+}
+
+function paged_tree_update_nav(p) {
+ if (p.w.results_label)
+ p.w.results_label.setAttribute('value', p.w.tc.childNodes.length );
+
+ var min = p.w.current_idx + 1;
+ var max = p.w.current_idx + p.w.display_count;
+ if (max > p.w.tc.childNodes.length)
+ max = p.w.tc.childNodes.length;
+ if (p.w.range_label)
+ p.w.range_label.setAttribute('value', min + ' - ' + max );
+
+ if (p.w.next_button) {
+ if (max < p.w.tc.childNodes.length)
+ p.w.next_button.disabled = false;
+ else
+ p.w.next_button.disabled = true;
+ }
+
+ if (p.w.prev_button) {
+ if (min == 1)
+ p.w.prev_button.disabled = true;
+ else
+ p.w.prev_button.disabled = false;
+ }
+}
+
+function paged_tree_update_visibility(p) {
+ for (var i = 0; i < p.w.tc.childNodes.length; i++) {
+ var treeitem = p.w.tc.childNodes[i];
+ if ( (i >= p.w.current_idx) && (i < (p.w.current_idx+p.w.display_count)) )
+ treeitem.hidden = false;
+ else
+ treeitem.hidden = true;
+ }
+}
+
+function paged_tree_nav_next(p) {
+ var proposed_idx = p.w.current_idx + p.w.display_count;
+ if (proposed_idx >= p.w.tc.childNodes.length)
+ proposed_idx = p.w.tc.childNodes.length - 1;
+ p.w.current_idx = proposed_idx;
+ paged_tree_update_visibility(p);
+ paged_tree_update_nav(p);
+ paged_tree_flesh_records(p);
+}
+
+function paged_tree_nav_prev(p) {
+ var proposed_idx = p.w.current_idx - p.w.display_count;
+ if (proposed_idx < 0)
+ proposed_idx = 0;
+ p.w.current_idx = proposed_idx;
+ paged_tree_update_visibility(p);
+ paged_tree_update_nav(p);
+ paged_tree_flesh_records(p);
+}
+
--- /dev/null
+<?xml version="1.0"?>
+<!-- Clamlication: Evergreen Staff Client -->
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/paged_tree.dtd">
+
+<page id="paged_tree_win"
+ orient="vertical" style="overflow: auto" width="800" height="500"
+ sizemode="maximized" persist="width height"
+ onload="
+ params.paged_tree = 'PagedTree_tree';
+ params.nav_range = 'PagedTree_label_range';
+ params.nav_results = 'PagedTree_label_results';
+ params.nav_next = 'PagedTree_button_next';
+ params.nav_prev = 'PagedTree_button_prev';
+ params.w = window;
+ params.app = 'PagedTree';
+ mw.OpenILS_init(params);"
+ onunload="mw.OpenILS_exit(params);"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <!-- Stylesheets -->
+ <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+ <?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+ <?xml-stylesheet href="chrome://evergreen/skin/paged_tree.css" type="text/css"?>
+
+ <!-- Overlays for this XUL file -->
+ <?xul-overlay href="chrome://evergreen/content/main/paged_tree_overlay.xul"?>
+
+ <!-- XUL'ified abstraction for logic to attach to widgets -->
+ <commandset id="PagedTree_cmds" />
+
+ <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+ <keyset id="PagedTree_keys" />
+
+ <!-- Layout to be filled in by overlays and javascript -->
+ <box id="PagedTree_main" />
+
+</page>
+
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/paged_tree.dtd">
+<overlay id="paged_tree_overlay"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<commandset id="PagedTree_cmds">
+
+ <command id="cmd_prev" />
+
+ <command id="cmd_next" />
+
+ <command id="cmd_broken" oncommand="
+ alert('Not Yet Implemented'); "/>
+
+</commandset>
+
+<!-- main widget for paged_tree -->
+<box id="PagedTree_main" flex="1" orient="vertical">
+ <hbox id="PagedTree_nav">
+ <label value="&displaying.results;"/>
+ <label id="PagedTree_label_range" value="??? - ???" />
+ <label value="&displaying.of;"/>
+ <label id="PagedTree_label_results" value="???"/>
+ <spacer flex="1"/>
+ <button id="PagedTree_button_prev" label="&previous.range;" accesskey="&previous.range.key;" command="cmd_prev" disabled="true"/>
+ <button id="PagedTree_button_next" label="&next.range;" accesskey="&next.range.key;" command="cmd_next" disabled="true"/>
+ </hbox>
+ <tree id="PagedTree_tree" flex="1">
+ <treecols id="PagedTree_columns"/>
+ <treechildren id="PagedTree_children"/>
+ </tree>
+</box>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="PagedTree_keys">
+</keyset>
+
+</overlay>