diff options
Diffstat (limited to 'sitestatic')
-rw-r--r-- | sitestatic/1984.png | bin | 0 -> 32007 bytes | |||
-rw-r--r-- | sitestatic/airvm_button.png | bin | 0 -> 4931 bytes | |||
-rw-r--r-- | sitestatic/archnavbar/archnavbar.css | 34 | ||||
-rw-r--r-- | sitestatic/archweb.css | 1113 | ||||
-rw-r--r-- | sitestatic/archweb.js | 577 | ||||
-rw-r--r-- | sitestatic/ceata-parabola.png | bin | 0 -> 7056 bytes | |||
-rw-r--r-- | sitestatic/click_and_pledge.png | bin | 0 -> 2284 bytes | |||
-rw-r--r-- | sitestatic/download.png | bin | 0 -> 1155 bytes | |||
-rw-r--r-- | sitestatic/flags/fam.css | 270 | ||||
-rw-r--r-- | sitestatic/flags/fam.png | bin | 0 -> 76543 bytes | |||
-rw-r--r-- | sitestatic/gandi.png | bin | 0 -> 14157 bytes | |||
-rw-r--r-- | sitestatic/kartenzia_button.png | bin | 0 -> 16920 bytes | |||
-rw-r--r-- | sitestatic/magnet.png | bin | 0 -> 2382 bytes | |||
-rw-r--r-- | sitestatic/new.png | bin | 0 -> 378 bytes | |||
-rw-r--r-- | sitestatic/robofun.jpg | bin | 0 -> 17148 bytes | |||
-rw-r--r-- | sitestatic/vector_tux.png | bin | 0 -> 165926 bytes | |||
-rw-r--r-- | sitestatic/vnet_button.png | bin | 0 -> 4908 bytes |
17 files changed, 1994 insertions, 0 deletions
diff --git a/sitestatic/1984.png b/sitestatic/1984.png Binary files differnew file mode 100644 index 00000000..fbca6924 --- /dev/null +++ b/sitestatic/1984.png diff --git a/sitestatic/airvm_button.png b/sitestatic/airvm_button.png Binary files differnew file mode 100644 index 00000000..0acadc9c --- /dev/null +++ b/sitestatic/airvm_button.png diff --git a/sitestatic/archnavbar/archnavbar.css b/sitestatic/archnavbar/archnavbar.css new file mode 100644 index 00000000..4fcd6cc6 --- /dev/null +++ b/sitestatic/archnavbar/archnavbar.css @@ -0,0 +1,34 @@ +/* + * ARCH GLOBAL NAVBAR + * We're forcing all generic selectors with !important + * to help prevent other stylesheets from interfering. + */ + +/* container for the entire bar */ +#archnavbar { height: 40px !important; padding: 10px 15px !important; background: #000 !important; border-bottom: 5px #787DAB solid !important; } +#archnavbarlogo { float: left !important; margin: -5px 0 0 0 !important; padding: 0 !important; height: 50px !important; width: 324px !important; background: url('archlogo.png') no-repeat !important; } + +/* move the heading/paragraph text offscreen */ +#archnavbarlogo p { margin: 0 !important; padding: 0 !important; text-indent: -9999px !important; } +#archnavbarlogo h1 { margin: 0 !important; padding: 0 !important; text-indent: -9999px !important; } + +/* make the link the same size as the logo */ +#archnavbarlogo a { display: block !important; height: 50px !important; width: 324px !important; } + +/* display the list inline, float it to the right and style it */ +#archnavbar ul { display: inline !important; float: right !important; list-style: none !important; margin: 0 !important; padding: 0 !important; } +#archnavbar ul li { float: left !important; font-size: 14px !important; font-family: sans-serif !important; line-height: 45px !important; padding-right: 15px !important; padding-left: 15px !important; } + +/* style the links */ +#archnavbar ul li a { color: #999; font-weight: bold !important; text-decoration: none !important; } +#archnavbar ul li a:hover { color: white !important; text-decoration: underline !important; } + +/* END MAIN NAVBAR STYLES */ + +/* highlight current website in the navbar */ +li.anb-selected a, +#archnavbar.anb-home ul li#anb-home a, +#archnavbar.anb-packages ul li#anb-packages a, +#archnavbar.anb-download ul li#anb-download a { + color: white !important; +} diff --git a/sitestatic/archweb.css b/sitestatic/archweb.css new file mode 100644 index 00000000..851f17ad --- /dev/null +++ b/sitestatic/archweb.css @@ -0,0 +1,1113 @@ +/* + * Font sizing based on 16px browser defaults (use em): + * 14px = 0.875em + * 13px = 0.812em + * 12px = 0.75em + * 11px = 0.6875em + */ + +@import url("archnavbar/archnavbar.css"); + +/* simple reset */ +* { + margin: 0; + padding: 0; + line-height: 1.4; +} + +/* general styling */ +body { + min-width: 650px; + background: #f6f9fc; + color: #222; + font: normal 100% sans-serif; + text-align: center; +} + +p { + margin: .33em 0 1em; +} + +ol, +ul { + margin-bottom: 1em; + padding-left: 2em; +} + + ul { + list-style: square; + } + +code { + font: 1.2em monospace; + background: #ffd; + padding: 0.15em 0.25em; +} + +pre { + font: 1.2em monospace; + border: 1px solid #bdb; + background: #dfd; + padding: 0.5em; + margin: 1em; +} + + pre code { + display: block; + background: none; + overflow: auto; + } + +blockquote { + margin: 1.5em 2em; +} + +input { + vertical-align: middle; +} + +select[multiple] { + padding: 1px 0; +} + + select[multiple] option { + padding: 0 0.5em 0 0.3em; + } + +input[type=submit] { + padding: 0 0.6em; +} + +.clear { + clear: both; +} + +.hide { + display: none; +} + +hr { + border: none; + border-top: 1px solid #888; +} + +img { + border: 0; +} + +/* scale fonts down to a sane default (16 * .812 = 13px) */ +#content { + font-size: 0.812em; +} + +/* link style */ +a { + text-decoration: none; +} + + a:link, + th a:visited { + color: #07b; + } + + a:visited { + color: #666; + } + + a:hover { + text-decoration: underline; + color: #666; + } + + a:active { + color: #e90; + } + +/* special anchor elements */ +a.headerlink { + visibility: hidden; + padding-left: 0.5em; +} + +h3:hover > a.headerlink { + visibility: visible; +} + +/* headings */ +h2 { + font-size: 1.5em; + margin-bottom: 0.5em; + border-bottom: 1px solid #888; +} + +h3 { + font-size: 1.25em; + margin-top: .5em; +} + +h4 { + font-size: 1.15em; + margin-top: 1em; +} + +h5 { + font-size: 1em; + margin-top: 1em; +} + +/* general layout */ +#content { + width: 95%; + margin: 0 auto; + text-align: left; +} + +#content-left-wrapper { + float: left; + width: 100%; /* req to keep content above sidebar in source code */ +} + +#content-left { + margin: 0 340px 0 0; +} + +#content-right { + float: left; + width: 300px; + margin-left: -300px; +} + +div.box { + margin-bottom: 1.5em; + padding: 0.65em; + background: #ecf2f5; + border: 1px solid #bcd; +} + +#footer { + clear: both; + margin: 2em 0 1em; +} + + #footer p { + margin: 0; + text-align: center; + font-size: 0.85em; + } + +/* alignment */ +div.center, +table.center, +img.center { + width: auto; + margin-left: auto; + margin-right: auto; +} + +p.center, +td.center, +th.center { + text-align: center; +} + +/* table generics */ +table { + width: 100%; + border-collapse: collapse; +} + + table .wrap { + white-space: normal; + } + +th, +td { + white-space: nowrap; + text-align: left; +} + + th { + vertical-align: middle; + font-weight: bold; + } + + td { + vertical-align: top; + } + +/* table pretty styles */ +table.pretty1 { + width: auto; + margin-top: 0.25em; + margin-bottom: 0.5em; + border-collapse: collapse; + border: 1px solid #bcd; +} + + .pretty1 th { + padding: 0.35em; + background: #e4eeff; + border: 1px solid #bcd; + } + + .pretty1 td { + padding: 0.35em; + border: 1px dotted #bcd; + } + +table.pretty2 { + width: auto; + margin-top: 0.25em; + margin-bottom: 0.5em; + border-collapse: collapse; + border: 1px solid #bbb; +} + + .pretty2 th { + padding: 0.35em; + background: #eee; + border: 1px solid #bbb; + } + + .pretty2 td { + padding: 0.35em; + border: 1px dotted #bbb; + } + +table.compact { + width: auto; +} + + .compact td { + padding: 0.25em 0 0.25em 1.5em; + } + + +/* definition lists */ +dl { + clear: both; +} + + dl dt, + dl dd { + margin-bottom: 4px; + padding: 8px 0 4px; + font-weight: bold; + border-top: 1px dotted #bbb; + } + + dl dt { + color: #333; + float:left; + padding-right:15px; + } + +/* forms and input styling */ +form p { + margin: 0.5em 0; +} + +fieldset { + border: 0; +} + +label { + width: 12em; + vertical-align: top; + display: inline-block; + font-weight: bold; +} + +input[type=text], +input[type=password], +textarea { + padding: 0.10em; +} + +form.general-form label, +form.general-form .form-help { + width: 10em; + vertical-align: top; + display: inline-block; +} + +form.general-form input[type=text], +form.general-form textarea { + width: 45%; +} + +/* archdev navbar */ +#archdev-navbar { + margin: 1.5em 0; +} + + #archdev-navbar ul { + list-style: none; + margin: -0.5em 0; + padding: 0; + } + + #archdev-navbar li { + display: inline; + margin: 0; + padding: 0; + font-size: 0.9em; + } + + #archdev-navbar li a { + padding: 0 0.5em; + color: #07b; + } + +/* error/info messages (x pkg is already flagged out-of-date, etc) */ +#sys-message { + width: 35em; + text-align: center; + margin: 1em auto; + padding: 0.5em; + background: #fff; + border: 1px solid #f00; +} + + #sys-message p { + margin: 0; + } + +ul.errorlist { + color: red; +} + +form ul.errorlist { + margin: 0.5em 0; +} + +/* JS sorting via tablesorter */ +table th.tablesorter-header { + padding-right: 20px; + background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); + background-repeat: no-repeat; + background-position: center right; + cursor: pointer; +} + +table thead th.tablesorter-headerAsc { + background-color: #e4eeff; + background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); +} + +table thead th.tablesorter-headerDesc { + background-color: #e4eeff; + background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); +} + +table thead th.sorter-false { + background-image: none; + cursor: default; +} + +/** + * PAGE SPECIFIC STYLES + */ + +/* home: introduction */ +#intro p.readmore { + margin: -0.5em 0 0 0; + font-size: .9em; + text-align: right; +} + +/* home: news */ +#news { + margin-top: 1.5em; +} + + #news h3 { + float: left; + padding-bottom: .5em + } + + #news div { + margin-bottom: 1em; + } + + #news div p { + margin-bottom: 0.5em; + } + + #news .more { + font-weight: normal; + } + + #news .rss-icon { + float: right; + margin-top: 1em; + } + + #news h4 { + clear: both; + font-size: 1em; + margin-top: 1.5em; + border-bottom: 1px dotted #bbb; + } + + #news .timestamp { + float: right; + font-size: 0.85em; + margin: -1.8em 0.5em 0 0; + } + +/* home: arrowed headings */ +#news h3 a { + display: block; + background: #787DAB; + font-size: 15px; + padding: 2px 10px; + color: white; +} + + #news a:active { + color: white; + } + +h3 span.arrow { + display: block; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid #787DAB; + margin: 0 auto; + font-size: 0; + line-height: 0px; +} + +/* home: pkgsearch box */ +#pkgsearch { + padding: 1em 0.75em; + background: #787DAB; + color: #fff; + border: 1px solid #08b; +} + + #pkgsearch label { + width: auto; + padding: 0.1em 0; + } + + #pkgsearch input { + width: 10em; + float: right; + font-size: 1em; + color: #000; + background: #fff; + border: 1px solid #09c; + } + + .pkgsearch-typeahead { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + padding: 0.15em 0.1em; + margin: 0; + min-width: 10em; + font-size: 0.812em; + text-align: left; + list-style: none; + background-color: #f6f9fc; + border: 1px solid #09c; + } + + .pkgsearch-typeahead li a { + color: #000; + } + + .pkgsearch-typeahead li.active a { + color: #07b; + } + +/* home: recent pkg updates */ +#pkg-updates h3 { + margin: 0 0 0.3em; +} + + #pkg-updates .more { + font-weight: normal; + } + + #pkg-updates .rss-icon { + float: right; + margin: -2em 0 0 0; + } + + #pkg-updates table { + margin: 0; + } + + #pkg-updates td.pkg-name { + white-space: normal; + } + + #pkg-updates td.pkg-arch { + text-align: right; + } + + #pkg-updates span.testing { + font-style: italic; + } + + #pkg-updates span.staging { + font-style: italic; + color: #ff8040; + } + +/* home: sidebar navigation */ +#nav-sidebar ul { + list-style: none; + margin: 0.5em 0 0.5em 1em; + padding: 0; +} + +/* home: sponsor banners */ +#arch-sponsors img { + padding: 0.3em 0; +} + +/* home: sidebar components (navlist, sponsors, pkgsearch, etc) */ +div.widget { + margin-bottom: 1.5em; +} + +/* home: other stuff */ +#konami { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + text-align: center; + opacity: 0.6; +} + +/* feeds page */ +#rss-feeds .rss { + padding-right: 20px; + background: url(rss.png) top right no-repeat; +} + +/* artwork: logo images */ +#artwork img.inverted { + background: #333; + padding: 0; +} + +#artwork div.imagelist img { + display: inline; + margin: 0.75em; +} + +/* news: article list */ +.news-nav { + float: right; + margin-top: -2.2em; +} + + .news-nav .prev, + .news-nav .next { + margin: 0 1em; + } + +/* news: article pages */ +div.news-article .article-info { + margin: 0; + color: #999; +} + +/* news: add/edit article */ +#newsform { + width: 60em; +} + + #newsform input[type=text], + #newsform textarea { + width: 75%; + } + +/* todolists: list */ +.todolist-nav { + float: right; + margin-top: -2.2em; +} + + .todolist-nav .prev, + .todolist-nav .next { + margin: 0 1em; + } + +/* donate: donor list */ +#donor-list ul { + width: 100%; +} + /* max 4 columns, but possibly fewer if screen size doesn't allow for more */ + #donor-list li { + float: left; + width: 25%; + min-width: 20em; + } + +/* download page */ +#arch-downloads h3 { + border-bottom: 1px dotted #bbb; +} + +/* pkglists/devlists */ +table.results { + font-size: 0.846em; + border-top: 1px dotted #999; + border-bottom: 1px dotted #999; +} + + .results th { + padding: 0.5em 1em 0.25em 0.25em; + border-bottom: 1px solid #999; + white-space: nowrap; + background-color:#fff; + } + + .results td { + padding: .3em 1em .3em 3px; + } + + .results tr.odd { + background: #fff; + } + + .results tr.even { + background: #e4eeff; + } + + .results .flagged { + color: red; + } + + .results tr.empty td { + text-align: center; + } + +/* pkglist: layout */ +#pkglist-about { + margin-top: 1.5em; +} + +/* pkglist: results navigation */ +.pkglist-stats { + font-size: 0.85em; +} + +#pkglist-results .pkglist-nav { + float: right; + margin-top: -2.2em; +} + +.pkglist-nav .prev { + margin-right: 1em; +} + +.pkglist-nav .next { + margin-right: 1em; +} + +/* search fields and other filter selections */ +.filter-criteria { + margin-bottom: 1em; +} + +.filter-criteria h3 { + font-size: 1em; + margin-top: 0; +} + +.filter-criteria div { + float: left; + margin-right: 1.65em; + font-size: 0.85em; +} + +.filter-criteria legend { + display: none; +} + +.filter-criteria label { + width: auto; + display: block; + font-weight: normal; +} + +/* pkgdetails: details links that float on the right */ +#pkgdetails #detailslinks { + float: right; +} + + #pkgdetails #detailslinks h4 { + margin-top: 0; + margin-bottom: 0.25em; + } + + #pkgdetails #detailslinks ul { + list-style: none; + padding: 0; + margin-bottom: 0; + font-size: 0.846em; + } + + #pkgdetails #detailslinks > div { + padding: 0.5em; + margin-bottom: 1em; + background: #eee; + border: 1px solid #bbb; + } + +#pkgdetails #actionlist .flagged { + color: red; + font-size: 0.9em; + font-style: italic; +} + +/* pkgdetails: pkg info */ +#pkgdetails #pkginfo { + width: auto; +} + + #pkgdetails #pkginfo td { + padding: 0.25em 0 0.25em 1.5em; + } + + #pkgdetails #pkginfo .userdata { + font-size: 0.85em; + padding: 0.5em; + } + +/* pkgdetails: flag package */ +#flag-pkg-form label { + width: 10em; +} + +#flag-pkg-form textarea, +#flag-pkg-form input[type=text] { + width: 45%; +} + +/* pkgdetails: deps, required by and file lists */ +#pkgdetails #metadata { + clear: both; +} + +#pkgdetails #metadata h3 { + background: #555; + color: #fff; + font-size: 1em; + margin-bottom: 0.5em; + padding: 0.2em 0.35em; +} + +#pkgdetails #metadata ul { + list-style: none; + margin: 0; + padding: 0; +} + +#pkgdetails #metadata li { + padding-left: 0.5em; +} + +#pkgdetails #metadata p { + padding-left: 0.5em; +} + +#pkgdetails #metadata .message { + font-style: italic; +} + +#pkgdetails #metadata br { + clear: both; +} + +#pkgdetails #pkgdeps { + float: left; + width: 48%; + margin-right: 2%; +} + +#pkgdetails #metadata .virtual-dep, +#pkgdetails #metadata .testing-dep, +#pkgdetails #metadata .staging-dep, +#pkgdetails #metadata .opt-dep, +#pkgdetails #metadata .make-dep, +#pkgdetails #metadata .check-dep, +#pkgdetails #metadata .dep-desc { + font-style: italic; +} +#pkgdetails #pkgreqs { + float: left; + width: 50%; +} + +#pkgdetails #pkgfiles { + clear: left; + padding-top: 1em; +} + +#pkgfilelist li.d { + color: #666; +} + +#pkgfilelist li.f { +} + +/* mirror stuff */ +table td.country { + white-space: normal; +} + +#list-generator div ul { + list-style: none; + display: inline; + padding-left: 0; +} + + #list-generator div ul li { + display: inline; + } + +.visualize-mirror .axis path, +.visualize-mirror .axis line { + fill: none; + stroke: #000; + stroke-width: 3px; + shape-rendering: crispEdges; +} + +.visualize-mirror .url-dot { + stroke: #000; +} + +.visualize-mirror .url-line { + fill: none; + stroke-width: 1.5px; +} + +/* dev/TU biographies */ +#arch-bio-toc { + width: 75%; + margin: 0 auto; + text-align: center; +} + + #arch-bio-toc a { + white-space: nowrap; + } + +.arch-bio-entry { + width: 75%; + min-width: 640px; + margin: 0 auto; +} + + .arch-bio-entry td.pic { + vertical-align: top; + padding-right: 15px; + padding-top: 2.25em; + } + + .arch-bio-entry td.pic img { + padding: 4px; + border: 1px solid #ccc; + } + + .arch-bio-entry td h3 { + border-bottom: 1px dotted #ccc; + margin-bottom: 0.5em; + } + + .arch-bio-entry table.bio { + margin-bottom: 2em; + } + + .arch-bio-entry table.bio th { + color: #666; + font-weight: normal; + text-align: right; + padding-right: 0.5em; + vertical-align: top; + white-space: nowrap; + } + + .arch-bio-entry table.bio td { + width: 100%; + padding-bottom: 0.25em; + white-space: normal; + } + +/* dev: login/out */ +#dev-login { + width: auto; +} + +/* dev dashboard: flagged packages */ +#dash-pkg-notify { + text-align: right; + padding: 1em 0 0; + margin-top: 1em; + font-size: 0.85em; + border-top: 1px dotted #bbb; +} + + #dash-pkg-notify label { + width: auto; + font-weight: normal; + } + + #dash-pkg-notify input { + vertical-align: middle; + margin: 0 0.25em; + } + + #dash-pkg-notify input[type=submit] { + margin-top: -0.25em; + } + + #dash-pkg-notify p { + margin: 0; + } + +table.dash-stats .key { + width: 50%; +} + +/* dev dashboard: admin actions (add news items, todo list, etc) */ +ul.admin-actions { + float: right; + list-style: none; + margin-top: -2.5em; +} + + ul.admin-actions li { + display: inline; + padding-left: 1.5em; + } + +/* colored yes/no type values */ +.todo-table .complete, +.signoff-yes, +#key-status .signed-yes, +#releng-result .success-yes, +#release-list .available-yes { + color: green; +} + +.todo-table .incomplete, +.signoff-no, +#key-status .signed-no, +#releng-result .success-no, +#release-list .available-no { + color: red; +} + +.todo-table .inprogress, +.signoff-bad { + color: darkorange; +} + + +/* todo lists (public and private) */ +.todo-info { + color: #999; + border-bottom: 1px dotted #bbb; +} + +.todo-description { + margin-top: 1em; + padding-left: 2em; + max-width: 900px; +} + +.todo-pkgbases { + border-top: 1px dotted #bbb; +} + +.todo-list h4 { + margin-top: 0; + margin-bottom: 0.4em; +} + +/* dev: signoff page */ +#dev-signoffs tr:hover { + background: #ffd; +} + +ul.signoff-list { + list-style: none; + margin: 0; + padding: 0; +} + +.signoff-yes { + font-weight: bold; +} + +.signoff-disabled { + color: gray; +} + +/* iso testing feedback form */ +#releng-feedback label { + width: auto; + display: inline; + font-weight: normal; +} + +#releng-feedback ul { + padding-left: 1em; +} + +#releng-feedback li { + list-style: none; +} + +#releng-feedback ul+.helptext { + position: relative; top: -0.9em; +} + +/* visualizations page */ +.visualize-buttons { + margin: 0.5em 0.33em; +} + + .visualize-buttons button.active { + depressed: true; + } + +.visualize-chart { + position: relative; + height: 500px; + margin: 0.33em; +} + +#visualize-archrepo .treemap-cell { + border: solid 1px white; + overflow: hidden; + position: absolute; +} + + #visualize-archrepo .treemap-cell span { + padding: 3px; + font-size: 0.85em; + line-height: 1em; + } + +#visualize-keys svg { + width: 100%; + height: 100%; +} diff --git a/sitestatic/archweb.js b/sitestatic/archweb.js new file mode 100644 index 00000000..dce9cd0c --- /dev/null +++ b/sitestatic/archweb.js @@ -0,0 +1,577 @@ +/* archweb.js + * Homepage: https://projects.archlinux.org/archweb.git/ + * Copyright: 2007-2013 The Archweb Team + * License: GPLv2 + * + * This file is part of Archweb. + * + * Archweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Archweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Archweb. If not, see <http://www.gnu.org/licenses/>. + */ + +/*'use strict';*/ +/* tablesorter custom parsers for various pages: + * devel/index.html, mirrors/status.html, todolists/view.html */ +if (typeof $ !== 'undefined' && typeof $.tablesorter !== 'undefined') { + $.tablesorter.addParser({ + id: 'pkgcount', + is: function(s) { return false; }, + format: function(s) { + var m = s.match(/\d+/); + return m ? parseInt(m[0], 10) : 0; + }, + type: 'numeric' + }); + + $.tablesorter.addParser({ + id: 'todostatus', + is: function(s) { return false; }, + format: function(s) { + if (s.match(/incomplete/i)) { + return 1; + } else if (s.match(/in-progress/i)) { + return 0.5; + } + return 0; + }, + type: 'numeric' + }); + + $.tablesorter.addParser({ + /* sorts numeric, but put '', 'unknown', and '∞' last. */ + id: 'mostlydigit', + special: ['', 'unknown', '∞'], + is: function(s, table) { + var c = table.config; + return ($.inArray(s, this.special) > -1) || $.tablesorter.isDigit(s, c); + }, + format: function(s, t) { + if ($.inArray(s, this.special) > -1) { + return Number.MAX_VALUE; + } + return $.tablesorter.formatFloat(s, t); + }, + type: 'numeric' + }); + + $.tablesorter.addParser({ + /* sorts duration; put '', 'unknown', and '∞' last. */ + id: 'duration', + re: /^([0-9]+):([0-5][0-9])$/, + special: ['', 'unknown', '∞'], + is: function(s) { + return ($.inArray(s, this.special) > -1) || this.re.test(s); + }, + format: function(s) { + if ($.inArray(s, this.special) > -1) { + return Number.MAX_VALUE; + } + var matches = this.re.exec(s); + if (!matches) { + return Number.MAX_VALUE; + } + return matches[1] * 60 + matches[2]; + }, + type: 'numeric' + }); + $.tablesorter.addParser({ + id: 'epochdate', + is: function(s) { return false; }, + format: function(s, t, c) { + /* TODO: this assumes our magic class is the only one */ + var epoch = $(c).attr('class'); + if (epoch.indexOf('epoch-') !== 0) { + return 0; + } + return epoch.slice(6); + }, + type: 'numeric' + }); + + $.tablesorter.addParser({ + id: 'longDateTime', + re: /^(\d{4})-(\d{2})-(\d{2}) ([012]\d):([0-5]\d)(:([0-5]\d))?( (\w+))?$/, + is: function(s) { + return this.re.test(s); + }, + format: function(s, t) { + var matches = this.re.exec(s); + if (!matches) { + return 0; + } + /* skip group 6, group 7 is optional seconds */ + if (matches[7] === undefined) { + matches[7] = 0; + } + /* The awesomeness of the JS date constructor. Month needs to be + * between 0-11, because things have to be difficult. */ + var date = new Date(matches[1], matches[2] - 1, matches[3], + matches[4], matches[5], matches[7]); + return $.tablesorter.formatFloat(date.getTime(), t); + }, + type: 'numeric' + }); + + $.tablesorter.addParser({ + id: 'filesize', + re: /^(\d+(?:\.\d+)?)[ \u00a0](bytes?|[KMGTPEZY]i?B)$/, + is: function(s) { + return this.re.test(s); + }, + format: function(s) { + var matches = this.re.exec(s); + if (!matches) { + return 0; + } + var size = parseFloat(matches[1]), + suffix = matches[2]; + + switch(suffix) { + /* intentional fall-through at each level */ + case 'YB': + case 'YiB': + size *= 1024; + case 'ZB': + case 'ZiB': + size *= 1024; + case 'EB': + case 'EiB': + size *= 1024; + case 'PB': + case 'PiB': + size *= 1024; + case 'TB': + case 'TiB': + size *= 1024; + case 'GB': + case 'GiB': + size *= 1024; + case 'MB': + case 'MiB': + size *= 1024; + case 'KB': + case 'KiB': + size *= 1024; + } + return size; + }, + type: 'numeric' + }); + + $.tablesorter.removeParser = function(id) { + $.tablesorter.parsers = $.grep($.tablesorter.parsers, + function(ele, i) { + return ele.id !== id; + }); + }; + + // We don't use currency, and the parser is over-zealous at deciding it + // matches. Kill it from the parser selection. + $.tablesorter.removeParser('currency'); +} + +(function($) { + $.fn.enableCheckboxRangeSelection = function() { + var lastCheckbox = null, + spec = this; + + spec.unbind("click.checkboxrange"); + spec.bind("click.checkboxrange", function(e) { + if (lastCheckbox !== null && e.shiftKey) { + spec.slice( + Math.min(spec.index(lastCheckbox), spec.index(e.target)), + Math.max(spec.index(lastCheckbox), spec.index(e.target)) + 1 + ).attr({checked: e.target.checked ? "checked" : ""}); + } + lastCheckbox = e.target; + }); + + }; +})(jQuery); + +/* news/add.html */ +function enablePreview() { + $('#news-preview-button').click(function(event) { + event.preventDefault(); + $.post('/news/preview/', { + data: $('#id_content').val(), + csrfmiddlewaretoken: $('#newsform input[name=csrfmiddlewaretoken]').val() + }, + function(data) { + $('#news-preview-data').html(data); + $('#news-preview').show(); + } + ); + $('#news-preview-title').html($('#id_title').val()); + }); +} + +/* packages/details.html */ +function ajaxifyFiles() { + $('#filelink').click(function(event) { + event.preventDefault(); + $.getJSON(this.href + 'json/', function(data) { + // Map each file item into an <li/> with the correct class + var list_items = $.map(data.files, function(value, i) { + var cls = value.match(/\/$/) ? 'd' : 'f'; + return ['<li class="', cls, '">', value, '</li>']; + }); + $('#pkgfilelist').empty(); + if (data.pkg_last_update > data.files_last_update) { + $('#pkgfilelist').append('<p class="message">Note: This file list was generated from a previous version of the package; it may be out of date.</p>'); + } + if (list_items.length > 0) { + $('#pkgfilelist').append('<ul>' + list_items.join('') + '</ul>'); + } else if (data.files_last_update === null) { + $('#pkgfilelist').append('<p class="message">No file list available.</p>'); + } else { + $('#pkgfilelist').append('<p class="message">Package has no files.</p>'); + } + }); + }); +} + +function collapseDependsList(list) { + list = $(list); + // Hide everything past a given limit. Don't do anything if we don't have + // enough items, or the link already exists. + var limit = 20, + linkid = list.attr('id') + 'link', + items = list.find('li').slice(limit); + if (items.length <= 1 || $('#' + linkid).length > 0) { + return; + } + items.hide(); + list.after('<p><a id="' + linkid + '" href="#">Show More…</a></p>'); + + // add link and wire it up to show the hidden items + $('#' + linkid).click(function(event) { + event.preventDefault(); + list.find('li').show(); + // remove the full <p/> node from the DOM + $(this).parent().remove(); + }); +} + +function collapseRelatedTo(elements) { + var limit = 5; + $(elements).each(function(idx, ele) { + ele = $(ele); + // Hide everything past a given limit. Don't do anything if we don't + // have enough items, or the link already exists. + var items = ele.find('span.related').slice(limit); + if (items.length <= 1 || ele.find('a.morelink').length > 0) { + return; + } + items.hide(); + ele.append('<a class="morelink" href="#">More…</a>'); + + // add link and wire it up to show the hidden items + ele.find('a.morelink').click(function(event) { + event.preventDefault(); + ele.find('span.related').show(); + $(this).remove(); + }); + }); +} + +/* packages/differences.html */ +function filter_packages() { + /* start with all rows, and then remove ones we shouldn't show */ + var rows = $('#tbody_differences').children(), + all_rows = rows; + if (!$('#id_multilib').is(':checked')) { + rows = rows.not('.multilib').not('.multilib-testing'); + } + var arch = $('#id_archonly').val(); + if (arch !== 'all') { + rows = rows.filter('.' + arch); + } + if (!$('#id_minor').is(':checked')) { + /* this check is done last because it is the most expensive */ + var pat = /(.*)-(.+)/; + rows = rows.filter(function(index) { + var cells = $(this).children('td'); + + /* all this just to get the split version out of the table cell */ + var ver_a = cells.eq(2).text().match(pat); + if (!ver_a) { + return true; + } + + var ver_b = cells.eq(3).text().match(pat); + if (!ver_b) { + return true; + } + + /* first check pkgver */ + if (ver_a[1] !== ver_b[1]) { + return true; + } + /* pkgver matched, so see if rounded pkgrel matches */ + if (Math.floor(parseFloat(ver_a[2])) === + Math.floor(parseFloat(ver_b[2]))) { + return false; + } + /* pkgrel didn't match, so keep the row */ + return true; + }); + } + /* hide all rows, then show the set we care about */ + all_rows.hide(); + rows.show(); + /* make sure we update the odd/even styling from sorting */ + $('.results').trigger('applyWidgets', [false]); +} +function filter_packages_reset() { + $('#id_archonly').val('both'); + $('#id_multilib').removeAttr('checked'); + $('#id_minor').removeAttr('checked'); + filter_packages(); +} + +/* todolists/view.html */ +function todolist_flag() { + // TODO: fix usage of this + var link = this; + $.getJSON(link.href, function(data) { + $(link).text(data.status).removeClass( + 'complete inprogress incomplete').addClass( + data.css_class.toLowerCase()); + /* let tablesorter know the cell value has changed */ + $('.results').trigger('updateCell', [$(link).closest('td')[0], false, null]); + }); + return false; +} + +function filter_pkgs_list(filter_ele, tbody_ele) { + /* start with all rows, and then remove ones we shouldn't show */ + var rows = $(tbody_ele).children(), + all_rows = rows; + /* apply the filters, cheaper ones first */ + if ($('#id_mine_only').is(':checked')) { + rows = rows.filter('.mine'); + } + /* apply arch and repo filters */ + $(filter_ele + ' .arch_filter').add( + filter_ele + ' .repo_filter').each(function() { + if (!$(this).is(':checked')) { + rows = rows.not('.' + $(this).val()); + } + }); + /* more expensive filter because of 'has' call */ + if ($('#id_incomplete').is(':checked')) { + rows = rows.has('.incomplete'); + } + /* hide all rows, then show the set we care about */ + all_rows.hide(); + rows.show(); + $('#filter-count').text(rows.length); + /* make sure we update the odd/even styling from sorting */ + $('.results').trigger('applyWidgets', [false]); +} +function filter_pkgs_reset(callback) { + $('#id_incomplete').removeAttr('checked'); + $('#id_mine_only').removeAttr('checked'); + $('.arch_filter').attr('checked', 'checked'); + $('.repo_filter').attr('checked', 'checked'); + callback(); +} + +function filter_todolist_save(list_id) { + var state = $('#todolist_filter').serializeArray(); + localStorage['filter_todolist_' + list_id] = JSON.stringify(state); +} +function filter_todolist_load(list_id) { + var state = localStorage['filter_todolist_' + list_id]; + if (!state) + return; + state = JSON.parse(state); + $('#todolist_filter input[type="checkbox"]').removeAttr('checked'); + $.each(state, function (i, v) { + // this assumes our only filters are checkboxes + $('#todolist_filter input[name="' + v['name'] + '"]').attr('checked', 'checked'); + }); +} + +function filter_report_save(report_id) { + var state = $('#report_filter').serializeArray(); + localStorage['filter_report_' + report_id] = JSON.stringify(state); +} +function filter_report_load(report_id) { + var state = localStorage['filter_report_' + report_id]; + if (!state) + return; + state = JSON.parse(state); + $('#report_filter input[type="checkbox"]').removeAttr('checked'); + $.each(state, function (i, v) { + // this assumes our only filters are checkboxes + $('#report_filter input[name="' + v['name'] + '"]').attr('checked', 'checked'); + }); +} + +/* signoffs.html */ +function signoff_package() { + // TODO: fix usage of this + var link = this; + $.getJSON(link.href, function(data) { + link = $(link); + var signoff = null, + cell = link.closest('td'); + if (data.created) { + signoff = $('<li>').addClass('signed-username').text(data.user); + var list = cell.children('ul.signoff-list'); + if (list.size() === 0) { + list = $('<ul class="signoff-list">').prependTo(cell); + } + list.append(signoff); + } else if(data.user) { + signoff = link.closest('td').find('li').filter(function(index) { + return $(this).text() == data.user; + }); + } + if (signoff && data.revoked) { + signoff.text(signoff.text() + ' (revoked)'); + } + /* update the approved column to reflect reality */ + var approved = link.closest('tr').children('.approval'); + approved.attr('class', 'approval'); + if (data.known_bad) { + approved.text('Bad').addClass('signoff-bad'); + } else if (!data.enabled) { + approved.text('Disabled').addClass('signoff-disabled'); + } else if (data.approved) { + approved.text('Yes').addClass('signoff-yes'); + } else { + approved.text('No').addClass('signoff-no'); + } + link.removeAttr('title'); + /* Form our new link. The current will be something like + * '/packages/repo/arch/package/...' */ + var base_href = link.attr('href').split('/').slice(0, 5).join('/'); + if (data.revoked) { + link.text('Signoff'); + link.attr('href', base_href + '/signoff/'); + /* should we be hiding the link? */ + if (data.known_bad || !data.enabled) { + link.remove(); + } + } else { + link.text('Revoke Signoff'); + link.attr('href', base_href + '/signoff/revoke/'); + } + /* let tablesorter know the cell value has changed */ + $('.results').trigger('updateCell', [approved[0], false, null]); + }); + return false; +} + +function filter_signoffs() { + /* start with all rows, and then remove ones we shouldn't show */ + var rows = $('#tbody_signoffs').children(), + all_rows = rows; + /* apply arch and repo filters */ + $('#signoffs_filter .arch_filter').add( + '#signoffs_filter .repo_filter').each(function() { + if (!$(this).is(':checked')) { + rows = rows.not('.' + $(this).val()); + } + }); + /* and then the slightly more expensive pending check */ + if ($('#id_pending').is(':checked')) { + rows = rows.has('td.signoff-no'); + } + /* hide all rows, then show the set we care about */ + all_rows.hide(); + rows.show(); + $('#filter-count').text(rows.length); + /* make sure we update the odd/even styling from sorting */ + $('.results').trigger('applyWidgets', [false]); + filter_signoffs_save(); +} +function filter_signoffs_reset() { + $('#signoffs_filter .arch_filter').attr('checked', 'checked'); + $('#signoffs_filter .repo_filter').attr('checked', 'checked'); + $('#id_pending').removeAttr('checked'); + filter_signoffs(); +} +function filter_signoffs_save() { + var state = $('#signoffs_filter').serializeArray(); + localStorage['filter_signoffs'] = JSON.stringify(state); +} +function filter_signoffs_load() { + var state = localStorage['filter_signoffs']; + if (!state) + return; + state = JSON.parse(state); + $('#signoffs_filter input[type="checkbox"]').removeAttr('checked'); + $.each(state, function (i, v) { + // this assumes our only filters are checkboxes + $('#signoffs_filter input[name="' + v['name'] + '"]').attr('checked', 'checked'); + }); +} + +function collapseNotes(elements) { + // Remove any trailing <br/> tags from the note contents + $(elements).children('br').filter(':last-child').filter(function(i, e) { return !e.nextSibling; }).remove(); + + var maxElements = 8; + $(elements).each(function(idx, ele) { + ele = $(ele); + // Hide everything past a given limit. Don't do anything if we don't + // have enough items, or the link already exists. + var contents = ele.contents(); + if (contents.length <= maxElements || ele.find('a.morelink').length > 0) { + return; + } + contents.slice(maxElements).wrapAll('<div class="hide"/>'); + ele.append('<br class="morelink-spacer"/><a class="morelink" href="#">Show More…</a>'); + + // add link and wire it up to show the hidden items + ele.find('a.morelink').click(function(event) { + event.preventDefault(); + $(this).remove(); + ele.find('br.morelink-spacer').remove(); + // move the div contents back and delete the empty div + var hidden = ele.find('div.hide'); + hidden.contents().appendTo(ele); + hidden.remove(); + }); + }); +} + +/* visualizations */ +function format_filesize(size, decimals) { + /*var labels = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];*/ + var labels = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], + label = 0; + + while (size > 2048.0 && label < labels.length - 1) { + label++; + size /= 1024.0; + } + if (decimals === undefined) { + decimals = 2; + } + + return size.toFixed(decimals) + ' ' + labels[label]; +} + +/* HTML5 input type and attribute enhancements */ +function modify_attributes(to_change) { + /* jQuery doesn't let us change the 'type' attribute directly due to IE + woes, so instead we can clone and replace, setting the type. */ + $.each(to_change, function(id, attrs) { + var obj = $(id); + obj.replaceWith(obj.clone().attr(attrs)); + }); +} diff --git a/sitestatic/ceata-parabola.png b/sitestatic/ceata-parabola.png Binary files differnew file mode 100644 index 00000000..0afea73a --- /dev/null +++ b/sitestatic/ceata-parabola.png diff --git a/sitestatic/click_and_pledge.png b/sitestatic/click_and_pledge.png Binary files differnew file mode 100644 index 00000000..078bf88e --- /dev/null +++ b/sitestatic/click_and_pledge.png diff --git a/sitestatic/download.png b/sitestatic/download.png Binary files differnew file mode 100644 index 00000000..9ab858c2 --- /dev/null +++ b/sitestatic/download.png diff --git a/sitestatic/flags/fam.css b/sitestatic/flags/fam.css new file mode 100644 index 00000000..f4c047d0 --- /dev/null +++ b/sitestatic/flags/fam.css @@ -0,0 +1,270 @@ +/** + * fam flag icons CSS. + */ + +.fam-flag { + display: inline-block; + width: 16px; + height: 11px; + line-height: 11px; + background-image: url("fam.png"); + background-position: -208px -188px; + background-repeat: no-repeat; +} + +.fam-flag-zw { background-position: 0px 0px; } +.fam-flag-zm { background-position: -16px 0px; } +.fam-flag-za { background-position: 0px -11px; } +.fam-flag-yt { background-position: -16px -11px; } +.fam-flag-ye { background-position: -32px 0px; } +.fam-flag-ws { background-position: -32px -11px; } +.fam-flag-wf { background-position: 0px -22px; } +.fam-flag-wales { background-position: -16px -22px; } +.fam-flag-vu { background-position: -32px -22px; } +.fam-flag-vn { background-position: 0px -33px; } +.fam-flag-vi { background-position: -16px -33px; } +.fam-flag-vg { background-position: -32px -33px; } +.fam-flag-ve { background-position: -48px 0px; } +.fam-flag-vc { background-position: -48px -11px; } +.fam-flag-va { background-position: -48px -22px; } +.fam-flag-uz { background-position: -48px -33px; } +.fam-flag-uy { background-position: 0px -44px; } +.fam-flag-us { background-position: -16px -44px; } +.fam-flag-um { background-position: -16px -44px; } +.fam-flag-ug { background-position: -32px -44px; } +.fam-flag-ua { background-position: -48px -44px; } +.fam-flag-tz { background-position: -64px 0px; } +.fam-flag-tw { background-position: -64px -11px; } +.fam-flag-tv { background-position: -64px -22px; } +.fam-flag-tt { background-position: -64px -33px; } +.fam-flag-tr { background-position: -64px -44px; } +.fam-flag-to { background-position: 0px -55px; } +.fam-flag-tn { background-position: -16px -55px; } +.fam-flag-tm { background-position: -32px -55px; } +.fam-flag-tl { background-position: -48px -55px; } +.fam-flag-tk { background-position: -64px -55px; } +.fam-flag-tj { background-position: 0px -66px; } +.fam-flag-th { background-position: -16px -66px; } +.fam-flag-tg { background-position: -32px -66px; } +.fam-flag-tf { background-position: -48px -66px; } +.fam-flag-td { background-position: -64px -66px; } +.fam-flag-tc { background-position: -80px 0px; } +.fam-flag-sz { background-position: -80px -11px; } +.fam-flag-sy { background-position: -80px -22px; } +.fam-flag-sx { background-position: -80px -33px; } +.fam-flag-sv { background-position: -80px -44px; } +.fam-flag-st { background-position: -80px -55px; } +.fam-flag-ss { background-position: -80px -66px; } +.fam-flag-sr { background-position: 0px -77px; } +.fam-flag-so { background-position: -16px -77px; } +.fam-flag-sn { background-position: -32px -77px; } +.fam-flag-sm { background-position: -48px -77px; } +.fam-flag-sl { background-position: -64px -77px; } +.fam-flag-sk { background-position: -80px -77px; } +.fam-flag-si { background-position: -96px 0px; } +.fam-flag-sh { background-position: -96px -11px; } +.fam-flag-sg { background-position: -96px -22px; } +.fam-flag-se { background-position: -96px -33px; } +.fam-flag-sd { background-position: -96px -44px; } +.fam-flag-scotland { background-position: -96px -55px; } +.fam-flag-sc { background-position: -96px -66px; } +.fam-flag-sb { background-position: -96px -77px; } +.fam-flag-sa { background-position: 0px -88px; } +.fam-flag-rw { background-position: -16px -88px; } +.fam-flag-ru { background-position: -32px -88px; } +.fam-flag-rs { background-position: -48px -88px; } +.fam-flag-ro { background-position: -64px -88px; } +.fam-flag-qa { background-position: -80px -88px; } +.fam-flag-py { background-position: -96px -88px; } +.fam-flag-pw { background-position: 0px -99px; } +.fam-flag-pt { background-position: -16px -99px; } +.fam-flag-ps { background-position: -32px -99px; } +.fam-flag-pr { background-position: -48px -99px; } +.fam-flag-pn { background-position: -64px -99px; } +.fam-flag-pm { background-position: -80px -99px; } +.fam-flag-pl { background-position: -96px -99px; } +.fam-flag-pk { background-position: -112px 0px; } +.fam-flag-ph { background-position: -112px -11px; } +.fam-flag-pg { background-position: -112px -22px; } +.fam-flag-pf { background-position: -112px -33px; } +.fam-flag-pe { background-position: -112px -44px; } +.fam-flag-pa { background-position: -112px -55px; } +.fam-flag-om { background-position: -112px -66px; } +.fam-flag-nz { background-position: -112px -77px; } +.fam-flag-nu { background-position: -112px -88px; } +.fam-flag-nr { background-position: -112px -99px; } +.fam-flag-no { background-position: 0px -110px; } +.fam-flag-bv { background-position: 0px -110px; } +.fam-flag-sj { background-position: 0px -110px; } +.fam-flag-nl { background-position: -16px -110px; } +.fam-flag-ni { background-position: -32px -110px; } +.fam-flag-ng { background-position: -48px -110px; } +.fam-flag-nf { background-position: -64px -110px; } +.fam-flag-ne { background-position: -80px -110px; } +.fam-flag-nc { background-position: -96px -110px; } +.fam-flag-na { background-position: -112px -110px; } +.fam-flag-mz { background-position: -128px 0px; } +.fam-flag-my { background-position: -128px -11px; } +.fam-flag-mx { background-position: -128px -22px; } +.fam-flag-mw { background-position: -128px -33px; } +.fam-flag-mv { background-position: -128px -44px; } +.fam-flag-mu { background-position: -128px -55px; } +.fam-flag-mt { background-position: -128px -66px; } +.fam-flag-ms { background-position: -128px -77px; } +.fam-flag-mr { background-position: -128px -88px; } +.fam-flag-mq { background-position: -128px -99px; } +.fam-flag-mp { background-position: -128px -110px; } +.fam-flag-mo { background-position: 0px -121px; } +.fam-flag-mn { background-position: -16px -121px; } +.fam-flag-mm { background-position: -32px -121px; } +.fam-flag-ml { background-position: -48px -121px; } +.fam-flag-mk { background-position: -64px -121px; } +.fam-flag-mh { background-position: -80px -121px; } +.fam-flag-mg { background-position: -96px -121px; } +.fam-flag-me { background-position: 0px -132px; width: 16px; height: 12px; } +.fam-flag-md { background-position: -112px -121px; } +.fam-flag-mc { background-position: -128px -121px; } +.fam-flag-ma { background-position: -16px -132px; } +.fam-flag-ly { background-position: -32px -132px; } +.fam-flag-lv { background-position: -48px -132px; } +.fam-flag-lu { background-position: -64px -132px; } +.fam-flag-lt { background-position: -80px -132px; } +.fam-flag-ls { background-position: -96px -132px; } +.fam-flag-lr { background-position: -112px -132px; } +.fam-flag-lk { background-position: -128px -132px; } +.fam-flag-li { background-position: -144px 0px; } +.fam-flag-lc { background-position: -144px -11px; } +.fam-flag-lb { background-position: -144px -22px; } +.fam-flag-la { background-position: -144px -33px; } +.fam-flag-kz { background-position: -144px -44px; } +.fam-flag-ky { background-position: -144px -55px; } +.fam-flag-kw { background-position: -144px -66px; } +.fam-flag-kr { background-position: -144px -77px; } +.fam-flag-kp { background-position: -144px -88px; } +.fam-flag-kn { background-position: -144px -99px; } +.fam-flag-km { background-position: -144px -110px; } +.fam-flag-ki { background-position: -144px -121px; } +.fam-flag-kh { background-position: -144px -132px; } +.fam-flag-kg { background-position: 0px -144px; } +.fam-flag-ke { background-position: -16px -144px; } +.fam-flag-jp { background-position: -32px -144px; } +.fam-flag-jo { background-position: -48px -144px; } +.fam-flag-jm { background-position: -64px -144px; } +.fam-flag-je { background-position: -80px -144px; } +.fam-flag-it { background-position: -96px -144px; } +.fam-flag-is { background-position: -112px -144px; } +.fam-flag-ir { background-position: -128px -144px; } +.fam-flag-iq { background-position: -144px -144px; } +.fam-flag-io { background-position: -160px 0px; } +.fam-flag-in { background-position: -160px -11px; } +.fam-flag-im { background-position: -160px -22px; width: 16px; height: 9px; } +.fam-flag-il { background-position: -160px -31px; } +.fam-flag-ie { background-position: -160px -42px; } +.fam-flag-id { background-position: -160px -53px; } +.fam-flag-hu { background-position: -160px -64px; } +.fam-flag-ht { background-position: -160px -75px; } +.fam-flag-hr { background-position: -160px -86px; } +.fam-flag-hn { background-position: -160px -97px; } +.fam-flag-hk { background-position: -160px -108px; } +.fam-flag-gy { background-position: -160px -119px; } +.fam-flag-gw { background-position: -160px -130px; } +.fam-flag-gu { background-position: -160px -141px; } +.fam-flag-gt { background-position: 0px -155px; } +.fam-flag-gs { background-position: -16px -155px; } +.fam-flag-gr { background-position: -32px -155px; } +.fam-flag-gq { background-position: -48px -155px; } +.fam-flag-gp { background-position: -64px -155px; } +.fam-flag-gn { background-position: -80px -155px; } +.fam-flag-gm { background-position: -96px -155px; } +.fam-flag-gl { background-position: -112px -155px; } +.fam-flag-gi { background-position: -128px -155px; } +.fam-flag-gh { background-position: -144px -155px; } +.fam-flag-gg { background-position: -160px -155px; } +.fam-flag-ge { background-position: -176px 0px; } +.fam-flag-gd { background-position: -176px -11px; } +.fam-flag-gb { background-position: -176px -22px; } +.fam-flag-ga { background-position: -176px -33px; } +.fam-flag-fr { background-position: -176px -44px; } +.fam-flag-gf { background-position: -176px -44px; } +.fam-flag-re { background-position: -176px -44px; } +.fam-flag-mf { background-position: -176px -44px; } +.fam-flag-bl { background-position: -176px -44px; } +.fam-flag-fo { background-position: -176px -55px; } +.fam-flag-fm { background-position: -176px -66px; } +.fam-flag-fk { background-position: -176px -77px; } +.fam-flag-fj { background-position: -176px -88px; } +.fam-flag-fi { background-position: -176px -99px; } +.fam-flag-fam { background-position: -176px -110px; } +.fam-flag-eu { background-position: -176px -121px; } +.fam-flag-et { background-position: -176px -132px; } +.fam-flag-es { background-position: -176px -143px; } +.fam-flag-er { background-position: -176px -154px; } +.fam-flag-england { background-position: 0px -166px; } +.fam-flag-eh { background-position: -16px -166px; } +.fam-flag-eg { background-position: -32px -166px; } +.fam-flag-ee { background-position: -48px -166px; } +.fam-flag-ec { background-position: -64px -166px; } +.fam-flag-dz { background-position: -80px -166px; } +.fam-flag-do { background-position: -96px -166px; } +.fam-flag-dm { background-position: -112px -166px; } +.fam-flag-dk { background-position: -128px -166px; } +.fam-flag-dj { background-position: -144px -166px; } +.fam-flag-de { background-position: -160px -166px; } +.fam-flag-cz { background-position: -176px -166px; } +.fam-flag-cy { background-position: 0px -177px; } +.fam-flag-cx { background-position: -16px -177px; } +.fam-flag-cw { background-position: -32px -177px; } +.fam-flag-cv { background-position: -48px -177px; } +.fam-flag-cu { background-position: -64px -177px; } +.fam-flag-cs { background-position: -80px -177px; } +.fam-flag-cr { background-position: -96px -177px; } +.fam-flag-co { background-position: -112px -177px; } +.fam-flag-cn { background-position: -128px -177px; } +.fam-flag-cm { background-position: -144px -177px; } +.fam-flag-cl { background-position: -160px -177px; } +.fam-flag-ck { background-position: -176px -177px; } +.fam-flag-ci { background-position: -192px 0px; } +.fam-flag-cg { background-position: -192px -11px; } +.fam-flag-cf { background-position: -192px -22px; } +.fam-flag-cd { background-position: -192px -33px; } +.fam-flag-cc { background-position: -192px -44px; } +.fam-flag-catalonia { background-position: -192px -55px; } +.fam-flag-ca { background-position: -192px -66px; } +.fam-flag-bz { background-position: -192px -77px; } +.fam-flag-by { background-position: -192px -88px; } +.fam-flag-bw { background-position: -192px -99px; } +.fam-flag-bt { background-position: -192px -110px; } +.fam-flag-bs { background-position: -192px -121px; } +.fam-flag-br { background-position: -192px -132px; } +.fam-flag-bq { background-position: -192px -143px; } +.fam-flag-bo { background-position: -192px -154px; } +.fam-flag-bn { background-position: -192px -165px; } +.fam-flag-bm { background-position: -192px -176px; } +.fam-flag-bj { background-position: 0px -188px; } +.fam-flag-bi { background-position: -16px -188px; } +.fam-flag-bh { background-position: -32px -188px; } +.fam-flag-bg { background-position: -48px -188px; } +.fam-flag-bf { background-position: -64px -188px; } +.fam-flag-be { background-position: -80px -188px; } +.fam-flag-bd { background-position: -96px -188px; } +.fam-flag-bb { background-position: -112px -188px; } +.fam-flag-ba { background-position: -128px -188px; } +.fam-flag-az { background-position: -144px -188px; } +.fam-flag-ax { background-position: -160px -188px; } +.fam-flag-aw { background-position: -176px -188px; } +.fam-flag-au { background-position: -192px -188px; } +.fam-flag-hm { background-position: -192px -188px; } +.fam-flag-at { background-position: -208px 0px; } +.fam-flag-as { background-position: -208px -11px; } +.fam-flag-ar { background-position: -208px -22px; } +.fam-flag-ao { background-position: -208px -33px; } +.fam-flag-an { background-position: -208px -44px; } +.fam-flag-am { background-position: -208px -55px; } +.fam-flag-al { background-position: -208px -66px; } +.fam-flag-ai { background-position: -208px -77px; } +.fam-flag-ag { background-position: -208px -88px; } +.fam-flag-af { background-position: -208px -99px; } +.fam-flag-ae { background-position: -208px -110px; } +.fam-flag-ad { background-position: -208px -121px; } +.fam-flag-np { background-position: -208px -132px; width: 9px; } +.fam-flag-ch { background-position: -208px -143px; width: 11px; } diff --git a/sitestatic/flags/fam.png b/sitestatic/flags/fam.png Binary files differnew file mode 100644 index 00000000..953287b9 --- /dev/null +++ b/sitestatic/flags/fam.png diff --git a/sitestatic/gandi.png b/sitestatic/gandi.png Binary files differnew file mode 100644 index 00000000..85c8e1ee --- /dev/null +++ b/sitestatic/gandi.png diff --git a/sitestatic/kartenzia_button.png b/sitestatic/kartenzia_button.png Binary files differnew file mode 100644 index 00000000..c156fc86 --- /dev/null +++ b/sitestatic/kartenzia_button.png diff --git a/sitestatic/magnet.png b/sitestatic/magnet.png Binary files differnew file mode 100644 index 00000000..f67e69b9 --- /dev/null +++ b/sitestatic/magnet.png diff --git a/sitestatic/new.png b/sitestatic/new.png Binary files differnew file mode 100644 index 00000000..6a9bf037 --- /dev/null +++ b/sitestatic/new.png diff --git a/sitestatic/robofun.jpg b/sitestatic/robofun.jpg Binary files differnew file mode 100644 index 00000000..c01ce645 --- /dev/null +++ b/sitestatic/robofun.jpg diff --git a/sitestatic/vector_tux.png b/sitestatic/vector_tux.png Binary files differnew file mode 100644 index 00000000..ab4be6d0 --- /dev/null +++ b/sitestatic/vector_tux.png diff --git a/sitestatic/vnet_button.png b/sitestatic/vnet_button.png Binary files differnew file mode 100644 index 00000000..22cfa9e4 --- /dev/null +++ b/sitestatic/vnet_button.png |