Add experimental style browser ui
This commit is contained in:
		
							parent
							
								
									5e0e6e150e
								
							
						
					
					
						commit
						f7922f419a
					
				
					 6 changed files with 484 additions and 0 deletions
				
			
		
							
								
								
									
										110
									
								
								add_style.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								add_style.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,110 @@
 | 
			
		|||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# usage:
 | 
			
		||||
#   add_style.py <file_name> <tags>
 | 
			
		||||
# where <tags> is a space-separated list of tags to apply for that style (1 minimum)
 | 
			
		||||
# OR
 | 
			
		||||
#   add_style-py --update-only
 | 
			
		||||
#
 | 
			
		||||
# When called with <file_name> <tags> it will create a new file to chrome/ folder and
 | 
			
		||||
# update tags.csv and docs/tagmap.json
 | 
			
		||||
#
 | 
			
		||||
# With --update-only it will only update docs/tagmap.json based on tags.csv
 | 
			
		||||
 | 
			
		||||
import sys, os
 | 
			
		||||
 | 
			
		||||
def filterEmpty(list):
 | 
			
		||||
    for i in range(2,len(list)):
 | 
			
		||||
        if list[i] == "":
 | 
			
		||||
            del list[i]
 | 
			
		||||
 | 
			
		||||
def createJSON(tagmap,filename,args,onlyupdate):
 | 
			
		||||
    charBuffer = "{\n"
 | 
			
		||||
    map_last = len(tagmap) - 1
 | 
			
		||||
    n_line=0
 | 
			
		||||
    for line in tagmap:
 | 
			
		||||
        tokens = line.rsplit(",")
 | 
			
		||||
        filterEmpty(tokens)
 | 
			
		||||
        if len(tokens) < 2:
 | 
			
		||||
            continue
 | 
			
		||||
        charBuffer += "\"{}\":[".format(tokens[0])
 | 
			
		||||
        for t in range(1,len(tokens)):
 | 
			
		||||
     #      if len(tokens[t]) > 0:
 | 
			
		||||
            charBuffer += "\"{}\"".format(tokens[t])
 | 
			
		||||
            if t < len(tokens)-1:
 | 
			
		||||
                charBuffer += ","
 | 
			
		||||
        if(n_line < map_last):
 | 
			
		||||
            charBuffer += "],\n"
 | 
			
		||||
            
 | 
			
		||||
        else:
 | 
			
		||||
            if onlyupdate:
 | 
			
		||||
                charBuffer += "]\n}"
 | 
			
		||||
                break
 | 
			
		||||
            else:
 | 
			
		||||
                charBuffer += "],\n"
 | 
			
		||||
        n_line += 1
 | 
			
		||||
    if not(onlyupdate):
 | 
			
		||||
        charBuffer += "\"{}\":[".format(filename)
 | 
			
		||||
        for t in range(0,len(args)):
 | 
			
		||||
            charBuffer += "\"{}\"".format(args[t])
 | 
			
		||||
            if t < len(args) - 1:
 | 
			
		||||
                charBuffer += ","
 | 
			
		||||
        charBuffer += "]\n}"
 | 
			
		||||
    
 | 
			
		||||
    with open("html_resources/tagmap.json","w") as json:
 | 
			
		||||
      print(charBuffer,file=json)
 | 
			
		||||
      print("wrote JSON\n")
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
def searchFile(tagmap,name):
 | 
			
		||||
    for line in tagmap:
 | 
			
		||||
        if name in line:
 | 
			
		||||
            return True
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
def createNewFile(name):
 | 
			
		||||
    text = "/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/{} made available under Mozilla Public License v. 2.0\nSee the above repository for updates as well as full license text. */\n".format(name)
 | 
			
		||||
    
 | 
			
		||||
    if os.path.isfile("chrome/{}".format(name)):
 | 
			
		||||
        confirm = input("File {} already exists! proceed (will overwrite) ? [y/N] ".format(name))
 | 
			
		||||
        if confirm != "y":
 | 
			
		||||
            print("Aborted")
 | 
			
		||||
            return False
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    with open("chrome/{}".format(name),"w") as css:
 | 
			
		||||
        print(text,file=css)
 | 
			
		||||
        print("Created chrome/{}".format(name))
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
 | 
			
		||||
    if len(sys.argv) < (2 + (0 if (sys.argv[1] == "--update-only") else 1)):
 | 
			
		||||
        print("usage: add_file.py <filename> <list_of_tags>")
 | 
			
		||||
        exit()
 | 
			
		||||
 | 
			
		||||
    args = []
 | 
			
		||||
    for i in range (2,(len(sys.argv))):
 | 
			
		||||
        args.append(sys.argv[i])
 | 
			
		||||
    
 | 
			
		||||
    name = sys.argv[1]
 | 
			
		||||
    update_only = name == "--update-only"
 | 
			
		||||
    
 | 
			
		||||
    file = open("tags.csv")
 | 
			
		||||
 | 
			
		||||
    tagmap = file.read().lstrip().splitlines()
 | 
			
		||||
    file.close()
 | 
			
		||||
    if not(update_only) and searchFile(tagmap,name):
 | 
			
		||||
        print(name + "exist already")
 | 
			
		||||
    else:
 | 
			
		||||
        if not(update_only):
 | 
			
		||||
            exists = createNewFile(name)
 | 
			
		||||
            file = open("tags.csv","a")
 | 
			
		||||
            file.write(name+","+",".join(args)+"\n")
 | 
			
		||||
            file.close()
 | 
			
		||||
        else:
 | 
			
		||||
            print("Only update json")
 | 
			
		||||
        createJSON(tagmap,name,args,update_only)
 | 
			
		||||
    print("Done")
 | 
			
		||||
    exit(0)
 | 
			
		||||
							
								
								
									
										3
									
								
								chrome/test.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								chrome/test.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/test.css made available under Mozilla Public License v. 2.0
 | 
			
		||||
