Browse Source

Merge pull request #176 from Cqoicebordel/courgette-UXUI

Courgette theme - UIUX
Adam Tauber 10 years ago
parent
commit
3fd562ccd7
40 changed files with 882 additions and 836 deletions
  1. 1 0
      Makefile
  2. 0 660
      searx/static/themes/courgette/css/style.css
  3. BIN
      searx/static/themes/courgette/img/icons/icon_500px.ico
  4. BIN
      searx/static/themes/courgette/img/icons/icon_bing.ico
  5. BIN
      searx/static/themes/courgette/img/icons/icon_deezer.ico
  6. BIN
      searx/static/themes/courgette/img/icons/icon_digg.ico
  7. BIN
      searx/static/themes/courgette/img/icons/icon_duckduckgo.ico
  8. BIN
      searx/static/themes/courgette/img/icons/icon_flickr.ico
  9. BIN
      searx/static/themes/courgette/img/icons/icon_google play apps.ico
  10. BIN
      searx/static/themes/courgette/img/icons/icon_google play movies.ico
  11. BIN
      searx/static/themes/courgette/img/icons/icon_google play music.ico
  12. BIN
      searx/static/themes/courgette/img/icons/icon_google.ico
  13. BIN
      searx/static/themes/courgette/img/icons/icon_openstreetmap.ico
  14. BIN
      searx/static/themes/courgette/img/icons/icon_searchcode code.ico
  15. BIN
      searx/static/themes/courgette/img/icons/icon_searchcode doc.ico
  16. BIN
      searx/static/themes/courgette/img/icons/icon_searchcode.ico
  17. BIN
      searx/static/themes/courgette/img/icons/icon_startpage.ico
  18. BIN
      searx/static/themes/courgette/img/icons/icon_subtitleseeker.ico
  19. BIN
      searx/static/themes/courgette/img/icons/icon_wikipedia.ico
  20. BIN
      searx/static/themes/courgette/img/icons/icon_yahoo.ico
  21. 689 0
      searx/static/themes/courgette/less/style.less
  22. 0 0
      searx/static/themes/default/css/style.css
  23. BIN
      searx/static/themes/default/img/icons/icon_searchcode code.ico
  24. BIN
      searx/static/themes/default/img/icons/icon_searchcode doc.ico
  25. 0 0
      searx/static/themes/oscar/css/oscar.min.css
  26. 2 2
      searx/templates/courgette/about.html
  27. 32 31
      searx/templates/courgette/base.html
  28. 7 5
      searx/templates/courgette/categories.html
  29. 1 1
      searx/templates/courgette/github_ribbon.html
  30. 4 4
      searx/templates/courgette/index.html
  31. 53 55
      searx/templates/courgette/preferences.html
  32. 6 6
      searx/templates/courgette/result_templates/code.html
  33. 9 9
      searx/templates/courgette/result_templates/default.html
  34. 2 2
      searx/templates/courgette/result_templates/images.html
  35. 10 10
      searx/templates/courgette/result_templates/map.html
  36. 10 4
      searx/templates/courgette/result_templates/torrent.html
  37. 8 8
      searx/templates/courgette/result_templates/videos.html
  38. 38 29
      searx/templates/courgette/results.html
  39. 6 6
      searx/templates/courgette/search.html
  40. 4 4
      searx/templates/courgette/stats.html

+ 1 - 0
Makefile

@@ -46,6 +46,7 @@ minimal: bin/buildout minimal.cfg setup.py
 
 styles:
 	@lessc -x searx/static/themes/default/less/style.less > searx/static/themes/default/css/style.css
+	@lessc -x searx/static/themes/courgette/less/style.less > searx/static/themes/courgette/css/style.css
 	@lessc -x searx/static/less/bootstrap/bootstrap.less > searx/static/css/bootstrap.min.css
 	@lessc -x searx/static/themes/oscar/less/oscar/oscar.less > searx/static/themes/oscar/css/oscar.min.css
 

File diff suppressed because it is too large
+ 0 - 660
searx/static/themes/courgette/css/style.css


BIN
searx/static/themes/courgette/img/icons/icon_500px.ico


BIN
searx/static/themes/courgette/img/icons/icon_bing.ico


BIN
searx/static/themes/courgette/img/icons/icon_deezer.ico


BIN
searx/static/themes/courgette/img/icons/icon_digg.ico


BIN
searx/static/themes/courgette/img/icons/icon_duckduckgo.ico


BIN
searx/static/themes/courgette/img/icons/icon_flickr.ico


BIN
searx/static/themes/courgette/img/icons/icon_google play apps.ico


BIN
searx/static/themes/courgette/img/icons/icon_google play movies.ico


BIN
searx/static/themes/courgette/img/icons/icon_google play music.ico


BIN
searx/static/themes/courgette/img/icons/icon_google.ico


BIN
searx/static/themes/courgette/img/icons/icon_openstreetmap.ico


BIN
searx/static/themes/courgette/img/icons/icon_searchcode code.ico


BIN
searx/static/themes/courgette/img/icons/icon_searchcode doc.ico


BIN
searx/static/themes/courgette/img/icons/icon_searchcode.ico


BIN
searx/static/themes/courgette/img/icons/icon_startpage.ico


BIN
searx/static/themes/courgette/img/icons/icon_subtitleseeker.ico


