@@ -1,58 +1,89 @@ | |||||
html, body { | |||||
height: 100%; | |||||
margin: 0; | |||||
} | |||||
body { | body { | ||||
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; | |||||
display: flex; | |||||
flex-direction: column; | |||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; | |||||
font-size: 14px; | font-size: 14px; | ||||
color: #000; | color: #000; | ||||
background-color: #000; | |||||
background-color: #eaecf0; | |||||
background-attachment: fixed; | background-attachment: fixed; | ||||
background-position: center; | background-position: center; | ||||
margin: 0; | |||||
background-size: cover; | |||||
} | } | ||||
ul, ol { | |||||
line-height: 1.5; | |||||
#container { | |||||
flex: auto; | |||||
line-height: 1.25; | |||||
margin: 0 auto; | |||||
} | } | ||||
h2 { | |||||
margin-bottom: 0.2em; | |||||
#container > div { | |||||
background-color: #fff; | |||||
border: 1px solid #c8ccd1; | |||||
filter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.25)); | |||||
margin: 1.5em 3em; | |||||
padding: 1em; | |||||
} | } | ||||
#header { | |||||
font-size: 2.5em; | |||||
font-weight: bold; | |||||
margin: 20px 60px; | |||||
padding: 10px 15px; | |||||
border: 1px solid #777; | |||||
background-color: #FFF; | |||||
header { | |||||
background-color: #eaecf0; | |||||
padding: 0.2em 1em; | |||||
} | } | ||||
#container { | |||||
line-height: 1.25; | |||||
margin: 0 60px 65px 60px; | |||||
padding: 5px 15px 15px 15px; | |||||
border: 1px solid #777; | |||||
background-color: #FFF; | |||||
header > * { | |||||
vertical-align: middle; | |||||
display: inline-block; | |||||
} | } | ||||
#footer { | |||||
position: fixed; | |||||
width: 100%; | |||||
height: 45px; | |||||
bottom: 0; | |||||
header h1 { | |||||
font-size: 2em; | |||||
margin: 0 1em 0 0; | |||||
} | |||||
#settings-link::before { | |||||
content: ' '; | |||||
font-size: 0.85em; | font-size: 0.85em; | ||||
color: black; | |||||
opacity: 0.6; | |||||
padding-left: 1.67em; | |||||
background-image: linear-gradient(transparent,transparent), url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xmlns:xlink=%22http://www.w3.org/1999/xlink%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Esettings%3C/title%3E%3Cg transform=%22translate%2810 10%29%22%3E%3Cpath id=%22a%22 d=%22M1.5-10h-3l-1 6.5h5m0 7h-5l1 6.5h3%22/%3E%3Cuse transform=%22rotate%2845%29%22 xlink:href=%22%23a%22/%3E%3Cuse transform=%22rotate%2890%29%22 xlink:href=%22%23a%22/%3E%3Cuse transform=%22rotate%28135%29%22 xlink:href=%22%23a%22/%3E%3C/g%3E%3Cpath d=%22M10 2.5a7.5 7.5 0 000 15 7.5 7.5 0 000-15v4a3.5 3.5 0 010 7 3.5 3.5 0 010-7%22/%3E%3C/svg%3E"); | |||||
background-repeat: no-repeat; | |||||
background-size: contain; | |||||
} | |||||
footer { | |||||
padding: 1em; | |||||
font-size: 0.9em; | |||||
text-align: center; | text-align: center; | ||||
line-height: 1.5; | line-height: 1.5; | ||||
border-top: 1px solid #777; | |||||
background: #DDDDDD; | |||||
border-top: 1px solid #c8ccd1; | |||||
background: #fff; | |||||
} | } | ||||
#footer li { | |||||
footer ul { | |||||
margin: 0; | |||||
} | |||||
footer li { | |||||
display: inline; | display: inline; | ||||
} | } | ||||
#footer li:not(:last-child)::after { | |||||
footer li:not(:last-child)::after { | |||||
content: ' \00b7'; | content: ' \00b7'; | ||||
} | } | ||||
ul, ol { | |||||
line-height: 1.5; | |||||
} | |||||
h2 { | |||||
margin-bottom: 0.2em; | |||||
} | |||||
#notice-box { | #notice-box { | ||||
padding: 10px; | padding: 10px; | ||||
margin: 10px 5px; | margin: 10px 5px; | ||||
@@ -90,8 +121,8 @@ h2 { | |||||
#sources-container { | #sources-container { | ||||
padding: 5px 10px; | padding: 5px 10px; | ||||
margin: 15px 5px 10px 5px; | margin: 15px 5px 10px 5px; | ||||
background-color: #EEE; | |||||
border: 1px solid #BBB; | |||||
background-color: #eee; | |||||
border: 1px solid #bbb; | |||||
} | } | ||||
#turnitin-title, #sources-title { | #turnitin-title, #sources-title { | ||||
@@ -147,7 +178,7 @@ h2 { | |||||
} | } | ||||
#cv-result-sources tr:nth-child(even) { | #cv-result-sources tr:nth-child(even) { | ||||
background-color: #E0E0E0; | |||||
background-color: #e0e0e0; | |||||
} | } | ||||
#cv-result-sources td:first-child { | #cv-result-sources td:first-child { | ||||
@@ -206,7 +237,7 @@ h2 { | |||||
} | } | ||||
#source-row-selected { | #source-row-selected { | ||||
background-color: #CFCFCF !important; | |||||
background-color: #cfcfcf !important; | |||||
} | } | ||||
#head-settings { | #head-settings { | ||||
@@ -272,31 +303,31 @@ h2 { | |||||
width: 500px; | width: 500px; | ||||
padding: 5px; | padding: 5px; | ||||
z-index: 1; | z-index: 1; | ||||
background: #F3F3F3; | |||||
border: 1px solid #AAA; | |||||
background: #f3f3f3; | |||||
border: 1px solid #aaa; | |||||
color: black; | color: black; | ||||
font-style: normal; | font-style: normal; | ||||
text-align: left; | text-align: left; | ||||
} | } | ||||
.green-box { | .green-box { | ||||
background-color: #EFE; | |||||
border: 1px solid #7F7; | |||||
background-color: #efe; | |||||
border: 1px solid #7f7; | |||||
} | } | ||||
.yellow-box { | .yellow-box { | ||||
background-color: #FFD; | |||||
border: 1px solid #EE5; | |||||
background-color: #ffd; | |||||
border: 1px solid #ee5; | |||||
} | } | ||||
.red-box { | .red-box { | ||||
background-color: #FEE; | |||||
border: 1px solid #F77; | |||||
background-color: #fee; | |||||
border: 1px solid #f77; | |||||
} | } | ||||
.gray-box { | .gray-box { | ||||
background-color: #EEE; | |||||
border: 1px solid #AAA; | |||||
background-color: #eee; | |||||
border: 1px solid #aaa; | |||||
} | } | ||||
.indentable { | .indentable { | ||||
@@ -314,8 +345,8 @@ h2 { | |||||
.cv-chain-detail { | .cv-chain-detail { | ||||
padding: 0 10px 0 10px; | padding: 0 10px 0 10px; | ||||
background-color: #FFF; | |||||
border: 1px solid #BBB; | |||||
background-color: #fff; | |||||
border: 1px solid #bbb; | |||||
} | } | ||||
.cv-chain-cell { | .cv-chain-cell { | ||||
@@ -354,22 +385,22 @@ h2 { | |||||
} | } | ||||
.cv-hl { | .cv-hl { | ||||
background: #FAA; | |||||
background: #faa; | |||||
} | } | ||||
.cv-hl-in { | .cv-hl-in { | ||||
background: #FCC; | |||||
background: linear-gradient(to left, #FAA, #FFF); | |||||
background: #fcc; | |||||
background: linear-gradient(to left, #faa, #fff); | |||||
} | } | ||||
.cv-hl-out { | .cv-hl-out { | ||||
background: #FCC; | |||||
background: linear-gradient(to right, #FAA, #FFF); | |||||
background: #fcc; | |||||
background: linear-gradient(to right, #faa, #fff); | |||||
} | } | ||||
.mono { font-family: monospace; } | .mono { font-family: monospace; } | ||||
.light { color: #CCC; } | |||||
.medium { color: #AAA; } | |||||
.light { color: #ccc; } | |||||
.medium { color: #aaa; } | |||||
.source-similarity { font-weight: bold; } | .source-similarity { font-weight: bold; } | ||||
.source-suspect { color: #900; } | .source-suspect { color: #900; } | ||||
@@ -393,15 +424,13 @@ a:active { | |||||
text-decoration: underline; | text-decoration: underline; | ||||
} | } | ||||
#a-home:link { color: #777; } | |||||
#a-home:visited { color: #777; } | |||||
#a-home:hover { color: #555; } | |||||
#a-home:active { color: #333; } | |||||
header a:link, header a:visited, header a:hover { | |||||
color: #54595d; | |||||
} | |||||
#a-settings:link { color: #AAA; } | |||||
#a-settings:visited { color: #AAA; } | |||||
#a-settings:hover { color: #888; } | |||||
#a-settings:active { color: #666; } | |||||
header a:active { | |||||
color: #333; | |||||
} | |||||
#cv-cached:active { color: #040; text-decoration: none; } | #cv-cached:active { color: #040; text-decoration: none; } | ||||
#cv-cached:hover { text-decoration: none; } | #cv-cached:hover { text-decoration: none; } | ||||
@@ -33,7 +33,7 @@ | |||||
<html lang="en"> | <html lang="en"> | ||||
<head> | <head> | ||||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||||
<title>API – Earwig's Copyvio Detector</title> | |||||
<title>API | Earwig's Copyvio Detector</title> | |||||
<link rel="stylesheet" href="${request.script_root}${url_for('static', file='api.min.css')}" type="text/css" /> | <link rel="stylesheet" href="${request.script_root}${url_for('static', file='api.min.css')}" type="text/css" /> | ||||
</head> | </head> | ||||
<body> | <body> | ||||
@@ -1,4 +1,4 @@ | |||||
<%include file="/support/header.mako" args="title='Error! – Earwig\'s Copyvio Detector'"/> | |||||
<%include file="/support/header.mako" args="title='Error! | Earwig\'s Copyvio Detector'"/> | |||||
<h2>Error!</h2> | <h2>Error!</h2> | ||||
<p>An error occurred. If it hasn't been reported (<a href="https://github.com/earwig/copyvios/issues">try to check</a>), please <a href="https://github.com/earwig/copyvios/issues/new">file an issue</a> or <a href="mailto:wikipedia.earwig@gmail.com">email me</a>. Include the following information:</p> | <p>An error occurred. If it hasn't been reported (<a href="https://github.com/earwig/copyvios/issues">try to check</a>), please <a href="https://github.com/earwig/copyvios/issues/new">file an issue</a> or <a href="mailto:wikipedia.earwig@gmail.com">email me</a>. Include the following information:</p> | ||||
<div id="info-box" class="red-box"> | <div id="info-box" class="red-box"> | ||||
@@ -4,7 +4,14 @@ | |||||
from copyvios.checker import T_POSSIBLE, T_SUSPECT | from copyvios.checker import T_POSSIBLE, T_SUSPECT | ||||
from copyvios.misc import cache | from copyvios.misc import cache | ||||
%>\ | %>\ | ||||
<%include file="/support/header.mako" args="title='Earwig\'s Copyvio Detector'"/> | |||||
<% | |||||
titleparts = [] | |||||
if query.page: | |||||
titleparts.append(query.page.title) | |||||
titleparts.append("Earwig's Copyvio Detector") | |||||
title = " | ".join(titleparts) | |||||
%>\ | |||||
<%include file="/support/header.mako" args="title=title"/> | |||||
<%namespace module="copyvios.highlighter" import="highlight_delta"/>\ | <%namespace module="copyvios.highlighter" import="highlight_delta"/>\ | ||||
<%namespace module="copyvios.misc" import="httpsfix, urlstrip"/>\ | <%namespace module="copyvios.misc" import="httpsfix, urlstrip"/>\ | ||||
% if notice: | % if notice: | ||||
@@ -49,9 +56,9 @@ | |||||
</div> | </div> | ||||
% endif | % endif | ||||
%endif | %endif | ||||
<p>This tool attempts to detect <a href="https://en.wikipedia.org/wiki/WP:COPYVIO">copyright violations</a> in articles. In <i>search mode</i>, it will check for similar content elsewhere on the web using <a href="https://developers.google.com/custom-search/">Google</a>, external links present in the text of the page, or <a href="https://en.wikipedia.org/wiki/Wikipedia:Turnitin">Turnitin</a> (provided by <a href="https://en.wikipedia.org/wiki/User:EranBot">EranBot</a>), depending on which options are selected. In <i>comparison mode</i>, the tool will compare the article to a specific webpage without making additional searches, like the <a href="https://dupdet.toolforge.org/">Duplication Detector</a>.</p> | |||||
<p>This tool attempts to detect <a href="https://en.wikipedia.org/wiki/WP:COPYVIO">copyright violations</a> in articles. In <i>search mode</i>, it will check for similar content elsewhere on the web using <a href="https://developers.google.com/custom-search/">Google</a>, external links present in the text of the page, or <a href="https://en.wikipedia.org/wiki/Wikipedia:Turnitin">Turnitin</a> (via <a href="https://en.wikipedia.org/wiki/User:EranBot">EranBot</a>), depending on which options are selected. In <i>comparison mode</i>, the tool will compare the article to a specific webpage without making additional searches, like the <a href="https://dupdet.toolforge.org/">Duplication Detector</a>.</p> | |||||
<p>Running a full check can take up to a minute if other websites are slow or if the tool is under heavy use. Please be patient. If you get a timeout, wait a moment and refresh the page.</p> | <p>Running a full check can take up to a minute if other websites are slow or if the tool is under heavy use. Please be patient. If you get a timeout, wait a moment and refresh the page.</p> | ||||
<p>Be aware that other websites can copy from Wikipedia, so check the results carefully, especially for older or well-developed articles. Specific websites can be skipped by being added to the <a href="https://en.wikipedia.org/wiki/User:EarwigBot/Copyvios/Exclusions">excluded URL list</a>.</p> | |||||
<p>Be aware that other websites can copy from Wikipedia, so check the results carefully, especially for older or well-developed articles. Specific websites can be skipped by adding them to the <a href="https://en.wikipedia.org/wiki/User:EarwigBot/Copyvios/Exclusions">excluded URL list</a>.</p> | |||||
<form id="cv-form" action="${request.script_root}/" method="get"> | <form id="cv-form" action="${request.script_root}/" method="get"> | ||||
<table id="cv-form-outer"> | <table id="cv-form-outer"> | ||||
<tr> | <tr> | ||||
@@ -3,7 +3,7 @@ | |||||
from flask import g, request | from flask import g, request | ||||
from copyvios.misc import cache | from copyvios.misc import cache | ||||
%>\ | %>\ | ||||
<%include file="/support/header.mako" args="title='Settings – Earwig\'s Copyvio Detector'"/> | |||||
<%include file="/support/header.mako" args="title='Settings | Earwig\'s Copyvio Detector'"/> | |||||
% if status: | % if status: | ||||
<div id="info-box" class="green-box"> | <div id="info-box" class="green-box"> | ||||
<p>${status}</p> | <p>${status}</p> | ||||
@@ -2,16 +2,18 @@ | |||||
from datetime import datetime | from datetime import datetime | ||||
from flask import g, request | from flask import g, request | ||||
%>\ | %>\ | ||||
</main> | |||||
</div> | </div> | ||||
<div id="footer"> | |||||
<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: | |||||
<li><a href="${g.descurl | h}">Background image</a></li> | |||||
% endif | |||||
</ul> | |||||
</div> | |||||
</body> | |||||
</div> | |||||
<footer> | |||||
<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: | |||||
<li><a href="${g.descurl | h}">Background image</a></li> | |||||
% endif | |||||
</ul> | |||||
</footer> | |||||
</body> | |||||
</html> | </html> |
@@ -5,25 +5,23 @@ | |||||
%>\ | %>\ | ||||
<!DOCTYPE html> | <!DOCTYPE html> | ||||
<html lang="en"> | <html lang="en"> | ||||
<head> | |||||
<meta charset="utf-8"> | |||||
<title>${title}</title> | |||||
<link rel="stylesheet" href="${request.script_root}${url_for('static', file='style.min.css')}"/> | |||||
<script src="https://tools-static.wmflabs.org/cdnjs/ajax/libs/jquery/3.3.1/jquery.min.js"></script> | |||||
<script src="${request.script_root}${url_for('static', file='script.min.js')}"></script> | |||||
</head> | |||||
<% selected = g.cookies["CopyviosBackground"].value if "CopyviosBackground" in g.cookies else "list" %>\ | |||||
% if selected == "plain": | |||||
<body style="background-image: url('${request.script_root}/static/background.png');"> | |||||
% else: | |||||
<body onload="update_screen_size()" style="background-image: url('${set_background(selected) | h}'); background-size: cover;"> | |||||
% endif | |||||
<div id="header"> | |||||
<table id="heading"> | |||||
<tr> | |||||
<td id="head-home"><a id="a-home" href="${request.script_root}/">Earwig's Copyvio Detector</a></td> | |||||
<td id="head-settings"><a id="a-settings" href="${request.script_root}/settings">Settings</a></td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div id="container"> | |||||
<head> | |||||
<meta charset="utf-8"> | |||||
<title>${title | h}</title> | |||||
<link rel="stylesheet" href="${request.script_root}${url_for('static', file='style.min.css')}"/> | |||||
<script src="https://tools-static.wmflabs.org/cdnjs/ajax/libs/jquery/3.3.1/jquery.min.js"></script> | |||||
<script src="${request.script_root}${url_for('static', file='script.min.js')}"></script> | |||||
</head> | |||||
<% selected = g.cookies["CopyviosBackground"].value if "CopyviosBackground" in g.cookies else "list" %>\ | |||||
% if selected == "plain": | |||||
<body> | |||||
% else: | |||||
<body onload="update_screen_size()" style="background-image: url('${set_background(selected) | h}');"> | |||||
% endif | |||||
<div id="container"> | |||||
<div> | |||||
<header> | |||||
<h1><a href="/">Earwig's <strong>Copyvio Detector</strong></a></h1> | |||||
<a id="settings-link" href="/settings">Settings</a> | |||||
</header> | |||||
<main> |