nyarla
https://gyazo.com/54981d21d7b8ddd800ad93591a3412cb
で、誰?
輝かしい青春なんて失かったヒトと名乗っている方のにゃるら。本名は岡村 直樹。 細かいプロフィールなどは、
におおよそ書いてあります。
ちなみに
便利スクリプト
code:script.js
scrapbox.PageMenu.addMenu({
title: 'textlint mode',
onClick: () => {
function escapeHTML(src) {
return src.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};
function getPageTitle(container) {
return container.querySelector('.line-title .text').innerText;
}
function trimEmptyCharIndex(line) {
let clone = line.cloneNode(true);
let tags = clone.querySelectorAll('span.empty-char-index');
for ( let idx = 0, len = tags.length; idx < len; idx++) {
}
return clone;
}
function convertBackQuote(line) {
let clone = line.cloneNode(true);
let tags = clone.querySelectorAll('span.backquote');
for ( let idx = 0, len = tags.length; idx < len; idx++ ) {
}
return clone;
}
function trimSpaces(line) {
return (line.cloneNode(true).innerHTML)
.replace(/<br.+?>/g, '')
.replace(/\n/gi, '')
.replace(/\t/gi, '')
.trim();
}
function trimInlineTags(text) {
return text.replace(/<span^>*?>/g, '').replace(/<\/span>/g, '') .replace(/<strong^>*?>/g, '').replace(/<\/strong>/g, '') .replace(/<strike^>*?>/g, '').replace(/<\/strike>/g, ''); }
function convertHeadingLevel(level) {
const MAX_LEVEL = 5;
let num = ( MAX_LEVEL + 1 ) - ( level ? level : 1 );
return "#".repeat(num);
}
function convertHeading(text) {
let div = document.createElement('div');
div.innerHTML = text;
let tags = div.querySelectorAll('strong');
for ( let idx = 0, len = tags.length; idx < len; idx++ ) {
let level = parseInt(tag.className.split('level-')1); let title = tag.innerHTML;
if ( tag.parentNode && tag.parentNode.parentNode && tag.parentNode.parentNode.className !== 'indent'
&& trimInlineTags(div.textContent) === tag.textContent ) {
tag.innerHTML = ${convertHeadingLevel(level)} ${title};
} else {
let marks = [];
if ( tag.querySelector('.deco-\\*') !== null ) {
marks.push('**');
}
if ( tag.querySelector('.deco-\\/') !== null ) {
marks.push('_');
}
if ( tag.querySelector('.deco--') !== null ) {
marks.push('~~');
}
const left = marks.join(' ');
const right = Array.from(marks).reverse().join(' ');
tag.innerHTML = ${left}${title}${right} ;
}
}
return div.innerHTML;
}
function convertLinks(text) {
let div = document.createElement('div');
div.innerHTML = text;
let tags = div.querySelectorAll('a');
for ( let idx = 0, len = tags.length; idx < len; idx++ ) {
let html = tag.innerHTML.trim();
let link = tag.getAttribute('href');
let img = tag.querySelector('img');
let type = tag.getAttribute('type');
if ( img !== null ) {
tag.innerHTML = [})](${link})
} else if ( type == 'link' ) {
tag.innerHTML = ${html}
} else {
tag.innerHTML = [${html}](${link});
}
}
return div.innerText;
}
function convertIndentLevel(max){
let count = 0;
for ( let u = 1; u < max; u++ ) {
count++;
}
return " ".repeat(count);
}
function convertScrapboxDOMToMarkdownText(container) {
const title = getPageTitle(container);
let lines = container.querySelectorAll('.line');
let code = [];
let result = [];
for ( let idx = 1, len = lines.length; idx < len; idx++ ) {
let line = linesidx.querySelector('.text').cloneNode(true); if ( /code-block/.test(line.className) ) {
code.push( line.textContent );
continue
} else if ( code.length > 0 ) {
code.unshift('`');
code.push('`');
result.push( code.join("\n") );
code = [];
}
line = trimEmptyCharIndex(line);
line = convertBackQuote(line);
let text = trimSpaces(line);
text = convertHeading(text);
text = trimInlineTags(text);
text = convertLinks(text);
let dot = line.querySelector('.indent-mark')
if ( dot !== null ) {
let width = parseFloat( dot.getAttribute('style').match(/width: (\d+(?:\.\d+)?)em/)1 ); let level = width / 1.5;
text = convertIndentLevel(level) + '* ' + text;
} else if ( text.length > 0 && text0 !== '#' ) { text = text + "\n";
}
result.push(text);
}
return "# " + title + "\n\n" + result.join("\n");
}
const markdown = convertScrapboxDOMToMarkdownText( document.querySelector('.lines') );
const boxID = '___textlint-on-scrapbox';
let div = document.createElement('div');
div.setAttribute('id', boxID);
div.innerHTML = `
<textarea class="markdown">${escapeHTML(markdown)}</textarea>
<textarea class="scrapbox"></textarea>
<div class="buttons">
<button class="exit">Exit</button>
</div>
<style>
position: fixed ;
display: flex ;
flex-direction: row ;
top: 0 ;
width: 100% ;
height: ${escapeHTML(window.screen.height.toString(10))}px ;
z-index: 1000 ;
background-color: rgba(255,255,255, 0.61) ;
}
position: absolute ;
top: 0 ;
right: 0 ;
}
display: block ;
width: 50% ;
height: 100% ;
}
</style>
`;
div.querySelector('.buttons .exit').onclick = () => {
let target = document.getElementById(boxID);
target.parentNode.removeChild(target);
target = null;
return true;
};
document.body.appendChild(div);
}
});