Access Browser Time

Blocking the browser after the time has expired

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Access Browser Time
// @namespace    https://github.com/AlekPet/Access-Browser-Time/
// @version      1.0
// @description  Blocking the browser after the time has expired
// @author       AlekPet
// @copyright    AlekPet
// @license      MIT; https://raw.githubusercontent.com/AlekPet/Access-Browser-Time/master/LICENSE
// @icon         https://raw.githubusercontent.com/AlekPet/Access-Browser-Time/master/Access-Browser-By-Time-userscript.png
// @match        http*://*/*
// @run-at document-idle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addStyle
// @grant GM_addValueChangeListener
// @require https://code.jquery.com/jquery-3.1.0.min.js
// ==/UserScript==

GM_addStyle(`
.countDown_Panel {
position: fixed;
max-width: 400px;
max-height: 450px;
bottom: 45px;
left: 5px;
text-align: center;
z-index: 99999999999999999999;
}
.info_time{
font: bold 10pt monospace;
text-align: left;
margin: 5px 10%;
}
.cTime {
color: #4d3ea2;
}
.upTime{
color: #910808;
}
.countDown_Panel .cd_form_box{
width: 400px;
display: none;
border: 1px solid silver;
background: #fff;
font-family: cursive;
opacity:0.8;
box-shadow: 0 3px 5px silver;
}

.cd_title {
background: linear-gradient(#250280,#0089ff);
padding: 10px;
color: #fff;
}
.cd_body {
padding: 5px;
}

.cd_title div {
display: inline-block;
float: right;
cursor: pointer;
transition: 1s font-size;
}

.cd_title div:hover {
font-size: 1.2em;
transition: 1s font-size;
}

.cD_Buttons {
width: 100px;
border: 1px solid silver;
padding: 5px;
background: linear-gradient(#b2b8bb,#88898c);
color: white;
user-select: none;
cursor: pointer;
transition: 1s font-size;
}

.cD_Buttons:hover{
font-size: 1.2em;
transform: rotateZ(-360deg);
transition: 1s font-size;
}

.countDown_Setting {
background: linear-gradient(#00a4ff,#0826ff);
margin: 5px auto;
display:none;
}
.controls {
margin: 0 auto;
}
.box_timer_table{
display: table;
margin: 0px auto;
width: 80%;
}
.box_timer_table > div {
display:table-row;
}
.box_timer_table > div div{
display:table-cell;
}
.box_timer_table .head_caption{
font-weight: bold;
}
.box_timer_table input[type='number']{
text-align:center;
width: 60px;
margin-left: 5px;
}
.buttons {
color: white;
border: 1px solid silver;
border-radius: 3px;
box-shadow: 0 3px 6px;
margin: 0 auto;
padding: 5px;
cursor:pointer;
font-famaly: monospace;
}
.button_start{
background: linear-gradient(limegreen, green);
width: 100px;
}
.button_start:hover{
background: linear-gradient(limegreen, #00FF50);
}
.countDown_Time {
margin: 0 20px;
font-size: 8pt;
min-height: 12px;
}
.controls .fieldset_all{
margin: 5px auto;
width: 90%;
}
.controls input#fon_, .controls #text_block  {
width: 100%;
color: grey;
}
.controls #text_block{
height: 70px;
}
.cont_blocks {
display: table;
width: 100%;
border-spacing: 3px;
}
.table_row {
display: table-row;
}
.table_cell {
display: table-cell;
vertical-align: top;
text-align: left;
}
.blockContainer{
margin-top: 10%;
text-align: center;
}
.block_message{
font: bold 3em monospace;
}

.input_pass_box {
position: absolute;
top: 40%;
left: 50%;
width: 235px;
transform: translate(-50%,-50%);
background: silver;
font: normal 12pt monospace;
opacity: 0.9;
box-shadow: 2px 2px 5px 3px #c0c0c082;
text-align: center;
display:none;
}
.input_pass_box > div {
padding: 7px 6px;
}
.input_pass_box > div:first-child {
background: darkcyan;
color: white;
}
.input_pass_box > div span:last-child {
float: right;
cursor:pointer;
}
.input_pass_box > div span:last-child:hover {
color: cyan;
}
.unblock{color: green;font:bold 12pt monospace;}
.unblock:hover{color: cyan;}
.info_pass_unblock{
background: white;
margin: 3px;
font-style: italic;
font-size: 9pt;
}
`);

