iciba划词翻译

iciba翻译

目前为 2017-03-19 提交的版本。查看 最新版本

// ==UserScript==
// @name			iciba划词翻译
// @namespace		noe132.com
// @author			noe132
// @include			http://*
// @include			https://*
// @exclude			http://www.iciba.com*
// @grant			GM_xmlhttpRequest
// @grant			GM_addStyle
// @grant			GM_getValue
// @grant			GM_setValue
// @grant			GM_registerMenuCommand
// @icon			http://tb.himg.baidu.com/sys/portrait/item/d4346e6f65313332ac06
// @version			3.0.2
// @connect			*
// @description 	iciba翻译
// @supportURL		http://tieba.baidu.com/f?kw=firefox
// @contributionURL	[email protected]|alipay.com
// ==/UserScript==


/* ------------------ changelog -------------------
 * update INFO:
 * update 2016/12/23 : trim查询字符串,更新版本号到3
 * update 2016/09/23 : mouseClick只能左键触发
 * update 2016/08/19 : 不知为何connect属性未加上
 * update 2016/05/30 : 样式修改
 * update 2016/05/03 : 解释处理修改
 * update 2016/05/02 : 样式修改
 * update 2016/05/01 : 样式修改
 * update 2016/04/22 : 老版本浏览器兼容性修复
 * update 2016/04/17 : 样式修改
 * update 2016/04/17 : 重写
 * update 2016/04/09 : 样式小改
 * update 2016/03/27 : 紧急修复。。。
 * update 2016/03/16 : 样式修正
 * update 2016/03/05 : 样式小改
 * update 2015/07/31 : 貌似之前的wordpress判断不太给力,干脆带wp-admin的都干掉
 * update 2015/07/12 : 去除wp-admin/post.php页面,防止wordpress编辑文章自动添加div
 * update 2015/05/19 : 设置查词默认为小写
 * update 2015/05/09 : 按Ctrl可以使小蓝圈隐藏起来(暂时)
 * update 2015/01/03 : 样式全加了 !important 提高优先级
 * update 2014/12/24 : 添加设置选项(可当且仅当按住ctrl键显示翻译按钮)
 * update 2014/12/20 : 修正语法错误。。。
 * update 2014/12/19 : 搜词BUG修复,修正点击定位~
 * update 2014/12/10 : 严格模式"use strict",提高性能
 * update 2014/12/04  : 贴吧图册预览修正
 * update 2014/11/16 : 更换mouseClick的触发条件为mouseup
 * update 2014/11/14 : 添加输入框查词,修正定位不正确。
 * ------------------------------------------------ */

"use strict";

var Iciba = function(){
	this.init();
}

Iciba.prototype.auto_active = 1; //没用~
Iciba.prototype.ctrlKey_actived = null;

/* ----------------function info-----------------
 * name: init
 * parameters: empty
 * return: void
 * 初始化对象 插入样式 读取设置 绑定事件
 * ---------------------------------------------- */
