logo

searx

Unnamed repository; edit this file 'description' to name the repository.
commit: 9dc6bb56ca218579f9a1dc2e47bcf6634ed27c9f
parent: 3a7bbb1b5f50f5b2d569f892b00c3ee7fdbb852e
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Thu, 17 Aug 2017 19:52:43 +0200

Update lol

Diffstat:

searx/engines/piratebay.py | 4++--
searx/static/themes/simple/css/searx.min.css | 122+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
searx/static/themes/simple/img/favicon.png | 0
searx/static/themes/simple/img/searx_logo.svg | 225+++++++++----------------------------------------------------------------------
searx/templates/simple/base.html | 2++
searx/templates/simple/index.html | 4----
searx/templates/simple/preferences.html | 7++-----
searx/templates/simple/result_templates/images.html | 5+++--
searx/templates/simple/result_templates/videos.html | 20+++++---------------
searx/templates/simple/results.html | 7+++----
searx/templates/simple/search.html | 2+-
searx/templates/simple/stats.html | 5+----
12 files changed, 156 insertions(+), 247 deletions(-)

diff --git a/searx/engines/piratebay.py b/searx/engines/piratebay.py @@ -1,6 +1,6 @@ # Piratebay (Videos, Music, Files) # -# @website https://thepiratebay.se +# @website https://thepiratebay.org/ # @provide-api no (nothing found) # # @using-api no @@ -18,7 +18,7 @@ categories = ['videos', 'music', 'files'] paging = True # search-url -url = 'https://thepiratebay.se/' +url = 'https://thepiratebay.org/' search_url = url + 'search/{search_term}/{pageno}/99/{search_type}' # piratebay specific type-definitions diff --git a/searx/static/themes/simple/css/searx.min.css b/searx/static/themes/simple/css/searx.min.css @@ -1,24 +1,76 @@ +html, body { + background-color: #002b36; + color: #839496; +} +main, #main, #search, #main_results { + display: table; + margin: auto; +} +#results { + display: table; + margin-left: auto; +} +code, pre { + font-family: monospace; + background: #073642; + word-break: break-all; + word-wrap: break-word; +} +nav { + font-size: x-large; + position: absolute; +} header { text-align: center; font-size: xx-large; color: #3498DB; + margin: .5em; + font-weight: bold; } -main { - margin: auto; - display: table; +nav a, header a { + text-decoration: none; } +input, button, select { + padding: .10em .25em; + margin: 0; + border: 0; + border-radius: .25em; + background: #073642; + color: unset; + display: inline-table; +} +input[type=submit], button { + cursor: pointer; +} +a { + color: #3498DB; +} +p { + max-width: 80em; + margin: 0; +} +#sidebar { + float: right; + min-width: 25ch; +} + #categories div { display: inline-block; } categories_container, #search_main, #search_filters { display: flex; } -#categories input {display: none;} -#categories input:checked + label { + +.highlight { + text-decoration-line: underline; +} + +.tabs input[type=radio], #categories input {display: none;} +.tabs input[type=radio]:checked + label, #categories input:checked + label { background: #3498DB; color: #000; } -#categories label { +.tabs label, #categories label { padding: 0 1em; } @@ -26,23 +78,75 @@ categories_container, #search_main, #search_filters { display: inline-block; } +.engines, .url { + display: inline-block; +} + +.engines span, .url a, .url span { + margin: 0 .25em; +} +.left { + float: left; +} + /*images*/ -.result-images { +.result-images, .result-videos { display: inline-block; position: relative; + vertical-align: middle; +} +.result-images img, .result-videos img { + min-width: 5em; + min-height: 5em; + max-width: 250px; + max-height: 250px; } img { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAAAAACoWZBhAAAABGdBTUEAALGPC/xhBQAAAAJiS0dEAP+Hj8y/AAAAB3RJTUUH3wwIAAgyL/YaPAAAACJJREFUCFtjfMbOAAQ/gZiFnQPEBAEmGIMIJgtIL8QEgtoAIn4D/96X1KAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDhUMDA6MDg6NTArMDM6MDAasuuJAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTEyLTA4VDAwOjA4OjUwKzAzOjAwa+9TNQAAAABJRU5ErkJggg==") repeat scroll #fff; /* taken from uMatrix */ } -.result-images span a { +.result-images span a, .result-videos span a { display: none; color: #FFF; position: absolute; bottom: 0; right: 0; } -.result-images:hover span a { +.result-images:hover span a, .result-videos:hover span a { display: block; padding: .25em; background-color: rgba(0,0,0,.6); +} + +.category-social img { + float: left; + margin: .5em; +} +.category-social { + display: table; +} +.category-social h3 { + margin: 0; +} + +/* Preferences */ +.tabs { + display: flex; + flex-wrap: wrap; + width: 100%; + min-width: 100%; +} +.tabs > * { order: 2; } +.tabs > label { + order: 1; + border-bottom: 2px solid #084999; +} +.tabs > section { + display: none; + min-width: 100%; +} +.tabs > input:checked + label + section { + display: unset; +} +.tabs>input:checked~section { + display: none; } \ No newline at end of file diff --git a/searx/static/themes/simple/img/favicon.png b/searx/static/themes/simple/img/favicon.png Binary files differ. diff --git a/searx/static/themes/simple/img/searx_logo.svg b/searx/static/themes/simple/img/searx_logo.svg @@ -1,203 +1,26 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="744.09448819" - height="1052.3622047" - id="svg2" - version="1.1" - inkscape:version="0.48.4 r9939" - sodipodi:docname="searx_logo.svg" - inkscape:export-filename="/home/a/magnif.png" - inkscape:export-xdpi="203.1774" - inkscape:export-ydpi="203.1774"> - <defs - id="defs4"> - <linearGradient - inkscape:collect="always" - id="linearGradient3857"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop3859" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop3861" /> - </linearGradient> - <linearGradient - id="linearGradient3790"> - <stop - style="stop-color:#a9a9a9;stop-opacity:1;" - offset="0" - id="stop3792" /> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="1" - id="stop3794" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3790" - id="radialGradient3798" - cx="294.45947" - cy="208.37973" - fx="294.45947" - fy="208.37973" - r="107.58125" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3857" - id="linearGradient3865" - x1="120.68947" - y1="239.61774" - x2="120.68947" - y2="602.17517" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3790" - id="linearGradient3912" - x1="186.74416" - y1="354.42426" - x2="255.84358" - y2="254.35953" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1.2227304,0,0,0.89945099,-289.31433,113.40259)" /> - <filter - inkscape:collect="always" - id="filter4024" - x="-0.12996517" - width="1.2599303" - y="-0.14709377" - height="1.2941875"> - <feGaussianBlur - inkscape:collect="always" - stdDeviation="6.4759344" - id="feGaussianBlur4026" /> - </filter> - <filter - inkscape:collect="always" - id="filter3983" - x="-1.0608404" - width="3.1216809" - y="-0.31017202" - height="1.620344"> - <feGaussianBlur - inkscape:collect="always" - stdDeviation="9.392858" - id="feGaussianBlur3985" /> - </filter> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="1.979899" - inkscape:cx="30.708726" - inkscape:cy="948.08556" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1364" - inkscape:window-height="663" - inkscape:window-x="0" - inkscape:window-y="30" - inkscape:window-maximized="0" - showguides="true" - inkscape:guide-bbox="true" /> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1"> - <path - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" - d="m 70.523181,34.870671 c -7.11959,15.242893 -10.17798,31.779192 -8.22563,48.814566 5.01677,43.774133 41.675309,79.324503 91.536109,95.162893 -6.62576,-22.40752 -5.34093,-44.9362 2.6395,-65.84431 C 108.73618,98.821131 74.828141,70.195435 70.523181,34.870671 z" - id="path3814-0-7" - inkscape:connector-curvature="0" /> - <path - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" - d="m 303.77876,36.21406 c 7.11959,15.242893 10.17798,31.779192 8.22563,48.814566 -5.01677,43.774134 -41.67531,79.324504 -91.53611,95.162894 6.62576,-22.40752 5.34093,-44.9362 -2.6395,-65.84431 47.73698,-14.18269 81.64502,-42.808386 85.94998,-78.13315 z" - id="path3814-0" - inkscape:connector-curvature="0" /> - <path - transform="matrix(0.6556593,-0.75505688,0.75505688,0.6556593,0,0)" - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" - d="m -5.0905523,259.06055 18.4167573,0 c 6.220455,0 11.228257,16.68196 11.228257,37.40349 l 0,172.83701 c 0,20.72153 -5.007802,37.40349 -11.228257,37.40349 l -18.4167573,0 c -6.2204547,0 -11.2282577,-16.68196 -11.2282577,-37.40349 l 0,-172.83701 c 0,-20.72153 5.007803,-37.40349 11.2282577,-37.40349 z" - id="rect3804" /> - <path - sodipodi:type="arc" - style="fill:url(#radialGradient3798);fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path2987" - sodipodi:cx="294.45947" - sodipodi:cy="208.37973" - sodipodi:rx="107.58125" - sodipodi:ry="107.58125" - d="m 402.04073,208.37973 a 107.58125,107.58125 0 1 1 -215.16251,0 107.58125,107.58125 0 1 1 215.16251,0 z" - transform="translate(-107.07617,-60.609153)" /> - <path - sodipodi:type="arc" - style="fill:url(#linearGradient3865);fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path3757" - sodipodi:cx="131.82491" - sodipodi:cy="299.29346" - sodipodi:rx="101.52033" - sodipodi:ry="101.52033" - d="m 233.34524,299.29346 a 101.52033,101.52033 0 1 1 -203.040667,0 101.52033,101.52033 0 1 1 203.040667,0 z" - transform="matrix(0.76865672,0,0,0.76865672,85.80266,-82.535889)" /> - <path - sodipodi:type="arc" - style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path3800" - sodipodi:cx="183.34268" - sodipodi:cy="156.35687" - sodipodi:rx="27.274118" - sodipodi:ry="27.274118" - d="m 210.6168,156.35687 a 27.274118,27.274118 0 1 1 -54.54824,0 27.274118,27.274118 0 1 1 54.54824,0 z" - transform="translate(5,-7.1428572)" /> - <path - sodipodi:type="arc" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path3802" - sodipodi:cx="197.9899" - sodipodi:cy="203.32896" - sodipodi:rx="5.5558391" - sodipodi:ry="5.5558391" - d="m 203.54574,203.32896 a 5.5558391,5.5558391 0 1 1 -11.11168,0 5.5558391,5.5558391 0 1 1 11.11168,0 z" - transform="translate(1.4847712,-63.564549)" /> - <rect - style="fill:#ffffff;fill-opacity:0.82211531000000004;fill-rule:nonzero;stroke:none;filter:url(#filter4024)" - id="rect3916" - width="2.2392972" - height="159.43797" - x="19.525793" - y="337.8396" - rx="2.8666623" - ry="9.0007057" - transform="matrix(0.74466525,-0.84318084,0.84318084,0.74466525,-35.543204,-26.349917)" /> - </g> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="380" width="380" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <defs> + <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="208.38" cx="294.46" r="107.58"> + <stop style="stop-color:#a9a9a9" offset="0"/> + <stop offset="1"/> + </radialGradient> + <linearGradient id="b" y2="602.18" gradientUnits="userSpaceOnUse" x2="120.69" y1="239.62" x1="120.69"> + <stop style="stop-color:#fff" offset="0"/> + <stop style="stop-color:#fff;stop-opacity:0" offset="1"/> + </linearGradient> + <filter id="c" height="1.2942" width="1.2599" y="-.14709" x="-.12997"> + <feGaussianBlur stdDeviation="6.4759344"/> + </filter> + </defs> + <g transform="translate(-50.835 -.036159)"> + <path style="fill:#800000" d="m70.523 34.871c-7.1196 15.243-10.178 31.779-8.2256 48.815 5.0168 43.774 41.675 79.325 91.536 95.163-6.6258-22.408-5.3409-44.936 2.6395-65.844-47.73-14.189-81.642-42.815-85.947-78.139z"/> + <path style="fill:#800000" d="m303.78 36.214c7.1196 15.243 10.178 31.779 8.2256 48.815-5.0168 43.774-41.675 79.325-91.536 95.163 6.6258-22.408 5.3409-44.936-2.6395-65.844 47.737-14.183 81.645-42.808 85.95-78.133z"/> + <path transform="rotate(-49.031)" d="m-5.0906 259.06h18.417c6.2205 0 11.228 16.682 11.228 37.403v172.84c0 20.722-5.0078 37.403-11.228 37.403h-18.417c-6.2205 0-11.228-16.682-11.228-37.403v-172.84c0-20.722 5.0078-37.403 11.228-37.403z"/> + <circle style="fill:url(#a)" cx="294.46" transform="translate(-107.08 -60.609)" cy="208.38" r="107.58"/> + <circle style="fill:url(#b)" cx="131.82" transform="matrix(.76866 0 0 .76866 85.803 -82.536)" cy="299.29" r="101.52"/> + <circle style="fill:#800000" cx="183.34" transform="translate(5 -7.1429)" cy="156.36" r="27.274"/> + <circle style="fill:#fff" cx="197.99" transform="translate(1.4848 -63.565)" cy="203.33" r="5.5558"/> + <rect style="filter:url(#c);fill:#fff;fill-opacity:.82212" transform="matrix(.74467 -.84318 .84318 .74467 -35.543 -26.35)" rx="2.8667" ry="9.0007" height="159.44" width="2.2393" y="337.84" x="19.526"/> + </g> </svg> diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html @@ -36,6 +36,8 @@ </script> </head> <body> + <nav id="linkto_preferences"><a href="{{ url_for('index') }}">🏠</a><a href="{{ url_for('preferences') }}">⚙</a> <a href="{{ url_for('stats') }}">📈</a></nav> + <header><a href="{{ url_for('index') }}">searx</a></header> <main id="main_{{ self._TemplateReference__context.name|replace("simple/", "")|replace(".html", "") }}"> {% if errors %} <div class="dialog-error" role="alert"> diff --git a/searx/templates/simple/index.html b/searx/templates/simple/index.html @@ -1,8 +1,4 @@ {% extends "simple/base.html" %} -{% from 'simple/macros.html' import icon %} -<nav id="linkto_preferences"><a href="{{ url_for('preferences') }}">{{ icon('navicon-round') }}</a></nav> -<nav><a href="/preferences">⚙</a></nav> -<header><h1>searx</h1></header> {% block content %} {% include 'simple/search.html' %} {% endblock %} diff --git a/searx/templates/simple/preferences.html b/searx/templates/simple/preferences.html @@ -21,8 +21,6 @@ {% block head %} {% endblock %} {% block content %} -<a href="{{ url_for('index') }}"><h1><span>searx</span></h1></a> - <h2>{{ _('Preferences') }}</h2> <form id="search_form" method="post" action="{{ url_for('preferences') }}"> @@ -183,8 +181,7 @@ </p> <input type="submit" value="{{ _('save') }}" /> - <div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('clear_cookies') }}">{{ _('Reset defaults') }}</a></div> - <div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('index') }}">{{ _('back') }}</a></div> - + <a href="{{ url_for('clear_cookies') }}"><button>{{ _('Reset defaults') }}</button></a> + <a href="{{ url_for('index') }}"><button>{{ _('back') }}</button></a> </form> {% endblock %} diff --git a/searx/templates/simple/result_templates/images.html b/searx/templates/simple/result_templates/images.html @@ -1,4 +1,5 @@ +{% from 'simple/macros.html' import result_open_link, result_close_link, result_link %} <article class="result result-images {% if result['category'] %}category-{{ result['category'] }}{% endif %}"> - <a href="{{ result.img_src }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %}><img class="image_thumbnail" src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}" /></a> - <span class="url"><a href="{{ result.url }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} class="small_font">{{ result.parsed_url[0] }}://{{ result.parsed_url[1] }}</a></span> + {{ result_open_link(result.url) }}<img class="thumbnail" src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}"/>{{ result_close_link() }} + <span class="url">{{ result_link(result.url, result.title|safe) }}</span> </article> diff --git a/searx/templates/simple/result_templates/videos.html b/searx/templates/simple/result_templates/videos.html @@ -1,15 +1,5 @@ -{% from 'simple/macros.html' import result_header, result_sub_header, result_sub_footer, result_footer, result_footer_rtl %} - -{{ result_header(result, favicons, image_proxify) }} -{{ result_sub_header(result) }} -{% if result.embedded -%} -<p class="altlink"> &bull; <a class="btn-collapse collapsed media-loader disabled_if_nojs" data-target="#result-video-{{ index }}" data-btn-text-collapsed="{{ _('show video') }}" data-btn-text-not-collapsed="{{ _('hide video') }}">{{ icon('film-outline') }} {{ _('show video') }}</a></p> -{%- endif %} -{% if result.content %}<p class="content">{{ result.content|safe }}</p>{% endif %} -{{- result_sub_footer(result, proxify) -}} -{% if result.embedded -%} -<div id="result-video-{{ index }}" class="invisible"> - {{- result.embedded|safe -}} -</div> -{%- endif %} -{{ result_footer(result) }} +{% from 'simple/macros.html' import result_open_link, result_close_link, result_link %} +<article class="result {% if result['template'] %}result-{{ result.template|replace('.html', '') }}{% else %}result-default{% endif %} {% if result['category'] %}category-{{ result['category'] }}{% endif %}"> + {{ result_open_link(result.url) }}<img class="thumbnail" src="{{ image_proxify(result.thumbnail) }}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}"/>{{ result_close_link() }} + <span class="url">{{ result_link(result.url, result.title|safe) }}</span> +</article> diff --git a/searx/templates/simple/results.html b/searx/templates/simple/results.html @@ -17,7 +17,7 @@ <div id="sidebar"> {% if number_of_results != '0' -%} - <p id="result_count"><small>{{ _('Number of results') }}: {{ number_of_results }}</small></p> + <p id="result_count">{{ _('Number of results') }}: {{ number_of_results }}</p> {%- endif %} {% if unresponsive_engines and results|length >= 1 %} @@ -47,7 +47,7 @@ <input type="hidden" name="language" value="{{ current_language }}"> <input type="hidden" name="safesearch" value="{{ safesearch }}"> <input type="hidden" name="theme" value="{{ theme }}"> - <input type="submit" class="suggestion" value="&bull; {{ suggestion }}"> + <input type="submit" class="suggestion" value="{{ suggestion }}"> </form> {% endfor %} </div> @@ -55,8 +55,7 @@ {% endif %} <div id="search_url"> - <h4 class="title">{{ _('Search URL') }} :</h4> - <div><pre>{{ base_url }}?q={{ q|urlencode }}&amp;language={{ current_language }}&amp;time_range={{ time_range }}&amp;safesearch={{ safesearch }}{% if pageno > 1 %}&amp;pageno={{ pageno }}{% endif %}{% if selected_categories %}&amp;categories={{ selected_categories|join(",") | replace(' ','+') }}{% endif %}</pre></div> + <h4 class="title"><a href="{{ base_url }}?q={{ q|urlencode }}&amp;language={{ current_language }}&amp;time_range={{ time_range }}&amp;safesearch={{ safesearch }}{% if pageno > 1 %}&amp;pageno={{ pageno }}{% endif %}{% if selected_categories %}&amp;categories={{ selected_categories|join(",") | replace(' ','+') }}{% endif %}">search url</a></h4> </div> <div id="apis"> <h4 class="title">{{ _('Download results') }}</h4> diff --git a/searx/templates/simple/search.html b/searx/templates/simple/search.html @@ -6,7 +6,7 @@ <option value="1">Moderate</option> <option value="2">Strict</option> </select> - <button id="send_search" type="submit" tabindex="-1"><span class="hide_if_nojs">{{ icon('search') }}</span><span class="show_if_nojs">{{ _('Start search') }}</span></button> + <button id="send_search" type="submit">🔍</button> </div> <div class="search_filters"> {% include 'simple/languages.html' %} diff --git a/searx/templates/simple/stats.html b/searx/templates/simple/stats.html @@ -1,9 +1,6 @@ {% extends "simple/base.html" %} {% block head %} {% endblock %} {% block content %} - -<a href="{{ url_for('index') }}"><h1><span>searx</span></h1></a> - <h2>{{ _('Engine stats') }}</h2> {% for stat_name,stat_category in stats %} @@ -16,7 +13,7 @@ <tr> <td>{{ engine.name }}</td> <td>{{ '%.02f'|format(engine.avg) }}</td> - <td class="percentage"><div style="width: {{ engine.percentage }}%">&nbsp;</div></td> + <td><meter max="100" value="{{ engine.percentage }}">{{ engine.percentage }}</meter></td> </tr> {% endfor %} </table>