西野ブログ対策CHIMNEY TOWN版

西野さんのブログが移転されたそうです。
ameblo.jp
chimney.town
正直もういいかとも思うのですが、最近対応しきれないパターンが出ていました。これで勝った感を出されても腹立たしいので一応対策を公開します。
https://codepen.io/kogawa_vonly/pen/eYEramJ

.pageNewsdetail-contents, .pageNewsdetail-contents>div:first-child, .pageNewsdetail-contents>div:first-child *:not(.stack) {
  margin: 0 !important;
  padding: 0;
  line-height: 1.2;
}
.pageNewsdetail-titles{margin:0;padding:0;}
.pageNewsdetail-content-article h2 {
  font-size: 1.5em;
  font-weight: bold;
  padding-left: 1rem !important;
}
.pageNewsdetail-content-article h3 {
  font-size: 1.17em !important;
  font-weight: bold;
  color: #ff6900;
}
.pageNewsdetail-content-article>div:last-child{display:none;}
.pageNewsdetail-content-article figure>img {
  width: auto;
  height: auto;
  max-width: 100%
}
.ogp-text:before{background:none;}

.br_first,.br_first+br,br+br+br,.br_last~br{display:none;}
.leaf{height:6rem;}
.compre{max-width:70% !important;}
// ==UserScript==
// @name         chimneytown2
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://chimney.town/*
// @icon         https://www.google.com/s2/favicons?domain=chimney.town
// @grant        none
// ==/UserScript==
$('.pageNewsdetail-content-article strong').contents().unwrap();
$('.pageNewsdetail-content-article>*:has(br)').contents().filter(function () {
  return this.nodeType === 3;
}).wrap("<span class='n_text'></span>");
$('.pageNewsdetail-content-article *').each(function(){
    if($(this).text().match(/(\u0020|\u00A0|\u3000|&nbsp;){2}/gi)){
    	$(this).addClass("nbsp");
    }
    else if($(this).text().match(/(\u0020|\u00A0|\u3000|&nbsp;)|\s/gi)){
        if($(this).text().length<2){
            $(this).addClass("nbsp");
        }
    }
});
$('.nbsp:has(*)').removeClass("nbsp");
$('.nbsp').remove();
$('a:empty').remove();
$('.pageNewsdetail-content-article *:contains("=")').addClass("l_yoko");
$('.pageNewsdetail-content-article *:contains("【")').addClass("mark");
$('.pageNewsdetail-content-article *:contains("★")').addClass("mark");
$('.pageNewsdetail-content-article *:contains("▼")').addClass("mark");
$('.l_yoko:has(*),.pageNewsdetail-content-article>.l_yoko').removeClass("l_yoko");
$('.mark:has(*),.pageNewsdetail-content-article>.mark').removeClass("mark");
$('.mark').each(function () {
  var str = $(this).text().slice(0, 1)
  var str_all = $(this).text()
  if (str.match(/(\u0020|\u00A0|\u3000|&nbsp;)|\s/)) {
    str_all = str_all.slice(1);
    str = str_all.slice(0, 1);
  }
  if (str == "【" | str == "★" | str == "▼") {
    $(this).addClass("mark_start");
    str_all = str_all.slice(1);
    if (str_all.match(/.+【/)) {
      $(this).removeClass("mark_start");
    }
  }
});
$('br:first-child').addClass("br_first");
$('br').not('br+br').each(function () {
  $(this).nextUntil(':not(br)').addBack().wrapAll('<span class="br_ren"></span>');
});
$('.br_ren+a,.br_ren+.l_yoko,.br_ren+.mark_start').prev().addClass("br_solo");
$('a+.br_ren,.l_yoko+.br_ren,.mark_start+.br_ren').addClass("br_solo");
$('.br_solo>br~br').remove();
$('.br_ren').contents().unwrap();
$('.pageNewsdetail-content-article>*>*:not(br):last-of-type').addClass("text_last");
$('.text_last:last-of-type').prevAll().removeClass("text_last");
$('.text_last+br').addClass("br_last");
$('.pageNewsdetail-content-article>p:has(br+*:not(br))').addClass("br_mix");
$('.pageNewsdetail-content-article>p:has(*:not(br)+br)').addClass("br_mix");
$('.pageNewsdetail-content-article>p:has(br):not(.br_mix)').addClass("br_only");
$('.br_mix').removeClass("br_mix");
$('.pageNewsdetail-content-article figure:not(:first-child)>img[width]').bind('load', function () {
  $(this).each(function () {
    var w = $(this).attr('width');
    var h = $(this).attr('height');
    if (w == h || w == h * 1.5 || w * 0.75 == h || w * 0.5625 == h) {
      $(this).addClass("compre");
    }
  });
});
$('.pageNewsdetail-content-article figure:not(:first-child)>img[width]').each(function () {
  var w = $(this).attr('width');
  var h = $(this).attr('height');
  if (w != h || w != h * 1.5 || w * 0.75 != h || w * 0.5625 != h) {
    $(this).removeClass("compre");
  }
});
$('.youtube').removeClass("youtube");
$('.wp-block-image').removeClass("wp-block-image");
$('.has-luminous-vivid-orange-color').removeClass("has-luminous-vivid-orange-color");
$('.pageNewsdetail-content-article iframe').each(function () {
  var w_article = $('.pageNewsdetail-content-article').width();
  $(this).attr('width', Math.round(w_article * 0.7));
  $(this).attr('height', Math.round($(this).attr('width') * 0.5625));
});
$('a:has(.ogp-img)').addClass("leaf");
$('.pageNewsdetail-content-article figure:not(:first-child)>img[width]').each(function () {
  var w = $(this).attr('width');
  var h = $(this).attr('height');
  if (w == h || w == h * 1.5 || w * 0.75 == h || w * 0.5625 == h) {
    $(this).addClass("compre");
  }
});
$('p,h2,h3,figure').addClass("p_block");
$('.p_block').not('.p_block+.p_block').each(function () {
  $(this).nextUntil(':not(.p_block)').addBack().wrapAll('<p class="p_ren"></p>');
});
$('.p_ren').each(function () {
    var p_loop=$(this).children().length;
    if(p_loop>6){
        $(this).children().addClass("stack");
    }
   });
