IT之家新闻生成UBB代码

快速将本页IT之家新闻生成Discuz! X论坛用UBB代码

  1. // ==UserScript==
  2. // @name IT之家新闻生成UBB代码
  3. // @namespace http://www.mapaler.com/
  4. // @description 快速将本页IT之家新闻生成Discuz! X论坛用UBB代码
  5. // @include http://www.ithome.com/html/*.htm*
  6. // @version 1.03
  7. // @grant none
  8. // ==/UserScript==
  9.  
  10. (function() {
  11. var runButton = document.createElement("a");
  12. runButton.id = "build-ubb"
  13. runButton.type = "button";
  14. runButton.className = "app";
  15. runButton.innerHTML = "UBB代码";
  16. runButton.href = "javascript:;";
  17. runButton.onclick = function(){buildUBB();}
  18. var buttonParent = document.getElementById("side_func");
  19. buttonParent.appendChild(runButton);
  20. //开始构建工作
  21. function buildUBB()
  22. {
  23. buildWindow();
  24. buildCode();
  25. }
  26. //构建输出窗口
  27. function buildWindow()
  28. {
  29. var main,con,txt,cls;
  30. if(document.getElementById("dzx-ubb")){
  31. return false;
  32. }
  33. if(!window.FormData){
  34. return false;
  35. }
  36. con = document.createElement('div');
  37. con.style.cssText = [
  38. ''
  39. ,'width:180px'
  40. ,''
  41. ].join(';');
  42. var txt = document.createElement('textarea');
  43. txt.id = 'ubb-code';
  44. txt.className = 'ubb-code';
  45. txt.style.cssText = [
  46. ''
  47. ,'width:180px'
  48. ,'height:180px'
  49. ,''
  50. ].join(';');
  51. con.appendChild(txt);
  52. cls = document.createElement('div');
  53. cls.innerHTML = '关闭';
  54. cls.style.cssText = [
  55. ''
  56. ,'width:40px'
  57. ,'box-shadow:0 0 2px #333'
  58. ,'position:absolute'
  59. ,'top:0'
  60. ,'left:-40px'
  61. ,'line-height:25px'
  62. ,'padding:0'
  63. ,'margin:0'
  64. ,'border-radius:0'
  65. ,'border:none'
  66. ,'background:#515151'
  67. ,'z-index:99999'
  68. ,'text-align:center'
  69. ,'color:#aaa'
  70. ,'cursor:pointer'
  71. ,''
  72. ].join(';');
  73. cls.onclick = function(){main.parentNode && document.body.removeChild(main);}
  74. main = document.createElement('div');
  75. main.id = "dzx-ubb";
  76. main.style.cssText = [
  77. ''
  78. ,'box-shadow:0 0 10px #333'
  79. ,'position:fixed'
  80. ,'top:0'
  81. ,'right:0'
  82. ,'z-index:1000000'
  83. ,'font-family:arial,sans-serif'
  84. ,'padding:5px'
  85. ,'margin:0'
  86. ,'border-radius: 0 0 0 5px'
  87. ,'background:#F5F8FA'
  88. ,''
  89. ].join(';');
  90. main.appendChild(cls);
  91. main.appendChild(con);
  92. document.body.appendChild(main);
  93. return true;
  94. }
  95. //构建页面代码
  96. function buildCode()
  97. {
  98. var outTextarea = document.getElementById("ubb-code");
  99. var ubb='';
  100. ubb += toubbcode(document);
  101. ubb += '\r\n[hr]▲原文地址:[url]'+document.URL+'[/url]';
  102. outTextarea.value = ubb;
  103. }
  104. //将一个页面转换为UBB代码
  105. function toubbcode(doc){
  106. var ubb='';
  107. /* var pt_info = document.getElementsByClassName("pt_info")[0].cloneNode(true);
  108. pt_info.removeChild(pt_info.getElementById("hitcount")); //去除人气
  109. pt_info.removeChild(pt_info.getElementsByClassName("pti_comm")[0]); //去除评论
  110. */
  111. var title = document.getElementsByClassName("post_title")[0].getElementsByTagName("h1")[0];
  112. var postdate = document.getElementById("pubtime_baidu");
  113. var newssource = document.getElementById("source_baidu");
  114. var newsauthor = document.getElementById("author_baidu");
  115. var newseditor = document.getElementById("editor_baidu");
  116. ubb += '[align=center]';
  117. ubb += '[size=19.8pt][color=#272a30]';
  118. ubb += domMakeUBB(title);
  119. ubb += '[/color][/size]\r\n';
  120. ubb += '[size=9pt][color=#888888]';
  121. ubb += domMakeUBB(postdate) + " ";
  122. ubb += domMakeUBB(newssource) + " ";
  123. ubb += domMakeUBB(newsauthor) + " ";
  124. ubb += domMakeUBB(newseditor) + " ";
  125. ubb += '[/color][/size]';
  126. ubb += '[/align]';
  127. ubb += '\r\n';
  128. var paragraph = document.getElementById("paragraph");
  129. ubb += domMakeUBB(paragraph);
  130. return ubb;
  131. }
  132. //将一个DOM转换为UBB代码
  133. function domMakeUBB(dom){
  134. var domc = dom.cloneNode(true);
  135. var ubb = '';
  136. //删除所有script
  137. var atp = domc.getElementsByTagName("script");
  138. for (var dmi=atp.length-1;dmi>=0;dmi--){
  139. atp[dmi].parentNode.removeChild(atp[dmi]);
  140. }
  141. //对链接进行转换
  142. var atp = domc.getElementsByTagName("a");
  143. for (var dmi=atp.length-1;dmi>=0;dmi--){
  144. if(atp[dmi].innerHTML=="") //没有内容的链接
  145. atp[dmi].parentNode.removeChild(atp[dmi]);
  146. else if (atp[dmi].href == "") //没有链接的链接
  147. atp[dmi].outerHTML = atp[dmi].innerHTML;
  148. else if (atp[dmi].href.replace(document.URL,"").indexOf('#') == 0) //当前页面跳转链接
  149. atp[dmi].outerHTML = atp[dmi].innerHTML;
  150. else if (isAutoURL(atp[dmi])) //自动生成的链接
  151. atp[dmi].outerHTML = atp[dmi].innerHTML;
  152. else
  153. atp[dmi].outerHTML = '[url='+atp[dmi].href+']'+atp[dmi].innerHTML+'[/url]';
  154. }
  155. //对换行进行转换
  156. var atp = domc.getElementsByTagName("br");
  157. for (var dmi=atp.length-1;dmi>=0;dmi--){
  158. atp[dmi].outerHTML = '\r\n';
  159. }
  160. //对水平分隔符进行转换
  161. var atp = domc.getElementsByTagName("hr");
  162. for (var dmi=atp.length-1;dmi>=0;dmi--){
  163. atp[dmi].outerHTML = '[hr]';
  164. }
  165. //对图片进行转换
  166. var atp = domc.getElementsByTagName("img");
  167. for (var dmi=atp.length-1;dmi>=0;dmi--){
  168. if(atp[dmi].className=="lazy"){
  169. atp[dmi].src = atp[dmi].getAttribute("data-original");
  170. }
  171. if(atp[dmi].width==0 || atp[dmi].height==0){
  172. atp[dmi].outerHTML = '[img]'+atp[dmi].src+'[/img]';
  173. }else{
  174. atp[dmi].outerHTML = '[img='+ atp[dmi].width +','+atp[dmi].height+']'+atp[dmi].src+'[/img]';
  175. }
  176. }
  177. //对Flash进行转换
  178. var atp = domc.getElementsByTagName("embed");
  179. for (var dmi=atp.length-1;dmi>=0;dmi--){
  180. if(atp[dmi].width==0 || atp[dmi].height==0){
  181. atp[dmi].outerHTML = '[Flash]'+atp[dmi].src + '?'+ atp[dmi].getAttribute("flashvars") +'&fn=a.swf[/Flash]';
  182. }else{
  183. atp[dmi].outerHTML = '[Flash='+ atp[dmi].width +','+atp[dmi].height+']'+atp[dmi].src + '?'+ atp[dmi].getAttribute("flashvars") +'&fn=a.swf[/Flash]';
  184. }
  185. }
  186. //对段落进行转换
  187. var atp = domc.getElementsByTagName("p");
  188. for (var dmi=atp.length-1;dmi>=0;dmi--){
  189. if(atp[dmi].className == "weixin"){ //去除微信推广
  190. atp[dmi].parentNode.removeChild(atp[dmi]);
  191. continue;
  192. }
  193. if (atp[dmi].style.textAlign)
  194. atp[dmi].outerHTML = '[p=30, 2, '+atp[dmi].style.textAlign+']'+atp[dmi].innerHTML+'[/p]';
  195. else
  196. atp[dmi].outerHTML = '[p=30, 2, left]'+atp[dmi].innerHTML+'[/p]';
  197. }
  198. //对div进行转换
  199. var atp = domc.getElementsByTagName("div");
  200. for (var dmi=atp.length-1;dmi>=0;dmi--){
  201. if(atp[dmi].className == "wximg"){ //去除微信推广
  202. atp[dmi].parentNode.removeChild(atp[dmi]);
  203. continue;
  204. }
  205. if (atp[dmi].style.textAlign)
  206. atp[dmi].outerHTML = '[p=30, 2, '+atp[dmi].style.textAlign+']'+atp[dmi].innerHTML+'[/p]';
  207. else
  208. atp[dmi].outerHTML = '[p=30, 2, left]'+atp[dmi].innerHTML+'[/p]';
  209. }
  210. //对粗体进行转换
  211. var atp = domc.getElementsByTagName("strong");
  212. for (var dmi=atp.length-1;dmi>=0;dmi--){
  213. atp[dmi].outerHTML = '[b]'+atp[dmi].innerHTML+'[/b]';
  214. }
  215. //对下划线进行转换
  216. var atp = domc.getElementsByTagName("u");
  217. for (var dmi=atp.length-1;dmi>=0;dmi--){
  218. atp[dmi].outerHTML = '[u]'+atp[dmi].innerHTML+'[/u]';
  219. }
  220. //对斜体进行转换
  221. var atp = dom.getElementsByTagName("em");
  222. for (var dmi=atp.length-1;dmi>=0;dmi--){
  223. atp[dmi].outerHTML = '[i]'+atp[dmi].innerHTML+'[/i]';
  224. }
  225. //对颜色进行转换
  226. var atp = domc.getElementsByTagName("span");
  227. for (var dmi=atp.length-1;dmi>=0;dmi--){
  228. if (atp[dmi].style.color)
  229. atp[dmi].outerHTML = '[color='+changeRgbToHex(atp[dmi].style.color)+']'+atp[dmi].innerHTML+'[/color]';
  230. else if (atp[dmi].style.textDecoration == "underline")
  231. atp[dmi].outerHTML = '[u]'+atp[dmi].innerHTML+'[/u]';
  232. }
  233. ubb += domc.textContent;
  234. ubb = ubb.replace(/^\s*(.+?)\s*$/gim,"$1"); //去除两段多余空格
  235. return ubb;
  236. }
  237. //颜色rgb代码转换为16进制代码
  238. function changeRgbToHex(str)
  239. {
  240. var reg = /rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/igm;
  241. var re = reg.exec(str);
  242. if(re)
  243. {
  244. return "#"
  245. +upTo2Hex(parseInt(re[1]).toString(16))
  246. +upTo2Hex(parseInt(re[2]).toString(16))
  247. +upTo2Hex(parseInt(re[3]).toString(16))
  248. ;
  249. }
  250. else
  251. {
  252. return str;
  253. }
  254. }
  255. //16进制提升到2位
  256. function upTo2Hex(str)
  257. {
  258. if (str.length < 2) str = "0" + str;
  259. return str;
  260. }
  261. //判断是否是自动生成的无意义链接
  262. function isAutoURL(adom)
  263. {
  264. var objReg = /http:\/\/www.ithome.com\/tags\/.*/gi;
  265. if (objReg.test(adom.href))return true;
  266. if(adom.innerHTML == '软媒' && adom.href == 'http://www.ruanmei.com/') return true;
  267. if(adom.innerHTML == 'IT之家' && adom.href == 'http://www.ithome.com/') return true;
  268. if(adom.innerHTML == '魔方电脑大师' && adom.href == 'http://mofang.ithome.com/') return true;
  269. if(adom.innerHTML == '浏览器' && adom.href == 'http://www.saayaa.com/') return true;
  270. if(adom.innerHTML == 'Win10' && adom.href == 'http://win10.ithome.com/') return true;
  271. if(adom.innerHTML == 'Win8.1' && adom.href == 'http://win8.ithome.com/') return true;
  272. if(adom.innerHTML == 'Win8' && adom.href == 'http://www.win8china.com/') return true;
  273. if(adom.innerHTML == 'Win7' && adom.href == 'http://www.win7china.com/') return true;
  274. if(adom.innerHTML == 'Vista' && adom.href == 'http://www.vista123.com/') return true;
  275. if(adom.href == 'http://iphone.ithome.com/') return true;
  276. if(adom.href == 'http://ipad.ithome.com/') return true;
  277. if(adom.href == 'http://android.ithome.com/') return true;
  278. if(adom.href == 'http://chrome.ithome.com/') return true;
  279. if(adom.href == 'http://qq.ithome.com/') return true;
  280. if(adom.innerHTML == 'QQ下载' && adom.href == 'http://qq.ithome.com/qqxiazai/') return true;
  281. if(adom.href == 'http://office.ithome.com/') return true;
  282. if(adom.href == 'http://ie.ithome.com/') return true;
  283. if(adom.href == 'http://wp.ithome.com/') return true;
  284. return false;
  285. }
  286. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址