BIN
searx/static/themes/courgette/img/icons/icon_wikipedia.ico


BIN
searx/static/themes/courgette/img/icons/icon_yahoo.ico


+ 689 - 0
searx/static/themes/courgette/less/style.less

@@ -0,0 +1,689 @@
+
+@color-main: #3498DB;
+@color-other-links: #666;
+@color-fonts: #333;
+@center-width: 70em;
+
+
+
+
+* {
+  -webkit-box-sizing: border-box;
+	 -moz-box-sizing: border-box;
+		  box-sizing: border-box;
+}
+
+input[type="search"] {
+	-webkit-appearance: textfield;
+}
+
+h2 {
+	color: @color-other-links;
+	text-transform: uppercase;
+}
+
+body {
+	font-family: sans-serif;
+	line-height: 1.5;
+	margin: 0;
+	background: #EEE;
+}
+
+html {
+	position: relative;
+	min-height: 100%;
+}
+
+a {
+	color: @color-other-links;
+}
+
+.title h1 {
+	background: url(../img/searx.png) no-repeat;
+	width: 319px;
+	height: 62px;
+	text-indent: -9999px;
+	margin: 0.5em auto 1em;
+}
+
+.center {
+	max-width: @center-width;
+	text-align: center;
+	background: rgba(255,255,255,0.6);
+	padding: 2em;
+	margin: 7% auto 0;
+	position: relative;
+}
+
+.center.search {
+	position: static;
+	width: auto;
+	background: none;
+	margin: auto;
+	padding-top: 1.8em;
+}
+
+@media screen and (min-width: 1001px) {
+	.center:after {
+		content: "";
+		z-index: -1;
+		background: url(../img/bg-body-index.jpg) no-repeat;
+		background-size: cover;
+		width: 100%;
+		height: 100%;
+		top: 0;
+		left: 0;
+		position: fixed;
+	}
+	.center.search:after {
+		content: none;
+	}
+}
+
+.autocompleter-choices {
+	position: absolute;
+	margin: 0;
+	padding: 0;
+	background: #FFF;
+}
+
+.autocompleter-choices li {
+	padding: 0.5em 1em;
+}
+  
+.autocompleter-choices li:hover {
+	background: @color-main;
+	color: #FFF;
+	cursor: pointer;
+}
+
+#categories {
+	text-align: center;
+}
+
+.top_margin {
+	position: absolute;
+	bottom: -3.5em;
+	width: 100%;
+	left: 0;
+}
+
+.top_margin a {
+	display: inline-block;
+	margin-right: 1em;
+	color: #FFF;
+	text-decoration: none;
+}
+
+.top_margin a:hover,
+.top_margin a:focus {
+	text-decoration: underline;
+}
+
+@media screen and (max-width: 1000px) {
+	.center { background: none; }
+	.top_margin a {
+		color: @color-fonts;
+	}
+}
+
+.checkbox_container { margin-top: 1.5em; }
+.checkbox_container label {
+	padding: 0.5em 1em;
+	color: @color-fonts;
+	cursor: pointer;
+	font-size: 0.9em;
+}
+
+.checkbox_container label:hover {
+	background: @color-main;
+	color: #FFF;
+}
+
+.checkbox_container input[type="checkbox"] {
+	position: absolute;
+	top: -9999px;
+}
+
+.checkbox_container input[type="checkbox"]:checked + label {
+	background: @color-main;
+	color: #FFF;
+}
+
+#categories_container > div {
+	display: inline-block;
+}
+
+#categories .hidden {
+	display: none;
+	position: absolute;
+	bottom: 1em;
+	left: 0;
+	text-align: center;
+	width: 100%;
+	font-size: 0.9em;
+	font-style: italic;
+	color: @color-fonts;
+}
+
+#categories:hover .hidden {
+	display: block;
+}
+
+@media screen and (max-width: 900px) {
+	#categories_container { letter-spacing: -5px; }
+	#categories_container > div {
+		letter-spacing: normal;
+		margin-top: 1em;
+	}
+	.checkbox_container {
+		margin: 0;
+	}
+	.checkbox_container label {
+		display: block;
+		background: #CCC;
+		padding: 1em;
+		border: 1px solid #FFF;
+	}
+	.top_margin { position: static; }
+	#categories .hidden {
+		position: static;
+		display: block;
+	}
+}
+
+@media screen and (max-width: 900px) and (min-width: 501px) {
+	#categories_container > div {
+		width: 31%;
+		margin-left: 2.333%;
+	}
+	#categories_container > div:nth-child(3n+1) { margin-left: 0; }
+}
+
+@media screen and (max-width: 500px) {
+	#categories_container > div {
+		width: 48%;
+		margin-left: 2%;
+		font-size: 0.9em;
+	}
+	#categories_container > div:nth-child(2n+1) { margin-left: 0; }
+	.title h1 {
+		background: url(../img/searx-mobile.png) no-repeat;
+		width: 200px;
+		height: 39px;
+	}
+}
+
+#search_wrapper {
+	position: relative;
+}
+
+.q {
+	padding: 0.5em 3em 0.5em 1em;
+	width: 100%;
+	font-size: 1.5em;
+	border: 0;
+	color: #666;
+}
+
+#search_submit {
+	position: absolute;
+	top: 0;
+	right: 0;
+	border: 0;
+	background:url("../img/search-icon.png") no-repeat scroll center center / 65% auto @color-main;
+	text-indent: -9999px;
+	width: 5em;
+	height: 100%;
+	cursor: pointer;
+}
+
+#search_submit:hover,
+#search_submit:focus {
+	background-color: #0665A2;
+}
+
+#sidebar {
+	background: @color-main;
+	position: fixed;
+	top: 0;
+	right: 0;
+	width: 15em;
+	height: 100%;
+	padding: 1.5em;
+	text-align: right;
+}
+
+.right {
+	position: fixed;
+	bottom: 1.5em;
+	width: 15em;
+	right: 0;
+	z-index: 1;
+	padding: 0 1.5em;
+	text-align: right;
+}
+
+.right a {
+	color: #FFF;
+	display: block;
+	text-decoration: none;
+}
+
+.right a:hover,
+.right a:focus {
+	text-decoration: underline;
+}
+
+#preferences {
+	background: url(../img/preference-icon.png) no-repeat right 0 / 12% auto; 
+	padding-right: 1.8em;
+}
+
+#preferences:hover,
+#preferences:focus {
+  
+}
+
+#search_url input {
+	border: 0;
+	padding: 0.5em;
+}
+
+#sidebar > div {
+	margin-bottom: 1em;
+	color: #FFF;
+}
+
+#sidebar form {
+	display: inline-block;
+}
+
+#sidebar input[type="submit"] {
+	background: #CCC;
+	border: 0;
+	padding: 0.5em 1em;
+	cursor: pointer;
+	margin-top: 0.5em;
+}
+
+#sidebar input[type="submit"]:hover,
+#sidebar input[type="submit"]:focus {
+	color: #FFF;
+	background-color: #0665A2;
+}
+
+#results {
+	padding-right: 17em;
+	padding-left: 2em;
+	padding: 0 17em 0 2em;
+}
+
+.result p {
+	font-size: 0.9em;
+}
+
+.result .content { 
+	margin: 0;
+	color: #666;
+}
+
+.result .url {
+	margin-top: 0;
+	color: #FF6530;
+}
+
+.result .favicon {
+	float: left;
+	position: relative;
+	top: 0.5em;
+	margin-right: 0.5em;
+} 
+
+.definition_result {
+	background: #CCC;
+	padding: 1em;
+}
+
+.definition_result .result_title,
+.definition_result p {
+	margin: 0;
+}
+
+.result_title {
+	margin-bottom: 0;
+	font-weight: normal;
+}
+
+.highlight {
+	font-weight: bold;
+}
+
+.result_title a {
+	color: @color-main;
+	text-decoration: none;
+}
+
+.result_title a:hover,
+.result_title a:focus {
+	text-decoration: underline;
+}
+
+.cache_link {
+	color: #666;
+	font-size: 0.9em;
+	font-style: italic;
+}
+
+.search.center {
+	padding-right: 17em;
+}
+
+#answers {
+	border: 2px solid @color-main;
+	padding: 20px;
+	color:#666;
+	text-align: center;
+	max-width:@center-width;
+	margin:0 auto 20px;
+}
+
+#suggestions { margin-bottom: 1em; }
+
+#suggestions span { color: #666; }
+
+#suggestions form {
+	display: inline-block;
+	vertical-align: top;
+	margin-bottom: 0.5em;
+}
+
+#suggestions input[type="submit"] {
+	color: @color-fonts;
+	padding: 0.5em 1em;
+	border: 0;
+	background: #CCC;
+	cursor:pointer;
+}
+
+#suggestions input[type="submit"]:hover,
+#suggestions input[type="submit"]:focus {
+	background: @color-main;
+	color: #FFF;
+}
+
+#pagination {
+	margin: 1.5em 0 2em;
+}
+
+#pagination form + form {
+	float: right;
+	margin-top: -2em;
+}
+
+input[type="submit"] {
+	display: inline-block;
+	background: @color-main;
+	color: #FFF;
+	border: 0;
+	padding: 0.6em 1em;
+	cursor: pointer;
+}
+
+input[type="submit"]:hover,
+input[type="submit"]:focus {
+	background: #0665A2;
+}
+
+.row {
+	max-width: 60em;
+	margin: auto;
+}
+
+.row a {
+	color: @color-main;
+}
+
+.row form {
+	letter-spacing: -5px;
+}
+
+.row form > * { letter-spacing: normal; }
+
+.row p { margin: 0; }
+
+.row fieldset {
+	display: inline-block;
+	width: 48%;
+	vertical-align: top;
+}
+
+.row fieldset:last-of-type {
+	display: block;
+	width: auto;
+	background: none;
+	padding: 0;
+}
+
+.row fieldset:nth-child(odd) {
+	margin-right: 2%;
+}
+
+.row fieldset:nth-child(2) {
+	min-height: 10.5em;
+}
+
+@media screen and (max-width: 900px) {
+	.row {
+		margin: 0 1em;
+	}
+
+	.row fieldset { width: 49%; }
+	.row fieldset,
+	.row fieldset:nth-child(odd) {
+		margin-right: 0;
+	}
+
+	.row fieldset:first-child {
+		width: 100%;
+		margin-right: 0;
+	}
+
+	.row fieldset:nth-child(even) {
+		margin-right: 2%;
+	}
+}
+
+@media screen and (max-width: 800px) {
+	.row fieldset { width: 100%; }
+
+	select { width: 100%; }
+
+	table { font-size: 0.8em; }
+	.right {display: none;}
+	#sidebar { display: none; }
+	#results { padding: 0 2em; }
+	.search.center {
+		padding-right: 2em;
+	}
+}
+
+@media screen and (max-width: 400px) {
+	.row #categories_container > div {
+		width: 100%;
+		margin-left: 0;
+	}
+}
+
+fieldset {
+	border: 0;
+	margin: 1em 0;
+	background: #CCC;
+	padding: 1.5em;
+}
+
+table {
+	width: 100%;
+	text-align: left;
+	border: 1px solid #CCC;
+	border-collapse: collapse;
+}
+
+table th {
+	background: #999;
+	color: #FFF;
+}
+
+table tr:nth-child(odd) {
+	background: #CCC;
+}
+
+table th,
+table td {
+	padding: 0.5em 1em;
+	border: 1px solid #FFF;
+}
+
+.engine_checkbox label {
+	padding: 0.5em;
+	background: @color-main;
+	color: #FFF;
+	cursor: pointer;
+}
+
+.engine_checkbox .deny {
+	background: @color-main;
+}
+
+.engine_checkbox .allow {
+	display: none;
+	background: #666;
+}
+
+.engine_checkbox input {
+	display: none;
+}
+
+.engine_checkbox input:checked + .allow {
+	display: inline;
+}
+
+.engine_checkbox input:checked + .allow + .deny{
+	display: none;
+}
+
+.row input[type="submit"] {
+	font-size: 1em;
+	margin: 1em 0 2em;
+}
+
+.row .right {
+	position: static;
+	display: inline-block;
+  
+}
+
+.row .right a {
+	color: @color-fonts;
+	width: auto;
+	text-align: left;
+	padding: 0;
+}
+
+.small_font {
+	font-size: 0.8em;
+}
+
+table th {
+	padding: 1em;
+}
+
+legend {
+	background: #EEE;
+	padding: 0 1em;
+	position: relative;
+}
+
+select {
+	border: 1px solid #DDD;
+	padding: 0.5em 0.8em;
+	font-size: 1em;
+}
+
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #f8f8f8; }
+.highlight .c { color: #408080; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
+.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #7D9029 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #A0A000 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
+
+.highlight pre { overflow: auto; }
+
+.highlight .lineno {
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+	cursor: default;
+}
+
+.highlight .lineno::selection { background: transparent; } /* WebKit/Blink Browsers */
+.highlight .lineno::-moz-selection { background: transparent; } /* Gecko Browsers */

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/default/css/style.css


BIN
searx/static/themes/default/img/icons/icon_searchcode code.ico


BIN
searx/static/themes/default/img/icons/icon_searchcode doc.ico


File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/oscar/css/oscar.min.css


+ 2 - 2
searx/templates/courgette/about.html

@@ -1,6 +1,6 @@
-{% extends 'default/base.html' %}
+{% extends 'courgette/base.html' %}
 {% block content %}
-{% include 'default/github_ribbon.html' %}
+{% include 'courgette/github_ribbon.html' %}
 <div class="row">
     <h1>About <a href="{{ url_for('index') }}">searx</a></h1>
 

+ 32 - 31
searx/templates/courgette/base.html

@@ -1,33 +1,34 @@
 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-    <meta charset="UTF-8" />
-    <meta name="description" content="Searx - a privacy-respecting, hackable metasearch engine" />
-    <meta name="keywords" content="searx, search, search engine, metasearch, meta search" />
-    <meta name="generator" content="searx/{{ searx_version }}">
-    <meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=1" />
-    <title>{% block title %}{% endblock %}searx</title>
-    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}" type="text/css" media="screen" />
-    <link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}?v=2" />
-    {% block styles %}
-    {% endblock %}
-    {% block head %}
-    <link title="searx" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/>
-    {% endblock %}
-    <script type="text/javascript">
-        searx = {};
-        searx.autocompleter = {% if autocomplete %}true{% else %}false{% endif %};
-    </script>
-</head>
-<body>
-<div id="container">
-{% block content %}
-{% endblock %}
-{% if autocomplete %}
-<script src="{{ url_for('static', filename='js/mootools-core-1.4.5-min.js') }}" ></script>
-<script src="{{ url_for('static', filename='js/mootools-autocompleter-1.1.2-min.js') }}" ></script>
-{% endif %}
-<script src="{{ url_for('static', filename='js/searx.js') }}" ></script>
-</div>
-</body>
-</html>
+    <head>
+        <meta charset="UTF-8" />
+        <meta name="description" content="Searx - a privacy-respecting, hackable metasearch engine" />
+        <meta name="keywords" content="searx, search, search engine, metasearch, meta search" />
+        <meta name="generator" content="searx/{{ searx_version }}">
+        <meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=1" />
+        <title>{% block title %}{% endblock %}searx</title>
+        <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}" type="text/css" media="screen" />
+        <link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}?v=2" />
+        {% block styles %}
+        {% endblock %}
+        {% block meta %}{% endblock %}
+        {% block head %}
+        <link title="searx" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/>
+        {% endblock %}
+        <script type="text/javascript">
+            searx = {};
+            searx.autocompleter = {% if autocomplete %}true{% else %}false{% endif %};
+        </script>
+    </head>
+    <body>
+        <div id="container">
+            {% block content %}
+            {% endblock %}
+            {% if autocomplete %}
+            <script src="{{ url_for('static', filename='js/mootools-core-1.4.5-min.js') }}" ></script>
+            <script src="{{ url_for('static', filename='js/mootools-autocompleter-1.1.2-min.js') }}" ></script>
+            {% endif %}
+            <script src="{{ url_for('static', filename='js/searx.js') }}" ></script>
+        </div>
+    </body>
+</html>

