From fe18bb3110da47d56fea885a50eb8146f36bd5c4 Mon Sep 17 00:00:00 2001 From: Sampo Pyysalo Date: Tue, 24 Apr 2012 18:07:58 +0900 Subject: [PATCH] Links to DB search and ID'd item in normalization --- client/src/annotator_ui.js | 108 ++++++++++++++++++---- index.xhtml | 9 +- static/img/Fugue-shadowless-external.png | Bin 0 -> 621 bytes static/img/Fugue-shadowless-magnifier.png | Bin 0 -> 664 bytes 4 files changed, 93 insertions(+), 24 deletions(-) create mode 100644 static/img/Fugue-shadowless-external.png create mode 100644 static/img/Fugue-shadowless-magnifier.png diff --git a/client/src/annotator_ui.js b/client/src/annotator_ui.js index 9171a0db8..a02622509 100644 --- a/client/src/annotator_ui.js +++ b/client/src/annotator_ui.js @@ -43,6 +43,10 @@ var AnnotatorUI = (function($, window, undefined) { // for double-click selection simulation hack var lastDoubleClickedChunkId = null; + // for normalization: URLs bases by norm DB name + var normDbUrlByDbName = {}; + var normDbUrlBaseByDbName = {}; + that.user = null; var svgElement = $(svg._svg); var svgId = svgElement.parent().attr('id'); @@ -425,21 +429,24 @@ var AnnotatorUI = (function($, window, undefined) { // fill normalizations (if any) if (!reselectedSpan) { // clear first - var $normid = $('#span_norm_id'); - var $normtxt = $('#span_norm_txt'); - $normid.val(''); - $normid.removeClass('valid_value').removeClass('invalid_value'); - $normtxt.val(''); + clearNormalizationUI(); + + var $normId = $('#span_norm_id'); + var $normText = $('#span_norm_txt'); // fill if found (NOTE: only shows last on multiple) $.each(span ? span.normalizations : [], function(normNo, norm) { // stored as array (sorry) var refdb = norm[0], refid = norm[1], reftext = norm[2]; - $normid.val(refid); - $normtxt.val(reftext); + $normId.val(refid); + $normText.val(reftext); // just assume the ID is valid (TODO: check) - $normid.addClass('valid_value') + $normId.addClass('valid_value') }); + + // update links + updateNormalizationRefLink(); + updateNormalizationDbLink(); } var showAttributesFor = function(attrTypes, type) { @@ -618,9 +625,7 @@ var AnnotatorUI = (function($, window, undefined) { $('#clear_notes_button').click(clearSpanNotes); var clearSpanNorm = function(evt) { - $('#span_norm_id').val(''); - $('#span_norm_id').removeClass('valid_value').removeClass('invalid_value'); - $('#span_norm_txt').val(''); + clearNormalizationUI(); } $('#clear_norm_button').button(); $('#clear_norm_button').click(clearSpanNorm); @@ -645,6 +650,14 @@ var AnnotatorUI = (function($, window, undefined) { $('#span_norm_txt').val(response.value); } + // on any change to the normalization DB, clear everything and + // update link + var spanNormDbUpdate = function(evt) { + clearNormalizationUI(); + updateNormalizationDbLink(); + } + $('#span_norm_db').change(spanNormDbUpdate); + // on any change to the normalization ID, update the text of the // reference var oldSpanNormIdValue = ''; @@ -653,9 +666,8 @@ var AnnotatorUI = (function($, window, undefined) { var db = $('#span_norm_db').val(); if (key != oldSpanNormIdValue) { if (key.match(/^\s*$/)) { - // don't query empties, just clear style and ref - $(this).removeClass('valid_value').removeClass('invalid_value'); - $('#span_norm_txt').val(''); + // don't query empties, just clear instead + clearNormalizationUI(); } else { dispatcher.post('ajax', [ { action: 'normGetName', @@ -1427,9 +1439,12 @@ var AnnotatorUI = (function($, window, undefined) { // fill in new html = []; $.each(norm_resources, function(normNo, norm) { - var norm_name = norm[0], norm_url = norm[1], norm_url_base = norm[2]; - html.push(''); + var normName = norm[0], normUrl = norm[1], normUrlBase = norm[2]; + html.push(''); + // remember the urls for updates + normDbUrlByDbName[normName] = normUrl; + normDbUrlBaseByDbName[normName] = normUrlBase; }); $norm_select.html(html.join('')); // if we have nothing, just hide the whole thing @@ -1440,6 +1455,61 @@ var AnnotatorUI = (function($, window, undefined) { } } + // updates the reference link in the normalization UI according + // to the current value of the normalization DB and ID. + var updateNormalizationRefLink = function() { + var $normId = $('#span_norm_id'); + var $normLink = $('#span_norm_ref_link'); + var normId = $normId.val(); + if (!normId || normId.match(/^\s*$/)) { + $normLink.hide(); + } else { + var $normDb = $('#span_norm_db'); + var normDb = $normDb.val(); + var base = normDbUrlBaseByDbName[normDb]; + // assume hidden unless everything goes through + $normLink.hide(); + if (!base) { + dispatcher.post('messages', [[['No base URL for '+normDb, 'error']]]); + } else if (base.indexOf('%s') == -1) { + dispatcher.post('messages', [[['Base URL "'+base+'" for '+normDb+' does not contain "%s"', 'error']]]); + } else { + // TODO: protect against strange chars in ID + link = base.replace('%s', normId); + $normLink.attr('href', link); + $normLink.show(); + } + } + } + + // updates the DB search link in the normalization UI according + // to the current value of the normalization DB. + var updateNormalizationDbLink = function() { + var $dbLink = $('#span_norm_db_link'); + var $normDb = $('#span_norm_db'); + var normDb = $normDb.val(); + var link = normDbUrlByDbName[normDb]; + if (!link || link.match(/^\s*$/)) { + dispatcher.post('messages', [[['No URL for '+normDb, 'error']]]); + $dbLink.hide(); + } else { + // TODO: protect against weirdness in DB link + $dbLink.attr('href', link); + $dbLink.show(); + } + } + + // resets all normalization-related UI elements to a blank + // state + var clearNormalizationUI = function() { + var $normId = $('#span_norm_id'); + var $normText = $('#span_norm_txt'); + $normId.val(''); + $normId.removeClass('valid_value').removeClass('invalid_value'); + $normText.val(''); + updateNormalizationRefLink(); + } + var spanAndAttributeTypesLoaded = function(_spanTypes, _entityAttributeTypes, _eventAttributeTypes, @@ -1642,10 +1712,10 @@ var AnnotatorUI = (function($, window, undefined) { var normalizations = []; var normDb = $('#span_norm_db').val(); var normId = $('#span_norm_id').val(); - var normTxt = $('#span_norm_txt').val(); + var normText = $('#span_norm_txt').val(); // empty ID -> no normalization if (!normId.match(/^\s*$/)) { - normalizations.push([normDb, normId, normTxt]); + normalizations.push([normDb, normId, normText]); } spanOptions.normalizations = $.toJSON(normalizations); diff --git a/index.xhtml b/index.xhtml index a3dac871d..5c39c4be6 100644 --- a/index.xhtml +++ b/index.xhtml @@ -566,16 +566,15 @@
Normalization
- + Ref: + readonly="readonly" style="width:45%"/> +
diff --git a/static/img/Fugue-shadowless-external.png b/static/img/Fugue-shadowless-external.png new file mode 100644 index 0000000000000000000000000000000000000000..6c672bb8f537734d47291a59c420f0705882f6fa GIT binary patch literal 621 zcmV-z0+RiSP)-dX$1iiU%(uV*dj@=%u*{9z3as=1{28w85Z-mNts9 z%{H58O4@C*KgMsSba5L!<-wa7cHZ~C`DVY77-MJ$5k8!|{Sk_yhz~tI2gEE%(gbnf zUqO^K^I~-GU|{e!OmhXgo`9;V&yS?kfrqz}Ee1Cp6$4{==VqhPK&4V9TIo-p%f_9@ zi&(8XAx*trN63IN|BB~%OGLKKPTgm^)*N5_ZlPpth78u$YN2{?`s%x-$ytl}z8`RQ zuFB3_d(URR{$d={Un*>QbwjL4&nFQphW<-$MAl}rDVU$P*u}daSeAk~s1(LE=Z8d~ zSZ^E1TXj2dT^AILZ^as3zFxqSd&kj#FpjBQ3C8^iB=|VIMEkJS3*V6Y+(HD zPmB&7!m-00SSkCYi}4Og69+?$6piY1d=JUaT_lpQzR8eZuyONp3f)~QZz`eTa9xFx zt%o~N(-L$<6|qsr?#cSqeni zIa_F2&4Lnkk34;4j{$b?f8I=iYpCH`Hl%i6ql`B3M}PqU_{AfUH(Hcr00000NkvXX Hu0mjf67d&< literal 0 HcmV?d00001 diff --git a/static/img/Fugue-shadowless-magnifier.png b/static/img/Fugue-shadowless-magnifier.png new file mode 100644 index 0000000000000000000000000000000000000000..1b289ed04b228b3a4767b9921fcf8df6b978360e GIT binary patch literal 664 zcmV;J0%!e+P)uAx+57K5Kp0(tmcEJNn)#Du!3O;P{Tp4LpM#TA=9Za>2KMzkhsYU}opXrWx#&zrQ{M^?d_}!Ox#R(eab(=Z-&PVP<0f z{pbH*bj=`#T{(B`DM%gI0DgXc23}rX1|A+B25xR{1~xXf+Z$KTf5Q6b%kN)*QDcaS ziIMr^+n2BAPMdK3>({TRnb1uKCK7p8R#yMa^o*922;Y-CHm3g;urfb3HhB8u$B&jnH4_FPFPNK~m)yGb>c73c^E{ycU07IH7zklLVC>4t$w6H3 y{rmTAR#sX9A3uJ)0W@$A0|@{eh?D?;00RJO&I0KJ6;ww60000