6 class AnnotationsPerspective extends $.wiki.SidebarPerspective {
8 var old_callback = options.callback || function() { };
10 options.callback = function(){
13 this.vsplitbar = 'PRZYPISY';
14 this.$element = $("#side-annotations");
15 this.$error = $('.error-message', this.$element);
16 this.$annos = $('.annotations-list', this.$element);
17 this.$spinner = $('.spinner', this.$element);
18 this.$refresh = $('.refresh', this.$element);
20 this.$refresh.click(function() {
23 self.$refresh.removeClass('active');
24 $this.addClass('active');
25 var atype = $this.attr('data-tag');
29 self.$spinner.fadeIn(100, function() {
34 old_callback.call(this);
40 updateAnnotationIds() {
42 self.annotationToAnchor = {};
43 $('#html-view').find('.annotation-inline-box').each(
44 function(i, annoBox) {
45 var $annoBox = $(annoBox);
46 var $anchor = $("a[name|=anchor]", $annoBox);
47 var htmlContent = $('span', $annoBox).html();
48 // TBD: perhaps use a hash of htmlContent as key
49 self.annotationToAnchor[htmlContent] = $anchor.attr('name');
54 goToAnnotation(srcNode) {
56 var content = $(srcNode).html();
57 content = content.replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&');
59 xml: '<root>'+content+'</root>',
60 success: function(txt) {
61 content = $(txt).html();
63 error: function(text) {
65 self.$error.html('<div class="alert alert-danger">' + text + '</div>');
71 var anchor = self.annotationToAnchor[content];
72 if (anchor != undefined) {
73 var $htmlView = $("#html-view");
74 var top = $htmlView.offset().top +
75 $("[name=" + anchor + "]", $htmlView).offset().top -
76 $htmlView.children().eq(0).offset().top;
78 $htmlView.animate({scrollTop: top}, 250);
86 var persp = $.wiki.activePerspective();
87 if (persp == 'CodeMirrorPerspective') {
88 xml = $.wiki.perspectives[persp].codemirror.getValue();
90 else if (persp == 'VisualPerspective') {
92 element: $('#html-view').find('div').get(0),
93 success: function(text){
96 error: function(text){
97 self.$error.html('<div class="alert alert-danger"><p>Wystąpił błąd:</p><pre>' + text + '</pre></div>');
102 self.updateAnnotationIds();
108 var parser = new DOMParser();
109 var serializer = new XMLSerializer();
110 var doc = parser.parseFromString(xml, 'text/xml');
111 var error = $('parsererror', doc);
113 if (error.length > 0) {
114 self.$error.html('<div class="alert alert-danger">Błąd parsowania XML.</a>');
115 self.$spinner.hide();
119 self.$annos.html('');
121 var annos = $(atype, doc);
122 var counter = annos.length;
123 var atype_rx = atype.replace(/,/g, '|');
124 var ann_expr = new RegExp("^<("+atype_rx+")[^>]*>|</("+atype_rx+")>$", "g");
126 if (annos.length == 0)
128 self.$annos.html('<div class="alert alert-info">Nie ma żadnych przypisów</div>');
129 self.$spinner.hide();
132 annos.each(function (i, elem) {
133 var xml_text = serializer.serializeToString(elem).replace(ann_expr, "");
135 xml: "<akap>" + xml_text + "</akap>",
136 success: function(xml_text){
137 return function(elem){
138 elem.sortby = $(elem).text().trim();
139 $(elem).append("<div class='src'>"+ xml_text.replace(/&/g, "&").replace(/</g, "<") +"</div>");
140 anno_list.push(elem);
141 $(".src", elem).click(function() { self.goToAnnotation(this); });
145 anno_list.sort(function(a, b){return a.sortby.localeCompare(b.sortby);});
147 self.$annos.append(anno_list[i]);
148 self.$spinner.hide();
153 error: function(text) {
155 self.$error.html('<div class="alert alert-danger">' + text + '</div>');
156 self.$spinner.hide();
166 this.$refresh.filter('.active').trigger('click');
169 onExit(success, failure) {};
171 $.wiki.AnnotationsPerspective = AnnotationsPerspective;