made the sidebar display code more generic
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 12 Aug 2005 22:08:59 +0000 (22:08 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 12 Aug 2005 22:08:59 +0000 (22:08 +0000)
turned sidebars into UL's
added some style

git-svn-id: svn://svn.open-ils.org/ILS/trunk@1654 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/css/opac/opac.css
Open-ILS/src/extras/fieldmapper.pl
Open-ILS/src/javascript/lib/js/opac/RemoteRequest.js
Open-ILS/src/javascript/lib/js/opac/config.js
Open-ILS/src/javascript/lib/js/opac/dtree.js
Open-ILS/src/javascript/lib/js/opac/opac_utils.js
Open-ILS/src/javascript/lib/js/opac/result_common.js
Open-ILS/src/webxml/js_common.xml
Open-ILS/src/webxml/sidebar.xml

index 4aaf64a..27e5709 100644 (file)
@@ -36,7 +36,7 @@ body table            { font-size: inherit; }
 .sidebar_div { float: left; width: 19%; }
 .side_bar_item { padding-left: 15px; padding-right: 10px; padding-top: 5px; padding-bottom: 5px; }
 .sidebar_chunk {border-right: 1px solid lightgrey; margin-bottom: 2px;}
-.sidebar_extra_item { font-size: 95%; padding: 3px; }
+.sidebar_extra_item { font-size: 95%; padding: 2px; }
 .sidebar_extra_link { text-decoration: none; }
 .sidebar_header { margin-top: 10px; padding-left: 3px; }
 
index bd2deeb..d6cc5b3 100755 (executable)
@@ -47,7 +47,8 @@ for my $object (keys %$map) {
        }
        print "];\n";
 
-       print "fmclasses = _c;\n";
 
 }
 
