Created
December 10, 2019 18:54
-
-
Save KotRikD/8aaa8237d0127c930ffa566f15411989 to your computer and use it in GitHub Desktop.
Dnevnik.mos.ru hw editor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Dnevnik.mos.ru Homework editor | |
// @namespace http://dnevnik.mos.ru/ | |
// @version 0.1 | |
// @description Просто давайте редактировать домашку | |
// @author KotRik | |
// @match https://dnevnik.mos.ru/student_diary/student_diary/* | |
// @grant none | |
// @require http://code.jquery.com/jquery-3.4.1.min.js | |
// ==/UserScript== | |
function writeIntoStorage(key, object) { | |
try { | |
localStorage.setItem(key, JSON.stringify(object)); | |
return true; | |
} catch(e) { | |
console.log(e); | |
return false; | |
} | |
} | |
function readFromStorage(key) { | |
try { | |
let object = JSON.parse(localStorage.getItem(key)); | |
return object; | |
} catch (e) { | |
console.log(e); | |
return null; | |
} | |
} | |
function sleep(ms) { | |
return new Promise(resolve => setTimeout(resolve, ms)); | |
} | |
async function init() { | |
while (document.querySelectorAll("div.homeworks").length < 2) { | |
await sleep(1000); // Спим 4 секунды, пока не загрузимся | |
} | |
let homeworks = document.querySelectorAll("div.homeworks"); // Элементы домашки | |
let value = document.querySelectorAll("input.date-range-input.ng-pristine.ng-valid") | |
if (value.length < 1) { | |
console.log("panic! Input with date not found"); | |
return; | |
} | |
value = value[0].value; | |
let store = readFromStorage("krCustomHW"); | |
if (store === null) { | |
writeIntoStorage("krCustomHW", { | |
'days': {} | |
}); | |
store = readFromStorage("krCustomHW"); | |
} | |
// TODO: Если здесь ничего не изменится, объединить эти списки | |
// Теперь получаем ключи для текущей недели) | |
let keys = store.days[value]; | |
if (typeof(keys) !== "object" || keys.length !== homeworks.length) { | |
// Ключей нет(, давайте обновим их | |
console.log("updating keys for this week"); | |
let newKeys = []; | |
for (let i = 0; i<homeworks.length; i++) { | |
// И засунем количество стрингов = homeworks | |
newKeys.push("") | |
} | |
keys = newKeys; // Ура, ключи обновлены | |
store.days[value] = newKeys; | |
} | |
writeIntoStorage("krCustomHW", store); // Обновляем хранилище, после всего этого безумия | |
// Теперь сделаем сопоставим ключи и покажем кастомное ДЗ | |
for (let [ind, value] of keys.entries()) { | |
if (value.length < 1) continue; // Не имеет смысла, тк это пустая строчка | |
$(homeworks[ind]).html(` | |
<div _ngcontent-c18="" class="homework-item ng-star-inserted" fxlayout="row" style="flex-direction: row; box-sizing: border-box; display: flex;"> | |
<div _ngcontent-c18="" fxflex="" style="flex: 1 1 0%; box-sizing: border-box;"> | |
<div _ngcontent-c18="" class="homework-description ng-star-inserted">${value} | |
</div> | |
</div> | |
</div> | |
`) | |
//homeworks[ind].innerHTML = value; | |
} | |
for (let [ind, value] of keys.entries()) { | |
let newEl = $(` | |
<div style="display: flex; flex-direction: row; justify-content: flex-end; align-items: center; height: fit-content;"> | |
<p style="margin: 0; padding: 0;"> | |
<span data-vdomid=${ind} style="display:inline-block; width: 16px; height: 16px; border-radius: 30px; background-color: #00acc1; margin: 5px; cursor: pointer;" > | |
</p> | |
</div> | |
`) | |
newEl.on("click", "span", function(event) { | |
event.preventDefault(); | |
let id = $(this).data("vdomid"); | |
let newHW = window.prompt("Введи новое ДЗ", "") | |
if (newHW === null || newHW === undefined) { | |
newHW = ""; | |
} | |
let homeworks = document.querySelectorAll("div.homeworks"); // Элементы домашки | |
let value = document.querySelectorAll("input.date-range-input.ng-pristine.ng-valid") | |
if (value.length < 1) { | |
console.log("panic! Input with date not found"); | |
return; | |
} | |
value = value[0].value; | |
let store = readFromStorage("krCustomHW"); | |
store.days[value][id] = newHW; | |
console.log(store.days[value][id]); | |
writeIntoStorage("krCustomHW", store); | |
if ($(homeworks[id]).children().length > 1) { | |
$(homeworks[id]).children()[0].remove() | |
} | |
$(` | |
<div _ngcontent-c18="" class="homework-item ng-star-inserted" fxlayout="row" style="flex-direction: row; box-sizing: border-box; display: flex;"> | |
<div _ngcontent-c18="" fxflex="" style="flex: 1 1 0%; box-sizing: border-box;"> | |
<div _ngcontent-c18="" class="homework-description ng-star-inserted">${newHW} | |
</div> | |
</div> | |
</div> | |
`).insertBefore($(homeworks[id]).children()[0]) | |
}); | |
$(homeworks[ind]).append(newEl) | |
} | |
} | |
$( document ).ready(async function() { | |
init(); | |
while (document.querySelectorAll("div.homeworks").length < 2) { | |
await sleep(1000); // Спим 4 секунды, пока не загрузимся | |
} | |
let buttons = document.querySelectorAll("mat-icon.arrow-icon.mat-icon"); | |
while (buttons.length < 2) { | |
await sleep(2000); | |
} | |
// 0 < 1 > | |
// Это обработчики для кнопок назад и вперёд ;D | |
$(buttons[0]).click(async function () { | |
await sleep(3000); | |
init(); | |
}) | |
$(buttons[1]).click(async function () { | |
await sleep(3000); | |
init(); | |
}) | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment