|
|
- // Project: Web Reference Database (refbase) <http://www.refbase.net>
- // Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
- // original author(s).
- //
- // This code is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY. Please see the GNU General Public
- // License for more details.
- //
- // File: ./javascript/common.js
- // Repository: $HeadURL$
- // Author(s): Matthias Steffens <mailto:refbase@extracts.de> and
- // Richard Karnesky <mailto:karnesky@gmail.com>
- //
- // Created: 26-Aug-08, 21:10
- // Modified: $Date: 2008-10-27 23:58:27 +0000 (Mon, 27 Oct 2008) $
- // $Author$
- // $Revision: 1277 $
-
- // This file contains common JavaScript functions that are used
- // within the refbase interface.
-
-
- // ------------------------------------------------------------------
-
- // Select (or deselect) all checkboxes (of 'name=formpart') on a page:
- function checkall(val, formpart) {
- var x = 0;
- while(document.queryResults.elements[x]) {
- if(document.queryResults.elements[x].name == formpart) {
- document.queryResults.elements[x].checked = val;
- }
- x++;
- }
- toggleRadio('allRecs', 'selRecs', val);
- }
-
- // ------------------------------------------------------------------
-
- // Show or hide the element with the given 'id':
- function toggleVisibility(id, imgid, txtid, txt, upd) {
- var e = document.getElementById(id);
- var i = document.getElementById(imgid);
- var t = document.getElementById(txtid);
- var upd;
- if (upd === undefined) upd = true;
- if (e.style.display == 'block' || e.style.display == '') {
- if (upd) e.style.display = 'none';
- i.src = 'img/closed.gif';
- t.innerHTML = txt;
- }
- else {
- if (upd) e.style.display = 'block';
- i.src = 'img/open.gif';
- t.innerHTML = '';
- }
- }
-
- // ------------------------------------------------------------------
-
- // Show or hide the element with the given 'id' using a slide effect:
- // TODO: figure out how to invoke the changes to the toggle image & text
- // (done via function 'toggleVisibility()') only *after* the slide
- // effect has been finished
- //
- // Requires the Prototype & script.aculo.us JavaScript frameworks:
- // <http://www.prototypejs.org/> and <http://script.aculo.us/>
- //
- // More info about 'Effect.toggle':
- // <http://github.com/madrobby/scriptaculous/wikis/effect-toggle>
- function toggleVisibilitySlide(id, imgid, txtid, txt) {
- Effect.toggle(id, 'blind', {duration:0.4});
- toggleVisibility(id, imgid, txtid, txt, false);
- }
-
- // ------------------------------------------------------------------
-
- // Select one of two radio buttons (and deselect the other):
- // ('val=true' selects radio button 'id2' and deselects 'id1')
- function toggleRadio(id1, id2, val) {
- document.getElementById(id1).checked = !(val);
- document.getElementById(id2).checked = val;
- }
-
- // ------------------------------------------------------------------
-
- // Update the state of the "All Found Records" & "Selected Records"
- // radio buttons based on whether any records where marked on a page:
- function updateAllRecs() {
- var val=!eval("document.getElementById('allRecs').checked");
- var x=0;
- var checked=0;
- while(document.queryResults.elements[x]) {
- if(document.queryResults.elements[x].name == "marked[]") {
- if (eval("document.queryResults.elements[x].checked")) {
- checked++;
- }
- }
- x++;
- }
- if (checked>0) {
- val=true;
- } else {
- val=false;
- }
- toggleRadio('allRecs', 'selRecs', val);
- }
-
- // ------------------------------------------------------------------
-
- // This is the callback function that gets called by the script.aculo.us
- // 'Ajax.Autocompleter'. If it makes sense, this function modifies the suggest
- // query such that the given search term ('entry') is prefixed with a CQL index
- // ('selectedField') and a default relation ('all').
- //
- // Requires the Prototype & script.aculo.us JavaScript frameworks:
- // <http://www.prototypejs.org/> and <http://script.aculo.us/>
- //
- // More info about 'Ajax.Autocompleter':
- // <http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter>
- function addCQLIndex(element, entry) {
- // NOTE: this 'if' block is a hack, see note above function 'buildSuggestElements()'
- // in 'include.inc.php'
- if (entry.match(/^(id|col)-\w+-\w+=/) != null) {
- if (entry.match(/^id-\w+-\w+=/) != null) {
- // extract the ID of the HTML form element that contains the selected field:
- var selectedFieldID = entry.replace(/^id-(\w+)-\w+=.*/, "$1");
- // get the the name of the field that's currently selected in the
- // specified HTML form element:
- var selectedField = document.getElementById(selectedFieldID).value;
- }
- else if (entry.match(/^col-\w+-\w+=/) != null) {
- // extract the column/field name (that was passed literally):
- var selectedField = entry.replace(/^col-(\w+)-\w+=.*/, "$1");
- }
- // re-establish the correct query parameter name & value:
- entry = entry.replace(/^(id|col)-\w+-/, "");
- }
- else
- var selectedField = "keywords"; // fallback
- // NOTES: - we may need to exclude the 'abstract' index here until there's a smarter
- // solution to present search suggestions from the abstract (currently, for
- // each match, full or partial sentences from the abstract will be returned)
- // - ATM, the special index 'main_fields' only works for search suggestions
- var CQLIndexes = " author title type year publication abbrev_journal volume issue"
- + " pages keywords abstract address corporate_author thesis publisher"
- + " place editor language summary_language orig_title series_editor"
- + " series_title abbrev_series_title series_volume series_issue"
- + " edition issn isbn medium area expedition conference notes"
- + " approved location call_number serial marked copy selected"
- + " user_keys user_notes user_file user_groups cite_key related"
- + " file url doi contribution_id online_publication online_citation"
- + " orig_record created_by modified_by main_fields ";
- if (CQLIndexes.search("\\b" + selectedField + "\\b") > 0)
- entry = entry.replace("=", "=" + selectedField + "%20all%20");
- return entry;
- }
-
- // ------------------------------------------------------------------
|