$('.p_ren').contents().unwrap();
$('.p_block').removeClass("p_block");
$('.stack:empty,.stack.br_only').remove();
$('.stack:has(.mark),.stack:has(.l_yoko),.stack:has(a.text_last)').removeClass("stack");
$('.stack:has(*:not(.br_last)+br:not(.br_last)+br)').removeClass("stack");
$('h2.stack,h3.stack,figure.stack').removeClass("stack");
$('.stack+*:has(.l_yoko),.stack+a,.stack+h2,.stack+h3,.stack+figure').prev().removeClass("stack");
$('.pageNewsdetail-content-article>*:not(.br_only):not(.stack):not(a)').removeAttr('class');

詰将棋解説 5手詰

Twitter詰将棋自体はよく見かけるのですが、解説はあまり見ない気がするのでやってみます。自分の作品でもいいのですが自画自賛と思われるのも嫌なので避けます。


居飛車穴熊を相手にした終盤戦のような配置ですね。穴熊崩しといえば2三の地点を攻めたいところです。初手から▲2三桂と打ちたいのですが△2二玉、▲3一馬、△3三玉と進むと問題が発生します。
f:id:jigendaddy:20210616194105j:plain
▲4二馬は△2二玉、▲4二角成は△4四玉がありどちらかの逃げ道を抑えられません。▲2二馬は△同玉、▲3一角成、△3三玉で元の形に戻ります。必ずしもパターン通りでうまくいかないのが面白いですね。

