diff --git a/sourcing/edl.py b/sourcing/edl.py index 669285a..fe5dac7 100644 --- a/sourcing/edl.py +++ b/sourcing/edl.py @@ -48,7 +48,7 @@ def fulfil_edl_with_sources(edl_text, links=None, hide_all_transclusions=False): links=links, hide_all_transclusions=hide_all_transclusions) -def fulfil_edl_with_links(edl, links=None, hide_all_transclusions=False): +def fulfil_edl_with_links(edl, doc_num='', links=None, hide_all_transclusions=False): spans = edl['spans'] hide_transclusions = set() @@ -100,7 +100,8 @@ def fulfil_edl_with_links(edl, links=None, hide_all_transclusions=False): break if link_end < start: continue - link_span = (f'' + + cls = 'xanadoclink link' + link_span = (f'' + escape(span_text[link_start:link_end]) + '') new_text += escape(span_text[pos:link_start]) + link_span diff --git a/sourcing/model.py b/sourcing/model.py index d6b2820..8d93bfa 100644 --- a/sourcing/model.py +++ b/sourcing/model.py @@ -198,8 +198,10 @@ class Item(TimeStampedModel): @property def external_url(self): base_url = current_app.config.get('BASE_URL') + if not base_url.endswith('/'): + base_url += '/' if base_url: - return base_url + self.view_url('view_item') + return base_url + self.url_fragment() else: return self.view_url('view_item', _external=True) diff --git a/sourcing/static/js/xanaflight.js b/sourcing/static/js/xanaflight.js index 5072395..764a098 100644 --- a/sourcing/static/js/xanaflight.js +++ b/sourcing/static/js/xanaflight.js @@ -230,72 +230,36 @@ $("button#clear").click(function(event) { }); function get_end_number(str) { - var len = str.length; - var num; - for(var i = 0; i < len; i++) { - if(!isNaN(num = parseInt(str.substr(i)))) - return num; - } - throw "no number found"; -} - -function hover_bridge(element, hover) { - var num = get_end_number(element.id); - var bridge = document.getElementById('bridge' + num); - - bridge.setAttribute("class", hover ? 'hoverbridge' : 'bridge'); - - var cls = 'hovertransclusion'; - - if (hover) { - $('#transclusion' + num).addClass(cls); - $('#span' + num).addClass(cls); - } else { - $('#transclusion' + num).removeClass(cls); - $('#span' + num).removeClass(cls); - } + var sep = str.indexOf('_'); + return str.substr(sep + 1); } function hover_link_bridge(element, hover) { - var num = get_end_number(element.id); - var bridge = document.getElementById('linkbridge' + num); - bridge.setAttribute("class", hover ? 'hoverlinkbridge' : 'linkbridge'); + var num = get_end_number(element.id); + // var bridge = document.getElementById('linkbridge' + num); + + // bridge.setAttribute("class", hover ? 'hoverlinkbridge' : 'linkbridge'); var cls = 'hoverlink'; if (hover) { - $('#xanalink' + num).addClass(cls); - $('#link' + num).addClass(cls); + // $('#xanalink' + num).addClass(cls); + $('#link1_' + num).addClass(cls); + $('#link2_' + num).addClass(cls); } else { - $('#xanalink' + num).removeClass(cls); - $('#link' + num).removeClass(cls); + // $('#xanalink' + num).removeClass(cls); + $('#link1_' + num).removeClass(cls); + $('#link2_' + num).removeClass(cls); } } -function fulfil(doc, index, doc_count) { +function fulfil(doc, index, doc_count, link_count) { bridge_count = doc.span_count; - link_bridge_count = doc.link_count; + link_bridge_count = link_count; var svg_element = document.getElementById('svg'); - for(var i = 0; i < doc.span_count; i++) { - var p = document.createElementNS('http://www.w3.org/2000/svg', 'polygon'); - p.setAttribute('id', 'bridge' + i); - p.setAttribute('class', 'bridge'); - p.setAttribute('visibility', 'hidden'); - - p.addEventListener('mouseover', function(e) { - hover_bridge(this, true); - }); - - p.addEventListener('mouseout', function(e) { - hover_bridge(this, false); - }); - - svg_element.appendChild(p); - } - - for(var i = 0; i < doc.link_count; i++) { + for(var i = 0; i < link_count; i++) { var p = document.createElementNS('http://www.w3.org/2000/svg', 'polygon'); p.setAttribute('id', 'linkbridge' + i); p.setAttribute('class', 'linkbridge'); @@ -312,13 +276,6 @@ function fulfil(doc, index, doc_count) { svg_element.appendChild(p); } - $.each(doc.source, function(key, doc) { - if (doc.text) { - doc.heading += " (source document)"; - doc.doctype = 'sourcedoc'; - new_document(doc); - } - }); new_document({'heading': 'xanadoc', 'text': doc.doc, 'doctype': 'xanadoc', @@ -327,14 +284,6 @@ function fulfil(doc, index, doc_count) { update(); - $('.transclusion').bind('mouseover', function(e) { - hover_bridge(this, true); - }); - - $('.transclusion').bind('mouseout', function(e) { - hover_bridge(this, false); - }); - $('.link').bind('mouseover', function(e) { hover_link_bridge(this, true); }); @@ -362,25 +311,6 @@ function fulfil(doc, index, doc_count) { update(); }); - $('.xanadoctransclusion').click(function(e) { - var num = get_end_number(this.id); - var source = $('#transclusion' + num).closest( ".sourcedoc" ); - - var bridge1 = document.getElementById('bridge' + num); - var cur_state = bridge1.getAttribute('visibility'); - var new_state = cur_state == 'hidden' ? 'visible' : 'hidden'; - - source.find('.sourcedoctransclusion').each(function(index, value) { - var bridge_num = get_end_number(value.id); - var bridge = document.getElementById('bridge' + bridge_num); - bridge.setAttribute('visibility', new_state); - }); - - source.toggle(); - - update(); - }); - $('.body').bind('scroll', function(event) { update(); }); diff --git a/sourcing/templates/view/xanaflight.html b/sourcing/templates/view/xanaflight.html index cf902b4..ac0910c 100644 --- a/sourcing/templates/view/xanaflight.html +++ b/sourcing/templates/view/xanaflight.html @@ -55,7 +55,7 @@ $(function() { $(window).resize(size_svg); reset(); // clear all documents and bridges docs.forEach((doc, index) => { - fulfil(doc, index, docs.length); + fulfil(doc, index, docs.length, {{ link_count | tojson }}); }); }); diff --git a/sourcing/view.py b/sourcing/view.py index 9f326c7..8bf949f 100644 --- a/sourcing/view.py +++ b/sourcing/view.py @@ -249,13 +249,18 @@ def fulfil_xanaflight(item): edl_list.append((xanapage, edl)) all_links += [parse_link(link['text']) for link in edl['links']] - for xanapage, edl in edl_list: + for doc_num, (xanapage, edl) in enumerate(edl_list): doc = fulfil_edl_with_links(edl, + doc_num=doc_num, links=all_links, hide_all_transclusions=True) doc['hashid'] = xanapage.hashid + del doc['link_count'] docs.append(doc) - return render_template('view/xanaflight.html', item=item, docs=docs) + return render_template('view/xanaflight.html', + item=item, + link_count=len(all_links), + docs=docs) @bp.route('///fulfil') def fulfil(username, hashid):