Greasy Fork is available in English.

你能不能好好说话CHH版

区号划词查询地区

// ==UserScript==
// @name         你能不能好好说话CHH版
// @version      1.0
// @description  区号划词查询地区
// @author       liansishen
// @match        *://www.chiphell.com/*
// @require      https://cdn.bootcss.com/vue/2.6.11/vue.min.js
// @grant        none
// @license      MPL-2.0
// @namespace https://greasyfork.org/users/869050
// ==/UserScript==

let Nbnhhsh = ((htmlText,cssText)=>{
  const AreaCode = ["010","022","0311","0315","0335","0310","0319","0312","0313","0314","0317","0316","0318","0351","0352","0353","0355","0356","0349","0354","0359","0350","0357","0358","0471","0472","0473","0476","0475","0477","0470","0478","0474","0482","0479","0483","024","0411","0412","0415","0416","0417","0418","0419","0427","0421","0429","0431","0432","0434","0437","0435","0439","0438","0436","0433","0451","0452","0467","0468","0469","0459","0458","0454","0464","0453","0456","0455","0457","021","025","0510","0516","0519","0512","0513","0518","0517","0515","0514","0511","0523","0527","0571","0574","0577","0573","0572","0575","0579","0570","0580","0576","0578","0551","0553","0552","0554","0555","0561","0562","0556","0559","0550","0558","0557","0564","0566","0563","0591","0592","0594","0598","0595","0596","0599","0597","0593","0791","0798","0799","0792","0790","0701","0797","0796","0795","0794","0793","0531","0532","0533","0632","0546","0535","0536","0537","0538","0631","0633","0539","0534","0635","0543","0530","0371","0379","0375","0372","0392","0373","0391","0393","0374","0395","0398","0377","0370","0376","0394","0396","027","0714","0719","0717","0710","0711","0724","0712","0716","0713","0715","0722","0718","0731","0734","0739","0730","0736","0744","0737","0735","0746","0745","0738","0743","020","0751","0755","0756","0754","0757","0750","0759","0668","0758","0752","0753","0660","0762","0662","0763","0769","0760","0768","0663","0766","0771","0772","0773","0774","0779","0770","0777","0775","0776","0778","0898","023","028","0813","0812","0830","0838","0816","0839","0825","0832","0833","0817","0831","0826","0818","0835","0827","0837","0836","0834","0851","0858","0852","0853","0857","0856","0859","0855","0854","0871","0874","0877","0875","0870","0888","0879","0883","0878","0873","0876","0691","0872","0692","0886","0887","0891","0892","0895","0894","0893","0896","0897","029","0919","0917","0913","0911","0916","0912","0915","0914","0931","0937","0935","0943","0938","0936","0933","0934","0932","0939","0930","0941","0971","0972","0970","0973","0974","0975","0976","0951","0952","0953","0954","0955","0991","0990","0995","0902","0997","0998","0903","0994","0909","0996","0908","0999","0901","0906"];
  const AreaName = ["北京市","天津市","河北省石家庄市","河北省唐山市","河北省秦皇岛市","河北省邯郸市","河北省邢台市","河北省保定市","河北省张家口市","河北省承德市","河北省沧州市","河北省廊坊市","河北省衡水市","山西省太原市","山西省大同市","山西省阳泉市","山西省长治市","山西省晋城市","山西省朔州市","山西省晋中市","山西省运城市","山西省忻州市","山西省临汾市","山西省吕梁市","内蒙古自治区呼和浩特市","内蒙古自治区包头市","内蒙古自治区乌海市","内蒙古自治区赤峰市","内蒙古自治区通辽市","内蒙古自治区鄂尔多斯市","内蒙古自治区呼伦贝尔市","内蒙古自治区巴彦淖尔市","内蒙古自治区乌兰察布市","内蒙古自治区兴安盟","内蒙古自治区锡林郭勒盟","内蒙古自治区阿拉善盟","辽宁省沈阳市 抚顺市 本溪市 铁岭市","辽宁省大连市","辽宁省鞍山市","辽宁省丹东市","辽宁省锦州市","辽宁省营口市","辽宁省阜新市","辽宁省辽阳市","辽宁省盘锦市","辽宁省朝阳市","辽宁省葫芦岛市","吉林省长春市","吉林省吉林市","吉林省四平市","吉林省辽源市","吉林省通化市","吉林省白山市","吉林省松原市","吉林省白城市","吉林省延边朝鲜族自治州","黑龙江省哈尔滨市","黑龙江省齐齐哈尔市","黑龙江省鸡西市","黑龙江省鹤岗市","黑龙江省双鸭山市","黑龙江省大庆市","黑龙江省伊春市","黑龙江省佳木斯市","黑龙江省七台河市","黑龙江省牡丹江市","黑龙江省黑河市","黑龙江省绥化市","黑龙江省大兴安岭地区","上海市","江苏省南京市","江苏省无锡市","江苏省徐州市","江苏省常州市","江苏省苏州市","江苏省南通市","江苏省连云港市","江苏省淮安市","江苏省盐城市","江苏省扬州市","江苏省镇江市","江苏省泰州市","江苏省宿迁市","浙江省杭州市","浙江省宁波市","浙江省温州市","浙江省嘉兴市","浙江省湖州市","浙江省绍兴市","浙江省金华市","浙江省衢州市","浙江省舟山市","浙江省台州市","浙江省丽水市","安徽省合肥市","安徽省芜湖市","安徽省蚌埠市","安徽省淮南市","安徽省马鞍山市","安徽省淮北市","安徽省铜陵市","安徽省安庆市","安徽省黄山市","安徽省滁州市","安徽省阜阳市 亳州市","安徽省宿州市","安徽省六安市","安徽省池州市","安徽省宣城市","福建省福州市","福建省厦门市","福建省莆田市","福建省三明市","福建省泉州市","福建省漳州市","福建省南平市","福建省龙岩市","福建省宁德市","江西省南昌市","江西省景德镇市","江西省萍乡市","江西省九江市","江西省新余市","江西省鹰潭市","江西省赣州市","江西省吉安市","江西省宜春市","江西省抚州市","江西省上饶市","山东省济南市","山东省青岛市","山东省淄博市","山东省枣庄市","山东省东营市","山东省烟台市","山东省潍坊市","山东省济宁市","山东省泰安市","山东省威海市","山东省日照市","山东省临沂市","山东省德州市","山东省聊城市","山东省滨州市","山东省菏泽市","河南省郑州市 开封市","河南省洛阳市","河南省平顶山市","河南省安阳市","河南省鹤壁市","河南省新乡市","河南省焦作市","河南省濮阳市","河南省许昌市","河南省漯河市","河南省三门峡市","河南省南阳市","河南省商丘市","河南省信阳市","河南省周口市","河南省驻马店市","湖北省武汉市","湖北省黄石市","湖北省十堰市","湖北省宜昌市","湖北省襄阳市","湖北省鄂州市","湖北省荆门市","湖北省孝感市","湖北省荆州市","湖北省黄冈市","湖北省咸宁市","湖北省随州市","湖北省恩施土家族苗族自治州","湖南省长沙市 株洲市 湘潭市","湖南省衡阳市","湖南省邵阳市","湖南省岳阳市","湖南省常德市","湖南省张家界市","湖南省益阳市","湖南省郴州市","湖南省永州市","湖南省怀化市","湖南省娄底市","湖南省湘西土家族苗族自治州","广东省广州市","广东省韶关市","广东省深圳市","广东省珠海市","广东省汕头市","广东省佛山市","广东省江门市","广东省湛江市","广东省茂名市","广东省肇庆市","广东省惠州市","广东省梅州市","广东省汕尾市","广东省河源市","广东省阳江市","广东省清远市","广东省东莞市","广东省中山市","广东省潮州市","广东省揭阳市","广东省云浮市","广西壮族自治区南宁市 崇左市","广西壮族自治区柳州市 来宾市","广西壮族自治区桂林市","广西壮族自治区梧州市 贺州市","广西壮族自治区北海市","广西壮族自治区防城港市","广西壮族自治区钦州市","广西壮族自治区贵港市 玉林市","广西壮族自治区百色市","广西壮族自治区河池市","海南省","重庆市","四川省成都市 眉山市 资阳市","四川省自贡市","四川省攀枝花市","四川省泸州市","四川省德阳市","四川省绵阳市","四川省广元市","四川省遂宁市","四川省内江市","四川省乐山市","四川省南充市","四川省宜宾市","四川省广安市","四川省达州市","四川省雅安市","四川省巴中市","四川省阿坝藏族羌族自治州","四川省甘孜藏族自治州","四川省凉山彝族自治州","贵州省贵阳市","贵州省六盘水市","贵州省遵义市","贵州省安顺市","贵州省毕节市","贵州省铜仁市","贵州省黔西南布依族苗族自治州","贵州省黔东南苗族侗族自治州","贵州省黔南布依族苗族自治州","云南省昆明市","云南省曲靖市","云南省玉溪市","云南省保山市","云南省昭通市","云南省丽江市","云南省普洱市","云南省临沧市","云南省楚雄彝族自治州","云南省红河哈尼族彝族自治州","云南省文山壮族苗族自治州","云南省西双版纳傣族自治州","云南省大理白族自治州","云南省德宏傣族景颇族自治州","云南省怒江傈僳族自治州","云南省迪庆藏族自治州","西藏自治区拉萨市","西藏自治区日喀则市","西藏自治区昌都市","西藏自治区林芝市","西藏自治区山南市","西藏自治区那曲市","西藏自治区阿里地区","陕西省西安市 咸阳市","陕西省铜川市","陕西省宝鸡市","陕西省渭南市","陕西省延安市","陕西省汉中市","陕西省榆林市","陕西省安康市","陕西省商洛市","甘肃省兰州市","甘肃省嘉峪关市 酒泉市","甘肃省金昌市 武威市","甘肃省白银市","甘肃省天水市","甘肃省张掖市","甘肃省平凉市","甘肃省庆阳市","甘肃省定西市","甘肃省陇南市","甘肃省临夏回族自治州","甘肃省甘南藏族自治州","青海省西宁市","青海省海东市","青海省海北藏族自治州","青海省黄南藏族自治州","青海省海南藏族自治州","青海省果洛藏族自治州","青海省玉树藏族自治州","宁夏回族自治区银川市","宁夏回族自治区石嘴山市","宁夏回族自治区吴忠市","宁夏回族自治区固原市","宁夏回族自治区中卫市","新疆维吾尔自治区乌鲁木齐市","新疆维吾尔自治区克拉玛依市","新疆维吾尔自治区吐鲁番市","新疆维吾尔自治区哈密市","新疆维吾尔自治区阿克苏地区","新疆维吾尔自治区喀什地区","新疆维吾尔自治区和田地区","新疆维吾尔自治区昌吉回族自治州","新疆维吾尔自治区博尔塔拉蒙古自治州","新疆维吾尔自治区巴音郭楞蒙古自治州","新疆维吾尔自治区克孜勒苏柯尔克孜自治州","新疆维吾尔自治区伊犁哈萨克自治州","新疆维吾尔自治区塔城地区","新疆维吾尔自治区阿勒泰地区"];

  
	const getCity = (text,onOver)=>{
    let type = 0;
    if (/0[1-9][0-9][0-9]?/i.test(text)) {
		  text = text.match(/0[1-9][0-9][0-9]?/ig).join(',');
    } else {
      text = text.match(/[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}/ig).join(',');
      type = 1;
    }
    
    if (type == 0) {
      //区号
      let index = AreaCode.indexOf(text);
      let value = null;
      if (index >= 0) {
        value = AreaName[index]
      }
      let data = {"name":text,"value":value};
      return onOver(data);
    } else {
      //车牌
    }
    
	};


	const getSelectionText = ()=>{
		let text = getSelection().toString().trim();

    if (!!text && (/^0[1-9][0-9][0-9]?$/i.test(text) || /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}$/i.test(text))) {
      return text;
    }
		else{
			return null;
		}
	};

	const fixPosition = ()=>{
		let rect = getSelection().getRangeAt(0).getBoundingClientRect();

		let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

		let top  = Math.floor( scrollTop + rect.top +rect.height );
		let left = Math.floor( rect.left );

		if(top === 0 && left === 0){
			app.show = false;
		}
		app.top = top;
		app.left = left;

	};

	const timer = ()=>{
		if(getSelectionText()){
			setTimeout(timer,300);
		}else{
			app.show = false;
		}
	};

	const nbnhhsh = ()=>{
		let text = getSelectionText();

		app.show = !!text;

		if(!app.show){
			return;
		}

		fixPosition();

		getCity(text,data=>{
				app.tag = data;
		});

		setTimeout(timer,300);
	};

	const _nbnhhsh = ()=>{
		setTimeout(nbnhhsh,1);
	};

	document.body.addEventListener('mouseup',_nbnhhsh);
	document.body.addEventListener('keyup',_nbnhhsh);

	const createEl = (html)=>{
		createEl._el.innerHTML = html;
		let el = createEl._el.children[0];
		document.body.appendChild(el);
		return el;
	};
	createEl._el = document.createElement('div');


	createEl(`<style>${cssText}</style>`);

	const el = createEl(htmlText);

	const app = new Vue({
		el,
		data: {
			tag:null,
			show:false,
			loading:false,
			top:0,
			left:0,
		},
	});

	return {
		getCity,
	}
})(`
<div class="nbnhhsh-box nbnhhsh-box-pop" v-if="show" :style="{top:top+'px',left:left+'px'}" @mousedown.prevent>
	<div class="nbnhhsh-tag-list">
		<div class="nbnhhsh-tag-item">
			<h4>{{tag.name}}</h4>
			<div class="nbnhhsh-tran-list" v-if="tag.value!==null">
				<span class="nbnhhsh-tran-item">
					{{tag.value}}
				</span>
			</div>
			<div class="nbnhhsh-notran-box" v-else-if="tag.value===null">
				无对应城市
			</div>
		</div>
	</div>
</div>
`, `
.nbnhhsh-box{
	font:400 14px/1.4 sans-serif;
}
.nbnhhsh-box-pop{
	position: absolute;
	z-index:99999999999;
	width: 340px;
	background:#FFF;
	box-shadow: 0 3px 30px -4px rgba(0,0,0,.3);
	margin: 10px 0 100px 0;
}
.nbnhhsh-box-pop::before{
	content: '';
	position: absolute;
	top:-7px;
	left:8px;
	width: 0;
	height: 0;
	border:7px solid transparent;

	border-top:1px;
	border-bottom-color:#FFF;
}
.nbnhhsh-box sub{
    vertical-align: middle;
    
    background: rgba(0,0,0,.07);
    color: #777;
    font-size: 12px;
    line-height:16px;
    display: inline-block;
    padding: 0 3px;
    margin:-2px 0 0 2px;
    border-radius: 2px;
    letter-spacing: -0.6px;
    bottom:0;
}
.nbnhhsh-tag-list{
	/*padding:4px 0;*/
}
.nbnhhsh-tag-item{
	padding:4px 14px;
	position: relative;
}
.nbnhhsh-tag-item:nth-child(even){
	background: rgba(0, 99, 255, 0.06);
}
.nbnhhsh-tag-item h4{
	font-weight:bold;
	font-size:20px;
	line-height:28px;
    letter-spacing: 1.5px;
	margin:0;
}
.nbnhhsh-tran-list{
	color:#444;
	padding:4px 0;
	line-height:18px;
}
.nbnhhsh-tran-item{
    display: inline-block;
    padding: 2px 15px 2px 0;
}

.nbnhhsh-inputting-list{
	color:#222;
	padding:4px 0;
}
.nbnhhsh-inputting-list h5{
	font-size:12px;
	line-height:24px;
	color:#999;
	margin:0;
}
.nbnhhsh-inputting-item{
	margin-right:14px;
	display:inline-block;
}
.nbnhhsh-notran-box{
	padding:4px 0;
	color:#999;
	cursor: pointer;
}
.nbnhhsh-add-btn{
	position: absolute;
	top:0;
	right:0;
	width: 30px;
	line-height: 30px;
	text-align: center;
	color: #0059ff;
	font-size: 16px;
	font-weight: bold;
	cursor: pointer;
}
.nbnhhsh-add-btn:after{
	content: '+';
}
.nbnhhsh-loading{
	text-align: center;
	color:#999;
	padding:20px 0;
}
`);