Make links show in the xanaflight view.
This commit is contained in:
parent
4f4b67e953
commit
ea1800c18e
|
@ -42,21 +42,28 @@ def parse_edl(edl_text):
|
||||||
|
|
||||||
return edl
|
return edl
|
||||||
|
|
||||||
def fulfil_edl_with_sources(edl_text, hide_all_transclusions=False):
|
def fulfil_edl_with_sources(edl_text, links=None, hide_all_transclusions=False):
|
||||||
edl = parse_edl(edl_text)
|
edl = parse_edl(edl_text)
|
||||||
|
return fulfil_edl_with_links(edl,
|
||||||
|
links=links,
|
||||||
|
hide_all_transclusions=hide_all_transclusions)
|
||||||
|
|
||||||
|
def fulfil_edl_with_links(edl, links=None, hide_all_transclusions=False):
|
||||||
spans = edl['spans']
|
spans = edl['spans']
|
||||||
|
|
||||||
hide_transclusions = set()
|
hide_transclusions = set()
|
||||||
|
|
||||||
two_facet_links = []
|
two_facet_links = []
|
||||||
|
|
||||||
|
if not links:
|
||||||
|
links = [parse_link(link['text']) for link in edl['links']]
|
||||||
|
|
||||||
link_num = 0
|
link_num = 0
|
||||||
for link in edl['links']:
|
for link in links:
|
||||||
link_detail = parse_link(link['text'])
|
if link['type'] == 'HideTransclusions':
|
||||||
if link_detail['type'] == 'HideTransclusions':
|
hide_transclusions.add(parse_sourcedoc_facet(link['facets'][0]))
|
||||||
hide_transclusions.add(parse_sourcedoc_facet(link_detail['facets'][0]))
|
elif len(link['facets']) == 2:
|
||||||
elif len(link_detail['facets']) == 2:
|
two_facet_links.append((link_num, [parse_span(span[0]) for span in link['facets']]))
|
||||||
two_facet_links.append((link_num, [parse_span(span[0]) for span in link_detail['facets']]))
|
|
||||||
link_num += 1
|
link_num += 1
|
||||||
|
|
||||||
source = [get_text(url) for url in get_urls(spans)]
|
source = [get_text(url) for url in get_urls(spans)]
|
||||||
|
@ -93,8 +100,7 @@ def fulfil_edl_with_sources(edl_text, hide_all_transclusions=False):
|
||||||
break
|
break
|
||||||
if link_end < start:
|
if link_end < start:
|
||||||
continue
|
continue
|
||||||
open_tag = '<span class="xanadoclink link" id="xanalink{}">'.format(link_num)
|
link_span = (f'<span class="xanadoclink link">' +
|
||||||
link_span = (open_tag +
|
|
||||||
escape(span_text[link_start:link_end]) +
|
escape(span_text[link_start:link_end]) +
|
||||||
'</span>')
|
'</span>')
|
||||||
new_text += escape(span_text[pos:link_start]) + link_span
|
new_text += escape(span_text[pos:link_start]) + link_span
|
||||||
|
|
|
@ -198,13 +198,15 @@ function new_document(doc) {
|
||||||
var w = document.documentElement.clientWidth;
|
var w = document.documentElement.clientWidth;
|
||||||
var h = document.documentElement.clientHeight;
|
var h = document.documentElement.clientHeight;
|
||||||
|
|
||||||
w = 1600;
|
if (doc.doctype == 'xanadoc') {
|
||||||
|
var ratio = (doc.index + 1) / (doc.doc_count + 1)
|
||||||
var ratio = (doc.index + 1) / (doc.doc_count + 1)
|
var r_index = doc.doc_count - doc.index - 1;
|
||||||
var r_index = doc.doc_count - doc.index - 1;
|
var x = (w * ratio - (r_index * (box_width / 2)));
|
||||||
var x = (w * ratio - (r_index * (box_width / 2)));
|
var y = (h - box_height) / 2;
|
||||||
var y = (h - box_height) / 2;
|
} else {
|
||||||
|
var x = Math.random() * (w - 400);
|
||||||
|
var y = Math.random() * (h - 400);
|
||||||
|
}
|
||||||
update_location(element.get(0), x, y);
|
update_location(element.get(0), x, y);
|
||||||
|
|
||||||
$("#top").append(element);
|
$("#top").append(element);
|
||||||
|
@ -276,6 +278,23 @@ function fulfil(doc, index, doc_count) {
|
||||||
link_bridge_count = doc.link_count;
|
link_bridge_count = doc.link_count;
|
||||||
var svg_element = document.getElementById('svg');
|
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 < doc.link_count; i++) {
|
||||||
var p = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
|
var p = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
|
||||||
p.setAttribute('id', 'linkbridge' + i);
|
p.setAttribute('id', 'linkbridge' + i);
|
||||||
|
@ -293,6 +312,13 @@ function fulfil(doc, index, doc_count) {
|
||||||
svg_element.appendChild(p);
|
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',
|
new_document({'heading': 'xanadoc',
|
||||||
'text': doc.doc,
|
'text': doc.doc,
|
||||||
'doctype': 'xanadoc',
|
'doctype': 'xanadoc',
|
||||||
|
@ -301,6 +327,14 @@ function fulfil(doc, index, doc_count) {
|
||||||
|
|
||||||
update();
|
update();
|
||||||
|
|
||||||
|
$('.transclusion').bind('mouseover', function(e) {
|
||||||
|
hover_bridge(this, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.transclusion').bind('mouseout', function(e) {
|
||||||
|
hover_bridge(this, false);
|
||||||
|
});
|
||||||
|
|
||||||
$('.link').bind('mouseover', function(e) {
|
$('.link').bind('mouseover', function(e) {
|
||||||
hover_link_bridge(this, true);
|
hover_link_bridge(this, true);
|
||||||
});
|
});
|
||||||
|
|
|
@ -6,10 +6,10 @@ from .forms import (LoginForm, SignupForm, AccountSettingsForm,
|
||||||
UploadSourceDocForm, SourceDocForm, ItemForm,
|
UploadSourceDocForm, SourceDocForm, ItemForm,
|
||||||
ForgotPasswordForm, PasswordForm)
|
ForgotPasswordForm, PasswordForm)
|
||||||
from .model import User, SourceDoc, Item, XanaDoc, XanaLink, Reference
|
from .model import User, SourceDoc, Item, XanaDoc, XanaLink, Reference
|
||||||
from .parse import parse_xanapage_facet
|
from .parse import parse_xanapage_facet, parse_link
|
||||||
from .url import get_url
|
from .url import get_url
|
||||||
from .mail import send_mail
|
from .mail import send_mail
|
||||||
from .edl import fulfil_edl_with_sources, fulfil_edl, parse_edl
|
from .edl import fulfil_edl_with_sources, fulfil_edl, parse_edl, fulfil_edl_with_links
|
||||||
from .span import Span
|
from .span import Span
|
||||||
from .edit import apply_edits
|
from .edit import apply_edits
|
||||||
from .database import session
|
from .database import session
|
||||||
|
@ -240,10 +240,19 @@ def fulfil_xanaflight(item):
|
||||||
assert link['type'] == 'flight'
|
assert link['type'] == 'flight'
|
||||||
facets = link['facets']
|
facets = link['facets']
|
||||||
docs = []
|
docs = []
|
||||||
|
edl_list = []
|
||||||
|
all_links = []
|
||||||
for facet in facets:
|
for facet in facets:
|
||||||
xanapage = Item.from_external(parse_xanapage_facet(facet))
|
xanapage = Item.from_external(parse_xanapage_facet(facet))
|
||||||
assert xanapage.type == 'xanadoc'
|
assert xanapage.type == 'xanadoc'
|
||||||
doc = fulfil_edl_with_sources(xanapage.text, hide_all_transclusions=True)
|
edl = parse_edl(xanapage.text)
|
||||||
|
edl_list.append((xanapage, edl))
|
||||||
|
all_links += [parse_link(link['text']) for link in edl['links']]
|
||||||
|
|
||||||
|
for xanapage, edl in edl_list:
|
||||||
|
doc = fulfil_edl_with_links(edl,
|
||||||
|
links=all_links,
|
||||||
|
hide_all_transclusions=True)
|
||||||
doc['hashid'] = xanapage.hashid
|
doc['hashid'] = xanapage.hashid
|
||||||
docs.append(doc)
|
docs.append(doc)
|
||||||
return render_template('view/xanaflight.html', item=item, docs=docs)
|
return render_template('view/xanaflight.html', item=item, docs=docs)
|
||||||
|
|
Loading…
Reference in a new issue