Познавшие истину этого мира 23:39 ( Вы ) — КиберПедия 

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Познавшие истину этого мира 23:39 ( Вы )

2023-01-01 32
Познавшие истину этого мира 23:39 ( Вы ) 0.00 из 5.00 0 оценок
Заказать работу

// == UserScript ==
// @ nameVKDownloadMedia
// @ description Скачать фото/аудио/видео-файлы с соц. сети ВКонтакте.
// @ namespace https:// github. com / KJ 86/ VKDownloadMedia
// @ version 6.1.3
// @ date 2019-10-14
// @ author KJ 86
// @ icondata: image / svg + xml; base 64, PHN 2 ZyB 4 bWxucz 0 iaHR 0 cDovL 3 d 3 dy 53 My 5 vcmcvMjAwMC 9 zdmciIHdpZHRoPSIyNCIgaGVpZ 2 h 0 PSIyNCIgdmlld 0 JveD 0 iMCAwIDI 0 IDI 0 Ij 48 cGF 0 aCBmaWxsPSIjODI 4 YTk 5 IiBkPSJtIDEwLDYgaCA 0 IHYgNiBoIDMgbCAtNSw 2 IC 01 LC 02 IGggMyB 6 IiBwYWludC 1 vcmRlcj 0 ibWFya 2 VycyBzdHJva 2 UgZmlsbCIvPjwvc 3 ZnPg ==
// @ homepage https:// greasyfork. org / ru / scripts /7385- vkdownloadmedia
// @ supportURL https:// vk. com / vkdownloadmedia
// @ include https:// vk. com /*
// @ run - atdocument - end
// @ grant unsafeWindow
// @ grant GM _ xmlhttpRequest
// @ grant GM _ download
// @ grant GM _ addStyle
// @connect self
// @connect *
// @nocompatChrome
// @noframes
// ==/UserScript==
(function () {
'usestrict';

/** @var {Object} unsafeWindow */
/** @var {Function} GM_addStyle */
/** @var {Function} GM_download */
/** @var {Function} GM_xmlhttpRequest */
/** @var {Function} Promise */
/** @var {Function} geByClass */
/** @var {Function} geByClass1 */
/** @var {Function} ge */
/** @var {Function} se */
/** @var {Function} re */
/** @var {Function} ce */
/** @var {Function} addEvent */
/** @var {Function} cancelEvent */
/** @var {Function} domInsertAfter */
/** @var {Object} Videoview */
/** @var {Object} tooltips */
/** @var {Object} mvcur */
/** @var {Object} ap */
/** @var {Function} domInsertBefore */
/** @var {Function} matchesSelector */
/** @var {Function} showTooltip */
/** @var {Function} uiActionsMenu */
/** @var {Function} domClosest */
/** @var {Function} getProgressHtml */
/** @var {Function} setStyle */
/** @var {Function} showFastBox */
/** @var {Function} domQuery */
/** @var {Function} data */
/** @var {Function} each */

/**
* @type {Window}
*/
varwin = unsafeWindow || window;

// Checksupportedbrowsers
if (typeofwin.Promise === 'undefined') return;

/**
* @function
*/
varDOMNodeInserted = (function () {
var _callbacks = [];
varelement = document.documentElement;
varMutationObserver = window.MutationObserver || window.WebKitMutationObserver;

if (MutationObserver) {
(new MutationObserver(function (mutations) {
var addedNodes = [];

mutations.forEach(function (mutation) {
if (mutation.addedNodes.length) {
for (var i = 0, l = mutation.addedNodes.length; i < l; i++) {
if (mutation.addedNodes[i].nodeType === Node.ELEMENT_NODE) {
addedNodes.push(mutation.addedNodes[i]);
}
}
}
});

if (addedNodes.length) {
fire(addedNodes);
}
})).observe(element, {
childList: true,
subtree: true
});
} else { // Fallback
element.addEventListener('DOMNodeInserted', function (e) {
if (e.target.nodeType === Node.ELEMENT_NODE) {
fire([ e.target ]);
}
}, false);
}

function fire(addedNodes) {
addedNodes.forEach(function (node) {
for (var i = 0, l = _callbacks.length; i < l; i++) {
var selector = _callbacks[i].selector;
var callback = _callbacks[i].callback;
var isOnce = _callbacks[i].isOnce;

if (matchesSelector(node, selector)) {
callback.call (_callbacks, node);

if (isOnce) {
_callbacks.splice(i, 1);
return;
}
}

var found = node.querySelectorAll(selector);

if (found.length) {
for (var j = 0, l2 = found.length; j < l2; j++) {
callback.call (_callbacks, found[j]);

if (isOnce) {
_callbacks.splice(i, 1);
return;
}
}
}
}
});
}

return function (selector, callback, isOnce) {
_callbacks.push({
selector: selector,
callback: callback,
isOnce:!!isOnce
});
};
})();

/**
* @namespace
*/
var VKDM = {
/**
* @param {Array|String} [mask]
* @returns {Promise}
*/
audioUnmaskSource: function fn(mask) {
if (typeof fn.module === 'undefined') {
var ORIGIN = 'https:// m.vk.com ';

fn.module = request({
url: ORIGIN,
_isAjax: false
}).then(function (xhr) {
var match = xhr.response.match(/src="(.+?common\..+?js.*?)"/);

var commonJsSrc = match && match[1];

if (commonJsSrc) {
return request({
url: ORIGIN + commonJsSrc,
_isAjax: false
}).then(function (xhr) {
var modules = {};

// Inject and exec
eval(xhr.response.replace(/^!function.*?\{/, '$& var a0 = arguments[0]; for (var p in a0) {if (a0[p].toString().indexOf(".audioUnmaskSource=")!== -1) {a0[p](null, modules);break;}} return;'));

if ('audioUnmaskSource' in modules) {
return modules;
}

return Promise.reject();
});
}

return Promise.reject();
});
}

return fn.module.then(function (modules) {
if (mask) {
if (Array.isArray(mask)) {
return mask.map(function (item) {
return modules.audioUnmaskSource(item);
});
}

return modules.audioUnmaskSource(mask);
}
});
},

/**
* @param ids
* @returns {Promise}
*/
audioRequestData: function (ids) {
return request({
url: '/al_audio.php',
method: 'POST',
data: {
'act': 'reload_audio',
'al': '1',
'ids': ids
},
_isMobile: true
}).then(function (xhr) {
var items;

try {
var json = JSON.parse(xhr.response);

items = json.payload[1][0];
} catch (e) {
// Deprecated
try {
if (xhr.response.indexOf('<!>')!== -1) {
items = JSON.parse(xhr.response.split('<!>')[5].replace('<!json>', ''));
}
} catch (e) {}
}

if (Array.isArray(items)) {
return items;
}

return Promise.reject();
});
},

audioShowActionTooltip: function (btn) {
var audioRow = domClosest('audio_row', btn);
var getTText = function () {
var duration = data(audioRow, 'vkdm_audio_row_duration');
var fileSize = data(audioRow, 'vkdm_audio_row_file_size');
var fileSizeMByte = '...';
var bitrate = '...';

if (duration && fileSize) {
fileSizeMByte = (fileSize / 1024 / 1024).toFixed(1) + ' МБ';
bitrate = '~' + (fileSize * 8 / duration / 1000).toFixed(0) + ' кбит/с';
}

return 'Скачать аудиозапись<br>Битрейт: ' + bitrate + '<br>Размер: ' + fileSizeMByte;
};

if (!data(audioRow, 'vkdm_audio_row_duration') &&!btn.classList.contains('vkdm_ajax_in_progress')) {
var audioData = JSON.parse(audioRow.getAttribute('data-audio'));
var hashes = audioData[13].split('/');
var ids = audioRow.getAttribute('data-full-id') + '_' + hashes[2] + '_' + hashes[5];

btn.classList.add('vkdm_ajax_in_progress');

VKDM.audioRequestData(ids).then(function (items) {
VKDM.audioUnmaskSource(items[0][2]).then(function (url) {
request({
url: url,
method: 'HEAD'
}).then(function (xhr) {
var contentLength = xhr.getResponseHeader('content-length');

data(audioRow, 'vkdm_audio_row_duration', parseInt(items[0][5]));
data(audioRow, 'vkdm_audio_row_file_size', parseInt(contentLength));

if (document.body.contains(btn)) {
btn.classList.remove('vkdm_ajax_in_progress');
geByClass1('tt_text', btn.tt.container).innerHTML = getTText();
tooltips.rePositionTT(btn.tt);
}
});
});
});
}

showTooltip(btn, {
text: getTText,
black: 1,
shift: [7, 5, 0],
needLeft: true
});
},

downloadAudio: function (btn) {
var audioRow = domClosest('audio_row', btn);
var audioData = JSON.parse(audioRow.getAttribute('data-audio'));
var hashes = audioData[13].split('/');
var ids = audioRow.getAttribute('data-full-id') + '_' + hashes[2] + '_' + hashes[5];

VKDM.audioRequestData(ids).then(function (items) {
VKDM.audioUnmaskSource(items[0][2]).then(function (url) {
GM_download(url, ce('div', {innerHTML: items[0][4] + ' &ndash; ' + items[0][3]}).textContent + getExtension(url));
});
});
},

downloadPhotoAlbumsList: function () {
var isFastBoxClosed = false;
var downloadListBtnWrapID = getRandomID();
var fileName = document.title.replace(/"/g, '');
var progress = se(getProgressHtml('', 'pr_medium'));

setStyle(progress, {
'opacity': 1,
'padding-top': '11px',
'padding-bottom': '12px'
});

showFastBox({
title: 'Скачать альбом',
dark: 1,
hideButtons: 1,
onShow: function () {
var items = [];
var match = location.pathname.match(/album(-?[0-9]+)_([0-9]+)/);
var ownerId = match[1];
var albumId =

match[2];
var count = 1000;

switch (albumId) {
case '0':
albumId = 'profile';
break;
case '00':
albumId = 'wall';
break;
case '000':
albumId = 'saved';
break;
}

void function getAllItems(offset) {
if (isFastBoxClosed === true) return;

var params = [
'owner_id=' + ownerId,
'album_id=' + albumId,
'count=' + count,
'offset=' + offset,
'access_token=08ee532d08ee532d08ee532dbc08a6df23008ee08ee532d54ae800969245a7851077ff5',
'v=5.53'
];

request.getJSONP('https:// api.vk.com/method/photos.get?' + params.join('&'), function (data) {
items = items.concat(data.items);

if (items.length === data.count) {
var srcArr = [];

items.forEach(function (item) {
var nSizes = [];

for (var prop in item) {
var match = prop.match(/photo_(\d+)/);

if (match) {
nSizes.push(match[1]);
}
}

if (nSizes.length) {
srcArr.push(item['photo_' + Math.max.apply(null, nSizes)]);
}
});

var downloadListBtnWrap = ge(downloadListBtnWrapID);

if (downloadListBtnWrap) {
var url = createFile('text/plain;charset=utf-8', srcArr.join('\r\n'));

downloadListBtnWrap.innerHTML = '<a href="' + url + '" class="flat_button secondary" download="' + fileName + '.txt">Список URL</a>';
}
} else {
getAllItems(offset + count);
}
});
}(0);
},
onBeforeHide: function () {
isFastBoxClosed = true;

each(domQuery('#' + downloadListBtnWrapID + ' a'), function (i, el) {
(window.URL || window.webkitURL).revokeObjectURL(el.href);
});
}
}, (
'<div style="text-align: center;">' +
'<h4 class="subheader">' + fileName + '</h4>' +
'<div id="' + downloadListBtnWrapID + '">' + progress.outerHTML + '</div>' +
'</div>'
));
},

downloadCurrentAudioPlayList: function () {
var audioIdsArr = [];
var isFastBoxClosed = false;
var downloadListBtnWrapID = getRandomID();
var playListTitle = '';

(function () {
var items = [];
var title = '';

if ('_list' in ap._currentPlaylist) {
items = ap._currentPlaylist._list;
title = ap._currentPlaylist._title;
} else {
for (var prop in ap._currentPlaylist) {
if ('_list' in ap._currentPlaylist[prop]) {
items = ap._currentPlaylist[prop]['_list'];
title = ap._currentPlaylist[prop]['_title'];
break;
}
}
}

each(items, function (i, el) {
var hashes = el[13].split('/');

audioIdsArr.push(el[1] + '_' + el[0] + '_' + hashes[2] + '_' + hashes[5]);
});

playListTitle = (title || 'playlist') + ' (' + items.length + ')';
})();

if (audioIdsArr.length) {
var progress = se(getProgressHtml('', 'pr_medium'));

setStyle(progress, {
'opacity': 1,
'padding-top': '11px',
'padding-bottom': '12px'
});

showFastBox({
title: 'Скачать плейлист',
dark: 1,
hideButtons: 1,
onShow: function () {
var dataArr = [];

void function getAudioLinks(ids) {
if (isFastBoxClosed === true) return;

VKDM.audioRequestData(ids).then(function (items) {
if (!Array.isArray(items)) {
setTimeout(function () {
getAudioLinks(ids);
}, 10000);

return;
}

items.forEach(function (item) {
if (item[2]) {
dataArr.push({
mask: item[2],
name: item[4] + ' – ' + item[3],
duration: item[5]
});
}
});

if (audioIdsArr.length) {
getAudioLinks(audioIdsArr.splice(0, 10).join(','));
} else {
var textFileData = [];
var m3uFileData = [' #EXTM3U '];

VKDM.audioUnmaskSource(dataArr.map(function (el) {
return el.mask;
})).then(function (urlArr) {
dataArr.forEach(function (el, i) {
textFileData.push(urlArr[i]);
m3uFileData.push(' #EXTINF:' + el.duration + ', ' + el.name + '\r\n' + urlArr[i]);
});

var textFileURL = createFile('text/plain;charset=utf-8', textFileData.join('\r\n'));
var m3uFileURL = createFile('audio/x-mpegurl;charset=utf-8', m3uFileData.join('\r\n'));
var downloadListBtnWrap = ge(downloadListBtnWrapID);

if (textFileURL && m3uFileURL) {
downloadListBtnWrap.innerHTML = (
'<a href="' + m3uFileURL + '" class="flat_button secondary" download="' + playListTitle + '.m3u8">M3U</a>&nbsp;' +
'<a href="' + textFileURL + '"

class="flat_button secondary" download="' + playListTitle + '.txt">Список URL</a>'
);
} else {
downloadListBtnWrap.textContent = 'Не удалось создать файл.';
}
});
}
});
}(audioIdsArr.splice(0, 10).join(','));
},
onBeforeHide: function () {
isFastBoxClosed = true;

each(domQuery('#' + downloadListBtnWrapID + ' a'), function (i, el) {
(window.URL || window.webkitURL).revokeObjectURL(el.href);
});
}
}, (
'<div style="text-align: center;">' +
'<h4 class="subheader">' + playListTitle + '</h4>' +
'<div id="' + downloadListBtnWrapID + '">' + progress.outerHTML + '</div>' +
'</div>'
));
}
}
};

// region Init
// Add CSS rules
GM_addStyle(
'.audio_row.audio_row__action_download {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjODI4YTk5IiBkPSJtIDEwLDYgaCA0IHYgNiBoIDMgbCAtNSw2IC01LC02IGggMyB6IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvc3ZnPg==");}' +
'.audio_layer_container.audio_page__footer_download_playlist {float: right; cursor: pointer;}' +
'.audio_layer_container.audio_page__footer_download_playlist:hover {text-decoration: underline;}'
);

// Preload module
VKDM.audioUnmaskSource('').then(null);

// Adding audio download button
DOMNodeInserted('.audio_row:not(.audio_claimed).audio_row__actions', function (node) {
// When module ready
VKDM.audioUnmaskSource('').then(function () {
var btn = se('<button aria-label="Скачать аудиозапись" data-action="download" class="audio_row__action audio_row__action_download"></button>');

addEvent(btn, 'click', function (e) {
VKDM.downloadAudio(this);
cancelEvent(e);
});
addEvent(btn, 'mouseover', function () {
VKDM.audioShowActionTooltip(this);
});
domInsertBefore(btn, node.firstElementChild);
});
});

// Adding video download button
DOMNodeInserted(' #video_player ', function () {
if (Videoview && Videoview.showVideo) {
var addAction = function () {
try {
if (mvcur && mvcur.player) {
var videoData = mvcur.player.getVars();

if (videoData) {
var prop, match;
var items = [];

for (prop in videoData) {
match = prop.match(/url(\d+)/);

if (match) {
items.push([parseInt(match[1], 10), videoData[prop]]);
}
}

if (items.length) {
var itemsHTML = items
.sort(function (a, b) {
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
return 0;
})
.map(function (item) {
return (
'<a class="ui_actions_menu_item" href="' + item[1] + '" tabindex="0" role="link">' +
item[0] + 'p' + (item[0] >= 720? ' <span style="font-size:10px;color:#939393;vertical-align:top;">HD</span>': '') +
'</a>'
);
})
.join('');

var actionEl = se(
'<div class="ui_actions_menu_wrap _ui_menu_wrap " onmouseover="uiActionsMenu.show(this, event, {autopos: true, dy: 6});" onmouseout="uiActionsMenu.hide(this);">' +
'<div class="ui_actions_menu_icons" tabindex="0" aria-label="Действия" role="button" onclick="uiActionsMenu.keyToggle(this, event);">' +
'<span class="blind_label">Действия</span>' +
'<a class="ui_actions_menu_more">Скачать</a>' +
'</div>' +
'<div class="ui_actions_menu _ui_menu" >' +
itemsHTML +
'</div>' +
'</div>'
);

geByClass('ui_actions_menu_item', actionEl).forEach(function (element) {
addEvent(element, 'click', function (e) {
e.originalEvent.preventDefault();
GM_download(this.href, ge('mv_title').textContent + getExtension(this.href));
});
});

domInsertAfter(actionEl, geByClass1('ui_actions_menu_more').parentNode.parentNode);
}
}
}
} catch (e) {
}
};
var _showVideo = Videoview.showVideo;

Videoview.showVideo = function () {
_showVideo.apply(this, arguments);
addAction();
};

addAction();
}
}, true);

// Adding photo download button
DOMNodeInserted('.photos_album_intro_info', (function () {
var element = geByClass1('photos_album_intro_info');

if (element) {
handler(element);
}

function handler(node) {
if

(!ge('vkdm_download_album')) {
var act = se('<a id="vkdm_download_album" href="javascript:;">Скачать альбом</a>');
var actWrap = se('<span class="photos_album_info"></span>');

addEvent(act, 'click', function () {
VKDM.downloadPhotoAlbumsList();
return false;
});

actWrap.appendChild(act);
node.appendChild(se('<span class="divide">|</span>'));
node.appendChild(actWrap);
}
}

return handler;
})());

// Adding playlist download button
DOMNodeInserted(' #page_header.audio_page__footer_clear_playlist', function (node) {
var act = se('<span class="audio_page__footer_download_playlist">Скачать плейлист</span>');

addEvent(act, 'click', function () {
VKDM.downloadCurrentAudioPlayList();
});

domInsertAfter(act, node);
});
// endregion Init

// region Helpers
/**
* @param {Object} options
* @returns {Promise}
*/
function request(options) {
return new Promise(function (resolve, reject) {
options.method = options.method || 'GET';
options.headers = options.headers || {};

if (options._isAjax!== false) {
options.headers['x-requested-with'] = 'XMLHttpRequest';
}

if (options._isMobile) {
options.headers['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240';
}

// POST
if (options.method.toUpperCase() === 'POST') {
options.headers['content-type'] = 'application/x-www-form-urlencoded';

if (typeof options.data === 'object') {
var dataArr = [];

for (var p in options.data) {
dataArr.push(encodeURIComponent(p) + '=' + encodeURIComponent(options.data [p]));
}

options.data = dataArr.join('&');
}
}

options.onload = function (xhr) {
if (xhr.status === 200) {
xhr.getResponseHeader = function (name) {
var header;
var headers = xhr.responseHeaders.split('\n');

for (var i = 0; i < headers.length; i++) {
header = headers[i].split(':');

if (header[0].trim().toLowerCase() === name.toLowerCase()) {
return header[1].trim();
}
}

return null;
};

resolve(xhr);
} else {
reject(xhr);
}
};

options.onerror = function (xhr) {
reject(xhr);
};

GM_xmlhttpRequest(options);
});
}

/**
* @param {String} url
* @param {Function} [success]
*/
request.getJSONP = function (url, success) {
var tempFuncName = 'vkdmFunc' + Date.now ();

win[tempFuncName] = function (response) {
success(response.response);
delete win[tempFuncName];
};

document.body.appendChild(ce('script', {
src: url + '&callback=' + tempFuncName,
onload: function () {
re(this);
},
onerror: function () {
re(this);
}
}));
};

function createFile(type, data) {
return (window.URL || window.webkitURL).createObjectURL(new Blob([data], {type: type}));
}

function getExtension(url) {
return url.split('?')[0].match(/\.\w+$/)[0];
}

function getRandomID(name) {
var prefix = 'vkdm' + (name? '_' + name + '_': '_');

return prefix + Math.random().toString().slice(2, 10);
}
// endregion Helpers
})(); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =9e803129-e325-4d34-9d81-b3abfa8dfab5+editor // ==UserScript==
// @name VKget music
// @version 1.6
// @description Скрипт добавляет ссылки для скачивания к аудиозаписям на vk.com. Для сохранения всех файлов через wget нажмите F2.
// This script adds download links to audios at vk.com. To save all files via wget, press F2.
// @match *:// vk.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery...
// @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1..
// @grant none
// @run-at document-idle
// 19.10.2018
// @namespace https://greasyfork.org/users/148414
// ==/UserScript==


(function() {
function decode_url(url){
var tmp = {};
AudioPlayerHTML5.prototype._setAudioNodeUrl(tmp, url);
return tmp.src;
}

function utf8_to_cp866(aa) {
var bb = [], c = 0;
for (var i = 0; i < aa.length; i++) {
c = aa.charCodeAt(i);
if (c > 127) {
if (c >= 0x410 && c

<= 0x43f)
bb.push(c + 0x80 - 0x410);
if (c >= 0x440 && c <= 0x44f)
bb.push(c + 0xe0 - 0x440);
if (c == 0x401)
bb.push(0xf0);
if (c == 0x451)
bb.push(0xf1);
} else {
bb.push(c);
}
}
return Uint8Array(bb);
}

var ready = 0;
var wget_list = "";
var run = 0;

function add_download_links() {
run = 1;
var audio_row_selector = '.audio_row';

if ($(audio_row_selector).length <= ready) {
run = 0;
return;
}

var $this = $($(audio_row_selector)[ready]);

var audio_id_raw = $this.data('audio');
// alert("audio_id_raw: " + audio_id_raw);
var audio_id_raw_13 = audio_id_raw[13].split('/');
// alert(audio_id_raw_13);
var audio_id = audio_id_raw[1] + '_' + audio_id_raw[0] + '_' + audio_id_raw_13[2] + '_' + audio_id_raw_13[5];
// alert("audio_id: " + audio_id);
// audio_id = "2000444824_456242020_2f368c1beae14ca6b8_afa041bc07f2ad6bba";

var link = "";

$.ajax({
url: 'https:// vk.com/al_audio.php ',
method: 'post',
async: false,
data: {
act: 'reload_audio',
al: 1,
ids: audio_id
},
success: function(response) {
s_response = response.split('"');
// alert("s_response: " + s_response);
if (s_response.length > 1) {
link = decode_url(s_response[1]);
// alert("link: " + link);
if (link!= s_response[1]) {
var link_style = 'position: absolute; right: -12px; top: 12px; color: white; z-index: 100; background: red; border-radius: 3px 3px 3px 3px; padding: 2px 6px; font-size: 16px; opacity: 0.5;';
var song_name = $this.find('.audio_row__title_inner').text().trim();
var performer_name = $this.find('.audio_row__performers').text().trim();
var track_name = performer_name + ' - ' + song_name;
track_name = track_name.replace(/\"/g, "'");
track_name = track_name.replace(/`/g, "'");

$this.append('<a class="audio-download-link" style="' + link_style +
'" title="Скачать" download="' +
track_name + '.mp3" data-track_name="' +
track_name + '" href="' + link +
'" onclick="arguments[0].stopPropagation()"> ♫ </a>'
);
ready++;
wget_list += 'wget —no-check-certificate -c -O "' + track_name + '.mp3" ' + link + String.fromCharCode(0x0d, 0xa);
}
} else {
if (response.match(/!bool/)) {
// alert("skip bad link");
ready++;
}
}
}
});

setTimeout(function(){ add_download_links() }, 500);
}


add_download_links();
if (!ready)
setTimeout(function(){ add_download_links() }, 2000);

window.addEventListener("scroll", function(){
if (!run)
add_download_links();
}, false);

$('body').keydown(function(e){
if (e.which == 113) { // F2
var blob;
var p = window.navigator.platform;

if (p == "Win32" || p == "Win64") {
blob = new Blob([utf8_to_cp866(wget_list)], {type: "application/octet-binary"});
saveAs(blob, 'wget_list.bat', true);
} else {
blob = new Blob([wget_list], {type: "text/plain;charset=utf-8"});
saveAs(blob, 'wget.sh', true);
}
}
});
})(); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =5761b155-451f-4921-a483-aed44e9b9bd8+editor

var allText = document.documentElement.innerHTML;

var vars = {vtag:"",vkid:"",host:"",link:"",md_title:"",md_author:""}
var varsStr = ""
for(v in vars){
var val = allText.match(v + ": \\'([^\\']+)\\' ");
if(val){
vars[v] = val[1];
varsStr += v + "=" + vars[v] + "&";
}
}
var cont = document.createElement("div");
cont.setAttribute("style", "float:right");
var addon=document.createElement("a");
var src = "http://"+vars["host"]+"/assets/videos/"+vars["vtag"]+vars["vkid"]+".vk.flv";
addon.setAttribute("href",src);
addon.innerHTML="\u0421\u043A\u0430\u0447\u0430\u0442\u044C";
cont.appendChild(addon);
cont.innerHTML += " | ";
var input=document.createElement("input");
var movie = " http:// HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2F1.vkadre.ru%2FVkontaktePlayer.swf%3F14&cc_key="1.vkadre.ru/VkontaktePlayer.swf?14 ";
var text = '<object height="345">'+
'<param name="movie" value="' + movie + '"></param>'+
'<param name="flashvars" value="' + varsStr + '"></param>'+
'<embed src="' + movie + '" flashvars="' + varsStr + '" type="application/x-shockwave-flash"

Познавшие HYPERLINK "https://vk.com/public71715619" HYPERLINK "https://vk.com/public71715619"истину HYPERLINK "https://vk.com/public71715619" HYPERLINK "https://vk.com/public71715619"этого HYPERLINK "https://vk.com/public71715619" HYPERLINK "https://vk.com/public71715619"мира 23:39 (Вы)

height="345"></embed>'+
'</object><br/>'+
'<a href="'+location.href+'">\u0412\u0438\u0434\u0435\u043E \u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435</a>';
input.setAttribute("value",text);
input.setAttribute("readonly","1");
input.setAttribute("style", "font-size:10px;width:150px;border: #CCCCCC 1px solid;color:#666666");
input.setAttribute("onclick","javascript:this.focus();this.select();");
var addon=document.createElement("a");
addon.setAttribute("href","http:// vixy.net?u= "+src);
addon.innerHTML="\u0421\u043A\u0430\u0447\u0430\u0442\u044C AVI";
cont.appendChild(addon);
cont.innerHTML += " | ";
cont.appendChild(input);
document.getElementById("bigSummary").appendChild(cont); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =581dec85-3ae4-4331-a771-6d243fd75777+editor // ==UserScript==
// @name 磁力 mp4 搜索
// @namespace https://cilimp4.com
// @version 0.1.3
// @description 快速搜索想看的视频, 书籍, 软件的磁力链接, 方便, 节省时间
// @author Fructose
// @match *://*/*
// @grant GM_addStyle
// @require https://code.jquery.com/jquery-3.1.0.js
// @license MIT
// @icon https://s1.ax1x.com/2018/12/21/FsZEvT.png
// ==/UserScript==

(function() {
'use strict';
GM_addStyle(` #zizhuIcon {width: 36px; height: 36px;box-shadow: 2px 2px 4px rgba(12,12,12,.3); border-radius: 5px; cursor: pointer;}
#zizhuMain {position: absolute; top: 0; left: 0; width: 0; height: 0; background: #fff; font-size: 12px; opacity: 0;z-index: 9999;display:none;box-sizing: border-box;}`)
var innerIcon = "<img

src='data:image/png;base64,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' id='zizhuIcon' alt=' 磁力 mp4 搜索 ' title=' 磁力 mp4 搜索 '/>"
var txt = ''
var odom = document.createElement("div");
odom.id = "zizhuMain";
odom.innerHTML = innerIcon;
document.body.appendChild(odom);
document.querySelector(" #zizhuMain ").addEventListener("click",searchSetting);
function searchSetting(){
//location.href="https:// cilimp4.com/s/ "+txt
if(txt.length!= 0){
// window.open ('http:// www.zhizhud.com/so/'+txt+'-first-asc-1 ')
window.open ('https:// cilimp4.com/s/'+txt+'/time-1.html ')
}
}
$('body').mouseup(function(e){
txt = window.getSelection?window.getSelection().toString():document.selection.createRange().text;
let sel = window.getSelection()
var range = sel.getRangeAt(0);

var rect = range.getBoundingClientRect();
var scrollH = $(document).scrollTop();
var scrollW = $(document).scrollLeft();
if(txt && txt.length!= 0){
$(' #zizhuMain ').css({ "top": rect.y+scrollH+20+'px', "left": rect.x+scrollW+'px','opacity':1,'width':'36px','height':'36px','display':

'block' })
} else {
$(' #zizhuMain ').css({'opacity':0,'width':'0','height':'0','display': 'none' })
}
})
})(); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =feee9cf7-f726-4ac6-ac0b-83af3abbd233+editor // ==UserScript==
// @name 磁力搜索
// @namespace
// @version 0.4
// @description 磁力搜索,基于“磁力 mp4 搜索 ” 修改而成
// @author yuelpl
// @match *://*/*
// @grant GM_addStyle
// @require https://code.jquery.com/jquery-3.1.0.js
// @license MIT
// @icon https://s1.ax1x.com/2018/12/21/FsZEvT.png
// ==/UserScript==

(function() {
'use strict';
GM_addStyle(` #zizhuIcon {width: 36px; height: 36px;box-shadow: 2px 2px 4px rgba(12,12,12,.3); border-radius: 5px; cursor: pointer;}
#zizhuMain {position: absolute; top: 0; left: 0; width: 0; height: 0; background: #fff; font-size: 12px; opacity: 0;z-index: 9999;display:none;box-sizing: border-box;}`)
var innerIcon = "<img src='data:image/png;base64,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' id='zizhuIcon' alt=' 磁力 mp4 搜索 ' title=' 磁力 mp4 搜索 '/>"
var txt = ''
var odom =

FsZEvT.png HYPERLINK "https://vk.com/away.php?to=https%3A%2F%2Fs1.ax1x.com%2F2018%2F12%2F21%2FFsZEvT.png"s1.ax1x.com

document.createElement("div");
odom.id = "zizhuMain";
odom.innerHTML = innerIcon;
document.body.appendChild(odom);
document.querySelector(" #zizhuMain ").addEventListener("click",searchSetting);
function searchSetting(){
//location.href="https:// biedian.me/ "+txt
if(txt.length!= 0){
// window.open ('https:// biedian.me/search?source=idope HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2Fbiedian.me%2Fsearch%3Fsource%3Didope%26k%3D%27%2Btxt%2B%27%26s%3Dtime%26p%3D1&cc_key="& HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2Fbiedian.me%2Fsearch%3Fsource%3Didope%26k%3D%27%2Btxt%2B%27%26s%3Dtime%26p%3D1&cc_key="k='+txt+'.. ')
window.open ('https:// biedian.me/search?source=idope HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2Fbiedian.me%2Fsearch%3Fsource%3Didope%26k%3D%27%2Btxt%2B%27%26s%3Dtime%26p%3D1&cc_key="& HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2Fbiedian.me%2Fsearch%3Fsource%3Didope%26k%3D%27%2Btxt%2B%27%26s%3Dtime%26p%3D1&cc_key="k='+txt+'.. ')
}
}
$('body').mouseup(function(e){
txt = window.getSelection?window.getSelection().toString():document.selection.createRange().text;
let sel = window.getSelection()
var range = sel.getRangeAt(0);
var rect = range.getBoundingClientRect();
var scrollH = $(document).scrollTop();
var scrollW = $(document).scrollLeft();
if(txt && txt.length!= 0){
$(' #zizhuMain ').css({ "top": rect.y+scrollH+20+'px', "left": rect.x+scrollW+'px','opacity':1,'width':'36px','height':'36px','display': 'block' })
} else {
$(' #zizhuMain ').css({'opacity':0,'width':'0','height':'0','display': 'none' })
}
})
})(); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =6e2adfe7-35f7-430e-8f61-1cfca6341ab6+editor // ==UserScript==
// @name Extract DownloadURL
// @version 0.2.2.20190225
// @description mp4 もしくは m3u8 の動画 URL を取得します 。
// @namespace https://greasyfork.org/users/2671
// @include *
// @grant GM.xmlHttpRequest
// @noframes
// @run-at document-idle
// ==/UserScript==
const rules = [
{
"reg":/tver\.jp\/\w+\/f?\d+\/?$/
,"css":"div.inner>h1, div.inner>p>span.summary, div.inner>p>span>span.tv"
,"isBrightcove":true
}
,{
"reg":/gyao\.yahoo\.co\.jp\/(episode|player|title|p)\/.+/
,"css":"h1.video-title"
,"isBrightcove":true
}
,{
"reg":/cu\.ntv\.co\.jp\/.+?/
,"isBrightcove":true
}
,{
"reg":/tbs\.co\.jp\/muryou-douga\/.+?\/\d+\/.+/
,"isBrightcove":true
}
,{
"reg":/video\.tv-tokyo\.co\.jp\/.+?\/.+?\/\d+\.html$/
,"isBrightcove":true
}
,{
"reg":/dizm\.mbs\.jp\/title\/\?/
,"isBrightcove":true
}
,{
"reg":/ytv\.co\.jp\/mydo\/.+/
,"isBrightcove":true
}
,{
"reg":/ktv-smart\.jp\/.+?\/.+?\/index\.php\?key=\d+/
,"isBrightcove":true
}
];

const userAgents = {
"ipadSafari":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
};

const css = {};
css.panel = "div #download_panel ";
css.container = css.panel + ">div";
css.topcontent = "div #download_panel_topcontent ";
css.bottomcontent = "div #download_panel_bottomcontent ";
css.btn = "div.download_panel_btn";
css.brd = "div.download_panel_border";
css.m3u8btn = css.topcontent + ">div.download_panel_color_m3u8";
css.mp4btn = css.topcontent + ">div.download_panel_color_mp4";
css.errorbtn = css.topcontent + ">div.download_panel_color_error";
css.list = "div.download_panel_list";
css.m3u8list = css.bottomcontent + ">div.download_panel_color_m3u8";
css.mp4list = css.bottomcontent + ">div.download_panel_color_mp4";
css.errorlist = css.bottomcontent + ">div.download_panel_color_error";

const createNode = (tag, html = "", attrObj = {}, node, type) => {
tag = document.createElement(tag);
tag.innerHTML = html;
for (let i in attrObj) {
tag.setAttribute(i, attrObj[i]);
};
if (!node) return tag;
switch (type) {
case undefined:
return node.appendChild(tag);
case "before":
return node.parentNode.insertBefore(tag, node);
case "after":
return node.parentNode.insertBefore(tag, node.nextElementSibling);
};
return (node)? node.appendChild(tag): tag;
};

const addStyle = (ary) => {
ary.forEach((css) => {createNode("style", css, {"type":"text/css"}, document.getElementsByTagName("head")[0])});
};

const expandM3u8 = () => {
};

const XmlHttpRequest = class {
static get(url, headers = {}) {
return new Promise((resolve, reject) => {
GM.xmlHttpRequest({
method:"GET"
,url:url
,headers:headers
,onload:(response) => {
if (response.status==200) {
resolve(response.responseText);
} else {
reject(url +

" からの URL 取得に失敗しました 。 ");
}
}
});
});
}
static redirect(url, headers = {}) {
return new Promise((resolve, reject) => {
GM.xmlHttpRequest({
method:"GET"
,url:url
,headers:headers
,onload:(response) => {
if (!/40\d/.test(response.status)) {
resolve(response.finalUrl);
} else {
reject(url + " からの URL 取得に失敗しました 。 ");
}
}
});
});
}
static check(url, headers = {}) {
return new Promise((resolve, reject) => {
GM.xmlHttpRequest({
method:"HEAD"
,url:url
,headers:headers
,onload:(response) => {resolve(response.status==200)}
});
});
}
};

const CreateURL = class {
constructor() {
this.url = location.href;

let rule = rules.find((obj) => {return obj.reg.test(this.url)}) || {};
this.isBrightcove = rule.isBrightcove || false;

let title = document.querySelector("head>title");
this.title = (title)? title.textContent: "title";
if (rule.css) {
let nodes = Array.from(document.querySelectorAll(rule.css));
if (nodes.length!=0) this.title = nodes.map((node) => {return node.textContent}).join(" ");
};
}
createBrightcoveObj() {
let video = document.querySelector("video");
if (!video) return null;

return [video, video.parentNode].map((node) => {
let pubId = node.getAttribute("data-account") || "";
let videoId = node.getAttribute("data-video-id") || "";
let playerId = node.getAttribute("data-player") || "";
return (/^\d+$/.test(pubId) && /^\d+$/.test(videoId) && /^\w+$/.test(playerId))? {"pubId":pubId, "videoId":videoId, "playerId":playerId}: null;
}).find((obj) => {return obj!=null});
}
searchBrightcoveNode() {
let obj = this.createBrightcoveObj();
if (obj) return Promise.resolve(obj);
return new Promise((resolve, reject) => {
console.log("Extract DownloadURL:MutationObserver 開始 ");
new MutationObserver((mutations, ins) => {
let obj = this.createBrightcoveObj();
if (!obj) return null;
console.log("Extract DownloadURL:MutationObserver 切断 ");
ins.disconnect();
resolve(obj);
}).observe(document.getElementsByTagName("body")[0], {childList:true, subtree:true, attributes:true});
});
}
getKey(obj) {
const url = " https:// HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2Fplayers.brightcove.net%2F&cc_key="players.brightcove.net/ " + obj.pubId + "/" + obj.playerId + "_default/index.min.js";
return XmlHttpRequest.get(url)
.then((html) => {
return /policyKey:"(.+?)"/.test(html)? RegExp.$1: null;
}).catch((mes) => {
return null;
})
}
getURLByBrightcove(obj, policykey) {
if (policykey) {
return XmlHttpRequest.get("https:// edge.api.brightcove.com/playback/v1/accounts/ " + obj.pubId + "/videos/" + obj.videoId, {"Accept":"application/json;pk=" + policykey, "Origin":this.url.replace(/^(https?:\/\/[^\/]+).*$/, "$1")})
.then((html) => {
let json = JSON.parse(html);
return {"url":json.sources.map((obj) => {return obj.src}), "title":this.title, "drm":json.tags.some((tag) => {return /^dd-.+?-drm$/.test(tag)})}
});
} else {
return Promise.resolve();
}
}
brightcove(obj) {
return this.getKey(obj).then((policykey) => {
let url = " http:// HYPERLINK "https://vk.com/away.php?to=http%3A%2F%2Fc.brightcove.com%2Fservices%2Fmobile%2Fstreaming%2Findex%2Fmaster.m3u8%3FvideoId%3D&cc_key="c.brightcove.com/services/mobile/streaming/index/mast.. " + obj.videoId + "&pubId=" + obj.pubId;
return (policykey)? this.getURLByBrightcove(obj, policykey): XmlHttpRequest.check(url).then((bool) =>{return bool? Promise.resolve({"url":url, "title":this.title}): Promise.resolve()});
})
}
fujitv() {
return (() =>{
if (this.url.indexOf("tver.jp")>-1) {
let url = document.documentElement.innerHTML.match(/http:\/\/fod-sp\.fujitv\.co\.jp\/[^']+/);
if (url==null) return Promise.reject();
return XmlHttpRequest.redirect(url[0]);
} else {
return Promise.resolve(this.url);
}
})()
.then((url) => {
return XmlHttpRequest.get(url, {"User-Agent":userAgents.ipadSafari})
})
.then((html) => {
let doc = new DOMParser().parseFromString(html, "text/html");
let urls = Array.from(doc.querySelectorAll("a.beacon")).map((node) => {return

node.href.replace(/^.+?url=(https:\/\/.+?m3u8)&.+$/, "$1")});
return {"url":urls, "title":this.title};
})
.catch(() => {
return Promise.resolve();
})
}
execute() {
if (document.documentElement.innerHTML.indexOf("i.fod.fujitv.co.jp")>-1) {
console.log("Extract DownloadURL:fujitv");
return this.fujitv();
} else if (this.isBrightcove) {
console.log("Extract DownloadURL:brightcove");
return this.searchBrightcoveNode()
.then((obj) => {return this.brightcove(obj)});
} else {
console.log("Extract DownloadURL: 該当無し ");
return Promise.resolve();
};
}
};

const Panel = class {
static create() {
let panel = createNode("div", null, {"id":"download_panel"}, document.querySelector("body"));
let container = createNode("div", null, null, panel);
let topcontent = createNode("div", null, {"id":"download_panel_topcontent"}, container);
createNode("div", null, {"class":"download_panel_btn download_panel_border download_panel_color_m3u8"}, topcontent);
createNode("div", null, {"class":"download_panel_btn download_panel_border download_panel_color_mp4"}, topcontent);
createNode("div", null, {"class":"download_panel_btn download_panel_border download_panel_color_error"}, topcontent);
let bottomcontent = createNode("div", null, {"id":"download_panel_bottomcontent"}, container);
createNode("div", null, {"class":"download_panel_list download_panel_border download_panel_color_m3u8"}, bottomcontent);
createNode("div", null, {"class":"download_panel_list download_panel_border download_panel_color_mp4"}, bottomcontent);
createNode("div", null, {"class":"download_panel_list download_panel_border download_panel_color_error"}, bottomcontent);
}
static update(title, urls, isDrm) {
if (!Array.isArray(urls)) urls = [urls];
urls = urls.filter((url) => {
if (!url) return false;
if (/^https/.test(url)) return true;
return!urls.includes(url.replace(/^http:/, "https:"));
});
let m3u8Ary = [];
let mp4Ary = [];
if (!document.getElementById("download_panel")) this.create();
let m3u8list = document.querySelector(css.m3u8list);
let mp4list = document.querySelector(css.mp4list);
urls.forEach((url) => {
let ext = url.replace(/^.+\.(\w+)(\?.+)?$/, "$1");
ext = (/^\w+$/.test(ext))? ext.toLowerCase(): "etc";
let ism3u8 = ext=="m3u8";
let ismpd = ext=="mpd";
let list = (ism3u8 || ismpd)? m3u8list: mp4list;
let extContainer = list.querySelector("div.download_panel_container_" + ext);
if (!extContainer) {
extContainer = createNode("div", null, {"class":"download_panel_container_" + ext}, list);
createNode("div", (ext=="etc")? null: ext, {"class":"download_panel_container_ext"}, extContainer);
createNode("div", null, {"class":"download_panel_container_list"}, extContainer);
};
let div = createNode("div", null, null, list.querySelector("div.download_panel_container_" + ext + ">div.download_panel_container_list"));
if (!ism3u8 &&!ismpd) {
mp4Ary.push(url);
createNode("a", title, {"href":url}, div);
} else {
m3u8Ary.push(url);
if (isDrm) {
createNode("a", "SAMPLE-AES:" + title, {"href":url, "class":"sampleaes"}, div);
} else {
createNode("a", title, {"href":url}, div);
}
if (ismpd) return null;
if (isDrm) return null;
div.addEventListener("mouseover", ((str) => {
let callback = (ev) => {
ev.currentTarget.removeEventListener("mouseover", callback);
XmlHttpRequest.get(str).then((m3u8) => {
let list = [];
let streamInf = m3u8.match(/^ #EXT -X-STREAM-INF:.+[\r\n]+.+$/gm) || [];
let media = m3u8.match(/^ #EXT -X-MEDIA:.+$/gm) || [];
let iFrameStreamInf = m3u8.match(/^ #EXT -X-I-FRAME-STREAM-INF:.+$/gm) || [];
let urls = Array.from(document.querySelectorAll("div.download_panel_addm3u8>a")).map((node) => {return node.href.replace(/^https/, "http")});
streamInf.forEach((str) => {
str = str.replace(/^#.+?:/, "").split(/[\r\n]+/);
let [inf, m3u8] =

str;
inf = inf.split(",").filter((str) => {return /^(bandwidth|resolution|audio)/i.test(str)}).join(" ");
if (/audio=/i.test(inf)) inf = "Video Only " + inf;
list.push({"inf":inf, "m3u8":m3u8});
});
media.forEach((str) => {
str = str.replace(/^#.+?:/, "").split(",").filter((str) => {return /^(group-id|uri)/i.test(str)});
let [inf, m3u8] = str;
m3u8 = m3u8.replace(/^uri="(.+)"$/i, "$1");
list.push({"inf":"Audio Only " + inf, "m3u8":m3u8});
});
iFrameStreamInf.forEach((str) => {
str = str.replace(/^#.+?:/, "").split(",").filter((str) =>{return /^(bandwidth|resolution|uri)/i.test(str)});
let m3u8 = str.pop();
let inf = "I-FRAME " + str.join(" ")
m3u8 = m3u8.replace(/^uri="(.+)"$/i, "$1");
list.push({"inf":inf, "m3u8":m3u8});
});
list.forEach((obj) => {
if (!/^http/.test(obj.m3u8)) obj.m3u8 = (/^\//.test(obj.m3u8))? (url.replace(/^(https?:\/\/[^\/]+).+$/, "$1") + obj.m3u8): url.replace(/[^\/]*m3u8.*/, obj.m3u8);
let isContain = urls.includes(obj.m3u8.replace(/^https/, "http"));
let addURL = createNode("div", null, {"class":"download_panel_addm3u8"}, div, "after");
if (isContain) {
createNode("span", obj.inf, null, addURL);
} else {
XmlHttpRequest.get(obj.m3u8)
.then((m3u8) => {
createNode("a", obj.inf, {"href":obj.m3u8}, addURL);
});
};
});
});
};
return callback;
})(url));
};
});
let m3u8btn = document.querySelector(css.m3u8btn);
let mp4btn = document.querySelector(css.mp4btn);
if (m3u8Ary.length!=0) m3u8btn.textContent = m3u8Ary.length;
if (mp4Ary.length!=0) mp4btn.textContent = mp4Ary.length;
return (m3u8Ary.length==0 && mp4Ary.length==0);
}
static error(message) {
if (!message) message = "URL 取得に失敗しました 。";
if (!document.getElementById("download_panel")) this.create();
let list = document.querySelector(css.errorlist);
let btn = document.querySelector(css.errorbtn);
btn.textContent = 1;
createNode("div", message, null, list);
return false;
}
};

(() => {
addStyle([
// 表示位置
css.panel + " {position:fixed; top:10px; right:10px; z-index:1000000;}"
// レイアウト
, css.panel + " {display:flex; flex-direction:column;}"
, css.topcontent + " {display:flex; flex-direction:row; justify-content:flex-end}"
, css.list + ">div {display:flex; flex-direction:row;}"
// 文字列センタリング
, css.btn + "," + css.list + " div.download _panel_container_ext {display:flex; justify-content:center; align-items: center;}"
// 表示制御
, css.panel + ":hover " + css.list + ":not(:empty) {display:block;}"
// 色
, "div.download_panel_color_m3u8 {background-color:rgba(224, 255, 255, 0.5); color:black;}"
, "div.download_panel_color_mp4 {background-color:rgba(255, 192, 203, 0.5); color:black;}"
, "div.download_panel_color_error {background-color:rgba(255, 0, 0, 0.5); color:white;}"
, "div.download_panel_color_m3u8 a.sampleaes {color:red!important;}"
, "div.download_panel_addm3u8>a {color:orange;}"
, "div.download_panel_container_list>div:not(.download_panel_addm3u8)>* {color:black;}"
// 文字列
, css.list + " a {text-decoration:none;}"
, css.bottomcontent + " * {font-size:small;}"
, css.btn + " {font-size:large;}"
// ボーダー
, css.brd + " {border-style:solid; border-width:1px; border-color:rgb(191, 191, 191); border-radius:10px;}"
// 非表示
, css.btn + ":empty {display:none;}"
, css.list + " {display:none;}"
// その他
, css.btn + " {position:relative; width:50px; height:50px; cursor:pointer;}"
, css.list + " {padding:10px 30px; white-space:nowrap; overflow-x:auto; overflow-y:auto; max-width:" + window.innerWidth*0.7 + "px; min-height:50px; max-height:" + window.innerHeight*0.4 + "px;}"
, css.list + " div.download _panel_container_ext {width:70px;}"
, css.list + " div.download _panel_container_list {overflow-x:hidden; text-align:left; padding:10px;}"
]);
new CreateURL().execute()
.then((obj) => {

if (!obj) return Promise.resolve();
Panel.update(obj.title, obj.url, obj.drm)
})
.catch((message) => {return Panel.error(message)})
})(); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =c6d22beb-87a9-465d-882d-9f0a147c5fea+editor // ==UserScript==
// @name HTML5 video auto-pause
// @author Vincent Beers
// @namespace http://vincent.tengudev.com/
// @description Auto-pause any HTML5 videos. Will still preload.
// @include *
// @version 2014-04-14
// ==/UserScript==

document.addEventListener('DOMContentLoaded',function() {
var elems = document.querySelectorAll("video");

console.log("HTML video auto pause: pausing all HTML5 videos on page load");
for (var i = 0; i < elems.length; i++) {
elems[i].pause();
_tmpDaVince = elems[i]; //Probably an ugly hack, but it works at least
_tmpDaVince.addEventListener("canplay", function(e) {
console.log("HTML video auto pause: this video can play, so pausing");
_tmpDaVince.pause();
});
}
});

 

//Pause newly created video elements
document.addEventListener("DOMNodeInserted", function(e) {
var elem = e.target;
if (elem.nodeName == "VIDEO") {
elem.addEventListener("canplay", function(e) {
console.log("HTML video auto pause: Video element was inserted after page load, pausing");
elem.pause();
});
}
}, false); chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/options.html #nav =6d9411ad-279a-4712-a27d-3f1911aed2ec+editor

Июля 2020


Поделиться с друзьями:

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.14 с.