1 //<Script type="text/javascript">
6 * pretty much rewritten by now... most of this code is getting moved to the interface
9 * uses a simple registry - all code get's added to it,
10 * then whenever html is loaded via AJAX, we can run run through the handlers and add them.
20 Roo.onReady(function () {
21 //MTrack.footerSetAndWait();
23 window.setTimeout(MTrack.keepLoggedIn, 30000);
30 // this may be handled by Pman.Login class..
31 keepLoggedIn: function()
34 url : baseURL + '/Login.html',
36 data : { refresh : 1 },
37 success : function() {
39 window.setTimeout(MTrack.keepLoggedIn, 30000);
40 // what if it's false..currentURL = false;
53 * MTrack.register('a.changeset-link', 'each', function() ....)
54 * MTrack.register('a.changeset-link', 'on', 'click', function() ....)
57 register : function( selector, method, arg1, arg2)
59 MTrack.registry.push( {
62 event : method == 'on' ? arg1 : false,
63 args : method == 'on' ? arg2 : arg1
68 addHandlers : function (toWhat)
70 // forEach? - no IE support?
71 toWhat = toWhat || document.body; //
72 // run the main registry
73 Roo.each(MTrack.registry, function(cfg) {
75 if (typeof(cfg) != 'object') {
78 //Roo.log("Add select:" + cfg.selector);
81 var el = Roo.get(toWhat).select(cfg.selector,true);
82 Roo.log("Add select : " + cfg.method);
84 el[cfg.method].apply(el, cfg.event ? [ cfg.event, cfg.args ] : [ cfg.args ] );
86 Roo.log("Error applying select:" + C.selector);
88 // do not throw any more..
92 //Roo.log("DONE ADD SELECTORS");
93 // any other weird crap goes here.
97 Roo.select(toWhat,true).select("form").set( { "autocomplete" : "off" });
103 //jQuery.timeago.settings.allowFuture = true;
104 //$(toWhat).find('abbr.timeinterval').timeago();
106 // multipe select addon
107 //$(toWhat).find("select[multiple]").asmSelect({
108 // addItemTarget: 'bottom',
111 // removeLabel: '[x]',
118 missingHashRequest : false,
121 // This is the main body load tool...
122 // it still needs to handle anchors...
125 ajaxLoad : function(url,cp)
127 if (!MTrackWeb.loaded) {
130 MTrack.currentURL = url;
132 // different urls load in different tabs..
133 var u_ar = url.split(/\//);
135 var pg = u_ar.shift();
136 if (!pg || !pg.length) {
137 pg = 'Browse'; // default..
139 pg = pg.split('.').shift();
144 cp = MTrackWeb.Ticket;
150 cp = MTrackWeb.TabCode;
152 MTrackWeb.Layout.layout.getRegion('center').showPanel(cp.panel);
153 cp.panel.fireEvent('activate', cp.panel);
157 // new style... panel activate handles loading..
161 cp = MTrackWeb['Tab' + pg];
163 MTrackWeb.Layout.layout.getRegion('center').showPanel(cp.panel);
164 cp.panel.fireEvent('activate', cp.panel);
168 MTrackWeb.Layout.layout.getRegion('center').showPanel(cp.panel);
175 params : { ajax_body : 1 },
176 success : function(data) {
177 //cp = cp && typeof(cp) == 'object' ? cp : MTrack.layout.getRegion('center').getPanel(pgn);
179 //MTrack.layout.getRegion('center').showPanel(pgn);
181 cp.tpanel.setContent(data.responseText);
182 MTrack.addHandlers(cp.tpanel.el.dom);
183 MTrack.missingHashes(cp.tpanel.el,url);
188 this was ours slidy code..
189 Roo.get(document.body).scrollTo('top',0,true);
190 this.currentURL = url;
191 var target = MTrack.ajaxbody.el.dom;//Roo.get("ajaxbody");
192 var content = Roo.get("content");
193 target.setStyle('position', 'relative');
195 Roo.select('.mask').show(); // must show first?
196 Roo.select('.mask-loading').show();
197 // content has a border...
198 var t = content.getBox().y ;// - Roo.get(document).getScroll().top;// - 13;
199 var l = content.getBox().x ;// - Roo.get(document).getScroll().left;// - 13;
200 var w = content.getBox().width+ 26;
201 var h = content.getBox().height + 26;
203 Roo.select('.mask').first().setLocation(l,t);
204 Roo.select('.mask').first().setSize( w , h, false );
206 Roo.select('.mask-loading').first().setLocation(
207 l + ( w / 2) - 16, t + 16
210 //if (MTrack.missingHashRequest) {
212 // MTrack.missingHashRequest = false;
214 Roo.get('loader').hide();
215 Roo.get('loader').setStyle('position', 'relative');
219 params : { ajax_body : 1 },
220 success : function(data) {
222 Roo.select('.mask').hide();
223 Roo.get('loader').update(data.responseText);
224 Roo.get('loader').show();
225 Roo.get('loader').setWidth( w );
226 Roo.get('loader').setLocation( slideleft? l+w : l-w , t );
228 // old layer - move it away..
231 left: { from : 0 , to : slideleft ? -1 * w : w }
235 // reset it at end of animation - as it ends up with the new content.
236 //target.setLocation( 0 , t );
241 Roo.get('loader').animate(
243 left: { from : slideleft? l+w : l-w , to : l }
247 target.update( Roo.get('loader').dom.innerHTML);
248 Roo.get('loader').hide();
249 Roo.get('loader').update("");
250 target.show();// make sure!!
251 target.setLocation( l ,t );
253 MTrack.missingHashes(target, url);
254 MTrack.addHandlers(target);
261 //console.log('loaded dif');
271 missingHashRequest : false,
272 missingHashes: function(el,url) {
275 console.log('finding missing hashes?');
277 if (!el || !el.select('.browse-missing-hash')) {
280 el.select('.browse-missing-hash').each(function() {
281 hashes.push(this.dom.id);
284 if (!hashes.length) {
285 Roo.log("no missing hashes");
292 params : { hashes : hashes.join(',') },
293 success : function(res) {
294 var data = Roo.decode(res.responseText);
296 //console.log(data.data);
298 for(var hash in data.data) {
299 var o = data.data[hash];
300 Roo.select('#'+ hash).first().dom.innerHTML = o.changeby + ' : ' + o.changelog;
301 Roo.select('#age-'+ hash).first().dom.innerHTML = o.age ; // do magic replacement!!!
302 Roo.select('#rev-'+ hash).first().dom.innerHTML = o.rev ; // do magic replacement!!!
303 MTrack.addHandlers(Roo.select('#age-'+ hash).first());
304 MTrack.missingHashRequest = false;
318 Roo.onReady(function() {
319 //MTrack.addHandlers(); // adds to main body..
324 Pman.Login.authUser = authUser;
328 // let's try the magic...
334 MTrackWeb.Layout.on('buildcomplete', function() {
336 Roo.log("build complete!");
337 MTrackWeb.loaded = true;
338 var href = (window.location.pathname + window.location.search).substring(baseURL.length);
340 window.history.pushState( { url: href }, document.title , window.location.pathname + window.location.search );
343 MTrack.currentURL = href;
345 var pgn = MTrack.ajaxLoad(href);
347 MTrack.blockActivate = false;
351 // should be completly build by pman or xcomponent..
352 //Roo.XComponent.build()
355 Roo.XComponent.build();
367 /** this is the 'back' button handler.. */
370 window.onpopstate = function(ev) {
372 if (!ev.state || typeof(ev.state.url) == 'undefined') {
375 MTrack.ajaxLoad(ev.state.url, false);
381 // any date picers.. - on milestones? - not used any more...
382 MTrack.register('.dateinput', 'each', function(e) {
383 var ee = new Roo.form.DateField({
384 dateFormat: 'Y-m-d' // nice and compatible..
393 /// in future we should be specific how you can handle this..
394 MTrack.register('a.browse-link', 'on', 'click', function(event)
396 event.preventDefault();
398 if (!MTrackWeb.loaded) {
402 var href= this.dom.getAttribute('href').substring(baseURL.length);
403 MTrackWeb.pushState({
405 title : "Browse : " + href,
410 window.history.pushState( { url: href }, "Browse : " + href , this.dom.href );
411 Roo.log("history push state");
416 var slideleft = this.is('.browse-link-up') ? 0 : 1;
417 MTrack.ajaxLoad(href,slideleft);
422 //// ------------------- OLD STUFF NEEDS TIDY UP ----------------------
427 $(document).ready(function() {
432 $("textarea.wiki").markItUp({
434 previewParserPath: baseURL + "/Preview",
435 root: rootURL + "/js",
436 onShiftEnter: {keepDefault:false, replaceWith:'\\n\\n'},
439 name:'Heading 1', key:'1',
440 openWith:'== ', closeWith:' ==', placeHolder:'Your title here...'
443 name:'Heading 2', key:'2',
444 openWith:'=== ', closeWith:' ===', placeHolder:'Your title here...'
447 name:'Heading 3', key:'3',
448 openWith:'==== ', closeWith:' ====', placeHolder:'Your title here...'
451 name:'Heading 4', key:'4',
452 openWith:'===== ', closeWith:' =====', placeHolder:'Your title here...'
455 name:'Heading 5', key:'5',
456 openWith:'====== ', closeWith:' ======',
457 placeHolder:'Your title here...'
459 {separator:'---------------' },
460 {name:'Bold', key:'B', openWith:"'''", closeWith:"'''"},
461 {name:'Italic', key:'I', openWith:"''", closeWith:"''"},
462 {name:'Stroke through', key:'S', openWith:'~~', closeWith:'~~'},
463 {separator:'---------------' },
464 {name:'Bulleted list', openWith:' * '},
465 {name:'Numeric list', openWith:' 1. '},
466 {separator:'---------------' },
467 {name:'Quotes', openWith:'(!(> |!|>)!)'},
468 {name:'Code', openWith:'{{{\\n', closeWith:'\\n}}}'},
469 {separator:'---------------' },1
470 {name:'Preview', call:'preview', className:'preview'}
474 $.tablesorter.addParser({
477 return /^#\d+/.test(s);
479 format: function(s) {
480 return $.tablesorter.formatFloat(s.replace(new RegExp(/#/g), ''));
485 $.tablesorter.addParser({
491 format: function(s) {
492 // relies on the textExtraction routine below to pull a
493 // date/time string out of the title portion of the abbr tag
494 return $.tablesorter.formatFloat(new Date(s).getTime());
501 $("table.report, table.wiki").tablesorter({
502 textExtraction: function(node) {
503 var kid = node.childNodes[0];
504 if (kid && kid.tagName == 'ABBR') {
505 // assuming that this abbr is of class='timeinterval'
508 // default 'simple' behavior
509 if (kid && kid.hasChildNodes()) {
510 return kid.innerHTML;
512 return node.innerHTML;
517 $('input.search[type=text]').each(function () {
518 if ($.browser.webkit) {
519 this.type = 'search';
520 ///$(this).attr('autosave', ABSWEB+'/');
521 $(this).attr('results', 5);
523 $(this).addClass('roundsearch');
526 // Convert links that are styled after buttons into actual buttons
527 $('a.button[href]').each(function () {
528 var href = $(this).attr('href');
529 var but = $('<button type="button"/>');
530 but.text($(this).text());
531 $(this).replaceWith(but);
532 but.click(function () {
533 document.location.href = href;
538 $.fn.mtrackWatermark = function () {
539 this.each(function () {
540 var ph = $(this).attr('title');
541 if ($.browser.webkit) {
542 // Use native safari placeholder for watermark
543 $(this).attr('placeholder', ph);
545 // http://plugins.jquery.com/files/jquery.tinywatermark-2.0.0.js.txt
548 me.focus(function () {
551 me.removeClass('watermark').data('w', 0).val('');
557 me.addClass('watermark').data('w', 1).val(ph);
560 .closest('form').submit(function () {
569 // Watermarking -??? what??
570 $('input[title!=""]').mtrackWatermark();
580 // from head -- probably for reports only..
583 $(document).ready(function() {
585 $.tablesorter.addParser({
591 format: function(s) {
592 if (typeof(priorities[s]) != 'undefined') {
593 return priorities[s];
600 $.tablesorter.addParser({
606 format: function(s) {
607 if (typeof(severities[s]) != 'undefined') {
608 return severities[s];
618 $(document).ready(function(){
619 $('ul.wikitree').treeview({