X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/b5f8d214ba00903379f8716ef563f19743a120b6..c58ede829174b66ec4d2b0c949b771a3eed27e1b:/redakcja/static/js/wiki/view_annotations.js diff --git a/redakcja/static/js/wiki/view_annotations.js b/redakcja/static/js/wiki/view_annotations.js index d51ce9c8..76a0ae9e 100644 --- a/redakcja/static/js/wiki/view_annotations.js +++ b/redakcja/static/js/wiki/view_annotations.js @@ -7,6 +7,7 @@ var old_callback = options.callback || function() { }; this.noupdate_hash_onenter = true; + this.vsplitbar = 'PRZYPISY'; options.callback = function(){ var self = this; @@ -14,8 +15,21 @@ this.$element = $("#side-annotations"); this.$error = $('.error-message', this.$element); this.$annos = $('.annotations-list', this.$element); - $('.refresh', this.$element).click(function() { - self.refresh(self); + this.$spinner = $('.spinner', this.$element); + this.$refresh = $('.refresh', this.$element); + + this.$refresh.click(function() { + $this = $(this); + + self.$refresh.removeClass('active'); + $this.addClass('active'); + atype = $this.attr('data-tag'); + + self.$annos.hide(); + self.$error.hide(); + self.$spinner.show(100, function(){ + self.refresh(self, atype); + }); }); old_callback.call(this); @@ -26,7 +40,46 @@ AnnotationsPerspective.prototype = new $.wiki.Perspective(); - AnnotationsPerspective.prototype.refresh = function(self) { + AnnotationsPerspective.prototype.updateAnnotationIds = function(self){ + self.annotationToAnchor = {}; + $('#html-view .annotation-inline-box').each( + function(i, annoBox) { + var $annoBox = $(annoBox); + var $anchor = $("a[name|=anchor]", $annoBox); + var htmlContent = $('span', $annoBox).html(); + // TBD: perhaps use a hash of htmlContent as key + self.annotationToAnchor[htmlContent] = $anchor.attr('name'); + }); + } + + AnnotationsPerspective.prototype.goToAnnotation = function(self, srcNode){ + var content = $(srcNode).html(); + content = content.replace('>', '>', 'g').replace('<', '<', 'g').replace('&', '&', 'g'); + xml2html({ + xml: ''+content+'', + success: function(txt) { + content = $(txt).html(); + }, + error: function(text) { + $.unblockUI(); + self.$error.html(text); + self.$spinner.hide(); + self.$error.show(); + } + }); + + var anchor = self.annotationToAnchor[content]; + if (anchor != undefined) { + var $htmlView = $("#html-view"); + var top = $htmlView.offset().top + + $("[name=" + anchor + "]", $htmlView).offset().top - + $htmlView.children().eq(0).offset().top + + $htmlView.animate({scrollTop: top}, 250); + } + } + + AnnotationsPerspective.prototype.refresh = function(self, atype) { var xml; persp = $.wiki.activePerspective(); @@ -41,13 +94,16 @@ }, error: function(text){ self.$error.html('

Wystąpił błąd:

' + text + '
'); + self.$spinner.hide(); + self.$error.show(); } }); + self.updateAnnotationIds(self); } else { xml = this.doc.text; } - + var parser = new DOMParser(); var serializer = new XMLSerializer(); var doc = parser.parseFromString(xml, 'text/xml'); @@ -55,40 +111,53 @@ if (error.length > 0) { self.$error.html('Błąd parsowania XML.'); + self.$spinner.hide(); self.$error.show(); - self.$annos.hide(); } else { - self.$error.hide(); - self.$annos.hide(); self.$annos.html(''); var anno_list = new Array(); - var annos = doc.getElementsByTagName('pe'); + var annos = $(atype, doc); var counter = annos.length; + var atype_rx = atype.replace(/,/g, '|'); + var ann_expr = new RegExp("^<("+atype_rx+")[^>]*>|$", "g") - for (var i=0; i]*>/g, "<$1akap>"); + self.$annos.html('Nie ma żadnych przypisów'); + self.$spinner.hide(); + self.$annos.show(); + } + annos.each(function (i, elem) { + xml_text = serializer.serializeToString(elem).replace(ann_expr, ""); xml2html({ - xml: text, - success: function(elem){ - elem.txt = $(elem).text().trim(); - anno_list.push(elem); - counter--; - - if (!counter) { - anno_list.sort(function(a, b){return (a.txt < b.txt) ? -1 : (a.txt > b.txt ? 1 : 0)}); - self.$annos.append(anno_list); - self.$annos.show(); + xml: "" + xml_text + "", + success: function(xml_text){ + return function(elem){ + elem.sortby = $(elem).text().trim(); + $(elem).append("
"+ xml_text.replace("&", "&", "g").replace("<", "<", "g") +"
") + anno_list.push(elem); + $(".src", elem).click(function() { self.goToAnnotation(self, this); }); + counter--; + + if (!counter) { + anno_list.sort(function(a, b){return a.sortby.localeCompare(b.sortby);}); + for (i in anno_list) + self.$annos.append(anno_list[i]); + self.$spinner.hide(); + self.$annos.show(); + } + } - }, + }(xml_text), error: function(text) { $.unblockUI(); self.$error.html(text); + self.$spinner.hide(); self.$error.show(); } }); - } + }); } } @@ -99,9 +168,8 @@ $.wiki.Perspective.prototype.onEnter.call(this); $('.vsplitbar').not('.active').trigger('click'); - $(".vsplitbar-title").html("↓ PRZYPISY ↓"); - - this.refresh(this); + $(".vsplitbar-title").html("↓ PRZYPISY ↓"); + this.$refresh.filter('.active').trigger('click'); };