├── .gitignore ├── HTML ├── algorithm_details.html ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── main.css │ ├── octicons.css │ └── select2.min.css ├── data │ └── gitmap.json ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ ├── octicons-local.ttf │ ├── octicons.eot │ ├── octicons.less │ ├── octicons.scss │ ├── octicons.ttf │ ├── octicons.woff │ └── sprockets-octicons.scss ├── icons │ ├── android-chrome-144x144.png │ ├── android-chrome-192x192.png │ ├── android-chrome-36x36.png │ ├── android-chrome-48x48.png │ ├── android-chrome-72x72.png │ ├── android-chrome-96x96.png │ ├── apple-touch-icon-114x114.png │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-144x144.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-180x180.png │ ├── apple-touch-icon-57x57.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-72x72.png │ ├── apple-touch-icon-76x76.png │ ├── apple-touch-icon-precomposed.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ └── mstile-70x70.png ├── img │ ├── GitHub-Mark-64px.png │ └── GitHub-Mark-Light-64px.png ├── index.html ├── js │ ├── main.js │ └── vendor │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── d3-queue.v2.min.js │ │ ├── d3.v3.min.js │ │ ├── jquery-1.11.2.min.js │ │ ├── modernizr-2.8.3.min.js │ │ ├── npm.js │ │ └── select2.min.js ├── tile-wide.png ├── tile.png └── treemap.html ├── LICENSE ├── README.md ├── download_stats.py ├── process_stats.py └── starcounts.json.gz /.gitignore: -------------------------------------------------------------------------------- 1 | downloaded_data 2 | downloaded_data/ 3 | *.graphml 4 | *.gml 5 | *.svg 6 | *.pyc 7 | *.gephi 8 | -------------------------------------------------------------------------------- /HTML/algorithm_details.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GitHub Repository Map - Algorithm Details 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 698 | 699 | 700 |

More Details

701 | 702 |

The python file process_stats.py is what I ran to generate the clustering, so if there's a conflict between what the code says and what I wrote here, the site is doing what that script says.

703 | 704 |

I first used a PageRank-inspired formula to calculate affinities between repositories. A common way to interpret the numerical value that the PageRank algorithm outputs is by imagining a random web surfer: the surfer starts at an arbitrary page, and with 85% probability, clicks a random link on that page, and with 15% probability, jumps to a completely random page. If the surfer ever gets to a page with no outbound links, they jump to a completely random page. For any given web page, the PageRank is the probability that at any given instant, the surfer will be visiting that page.

705 | 706 |

In order to apply that to GitHub, I imagine a random GitHub surfer (Steve). Steve starts at an arbitrary project, and then chooses a contributor (Courtney) to that project with a probability that's a function of how many of the contributions Courtney is responsible for; the probability is log(1+numContributions) / sum (log(1+numContributions)). Steve then chooses a new repository to move to as follows: 1/3rd of the time, he jumps to a randomly chosen repository that Courtney has contributed to; 2/3rds of the time, Steve jumps to a randomly chosen repository that she starred. There was nothing magic about the choice of 1/3 - this was an arbitrary number that produced fairly reasonable results early on, and I didn't try try tweaking it.

707 | 708 |

The affinity of repo A for repo B is the probability that Steve starts at repo A and ends up at repo B. To be precise, this would be true if I had crawled all of GitHub - since I didn't, the total outgoing probabilities for most of the repos are less than 1, either because I didn't crawl all of the possible target repos, or because I didn't crawl all of the intermediate contributors.

709 | 710 |

Once I had the affinities, I followed the paper on affinity propagation pretty closely, with two minor modifications: first of all, instead of using a constant number for the damping factor, I did something with a simulated annealing flavor: I started with a factor close to 1 (so at each step, it paid very little attention to the message sent in the previous step) and kept multiplying by that number at each iteration, so at the first step the damping factor was 0.95, the next step 0.95^2, then 0.95^3, etc. Second, I didn't bother to check for convergence, I just stopped it after a set number of iterations (less code, and when I was testing, it had generally converged before the number of steps I set.)

711 | 712 |

For a given set of inputs, affinity propagation produces a subset of inputs known as the exemplars, and chooses an exemplar for every input. In the code I refer to the all of the inputs with a given exemplar as the children of that exemplar. (The exemplar is its own child.) Once the algorithm had produced a set of exemplars, I re-ran the algorithm on only those exemplars, in order to produce a hierarchical structure. I ran the algorithm four times in total, including the first, so the leaves can be up to five levels deep. To understand how this might work, or if you're confused about what's being displayed, imagine that we started with the following eight repos:

713 | 714 | 724 | 725 |

Imagine that the first round produced the following set of exemplars:

726 | 727 | 733 | 734 |

And then the next round produced:

735 | 736 | 740 | 741 |

And then the third round produced:

742 | 743 | 747 | 748 |

For these results, the app would produce two top-level circles. Their tooltips would say:

749 | 750 | 754 | 755 |

Zooming in on either the jquery + bootstrap circle or the golang + docker circle would produce two more circles, each with two leaf nodes; the tooltips for the four intermediate-level circles would say:

756 | 757 | 763 | 764 |

In other words, represented as a tree, the structure is:

765 | 766 | 774 | 775 |

Other Notes

776 | 777 |

I excluded invalid-email-address and the four most obvious bot accounts I found.

778 | 779 |

GitHub's API doesn't return the contributor list for linux because it's too large. I assigned 100% probability of surfing from linux to Linus. If you have a manual fix for this, please feel free to submit a pull request.

780 | 781 |

As I mentioned earlier, this is supposed to be fun and hopefully useful - although I think it did a reasonable job overall, it's not supposed to represent my opinion about where any particular project belongs. It's the result of a fairly simple algorithm. Please enjoy it and don't take it too seriously!

