|  | @@ -1,8 +1,11 @@
 | 
	
		
			
				|  |  |  // @codekit-prepend "lib/jquery-1.11.1.min.js"
 | 
	
		
			
				|  |  | +// @codekit-prepend "lib/lib.js"
 | 
	
		
			
				|  |  |  // @codekit-prepend "lib/tabs.js"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +var Gogs = {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  (function ($) {
 | 
	
		
			
				|  |  | -    // extend jQuery ajax, set csrf token value
 | 
	
		
			
				|  |  | +    // Extend jQuery ajax, set CSRF token value.
 | 
	
		
			
				|  |  |      var ajax = $.ajax;
 | 
	
		
			
				|  |  |      $.extend({
 | 
	
		
			
				|  |  |          ajax: function (url, options) {
 | 
	
	
		
			
				|  | @@ -51,15 +54,131 @@
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  }(jQuery));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +(function ($) {
 | 
	
		
			
				|  |  | +    // Render markdown.
 | 
	
		
			
				|  |  | +    Gogs.renderMarkdown = function () {
 | 
	
		
			
				|  |  | +        var $md = $('.markdown');
 | 
	
		
			
				|  |  | +        var $pre = $md.find('pre > code').parent();
 | 
	
		
			
				|  |  | +        $pre.addClass('prettyprint linenums');
 | 
	
		
			
				|  |  | +        prettyPrint();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // Set anchor.
 | 
	
		
			
				|  |  | +        var headers = {};
 | 
	
		
			
				|  |  | +        $md.find('h1, h2, h3, h4, h5, h6').each(function () {
 | 
	
		
			
				|  |  | +            var node = $(this);
 | 
	
		
			
				|  |  | +            var val = encodeURIComponent(node.text().toLowerCase().replace(/[^\w\- ]/g, '').replace(/[ ]/g, '-'));
 | 
	
		
			
				|  |  | +            var name = val;
 | 
	
		
			
				|  |  | +            if (headers[val] > 0) {
 | 
	
		
			
				|  |  | +                name = val + '-' + headers[val];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (headers[val] == undefined) {
 | 
	
		
			
				|  |  | +                headers[val] = 1;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                headers[val] += 1;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            node = node.wrap('<div id="' + name + '" class="anchor-wrap" ></div>');
 | 
	
		
			
				|  |  | +            node.append('<a class="anchor" href="#' + name + '"><span class="octicon octicon-link"></span></a>');
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Render code view.
 | 
	
		
			
				|  |  | +    Gogs.renderCodeView = function () {
 | 
	
		
			
				|  |  | +        function selectRange($list, $select, $from) {
 | 
	
		
			
				|  |  | +            $list.removeClass('active');
 | 
	
		
			
				|  |  | +            if ($from) {
 | 
	
		
			
				|  |  | +                var a = parseInt($select.attr('rel').substr(1));
 | 
	
		
			
				|  |  | +                var b = parseInt($from.attr('rel').substr(1));
 | 
	
		
			
				|  |  | +                var c;
 | 
	
		
			
				|  |  | +                if (a != b) {
 | 
	
		
			
				|  |  | +                    if (a > b) {
 | 
	
		
			
				|  |  | +                        c = a;
 | 
	
		
			
				|  |  | +                        a = b;
 | 
	
		
			
				|  |  | +                        b = c;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    var classes = [];
 | 
	
		
			
				|  |  | +                    for (i = a; i <= b; i++) {
 | 
	
		
			
				|  |  | +                        classes.push('.L' + i);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    $list.filter(classes.join(',')).addClass('active');
 | 
	
		
			
				|  |  | +                    $.changeHash('#L' + a + '-' + 'L' + b);
 | 
	
		
			
				|  |  | +                    return
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            $select.addClass('active');
 | 
	
		
			
				|  |  | +            $.changeHash('#' + $select.attr('rel'));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        $(document).on('click', '.lines-num span', function (e) {
 | 
	
		
			
				|  |  | +            var $select = $(this);
 | 
	
		
			
				|  |  | +            var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li');
 | 
	
		
			
				|  |  | +            selectRange($list, $list.filter('[rel=' + $select.attr('rel') + ']'), (e.shiftKey ? $list.filter('.active').eq(0) : null));
 | 
	
		
			
				|  |  | +            $.deSelect();
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        $('.code-view .lines-code > pre').each(function () {
 | 
	
		
			
				|  |  | +            var $pre = $(this);
 | 
	
		
			
				|  |  | +            var $lineCode = $pre.parent();
 | 
	
		
			
				|  |  | +            var $lineNums = $lineCode.siblings('.lines-num');
 | 
	
		
			
				|  |  | +            if ($lineNums.length > 0) {
 | 
	
		
			
				|  |  | +                var nums = $pre.find('ol.linenums > li').length;
 | 
	
		
			
				|  |  | +                for (var i = 1; i <= nums; i++) {
 | 
	
		
			
				|  |  | +                    $lineNums.append('<span id="L' + i + '" rel="L' + i + '">' + i + '</span>');
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        $(window).on('hashchange', function (e) {
 | 
	
		
			
				|  |  | +            var m = window.location.hash.match(/^#(L\d+)\-(L\d+)$/);
 | 
	
		
			
				|  |  | +            var $list = $('.code-view ol.linenums > li');
 | 
	
		
			
				|  |  | +            if (m) {
 | 
	
		
			
				|  |  | +                var $first = $list.filter('.' + m[1]);
 | 
	
		
			
				|  |  | +                selectRange($list, $first, $list.filter('.' + m[2]));
 | 
	
		
			
				|  |  | +                $("html, body").scrollTop($first.offset().top - 200);
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            m = window.location.hash.match(/^#(L\d+)$/);
 | 
	
		
			
				|  |  | +            if (m) {
 | 
	
		
			
				|  |  | +                var $first = $list.filter('.' + m[1]);
 | 
	
		
			
				|  |  | +                selectRange($list, $first);
 | 
	
		
			
				|  |  | +                $("html, body").scrollTop($first.offset().top - 200);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }).trigger('hashchange');
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +})(jQuery);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function initCore() {
 | 
	
		
			
				|  |  | +    Gogs.renderMarkdown();
 | 
	
		
			
				|  |  | +    Gogs.renderCodeView();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function initRepoCreate() {
 | 
	
		
			
				|  |  | +    // Owner switch menu click.
 | 
	
		
			
				|  |  | +    $('#repo-create-owner-list').on('click', 'li', function () {
 | 
	
		
			
				|  |  | +        if (!$(this).hasClass('checked')) {
 | 
	
		
			
				|  |  | +            var uid = $(this).data('uid');
 | 
	
		
			
				|  |  | +            $('#repo-owner-id').val(uid);
 | 
	
		
			
				|  |  | +            $('#repo-owner-avatar').attr("src", $(this).find('img').attr("src"));
 | 
	
		
			
				|  |  | +            $('#repo-owner-name').text($(this).text().trim());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            $(this).parent().find('.checked').removeClass('checked');
 | 
	
		
			
				|  |  | +            $(this).addClass('checked');
 | 
	
		
			
				|  |  | +            console.log("set repo owner to uid :", uid, $(this).text().trim());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  $(document).ready(function () {
 | 
	
		
			
				|  |  | +    initCore();
 | 
	
		
			
				|  |  | +    if ($('#repo-create-form').length) {
 | 
	
		
			
				|  |  | +        initRepoCreate();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      Tabs('#dashboard-sidebar-menu');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      homepage();
 | 
	
		
			
				|  |  |      settingsProfile();
 | 
	
		
			
				|  |  |      settingsSSHKeys();
 | 
	
		
			
				|  |  |      settingsDelete();
 | 
	
		
			
				|  |  | -    renderMarkdown();
 | 
	
		
			
				|  |  | -    renderCodeView();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Fix language drop-down menu height.
 | 
	
		
			
				|  |  |      var l = $('#footer-lang li').length;
 | 
	
	
		
			
				|  | @@ -114,92 +233,4 @@ function settingsDelete() {
 | 
	
		
			
				|  |  |              return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function renderMarkdown() {
 | 
	
		
			
				|  |  | -    var $md = $('.markdown');
 | 
	
		
			
				|  |  | -    var $pre = $md.find('pre > code').parent();
 | 
	
		
			
				|  |  | -    $pre.addClass('prettyprint linenums');
 | 
	
		
			
				|  |  | -    prettyPrint();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // Set anchor.
 | 
	
		
			
				|  |  | -    var headers = {};
 | 
	
		
			
				|  |  | -    $md.find('h1, h2, h3, h4, h5, h6').each(function () {
 | 
	
		
			
				|  |  | -        var node = $(this);
 | 
	
		
			
				|  |  | -        var val = encodeURIComponent(node.text().toLowerCase().replace(/[^\w\- ]/g, '').replace(/[ ]/g, '-'));
 | 
	
		
			
				|  |  | -        var name = val;
 | 
	
		
			
				|  |  | -        if (headers[val] > 0) {
 | 
	
		
			
				|  |  | -            name = val + '-' + headers[val];
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (headers[val] == undefined) {
 | 
	
		
			
				|  |  | -            headers[val] = 1;
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            headers[val] += 1;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        node = node.wrap('<div id="' + name + '" class="anchor-wrap" ></div>');
 | 
	
		
			
				|  |  | -        node.append('<a class="anchor" href="#' + name + '"><span class="octicon octicon-link"></span></a>');
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function renderCodeView() {
 | 
	
		
			
				|  |  | -    function selectRange($list, $select, $from) {
 | 
	
		
			
				|  |  | -        $list.removeClass('active');
 | 
	
		
			
				|  |  | -        if ($from) {
 | 
	
		
			
				|  |  | -            var a = parseInt($select.attr('rel').substr(1));
 | 
	
		
			
				|  |  | -            var b = parseInt($from.attr('rel').substr(1));
 | 
	
		
			
				|  |  | -            var c;
 | 
	
		
			
				|  |  | -            if (a != b) {
 | 
	
		
			
				|  |  | -                if (a > b) {
 | 
	
		
			
				|  |  | -                    c = a;
 | 
	
		
			
				|  |  | -                    a = b;
 | 
	
		
			
				|  |  | -                    b = c;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                var classes = [];
 | 
	
		
			
				|  |  | -                for (i = a; i <= b; i++) {
 | 
	
		
			
				|  |  | -                    classes.push('.L' + i);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                $list.filter(classes.join(',')).addClass('active');
 | 
	
		
			
				|  |  | -                $.changeHash('#L' + a + '-' + 'L' + b);
 | 
	
		
			
				|  |  | -                return
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        $select.addClass('active');
 | 
	
		
			
				|  |  | -        $.changeHash('#' + $select.attr('rel'));
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    $(document).on('click', '.lines-num span', function (e) {
 | 
	
		
			
				|  |  | -        var $select = $(this);
 | 
	
		
			
				|  |  | -        var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li');
 | 
	
		
			
				|  |  | -        selectRange($list, $list.filter('[rel=' + $select.attr('rel') + ']'), (e.shiftKey ? $list.filter('.active').eq(0) : null));
 | 
	
		
			
				|  |  | -        $.deSelect();
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    $('.code-view .lines-code > pre').each(function () {
 | 
	
		
			
				|  |  | -        var $pre = $(this);
 | 
	
		
			
				|  |  | -        var $lineCode = $pre.parent();
 | 
	
		
			
				|  |  | -        var $lineNums = $lineCode.siblings('.lines-num');
 | 
	
		
			
				|  |  | -        if ($lineNums.length > 0) {
 | 
	
		
			
				|  |  | -            var nums = $pre.find('ol.linenums > li').length;
 | 
	
		
			
				|  |  | -            for (var i = 1; i <= nums; i++) {
 | 
	
		
			
				|  |  | -                $lineNums.append('<span id="L' + i + '" rel="L' + i + '">' + i + '</span>');
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    $(window).on('hashchange', function (e) {
 | 
	
		
			
				|  |  | -        var m = window.location.hash.match(/^#(L\d+)\-(L\d+)$/);
 | 
	
		
			
				|  |  | -        var $list = $('.code-view ol.linenums > li');
 | 
	
		
			
				|  |  | -        if (m) {
 | 
	
		
			
				|  |  | -            var $first = $list.filter('.' + m[1]);
 | 
	
		
			
				|  |  | -            selectRange($list, $first, $list.filter('.' + m[2]));
 | 
	
		
			
				|  |  | -            $("html, body").scrollTop($first.offset().top - 200);
 | 
	
		
			
				|  |  | -            return;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        m = window.location.hash.match(/^#(L\d+)$/);
 | 
	
		
			
				|  |  | -        if (m) {
 | 
	
		
			
				|  |  | -            var $first = $list.filter('.' + m[1]);
 | 
	
		
			
				|  |  | -            selectRange($list, $first);
 | 
	
		
			
				|  |  | -            $("html, body").scrollTop($first.offset().top - 200);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }).trigger('hashchange');
 | 
	
		
			
				|  |  |  }
 |