Iciba.prototype.init = function(){
	var _this = this;
	GM_addStyle('#icibaCirclePointer{font-family:"Microsoft Yahei",serif,sans-serif!important;display:block!important;z-index:10000!important;overflow:hidden!important;width:20px!important;height:20px!important;border:1px solid #555!important;border-radius:100px!important;background:#ABD!important;box-shadow:0 0 3px #111!important;opacity:.7!important;transition:.05s!important;box-sizing:border-box!important}#icibaCirclePointer:hover{opacity:1!important}#icibaCirclePointer:active{border:1px solid #353535!important;background:#90a2c4!important;box-shadow:0 0 3px #222!important}#icibaResultContainer{z-index:10000!important;width:auto!important;height:auto!important;max-width:320px!important;border:none!important;background:#EEE!important;box-shadow:0 0 8px 1px #999!important;letter-spacing:0!important}#icibaResultContainer *{box-sizing:border-box!important}#iciba_search_box{display:block!important;margin:0!important;padding:0!important;width:100%!important;border-bottom:1px solid #CCC!important;font-size:0!important;letter-spacing:0!important;word-spacing:0!important}#icibaResultContainer input{position:static!important;margin:0!important;border:none!important;border-radius:0!important;box-shadow:none!important;box-sizing:border-box!important;display:inline-block!important;vertical-align:middle!important;float:none!important}#iciba_search_box>#icibaSearchInput{padding:0 7px!important;width:calc(100% - 29px)!important;height:28px!important;line-height:28px!important;background:white!important;color:#666!important;font-size:14px!important;letter-spacing:0!important;font-family:"Microsoft Yahei",serif,sans-serif!important}#icibaSearchInput:hover,#icibaSearchInput:focus{box-shadow:0 0 3px 0 #CCC inset!important;color:#222!important}#icibaSearchButton{padding:0!important;width:29px!important;height:28px!important;border-left:1px solid #CCC!important;border-radius:0!important;background-color:#EEE!important;background-image:url("data:image/png!important;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAAJdnBBZwAAABAAAAAQAFzGrcMAAADcSURBVCjPhdG9TgJhEIXh58M1EGEFjEohiUGk4f4vBaSy0UYRBFEIP8JaLEvWhOjbTc6bzMlMSPxNRICGpopgZejJJosTIRGCtjtLE1uxmrGeZSZEaGh5NzBH5Na9jp7ksMKNtQcL8O1R2bXYLBUKqBjv45QXJ86yoYBg96v4zr55JqzECjmhamedF4ZqWoe4runTJHcHzy60lb3aqmo6tVHJSoZEoKTjSoSdL5GShZ5ZdqhUPVcWrEzVdRXN9X3khTyXuooW+sm04BgjAyux+7TkMd4kWkaE/979AxXnQ1s0DN1UAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTAyLTExVDExOjUwOjA4LTA2OjAw1hBl+wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAwNi0wNS0wNVQxMzoyMjo0MC0wNTowML/k/hoAAAAASUVORK5CYII=")!important;background-position:6px 6px!important;background-repeat:no-repeat!important}#icibaSearchButton:hover{background-color:#fafafa!important}#icibaSearchButton:active{background-color:#e5e5e5!important;box-shadow:0 0 2px #888 inset!important}#icibaResultTextBox{margin:0!important;padding:10px!important;color:#222!important;text-align:left!important;font-size:14px!important;font-family:Arial,Helvetica,sans-serif!important;background:#fbfbfb!important}.icIBahyI-new_word{display:none!important}.icIBahyI-label_list>LABEL{display:inline!important}#icibaResultTextBox div,#icibaResultTextBox ul,#icibaResultTextBox li,#icibaResultTextBox p,#icibaResultTextBox form,#icibaResultTextBox input,#icibaResultTextBox label{margin:0!important;padding:0!important;font-weight:normal!important}#icibaResultTextBox input,#icibaResultTextBox button,#icibaResultTextBox textarea{font-weight:inherit!important;font-style:inherit!important;font-size:inherit!important;font-family:Arial,Helvetica,sans-serif!important}#icibaResultTextBox ul,#icibaResultTextBox li{list-style:none!important}#icibaResultTextBox a:focus{outline:none!important}#icibaResultTextBox img{border:0!important}#icibaResultTextBox strong{font-weight:100!important;font-family:"Segoe UI",Verdana,Lucida Sans Regular,Lucida Sans Unicode,Arial,sans-serif!important}#icibaResultTextBox .icIBahyI-dictbar{font-size:12px!important}#icibaResultTextBox .icIBahyI-register,#icibaResultTextBox .icIBahyI-right_bg,#icibaResultTextBox .icIBahyI-up,#icibaResultTextBox .icIBahyI-down{float:right!important}#icibaResultTextBox .icIBahyI-register{padding-left:25px!important}#icibaResultTextBox a.icIBahyI-text_black,#icibaResultTextBox .icIBahyI-nav_list strong{color:#333!important}#icibaResultTextBox a{color:#236fd4!important;text-decoration:underline!important}#icibaResultTextBox a:hover{color:#236fd4!important}#icibaResultTextBox .icIBahyI-handwrite,#icibaResultTextBox .icIBahyI-handwrite_over,#icibaResultTextBox .icIBahyI-drop_down{position:absolute!important;width:16px!important;height:16px!important;cursor:pointer!important}#icibaResultTextBox .icIBahyI-handwrite{top:14px!important;right:130px!important;background-position:0 -70px!important}#icibaResultTextBox .icIBahyI-handwrite_over{top:14px!important;right:130px!important;background-position:-18px -70px!important}#icibaResultTextBox #icIBahyI-dict_main{padding:0!important;text-align:left!important}#icibaResultTextBox .icIBahyI-dictbar{display:block!important;padding:0!important;height:auto!important;line-height:1.2!important}#icibaResultTextBox .icIBahyI-title{position:relative!important;padding:16px 17px 0 18px!important;color:#333!important;font-weight:bold!important;font-size:24px!important;font-family:arial,sans-serif!important;line-height:32px!important;word-break:break-all!important}#icibaResultTextBox .icIBahyI-dict_title{color:#333!important;font-weight:bold!important;font-family:arial,sans-serif!important}#icibaResultTextBox .icIBahyI-prons{display:block!important;padding:0!important;height:auto!important;white-space:normal!important;font-weight:700!important}#icibaResultTextBox .icIBahyI-dictbar .icIBahyI-fl{vertical-align:middle!important;line-height:normal!important}#icibaResultTextBox .icIBahyI-ico_sound{display:inline-block!important;overflow:hidden!important;margin:0!important;width:16px!important;height:16px!important;background:url("data:image/png!important;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACK0lEQVQ4jZWTQUuUURSGn3Pu/e6opM5kjYRUk2mZOWC0KqL8AS1cBBUUOf9Af4LbIJRo0yJs0V4hWhTUuC+SAslSclxESMM06cw4OvN9t8VUSgrZ2b8Pz3sOR7z3nLr6ZFpEh1F9LKpjH2euF9nnKICoGb505QKp7tSIdW6579r0yP8BjGW9XAfbTk9vX7ytPT7Vf+Nptv/ms8F9AgxhJHwv1Vgt1mnv6CJ55MSQdU1zZ289nxi4/SL+rwqEHkQVL8J6tUYNS2dXN4lDyVFjg+X0nZd71to28IKoIEYRo3iFSm2L5tZ2jp1MxVva2qbSmWw2nckO7gKghnoEYhQ1AkbZioSNOnxbr/O1GBLvTHK85+iQi7m5dCY7kR55Fd9RQQkjwYtQ2vSUqp4QRQOLa7YYZyhWIkp1S+9AioOH46OIjABYABFDedOzthFhnSFwBusMNjAYq4g0dJuadLumGv4AUKFa86hRbNAIBzHbAAWKc0oyEVBZq/B5cZVqpTr+/tHlyR0GShAI9VAxgWKdwcUMsWZLR8JxIAaLC3mKhfKsj3zm3cOLud9LbBgg2EBRIoxRrFXaWgOSHY5Cocqn+R85H4Zjb+8Pzvx9Rvsrj7WChoILlK5kDB+FfJjPs1ljXNROvr57es//aAC8x1hIxAISccuXlTzlSjgrxmbe3DuT2yu4C9ASEyqVMksLpZwYOzb34Pwu3b1GATx+dmUpR361MO7D8Nx+wwA/Ad9dudwSn5Q6AAAAAElFTkSuQmCC")!important;transition:.1s!important;vertical-align:middle!important}#icibaResultTextBox .icIBahyI-ico_sound:hover{opacity:.75!important}#icibaResultTextBox .icIBahyI-ico_sound:active{opacity:.9!important}#icibaResultTextBox .icIBahyI-eg,#icibaResultTextBox .icIBahyI-us{padding-top:0!important;font-family:"lucida sans unicode",arial!important;display:block!important}#icibaResultTextBox .icIBahyI-new_word{float:left!important;padding-top:2px!important}#icibaResultTextBox .icIBahyI-new_word a{display:block!important;padding:3px 10px 0 20px!important;width:35px!important;height:17px!important;background-position:-274px 0!important;color:#999!important;font-weight:100!important;font-family:"Microsoft Yahei"!important}#icibaResultTextBox .icIBahyI-new_word a.icIBahyI-new_word2{background-position:-274px -19px!important}#icibaResultTextBox .icIBahyI-usually,#icibaResultTextBox .icIBahyI-prons{color:#666!important;font-weight:100!important}#icibaResultTextBox .icIBahyI-simple{margin:5px 0 5px 0!important}#icibaResultTextBox .icIBahyI-group_prons{clear:both!important;margin:0!important}#icibaResultTextBox .icIBahyI-group_prons .icIBahyI-second{float:none!important;padding-top:0!important}#icibaResultTextBox .icIBahyI-group_prons .icIBahyI-second .icIBahyI-eg{height:24px!important}#icibaResultTextBox .icIBahyI-group_pos{clear:both!important;overflow:hidden!important;color:#222!important}#icibaResultTextBox .icIBahyI-group_pos p:not(:last-of-type){margin-bottom:5px!important}#icibaResultTextBox .icIBahyI-label_list{float:left!important;padding-bottom:9px!important;width:87%!important;text-align:left!important}#icibaResultTextBox .icIBahyI-cn .icIBahyI-group_pos{color:#333!important}#icibaResultTextBox .icIBahyI-group_pos strong{color:#8d8d8d!important}#icibaResultTextBox .icIBahyI-margin_top{padding-top:6px!important}#icibaResultTextBox .icIBahyI-part_list a,#icibaResultTextBox .icIBahyI-tab_list li a,#icibaResultTextBox .icIBahyI-new_word a,#icibaResultTextBox .icIBahyI-part_main h3 a{text-decoration:none!important}#icibaResultTextBox .icIBahyI-tab_list{display:none!important}#icibaResultTextBox .icIBahyI-title{padding:13px 10px 1px!important;font-size:14px!important}#icibaResultTextBox .icIBahyI-group_pos{font-size:14px!important}#icibaResultTextBox .icIBahyI-group_pos .icIBahyI-fl{padding:0 6px 0 0!important;color:#999!important}#icibaResultTextBox .icIBahyI-group_pos span{vertical-align:baseline!important;line-height:normal!important;float:none!important;display:inline!important;padding:0!important}#icibaResultTextBox .icIBahyI-synon{color:#333!important;line-height:28px!important}#icibaResultTextBox .icIBahyI-suggest,#icibaResultTextBox .icIBahyI-suggest2{padding:0 0 3px 0!important;color:#333!important;word-wrap:break-word!important;font-size:14px!important;line-height:22px!important}#icibaResultTextBox .icIBahyI-suggest ul{padding:7px 0 4px!important;line-height:155%!important}#icibaResultTextBox .icIBahyI-suggest li{padding-left:14px!important;background-position:-134px -304px!important}#icibaResultTextBox .icIBahyI-suggest p{line-height:250%!important}#icibaResultTextBox .icIBahyI-suggest .icIBahyI-pr a{padding-right:3px!important}#icibaResultTextBox .icIBahyI-suggest p.icIBahyI-pr{margin-top:3px!important;line-height:18px!important}#icibaResultTextBox .icIBahyI-suggest .icIBahyI-pr a{display:inline-block!important;padding-right:10px!important}#icibaResultTextBox .icIBahyI-footer{padding:0!important;width:auto!important;color:#999!important;text-align:right!important;font-size:12px!important;line-height:18px!important}#icibaResultTextBox .icIBahyI-footer a{padding:0 3px 0 0!important;background:none!important;color:#236fd4!important;text-decoration:none!important;font-size:12px!important;line-height:18px!important}#icibaResultTextBox .icIBahyI-footer a:hover{color:#236fd4!important}#icibaResultTextBox .icIBahyI-text_blue{color:#236fd4!important}#icibaResultTextBox .icIBahyI-list li{padding:0 15px!important}#icibaResultTextBox .icIBahyI-li_dt,.icIBahyI-li_dd{display:inline!important;line-height:24px!important}#icibaResultTextBox .icIBahyI-li_dt{padding-right:5px!important;color:#232323!important}#icibaResultTextBox .icIBahyI-li_dd{color:#777!important}#ICIBA_TOO_LONG{padding-top:10px!important;padding-left:10px!important;font-size:12px!important}');
	GM_registerMenuCommand("iciba翻译设置", this.openSetting);

	_this.loadSetting();
	_this.eventBinding();
}