+ 7 - 5
searx/templates/courgette/categories.html

@@ -1,7 +1,9 @@
 <div id="categories">
-{% for category in categories %}
-    <div class="checkbox_container">
-        <input type="checkbox" id="checkbox_{{ category|replace(' ', '_') }}" name="category_{{ category }}" {% if category in selected_categories %}checked="checked"{% endif %} /><label for="checkbox_{{ category|replace(' ', '_') }}">{{ _(category) }}</label>
+    <div id="categories_container">
+    {% for category in categories %}
+        <div class="checkbox_container">
+            <input type="checkbox" id="checkbox_{{ category|replace(' ', '_') }}" name="category_{{ category }}" {% if category in selected_categories %}checked="checked"{% endif %} /><label for="checkbox_{{ category|replace(' ', '_') }}">{{ _(category) }}</label>
+        </div>
+    {% endfor %}
     </div>
-{% endfor %}
-</div>
+</div>

+ 1 - 1
searx/templates/courgette/github_ribbon.html

@@ -1,3 +1,3 @@
 <a href="https://github.com/asciimoo/searx" class="github">
     <img style="position: absolute; top: 0; right: 0; border: 0;" src="{{ url_for('static', filename='img/github_ribbon.png') }}" alt="Fork me on GitHub"  class="github"/>
