-
Toke Eskildsen authoredToke Eskildsen authored
quack.js 7.57 KiB
//! Toggling of grid and overlays
function toggleGrid() {
if (document.getElementById('toggle_grid').checked) {
state = 'block';
} else {
state = 'none';
}
var content = document.getElementsByClassName('gridline');
for (var i = 0 ; i < content.length ; i++) {
content[i].style.display = state;
}
}
function toggleBlown() {
if (document.getElementById('toggle_blown').checked) {
opacity = 100;
} else {
opacity = 0;
}
for (var i = 0; i < myDragon.overlays.length; i++) {
var id = myDragon.overlays[i].id;
if ( id == 'black' || id == 'white' ) {
OpenSeadragon.setElementOpacity(id, opacity, false);
}
}
if (document.getElementById('toggle_blown').checked) {
state = 'block';
} else {
state = 'none';
}
var content = document.getElementsByClassName('whiteoverlay');
for (var i = 0 ; i < content.length ; i++) {
if (content[i].style.backgroundImage == '' && state == 'block') {
content[i].style.backgroundImage = "url('" + whiteoverlayurl + "')";
}
content[i].style.display = state;
}
var content = document.getElementsByClassName('blackoverlay');
for (var i = 0 ; i < content.length ; i++) {
if (content[i].style.backgroundImage == '' && state == 'block') {
content[i].style.backgroundImage = "url('" + blackoverlayurl + "')";
}
content[i].style.display = state;
}
}
function toggleTextBlock() {
if (document.getElementById('toggle_textblock').checked) {
opacity = 100;
} else {
opacity = 0;
}
for (var i = 0; i < myDragon.overlays.length; i++) {
var id = myDragon.overlays[i].id;
if ( id == 'black' || id == 'white' ) {
continue;
}
OpenSeadragon.setElementOpacity(id, opacity, false);
}
}
var ocrs = {};
var nexts = {};
var prevs = {};
// Fill in OCR for blocks with
// ocrs["BLOCK1"] = "MyOCR";
// On the preview page
function addForward(overlay, className) {
if (!document.getElementById(overlay)) return;
document.getElementById(overlay).className = document.getElementById(overlay).className + ' ' + className;
if (overlay in nexts) {
addForward(nexts[overlay], className);
}
}
function addBackward(overlay, className) {
if (!document.getElementById(overlay)) return;
document.getElementById(overlay).className = document.getElementById(overlay).className + ' ' + className;
if (overlay in prevs) {
addBackward(prevs[overlay], className);
}
}
function removeForward(overlay, className) {
if (!document.getElementById(overlay)) return;
document.getElementById(overlay).className = document.getElementById(overlay).className.replace(' ' + className, '');
if (overlay in nexts) {
removeForward(nexts[overlay], className);
}
}
function removeBackward(overlay, className) {
if (!document.getElementById(overlay)) return;
document.getElementById(overlay).className = document.getElementById(overlay).className.replace(' ' + className, '');
if (overlay in prevs) {
removeBackward(prevs[overlay], className);
}
}
function inOverlay(overlay) {
document.getElementById('idbox').innerHTML = 'ID: ' + overlay;
if (overlay in nexts) {
document.getElementById('idnextbox').innerHTML = 'IDNEXT: ' + nexts[overlay];
} else {
document.getElementById('idnextbox').innerHTML = 'IDNEXT: ';
}
if (overlay in ocrs) {
document.getElementById('ocrbox').innerHTML = ocrs[overlay];
} else {
document.getElementById('ocrbox').innerHTML = '';
}
addForward(overlay, "group");
// addForward(overlay, "next");
addBackward(overlay, "group");
if (overlay in nexts) {
document.getElementById(nexts[overlay]).className = document.getElementById(nexts[overlay]).className + ' next';
}
}
function outOverlay(overlay) {
document.getElementById('ocrbox').innerHTML = '';
document.getElementById('idnextbox').innerHTML = 'IDNEXT: ';
document.getElementById('idbox').innerHTML = 'ID: ';
removeForward(overlay, "group");
removeForward(overlay, "next");
removeBackward(overlay, "group");
removeBackward(overlay, "next");
}
// URL parameter parsing
// http://stackoverflow.com/questions/979975/how-to-get-the-value-from-url-parameter
function getRes() {
var input = window.location.href;
// name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
// var regexS = "/[\\?&]" + name + "=([^&#]*)/g";
// var regex = new RegExp( regexS );
var regex = /[\\?&]box=([^&#]*)/g;
var results = [];
var tokens;
while (tokens = regex.exec(input)) {
results.push(decodeURIComponent(tokens[1]));
// console.log('Pushing ' + decodeURIComponent(tokens[1]));
}
return results;
}
function createDiv(id, className, content) {
var msgContainer = document.createElement('div');
msgContainer.id = id; // No setAttribute required
msgContainer.className = className; // No setAttribute required, note it's "className" to avoid conflict with JavaScript reserved word
msgContainer.appendChild(document.createTextNode(content));
document.body.appendChild(msgContainer);
return msgContainer;
}
// Helper for addResultBoxes that constructs a single box
// 0.036886,0.740071 0.898778x0.108414 I BYEN MED DE KENDTE
var boxCounter = 0;
function addResultBox(boxData) {
// console.log('Processing box ' + boxData);
var parts = boxData.split(' ');
var x = parseFloat(parts[0].split(',')[0]);
var y = parseFloat(parts[0].split(',')[1]);
var w = parseFloat(parts[1].split('x')[0]);
var h = parseFloat(parts[1].split('x')[1]);
var content = '';
for (var i = 2 ; i < parts.length ; i++) {
if (i > 2) {
content += ' ';
}
content += parts[i];
}
console.log('Creating overlay box for x=' + x + ', y=' + y + ', w=' + w + ', h=' + h + ', content=' + content);
myDragon.drawer.addOverlay(createDiv('searchresult' + boxCounter++, 'searchresultbox', content), new OpenSeadragon.Rect(x, y, w, h), OpenSeadragon.OverlayPlacement.TOP_LEFT, '');
}
// Looks for attributes with the name 'box'. A box contains x,y in relative coordinates,
// width x height i relative coordinates and optional context for the box. Sample:
// 0.036886,0.740071 0.898778x0.108414 I BYEN MED DE KENDTE
function addResultBoxes() {
var results = getRes();
document.title = document.title + ' ' + results + ' (length ' + results.length + ')';
for (var i = 0; i < results.length; i++) {
addResultBox(results[i]);
}
}
function setupJS() {
// TODO: Check if this is an image page and if not, exit immediately
toggleGrid();
toggleTextBlock();
toggleBlown();
addResultBoxes();
//! Create a callback for eack overlay with the overlay-ID as argument
for (var i = 0; i < myDragon.overlays.length; i++) {
id = myDragon.overlays[i].id;
shortid = id.split("/").pop();
if ( id == 'white' || id == 'black' ) {
continue;
}
o = document.getElementById(id);
o.onmouseover = new Function('inOverlay("' + shortid + '")');
o.onmouseout = new Function('outOverlay("' + shortid + '")');
}
// Try to disable fancy interpolation
var canvases = document.getElementsByTagName("canvas");
for(var i = 0; i < canvases.length; i++){
canvases[i].style.imageRendering = "-moz-crisp-edges";
canvases[i].getContext.mozImageSmoothingEnabled = false;
}
}
window.onload=setupJS;