Douban Say Anywhere

By Meck Last update Nov 8, 2009 — Installed 363 times.

There are 13 previous versions of this script.

// ==UserScript==
// @name           Douban Say Anywhere
// @namespace      http://meckmeck.cn
// @description    在豆瓣任何页面使用我说功能(v1.2)
// @include        http://www.douban.com/*
// @exclude        http://www.douban.com/radio/
// @require        http://userscript-autoupdate-helper.googlecode.com/svn/trunk/autoupdatehelper.js
// @author         Meck
// @version 1.2
/* @reason
   v1.2
   1.增加如下快捷键:
    呼出我说对话框:Alt+W
    关闭我说对话框:Alt+R
    提交内容:Ctrl+Enter
   2.呼出对话框后自动设置焦点。
@end*/
// ==/UserScript==

//自动检测脚本最新版本
var thisScript = {
    name: "Douban Say Anywhere",
    id: "61245",
    version:"1.2"
}
var updater = new Updater(thisScript);
updater.check();

//创建我说按钮
var oSayButton = document.createElement("a");

oSayButton.id = "say_button";
oSayButton.href = "javascript:"
GM_addStyle('\
	#say_button {\
	    -moz-background-clip:border;\
	    -moz-background-inline-policy:continuous;\
	    -moz-background-origin:padding;\
	    -moz-border-radius-bottomright:5px;\
	    -moz-border-radius-topright:5px;\
	    background:#666666 url(http://keep-rolling.googlecode.com/files/say.gif) no-repeat scroll 5px center;\
	    border-color:#EEF9EB;\
	    border-style:solid;\
	    border-width:4px 4p 4px 0;\
	    display:block;\
	    height:66px;\
	    outline-color:-moz-use-text-color;\
	    outline-style:none;\
	    outline-width:medium;\
	    position:fixed !important;\
	    left:0;\
	    text-indent:-9999px;\
	    top:300px;\
	    width:24px;\
	}\
');
document.body.appendChild(oSayButton);

//显示我说对话框
function fnShow() {
    if (document.getElementById("overlay") == undefined) {
	var oDivOverlay = document.createElement("div");
	oDivOverlay.id = "overlay";
	oDivOverlay.style.height = "200px";
	oDivOverlay.style.width = "586px";
	oDivOverlay.style.left = "351px";
	oDivOverlay.style.top = "250px";

	var oDivDialog = document.createElement("div");
	oDivDialog.id = "dialog";
	oDivDialog.style.left = "351px";
	oDivDialog.style.top = "250px";
	oDivDialog.innerHTML = "<div>"+
	"<div class='indentpop clearfix'>"+
	"<span class='gact rr'><a href='javascript:void(O)' onclick='close_dialog()'>x</a></span>"+
	"<h2 style='display: inline !important;'>我说   · · · · · ·</h2>"+
	"<span id='tip' style='margin-left:10px;color:#BBBBBB'>呼出我说:Alt+W 关闭我说:Alt+R 提交:Ctrl+Enter</span>"+
	"<div style='display: none;'><input type='hidden' value='8cdb' name='ck'/></div>"+
	"<div align='center'>"+
	"<textarea class='area_miniblog' rows='5' id='mb_text' name='mb_text' style='width:400px'></textarea><br/>"+
	"<input type='button' value=' 我说 ' class='button' name='mb_submit' id='mb_submit' />"+
	"</div>"+
	"</div>";

	var oDivWrapper = document.getElementById("wrapper");

	document.body.insertBefore(oDivDialog, oDivWrapper);
	document.body.insertBefore(oDivOverlay, oDivDialog);

	//为文本框设置焦点
	document.getElementById("mb_text").focus();

	//给提交按钮添加监听函数
	var oSubmit = document.getElementById("mb_submit");
	oSubmit.addEventListener("click", fnPostData, false);
    }
}

//POST数据
function fnPostData(){

    fnChangeTip()

    //获取隐藏字段的值
    GM_xmlhttpRequest({
	method: 'GET',
	url: 'http://www.douban.com/contacts/',
	headers: {
	    'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
	    'Accept': 'application/atom+xml,application/xml,text/xml',
	},
	onload: function(responseDetails) {
	    var strInput = responseDetails.responseText;
	    var regx=/name=\"ck\" value=\"(.*?)\"/g;
	    strInput.match(regx);
	    var str = RegExp.$1;
	    //POST数据
	    GM_xmlhttpRequest({
		method: "POST",
		url: "http://www.douban.com/contacts/",
		data: "ck="+str+"&mb_text="+document.getElementById("mb_text").value,
		headers: {
		    "Content-Type": "application/x-www-form-urlencoded"
		},
		onload: function(){
		    //关闭对话框
		    unsafeWindow.close_dialog();
		}
	    });
	}
    });
}

//提交后显示
function fnChangeTip(){
    oTip = document.getElementById("tip");
    oTip.style.color = "#F92D09";
    oTip.innerHTML = "内容提交中...";
}

//快捷键
function fnHotKey(oEvent) {
    //呼出alt+w
    if (oEvent.altKey === true && oEvent.keyCode === 87) {
	fnShow();
    }

    //提交ctrl+enter
    if (oEvent.ctrlKey === true && oEvent.keyCode === 13) {
	fnPostData();
    }

    //关闭alt+r
    if (oEvent.altKey === true && oEvent.keyCode === 82) {
	unsafeWindow.close_dialog();
    }
}

//给我说按钮添加监听函数
var oButton = document.getElementById("say_button");
oButton.addEventListener("click", fnShow, false);

//给页面添加键盘监听函数
document.addEventListener('keydown', fnHotKey, true);

//给文本框添加键盘监听函数
var oTextarea = document.getElementById("mb_text");
oTextarea.addEventListener('keydown', fnHotKey, true)