3 Commits
1.0.2 ... 1.1.1

Author SHA1 Message Date
FutureX
9ac51eaa9c Version 1.1.1
Распределил файлы по папкам

Добавил функцию из другого расширения - при нажатии кнопки проверить у вас будут верны все ответы, даже если все поля пустые(так лучше не делать, поскольку преподователи видят это)
2018-04-13 00:25:58 +03:00
FutureX
54a10af97c Version 1.1.0
Добавил контекстное меню, вызываемое правой кнопкой мыши. Теперь там можно нажать кнопку "Посмотреть ответы"

Улучшил вид popup меню, добавил css для красивого оформления

Теперь скрипты показа ответов не будет грузить лишний раз браузер, будет работать только в нужных фреймах
2018-04-13 00:09:16 +03:00
FutureX
e6195eb458 Version 1.0.2
Теперь по нажатии иконки расширения будет появляться меню. В нем добавил возможность выключения расширения
2018-04-12 23:57:35 +03:00
12 changed files with 356 additions and 35 deletions

View File

@@ -1,7 +0,0 @@
chrome.browserAction.setBadgeText({text: "on"});
//При нажатии иконки расширения вызывается данная функция
chrome.browserAction.onClicked.addListener(function() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {command: "show"});
});
});

View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -1,19 +0,0 @@
//По окончании загрузки документа вызывается функция
$(document).ready(function() {
var timerId = setInterval(show, 2000);
setTimeout(function() {
clearInterval(timerId);
}, 7000);
})
//При получении команды 'show' показывает ответы
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if(request.command==="show") show();
});
//Показать ответы
function show() {
$('*[class^="correct"]').show().removeClass("ng-hide").parent().show().removeClass("ng-hide");
$("table.ng-hide").removeClass("ng-hide");
$("section").css("user-select","initial");
}

View File

@@ -0,0 +1 @@
[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJpY29uLnBuZyIsInJvb3RfaGFzaCI6InZYSzRsclYwcDdlZGhRdTdpRUVoY1Eza2xaYU8xVU9lM1lHTXQtbm1XdzQifSx7InBhdGgiOiJpbmplY3QuanMiLCJyb290X2hhc2giOiI2WmdFbGhhLUR4ZWRXc2FWY0hpV3ZFMEt2cVZXdGVyZ1F0blhYM0JyNGVBIn0seyJjYW5vbmljYWxfanNvbl9yb290X2hhc2giOiJCeWZIczFha1ZUX0VpeW9WQXlTTmYydFQ3bkZLVG92ak96OGVjQXhpNjdrIiwicGF0aCI6Im1hbmlmZXN0Lmpzb24iLCJyb290X2hhc2giOiJxc1JKdm45dnBybHNUdTE4ZFFkMm8zRnE4TUxIQTlSclRtNzdHd185bmlrIn1dLCJmb3JtYXQiOiJ0cmVlaGFzaCIsImhhc2hfYmxvY2tfc2l6ZSI6NDA5Nn1dLCJpdGVtX2lkIjoiYWVtZ2hwbXBpY25vZ2JhZGRhYmljZWNiaWVob2VoYmIiLCJpdGVtX3ZlcnNpb24iOiI2LjY2IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"QoEO2p82NrNNQBbKAJAmjlSSMmTSPzX9lkFTKwEAZ37p8xIYnaL7_NydUA_QVu0vxp8jkpQrBCjY-UwfffnoMiHROhuzY57iS2pj2q3_rp5at-sjMlE43cZrKINcamCFKQN7A4tGThd30D_RngRNDhh4Kmu4fxd1CWKSRrD2rBvv29nk0ODjpsCoJ6i5OjXLRFjj7ocPpz227tSRg5ACJRUY3fQa0U6l-ZRwIwT0sVQN-hkNV-0qWtwiTpWU2807N3RZTY4CgeA-2-YO9pmDHTkFaWtg4fPOEZSdWe_Trheh_2U7n-CeTxruPrGr_jf7L3znmIB8OItiilcVXEI_qg"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"YbWAdtSJm-YNi1GO1s8Xm1cPIYXhlQ0CxmzGPoXoafbPz9EuwnpRsL6pOWi7MragwJ3rkwgonbrqkba7xuWDj9Vzd8PWSSywyHttPOJeFBBLyfXVjHbLUNb9kKCkgYOdlnhadgGcaXXe1Y5O-1KVWgXqyzY8jxfD-jJivhsxsfFV1QA0w1BJOngqygF5O4X7dx9m4k4UeyNvbAYJu2_tYObzJVkcjSQa96sLPd5rwC6LaJaS10yCsC--qvOrKr4KY5KEvF1M4dwQhv5NvRRbYLuGgkf5t_3ccjAhHXGYIb_H7g3Ilj71eg95NMNcjw5vIqEEtfX8POsEg_Ca55v8DQ"}]}}]

24
js/background.js Normal file
View File

