LINUX.ORG.RU

История изменений

Исправление 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 = '&gt;&gt;&gt;&nbsp;';
  var spoiler_prefix_off = '&lt;&lt;&lt;&nbsp;';

  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;';
      });
    }
  }
});