Mercurial > hg > digilib-old
changeset 1124:bd90fdfd55f7
retire old annotations plugin.
author | robcast |
---|---|
date | Fri, 09 Nov 2012 14:33:49 +0100 |
parents | 1fad569ccb4f |
children | f1be20adc98b |
files | webapp/src/main/webapp/jquery/jquery-test-svg.html webapp/src/main/webapp/jquery/jquery.digilib.annotations.js |
diffstat | 2 files changed, 0 insertions(+), 439 deletions(-) [+] |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery-test-svg.html Fri Nov 09 11:28:44 2012 +0100 +++ b/webapp/src/main/webapp/jquery/jquery-test-svg.html Fri Nov 09 14:33:49 2012 +0100 @@ -1,4 +1,3 @@ -<?xml version="1.0" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" > <head>
--- a/webapp/src/main/webapp/jquery/jquery.digilib.annotations.js Fri Nov 09 11:28:44 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,438 +0,0 @@ -/** - digilib plugin for annotations. - - currently only point-like annotations (like marks). - - Annotations are stored on a Annotator http://annotateit.org compatible server. - - */ - -(function($) { - - // affine geometry - var geom; - // plugin object with digilib data - var digilib; - - var FULL_AREA; - - var buttons = { - annotations : { - onclick : "toggleAnnotations", - tooltip : "show or hide annotations", - icon : "annotations.png" - }, - annotationuser : { - onclick : "setAnnotationUser", - tooltip : "set user account for annotations", - icon : "annotation-user.png" - }, - annotationmark : { - onclick : "setAnnotationMark", - tooltip : "create an annotation for a point", - icon : "annotation-mark.png" - } - }; - - var defaults = { - // are annotations active? - 'isAnnotationsVisible' : true, - // buttonset of this plugin - 'annotationSet' : ['annotations', 'annotationuser', 'annotationmark', 'lessoptions'], - // URL of annotation server - 'annotationServerUrl' : 'http://virtuoso.mpiwg-berlin.mpg.de:8080/AnnotationManager/annotator', - // URL of authentication token server - 'annotationTokenUrl' : 'http://localhost:8080/test/annotator/token', - // annotation user name - 'annotationUser' : 'anonymous', - // function to translate user name from annotation server format - 'annotationServerUserString' : function() { - if (this.user && this.user.name) { - return this.user.name; - } - return this.user; - }, - - }; - - var actions = { - /** - * show/hide annotations - */ - toggleAnnotations : function (data) { - var show = !data.settings.isAnnotationsVisible; - data.settings.isAnnotationsVisible = show; - digilib.fn.highlightButtons(data, 'annotations', show); - renderAnnotations(data); - }, - - /** - * set user account for annotations - */ - setAnnotationUser : function (data, user, password) { - var settings = data.settings; - if (user == null) { - // user name entered in JS-prompt - user = window.prompt("User name:", settings.annotationUser); - if (user != null) { - // password entered in JS-prompt - password = window.prompt("Password:", ''); - settings.annotationUser = user; - data.dlOpts.annotationUser = user; - digilib.fn.storeOptions(data); - loadAnnotationToken(data, password); - } - } else { - settings.annotationUser = user; - data.dlOpts.annotationUser = user; - digilib.fn.storeOptions(data); - loadAnnotationToken(data, password); - } - }, - - /** - * set a mark-annotation by clicking (or giving a position and a text) - * - * @param data - * @param mpos - * @param text - */ - setAnnotationMark : function (data, mpos, text) { - if (mpos == null) { - // interactive - setAnnotationMark(data); - } else { - // use position and text (and user-id) - var annotation = newAnnotation(data, mpos, text, null, null, data.settings.annotationUser); - storeAnnotation(data, annotation); - // TODO: replace with annotation returned by server - data.annotations.push(annotation); - digilib.fn.redisplay(data); - } - }, - }; - - /** - * create a new annotation object - */ - var newAnnotation = function (data, mpos, text, id, uri, user, permissions, tags) { - var annot = { - pos : mpos, - text : text, - id : id, - uri : uri, - user : user, - permissions : permissions, - tags : tags - }; - // TODO: use prototype? - annot.getUserName = data.settings.annotationServerUserString; - return annot; - }; - - /** - * returns an annotatable url to this digilib image - */ - var getAnnotationPageUrl = function(data) { - var url = data.settings.digilibBaseUrl + '/jquery/digilib.html?'; - url += digilib.fn.getParamString(data.settings, ['fn', 'pn'], digilib.defaults); - return url; - }; - - /** - * add a mark-annotation where clicked. - */ - var setAnnotationMark = function(data) { - var $scaler = data.$scaler; - // unbind other handler TODO: do we need to do this? - $scaler.off(".dlZoomDrag"); - // start event capturing - $scaler.one('mousedown.dlSetAnnotationMark', function(evt) { - // event handler adding a new mark - console.log("setAnnotationMark at=", evt); - var mpos = geom.position(evt); - var pos = data.imgTrafo.invtransform(mpos); - // Annotation text entered in JS-prompt - var text = window.prompt("Annotation text:"); - if (text == null) return false; - var annotation = newAnnotation(data, pos, text, null, null, data.settings.annotationUser); - storeAnnotation(data, annotation); - data.annotations.push(annotation); - digilib.fn.redisplay(data); - return false; - }); - }; - - /** - * place annotations on the image - */ - var renderAnnotations = function(data) { - if (data.annotations == null || data.$img == null || data.imgTrafo == null) - return; - var cssPrefix = data.settings.cssPrefix; - var $elem = data.$elem; - // try to show annotation user state - $elem.find('div#'+cssPrefix+'button-annotationuser').attr('title', 'annotation user: '+data.settings.annotationUser); - var annotations = data.annotations; - console.debug("renderAnnotations: annotations=", annotations); - // clear annotations - $elem.find('div.' + cssPrefix + 'annotationmark').remove(); - if (!data.settings.isAnnotationsVisible) return; - for (var i = 0; i < annotations.length; i++) { - var annotation = annotations[i]; - if (data.zoomArea.containsPosition(annotation.pos)) { - var mpos = data.imgTrafo.transform(annotation.pos); - console.debug("renderannotations: pos=", mpos); - // create annotation - var html = '<div class="' + cssPrefix + 'annotationmark ' + cssPrefix + 'overlay">' + (i + 1) + '</div>'; - // set text as tooltip - if ($.fn.tooltip != null) { - html += '<div class="tooltip '+cssPrefix+'annotationbody" style="display:none">' - // + '<h3>Annotation</h3>' - + '<div class="'+cssPrefix+'text">'+annotation.text+'</div>' - + '<div class="'+cssPrefix+'creator">Creator: '+annotation.getUserName()+'</div>'; - if (annotation.tags != null && annotation.tags.length > 0) { - html += '<div class="'+cssPrefix+'tags">Tags: '+annotation.tags+'</div>'; - } - html += '</div>'; - var $annotation = $(html); - } else { - // default browser tooltip - var $annotation = $(html); - $annotation.attr('title', "Annotation: " + annotation.text); - } - $elem.append($annotation); - mpos.adjustDiv($annotation); - } - } - if ($.fn.tooltip != null) { - $('div.'+cssPrefix+'annotationmark').tooltip(); - } - }; - - /** - * Get an authentication token from the token server. - * - * Stores the token and loads annotations on success. - */ - var loadAnnotationToken = function(data, password) { - var settings = data.settings; - var url = settings.annotationTokenUrl; - var params = {'user': settings.annotationUser}; - if (password != null) { - params.password = password; - } - // TODO: better error handling - $.post(url, params) - .done(function (authToken, authStatus) { - console.debug("got auth token data=", authToken); - data.annotationToken = authToken; - data.dlOpts.annotationToken = authToken; - digilib.fn.storeOptions(data); - loadAnnotations(data); - }) - .fail(function (xhr, status) { - console.error("got auth token error:", xhr); - data.annotationToken = null; - data.settings.annotationUser = "anonymous"; - loadAnnotations(data); - }); - }; - - /** - * loads all annotations for this url from the annotation server. - */ - var loadAnnotations = function(data) { - var settings = data.settings; - // we use the search API - var url = settings.annotationServerUrl + '/search'; - var pageUrl = getAnnotationPageUrl(data); - // send authentication token in header - headers = {}; - if (data.annotationToken != null) { - headers['x-annotator-auth-token'] = data.annotationToken; - } - // get only 20 annotations with this url - var query = { - limit : 20, - uri : pageUrl - }; - $.ajax(url, { - dataType : 'json', - data : query, - headers : headers, - success : function(annotData, annotStatus) { - console.debug("got annotation data=", annotData); - data.annotationData = annotData; - parseAnnotations(data, annotData); - renderAnnotations(data); - } - }); - }; - - /** - * parse all JSON-annotations in annotationData.rows and put in data.annotations - */ - var parseAnnotations = function(data, annotationData) { - var annotations = []; - for (var i = 0; i < annotationData.rows.length; ++i) { - var ann = annotationData.rows[i]; - var annot = parseAnnotation(data, ann); - if (annot != null) { - annotations.push(annot); - } - } - data.annotations = annotations; - }; - - /** - * Parse a JSON-annotation. - * - * Returns an annotation object. - */ - var parseAnnotation = function(data, ann) { - // TODO: check validity of annotation data - if (ann.areas != null && ann.areas.length > 0) { - var area = ann.areas[0]; - // currently only point annotations - var pos = geom.position(area.x, area.y); - return newAnnotation(data, pos, ann.text, ann.id, ann.uri, ann.user, ann.permissions, ann.tags); - } - return null; - }; - - /** - * Store an annotation on the annotation server. - */ - var storeAnnotation = function(data, annotation) { - console.debug("storeAnnotation:", annotation); - var settings = data.settings; - var url = settings.annotationServerUrl + '/annotations'; - var pageUrl = getAnnotationPageUrl(data); - // send authentication token in header - headers = { - 'x-annotator-auth-token' : data.annotationToken - }; - // create annotation object to send - var annotData = { - areas : [{ - x : annotation.pos.x, - y : annotation.pos.y - }], - text : annotation.text, - uri : pageUrl, - user : settings.annotationUser - }; - var dataString = JSON.stringify(annotData); - $.ajax(url, { - type : 'POST', - dataType : 'json', - contentType : 'application/json', - data : dataString, - headers : headers, - success : function(annotData, annotStatus) { - console.debug("sent annotation data, got=", annotData, " status=" + annotStatus); - var annot = parseAnnotation(data, annotData); - // TODO: we have to add the returned data to the real annotation! - //renderAnnotations(data); - } - }); - - }; - - /** - * install additional buttons - */ - var installButtons = function(data) { - var settings = data.settings; - var mode = settings.interactionMode; - var buttonSettings = settings.buttonSettings[mode]; - // configure buttons through digilib "annotationSet" option - var buttonSet = settings.annotationSet || annotationSet; - // set annotationSet to [] or '' for no buttons (when showing annotations only) - if (buttonSet.length && buttonSet.length > 0) { - buttonSettings.annotationSet = buttonSet; - buttonSettings.buttonSets.push('annotationSet'); - } - }; - - /** - * plugin installation. called by digilib on plugin object. - */ - var install = function(plugin) { - digilib = plugin; - console.debug('installing annotations plugin. digilib:', digilib); - // import geometry classes - geom = digilib.fn.geometry; - FULL_AREA = geom.rectangle(0, 0, 1, 1); - // add defaults, actins, buttons - $.extend(digilib.defaults, defaults); - $.extend(digilib.actions, actions); - $.extend(digilib.buttons, buttons); - }; - - /** plugin initialization */ - var init = function(data) { - console.debug('initialising annotations plugin. data:', data); - var $data = $(data); - // set up - data.annotations = []; - if (digilib.plugins.buttons != null) { - installButtons(data); - } - if (data.dlOpts.annotationUser != null) { - // get annotation user from cookie - data.settings.annotationUser = data.dlOpts.annotationUser; - } - if (data.dlOpts.annotationToken != null) { - // get annotation token from cookie - data.annotationToken = data.dlOpts.annotationToken; - } - // install event handler - $data.bind('setup', handleSetup); - $data.bind('update', handleUpdate); - }; - - /** - * setup loads all annotations. - */ - var handleSetup = function(evt) { - console.debug("annotations: handleSetup"); - var data = this; - // load annotations from server - if (data.annotationToken != null) { - loadAnnotations(data); - } else { - loadAnnotationToken(data); - } - }; - - /** - * update renders all annotations. - */ - var handleUpdate = function(evt) { - console.debug("annotations: handleUpdate"); - var data = this; - if (data.marks != null) { - renderAnnotations(data); - } - }; - - // plugin object with name and init - // shared objects filled by digilib on registration - var plugin = { - name : 'annotations', - install : install, - init : init, - buttons : {}, - actions : {}, - fn : {}, - plugins : {} - }; - - if ($.fn.digilib == null) { - $.error("jquery.digilib.annotations must be loaded after jquery.digilib!"); - } else { - $.fn.digilib('plugin', plugin); - } -})(jQuery);