登録日時とタグ?かなんかで2次元的にプロットしてくれるブックマークシステム(整理するのに便利)
これは、おれがブックマークが増えすぎて整理の方法に困ってると言ったら
田村が整理するのではなく古いのを消すサジェストをしてくれる機能はどうかといったのを聞いて
更に思いついたもの
ブックマークのタイムラインみたいなもので、
さらにその時自分が関心を持っていたことも把握できるような感じのもの
なんかWillcaとかいって一般意志2.0の実装をやってるみたいだが、
ブックマークもつぶやきみたいに使えるよね
少なくともソーシャルブックマークは公開されてるわけだし使っていいはずだ
ブックマークサービスとかwebブラウザのブックマークにAPIってあるんだろうか
というかブックマークした日時って登録されてるんだろうか
-----------------------------------------------------------------
とりあえずチュートリアルを進めてみる
chromeのエクステンションはwebページでできているようだ。
本体はmanifest.jsonというjsonファイル。へー
しかし、もしかしてchromeのブックマークには登録日時とか更新日時の情報が無いのでは
上記ページは古くて、オーバーライドではnew tabしか書き換えられないとのことだが、
公式
Google Chrome Extensions
によるとブックマークページも書き換えられるらしい
いいぞ
BookmarkTreeNodeオブジェクト
が
dateAdded
というプロパティを持ってる
これで作成日時が分かる
dateGroupModified
で更新日時も分かるぞ
-----------------------------------------------------------------
・練習でブックマークを登録日時か更新日時で並び替えるアプリを作る
とりあえず、全ブックマークをただリストアップするアプリ
manifest.json
{
"name": "My First Extension",
"version": "1.0",
"description": "This extension show bookmarks sorted by update or create time",
"icons": { "48": "48icon.png",
"128": "128icon.png" },
"browser_action": {
"default_title": "Sort bookmarks by time",
"default_icon": "19icon.png",
"popup": "popup.html"
},
"permissions": [
"bookmarks"
]
}
"name": "My First Extension",
"version": "1.0",
"description": "This extension show bookmarks sorted by update or create time",
"icons": { "48": "48icon.png",
"128": "128icon.png" },
"browser_action": {
"default_title": "Sort bookmarks by time",
"default_icon": "19icon.png",
"popup": "popup.html"
},
"permissions": [
"bookmarks"
]
}
popup.html
<style>
div.bookmark{
display:block;
}
</style>
<script>
//再帰的にノードを確かめて、フォルダじゃなかったら
function checkNode(treeNode){
if(treeNode.url){ //このノードがフォルダじゃなかったら
//alert("ok!");//debug
var bookmarkElement = document.createElement("div");
bookmarkElement.class = "bookmark";
var added = new Date();
added.setTime(treeNode.dateAdded);
bookmarkElement.innerHTML = treeNode.title + " added:" + added;
if(treeNode.dateGroupModified){ //更新日時があったら
var updated = new Date();
updated.setTime(treeNode.dateGroupModified);
bookmarkElement.innerHTML += " updated:" + updated;
}
document.body.appendChild(bookmarkElement);
}
if(treeNode.children){ //ノードに子どもがあれば再帰的に適用
treeNode.children.forEach(checkNode);
}
}
chrome.bookmarks.getTree(function (wholeTree){
wholeTree.forEach(checkNode);
});
</script>
div.bookmark{
display:block;
}
</style>
<script>
//再帰的にノードを確かめて、フォルダじゃなかったら
function checkNode(treeNode){
if(treeNode.url){ //このノードがフォルダじゃなかったら
//alert("ok!");//debug
var bookmarkElement = document.createElement("div");
bookmarkElement.class = "bookmark";
var added = new Date();
added.setTime(treeNode.dateAdded);
bookmarkElement.innerHTML = treeNode.title + " added:" + added;
if(treeNode.dateGroupModified){ //更新日時があったら
var updated = new Date();
updated.setTime(treeNode.dateGroupModified);
bookmarkElement.innerHTML += " updated:" + updated;
}
document.body.appendChild(bookmarkElement);
}
if(treeNode.children){ //ノードに子どもがあれば再帰的に適用
treeNode.children.forEach(checkNode);
}
}
chrome.bookmarks.getTree(function (wholeTree){
wholeTree.forEach(checkNode);
});
</script>
日時順になるように
popup.html
を書き換え
疲れたのでまた明日
やること
ブックマーク最大IDを取得(この際、ブックマーク数が1000以上だと処理を止めるようにする)
ブックマーク全体を登録日時でクイックソート
この際もとのTreeを書き換えないように別のarrayにいれる
できた配列を出力