(function() {
    'use strict';
    const $ = window.jQuery,
          debug = false,
          defaultBlockImage = "data:image/png;base64,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"

    var ObjTimer = null,
        mtint = null,
        curInterTimer = null

    function loadStorage(){
        let ObjTimer_tmp = GM_getValue('ObjTimer');

        ObjTimer = (ObjTimer_tmp) ? JSON.parse(GM_getValue('ObjTimer')) : {
            options: {
                enabled: false,
                date: null,
                block_data: {text:"", img: defaultBlockImage},
                password: null,
                settings_inputs: null
            }
        }

        if(debug) console.log(ObjTimer)
    }

    function saveToStorage(){
        try{
            var save_data = JSON.stringify(ObjTimer);

            if(save_data.length>0 && save_data !== null && save_data !=="" && save_data !== undefined){
                GM_setValue('ObjTimer', save_data);
                if(debug) console.log("Сохраненно: ",ObjTimer);
            }
        }catch(e){
            console.log(e);
        }
    }

    function getCurrentTime(set_time = null){
        let curTime = set_time ? new Date(set_time) : new Date(),
            year = curTime.getFullYear(),
            month = curTime.getMonth()+1,
            date = curTime.getDate(),
            h = curTime.getHours(),
            m = curTime.getMinutes(),
            s = curTime.getSeconds()

        return `${(date<10?"0"+date:date)+"."+(month<10?"0"+month:month)+"."+year+" "+(h<10?"0"+h:h)+":"+(m<10?"0"+m:m)+":"+(s<10?"0"+s:s)}`
    }

    $.fn.makeForm = function(){
        let DivForm = $(`
<div class="countDown_Panel">
<div class="cD_Buttons countDown_Setting">Настройки</div>
<div class="countDown_Time">Timer: --д. --:--:--</div>
</div>
`);
        this.append(DivForm);

        $(".countDown_Setting").click(checkParole); // showHide

        $(".countDown_Time").on("click", function(){
            $(".countDown_Setting").fadeToggle('slow')
        })

    };

    function showHide(){
        let $cd_form_box = $(".cd_form_box")

        clearInterval(curInterTimer)
        curInterTimer = setInterval(function(){
            let cTime = $(".cTime"),
                upTime = $(".upTime").text(getCurrentTime(returnNewDate())),
                curTime = getCurrentTime()

            if(cTime.length) $(".cTime").text(curTime)
        },1000)


        if(!$cd_form_box.length){
            $cd_form_box = $(`<div class="cd_form_box">
<div class="cd_title"><span>Timer Setting...</span><div>X</div></div>
<div class="cd_body">
<div class="controls">
<fieldset class="fieldset_all">
<legend>Установка времени</legend>
<div class="box_timer_table">
<div>
<div class="head_caption">Дней</div>
<div class="head_caption">Часов</div>
<div class="head_caption">Минут</div>
<div class="head_caption">Секунд</div>
</div>
<div>
<div><input type="number" min="0" title="Дней" id="days_" value="0"></div>
<div><input type="number" min="0" title="Часов" id="hours_"  value="0"></div>
<div><input type="number" min="0" title="Минут" id="mins_" value="0"></div>
<div><input type="number" min="0" title="Секунд" id="secs_"  value="0"></div>
</div>
</div>
<div class="info_time">
<div>Текущее время:</div>
<div class="cTime">00.00.0000 00:00:00</div>
<div>Время блокировки:</div>
<div class="upTime">00.00.0000 00:00:00</div>
</div>
</fieldset>
<fieldset class="fieldset_all">
<legend>Фон при блокировке</legend>
<div class="cont_blocks">
<div class="table_row">
<div class="cont_img_block table_cell">
<div class="img_container"><img src="${ObjTimer.options.block_data.img}" id="image_block" width="128" title="Фон" /></div>
</div>
<div class="cont_block_setting table_cell">
<div class="link_div">
<div>Ссылка:</div>
<input type="text" id="fon_" value="${ObjTimer.options.block_data.img}">
</div>
<div class="textarea_div">
<div>Текст при блокировке:</div>
<textarea id="text_block">Заблокировано ФБР!</textarea>
</div>
</div>
</div>
</div>
</fieldset>
<div class="buttons button_start">Start</div>
</div>
</div>
</div>
</div>`);


            $cd_form_box.find(".cd_title div").off().click(showHide);
            $cd_form_box.find("input").each(function(){
                $(this).on("input", function(){
                    if(checkinputs()){
                        let getTimeUp = getCurrentTime(returnNewDate())
                        $(".upTime").text(getTimeUp)
                    }
                })
            })

            $cd_form_box.find(".button_start").click(startTimer)

            $cd_form_box.find("input#fon_").on("input", imageURLCheck.bind("",$cd_form_box.find("img#image_block")))

            $(".countDown_Panel").append($cd_form_box);
        }

        $cd_form_box.animate({
            width: [ "toggle", "swing" ],
            height: [ "toggle", "swing" ],
            opacity: "toggle"
        }, 1500, "linear", function(){
            $(".countDown_Setting").animate({
                opacity: "hide",
                height: [ "hide", "swing" ]
            },'slow', function(){
                if(!$(".cd_form_box").is(":visible")){
                    $(".countDown_Panel").find(".cd_form_box").remove();
                }
            });
        });

    }

    function imageURLCheck(img,event){
        let imgInput = event.target

        img.one("load",function(){
            // loaded
        })
            .one("error", function(){
            this.src = "data:image/png;base64,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"
        })
            .attr("src",imgInput.value)
    }

    function returnNewDate(saveS = false){
        let date = new Date(),
            days_ = parseInt($("#days_").val()),
            hours_ = parseInt($("#hours_").val()),
            mins_ = parseInt($("#mins_").val()),
            secs_ = parseInt($("#secs_").val()),
            totalms = days_*(1000*60*60*24)+hours_*(1000*60*60)+mins_*(1000*60)+secs_*1000,

            newDate = new Date(date.getTime()+totalms)

        if(saveS){
            ObjTimer.options.enabled = true
            ObjTimer.options.date = newDate.getTime()
            ObjTimer.options.settings_inputs = {days:days_, hours: hours_, mins: mins_, sec: secs_}
            ObjTimer.options.block_data.text = $("#text_block").val()
            ObjTimer.options.block_data.image = $("#fon_").val()
        }

        return newDate.getTime()
    }

    function startTimer(){
        if(checkinputs()){

            if(mtint) clearInterval(mtint);
            $(".countDown_Time").empty();
            timer_run(returnNewDate(true))
            showHide()
            saveToStorage()

        } else {
            alert("В полях были ошибки исправьте их!")
        }
    }

    function checkinputs(){
        let input_ok = true
        $(".controls .box_timer_table input").each(function(indx, el){

            let id = el.id,
                val = el.value,
                title = el.title

            if(/^\s?$/.test(val)){
                alert("Поле '"+title+"' не может быть пустым!")
                el.value = 0
                input_ok = false
            }

            if(!/^[0-9]+$/.test(val)){
                let searchspchar = val.match(/[^0-9]/g)
                alert("Поле '"+title+"' содержит не цифры!\n"+(searchspchar && searchspchar.length? "\nСимволы в поле: "+val.match(/[^0-9]/g).join(","):""))
                el.value = val = parseInt(val) || 0
                input_ok = false
            }

            if(val < 0){
                alert("Поле '"+title+"' не может быть меньше 0!")
                el.value = 0
                input_ok = false
            }

            /*if(id == "days_"){
                el.value = val > 365 ? 365 : val
            } else if(id == "hours_"){
                el.value = val > 23 ? 23 : val
            } else if(id == "mins_" || id == "secs_"){
                el.value = val > 59 ? 59 : val
            }*/
        })
        return input_ok
    }

    function makeParol(){
        const p = prompt("Введите пароль, для защиты","")
        if(/^\s?$/.test(p)){
            alert("Пароль не может быть без символов, или состоять из одних пробелов!")
            if(confirm("Попробовать снова?")) makeParol(); else return;
        }
        ObjTimer.options.password = p
        saveToStorage()
        //checkParole()
        return p
    }

    function checkParole(){
        let p_cor = ObjTimer.options.password

        if(p_cor == null || /^\s?$/.test(p_cor)){
            p_cor = makeParol()
        } else {
            p_cor = ObjTimer.options.password.toString()
        }

        if(p_cor.length){
            const p = prompt("Введите пароль:","")
            if(p !== p_cor){
                alert("Пароль неверный!")
                $(".countDown_Setting").hide()
                return;
            } else {
                alert("Пароль верный!")
                showHide()
            }
        }
    }

    function timer_run(date){
        let d_t = document.title,
            yd = date,
            countText = $(".countDown_Time").get(0)

        mtint = setInterval(function(){
            let nowDateMsec = new Date().getTime(),
                msec = yd-nowDateMsec,
                sec = Math.floor(msec/1000),
                min = Math.floor(sec/60),
                hour = Math.floor(min/60),
                day = Math.floor(hour/24)

            sec %= 60
            min %= 60
            hour %= 24

            if (min<10){
                min='0'+min
            }
            if (sec<10){
                sec='0'+sec
            }
            if (hour<10){
                hour='0'+hour
            }
            if(msec>0){
                let timeOut = "Timer: "+day+"д. "+hour+":"+min+":"+sec
                countText.innerHTML = ((sec % 2 === 0 && msec<60000)?"":msec>60000?timeOut:"<span style='color:red'>"+timeOut+"</span>")
                document.title = d_t+" - "+ countText.innerText.replace("Timer: ","")
            } else {
                countText.innerText ="Время истекло!"
                clearInterval(mtint)
                blockBrowser()
            }
        }, 1000);
    }

    function blockBrowser(){
        let canvas = $("<canvas>").get(0),
            ctx = canvas.getContext("2d")
        let img = $("<img>").on("load", function(){
            let html = `<head><title>${ObjTimer.options.block_data.text}</title></head><body></body>`,
                containerCanvas = $("<div class='blockContainer'>"),
                messageBlock = $("<div class='block_message'>").text(ObjTimer.options.block_data.text),
                unBlock = $("<span class='unblock'>").text("Отключить блокировку").css("cursor","pointer").click(function(){
                    $(".input_pass_box").fadeToggle('slow', function(){
                        if(input_password.is(":visible")){
                            input_password.focus()
                        }
                    })
                }),
                popUPEnterPaswword = $("<div class='input_pass_box'><div><span>Enter password</span><span title='Close' onclick='$(\".unblock\").trigger(\"click\")'>X</span></div><div class='input_pass_body'></div></div>"),
                input_password = $("<input>").attr({"type":"password","title":"Field password input...","id":"input_password"}),
                button_check = $("<button></button>").text("Enter").click(function(){
                    const p_cor = ObjTimer.options.password.toString(),
                          user_input = input_password.val()

                    if(p_cor === user_input){
                        input_password.css('border-color','limegreen')
                        info_bar.css('color','green').text("Пароль верный!")

                        let funct = function(time){
                            var timelef = time+1
                            return function(){
                                timelef-= 1
                                info_bar.text("Разблокировка через: " + timelef +' сек.')
                                if(timelef <=0 ){
                                    ObjTimer.options.enabled = false;
                                    saveToStorage()
                                    location.reload()
                                }
                            }
                        }
                        setInterval(funct.call("",3), 1000)

                    } else {
                        input_password.css('border-color','red')
                        info_bar.text("Пароль не верный!")
                    }
                }),
                info_bar = $("<div class='info_pass_unblock'>")

            popUPEnterPaswword.find(".input_pass_body").append(input_password,button_check,info_bar)

            canvas.width = this.naturalWidth
            canvas.height = this.naturalHeight
            ctx.drawImage(this, 0, 0)

            containerCanvas.append(canvas,messageBlock,unBlock)

            const tmStyles = $("style").filter(function(){
                if(/^[0-9a-f-]+$/.test(this.id)) return this
            }),

                  jquery = $("<script>")
            jquery.attr({"src":"https://code.jquery.com/jquery-3.1.0.min.js","type":"text/javascript"})

            $(document).children("html").html(html)
            $("head").append(tmStyles,jquery)
            $("body").append(containerCanvas,popUPEnterPaswword)

        }).on("error", function(){
            $("body").empty()
        }).attr("src", defaultBlockImage)
        }

    function timerIsset(){
        if(ObjTimer.hasOwnProperty("options")){
            if(ObjTimer.options.hasOwnProperty("date") && ObjTimer.options.hasOwnProperty("enabled") && ObjTimer.options.enabled && ObjTimer.options.date){
                if((ObjTimer.options.date - new Date().getTime())>0){
                    timer_run(ObjTimer.options.date)
                }
                else blockBrowser()
            }
        }
    }

    function init(){
        loadStorage()
        $("body").makeForm()
        timerIsset()
    }

    if (window.top === window.self) {
        init();
    }
})();