782 | 783 | 784 | 785 | 786 | -------------------------------------------------------------------------------- /HTML/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 16 | } 17 | .btn-default:active, 18 | .btn-primary:active, 19 | .btn-success:active, 20 | .btn-info:active, 21 | .btn-warning:active, 22 | .btn-danger:active, 23 | .btn-default.active, 24 | .btn-primary.active, 25 | .btn-success.active, 26 | .btn-info.active, 27 | .btn-warning.active, 28 | .btn-danger.active { 29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 31 | } 32 | .btn-default .badge, 33 | .btn-primary .badge, 34 | .btn-success .badge, 35 | .btn-info .badge, 36 | .btn-warning .badge, 37 | .btn-danger .badge { 38 | text-shadow: none; 39 | } 40 | .btn:active, 41 | .btn.active { 42 | background-image: none; 43 | } 44 | .btn-default { 45 | text-shadow: 0 1px 0 #fff; 46 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 47 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 48 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); 49 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 50 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 51 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 52 | background-repeat: repeat-x; 53 | border-color: #dbdbdb; 54 | border-color: #ccc; 55 | } 56 | .btn-default:hover, 57 | .btn-default:focus { 58 | background-color: #e0e0e0; 59 | background-position: 0 -15px; 60 | } 61 | .btn-default:active, 62 | .btn-default.active { 63 | background-color: #e0e0e0; 64 | border-color: #dbdbdb; 65 | } 66 | .btn-default:disabled, 67 | .btn-default[disabled] { 68 | background-color: #e0e0e0; 69 | background-image: none; 70 | } 71 | .btn-primary { 72 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 73 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 74 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); 75 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 76 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 77 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 78 | background-repeat: repeat-x; 79 | border-color: #245580; 80 | } 81 | .btn-primary:hover, 82 | .btn-primary:focus { 83 | background-color: #265a88; 84 | background-position: 0 -15px; 85 | } 86 | .btn-primary:active, 87 | .btn-primary.active { 88 | background-color: #265a88; 89 | border-color: #245580; 90 | } 91 | .btn-primary:disabled, 92 | .btn-primary[disabled] { 93 | background-color: #265a88; 94 | background-image: none; 95 | } 96 | .btn-success { 97 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 98 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 99 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); 100 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 101 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 102 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 103 | background-repeat: repeat-x; 104 | border-color: #3e8f3e; 105 | } 106 | .btn-success:hover, 107 | .btn-success:focus { 108 | background-color: #419641; 109 | background-position: 0 -15px; 110 | } 111 | .btn-success:active, 112 | .btn-success.active { 113 | background-color: #419641; 114 | border-color: #3e8f3e; 115 | } 116 | .btn-success:disabled, 117 | .btn-success[disabled] { 118 | background-color: #419641; 119 | background-image: none; 120 | } 121 | .btn-info { 122 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 123 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 124 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); 125 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 126 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 127 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 128 | background-repeat: repeat-x; 129 | border-color: #28a4c9; 130 | } 131 | .btn-info:hover, 132 | .btn-info:focus { 133 | background-color: #2aabd2; 134 | background-position: 0 -15px; 135 | } 136 | .btn-info:active, 137 | .btn-info.active { 138 | background-color: #2aabd2; 139 | border-color: #28a4c9; 140 | } 141 | .btn-info:disabled, 142 | .btn-info[disabled] { 143 | background-color: #2aabd2; 144 | background-image: none; 145 | } 146 | .btn-warning { 147 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 148 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 149 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); 150 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 151 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 152 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 153 | background-repeat: repeat-x; 154 | border-color: #e38d13; 155 | } 156 | .btn-warning:hover, 157 | .btn-warning:focus { 158 | background-color: #eb9316; 159 | background-position: 0 -15px; 160 | } 161 | .btn-warning:active, 162 | .btn-warning.active { 163 | background-color: #eb9316; 164 | border-color: #e38d13; 165 | } 166 | .btn-warning:disabled, 167 | .btn-warning[disabled] { 168 | background-color: #eb9316; 169 | background-image: none; 170 | } 171 | .btn-danger { 172 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 173 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 174 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); 175 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 176 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 177 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 178 | background-repeat: repeat-x; 179 | border-color: #b92c28; 180 | } 181 | .btn-danger:hover, 182 | .btn-danger:focus { 183 | background-color: #c12e2a; 184 | background-position: 0 -15px; 185 | } 186 | .btn-danger:active, 187 | .btn-danger.active { 188 | background-color: #c12e2a; 189 | border-color: #b92c28; 190 | } 191 | .btn-danger:disabled, 192 | .btn-danger[disabled] { 193 | background-color: #c12e2a; 194 | background-image: none; 195 | } 196 | .thumbnail, 197 | .img-thumbnail { 198 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 199 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 200 | } 201 | .dropdown-menu > li > a:hover, 202 | .dropdown-menu > li > a:focus { 203 | background-color: #e8e8e8; 204 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 205 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 206 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 207 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 208 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 209 | background-repeat: repeat-x; 210 | } 211 | .dropdown-menu > .active > a, 212 | .dropdown-menu > .active > a:hover, 213 | .dropdown-menu > .active > a:focus { 214 | background-color: #2e6da4; 215 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 216 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 217 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 218 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 220 | background-repeat: repeat-x; 221 | } 222 | .navbar-default { 223 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 224 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); 225 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); 226 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 227 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 228 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 229 | background-repeat: repeat-x; 230 | border-radius: 4px; 231 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 232 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 233 | } 234 | .navbar-default .navbar-nav > .open > a, 235 | .navbar-default .navbar-nav > .active > a { 236 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 237 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 238 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); 239 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); 240 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); 241 | background-repeat: repeat-x; 242 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 243 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 244 | } 245 | .navbar-brand, 246 | .navbar-nav > li > a { 247 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 248 | } 249 | .navbar-inverse { 250 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 251 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 252 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); 253 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 254 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 255 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 256 | background-repeat: repeat-x; 257 | } 258 | .navbar-inverse .navbar-nav > .open > a, 259 | .navbar-inverse .navbar-nav > .active > a { 260 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 261 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 262 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); 263 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 264 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 265 | background-repeat: repeat-x; 266 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 267 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 268 | } 269 | .navbar-inverse .navbar-brand, 270 | .navbar-inverse .navbar-nav > li > a { 271 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 272 | } 273 | .navbar-static-top, 274 | .navbar-fixed-top, 275 | .navbar-fixed-bottom { 276 | border-radius: 0; 277 | } 278 | @media (max-width: 767px) { 279 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 280 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 281 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 282 | color: #fff; 283 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 284 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 285 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 286 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 287 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 288 | background-repeat: repeat-x; 289 | } 290 | } 291 | .alert { 292 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 293 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 294 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 295 | } 296 | .alert-success { 297 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 298 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 299 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); 300 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 301 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 302 | background-repeat: repeat-x; 303 | border-color: #b2dba1; 304 | } 305 | .alert-info { 306 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 307 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 308 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); 309 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 310 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 311 | background-repeat: repeat-x; 312 | border-color: #9acfea; 313 | } 314 | .alert-warning { 315 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 316 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 317 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); 318 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 319 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 320 | background-repeat: repeat-x; 321 | border-color: #f5e79e; 322 | } 323 | .alert-danger { 324 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 325 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 326 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); 327 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 328 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 329 | background-repeat: repeat-x; 330 | border-color: #dca7a7; 331 | } 332 | .progress { 333 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 334 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 335 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); 336 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 337 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 338 | background-repeat: repeat-x; 339 | } 340 | .progress-bar { 341 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 342 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 343 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); 344 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 345 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 346 | background-repeat: repeat-x; 347 | } 348 | .progress-bar-success { 349 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 350 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 351 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); 352 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 353 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 354 | background-repeat: repeat-x; 355 | } 356 | .progress-bar-info { 357 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 358 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 359 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); 360 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 361 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 362 | background-repeat: repeat-x; 363 | } 364 | .progress-bar-warning { 365 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 366 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 367 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); 368 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 369 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 370 | background-repeat: repeat-x; 371 | } 372 | .progress-bar-danger { 373 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 374 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 375 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); 376 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 377 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 378 | background-repeat: repeat-x; 379 | } 380 | .progress-bar-striped { 381 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 382 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 383 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 384 | } 385 | .list-group { 386 | border-radius: 4px; 387 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 388 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 389 | } 390 | .list-group-item.active, 391 | .list-group-item.active:hover, 392 | .list-group-item.active:focus { 393 | text-shadow: 0 -1px 0 #286090; 394 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 395 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 396 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); 397 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 398 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 399 | background-repeat: repeat-x; 400 | border-color: #2b669a; 401 | } 402 | .list-group-item.active .badge, 403 | .list-group-item.active:hover .badge, 404 | .list-group-item.active:focus .badge { 405 | text-shadow: none; 406 | } 407 | .panel { 408 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 409 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 410 | } 411 | .panel-default > .panel-heading { 412 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 413 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 414 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 415 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 416 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 417 | background-repeat: repeat-x; 418 | } 419 | .panel-primary > .panel-heading { 420 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 421 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 422 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 423 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 424 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 425 | background-repeat: repeat-x; 426 | } 427 | .panel-success > .panel-heading { 428 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 429 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 430 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); 431 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 432 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 433 | background-repeat: repeat-x; 434 | } 435 | .panel-info > .panel-heading { 436 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 437 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 438 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); 439 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 440 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 441 | background-repeat: repeat-x; 442 | } 443 | .panel-warning > .panel-heading { 444 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 445 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 446 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); 447 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 448 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 449 | background-repeat: repeat-x; 450 | } 451 | .panel-danger > .panel-heading { 452 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 453 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 454 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); 455 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 456 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 457 | background-repeat: repeat-x; 458 | } 459 | .well { 460 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 461 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 462 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); 463 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 464 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 465 | background-repeat: repeat-x; 466 | border-color: #dcdcdc; 467 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 468 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 469 | } 470 | /*# sourceMappingURL=bootstrap-theme.css.map */ 471 | -------------------------------------------------------------------------------- /HTML/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /HTML/css/main.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /* ========================================================================== 4 | Author's custom styles 5 | ========================================================================== */ 6 | 7 | 8 | .edge { 9 | stroke-width: 1; 10 | stroke: #888; 11 | stroke-opacity: 0.5; 12 | } 13 | 14 | .node { 15 | cursor: pointer; 16 | -webkit-user-select: none; 17 | -webkit-touch-callout: none; 18 | } 19 | 20 | .node.level0 { 21 | fill: #034e7b; 22 | } 23 | 24 | .node.level1 { 25 | fill: #0570b0; 26 | } 27 | 28 | .node.level2 { 29 | fill: #3690c0; 30 | } 31 | 32 | .node.level3 { 33 | fill: #74a9cf; 34 | } 35 | 36 | .node.level4 { 37 | fill: #a6bddb; 38 | } 39 | 40 | .node.level5 { 41 | fill: #d0d1e6; 42 | } 43 | 44 | .node--leaf { 45 | fill: white; 46 | } 47 | 48 | .node.related,.legend.related { 49 | stroke: #BC6997; 50 | stroke-width: 1px; 51 | } 52 | 53 | .node--leaf.related,.legend--leaf.related { 54 | fill: #BC6997; 55 | } 56 | 57 | .node.selected,.legend.selected { 58 | stroke: #FFBF20; 59 | stroke-width: 1.5px; 60 | } 61 | 62 | .node--leaf.selected,.legend--leaf.selected { 63 | fill: #FFBF20; 64 | } 65 | 66 | .legend { 67 | fill: transparent; 68 | } 69 | 70 | .node.outlined { 71 | stroke: #000000; 72 | stroke-width: 1.5px; 73 | } 74 | 75 | .tooltipBackground { 76 | fill: #FFFFFF; 77 | stroke-width: 3; 78 | stroke: #7F7F7F; 79 | } 80 | 81 | .tooltipTriangle { 82 | fill: #7F7F7F; 83 | } 84 | 85 | .node--root { 86 | pointer-events: none; 87 | } 88 | 89 | .closebuttonx { 90 | stroke: #000000; 91 | stroke-width: 2; 92 | } 93 | 94 | .related-repo { 95 | margin-bottom: 5px; 96 | } 97 | 98 | .related-repo-link { 99 | cursor: pointer; 100 | } 101 | 102 | .related-repo.same-owner { 103 | font-weight: bold; 104 | } 105 | 106 | .closebuttoncircle { 107 | fill: none; 108 | stroke: #000000; 109 | stroke-width: 2; 110 | cursor: pointer; 111 | pointer-events: all; 112 | } 113 | 114 | .mobile-tooltip { 115 | font-size: 0.75em; 116 | min-height: 3em; 117 | text-align: center; 118 | } 119 | 120 | .select2-container--classic .select2-results > .select2-results__options { 121 | max-height: 300px; 122 | overflow-y: auto; 123 | } 124 | 125 | .select2-selection__clear { 126 | font-size: 1.5em; 127 | font-weight: normal; 128 | transform: scale(1.25,1) 129 | } 130 | 131 | .github-link-image.greyed-out { 132 | opacity: 0.25; 133 | } 134 | 135 | /* http://stackoverflow.com/questions/6483425/prevent-iphone-from-zooming-in-on-select-in-web-app */ 136 | @media screen and (-webkit-min-device-pixel-ratio: 0) { 137 | select:focus, textarea:focus, input:focus { 138 | font-size: 16px; 139 | } 140 | } 141 | 142 | /* https://github.com/tobiasahlin/SpinKit */ 143 | 144 | .spinner { 145 | margin: 100px auto; 146 | width: 200px; 147 | height: 200px; 148 | position: relative; 149 | text-align: center; 150 | 151 | -webkit-animation: sk-rotate 2.0s infinite linear; 152 | animation: sk-rotate 2.0s infinite linear; 153 | } 154 | 155 | .dot1, .dot2 { 156 | width: 50%; 157 | height: 50%; 158 | display: inline-block; 159 | position: absolute; 160 | top: 0; 161 | border-radius: 100%; 162 | 163 | -webkit-animation: sk-bounce 2.0s infinite ease-in-out; 164 | animation: sk-bounce 2.0s infinite ease-in-out; 165 | } 166 | 167 | .dot1 { 168 | background-color: #74a9cf; 169 | } 170 | 171 | .dot2 { 172 | background-color: #034e7b; 173 | top: auto; 174 | bottom: 0; 175 | -webkit-animation-delay: -1.0s; 176 | animation-delay: -1.0s; 177 | } 178 | 179 | @-webkit-keyframes sk-rotate { 100% { -webkit-transform: rotate(360deg) }} 180 | @keyframes sk-rotate { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }} 181 | 182 | @-webkit-keyframes sk-bounce { 183 | 0%, 100% { -webkit-transform: scale(0.0) } 184 | 50% { -webkit-transform: scale(1.0) } 185 | } 186 | 187 | @keyframes sk-bounce { 188 | 0%, 100% { 189 | transform: scale(0.0); 190 | -webkit-transform: scale(0.0); 191 | } 50% { 192 | transform: scale(1.0); 193 | -webkit-transform: scale(1.0); 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /HTML/css/octicons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'octicons'; 3 | src: url('../fonts/octicons.eot?#iefix') format('embedded-opentype'), 4 | url('../fonts/octicons.woff') format('woff'), 5 | url('../fonts/octicons.ttf') format('truetype'), 6 | url('../fonts/octicons.svg#octicons') format('svg'); 7 | font-weight: normal; 8 | font-style: normal; 9 | } 10 | 11 | /* 12 | 13 | .octicon is optimized for 16px. 14 | .mega-octicon is optimized for 32px but can be used larger. 15 | 16 | */ 17 | .octicon, .mega-octicon { 18 | font: normal normal normal 16px/1 octicons; 19 | display: inline-block; 20 | text-decoration: none; 21 | text-rendering: auto; 22 | -webkit-font-smoothing: antialiased; 23 | -moz-osx-font-smoothing: grayscale; 24 | -webkit-user-select: none; 25 | -moz-user-select: none; 26 | -ms-user-select: none; 27 | user-select: none; 28 | } 29 | .mega-octicon { font-size: 32px; } 30 | 31 | .octicon-alert:before { content: '\f02d'} /*  */ 32 | .octicon-arrow-down:before { content: '\f03f'} /*  */ 33 | .octicon-arrow-left:before { content: '\f040'} /*  */ 34 | .octicon-arrow-right:before { content: '\f03e'} /*  */ 35 | .octicon-arrow-small-down:before { content: '\f0a0'} /*  */ 36 | .octicon-arrow-small-left:before { content: '\f0a1'} /*  */ 37 | .octicon-arrow-small-right:before { content: '\f071'} /*  */ 38 | .octicon-arrow-small-up:before { content: '\f09f'} /*  */ 39 | .octicon-arrow-up:before { content: '\f03d'} /*  */ 40 | .octicon-microscope:before, 41 | .octicon-beaker:before { content: '\f0dd'} /*  */ 42 | .octicon-bell:before { content: '\f0de'} /*  */ 43 | .octicon-bold:before { content: '\f0e2'} /*  */ 44 | .octicon-book:before { content: '\f007'} /*  */ 45 | .octicon-bookmark:before { content: '\f07b'} /*  */ 46 | .octicon-briefcase:before { content: '\f0d3'} /*  */ 47 | .octicon-broadcast:before { content: '\f048'} /*  */ 48 | .octicon-browser:before { content: '\f0c5'} /*  */ 49 | .octicon-bug:before { content: '\f091'} /*  */ 50 | .octicon-calendar:before { content: '\f068'} /*  */ 51 | .octicon-check:before { content: '\f03a'} /*  */ 52 | .octicon-checklist:before { content: '\f076'} /*  */ 53 | .octicon-chevron-down:before { content: '\f0a3'} /*  */ 54 | .octicon-chevron-left:before { content: '\f0a4'} /*  */ 55 | .octicon-chevron-right:before { content: '\f078'} /*  */ 56 | .octicon-chevron-up:before { content: '\f0a2'} /*  */ 57 | .octicon-circle-slash:before { content: '\f084'} /*  */ 58 | .octicon-circuit-board:before { content: '\f0d6'} /*  */ 59 | .octicon-clippy:before { content: '\f035'} /*  */ 60 | .octicon-clock:before { content: '\f046'} /*  */ 61 | .octicon-cloud-download:before { content: '\f00b'} /*  */ 62 | .octicon-cloud-upload:before { content: '\f00c'} /*  */ 63 | .octicon-code:before { content: '\f05f'} /*  */ 64 | .octicon-comment-add:before, 65 | .octicon-comment:before { content: '\f02b'} /*  */ 66 | .octicon-comment-discussion:before { content: '\f04f'} /*  */ 67 | .octicon-credit-card:before { content: '\f045'} /*  */ 68 | .octicon-dash:before { content: '\f0ca'} /*  */ 69 | .octicon-dashboard:before { content: '\f07d'} /*  */ 70 | .octicon-database:before { content: '\f096'} /*  */ 71 | .octicon-clone:before, 72 | .octicon-desktop-download:before { content: '\f0dc'} /*  */ 73 | .octicon-device-camera:before { content: '\f056'} /*  */ 74 | .octicon-device-camera-video:before { content: '\f057'} /*  */ 75 | .octicon-device-desktop:before { content: '\f27c'} /*  */ 76 | .octicon-device-mobile:before { content: '\f038'} /*  */ 77 | .octicon-diff:before { content: '\f04d'} /*  */ 78 | .octicon-diff-added:before { content: '\f06b'} /*  */ 79 | .octicon-diff-ignored:before { content: '\f099'} /*  */ 80 | .octicon-diff-modified:before { content: '\f06d'} /*  */ 81 | .octicon-diff-removed:before { content: '\f06c'} /*  */ 82 | .octicon-diff-renamed:before { content: '\f06e'} /*  */ 83 | .octicon-ellipsis:before { content: '\f09a'} /*  */ 84 | .octicon-eye-unwatch:before, 85 | .octicon-eye-watch:before, 86 | .octicon-eye:before { content: '\f04e'} /*  */ 87 | .octicon-file-binary:before { content: '\f094'} /*  */ 88 | .octicon-file-code:before { content: '\f010'} /*  */ 89 | .octicon-file-directory:before { content: '\f016'} /*  */ 90 | .octicon-file-media:before { content: '\f012'} /*  */ 91 | .octicon-file-pdf:before { content: '\f014'} /*  */ 92 | .octicon-file-submodule:before { content: '\f017'} /*  */ 93 | .octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ 94 | .octicon-file-symlink-file:before { content: '\f0b0'} /*  */ 95 | .octicon-file-text:before { content: '\f011'} /*  */ 96 | .octicon-file-zip:before { content: '\f013'} /*  */ 97 | .octicon-flame:before { content: '\f0d2'} /*  */ 98 | .octicon-fold:before { content: '\f0cc'} /*  */ 99 | .octicon-gear:before { content: '\f02f'} /*  */ 100 | .octicon-gift:before { content: '\f042'} /*  */ 101 | .octicon-gist:before { content: '\f00e'} /*  */ 102 | .octicon-gist-secret:before { content: '\f08c'} /*  */ 103 | .octicon-git-branch-create:before, 104 | .octicon-git-branch-delete:before, 105 | .octicon-git-branch:before { content: '\f020'} /*  */ 106 | .octicon-git-commit:before { content: '\f01f'} /*  */ 107 | .octicon-git-compare:before { content: '\f0ac'} /*  */ 108 | .octicon-git-merge:before { content: '\f023'} /*  */ 109 | .octicon-git-pull-request-abandoned:before, 110 | .octicon-git-pull-request:before { content: '\f009'} /*  */ 111 | .octicon-globe:before { content: '\f0b6'} /*  */ 112 | .octicon-graph:before { content: '\f043'} /*  */ 113 | .octicon-heart:before { content: '\2665'} /* ♥ */ 114 | .octicon-history:before { content: '\f07e'} /*  */ 115 | .octicon-home:before { content: '\f08d'} /*  */ 116 | .octicon-horizontal-rule:before { content: '\f070'} /*  */ 117 | .octicon-hubot:before { content: '\f09d'} /*  */ 118 | .octicon-inbox:before { content: '\f0cf'} /*  */ 119 | .octicon-info:before { content: '\f059'} /*  */ 120 | .octicon-issue-closed:before { content: '\f028'} /*  */ 121 | .octicon-issue-opened:before { content: '\f026'} /*  */ 122 | .octicon-issue-reopened:before { content: '\f027'} /*  */ 123 | .octicon-italic:before { content: '\f0e4'} /*  */ 124 | .octicon-jersey:before { content: '\f019'} /*  */ 125 | .octicon-key:before { content: '\f049'} /*  */ 126 | .octicon-keyboard:before { content: '\f00d'} /*  */ 127 | .octicon-law:before { content: '\f0d8'} /*  */ 128 | .octicon-light-bulb:before { content: '\f000'} /*  */ 129 | .octicon-link:before { content: '\f05c'} /*  */ 130 | .octicon-link-external:before { content: '\f07f'} /*  */ 131 | .octicon-list-ordered:before { content: '\f062'} /*  */ 132 | .octicon-list-unordered:before { content: '\f061'} /*  */ 133 | .octicon-location:before { content: '\f060'} /*  */ 134 | .octicon-gist-private:before, 135 | .octicon-mirror-private:before, 136 | .octicon-git-fork-private:before, 137 | .octicon-lock:before { content: '\f06a'} /*  */ 138 | .octicon-logo-gist:before { content: '\f0ad'} /*  */ 139 | .octicon-logo-github:before { content: '\f092'} /*  */ 140 | .octicon-mail:before { content: '\f03b'} /*  */ 141 | .octicon-mail-read:before { content: '\f03c'} /*  */ 142 | .octicon-mail-reply:before { content: '\f051'} /*  */ 143 | .octicon-mark-github:before { content: '\f00a'} /*  */ 144 | .octicon-markdown:before { content: '\f0c9'} /*  */ 145 | .octicon-megaphone:before { content: '\f077'} /*  */ 146 | .octicon-mention:before { content: '\f0be'} /*  */ 147 | .octicon-milestone:before { content: '\f075'} /*  */ 148 | .octicon-mirror-public:before, 149 | .octicon-mirror:before { content: '\f024'} /*  */ 150 | .octicon-mortar-board:before { content: '\f0d7'} /*  */ 151 | .octicon-mute:before { content: '\f080'} /*  */ 152 | .octicon-no-newline:before { content: '\f09c'} /*  */ 153 | .octicon-octoface:before { content: '\f008'} /*  */ 154 | .octicon-organization:before { content: '\f037'} /*  */ 155 | .octicon-package:before { content: '\f0c4'} /*  */ 156 | .octicon-paintcan:before { content: '\f0d1'} /*  */ 157 | .octicon-pencil:before { content: '\f058'} /*  */ 158 | .octicon-person-add:before, 159 | .octicon-person-follow:before, 160 | .octicon-person:before { content: '\f018'} /*  */ 161 | .octicon-pin:before { content: '\f041'} /*  */ 162 | .octicon-plug:before { content: '\f0d4'} /*  */ 163 | .octicon-repo-create:before, 164 | .octicon-gist-new:before, 165 | .octicon-file-directory-create:before, 166 | .octicon-file-add:before, 167 | .octicon-plus:before { content: '\f05d'} /*  */ 168 | .octicon-primitive-dot:before { content: '\f052'} /*  */ 169 | .octicon-primitive-square:before { content: '\f053'} /*  */ 170 | .octicon-pulse:before { content: '\f085'} /*  */ 171 | .octicon-question:before { content: '\f02c'} /*  */ 172 | .octicon-quote:before { content: '\f063'} /*  */ 173 | .octicon-radio-tower:before { content: '\f030'} /*  */ 174 | .octicon-repo-delete:before, 175 | .octicon-repo:before { content: '\f001'} /*  */ 176 | .octicon-repo-clone:before { content: '\f04c'} /*  */ 177 | .octicon-repo-force-push:before { content: '\f04a'} /*  */ 178 | .octicon-gist-fork:before, 179 | .octicon-repo-forked:before { content: '\f002'} /*  */ 180 | .octicon-repo-pull:before { content: '\f006'} /*  */ 181 | .octicon-repo-push:before { content: '\f005'} /*  */ 182 | .octicon-rocket:before { content: '\f033'} /*  */ 183 | .octicon-rss:before { content: '\f034'} /*  */ 184 | .octicon-ruby:before { content: '\f047'} /*  */ 185 | .octicon-search-save:before, 186 | .octicon-search:before { content: '\f02e'} /*  */ 187 | .octicon-server:before { content: '\f097'} /*  */ 188 | .octicon-settings:before { content: '\f07c'} /*  */ 189 | .octicon-shield:before { content: '\f0e1'} /*  */ 190 | .octicon-log-in:before, 191 | .octicon-sign-in:before { content: '\f036'} /*  */ 192 | .octicon-log-out:before, 193 | .octicon-sign-out:before { content: '\f032'} /*  */ 194 | .octicon-smiley:before { content: '\f0e7'} /*  */ 195 | .octicon-squirrel:before { content: '\f0b2'} /*  */ 196 | .octicon-star-add:before, 197 | .octicon-star-delete:before, 198 | .octicon-star:before { content: '\f02a'} /*  */ 199 | .octicon-stop:before { content: '\f08f'} /*  */ 200 | .octicon-repo-sync:before, 201 | .octicon-sync:before { content: '\f087'} /*  */ 202 | .octicon-tag-remove:before, 203 | .octicon-tag-add:before, 204 | .octicon-tag:before { content: '\f015'} /*  */ 205 | .octicon-tasklist:before { content: '\f0e5'} /*  */ 206 | .octicon-telescope:before { content: '\f088'} /*  */ 207 | .octicon-terminal:before { content: '\f0c8'} /*  */ 208 | .octicon-text-size:before { content: '\f0e3'} /*  */ 209 | .octicon-three-bars:before { content: '\f05e'} /*  */ 210 | .octicon-thumbsdown:before { content: '\f0db'} /*  */ 211 | .octicon-thumbsup:before { content: '\f0da'} /*  */ 212 | .octicon-tools:before { content: '\f031'} /*  */ 213 | .octicon-trashcan:before { content: '\f0d0'} /*  */ 214 | .octicon-triangle-down:before { content: '\f05b'} /*  */ 215 | .octicon-triangle-left:before { content: '\f044'} /*  */ 216 | .octicon-triangle-right:before { content: '\f05a'} /*  */ 217 | .octicon-triangle-up:before { content: '\f0aa'} /*  */ 218 | .octicon-unfold:before { content: '\f039'} /*  */ 219 | .octicon-unmute:before { content: '\f0ba'} /*  */ 220 | .octicon-unverified:before { content: '\f0e8'} /*  */ 221 | .octicon-verified:before { content: '\f0e6'} /*  */ 222 | .octicon-versions:before { content: '\f064'} /*  */ 223 | .octicon-watch:before { content: '\f0e0'} /*  */ 224 | .octicon-remove-close:before, 225 | .octicon-x:before { content: '\f081'} /*  */ 226 | .octicon-zap:before { content: '\26A1'} /* ⚡ */ 227 | -------------------------------------------------------------------------------- /HTML/css/select2.min.css: -------------------------------------------------------------------------------- 1 | .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} 2 | -------------------------------------------------------------------------------- /HTML/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /HTML/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /HTML/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /HTML/fonts/octicons-local.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/octicons-local.ttf -------------------------------------------------------------------------------- /HTML/fonts/octicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/octicons.eot -------------------------------------------------------------------------------- /HTML/fonts/octicons.less: -------------------------------------------------------------------------------- 1 | @octicons-font-path: "."; 2 | @octicons-version: "c5a1d52cb40008f6d4ed65bf3f12d508b2fe8c88"; 3 | 4 | @font-face { 5 | font-family: 'octicons'; 6 | src: ~"url('@{octicons-font-path}/octicons.eot?#iefix&v=@{octicons-version}') format('embedded-opentype')", 7 | ~"url('@{octicons-font-path}/octicons.woff?v=@{octicons-version}') format('woff')", 8 | ~"url('@{octicons-font-path}/octicons.ttf?v=@{octicons-version}') format('truetype')", 9 | ~"url('@{octicons-font-path}/octicons.svg?v=@{octicons-version}#octicons') format('svg')"; 10 | font-weight: normal; 11 | font-style: normal; 12 | } 13 | 14 | // .octicon is optimized for 16px. 15 | // .mega-octicon is optimized for 32px but can be used larger. 16 | .octicon, .mega-octicon { 17 | font: normal normal normal 16px/1 octicons; 18 | display: inline-block; 19 | text-decoration: none; 20 | text-rendering: auto; 21 | -webkit-font-smoothing: antialiased; 22 | -moz-osx-font-smoothing: grayscale; 23 | -webkit-user-select: none; 24 | -moz-user-select: none; 25 | -ms-user-select: none; 26 | user-select: none; 27 | } 28 | .mega-octicon { font-size: 32px; } 29 | 30 | .octicon-alert:before { content: '\f02d'} /*  */ 31 | .octicon-arrow-down:before { content: '\f03f'} /*  */ 32 | .octicon-arrow-left:before { content: '\f040'} /*  */ 33 | .octicon-arrow-right:before { content: '\f03e'} /*  */ 34 | .octicon-arrow-small-down:before { content: '\f0a0'} /*  */ 35 | .octicon-arrow-small-left:before { content: '\f0a1'} /*  */ 36 | .octicon-arrow-small-right:before { content: '\f071'} /*  */ 37 | .octicon-arrow-small-up:before { content: '\f09f'} /*  */ 38 | .octicon-arrow-up:before { content: '\f03d'} /*  */ 39 | .octicon-microscope:before, 40 | .octicon-beaker:before { content: '\f0dd'} /*  */ 41 | .octicon-bell:before { content: '\f0de'} /*  */ 42 | .octicon-bold:before { content: '\f0e2'} /*  */ 43 | .octicon-book:before { content: '\f007'} /*  */ 44 | .octicon-bookmark:before { content: '\f07b'} /*  */ 45 | .octicon-briefcase:before { content: '\f0d3'} /*  */ 46 | .octicon-broadcast:before { content: '\f048'} /*  */ 47 | .octicon-browser:before { content: '\f0c5'} /*  */ 48 | .octicon-bug:before { content: '\f091'} /*  */ 49 | .octicon-calendar:before { content: '\f068'} /*  */ 50 | .octicon-check:before { content: '\f03a'} /*  */ 51 | .octicon-checklist:before { content: '\f076'} /*  */ 52 | .octicon-chevron-down:before { content: '\f0a3'} /*  */ 53 | .octicon-chevron-left:before { content: '\f0a4'} /*  */ 54 | .octicon-chevron-right:before { content: '\f078'} /*  */ 55 | .octicon-chevron-up:before { content: '\f0a2'} /*  */ 56 | .octicon-circle-slash:before { content: '\f084'} /*  */ 57 | .octicon-circuit-board:before { content: '\f0d6'} /*  */ 58 | .octicon-clippy:before { content: '\f035'} /*  */ 59 | .octicon-clock:before { content: '\f046'} /*  */ 60 | .octicon-cloud-download:before { content: '\f00b'} /*  */ 61 | .octicon-cloud-upload:before { content: '\f00c'} /*  */ 62 | .octicon-code:before { content: '\f05f'} /*  */ 63 | .octicon-comment-add:before, 64 | .octicon-comment:before { content: '\f02b'} /*  */ 65 | .octicon-comment-discussion:before { content: '\f04f'} /*  */ 66 | .octicon-credit-card:before { content: '\f045'} /*  */ 67 | .octicon-dash:before { content: '\f0ca'} /*  */ 68 | .octicon-dashboard:before { content: '\f07d'} /*  */ 69 | .octicon-database:before { content: '\f096'} /*  */ 70 | .octicon-clone:before, 71 | .octicon-desktop-download:before { content: '\f0dc'} /*  */ 72 | .octicon-device-camera:before { content: '\f056'} /*  */ 73 | .octicon-device-camera-video:before { content: '\f057'} /*  */ 74 | .octicon-device-desktop:before { content: '\f27c'} /*  */ 75 | .octicon-device-mobile:before { content: '\f038'} /*  */ 76 | .octicon-diff:before { content: '\f04d'} /*  */ 77 | .octicon-diff-added:before { content: '\f06b'} /*  */ 78 | .octicon-diff-ignored:before { content: '\f099'} /*  */ 79 | .octicon-diff-modified:before { content: '\f06d'} /*  */ 80 | .octicon-diff-removed:before { content: '\f06c'} /*  */ 81 | .octicon-diff-renamed:before { content: '\f06e'} /*  */ 82 | .octicon-ellipsis:before { content: '\f09a'} /*  */ 83 | .octicon-eye-unwatch:before, 84 | .octicon-eye-watch:before, 85 | .octicon-eye:before { content: '\f04e'} /*  */ 86 | .octicon-file-binary:before { content: '\f094'} /*  */ 87 | .octicon-file-code:before { content: '\f010'} /*  */ 88 | .octicon-file-directory:before { content: '\f016'} /*  */ 89 | .octicon-file-media:before { content: '\f012'} /*  */ 90 | .octicon-file-pdf:before { content: '\f014'} /*  */ 91 | .octicon-file-submodule:before { content: '\f017'} /*  */ 92 | .octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ 93 | .octicon-file-symlink-file:before { content: '\f0b0'} /*  */ 94 | .octicon-file-text:before { content: '\f011'} /*  */ 95 | .octicon-file-zip:before { content: '\f013'} /*  */ 96 | .octicon-flame:before { content: '\f0d2'} /*  */ 97 | .octicon-fold:before { content: '\f0cc'} /*  */ 98 | .octicon-gear:before { content: '\f02f'} /*  */ 99 | .octicon-gift:before { content: '\f042'} /*  */ 100 | .octicon-gist:before { content: '\f00e'} /*  */ 101 | .octicon-gist-secret:before { content: '\f08c'} /*  */ 102 | .octicon-git-branch-create:before, 103 | .octicon-git-branch-delete:before, 104 | .octicon-git-branch:before { content: '\f020'} /*  */ 105 | .octicon-git-commit:before { content: '\f01f'} /*  */ 106 | .octicon-git-compare:before { content: '\f0ac'} /*  */ 107 | .octicon-git-merge:before { content: '\f023'} /*  */ 108 | .octicon-git-pull-request-abandoned:before, 109 | .octicon-git-pull-request:before { content: '\f009'} /*  */ 110 | .octicon-globe:before { content: '\f0b6'} /*  */ 111 | .octicon-graph:before { content: '\f043'} /*  */ 112 | .octicon-heart:before { content: '\2665'} /* ♥ */ 113 | .octicon-history:before { content: '\f07e'} /*  */ 114 | .octicon-home:before { content: '\f08d'} /*  */ 115 | .octicon-horizontal-rule:before { content: '\f070'} /*  */ 116 | .octicon-hubot:before { content: '\f09d'} /*  */ 117 | .octicon-inbox:before { content: '\f0cf'} /*  */ 118 | .octicon-info:before { content: '\f059'} /*  */ 119 | .octicon-issue-closed:before { content: '\f028'} /*  */ 120 | .octicon-issue-opened:before { content: '\f026'} /*  */ 121 | .octicon-issue-reopened:before { content: '\f027'} /*  */ 122 | .octicon-italic:before { content: '\f0e4'} /*  */ 123 | .octicon-jersey:before { content: '\f019'} /*  */ 124 | .octicon-key:before { content: '\f049'} /*  */ 125 | .octicon-keyboard:before { content: '\f00d'} /*  */ 126 | .octicon-law:before { content: '\f0d8'} /*  */ 127 | .octicon-light-bulb:before { content: '\f000'} /*  */ 128 | .octicon-link:before { content: '\f05c'} /*  */ 129 | .octicon-link-external:before { content: '\f07f'} /*  */ 130 | .octicon-list-ordered:before { content: '\f062'} /*  */ 131 | .octicon-list-unordered:before { content: '\f061'} /*  */ 132 | .octicon-location:before { content: '\f060'} /*  */ 133 | .octicon-gist-private:before, 134 | .octicon-mirror-private:before, 135 | .octicon-git-fork-private:before, 136 | .octicon-lock:before { content: '\f06a'} /*  */ 137 | .octicon-logo-gist:before { content: '\f0ad'} /*  */ 138 | .octicon-logo-github:before { content: '\f092'} /*  */ 139 | .octicon-mail:before { content: '\f03b'} /*  */ 140 | .octicon-mail-read:before { content: '\f03c'} /*  */ 141 | .octicon-mail-reply:before { content: '\f051'} /*  */ 142 | .octicon-mark-github:before { content: '\f00a'} /*  */ 143 | .octicon-markdown:before { content: '\f0c9'} /*  */ 144 | .octicon-megaphone:before { content: '\f077'} /*  */ 145 | .octicon-mention:before { content: '\f0be'} /*  */ 146 | .octicon-milestone:before { content: '\f075'} /*  */ 147 | .octicon-mirror-public:before, 148 | .octicon-mirror:before { content: '\f024'} /*  */ 149 | .octicon-mortar-board:before { content: '\f0d7'} /*  */ 150 | .octicon-mute:before { content: '\f080'} /*  */ 151 | .octicon-no-newline:before { content: '\f09c'} /*  */ 152 | .octicon-octoface:before { content: '\f008'} /*  */ 153 | .octicon-organization:before { content: '\f037'} /*  */ 154 | .octicon-package:before { content: '\f0c4'} /*  */ 155 | .octicon-paintcan:before { content: '\f0d1'} /*  */ 156 | .octicon-pencil:before { content: '\f058'} /*  */ 157 | .octicon-person-add:before, 158 | .octicon-person-follow:before, 159 | .octicon-person:before { content: '\f018'} /*  */ 160 | .octicon-pin:before { content: '\f041'} /*  */ 161 | .octicon-plug:before { content: '\f0d4'} /*  */ 162 | .octicon-repo-create:before, 163 | .octicon-gist-new:before, 164 | .octicon-file-directory-create:before, 165 | .octicon-file-add:before, 166 | .octicon-plus:before { content: '\f05d'} /*  */ 167 | .octicon-primitive-dot:before { content: '\f052'} /*  */ 168 | .octicon-primitive-square:before { content: '\f053'} /*  */ 169 | .octicon-pulse:before { content: '\f085'} /*  */ 170 | .octicon-question:before { content: '\f02c'} /*  */ 171 | .octicon-quote:before { content: '\f063'} /*  */ 172 | .octicon-radio-tower:before { content: '\f030'} /*  */ 173 | .octicon-repo-delete:before, 174 | .octicon-repo:before { content: '\f001'} /*  */ 175 | .octicon-repo-clone:before { content: '\f04c'} /*  */ 176 | .octicon-repo-force-push:before { content: '\f04a'} /*  */ 177 | .octicon-gist-fork:before, 178 | .octicon-repo-forked:before { content: '\f002'} /*  */ 179 | .octicon-repo-pull:before { content: '\f006'} /*  */ 180 | .octicon-repo-push:before { content: '\f005'} /*  */ 181 | .octicon-rocket:before { content: '\f033'} /*  */ 182 | .octicon-rss:before { content: '\f034'} /*  */ 183 | .octicon-ruby:before { content: '\f047'} /*  */ 184 | .octicon-search-save:before, 185 | .octicon-search:before { content: '\f02e'} /*  */ 186 | .octicon-server:before { content: '\f097'} /*  */ 187 | .octicon-settings:before { content: '\f07c'} /*  */ 188 | .octicon-shield:before { content: '\f0e1'} /*  */ 189 | .octicon-log-in:before, 190 | .octicon-sign-in:before { content: '\f036'} /*  */ 191 | .octicon-log-out:before, 192 | .octicon-sign-out:before { content: '\f032'} /*  */ 193 | .octicon-smiley:before { content: '\f0e7'} /*  */ 194 | .octicon-squirrel:before { content: '\f0b2'} /*  */ 195 | .octicon-star-add:before, 196 | .octicon-star-delete:before, 197 | .octicon-star:before { content: '\f02a'} /*  */ 198 | .octicon-stop:before { content: '\f08f'} /*  */ 199 | .octicon-repo-sync:before, 200 | .octicon-sync:before { content: '\f087'} /*  */ 201 | .octicon-tag-remove:before, 202 | .octicon-tag-add:before, 203 | .octicon-tag:before { content: '\f015'} /*  */ 204 | .octicon-tasklist:before { content: '\f0e5'} /*  */ 205 | .octicon-telescope:before { content: '\f088'} /*  */ 206 | .octicon-terminal:before { content: '\f0c8'} /*  */ 207 | .octicon-text-size:before { content: '\f0e3'} /*  */ 208 | .octicon-three-bars:before { content: '\f05e'} /*  */ 209 | .octicon-thumbsdown:before { content: '\f0db'} /*  */ 210 | .octicon-thumbsup:before { content: '\f0da'} /*  */ 211 | .octicon-tools:before { content: '\f031'} /*  */ 212 | .octicon-trashcan:before { content: '\f0d0'} /*  */ 213 | .octicon-triangle-down:before { content: '\f05b'} /*  */ 214 | .octicon-triangle-left:before { content: '\f044'} /*  */ 215 | .octicon-triangle-right:before { content: '\f05a'} /*  */ 216 | .octicon-triangle-up:before { content: '\f0aa'} /*  */ 217 | .octicon-unfold:before { content: '\f039'} /*  */ 218 | .octicon-unmute:before { content: '\f0ba'} /*  */ 219 | .octicon-unverified:before { content: '\f0e8'} /*  */ 220 | .octicon-verified:before { content: '\f0e6'} /*  */ 221 | .octicon-versions:before { content: '\f064'} /*  */ 222 | .octicon-watch:before { content: '\f0e0'} /*  */ 223 | .octicon-remove-close:before, 224 | .octicon-x:before { content: '\f081'} /*  */ 225 | .octicon-zap:before { content: '\26A1'} /* ⚡ */ 226 | -------------------------------------------------------------------------------- /HTML/fonts/octicons.scss: -------------------------------------------------------------------------------- 1 | $octicons-font-path: "." !default; 2 | $octicons-version: "c5a1d52cb40008f6d4ed65bf3f12d508b2fe8c88"; 3 | 4 | @font-face { 5 | font-family: 'octicons'; 6 | src: url('#{$octicons-font-path}/octicons.eot?#iefix&v=#{$octicons-version}') format('embedded-opentype'), 7 | url('#{$octicons-font-path}/octicons.woff?v=#{$octicons-version}') format('woff'), 8 | url('#{$octicons-font-path}/octicons.ttf?v=#{$octicons-version}') format('truetype'), 9 | url('#{$octicons-font-path}/octicons.svg?v=#{$octicons-version}#octicons') format('svg'); 10 | font-weight: normal; 11 | font-style: normal; 12 | } 13 | 14 | // .octicon is optimized for 16px. 15 | // .mega-octicon is optimized for 32px but can be used larger. 16 | .octicon, .mega-octicon { 17 | font: normal normal normal 16px/1 octicons; 18 | display: inline-block; 19 | text-decoration: none; 20 | text-rendering: auto; 21 | -webkit-font-smoothing: antialiased; 22 | -moz-osx-font-smoothing: grayscale; 23 | -webkit-user-select: none; 24 | -moz-user-select: none; 25 | -ms-user-select: none; 26 | user-select: none; 27 | } 28 | .mega-octicon { font-size: 32px; } 29 | 30 | .octicon-alert:before { content: '\f02d'} /*  */ 31 | .octicon-arrow-down:before { content: '\f03f'} /*  */ 32 | .octicon-arrow-left:before { content: '\f040'} /*  */ 33 | .octicon-arrow-right:before { content: '\f03e'} /*  */ 34 | .octicon-arrow-small-down:before { content: '\f0a0'} /*  */ 35 | .octicon-arrow-small-left:before { content: '\f0a1'} /*  */ 36 | .octicon-arrow-small-right:before { content: '\f071'} /*  */ 37 | .octicon-arrow-small-up:before { content: '\f09f'} /*  */ 38 | .octicon-arrow-up:before { content: '\f03d'} /*  */ 39 | .octicon-microscope:before, 40 | .octicon-beaker:before { content: '\f0dd'} /*  */ 41 | .octicon-bell:before { content: '\f0de'} /*  */ 42 | .octicon-bold:before { content: '\f0e2'} /*  */ 43 | .octicon-book:before { content: '\f007'} /*  */ 44 | .octicon-bookmark:before { content: '\f07b'} /*  */ 45 | .octicon-briefcase:before { content: '\f0d3'} /*  */ 46 | .octicon-broadcast:before { content: '\f048'} /*  */ 47 | .octicon-browser:before { content: '\f0c5'} /*  */ 48 | .octicon-bug:before { content: '\f091'} /*  */ 49 | .octicon-calendar:before { content: '\f068'} /*  */ 50 | .octicon-check:before { content: '\f03a'} /*  */ 51 | .octicon-checklist:before { content: '\f076'} /*  */ 52 | .octicon-chevron-down:before { content: '\f0a3'} /*  */ 53 | .octicon-chevron-left:before { content: '\f0a4'} /*  */ 54 | .octicon-chevron-right:before { content: '\f078'} /*  */ 55 | .octicon-chevron-up:before { content: '\f0a2'} /*  */ 56 | .octicon-circle-slash:before { content: '\f084'} /*  */ 57 | .octicon-circuit-board:before { content: '\f0d6'} /*  */ 58 | .octicon-clippy:before { content: '\f035'} /*  */ 59 | .octicon-clock:before { content: '\f046'} /*  */ 60 | .octicon-cloud-download:before { content: '\f00b'} /*  */ 61 | .octicon-cloud-upload:before { content: '\f00c'} /*  */ 62 | .octicon-code:before { content: '\f05f'} /*  */ 63 | .octicon-comment-add:before, 64 | .octicon-comment:before { content: '\f02b'} /*  */ 65 | .octicon-comment-discussion:before { content: '\f04f'} /*  */ 66 | .octicon-credit-card:before { content: '\f045'} /*  */ 67 | .octicon-dash:before { content: '\f0ca'} /*  */ 68 | .octicon-dashboard:before { content: '\f07d'} /*  */ 69 | .octicon-database:before { content: '\f096'} /*  */ 70 | .octicon-clone:before, 71 | .octicon-desktop-download:before { content: '\f0dc'} /*  */ 72 | .octicon-device-camera:before { content: '\f056'} /*  */ 73 | .octicon-device-camera-video:before { content: '\f057'} /*  */ 74 | .octicon-device-desktop:before { content: '\f27c'} /*  */ 75 | .octicon-device-mobile:before { content: '\f038'} /*  */ 76 | .octicon-diff:before { content: '\f04d'} /*  */ 77 | .octicon-diff-added:before { content: '\f06b'} /*  */ 78 | .octicon-diff-ignored:before { content: '\f099'} /*  */ 79 | .octicon-diff-modified:before { content: '\f06d'} /*  */ 80 | .octicon-diff-removed:before { content: '\f06c'} /*  */ 81 | .octicon-diff-renamed:before { content: '\f06e'} /*  */ 82 | .octicon-ellipsis:before { content: '\f09a'} /*  */ 83 | .octicon-eye-unwatch:before, 84 | .octicon-eye-watch:before, 85 | .octicon-eye:before { content: '\f04e'} /*  */ 86 | .octicon-file-binary:before { content: '\f094'} /*  */ 87 | .octicon-file-code:before { content: '\f010'} /*  */ 88 | .octicon-file-directory:before { content: '\f016'} /*  */ 89 | .octicon-file-media:before { content: '\f012'} /*  */ 90 | .octicon-file-pdf:before { content: '\f014'} /*  */ 91 | .octicon-file-submodule:before { content: '\f017'} /*  */ 92 | .octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ 93 | .octicon-file-symlink-file:before { content: '\f0b0'} /*  */ 94 | .octicon-file-text:before { content: '\f011'} /*  */ 95 | .octicon-file-zip:before { content: '\f013'} /*  */ 96 | .octicon-flame:before { content: '\f0d2'} /*  */ 97 | .octicon-fold:before { content: '\f0cc'} /*  */ 98 | .octicon-gear:before { content: '\f02f'} /*  */ 99 | .octicon-gift:before { content: '\f042'} /*  */ 100 | .octicon-gist:before { content: '\f00e'} /*  */ 101 | .octicon-gist-secret:before { content: '\f08c'} /*  */ 102 | .octicon-git-branch-create:before, 103 | .octicon-git-branch-delete:before, 104 | .octicon-git-branch:before { content: '\f020'} /*  */ 105 | .octicon-git-commit:before { content: '\f01f'} /*  */ 106 | .octicon-git-compare:before { content: '\f0ac'} /*  */ 107 | .octicon-git-merge:before { content: '\f023'} /*  */ 108 | .octicon-git-pull-request-abandoned:before, 109 | .octicon-git-pull-request:before { content: '\f009'} /*  */ 110 | .octicon-globe:before { content: '\f0b6'} /*  */ 111 | .octicon-graph:before { content: '\f043'} /*  */ 112 | .octicon-heart:before { content: '\2665'} /* ♥ */ 113 | .octicon-history:before { content: '\f07e'} /*  */ 114 | .octicon-home:before { content: '\f08d'} /*  */ 115 | .octicon-horizontal-rule:before { content: '\f070'} /*  */ 116 | .octicon-hubot:before { content: '\f09d'} /*  */ 117 | .octicon-inbox:before { content: '\f0cf'} /*  */ 118 | .octicon-info:before { content: '\f059'} /*  */ 119 | .octicon-issue-closed:before { content: '\f028'} /*  */ 120 | .octicon-issue-opened:before { content: '\f026'} /*  */ 121 | .octicon-issue-reopened:before { content: '\f027'} /*  */ 122 | .octicon-italic:before { content: '\f0e4'} /*  */ 123 | .octicon-jersey:before { content: '\f019'} /*  */ 124 | .octicon-key:before { content: '\f049'} /*  */ 125 | .octicon-keyboard:before { content: '\f00d'} /*  */ 126 | .octicon-law:before { content: '\f0d8'} /*  */ 127 | .octicon-light-bulb:before { content: '\f000'} /*  */ 128 | .octicon-link:before { content: '\f05c'} /*  */ 129 | .octicon-link-external:before { content: '\f07f'} /*  */ 130 | .octicon-list-ordered:before { content: '\f062'} /*  */ 131 | .octicon-list-unordered:before { content: '\f061'} /*  */ 132 | .octicon-location:before { content: '\f060'} /*  */ 133 | .octicon-gist-private:before, 134 | .octicon-mirror-private:before, 135 | .octicon-git-fork-private:before, 136 | .octicon-lock:before { content: '\f06a'} /*  */ 137 | .octicon-logo-gist:before { content: '\f0ad'} /*  */ 138 | .octicon-logo-github:before { content: '\f092'} /*  */ 139 | .octicon-mail:before { content: '\f03b'} /*  */ 140 | .octicon-mail-read:before { content: '\f03c'} /*  */ 141 | .octicon-mail-reply:before { content: '\f051'} /*  */ 142 | .octicon-mark-github:before { content: '\f00a'} /*  */ 143 | .octicon-markdown:before { content: '\f0c9'} /*  */ 144 | .octicon-megaphone:before { content: '\f077'} /*  */ 145 | .octicon-mention:before { content: '\f0be'} /*  */ 146 | .octicon-milestone:before { content: '\f075'} /*  */ 147 | .octicon-mirror-public:before, 148 | .octicon-mirror:before { content: '\f024'} /*  */ 149 | .octicon-mortar-board:before { content: '\f0d7'} /*  */ 150 | .octicon-mute:before { content: '\f080'} /*  */ 151 | .octicon-no-newline:before { content: '\f09c'} /*  */ 152 | .octicon-octoface:before { content: '\f008'} /*  */ 153 | .octicon-organization:before { content: '\f037'} /*  */ 154 | .octicon-package:before { content: '\f0c4'} /*  */ 155 | .octicon-paintcan:before { content: '\f0d1'} /*  */ 156 | .octicon-pencil:before { content: '\f058'} /*  */ 157 | .octicon-person-add:before, 158 | .octicon-person-follow:before, 159 | .octicon-person:before { content: '\f018'} /*  */ 160 | .octicon-pin:before { content: '\f041'} /*  */ 161 | .octicon-plug:before { content: '\f0d4'} /*  */ 162 | .octicon-repo-create:before, 163 | .octicon-gist-new:before, 164 | .octicon-file-directory-create:before, 165 | .octicon-file-add:before, 166 | .octicon-plus:before { content: '\f05d'} /*  */ 167 | .octicon-primitive-dot:before { content: '\f052'} /*  */ 168 | .octicon-primitive-square:before { content: '\f053'} /*  */ 169 | .octicon-pulse:before { content: '\f085'} /*  */ 170 | .octicon-question:before { content: '\f02c'} /*  */ 171 | .octicon-quote:before { content: '\f063'} /*  */ 172 | .octicon-radio-tower:before { content: '\f030'} /*  */ 173 | .octicon-repo-delete:before, 174 | .octicon-repo:before { content: '\f001'} /*  */ 175 | .octicon-repo-clone:before { content: '\f04c'} /*  */ 176 | .octicon-repo-force-push:before { content: '\f04a'} /*  */ 177 | .octicon-gist-fork:before, 178 | .octicon-repo-forked:before { content: '\f002'} /*  */ 179 | .octicon-repo-pull:before { content: '\f006'} /*  */ 180 | .octicon-repo-push:before { content: '\f005'} /*  */ 181 | .octicon-rocket:before { content: '\f033'} /*  */ 182 | .octicon-rss:before { content: '\f034'} /*  */ 183 | .octicon-ruby:before { content: '\f047'} /*  */ 184 | .octicon-search-save:before, 185 | .octicon-search:before { content: '\f02e'} /*  */ 186 | .octicon-server:before { content: '\f097'} /*  */ 187 | .octicon-settings:before { content: '\f07c'} /*  */ 188 | .octicon-shield:before { content: '\f0e1'} /*  */ 189 | .octicon-log-in:before, 190 | .octicon-sign-in:before { content: '\f036'} /*  */ 191 | .octicon-log-out:before, 192 | .octicon-sign-out:before { content: '\f032'} /*  */ 193 | .octicon-smiley:before { content: '\f0e7'} /*  */ 194 | .octicon-squirrel:before { content: '\f0b2'} /*  */ 195 | .octicon-star-add:before, 196 | .octicon-star-delete:before, 197 | .octicon-star:before { content: '\f02a'} /*  */ 198 | .octicon-stop:before { content: '\f08f'} /*  */ 199 | .octicon-repo-sync:before, 200 | .octicon-sync:before { content: '\f087'} /*  */ 201 | .octicon-tag-remove:before, 202 | .octicon-tag-add:before, 203 | .octicon-tag:before { content: '\f015'} /*  */ 204 | .octicon-tasklist:before { content: '\f0e5'} /*  */ 205 | .octicon-telescope:before { content: '\f088'} /*  */ 206 | .octicon-terminal:before { content: '\f0c8'} /*  */ 207 | .octicon-text-size:before { content: '\f0e3'} /*  */ 208 | .octicon-three-bars:before { content: '\f05e'} /*  */ 209 | .octicon-thumbsdown:before { content: '\f0db'} /*  */ 210 | .octicon-thumbsup:before { content: '\f0da'} /*  */ 211 | .octicon-tools:before { content: '\f031'} /*  */ 212 | .octicon-trashcan:before { content: '\f0d0'} /*  */ 213 | .octicon-triangle-down:before { content: '\f05b'} /*  */ 214 | .octicon-triangle-left:before { content: '\f044'} /*  */ 215 | .octicon-triangle-right:before { content: '\f05a'} /*  */ 216 | .octicon-triangle-up:before { content: '\f0aa'} /*  */ 217 | .octicon-unfold:before { content: '\f039'} /*  */ 218 | .octicon-unmute:before { content: '\f0ba'} /*  */ 219 | .octicon-unverified:before { content: '\f0e8'} /*  */ 220 | .octicon-verified:before { content: '\f0e6'} /*  */ 221 | .octicon-versions:before { content: '\f064'} /*  */ 222 | .octicon-watch:before { content: '\f0e0'} /*  */ 223 | .octicon-remove-close:before, 224 | .octicon-x:before { content: '\f081'} /*  */ 225 | .octicon-zap:before { content: '\26A1'} /* ⚡ */ 226 | -------------------------------------------------------------------------------- /HTML/fonts/octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/octicons.ttf -------------------------------------------------------------------------------- /HTML/fonts/octicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/fonts/octicons.woff -------------------------------------------------------------------------------- /HTML/fonts/sprockets-octicons.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'octicons'; 3 | src: font-url('octicons.eot?#iefix') format('embedded-opentype'), 4 | font-url('octicons.woff') format('woff'), 5 | font-url('octicons.ttf') format('truetype'), 6 | font-url('octicons.svg#octicons') format('svg'); 7 | font-weight: normal; 8 | font-style: normal; 9 | } 10 | 11 | // .octicon is optimized for 16px. 12 | // .mega-octicon is optimized for 32px but can be used larger. 13 | .octicon, .mega-octicon { 14 | font: normal normal normal 16px/1 octicons; 15 | display: inline-block; 16 | text-decoration: none; 17 | text-rendering: auto; 18 | -webkit-font-smoothing: antialiased; 19 | -moz-osx-font-smoothing: grayscale; 20 | -webkit-user-select: none; 21 | -moz-user-select: none; 22 | -ms-user-select: none; 23 | user-select: none; 24 | } 25 | .mega-octicon { font-size: 32px; } 26 | 27 | .octicon-alert:before { content: '\f02d'} /*  */ 28 | .octicon-arrow-down:before { content: '\f03f'} /*  */ 29 | .octicon-arrow-left:before { content: '\f040'} /*  */ 30 | .octicon-arrow-right:before { content: '\f03e'} /*  */ 31 | .octicon-arrow-small-down:before { content: '\f0a0'} /*  */ 32 | .octicon-arrow-small-left:before { content: '\f0a1'} /*  */ 33 | .octicon-arrow-small-right:before { content: '\f071'} /*  */ 34 | .octicon-arrow-small-up:before { content: '\f09f'} /*  */ 35 | .octicon-arrow-up:before { content: '\f03d'} /*  */ 36 | .octicon-microscope:before, 37 | .octicon-beaker:before { content: '\f0dd'} /*  */ 38 | .octicon-bell:before { content: '\f0de'} /*  */ 39 | .octicon-bold:before { content: '\f0e2'} /*  */ 40 | .octicon-book:before { content: '\f007'} /*  */ 41 | .octicon-bookmark:before { content: '\f07b'} /*  */ 42 | .octicon-briefcase:before { content: '\f0d3'} /*  */ 43 | .octicon-broadcast:before { content: '\f048'} /*  */ 44 | .octicon-browser:before { content: '\f0c5'} /*  */ 45 | .octicon-bug:before { content: '\f091'} /*  */ 46 | .octicon-calendar:before { content: '\f068'} /*  */ 47 | .octicon-check:before { content: '\f03a'} /*  */ 48 | .octicon-checklist:before { content: '\f076'} /*  */ 49 | .octicon-chevron-down:before { content: '\f0a3'} /*  */ 50 | .octicon-chevron-left:before { content: '\f0a4'} /*  */ 51 | .octicon-chevron-right:before { content: '\f078'} /*  */ 52 | .octicon-chevron-up:before { content: '\f0a2'} /*  */ 53 | .octicon-circle-slash:before { content: '\f084'} /*  */ 54 | .octicon-circuit-board:before { content: '\f0d6'} /*  */ 55 | .octicon-clippy:before { content: '\f035'} /*  */ 56 | .octicon-clock:before { content: '\f046'} /*  */ 57 | .octicon-cloud-download:before { content: '\f00b'} /*  */ 58 | .octicon-cloud-upload:before { content: '\f00c'} /*  */ 59 | .octicon-code:before { content: '\f05f'} /*  */ 60 | .octicon-comment-add:before, 61 | .octicon-comment:before { content: '\f02b'} /*  */ 62 | .octicon-comment-discussion:before { content: '\f04f'} /*  */ 63 | .octicon-credit-card:before { content: '\f045'} /*  */ 64 | .octicon-dash:before { content: '\f0ca'} /*  */ 65 | .octicon-dashboard:before { content: '\f07d'} /*  */ 66 | .octicon-database:before { content: '\f096'} /*  */ 67 | .octicon-clone:before, 68 | .octicon-desktop-download:before { content: '\f0dc'} /*  */ 69 | .octicon-device-camera:before { content: '\f056'} /*  */ 70 | .octicon-device-camera-video:before { content: '\f057'} /*  */ 71 | .octicon-device-desktop:before { content: '\f27c'} /*  */ 72 | .octicon-device-mobile:before { content: '\f038'} /*  */ 73 | .octicon-diff:before { content: '\f04d'} /*  */ 74 | .octicon-diff-added:before { content: '\f06b'} /*  */ 75 | .octicon-diff-ignored:before { content: '\f099'} /*  */ 76 | .octicon-diff-modified:before { content: '\f06d'} /*  */ 77 | .octicon-diff-removed:before { content: '\f06c'} /*  */ 78 | .octicon-diff-renamed:before { content: '\f06e'} /*  */ 79 | .octicon-ellipsis:before { content: '\f09a'} /*  */ 80 | .octicon-eye-unwatch:before, 81 | .octicon-eye-watch:before, 82 | .octicon-eye:before { content: '\f04e'} /*  */ 83 | .octicon-file-binary:before { content: '\f094'} /*  */ 84 | .octicon-file-code:before { content: '\f010'} /*  */ 85 | .octicon-file-directory:before { content: '\f016'} /*  */ 86 | .octicon-file-media:before { content: '\f012'} /*  */ 87 | .octicon-file-pdf:before { content: '\f014'} /*  */ 88 | .octicon-file-submodule:before { content: '\f017'} /*  */ 89 | .octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ 90 | .octicon-file-symlink-file:before { content: '\f0b0'} /*  */ 91 | .octicon-file-text:before { content: '\f011'} /*  */ 92 | .octicon-file-zip:before { content: '\f013'} /*  */ 93 | .octicon-flame:before { content: '\f0d2'} /*  */ 94 | .octicon-fold:before { content: '\f0cc'} /*  */ 95 | .octicon-gear:before { content: '\f02f'} /*  */ 96 | .octicon-gift:before { content: '\f042'} /*  */ 97 | .octicon-gist:before { content: '\f00e'} /*  */ 98 | .octicon-gist-secret:before { content: '\f08c'} /*  */ 99 | .octicon-git-branch-create:before, 100 | .octicon-git-branch-delete:before, 101 | .octicon-git-branch:before { content: '\f020'} /*  */ 102 | .octicon-git-commit:before { content: '\f01f'} /*  */ 103 | .octicon-git-compare:before { content: '\f0ac'} /*  */ 104 | .octicon-git-merge:before { content: '\f023'} /*  */ 105 | .octicon-git-pull-request-abandoned:before, 106 | .octicon-git-pull-request:before { content: '\f009'} /*  */ 107 | .octicon-globe:before { content: '\f0b6'} /*  */ 108 | .octicon-graph:before { content: '\f043'} /*  */ 109 | .octicon-heart:before { content: '\2665'} /* ♥ */ 110 | .octicon-history:before { content: '\f07e'} /*  */ 111 | .octicon-home:before { content: '\f08d'} /*  */ 112 | .octicon-horizontal-rule:before { content: '\f070'} /*  */ 113 | .octicon-hubot:before { content: '\f09d'} /*  */ 114 | .octicon-inbox:before { content: '\f0cf'} /*  */ 115 | .octicon-info:before { content: '\f059'} /*  */ 116 | .octicon-issue-closed:before { content: '\f028'} /*  */ 117 | .octicon-issue-opened:before { content: '\f026'} /*  */ 118 | .octicon-issue-reopened:before { content: '\f027'} /*  */ 119 | .octicon-italic:before { content: '\f0e4'} /*  */ 120 | .octicon-jersey:before { content: '\f019'} /*  */ 121 | .octicon-key:before { content: '\f049'} /*  */ 122 | .octicon-keyboard:before { content: '\f00d'} /*  */ 123 | .octicon-law:before { content: '\f0d8'} /*  */ 124 | .octicon-light-bulb:before { content: '\f000'} /*  */ 125 | .octicon-link:before { content: '\f05c'} /*  */ 126 | .octicon-link-external:before { content: '\f07f'} /*  */ 127 | .octicon-list-ordered:before { content: '\f062'} /*  */ 128 | .octicon-list-unordered:before { content: '\f061'} /*  */ 129 | .octicon-location:before { content: '\f060'} /*  */ 130 | .octicon-gist-private:before, 131 | .octicon-mirror-private:before, 132 | .octicon-git-fork-private:before, 133 | .octicon-lock:before { content: '\f06a'} /*  */ 134 | .octicon-logo-gist:before { content: '\f0ad'} /*  */ 135 | .octicon-logo-github:before { content: '\f092'} /*  */ 136 | .octicon-mail:before { content: '\f03b'} /*  */ 137 | .octicon-mail-read:before { content: '\f03c'} /*  */ 138 | .octicon-mail-reply:before { content: '\f051'} /*  */ 139 | .octicon-mark-github:before { content: '\f00a'} /*  */ 140 | .octicon-markdown:before { content: '\f0c9'} /*  */ 141 | .octicon-megaphone:before { content: '\f077'} /*  */ 142 | .octicon-mention:before { content: '\f0be'} /*  */ 143 | .octicon-milestone:before { content: '\f075'} /*  */ 144 | .octicon-mirror-public:before, 145 | .octicon-mirror:before { content: '\f024'} /*  */ 146 | .octicon-mortar-board:before { content: '\f0d7'} /*  */ 147 | .octicon-mute:before { content: '\f080'} /*  */ 148 | .octicon-no-newline:before { content: '\f09c'} /*  */ 149 | .octicon-octoface:before { content: '\f008'} /*  */ 150 | .octicon-organization:before { content: '\f037'} /*  */ 151 | .octicon-package:before { content: '\f0c4'} /*  */ 152 | .octicon-paintcan:before { content: '\f0d1'} /*  */ 153 | .octicon-pencil:before { content: '\f058'} /*  */ 154 | .octicon-person-add:before, 155 | .octicon-person-follow:before, 156 | .octicon-person:before { content: '\f018'} /*  */ 157 | .octicon-pin:before { content: '\f041'} /*  */ 158 | .octicon-plug:before { content: '\f0d4'} /*  */ 159 | .octicon-repo-create:before, 160 | .octicon-gist-new:before, 161 | .octicon-file-directory-create:before, 162 | .octicon-file-add:before, 163 | .octicon-plus:before { content: '\f05d'} /*  */ 164 | .octicon-primitive-dot:before { content: '\f052'} /*  */ 165 | .octicon-primitive-square:before { content: '\f053'} /*  */ 166 | .octicon-pulse:before { content: '\f085'} /*  */ 167 | .octicon-question:before { content: '\f02c'} /*  */ 168 | .octicon-quote:before { content: '\f063'} /*  */ 169 | .octicon-radio-tower:before { content: '\f030'} /*  */ 170 | .octicon-repo-delete:before, 171 | .octicon-repo:before { content: '\f001'} /*  */ 172 | .octicon-repo-clone:before { content: '\f04c'} /*  */ 173 | .octicon-repo-force-push:before { content: '\f04a'} /*  */ 174 | .octicon-gist-fork:before, 175 | .octicon-repo-forked:before { content: '\f002'} /*  */ 176 | .octicon-repo-pull:before { content: '\f006'} /*  */ 177 | .octicon-repo-push:before { content: '\f005'} /*  */ 178 | .octicon-rocket:before { content: '\f033'} /*  */ 179 | .octicon-rss:before { content: '\f034'} /*  */ 180 | .octicon-ruby:before { content: '\f047'} /*  */ 181 | .octicon-search-save:before, 182 | .octicon-search:before { content: '\f02e'} /*  */ 183 | .octicon-server:before { content: '\f097'} /*  */ 184 | .octicon-settings:before { content: '\f07c'} /*  */ 185 | .octicon-shield:before { content: '\f0e1'} /*  */ 186 | .octicon-log-in:before, 187 | .octicon-sign-in:before { content: '\f036'} /*  */ 188 | .octicon-log-out:before, 189 | .octicon-sign-out:before { content: '\f032'} /*  */ 190 | .octicon-smiley:before { content: '\f0e7'} /*  */ 191 | .octicon-squirrel:before { content: '\f0b2'} /*  */ 192 | .octicon-star-add:before, 193 | .octicon-star-delete:before, 194 | .octicon-star:before { content: '\f02a'} /*  */ 195 | .octicon-stop:before { content: '\f08f'} /*  */ 196 | .octicon-repo-sync:before, 197 | .octicon-sync:before { content: '\f087'} /*  */ 198 | .octicon-tag-remove:before, 199 | .octicon-tag-add:before, 200 | .octicon-tag:before { content: '\f015'} /*  */ 201 | .octicon-tasklist:before { content: '\f0e5'} /*  */ 202 | .octicon-telescope:before { content: '\f088'} /*  */ 203 | .octicon-terminal:before { content: '\f0c8'} /*  */ 204 | .octicon-text-size:before { content: '\f0e3'} /*  */ 205 | .octicon-three-bars:before { content: '\f05e'} /*  */ 206 | .octicon-thumbsdown:before { content: '\f0db'} /*  */ 207 | .octicon-thumbsup:before { content: '\f0da'} /*  */ 208 | .octicon-tools:before { content: '\f031'} /*  */ 209 | .octicon-trashcan:before { content: '\f0d0'} /*  */ 210 | .octicon-triangle-down:before { content: '\f05b'} /*  */ 211 | .octicon-triangle-left:before { content: '\f044'} /*  */ 212 | .octicon-triangle-right:before { content: '\f05a'} /*  */ 213 | .octicon-triangle-up:before { content: '\f0aa'} /*  */ 214 | .octicon-unfold:before { content: '\f039'} /*  */ 215 | .octicon-unmute:before { content: '\f0ba'} /*  */ 216 | .octicon-unverified:before { content: '\f0e8'} /*  */ 217 | .octicon-verified:before { content: '\f0e6'} /*  */ 218 | .octicon-versions:before { content: '\f064'} /*  */ 219 | .octicon-watch:before { content: '\f0e0'} /*  */ 220 | .octicon-remove-close:before, 221 | .octicon-x:before { content: '\f081'} /*  */ 222 | .octicon-zap:before { content: '\26A1'} /* ⚡ */ 223 | -------------------------------------------------------------------------------- /HTML/icons/android-chrome-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/android-chrome-144x144.png -------------------------------------------------------------------------------- /HTML/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /HTML/icons/android-chrome-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/android-chrome-36x36.png -------------------------------------------------------------------------------- /HTML/icons/android-chrome-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/android-chrome-48x48.png -------------------------------------------------------------------------------- /HTML/icons/android-chrome-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/android-chrome-72x72.png -------------------------------------------------------------------------------- /HTML/icons/android-chrome-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/android-chrome-96x96.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /HTML/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /HTML/icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | #da532c 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /HTML/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/favicon-16x16.png -------------------------------------------------------------------------------- /HTML/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/favicon-32x32.png -------------------------------------------------------------------------------- /HTML/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/favicon-96x96.png -------------------------------------------------------------------------------- /HTML/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/favicon.ico -------------------------------------------------------------------------------- /HTML/icons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GitMap", 3 | "icons": [ 4 | { 5 | "src": "icons\/android-chrome-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": 0.75 9 | }, 10 | { 11 | "src": "icons\/android-chrome-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": 1 15 | }, 16 | { 17 | "src": "icons\/android-chrome-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": 1.5 21 | }, 22 | { 23 | "src": "icons\/android-chrome-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": 2 27 | }, 28 | { 29 | "src": "icons\/android-chrome-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": 3 33 | }, 34 | { 35 | "src": "icons\/android-chrome-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": 4 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /HTML/icons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/mstile-144x144.png -------------------------------------------------------------------------------- /HTML/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/mstile-150x150.png -------------------------------------------------------------------------------- /HTML/icons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/mstile-310x150.png -------------------------------------------------------------------------------- /HTML/icons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/mstile-310x310.png -------------------------------------------------------------------------------- /HTML/icons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/icons/mstile-70x70.png -------------------------------------------------------------------------------- /HTML/img/GitHub-Mark-64px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/img/GitHub-Mark-64px.png -------------------------------------------------------------------------------- /HTML/img/GitHub-Mark-Light-64px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/HTML/img/GitHub-Mark-Light-64px.png -------------------------------------------------------------------------------- /HTML/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | GitHub Repository Map 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 55 | 56 | 59 | 60 |
61 |
62 |
63 |
64 |
65 |
66 |
Loading data...
67 | 68 |
69 |
70 |
71 |
72 |
73 | 74 |
75 |
76 | 77 | 78 | 79 |
80 |
81 |
82 | 83 |
84 |
85 |
86 |
87 | 88 | 89 | 92 |
93 |
94 | 95 | 96 |
97 |
98 |
99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | About 110 |
111 |
112 |
113 |
114 |
115 | 118 | 137 |
138 |
139 |
140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /HTML/js/vendor/d3-queue.v2.min.js: -------------------------------------------------------------------------------- 1 | !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.d3_queue={})}(this,function(n){"use strict";function t(){}function r(n){function r(){if(!l)try{o()}catch(n){a[w+s-1]&&i(n)}}function o(){for(;l=h&&n>s;){var t=w+s,r=a[t],o=r.length-1,u=r[o];r[o]=f(t),--h,++s,r=u.apply(null,r),a[t]&&(a[t]=r||e)}}function f(n){return function(t,o){a[n]&&(--s,++w,a[n]=null,null==d&&(null!=t?i(t):(p[n]=o,h?r():s||y(d,p))))}}function i(n){var t,r=a.length;for(d=n,p=void 0,h=NaN;--r>=0;)if((t=a[r])&&(a[r]=null,t.abort))try{t.abort()}catch(n){}s=NaN,y(d,p)}if(!(n>=1))throw new Error;var c,l,a=[],p=[],h=0,s=0,w=0,d=null,y=t;return c={defer:function(n){if("function"!=typeof n||y!==t)throw new Error;if(null!=d)return c;var o=u.call(arguments,1);return o.push(n),++h,a.push(o),r(),c},abort:function(){return null==d&&i(new Error("abort")),c},await:function(n){if("function"!=typeof n||y!==t)throw new Error;return y=function(t,r){n.apply(null,[t].concat(r))},s||y(d,p),c},awaitAll:function(n){if("function"!=typeof n||y!==t)throw new Error;return y=n,s||y(d,p),c}}}function o(n){return r(arguments.length?+n:1/0)}var u=[].slice,e={},f="2.0.2";n.version=f,n.queue=o}); -------------------------------------------------------------------------------- /HTML/js/vendor/modernizr-2.8.3.min.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.8.3 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f 3 | 4 | 5 | 6 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 190 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## About This App 2 | 3 | This site is an attempt to create a visualization of the relationships between the ~10,000 most-starred (as of late February 2016) public repositories on GitHub. These repositories were clustered into an ecosystem hierarchy - each circle represents a cluster, and you can expand each cluster by clicking or tapping it. On the desktop, hovering over a circle shows some of the contents and clicking zooms in. On mobile, tapping once shows the contents above the map and tapping again (or holding) zooms in. Once you've zoomed in, each white dot corresponds to a single repository. 4 | 5 | To look up a specific project, enter the name of the repo in the search box, or click on its white dot after you've zoomed in far enough. Once you've selected one, its location in the tree will be outlined in bright yellow, and related repositories will be outlined in purple on the map and listed in the "Repos related to..." section. The white dot representing selected repo will turn yellow, and the dots for related repos will turn purple. Clicking the yellow (selected) dot again, or clicking the X in the select dropdown will clear the selection. Clicking on a repo in the "Repos related to..." section will select that repo. 6 | 7 | ## Algorithm and Implementation Details 8 | 9 | The hierarchy is created by iteratively applying [affinity propagation](http://www.psi.toronto.edu/index.php?q=affinity%20propagation) to the repositories, using a PageRank-inspired formula to calculate the strength of the similarities between projects. In a nutshell, repo A has an affinity for repo B if repo A's contributors also contributed to, or starred, repo B. These affinities are not symmetric - repo A's affinity for repo B is not equal to repo B's affinity for repo A. Two repositories are considered related if repo A's affinity for repo B, and repo B's affinity for repo A, are both above a threshold. More details [here](https://oracleofnj.github.io/gitmap/algorithm_details.html), or you can [read the code](https://github.com/oracleofnj/gitmap). 10 | 11 | I downloaded the data and performed the clustering analysis in python, using [PyGithub](https://github.com/PyGithub/PyGithub) to access the GitHub API. The site itself is mostly written using [D3](https://github.com/mbostock/d3), with the main interface initially coming from [this block](https://bl.ocks.org/mbostock/7607535). 12 | 13 | The results of this algorithm are only one possible way of visualizing the data, and clearly there isn't a strict ecosystem hierarchy (should [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) be classified with React or with Bootstrap?). Almost all of the repos here are related to projects in different clusters, and there are a lot of ways to try and improve the algorithm. There are 10,000 projects included on this map, so I'm sure there are many that could be put in a better place - if you devise a better algorithm, feel free to submit a pull request! But overall the results seem fairly intuitive to me, and hopefully you can use this site to learn about useful projects that you hadn't known about before and have fun looking up your favorite projects and exploring the tech stacks you work with. 14 | 15 | I'm not affiliated with GitHub in any way. 16 | -------------------------------------------------------------------------------- /download_stats.py: -------------------------------------------------------------------------------- 1 | # Uses PyGithub by Vincent Jacques @jacquev6 2 | from github import * 3 | from collections import OrderedDict 4 | import datetime 5 | import time 6 | import itertools as it 7 | import math 8 | import json 9 | import gzip 10 | 11 | def load_repos(g, data_path): 12 | try: 13 | with gzip.open(data_path + "/cached_repos.json.gz", "r") as cached_repos: 14 | repos = json.loads(cached_repos.read()) 15 | return OrderedDict(sorted(repos.iteritems(), key=lambda i: -i[1]["stargazers_count"])) 16 | except IOError: 17 | # No cached data, pre-populate with the first 10 repos 18 | return OrderedDict([(repo.owner.login + "/" + repo.name, 19 | {"repoObj": repo, 20 | "id": repo.id, 21 | "stargazers_count": repo.stargazers_count, 22 | "crawled": False}) \ 23 | for repo in g.search_repositories("stars:>1", sort="stars", order="desc")[:10]]) 24 | else: 25 | raise 26 | 27 | def load_users(g, data_path): 28 | try: 29 | with gzip.open(data_path + "/cached_users.json.gz", "r") as cached_users: 30 | users = json.loads(cached_users.read()) 31 | return OrderedDict(sorted(users.iteritems(), key=lambda i: -i[1]["starweight"])) 32 | except IOError: 33 | # No cached data, will just get crawled 34 | return OrderedDict() 35 | else: 36 | raise 37 | 38 | def save_repos(repo_dict, data_path): 39 | repos_as_json = json.dumps({key: {subkey: subval for (subkey, subval) in val.items() if subkey != "repoObj"} for (key, val) in repo_dict.items()}) 40 | with gzip.open(data_path + "/cached_repos.json.gz", "w") as cached_repos: 41 | cached_repos.write(repos_as_json) 42 | 43 | def save_users(user_dict, data_path): 44 | users_as_json = json.dumps({key: {subkey: subval for (subkey, subval) in val.items() if subkey != "userObj"} for (key, val) in user_dict.items()}) 45 | with gzip.open(data_path + "/cached_users.json.gz", "w") as cached_users: 46 | cached_users.write(users_as_json) 47 | 48 | def get_contributors(repo): 49 | try: 50 | return [(contributor, contributor.login, contributor.contributions, contributor.id) \ 51 | for contributor in repo.get_contributors()], True 52 | except GithubException as e: 53 | if e.data[u'message'] == u'The history or contributor list is too large to list contributors for this repository via the API.': 54 | # Linux!! 55 | return [(repo.owner, repo.owner.login, 100, repo.owner.id)], True 56 | elif e.data[u'message'] == u'Not Found': 57 | return [], False 58 | elif e.data[u'message'] == u'Repository access blocked': 59 | print "Github Exception: ", e.data[u'block'] 60 | return [], False 61 | else: 62 | raise 63 | 64 | def get_stars(user): 65 | # try: 66 | return [repo for repo in user.get_starred()], True 67 | # except GithubException as e: 68 | # print "Github Exceptione.data 69 | # return [], False 70 | 71 | def get_next(crawlables): 72 | next_crawlable = next(it.dropwhile(lambda x: x[1]["crawled"], crawlables.items())) 73 | return next_crawlable[0], next_crawlable[1] 74 | 75 | def process_contributors(next_repo_key, contributors, to_crawl): 76 | to_crawl["repos"][next_repo_key]["contributors"] = dict() 77 | total_contribs = sum([math.log1p(cTuple[2]) for cTuple in contributors]) 78 | to_crawl["repos"][next_repo_key]["total_log1p_contribs"] = total_contribs 79 | total_starweight = to_crawl["repos"][next_repo_key]["stargazers_count"] 80 | for cTuple in contributors: 81 | to_crawl["repos"][next_repo_key]["contributors"][cTuple[1]] = \ 82 | {"contributions": cTuple[2], 83 | "log1p_contributions": math.log1p(cTuple[2]), 84 | "id": cTuple[3]} 85 | if cTuple[1] in to_crawl["users"]: 86 | # Add their proportional share of star count 87 | to_crawl["users"][cTuple[1]]["starweight"] += \ 88 | total_starweight * math.log1p(cTuple[2]) / total_contribs 89 | else: 90 | to_crawl["users"][cTuple[1]] = \ 91 | {"id": cTuple[3], 92 | "userObj": cTuple[0], 93 | "starweight": total_starweight * math.log1p(cTuple[2]) / total_contribs, 94 | "crawled": False} 95 | # Reorder "users" by follower count descending 96 | to_crawl["users"] = OrderedDict(sorted(to_crawl["users"].iteritems(), key=lambda i: -i[1]["starweight"])) 97 | 98 | def process_stars(next_user_key, stars, to_crawl): 99 | to_crawl["users"][next_user_key]["stars"] = dict() 100 | for star in stars: 101 | repo_fullname = star.owner.login + "/" + star.name 102 | to_crawl["users"][next_user_key]["stars"][repo_fullname] = \ 103 | {"id": star.id} 104 | if repo_fullname in to_crawl["repos"]: 105 | pass # for now 106 | else: 107 | to_crawl["repos"][repo_fullname] = \ 108 | {"repoObj": star, 109 | "id": star.id, 110 | "stargazers_count": star.stargazers_count, 111 | "crawled": False} 112 | # Reorder "repos" by star count descending 113 | to_crawl["repos"] = OrderedDict(sorted(to_crawl["repos"].iteritems(), key=lambda i: -i[1]["stargazers_count"])) 114 | 115 | def mark_repo_complete(to_crawl, next_repo_key, success): 116 | to_crawl["repos"][next_repo_key]["crawled"] = True 117 | if not success: 118 | to_crawl["repos"][next_repo_key]["failed"] = True 119 | 120 | def mark_user_complete(to_crawl, next_user_key, success): 121 | to_crawl["users"][next_user_key]["crawled"] = True 122 | if not success: 123 | to_crawl["users"][next_user_key]["failed"] = True 124 | 125 | def crawl_github(git_uname, git_pw, data_path): 126 | while True: 127 | g = Github(login_or_token=git_uname, password=git_pw, per_page=100) 128 | to_crawl = {"repos": load_repos(g, data_path), "users": load_users(g, data_path)} 129 | i = 0 130 | print "Logged in as %s" % g.get_user().name ## temporary hack to reset rate limiting 131 | while g.rate_limiting[0] > 250: 132 | try: 133 | print "API calls remaining before %s: %d" % ( 134 | datetime.datetime.fromtimestamp(g.rate_limiting_resettime).strftime('%Y-%m-%d %H:%M:%S'), 135 | g.rate_limiting[0]) 136 | next_repo_key, next_repo_val = get_next(to_crawl["repos"]) 137 | print "Processing repo: %s (%d stars)" % (next_repo_key, next_repo_val["stargazers_count"]) 138 | if "repoObj" not in next_repo_val: # cached from disk 139 | next_repo_val["repoObj"] = g.get_repo(next_repo_key) 140 | contributors, success = get_contributors(next_repo_val["repoObj"]) 141 | if success: 142 | process_contributors(next_repo_key, contributors, to_crawl) 143 | mark_repo_complete(to_crawl, next_repo_key, success) 144 | 145 | next_user_key, next_user_val = get_next(to_crawl["users"]) 146 | print "Processing user: %s (%f starweight)" % (next_user_key, next_user_val["starweight"]) 147 | if "userObj" not in next_user_val: # cached from disk 148 | next_user_val["userObj"] = g.get_user(next_user_key) 149 | stars, success = get_stars(next_user_val["userObj"]) 150 | if success: 151 | process_stars(next_user_key, stars, to_crawl) 152 | mark_user_complete(to_crawl, next_user_key, success) 153 | 154 | # save progress every 25 users/repos 155 | i = i + 1 156 | if i % 25 == 0: 157 | print "Processed %d times, saving..." % i 158 | save_repos(to_crawl["repos"], data_path) 159 | save_users(to_crawl["users"], data_path) 160 | except Exception as e: 161 | print e 162 | print "Going to sleep for an hour and a half..." 163 | time.sleep(90*60) 164 | print "Breaking out of the inner loop and resuming from saved..." 165 | break 166 | 167 | print g.rate_limiting 168 | save_repos(to_crawl["repos"], data_path) 169 | save_users(to_crawl["users"], data_path) 170 | return to_crawl 171 | 172 | if __name__ == "__main__": 173 | username = raw_input("GitHub username: ") 174 | password = raw_input("GitHub password: ") 175 | crawl_github(username, password, "./downloaded_data") 176 | -------------------------------------------------------------------------------- /process_stats.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | import itertools as it 3 | from collections import OrderedDict 4 | import json 5 | import gzip 6 | import math 7 | from operator import itemgetter 8 | 9 | bots = set(["gitter-badger", "ReadmeCritic", "invalid-email-address", "bitdeli-chef", 10 | "greenkeeperio-bot"]) 11 | 12 | def load_repos(data_path): 13 | with gzip.open(data_path + "/cached_repos.json.gz", "r") as cached_repos: 14 | repos = json.loads(cached_repos.read()) 15 | return OrderedDict(sorted(repos.iteritems(), key=lambda i: -i[1]["stargazers_count"])) 16 | 17 | def load_users(data_path): 18 | with gzip.open(data_path + "/cached_users.json.gz", "r") as cached_users: 19 | users = json.loads(cached_users.read()) 20 | return OrderedDict(sorted(users.iteritems(), key=lambda i: -i[1]["starweight"])) 21 | 22 | def get_crawled(crawlable): 23 | return {k: v for (k, v) in crawlable.iteritems() if v["crawled"] and "failed" not in v} 24 | 25 | def is_bot(user): 26 | return user in bots 27 | 28 | def calc_graph(repos, users): 29 | crawled_repos, crawled_users = get_crawled(repos), get_crawled(users) 30 | 31 | links = {} 32 | contrib_counts = {} 33 | 34 | # Create links from repo to contributors 35 | for (repo, repoval) in crawled_repos.iteritems(): 36 | if "contributors" in repoval and len(repoval["contributors"]) > 0: 37 | total_log1p_contribs = repoval["total_log1p_contribs"] 38 | for (contributor, contribval) in repoval["contributors"].iteritems(): 39 | if not is_bot(contributor): 40 | if contributor in links: 41 | links[contributor][1][repo] = contribval["log1p_contributions"] / total_log1p_contribs 42 | else: 43 | links[contributor] = ("user", {repo: contribval["log1p_contributions"] / total_log1p_contribs}) 44 | 45 | if contributor in contrib_counts: 46 | contrib_counts[contributor] = contrib_counts[contributor] + 1 47 | else: 48 | contrib_counts[contributor] = 1 49 | 50 | # Create links from contributors to repo 51 | for (repo, repoval) in crawled_repos.iteritems(): 52 | if "contributors" in repoval and len(repoval["contributors"]) > 0: 53 | links[repo] = ("repo", {contributor: 1.0/contrib_counts[contributor] \ 54 | for contributor in repoval["contributors"].keys()\ 55 | if not is_bot(contributor)}, {}) 56 | 57 | # Create links from starrers to repo 58 | user_starcounts = {linker: len([s for s in crawled_users[linker]["stars"].keys() if s in links]) for linker in crawled_users.keys()} 59 | for (user, userval) in crawled_users.iteritems(): 60 | if not is_bot(user): 61 | if "stars" in userval: 62 | starcount = len([s for s in userval["stars"].keys() if s in crawled_repos]) 63 | for (repo, repoval) in userval["stars"].iteritems(): 64 | if repo in links: 65 | links[repo][2][user] = 1.0 / starcount 66 | 67 | return links 68 | 69 | def calc_gitrank_graph(links, iters=25, damping=0.85, contrib_prob=0.33333): 70 | num_nodes = len(links) 71 | users = [key for (key, val) in links.iteritems() if val[0] == "user"] 72 | repos = [key for (key, val) in links.iteritems() if val[0] == "repo"] 73 | ranks = {key: 1.0/num_nodes for key in links.keys()} 74 | 75 | for i in xrange(iters): 76 | print "round {0}".format(i+1) 77 | newranks = {} 78 | for user in users: 79 | # only get to a user from a repo 80 | newranks[user] = (1.0 - damping) / num_nodes \ 81 | + damping * sum([ranks[repo]*weight for (repo, weight) in links[user][1].iteritems()]) 82 | 83 | for repo in repos: 84 | # two sums 85 | newranks[repo] = (1.0 - damping) / num_nodes \ 86 | + damping * contrib_prob * sum([ranks[user]*weight for (user, weight) in links[repo][1].iteritems()]) \ 87 | + damping * (1 - contrib_prob) * sum([ranks[user]*weight for (user, weight) in links[repo][2].iteritems()]) 88 | 89 | ranks = newranks 90 | 91 | return OrderedDict(sorted([(repo, ranks[repo]) for repo in repos], key=lambda x: -x[1])), \ 92 | OrderedDict(sorted([(user, 93 | (ranks[user], 94 | OrderedDict(sorted([(repo, damping * ranks[repo] * weight) \ 95 | for (repo, weight) in links[user][1].iteritems()], key=lambda x: -x[1])))) \ 96 | for user in users], key=lambda x: -x[1][0])) 97 | 98 | def repo_to_repo_links(links, contrib_prob=0.33333): 99 | repos = [key for (key, val) in links.iteritems() if val[0] == "repo"] 100 | repo_to_repo = {linked_to: {linker: 0 for linker in repos} for linked_to in repos} 101 | ig1 = itemgetter(1) 102 | for linked_to in repos: 103 | for (user, userweight) in links[linked_to][1].iteritems(): 104 | for (linker, linkerweight) in links[user][1].iteritems(): 105 | repo_to_repo[linked_to][linker] = repo_to_repo[linked_to][linker] \ 106 | + contrib_prob * linkerweight * userweight 107 | for (user, userweight) in links[linked_to][2].iteritems(): 108 | for (linker, linkerweight) in links[user][1].iteritems(): 109 | repo_to_repo[linked_to][linker] = repo_to_repo[linked_to][linker] \ 110 | + (1-contrib_prob) * linkerweight * userweight 111 | repo_to_repo[linked_to] = OrderedDict([x for x in sorted(repo_to_repo[linked_to].iteritems(), key=ig1, reverse=True) if x[1] >= 0.001]) 112 | 113 | linkedrepos = sorted([(r1, r2, repo_to_repo[r1][r2], repo_to_repo[r2][r1]) \ 114 | for r1 in repos for r2 in repos \ 115 | if r1 in repo_to_repo[r2] and r2 in repo_to_repo[r1] and r1 < r2], 116 | key = lambda x: -x[2]-x[3]) 117 | 118 | return repo_to_repo, linkedrepos 119 | 120 | def calc_similarities(r2r, repos, initial_pref=0, num_iters=10, damping=0.95): 121 | ig1 = itemgetter(1) 122 | selfsims = sorted([(repo, r2r[repo][repo]) for repo in r2r.keys()], key=ig1, reverse=True) 123 | selfsims_dict = {repo: selfsim for (repo, selfsim) in selfsims} 124 | starred_repos = sorted([(repo, repos[repo]["stargazers_count"], selfsims_dict[repo]) for repo in selfsims_dict.keys()], key=ig1, reverse=True) 125 | ordered_repos = [repo for (repo, sg, ss) in starred_repos] 126 | starcounts_dict = {repo: sg for (repo, sg, ss) in starred_repos} 127 | 128 | sim = {} 129 | for (exemplar, points) in r2r.iteritems(): 130 | for (point, weight) in points.iteritems(): 131 | if point not in sim: 132 | sim[point] = {} 133 | sim[point][exemplar] = weight if point != exemplar else initial_pref 134 | ### math.log(starcounts_dict[exemplar]/100) * weight if point != exemplar else initial_pref 135 | 136 | avail = {exemplar: {point: 0 \ 137 | for point in r2r[exemplar].keys()} for exemplar in ordered_repos} 138 | 139 | oldresp, oldavail, damp = None, None, 1 140 | for i in xrange(num_iters): 141 | # todo: fix damping 142 | resp = {} 143 | for point in sim.keys(): 144 | avail_plus_sim = [(cand, avail[cand][point] + sim[point][cand]) \ 145 | for cand in sim[point].keys()] 146 | best, second_best = (None, 0), (None, 0) 147 | for (cand, a_plus_s) in avail_plus_sim: 148 | if a_plus_s > best[1]: 149 | second_best = best 150 | best = (cand, a_plus_s) 151 | elif a_plus_s > second_best[1]: 152 | second_best = (cand, a_plus_s) 153 | else: 154 | pass 155 | 156 | resp[point] = {exemplar: \ 157 | (oldresp[point][exemplar]*(1-damp) if oldresp != None else 0) + \ 158 | (damp if oldresp != None else 1) * \ 159 | (sim[point][exemplar] - \ 160 | (best[1] if best[0] != exemplar else second_best[1]))\ 161 | for exemplar in sim[point].keys()} 162 | 163 | avail = {} 164 | for exemplar in ordered_repos: 165 | positive_resps = sum([max(0, resp[otherpoint][exemplar]) for otherpoint in r2r[exemplar].keys()]) 166 | avail[exemplar] = {point: \ 167 | (oldavail[exemplar][point]*(1-damp) if oldavail != None else 0) + \ 168 | (damp if oldavail != None else 1) * \ 169 | (min(0, resp[exemplar][exemplar] + positive_resps - max(0, resp[point][exemplar]) - max(0, resp[exemplar][exemplar])) \ 170 | if point != exemplar else \ 171 | (positive_resps - max(0, resp[exemplar][exemplar]))) \ 172 | for point in r2r[exemplar].keys()} 173 | 174 | oldresp, oldavail, damp = resp, avail, damp * damping 175 | 176 | return resp, avail 177 | 178 | def gen_exemplars(resp, avail): 179 | exemplars = {point: max(resp[point].keys(), key=lambda exemplar: resp[point][exemplar] + avail[exemplar][point]) \ 180 | for point in resp.keys()} 181 | children = {} 182 | for (point, exemplar) in exemplars.items(): 183 | if exemplar not in children: 184 | children[exemplar] = [] 185 | children[exemplar].append(point) 186 | 187 | return exemplars, children 188 | 189 | def collapseTreeNode(node): 190 | if "children" in node: 191 | for child in node["children"]: 192 | collapseTreeNode(child) 193 | if len(node["children"]) == 1: 194 | if node["name"] != node["children"][0]["name"]: 195 | raise ValueError("Expected " + node["name"] + " to equal " + node["children"][0]["name"]) 196 | elif "children" not in node["children"][0]: 197 | del node["children"] 198 | else: 199 | node["children"] = node["children"][0]["children"] 200 | 201 | def recluster(repos, prev_r2r, prev_ch, num_iters, damping=0.95): 202 | prev_exemplars = [x for x in prev_ch if x in prev_ch[x]] 203 | next_r2r = {r1: {r2: prev_r2r[r1][r2] for r2 in prev_r2r[r1].keys() if r2 in prev_exemplars} for r1 in prev_r2r.keys() if r1 in prev_exemplars} 204 | resp, avail = calc_similarities(next_r2r, repos, 0, num_iters, damping) 205 | next_ex, next_ch = gen_exemplars(resp, avail) 206 | return next_r2r, next_ch 207 | 208 | if __name__ == "__main__": 209 | data_path = "./downloaded_data" 210 | repos, users = load_repos(data_path), load_users(data_path) 211 | links = calc_graph(repos, users) 212 | r2r, linkedrepos = repo_to_repo_links(links) 213 | resp, avail = calc_similarities(r2r, repos, 0, 20) 214 | ex, ch = gen_exemplars(resp, avail) 215 | 216 | r2r_2, ch2 = recluster(repos, r2r, ch, 30, 0.97) 217 | r2r_3, ch3 = recluster(repos, r2r_2, ch2, 50, 0.99) 218 | r2r_4, ch4 = recluster(repos, r2r_3, ch3, 100, 0.99) 219 | 220 | d3_gitmap = {"name": "github", "children": [ \ 221 | {"name": root, "children": [ \ 222 | {"name": greatgrandpa, "children": [ \ 223 | {"name": grandpa, "children": [ \ 224 | {"name": dad, "children": \ 225 | [{"name": child} \ 226 | for child in sorted(ch[dad])]} \ 227 | for dad in sorted(ch2[grandpa])]} \ 228 | for grandpa in sorted(ch3[greatgrandpa])]} \ 229 | for greatgrandpa in sorted(ch4[root])]} \ 230 | for root in sorted(ch4.keys())]} 231 | collapseTreeNode(d3_gitmap) 232 | full_gitmap = {"tree": d3_gitmap, "links": [(r1, r2) for (r1, r2, r3, r4) in linkedrepos]} 233 | with open("gitmap.json", "w") as f: 234 | f.write(json.dumps(full_gitmap)) #, indent=2)) 235 | -------------------------------------------------------------------------------- /starcounts.json.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oracleofnj/gitmap/b73ff5d68df70bf757ea96b6411b2acfad4ea487/starcounts.json.gz --------------------------------------------------------------------------------