diff --git a/manage.sh b/manage.sh index 7279eaf39..dbe48d31d 100755 --- a/manage.sh +++ b/manage.sh @@ -152,6 +152,8 @@ styles() { } grunt_build() { + npm_path_setup + echo '[!] Grunt build : oscar theme' grunt --gruntfile "$SEARX_DIR/static/themes/oscar/gruntfile.js" echo '[!] Grunt build : simple theme' @@ -243,7 +245,7 @@ Commands update_packages - Check & update production dependency changes update_dev_packages - Check & update development and production dependency changes install_geckodriver - Download & install geckodriver if not already installed (required for robot_tests) - npm_packages - Download & install npm dependencies (source manage.sh to update the PATH) + npm_packages - Download & install npm dependencies Build ----- diff --git a/searx/static/themes/oscar/css/logicodev-dark.css b/searx/static/themes/oscar/css/logicodev-dark.css new file mode 100644 index 000000000..07f422f8e --- /dev/null +++ b/searx/static/themes/oscar/css/logicodev-dark.css @@ -0,0 +1,732 @@ +.searx-navbar { + background: #29314d; + height: 2.3rem; + font-size: 1.3rem; + line-height: 1.3rem; + padding: 0.5rem; + font-weight: bold; + margin-bottom: 0.8rem; +} +.searx-navbar a, +.searx-navbar a:hover { + margin-right: 2.0rem; + color: white; + text-decoration: none; +} +.searx-navbar .instance a { + color: #01d7d4; + margin-left: 2.0rem; +} +#main-logo { + margin-top: 20vh; + margin-bottom: 25px; +} +#main-logo > img { + max-width: 350px; + width: 80%; +} +* { + border-radius: 0 !important; +} +html { + position: relative; + min-height: 100%; + color: #29314d; +} +body { + /* Margin bottom by footer height */ + font-family: 'Roboto', Helvetica, Arial, sans-serif; + margin-bottom: 80px; + background-color: white; +} +body a { + color: #0088cc; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + height: 60px; + text-align: center; + color: #999; +} +input[type=checkbox]:checked + .label_hide_if_checked, +input[type=checkbox]:checked + .label_hide_if_not_checked + .label_hide_if_checked { + display: none; +} +input[type=checkbox]:not(:checked) + .label_hide_if_not_checked, +input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not_checked { + display: none; +} +.onoff-checkbox { + width: 15%; +} +.onoffswitch { + position: relative; + width: 110px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +.onoffswitch-checkbox { + display: none; +} +.onoffswitch-label { + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #FFFFFF !important; + border-radius: 50px !important; +} +.onoffswitch-inner { + display: block; + transition: margin 0.3s ease-in 0s; +} +.onoffswitch-inner:before, +.onoffswitch-inner:after { + display: block; + float: left; + width: 50%; + height: 30px; + padding: 0; + line-height: 40px; + font-size: 20px; + box-sizing: border-box; + content: ""; + background-color: #EEEEEE; +} +.onoffswitch-switch { + display: block; + width: 37px; + background-color: #01d7d4; + position: absolute; + top: 0; + bottom: 0; + right: 0px; + border: 2px solid #FFFFFF !important; + border-radius: 50px !important; + transition: all 0.3s ease-in 0s; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { + margin-right: 0; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { + right: 71px; + background-color: #A1A1A1; +} +.result_header { + margin-top: 0px; + margin-bottom: 2px; + font-size: 16px; +} +.result_header .favicon { + margin-bottom: -3px; +} +.result_header a { + color: #29314d; + text-decoration: none; +} +.result_header a:hover { + color: #0088cc; +} +.result_header a:visited { + color: #684898; +} +.result_header a .highlight { + background-color: #f6f9fa; +} +.result-content, +.result-format, +.result-source { + margin-top: 2px; + margin-bottom: 0; + word-wrap: break-word; + color: #666666; + font-size: 13px; +} +.result-content .highlight, +.result-format .highlight, +.result-source .highlight { + font-weight: bold; +} +.result-source { + font-size: 10px; + float: left; +} +.result-format { + font-size: 10px; + float: right; +} +.external-link { + color: #069025; + font-size: 12px; + margin-bottom: 15px; +} +.external-link a { + margin-right: 3px; +} +.result-default, +.result-code, +.result-torrent, +.result-videos, +.result-map { + clear: both; + padding: 2px 4px; +} +.result-default:hover, +.result-code:hover, +.result-torrent:hover, +.result-videos:hover, +.result-map:hover { + background-color: #f6f9fa; +} +.result-images { + float: left !important; + width: 24%; + margin: .5%; +} +.result-images a { + display: block; + width: 100%; + background-size: cover; +} +.img-thumbnail { + margin: 5px; + max-height: 128px; + min-height: 128px; +} +.result-videos { + clear: both; +} +.result-videos hr { + margin: 5px 0 15px 0; +} +.result-videos .collapse { + width: 100%; +} +.result-videos .in { + margin-bottom: 8px; +} +.result-torrent { + clear: both; +} +.result-torrent b { + margin-right: 5px; + margin-left: 5px; +} +.result-torrent .seeders { + color: #2ecc71; +} +.result-torrent .leechers { + color: #f35e77; +} +.result-map { + clear: both; +} +.result-code { + clear: both; +} +.result-code .code-fork, +.result-code .code-fork a { + color: #666666; +} +.suggestion_item { + margin: 2px 5px; + max-width: 100%; +} +.suggestion_item .btn { + max-width: 100%; + white-space: normal; + word-wrap: break-word; + text-align: left; +} +.result_download { + margin-right: 5px; +} +#pagination { + margin-top: 30px; + padding-bottom: 60px; +} +.label-default { + color: #a4a4a4; + background: transparent; +} +.result .text-muted small { + word-wrap: break-word; +} +.modal-wrapper { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); +} +.modal-wrapper { + background-clip: padding-box; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + outline: 0 none; + position: relative; +} +.infobox .panel-heading { + background-color: #f6f9fa; +} +.infobox .panel-heading .panel-title { + font-weight: 700; +} +.infobox p { + font-family: "DejaVu Serif", Georgia, Cambria, "Times New Roman", Times, serif !important; + font-style: italic; +} +.infobox .btn { + background-color: #2ecc71; + border: none; +} +.infobox .btn a { + color: white; + margin: 5px; +} +.infobox .infobox_part { + margin-bottom: 20px; + word-wrap: break-word; + table-layout: fixed; +} +.infobox .infobox_part:last-child { + margin-bottom: 0; +} +.search_categories, +#categories { + text-transform: capitalize; + margin-bottom: 0.5rem; + display: flex; + flex-wrap: wrap; + flex-flow: row wrap; + align-content: stretch; +} +.search_categories label, +#categories label, +.search_categories .input-group-addon, +#categories .input-group-addon { + flex-grow: 1; + flex-basis: auto; + font-size: 1.2rem; + font-weight: normal; + background-color: white; + border: #dddddd 1px solid; + border-right: none; + color: #666666; + padding-bottom: 0.4rem; + padding-top: 0.4rem; + text-align: center; + min-width: 50px; +} +.search_categories label:last-child, +#categories label:last-child, +.search_categories .input-group-addon:last-child, +#categories .input-group-addon:last-child { + border-right: #dddddd 1px solid; +} +.search_categories input[type="checkbox"]:checked + label, +#categories input[type="checkbox"]:checked + label { + color: #29314d; + font-weight: bold; + border-bottom: #01d7d4 5px solid; +} +#main-logo { + margin-top: 10vh; + margin-bottom: 25px; +} +#main-logo > img { + max-width: 350px; + width: 80%; +} +#q { + box-shadow: none; + border-right: none; + border-color: #a4a4a4; +} +#search_form .input-group-btn .btn { + border-color: #a4a4a4; +} +#search_form .input-group-btn .btn:hover { + background-color: #2ecc71; + color: white; +} +.custom-select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + font-size: 1.2rem; + font-weight: normal; + background-color: white; + border: #dddddd 1px solid; + color: #666666; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAQAAACR313BAAAABGdBTUEAALGPC/xhBQAAACBjSFJN +AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ +cwAABFkAAARZAVnbJUkAAAAHdElNRQfgBxgLDwB20OFsAAAAbElEQVQY073OsQ3CMAAEwJMYwJGn +sAehpoXJItltBkmcdZBYgIIiQoLglnz3ui+eP+bk5uneteTMZJa6OJuIqvYzSJoqwqBq8gdmTTW8 +6/dghxAUq4xsVYT9laBYXCw93Aajh7GPEF23t4fkBYevGFTANkPRAAAAJXRFWHRkYXRlOmNyZWF0 +ZQAyMDE2LTA3LTI0VDExOjU1OjU4KzAyOjAwRFqFOQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0w +Ny0yNFQxMToxNTowMCswMjowMP7RDgQAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb +7jwaAAAAAElFTkSuQmCC) 96% no-repeat; +} +.search-margin { + margin-bottom: 0.6em; +} +#advanced-search-container { + display: none; + text-align: left; + margin-bottom: 1rem; + clear: both; +} +#advanced-search-container label, +#advanced-search-container .input-group-addon { + font-size: 1.2rem; + font-weight: normal; + background-color: white; + border: #dddddd 1px solid; + border-right: none; + color: #666666; + padding-bottom: 0.4rem; + padding-right: 0.7rem; + padding-left: 0.7rem; +} +#advanced-search-container label:last-child, +#advanced-search-container .input-group-addon:last-child { + border-right: #dddddd 1px solid; +} +#advanced-search-container input[type="radio"] { + display: none; +} +#advanced-search-container input[type="radio"]:checked + label { + color: #29314d; + font-weight: bold; + border-bottom: #01d7d4 5px solid; +} +#check-advanced { + display: none; +} +#check-advanced:checked ~ #advanced-search-container { + display: block; +} +.advanced { + padding: 0; + margin-top: 0.3rem; + text-align: right; +} +.advanced label, +.advanced select { + cursor: pointer; +} +.cursor-text { + cursor: text !important; +} +.cursor-pointer { + cursor: pointer !important; +} +pre, +code { + font-family: 'Ubuntu Mono', 'Courier New', 'Lucida Console', monospace !important; +} +.lineno { + margin-right: 5px; +} +.highlight .hll { + background-color: #ffffcc; +} +.highlight { + background: #f8f8f8; +} +.highlight .c { + color: #556366; + font-style: italic; +} +/* Comment */ +.highlight .err { + border: 1px solid #ffa92f; +} +/* Error */ +.highlight .k { + color: #BE74D5; + font-weight: bold; +} +/* Keyword */ +.highlight .o { + color: #d19a66; +} +/* Operator */ +.highlight .cm { + color: #556366; + font-style: italic; +} +/* Comment.Multiline */ +.highlight .cp { + color: #bc7a00; +} +/* Comment.Preproc */ +.highlight .c1 { + color: #556366; + font-style: italic; +} +/* Comment.Single */ +.highlight .cs { + color: #556366; + 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: #BE74D5; + font-weight: bold; +} +/* Keyword.Constant */ +.highlight .kd { + color: #BE74D5; + font-weight: bold; +} +/* Keyword.Declaration */ +.highlight .kn { + color: #BE74D5; + font-weight: bold; +} +/* Keyword.Namespace */ +.highlight .kp { + color: #be74d5; +} +/* Keyword.Pseudo */ +.highlight .kr { + color: #BE74D5; + font-weight: bold; +} +/* Keyword.Reserved */ +.highlight .kt { + color: #d46c72; +} +/* Keyword.Type */ +.highlight .m { + color: #d19a66; +} +/* Literal.Number */ +.highlight .s { + color: #86c372; +} +/* Literal.String */ +.highlight .na { + color: #7d9029; +} +/* Name.Attribute */ +.highlight .nb { + color: #be74d5; +} +/* Name.Builtin */ +.highlight .nc { + color: #61AFEF; + font-weight: bold; +} +/* Name.Class */ +.highlight .no { + color: #d19a66; +} +/* 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: #61afef; +} +/* Name.Function */ +.highlight .nl { + color: #a0a000; +} +/* Name.Label */ +.highlight .nn { + color: #61AFEF; + font-weight: bold; +} +/* Name.Namespace */ +.highlight .nt { + color: #BE74D5; + font-weight: bold; +} +/* Name.Tag */ +.highlight .nv { + color: #dfc06f; +} +/* Name.Variable */ +.highlight .ow { + color: #AA22FF; + font-weight: bold; +} +/* Operator.Word */ +.highlight .w { + color: #d7dae0; +} +/* Text.Whitespace */ +.highlight .mf { + color: #d19a66; +} +/* Literal.Number.Float */ +.highlight .mh { + color: #d19a66; +} +/* Literal.Number.Hex */ +.highlight .mi { + color: #d19a66; +} +/* Literal.Number.Integer */ +.highlight .mo { + color: #d19a66; +} +/* Literal.Number.Oct */ +.highlight .sb { + color: #86c372; +} +/* Literal.String.Backtick */ +.highlight .sc { + color: #86c372; +} +/* Literal.String.Char */ +.highlight .sd { + color: #86C372; + font-style: italic; +} +/* Literal.String.Doc */ +.highlight .s2 { + color: #86c372; +} +/* Literal.String.Double */ +.highlight .se { + color: #BB6622; + font-weight: bold; +} +/* Literal.String.Escape */ +.highlight .sh { + color: #86c372; +} +/* Literal.String.Heredoc */ +.highlight .si { + color: #BB6688; + font-weight: bold; +} +/* Literal.String.Interpol */ +.highlight .sx { + color: #be74d5; +} +/* Literal.String.Other */ +.highlight .sr { + color: #bb6688; +} +/* Literal.String.Regex */ +.highlight .s1 { + color: #86c372; +} +/* Literal.String.Single */ +.highlight .ss { + color: #dfc06f; +} +/* Literal.String.Symbol */ +.highlight .bp { + color: #be74d5; +} +/* Name.Builtin.Pseudo */ +.highlight .vc { + color: #dfc06f; +} +/* Name.Variable.Class */ +.highlight .vg { + color: #dfc06f; +} +/* Name.Variable.Global */ +.highlight .vi { + color: #dfc06f; +} +/* Name.Variable.Instance */ +.highlight .il { + color: #d19a66; +} +/* Literal.Number.Integer.Long */ +.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; + color: #556366; +} +.highlight .lineno::selection { + background: transparent; + /* WebKit/Blink Browsers */ +} +.highlight .lineno::-moz-selection { + background: transparent; + /* Gecko Browsers */ +} +.highlight pre { + background-color: #282C34; + color: #D7DAE0; + border: none; + margin-bottom: 25px; + font-size: 15px; + padding: 20px 10px; +} +.highlight { + font-weight: 700; +} +.table > tbody > tr > td, +.table > tbody > tr > th { + vertical-align: middle !important; +} diff --git a/searx/static/themes/oscar/css/logicodev.css b/searx/static/themes/oscar/css/logicodev.css new file mode 100644 index 000000000..5e78ac749 --- /dev/null +++ b/searx/static/themes/oscar/css/logicodev.css @@ -0,0 +1,931 @@ +* { + border-radius: 0 !important; +} +html { + position: relative; + min-height: 100%; + color: #29314d; +} +body { + /* Margin bottom by footer height */ + font-family: 'Roboto', Helvetica, Arial, sans-serif; + margin-bottom: 80px; + background-color: white; +} +body a { + color: #0088cc; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + height: 60px; + text-align: center; + color: #999; +} +input[type=checkbox]:checked + .label_hide_if_checked, +input[type=checkbox]:checked + .label_hide_if_not_checked + .label_hide_if_checked { + display: none; +} +input[type=checkbox]:not(:checked) + .label_hide_if_not_checked, +input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not_checked { + display: none; +} +.onoff-checkbox { + width: 15%; +} +.onoffswitch { + position: relative; + width: 110px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +.onoffswitch-checkbox { + display: none; +} +.onoffswitch-label { + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #FFFFFF !important; + border-radius: 50px !important; +} +.onoffswitch-inner { + display: block; + transition: margin 0.3s ease-in 0s; +} +.onoffswitch-inner:before, +.onoffswitch-inner:after { + display: block; + float: left; + width: 50%; + height: 30px; + padding: 0; + line-height: 40px; + font-size: 20px; + box-sizing: border-box; + content: ""; + background-color: #EEEEEE; +} +.onoffswitch-switch { + display: block; + width: 37px; + background-color: #01d7d4; + position: absolute; + top: 0; + bottom: 0; + right: 0px; + border: 2px solid #FFFFFF !important; + border-radius: 50px !important; + transition: all 0.3s ease-in 0s; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { + margin-right: 0; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { + right: 71px; + background-color: #A1A1A1; +} +.result_header { + margin-top: 0px; + margin-bottom: 2px; + font-size: 16px; +} +.result_header .favicon { + margin-bottom: -3px; +} +.result_header a { + color: #29314d; + text-decoration: none; +} +.result_header a:hover { + color: #0088cc; +} +.result_header a:visited { + color: #684898; +} +.result_header a .highlight { + background-color: #f6f9fa; +} +.result-content, +.result-format, +.result-source { + margin-top: 2px; + margin-bottom: 0; + word-wrap: break-word; + color: #666666; + font-size: 13px; +} +.result-content .highlight, +.result-format .highlight, +.result-source .highlight { + font-weight: bold; +} +.result-source { + font-size: 10px; + float: left; +} +.result-format { + font-size: 10px; + float: right; +} +.external-link { + color: #069025; + font-size: 12px; + margin-bottom: 15px; +} +.external-link a { + margin-right: 3px; +} +.result-default, +.result-code, +.result-torrent, +.result-videos, +.result-map { + clear: both; + padding: 2px 4px; +} +.result-default:hover, +.result-code:hover, +.result-torrent:hover, +.result-videos:hover, +.result-map:hover { + background-color: #f6f9fa; +} +.result-images { + float: left !important; + width: 24%; + margin: .5%; +} +.result-images a { + display: block; + width: 100%; + background-size: cover; +} +.img-thumbnail { + margin: 5px; + max-height: 128px; + min-height: 128px; +} +.result-videos { + clear: both; +} +.result-videos hr { + margin: 5px 0 15px 0; +} +.result-videos .collapse { + width: 100%; +} +.result-videos .in { + margin-bottom: 8px; +} +.result-torrent { + clear: both; +} +.result-torrent b { + margin-right: 5px; + margin-left: 5px; +} +.result-torrent .seeders { + color: #2ecc71; +} +.result-torrent .leechers { + color: #f35e77; +} +.result-map { + clear: both; +} +.result-code { + clear: both; +} +.result-code .code-fork, +.result-code .code-fork a { + color: #666666; +} +.suggestion_item { + margin: 2px 5px; + max-width: 100%; +} +.suggestion_item .btn { + max-width: 100%; + white-space: normal; + word-wrap: break-word; + text-align: left; +} +.result_download { + margin-right: 5px; +} +#pagination { + margin-top: 30px; + padding-bottom: 60px; +} +.label-default { + color: #a4a4a4; + background: transparent; +} +.result .text-muted small { + word-wrap: break-word; +} +.modal-wrapper { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); +} +.modal-wrapper { + background-clip: padding-box; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + outline: 0 none; + position: relative; +} +.infobox .panel-heading { + background-color: #f6f9fa; +} +.infobox .panel-heading .panel-title { + font-weight: 700; +} +.infobox p { + font-family: "DejaVu Serif", Georgia, Cambria, "Times New Roman", Times, serif !important; + font-style: italic; +} +.infobox .btn { + background-color: #2ecc71; + border: none; +} +.infobox .btn a { + color: white; + margin: 5px; +} +.infobox .infobox_part { + margin-bottom: 20px; + word-wrap: break-word; + table-layout: fixed; +} +.infobox .infobox_part:last-child { + margin-bottom: 0; +} +.search_categories, +#categories { + text-transform: capitalize; + margin-bottom: 0.5rem; + display: flex; + flex-wrap: wrap; + flex-flow: row wrap; + align-content: stretch; +} +.search_categories label, +#categories label, +.search_categories .input-group-addon, +#categories .input-group-addon { + flex-grow: 1; + flex-basis: auto; + font-size: 1.2rem; + font-weight: normal; + background-color: white; + border: #dddddd 1px solid; + border-right: none; + color: #666666; + padding-bottom: 0.4rem; + padding-top: 0.4rem; + text-align: center; + min-width: 50px; +} +.search_categories label:last-child, +#categories label:last-child, +.search_categories .input-group-addon:last-child, +#categories .input-group-addon:last-child { + border-right: #dddddd 1px solid; +} +.search_categories input[type="checkbox"]:checked + label, +#categories input[type="checkbox"]:checked + label { + color: #29314d; + font-weight: bold; + border-bottom: #01d7d4 5px solid; +} +#main-logo { + margin-top: 10vh; + margin-bottom: 25px; +} +#main-logo > img { + max-width: 350px; + width: 80%; +} +#q { + box-shadow: none; + border-right: none; + border-color: #a4a4a4; +} +#search_form .input-group-btn .btn { + border-color: #a4a4a4; +} +#search_form .input-group-btn .btn:hover { + background-color: #2ecc71; + color: white; +} +.custom-select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + font-size: 1.2rem; + font-weight: normal; + background-color: white; + border: #dddddd 1px solid; + color: #666666; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAQAAACR313BAAAABGdBTUEAALGPC/xhBQAAACBjSFJN +AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ +cwAABFkAAARZAVnbJUkAAAAHdElNRQfgBxgLDwB20OFsAAAAbElEQVQY073OsQ3CMAAEwJMYwJGn +sAehpoXJItltBkmcdZBYgIIiQoLglnz3ui+eP+bk5uneteTMZJa6OJuIqvYzSJoqwqBq8gdmTTW8 +6/dghxAUq4xsVYT9laBYXCw93Aajh7GPEF23t4fkBYevGFTANkPRAAAAJXRFWHRkYXRlOmNyZWF0 +ZQAyMDE2LTA3LTI0VDExOjU1OjU4KzAyOjAwRFqFOQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0w +Ny0yNFQxMToxNTowMCswMjowMP7RDgQAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb +7jwaAAAAAElFTkSuQmCC) 96% no-repeat; +} +.search-margin { + margin-bottom: 0.6em; +} +#advanced-search-container { + display: none; + text-align: left; + margin-bottom: 1rem; + clear: both; +} +#advanced-search-container label, +#advanced-search-container .input-group-addon { + font-size: 1.2rem; + font-weight: normal; + background-color: white; + border: #dddddd 1px solid; + border-right: none; + color: #666666; + padding-bottom: 0.4rem; + padding-right: 0.7rem; + padding-left: 0.7rem; +} +#advanced-search-container label:last-child, +#advanced-search-container .input-group-addon:last-child { + border-right: #dddddd 1px solid; +} +#advanced-search-container input[type="radio"] { + display: none; +} +#advanced-search-container input[type="radio"]:checked + label { + color: #29314d; + font-weight: bold; + border-bottom: #01d7d4 5px solid; +} +#check-advanced { + display: none; +} +#check-advanced:checked ~ #advanced-search-container { + display: block; +} +.advanced { + padding: 0; + margin-top: 0.3rem; + text-align: right; +} +.advanced label, +.advanced select { + cursor: pointer; +} +.cursor-text { + cursor: text !important; +} +.cursor-pointer { + cursor: pointer !important; +} +pre, +code { + font-family: 'Ubuntu Mono', 'Courier New', 'Lucida Console', monospace !important; +} +.lineno { + margin-right: 5px; +} +.highlight .hll { + background-color: #ffffcc; +} +.highlight { + background: #f8f8f8; +} +.highlight .c { + color: #556366; + font-style: italic; +} +/* Comment */ +.highlight .err { + border: 1px solid #ffa92f; +} +/* Error */ +.highlight .k { + color: #BE74D5; + font-weight: bold; +} +/* Keyword */ +.highlight .o { + color: #d19a66; +} +/* Operator */ +.highlight .cm { + color: #556366; + font-style: italic; +} +/* Comment.Multiline */ +.highlight .cp { + color: #bc7a00; +} +/* Comment.Preproc */ +.highlight .c1 { + color: #556366; + font-style: italic; +} +/* Comment.Single */ +.highlight .cs { + color: #556366; + 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: #BE74D5; + font-weight: bold; +} +/* Keyword.Constant */ +.highlight .kd { + color: #BE74D5; + font-weight: bold; +} +/* Keyword.Declaration */ +.highlight .kn { + color: #BE74D5; + font-weight: bold; +} +/* Keyword.Namespace */ +.highlight .kp { + color: #be74d5; +} +/* Keyword.Pseudo */ +.highlight .kr { + color: #BE74D5; + font-weight: bold; +} +/* Keyword.Reserved */ +.highlight .kt { + color: #d46c72; +} +/* Keyword.Type */ +.highlight .m { + color: #d19a66; +} +/* Literal.Number */ +.highlight .s { + color: #86c372; +} +/* Literal.String */ +.highlight .na { + color: #7d9029; +} +/* Name.Attribute */ +.highlight .nb { + color: #be74d5; +} +/* Name.Builtin */ +.highlight .nc { + color: #61AFEF; + font-weight: bold; +} +/* Name.Class */ +.highlight .no { + color: #d19a66; +} +/* 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: #61afef; +} +/* Name.Function */ +.highlight .nl { + color: #a0a000; +} +/* Name.Label */ +.highlight .nn { + color: #61AFEF; + font-weight: bold; +} +/* Name.Namespace */ +.highlight .nt { + color: #BE74D5; + font-weight: bold; +} +/* Name.Tag */ +.highlight .nv { + color: #dfc06f; +} +/* Name.Variable */ +.highlight .ow { + color: #AA22FF; + font-weight: bold; +} +/* Operator.Word */ +.highlight .w { + color: #d7dae0; +} +/* Text.Whitespace */ +.highlight .mf { + color: #d19a66; +} +/* Literal.Number.Float */ +.highlight .mh { + color: #d19a66; +} +/* Literal.Number.Hex */ +.highlight .mi { + color: #d19a66; +} +/* Literal.Number.Integer */ +.highlight .mo { + color: #d19a66; +} +/* Literal.Number.Oct */ +.highlight .sb { + color: #86c372; +} +/* Literal.String.Backtick */ +.highlight .sc { + color: #86c372; +} +/* Literal.String.Char */ +.highlight .sd { + color: #86C372; + font-style: italic; +} +/* Literal.String.Doc */ +.highlight .s2 { + color: #86c372; +} +/* Literal.String.Double */ +.highlight .se { + color: #BB6622; + font-weight: bold; +} +/* Literal.String.Escape */ +.highlight .sh { + color: #86c372; +} +/* Literal.String.Heredoc */ +.highlight .si { + color: #BB6688; + font-weight: bold; +} +/* Literal.String.Interpol */ +.highlight .sx { + color: #be74d5; +} +/* Literal.String.Other */ +.highlight .sr { + color: #bb6688; +} +/* Literal.String.Regex */ +.highlight .s1 { + color: #86c372; +} +/* Literal.String.Single */ +.highlight .ss { + color: #dfc06f; +} +/* Literal.String.Symbol */ +.highlight .bp { + color: #be74d5; +} +/* Name.Builtin.Pseudo */ +.highlight .vc { + color: #dfc06f; +} +/* Name.Variable.Class */ +.highlight .vg { + color: #dfc06f; +} +/* Name.Variable.Global */ +.highlight .vi { + color: #dfc06f; +} +/* Name.Variable.Instance */ +.highlight .il { + color: #d19a66; +} +/* Literal.Number.Integer.Long */ +.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; + color: #556366; +} +.highlight .lineno::selection { + background: transparent; + /* WebKit/Blink Browsers */ +} +.highlight .lineno::-moz-selection { + background: transparent; + /* Gecko Browsers */ +} +.highlight pre { + background-color: #282C34; + color: #D7DAE0; + border: none; + margin-bottom: 25px; + font-size: 15px; + padding: 20px 10px; +} +.highlight { + font-weight: 700; +} +.table > tbody > tr > td, +.table > tbody > tr > th { + vertical-align: middle !important; +} +/*Global*/ +body { + background: #1d1f21 none !important; + color: #D5D8D7 !important; +} +a { + color: #41a2ce !important; + text-decoration: none !important; +} +a:hover { + color: #5F89AC !important; +} +input, +button, +textarea, +select { + border: 1px solid #282a2e !important; + background-color: #444 !important; + color: #BBB !important; +} +input:focus, +button:focus, +textarea:focus, +select:focus { + border: 1px solid #C5C8C6 !important; + box-shadow: initial !important; +} +div#advanced-search-container div#categories label { + background: none; + border: 1px solid #282a2e; +} +ul.nav li a { + border: 0 !important; + border-bottom: 1px solid #4d3f43 !important; +} +#categories *, +.modal-wrapper * { + background: #1d1f21 none !important; + color: #D5D8D7 !important; +} +#categories * { + border: 1px solid #3d3f43 !important; +} +#categories *:checked + label { + border-bottom: 4px solid #3d9f94 !important; +} +.result-content, +.result-source, +.result-format { + color: #B5B8B7 !important; +} +.external-link { + color: #35B887 !important; +} +.table-striped tr td, +.table-striped tr th { + border-color: #4d3f43 !important; +} +.highlight { + background: #333333 !important; +} +/*nav*/ +.navbar { + background: #1d1f21 none; + border: none; +} +.navbar .active, +.menu { + background: none !important; +} +.label-default { + background: none; + color: #BBB; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus, +.nav-tabs.nav-justified > .active > a { + background-color: #282a2e !important; +} +/*Search Page*/ +.result-default:hover, +.result-code:hover, +.result-torrent:hover, +.result-videos:hover, +.result-map:hover { + background-color: #222426; +} +/*buttons*/ +.btn { + color: #BBB; + background-color: #444 ; + border: 1px solid #282a2e; +} +.btn:hover { + color: #444 !important; + background-color: #BBB !important; +} +.btn-primary.active { + color: #C5C8C6; + background-color: #5F89AC; + border-color: #5F89AC; +} +/*Right Pannels*/ +.panel { + border: 1px solid #111; + background: none; +} +.panel-heading { + color: #C5C8C6 !important; + background: #282a2e !important; + border-bottom: none; +} +.panel-body { + color: #C5C8C6 !important; + background: #1d1f21 !important; + border-color: #111 !important; +} +p.btn.btn-default { + background: none; +} +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th, +.table-striped > thead > tr:nth-child(odd) > th { + background: #2d2f32 none !important; + color: #D5D8D7 !important; +} +.label-success { + background: #1d6f42 none !important; +} +.label-danger { + background: #ad1f12 none !important; +} +.searx-navbar { + background: #333334; + height: 2.3rem; + font-size: 1.3rem; + line-height: 1.3rem; + padding: 0.5rem; + font-weight: bold; + margin-bottom: 0.8rem; +} +.searx-navbar a, +.searx-navbar a:hover { + margin-right: 2.0rem; + color: white; + text-decoration: none; +} +.searx-navbar .instance a { + color: #01d7d4; + margin-left: 2.0rem; +} +#main-logo { + margin-top: 20vh; + margin-bottom: 25px; +} +#main-logo > img { + max-width: 350px; + width: 80%; +} +.onoffswitch-inner:before, +.onoffswitch-inner:after { + background: #1d1f21 none !important; +} +.onoffswitch-switch, +.onoffswitch-label { + border: 2px solid #3d3f43 !important; +} +.nav > li > a:hover, +.nav > li > a:focus { + background-color: #3d3f43 !important; +} +/*Images search*/ +.img-thumbnail, +.thumbnail { + padding: 0px; + line-height: 1.42857143; + background: none; + border: none; +} +.modal-content { + background: #1d1f21 none !important; +} +/*Preferences*/ +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background: rgba(240, 0, 0, 0.56) !important; + color: #C5C8C6 !important; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background: rgba(237, 59, 59, 0.61) !important; + color: #C5C8C6 !important; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background: #66696e !important; +} +.btn-success { + color: #C5C8C6; + background: #449d44; +} +.btn-danger { + color: #C5C8C6; + background: #d9534f; +} +.well { + background: #444; + border-color: #282a2e; +} +.highlight { + background-color: transparent !important; +} diff --git a/searx/static/themes/oscar/css/pointhi.css b/searx/static/themes/oscar/css/pointhi.css new file mode 100644 index 000000000..4e167687c --- /dev/null +++ b/searx/static/themes/oscar/css/pointhi.css @@ -0,0 +1,562 @@ +html { + position: relative; + min-height: 100%; +} +body { + /* Margin bottom by footer height */ + margin-bottom: 80px; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + height: 60px; +} +input[type=checkbox]:checked + .label_hide_if_checked, +input[type=checkbox]:checked + .label_hide_if_not_checked + .label_hide_if_checked { + display: none; +} +input[type=checkbox]:not(:checked) + .label_hide_if_not_checked, +input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not_checked { + display: none; +} +.onoff-checkbox { + width: 15%; +} +.onoffswitch { + position: relative; + width: 110px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +.onoffswitch-checkbox { + display: none; +} +.onoffswitch-label { + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #FFFFFF !important; + border-radius: 50px !important; +} +.onoffswitch-inner { + display: block; + transition: margin 0.3s ease-in 0s; +} +.onoffswitch-inner:before, +.onoffswitch-inner:after { + display: block; + float: left; + width: 50%; + height: 30px; + padding: 0; + line-height: 40px; + font-size: 20px; + box-sizing: border-box; + content: ""; + background-color: #EEEEEE; +} +.onoffswitch-switch { + display: block; + width: 37px; + background-color: #00CC00; + position: absolute; + top: 0; + bottom: 0; + right: 0px; + border: 2px solid #FFFFFF !important; + border-radius: 50px !important; + transition: all 0.3s ease-in 0s; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { + margin-right: 0; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { + right: 71px; + background-color: #A1A1A1; +} +.result_header { + margin-bottom: 5px; + margin-top: 20px; +} +.result_header .favicon { + margin-bottom: -3px; +} +.result_header a { + vertical-align: bottom; +} +.result_header a .highlight { + font-weight: bold; +} +.result-content { + margin-top: 5px; + word-wrap: break-word; +} +.result-content .highlight { + font-weight: bold; +} +.result-default { + clear: both; +} +.result-images { + float: left !important; + height: 138px; +} +.img-thumbnail { + margin: 5px; + max-height: 128px; +} +.result-videos { + clear: both; +} +.result-torrents { + clear: both; +} +.result-map { + clear: both; +} +.result-code { + clear: both; +} +.suggestion_item { + margin: 2px 5px; + max-width: 100%; +} +.suggestion_item .btn { + max-width: 100%; + white-space: normal; + word-wrap: break-word; + text-align: left; +} +.result_download { + margin-right: 5px; +} +#pagination { + margin-top: 30px; + padding-bottom: 50px; +} +.label-default { + color: #AAA; + background: #FFF; +} +.result .text-muted small { + word-wrap: break-word; +} +.modal-wrapper { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); +} +.modal-wrapper { + background-clip: padding-box; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + outline: 0 none; + position: relative; +} +.infobox .infobox_part { + margin-bottom: 20px; + word-wrap: break-word; + table-layout: fixed; +} +.infobox .infobox_part:last-child { + margin-bottom: 0; +} +.search_categories, +#categories { + text-transform: capitalize; + margin-bottom: 1.5rem; + margin-top: 1.5rem; + display: flex; + flex-wrap: wrap; + align-content: stretch; +} +.search_categories label, +#categories label, +.search_categories .input-group-addon, +#categories .input-group-addon { + flex-grow: 1; + flex-basis: auto; + font-size: 1.3rem; + font-weight: normal; + background-color: white; + border: #DDD 1px solid; + border-right: none; + color: #333; + padding-bottom: 0.8rem; + padding-top: 0.8rem; + text-align: center; + min-width: 50px; +} +.search_categories label:last-child, +#categories label:last-child, +.search_categories .input-group-addon:last-child, +#categories .input-group-addon:last-child { + border-right: #DDD 1px solid; +} +.search_categories input[type="checkbox"]:checked + label, +#categories input[type="checkbox"]:checked + label { + color: black; + font-weight: bold; + background-color: #EEE; +} +#advanced-search-container { + display: none; + text-align: center; + margin-bottom: 1rem; + clear: both; +} +#advanced-search-container label, +#advanced-search-container .input-group-addon { + font-size: 1.3rem; + font-weight: normal; + background-color: white; + border: #DDD 1px solid; + border-right: none; + color: #333; + padding-bottom: 0.8rem; + padding-left: 1.2rem; + padding-right: 1.2rem; +} +#advanced-search-container label:last-child, +#advanced-search-container .input-group-addon:last-child { + border-right: #DDD 1px solid; +} +#advanced-search-container input[type="radio"] { + display: none; +} +#advanced-search-container input[type="radio"]:checked + label { + color: black; + font-weight: bold; + background-color: #EEE; +} +#check-advanced { + display: none; +} +#check-advanced:checked ~ #advanced-search-container { + display: block; +} +.advanced { + padding: 0; + margin-top: 0.3rem; + text-align: right; +} +.advanced label, +.advanced select { + cursor: pointer; +} +.cursor-text { + cursor: text !important; +} +.cursor-pointer { + cursor: pointer !important; +} +.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 .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 */ +} +.searx-navbar { + background: #eee; + color: #aaa; + height: 2.3rem; + font-size: 1.3rem; + line-height: 1.3rem; + padding: 0.5rem; + font-weight: bold; + margin-bottom: 1.3rem; +} +.searx-navbar a, +.searx-navbar a:hover { + margin-right: 2.0rem; + text-decoration: none; +} +.searx-navbar .instance a { + color: #444; + margin-left: 2.0rem; +} +.table > tbody > tr > td, +.table > tbody > tr > th { + vertical-align: middle !important; +} diff --git a/searx/static/themes/oscar/js/searx.js b/searx/static/themes/oscar/js/searx.js new file mode 100644 index 000000000..58b38f019 --- /dev/null +++ b/searx/static/themes/oscar/js/searx.js @@ -0,0 +1,356 @@ +/** + * searx is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * searx 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with searx. If not, see < http://www.gnu.org/licenses/ >. + * + * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at> + */ + +requirejs.config({ + baseUrl: './static/themes/oscar/js', + paths: { + app: '../app' + } +}); +;/** + * searx is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * searx 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with searx. If not, see < http://www.gnu.org/licenses/ >. + * + * (C) 2019 by Alexandre Flament + */ +window.searx = (function(d) { + 'use strict'; + + // add data- properties + var script = d.currentScript || (function() { + var scripts = d.getElementsByTagName('script'); + return scripts[scripts.length - 1]; + })(); + + return { + autocompleter: script.getAttribute('data-autocompleter') === 'true', + method: script.getAttribute('data-method') + }; +})(document); +;/** + * searx is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * searx 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with searx. If not, see < http://www.gnu.org/licenses/ >. + * + * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at> + */ + +if(searx.autocompleter) { + searx.searchResults = new Bloodhound({ + datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), + queryTokenizer: Bloodhound.tokenizers.whitespace, + remote: './autocompleter?q=%QUERY' + }); + searx.searchResults.initialize(); +} + +$(document).ready(function(){ + if(searx.autocompleter) { + $('#q').typeahead(null, { + name: 'search-results', + displayKey: function(result) { + return result; + }, + source: searx.searchResults.ttAdapter() + }); + } +}); +;/** + * searx is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * searx 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with searx. If not, see < http://www.gnu.org/licenses/ >. + * + * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at> + */ + +$(document).ready(function(){ + /** + * focus element if class="autofocus" and id="q" + */ + $('#q.autofocus').focus(); + + /** + * select full content on click if class="select-all-on-click" + */ + $(".select-all-on-click").click(function () { + $(this).select(); + }); + + /** + * change text during btn-collapse click if possible + */ + $('.btn-collapse').click(function() { + var btnTextCollapsed = $(this).data('btn-text-collapsed'); + var btnTextNotCollapsed = $(this).data('btn-text-not-collapsed'); + + if(btnTextCollapsed !== '' && btnTextNotCollapsed !== '') { + if($(this).hasClass('collapsed')) { + new_html = $(this).html().replace(btnTextCollapsed, btnTextNotCollapsed); + } else { + new_html = $(this).html().replace(btnTextNotCollapsed, btnTextCollapsed); + } + $(this).html(new_html); + } + }); + + /** + * change text during btn-toggle click if possible + */ + $('.btn-toggle .btn').click(function() { + var btnClass = 'btn-' + $(this).data('btn-class'); + var btnLabelDefault = $(this).data('btn-label-default'); + var btnLabelToggled = $(this).data('btn-label-toggled'); + if(btnLabelToggled !== '') { + if($(this).hasClass('btn-default')) { + new_html = $(this).html().replace(btnLabelDefault, btnLabelToggled); + } else { + new_html = $(this).html().replace(btnLabelToggled, btnLabelDefault); + } + $(this).html(new_html); + } + $(this).toggleClass(btnClass); + $(this).toggleClass('btn-default'); + }); + + /** + * change text during btn-toggle click if possible + */ + $('.media-loader').click(function() { + var target = $(this).data('target'); + var iframe_load = $(target + ' > iframe'); + var srctest = iframe_load.attr('src'); + if(srctest === undefined || srctest === false){ + iframe_load.attr('src', iframe_load.data('src')); + } + }); + + /** + * Select or deselect every categories on double clic + */ + $(".btn-sm").dblclick(function() { + var btnClass = 'btn-' + $(this).data('btn-class'); // primary + if($(this).hasClass('btn-default')) { + $(".btn-sm > input").attr('checked', 'checked'); + $(".btn-sm > input").prop("checked", true); + $(".btn-sm").addClass(btnClass); + $(".btn-sm").addClass('active'); + $(".btn-sm").removeClass('btn-default'); + } else { + $(".btn-sm > input").attr('checked', ''); + $(".btn-sm > input").removeAttr('checked'); + $(".btn-sm > input").checked = false; + $(".btn-sm").removeClass(btnClass); + $(".btn-sm").removeClass('active'); + $(".btn-sm").addClass('btn-default'); + } + }); +}); +;/** + * searx is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * searx 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with searx. If not, see < http://www.gnu.org/licenses/ >. + * + * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at> + */ + +$(document).ready(function(){ + $(".searx_overpass_request").on( "click", function( event ) { + var overpass_url = "https://overpass-api.de/api/interpreter?data="; + var query_start = overpass_url + "[out:json][timeout:25];("; + var query_end = ");out meta;"; + + var osm_id = $(this).data('osm-id'); + var osm_type = $(this).data('osm-type'); + var result_table = $(this).data('result-table'); + var result_table_loadicon = "#" + $(this).data('result-table-loadicon'); + + // tags which can be ignored + var osm_ignore_tags = [ "addr:city", "addr:country", "addr:housenumber", "addr:postcode", "addr:street" ]; + + if(osm_id && osm_type && result_table) { + result_table = "#" + result_table; + var query = null; + switch(osm_type) { + case 'node': + query = query_start + "node(" + osm_id + ");" + query_end; + break; + case 'way': + query = query_start + "way(" + osm_id + ");" + query_end; + break; + case 'relation': + query = query_start + "relation(" + osm_id + ");" + query_end; + break; + default: + break; + } + if(query) { + //alert(query); + var ajaxRequest = $.ajax( query ) + .done(function( html) { + if(html && html.elements && html.elements[0]) { + var element = html.elements[0]; + var newHtml = $(result_table).html(); + for (var row in element.tags) { + if(element.tags.name === null || osm_ignore_tags.indexOf(row) == -1) { + newHtml += "<tr><td>" + row + "</td><td>"; + switch(row) { + case "phone": + case "fax": + newHtml += "<a href=\"tel:" + element.tags[row].replace(/ /g,'') + "\">" + element.tags[row] + "</a>"; + break; + case "email": + newHtml += "<a href=\"mailto:" + element.tags[row] + "\">" + element.tags[row] + "</a>"; + break; + case "website": + case "url": + newHtml += "<a href=\"" + element.tags[row] + "\">" + element.tags[row] + "</a>"; + break; + case "wikidata": + newHtml += "<a href=\"https://www.wikidata.org/wiki/" + element.tags[row] + "\">" + element.tags[row] + "</a>"; + break; + case "wikipedia": + if(element.tags[row].indexOf(":") != -1) { + newHtml += "<a href=\"https://" + element.tags[row].substring(0,element.tags[row].indexOf(":")) + ".wikipedia.org/wiki/" + element.tags[row].substring(element.tags[row].indexOf(":")+1) + "\">" + element.tags[row] + "</a>"; + break; + } + /* jshint ignore:start */ + default: + /* jshint ignore:end */ + newHtml += element.tags[row]; + break; + } + newHtml += "</td></tr>"; + } + } + $(result_table).html(newHtml); + $(result_table).removeClass('hidden'); + $(result_table_loadicon).addClass('hidden'); + } + }) + .fail(function() { + $(result_table_loadicon).html($(result_table_loadicon).html() + "<p class=\"text-muted\">could not load data!</p>"); + }); + } + } + + // this event occour only once per element + $( this ).off( event ); + }); + + $(".searx_init_map").on( "click", function( event ) { + var leaflet_target = $(this).data('leaflet-target'); + var map_lon = $(this).data('map-lon'); + var map_lat = $(this).data('map-lat'); + var map_zoom = $(this).data('map-zoom'); + var map_boundingbox = $(this).data('map-boundingbox'); + var map_geojson = $(this).data('map-geojson'); + + require(['leaflet-0.7.3.min'], function(leaflet) { + if(map_boundingbox) { + southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]); + northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]); + map_bounds = L.latLngBounds(southWest, northEast); + } + + // TODO hack + // change default imagePath + L.Icon.Default.imagePath = "./static/themes/oscar/img/map"; + + // init map + var map = L.map(leaflet_target); + + // create the tile layer with correct attribution + var osmMapnikUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; + var osmMapnikAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'; + var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib}); + + var osmWikimediaUrl='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png'; + var osmWikimediaAttrib = 'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'; + var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib}); + + // init map view + if(map_bounds) { + // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021 + setTimeout(function () { + map.fitBounds(map_bounds, { + maxZoom:17 + }); + }, 0); + } else if (map_lon && map_lat) { + if(map_zoom) + map.setView(new L.LatLng(map_lat, map_lon),map_zoom); + else + map.setView(new L.LatLng(map_lat, map_lon),8); + } + + map.addLayer(osmMapnik); + + var baseLayers = { + "OSM Mapnik": osmMapnik/*, + "OSM Wikimedia": osmWikimedia*/ + }; + + L.control.layers(baseLayers).addTo(map); + + + if(map_geojson) + L.geoJson(map_geojson).addTo(map); + /*else if(map_bounds) + L.rectangle(map_bounds, {color: "#ff7800", weight: 3, fill:false}).addTo(map);*/ + }); + + // this event occour only once per element + $( this ).off( event ); + }); +}); diff --git a/searx/static/themes/oscar/js/searx.min.js b/searx/static/themes/oscar/js/searx.min.js index cb9121bf8..354d9f2fe 100644 Binary files a/searx/static/themes/oscar/js/searx.min.js and b/searx/static/themes/oscar/js/searx.min.js differ diff --git a/searx/static/themes/oscar/js/searx_src/01_init.js b/searx/static/themes/oscar/js/searx_src/01_init.js new file mode 100644 index 000000000..690365c7f --- /dev/null +++ b/searx/static/themes/oscar/js/searx_src/01_init.js @@ -0,0 +1,30 @@ +/** + * searx is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * searx 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with searx. If not, see < http://www.gnu.org/licenses/ >. + * + * (C) 2019 by Alexandre Flament + */ +window.searx = (function(d) { + 'use strict'; + + // add data- properties + var script = d.currentScript || (function() { + var scripts = d.getElementsByTagName('script'); + return scripts[scripts.length - 1]; + })(); + + return { + autocompleter: script.getAttribute('data-autocompleter') === 'true', + method: script.getAttribute('data-method') + }; +})(document); diff --git a/searx/static/themes/simple/css/searx-rtl.css b/searx/static/themes/simple/css/searx-rtl.css index f402349fc..2e904e5eb 100644 --- a/searx/static/themes/simple/css/searx-rtl.css +++ b/searx/static/themes/simple/css/searx-rtl.css @@ -1,4 +1,4 @@ -/*! searx | 28-05-2019 | https://github.com/asciimoo/searx */ +/*! searx | 06-08-2019 | https://github.com/asciimoo/searx */ /* * searx, A privacy-respecting, hackable metasearch engine * diff --git a/searx/static/themes/simple/css/searx-rtl.min.css b/searx/static/themes/simple/css/searx-rtl.min.css index bb8ff98a1..fc54981b0 100644 Binary files a/searx/static/themes/simple/css/searx-rtl.min.css and b/searx/static/themes/simple/css/searx-rtl.min.css differ diff --git a/searx/static/themes/simple/css/searx.css b/searx/static/themes/simple/css/searx.css index b1430242f..697f46b0e 100644 --- a/searx/static/themes/simple/css/searx.css +++ b/searx/static/themes/simple/css/searx.css @@ -1,4 +1,4 @@ -/*! searx | 28-05-2019 | https://github.com/asciimoo/searx */ +/*! searx | 06-08-2019 | https://github.com/asciimoo/searx */ /* * searx, A privacy-respecting, hackable metasearch engine * diff --git a/searx/static/themes/simple/css/searx.min.css b/searx/static/themes/simple/css/searx.min.css index 40ed2bcd7..5dc9fd30b 100644 Binary files a/searx/static/themes/simple/css/searx.min.css and b/searx/static/themes/simple/css/searx.min.css differ diff --git a/searx/static/themes/simple/gruntfile.js b/searx/static/themes/simple/gruntfile.js index a0f9fd75a..c372ec730 100644 --- a/searx/static/themes/simple/gruntfile.js +++ b/searx/static/themes/simple/gruntfile.js @@ -10,35 +10,8 @@ module.exports = function(grunt) { tasks: ['jshint', 'concat', 'uglify', 'webfont', 'less:development', 'less:production'] } }, - concat: { - options: { - separator: ';' - }, - dist: { - src: ['js/searx_src/*.js'], - dest: 'js/searx.js' - } - }, - uglify: { - options: { - banner: '/*! simple/searx.min.js | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n', - output: { - comments: 'some' - }, - ie8: false, - warnings: true, - compress: false, - mangle: true, - sourceMap: true - }, - dist: { - files: { - 'js/searx.min.js': ['<%= concat.dist.dest %>'] - } - } - }, jshint: { - files: ['js/searx_src/*.js'], + files: ['js/searx_src/*.js', 'js/searx_header/*.js'], options: { reporterOutput: "", proto: true, @@ -50,6 +23,36 @@ module.exports = function(grunt) { } } }, + concat: { + head_and_body: { + options: { + separator: ';' + }, + files: { + 'js/searx.head.js': ['js/searx_head/*.js'], + 'js/searx.js': ['js/searx_src/*.js'] + } + } + }, + uglify: { + options: { + banner: '/*! simple/searx.min.js | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n', + output: { + comments: 'some' + }, + ie8: false, + warnings: true, + compress: false, + mangle: true, + sourceMap: true + }, + dist: { + files: { + 'js/searx.head.min.js': ['js/searx.head.js'], + 'js/searx.min.js': ['js/searx.js'] + } + } + }, less: { development: { options: { diff --git a/searx/static/themes/simple/js/searx.head.js b/searx/static/themes/simple/js/searx.head.js new file mode 100644 index 000000000..3ac61c8ae --- /dev/null +++ b/searx/static/themes/simple/js/searx.head.js @@ -0,0 +1,40 @@ +/** +* searx is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* searx 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 Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with searx. If not, see < http://www.gnu.org/licenses/ >. +* +* (C) 2019 by Alexandre Flament +* +*/ +(function(w, d) { + 'use strict'; + + // add data- properties + var script = d.currentScript || (function() { + var scripts = d.getElementsByTagName('script'); + return scripts[scripts.length - 1]; + })(); + + // try to detect touch screen + w.searx = { + touch: (("ontouchstart" in w) || w.DocumentTouch && document instanceof DocumentTouch) || false, + method: script.getAttribute('data-method'), + autocompleter: script.getAttribute('data-autocompleter') === 'true', + search_on_category_select: script.getAttribute('data-search-on-category-select') === 'true', + infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', + static_path: script.getAttribute('data-static-path'), + no_item_found: script.getAttribute('data-no-item-found') + } + + // update the css + d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js"; +})(window, document); \ No newline at end of file diff --git a/searx/static/themes/simple/js/searx.head.min.js b/searx/static/themes/simple/js/searx.head.min.js new file mode 100644 index 000000000..00c711c79 Binary files /dev/null and b/searx/static/themes/simple/js/searx.head.min.js differ diff --git a/searx/static/themes/simple/js/searx.head.min.js.map b/searx/static/themes/simple/js/searx.head.min.js.map new file mode 100644 index 000000000..d19ad5a44 Binary files /dev/null and b/searx/static/themes/simple/js/searx.head.min.js.map differ diff --git a/searx/static/themes/simple/js/searx.js b/searx/static/themes/simple/js/searx.js index 1830977c0..e191f2487 100644 --- a/searx/static/themes/simple/js/searx.js +++ b/searx/static/themes/simple/js/searx.js @@ -15,7 +15,7 @@ * (C) 2017 by Alexandre Flament, <alex@al-f.net> * */ -(function(w, d, searx) { +window.searx = (function(w, d) { 'use strict'; @@ -45,7 +45,7 @@ } } - searx = searx || {}; + var searx = window.searx || {}; searx.on = function(obj, eventType, callback, useCapture) { useCapture = useCapture || false; @@ -110,7 +110,7 @@ }; searx.loadStyle = function(src) { - var path = searx.staticPath + src, + var path = searx.static_path + src, id = "style_" + src.replace('.', '_'), s = d.getElementById(id); if (s === null) { @@ -124,7 +124,7 @@ }; searx.loadScript = function(src, callback) { - var path = searx.staticPath + src, + var path = searx.static_path + src, id = "script_" + src.replace('.', '_'), s = d.getElementById(id); if (s === null) { @@ -161,7 +161,7 @@ }); return searx; -})(window, document, window.searx); +})(window, document); ;(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ /* * @license MIT @@ -1529,7 +1529,7 @@ module.exports = AutoComplete; if (searx.autocompleter) { searx.autocomplete = AutoComplete.call(w, { Url: "./autocompleter", - EmptyMessage: searx.noItemFound, + EmptyMessage: searx.no_item_found, HttpMethod: searx.method, MinChars: 4, Delay: 300, diff --git a/searx/static/themes/simple/js/searx.min.js b/searx/static/themes/simple/js/searx.min.js index 542e4c318..42e8a845c 100644 Binary files a/searx/static/themes/simple/js/searx.min.js and b/searx/static/themes/simple/js/searx.min.js differ diff --git a/searx/static/themes/simple/js/searx.min.js.map b/searx/static/themes/simple/js/searx.min.js.map index d34c2a6ee..d7a1eeac8 100644 Binary files a/searx/static/themes/simple/js/searx.min.js.map and b/searx/static/themes/simple/js/searx.min.js.map differ diff --git a/searx/static/themes/simple/js/searx_head/00_init.js b/searx/static/themes/simple/js/searx_head/00_init.js new file mode 100644 index 000000000..3ac61c8ae --- /dev/null +++ b/searx/static/themes/simple/js/searx_head/00_init.js @@ -0,0 +1,40 @@ +/** +* searx is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* searx 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 Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with searx. If not, see < http://www.gnu.org/licenses/ >. +* +* (C) 2019 by Alexandre Flament +* +*/ +(function(w, d) { + 'use strict'; + + // add data- properties + var script = d.currentScript || (function() { + var scripts = d.getElementsByTagName('script'); + return scripts[scripts.length - 1]; + })(); + + // try to detect touch screen + w.searx = { + touch: (("ontouchstart" in w) || w.DocumentTouch && document instanceof DocumentTouch) || false, + method: script.getAttribute('data-method'), + autocompleter: script.getAttribute('data-autocompleter') === 'true', + search_on_category_select: script.getAttribute('data-search-on-category-select') === 'true', + infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', + static_path: script.getAttribute('data-static-path'), + no_item_found: script.getAttribute('data-no-item-found') + } + + // update the css + d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js"; +})(window, document); \ No newline at end of file diff --git a/searx/static/themes/simple/js/searx_src/00_searx_toolkit.js b/searx/static/themes/simple/js/searx_src/00_searx_toolkit.js index fb524427d..dbef4be73 100644 --- a/searx/static/themes/simple/js/searx_src/00_searx_toolkit.js +++ b/searx/static/themes/simple/js/searx_src/00_searx_toolkit.js @@ -15,7 +15,7 @@ * (C) 2017 by Alexandre Flament, <alex@al-f.net> * */ -(function(w, d, searx) { +window.searx = (function(w, d) { 'use strict'; @@ -45,7 +45,7 @@ } } - searx = searx || {}; + var searx = window.searx || {}; searx.on = function(obj, eventType, callback, useCapture) { useCapture = useCapture || false; @@ -110,7 +110,7 @@ }; searx.loadStyle = function(src) { - var path = searx.staticPath + src, + var path = searx.static_path + src, id = "style_" + src.replace('.', '_'), s = d.getElementById(id); if (s === null) { @@ -124,7 +124,7 @@ }; searx.loadScript = function(src, callback) { - var path = searx.staticPath + src, + var path = searx.static_path + src, id = "script_" + src.replace('.', '_'), s = d.getElementById(id); if (s === null) { @@ -161,4 +161,4 @@ }); return searx; -})(window, document, window.searx); +})(window, document); diff --git a/searx/static/themes/simple/js/searx_src/searx_search.js b/searx/static/themes/simple/js/searx_src/searx_search.js index 964be2194..580d98d6a 100644 --- a/searx/static/themes/simple/js/searx_src/searx_search.js +++ b/searx/static/themes/simple/js/searx_src/searx_search.js @@ -73,7 +73,7 @@ if (searx.autocompleter) { searx.autocomplete = AutoComplete.call(w, { Url: "./autocompleter", - EmptyMessage: searx.noItemFound, + EmptyMessage: searx.no_item_found, HttpMethod: searx.method, MinChars: 4, Delay: 300, diff --git a/searx/templates/oscar/base.html b/searx/templates/oscar/base.html index 243e8b3d7..321784ebb 100644 --- a/searx/templates/oscar/base.html +++ b/searx/templates/oscar/base.html @@ -37,12 +37,6 @@ {% endblock %} <link title="{{ instance_name }}" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/> - - <script type="text/javascript"> - searx = {}; - searx.method = "{{ method or 'POST' }}"; - searx.autocompleter = {% if autocomplete %}true{% else %}false{% endif %}; - </script> <noscript> <style type="text/css"> .tab-content > .active_if_nojs, .active_if_nojs {display: block !important; visibility: visible !important;} @@ -101,7 +95,9 @@ <script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script> {% if autocomplete %}<script src="{{ url_for('static', filename='js/typeahead.bundle.min.js') }}"></script>{% endif %} <script src="{{ url_for('static', filename='js/require-2.1.15.min.js') }}"></script> - <script src="{{ url_for('static', filename='js/searx.min.js') }}"></script> + <script src="{{ url_for('static', filename='js/searx.min.js') }}" + data-method="{{ method or 'POST' }}" + data-autocompleter="{% if autocomplete %}true{% else %}false{% endif %}"></script> {% for script in scripts %} <script src="{{ url_for('static', filename=script) }}"></script> {% endfor %} diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html index 734dccbe8..92597b654 100644 --- a/searx/templates/simple/base.html +++ b/searx/templates/simple/base.html @@ -11,29 +11,26 @@ <meta name="HandheldFriendly" content="True"> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"> <title>{% block title %}{% endblock %}{{ instance_name }}</title> + {% block meta %}{% endblock %} {% if rtl %} <link rel="stylesheet" href="{{ url_for('static', filename='css/searx-rtl.min.css') }}" type="text/css" media="screen" /> {% else %} <link rel="stylesheet" href="{{ url_for('static', filename='css/searx.min.css') }}" type="text/css" media="screen" /> {% endif %} {% block styles %}{% endblock %} - {% block meta %}{% endblock %} + <!--[if gte IE 9]>--> + <script src="{{ url_for('static', filename='js/searx.head.min.js') }}" + data-method="{{ method or 'POST' }}" + data-autocompleter="{% if autocomplete %}true{% else %}false{% endif %}" + data-search-on-category-select="{{ 'true' if 'plugins/js/search_on_category_select.js' in scripts else 'false'}}" + data-infinite-scroll="{{ 'true' if 'plugins/js/infinite_scroll.js' in scripts else 'false' }}" + data-static-path="{{ url_for('static', filename='themes/simple') }}/" + data-no-item-found="{{ _('No item found') }}"></script> + <!--<![endif]--> {% block head %} <link title="{{ instance_name }}" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/> {% endblock %} <link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}" /> - <script type="text/javascript"> - var searx = { - autocompleter: {% if autocomplete %}true{% else %}false{% endif %}, - method: "{{ method or 'POST' }}", - touch: (("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch) || false, - staticPath: "{{ url_for('static', filename='themes/simple') }}/", - noItemFound: "{{ _('No item found') }}", - search_on_category_select: {{ 'true' if 'plugins/js/search_on_category_select.js' in scripts else 'false'}}, - infinite_scroll: {{ 'true' if 'plugins/js/infinite_scroll.js' in scripts else 'false' }} - }; - document.getElementsByTagName("html")[0].className = (searx.touch)?"js touch":"js"; - </script> </head> <body> <main id="main_{{ self._TemplateReference__context.name|replace("simple/", "")|replace(".html", "") }}"> @@ -60,7 +57,7 @@ </p> </footer> <!--[if gte IE 9]>--> - <script src="{{ url_for('static', filename='js/searx.min.js') }}" ></script> + <script src="{{ url_for('static', filename='js/searx.min.js') }}"></script> <!--<![endif]--> </body> </html>