• J
    gitweb: Create links leading to 'blame_incremental' using JavaScript · c4ccf61f
    Jakub Narebski 提交于
    The new 'blame_incremental' view requires JavaScript to run.  Not all
    web browsers implement JavaScript (e.g. text browsers such as Lynx),
    and not all users have JavaScript enabled.  Therefore instead of
    unconditionally linking to 'blame_incremental' view, we use JavaScript
    to convert those links to lead to view utilizing JavaScript, by adding
    'js=1' to link.
    
    Currently the only action that takes 'js=1' into account is 'blame',
    which then acts as if it was called as 'blame_incremental' action.
    Possible enhancement would be to do JavaScript redirect by setting
    window.location instead of modifying $format and $action in
    git_blame_common() subroutine.
    
    The only JavaScript-aware/using view is currently 'blame_incremental'.
    While at it move reading JavaScript to git_footer_html() subroutine.
    Note that in this view we do not add 'js=1' currently (even though
    perhaps we should; note that for consistency we should also add 'js=1'
    in links added by JavaScript part of 'blame_incremental').
    
    This idea was originally implemented by Petr Baudis in
      http://article.gmane.org/gmane.comp.version-control.git/47614
    but it added <script> element with fixBlameLinks() function in page
    header, to be added as onload event using 'onload' attribute of HTML
    'body' element: <body onload="fixBlameLinks();">.  This version adds
    script at then end of page (in the page footer), and uses JavaScript
    'window.onload=fixLinks();'.  Also in Petr version only links marked
    with 'blamelink' class were modified, and they were modified by
    replacing "a=blame" by "a=blame_incremental"... which doesn't work for
    path_info links, and might replace wrong part if there is "a=blame" in
    project name, ref name or file name.
    
    Slightly different solution was implemented by Martin Koegler in
      http://thread.gmane.org/gmane.comp.version-control.git/47902/focus=47905
    Here GitAddLinks() function was in gitweb.js file, not as contents of
    <script> element.  It was also included in page header (in <head>
    element) though, which means waiting for a script to load (and run).
    It was smarter in that to "fix" (modify) link, it split URL, modified
    value of 'a' parameter, and then recreated modified link.  It avoids
    trouble with "a=blame" as substring in project name or file name, but
    it doesn't work with path_info URL/link in the way it was written.
    Signed-off-by: NJakub Narebski <jnareb@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    c4ccf61f
gitweb.js 23.3 KB