blob: 61443fd67db3e0a7a81808af05e235d2f6e2ebf4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* This global variable is used to allow the user, by clicking the mouse, to "hold" the info frame (the frame that
* displays the annotation information. When this variable is set to true, the info frame will not be updated.
*/
var holdInfoFrame = false;
/*
* Initializes the annotation viewer
*/
function init()
{
var doc = parent.frames["infoFrame"].document;
doc.open();
//write stylesheet reference
doc.write('<link rel="StyleSheet" href="annotations.css" type="text/css" media="screen">');
//write "Annotations" heading
doc.write("<h2>Annotations</h2><br>");
}
/*
* Clears the info frame of all annotation information.
*/
function clearInfoFrame()
{
if (!holdInfoFrame)
{
var doc = parent.frames["infoFrame"].document;
//clear info frame
var node = doc.getElementsByTagName("body")[0];
// remove all the entries in the <body> tag
while (node.firstChild) {
node.removeChild(node.firstChild);
}
//write back the "Annotations" heading
doc.write("<h2>Annotations</h2><br>");
}
}
/*
* Handles toggling of the holdInfoFrame variable.
*/
function toggleHoldInfoFrame()
{
holdInfoFrame = !holdInfoFrame;
if (!holdInfoFrame)
{
clearInfoFrame();
}
}
/*
* Writes information about an annotation to the info frame.
*
* styleClass - the value of the "class" attribute assigned to the annotation. This determines the style
* used to format the annotation (e.g. background color)
* spannedText - the annotated text
* annotType - the CAS Type of the annotation
* features - an array containing feature information. Each element of this array is a two-element array
* containing a feature name and its value, in that order.
*/
function writeAnnotationInfo(styleClass, spannedText, annotType, features)
{
if (!holdInfoFrame)
{
var doc = parent.frames["infoFrame"].document;
//write the annotation's spanned text, formatted the same way in which it appears in the document view
doc.write('<span class="' + styleClass + '">');
doc.write(spannedText);
doc.write('</span><br>');
//write CAS type and features
doc.write('CAS Type: ' + annotType + '<br>');
for (i = 0; i < features.length; i++)
{
doc.writeln(features[i][0] + ' = ' + features[i][1] + '<br>');
}
doc.write('<br>');
doc.write('<br>');
}
}
/*
* Changes a CSS style rule (in the document frame only). This function assumes that there is only one stylesheet.
*
* selector - the selector text for the sytle to be changed. There must exist a CSS rule with this selector.
* newStyle - new style description to be assigned to the rule
*
*/
function changeStyle(selector,newStyle)
{
var doc = parent.frames["docFrame"].document;
//get array of CSS style rules - note how this is done is different in Netscape and IE
var theRules = new Array();
if (doc.styleSheets[0].cssRules)
theRules = doc.styleSheets[0].cssRules
else if (doc.styleSheets[0].rules)
theRules = doc.styleSheets[0].rules
else
return
//find the rule with the specified selector text
for (i=0; i < theRules.length; i++)
{
//do a case-insensitive compare, because the selector text case differs between IE and Netscape
if (theRules[i].selectorText.toLowerCase() == selector.toLowerCase())
{
//in Netsacpe, can't set a style to the empty string in order to clear it.
//instead, set it to 'background:none'
if (newStyle == '')
newStyle = "background:none";
//set the style text - this is different in Netscape and IE, so try it both ways
if (theRules[i].style.cssText)
theRules[i].style.cssText = newStyle;
else
theRules[i].cssText = newStyle;
}
}
}