-</a>
+</a>

+ 4 - 4
searx/templates/courgette/index.html

@@ -1,12 +1,12 @@
-{% extends "default/base.html" %}
+{% extends "courgette/base.html" %}
 {% block content %}
-{% include 'default/github_ribbon.html' %}
+{% include 'courgette/github_ribbon.html' %}
 <div class="center">
     <div class="title"><h1>searx</h1></div>
-    {% include 'default/search.html' %}
+    {% include 'courgette/search.html' %}
     <p class="top_margin">
         <a href="{{ url_for('about') }}" class="hmarg">{{ _('about') }}</a>
         <a href="{{ url_for('preferences') }}" class="hmarg">{{ _('preferences') }}</a>
     </p>
 </div>
-{% endblock %}
+{% endblock %}

+ 53 - 55
searx/templates/courgette/preferences.html

@@ -1,4 +1,4 @@
-{% extends "default/base.html" %}
+{% extends "courgette/base.html" %}
 {% block head %} {% endblock %}
 {% block content %}
 <div class="row">
@@ -7,95 +7,93 @@
     <form method="post" action="{{ url_for('preferences') }}" id="search_form">
     <fieldset>
         <legend>{{ _('Default categories') }}</legend>
-        <p>
-        {% include 'default/categories.html' %}
-        </p>
+        {% include 'courgette/categories.html' %}
     </fieldset>
     <fieldset>
         <legend>{{ _('Search language') }}</legend>
         <p>
