##// END OF EJS Templates
merge with bb
marcink -
r1866:fdce3f0b merge beta
parent child Browse files
Show More
@@ -1,723 +1,722 b''
1 /**
1 /**
2 RhodeCode JS Files
2 RhodeCode JS Files
3 **/
3 **/
4
4
5 if (typeof console == "undefined" || typeof console.log == "undefined"){
5 if (typeof console == "undefined" || typeof console.log == "undefined"){
6 console = { log: function() {} }
6 console = { log: function() {} }
7 }
7 }
8
8
9
9
10 var str_repeat = function(i, m) {
10 var str_repeat = function(i, m) {
11 for (var o = []; m > 0; o[--m] = i);
11 for (var o = []; m > 0; o[--m] = i);
12 return o.join('');
12 return o.join('');
13 };
13 };
14
14
15 /**
15 /**
16 * INJECT .format function into String
16 * INJECT .format function into String
17 * Usage: "My name is {0} {1}".format("Johny","Bravo")
17 * Usage: "My name is {0} {1}".format("Johny","Bravo")
18 * Return "My name is Johny Bravo"
18 * Return "My name is Johny Bravo"
19 * Inspired by https://gist.github.com/1049426
19 * Inspired by https://gist.github.com/1049426
20 */
20 */
21 String.prototype.format = function() {
21 String.prototype.format = function() {
22
22
23 function format() {
23 function format() {
24 var str = this;
24 var str = this;
25 var len = arguments.length+1;
25 var len = arguments.length+1;
26 var safe = undefined;
26 var safe = undefined;
27 var arg = undefined;
27 var arg = undefined;
28
28
29 // For each {0} {1} {n...} replace with the argument in that position. If
29 // For each {0} {1} {n...} replace with the argument in that position. If
30 // the argument is an object or an array it will be stringified to JSON.
30 // the argument is an object or an array it will be stringified to JSON.
31 for (var i=0; i < len; arg = arguments[i++]) {
31 for (var i=0; i < len; arg = arguments[i++]) {
32 safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
32 safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
33 str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
33 str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
34 }
34 }
35 return str;
35 return str;
36 }
36 }
37
37
38 // Save a reference of what may already exist under the property native.
38 // Save a reference of what may already exist under the property native.
39 // Allows for doing something like: if("".format.native) { /* use native */ }
39 // Allows for doing something like: if("".format.native) { /* use native */ }
40 format.native = String.prototype.format;
40 format.native = String.prototype.format;
41
41
42 // Replace the prototype property
42 // Replace the prototype property
43 return format;
43 return format;
44
44
45 }();
45 }();
46
46
47
47
48 /**
48 /**
49 * SmartColorGenerator
49 * SmartColorGenerator
50 *
50 *
51 *usage::
51 *usage::
52 * var CG = new ColorGenerator();
52 * var CG = new ColorGenerator();
53 * var col = CG.getColor(key); //returns array of RGB
53 * var col = CG.getColor(key); //returns array of RGB
54 * 'rgb({0})'.format(col.join(',')
54 * 'rgb({0})'.format(col.join(',')
55 *
55 *
56 * @returns {ColorGenerator}
56 * @returns {ColorGenerator}
57 */
57 */
58 var ColorGenerator = function(){
58 var ColorGenerator = function(){
59 this.GOLDEN_RATIO = 0.618033988749895;
59 this.GOLDEN_RATIO = 0.618033988749895;
60 this.CURRENT_RATIO = 0.22717784590367374 // this can be random
60 this.CURRENT_RATIO = 0.22717784590367374 // this can be random
61 this.HSV_1 = 0.75;//saturation
61 this.HSV_1 = 0.75;//saturation
62 this.HSV_2 = 0.95;
62 this.HSV_2 = 0.95;
63 this.color;
63 this.color;
64 this.cacheColorMap = {};
64 this.cacheColorMap = {};
65 };
65 };
66
66
67 ColorGenerator.prototype = {
67 ColorGenerator.prototype = {
68 getColor:function(key){
68 getColor:function(key){
69 if(this.cacheColorMap[key] !== undefined){
69 if(this.cacheColorMap[key] !== undefined){
70 return this.cacheColorMap[key];
70 return this.cacheColorMap[key];
71 }
71 }
72 else{
72 else{
73 this.cacheColorMap[key] = this.generateColor();
73 this.cacheColorMap[key] = this.generateColor();
74 return this.cacheColorMap[key];
74 return this.cacheColorMap[key];
75 }
75 }
76 },
76 },
77 _hsvToRgb:function(h,s,v){
77 _hsvToRgb:function(h,s,v){
78 if (s == 0.0)
78 if (s == 0.0)
79 return [v, v, v];
79 return [v, v, v];
80 i = parseInt(h * 6.0)
80 i = parseInt(h * 6.0)
81 f = (h * 6.0) - i
81 f = (h * 6.0) - i
82 p = v * (1.0 - s)
82 p = v * (1.0 - s)
83 q = v * (1.0 - s * f)
83 q = v * (1.0 - s * f)
84 t = v * (1.0 - s * (1.0 - f))
84 t = v * (1.0 - s * (1.0 - f))
85 i = i % 6
85 i = i % 6
86 if (i == 0)
86 if (i == 0)
87 return [v, t, p]
87 return [v, t, p]
88 if (i == 1)
88 if (i == 1)
89 return [q, v, p]
89 return [q, v, p]
90 if (i == 2)
90 if (i == 2)
91 return [p, v, t]
91 return [p, v, t]
92 if (i == 3)
92 if (i == 3)
93 return [p, q, v]
93 return [p, q, v]
94 if (i == 4)
94 if (i == 4)
95 return [t, p, v]
95 return [t, p, v]
96 if (i == 5)
96 if (i == 5)
97 return [v, p, q]
97 return [v, p, q]
98 },
98 },
99 generateColor:function(){
99 generateColor:function(){
100 this.CURRENT_RATIO = this.CURRENT_RATIO+this.GOLDEN_RATIO;
100 this.CURRENT_RATIO = this.CURRENT_RATIO+this.GOLDEN_RATIO;
101 this.CURRENT_RATIO = this.CURRENT_RATIO %= 1;
101 this.CURRENT_RATIO = this.CURRENT_RATIO %= 1;
102 HSV_tuple = [this.CURRENT_RATIO, this.HSV_1, this.HSV_2]
102 HSV_tuple = [this.CURRENT_RATIO, this.HSV_1, this.HSV_2]
103 RGB_tuple = this._hsvToRgb(HSV_tuple[0],HSV_tuple[1],HSV_tuple[2]);
103 RGB_tuple = this._hsvToRgb(HSV_tuple[0],HSV_tuple[1],HSV_tuple[2]);
104 function toRgb(v){
104 function toRgb(v){
105 return ""+parseInt(v*256)
105 return ""+parseInt(v*256)
106 }
106 }
107 return [toRgb(RGB_tuple[0]),toRgb(RGB_tuple[1]),toRgb(RGB_tuple[2])];
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 * GLOBAL YUI Shortcuts
117 * GLOBAL YUI Shortcuts
118 */
118 */
119 var YUC = YAHOO.util.Connect;
119 var YUC = YAHOO.util.Connect;
120 var YUD = YAHOO.util.Dom;
120 var YUD = YAHOO.util.Dom;
121 var YUE = YAHOO.util.Event;
121 var YUE = YAHOO.util.Event;
122 var YUQ = YAHOO.util.Selector.query;
122 var YUQ = YAHOO.util.Selector.query;
123
123
124 // defines if push state is enabled for this browser ?
124 // defines if push state is enabled for this browser ?
125 var push_state_enabled = Boolean(
125 var push_state_enabled = Boolean(
126 window.history && window.history.pushState && window.history.replaceState
126 window.history && window.history.pushState && window.history.replaceState
127 && !( /* disable for versions of iOS before version 4.3 (8F190) */
127 && !( /* disable for versions of iOS before version 4.3 (8F190) */
128 (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent)
128 (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent)
129 /* disable for the mercury iOS browser, or at least older versions of the webkit engine */
129 /* disable for the mercury iOS browser, or at least older versions of the webkit engine */
130 || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent)
130 || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent)
131 )
131 )
132 );
132 );
133
133
134 var _run_callbacks = function(callbacks){
134 var _run_callbacks = function(callbacks){
135 if (callbacks !== undefined){
135 if (callbacks !== undefined){
136 var _l = callbacks.length;
136 var _l = callbacks.length;
137 for (var i=0;i<_l;i++){
137 for (var i=0;i<_l;i++){
138 var func = callbacks[i];
138 var func = callbacks[i];
139 if(typeof(func)=='function'){
139 if(typeof(func)=='function'){
140 try{
140 try{
141 func();
141 func();
142 }catch (err){};
142 }catch (err){};
143 }
143 }
144 }
144 }
145 }
145 }
146 }
146 }
147
147
148 /**
148 /**
149 * Partial Ajax Implementation
149 * Partial Ajax Implementation
150 *
150 *
151 * @param url: defines url to make partial request
151 * @param url: defines url to make partial request
152 * @param container: defines id of container to input partial result
152 * @param container: defines id of container to input partial result
153 * @param s_call: success callback function that takes o as arg
153 * @param s_call: success callback function that takes o as arg
154 * o.tId
154 * o.tId
155 * o.status
155 * o.status
156 * o.statusText
156 * o.statusText
157 * o.getResponseHeader[ ]
157 * o.getResponseHeader[ ]
158 * o.getAllResponseHeaders
158 * o.getAllResponseHeaders
159 * o.responseText
159 * o.responseText
160 * o.responseXML
160 * o.responseXML
161 * o.argument
161 * o.argument
162 * @param f_call: failure callback
162 * @param f_call: failure callback
163 * @param args arguments
163 * @param args arguments
164 */
164 */
165 function ypjax(url,container,s_call,f_call,args){
165 function ypjax(url,container,s_call,f_call,args){
166 var method='GET';
166 var method='GET';
167 if(args===undefined){
167 if(args===undefined){
168 args=null;
168 args=null;
169 }
169 }
170
170
171 // Set special header for partial ajax == HTTP_X_PARTIAL_XHR
171 // Set special header for partial ajax == HTTP_X_PARTIAL_XHR
172 YUC.initHeader('X-PARTIAL-XHR',true);
172 YUC.initHeader('X-PARTIAL-XHR',true);
173
173
174 // wrapper of passed callback
174 // wrapper of passed callback
175 var s_wrapper = (function(o){
175 var s_wrapper = (function(o){
176 return function(o){
176 return function(o){
177 YUD.get(container).innerHTML=o.responseText;
177 YUD.get(container).innerHTML=o.responseText;
178 YUD.setStyle(container,'opacity','1.0');
178 YUD.setStyle(container,'opacity','1.0');
179 //execute the given original callback
179 //execute the given original callback
180 if (s_call !== undefined){
180 if (s_call !== undefined){
181 s_call(o);
181 s_call(o);
182 }
182 }
183 }
183 }
184 })()
184 })()
185 YUD.setStyle(container,'opacity','0.3');
185 YUD.setStyle(container,'opacity','0.3');
186 YUC.asyncRequest(method,url,{
186 YUC.asyncRequest(method,url,{
187 success:s_wrapper,
187 success:s_wrapper,
188 failure:function(o){
188 failure:function(o){
189 console.log(o);
189 console.log(o);
190 YUD.get(container).innerHTML='ERROR';
190 YUD.get(container).innerHTML='ERROR';
191 YUD.setStyle(container,'opacity','1.0');
191 YUD.setStyle(container,'opacity','1.0');
192 YUD.setStyle(container,'color','red');
192 YUD.setStyle(container,'color','red');
193 }
193 }
194 },args);
194 },args);
195
195
196 };
196 };
197
197
198 /**
198 /**
199 * tooltip activate
199 * tooltip activate
200 */
200 */
201 var tooltip_activate = function(){
201 var tooltip_activate = function(){
202 function toolTipsId(){
202 function toolTipsId(){
203 var ids = [];
203 var ids = [];
204 var tts = YUQ('.tooltip');
204 var tts = YUQ('.tooltip');
205 for (var i = 0; i < tts.length; i++) {
205 for (var i = 0; i < tts.length; i++) {
206 // if element doesn't not have and id
206 // if element doesn't not have and id
207 // autogenerate one for tooltip
207 // autogenerate one for tooltip
208 if (!tts[i].id){
208 if (!tts[i].id){
209 tts[i].id='tt'+((i*100)+tts.length);
209 tts[i].id='tt'+((i*100)+tts.length);
210 }
210 }
211 ids.push(tts[i].id);
211 ids.push(tts[i].id);
212 }
212 }
213 return ids
213 return ids
214 };
214 };
215 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
215 var myToolTips = new YAHOO.widget.Tooltip("tooltip", {
216 context: [[toolTipsId()],"tl","bl",null,[0,5]],
216 context: [[toolTipsId()],"tl","bl",null,[0,5]],
217 monitorresize:false,
217 monitorresize:false,
218 xyoffset :[0,0],
218 xyoffset :[0,0],
219 autodismissdelay:300000,
219 autodismissdelay:300000,
220 hidedelay:5,
220 hidedelay:5,
221 showdelay:20,
221 showdelay:20,
222 });
222 });
223 };
223 };
224
224
225 /**
225 /**
226 * show more
226 * show more
227 */
227 */
228 var show_more_event = function(){
228 var show_more_event = function(){
229 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
229 YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){
230 var el = e.target;
230 var el = e.target;
231 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
231 YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
232 YUD.setStyle(el.parentNode,'display','none');
232 YUD.setStyle(el.parentNode,'display','none');
233 });
233 });
234 };
234 };
235
235
236
236
237 /**
237 /**
238 * Quick filter widget
238 * Quick filter widget
239 *
239 *
240 * @param target: filter input target
240 * @param target: filter input target
241 * @param nodes: list of nodes in html we want to filter.
241 * @param nodes: list of nodes in html we want to filter.
242 * @param display_element function that takes current node from nodes and
242 * @param display_element function that takes current node from nodes and
243 * does hide or show based on the node
243 * does hide or show based on the node
244 *
244 *
245 */
245 */
246 var q_filter = function(target,nodes,display_element){
246 var q_filter = function(target,nodes,display_element){
247
247
248 var nodes = nodes;
248 var nodes = nodes;
249 var q_filter_field = YUD.get(target);
249 var q_filter_field = YUD.get(target);
250 var F = YAHOO.namespace(target);
250 var F = YAHOO.namespace(target);
251
251
252 YUE.on(q_filter_field,'click',function(){
252 YUE.on(q_filter_field,'click',function(){
253 q_filter_field.value = '';
253 q_filter_field.value = '';
254 });
254 });
255
255
256 YUE.on(q_filter_field,'keyup',function(e){
256 YUE.on(q_filter_field,'keyup',function(e){
257 clearTimeout(F.filterTimeout);
257 clearTimeout(F.filterTimeout);
258 F.filterTimeout = setTimeout(F.updateFilter,600);
258 F.filterTimeout = setTimeout(F.updateFilter,600);
259 });
259 });
260
260
261 F.filterTimeout = null;
261 F.filterTimeout = null;
262
262
263 var show_node = function(node){
263 var show_node = function(node){
264 YUD.setStyle(node,'display','')
264 YUD.setStyle(node,'display','')
265 }
265 }
266 var hide_node = function(node){
266 var hide_node = function(node){
267 YUD.setStyle(node,'display','none');
267 YUD.setStyle(node,'display','none');
268 }
268 }
269
269
270 F.updateFilter = function() {
270 F.updateFilter = function() {
271 // Reset timeout
271 // Reset timeout
272 F.filterTimeout = null;
272 F.filterTimeout = null;
273
273
274 var obsolete = [];
274 var obsolete = [];
275
275
276 var req = q_filter_field.value.toLowerCase();
276 var req = q_filter_field.value.toLowerCase();
277
277
278 var l = nodes.length;
278 var l = nodes.length;
279 var i;
279 var i;
280 var showing = 0;
280 var showing = 0;
281
281
282 for (i=0;i<l;i++ ){
282 for (i=0;i<l;i++ ){
283 var n = nodes[i];
283 var n = nodes[i];
284 var target_element = display_element(n)
284 var target_element = display_element(n)
285 if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
285 if(req && n.innerHTML.toLowerCase().indexOf(req) == -1){
286 hide_node(target_element);
286 hide_node(target_element);
287 }
287 }
288 else{
288 else{
289 show_node(target_element);
289 show_node(target_element);
290 showing+=1;
290 showing+=1;
291 }
291 }
292 }
292 }
293
293
294 // if repo_count is set update the number
294 // if repo_count is set update the number
295 var cnt = YUD.get('repo_count');
295 var cnt = YUD.get('repo_count');
296 if(cnt){
296 if(cnt){
297 YUD.get('repo_count').innerHTML = showing;
297 YUD.get('repo_count').innerHTML = showing;
298 }
298 }
299
299
300 }
300 }
301 };
301 };
302
302
303 var ajaxPOST = function(url,postData,success) {
303 var ajaxPOST = function(url,postData,success) {
304 var sUrl = url;
304 var sUrl = url;
305 var callback = {
305 var callback = {
306 success: success,
306 success: success,
307 failure: function (o) {
307 failure: function (o) {
308 alert("error");
308 alert("error");
309 },
309 },
310 };
310 };
311 var postData = postData;
311 var postData = postData;
312 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
312 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
313 };
313 };
314
314
315
315
316 /** comments **/
316 /** comments **/
317 var removeInlineForm = function(form) {
317 var removeInlineForm = function(form) {
318 form.parentNode.removeChild(form);
318 form.parentNode.removeChild(form);
319 };
319 };
320
320
321 var tableTr = function(cls,body){
321 var tableTr = function(cls,body){
322 var form = document.createElement('tr');
322 var form = document.createElement('tr');
323 YUD.addClass(form, cls);
323 YUD.addClass(form, cls);
324 form.innerHTML = '<td class="lineno-inline new-inline"></td>'+
324 form.innerHTML = '<td class="lineno-inline new-inline"></td>'+
325 '<td class="lineno-inline old-inline"></td>'+
325 '<td class="lineno-inline old-inline"></td>'+
326 '<td>{0}</td>'.format(body);
326 '<td>{0}</td>'.format(body);
327 return form;
327 return form;
328 };
328 };
329
329
330 var createInlineForm = function(parent_tr, f_path, line) {
330 var createInlineForm = function(parent_tr, f_path, line) {
331 var tmpl = YUD.get('comment-inline-form-template').innerHTML;
331 var tmpl = YUD.get('comment-inline-form-template').innerHTML;
332 tmpl = tmpl.format(f_path, line);
332 tmpl = tmpl.format(f_path, line);
333 var form = tableTr('comment-form-inline',tmpl)
333 var form = tableTr('comment-form-inline',tmpl)
334
334
335 // create event for hide button
335 // create event for hide button
336 form = new YAHOO.util.Element(form);
336 form = new YAHOO.util.Element(form);
337 var form_hide_button = new YAHOO.util.Element(form.getElementsByClassName('hide-inline-form')[0]);
337 var form_hide_button = new YAHOO.util.Element(form.getElementsByClassName('hide-inline-form')[0]);
338 form_hide_button.on('click', function(e) {
338 form_hide_button.on('click', function(e) {
339 var newtr = e.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
339 var newtr = e.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
340 removeInlineForm(newtr);
340 removeInlineForm(newtr);
341 YUD.removeClass(parent_tr, 'form-open');
341 YUD.removeClass(parent_tr, 'form-open');
342 });
342 });
343 return form
343 return form
344 };
344 };
345 var injectInlineForm = function(tr){
345 var injectInlineForm = function(tr){
346 if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context') || YUD.hasClass(tr,'no-comment')){
346 if(YUD.hasClass(tr,'form-open') || YUD.hasClass(tr,'context') || YUD.hasClass(tr,'no-comment')){
347 return
347 return
348 }
348 }
349 YUD.addClass(tr,'form-open');
349 YUD.addClass(tr,'form-open');
350 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
350 var node = tr.parentNode.parentNode.parentNode.getElementsByClassName('full_f_path')[0];
351 var f_path = YUD.getAttribute(node,'path');
351 var f_path = YUD.getAttribute(node,'path');
352 var lineno = getLineNo(tr);
352 var lineno = getLineNo(tr);
353 var form = createInlineForm(tr, f_path, lineno);
353 var form = createInlineForm(tr, f_path, lineno);
354 var target_tr = tr;
354 var target_tr = tr;
355 if(YUD.hasClass(YUD.getNextSibling(tr),'inline-comments')){
355 if(YUD.hasClass(YUD.getNextSibling(tr),'inline-comments')){
356 target_tr = YUD.getNextSibling(tr);
356 target_tr = YUD.getNextSibling(tr);
357 }
357 }
358 YUD.insertAfter(form,target_tr);
358 YUD.insertAfter(form,target_tr);
359 YUD.get('text_'+lineno).focus();
359 YUD.get('text_'+lineno).focus();
360 tooltip_activate();
360 tooltip_activate();
361 };
361 };
362
362
363 var createInlineAddButton = function(tr,label){
363 var createInlineAddButton = function(tr,label){
364 var html = '<div class="add-comment"><span class="ui-btn">{0}</span></div>'.format(label);
364 var html = '<div class="add-comment"><span class="ui-btn">{0}</span></div>'.format(label);
365
365
366 var add = new YAHOO.util.Element(tableTr('inline-comments-button',html));
366 var add = new YAHOO.util.Element(tableTr('inline-comments-button',html));
367 add.on('click', function(e) {
367 add.on('click', function(e) {
368 injectInlineForm(tr);
368 injectInlineForm(tr);
369 });
369 });
370 return add;
370 return add;
371 };
371 };
372
372
373 var getLineNo = function(tr) {
373 var getLineNo = function(tr) {
374 var line;
374 var line;
375 var o = tr.children[0].id.split('_');
375 var o = tr.children[0].id.split('_');
376 var n = tr.children[1].id.split('_');
376 var n = tr.children[1].id.split('_');
377
377
378 if (n.length >= 2) {
378 if (n.length >= 2) {
379 line = n[n.length-1];
379 line = n[n.length-1];
380 } else if (o.length >= 2) {
380 } else if (o.length >= 2) {
381 line = o[o.length-1];
381 line = o[o.length-1];
382 }
382 }
383
383
384 return line
384 return line
385 };
385 };
386
386
387
387
388 var fileBrowserListeners = function(current_url, node_list_url, url_base,
388 var fileBrowserListeners = function(current_url, node_list_url, url_base,
389 truncated_lbl, nomatch_lbl){
389 truncated_lbl, nomatch_lbl){
390 var current_url_branch = +"?branch=__BRANCH__";
390 var current_url_branch = +"?branch=__BRANCH__";
391 var url = url_base;
391 var url = url_base;
392 var node_url = node_list_url;
392 var node_url = node_list_url;
393
393
394 YUE.on('stay_at_branch','click',function(e){
394 YUE.on('stay_at_branch','click',function(e){
395 if(e.target.checked){
395 if(e.target.checked){
396 var uri = current_url_branch;
396 var uri = current_url_branch;
397 uri = uri.replace('__BRANCH__',e.target.value);
397 uri = uri.replace('__BRANCH__',e.target.value);
398 window.location = uri;
398 window.location = uri;
399 }
399 }
400 else{
400 else{
401 window.location = current_url;
401 window.location = current_url;
402 }
402 }
403 })
403 })
404
404
405 var n_filter = YUD.get('node_filter');
405 var n_filter = YUD.get('node_filter');
406 var F = YAHOO.namespace('node_filter');
406 var F = YAHOO.namespace('node_filter');
407
407
408 F.filterTimeout = null;
408 F.filterTimeout = null;
409 var nodes = null;
409 var nodes = null;
410
410
411 F.initFilter = function(){
411 F.initFilter = function(){
412 YUD.setStyle('node_filter_box_loading','display','');
412 YUD.setStyle('node_filter_box_loading','display','');
413 YUD.setStyle('search_activate_id','display','none');
413 YUD.setStyle('search_activate_id','display','none');
414 YUD.setStyle('add_node_id','display','none');
414 YUD.setStyle('add_node_id','display','none');
415 YUC.initHeader('X-PARTIAL-XHR',true);
415 YUC.initHeader('X-PARTIAL-XHR',true);
416 YUC.asyncRequest('GET',url,{
416 YUC.asyncRequest('GET',url,{
417 success:function(o){
417 success:function(o){
418 nodes = JSON.parse(o.responseText);
418 nodes = JSON.parse(o.responseText);
419 YUD.setStyle('node_filter_box_loading','display','none');
419 YUD.setStyle('node_filter_box_loading','display','none');
420 YUD.setStyle('node_filter_box','display','');
420 YUD.setStyle('node_filter_box','display','');
421 n_filter.focus();
421 n_filter.focus();
422 if(YUD.hasClass(n_filter,'init')){
422 if(YUD.hasClass(n_filter,'init')){
423 n_filter.value = '';
423 n_filter.value = '';
424 YUD.removeClass(n_filter,'init');
424 YUD.removeClass(n_filter,'init');
425 }
425 }
426 },
426 },
427 failure:function(o){
427 failure:function(o){
428 console.log('failed to load');
428 console.log('failed to load');
429 }
429 }
430 },null);
430 },null);
431 }
431 }
432
432
433 F.updateFilter = function(e) {
433 F.updateFilter = function(e) {
434
434
435 return function(){
435 return function(){
436 // Reset timeout
436 // Reset timeout
437 F.filterTimeout = null;
437 F.filterTimeout = null;
438 var query = e.target.value.toLowerCase();
438 var query = e.target.value.toLowerCase();
439 var match = [];
439 var match = [];
440 var matches = 0;
440 var matches = 0;
441 var matches_max = 20;
441 var matches_max = 20;
442 if (query != ""){
442 if (query != ""){
443 for(var i=0;i<nodes.length;i++){
443 for(var i=0;i<nodes.length;i++){
444
444
445 var pos = nodes[i].name.toLowerCase().indexOf(query)
445 var pos = nodes[i].name.toLowerCase().indexOf(query)
446 if(query && pos != -1){
446 if(query && pos != -1){
447
447
448 matches++
448 matches++
449 //show only certain amount to not kill browser
449 //show only certain amount to not kill browser
450 if (matches > matches_max){
450 if (matches > matches_max){
451 break;
451 break;
452 }
452 }
453
453
454 var n = nodes[i].name;
454 var n = nodes[i].name;
455 var t = nodes[i].type;
455 var t = nodes[i].type;
456 var n_hl = n.substring(0,pos)
456 var n_hl = n.substring(0,pos)
457 +"<b>{0}</b>".format(n.substring(pos,pos+query.length))
457 +"<b>{0}</b>".format(n.substring(pos,pos+query.length))
458 +n.substring(pos+query.length)
458 +n.substring(pos+query.length)
459 match.push('<tr><td><a class="browser-{0}" href="{1}">{2}</a></td><td colspan="5"></td></tr>'.format(t,node_url.replace('__FPATH__',n),n_hl));
459 match.push('<tr><td><a class="browser-{0}" href="{1}">{2}</a></td><td colspan="5"></td></tr>'.format(t,node_url.replace('__FPATH__',n),n_hl));
460 }
460 }
461 if(match.length >= matches_max){
461 if(match.length >= matches_max){
462 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated_lbl));
462 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated_lbl));
463 }
463 }
464
464
465 }
465 }
466 }
466 }
467 if(query != ""){
467 if(query != ""){
468 YUD.setStyle('tbody','display','none');
468 YUD.setStyle('tbody','display','none');
469 YUD.setStyle('tbody_filtered','display','');
469 YUD.setStyle('tbody_filtered','display','');
470
470
471 if (match.length==0){
471 if (match.length==0){
472 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(nomatch_lbl));
472 match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(nomatch_lbl));
473 }
473 }
474
474
475 YUD.get('tbody_filtered').innerHTML = match.join("");
475 YUD.get('tbody_filtered').innerHTML = match.join("");
476 }
476 }
477 else{
477 else{
478 YUD.setStyle('tbody','display','');
478 YUD.setStyle('tbody','display','');
479 YUD.setStyle('tbody_filtered','display','none');
479 YUD.setStyle('tbody_filtered','display','none');
480 }
480 }
481
481
482 }
482 }
483 };
483 };
484
484
485 YUE.on(YUD.get('filter_activate'),'click',function(){
485 YUE.on(YUD.get('filter_activate'),'click',function(){
486 F.initFilter();
486 F.initFilter();
487 })
487 })
488 YUE.on(n_filter,'click',function(){
488 YUE.on(n_filter,'click',function(){
489 if(YUD.hasClass(n_filter,'init')){
489 if(YUD.hasClass(n_filter,'init')){
490 n_filter.value = '';
490 n_filter.value = '';
491 YUD.removeClass(n_filter,'init');
491 YUD.removeClass(n_filter,'init');
492 }
492 }
493 });
493 });
494 YUE.on(n_filter,'keyup',function(e){
494 YUE.on(n_filter,'keyup',function(e){
495 clearTimeout(F.filterTimeout);
495 clearTimeout(F.filterTimeout);
496 F.filterTimeout = setTimeout(F.updateFilter(e),600);
496 F.filterTimeout = setTimeout(F.updateFilter(e),600);
497 });
497 });
498 };
498 };
499
499
500
500
501 var initCodeMirror = function(textAreadId,resetUrl){
501 var initCodeMirror = function(textAreadId,resetUrl){
502 var myCodeMirror = CodeMirror.fromTextArea(YUD.get(textAreadId),{
502 var myCodeMirror = CodeMirror.fromTextArea(YUD.get(textAreadId),{
503 mode: "null",
503 mode: "null",
504 lineNumbers:true
504 lineNumbers:true
505 });
505 });
506 YUE.on('reset','click',function(e){
506 YUE.on('reset','click',function(e){
507 window.location=resetUrl
507 window.location=resetUrl
508 });
508 });
509
509
510 YUE.on('file_enable','click',function(){
510 YUE.on('file_enable','click',function(){
511 YUD.setStyle('editor_container','display','');
511 YUD.setStyle('editor_container','display','');
512 YUD.setStyle('upload_file_container','display','none');
512 YUD.setStyle('upload_file_container','display','none');
513 YUD.setStyle('filename_container','display','');
513 YUD.setStyle('filename_container','display','');
514 });
514 });
515
515
516 YUE.on('upload_file_enable','click',function(){
516 YUE.on('upload_file_enable','click',function(){
517 YUD.setStyle('editor_container','display','none');
517 YUD.setStyle('editor_container','display','none');
518 YUD.setStyle('upload_file_container','display','');
518 YUD.setStyle('upload_file_container','display','');
519 YUD.setStyle('filename_container','display','none');
519 YUD.setStyle('filename_container','display','none');
520 });
520 });
521 };
521 };
522
522
523
523
524
524
525 var getIdentNode = function(n){
525 var getIdentNode = function(n){
526 //iterate thru nodes untill matched interesting node !
526 //iterate thru nodes untill matched interesting node !
527
527
528 if (typeof n == 'undefined'){
528 if (typeof n == 'undefined'){
529 return -1
529 return -1
530 }
530 }
531
531
532 if(typeof n.id != "undefined" && n.id.match('L[0-9]+')){
532 if(typeof n.id != "undefined" && n.id.match('L[0-9]+')){
533 return n
533 return n
534 }
534 }
535 else{
535 else{
536 return getIdentNode(n.parentNode);
536 return getIdentNode(n.parentNode);
537 }
537 }
538 };
538 };
539
539
540 var getSelectionLink = function(selection_link_label) {
540 var getSelectionLink = function(selection_link_label) {
541 return function(){
541 return function(){
542 //get selection from start/to nodes
542 //get selection from start/to nodes
543 if (typeof window.getSelection != "undefined") {
543 if (typeof window.getSelection != "undefined") {
544 s = window.getSelection();
544 s = window.getSelection();
545
545
546 from = getIdentNode(s.anchorNode);
546 from = getIdentNode(s.anchorNode);
547 till = getIdentNode(s.focusNode);
547 till = getIdentNode(s.focusNode);
548
548
549 f_int = parseInt(from.id.replace('L',''));
549 f_int = parseInt(from.id.replace('L',''));
550 t_int = parseInt(till.id.replace('L',''));
550 t_int = parseInt(till.id.replace('L',''));
551
551
552 if (f_int > t_int){
552 if (f_int > t_int){
553 //highlight from bottom
553 //highlight from bottom
554 offset = -35;
554 offset = -35;
555 ranges = [t_int,f_int];
555 ranges = [t_int,f_int];
556
556
557 }
557 }
558 else{
558 else{
559 //highligth from top
559 //highligth from top
560 offset = 35;
560 offset = 35;
561 ranges = [f_int,t_int];
561 ranges = [f_int,t_int];
562 }
562 }
563
563
564 if (ranges[0] != ranges[1]){
564 if (ranges[0] != ranges[1]){
565 if(YUD.get('linktt') == null){
565 if(YUD.get('linktt') == null){
566 hl_div = document.createElement('div');
566 hl_div = document.createElement('div');
567 hl_div.id = 'linktt';
567 hl_div.id = 'linktt';
568 }
568 }
569 anchor = '#L'+ranges[0]+'-'+ranges[1];
569 anchor = '#L'+ranges[0]+'-'+ranges[1];
570 hl_div.innerHTML = '';
570 hl_div.innerHTML = '';
571 l = document.createElement('a');
571 l = document.createElement('a');
572 l.href = location.href.substring(0,location.href.indexOf('#'))+anchor;
572 l.href = location.href.substring(0,location.href.indexOf('#'))+anchor;
573 l.innerHTML = selection_link_label;
573 l.innerHTML = selection_link_label;
574 hl_div.appendChild(l);
574 hl_div.appendChild(l);
575
575
576 YUD.get('body').appendChild(hl_div);
576 YUD.get('body').appendChild(hl_div);
577
577
578 xy = YUD.getXY(till.id);
578 xy = YUD.getXY(till.id);
579
579
580 YUD.addClass('linktt','yui-tt');
580 YUD.addClass('linktt','yui-tt');
581 YUD.setStyle('linktt','top',xy[1]+offset+'px');
581 YUD.setStyle('linktt','top',xy[1]+offset+'px');
582 YUD.setStyle('linktt','left',xy[0]+'px');
582 YUD.setStyle('linktt','left',xy[0]+'px');
583 YUD.setStyle('linktt','visibility','visible');
583 YUD.setStyle('linktt','visibility','visible');
584 }
584 }
585 else{
585 else{
586 YUD.setStyle('linktt','visibility','hidden');
586 YUD.setStyle('linktt','visibility','hidden');
587 }
587 }
588 }
588 }
589 }
589 }
590 };
590 };
591
591
592 var deleteNotification = function(url, notification_id,callbacks){
592 var deleteNotification = function(url, notification_id,callbacks){
593 var callback = {
593 var callback = {
594 success:function(o){
594 success:function(o){
595 var obj = YUD.get(String("notification_"+notification_id));
595 var obj = YUD.get(String("notification_"+notification_id));
596 if(obj.parentNode !== undefined){
596 if(obj.parentNode !== undefined){
597 obj.parentNode.removeChild(obj);
597 obj.parentNode.removeChild(obj);
598 }
598 }
599 _run_callbacks(callbacks);
599 _run_callbacks(callbacks);
600 },
600 },
601 failure:function(o){
601 failure:function(o){
602 alert("error");
602 alert("error");
603 },
603 },
604 };
604 };
605 var postData = '_method=delete';
605 var postData = '_method=delete';
606 var sUrl = url.replace('__NOTIFICATION_ID__',notification_id);
606 var sUrl = url.replace('__NOTIFICATION_ID__',notification_id);
607 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl,
607 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl,
608 callback, postData);
608 callback, postData);
609 };
609 };
610
610
611
611
612 /**
612 /**
613 * QUICK REPO MENU
613 * QUICK REPO MENU
614 */
614 */
615 var quick_repo_menu = function(){
615 var quick_repo_menu = function(){
616 YUE.on(YUQ('.quick_repo_menu'),'click',function(e){
616 YUE.on(YUQ('.quick_repo_menu'),'click',function(e){
617 var menu = e.currentTarget.firstElementChild.firstElementChild;
617 var menu = e.currentTarget.firstElementChild.firstElementChild;
618 if(YUD.hasClass(menu,'hidden')){
618 if(YUD.hasClass(menu,'hidden')){
619 YUD.addClass(e.currentTarget,'active');
619 YUD.addClass(e.currentTarget,'active');
620 YUD.removeClass(menu,'hidden');
620 YUD.removeClass(menu,'hidden');
621 }else{
621 }else{
622 YUD.removeClass(e.currentTarget,'active');
622 YUD.removeClass(e.currentTarget,'active');
623 YUD.addClass(menu,'hidden');
623 YUD.addClass(menu,'hidden');
624 }
624 }
625 })
625 })
626 };
626 };
627
627
628
628
629 /**
629 /**
630 * TABLE SORTING
630 * TABLE SORTING
631 */
631 */
632
632
633 // returns a node from given html;
633 // returns a node from given html;
634 var fromHTML = function(html){
634 var fromHTML = function(html){
635 var _html = document.createElement('element');
635 var _html = document.createElement('element');
636 _html.innerHTML = html;
636 _html.innerHTML = html;
637 return _html;
637 return _html;
638 }
638 }
639 var get_rev = function(node){
639 var get_rev = function(node){
640 var n = node.firstElementChild.firstElementChild;
640 var n = node.firstElementChild.firstElementChild;
641
641
642 if (n===null){
642 if (n===null){
643 return -1
643 return -1
644 }
644 }
645 else{
645 else{
646 out = n.firstElementChild.innerHTML.split(':')[0].replace('r','');
646 out = n.firstElementChild.innerHTML.split(':')[0].replace('r','');
647 return parseInt(out);
647 return parseInt(out);
648 }
648 }
649 }
649 }
650
650
651 var get_name = function(node){
651 var get_name = function(node){
652 var name = node.firstElementChild.children[2].innerHTML;
652 var name = node.firstElementChild.children[2].innerHTML;
653 return name
653 return name
654 }
654 }
655 var get_group_name = function(node){
655 var get_group_name = function(node){
656 var name = node.firstElementChild.children[1].innerHTML;
656 var name = node.firstElementChild.children[1].innerHTML;
657 return name
657 return name
658 }
658 }
659 var get_date = function(node){
659 var get_date = function(node){
660 console.log(node.firstElementChild)
661 var date_ = node.firstElementChild.innerHTML;
660 var date_ = node.firstElementChild.innerHTML;
662 return date_
661 return date_
663 }
662 }
664
663
665 var revisionSort = function(a, b, desc, field) {
664 var revisionSort = function(a, b, desc, field) {
666
665
667 var a_ = fromHTML(a.getData(field));
666 var a_ = fromHTML(a.getData(field));
668 var b_ = fromHTML(b.getData(field));
667 var b_ = fromHTML(b.getData(field));
669
668
670 // extract revisions from string nodes
669 // extract revisions from string nodes
671 a_ = get_rev(a_)
670 a_ = get_rev(a_)
672 b_ = get_rev(b_)
671 b_ = get_rev(b_)
673
672
674 var comp = YAHOO.util.Sort.compare;
673 var comp = YAHOO.util.Sort.compare;
675 var compState = comp(a_, b_, desc);
674 var compState = comp(a_, b_, desc);
676 return compState;
675 return compState;
677 };
676 };
678 var ageSort = function(a, b, desc, field) {
677 var ageSort = function(a, b, desc, field) {
679 var a_ = a.getData(field);
678 var a_ = a.getData(field);
680 var b_ = b.getData(field);
679 var b_ = b.getData(field);
681
680
682 var comp = YAHOO.util.Sort.compare;
681 var comp = YAHOO.util.Sort.compare;
683 var compState = comp(a_, b_, desc);
682 var compState = comp(a_, b_, desc);
684 return compState;
683 return compState;
685 };
684 };
686
685
687 var nameSort = function(a, b, desc, field) {
686 var nameSort = function(a, b, desc, field) {
688 var a_ = fromHTML(a.getData(field));
687 var a_ = fromHTML(a.getData(field));
689 var b_ = fromHTML(b.getData(field));
688 var b_ = fromHTML(b.getData(field));
690
689
691 // extract name from table
690 // extract name from table
692 a_ = get_name(a_)
691 a_ = get_name(a_)
693 b_ = get_name(b_)
692 b_ = get_name(b_)
694
693
695 var comp = YAHOO.util.Sort.compare;
694 var comp = YAHOO.util.Sort.compare;
696 var compState = comp(a_, b_, desc);
695 var compState = comp(a_, b_, desc);
697 return compState;
696 return compState;
698 };
697 };
699
698
700 var groupNameSort = function(a, b, desc, field) {
699 var groupNameSort = function(a, b, desc, field) {
701 var a_ = fromHTML(a.getData(field));
700 var a_ = fromHTML(a.getData(field));
702 var b_ = fromHTML(b.getData(field));
701 var b_ = fromHTML(b.getData(field));
703
702
704 // extract name from table
703 // extract name from table
705 a_ = get_group_name(a_)
704 a_ = get_group_name(a_)
706 b_ = get_group_name(b_)
705 b_ = get_group_name(b_)
707
706
708 var comp = YAHOO.util.Sort.compare;
707 var comp = YAHOO.util.Sort.compare;
709 var compState = comp(a_, b_, desc);
708 var compState = comp(a_, b_, desc);
710 return compState;
709 return compState;
711 };
710 };
712 var dateSort = function(a, b, desc, field) {
711 var dateSort = function(a, b, desc, field) {
713 var a_ = fromHTML(a.getData(field));
712 var a_ = fromHTML(a.getData(field));
714 var b_ = fromHTML(b.getData(field));
713 var b_ = fromHTML(b.getData(field));
715
714
716 // extract name from table
715 // extract name from table
717 a_ = get_date(a_)
716 a_ = get_date(a_)
718 b_ = get_date(b_)
717 b_ = get_date(b_)
719
718
720 var comp = YAHOO.util.Sort.compare;
719 var comp = YAHOO.util.Sort.compare;
721 var compState = comp(a_, b_, desc);
720 var compState = comp(a_, b_, desc);
722 return compState;
721 return compState;
723 }; No newline at end of file
722 };
@@ -1,221 +1,220 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.html"/>
3 <%inherit file="/base/base.html"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name}
6 ${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name}
7 </%def>
7 </%def>
8
8
9 <%def name="breadcrumbs_links()">
9 <%def name="breadcrumbs_links()">
10 ${h.link_to(u'Home',h.url('/'))}
10 ${h.link_to(u'Home',h.url('/'))}
11 &raquo;
11 &raquo;
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
13 &raquo;
13 &raquo;
14 ${_('Changelog')} - ${_('showing ')} ${c.size if c.size <= c.total_cs else c.total_cs} ${_('out of')} ${c.total_cs} ${_('revisions')}
14 ${_('Changelog')} - ${_('showing ')} ${c.size if c.size <= c.total_cs else c.total_cs} ${_('out of')} ${c.total_cs} ${_('revisions')}
15 </%def>
15 </%def>
16
16
17 <%def name="page_nav()">
17 <%def name="page_nav()">
18 ${self.menu('changelog')}
18 ${self.menu('changelog')}
19 </%def>
19 </%def>
20
20
21 <%def name="main()">
21 <%def name="main()">
22 <div class="box">
22 <div class="box">
23 <!-- box / title -->
23 <!-- box / title -->
24 <div class="title">
24 <div class="title">
25 ${self.breadcrumbs()}
25 ${self.breadcrumbs()}
26 </div>
26 </div>
27 <div class="table">
27 <div class="table">
28 % if c.pagination:
28 % if c.pagination:
29 <div id="graph">
29 <div id="graph">
30 <div id="graph_nodes">
30 <div id="graph_nodes">
31 <canvas id="graph_canvas"></canvas>
31 <canvas id="graph_canvas"></canvas>
32 </div>
32 </div>
33 <div id="graph_content">
33 <div id="graph_content">
34 <div class="container_header">
34 <div class="container_header">
35 ${h.form(h.url.current(),method='get')}
35 ${h.form(h.url.current(),method='get')}
36 <div class="info_box" style="float:left">
36 <div class="info_box" style="float:left">
37 ${h.submit('set',_('Show'),class_="ui-btn")}
37 ${h.submit('set',_('Show'),class_="ui-btn")}
38 ${h.text('size',size=1,value=c.size)}
38 ${h.text('size',size=1,value=c.size)}
39 ${_('revisions')}
39 ${_('revisions')}
40 </div>
40 </div>
41 ${h.end_form()}
41 ${h.end_form()}
42 <div id="rev_range_container" style="display:none"></div>
42 <div id="rev_range_container" style="display:none"></div>
43 <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div>
43 <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div>
44 </div>
44 </div>
45
45
46 %for cnt,cs in enumerate(c.pagination):
46 %for cnt,cs in enumerate(c.pagination):
47 <div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
47 <div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
48 <div class="left">
48 <div class="left">
49 <div>
49 <div>
50 ${h.checkbox(cs.short_id,class_="changeset_range")}
50 ${h.checkbox(cs.short_id,class_="changeset_range")}
51 <span class="tooltip" title="${h.age(cs.date)}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span>
51 <span class="tooltip" title="${h.age(cs.date)}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span>
52 </div>
52 </div>
53 <div class="author">
53 <div class="author">
54 <div class="gravatar">
54 <div class="gravatar">
55 <img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/>
55 <img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/>
56 </div>
56 </div>
57 <div title="${cs.author}" class="user">${h.person(cs.author)}</div>
57 <div title="${cs.author}" class="user">${h.person(cs.author)}</div>
58 </div>
58 </div>
59 <div class="date">${cs.date}</div>
59 <div class="date">${cs.date}</div>
60 </div>
60 </div>
61 <div class="mid">
61 <div class="mid">
62 <div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message))}</div>
62 <div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message))}</div>
63 <div class="expand ${'tablerow%s' % (cnt%2)}">&darr; ${_('show more')} &darr;</div>
63 <div class="expand ${'tablerow%s' % (cnt%2)}">&darr; ${_('show more')} &darr;</div>
64 </div>
64 </div>
65 <div class="right">
65 <div class="right">
66 <div id="${cs.raw_id}_changes_info" class="changes">
66 <div id="${cs.raw_id}_changes_info" class="changes">
67 <span id="${cs.raw_id}" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</span>
67 <span id="${cs.raw_id}" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</span>
68 </div>
68 </div>
69 %if cs.parents:
69 %if cs.parents:
70 %for p_cs in reversed(cs.parents):
70 %for p_cs in reversed(cs.parents):
71 <div class="parent">${_('Parent')}
71 <div class="parent">${_('Parent')}
72 <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
72 <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
73 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
73 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
74 </div>
74 </div>
75 %endfor
75 %endfor
76 %else:
76 %else:
77 <div class="parent">${_('No parents')}</div>
77 <div class="parent">${_('No parents')}</div>
78 %endif
78 %endif
79
79
80 <span class="logtags">
80 <span class="logtags">
81 %if len(cs.parents)>1:
81 %if len(cs.parents)>1:
82 <span class="merge">${_('merge')}</span>
82 <span class="merge">${_('merge')}</span>
83 %endif
83 %endif
84 %if cs.branch:
84 %if cs.branch:
85 <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
85 <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
86 ${h.link_to(cs.branch,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
86 ${h.link_to(cs.branch,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
87 %endif
87 %endif
88 %for tag in cs.tags:
88 %for tag in cs.tags:
89 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
89 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
90 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
90 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
91 %endfor
91 %endfor
92 </span>
92 </span>
93 </div>
93 </div>
94 </div>
94 </div>
95
95
96 %endfor
96 %endfor
97 <div class="pagination-wh pagination-left">
97 <div class="pagination-wh pagination-left">
98 ${c.pagination.pager('$link_previous ~2~ $link_next')}
98 ${c.pagination.pager('$link_previous ~2~ $link_next')}
99 </div>
99 </div>
100 </div>
100 </div>
101 </div>
101 </div>
102
102
103 <script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
103 <script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
104 <script type="text/javascript">
104 <script type="text/javascript">
105 YAHOO.util.Event.onDOMReady(function(){
105 YAHOO.util.Event.onDOMReady(function(){
106
106
107 //Monitor range checkboxes and build a link to changesets
107 //Monitor range checkboxes and build a link to changesets
108 //ranges
108 //ranges
109 var checkboxes = YUD.getElementsByClassName('changeset_range');
109 var checkboxes = YUD.getElementsByClassName('changeset_range');
110 var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
110 var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
111 YUE.on(checkboxes,'click',function(e){
111 YUE.on(checkboxes,'click',function(e){
112 var checked_checkboxes = [];
112 var checked_checkboxes = [];
113 for (pos in checkboxes){
113 for (pos in checkboxes){
114 if(checkboxes[pos].checked){
114 if(checkboxes[pos].checked){
115 checked_checkboxes.push(checkboxes[pos]);
115 checked_checkboxes.push(checkboxes[pos]);
116 }
116 }
117 }
117 }
118 if(checked_checkboxes.length>1){
118 if(checked_checkboxes.length>1){
119 var rev_end = checked_checkboxes[0].name;
119 var rev_end = checked_checkboxes[0].name;
120 var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
120 var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
121
121
122 var url = url_tmpl.replace('__REVRANGE__',
122 var url = url_tmpl.replace('__REVRANGE__',
123 rev_start+'...'+rev_end);
123 rev_start+'...'+rev_end);
124
124
125 var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>"
125 var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>"
126 link = link.replace('__S',rev_start);
126 link = link.replace('__S',rev_start);
127 link = link.replace('__E',rev_end);
127 link = link.replace('__E',rev_end);
128 YUD.get('rev_range_container').innerHTML = link;
128 YUD.get('rev_range_container').innerHTML = link;
129 YUD.setStyle('rev_range_container','display','');
129 YUD.setStyle('rev_range_container','display','');
130 }
130 }
131 else{
131 else{
132 YUD.setStyle('rev_range_container','display','none');
132 YUD.setStyle('rev_range_container','display','none');
133
133
134 }
134 }
135 });
135 });
136
136
137 var msgs = YUQ('.message');
137 var msgs = YUQ('.message');
138 // get firts element height;
138 // get firts element height;
139 var el = YUQ('.container')[0];
139 var el = YUQ('.container')[0];
140 var row_h = el.clientHeight;
140 var row_h = el.clientHeight;
141 for(var i=0;i<msgs.length;i++){
141 for(var i=0;i<msgs.length;i++){
142 var m = msgs[i];
142 var m = msgs[i];
143
143
144 var h = m.clientHeight;
144 var h = m.clientHeight;
145 var pad = YUD.getStyle(m,'padding');
145 var pad = YUD.getStyle(m,'padding');
146 if(h > row_h){
146 if(h > row_h){
147 YUD.setStyle(m.nextElementSibling,'display','block');
147 YUD.setStyle(m.nextElementSibling,'display','block');
148 YUD.setStyle(m.nextElementSibling,'margin-top',row_h-(h+14)+'px');
148 YUD.setStyle(m.nextElementSibling,'margin-top',row_h-(h+14)+'px');
149 YUD.setAttribute(m.nextElementSibling,'expand',h);
149 YUD.setAttribute(m.nextElementSibling,'expand',h);
150 };
150 };
151 }
151 }
152 YUE.on(YUQ('.expand'),'click',function(e){
152 YUE.on(YUQ('.expand'),'click',function(e){
153 var elem = e.currentTarget.parentElement.parentElement;
153 var elem = e.currentTarget.parentElement.parentElement;
154 YUD.setStyle(e.currentTarget,'display','none');
154 YUD.setStyle(e.currentTarget,'display','none');
155 YUD.setStyle(elem,'height',YUD.getAttribute(e.currentTarget,'expand')+'px');
155 YUD.setStyle(elem,'height',YUD.getAttribute(e.currentTarget,'expand')+'px');
156
156
157 //redraw the graph max_w and jsdata are global vars
157 //redraw the graph max_w and jsdata are global vars
158 set_canvas(max_w);
158 set_canvas(max_w);
159
159
160 var r = new BranchRenderer();
160 var r = new BranchRenderer();
161 r.render(jsdata,max_w);
161 r.render(jsdata,max_w);
162
162
163 })
163 })
164
164
165 // Fetch changeset details
165 // Fetch changeset details
166 YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
166 YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
167 var id = e.currentTarget.id
167 var id = e.currentTarget.id
168 var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"
168 var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"
169 var url = url.replace('__CS__',id);
169 var url = url.replace('__CS__',id);
170 ypjax(url,id+'_changes_info',function(){tooltip_activate()});
170 ypjax(url,id+'_changes_info',function(){tooltip_activate()});
171 });
171 });
172
172
173 // change branch filter
173 // change branch filter
174 YUE.on(YUD.get('branch_filter'),'change',function(e){
174 YUE.on(YUD.get('branch_filter'),'change',function(e){
175 var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
175 var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
176 console.log(selected_branch);
177 var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
176 var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
178 var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
177 var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
179 var url = url.replace('__BRANCH__',selected_branch);
178 var url = url.replace('__BRANCH__',selected_branch);
180 if(selected_branch != ''){
179 if(selected_branch != ''){
181 window.location = url;
180 window.location = url;
182 }else{
181 }else{
183 window.location = url_main;
182 window.location = url_main;
184 }
183 }
185
184
186 });
185 });
187
186
188 function set_canvas(heads) {
187 function set_canvas(heads) {
189 var c = document.getElementById('graph_nodes');
188 var c = document.getElementById('graph_nodes');
190 var t = document.getElementById('graph_content');
189 var t = document.getElementById('graph_content');
191 canvas = document.getElementById('graph_canvas');
190 canvas = document.getElementById('graph_canvas');
192 var div_h = t.clientHeight;
191 var div_h = t.clientHeight;
193 c.style.height=div_h+'px';
192 c.style.height=div_h+'px';
194 canvas.setAttribute('height',div_h);
193 canvas.setAttribute('height',div_h);
195 c.style.height=max_w+'px';
194 c.style.height=max_w+'px';
196 canvas.setAttribute('width',max_w);
195 canvas.setAttribute('width',max_w);
197 };
196 };
198 var heads = 1;
197 var heads = 1;
199 var max_heads = 0;
198 var max_heads = 0;
200 var jsdata = ${c.jsdata|n};
199 var jsdata = ${c.jsdata|n};
201
200
202 for( var i=0;i<jsdata.length;i++){
201 for( var i=0;i<jsdata.length;i++){
203 var m = Math.max.apply(Math, jsdata[i][1]);
202 var m = Math.max.apply(Math, jsdata[i][1]);
204 if (m>max_heads){
203 if (m>max_heads){
205 max_heads = m;
204 max_heads = m;
206 }
205 }
207 }
206 }
208 var max_w = Math.max(100,max_heads*25);
207 var max_w = Math.max(100,max_heads*25);
209 set_canvas(max_w);
208 set_canvas(max_w);
210
209
211 var r = new BranchRenderer();
210 var r = new BranchRenderer();
212 r.render(jsdata,max_w);
211 r.render(jsdata,max_w);
213
212
214 });
213 });
215 </script>
214 </script>
216 %else:
215 %else:
217 ${_('There are no changes yet')}
216 ${_('There are no changes yet')}
218 %endif
217 %endif
219 </div>
218 </div>
220 </div>
219 </div>
221 </%def>
220 </%def>
@@ -1,193 +1,189 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.html"/>
3 <%inherit file="/base/base.html"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
6 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
7 </%def>
7 </%def>
8
8
9 <%def name="breadcrumbs_links()">
9 <%def name="breadcrumbs_links()">
10 ${h.link_to(u'Home',h.url('/'))}
10 ${h.link_to(u'Home',h.url('/'))}
11 &raquo;
11 &raquo;
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
12 ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
13 &raquo;
13 &raquo;
14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
14 ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
15 </%def>
15 </%def>
16
16
17 <%def name="page_nav()">
17 <%def name="page_nav()">
18 ${self.menu('changelog')}
18 ${self.menu('changelog')}
19 </%def>
19 </%def>
20
20
21 <%def name="main()">
21 <%def name="main()">
22 <div class="box">
22 <div class="box">
23 <!-- box / title -->
23 <!-- box / title -->
24 <div class="title">
24 <div class="title">
25 ${self.breadcrumbs()}
25 ${self.breadcrumbs()}
26 </div>
26 </div>
27 <div class="table">
27 <div class="table">
28 <div class="diffblock">
28 <div class="diffblock">
29 <div class="code-header">
29 <div class="code-header">
30 <div class="date">
30 <div class="date">
31 R${c.changeset.revision}:${h.link_to(h.short_id(c.changeset.raw_id),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
31 R${c.changeset.revision}:${h.link_to(h.short_id(c.changeset.raw_id),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
32 ${c.changeset.date}</div>
32 ${c.changeset.date}</div>
33 <div class="diff-actions">
33 <div class="diff-actions">
34 <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show')}" title="${_('raw diff')}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
34 <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show')}" title="${_('raw diff')}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
35 <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}" title="${_('download diff')}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
35 <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}" title="${_('download diff')}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
36 ${c.ignorews_url()}
36 ${c.ignorews_url()}
37 ${c.context_url()}
37 ${c.context_url()}
38 </div>
38 </div>
39 <div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
39 <div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
40 </div>
40 </div>
41 </div>
41 </div>
42 <div id="changeset_content">
42 <div id="changeset_content">
43 <div class="container">
43 <div class="container">
44 <div class="left">
44 <div class="left">
45 <div class="author">
45 <div class="author">
46 <div class="gravatar">
46 <div class="gravatar">
47 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
47 <img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),20)}"/>
48 </div>
48 </div>
49 <span>${h.person(c.changeset.author)}</span><br/>
49 <span>${h.person(c.changeset.author)}</span><br/>
50 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
50 <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
51 </div>
51 </div>
52 <div class="message">${h.urlify_commit(h.wrap_paragraphs(c.changeset.message))}</div>
52 <div class="message">${h.urlify_commit(h.wrap_paragraphs(c.changeset.message))}</div>
53 </div>
53 </div>
54 <div class="right">
54 <div class="right">
55 <div class="changes">
55 <div class="changes">
56 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
56 % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
57 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
57 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
58 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
58 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
59 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
59 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
60 % else:
60 % else:
61 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
61 <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
62 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
62 <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
63 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
63 <span class="added" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
64 % endif
64 % endif
65 </div>
65 </div>
66
66
67 %if c.changeset.parents:
67 %if c.changeset.parents:
68 %for p_cs in reversed(c.changeset.parents):
68 %for p_cs in reversed(c.changeset.parents):
69 <div class="parent">${_('Parent')}
69 <div class="parent">${_('Parent')}
70 <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
70 <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
71 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
71 h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
72 </div>
72 </div>
73 %endfor
73 %endfor
74 %else:
74 %else:
75 <div class="parent">${_('No parents')}</div>
75 <div class="parent">${_('No parents')}</div>
76 %endif
76 %endif
77 <span class="logtags">
77 <span class="logtags">
78 %if len(c.changeset.parents)>1:
78 %if len(c.changeset.parents)>1:
79 <span class="merge">${_('merge')}</span>
79 <span class="merge">${_('merge')}</span>
80 %endif
80 %endif
81 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
81 <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
82 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
82 ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
83 %for tag in c.changeset.tags:
83 %for tag in c.changeset.tags:
84 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
84 <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}">
85 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
85 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
86 %endfor
86 %endfor
87 </span>
87 </span>
88 </div>
88 </div>
89 </div>
89 </div>
90 <span>
90 <span>
91 ${_('%s files affected with %s additions and %s deletions:') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
91 ${_('%s files affected with %s additions and %s deletions:') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
92 </span>
92 </span>
93 <div class="cs_files">
93 <div class="cs_files">
94 %for change,filenode,diff,cs1,cs2,stat in c.changes:
94 %for change,filenode,diff,cs1,cs2,stat in c.changes:
95 <div class="cs_${change}">
95 <div class="cs_${change}">
96 <div class="node">
96 <div class="node">
97 %if change != 'removed':
97 %if change != 'removed':
98 ${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path)+"_target")}
98 ${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path)+"_target")}
99 %else:
99 %else:
100 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
100 ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
101 %endif
101 %endif
102 </div>
102 </div>
103 <div class="changes">${h.fancy_file_stats(stat)}</div>
103 <div class="changes">${h.fancy_file_stats(stat)}</div>
104 </div>
104 </div>
105 %endfor
105 %endfor
106 % if c.cut_off:
106 % if c.cut_off:
107 ${_('Changeset was too big and was cut off...')}
107 ${_('Changeset was too big and was cut off...')}
108 % endif
108 % endif
109 </div>
109 </div>
110 </div>
110 </div>
111
111
112 </div>
112 </div>
113
113
114 ## diff block
114 ## diff block
115 <%namespace name="diff_block" file="/changeset/diff_block.html"/>
115 <%namespace name="diff_block" file="/changeset/diff_block.html"/>
116 ${diff_block.diff_block(c.changes)}
116 ${diff_block.diff_block(c.changes)}
117
117
118 ## template for inline comment form
118 ## template for inline comment form
119 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
119 <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
120 ${comment.comment_inline_form(c.changeset)}
120 ${comment.comment_inline_form(c.changeset)}
121
121
122 ${comment.comments(c.changeset)}
122 ${comment.comments(c.changeset)}
123
123
124 <script type="text/javascript">
124 <script type="text/javascript">
125 var deleteComment = function(comment_id){
125 var deleteComment = function(comment_id){
126
126
127 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
127 var url = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}".replace('__COMMENT_ID__',comment_id);
128 var postData = '_method=delete';
128 var postData = '_method=delete';
129 var success = function(o){
129 var success = function(o){
130 var n = YUD.get('comment-'+comment_id);
130 var n = YUD.get('comment-'+comment_id);
131 n.parentNode.removeChild(n);
131 n.parentNode.removeChild(n);
132 }
132 }
133 ajaxPOST(url,postData,success);
133 ajaxPOST(url,postData,success);
134 }
134 }
135
135
136 YUE.onDOMReady(function(){
136 YUE.onDOMReady(function(){
137
137
138 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
138 YUE.on(YUQ('.show-inline-comments'),'change',function(e){
139 var show = 'none';
139 var show = 'none';
140 var target = e.currentTarget;
140 var target = e.currentTarget;
141 console.log(target);
142 if(target.checked){
141 if(target.checked){
143 var show = ''
142 var show = ''
144 }
143 }
145 console.log('aa')
146 var boxid = YUD.getAttribute(target,'id_for');
144 var boxid = YUD.getAttribute(target,'id_for');
147 console.log(boxid);
148 var comments = YUQ('#{0} .inline-comments'.format(boxid));
145 var comments = YUQ('#{0} .inline-comments'.format(boxid));
149 console.log(comments)
150 for(c in comments){
146 for(c in comments){
151 YUD.setStyle(comments[c],'display',show);
147 YUD.setStyle(comments[c],'display',show);
152 }
148 }
153 var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
149 var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
154 for(c in btns){
150 for(c in btns){
155 YUD.setStyle(btns[c],'display',show);
151 YUD.setStyle(btns[c],'display',show);
156 }
152 }
157 })
153 })
158
154
159 YUE.on(YUQ('.line'),'click',function(e){
155 YUE.on(YUQ('.line'),'click',function(e){
160 var tr = e.currentTarget;
156 var tr = e.currentTarget;
161 injectInlineForm(tr);
157 injectInlineForm(tr);
162 });
158 });
163
159
164 // inject comments into they proper positions
160 // inject comments into they proper positions
165 var file_comments = YUQ('.inline-comment-placeholder');
161 var file_comments = YUQ('.inline-comment-placeholder');
166
162
167 for (f in file_comments){
163 for (f in file_comments){
168 var box = file_comments[f];
164 var box = file_comments[f];
169 var inlines = box.children;
165 var inlines = box.children;
170 for(var i=0; i<inlines.length; i++){
166 for(var i=0; i<inlines.length; i++){
171 try{
167 try{
172
168
173 var inline = inlines[i];
169 var inline = inlines[i];
174 var lineno = YUD.getAttribute(inlines[i],'line');
170 var lineno = YUD.getAttribute(inlines[i],'line');
175 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
171 var lineid = "{0}_{1}".format(YUD.getAttribute(inline,'target_id'),lineno);
176 var target_line = YUD.get(lineid);
172 var target_line = YUD.get(lineid);
177
173
178 var add = createInlineAddButton(target_line.parentNode,'${_("add another comment")}');
174 var add = createInlineAddButton(target_line.parentNode,'${_("add another comment")}');
179 YUD.insertAfter(add,target_line.parentNode);
175 YUD.insertAfter(add,target_line.parentNode);
180
176
181 var comment = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
177 var comment = new YAHOO.util.Element(tableTr('inline-comments',inline.innerHTML))
182 YUD.insertAfter(comment,target_line.parentNode);
178 YUD.insertAfter(comment,target_line.parentNode);
183 }catch(e){
179 }catch(e){
184 console.log(e);
180 console.log(e);
185 }
181 }
186 }
182 }
187 }
183 }
188 })
184 })
189
185
190 </script>
186 </script>
191
187
192 </div>
188 </div>
193 </%def>
189 </%def>
General Comments 0
You need to be logged in to leave comments. Login now