/* ----------------function info-----------------
 * name: eventBinding
 * parameters: empty
 * return: void
 * 绑定事件
 * ---------------------------------------------- */
Iciba.prototype.eventBinding = function(){
	var _this = this;
	window.addEventListener("mouseup",function(e){
		_this.mouseClick(e,_this);
	},false);
	window.addEventListener("keydown",function(e){
		_this.keyDown(e,_this);
	},false);
}

/* ----------------function info-----------------
 * name: loadSetting
 * parameters: empty
 * return: void
 * 读取设置
 * ---------------------------------------------- */
Iciba.prototype.loadSetting = function(){
	// Ctrl键触发
	var _this = this;
	if(GM_getValue("ctrlKey_actived") == undefined){
		_this.ctrlKey_actived = 0;
	}else{
		_this.ctrlKey_actived = parseInt(GM_getValue("ctrlKey_actived"));
	}
	GM_setValue("ctrlKey_actived",_this.ctrlKey_actived);
}

/* ----------------function info-----------------
 * name: openSetting
 * parameters: empty
 * return: void
 * 设置对话框
 * ---------------------------------------------- */
Iciba.prototype.openSetting = function(){
	var _this = this;
	_this.ctrlKey_actived = confirm("按住ctrl键(当且仅当)开启翻译?")?1:0;
	GM_setValue("ctrlKey_actived",_this.ctrlKey_actived);
}

