From d392c44a652331495e13fb8ea99cc2ac8a40527c Mon Sep 17 00:00:00 2001 From: elzzup Date: Wed, 12 Nov 2014 23:15:31 +0900 Subject: create googleselect.js グーグル検索結果画面で楽に選択するためのプラグイン コマンド: googleselect back -次の検索結果リンクにフォーカス googleselect[ front] -前の検索結果リンクにフォーカス --- googleselect.js | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 googleselect.js (limited to 'googleselect.js') diff --git a/googleselect.js b/googleselect.js new file mode 100644 index 0000000..24c4eca --- /dev/null +++ b/googleselect.js @@ -0,0 +1,96 @@ + +// PLUGIN_INFO {{{ +let PLUGIN_INFO = xml` + +GoogleSelect +グーグルセレクト +you can quick select in Google search result page +Google検索結果からページ選択を楽にできる +1.0 +elzup +1.0 +2.0pre + +`; +// }}} + +(function () { + var google_url = 'https:\/\/www.google.co.jp\/search.*'; + /* user config */ + // 選択状態表示マーカー + var SELECT_MARKER_CHAR = '▶'; + // マーカー位置微調整 + var SELECT_MARKER_REPOSITION_LEFT = '0em'; + var SELECT_MARKER_REPOSITION_TOP = '0.3em'; + + /* hard config */ + var GOOGLE_SELECTION_CLASS = 'r'; + var GOOGLE_SELECTION_SELECTED_CLASS = 'r-selected'; + + commands.addUserCommand( + ['googleselect'], + 'move select in google search result', + function (args) { + var v = 1; + if (args.length && args[0] == 'back') { + v = -1; + } + var $rs = window.content.window.document.getElementsByClassName(GOOGLE_SELECTION_CLASS); + var pre = -1; + for (var i = 0; i < $rs.length; i++) { + if ($rs[i].className.indexOf(GOOGLE_SELECTION_SELECTED_CLASS) != -1) { + pre = i; + break; + } + } + // ターゲット表示スタイル + var $pointer = window.content.window.document.createElement('span'); + $pointer.style.color = 'blue'; + $pointer.id = 'google-select-pointer'; + $pointer.style.position = 'absolute'; + $pointer.style.marginTop = SELECT_MARKER_REPOSITION_TOP; + $pointer.style.left = SELECT_MARKER_REPOSITION_LEFT; + $pointer.innerHTML = SELECT_MARKER_CHAR; + + if (pre != -1) { + // 現在の選択状態削除 + $rs[pre].className = GOOGLE_SELECTION_CLASS; +// $rs[pre].style.borderLeft = "none"; + $rs[pre].childNodes[0].blur(); + var $e = window.content.window.document.getElementById('google-select-pointer'); + $e.parentNode.removeChild($e); + } else if (v == -1) { + pre = $rs.length; + } + if ((pre == 0 && v == -1) || (pre == $rs.length - 1 && v == 1)) { + return; + } + +// $rs[pre + v].style.borderLeft = "solid 5px blue"; + $rs[pre + v].className = $rs[pre + v].className + " " + GOOGLE_SELECTION_SELECTED_CLASS; + $rs[pre + v].childNodes[0].focus(); + $rs[pre + v].parentNode.parentNode.insertBefore($pointer, $rs[pre + v].parentNode.parentNode.firstChild); + }, + { + literal: 0, + bang: true, + count: true, + argCount: '?', + options: [], + completer: function (context, args) { + context.title = ['value', 'description']; + context.completions = [ + ['front', 'move front item'], + ['back', 'move back item'] + ]; + } + }, + true // replace + ); + + +})(); + +// vim:sw=2 ts=2 et si fdm=marker: + -- cgit v1.2.3