そこでどうするかですが、初手▲2三桂に代えて▲3三馬と捨てます。△同桂で3三からの逃走ルートを塞ぎつつ5三の角を活かす狙いです。
f:id:jigendaddy:20210616193454j:plain
この▲3三馬に2二へ合駒を打てば今度こそ▲2三桂までなので
f:id:jigendaddy:20210616154837j:plain
仕方無しの△同桂に▲2三桂△2二玉▲3一角成までの5手詰みです。
f:id:jigendaddy:20210616145701p:plain
馬の強さを存分に活かした詰将棋です。出題者の方は#おやすみ詰将棋で自作品をまとめられているようです。興味のある方は是非解いてみてください。

lazyloadの独自属性対策

981 名前:名無しさん@お腹いっぱい。 投稿日:2020/11/24(火) 23:16:18.76 ID:SKoR9FCR0
2ページ目以降の画像の遅延読み込み (Lazy Load) の対策を、GreasyFork で公開しました。
https://greasyfork.org/ja/scripts/416710-autopagerize-lazy-load-assistant

982 名前:名無しさん@お腹いっぱい。 投稿日:2020/11/24(火) 23:58:48.54 ID:KxrmkJAv0
>>981
いいね完璧

983 名前:名無しさん@お腹いっぱい。 投稿日:2020/11/25(水) 01:43:44.25 ID:LlMgWYNX0
ImpressのWatchajaxプロパティ使ってるんだよなぁ
Watchはよく見るから自前スクリプトでは対応させてるんだけどajaxだからもちろんdatasetには無い
まあでも汎用的なプロパティ名じゃ無いわな……

984 名前:名無しさん@お腹いっぱい。 投稿日:2020/11/25(水) 04:18:17.98 ID:1F06LSlV0
const DATASETS = [
'src',
'lazySrc',
'original',
];
img.src = img.dataset[name];
srcがいらなくない?
img.src=img.srcしてるような
俺のはブックマだが他のが入ってる
["data-src", "data-lazy-src", "data-original", "ajax", "data-layzr", "data-gifffer"]

985 名前:名無しさん@お腹いっぱい。 投稿日:2020/11/25(水) 08:45:31.91 ID:Pm0TDhB80
>>983
うわーまじかぁ 自分もWatchたまに見るけど独自属性には付き合ってらんないな・・・
html埋め込みスクリプトで↓こんなことやってんね

$('.main-contents img[ajax]').each(function(){
$(this).attr('src', $(this).attr('ajax'));
$(this).removeAttr('ajax');
});

>>984
DATASETS で定義してるのはいずれも dataset 以下の項目なので、
src は実際には img.src じゃなくて img.dataset.src を探ってます。
例: https://toyokeizai.net/articles/-/362124

AutoPagerize質問・要望スレ page:5

一応data-imgとかdata-delayとかもありますよ。とはいえほどほどでいいと思います。
wedata.net
wedata.net

Tumblrのsiteinfo編集について その3


uAutoPagerizeの更新を確認しました。ここまで書いてきたTumblrのsiteinfoとお別れです。

ダミーコードに関してはダミー1、ダミー2、そして個別サイトごとのsiteinfoを全て削除しました。exampleUrlで動作が抑制されています。

汎用型のarticleも削除しました。残すと影響が大きいと考えられるためです。

本丸の681に関しては動作を限定しました。
wedata.net
これでもまだ問題が起きるかもしれませんが、その都度対応します。

postに関しては悩みましたが、ひとまず残します。これも問題を確認次第対応します。
wedata.net
ここまでの変更を踏まえsiteinfoを再度表にしておきます

番号 名称 呼称 種別
681 Tumblr メイン 汎用
31114 Tumblr - hAtom hAtom 汎用
31158 Tumblr - AutoPagerizeFORMAT APE、APF 汎用
63728 Tumblr - masonry masonry 汎用
85560 Tumblr - post post 汎用
85562 Tumblr - newDay newDay 集積
85564 Tumblr - content content 集積

pageElement

Tumblr

