##// END OF EJS Templates
Not showing post previews for posts that cannot be found on the page
neko259 -
r353:9e5cd53e default
parent child Browse files
Show More
@@ -1,198 +1,111 b''
1 1 function $X(path, root) {
2 2 return document.evaluate(path, root || document, null, 6, null);
3 3 }
4 4 function $x(path, root) {
5 5 return document.evaluate(path, root || document, null, 8, null).singleNodeValue;
6 6 }
7 7
8 8 function $del(el) {
9 9 if(el) el.parentNode.removeChild(el);
10 10 }
11 11
12 12 function $each(list, fn) {
13 13 if(!list) return;
14 14 var i = list.snapshotLength;
15 15 if(i > 0) while(i--) fn(list.snapshotItem(i), i);
16 16 }
17 17
18 18 function addRefLinkPreview(node) {
19 19 $each($X('.//a[starts-with(text(),">>")]', node || document), function(link) {
20 20 link.addEventListener('mouseover', showPostPreview, false);
21 21 link.addEventListener('mouseout', delPostPreview, false);
22 22 });
23 23 }
24 24
25 25 function showPostPreview(e) {
26 26 var doc = document;
27 27 //ref id
28 28 var pNum = $(this).text().match(/\d+/);
29 29
30 30 //position
31 31 //var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - doc.documentElement.clientLeft + 1;
32 32 //var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop) - doc.documentElement.clientTop;
33 33
34 34 var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
35 35 var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
36 36
37 37 var cln = doc.createElement('div');
38 38 cln.id = 'pstprev_' + pNum;
39 39 cln.className = 'post_preview post';
40 40
41 41 cln.style.cssText = 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1) + 'px');
42 42
43 43 cln.addEventListener('mouseout', delPostPreview, false);
44 44
45 45
46 46 var mkPreview = function(cln, html) {
47 47
48 48 cln.innerHTML = html;
49 49
50 50 addRefLinkPreview(cln);
51 51
52 52 //if(!$x('.//small', cln)) showRefMap(post, p_num, refMap)
53 53 };
54 54
55 55
56 56 cln.innerHTML = 'Загрузка...';
57 57
58 var found = false;
59
58 60 //если пост найден в дереве.
59 61 if($('div[id='+pNum+']').length > 0) {
60 62 var postdata = $('div[id='+pNum+']').html();
61 63
62 64 //TODO: временно
63 65 //funcInit(postdata);
64 66
65 67 //make preview
66 68 mkPreview(cln, postdata);
69
70 found = true;
67 71 }
68 72 //ajax api
69 73 // else {
70 74 // $.getJSON(mayuri_cfg['board_url']+'api/single/'+pNum)
71 75 // .success(function(data) {
72 76 // //post templates
73 77 // var postdata = makeAjaxPost(data).html();
74 78 //
75 79 // //TODO: временно
76 80 // //funcInit(postdata);
77 81 //
78 82 // //make preview
79 83 // mkPreview(cln, postdata);
80 84 //
81 85 // })//if error
82 86 // .error(function() {
83 87 // cln.innerHTML = 'Пост не найден.';
84 88 // });
85 89 // }
86 90
87 91 $del(doc.getElementById(cln.id));
88 92
89 //add preview
90 $('body').append(cln);
93 if (found) {
94 //add preview
95 $('body').append(cln);
96 }
91 97 }
92 98
93 99 function delPostPreview(e) {
94 100 var el = $x('ancestor-or-self::*[starts-with(@id,"pstprev")]', e.relatedTarget);
95 101 if(!el) $each($X('.//div[starts-with(@id,"pstprev")]'), function(clone) {
96 102 $del(clone)
97 103 });
98 104 else while(el.nextSibling) $del(el.nextSibling);
99 105 }
100 106
101
102
103
104
105
106 107 function addPreview() {
107 108 $('.post').find('a').each(function() {
108 109 showPostPreview($(this));
109 110 });
110 111 }
111
112 function showPreview(node) {
113 node.each(function() {
114 //reflink?
115 if($(this).text().indexOf('>>') == 0) {
116 //add mouseover event
117 $(this).on('mouseover', function(e) {
118 var ref = $(this);
119
120 var doc = document;
121 //ref id
122 var pNum = ref.text().match(/\d+/);
123
124 //position
125 var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
126 var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
127
128 //create preview block
129 var cln = $('<div>', {
130 id: 'pstprev_' + pNum,
131 class: 'post_preview post'
132 })
133 .css('cssText', 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1)
134 + 'px'));
135
136
137 var mkPreview = function(cln, html) {
138
139 cln.html(html);
140
141 showPreview($(cln));
142 //if(!$x('.//small', cln)) showRefMap(post, p_num, refMap)
143 };
144
145 cln.html('Загрузка...');
146
147 //если пост найден в дереве.
148 if($('div[id='+pNum+']').length > 0) {
149 var postdata = $('div[id='+pNum+']').clone().html();
150 //TODO: лучше бы вынести в mkPreview
151 //if($.localStorage('addImgPreview') > 0) showImgPreview($(postdata));
152
153 //make preview
154 mkPreview(cln, postdata);
155 }
156 //ajax api
157 // else {
158 // $.getJSON(mayuri_cfg['board_url']+'api/single/'+pNum)
159 // .success(function(data) {
160 // //post templates
161 // var postdata = makeAjaxPost(data).html();
162 //
163 // //make preview
164 // mkPreview(cln, postdata);
165 //
166 // })//if error
167 // .error(function() {
168 // cln.html('Пост не найден.');
169 // });
170 // }
171
172 $del(doc.getElementById(cln.id));
173
174 //add preview
175 $('body').append(cln);
176 });
177
178 $(this).on('mouseout', function() {
179 delPreview($(this));
180 })
181 }
182 });
183
184 }
185
186 function delPreview(e) {
187 var el = e.relatedTarget;
188 if(!el) {
189 $(el).each(function(clone) {
190 $del(clone)
191 });
192 }
193 {
194 while(el.next())
195 $del(el.next());
196 }
197 }
198
General Comments 0
You need to be logged in to leave comments. Login now