SAEskip

Um UserScript para o AVA SAE DIGITAL que ativa o modo professor no livro digita(depois de 5 segundos), ativa a opção de selecionar e texto e faz o player ficar 100% auto

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         SAEskip
// @namespace    https://github.com/teogabrielofc/saeskip
// @version      2.1
// @description  Um UserScript para o AVA SAE DIGITAL que ativa o modo professor no livro digita(depois de 5 segundos), ativa a opção de selecionar e texto e faz o player ficar 100% auto
// @match        *://livrodigital.sae.digital/*
// @match        *://ava.sae.digital/_n/*
// @grant        none
// @license GNU GPLv3
// ==/UserScript==
(function() {
    'use strict';

    // libera o texto nas trilhas
    setTimeout(() => {
    document.onselectstart = null;
    document.querySelectorAll('*').forEach(element => {
        element.onselectstart = null;
        element.style.userSelect = 'auto';
        element.style.webkitUserSelect = 'auto';
    });
}, 5000); //botei timeout pq acho que o código é executado antes do texto ser bloqueado


    // função pra ativar o modo professor
   function ativarModoProfessor() {
  try {
    document.body.classList.add('professorActive');
  } catch(e) {}

  document.querySelectorAll('iframe').forEach(function(frame) {
    try {
      frame.contentWindow.document.body.classList.add('professorActive');
    } catch(e) {}
  });
}


    // detecta se tá no livro
if (location.href.startsWith("https://livrodigital.sae.digital/livros")) {
  setTimeout(ativarModoProfessor, 5000);
}



    // botei um toast pro negocio do player
    function showToast(message) {
        const toast = document.createElement('div');
        toast.textContent = message;
        toast.style.position = 'fixed';
        toast.style.bottom = '32px';
        toast.style.right = '32px';
        toast.style.background = 'rgba(32,32,32,0.98)';
        toast.style.color = '#fff';
        toast.style.fontSize = '16px';
        toast.style.fontFamily = 'sans-serif';
        toast.style.padding = '12px 24px';
        toast.style.borderRadius = '8px';
        toast.style.boxShadow = '0 2px 8px rgba(0,0,0,0.2)';
        toast.style.zIndex = '9999';
        toast.style.transition = 'opacity 0.5s';
        toast.style.opacity = '1';
        document.body.appendChild(toast);

        setTimeout(() => {
            toast.style.opacity = '0';
            setTimeout(() => {
                toast.remove();
                location.reload();
            }, 600);
        }, 2500);
    }

    if (window.location.hostname === "ava.sae.digital") {
        // XMLHttpRequest interception
        const open = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open = function(method, url, ...rest) {
            if (method === "POST" && url.includes("apis.sae.digital/ava/answer/video")) {
                this.addEventListener("readystatechange", function() {
                    if (this.readyState === 4 && this.responseURL.includes("apis.sae.digital/ava/answer/video")) {
                        showToast("Progresso do vídeo marcado como 100% (SAEskip)");
                    }
                });

                const send = this.send;
                this.send = function(body) {
                    try {
                        let data = JSON.parse(body);
                        if (data.video_percentage !== undefined) {
                            data.video_percentage = 100;
                            body = JSON.stringify(data);
                        }
                    } catch (e) {}
                    send.call(this, body);
                };
            }
            open.call(this, method, url, ...rest);
        };

        // fetch interception
        window.fetch = new Proxy(window.fetch, {
            apply: async function(target, thisArg, args) {
                let url = args[0];
                let options = args[1] || {};

                if (url.includes("apis.sae.digital/ava/answer/video") && options.method === "POST") {
                    let clone = options.body;
                    if (clone) {
                        let bodyText = await clone.text();
                        let bodyJson = JSON.parse(bodyText);

                        if (bodyJson.video_percentage !== undefined) {
                            bodyJson.video_percentage = 100;
                            options.body = JSON.stringify(bodyJson);
                            showToast("Progresso do vídeo marcado como 100% (SAEskip)");
                        }
                    }
                }

                return target.apply(thisArg, [url, options]);
            }
        });
    }
})();