descendant::*[count(.//*[@class="permalink"][not(self::a)])>=4][last()]/*

Tumblr - hAtom

//*[contains(concat(' ', @class, ' '), ' hentry ')]

Tumblr - AutoPagerizeFORMAT

//*[contains(concat(' ',@class,' '), ' autopagerize_page_element ')]

Tumblr - masonry

id("blog wrap")[./*[starts-with(@id,"1")]]

Tumblr - post

(//div[@class="post"]|//div[@class="post"]/following-sibling::div[@class="date" or @class="bottom"]|//div[@class="post"]/preceding-sibling::div[@class="date" or @class="bottom"])[count(//*[./div[@class="post"]])=1][count(//div[@class="post"])>2][//div[@class="post"]/following-sibling::*[1][@class="post" or @class="bottom"]]

Tumblr - newDay

descendant::div[@id="newDay"][1]|descendant::div[@id="newDay"][1]/following-sibling::div[@id="newDay"]

Tumblr - content

id("content")

Tumblrのsiteinfo編集について その2

wedataのsiteinfoが適用される優先順位は、URLの長さで決まります。他のsiteinfoよりURLが長ければ優先され適用される仕組みです。既存のTumblrで汎用的に適用されるsiteinfoはこの点をよく考慮されています。

Tumblr(681)

^.+://[^/]+\.tumblr\.com/

Tumblr - hAtom(31114)

^.+://[^/]+\.tumblr\.com/.*

Tumblr - AutoPagerizeFORMAT(31158)

^.+://[^/]+\.tumblr\.com/.*.*

Tumblr - masonry(63728)

^https?://[^/]+\.tumblr\.com/*

下から順にURLが長い分だけ優先して適用されます。しかし私案は汎用的に適用したい場合は、Tumblr - masonryからコピペしたURLを使います。どれを優先させるか考えるのが面倒だからです。

Tumblrのsiteinfo編集について

これまでに関わった複数のURLが適用されるsiteinfoを表にしておきます。

番号 名称 呼称 種別
681 Tumblr メイン 汎用
31114 Tumblr - hAtom hAtom 汎用
31158 Tumblr - AutoPagerizeFORMAT APE、APF 汎用
63728 Tumblr - masonry masonry 汎用
85560 Tumblr - post post 汎用
85573 Tumblr - article article 汎用
85562 Tumblr - newDay newDay 集積
85564 Tumblr - content content 集積
85563 Tumblr -Dummy for uAutopagerize ダミー1 集積
85566 Tumblr -Dummy for uAutopagerize2 ダミー2、ダミーラスト 集積

pageElement

Tumblr

(id("posts")[count(//*[@id="posts"])=1]|//*[@class="main" or @role="main"][not(self::main)][not(id("posts"))])[not(@style)][not(.//article[@style])][not(.//*[contains(@class,"masonry")])][not(id("sidebar-nav"))]

Tumblr - hAtom

//*[contains(concat(' ', @class, ' '), ' hentry ')]

Tumblr - AutoPagerizeFORMAT

//*[contains(concat(' ',@class,' '), ' autopagerize_page_element ')]

Tumblr - masonry

id("blog wrap")[./*[starts-with(@id,"1")]]

Tumblr - post

(//div[@class="post"]|//div[@class="post"]/following-sibling::div[@class="date" or @class="bottom"]|//div[@class="post"]/preceding-sibling::div[@class="date" or @class="bottom"])[count(//*[./div[@class="post"]])=1][count(//div[@class="post"])>2][//div[@class="post"]/following-sibling::*[1][@class="post" or @class="bottom"]]

Tumblr - article

//article[not(contains(@class,"loaded"))][count(//*[./article[./following-sibling::article]])=1]

Tumblr - newDay

descendant::div[@id="newDay"][1]|descendant::div[@id="newDay"][1]/following-sibling::div[@id="newDay"]

Tumblr - content

id("content")

Tumblr -Dummy for uAutopagerize

descendant::*[@style="display: none;"][1]

Tumblr -Dummy for uAutopagerize2

descendant::*[@style="display: none;"][last()]