| @@ -5,7 +5,5 @@ | |||||
| __pycache__ | __pycache__ | ||||
| .earwigbot | .earwigbot | ||||
| *.min.js | |||||
| *.min.css | |||||
| logs/* | logs/* | ||||
| !logs/.gitinclude | !logs/.gitinclude | ||||
| @@ -1,4 +1,4 @@ | |||||
| Copyright (c) 2009-2016 Ben Kurtovic <ben.kurtovic@gmail.com> | |||||
| Copyright (c) 2009-2021 Ben Kurtovic <ben.kurtovic@gmail.com> | |||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | of this software and associated documentation files (the "Software"), to deal | ||||
| @@ -17,13 +17,14 @@ Dependencies | |||||
| * [requests](https://requests.readthedocs.io/) >= 2.9.1 | * [requests](https://requests.readthedocs.io/) >= 2.9.1 | ||||
| * [SQLAlchemy](https://www.sqlalchemy.org/) >= 0.9.6 | * [SQLAlchemy](https://www.sqlalchemy.org/) >= 0.9.6 | ||||
| * [apsw](https://github.com/rogerbinns/apsw) >= 3.26.0 | * [apsw](https://github.com/rogerbinns/apsw) >= 3.26.0 | ||||
| * [uglifycss](https://github.com/fmarcia/UglifyCSS/) | |||||
| * [uglifyjs](https://github.com/mishoo/UglifyJS/) >= 1.3.3 | |||||
| * [uglifyjs](https://github.com/mishoo/UglifyJS) >= 3.12.6 | |||||
| * [cssnano](https://github.com/cssnano/cssnano) >= 4.1.10 | |||||
| * [postcss-cli](https://github.com/postcss/postcss-cli) >= 8.3.1 | |||||
| Running | Running | ||||
| ======= | ======= | ||||
| - If using Tool Labs, you should clone the repository to `~/www/python/src`, or | |||||
| - If using Toolforge, you should clone the repository to `~/www/python/src`, or | |||||
| otherwise symlink it to that directory. A | otherwise symlink it to that directory. A | ||||
| [virtualenv](https://virtualenv.pypa.io/) should be created at | [virtualenv](https://virtualenv.pypa.io/) should be created at | ||||
| `~/www/python/venv`. | `~/www/python/venv`. | ||||
| @@ -46,4 +47,4 @@ Running | |||||
| - Run `./build.py` to minify JS and CSS files. | - Run `./build.py` to minify JS and CSS files. | ||||
| - Start the web server (on Tool Labs, `webservice2 uwsgi-python start`). | |||||
| - Start the web server (on Toolforge, `webservice uwsgi-python start`). | |||||
| @@ -1,24 +1,24 @@ | |||||
| #! /usr/bin/env python | #! /usr/bin/env python | ||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
| from __future__ import print_function | |||||
| import os | import os | ||||
| import subprocess | import subprocess | ||||
| def process(program, old_file, new_file): | |||||
| print "%s: %s -> %s" % (program, old_file, new_file) | |||||
| content = subprocess.check_output([program, old_file]) | |||||
| with open(new_file, "w") as fp: | |||||
| fp.write(content) | |||||
| def process(*args): | |||||
| print(*args) | |||||
| content = subprocess.check_output(args) | |||||
| def main(): | def main(): | ||||
| root = os.path.join(os.path.dirname(__file__), "static") | root = os.path.join(os.path.dirname(__file__), "static") | ||||
| for dirpath, dirnames, filenames in os.walk(root): | for dirpath, dirnames, filenames in os.walk(root): | ||||
| for filename in filenames: | for filename in filenames: | ||||
| name = os.path.join(dirpath, filename) | |||||
| name = os.path.relpath(os.path.join(dirpath, filename)) | |||||
| if filename.endswith(".js") and ".min." not in filename: | if filename.endswith(".js") and ".min." not in filename: | ||||
| process("uglifyjs", name, name.replace(".js", ".min.js")) | |||||
| process("uglifyjs", "--compress", "-o", name.replace(".js", ".min.js"), "--", name) | |||||
| if filename.endswith(".css") and ".min." not in filename: | if filename.endswith(".css") and ".min." not in filename: | ||||
| process("uglifycss", name, name.replace(".css", ".min.css")) | |||||
| process("postcss", "-u", "cssnano", "--no-map", name, "-o", | |||||
| name.replace(".css", ".min.css")) | |||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||
| main() | main() | ||||
| @@ -6,91 +6,91 @@ pre { | |||||
| white-space: pre-wrap; | white-space: pre-wrap; | ||||
| } | } | ||||
| div#help { | |||||
| #help { | |||||
| margin: auto; | margin: auto; | ||||
| max-width: 1200px; | max-width: 1200px; | ||||
| } | } | ||||
| div.json { | |||||
| .json { | |||||
| font-family: monospace; | font-family: monospace; | ||||
| } | } | ||||
| div.indent { | |||||
| .indent { | |||||
| display: inline-block; | display: inline-block; | ||||
| padding-left: 2em; | padding-left: 2em; | ||||
| } | } | ||||
| span.code { | |||||
| .code { | |||||
| font-family: monospace; | font-family: monospace; | ||||
| } | } | ||||
| span.resp-dtype, span.resp-desc, span.resp-cond { | |||||
| .resp-dtype, .resp-desc, .resp-cond { | |||||
| padding: 0 0.25em; | padding: 0 0.25em; | ||||
| background-color: #EEE; | background-color: #EEE; | ||||
| } | } | ||||
| span.resp-dtype { | |||||
| .resp-dtype { | |||||
| color: #009; | color: #009; | ||||
| } | } | ||||
| span.resp-dtype:before, span.resp-cond:before { | |||||
| .resp-dtype:before, .resp-cond:before { | |||||
| content: "("; | content: "("; | ||||
| } | } | ||||
| span.resp-dtype:after, span.resp-cond:after { | |||||
| .resp-dtype:after, .resp-cond:after { | |||||
| content: ")"; | content: ")"; | ||||
| } | } | ||||
| span.resp-desc { | |||||
| .resp-desc { | |||||
| color: #050; | color: #050; | ||||
| } | } | ||||
| span.resp-cond { | |||||
| .resp-cond { | |||||
| color: #900; | color: #900; | ||||
| font-style: italic; | font-style: italic; | ||||
| } | } | ||||
| span.param-key { | |||||
| .param-key { | |||||
| color: #009; | color: #009; | ||||
| font-weight: bold; | font-weight: bold; | ||||
| } | } | ||||
| span.param-val { | |||||
| .param-val { | |||||
| color: #900; | color: #900; | ||||
| font-weight: bold; | font-weight: bold; | ||||
| } | } | ||||
| table.parameters { | |||||
| .parameters { | |||||
| margin: 1em 0; | margin: 1em 0; | ||||
| } | } | ||||
| table.parameters tr:first-child { | |||||
| .parameters tr:first-child { | |||||
| font-family: sans-serif; | font-family: sans-serif; | ||||
| font-size: 1.17em; | font-size: 1.17em; | ||||
| color: white; | color: white; | ||||
| } | } | ||||
| table.parameters tr:first-child th { | |||||
| .parameters tr:first-child th { | |||||
| background-color: #369; | background-color: #369; | ||||
| } | } | ||||
| table.parameters td, table.parameters th { | |||||
| .parameters td, .parameters th { | |||||
| padding: 0.2em 0.5em; | padding: 0.2em 0.5em; | ||||
| } | } | ||||
| table.parameters th { | |||||
| .parameters th { | |||||
| background-color: #F0F0F0; | background-color: #F0F0F0; | ||||
| } | } | ||||
| table.parameters td:first-child { | |||||
| .parameters td:first-child { | |||||
| font-family: monospace; | font-family: monospace; | ||||
| } | } | ||||
| table.parameters tr:nth-child(2n + 3) { | |||||
| .parameters tr:nth-child(2n + 3) { | |||||
| background-color: #E0E0E0; | background-color: #E0E0E0; | ||||
| } | } | ||||
| table.parameters tr:nth-child(2n + 4) { | |||||
| .parameters tr:nth-child(2n + 4) { | |||||
| background-color: #F0F0F0; | background-color: #F0F0F0; | ||||
| } | } | ||||
| @@ -99,7 +99,7 @@ a:visited { color: #373; text-decoration: none; } | |||||
| a:hover { color: #040; text-decoration: underline; } | a:hover { color: #040; text-decoration: underline; } | ||||
| a:active { color: #404; text-decoration: underline; } | a:active { color: #404; text-decoration: underline; } | ||||
| a.no-color:link { color: #000; text-decoration: none; } | |||||
| a.no-color:visited { color: #000; text-decoration: none; } | |||||
| a.no-color:hover { color: #000; text-decoration: underline; } | |||||
| a.no-color:active { color: #000; text-decoration: underline; } | |||||
| .no-color:link { color: #000; text-decoration: none; } | |||||
| .no-color:visited { color: #000; text-decoration: none; } | |||||
| .no-color:hover { color: #000; text-decoration: underline; } | |||||
| .no-color:active { color: #000; text-decoration: underline; } | |||||
| @@ -0,0 +1 @@ | |||||
| h1,h2{font-family:sans-serif}pre{white-space:pre-wrap}#help{margin:auto;max-width:1200px}.json{font-family:monospace}.indent{display:inline-block;padding-left:2em}.code{font-family:monospace}.resp-cond,.resp-desc,.resp-dtype{padding:0 .25em;background-color:#eee}.resp-dtype{color:#009}.resp-cond:before,.resp-dtype:before{content:"("}.resp-cond:after,.resp-dtype:after{content:")"}.resp-desc{color:#050}.resp-cond{color:#900;font-style:italic}.param-key{color:#009;font-weight:700}.param-val{color:#900;font-weight:700}.parameters{margin:1em 0}.parameters tr:first-child{font-family:sans-serif;font-size:1.17em;color:#fff}.parameters tr:first-child th{background-color:#369}.parameters td,.parameters th{padding:.2em .5em}.parameters th{background-color:#f0f0f0}.parameters td:first-child{font-family:monospace}.parameters tr:nth-child(2n+3){background-color:#e0e0e0}.parameters tr:nth-child(2n+4){background-color:#f0f0f0}a:link,a:visited{color:#373;text-decoration:none}a:hover{color:#040}a:active,a:hover{text-decoration:underline}a:active{color:#404}.no-color:link,.no-color:visited{color:#000;text-decoration:none}.no-color:active,.no-color:hover{color:#000;text-decoration:underline} | |||||
| @@ -0,0 +1 @@ | |||||
| function update_screen_size(){var cache=cache_cookie(),data={width:window.screen.availWidth,height:window.screen.availHeight};cache&&cache.width==data.width&&cache.height==data.height||set_cookie("CopyviosScreenCache",JSON.stringify(data),1095)}function cache_cookie(){var cookie=get_cookie("CopyviosScreenCache");if(cookie)try{data=JSON.parse(cookie);var width=data.width,height=data.height;if(width&&height)return{width:width,height:height}}catch(SyntaxError){}return!1}function get_cookie(name){for(var nameEQ=name+"=",ca=document.cookie.split(";"),i=0;i<ca.length;i++){for(var c=ca[i];" "==c.charAt(0);)c=c.substring(1,c.length);if(0==c.indexOf(nameEQ)){var value=window.atob(c.substring(nameEQ.length,c.length));if(0==value.indexOf("--cpv2"))return value.substring("--cpv2".length,value.length)}}return null}function set_cookie_with_date(name,value,expires){value=window.btoa("--cpv2"+value);var path=window.location.pathname.split("/",2)[1];expires=expires?"; expires="+expires.toUTCString():"",document.cookie=name+"="+value+expires+"; path=/"+path}function set_cookie(name,value,days){var date;days?((date=new Date).setTime(date.getTime()+24*days*60*60*1e3),set_cookie_with_date(name,value,date)):set_cookie_with_date(name,value)}function delete_cookie(name){set_cookie(name,"",-1)}function toggle_notice(){var details=$("#notice-collapse-box"),trigger=$("#notice-collapse-trigger");details.is(":hidden")?(details.show(),trigger.text("[hide]")):(details.hide(),trigger.text("[show]"))}function install_notice(){var details=$("#notice-collapse-box"),trigger=$("#notice-collapse-trigger");0<=details.length&&0<=trigger.length&&(trigger.replaceWith($("<a/>",{id:"notice-collapse-trigger",href:"#",text:"[show]",click:function(){return toggle_notice(),!1}})),details.hide())}$(document).ready(function(){$("#action-search").change(function(){$(".cv-search").prop("disabled",!1),$(".cv-compare").prop("disabled",!0)}),$("#action-compare").change(function(){$(".cv-search").prop("disabled",!0),$(".cv-compare").prop("disabled",!1)}),$("#action-search").is(":checked")&&$("#action-search").change(),$("#action-compare").is(":checked")&&$("#action-compare").change(),$("#cv-form").submit(function(){$("#action-search").is(":checked")&&$.each([["engine","use_engine"],["links","use_links"],["turnitin","turnitin"]],function(i,val){$("#cv-cb-"+val[0]).is(":checked")&&$("#cv-form input[type='hidden'][name='"+val[1]+"']").prop("disabled",!0)}),$("#cv-form button[type='submit']").prop("disabled",!0).css("cursor","progress")}),0<=$("#cv-additional").length&&($("#cv-additional").css("display","block"),$(".source-default-hidden").css("display","none"),$("#show-additional-sources").click(function(){return $(".source-default-hidden").css("display",""),$("#cv-additional").css("display","none"),!1})),install_notice()}); | |||||
| @@ -15,7 +15,7 @@ h2 { | |||||
| margin-bottom: 0.2em; | margin-bottom: 0.2em; | ||||
| } | } | ||||
| div#header { | |||||
| #header { | |||||
| font-size: 2.5em; | font-size: 2.5em; | ||||
| font-weight: bold; | font-weight: bold; | ||||
| margin: 20px 60px; | margin: 20px 60px; | ||||
| @@ -24,7 +24,7 @@ div#header { | |||||
| background-color: #FFF; | background-color: #FFF; | ||||
| } | } | ||||
| div#container { | |||||
| #container { | |||||
| line-height: 1.25; | line-height: 1.25; | ||||
| margin: 0 60px 65px 60px; | margin: 0 60px 65px 60px; | ||||
| padding: 5px 15px 15px 15px; | padding: 5px 15px 15px 15px; | ||||
| @@ -32,7 +32,7 @@ div#container { | |||||
| background-color: #FFF; | background-color: #FFF; | ||||
| } | } | ||||
| div#footer { | |||||
| #footer { | |||||
| position: fixed; | position: fixed; | ||||
| width: 100%; | width: 100%; | ||||
| height: 45px; | height: 45px; | ||||
| @@ -44,218 +44,226 @@ div#footer { | |||||
| background: #DDDDDD; | background: #DDDDDD; | ||||
| } | } | ||||
| div#notice-box { | |||||
| #footer li { | |||||
| display: inline; | |||||
| } | |||||
| #footer li:not(:last-child)::after { | |||||
| content: ' \00b7'; | |||||
| } | |||||
| #notice-box { | |||||
| padding: 10px; | padding: 10px; | ||||
| margin: 10px 5px; | margin: 10px 5px; | ||||
| } | } | ||||
| div#notice-box p { | |||||
| #notice-box p { | |||||
| margin: 0.25em 0; | margin: 0.25em 0; | ||||
| } | } | ||||
| div#notice-box ul { | |||||
| #notice-box ul { | |||||
| padding-left: 1.5em; | padding-left: 1.5em; | ||||
| margin: 0; | margin: 0; | ||||
| } | } | ||||
| div#info-box { | |||||
| #info-box { | |||||
| padding: 0 10px; | padding: 0 10px; | ||||
| margin: 10px 5px; | margin: 10px 5px; | ||||
| } | } | ||||
| div#cv-result { | |||||
| #cv-result { | |||||
| padding: 5px; | padding: 5px; | ||||
| margin: 10px 5px; | margin: 10px 5px; | ||||
| } | } | ||||
| div#attribution-warning { | |||||
| #attribution-warning { | |||||
| padding: 1em; | padding: 1em; | ||||
| margin: 15px 5px 10px 5px; | margin: 15px 5px 10px 5px; | ||||
| } | } | ||||
| div#turnitin-container { | |||||
| #turnitin-container { | |||||
| padding: 5px; | padding: 5px; | ||||
| margin: 15px 5px 10px 5px; | margin: 15px 5px 10px 5px; | ||||
| } | } | ||||
| div#sources-container { | |||||
| #sources-container { | |||||
| padding: 5px 10px; | padding: 5px 10px; | ||||
| margin: 15px 5px 10px 5px; | margin: 15px 5px 10px 5px; | ||||
| background-color: #EEE; | background-color: #EEE; | ||||
| border: 1px solid #BBB; | border: 1px solid #BBB; | ||||
| } | } | ||||
| div#turnitin-title, div#sources-title { | |||||
| #turnitin-title, #sources-title { | |||||
| margin-bottom: -5px; | margin-bottom: -5px; | ||||
| text-align: center; | text-align: center; | ||||
| font-weight: bold; | font-weight: bold; | ||||
| } | } | ||||
| div#turnitin-summary { | |||||
| #turnitin-summary { | |||||
| padding-bottom: 5px; | padding-bottom: 5px; | ||||
| font-style: italic; | font-style: italic; | ||||
| } | } | ||||
| div#cv-additional { | |||||
| #cv-additional { | |||||
| display: none; | display: none; | ||||
| } | } | ||||
| div#generation-time { | |||||
| #generation-time { | |||||
| margin-right: 5px; | margin-right: 5px; | ||||
| text-align: right; | text-align: right; | ||||
| font-style: italic; | font-style: italic; | ||||
| } | } | ||||
| div#cv-chain-container { | |||||
| #cv-chain-container { | |||||
| margin: 0 4px; | margin: 0 4px; | ||||
| } | } | ||||
| table#heading { | |||||
| #heading { | |||||
| width: 100%; | width: 100%; | ||||
| } | } | ||||
| table#cv-form-outer { | |||||
| #cv-form-outer { | |||||
| width: 800px; | width: 800px; | ||||
| } | } | ||||
| table#cv-form-inner { | |||||
| #cv-form-inner { | |||||
| width: 100%; | width: 100%; | ||||
| border-spacing: 0; | border-spacing: 0; | ||||
| } | } | ||||
| table#cv-result-sources { | |||||
| #cv-result-sources { | |||||
| width: 100%; | width: 100%; | ||||
| border-spacing: 0 4px; | border-spacing: 0 4px; | ||||
| table-layout: fixed; | table-layout: fixed; | ||||
| } | } | ||||
| table#cv-result-sources col:nth-child(1) { width: 80%; } | |||||
| table#cv-result-sources col:nth-child(2) { width: 10%; } | |||||
| table#cv-result-sources col:nth-child(3) { width: 10%; } | |||||
| #cv-result-sources col:nth-child(1) { width: 80%; } | |||||
| #cv-result-sources col:nth-child(2) { width: 10%; } | |||||
| #cv-result-sources col:nth-child(3) { width: 10%; } | |||||
| table#cv-result-sources th { | |||||
| #cv-result-sources th { | |||||
| text-align: left; | text-align: left; | ||||
| } | } | ||||
| table#cv-result-sources tr:nth-child(even) { | |||||
| #cv-result-sources tr:nth-child(even) { | |||||
| background-color: #E0E0E0; | background-color: #E0E0E0; | ||||
| } | } | ||||
| table#cv-result-sources td:first-child { | |||||
| #cv-result-sources td:first-child { | |||||
| overflow: hidden; | overflow: hidden; | ||||
| word-wrap: break-word; | word-wrap: break-word; | ||||
| } | } | ||||
| table#cv-result-head-table { | |||||
| #cv-result-head-table { | |||||
| width: 100%; | width: 100%; | ||||
| text-align: center; | text-align: center; | ||||
| table-layout: fixed; | table-layout: fixed; | ||||
| border-spacing: 0; | border-spacing: 0; | ||||
| } | } | ||||
| table#cv-result-head-table col:nth-child(odd) { | |||||
| #cv-result-head-table col:nth-child(odd) { | |||||
| width: 42.5%; | width: 42.5%; | ||||
| } | } | ||||
| table#cv-result-head-table col:nth-child(2) { | |||||
| #cv-result-head-table col:nth-child(2) { | |||||
| width: 15%; | width: 15%; | ||||
| } | } | ||||
| table#cv-result-head-table td:nth-child(odd) { | |||||
| #cv-result-head-table td:nth-child(odd) { | |||||
| font-size: 1.25em; | font-size: 1.25em; | ||||
| font-weight: bold; | font-weight: bold; | ||||
| overflow: hidden; | overflow: hidden; | ||||
| word-wrap: break-word; | word-wrap: break-word; | ||||
| } | } | ||||
| table#cv-result-head-table td:nth-child(2) div:nth-child(1) { | |||||
| #cv-result-head-table td:nth-child(2) div:nth-child(1) { | |||||
| font-weight: bold; | font-weight: bold; | ||||
| } | } | ||||
| table#cv-result-head-table td:nth-child(2) div:nth-child(2) { | |||||
| #cv-result-head-table td:nth-child(2) div:nth-child(2) { | |||||
| font-size: 2.5em; | font-size: 2.5em; | ||||
| font-weight: bold; | font-weight: bold; | ||||
| line-height: 1; | line-height: 1; | ||||
| } | } | ||||
| table#cv-result-head-table td:nth-child(2) div:nth-child(3) { | |||||
| #cv-result-head-table td:nth-child(2) div:nth-child(3) { | |||||
| font-size: 0.8em; | font-size: 0.8em; | ||||
| } | } | ||||
| table#cv-chain-table { | |||||
| #cv-chain-table { | |||||
| width: 100%; | width: 100%; | ||||
| margin-bottom: 10px; | margin-bottom: 10px; | ||||
| border-spacing: 0; | border-spacing: 0; | ||||
| table-layout: fixed; | table-layout: fixed; | ||||
| } | } | ||||
| table#turnitin-table { | |||||
| #turnitin-table { | |||||
| table-layout: fixed; | table-layout: fixed; | ||||
| width: 100%; | width: 100%; | ||||
| word-wrap: break-word; | word-wrap: break-word; | ||||
| border-spacing: 0; | border-spacing: 0; | ||||
| } | } | ||||
| tr#source-row-selected { | |||||
| #source-row-selected { | |||||
| background-color: #CFCFCF !important; | background-color: #CFCFCF !important; | ||||
| } | } | ||||
| td#head-settings { | |||||
| #head-settings { | |||||
| text-align: right; | text-align: right; | ||||
| } | } | ||||
| td#cv-col1 { | |||||
| #cv-col1 { | |||||
| width: 15%; | width: 15%; | ||||
| } | } | ||||
| td#cv-col2 { | |||||
| #cv-col2 { | |||||
| width: 55%; | width: 55%; | ||||
| } | } | ||||
| td#cv-col3 { | |||||
| #cv-col3 { | |||||
| width: 15%; | width: 15%; | ||||
| text-align: center; | text-align: center; | ||||
| } | } | ||||
| td#cv-col4 { | |||||
| #cv-col4 { | |||||
| width: 15%; | width: 15%; | ||||
| } | } | ||||
| td#cv-inner-col1 { | |||||
| #cv-inner-col1 { | |||||
| width: 4%; | width: 4%; | ||||
| } | } | ||||
| td#cv-inner-col2 { | |||||
| #cv-inner-col2 { | |||||
| width: 22%; | width: 22%; | ||||
| } | } | ||||
| td#cv-inner-col3 { | |||||
| #cv-inner-col3 { | |||||
| width: 76%; | width: 76%; | ||||
| } | } | ||||
| h2#cv-result-header { | |||||
| #cv-result-header { | |||||
| margin: 0; | margin: 0; | ||||
| } | } | ||||
| span#redirected-from { | |||||
| #redirected-from { | |||||
| font-size: 0.75em; | font-size: 0.75em; | ||||
| font-weight: normal; | font-weight: normal; | ||||
| font-style: italic; | font-style: italic; | ||||
| } | } | ||||
| span#result-head-no-sources { | |||||
| #result-head-no-sources { | |||||
| font-style: italic; | font-style: italic; | ||||
| } | } | ||||
| a#source-selected { | |||||
| #source-selected { | |||||
| font-weight: bold; | font-weight: bold; | ||||
| } | } | ||||
| a#cv-cached { | |||||
| #cv-cached { | |||||
| position: relative; | position: relative; | ||||
| } | } | ||||
| a#cv-cached span { | |||||
| #cv-cached span { | |||||
| display: none; | display: none; | ||||
| position: absolute; | position: absolute; | ||||
| top: 20px; | top: 20px; | ||||
| @@ -270,125 +278,125 @@ a#cv-cached span { | |||||
| text-align: left; | text-align: left; | ||||
| } | } | ||||
| div.green-box { | |||||
| .green-box { | |||||
| background-color: #EFE; | background-color: #EFE; | ||||
| border: 1px solid #7F7; | border: 1px solid #7F7; | ||||
| } | } | ||||
| div.yellow-box { | |||||
| .yellow-box { | |||||
| background-color: #FFD; | background-color: #FFD; | ||||
| border: 1px solid #EE5; | border: 1px solid #EE5; | ||||
| } | } | ||||
| div.red-box { | |||||
| .red-box { | |||||
| background-color: #FEE; | background-color: #FEE; | ||||
| border: 1px solid #F77; | border: 1px solid #F77; | ||||
| } | } | ||||
| div.gray-box { | |||||
| .gray-box { | |||||
| background-color: #EEE; | background-color: #EEE; | ||||
| border: 1px solid #AAA; | border: 1px solid #AAA; | ||||
| } | } | ||||
| div.indentable { | |||||
| .indentable { | |||||
| white-space: pre-wrap; | white-space: pre-wrap; | ||||
| } | } | ||||
| div.cv-source-footer { | |||||
| .cv-source-footer { | |||||
| padding-bottom: 5px; | padding-bottom: 5px; | ||||
| font-style: italic; | font-style: italic; | ||||
| } | } | ||||
| div.cv-source-footer a { | |||||
| .cv-source-footer a { | |||||
| font-style: normal; | font-style: normal; | ||||
| } | } | ||||
| div.cv-chain-detail { | |||||
| .cv-chain-detail { | |||||
| padding: 0 10px 0 10px; | padding: 0 10px 0 10px; | ||||
| background-color: #FFF; | background-color: #FFF; | ||||
| border: 1px solid #BBB; | border: 1px solid #BBB; | ||||
| } | } | ||||
| td.cv-chain-cell { | |||||
| .cv-chain-cell { | |||||
| vertical-align: top; | vertical-align: top; | ||||
| word-wrap: break-word; | word-wrap: break-word; | ||||
| } | } | ||||
| td.cv-chain-cell:first-child { | |||||
| .cv-chain-cell:first-child { | |||||
| padding-right: 5px; | padding-right: 5px; | ||||
| } | } | ||||
| td.cv-chain-cell:last-child { | |||||
| .cv-chain-cell:last-child { | |||||
| padding-left: 5px; | padding-left: 5px; | ||||
| } | } | ||||
| td.turnitin-table-cell { | |||||
| .turnitin-table-cell { | |||||
| padding: 0.5em 0 0.3em 0; | padding: 0.5em 0 0.3em 0; | ||||
| } | } | ||||
| td.turnitin-table-cell ul { | |||||
| .turnitin-table-cell ul { | |||||
| margin: 0.2em 0 0 0; | margin: 0.2em 0 0 0; | ||||
| line-height: 1.4; | line-height: 1.4; | ||||
| } | } | ||||
| input.cv-text { | |||||
| .cv-text { | |||||
| width: 100%; | width: 100%; | ||||
| } | } | ||||
| input.cv-search { | |||||
| .cv-search { | |||||
| margin-left: 0; | margin-left: 0; | ||||
| margin-right: 5px; | margin-right: 5px; | ||||
| } | } | ||||
| input.cv-search ~ input.cv-search { | |||||
| .cv-search ~ .cv-search { | |||||
| margin-left: 20px; | margin-left: 20px; | ||||
| } | } | ||||
| span.cv-hl { | |||||
| .cv-hl { | |||||
| background: #FAA; | background: #FAA; | ||||
| } | } | ||||
| span.cv-hl-in { | |||||
| .cv-hl-in { | |||||
| background: #FCC; | background: #FCC; | ||||
| background: linear-gradient(to left, #FAA, #FFF); | background: linear-gradient(to left, #FAA, #FFF); | ||||
| } | } | ||||
| span.cv-hl-out { | |||||
| .cv-hl-out { | |||||
| background: #FCC; | background: #FCC; | ||||
| background: linear-gradient(to right, #FAA, #FFF); | background: linear-gradient(to right, #FAA, #FFF); | ||||
| } | } | ||||
| span.mono { font-family: monospace; } | |||||
| span.light { color: #CCC; } | |||||
| span.medium { color: #AAA; } | |||||
| .mono { font-family: monospace; } | |||||
| .light { color: #CCC; } | |||||
| .medium { color: #AAA; } | |||||
| span.source-similarity { font-weight: bold; } | |||||
| span.source-suspect { color: #900; } | |||||
| span.source-possible { color: #990; } | |||||
| span.source-novio { color: #090; } | |||||
| span.source-skipped { font-style: italic; } | |||||
| span.source-excluded { font-style: italic; } | |||||
| .source-similarity { font-weight: bold; } | |||||
| .source-suspect { color: #900; } | |||||
| .source-possible { color: #990; } | |||||
| .source-novio { color: #090; } | |||||
| .source-skipped { font-style: italic; } | |||||
| .source-excluded { font-style: italic; } | |||||
| a:link { color: #373; text-decoration: none; } | a:link { color: #373; text-decoration: none; } | ||||
| a:visited { color: #373; text-decoration: none; } | a:visited { color: #373; text-decoration: none; } | ||||
| a:hover { color: #040; text-decoration: underline; } | a:hover { color: #040; text-decoration: underline; } | ||||
| a:active { color: #404; text-decoration: underline; } | a:active { color: #404; text-decoration: underline; } | ||||
| a:link#a-home { color: #777; } | |||||
| a:visited#a-home { color: #777; } | |||||
| a:hover#a-home { color: #555; } | |||||
| a:active#a-home { color: #333; } | |||||
| #a-home:link { color: #777; } | |||||
| #a-home:visited { color: #777; } | |||||
| #a-home:hover { color: #555; } | |||||
| #a-home:active { color: #333; } | |||||
| a:link#a-settings { color: #AAA; } | |||||
| a:visited#a-settings { color: #AAA; } | |||||
| a:hover#a-settings { color: #888; } | |||||
| a:active#a-settings { color: #666; } | |||||
| #a-settings:link { color: #AAA; } | |||||
| #a-settings:visited { color: #AAA; } | |||||
| #a-settings:hover { color: #888; } | |||||
| #a-settings:active { color: #666; } | |||||
| a:active#cv-cached { color: #040; text-decoration: none; } | |||||
| a:hover#cv-cached { text-decoration: none; } | |||||
| a:hover#cv-cached span { display: block; } | |||||
| #cv-cached:active { color: #040; text-decoration: none; } | |||||
| #cv-cached:hover { text-decoration: none; } | |||||
| #cv-cached:hover span { display: block; } | |||||
| a:link.source-url { color: #357; } | |||||
| a:visited.source-url { color: #357; } | |||||
| a:hover.source-url { color: #035; } | |||||
| a:active.source-url { color: #404; } | |||||
| .source-url:link { color: #357; } | |||||
| .source-url:visited { color: #357; } | |||||
| .source-url:hover { color: #035; } | |||||
| .source-url:active { color: #404; } | |||||
| @@ -0,0 +1 @@ | |||||
| body{font-family:helvetica,arial,clean,sans-serif;font-size:14px;color:#000;background-color:#000;background-attachment:fixed;margin:0}ol,ul{line-height:1.5}h2{margin-bottom:.2em}#header{font-size:2.5em;font-weight:700;margin:20px 60px;padding:10px 15px}#container,#header{border:1px solid #777;background-color:#fff}#container{line-height:1.25;margin:0 60px 65px;padding:5px 15px 15px}#footer{position:fixed;width:100%;height:45px;bottom:0;font-size:.85em;text-align:center;line-height:1.5;border-top:1px solid #777;background:#ddd}#footer li{display:inline}#footer li:not(:last-child):after{content:" \00b7"}#notice-box{padding:10px;margin:10px 5px}#notice-box p{margin:.25em 0}#notice-box ul{padding-left:1.5em;margin:0}#info-box{padding:0 10px;margin:10px 5px}#cv-result{padding:5px;margin:10px 5px}#attribution-warning{padding:1em;margin:15px 5px 10px}#turnitin-container{padding:5px;margin:15px 5px 10px}#sources-container{padding:5px 10px;margin:15px 5px 10px;background-color:#eee;border:1px solid #bbb}#sources-title,#turnitin-title{margin-bottom:-5px;text-align:center;font-weight:700}#turnitin-summary{padding-bottom:5px;font-style:italic}#cv-additional{display:none}#generation-time{margin-right:5px;text-align:right;font-style:italic}#cv-chain-container{margin:0 4px}#heading{width:100%}#cv-form-outer{width:800px}#cv-form-inner{width:100%;border-spacing:0}#cv-result-sources{width:100%;border-spacing:0 4px;table-layout:fixed}#cv-result-sources col:first-child{width:80%}#cv-result-sources col:nth-child(2),#cv-result-sources col:nth-child(3){width:10%}#cv-result-sources th{text-align:left}#cv-result-sources tr:nth-child(2n){background-color:#e0e0e0}#cv-result-sources td:first-child{overflow:hidden;word-wrap:break-word}#cv-result-head-table{width:100%;text-align:center;table-layout:fixed;border-spacing:0}#cv-result-head-table col:nth-child(odd){width:42.5%}#cv-result-head-table col:nth-child(2){width:15%}#cv-result-head-table td:nth-child(odd){font-size:1.25em;font-weight:700;overflow:hidden;word-wrap:break-word}#cv-result-head-table td:nth-child(2) div:first-child{font-weight:700}#cv-result-head-table td:nth-child(2) div:nth-child(2){font-size:2.5em;font-weight:700;line-height:1}#cv-result-head-table td:nth-child(2) div:nth-child(3){font-size:.8em}#cv-chain-table{margin-bottom:10px}#cv-chain-table,#turnitin-table{width:100%;border-spacing:0;table-layout:fixed}#turnitin-table{word-wrap:break-word}#source-row-selected{background-color:#cfcfcf!important}#head-settings{text-align:right}#cv-col1{width:15%}#cv-col2{width:55%}#cv-col3{text-align:center}#cv-col3,#cv-col4{width:15%}#cv-inner-col1{width:4%}#cv-inner-col2{width:22%}#cv-inner-col3{width:76%}#cv-result-header{margin:0}#redirected-from{font-size:.75em;font-weight:400}#redirected-from,#result-head-no-sources{font-style:italic}#source-selected{font-weight:700}#cv-cached{position:relative}#cv-cached span{display:none;position:absolute;top:20px;left:-50px;width:500px;padding:5px;z-index:1;background:#f3f3f3;border:1px solid #aaa;color:#000;font-style:normal;text-align:left}.green-box{background-color:#efe;border:1px solid #7f7}.yellow-box{background-color:#ffd;border:1px solid #ee5}.red-box{background-color:#fee;border:1px solid #f77}.gray-box{background-color:#eee;border:1px solid #aaa}.indentable{white-space:pre-wrap}.cv-source-footer{padding-bottom:5px;font-style:italic}.cv-source-footer a{font-style:normal}.cv-chain-detail{padding:0 10px;background-color:#fff;border:1px solid #bbb}.cv-chain-cell{vertical-align:top;word-wrap:break-word}.cv-chain-cell:first-child{padding-right:5px}.cv-chain-cell:last-child{padding-left:5px}.turnitin-table-cell{padding:.5em 0 .3em}.turnitin-table-cell ul{margin:.2em 0 0;line-height:1.4}.cv-text{width:100%}.cv-search{margin-left:0;margin-right:5px}.cv-search~.cv-search{margin-left:20px}.cv-hl{background:#faa}.cv-hl-in{background:#fcc;background:linear-gradient(270deg,#faa,#fff)}.cv-hl-out{background:#fcc;background:linear-gradient(90deg,#faa,#fff)}.mono{font-family:monospace}.light{color:#ccc}.medium{color:#aaa}.source-similarity{font-weight:700}.source-suspect{color:#900}.source-possible{color:#990}.source-novio{color:#090}.source-excluded,.source-skipped{font-style:italic}a:link,a:visited{color:#373;text-decoration:none}a:hover{color:#040}a:active,a:hover{text-decoration:underline}a:active{color:#404}#a-home:link,#a-home:visited{color:#777}#a-home:hover{color:#555}#a-home:active{color:#333}#a-settings:link,#a-settings:visited{color:#aaa}#a-settings:hover{color:#888}#a-settings:active{color:#666}#cv-cached:active{color:#040}#cv-cached:active,#cv-cached:hover{text-decoration:none}#cv-cached:hover span{display:block}.source-url:link,.source-url:visited{color:#357}.source-url:hover{color:#035}.source-url:active{color:#404} | |||||
| @@ -3,7 +3,7 @@ | |||||
| "title" : "Copyvios", | "title" : "Copyvios", | ||||
| "description" : "Detects copyright violations in pages by searching for their contents online. Can also compare a page and a specific URL.", | "description" : "Detects copyright violations in pages by searching for their contents online. Can also compare a page and a specific URL.", | ||||
| "url" : "https://copyvios.toolforge.org/", | "url" : "https://copyvios.toolforge.org/", | ||||
| "keywords" : "copyvios, copyright violations", | |||||
| "keywords" : "copyvios, copyright violations, plagiarism", | |||||
| "author" : "The Earwig", | "author" : "The Earwig", | ||||
| "repository" : "https://github.com/earwig/copyvios" | "repository" : "https://github.com/earwig/copyvios" | ||||
| } | } | ||||
| @@ -4,14 +4,14 @@ | |||||
| %>\ | %>\ | ||||
| </div> | </div> | ||||
| <div id="footer"> | <div id="footer"> | ||||
| <p>Copyright © 2009–${datetime.now().year} <a href="https://en.wikipedia.org/wiki/User:The_Earwig">Ben Kurtovic</a> • \ | |||||
| <a href="${request.script_root}/api">API</a> • \ | |||||
| <a href="https://github.com/earwig/copyvios">Source Code</a> • \ | |||||
| <ul> | |||||
| <li>Maintained by <a href="https://en.wikipedia.org/wiki/User:The_Earwig">Ben Kurtovic</a></li> | |||||
| <li><a href="${request.script_root}/api">API</a></li> | |||||
| <li><a href="https://github.com/earwig/copyvios">Source code</a></li> | |||||
| % if ("CopyviosBackground" in g.cookies and g.cookies["CopyviosBackground"].value in ["potd", "list"]) or "CopyviosBackground" not in g.cookies: | % if ("CopyviosBackground" in g.cookies and g.cookies["CopyviosBackground"].value in ["potd", "list"]) or "CopyviosBackground" not in g.cookies: | ||||
| <a href="${g.descurl | h}">Background</a> • \ | |||||
| <li><a href="${g.descurl | h}">Background image</a></li> | |||||
| % endif | % endif | ||||
| <a href="https://validator.w3.org/check?uri=referer">Valid HTML5</a> | |||||
| </p> | |||||
| </ul> | |||||
| </div> | </div> | ||||
| </body> | </body> | ||||
| </html> | </html> | ||||