-        <select name='language'>
-            <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Automatic') }}</option>
-            {% for lang_id,lang_name,country_name in language_codes %}
-            <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} ({{ country_name }}) - {{ lang_id }}</option>
-            {% endfor %}
-        </select>
+            <select name='language'>
+                <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Automatic') }}</option>
+                {% for lang_id,lang_name,country_name in language_codes %}
+                <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} ({{ country_name }}) - {{ lang_id }}</option>
+                {% endfor %}
+            </select>
         </p>
     </fieldset>
     <fieldset>
         <legend>{{ _('Interface language') }}</legend>
         <p>
-        <select name='locale'>
-            {% for locale_id,locale_name in locales.items() %}
-            <option value="{{ locale_id }}" {% if locale_id == current_locale %}selected="selected"{% endif %}>{{ locale_name }}</option>
-            {% endfor %}
-        </select>
+            <select name='locale'>
+                {% for locale_id,locale_name in locales.items() %}
+                <option value="{{ locale_id }}" {% if locale_id == current_locale %}selected="selected"{% endif %}>{{ locale_name }}</option>
+                {% endfor %}
+            </select>
         </p>
     </fieldset>
     <fieldset>
         <legend>{{ _('Autocomplete') }}</legend>
         <p>
-        <select name="autocomplete">
-            <option value=""> - </option>
-            {% for backend in autocomplete_backends %}
-            <option value="{{ backend }}" {% if backend == autocomplete %}selected="selected"{% endif %}>{{ backend }}</option>
-            {% endfor %}
-        </select>
+            <select name="autocomplete">
+                <option value=""> - </option>
+                {% for backend in autocomplete_backends %}
+                <option value="{{ backend }}" {% if backend == autocomplete %}selected="selected"{% endif %}>{{ backend }}</option>
+                {% endfor %}
+            </select>
         </p>
     </fieldset>
     <fieldset>
         <legend>{{ _('Method') }}</legend>
         <p>