@@ -0,0 +1,24 @@
chrome.storage.sync.get(['show_answers','true_answers'], function(items) {
var choise=items['show_answers'];
if(choise == undefined) choise = true;
if(choise) chrome.browserAction.setBadgeText({text: "on"});
else chrome.browserAction.setBadgeText({text: "off"});
choise=items['true_answers'];
if(choise == undefined) choise = false;
if(choise) chrome.browserAction.setBadgeText({text: "on"});
});
//Создать контекстное меню
chrome.contextMenus.create({"title": "Показать ответы","onclick" : show});
//Показать ответы
function show(info) {
var url = info.pageUrl;
var url_ = "www.cambridgelms.org";
if(JSON.stringify(url).includes(url_))
{
var query = { active: true, currentWindow: true };
chrome.tabs.query(query, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {command: "show"});
});
}
}

View File

30
js/show_answers.js Normal file
View File

@@ -0,0 +1,30 @@
//По окончании загрузки документа вызывается функция
$(document).ready(function() {
var path = window.location.pathname;
var page = path.split("/").pop();
if(page === 'index.html') {
//При получении команды 'show' показывает ответы
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if(request.command==="show") {
show();
}
});
//Если выбрана функция автоматического показа ответов заппускается функция показа ответов
chrome.storage.sync.get(['show_answers'], function(items) {
var choise=items['show_answers'];
if(choise == undefined) choise = true;
if(choise){
var timerId = setInterval(show, 2000);
setTimeout(function() {
clearInterval(timerId);
}, 7000);
}
});
}
})
//Показать ответы
function show() {
$('*[class^="correct"]').show().removeClass("ng-hide").parent().show().removeClass("ng-hide");
$("table.ng-hide").removeClass("ng-hide");
$("section").css("user-select","initial");
}

34
js/true_answers.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -2,28 +2,36 @@
"name": "LMS helper ♥",
"description": "Easy answers from your heart. Made with love by FutureX",
"icons": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
"16": "icons/icon.png",
"32": "icons/icon.png",
"48": "icons/icon.png",
"128": "icons/icon.png"
},
"version": "1.4.8.8",
"manifest_version": 2,
"browser_action": {
"default_icon": "icon.png"
"default_icon": "icons/icon.png",
"default_popup": "popup/popup.html"
},
"background": {
"scripts": ["background.js"]
"scripts": ["js/background.js", "js/true_answers.js" ]
},
"content_scripts": [
{
"matches": [ "*://www.cambridgelms.org/*" ],
"js": [ "jquery.js", "inject.js" ],
"run_at": "document_end",
"js": [ "js/jquery.js", "js/show_answers.js" ],
"run_at": "document_idle",
"all_frames": true
}
],
"permissions": [
"tabs"
"tabs",
"contextMenus",
"storage",
"webRequest",
"webRequestBlocking",
"*://www.cambridgelms.org/*",
"activeTab",
"management"
]
}

28
popup/popup.html Normal file
View File

@@ -0,0 +1,28 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<head>
<title>LMS Answers</title>
<link rel="stylesheet" href="popup_style.css">
<script type="text/javascript" src="popup.js"> </script>
</head>
<body>
<div class="shadow title_text">
<h1>LMS Answers</h1>
</div>
<div class="button-add style style_1">
<input id="show_answers" type="checkbox">
<label for="show_answers" data-on-text="Автоматический режим" data-off-text="Автоматический режим"></label>
<div class="button-add__icon"></div>
</div>
<div class="button-add style style_3">
<input id="true_answers" type="checkbox">
<label for="true_answers" data-on-text="Максимальные баллы" data-off-text="Максимальные баллы"></label>
<div class="button-add__icon"></div>
</div>
<div class="">
<button id="showBtn">Показать ответы</button>
</div>
</body>
</html>

61
popup/popup.js Normal file
View File

@@ -0,0 +1,61 @@
document.addEventListener('DOMContentLoaded', function() {
loadOptions();
var showButton = document.getElementById('showBtn');
showButton.addEventListener('click', function() {
show();
}, false);
var showChecker = document.getElementById('show_answers');
showChecker.addEventListener('change', function() {
saveOptions();
show();
}, false);
var trueChecker = document.getElementById('true_answers');
trueChecker.addEventListener('change', function() {
saveOptions();
autotrue();
}, false);
}, false);
function loadOptions() {
chrome.storage.sync.get(['show_answers','true_answers'], function(items) {
var choise=items['show_answers'];
if(choise == undefined) choise = true;
var select = document.getElementById("show_answers");
select.checked = choise;
if(select.checked) chrome.browserAction.setBadgeText({text: "on"});
else chrome.browserAction.setBadgeText({text: "off"});
choise=items['true_answers'];
if(choise == undefined) choise = false;
var select = document.getElementById("true_answers");
select.checked = choise;
if(select.checked) chrome.browserAction.setBadgeText({text: "on"});
});
}
function saveOptions() {
var select = document.getElementById("show_answers");
chrome.storage.sync.set({'show_answers': select.checked});
if(select.checked) chrome.browserAction.setBadgeText({text: "on"});
else chrome.browserAction.setBadgeText({text: "off"});
select = document.getElementById("true_answers");
chrome.storage.sync.set({'true_answers': select.checked});
if(select.checked) chrome.browserAction.setBadgeText({text: "on"});
}
function show() {
var query = { active: true, currentWindow: true };
chrome.tabs.query(query, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {command: "show"});
});
}
function autotrue() {
alert("Чтобы обновления вступили в силу обновите страницу");
var select = document.getElementById("true_answers");
if(select.checked===true)
chrome.runtime.sendMessage({msg: "auto_on"})
else
chrome.runtime.sendMessage({msg: "auto_off"});
}