/* ----------------function info-----------------
 * name: isInsideOf
 * parameters: empty
 * return: boolean
 * 判断是否在内部
 * ---------------------------------------------- */
Iciba.prototype.isInsideOf = function(e,target){
	// when target is not exist
	if(!target){
		return false;
	}
	var e_target = e.target;
	while(e_target != target && e_target){
		e_target = e_target.parentNode;
	}
	if(e_target == target){
		return true;
	}else{
		return false;
	}
}

/* ----------------function info-----------------
 * name: showIcibaCirclePointer
 * parameters: mouseEvent
 * return: void
 * 显示并定位小圆点
 * ---------------------------------------------- */
Iciba.prototype.showIcibaCirclePointer = function(e){
	var _this = this;
	var mouseX = e.pageX;
	var mouseY = e.pageY;
	_this.createCirclePointer();
	_this.icibaCirclePointer.style.top = (mouseY + 8) + "px";
	_this.icibaCirclePointer.style.left = (mouseX + 2) + "px";
	_this.icibaCirclePointer.setAttribute("keyword",window.getSelection().toString().toLowerCase().trim());
}

/* ----------------function info-----------------
 * name: createCirclePointer
 * parameters: empty
 * return: void
 * 创建小圆点
 * ---------------------------------------------- */
Iciba.prototype.createCirclePointer = function(){
	var _this = this;
	_this.icibaCirclePointer = document.createElement("div");
	_this.icibaCirclePointer.id = "icibaCirclePointer";
	_this.icibaCirclePointer.style.position = "absolute";
	_this.icibaCirclePointer.addEventListener("click",function(e){
		_this.showContainer(e);
	},false);
	document.body.appendChild(_this.icibaCirclePointer);
}

