cGit-UI for Git Repositories

cGit-UI – is a web interface for Git Repositories. cGit CGI script is writen in C and therefore it's fast enough

3 Commits   0 Branches   1 Tag
05d292b2 (kx 2023-03-24 03:51:10 +0300   1) 
05d292b2 (kx 2023-03-24 03:51:10 +0300   2) function get_query_parameter( name, url = window.location.href )
05d292b2 (kx 2023-03-24 03:51:10 +0300   3) {
05d292b2 (kx 2023-03-24 03:51:10 +0300   4)   name = name.replace( /[\[\]]/g, '\\$&' );
05d292b2 (kx 2023-03-24 03:51:10 +0300   5)   var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url);
05d292b2 (kx 2023-03-24 03:51:10 +0300   6)   if( !results ) return null;
05d292b2 (kx 2023-03-24 03:51:10 +0300   7)   if( !results[2] ) return '';
05d292b2 (kx 2023-03-24 03:51:10 +0300   8)   return decodeURIComponent( results[2].replace(/\+/g, ' ') );
05d292b2 (kx 2023-03-24 03:51:10 +0300   9) }
05d292b2 (kx 2023-03-24 03:51:10 +0300  10) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  11) function removeParam( query_string, param ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  12)   if( query_string !== "" )
05d292b2 (kx 2023-03-24 03:51:10 +0300  13)   {
05d292b2 (kx 2023-03-24 03:51:10 +0300  14)     var query = "";
05d292b2 (kx 2023-03-24 03:51:10 +0300  15)     var params = decodeURIComponent(query_string).split('&');
05d292b2 (kx 2023-03-24 03:51:10 +0300  16)     var i, name;
05d292b2 (kx 2023-03-24 03:51:10 +0300  17)     for( i = 0; i < params.length; ++i ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  18)       name = params[i].split('=');
05d292b2 (kx 2023-03-24 03:51:10 +0300  19)       if( name[0] !== param ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  20)         query = query + name[0] + '=' + name[1] + '&';
05d292b2 (kx 2023-03-24 03:51:10 +0300  21)       }
05d292b2 (kx 2023-03-24 03:51:10 +0300  22)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  23)     if( query !== "" ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  24)       query = query.substring( 0, query.length - 1 );
05d292b2 (kx 2023-03-24 03:51:10 +0300  25)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  26)   }
05d292b2 (kx 2023-03-24 03:51:10 +0300  27)   return query;
05d292b2 (kx 2023-03-24 03:51:10 +0300  28) }
05d292b2 (kx 2023-03-24 03:51:10 +0300  29) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  30) function search() {
05d292b2 (kx 2023-03-24 03:51:10 +0300  31) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  32)   var text = document.querySelector( '.search-form input' ).value;
05d292b2 (kx 2023-03-24 03:51:10 +0300  33) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  34)   if( page_type === "repo" && text )
05d292b2 (kx 2023-03-24 03:51:10 +0300  35)   {
05d292b2 (kx 2023-03-24 03:51:10 +0300  36)     var path         = window.location.pathname;
05d292b2 (kx 2023-03-24 03:51:10 +0300  37)     var query_string = window.location.search;
05d292b2 (kx 2023-03-24 03:51:10 +0300  38)     var revision     = encodeURIComponent( text );
05d292b2 (kx 2023-03-24 03:51:10 +0300  39) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  40)     if( query_string ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  41)       query_string = query_string.substring( 1, query_string.length );
05d292b2 (kx 2023-03-24 03:51:10 +0300  42)       query_string = removeParam( query_string, "rev" );
05d292b2 (kx 2023-03-24 03:51:10 +0300  43)       query_string = removeParam( query_string, "op" );
05d292b2 (kx 2023-03-24 03:51:10 +0300  44)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  45) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  46)     revision = revision.toLowerCase();
05d292b2 (kx 2023-03-24 03:51:10 +0300  47)     if( revision === "head" ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  48)       revision = "0";
05d292b2 (kx 2023-03-24 03:51:10 +0300  49)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  50) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  51)     document.querySelector( '.search-form input' ).value = "";
05d292b2 (kx 2023-03-24 03:51:10 +0300  52) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  53)     window.location.pathname = path;
05d292b2 (kx 2023-03-24 03:51:10 +0300  54)     if( query_string ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  55)       window.location.search = "?rev=" + revision + "&" + query_string;
05d292b2 (kx 2023-03-24 03:51:10 +0300  56)     } else {
05d292b2 (kx 2023-03-24 03:51:10 +0300  57)       window.location.search = "?rev=" + revision;
05d292b2 (kx 2023-03-24 03:51:10 +0300  58)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  59)   }
05d292b2 (kx 2023-03-24 03:51:10 +0300  60)   if( page_type === "repolist" && text )
05d292b2 (kx 2023-03-24 03:51:10 +0300  61)   {
05d292b2 (kx 2023-03-24 03:51:10 +0300  62)     var path         = window.location.pathname;
05d292b2 (kx 2023-03-24 03:51:10 +0300  63)     var query_string = window.location.search;
05d292b2 (kx 2023-03-24 03:51:10 +0300  64)     var repo_path    = encodeURIComponent( text );
05d292b2 (kx 2023-03-24 03:51:10 +0300  65) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  66)     if( query_string ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  67)       query_string = query_string.substring( 1, query_string.length );
05d292b2 (kx 2023-03-24 03:51:10 +0300  68)       query_string = removeParam( query_string, "search" );
05d292b2 (kx 2023-03-24 03:51:10 +0300  69)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  70) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  71)     document.querySelector( '.search-form input' ).value = "";
05d292b2 (kx 2023-03-24 03:51:10 +0300  72) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  73)     window.location.pathname = path;
05d292b2 (kx 2023-03-24 03:51:10 +0300  74)     if( query_string ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  75)       window.location.search = "?search=" + repo_path + "&" + query_string;
05d292b2 (kx 2023-03-24 03:51:10 +0300  76)     } else {
05d292b2 (kx 2023-03-24 03:51:10 +0300  77)       window.location.search = "?search=" + repo_path;
05d292b2 (kx 2023-03-24 03:51:10 +0300  78)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  79)   }
05d292b2 (kx 2023-03-24 03:51:10 +0300  80) }
05d292b2 (kx 2023-03-24 03:51:10 +0300  81) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  82) function show_hide_direction() {
05d292b2 (kx 2023-03-24 03:51:10 +0300  83)   var direction = document.querySelector( '.direction' );
05d292b2 (kx 2023-03-24 03:51:10 +0300  84)   var prev = document.querySelector( '.prev-direction' );
05d292b2 (kx 2023-03-24 03:51:10 +0300  85)   var next = document.querySelector( '.next-direction' );
05d292b2 (kx 2023-03-24 03:51:10 +0300  86)   var ofs = get_query_parameter( 'ofs' );
05d292b2 (kx 2023-03-24 03:51:10 +0300  87) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  88)   if( direction )
05d292b2 (kx 2023-03-24 03:51:10 +0300  89)   {
05d292b2 (kx 2023-03-24 03:51:10 +0300  90)     if( num_of_repos < page_size ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  91)       direction.style.display = 'none';
05d292b2 (kx 2023-03-24 03:51:10 +0300  92)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300  93)     else {
05d292b2 (kx 2023-03-24 03:51:10 +0300  94)       direction.style.display = 'block';
05d292b2 (kx 2023-03-24 03:51:10 +0300  95) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  96)       if( (num_of_repos - ofs) < page_size ) { next.style.display = 'none';  }
05d292b2 (kx 2023-03-24 03:51:10 +0300  97)       else                                   { next.style.display = 'block'; }
05d292b2 (kx 2023-03-24 03:51:10 +0300  98) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  99)       if( ofs > 0 ) { prev.style.display = 'block'; }
05d292b2 (kx 2023-03-24 03:51:10 +0300 100)       else          { prev.style.display = 'none';  }
05d292b2 (kx 2023-03-24 03:51:10 +0300 101)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 102)   }
05d292b2 (kx 2023-03-24 03:51:10 +0300 103) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 104) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 105) /***************************************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 106)   We dont want to use tooltips from any foreign engine.
05d292b2 (kx 2023-03-24 03:51:10 +0300 107)   NOTE:
05d292b2 (kx 2023-03-24 03:51:10 +0300 108)     All tooltips we attached to the '.pusher' element.
05d292b2 (kx 2023-03-24 03:51:10 +0300 109)  */
05d292b2 (kx 2023-03-24 03:51:10 +0300 110) function fade_out( element ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 111)   /* постепенно исчезать */
05d292b2 (kx 2023-03-24 03:51:10 +0300 112)   var op = 1;  /* initial opacity */
05d292b2 (kx 2023-03-24 03:51:10 +0300 113)   var timer = setInterval( function() {
05d292b2 (kx 2023-03-24 03:51:10 +0300 114)     if( op <= 0.1 ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 115)       clearInterval( timer );
05d292b2 (kx 2023-03-24 03:51:10 +0300 116)       element.style.display = 'none';
05d292b2 (kx 2023-03-24 03:51:10 +0300 117)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 118)     element.style.opacity = op;
05d292b2 (kx 2023-03-24 03:51:10 +0300 119)     element.style.filter = 'alpha(opacity=' + op * 100 + ")";
05d292b2 (kx 2023-03-24 03:51:10 +0300 120)     op -= op * 0.1;
05d292b2 (kx 2023-03-24 03:51:10 +0300 121)   }, 10);
05d292b2 (kx 2023-03-24 03:51:10 +0300 122) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 123) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 124) function fade_in( element ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 125)   /* постепенно появляться */
05d292b2 (kx 2023-03-24 03:51:10 +0300 126)   var op = 0.1;  /* initial opacity */
05d292b2 (kx 2023-03-24 03:51:10 +0300 127)   element.style.display = 'block';
05d292b2 (kx 2023-03-24 03:51:10 +0300 128)   var timer = setInterval( function() {
05d292b2 (kx 2023-03-24 03:51:10 +0300 129)     if( op >= 1 ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 130)       clearInterval( timer );
05d292b2 (kx 2023-03-24 03:51:10 +0300 131)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 132)     element.style.opacity = op;
05d292b2 (kx 2023-03-24 03:51:10 +0300 133)     element.style.filter = 'alpha(opacity=' + op * 100 + ")";
05d292b2 (kx 2023-03-24 03:51:10 +0300 134)     op += op * 0.1;
05d292b2 (kx 2023-03-24 03:51:10 +0300 135)   }, 10);
05d292b2 (kx 2023-03-24 03:51:10 +0300 136) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 137) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 138) function simple_tooltip( target_items, name ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 139)   var pusher = document.querySelector( '.pusher' );
05d292b2 (kx 2023-03-24 03:51:10 +0300 140)   var items = document.querySelectorAll( target_items );
05d292b2 (kx 2023-03-24 03:51:10 +0300 141) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 142)   items.forEach( function( item, i, array ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 143)     var html = "<div class='" + name +
05d292b2 (kx 2023-03-24 03:51:10 +0300 144)                "' id='" + name + "-" + i +
05d292b2 (kx 2023-03-24 03:51:10 +0300 145)                "'><p>" + item.getAttribute('title') +
05d292b2 (kx 2023-03-24 03:51:10 +0300 146)                "</p></div>";
05d292b2 (kx 2023-03-24 03:51:10 +0300 147)     pusher.insertAdjacentHTML( 'beforeend', html );
05d292b2 (kx 2023-03-24 03:51:10 +0300 148) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 149)     var tooltip = document.querySelector( "#" + name + "-" + i );
05d292b2 (kx 2023-03-24 03:51:10 +0300 150) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 151)     item.removeAttribute( 'title' );
05d292b2 (kx 2023-03-24 03:51:10 +0300 152)     item.addEventListener( "mouseover", function( event ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 153)       fade_in( tooltip );
05d292b2 (kx 2023-03-24 03:51:10 +0300 154)     });
05d292b2 (kx 2023-03-24 03:51:10 +0300 155)     item.addEventListener( "mousemove", function( kmouse ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 156)       /***********************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 157)          c - client is a browser window;
05d292b2 (kx 2023-03-24 03:51:10 +0300 158)          o - offset from page (document) coordinate.
05d292b2 (kx 2023-03-24 03:51:10 +0300 159)          t - tooltip;
05d292b2 (kx 2023-03-24 03:51:10 +0300 160)        ***********************************************/
05d292b2 (kx 2023-03-24 03:51:10 +0300 161)       var cW  = window.innerWidth;
05d292b2 (kx 2023-03-24 03:51:10 +0300 162)       var cH  = window.innerHeight;
05d292b2 (kx 2023-03-24 03:51:10 +0300 163)       var cX  = kmouse.clientX;
05d292b2 (kx 2023-03-24 03:51:10 +0300 164)       var cY  = kmouse.clientY;
05d292b2 (kx 2023-03-24 03:51:10 +0300 165)       var tW  = tooltip.offsetWidth;
05d292b2 (kx 2023-03-24 03:51:10 +0300 166)       var tH  = tooltip.offsetHeight;
05d292b2 (kx 2023-03-24 03:51:10 +0300 167)       var oX;
05d292b2 (kx 2023-03-24 03:51:10 +0300 168)       var oY;
05d292b2 (kx 2023-03-24 03:51:10 +0300 169)       if( ( cW - cX ) < ( tW + 15) ) { oX = - 15 - tW; } else { oX = 15; }
05d292b2 (kx 2023-03-24 03:51:10 +0300 170)       if( ( cH - cY ) < ( tH + 15) ) { oY = - 15 - tH; } else { oY = 15; }
05d292b2 (kx 2023-03-24 03:51:10 +0300 171)       tooltip.style.left = kmouse.pageX + oX + 'px';
05d292b2 (kx 2023-03-24 03:51:10 +0300 172)       tooltip.style.top  = kmouse.pageY + oY - pusher.offsetTop + 'px';
05d292b2 (kx 2023-03-24 03:51:10 +0300 173)     });
05d292b2 (kx 2023-03-24 03:51:10 +0300 174)     item.addEventListener( "mouseout", function( event ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 175)       fade_out( tooltip );
05d292b2 (kx 2023-03-24 03:51:10 +0300 176)     });
05d292b2 (kx 2023-03-24 03:51:10 +0300 177)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 178) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 179) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 180) /*******************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 181)   Truncate descriptions or commit messages:
05d292b2 (kx 2023-03-24 03:51:10 +0300 182)  */
05d292b2 (kx 2023-03-24 03:51:10 +0300 183) function trunc(el) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 184)   if( el.classList.contains('trunc') )
05d292b2 (kx 2023-03-24 03:51:10 +0300 185)   {
05d292b2 (kx 2023-03-24 03:51:10 +0300 186)     el.classList.remove('trunc');
05d292b2 (kx 2023-03-24 03:51:10 +0300 187)   }
05d292b2 (kx 2023-03-24 03:51:10 +0300 188)   else
05d292b2 (kx 2023-03-24 03:51:10 +0300 189)   {
05d292b2 (kx 2023-03-24 03:51:10 +0300 190)     el.classList.add('trunc');
05d292b2 (kx 2023-03-24 03:51:10 +0300 191)   }
05d292b2 (kx 2023-03-24 03:51:10 +0300 192) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 193) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 194) /*****************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 195)   Show/Hide right popup menu:
05d292b2 (kx 2023-03-24 03:51:10 +0300 196)  */
05d292b2 (kx 2023-03-24 03:51:10 +0300 197) function show_sidebar(event) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 198)   var sidebar = document.querySelector('.cgit-popup-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 199)   sidebar.classList.add("visible");
05d292b2 (kx 2023-03-24 03:51:10 +0300 200) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 201)   /* change icon bars->times */
05d292b2 (kx 2023-03-24 03:51:10 +0300 202)   var icon = document.querySelector('.cgit-main-menu-bars .las');
05d292b2 (kx 2023-03-24 03:51:10 +0300 203)   icon.classList.remove("la-bars");
05d292b2 (kx 2023-03-24 03:51:10 +0300 204)   icon.classList.add("la-times");
05d292b2 (kx 2023-03-24 03:51:10 +0300 205) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 206)   var sb = document.querySelector('.cgit-main-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 207)   sb.onclick = hide_sidebar;
05d292b2 (kx 2023-03-24 03:51:10 +0300 208) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 209)   if( !event )
05d292b2 (kx 2023-03-24 03:51:10 +0300 210)     event = window.event;
05d292b2 (kx 2023-03-24 03:51:10 +0300 211)   event.stopPropagation();
05d292b2 (kx 2023-03-24 03:51:10 +0300 212) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 213) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 214) function hide_sidebar(event) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 215)   var sidebar = document.querySelector('.cgit-popup-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 216)   sidebar.classList.remove("visible");
05d292b2 (kx 2023-03-24 03:51:10 +0300 217) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 218)   /* change icon times->bars */
05d292b2 (kx 2023-03-24 03:51:10 +0300 219)   var icon = document.querySelector('.cgit-main-menu-bars .las');
05d292b2 (kx 2023-03-24 03:51:10 +0300 220)   icon.classList.remove("la-times");
05d292b2 (kx 2023-03-24 03:51:10 +0300 221)   icon.classList.add("la-bars");
05d292b2 (kx 2023-03-24 03:51:10 +0300 222) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 223)   var sb = document.querySelector('.cgit-main-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 224)   sb.onclick = show_sidebar;
05d292b2 (kx 2023-03-24 03:51:10 +0300 225) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 226)   if( !event )
05d292b2 (kx 2023-03-24 03:51:10 +0300 227)     event = window.event;
05d292b2 (kx 2023-03-24 03:51:10 +0300 228)   event.stopPropagation();
05d292b2 (kx 2023-03-24 03:51:10 +0300 229) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 230) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 231) /********************
05d292b2 (kx 2023-03-24 03:51:10 +0300 232)   on Document Ready:
05d292b2 (kx 2023-03-24 03:51:10 +0300 233)  */
05d292b2 (kx 2023-03-24 03:51:10 +0300 234) document.addEventListener('DOMContentLoaded', function() {
05d292b2 (kx 2023-03-24 03:51:10 +0300 235) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 236)   /* initialy show main popup menu on click */
05d292b2 (kx 2023-03-24 03:51:10 +0300 237)   var sb = document.querySelector('.cgit-main-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 238)   sb.onclick = show_sidebar;
05d292b2 (kx 2023-03-24 03:51:10 +0300 239) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 240)   var items = document.querySelectorAll('.cgit-popup-menu-bars > .item');
05d292b2 (kx 2023-03-24 03:51:10 +0300 241)   items.forEach( function(item) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 242)     /* each item should hide main popup menu */
05d292b2 (kx 2023-03-24 03:51:10 +0300 243)     item.onclick = hide_sidebar;
05d292b2 (kx 2023-03-24 03:51:10 +0300 244)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 245) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 246)   window.addEventListener('resize', function(event) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 247)     var width = window.innerWidth;
05d292b2 (kx 2023-03-24 03:51:10 +0300 248)     if( width > 768 ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 249)       /* change icon times->bars */
05d292b2 (kx 2023-03-24 03:51:10 +0300 250)       var icon = document.querySelector('.cgit-main-menu-bars .las');
05d292b2 (kx 2023-03-24 03:51:10 +0300 251)       icon.classList.remove("la-times");
05d292b2 (kx 2023-03-24 03:51:10 +0300 252)       icon.classList.add("la-bars");
05d292b2 (kx 2023-03-24 03:51:10 +0300 253) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 254)       /* hide main popup menu */
05d292b2 (kx 2023-03-24 03:51:10 +0300 255)       var sidebar = document.querySelector('.cgit-popup-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 256)       sidebar.classList.remove("visible");
05d292b2 (kx 2023-03-24 03:51:10 +0300 257)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 258)     else {
05d292b2 (kx 2023-03-24 03:51:10 +0300 259)       /* show main popup menu on click after resize */
05d292b2 (kx 2023-03-24 03:51:10 +0300 260)       var sb = document.querySelector('.cgit-main-menu-bars');
05d292b2 (kx 2023-03-24 03:51:10 +0300 261)       sb.onclick = show_sidebar;
05d292b2 (kx 2023-03-24 03:51:10 +0300 262)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 263)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 264) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 265) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 266)   /*************************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 267)     Skip line numbering in the Markdown content:
05d292b2 (kx 2023-03-24 03:51:10 +0300 268)    */
05d292b2 (kx 2023-03-24 03:51:10 +0300 269)   var mdcode = document.querySelectorAll('.markdown-content code');
05d292b2 (kx 2023-03-24 03:51:10 +0300 270)   mdcode.forEach( function( block ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 271)     block.classList.add('nohljsln');
05d292b2 (kx 2023-03-24 03:51:10 +0300 272)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 273) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 274)   /*************************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 275)     Skip line numbering in the Blame content:
05d292b2 (kx 2023-03-24 03:51:10 +0300 276)    */
05d292b2 (kx 2023-03-24 03:51:10 +0300 277)   var blame = document.querySelectorAll('.blame code');
05d292b2 (kx 2023-03-24 03:51:10 +0300 278)   blame.forEach( function( block ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 279)     block.classList.add('nohljsln');
05d292b2 (kx 2023-03-24 03:51:10 +0300 280)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 281) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 282)   /*************************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 283)     Initialize highlight.js with hljs line numbers:
05d292b2 (kx 2023-03-24 03:51:10 +0300 284)    */
05d292b2 (kx 2023-03-24 03:51:10 +0300 285)   hljs.configure({
05d292b2 (kx 2023-03-24 03:51:10 +0300 286)     useBR: false,
05d292b2 (kx 2023-03-24 03:51:10 +0300 287)     /* languages: 'Makefile Bash C Perl',*/
05d292b2 (kx 2023-03-24 03:51:10 +0300 288)     tabReplace: '<span class="tab">&lt;------&gt;</span>'
05d292b2 (kx 2023-03-24 03:51:10 +0300 289)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 290) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 291)   var preformated = document.querySelectorAll('pre code');
05d292b2 (kx 2023-03-24 03:51:10 +0300 292)   preformated.forEach( function( block ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 293)     hljs.highlightBlock( block ); /* init hljs */
05d292b2 (kx 2023-03-24 03:51:10 +0300 294)     if( false === block.classList.contains('nohljsln') )
05d292b2 (kx 2023-03-24 03:51:10 +0300 295)     {
05d292b2 (kx 2023-03-24 03:51:10 +0300 296)       hljs.lineNumbersBlock( block, { /* init hljs line numbers with options: */
05d292b2 (kx 2023-03-24 03:51:10 +0300 297)         startFrom: 0,
05d292b2 (kx 2023-03-24 03:51:10 +0300 298)         singleLine: false
05d292b2 (kx 2023-03-24 03:51:10 +0300 299)       });
05d292b2 (kx 2023-03-24 03:51:10 +0300 300)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 301)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 302) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 303) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 304)   /***************************************************************
05d292b2 (kx 2023-03-24 03:51:10 +0300 305)     Pseudo paragraphs inserted before headers to skip the stiky
05d292b2 (kx 2023-03-24 03:51:10 +0300 306)     Main Menu Bar height when we going to anchor in a Markdown
05d292b2 (kx 2023-03-24 03:51:10 +0300 307)     document.
05d292b2 (kx 2023-03-24 03:51:10 +0300 308)    */
05d292b2 (kx 2023-03-24 03:51:10 +0300 309)   var mdheaders = document.querySelectorAll('.markdown-content h1,h2,h3,h4,h5,h6');
05d292b2 (kx 2023-03-24 03:51:10 +0300 310)   mdheaders.forEach( function( header ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 311)     var content = header.textContent;
05d292b2 (kx 2023-03-24 03:51:10 +0300 312)     var id = content.toLowerCase().replaceAll( ' ', '-' ).replaceAll( ':', '' );
05d292b2 (kx 2023-03-24 03:51:10 +0300 313) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 314)     var ph = document.createElement( 'p' );
05d292b2 (kx 2023-03-24 03:51:10 +0300 315)     ph.setAttribute( 'class', 'headers-anchor' )
05d292b2 (kx 2023-03-24 03:51:10 +0300 316)     ph.setAttribute( 'id', id );
05d292b2 (kx 2023-03-24 03:51:10 +0300 317)     header.parentNode.insertBefore( ph, header );
05d292b2 (kx 2023-03-24 03:51:10 +0300 318)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 319) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 320)   var input = document.querySelector( '.search-form input' );
05d292b2 (kx 2023-03-24 03:51:10 +0300 321)   input.addEventListener( "keyup", function( event ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 322)     if( event.key === "Enter" ) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 323)       search();
05d292b2 (kx 2023-03-24 03:51:10 +0300 324)     }
05d292b2 (kx 2023-03-24 03:51:10 +0300 325)   });
05d292b2 (kx 2023-03-24 03:51:10 +0300 326) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 327)   simple_tooltip( "[title]", "tooltip" );
05d292b2 (kx 2023-03-24 03:51:10 +0300 328)   show_hide_direction();
05d292b2 (kx 2023-03-24 03:51:10 +0300 329) });