| @@ -1,58 +1,89 @@ | |||
| html, body { | |||
| height: 100%; | |||
| margin: 0; | |||
| } | |||
| 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; | |||
| color: #000; | |||
| background-color: #000; | |||
| background-color: #eaecf0; | |||
| background-attachment: fixed; | |||
| 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; | |||
| 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; | |||
| 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; | |||
| } | |||
| #footer li:not(:last-child)::after { | |||
| footer li:not(:last-child)::after { | |||
| content: ' \00b7'; | |||
| } | |||
| ul, ol { | |||
| line-height: 1.5; | |||
| } | |||
| h2 { | |||
| margin-bottom: 0.2em; | |||
| } | |||
| #notice-box { | |||
| padding: 10px; | |||
| margin: 10px 5px; | |||
| @@ -90,8 +121,8 @@ h2 { | |||
| #sources-container { | |||
| padding: 5px 10px; | |||
| margin: 15px 5px 10px 5px; | |||
| background-color: #EEE; | |||
| border: 1px solid #BBB; | |||
| background-color: #eee; | |||
| border: 1px solid #bbb; | |||
| } | |||
| #turnitin-title, #sources-title { | |||
| @@ -147,7 +178,7 @@ h2 { | |||
| } | |||
| #cv-result-sources tr:nth-child(even) { | |||
| background-color: #E0E0E0; | |||
| background-color: #e0e0e0; | |||
| } | |||
| #cv-result-sources td:first-child { | |||
| @@ -206,7 +237,7 @@ h2 { | |||
| } | |||
| #source-row-selected { | |||
| background-color: #CFCFCF !important; | |||
| background-color: #cfcfcf !important; | |||
| } | |||
| #head-settings { | |||
| @@ -272,31 +303,31 @@ h2 { | |||
| width: 500px; | |||
| padding: 5px; | |||
| z-index: 1; | |||
| background: #F3F3F3; | |||
| border: 1px solid #AAA; | |||
| background: #f3f3f3; | |||
| border: 1px solid #aaa; | |||
| color: black; | |||
| font-style: normal; | |||
| text-align: left; | |||
| } | |||
| .green-box { | |||
| background-color: #EFE; | |||
| border: 1px solid #7F7; | |||
| background-color: #efe; | |||
| border: 1px solid #7f7; | |||
| } | |||
| .yellow-box { | |||
| background-color: #FFD; | |||
| border: 1px solid #EE5; | |||
| background-color: #ffd; | |||
| border: 1px solid #ee5; | |||
| } | |||
| .red-box { | |||
| background-color: #FEE; | |||
| border: 1px solid #F77; | |||
| background-color: #fee; | |||
| border: 1px solid #f77; | |||
| } | |||
| .gray-box { | |||
| background-color: #EEE; | |||
| border: 1px solid #AAA; | |||
| background-color: #eee; | |||
| border: 1px solid #aaa; | |||
| } | |||
| .indentable { | |||
| @@ -314,8 +345,8 @@ h2 { | |||
| .cv-chain-detail { | |||
| padding: 0 10px 0 10px; | |||
| background-color: #FFF; | |||
| border: 1px solid #BBB; | |||
| background-color: #fff; | |||
| border: 1px solid #bbb; | |||
| } | |||
| .cv-chain-cell { | |||
| @@ -354,22 +385,22 @@ h2 { | |||
| } | |||
| .cv-hl { | |||
| background: #FAA; | |||
| background: #faa; | |||
| } | |||
| .cv-hl-in { | |||
| background: #FCC; | |||
| background: linear-gradient(to left, #FAA, #FFF); | |||
| background: #fcc; | |||
| background: linear-gradient(to left, #faa, #fff); | |||
| } | |||
| .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; } | |||
| .light { color: #CCC; } | |||
| .medium { color: #AAA; } | |||
| .light { color: #ccc; } | |||
| .medium { color: #aaa; } | |||
| .source-similarity { font-weight: bold; } | |||
| .source-suspect { color: #900; } | |||
| @@ -393,15 +424,13 @@ a:active { | |||
| 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:hover { text-decoration: none; } | |||
| @@ -33,7 +33,7 @@ | |||
| <html lang="en"> | |||
| <head> | |||
| <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" /> | |||
| </head> | |||
| <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> | |||
| <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"> | |||
| @@ -4,7 +4,14 @@ | |||
| from copyvios.checker import T_POSSIBLE, T_SUSPECT | |||
| 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.misc" import="httpsfix, urlstrip"/>\ | |||
| % if notice: | |||
| @@ -49,9 +56,9 @@ | |||
| </div> | |||
| % 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>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"> | |||
| <table id="cv-form-outer"> | |||
| <tr> | |||
| @@ -3,7 +3,7 @@ | |||
| from flask import g, request | |||
| 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: | |||
| <div id="info-box" class="green-box"> | |||
| <p>${status}</p> | |||
| @@ -2,16 +2,18 @@ | |||
| from datetime import datetime | |||
| from flask import g, request | |||
| %>\ | |||
| </main> | |||
| </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> | |||
| @@ -5,25 +5,23 @@ | |||
| %>\ | |||
| <!DOCTYPE html> | |||
| <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> | |||