`;
a.onclick = e => {
(e.target === a) && a.remove();
};
(b = a.querySelector("#mwyvrhi_ujs")).onchange = r => {
r = new FileReader();
r.onload = (o, t) => {
if (o = parseData(r = r.result)) { //parse as native format
if (o.index.length) {
askRestore(o);
} else alert("File doesn't contain any history entry.");
} else if (o = parseYouTubeData(r)) { //parse as YouTube format
if (o.index.length) {
askRestore(o);
} else alert("File doesn't contain any history entry.");
} else { //parse as URL list
o = {entries: {}, index: []};
t = (new Date()).getTime();
r = r.replace(/\r/g, "").split("\n");
while (r.length && !r[0].trim()) r.shift();
if (r.length && xu.test(r[0])) {
r.forEach(s => {
if (s = s.match(xu)) {
o.entries[s[1] || s[2]] = t;
o.index.push(s[1] || s[2]);
}
});
if (o.index.length) {
askRestore(o);
} else alert("File doesn't contain any history entry.");
} else alert("Invalid history data file.");
}
};
r.readAsText(b.files[0]);
};
document.documentElement.appendChild(a);
b.click();
});
}
function gen_setting_page() {
let fix_version = '3.1.1'; // as close to header as possible: in hopes to not forget
if (window.YTEngine2) return; // in-development kill-switch
if (document.location.pathname == '/error') return;
// Test storage for saving user-settings
let settings = {}, ls;
try {
function lsTest(st, v) {
st.setItem('__storage_test__', v);
return st.getItem('__storage_test__') == v;
};
let _s = window.localStorage;
if (lsTest(_s, 'qwe') && lsTest(_s, 'rty')) {
ls = _s;
settings = JSON.parse(ls.getItem('__storage__settings__')) || {};
}
}
catch (e) { }
// delete old settings
if ("default_player_640" in settings) {
settings.default_player = settings.default_player_640 ? 3 : 0;
delete settings.default_player_640;
}
if ("reduce_thumbnail" in settings) {
settings.thumbnail_size = settings.reduce_thumbnail ? 2 : 0;
delete settings.reduce_thumbnail;
}
// set script default values
if (!("inst_ver" in settings)) settings.inst_ver = fix_version;
if (!("old_player" in settings)) settings.old_player = true;
if (!("classic_logo" in settings)) settings.classic_logo = true;
if (!("search_left" in settings)) settings.search_left = true;
if (!("thumb_preview" in settings)) settings.thumb_preview = false;
if (!("profile_picture" in settings)) settings.profile_picture = true;
if (!("grey_watched" in settings)) settings.grey_watched = true;
if (!("blur_watched" in settings)) settings.blur_watched = true;
if (!("hide_filters" in settings)) settings.hide_filters = true;
if (!("hide_queue" in settings)) settings.hide_queue = false;
if (!("default_player" in settings)) settings.default_player = 2;
if (!("hide_guide" in settings)) settings.hide_guide = false;
if (!("hide_yt_suggested_blocks" in settings)) settings.hide_yt_suggested_blocks = true;
if (!("logo_target" in settings)) settings.logo_target = "";
if (!("thumbnail_size" in settings)) settings.thumbnail_size = 1;
if (!("thumbnail_size_m" in settings)) settings.thumbnail_size_m = 720;
if (!("search_thumbnail" in settings)) settings.search_thumbnail = 1;
if (!("clear_search" in settings)) settings.clear_search = true;
if (!("channel_top" in settings)) settings.channel_top = 0;
if (!("video_quality" in settings)) settings.video_quality = 0;
// catch "settings" page
console.log('fix settings:', settings);
if (document.location.pathname == '/7kttube-settings') {
let back = document.createElement('div');
back.className = 'ytfixback';
let e1, e2, e3, e4, plane = document.createElement('div');
plane.className = 'ytfix';
let style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = [
'ytfix_line2 {background: #575757;color: white;padding: 5px;}.ytfix_line span, .ytfix_line checkbox {text-transform: full-size-kana; border-bottom: 1px dotted;}.ytfix{font-size: 13px;position:absolute;left:0;top:0;right:0;padding:3em;background: #eee url(https://i.ibb.co/jgXjyZn/7kttube.png) no-repeat;background-size:570px;background-repeat-y: no-repeat;background-position-x: 300px;background-position-y: 20px;}', '.ytfix_line{margin-bottom: 9px;text-shadow: 1px 0px 0px #b0b0b0;}', '.ytfix_line span,.ytfix_line input,.ytfix_line select{margin-right:0.3em}', 'form{padding-left: 10px;}', '.ytfix_field{font-size:13px; padding:0.2em;border:1px solid #888}', '.ytfix_button{color: #fff;font-weight: bold;background: #ec2828;padding:0.6em;border:1px solid #fff;margin-bottom: 10px;}', '.ytfix_button:hover {background: #525252;cursor: pointer}', '.ytfix_hide{display:none}', '.ytfixback{position:absolute;left:0;top:0;right:0;height:100%;background:#eee}', '.ytfix donate{padding:0;border:1px solid #888}', 'h2{text-decoration: underline; font-variant: all-petite-caps; font-family: YouTube Noto, Roboto, arial, sans-serif !important; font-size:24px;}', 'h5{font-style: italic}', 'paypal{padding-left: 60px; font-size: 13px; font-weight: bold;}'
].join('');
plane.appendChild(style);
e4 = document.createElement('br')
e4 = document.createElement('ytfix_line2')
e4.appendChild(document.createTextNode('7ktTube Video Downloader & 7ktTube old icons script now available!'));
AddLine(e4);
e4 = document.createElement('br')
e4 = document.createElement('span')
e2 = document.createElement('input');
e2.type = 'button';
e2.className = 'ytfix_button';
e2.value = 'DOWNLOAD PAGE';
e2.addEventListener('click', () => location.href = 'https://7kttube.tk/downloads');
e3 = document.createElement('input');
AddLine(e2);
e1 = document.createElement('h2');
e1.appendChild(document.createTextNode('7ktTube²⁰¹⁶ REDUX settings'));
AddLine(e1);
if (!ls) {
e1 = document.createElement('span');
e1.style = 'color:red';
e1.appendChild(document.createTextNode('Cannot edit settings: no access to local storage.'));
AddLine(e1);
e1 = document.createElement('span');
e1.appendChild(document.createTextNode('If you are using Firefox, allow cookies for this site.'));
AddLine(e1);
}
else {
let ess = {};
function MakeDesc(desc) {
let e = document.createElement('span');
e.appendChild(document.createTextNode(desc));
return e;
}
function MakeBoolElement(nm) {
let e = document.createElement('input');
e.type = 'checkbox';
e.checked = settings[nm];
ess[nm] = e;
return e;
}
function MakeListElement(nm, opts) {
let e = document.createElement('select');
e.className = 'ytfix_field';
ess[nm] = e;
for (let i = 0, L = opts.length; i < L; ++i) {
let o = document.createElement('option');
o.appendChild(document.createTextNode(opts[i]));
//if (i == val)
// o.setAttribute ('selected', '');
e.appendChild(o);
}
e.selectedIndex = settings[nm];
return e;
}
var delayInMilliseconds = 0; //1 second
setTimeout(function() {
window.parent.document.title = "𝟳𝗸𝘁𝗧𝘂𝗯𝗲 𝗥𝗘𝗗𝗨𝗫 : sᴇᴛᴛɪɴɢs";
}, delayInMilliseconds);
function MakeTextElement(nm) {
let e = document.createElement('input');
e.className = 'ytfix_field';
e.value = settings[nm];
ess[nm] = e;
return e;
}
AddLine(MakeBoolElement("old_player"), MakeDesc("YouTube old player style(smaller buttons and menu)"));
AddLine(MakeBoolElement("classic_logo"), MakeDesc("YouTube classic logo"));
AddLine(MakeBoolElement("search_left"), MakeDesc('Align searchbar to the left'));
AddLine(MakeBoolElement("hide_guide"), MakeDesc('Auto-close side-bar to compact'));
AddLine(MakeBoolElement("profile_picture"), MakeDesc("Square profile-pictures"));
AddLine(MakeBoolElement("thumb_preview"), MakeDesc("Disable video previews on :hover"));
AddLine(MakeBoolElement("hide_queue"), MakeDesc("Hide queue button on thumbnails"));
AddLine(MakeBoolElement("hide_filters"), MakeDesc('Hide all filter by category bars'));
AddLine(MakeBoolElement("hide_yt_suggested_blocks"), MakeDesc('Hide suggestion blocks on main page (recommended playlists, latest posts, etc)'));
AddLine(MakeBoolElement("grey_watched"), MakeDesc("Make watched video thumbnails black & white and less visible"));
AddLine(MakeBoolElement("blur_watched"), MakeDesc("Make watched video thumbnails black & white on home screen [FIX]"));
let tsm = MakeTextElement("thumbnail_size_m");
tsm.className = settings.thumbnail_size == 5 ? 'ytfix_field' : 'ytfix_hide';
let tsi = MakeListElement("thumbnail_size", ['default', '193px', '240px', '360px', '480px', 'manual']);
tsi.addEventListener('change', function () {
ess.thumbnail_size_m.className = ess.thumbnail_size.selectedIndex == 5 ? 'ytfix_field' : 'ytfix_hide';
});
AddLine(MakeBoolElement("clear_search"), MakeDesc("Hide suggestion blocks on search page (for you, people also watched, etc)"));
AddLine(MakeDesc('Home screen thumbnail size '), tsi, tsm);
AddLine(MakeDesc('Search video thumbnail size '), MakeListElement("search_thumbnail", ['TOO BIG', 'Small', 'Medium']));
AddLine(MakeDesc('Watch page video player size:'), MakeListElement("default_player", ['Flexible', '640x360px', '853x480px', '1280x720px']));
AddLine(MakeDesc('Force video quality'), MakeListElement('video_quality', ['Auto (default)', '144p', '240p', '360p', '480p', '720p', '1080p (HD)', '1440p (HD)', '2160p (4K)']));
AddLine(MakeDesc("Modify channels' pages behaviour"), MakeListElement('channel_top', ['default', 'hide banner with scrolling', 'hide banner on load']));
AddLine(MakeDesc("Change YouTube logo link to https://www.youtube.com/..."), MakeTextElement("logo_target"));
e1 = document.createElement('input');
e1.type = 'button';
e1.className = 'ytfix_button';
e1.value = 'Save settings and close tab';
e1.addEventListener('click', function () {
settings.old_player = ess.old_player.checked;
settings.classic_logo = ess.classic_logo.checked;
settings.search_left = ess.search_left.checked;
settings.thumb_preview = ess.thumb_preview.checked;
settings.profile_picture = ess.profile_picture.checked;
settings.grey_watched = ess.grey_watched.checked;
settings.blur_watched = ess.blur_watched.checked;
settings.hide_filters = ess.hide_filters.checked;
settings.hide_queue = ess.hide_queue.checked;
settings.hide_guide = ess.hide_guide.checked;
settings.thumbnail_size = ess.thumbnail_size.selectedIndex;
if (settings.thumbnail_size == 5) {
let v = ess.thumbnail_size_m.value;
if (!/^\d+$/.test(v)) return alert('Error: invalid value for thumbnails size');
settings.thumbnail_size_m = parseInt(v);
}
settings.search_thumbnail = ess.search_thumbnail.selectedIndex;
settings.default_player = ess.default_player.selectedIndex;
settings.hide_yt_suggested_blocks = ess.hide_yt_suggested_blocks.checked;
settings.channel_top = ess.channel_top.selectedIndex;
settings.logo_target = ess.logo_target.value;
settings.clear_search = ess.clear_search.checked;
settings.video_quality = ess.video_quality.selectedIndex;
ls.setItem('__storage__settings__', JSON.stringify(settings));
alert('Settings saved');
window.close();
});
e2 = document.createElement('input');
e2.type = 'button';
e2.className = 'ytfix_button';
e2.value = 'Close tab & Return to YouTube without saving';
e2.addEventListener('click', () => window.close());
e3 = document.createElement('input');
e3.type = 'button';
e3.className = 'ytfix_button';
e3.value = 'DONATE PayPal';
e3.addEventListener('click', () => location.href = 'https://www.paypal.com/donate?hosted_button_id=2EJR4DLTR4Y7Q');
AddLine(e1, e2);
e4 = document.createElement('b');
e4.appendChild(document.createElement("br"));
e4.appendChild(document.createTextNode('Do you like this script?'));
AddLine(e4);
e4 = document.createElement('h5');
e4.appendChild(document.createTextNode('Please donate to support this project & the developer!'));
AddLine(e4);
e4 = document.createElement('paypal');
e4.appendChild(document.createTextNode('PayPal'));
AddLine(e4);
e4.innerHTML += "