Dynalistをmarkdownにするブックマークレットを作った


Dynalistはmarkdownに出力してくれないというか……色々と不便だったので、markdownにするブックマークレットを作りました。
なんかちょっとおかしい気もする。まぁいいか……動いてるし

  • Dynalistで見出し(H1~4)を設定したら、markdownになったときに#をつけてくれる。

  • それを別タブで表示してくれる

  • 一行目(Dynalistではページ名)をファイル名にして保存するボタン

  • 一行目がファイル名になるため、一行目をmarkdown本文から削除しておく

  • その代わりに、リストのbulletとか階層はガン無視される


javascript:(function(){    var result = [],      rootNode = $('.is-currentRoot'),      childNodes = getChildNodes(rootNode, 1, result);  function getChildNodes(node, level, arr) {    var children = node.children('.Node-children').children('.Node-outer').children('.Node');    if (children.length > 0) {      var headingLevel = Math.min(level + 1, 8);      arr.push({        title: node.children('.Node-self').children('.Node-contentContainer').children('.Node-content').text().trim(),        node: headingLevel,        child: true      });      level = level + 1;    } else {      arr.push({        title: node.children('.Node-self').children('.Node-contentContainer').children('.Node-content').text().trim(),        node: Math.min(level, 8),        child: false      });    }    for (var i = 0; i < children.length; i++) {      getChildNodes(children.eq(i), level, arr);    }    return arr;  }  var title = result[0].title;  var markdown = '';  for (var i = 1; i < result.length; i++) {    result[i].child ? markdown += Array(result[i].node - 1).join(%27#') + ' ' + result[i].title + '\n\n' : markdown += result[i].title + '\n\n';  }  var newWindow = window.open('', '_blank');  newWindow.document.open();  newWindow.document.write('<!DOCTYPE html><html lang="ja"><head><title>Markdown Result</title><style type="text/css">textarea{width:100%;height:500px;}</style></head><body><textarea>' + markdown + '</textarea><br><a href="data:text/markdown;charset=utf-8,' + encodeURIComponent(markdown) + '" download="' + title + '.md">Save as Markdown</a></body></html>');  newWindow.document.close();})();


Dynalistでの画面


出力画面と保存ボタン


モーダル画面になるバージョン

javascript:(function(){var result=[],rootNode=$('.is-currentRoot'),childNodes=getChildNodes(rootNode,1,result);function getChildNodes(node,level,arr){var children=node.children('.Node-children').children('.Node-outer').children('.Node');if(children.length>0){var headingLevel=Math.min(level+1,8);arr.push({title:node.children('.Node-self').children('.Node-contentContainer').children('.Node-content').text().trim(),node:headingLevel,child:true});level=level+1;}else{arr.push({title:node.children('.Node-self').children('.Node-contentContainer').children('.Node-content').text().trim(),node:Math.min(level,8),child:false});}for(var i=0;i<children.length;i++){getChildNodes(children.eq(i),level,arr);}return arr;}var title=result[0].title;var markdown='';for(var i=1;i<result.length;i++){result[i].child?markdown+=Array(result[i].node-1).join(%27#')+' '+result[i].title+'\n\n':markdown+=result[i].title+'\n\n';}var modal=$('<div id="markdown-modal"></div>').appendTo('body');modal.html('<span style="cursor:pointer;color:#ff0000;" onclick="$(\'#markdown-modal\').remove();">Close</span><br><textarea style="width:400px;height:500px;background:#fff;color:#000;">'+markdown+'</textarea><br><a href="data:text/markdown;charset=utf-8,'+encodeURIComponent(markdown)+'" download="'+title+'.md" style="color:#ffcc00;text-decoration:underline;">Save as Markdown</a>');modal.css({'position':'fixed','top':'50%','left':'50%','transform':'translate(-50%, -50%)','background':'#fff','color':'#000','padding':'20px','box-shadow':'0 0 10px rgba(0, 0, 0, 0.5)','z-index':'9999'});})();

いただいたサポートはありがたくおやつにかわります。心が優雅な暮らしになります。