/* ----------------function info-----------------
 * name: removeCirclePointer
 * parameters: empty
 * return: void
 * 去除小圆点
 * ---------------------------------------------- */
Iciba.prototype.removeCirclePointer = function(){
	var _this = this;
	if(_this.icibaCirclePointer){
		document.body.removeChild(_this.icibaCirclePointer);
	}
	var icibaCirclePointerList = document.getElementsByClassName('icibaCirclePointer');

	_this.icibaCirclePointer = null;
}

/* ----------------function info-----------------
 * name: showContainer
 * parameters: mouseEvent
 * return: void
 * 显示并定位查词框
 * ---------------------------------------------- */
Iciba.prototype.showContainer = function(e,_this){
	var _this = this;
	var word = _this.icibaCirclePointer.getAttribute("keyword");
	_this.removeCirclePointer();
	_this.createContainer();
	_this.containerSetPosition(e);
    _this.containerLoadData(word,function(){},function(){});

	// getData(word,e,bodyClientHeight,bodyClientWidth,windowInnerHeight,windowInnerWidth,htmlClientHeight,htmlClientWidth);
}

/* ----------------function info-----------------
 * name: createContainer
 * parameters: empty
 * return: void
 * 创建查词框
 * ---------------------------------------------- */
Iciba.prototype.createContainer = function(){
	var _this = this;

	_this.icibaResultContainer = document.createElement("div");
	_this.icibaResultContainer.id = "icibaResultContainer";
	_this.icibaResultContainer.style.position = "absolute";
	_this.icibaResultContainer.innerHTML = '\
	<div id="iciba_search_box">\
		<input id="icibaSearchInput" type="text" />\
		<input id="icibaSearchButton" type="button" />\
	</div>\
	<div id="icibaResultTextBox"></div>';

	document.body.appendChild(_this.icibaResultContainer);

	_this.icibaResultTextBox = document.getElementById("icibaResultTextBox");
	_this.icibaSearchInput = document.getElementById("icibaSearchInput");
	_this.icibaSearchButton = document.getElementById("icibaSearchButton");

	_this.icibaSearchInput.addEventListener("keypress",function(e){
		_this.searchFromInputBox(e,_this);
	},false);
	_this.icibaSearchButton.addEventListener("click",function(e){
		_this.searchFromInputBox(e,_this);
	},false);
}

