You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

158 lines
6.2 KiB

// 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;
}
// ------------------------------------------------------------------