161
popup/popup_style.css Normal file
View File

@@ -0,0 +1,161 @@
@import url(https://fonts.googleapis.com/css?family=Arvo:700);
body {
background-color: #222;
width: 250px;
}
.shadow {
color: #fff;
font-family: Arvo;
font-weight: bold;
text-shadow:
-3px -3px 0 #222,
3px -3px 0 #222,
-3px 3px 0 #222,
3px 3px 0 #222,
4px 4px 0 #fff,
5px 5px 0 #fff,
6px 6px 0 #fff,
7px 7px 0 #fff;
line-height: 1.8em;
letter-spacing: 0.1em;
transform: scaleY(0.7);
-webkit-transform: scaleY(0.7);
-moz-transform: scaleY(0.7);
margin:0;
text-align: center;
padding:0;
}
.title_text {
margin: -22px;
font-size: 22px;
}
.button-add {
margin: 0 20px;
margin-bottom: 5px; }
.button-add {
position: relative;
display: inline-block;
color: #fff; }
.button-add label {
display: inline-block;
text-transform: uppercase;
cursor: pointer;
text-align: left; }
.button-add input {
display: none; }
.button-add__icon {
cursor: pointer;
pointer-events: none; }
.button-add__icon:before, .button-add__icon:after {
content: "";
position: absolute;
top: 45%;
left: 35%;
transition: 0.2s ease-out; }
.style label {
height: 30px;
line-height: 30px;
transition: all 0.2s;
border-radius: 2rem; }
.style label:before {
content: attr(data-on-text); }
.style label:after {
content: attr(data-off-text); }
.style input[type=checkbox] + label {
width: 210px;
background: #FF5335; }
.style input[type=checkbox]:checked ~ label {
width: 210px;
background: #61B136; }
.style input[type=checkbox]:checked ~ .button-add__icon:before {
transform: translate(-10%, 100%) rotate(45deg);
width: 10.66667px; }
.style input[type=checkbox]:checked ~ .button-add__icon:after {
transform: translate(30%) rotate(-45deg); }
.style .button-add__icon {
position: absolute;
left: 0;
top: 0;
height: 30px;
width: 30px; }
.style .button-add__icon:before, .style .button-add__icon:after {
height: 3px;
border-radius: 3px;
background: #fff;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); }
.style .button-add__icon:before {
width: 17px;
transform: rotate(90deg); }
.style .button-add__icon:after {
width: 17px;
transform: rotate(0); }
.style_1 label:before, .style_1 label:after {
position: absolute;
right: 0.9rem;
transition: all 0.2s .15s ease-out; }
.style_2 label:before, .style_2 label:after {
position: absolute;
right: 1.3rem;
transition: all 0.2s .15s ease-out; }
.style_3 label:before, .style_3 label:after {
position: absolute;
right: 1.4rem;
transition: all 0.2s .15s ease-out; }
button {
text-decoration: none;
outline: none;
display: inline-block;
padding: 10px 30px;
margin: 10px 20px;
position: relative;
color: white;
border: 1px solid rgba(255,255,255,.4);
background: none;
font-weight: 300;
font-family: 'Montserrat', sans-serif;
text-transform: uppercase;
letter-spacing: 2px;
}
button:before,
button:after {
content: "";
position: absolute;
width: 0;
height: 0;
opacity: 0;
box-sizing: border-box;
}
button:before {
bottom: 0;
left: 0;
border-left: 1px solid white;
border-top: 1px solid white;
transition: 0s ease opacity .8s, .2s ease width .4s, .2s ease height .6s;
}
button:after {
top: 0;
right: 0;
border-right: 1px solid white;
border-bottom: 1px solid white;
transition: 0s ease opacity .4s, .2s ease width , .2s ease height .2s;
}
button:hover:before,
button:hover:after{
height: 100%;
width: 100%;
opacity: 1;
}
button:hover:before {transition: 0s ease opacity 0s, .2s ease height, .2s ease width .2s;}
button:hover:after {transition: 0s ease opacity .4s, .2s ease height .4s , .2s ease width .6s;}
button:hover {background: rgba(255,255,255,.2);}