サイボウズ補完計画

久しぶりの更新。半ば開き直り気味完全放置のこのブログですが、コードを晒してみたくなったので久しぶりに更新。

会社のサイボウズを便利にするために超手抜き自作グリモン書いてたんだけど、やましろ on Twitter: "サイボウズの未読って全て読んだことにするって機能ないんかなー。せめてそういうグリモン"を見て、意外と需要あるかもと思ったので晒してみる。

基本はサイボウズであったら便利かなと思った機能をキーボードに割り付けただけ。
対象はサイボウズOFFICE7、以下のとくにsとかnはバージョン違うと動かないかも。
FireFoxしか動作確認してません。firebugのconsole使ったりjQueryを@requireで読み込んだりしてるのでまずFireFoxしか動かないと思います。逆にそこだけ削除すれば他でも動くかもしれませんが、クロスブラウザ意識していないので不明。
以下機能。

  • sキー submit nameが"Read","Confirm","Approve"なボタンを押下。全て既読とか承認とかよく使うのに探しづらいボタン用。
  • cキー 画面内にあるチェックボックスを全てトグルでチェックさせる乱暴な機能。
  • tキー トップに戻るだけ。よくトップに戻るけど、画面最上部にしかリンクなくて不便だったので作成。
  • nキー 画面内にある掲示板、ワークフローリンクへ遷移。(報告書は対象外、個人的な優先度の問題)
  • 暴走を防ぐ為、テキスト入力中は効きません。

nキーは現状リンクを上から順番に遷移するか聞いてきてOKのところに行くので、遷移自体キャンセルするときはリンク数分キャンセルボタンを押すダメ仕様。LDRizeっぽくすれば便利だったかもと後から思ったが反省はするが以下略。
大体の利用シーンは

  • ワークフローと掲示板を片っ端から確認するときはnキー→エンターキー→読んだらsキーの繰り返し。
  • 大体めぼしい報告書読み終わったらcキー→sキーの繰り返し。
  • 一番適当にせっかくだからと思って作ったトップ遷移が意外と使うという事実。

基本的にどうでも良い報告書が大量に未読になってしまったときに全部マウスでクリックして下の方の既読ボタンを押すっていう作業に疲れ切って作ったシロモノです。
ファイルであげた方が便利なんでしょうけど、あんま晒した事ないのでいい上げ方思いつかなかったのと、一ファイルなのでソース直貼りしてみました。なんかいい方法あったら教えてくだしあ。このクオリティでgoogle codeとかUserscripts.orgとか使うの気が引けるし。
ということで使いたいという奇特な人がいましたらグリモンでコピペして使ってください。
あ、日本語入ってるのでファイルはUTF-8で保存してください。

// ==UserScript==
// @name           cybozu support script
// @namespace      u1tnk
// @require        http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js
// @include        http://cybozu/*
// ==/UserScript==
(function() {
	var allCheckFlag = false;
	window.addEventListener('keypress',
		function(e) {
			console.debug("char code : " + e.charCode);
			var activeTagName = document.activeElement.tagName;
			var activeTypeName = document.activeElement.getAttribute("type");
			console.debug("activeTagName : " + activeTagName);
			console.debug("activeTypeName : " + activeTypeName);
			if (activeTagName == "TEXTAREA") {
				console.debug("ignore textarea")
				return;
			}
			if (activeTagName == "INPUT") {
				if (activeTypeName == "text" || activeTypeName == "password") {
					console.debug("ignore input text")
					return;
				}
			}
			//s submit
			if (e.charCode == 115) {
				var inputs =document.getElementsByTagName('input');
				for (var i = 0; i < inputs.length; i++) {
				    if (inputs[i].getAttribute("type") == "submit" ) {
				    	var name = inputs[i].getAttribute("name");
				    	if (name == "Read" || name == "Confirm" || name == "Approve") {
					        inputs[i].click();
				    		break;
				    	}
				    }
				}
			//c all checkbox to checked
			} else if (e.charCode == 99) {
				var inputTags = document.getElementsByTagName('input');
				for (var i = 0;i < inputTags.length; i++) {
					if (inputTags[i].type == 'checkbox') {
						if (allCheckFlag) {
							inputTags[i].checked = '';
						} else {
							inputTags[i].checked = 'checked';
						}
					}
				}
				allCheckFlag = !allCheckFlag;
			// t top 
			} else if (e.charCode == 116) {
				location.href = "http://cybozu/ag.exe?page=AGIndex";
			// n next 掲示板とワークフローの最初の一つへ遷移 
			} else if (e.charCode == 110) {
				var redirectedFlag = false;
				$("a").filter("*[href*='page=BulletinView'],*[href*='page=WorkFlowView'],*[href*='page=WorkFlowHandle'],*[href*='page=ReportView']").each(
					function(index) {
						if (redirectedFlag) {
							return;
						}
						if (confirm($(this).text() + " に遷移しますか?")) {
							redirectedFlag = true;
							location.href =this.href;
						}
					}
				);
				if (!redirectedFlag) {
					alert("全て処理済みです");
				}
			}
		}, false);
})();