diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js +++ b/rhodecode/public/js/rhodecode.js @@ -70,17 +70,6 @@ if(!Array.prototype.indexOf) { }; } -// IE(CRAP) doesn't support previousElementSibling -var prevElementSibling = function( el ) { - if( el.previousElementSibling ) { - return el.previousElementSibling; - } else { - while( el = el.previousSibling ) { - if( el.nodeType === 1 ) return el; - } - } -} - /** * A customized version of PyRoutes.JS from https://pypi.python.org/pypi/pyroutes.js/ * which is copyright Stephane Klein and was made available under the BSD License. @@ -273,6 +262,7 @@ var YUD = YAHOO.util.Dom; var YUE = YAHOO.util.Event; var YUQ = YAHOO.util.Selector.query; +/* Invoke all functions in callbacks */ var _run_callbacks = function(callbacks){ if (callbacks !== undefined){ var _l = callbacks.length; @@ -290,7 +280,7 @@ var _run_callbacks = function(callbacks) /** * turns objects into GET query string */ -var toQueryString = function(o) { +var _toQueryString = function(o) { if(typeof o !== 'object') { return false; } @@ -323,6 +313,7 @@ function ypjax(url,container,s_call,f_ca if(args===undefined){ args=null; } + $container = $('#' + container); // Set special header for partial ajax == HTTP_X_PARTIAL_XHR YUC.initHeader('X-PARTIAL-XHR',true); @@ -330,21 +321,21 @@ function ypjax(url,container,s_call,f_ca // wrapper of passed callback var s_wrapper = (function(o){ return function(o){ - YUD.get(container).innerHTML=o.responseText; - YUD.setStyle(container,'opacity','1.0'); + $container.html(o.responseText); + $container.css('opacity','1.0'); //execute the given original callback if (s_call !== undefined){ s_call(o); } } })() - YUD.setStyle(container,'opacity','0.3'); + $container.css('opacity','0.3'); YUC.asyncRequest(method,url,{ success:s_wrapper, failure:function(o){ - console.log(o); - YUD.get(container).innerHTML='ERROR: {0}'.format(o.status); - YUD.setStyle(container,'opacity','1.0'); + console.log('ypjax failure: '+o); + $container.html('ERROR: {0}'.format(o.status)); + $container.css('opacity','1.0'); }, cache:false },args); @@ -380,91 +371,78 @@ var ajaxPOST = function(url,postData,suc alert("error"); }, }; - var postData = toQueryString(postData); + var postData = _toQueryString(postData); var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); return request; }; /** - * tooltip activate - */ -var tooltip_activate = function(){ - yt = YAHOO.yuitip.main; - YUE.onDOMReady(yt.init); -}; - -/** - * show more + * activate .show_more links + * the .show_more must have an id that is the the id of an element to hide prefixed with _ + * the parentnode will be displayed */ var show_more_event = function(){ - YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){ - var el = e.target; - YUD.setStyle(YUD.get(el.id.substring(1)),'display',''); - YUD.setStyle(el.parentNode,'display','none'); + $('.show_more').click(function(e){ + var el = e.currentTarget; + $('#' + el.id.substring(1)).hide(); + $(el.parentNode).show(); }); }; /** - * show changeset tooltip + * activate .lazy-cs mouseover for showing changeset tooltip */ var show_changeset_tooltip = function(){ - YUE.on(YUD.getElementsByClassName('lazy-cs'), 'mouseover', function(e){ - var target = e.currentTarget; - var rid = YUD.getAttribute(target,'raw_id'); - var repo_name = YUD.getAttribute(target,'repo_name'); - var ttid = 'tt-'+rid; - var success = function(o){ - var json = JSON.parse(o.responseText); - YUD.addClass(target,'tooltip') - YUD.setAttribute(target, 'title',json['message']); - YAHOO.yuitip.main.show_yuitip(e, target); - } - if(rid && !YUD.hasClass(target, 'tooltip')){ - YUD.setAttribute(target,'id',ttid); - YUD.setAttribute(target, 'title',_TM['loading ...']); - YAHOO.yuitip.main.set_listeners(target); - YAHOO.yuitip.main.show_yuitip(e, target); - var url = pyroutes.url('changeset_info', {"repo_name":repo_name, "revision": rid}); - ajaxGET(url, success) + $('.lazy-cs').mouseover(function(e){ + var $target = $(e.currentTarget); + var rid = $target.attr('raw_id'); + var repo_name = $target.attr('repo_name'); + if(rid && !$target.hasClass('tooltip')){ + _show_tooltip(e, _TM['loading ...']); + var url = pyroutes.url('changeset_info', {"repo_name": repo_name, "revision": rid}); + ajaxGET(url, function(o){ + var json = JSON.parse(o.responseText); + $target.addClass('tooltip') + _show_tooltip(e, json['message']); + _activate_tooltip($target); + }); } }); }; -var onSuccessFollow = function(target){ - var f = YUD.get(target); - var f_cnt = YUD.get('current_followers_count'); - - if(YUD.hasClass(f, 'follow')){ - f.setAttribute('class','following'); - f.setAttribute('title',_TM['Stop following this repository']); - - if(f_cnt){ - var cnt = Number(f_cnt.innerHTML)+1; - f_cnt.innerHTML = cnt; +var _onSuccessFollow = function(target){ + var $target = $(target); + var $f_cnt = $('#current_followers_count'); + if($target.hasClass('follow')){ + $target.attr('class', 'following'); + $target.attr('title', _TM['Stop following this repository']); + if($f_cnt.html()){ + var cnt = Number($f_cnt.html())+1; + $f_cnt.html(cnt); } } else{ - f.setAttribute('class','follow'); - f.setAttribute('title',_TM['Start following this repository']); - if(f_cnt){ - var cnt = Number(f_cnt.innerHTML)-1; - f_cnt.innerHTML = cnt; + $target.attr('class', 'follow'); + $target.attr('title', _TM['Start following this repository']); + if($f_cnt.html()){ + var cnt = Number($f_cnt.html())-1; + $f_cnt.html(cnt); } } } -var toggleFollowingRepo = function(target,fallows_repo_id,token,user_id){ - args = 'follows_repo_id='+fallows_repo_id; +var toggleFollowingRepo = function(target, follows_repo_id, token, user_id){ + args = 'follows_repo_id='+follows_repo_id; args+= '&auth_token='+token; if(user_id != undefined){ args+="&user_id="+user_id; } $.post(TOGGLE_FOLLOW_URL, args, function(data){ - onSuccessFollow(target); + _onSuccessFollow(target); }); return false; -} +}; var showRepoSize = function(target, repo_name, token){ var args= 'auth_token='+token; @@ -478,113 +456,73 @@ var showRepoSize = function(target, repo }); } return false; -} +}; /** - * TOOLTIP IMPL. + * tooltips */ -YAHOO.namespace('yuitip'); -YAHOO.yuitip.main = { - - $: YAHOO.util.Dom.get, - bgColor: '#000', - speed: 0.3, - opacity: 0.9, - offset: [15,15], - useAnim: false, - maxWidth: 600, - add_links: false, - yuitips: [], +var tooltip_activate = function(){ + $(document).ready(_init_tooltip); +}; - set_listeners: function(tt){ - YUE.on(tt, 'mouseover', yt.show_yuitip, tt); - YUE.on(tt, 'mousemove', yt.move_yuitip, tt); - YUE.on(tt, 'mouseout', yt.close_yuitip, tt); - }, +var _activate_tooltip = function($tt){ + $tt.mouseover(_show_tooltip); + $tt.mousemove(_move_tooltip); + $tt.mouseout(_close_tooltip); +}; - init: function(){ - yt.tipBox = yt.$('tip-box'); - if(!yt.tipBox){ - yt.tipBox = document.createElement('div'); - document.body.appendChild(yt.tipBox); - yt.tipBox.id = 'tip-box'; - } +var _init_tooltip = function(){ + var $tipBox = $('#tip-box'); + if(!$tipBox.length){ + $tipBox = $('
') + $(document.body).append($tipBox); + } - YUD.setStyle(yt.tipBox, 'display', 'none'); - YUD.setStyle(yt.tipBox, 'position', 'absolute'); - if(yt.maxWidth !== null){ - YUD.setStyle(yt.tipBox, 'max-width', yt.maxWidth+'px'); - } - - var yuitips = YUD.getElementsByClassName('tooltip'); + $tipBox.hide(); + $tipBox.css('position', 'absolute'); + $tipBox.css('max-width', '600px'); - if(yt.add_links === true){ - var links = document.getElementsByTagName('a'); - var linkLen = links.length; - for(i=0;i