+print "fmclasses = _c;\n";
+
index 9681d05..e7fff24 100644 (file)
@@ -45,38 +45,31 @@ function RemoteRequest( service, method ) {
 
        if(!this.params) { this.params = ""; }
        this.param_string = "service=" + service + "&method=" + method + this.params;
-
-       if( ! this.type || ! this.service || ! this.method ) {
-               alert( "ERROR IN REQUEST PARAMS");
-               return null;
-       }
-
-       if( this.buildXMLRequest() == null )
-               alert("NEWER BROWSER");
+       if( this.buildXMLRequest() == null ) alert("Browser is not supported!");
 }
 
 /* constructs our XMLHTTPRequest object */
 RemoteRequest.prototype.buildXMLRequest = function() {
 
+       var x;
        try { 
-               this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
+               x = new ActiveXObject("Msxml2.XMLHTTP"); 
        } catch (e) {
                try { 
-                       this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
+                       x = new ActiveXObject("Microsoft.XMLHTTP"); 
                } catch (E) {
-                       this.xmlhttp = false;
+                       x = false;
                }
        }
 
-       if (!this.xmlhttp && typeof XMLHttpRequest!='undefined') {
-               this.xmlhttp = new XMLHttpRequest();
-       }
+       if (!x && typeof XMLHttpRequest!='undefined') x = new XMLHttpRequest();
 
-       if(!this.xmlhttp) {
+       if(!x) {
                alert("NEEDS NEWER JAVASCRIPT for XMLHTTPRequest()");
                return null;
        }
 
+       this.xmlhttp = x;
        return true;
 }
 
@@ -129,13 +122,6 @@ RemoteRequest.prototype.setSecure = function(bool) {
        this.secure = bool; 
 }
 
-/** Send the request 
-  * By default, all calls are asynchronous.  if 'blocking' is
-  * set to true, then the call will block until a response
-  * is received.  If blocking, callbacks will not be called.
-  * In other words, you can assume the data is avaiable 
-  * (getResponseObject()) as soon as the send call returns. 
-  */
 RemoteRequest.prototype.send = function(blocking) {
 
        if(this.cancelled) return;
@@ -186,26 +172,17 @@ RemoteRequest.prototype.isReady = function() {
 
 /* returns the JSON->js result object  */
 RemoteRequest.prototype.getResultObject = function() {
-       //this.callback = null;
        if(this.cancelled) return null;
 
        var text = this.xmlhttp.responseText;
        var obj = JSON2js(text);
 
-       if(obj == null) {
-               return null;
-       }
-
-       if(obj.is_err) { 
-               throw new EXCommunication(obj.err_msg); 
-       }
-
-       if( obj[0] != null && obj[1] == null ) 
-               obj = obj[0];
+       if(obj == null) return null;
+       if(obj.is_err)  throw new EXCommunication(obj.err_msg); 
+       if( obj[0] != null && obj[1] == null ) obj = obj[0];
 
        /* these are user level exceptions from the server code */
        if(instanceOf(obj, ex)) {
-               /* the opac will go ahead and spit out the error msg */
                if(!isXUL()) alert(obj.err_msg());
                throw obj;
        }
index efe3538..4c0f82c 100644 (file)
@@ -69,7 +69,6 @@ function clearUIObjects() {
 }
 
 
-
 /* ---------------------------------------------------------------------------- */
 /* Set up ID's and CSS classes */
 /* ---------------------------------------------------------------------------- */
@@ -80,11 +79,11 @@ config.ids = {};
 config.names = {};
 
 config.ids.common = {};
-config.ids.common.loading              = "loading_div";                /* generic 'loading..' message */
-config.ids.common.canvas               = "canvas";                             /* outer UI canvas that holds the main canvas and any other hidden help components*/    
-config.ids.common.canvas_main  = "canvas_main";                /* main data display canvas */
-config.ids.common.org_tree             = "org_tree";                   /* org tree selector thingy */
-config.ids.common.org_container        = "org_container";                      /* org tree selector thingy */
+config.ids.common.loading              = "loading_div";                
+config.ids.common.canvas               = "canvas";                             
+config.ids.common.canvas_main  = "canvas_main";                
+config.ids.common.org_tree             = "org_tree";                   
+config.ids.common.org_container        = "org_container";
 
 config.css = {};
 config.css.hide_me = "hide_me";
@@ -100,7 +99,6 @@ config.page[RRESULT]         = "/webxml/rresult.xml";
 config.page[MYOPAC]            = "/webxml/myopac/index.xml";
 config.page[RDETAIL]           = "/webxml/rdetail.xml";
 
-
 /* mresult */
 config.ids.mresult = {};
 
@@ -140,7 +138,6 @@ config.ids.login.button             = "login_button";
 config.ids.login.cancel                = "login_cancel_button";
 
 
-
 /* searchbar ids and css */
 config.ids.searchbar = {};
 config.css.searchbar = {};
index 7b24718..5324b3e 100644 (file)
@@ -9,7 +9,6 @@
 | Updated: 17.04.2003                               |
 |--------------------------------------------------*/
 
-// Node object
 function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
        this.id = id;
        this.pid = pid;
@@ -27,7 +26,6 @@ function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
        this._p;
 };
 
-// Tree object
 function dTree(objName) {
        this.config = {
                target                                  : null,
@@ -65,12 +63,10 @@ function dTree(objName) {
        this.completed = false;
 };
 
-// Adds a new node to the node array
 dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) {
        this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
 };
 
-// Open/close all nodes
 dTree.prototype.openAll = function() {
        this.oAll(true);
 };
@@ -78,7 +74,6 @@ dTree.prototype.closeAll = function() {
        this.oAll(false);
 };
 
-// Outputs the tree to the page
 dTree.prototype.toString = function() {
        var str = '<div class="dtree">\n';
        if (document.getElementById) {
@@ -91,7 +86,6 @@ dTree.prototype.toString = function() {
        return str;
 };
 
-// Creates the tree structure
 dTree.prototype.addNode = function(pNode) {
        var str = '';
        var n=0;
@@ -117,7 +111,6 @@ dTree.prototype.addNode = function(pNode) {
        return str;
 };
 
-// Creates the node icon, url and text
 dTree.prototype.node = function(node, nodeId) {
        var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
        if (this.config.useIcons) {
@@ -152,7 +145,6 @@ dTree.prototype.node = function(node, nodeId) {
        return str;
 };
 
-// Adds the empty and line icons
 dTree.prototype.indent = function(node, nodeId) {
        var str = '';
        if (this.root.id != node.pid) {
@@ -169,7 +161,6 @@ dTree.prototype.indent = function(node, nodeId) {
        return str;
 };
 
-// Checks if a node has any children and if it is the last sibling
 dTree.prototype.setCS = function(node) {
        var lastId;
        for (var n=0; n<this.aNodes.length; n++) {
@@ -179,13 +170,11 @@ dTree.prototype.setCS = function(node) {
        if (lastId==node.id) node._ls = true;
 };
 
-// Returns the selected node
 dTree.prototype.getSelected = function() {
        var sn = this.getCookie('cs' + this.obj);
        return (sn) ? sn : null;
 };
 
-// Highlights the selected node
 dTree.prototype.s = function(id) {
        if (!this.config.useSelection) return;
        var cn = this.aNodes[id];
@@ -202,7 +191,6 @@ dTree.prototype.s = function(id) {
        }
 };
 
-// Toggle Open or close
 dTree.prototype.o = function(id) {
        var cn = this.aNodes[id];
        this.nodeStatus(!cn._io, id, cn._ls);
@@ -211,7 +199,6 @@ dTree.prototype.o = function(id) {
        if (this.config.useCookies) this.updateCookie();
 };
 
-// Open or close all nodes
 dTree.prototype.oAll = function(status) {
        for (var n=0; n<this.aNodes.length; n++) {
                if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
@@ -222,7 +209,6 @@ dTree.prototype.oAll = function(status) {
        if (this.config.useCookies) this.updateCookie();
 };
 
-// Opens the tree to a specific node
 dTree.prototype.openTo = function(nId, bSelect, bFirst) {
        if (!bFirst) {
                for (var n=0; n<this.aNodes.length; n++) {
@@ -242,7 +228,6 @@ dTree.prototype.openTo = function(nId, bSelect, bFirst) {
        this.openTo(cn._p._ai, false, true);
 };
 
-// Closes all nodes on the same level as certain node
 dTree.prototype.closeLevel = function(node) {
        for (var n=0; n<this.aNodes.length; n++) {
                if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc) {
@@ -253,7 +238,6 @@ dTree.prototype.closeLevel = function(node) {
        }
 }
 
-// Closes all children of a node
 dTree.prototype.closeAllChildren = function(node) {
        for (var n=0; n<this.aNodes.length; n++) {
                if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc) {
@@ -264,7 +248,6 @@ dTree.prototype.closeAllChildren = function(node) {
        }
 }
 
-// Change the status of a node(open or closed)
 dTree.prototype.nodeStatus = function(status, id, bottom) {
        eDiv    = document.getElementById('d' + this.obj + id);
        eJoin   = document.getElementById('j' + this.obj + id);
@@ -279,7 +262,6 @@ dTree.prototype.nodeStatus = function(status, id, bottom) {
 };
 
 
-// [Cookie] Clears a cookie
 dTree.prototype.clearCookie = function() {
        var now = new Date();
        var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
@@ -287,7 +269,6 @@ dTree.prototype.clearCookie = function() {
        this.setCookie('cs'+this.obj, 'cookieValue', yesterday);
 };
 
-// [Cookie] Sets value in a cookie
 dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
        document.cookie =
                escape(cookieName) + '=' + escape(cookieValue)
@@ -297,7 +278,6 @@ dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, dom
                + (secure ? '; secure' : '');
 };
 
-// [Cookie] Gets a value from a cookie
 dTree.prototype.getCookie = function(cookieName) {
        var cookieValue = '';
        var posName = document.cookie.indexOf(escape(cookieName) + '=');
@@ -310,7 +290,6 @@ dTree.prototype.getCookie = function(cookieName) {
        return (cookieValue);
 };
 
-// [Cookie] Returns ids of open nodes as a string
 dTree.prototype.updateCookie = function() {
        var str = '';
        for (var n=0; n<this.aNodes.length; n++) {
@@ -322,7 +301,6 @@ dTree.prototype.updateCookie = function() {
        this.setCookie('co' + this.obj, str);
 };
 
-// [Cookie] Checks if a node id is in a cookie
 dTree.prototype.isOpen = function(id) {
        var aOpen = this.getCookie('co' + this.obj).split('.');
        for (var n=0; n<aOpen.length; n++)
@@ -330,7 +308,6 @@ dTree.prototype.isOpen = function(id) {
        return false;
 };
 
-// If Push and pop is not implemented by the browser
 if (!Array.prototype.push) {
        Array.prototype.push = function array_push() {
                for(var i=0;i<arguments.length;i++)
index 632b040..93eb77e 100644 (file)
@@ -16,10 +16,6 @@ Request.prototype.send               = function(block){this.request.send(block);}
 Request.prototype.result       = function(){return this.request.getResultObject();}
 /* ----------------------------------------------------------------------- */
 
-
-/* ----------------------------------------------------------------------- */
-/* Functions for showing the canvas (and hiding any other shown stuff) */
-/* ----------------------------------------------------------------------- */
 function showCanvas() { setTimeout(_showCanvas, 200); }
 function _showCanvas() {
        for( var x in G.ui.altcanvas ) {
@@ -27,10 +23,9 @@ function _showCanvas() {
        }
        hideMe(G.ui.common.loading);
        unHideMe(G.ui.common.canvas_main);
-       G.ui.searchbar.text.focus(); /* focus the searchbar */
+       G.ui.searchbar.text.focus(); 
 }
 
-
 var newCanvasNode;
 function swapCanvas(newNode) { newCanvasNode = newNode; setTimeout(_swapCanvas, 200); }
 function _swapCanvas() {
@@ -41,8 +36,6 @@ function _swapCanvas() {
        hideMe(G.ui.common.canvas_main);
        unHideMe(newCanvasNode);
 }
-/* ----------------------------------------------------------------------- */
-
 
 /* finds the name of the current page */
 function findCurrentPage() {
@@ -60,8 +53,7 @@ function findCurrentPage() {
 
 
 /* builds an opac URL.  If no page is defined, the current page is used
-       if slim, then only everything after the ? is returned (no host portion)
- */
+       if slim, then only everything after the ? is returned (no host portion) */
 function  buildOPACLink(args, slim) {
 
        if(!args) args = {};
@@ -100,30 +92,15 @@ function _appendParam( fieldVar, fieldName, overrideArgs, getFunc, string ) {
 }
 
 
-
-
-
-/* ----------------------------------------------------------------------- */
-/* some useful exceptions */
 function EX(message) { this.init(message); }
-
-EX.prototype.init = function(message) {
-   this.message = message;
-}
-
-EX.prototype.toString = function() {
-   return "\n *** Exception Occured \n" + this.message;
-}  
-
+EX.prototype.init = function(message) { this.message = message; }
+EX.prototype.toString = function() { return "\n *** Exception Occured \n" + this.message; }  
 EXCommunication.prototype              = new EX();
 EXCommunication.prototype.constructor  = EXCommunication;
 EXCommunication.baseClass              = EX.prototype.constructor;
+function EXCommunication(message) { this.init("EXCommunication: " + message); }                          
 
-function EXCommunication(message) {
-   this.init("EXCommunication: " + message);
-}                          
 /* ----------------------------------------------------------------------- */
-
 function cleanISBN(isbn) {
    if(isbn) {
       isbn = isbn.toString().replace(/^\s+/,"");
@@ -136,7 +113,6 @@ function cleanISBN(isbn) {
 
 
 
-/* ----------------------------------------------------------------------- */
 /* builds a link that goes to the title listings for a metarecord */
 function buildTitleLink(rec, link) {
        if(!rec) return;
@@ -171,17 +147,13 @@ function buildSearchLink(type, string, linknode, trunc) {
        linknode.setAttribute("href", buildOPACLink(args));
 }
 
-/* ----------------------------------------------------------------------- */
-
-
 
 /* ----------------------------------------------------------------------- */
 /* user session handling */
 /* ----------------------------------------------------------------------- */
 
 /* session is the login session.  If no session is provided, we attempt
-       to find one in the cookies.  
-       If 'force' is true we retrieve the 
+       to find one in the cookies.  If 'force' is true we retrieve the 
        user from the server even if there is already a global user present.
        if ses != G.user.session, we also force a grab */
 var cookie = new cookieObject("ses", 1, "/", COOKIE_SES);
@@ -194,7 +166,6 @@ function grabUser(ses, force) {
                if(G.user && G.user.session == ses)
                        return G.user;
 
-
        /* first make sure the session is valid */
        var request = new Request(FETCH_SESSION, ses );
        request.send(true);
index d0e844c..2e4649d 100644 (file)
@@ -158,7 +158,6 @@ function resultAddCopyCounts(countsrow, rec) {
        }
 
        return 100 - (nodes.length * 8);
-
 }
 
 /* collect copy counts for a record using method 'methodName' */
@@ -187,74 +186,48 @@ function resultDisplayCopyCounts(rec, copy_counts) {
 }
 
 function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
-
 function resultDrawSubjects() {
-
        var subjs = [];
        for( var s in subjectCache )
                subjs.push( { sub : s, count : subjectCache[s] } );
        subjs.sort(resultSortSubjects);
 
-       var template = G.ui.sidebar.subject.removeChild(G.ui.sidebar.subject_item);
-       var x = 0;
-       var newnode = template.cloneNode(true);
-
-       var found = false;
-       for( var s in subjs ) {
-               if(isNull(subjs[s])) continue;
-               if(x++ > 7) break;
-               buildSearchLink(STYPE_SUBJECT, subjs[s].sub, 
-                       findNodeByName(newnode, config.names.sidebar.subject_item), 30);
-               G.ui.sidebar.subject.appendChild(newnode);
-               newnode = template.cloneNode(true);
-               found = true;
-       }
-       if(found) unHideMe(G.ui.sidebar.subject);
+       var ss = [];
+       for( var s in subjs ) ss.push(subjs[s].sub);
+       resultDrawSidebarStuff(STYPE_SUBJECT, G.ui.sidebar.subject_item,  
+               config.names.sidebar.subject_item, ss, G.ui.sidebar.subject);
 }
 
 function resultDrawAuthors() {
-
-       var template = G.ui.sidebar.author.removeChild(G.ui.sidebar.author_item);
-       var x = 0;
-       var newnode = template.cloneNode(true);
-
        var auths = new Array();
        for( var s in authorCache ) auths.push(s);
-       auths = auths.sort();
-
-       var found = false;
-       for( var i in auths ) {
-               if(isNull(auths[i])) continue;
-               if(x++ > 7) break;
-               buildSearchLink(STYPE_AUTHOR, auths[i], findNodeByName(newnode, config.names.sidebar.author_item), 30);
-               G.ui.sidebar.author.appendChild(newnode);
-               newnode = template.cloneNode(true);
-               found = true;
-       }
-       if(found) unHideMe(G.ui.sidebar.author);
+       resultDrawSidebarStuff(STYPE_AUTHOR, G.ui.sidebar.author_item,  
+               config.names.sidebar.author_item, auths.sort(), G.ui.sidebar.author);
 }
 
-
 function resultDrawSeries() {
-       var template = G.ui.sidebar.series.removeChild(G.ui.sidebar.series_item);
-       var x = 0;
-       var newnode = template.cloneNode(true);
-
        var sers = new Array();
        for( var s in seriesCache ) sers.push(s);
-       sers = sers.sort();
+       resultDrawSidebarStuff(STYPE_SERIES, G.ui.sidebar.series_item,  
+               config.names.sidebar.series_item, sers.sort(), G.ui.sidebar.series);
+}
 
+/* search type, template node, href link name, array of text, node to unhide */
+function resultDrawSidebarStuff(stype, node, linkname, items, wrapperNode) {
+       var parent = node.parentNode;
+       var template = parent.removeChild(node);
+       var x = 0;
+       var newnode = template.cloneNode(true);
        var found = false;
-       for( var i in sers ) {
-               if(isNull(sers[i])) continue;
+       for( var i in items ) {
+               if(isNull(items[i])) continue;
                if(x++ > 7) break;
-               buildSearchLink(STYPE_SERIES, sers[i], findNodeByName(newnode, config.names.sidebar.series_item), 30);
-               G.ui.sidebar.series.appendChild(newnode);
+               buildSearchLink(stype, items[i], findNodeByName(newnode, linkname), 100);
+               parent.appendChild(newnode);
                newnode = template.cloneNode(true);
                found = true;
        }
-       if(found) unHideMe(G.ui.sidebar.series);
-
+       if(found) unHideMe(wrapperNode);
 }
 
 
index 0a1c29c..c130adc 100644 (file)
 
        <script language='javascript' src='/lib/js/opac/dtree.js'> </script>
 
+
        <script language='javascript' src='/lib/js/opac/init.js'> </script>
        <script language='javascript' src='/lib/js/opac/opac_utils.js'> </script>
        <script language='javascript' src='/lib/js/opac/RemoteRequest.js'> </script>
        <script language='javascript' src='/lib/js/opac/JSON.js'> </script>
-       <script language='javascript' src='/lib/js/opac/web_fieldmapper.js'> </script>
+
+       <script language='javascript' src='/lib/js/opac/fmcore.js'> </script>
+       <script language='javascript' src='/lib/js/opac/fmgen.js'> </script>
+
        <script language='javascript' src='/lib/js/opac/OrgTree.js'> </script>
        <script language='javascript' src='/lib/js/opac/added_content.js'> </script>
 
index e4de48e..1e351fc 100644 (file)
 
        <div id='subject_sidebar' class='sidebar_chunk hide_me'> 
                <div class='sidebar_header color_1'>&sidebar.relevantSubjects.headerLabel;</div>
-               <div id='subject_item' class='sidebar_extra_item'><a class='sidebar_extra_link' name='subject_item'> </a></div>
+               <ul style='margin-left: 1em; padding-left: 1em;'>
+                       <li id='subject_item' class='sidebar_extra_item'><a class='sidebar_extra_link' name='subject_item'> </a></li>
+               </ul>
        </div>
 
        <div id='author_sidebar' class='sidebar_chunk hide_me'> 
                <div class='sidebar_header color_1'>&sidebar.relevantAuthors.headerLabel;</div>
-               <div id='author_item' class='sidebar_extra_item'><a class='sidebar_extra_link' name='author_item'> </a></div>
+               <ul style='margin-left: 1em; padding-left: 1em;'>
+                       <li id='author_item' class='sidebar_extra_item'><a class='sidebar_extra_link' name='author_item'> </a></li>
+               </ul>
        </div>
 
        <div id='series_sidebar' class='sidebar_chunk hide_me'> 
                <div class='sidebar_header color_1'>&sidebar.relevantSeries.headerLabel;</div>
-               <div id='series_item' class='sidebar_extra_item'><a class='sidebar_extra_link' name='series_item'> </a></div>
+               <ul style='margin-left: 1em; padding-left: 1em;'>
+                       <li id='series_item' class='sidebar_extra_item'><a class='sidebar_extra_link' name='series_item'> </a></li>
+               </ul>
        </div>