##// END OF EJS Templates
fixed inline comment file parsing
marcink -
r1679:c3d9cd8c beta
parent child Browse files
Show More
@@ -1,338 +1,338
1 1 /**
2 2 RhodeCode JS Files
3 3 **/
4 4
5 5 if (typeof console == "undefined" || typeof console.log == "undefined"){
6 6 console = { log: function() {} }
7 7 }
8 8
9 9
10 10 function str_repeat(i, m) {
11 11 for (var o = []; m > 0; o[--m] = i);
12 12 return o.join('');
13 13 }
14 14
15 15 /**
16 16 * INJECT .format function into String
17 17 * Usage: "My name is {0} {1}".format("Johny","Bravo")
18 18 * Return "My name is Johny Bravo"
19 19 * Inspired by https://gist.github.com/1049426
20 20 */
21 21 String.prototype.format = function() {
22 22
23 23 function format() {
24 24 var str = this;
25 25 var len = arguments.length+1;
26 26 var safe = undefined;
27 27 var arg = undefined;
28 28
29 29 // For each {0} {1} {n...} replace with the argument in that position. If
30 30 // the argument is an object or an array it will be stringified to JSON.
31 31 for (var i=0; i < len; arg = arguments[i++]) {
32 32 safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
33 33 str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
34 34 }
35 35 return str;
36 36 }
37 37
38 38 // Save a reference of what may already exist under the property native.
39 39 // Allows for doing something like: if("".format.native) { /* use native */ }
40 40 format.native = String.prototype.format;
41 41
42 42 // Replace the prototype property
43 43 return format;
44 44
45 45 }();
46 46
47 47
48 48 /**
49 49 * SmartColorGenerator
50 50 *
51 51 *usage::
52 52 * var CG = new ColorGenerator();
53 53 * var col = CG.getColor(key); //returns array of RGB
54 54 * 'rgb({0})'.format(col.join(',')
55 55 *
56 56 * @returns {ColorGenerator}
57 57 */
58 58 function ColorGenerator(){
59 59 this.GOLDEN_RATIO = 0.618033988749895;
60 60 this.CURRENT_RATIO = 0.22717784590367374 // this can be random
61 61 this.HSV_1 = 0.75;//saturation
62 62 this.HSV_2 = 0.95;
63 63 this.color;
64 64 this.cacheColorMap = {};
65 65 };
66 66
67 67 ColorGenerator.prototype = {
68 68 getColor:function(key){
69 69 if(this.cacheColorMap[key] !== undefined){
70 70 return this.cacheColorMap[key];
71 71 }
72 72 else{
73 73 this.cacheColorMap[key] = this.generateColor();
74 74 return this.cacheColorMap[key];
75 75 }
76 76 },
77 77 _hsvToRgb:function(h,s,v){
78 78 if (s == 0.0)
79 79 return [v, v, v];
80 80 i = parseInt(h * 6.0)
81 81 f = (h * 6.0) - i
82 82 p = v * (1.0 - s)
83 83 q = v * (1.0 - s * f)
84 84 t = v * (1.0 - s * (1.0 - f))
85 85 i = i % 6
86 86 if (i == 0)
87 87 return [v, t, p]
88 88 if (i == 1)
89 89 return [q, v, p]
90 90 if (i == 2)
91 91 return [p, v, t]
92 92 if (i == 3)
93 93 return [p, q, v]
94 94 if (i == 4)
95 95 return [t, p, v]
96 96 if (i == 5)
97 97 return [v, p, q]
98 98 },
99 99 generateColor:function(){
100 100 this.CURRENT_RATIO = this.CURRENT_RATIO+this.GOLDEN_RATIO;
101 101 this.CURRENT_RATIO = this.CURRENT_RATIO %= 1;
102 102 HSV_tuple = [this.CURRENT_RATIO, this.HSV_1, this.HSV_2]
103 103 RGB_tuple = this._hsvToRgb(HSV_tuple[0],HSV_tuple[1],HSV_tuple[2]);
104 104 function toRgb(v){
105 105 return ""+parseInt(v*256)
106 106 }
107 107 return [toRgb(RGB_tuple[0]),toRgb(RGB_tuple[1]),toRgb(RGB_tuple[2])];
108 108
109 109 }
110 110 }
111 111
112 112
113 113
114 114
115 115
116 116 /**
117 117 * GLOBAL YUI Shortcuts
118 118 */
119 119 var YUC = YAHOO.util.Connect;
120 120 var YUD = YAHOO.util.Dom;
121 121 var YUE = YAHOO.util.Event;
122 122 var YUQ = YAHOO.util.Selector.query;
123 123
124 124 // defines if push state is enabled for this browser ?
125 125 var push_state_enabled = Boolean(
126 126 window.history && window.history.pushState && window.history.replaceState
127 127 && !( /* disable for versions of iOS before version 4.3 (8F190) */
128 128 (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent)
129 129 /* disable for the mercury iOS browser, or at least older versions of the webkit engine */
130 130 || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent)
131 131 )
132 132 )
133 133
134 134 /**
135 135 * Partial Ajax Implementation
136 136 *
137 137 * @param url: defines url to make partial request
138 138 * @param container: defines id of container to input partial result
139 139 * @param s_call: success callback function that takes o as arg
140 140 * o.tId
141 141 * o.status
142 142 * o.statusText
143 143 * o.getResponseHeader[ ]
144 144 * o.getAllResponseHeaders
145 145 * o.responseText
146 146 * o.responseXML
147 147 * o.argument
148 148 * @param f_call: failure callback
149 149 * @param args arguments
150 150 */
151 151 function ypjax(url,container,s_call,f_call,args){
152 152 var method='GET';
153 153 if(args===undefined){
154 154 args=null;
155 155 }
156 156
157 157 // Set special header for partial ajax == HTTP_X_PARTIAL_XHR
158 158 YUC.initHeader('X-PARTIAL-XHR',true);
159 159
160 160 // wrapper of passed callback
161 161 var s_wrapper = (function(o){
162 162 return function(o){
163 163 YUD.get(container).innerHTML=o.responseText;
164 164 YUD.setStyle(container,'opacity','1.0');
165 165 //execute the given original callback
166 166 if (s_call !== undefined){
167 167 s_call(o);
168 168 }
169 169 }
170 170 })()
171 171 YUD.setStyle(container,'opacity','0.3');
172 172 YUC.asyncRequest(method,url,{
173 173 success:s_wrapper,
174 174 failure:function(o){
175 175 console.log(o);
176 176 YUD.get(container).innerHTML='ERROR';
177 177 YUD.setStyle(container,'opacity','1.0');
178 178 YUD.setStyle(container,'color','red');
179 179 }
180 180 },args);
181 181
182 182 }
183 183
184 184 /**
185 185 * tooltip activate
186 186 */
187 187 var tooltip_activate = function(){
188 188 function toolTipsId(){
189 189 var ids = [];
190 190 var tts = YUQ('.tooltip');
191 191 for (var i = 0; i < tts.length; i++) {
192 192 // if element doesn't not have and id
193 193 // autogenerate one for tooltip
194 194 if (!tts[i].id){
195 195 tts[i].id='tt'+((i*100)+tts.length);
196 196 }
197 197 ids.push(tts[i].id);
198 198 }
199 199 return ids
200 200 };
201 201 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
202 202 context: [[toolTipsId()],"tl","bl",null,[0,5]],
203 203 monitorresize:false,
204 204 xyoffset :[0,0],
205 205 autodismissdelay:300000,
206 206 hidedelay:5,
207 207 showdelay:20,
208 208 });
209 209 }
210 210
211 211 /**
212 212 * show more
213 213 */
214 214 var show_more_event = function(){
215 215 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
216 216 var el = e.target;
217 217 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
218 218 YUD.setStyle(el.parentNode,'display','none');
219 219 });
220 220 }
221 221
222 222
223 223 /**
224 224 * Quick filter widget
225 225 *
226 226 * @param target: filter input target
227 227 * @param nodes: list of nodes in html we want to filter.
228 228 * @param display_element function that takes current node from nodes and
229 229 * does hide or show based on the node
230 230 *
231 231 */
232 232 var q_filter = function(target,nodes,display_element){
233 233
234 234 var nodes = nodes;
235 235 var q_filter_field = YUD.get(target);
236 236 var F = YAHOO.namespace(target);
237 237
238 238 YUE.on(q_filter_field,'click',function(){
239 239 q_filter_field.value = '';
240 240 });
241 241
242 242 YUE.on(q_filter_field,'keyup',function(e){
243 243 clearTimeout(F.filterTimeout);
244 244 F.filterTimeout = setTimeout(F.updateFilter,600);
245 245 });
246 246
247 247 F.filterTimeout = null;
248 248
249 249 var show_node = function(node){
250 250 YUD.setStyle(node,'display','')
251 251 }
252 252 var hide_node = function(node){
253 253 YUD.setStyle(node,'display','none');
254 254 }
255 255
256 256 F.updateFilter = function() {
257 257 // Reset timeout
258 258 F.filterTimeout = null;
259 259
260 260 var obsolete = [];
261 261
262 262 var req = q_filter_field.value.toLowerCase();
263 263
264 264 var l = nodes.length;
265 265 var i;
266 266 var showing = 0;
267 267
268 268 for (i=0;i<l;i++ ){
269 269 var n = nodes[i];
270 270 var target_element = display_element(n)
271 271 if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
272 272 hide_node(target_element);
273 273 }
274 274 else{
275 275 show_node(target_element);
276 276 showing+=1;
277 277 }
278 278 }
279 279
280 280 // if repo_count is set update the number
281 281 var cnt = YUD.get('repo_count');
282 282 if(cnt){
283 283 YUD.get('repo_count').innerHTML = showing;
284 284 }
285 285
286 286 }
287 287 }
288 288
289 289 var ajaxPOST = function(url,postData,success) {
290 290 var sUrl = url;
291 291 var callback = {
292 292 success: success,
293 293 failure: function (o) {
294 294 alert("error");
295 295 },
296 296 };
297 297 var postData = postData;
298 298 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
299 299 };
300 300
301 301
302 302 /** comments **/
303 303 var removeInlineForm = function(form) {
304 304 form.parentNode.removeChild(form);
305 305 }
306 306
307 307 var createInlineForm = function(parent_tr, f_path, line) {
308 308 var form = document.createElement('tr');
309 309 YUD.addClass(form, 'comment-form-inline');
310 310 var tmpl = YUD.get('comment-inline-form-template').innerHTML;
311 311 tmpl = tmpl.format(f_path, line);
312 312 form.innerHTML = '<td class="lineno new"></td>'+
313 313 '<td class="lineno old"></td>'+
314 314 '<td>{0}</td>'.format(tmpl);
315 315
316 316 // create event for hide button
317 317 form = new YAHOO.util.Element(form);
318 318 var form_hide_button = new YAHOO.util.Element(form.getElementsByClassName('hide-inline-form')[0]);
319 319 form_hide_button.on('click', function(e) {
320 320 var newtr = e.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
321 321 removeInlineForm(newtr);
322 322 YUD.removeClass(parent_tr, 'form-open');
323 323 });
324 324 return form
325 325 }
326 326 var getLineNo = function(tr) {
327 327 var line;
328 328 var o = tr.children[0].id.split('_');
329 329 var n = tr.children[1].id.split('_');
330 330
331 if (n.length == 2) {
332 line = n[1];
333 } else if (o.length == 2) {
334 line = o[1];
331 if (n.length >= 2) {
332 line = n[n.length-1];
333 } else if (o.length >= 2) {
334 line = o[n.length-1];
335 335 }
336 336
337 337 return line
338 338 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now