Xanaflight fixes
This commit is contained in:
parent
ea1800c18e
commit
d5c599c160
|
@ -48,7 +48,7 @@ def fulfil_edl_with_sources(edl_text, links=None, hide_all_transclusions=False):
|
||||||
links=links,
|
links=links,
|
||||||
hide_all_transclusions=hide_all_transclusions)
|
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']
|
spans = edl['spans']
|
||||||
|
|
||||||
hide_transclusions = set()
|
hide_transclusions = set()
|
||||||
|
@ -100,7 +100,8 @@ def fulfil_edl_with_links(edl, links=None, hide_all_transclusions=False):
|
||||||
break
|
break
|
||||||
if link_end < start:
|
if link_end < start:
|
||||||
continue
|
continue
|
||||||
link_span = (f'<span class="xanadoclink link">' +
|
cls = 'xanadoclink link'
|
||||||
|
link_span = (f'<span class="{cls}" id="link{doc_num}_{link_num}">' +
|
||||||
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,8 +198,10 @@ class Item(TimeStampedModel):
|
||||||
@property
|
@property
|
||||||
def external_url(self):
|
def external_url(self):
|
||||||
base_url = current_app.config.get('BASE_URL')
|
base_url = current_app.config.get('BASE_URL')
|
||||||
|
if not base_url.endswith('/'):
|
||||||
|
base_url += '/'
|
||||||
if base_url:
|
if base_url:
|
||||||
return base_url + self.view_url('view_item')
|
return base_url + self.url_fragment()
|
||||||
else:
|
else:
|
||||||
return self.view_url('view_item', _external=True)
|
return self.view_url('view_item', _external=True)
|
||||||
|
|
||||||
|
|
|
@ -230,72 +230,36 @@ $("button#clear").click(function(event) {
|
||||||
});
|
});
|
||||||
|
|
||||||
function get_end_number(str) {
|
function get_end_number(str) {
|
||||||
var len = str.length;
|
var sep = str.indexOf('_');
|
||||||
var num;
|
return str.substr(sep + 1);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hover_link_bridge(element, hover) {
|
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';
|
var cls = 'hoverlink';
|
||||||
|
|
||||||
if (hover) {
|
if (hover) {
|
||||||
$('#xanalink' + num).addClass(cls);
|
// $('#xanalink' + num).addClass(cls);
|
||||||
$('#link' + num).addClass(cls);
|
$('#link1_' + num).addClass(cls);
|
||||||
|
$('#link2_' + num).addClass(cls);
|
||||||
} else {
|
} else {
|
||||||
$('#xanalink' + num).removeClass(cls);
|
// $('#xanalink' + num).removeClass(cls);
|
||||||
$('#link' + 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;
|
bridge_count = doc.span_count;
|
||||||
link_bridge_count = doc.link_count;
|
link_bridge_count = link_count;
|
||||||
var svg_element = document.getElementById('svg');
|
var svg_element = document.getElementById('svg');
|
||||||
|
|
||||||
for(var i = 0; i < doc.span_count; i++) {
|
for(var i = 0; i < link_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++) {
|
|
||||||
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);
|
||||||
p.setAttribute('class', 'linkbridge');
|
p.setAttribute('class', 'linkbridge');
|
||||||
|
@ -312,13 +276,6 @@ 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',
|
||||||
|
@ -327,14 +284,6 @@ 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);
|
||||||
});
|
});
|
||||||
|
@ -362,25 +311,6 @@ function fulfil(doc, index, doc_count) {
|
||||||
update();
|
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) {
|
$('.body').bind('scroll', function(event) {
|
||||||
update();
|
update();
|
||||||
});
|
});
|
||||||
|
|
|
@ -55,7 +55,7 @@ $(function() {
|
||||||
$(window).resize(size_svg);
|
$(window).resize(size_svg);
|
||||||
reset(); // clear all documents and bridges
|
reset(); // clear all documents and bridges
|
||||||
docs.forEach((doc, index) => {
|
docs.forEach((doc, index) => {
|
||||||
fulfil(doc, index, docs.length);
|
fulfil(doc, index, docs.length, {{ link_count | tojson }});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -249,13 +249,18 @@ def fulfil_xanaflight(item):
|
||||||
edl_list.append((xanapage, edl))
|
edl_list.append((xanapage, edl))
|
||||||
all_links += [parse_link(link['text']) for link in edl['links']]
|
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 = fulfil_edl_with_links(edl,
|
||||||
|
doc_num=doc_num,
|
||||||
links=all_links,
|
links=all_links,
|
||||||
hide_all_transclusions=True)
|
hide_all_transclusions=True)
|
||||||
doc['hashid'] = xanapage.hashid
|
doc['hashid'] = xanapage.hashid
|
||||||
|
del doc['link_count']
|
||||||
docs.append(doc)
|
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('/<username>/<hashid>/fulfil')
|
@bp.route('/<username>/<hashid>/fulfil')
|
||||||
def fulfil(username, hashid):
|
def fulfil(username, hashid):
|
||||||
|
|
Loading…
Reference in a new issue