非公開 Google KeepをTSVでエクスポートするブックマークレット(改行でカラム分けする)

  • /*
     * @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 です。

History

  1. 2015/12/11 17:37:30 - 2015-12-11
  2. 2015/11/19 22:18:17 - 2015-11-19
  3. 2015/11/19 21:40:46 - 2015-11-19
  4. 2015/11/19 21:29:46 - 2015-11-19
  5. 2015/11/19 21:29:04 - 2015-11-19
  6. 2015/11/19 21:25:24 - 2015-11-19
  7. 2015/11/19 21:24:00 - 2015-11-19
  8. 2015/11/19 21:22:08 - 2015-11-19
  9. 2015/11/19 21:19:16 - 2015-11-19