View difference between Paste ID: WSrmrVrn and 5VW0jZnN
SHOW: | | - or go back to the newest paste.
1
// ==UserScript==
2
// @name        Remove Frames
3-
// @version     14.1.20.0
3+
// @version     14.1.20.2
4
// @license     MIT
5
// @description Removes frames on imageboards
6
// @include     http://iichan.hk/*
7
// @include     http://nowere.net/*
8-
// @include     http://410chan.org/*
8+
9-
// @include     http://sibirchan.ru/*
9+
10
(function (window, undefined) {
11
12
    var options = {
13
        'isRight': false,
14
        'autohide': true,
15
        'animate': true
16
    };
17
18
    if (window.self != window.top) {
19
        if (window.name === 'list' || window.name === 'menu') {
20
            if (document.readyState === 'complete' || document.readyState === 'interactive') {
21
                removeRealFrame();
22
            } else {
23
                document.addEventListener('DOMContentLoaded', removeRealFrame.bind(null), false);
24
            }
25
        }
26
    } else if (window.frames.length === 0) {
27
        if (document.body.childNodes.length < 2) {
28
            return;
29
        };
30
        if (document.readyState === 'complete' || document.readyState === 'interactive') {
31
            addDivFrame();
32
        } else {
33
            document.addEventListener('DOMContentLoaded', addDivFrame.bind(null), false);
34
        }
35
    }
36
37
    function removeRealFrame () {
38
        var navFrameBody = window.localStorage.getItem('FRAME_navFrame');
39
        if (!navFrameBody) {
40
            navFrameBody = document.body.innerHTML;
41
            window.localStorage.setItem('FRAME_navFrame', navFrameBody);
42
        }
43
        var gotoURL = window.localStorage.getItem('FRAME_lastPage');
44
        if (gotoURL) {
45
            window.localStorage.removeItem('FRAME_lastPage');
46
        } else {
47
            gotoURL = window.top.frames[1].location.href;
48
        }
49-
            gotoURL = window.top.main.document.location.href;
49+
50
    }
51
52
    function addDivFrame () {
53
        var navFrameBody = window.localStorage.getItem('FRAME_navFrame');
54
        if (!navFrameBody) {
55
            window.localStorage.setItem('FRAME_lastPage', document.location.href);
56
            window.open(document.location.origin, '_self');
57
        }
58
        var navDiv = document.createElement('div');
59
        navDiv.id = 'frame-nav-div';
60
        navDiv.innerHTML = navFrameBody;
61
        var links = navDiv.querySelectorAll('a');
62
        for (var i = links.length - 1; i >= 0; i--) {
63
            var a = links[i];
64
            if (a.target === '_parent' || a.target === '_top') {
65
                a.target = '_blank';
66
            } else if (a.target !== '_blank' && a.target !== '_self') {
67
                a.target = '_self';
68
            }
69
        };
70
        document.body.appendChild(navDiv);
71
        addCSS();
72
        readSettings();
73
    }
74
75
    function addCSS () {
76
        var style = document.createElement('style');
77
        style.type = 'text/css';
78
        style.textContent = '\
79
#frame-nav-div {\n\
80
    position: fixed;\n\
81
    bottom: 0;\n\
82
    top: 0;\n\
83
    background: inherit;\n\
84
    overflow: auto;\n\
85
    padding: 7px;\n\
86
    box-shadow: 0 0 5px black;\n\
87
}\n\
88
#frame-nav-div.left {\n\
89
    left: 0;\n\
90
    border-right: 1px solid;\n\
91
}\n\
92
#frame-nav-div.right {\n\
93
    right: 0;\n\
94
    border-left: 1px solid;\n\
95
}\n\
96
#frame-nav-div.autohide.animate {\n\
97
    -webkit-transition-property: -webkit-transform, opacity;\n\
98
    transition-property: transform, opacity;\n\
99
    -webkit-transition-duration: .2s;\n\
100
    transition-duration: .2s;\n\
101
    -webkit-transition-timing-function: ease-in-out;\n\
102
    transition-timing-function: ease-in-out;\n\
103
}\n\
104
#frame-nav-div.autohide.left {\n\
105
    -webkit-transform: translate(-90%, 0);\n\
106
    transform: translate(-90%, 0);\n\
107
    opacity: 0;\n\
108
}\n\
109
#frame-nav-div.autohide.right {\n\
110
    -webkit-transform: translate(90%, 0);\n\
111
    transform: translate(90%, 0);\n\
112
    opacity: 0;\n\
113
}\n\
114
#frame-nav-div.autohide:hover {\n\
115
    -webkit-transform: translate(0, 0);\n\
116
    transform: translate(0, 0);\n\
117
    opacity: 1;\n\
118
}';
119
        document.head.appendChild(style);
120
    }
121
122
    function readSettings () {
123
        var navDiv = document.querySelector('#frame-nav-div');
124
        $toggleClass(navDiv, 'right', 'left', options.isRight);
125
        $toggleClass(navDiv, 'autohide', '', options.autohide);
126
        $toggleClass(navDiv, 'animate', '', options.animate);
127
    }
128
129
    function $hasClass(el, className) {
130
        if(!className) return false;
131
        return (' ' + el.className + ' ').indexOf(' ' + className + ' ') !== -1;
132
    }
133
134
    function $addClass(el, className) {
135
        if(!$hasClass(el,className)) {
136
            if(el.className[el.className.length - 1] != ' ') {
137
                el.className += ' ';
138
            }
139
            el.className += className;
140
        }
141
    }
142
143
    function $removeClass(el, className) {
144
        if($hasClass(el, className)) {
145
            var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
146
            el.className = el.className.replace(reg, ' ');
147
        }
148
    }
149
150
    function $toggleClass(el, onClass, offClass, isOn) {
151
        if(isOn == undefined) isOn = $hasClass(el, offClass);
152
        $addClass(el,    isOn ? onClass  : offClass);
153
        $removeClass(el, isOn ? offClass : onClass );
154
    }
155
})(window);