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.selector + ' ' + cfg.event);
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...
333 Roo.XComponent.on('buildcomplete', function() {
335 Roo.log("build complete!");
336 MTrackWeb.loaded = true;
337 var href = (window.location.pathname + window.location.search).substring(baseURL.length);
339 window.history.pushState( { url: href }, document.title , window.location.pathname + window.location.search );
342 MTrack.currentURL = href;
344 var pgn = MTrack.ajaxLoad(href);
346 MTrack.blockActivate = false;
350 // should be completly build by pman or xcomponent..
351 //Roo.XComponent.build()
354 Roo.XComponent.build();
366 /** this is the 'back' button handler.. */
369 window.onpopstate = function(ev) {
371 if (!ev.state || typeof(ev.state.url) == 'undefined') {
374 MTrack.ajaxLoad(ev.state.url, false);
380 // any date picers.. - on milestones? - not used any more...
381 MTrack.register('.dateinput', 'each', function(e) {
382 var ee = new Roo.form.DateField({
383 dateFormat: 'Y-m-d' // nice and compatible..
392 /// in future we should be specific how you can handle this..
393 MTrack.register('a.browse-link', 'on', 'click', function(event)
395 event.preventDefault();
397 if (!MTrackWeb.loaded) {
401 var href= this.dom.getAttribute('href').substring(baseURL.length);
402 MTrackWeb.pushState({
404 title : "Browse : " + href,
409 window.history.pushState( { url: href }, "Browse : " + href , this.dom.href );
410 Roo.log("history push state");
415 var slideleft = this.is('.browse-link-up') ? 0 : 1;
416 MTrack.ajaxLoad(href,slideleft);
421 //// ------------------- OLD STUFF NEEDS TIDY UP ----------------------
426 $(document).ready(function() {
431 $("textarea.wiki").markItUp({
433 previewParserPath: baseURL + "/Preview",
434 root: rootURL + "/js",
435 onShiftEnter: {keepDefault:false, replaceWith:'\\n\\n'},
438 name:'Heading 1', key:'1',
439 openWith:'== ', closeWith:' ==', placeHolder:'Your title here...'
442 name:'Heading 2', key:'2',
443 openWith:'=== ', closeWith:' ===', placeHolder:'Your title here...'
446 name:'Heading 3', key:'3',
447 openWith:'==== ', closeWith:' ====', placeHolder:'Your title here...'
450 name:'Heading 4', key:'4',
451 openWith:'===== ', closeWith:' =====', placeHolder:'Your title here...'
454 name:'Heading 5', key:'5',
455 openWith:'====== ', closeWith:' ======',
456 placeHolder:'Your title here...'
458 {separator:'---------------' },
459 {name:'Bold', key:'B', openWith:"'''", closeWith:"'''"},
460 {name:'Italic', key:'I', openWith:"''", closeWith:"''"},
461 {name:'Stroke through', key:'S', openWith:'~~', closeWith:'~~'},
462 {separator:'---------------' },
463 {name:'Bulleted list', openWith:' * '},
464 {name:'Numeric list', openWith:' 1. '},
465 {separator:'---------------' },
466 {name:'Quotes', openWith:'(!(> |!|>)!)'},
467 {name:'Code', openWith:'{{{\\n', closeWith:'\\n}}}'},
468 {separator:'---------------' },1
469 {name:'Preview', call:'preview', className:'preview'}
473 $.tablesorter.addParser({
476 return /^#\d+/.test(s);
478 format: function(s) {
479 return $.tablesorter.formatFloat(s.replace(new RegExp(/#/g), ''));
484 $.tablesorter.addParser({
490 format: function(s) {
491 // relies on the textExtraction routine below to pull a
492 // date/time string out of the title portion of the abbr tag
493 return $.tablesorter.formatFloat(new Date(s).getTime());
500 $("table.report, table.wiki").tablesorter({
501 textExtraction: function(node) {
502 var kid = node.childNodes[0];
503 if (kid && kid.tagName == 'ABBR') {
504 // assuming that this abbr is of class='timeinterval'
507 // default 'simple' behavior
508 if (kid && kid.hasChildNodes()) {
509 return kid.innerHTML;
511 return node.innerHTML;
516 $('input.search[type=text]').each(function () {
517 if ($.browser.webkit) {
518 this.type = 'search';
519 ///$(this).attr('autosave', ABSWEB+'/');
520 $(this).attr('results', 5);
522 $(this).addClass('roundsearch');
525 // Convert links that are styled after buttons into actual buttons
526 $('a.button[href]').each(function () {
527 var href = $(this).attr('href');
528 var but = $('<button type="button"/>');
529 but.text($(this).text());
530 $(this).replaceWith(but);
531 but.click(function () {
532 document.location.href = href;
537 $.fn.mtrackWatermark = function () {
538 this.each(function () {
539 var ph = $(this).attr('title');
540 if ($.browser.webkit) {
541 // Use native safari placeholder for watermark
542 $(this).attr('placeholder', ph);
544 // http://plugins.jquery.com/files/jquery.tinywatermark-2.0.0.js.txt
547 me.focus(function () {
550 me.removeClass('watermark').data('w', 0).val('');
556 me.addClass('watermark').data('w', 1).val(ph);
559 .closest('form').submit(function () {
568 // Watermarking -??? what??
569 $('input[title!=""]').mtrackWatermark();
579 // from head -- probably for reports only..
582 $(document).ready(function() {
584 $.tablesorter.addParser({
590 format: function(s) {
591 if (typeof(priorities[s]) != 'undefined') {
592 return priorities[s];
599 $.tablesorter.addParser({
605 format: function(s) {
606 if (typeof(severities[s]) != 'undefined') {
607 return severities[s];
617 $(document).ready(function(){
618 $('ul.wikitree').treeview({