/* ----------------function info-----------------
 * name: removeContainer
 * parameters: empty
 * return: void
 * 去除查词框
 * ---------------------------------------------- */
Iciba.prototype.removeContainer = function(){
	var _this = this;
	if(_this.icibaResultContainer){
		document.body.removeChild(_this.icibaResultContainer);
		_this.icibaResultContainer = null;
		_this.icibaResultTextBox = null;
		_this.icibaSearchInput = null;
		_this.icibaSearchButton = null;
	}
}

/* ----------------function info-----------------
 * name: containerSetPosition
 * parameters: empty
 * return: void
 * 定位查词框
 * ---------------------------------------------- */
Iciba.prototype.containerSetPosition = function(e){
	var _this = this;
	var bodyClientHeight = document.body.clientHeight;
	var bodyClientWidth = document.body.clientWidth;
	var htmlClientHeight = document.documentElement.clientHeight;
	var htmlClientWidth = document.documentElement.clientWidth;
	var windowInnerHeight = window.innerHeight;
	var windowInnerWidth = window.innerWidth;
	var bodyPosition = document.defaultView.getComputedStyle(document.body)["position"];
	var htmlPosition = document.defaultView.getComputedStyle(document.documentElement)["position"];

	if(bodyPosition != "static"){
		if(bodyClientWidth - e.clientX < 300){
			_this.icibaResultContainer.style.left = "auto";
			_this.icibaResultContainer.style.right = bodyClientWidth - e.pageX + "px";
		}else{
			_this.icibaResultContainer.style.left = e.pageX + "px";
			_this.icibaResultContainer.style.right = "auto";
		}
		if(bodyClientHeight - e.clientY < 200){
			_this.icibaResultContainer.style.top = "auto";
			_this.icibaResultContainer.style.bottom = bodyClientHeight - e.pageY + "px";
		}else{
			_this.icibaResultContainer.style.top = e.pageY + "px";
			_this.icibaResultContainer.style.bottom = "auto";
		}
	}else if(htmlPosition != "static"){
		if(windowInnerWidth - e.clientX < 300){
			_this.icibaResultContainer.style.left = "auto";
			_this.icibaResultContainer.style.right = htmlClientWidth - e.pageX + "px";
		}else{
			_this.icibaResultContainer.style.left = e.pageX + "px";
			_this.icibaResultContainer.style.right = "auto";
		}
		if(windowInnerHeight - e.clientY < 200){
			_this.icibaResultContainer.style.top = "auto";
			_this.icibaResultContainer.style.bottom = htmlClientHeight - e.pageY + "px";
		}else{
			_this.icibaResultContainer.style.top = e.pageY + "px";
			_this.icibaResultContainer.style.bottom = "auto";
		}
	}else{
		if(windowInnerWidth - e.clientX < 300){
			_this.icibaResultContainer.style.left = "auto";
			_this.icibaResultContainer.style.right = windowInnerWidth - e.pageX + "px";
		}else{
			_this.icibaResultContainer.style.left = e.pageX + "px";
			_this.icibaResultContainer.style.right = "auto";
		}
		if(windowInnerHeight - e.clientY < 200){
			_this.icibaResultContainer.style.top = "auto";
			_this.icibaResultContainer.style.bottom = windowInnerHeight - e.pageY + "px";
		}else{
			_this.icibaResultContainer.style.top = e.pageY + "px";
			_this.icibaResultContainer.style.bottom = "auto";
		}
	}
}

/* ----------------function info-----------------
 * name: containerLoadData
 * parameters: word,rs,rj
 * return: void
 * 获取数据查词
 * ---------------------------------------------- */



