Google KeepをTSVでエクスポートするブックマークレット(改行でカラム分けする)
by
mitsube
2015-12-11 [2015/12/11 17:37:29]
画像とか音声とか背景色とかタグとかテキストの装飾とかはエクスポートできないよごめんね
-
/*
* @title Google KeepをTSVでエクスポートするブックマークレット(改行でカラム分けする)
* @description 画像とか音声とか背景色とかタグとかテキストの装飾とかはエクスポートできないよごめんね
* @include https://keep.google.com/*
* @license MIT License
* @javascript_url
* @private
*/
(function(){
var can_remove_blanks = true; //空行を取り除くかどうか
var selector = {
title: '.r4nke-YPqjbf:not(.LwH6nd)',
};
var className = {
checklist: 'rymPhb-IZ65Hb-gkA7Yd',
checked: 'IZ65Hb-RW7GD',
ignore: 'LwH6nd',
navbar: 'RfDI4d-zM6fo-Ne3sFf-haAclf'
};
var tsv = [];
var title = document.querySelectorAll(selector.title);
var navbar = document.getElementsByClassName(className.navbar)[0];
function hasClassName(element, className){
if( element.className.indexOf(className) !== -1 ){
return true;
}else{
return false;
}
}
function convertText(content){
var lists = content.childNodes[0].childNodes;
var columns = [];
for(var i = 0; i < lists.length; i++){
var text = lists[i].innerText;
if(can_remove_blanks){
if(text === ""){
continue;
}
}
if( hasClassName(lists[i], className.checked) ){
text = '☐ ' + text;
}else{
text = '☑ ' + text;
}
columns.push(text);
}
return columns;
}
function splitColumnsByNewLine(content){
if( hasClassName(content, className.ignore) ){ //タイトルのないメモや、画像・音声を含むメモでずれるで調整
var content = content.nextSibling;
}
var columns = content.innerText.split('\n');
if(can_remove_blanks){
columns = columns.filter(function(e){
return e !== "";
});
}
return columns;
}
function downTsv(tsv){
var tsvbuf = tsv.map(function(e){
return e.join('\t');
}).join('\r\n');
var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
var blob = new Blob([bom, tsvbuf], { type: 'text/csv' });
var url = (window.URL || window.webkitURL).createObjectURL(blob);
var link = document.getElementById('tsv');
// var a = $('<a>').attr('href', url).attr('download', fileName).text('エクスポート').attr('id', 'tsv').prependTo($('body'));
var a = document.createElement('a');
a.id = 'tsv'
a.href = url;
a.download = document.title + '.tsv';
a.innerText = 'Export';
a.style.fontSize = '500%';
if( link ){
navbar.removeChild(link);
}
navbar.appendChild(a);
}
for(var i = 1; i < title.length; i++){
var content = title[i].nextSibling;
if( hasClassName(content, className.checklist) ){
var columns = convertText(content);
}else{
var columns = splitColumnsByNewLine(content);
}
columns.unshift(title[i].innerText);
tsv.push(columns);
}
if(tsv){
downTsv(tsv);
}
})();
-
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。