-        <select name='method'>
-            <option value="POST" {% if method == 'POST' %}selected="selected"{% endif %}>POST</option>
-            <option value="GET" {% if method == 'GET' %}selected="selected"{% endif %}>GET</option>
-        </select>
+            <select name='method'>
+                <option value="POST" {% if method == 'POST' %}selected="selected"{% endif %}>POST</option>
+                <option value="GET" {% if method == 'GET' %}selected="selected"{% endif %}>GET</option>
+            </select>
         </p>
     </fieldset>
     <fieldset>
         <legend>{{ _('Themes') }}</legend>
         <p>
-        <select name="theme">
-            {% for name in themes %}
-            <option value="{{ name }}" {% if name == theme %}selected="selected"{% endif %}>{{ name }}</option>
-            {% endfor %}
-        </select>
+            <select name="theme">
+                {% for name in themes %}
+                <option value="{{ name }}" {% if name == theme %}selected="selected"{% endif %}>{{ name }}</option>
+                {% endfor %}
+            </select>
         </p>
     </fieldset>
     <fieldset>
-    <legend>{{ _('Currently used search engines') }}</legend>
-
-    <table>
-        <tr>
-            <th>{{ _('Engine name') }}</th>
-            <th>{{ _('Category') }}</th>
-            <th>{{ _('Allow') }} / {{ _('Block') }}</th>
-        </tr>
-    {% for (categ,search_engines) in categs %}
-        {% for search_engine in search_engines %}
+        <legend>{{ _('Currently used search engines') }}</legend>
 
-            {% if not search_engine.private %}
+        <table>
             <tr>
-                <td>{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</td>
-                <td>{{ _(categ) }}</td>
-                <td class="engine_checkbox">
-                    <input type="checkbox" id="engine_{{ categ }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}"{% if search_engine.name in blocked_engines %} checked="checked"{% endif %} />
-                    <label class="allow" for="engine_{{ categ }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Allow') }}</label>
-                    <label class="deny" for="engine_{{ categ }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Block') }}</label>
-                </td>
+                <th>{{ _('Engine name') }}</th>
+                <th>{{ _('Category') }}</th>
+                <th>{{ _('Allow') }} / {{ _('Block') }}</th>
             </tr>
-            {% endif %}
+        {% for (categ,search_engines) in categs %}
+            {% for search_engine in search_engines %}
+
+                {% if not search_engine.private %}
+                <tr>
+                    <td>{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</td>
+                    <td>{{ _(categ) }}</td>
+                    <td class="engine_checkbox">
+                        <input type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}"{% if search_engine.name in blocked_engines %} checked="checked"{% endif %} />
+                        <label class="allow" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Allow') }}</label>
+                        <label class="deny" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Block') }}</label>
+                    </td>
+                </tr>
+                {% endif %}
+            {% endfor %}
         {% endfor %}
-    {% endfor %}
-    </table>
+        </table>
     </fieldset>
     <p class="small_font">{{ _('These settings are stored in your cookies, this allows us not to store this data about you.') }}
-    <br />
-    {{ _("These cookies serve your sole convenience, we don't use these cookies to track you.") }}
+        <br />
+        {{ _("These cookies serve your sole convenience, we don't use these cookies to track you.") }}
     </p>
 
     <input type="submit" value="{{ _('save') }}" />
-	<div class="right preferences_back"><a href="{{ url_for('index') }}">{{ _('back') }}</a></div>
+    <div class="right preferences_back"><a href="{{ url_for('index') }}">{{ _('back') }}</a></div>
     </form>    
 </div>
-{% endblock %}
+{% endblock %}

+ 6 - 6
searx/templates/courgette/result_templates/code.html

@@ -1,9 +1,9 @@
 <div class="result {{ result.class }}">
-    <h3 class="result_title"> {% if result['favicon'] %}<img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}" />{% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
-    <p class="url">{{ result.pretty_url }} <a class="cache_link" href="https://web.archive.org/web/{{ result.url }}">cached</a></p>
-    {% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
+    <h3 class="result_title">{% if result['favicon'] %}<img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}" />{% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+    {% if result.publishedDate %}<span class="published_date">{{ result.publishedDate }}</span>{% endif %}
     <p class="content">{% if result.img_src %}<img src="{{ result.img_src }}" class="image" />{% endif %}{% if result.content %}{{ result.content|safe }}<br class="last"/>{% endif %}</p>
-    {% if result.repository %}<p class="result-content"><a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %}
-
+    {% if result.repository %}<p class="content"><a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %}
     {{ result.codelines|code_highlighter(result.code_language)|safe }}
-</div>
+
+    <p class="url">{{ result.pretty_url }}</p>
+</div>

+ 9 - 9
searx/templates/courgette/result_templates/default.html

@@ -1,13 +1,13 @@
 <div class="result {{ result.class }}">
 
-  {% if "icon_"~result.engine~".ico" in favicons %}
+    {% if "icon_"~result.engine~".ico" in favicons %}
     <img width="14" height="14" class="favicon" src="{{ url_for('static', filename='img/icons/icon_'+result.engine+'.ico') }}" alt="{{result.engine}}" />
-  {% endif %}
+    {% endif %}
 