Iciba.prototype.containerLoadData = function(word,rs,rj){
	var _this = this;
	_this.icibaResultTextBox.innerHTML = "Loading......";
	_this.icibaSearchInput.value = word;
	GM_xmlhttpRequest({
		method:"GET",
		referer:"http://www.iciba.com/",
		url:"http://open.iciba.com/huaci/dict.php?word=" + word,
		timeout:20000,
		ontimeout:function(){
			rj('timeout');
			_this.icibaResultTextBox.innerHTML = '网络超时!'
		},
		onerror:function(){
			rj('error');
			_this.icibaResultTextBox.innerHTML = '网络错误!'
		},
		onload:function(response){
			if(response.status != 200){
				rj(response.status);
				_this.icibaResultTextBox.innerHTML = '网络错误!'
			}
			var text = response.responseText.replace(/\\/g,"");
			text = text.match(/dict\.innerHTML=\'(.*)\'/)[1];
			text = text.replace(/icIBahyI-"ico_sound"/g,'"icIBahyI-ico_sound"');
			_this.icibaResultTextBox.innerHTML = text;
			var playbtn = document.querySelectorAll(".icIBahyI-ico_sound");
			if(playbtn.length != 0){
				for(var i = 0;i < playbtn.length;i++){
					playbtn[i].setAttribute("mp3",playbtn[i].getAttribute("onclick").match(/asplay_hanci\('(.*)'\)/)[1]);
					playbtn[i].removeAttribute("onclick");
					playbtn[i].addEventListener("click",_this.playSound,false);
				}
			}
			rs('success');
		}
	});
}

/* ----------------function info-----------------
 * name: conflictsResolve
 * parameters: empty
 * return: void
 * 不同网站的冲突解决
 * ---------------------------------------------- */
Iciba.prototype.conflictsResolve = function(){
	if(window.location.href.indexOf("http://tieba.baidu.com/photo/p?kw=") == 1){
		GM_addStyle('.af_container{position:relative;}');
	}
}

/* ----------------function info-----------------
 * name: mouseClick
 * parameters: empty
 * return: mousedown 事件处理函数
 *
 * ---------------------------------------------- */
Iciba.prototype.mouseClick = function(e,_this){
	// console.log('pageX:' + e.pageX + ',pageY:' + e.pageY + ',clientX:' + e.clientX + ',clientY:' + e.clientY)
	// ignore when click on icibaCirclePointer

	if(e.target == _this.icibaCirclePointer){
		return;
	}

	if(e.button != 0){
		return;
	}

	// ignore when click insideof icibaResultContainer
	if(_this.isInsideOf(e,_this.icibaResultContainer)){
		return;
	}

	// Ctrl键触发
	if(_this.ctrlKey_actived){
		if(!(e.ctrlKey == true && e.shiftKey == false && e.altKey == false)){
			_this.removeCirclePointer();
			_this.removeContainer();
			return;
		}
	}

	// remove all things
	if(_this.icibaResultContainer){
		_this.removeContainer();
	}
	if(_this.icibaCirclePointer){
		_this.removeCirclePointer();
	}

	// 显示iciba_icon
	if(window.getSelection().toString().length >= 150){
		return; // ignore when selection is too loing
	}

	if(window.getSelection().toString().length != 0){
		_this.showIcibaCirclePointer(e);
		return;
	}

	// 去除iciba_icon
	if(window.getSelection().toString().length == 0){
		_this.removeCirclePointer();
	}

	return;
}

/* ----------------function info-----------------
 * name: keyDown
 * parameters: empty
 * return: keydown 事件处理函数
 *
 * ---------------------------------------------- */
Iciba.prototype.keyDown = function(e,_this){
	if(e.key === "Control" && e.keyCode === 17){
		_this.removeCirclePointer();
	}
}

/* ----------------function info-----------------
 * name: searchFromInputBox
 * parameters: empty
 * return: void
 * 查词框取词事件
 * ---------------------------------------------- */
Iciba.prototype.searchFromInputBox = function(e,_this){
	if(e.target == icibaSearchInput){
		if(e.keyCode != 13){
			return;
		}
	}
	var keyword = icibaSearchInput.value;
	_this.containerLoadData(keyword);
}

/* ----------------function info-----------------
 * name: playSound
 * parameters: empty
 * return: void
 * 发声
 * ---------------------------------------------- */
Iciba.prototype.playSound = function(e){
	console.log(e)
	var audio = document.createElement('audio');
	var source = document.createElement('source');
	source.type = "audio/mpeg";
	source.src = e.target.getAttribute("mp3");
	source.autoplay = "autoplay";
	source.controls = "controls";
	audio.appendChild(source);
	audio.play();
}

{
	let iciba = new Iciba();
}