История изменений
Исправление uin, (текущая версия) :
Насчет спойлеров - я наверно сделаю так как на лоре по дефолту было (то есть там стилем часть скрывается а остальная раскрывается по клику на добавляемую снизу полоску) но добавлю наверно настройку позволяющую задавать максимальный размер блока в пикселях. Твой скрипт, если тебе вот именно так надо как там я могу помочь починить.
Вот тот же самый код но независящий от плагинов с жквери (работает):
// ==UserScript==
// @name LOR spoiler
// @namespace linux.org.ru
// @description Add spoiler functionality
// @include https://linux.org.ru/*
// @include https://www.linux.org.ru/*
// @version 2
// @run-at document-start
// @grant none
// ==/UserScript==
document.addEventListener('DOMContentLoaded',function(){
console.log('LOR spoiler is ON');
// spoiler
var types = ['cut', 'code', 'pre'];
var blocks = {
cut: document.querySelectorAll('[id ^= cut]'),
code: document.querySelectorAll('.code'),
pre: document.querySelectorAll('pre:not([class])')
};
var total_block_cnt = blocks.cut.length + blocks.code.length + blocks.pre.length;
var line_limit = total_block_cnt > 2 ? 5 : 15;
var spoiler_prefix_on = '>>> ';
var spoiler_prefix_off = '<<< ';
var tpl =
'<span class="sign">'+
'<span>'+ spoiler_prefix_on +'</span>'+
'<a '+
'id="spoiler-hide-{TYPE}_{ID}" '+
'href="javascript:void(0);" '+
'onClick="javascript:var block=document.getElementById(\'hide-{TYPE}_{ID}\'); var prefix=this.previousElementSibling;'+
'if (block.style.display ===\'none\') {'+
'block.style.display = null ; prefix.innerText=\''+spoiler_prefix_off+'\'; } else {'+
'block.style.display =\'none\'; prefix.innerText=\''+spoiler_prefix_on+'\'; };">'+
'{TYPE}-spoiler'+
'</a>'+
'</span><br/>';
// change content
if (total_block_cnt > 0) {
for (var i = 0; i < types.length; i++) {
var TYPE = types[i];
Array.prototype.slice.call(blocks[TYPE], 0).forEach(function(block, ID) {
// limit
var no_hl = block.querySelector('pre.no-highlight code');
var cur_blk = no_hl ? no_hl : block;
if (cur_blk.textContent.split("\n").length <= line_limit) return;
// add spoiler
var spoiler = tpl.replace(/\{TYPE\}/g, TYPE).replace(/\{ID\}/g, ID);
block.setAttribute('id','hide-'+TYPE+'_'+ ID);
block.insertAdjacentHTML('afterend', spoiler);
block.style = 'display: none;';
});
}
}
});
Исходная версия uin, :
Насчет спойлеров - я наверно сделаю так как на лоре по дефолту было (то есть там стилем часть скрывается а остальная раскрывается по клику на добавляемую снизу полоску) но добавлю наверно настройку позволяющую задавать максимальный размер блока в пикселях. Твой скрипт, если тебе вот именно так надо как там я могу помочь починить.
Вот тот же самый код но независящий от плагинов с жквери (работает):
// ==UserScript==
// @name LOR spoiler
// @namespace linux.org.ru
// @description Add spoiler functionality
// @include https://linux.org.ru/*
// @include https://www.linux.org.ru/*
// @version 2
// @run-at document-start
// @grant none
// ==/UserScript==
document.addEventListener('DOMContentLoaded',function(){
console.log('LOR spoiler is ON');
// spoiler
var types = ['cut', 'code', 'pre'];
var blocks = {
cut: document.querySelectorAll('[id ^= cut]'),
code: document.querySelectorAll('.code'),
pre: document.querySelectorAll('pre:not([class])')
};
var total_block_cnt = blocks.cut.length + blocks.code.length + blocks.pre.length;
var line_limit = total_block_cnt > 2 ? 5 : 15;
var spoiler_prefix_on = '>>> ';
var spoiler_prefix_off = '<<< ';
var tpl =
'<span class="sign">'+
'<span>'+ spoiler_prefix_on +'</span>'+
'<a '+
'id="spoiler-hide-{TYPE}_{ID}" '+
'href="javascript:void(0);" '+
'onClick="javascript:var block=document.getElementById(\'hide-{TYPE}_{ID}\'); var prefix=this.previousElementSibling;'+
'if (block.style.display ===\'none\') {'+
'block.style.display = null ; prefix.innerText=\''+spoiler_prefix_off+'\'; } else {'+
'block.style.display =\'none\'; prefix.innerText=\''+spoiler_prefix_on+'\'; };">'+
'{TYPE}-spoiler'+
'</a>'+
'</span><br/>';
// change content
if (total_block_cnt > 0) {
for (var i = 0; i < types.length; i++) {
var TYPE = types[i];
Array.prototype.slice.call(blocks[TYPE], 0).forEach(function(block, ID) {
// limit
var no_hl = block.querySelector('pre.no-highlight code');
var cur_blk = no_hl ? no_hl : block;
if (cur_blk.textContent.split("\n").length <= line_limit) return;
// add spoiler
var spoiler = tpl.replace(/\{TYPE\}/g, TYPE).replace(/\{ID\}/g, ID);
block.setAttribute('id','hide-'+TYPE+'_'+ ID);
block.insertAdjacentHTML('afterend', spoiler);
block.style = 'display: none;';
});
}
}
});