See the above repository for updates as well as full license text. */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								html_resources/main.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								html_resources/main.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
body{background-color: rgb(60,50,70); color: silver; margin: 0px }
 | 
			
		||||
#ui{ display: flex; }
 | 
			
		||||
 | 
			
		||||
#categories{
 | 
			
		||||
  padding-block: 1em;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  border-inline-end: 1px solid gold;
 | 
			
		||||
  background-color: rgb(60,60,70);
 | 
			
		||||
  max-height: 100vh;
 | 
			
		||||
  overflow-y: auto;
 | 
			
		||||
  min-width: 18ch
 | 
			
		||||
}
 | 
			
		||||
a{ color: rgb(100,150,200); margin-inline-start: 1ch }
 | 
			
		||||
a:visited{ color: rgb(150,100,200) }
 | 
			
		||||
a:hover{ color: rgb(200,150,100) }
 | 
			
		||||
pre:empty{ display: none }
 | 
			
		||||
.category{ padding: 0.2em 1em; cursor: pointer }
 | 
			
		||||
 | 
			
		||||
.currentCategory,
 | 
			
		||||
.category:hover{ background-color: grey }
 | 
			
		||||
 | 
			
		||||
.target{
 | 
			
		||||
  margin: 0.2em;
 | 
			
		||||
  background-color: rgb(60,60,70);
 | 
			
		||||
  padding: 0.5em;
 | 
			
		||||
  border: 1px solid rgb(40,40,40);
 | 
			
		||||
  border-radius: 4px;
 | 
			
		||||
  max-width: 50ch;
 | 
			
		||||
  cursor: pointer
 | 
			
		||||
}
 | 
			
		||||
.target:hover{ background-color: rgb(80,80,90) }
 | 
			
		||||
#targets{ display: flex; flex-wrap: wrap }
 | 
			
		||||
 | 
			
		||||