-  <div>
-    <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
-	{% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
-    <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
-    <p class="url">{{ result.pretty_url }}</p>
-  </div>
-</div>
+    <div>
+        <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+        {% if result.publishedDate %}<span class="published_date">{{ result.publishedDate }}</span>{% endif %}
+        <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
+        <p class="url">{{ result.pretty_url }}</p>
+    </div>
+</div>

+ 2 - 2
searx/templates/courgette/result_templates/images.html

@@ -1,6 +1,6 @@
 <div class="image_result">
     <p>
         <a href="{{ result.img_src }}"><img src="{{ result.img_src }}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}"/></a>
-        <span class="url"><a href="{{ result.url }}" class="small_font">original context</a></span>
+        <span class="url"><a href="{{ result.url }}" class="small_font">{{ _('original context') }}</a></span>
     </p>
-</div>
+</div>

+ 10 - 10
searx/templates/courgette/result_templates/map.html

@@ -1,13 +1,13 @@
 <div class="result {{ result.class }}">
 
-  {% if "icon_"~result.engine~".ico" in favicons %}
-  <img width="14" height="14" class="favicon" src="{{ url_for('static', filename='img/icons/icon_'+result.engine+'.ico') }}" alt="{{result.engine}}" />
-  {% endif %}
+    {% if "icon_"~result.engine~".ico" in favicons %}
+    <img width="14" height="14" class="favicon" src="{{ url_for('static', filename='img/icons/icon_'+result.engine+'.ico') }}" alt="{{result.engine}}" />
+    {% endif %}
 
-  <div>
-    <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
-	{% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
-    <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
-    <p class="url">{{ result.pretty_url }}</p>
-  </div>
-</div>
+    <div>
+        <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+        {% if result.publishedDate %}<span class="published_date">{{ result.publishedDate }}</span>{% endif %}
+        <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
+        <p class="url">{{ result.pretty_url }}</p>
+    </div>
+</div>

+ 10 - 4
searx/templates/courgette/result_templates/torrent.html

@@ -1,7 +1,13 @@
 <div class="result torrent_result">
+    {% if "icon_"~result.engine~".ico" in favicons %}
+    <img width="14" height="14" class="favicon" src="{{ url_for('static', filename='img/icons/icon_'+result.engine+'.ico') }}" alt="{{result.engine}}" />
+    {% endif %}
     <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
-    {% if result.content %}<p class="content">{{ result.content|safe }}</p>{% endif %}
-    <p class="stats">Seed: {{ result.seed }}, Leech: {{ result.leech }}</p>
-    <p><a href="{{ result.magnetlink }}" class="magnetlink">magnet link</a></p>
+    {% if result.content %}<span class="content">{{ result.content|safe }}</span><br />{% endif %}
+    <span class="stats">{{ _('Seeder') }} : {{ result.seed }}, {{ _('Leecher') }} : {{ result.leech }}</span><br />
+    <span>
+        {% if result.magnetlink %}<a href="{{ result.magnetlink }}" class="magnetlink">{{ _('magnet link') }}</a>{% endif %} 
+        {% if result.torrentfile %}<a href="{{ result.torrentfile }}" class="torrentfile">{{ _('torrent file') }}</a>{% endif %}
+    </span>
     <p class="url">{{ result.pretty_url }}</p>
-</div>
+</div>

+ 8 - 8
searx/templates/courgette/result_templates/videos.html

@@ -1,10 +1,10 @@
 <div class="result">
-  {% if "icon_"~result.engine~".ico" in favicons %}
-      <img width="14" height="14" class="favicon" src="{{ url_for('static', filename='img/icons/icon_'+result.engine+'.ico') }}" alt="{{result.engine}}" />
-  {% endif %}
+	{% if "icon_"~result.engine~".ico" in favicons %}
+    <img width="14" height="14" class="favicon" src="{{ url_for('static', filename='img/icons/icon_'+result.engine+'.ico') }}" alt="{{result.engine}}" />
+	{% endif %}
 
-      <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
-      {% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
-      <a href="{{ result.url }}"><img width="400" src="{{ result.thumbnail }}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}"/></a>
-      <p class="url">{{ result.url }}</p>
-</div>
+    <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
+    {% if result.publishedDate %}<span class="published_date">{{ result.publishedDate }}</span><br />{% endif %}
+    <a href="{{ result.url }}"><img width="400" src="{{ result.thumbnail }}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}"/></a>
+    <p class="url">{{ result.pretty_url }}</p>
+</div>

+ 38 - 29
searx/templates/courgette/results.html

@@ -1,9 +1,10 @@
-{% extends "default/base.html" %}
+{% extends "courgette/base.html" %}
 {% block title %}{{ q }} - {% endblock %}
+{% block meta %}<link rel="alternate" type="application/rss+xml" title="Searx search: {{ q }}" href="{{ url_for('index') }}?q={{ q|urlencode }}&amp;format=rss&amp;{% for category in selected_categories %}category_{{ category }}=1&amp;{% endfor %}pageno={{ pageno }}">{% endblock %}
 {% block content %}
-<div class="right"><a href="{{ url_for('preferences') }}" id="preferences"><span>preferences</span></a></div>
+<div class="right"><a href="{{ url_for('preferences') }}" id="preferences"><span>{{ _('preferences') }}</span></a></div>
 <div class="small search center">
-    {% include 'default/search.html' %}
+    {% include 'courgette/search.html' %}
 </div>
 <div id="results">
     <div id="sidebar">
@@ -13,22 +14,30 @@
             <input type="text" value="{{ base_url }}?q={{ q|urlencode }}&amp;pageno={{ pageno }}{% if selected_categories %}&amp;category_{{ selected_categories|join("&category_")|replace(' ','+') }}{% endif %}" readonly />
         </div>
         <div id="apis">
-        {{ _('Download results') }}
-        {% for output_type in ('csv', 'json', 'rss') %}
-        <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
-            <div class="left">
-            <input type="hidden" name="q" value="{{ q }}" />
-            <input type="hidden" name="format" value="{{ output_type }}" />
-            {% for category in selected_categories %}
-            <input type="hidden" name="category_{{ category }}" value="1"/>
+            {{ _('Download results') }}
+            {% for output_type in ('csv', 'json', 'rss') %}
+            <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
+                <div class="left">
+                    <input type="hidden" name="q" value="{{ q }}" />
+                    <input type="hidden" name="format" value="{{ output_type }}" />
+                    {% for category in selected_categories %}
+                    <input type="hidden" name="category_{{ category }}" value="1"/>
+                    {% endfor %}
+                    <input type="hidden" name="pageno" value="{{ pageno }}" />
+                    <input type="submit" value="{{ output_type }}" />
+                </div>
+            </form>
             {% endfor %}
-            <input type="hidden" name="pageno" value="{{ pageno }}" />
-            <input type="submit" value="{{ output_type }}" />
-            </div>
-        </form>
-        {% endfor %}
         </div>
     </div>
+    
+    {% if answers %}
+    <div id="answers" class=""><span>{{ _('Answers') }}</span>
+        {% for answer in answers %}
+        <span>{{ answer }}</span>
+        {% endfor %}
+    </div>
+    {% endif %}
 
     {% if suggestions %}
     <div id="suggestions"><span>{{ _('Suggestions') }}</span>
@@ -54,26 +63,26 @@
         {% if pageno > 1 %}
             <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
                 <div class="left">
-                <input type="hidden" name="q" value="{{ q }}" />
-                {% for category in selected_categories %}
-                <input type="hidden" name="category_{{ category }}" value="1"/>
-                {% endfor %}
-                <input type="hidden" name="pageno" value="{{ pageno-1 }}" />
-                <input type="submit" value="<< {{ _('previous page') }}" />
+                    <input type="hidden" name="q" value="{{ q }}" />
+                    {% for category in selected_categories %}
+                    <input type="hidden" name="category_{{ category }}" value="1"/>
+                    {% endfor %}
+                    <input type="hidden" name="pageno" value="{{ pageno-1 }}" />
+                    <input type="submit" value="<< {{ _('previous page') }}" />
                 </div>
             </form>
         {% endif %}
         <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
             <div class="left">
-            {% for category in selected_categories %}
-            <input type="hidden" name="category_{{ category }}" value="1"/>
-            {% endfor %}
-            <input type="hidden" name="q" value="{{ q }}" />
-            <input type="hidden" name="pageno" value="{{ pageno+1 }}" />
-            <input type="submit" value="{{ _('next page') }} >>" />
+                {% for category in selected_categories %}
+                <input type="hidden" name="category_{{ category }}" value="1"/>
+                {% endfor %}
+                <input type="hidden" name="q" value="{{ q }}" />
+                <input type="hidden" name="pageno" value="{{ pageno+1 }}" />
+                <input type="submit" value="{{ _('next page') }} >>" />
             </div>
         </form>
     </div>
     {% endif %}
 </div>
-{% endblock %}
+{% endblock %}

+ 6 - 6
searx/templates/courgette/search.html

@@ -1,7 +1,7 @@
 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" id="search_form">
-  <div id="search_wrapper">
-    <input type="text" placeholder="{{ _('Search for...') }}" id="q" class="q" name="q" tabindex="1" autocomplete="off" {% if q %}value="{{ q }}"{% endif %}/>
-    <input type="submit" value="search" id="search_submit" />
-  </div>
-  {% include 'default/categories.html' %}
-</form>
+    <div id="search_wrapper">
+        <input type="text" placeholder="{{ _('Search for...') }}" id="q" class="q" name="q" tabindex="1" autocomplete="off" {% if q %}value="{{ q }}"{% endif %}/>
+        <input type="submit" value="search" id="search_submit" />
+    </div>
+    {% include 'courgette/categories.html' %}
+</form>

+ 4 - 4
searx/templates/courgette/stats.html

@@ -1,4 +1,4 @@
-{% extends "default/base.html" %}
+{% extends "courgette/base.html" %}
 {% block head %} {% endblock %}
 {% block content %}
 <h2>{{ _('Engine stats') }}</h2>
@@ -6,8 +6,8 @@
 {% for stat_name,stat_category in stats %}
 <div class="left">
     <table>
-        <tr colspan="3">
-            <th>{{ stat_name }}</th>
+        <tr>
+            <th colspan="3">{{ stat_name }}</th>
         </tr>
         {% for engine in stat_category %}
         <tr>
@@ -19,4 +19,4 @@
     </table>
 </div>
 {% endfor %}
-{% endblock %}
+{% endblock %}

Some files were not shown because too many files changed in this diff