pre{
 | 
			
		||||
  white-space: pre-wrap;
 | 
			
		||||
  margin: 1em;
 | 
			
		||||
  border: 2px inset;
 | 
			
		||||
  padding: 0.5em;
 | 
			
		||||
  background-color: rgb(40,50,50)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hidden{ display: none !important }
 | 
			
		||||
 | 
			
		||||
.target{ display: flex; justify-content: space-between }
 | 
			
		||||
							
								
								
									
										139
									
								
								html_resources/selector.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								html_resources/selector.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,139 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
let DB = null;
 | 
			
		||||
 | 
			
		||||
function initDB(obj){
 | 
			
		||||
  DB = obj;
 | 
			
		||||
  Object.defineProperty(DB,"query",{value:function (q,list){
 | 
			
		||||
    let nlist = [];
 | 
			
		||||
    for(let key of list || Object.keys(this)){
 | 
			
		||||
      if(this[key].includes(q)){
 | 
			
		||||
        nlist.push(key)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return nlist
 | 
			
		||||
  }});
 | 
			
		||||
  return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let previousCategory = new (function(){
 | 
			
		||||
  let current = null;
 | 
			
		||||
  this.set = function(t){
 | 
			
		||||
    current&¤t.classList.remove("currentCategory");
 | 
			
		||||
    current = t;
 | 
			
		||||
    current.classList.add("currentCategory");
 | 
			
		||||
  };
 | 
			
		||||
  return this
 | 
			
		||||
})()
 | 
			
		||||
 | 
			
		||||
function getText(node){
 | 
			
		||||
  return node.childNodes[0].textContent
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function onCategoryClicked(categoryNode){
 | 
			
		||||
  
 | 
			
		||||
  previousCategory.set(categoryNode);
 | 
			
		||||
  
 | 
			
		||||
  let names = DB.query(categoryNode.textContent);
 | 
			
		||||
  for(let c of Array.from(document.querySelectorAll(".target"))){
 | 
			
		||||
    names.includes(getText(c)) ? c.classList.remove("hidden") : c.classList.add("hidden");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function onTargetClicked(targetNode){
 | 
			
		||||
  const codeBlock = document.querySelector("pre");
 | 
			
		||||
  let file = await fetch(`chrome/${getText(targetNode)}`);
 | 
			
		||||
  let t = await file.text();
 | 
			
		||||
  codeBlock.textContent = t;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onSomeClicked(e){
 | 
			
		||||
  let cl = e.target.parentNode.id;
 | 
			
		||||
  switch(cl){
 | 
			
		||||
    case "categories":
 | 
			
		||||
      onCategoryClicked(e.target);
 | 
			
		||||
      break;
 | 
			
		||||
    case "targets":
 | 
			
		||||
      onTargetClicked(e.target);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function createCategories(){
 | 
			
		||||
  
 | 
			
		||||
  const CAT_PARENT = document.getElementById("categories");
 | 
			
		||||
  CAT_PARENT.addEventListener("click",onSomeClicked)
 | 
			
		||||
  
 | 
			
		||||
  const TAR_PARENT = document.getElementById("targets");
 | 
			
		||||
  TAR_PARENT.addEventListener("click",onSomeClicked);
 | 
			
		||||
  
 | 
			
		||||
  const createNode = function(name,type){
 | 
			
		||||
    let node = document.createElement("div");
 | 
			
		||||
    node.classList.add(type);
 | 
			
		||||
    node.textContent = name;
 | 
			
		||||
    if(type === "target"){
 | 
			
		||||
      let link = node.appendChild(document.createElement("a"));
 | 
			
		||||
      node.classList.add("hidden");
 | 
			
		||||
      link.href = `https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/${name}`;
 | 
			
		||||
      link.textContent = "Github";
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return node;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  const createCategory = name => createNode(name,"category");
 | 
			
		||||
  
 | 
			
		||||
  const createTarget = name => createNode(name,"target");
 | 
			
		||||
 | 
			
		||||
  const CAT_NAMES = (function(){
 | 
			
		||||
    let list = [];
 | 
			
		||||
    
 | 
			
		||||
    for(let key of Object.keys(DB)){
 | 
			
		||||
      TAR_PARENT.appendChild(createNode(key,"target"));
 | 
			
		||||
      let things = DB[key];
 | 
			
		||||
      for(let t of things){
 | 
			
		||||
        list.push(t)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    list.sort();
 | 
			
		||||
    let ret = [];
 | 
			
		||||
    let ns = [0];
 | 
			
		||||
    ret[0] = list[0];
 | 
			
		||||
    let i = 0;
 | 
			
		||||
    for(let item of list){
 | 
			
		||||
      if(ret[i]!=item){
 | 
			
		||||
        ret[++i]=item;
 | 
			
		||||
        ns[i]=0;
 | 
			
		||||
      }else{
 | 
			
		||||
        ns[i]++
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    let map = ret.map((a,i)=>({name:a,value:ns[i]}))
 | 
			
		||||
    
 | 
			
		||||
    return map.sort((a,b)=>(a.value > b.value?-1:a.value < b.value ? 1:0))
 | 
			
		||||
  })();
 | 
			
		||||
  
 | 
			
		||||
  for(let cat of CAT_NAMES){
 | 
			
		||||
    CAT_PARENT.appendChild(createCategory(cat.name))
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
document.onreadystatechange = (function () {
 | 
			
		||||
  if (document.readyState === "complete") {
 | 
			
		||||
    fetch("html_resources/tagmap.json")
 | 
			
		||||
    .then(response => {
 | 
			
		||||
     const contentType = response.headers.get('content-type');
 | 
			
		||||
     if (!contentType || !contentType.includes('application/json')) {
 | 
			
		||||
       throw new TypeError("Oops, we haven't got JSON!");
 | 
			
		||||
     }
 | 
			
		||||
     return response.json();
 | 
			
		||||
  })
 | 
			
		||||
  .then(json=>(initDB(json)))
 | 
			
		||||
  .then(()=>createCategories())
 | 
			
		||||
  .catch(e=>{console.log(e);document.getElementById("ui").textContent = "FAILURE, Database could not be loaded"});
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										95
									
								
								html_resources/tagmap.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								html_resources/tagmap.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,95 @@
 | 
			
		|||
{
 | 
			
		||||
"Fx65_tabs_on_bottom.css":["tabs","toolbars","classic"],
 | 
			
		||||
"Fx65_tabs_on_bottom_menubar_on_top_patch.css":["tabs","menubar","toolbars","classic","patch"],
 | 
			
		||||
"autohide_bookmarks_and_main_toolbars.css":["autohide","bookmarks","toolbars","nav-bar","toolbox"],
 | 
			
		||||
"autohide_bookmarks_toolbar.css":["autohide","bookmarks","toolbars"],
 | 
			
		||||
"autohide_menubar.css":["autohide","menubar","toolbars"],
 | 
			
		||||
"autohide_navigation_button.css":["autohide","minimal","navigation","buttons"],
 | 
			
		||||
"autohide_sidebar.css":["autohide","sidebar"],
 | 
			
		||||
"autohide_tabstoolbar.css":["autohide","tabs","toolbars"],
 | 
			
		||||
"autohide_toolbox.css":["autohide","toolbox","toolbars","fullscreen"],
 | 
			
		||||
"blank_page_background.css":["dark-mode","flash","blank","background"],
 | 
			
		||||
"bookmarksbar_on_new_tabs_only.css":["legacy"],
 | 
			
		||||
"button_effect_icon_glow.css":["buttons","effect","minimal"],
 | 
			
		||||
"button_effect_scale_onclick.css":["buttons","effect","minimal"],
 | 
			
		||||
"button_effect_scale_onhover.css":["buttons","effect","minimal"],
 | 
			
		||||
"classic_grid_main_menu_popup.css":["classic","grid","menu","popup"],
 | 
			
		||||
"click_selected_tab_to_focus_urlbar.css":["hack","tabs","urlbar"],
 | 
			
		||||
"color_variable_template.css":["theme","color","variables"],
 | 
			
		||||
"combined_favicon_and_tab_close_button.css":["tab","icon","close"],
 | 
			
		||||
"combined_tabs_and_main_toolbars.css":["minimal","tabs","toolbars"],
 | 
			
		||||
"compact_urlbar_megabar.css":["urlbar","minimal"],
 | 
			
		||||
"dark_additional_windows.css":["windows","dark-mode"],
 | 
			
		||||
"dark_checkboxes_and_radios.css":["widgets","dark-mode"],
 | 
			
		||||
"dark_context_menus.css":["dark-mode","menus"],
 | 
			
		||||
"dark_theme_aware_statuspanel.css":["staus","dark-mode"],
 | 
			
		||||
"disable_newtab_on_middle_click.css":["hack","newtab","tab"],
 | 
			
		||||
"fake_statusbar.css":["hack","status","toolbar"],
 | 
			
		||||
"floating_findbar_on_top.css":["findbar","overlay"],
 | 
			
		||||
"full_width_urlbar_popup.css":["ulrbar","popup"],
 | 
			
		||||
"google_style_urlbar_popup.css":["urlbar","popup"],
 | 
			
		||||
"grid_overflow_menu.css":["popup","menu"],
 | 
			
		||||
"hide_statuspanel_when_fullscreen.css":["status","fullscreen","hiding"],
 | 
			
		||||
"hide_tabs_toolbar.css":["hiding","tabs","toolbars"],
 | 
			
		||||
"hide_tabs_with_one_tab.css":["hiding","tabs","toolbars"],
 | 
			
		||||
"hide_tabs_with_one_tab_w_window_controls.css":["hiding","tabs","toolbars"],
 | 
			
		||||
"hide_toolbox_top_bottom_borders.css":["toolbox","hiding"],
 | 
			
		||||
"hide_urlbar_first_row.css":["urlbar","popup","hiding"],
 | 
			
		||||
"linux_gtk_window_control_patch.css":["patch","window-control"],
 | 
			
		||||
"menubar_in_toolbar.css":["toolbars","minimal"],
 | 
			
		||||
"menubar_in_toolbar_oneliner_compatible.css":["toolbars","minimal"],
 | 
			
		||||
"minimal_in-UI_scrollbars.css":["minimal","scrollbar"],
 | 
			
		||||
"minimal_text_fields.css":["minimal","urlbar","searchbar"],
 | 
			
		||||
"minimal_toolbarbuttons.css":["minimal","buttons"],
 | 
			
		||||
"minimal_toolbarbuttons_v2.css":["minimal","buttons"],
 | 
			
		||||
"minimal_toolbarbuttons_v3.css":["minimal","buttons"],
 | 
			
		||||
"more_visible_tab_icon.css":["tab","icon"],
 | 
			
		||||
"multi-row_bookmarks.css":["multi-row","bookmarks"],
 | 
			
		||||
"multi-row_oneliner_combo_patch.css":["multi-row","patch","1-line","minimal"],
 | 
			
		||||
"multi-row_tabs.css":["tabs","multi-row","toolbars"],
 | 
			
		||||
"multi-row_tabs_Fx66%2B.css":["legacy"],
 | 
			
		||||
"multi-row_tabs_below_content.css":["multi-row","tabs","toolbars"],
 | 
			
		||||
"multi-row_tabs_below_content_legacy.css":["legacy"],
 | 
			
		||||
"multi-row_tabs_legacy.css":["legacy"],
 | 
			
		||||
"multi-row_tabs_window_control_patch.css":["patch","multi-row","window-control"],
 | 
			
		||||
"navbar_below_content.css":["nav-bar","toolbars"],
 | 
			
		||||
"navbar_tabs_oneliner.css":["1-line","minimal","tabs","nav-bar","toolbars"],
 | 
			
		||||
"navbar_tabs_oneliner_menu_buttons_on_right.css":["1-line","minimal","tabs","nav-bar","toolbars","patch","menubar"],
 | 
			
		||||
"navbar_tabs_oneliner_tabs_on_left.css":["1-line","minimal","tabs","nav-bar","toolbar"],
 | 
			
		||||
"navbar_tabs_responsive_oneliner.css":["1-line","minimal","tabs","nav-bar","toolbars"],
 | 
			
		||||
"navigation_buttons_inside_urlbar.css":["navigation","buttons","urlbar"],
 | 
			
		||||
"numbered_tabs.css":["tabs"],
 | 
			
		||||
"overlay_menubar.css":["menubar"],
 | 
			
		||||
"overlay_scrollbars.as.css":["scrollbar"],
 | 
			
		||||
"page_action_buttons_on_hover.css":["urlbar","minimal","effect"],
 | 
			
		||||
"pinned_tabs_on_right.css":["tabs"],
 | 
			
		||||
"scrollable_menupopups.css":["scrollbar","popup","menu"],
 | 
			
		||||
"scrollable_urlbar_popup.css":["scrollbar","popup","urlbar"],
 | 
			
		||||
"show_navbar_on_focus_only.css":["urlbar","nav-bar","toolbar","hiding"],
 | 
			
		||||
"show_window_title_in_menubar.css":["windows","menubar"],
 | 
			
		||||
"status_inside_urlbar.css":["status","urlbar","hack"],
 | 
			
		||||
"tab_close_button_always_on_hover.css":["tab","close"],
 | 
			
		||||
"tab_loading_progress_throbber.css":["tab","icon","animation"],
 | 
			
		||||
"tabs_animated_gradient_border.css":["hack","animation"],
 | 
			
		||||
"tabs_below_content.css":["toolbars","tabs"],
 | 
			
		||||
"tabs_fill_available_width.css":["tab","tabs"],
 | 
			
		||||
"textual_context_navigation.css":["navigation","popup","menu"],
 | 
			
		||||
"theme_additional_windows.css":["legacy"],
 | 
			
		||||
"theme_color_variables.css":["legacy"],
 | 
			
		||||
"theme_popups_and_menus.css":["legacy"],
 | 
			
		||||
"theme_sidebar.css":["legacy"],
 | 
			
		||||
"theme_toolbars.css":["legacy"],
 | 
			
		||||
"toggle_bookmarksbar_with_alt.css":["legacy"],
 | 
			
		||||
"toggle_tabs_toolbar_with_alt.css":["hack","tabs","menubar"],
 | 
			
		||||
"toolbarbuttons_icon%2Blabel.css":["buttons","icon"],
 | 
			
		||||
"toolbars_below_content.css":["tabs","toolbox","toolbars"],
 | 
			
		||||
"urlbar_and_popup_equal_width.css":["legacy"],
 | 
			
		||||
"urlbar_centered_text.css":["urlbar"],
 | 
			
		||||
"urlbar_full_width.css":["urlbar","popup"],
 | 
			
		||||
"urlbar_results_in_two_rows.css":["urlbar","popup"],
 | 
			
		||||
"urlbar_visible_on_active_tab_click.css":["hack","urlbar"],
 | 
			
		||||
"vertical_context_navigation.css":["navigation","menu","popup"],
 | 
			
		||||
"vertical_context_navigation_v2.css":["navigation","menu","popup"],
 | 
			
		||||
"vertical_menubar.css":["menubar","hack"],
 | 
			
		||||
"window_control_placeholder_support.css":["window-control","patch"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										93
									
								
								tags.csv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								tags.csv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
Fx65_tabs_on_bottom.css,tabs,toolbars,classic
 | 
			
		||||
Fx65_tabs_on_bottom_menubar_on_top_patch.css,tabs,menubar,toolbars,classic,patch
 | 
			
		||||
autohide_bookmarks_and_main_toolbars.css,autohide,bookmarks,toolbars,nav-bar,toolbox
 | 
			
		||||
autohide_bookmarks_toolbar.css,autohide,bookmarks,toolbars
 | 
			
		||||
autohide_menubar.css,autohide,menubar,toolbars
 | 
			
		||||
autohide_navigation_button.css,autohide,minimal,navigation,buttons
 | 
			
		||||
autohide_sidebar.css,autohide,sidebar
 | 
			
		||||
autohide_tabstoolbar.css,autohide,tabs,toolbars
 | 
			
		||||
autohide_toolbox.css,autohide,toolbox,toolbars,fullscreen
 | 
			
		||||
blank_page_background.css,dark-mode,flash,blank,background
 | 
			
		||||
bookmarksbar_on_new_tabs_only.css,legacy
 | 
			
		||||
button_effect_icon_glow.css,buttons,effect,minimal
 | 
			
		||||
button_effect_scale_onclick.css,buttons,effect,minimal
 | 
			
		||||
button_effect_scale_onhover.css,buttons,effect,minimal
 | 
			
		||||
classic_grid_main_menu_popup.css,classic,grid,menu,popup
 | 
			
		||||
click_selected_tab_to_focus_urlbar.css,hack,tabs,urlbar
 | 
			
		||||
color_variable_template.css,theme,color,variables
 | 
			
		||||
combined_favicon_and_tab_close_button.css,tab,icon,close
 | 
			
		||||
combined_tabs_and_main_toolbars.css,minimal,tabs,toolbars
 | 
			
		||||
compact_urlbar_megabar.css,urlbar,minimal
 | 
			
		||||
dark_additional_windows.css,windows,dark-mode
 | 
			
		||||
dark_checkboxes_and_radios.css,widgets,dark-mode
 | 
			
		||||
dark_context_menus.css,dark-mode,menus
 | 
			
		||||
dark_theme_aware_statuspanel.css,staus,dark-mode
 | 
			
		||||
disable_newtab_on_middle_click.css,hack,newtab,tab
 | 
			
		||||
fake_statusbar.css,hack,status,toolbar
 | 
			
		||||
floating_findbar_on_top.css,findbar,overlay
 | 
			
		||||
full_width_urlbar_popup.css,ulrbar,popup
 | 
			
		||||
google_style_urlbar_popup.css,urlbar,popup
 | 
			
		||||
grid_overflow_menu.css,popup,menu
 | 
			
		||||
hide_statuspanel_when_fullscreen.css,status,fullscreen,hiding
 | 
			
		||||
hide_tabs_toolbar.css,hiding,tabs,toolbars
 | 
			
		||||
hide_tabs_with_one_tab.css,hiding,tabs,toolbars
 | 
			
		||||
hide_tabs_with_one_tab_w_window_controls.css,hiding,tabs,toolbars
 | 
			
		||||
hide_toolbox_top_bottom_borders.css,toolbox,hiding
 | 
			
		||||
hide_urlbar_first_row.css,urlbar,popup,hiding
 | 
			
		||||
linux_gtk_window_control_patch.css,patch,window-control
 | 
			
		||||
menubar_in_toolbar.css,toolbars,minimal
 | 
			
		||||
menubar_in_toolbar_oneliner_compatible.css,toolbars,minimal
 | 
			
		||||
minimal_in-UI_scrollbars.css,minimal,scrollbar
 | 
			
		||||
minimal_text_fields.css,minimal,urlbar,searchbar
 | 
			
		||||
minimal_toolbarbuttons.css,minimal,buttons
 | 
			
		||||
minimal_toolbarbuttons_v2.css,minimal,buttons
 | 
			
		||||
minimal_toolbarbuttons_v3.css,minimal,buttons
 | 
			
		||||
more_visible_tab_icon.css,tab,icon
 | 
			
		||||
multi-row_bookmarks.css,multi-row,bookmarks
 | 
			
		||||
multi-row_oneliner_combo_patch.css,multi-row,patch,1-line,minimal
 | 
			
		||||
multi-row_tabs.css,tabs,multi-row,toolbars
 | 
			
		||||
multi-row_tabs_Fx66%2B.css,legacy
 | 
			
		||||
multi-row_tabs_below_content.css,multi-row,tabs,toolbars
 | 
			
		||||
multi-row_tabs_below_content_legacy.css,legacy
 | 
			
		||||
multi-row_tabs_legacy.css,legacy
 | 
			
		||||
multi-row_tabs_window_control_patch.css,patch,multi-row,window-control
 | 
			
		||||
navbar_below_content.css,nav-bar,toolbars
 | 
			
		||||
navbar_tabs_oneliner.css,1-line,minimal,tabs,nav-bar,toolbars
 | 
			
		||||
navbar_tabs_oneliner_menu_buttons_on_right.css,1-line,minimal,tabs,nav-bar,toolbars,patch,menubar
 | 
			
		||||
navbar_tabs_oneliner_tabs_on_left.css,1-line,minimal,tabs,nav-bar,toolbar
 | 
			
		||||
navbar_tabs_responsive_oneliner.css,1-line,minimal,tabs,nav-bar,toolbars
 | 
			
		||||
navigation_buttons_inside_urlbar.css,navigation,buttons,urlbar
 | 
			
		||||
numbered_tabs.css,tabs
 | 
			
		||||
overlay_menubar.css,menubar
 | 
			
		||||
overlay_scrollbars.as.css,scrollbar
 | 
			
		||||
page_action_buttons_on_hover.css,urlbar,minimal,effect
 | 
			
		||||
pinned_tabs_on_right.css,tabs
 | 
			
		||||
scrollable_menupopups.css,scrollbar,popup,menu
 | 
			
		||||
scrollable_urlbar_popup.css,scrollbar,popup,urlbar
 | 
			
		||||
show_navbar_on_focus_only.css,urlbar,nav-bar,toolbar,hiding
 | 
			
		||||
show_window_title_in_menubar.css,windows,menubar
 | 
			
		||||
status_inside_urlbar.css,status,urlbar,hack
 | 
			
		||||
tab_close_button_always_on_hover.css,tab,close
 | 
			
		||||
tab_loading_progress_throbber.css,tab,icon,animation
 | 
			
		||||
tabs_animated_gradient_border.css,hack,animation
 | 
			
		||||
tabs_below_content.css,toolbars,tabs
 | 
			
		||||
tabs_fill_available_width.css,tab,tabs
 | 
			
		||||
textual_context_navigation.css,navigation,popup,menu
 | 
			
		||||
theme_additional_windows.css,legacy
 | 
			
		||||
theme_color_variables.css,legacy,
 | 
			
		||||
theme_popups_and_menus.css,legacy
 | 
			
		||||
theme_sidebar.css,legacy
 | 
			
		||||
theme_toolbars.css,legacy
 | 
			
		||||
toggle_bookmarksbar_with_alt.css,legacy
 | 
			
		||||
toggle_tabs_toolbar_with_alt.css,hack,tabs,menubar
 | 
			
		||||
toolbarbuttons_icon%2Blabel.css,buttons,icon
 | 
			
		||||
toolbars_below_content.css,tabs,toolbox,toolbars
 | 
			
		||||
urlbar_and_popup_equal_width.css,legacy
 | 
			
		||||
urlbar_centered_text.css,urlbar
 | 
			
		||||
urlbar_full_width.css,urlbar,popup
 | 
			
		||||
urlbar_results_in_two_rows.css,urlbar,popup
 | 
			
		||||
urlbar_visible_on_active_tab_click.css,hack,urlbar
 | 
			
		||||
vertical_context_navigation.css,navigation,menu,popup
 | 
			
		||||
vertical_context_navigation_v2.css,navigation,menu,popup
 | 
			
		||||
vertical_menubar.css,menubar,hack
 | 
			
		||||
window_control_placeholder_support.css,window-control,patch
 | 
			
		||||
		
		
			
  | 
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue