// ==UserScript== // @name Tieba Imagizer // @namespace http://gera2ld.blog.163.com/ // @author Gerald // @icon http://s.gravatar.com/avatar/a0ad718d86d21262ccd6ff271ece08a3?s=80 // @version 1.2.7.1 // @description 贴吧图化 - Gerald倾情打造 // @homepageURL http://geraldl.net/userjs/TiebaImagizer // @include http://tieba.baidu.com/* // @exclude http://tieba.baidu.com/tb/* // @require https://greasyfork.org/scripts/144/code.user.js // @grant none // @downloadURL https://update.greasyfork.icu/scripts/120/Tieba%20Imagizer.user.js // @updateURL https://update.greasyfork.icu/scripts/120/Tieba%20Imagizer.meta.js // ==/UserScript== var loadingURL='http://tieba.baidu.com/tb/static-ihome/img/loading2.gif'; // 初始化颜色选择面板 function initColorPanel() { if(utils.colorInput) return; // Check support for input[type=color] var i=document.createElement('input'); i.setAttribute('type','color'); if(i.type=='color') return utils.colorInput=function(id,key,def,func){ return utils.bindProp($(''),'value',key,def,func,['change','keyup']); }; utils.addStyle('\ #colors{display:none;position:absolute;background:white;border:2px ridge;padding:10px;cursor:default;}\ #colors .colors{width:261px;cursor:pointer;margin:2px;border-collapse:separate;border-spacing:1px;background:black;}\ #colors .colors td{display:table-cell !important;width:12px;height:12px;border:none;emptycells:show;}\ .colorbox{width:12px;height:12px;border:1px solid;display:inline-block;position:relative;top:3px;}\ '); var cp=$('
').click(function(e){e.stopPropagation();}),r,c,t; r=function(e){ var d=$(e.target).attr('data'); if(d) { if(e.type=='mouseover') { if(c) c.css('outline','none'); c=$(e.target).css('outline','1px outset yellow'); $('#ge_vcolor').val(d); } else cp.owner.setColor(d); } }; t=$('').appendTo(cp).mouseover(r).click(r); var k=['00','33','66','99','cc','ff'],p=['#ffffff','#ff0000','#00ff00','#0000ff','#ffff00','#00ffff','#ff00ff']; for(var i=0;i<12;i++) { r=$('').appendTo(t); if(i<6) c='#'+k[i]+k[i]+k[i]; else c=p[i-6]; $('
').appendTo(r).css({background:c}).attr('data',c); if(!i) $('').appendTo(r); for(var j=0;j<18;j++) { c='#'+k[Math.floor(i/6)*3+Math.floor(j/6)]+k[j%6]+k[i%6]; $('').appendTo(r).css({background:c}).attr('data',c); } } t=$('
').appendTo(cp); $('').appendTo(t); r=function(){$('#ge_scolor').css('background',this.value);}; $('').appendTo(t).change(r).keyup(r); r=function(e){e.preventDefault();cp.owner.setColor($('#ge_scolor').css('background-color'));}; $('OK').appendTo(t).click(r);t.submit(r); c=null; utils.colorInput=function(id,key,def,func){ var o=$(''),c=utils.getObj(key,def); o.css({border:'1px outset white',cursor:'pointer',background:c}).attr('data',c).click(function(e){ if(cp.owner!=o) { cp.owner=o;cp.appendTo(o).css({top:'auto',bottom:'auto'}).show(); if(cp.offset().top+cp.height()>pageYOffset+innerHeight) cp.css('bottom','14px'); else cp.css('top','14px'); $('#ge_scolor').css('background',e=o.attr('data')); $('#ge_vcolor').val(e); } else {cp.owner=null;cp.hide();} }); o.setColor=function(v){ v=v.replace(/rgb\((\d+),\s?(\d+),\s?(\d+)\)/i,function(v,g1,g2,g3){ v=[g1,g2,g3];for(g1 in v) {v[g1]=parseInt(v[g1]).toString(16);if(v[g1].length<2) v[g1]='0'+v[g1];} return '#'+v.join(''); }); o.attr('data',v).css('background',v); utils.setObj(key,v); cp.owner=null;cp.hide();func(); }; o[0].val=function(){return o.attr('data');}; return o[0]; }; } function dataURL2Blob(dataURL) { var data=dataURL.match(/^data:(.*?);base64,(.*)$/), raw=atob(data[2]), buf=new ArrayBuffer(raw.length), intarr=new Uint8Array(buf),i; for(i=0;i'); } }, error:error, }); },'json'); }; var u=$('
开始图化
').appendTo(op).click(word2Image); // Extracted from ueditor.js function extractContents(H) { function remove(i){i.parentNode.removeChild(i);} function findParents(i){ var a=[i]; while(i.parentNode!==editor.body&&(i=i.parentNode)) a.unshift(i); return a; } var F = H.startContainer, E = H.endContainer, N = H.startOffset, G = H.endOffset, T = H.document, B = T.createDocumentFragment(), I, K; if (F.nodeType == 1) { F = F.childNodes[N] || (I = F.appendChild(T.createTextNode(""))) } if (E.nodeType == 1) { E = E.childNodes[G] || (K = E.appendChild(T.createTextNode(""))) } if (F === E && F.nodeType == 3) { B.appendChild(T.createTextNode(F.substringData(N, G - N))); F.deleteData(N, G - N); H.collapse(true) return B } var J, P, R = B, Q = findParents(F), C = findParents(E); for (var O = 0; Q[O] == C[O]; ) { O++ } for (var M = O, S; S = Q[M]; M++) { J = S.nextSibling; if (S == F) { if (!I) { if (H.startContainer.nodeType == 3) { R.appendChild(T.createTextNode(F.nodeValue.slice(N))); } else { R.appendChild(F) } } } else { P = S.cloneNode(false); R.appendChild(P) } while (J) { if (J === E || J === C[M]) { break } S = J.nextSibling; R.appendChild(J); J = S } R = P } R = B; if (!Q[O]) { R.appendChild(Q[O - 1].cloneNode(false)); R = R.firstChild } for (var M = O, D; D = C[M]; M++) { J = D.previousSibling; if (D == E) { if (!K && H.endContainer.nodeType == 3) { R.appendChild(T.createTextNode(E.substringData(0, G))); E.deleteData(0, G) } } else { P = D.cloneNode(false); R.appendChild(P) } if (M != O || !Q[O]) { while (J) { if (J === F) { break } D = J.previousSibling; R.insertBefore(J, R.firstChild); J = D } } R = P } H.setStartBefore(!C[O] ? C[O - 1] : !Q[O] ? Q[O - 1] : C[O]).collapse(true); I && remove(I); K && remove(K); return B } function innerText(o) { return $('
').append(o.childNodes||o.html()).html(function(i,h){return h.replace(/
(<\/p>)?|<\/p>/gi,'\n');}).text().replace(/\s+$/,''); } function word2Image(){ content=ebody.html(); bUndo.removeClass('ge_disabled'); var fz=parseInt($('#w2isize').val()),loading=$('').attr('src',loadingURL), r=editor.selection.getRange(),s=null; if(!r.collapsed) s=innerText(extractContents(r)); if(s&&/\S/.test(s)) { r.insertNode(loading[0]); } else { s=innerText(ebody); if(!/\S/.test(s)) return; ebody.html(loading); } var lines=s.split('\n'),w=0,c=document.createElement('canvas'),d=c.getContext('2d'),lh=Math.round(1.5*fz),data=[]; s=getStyle(); d.font=s.font; lines.forEach(function(line){ line=line.replace(/\s+$/,''); do { for(var l=0,j=0;j560) break; else if(w').appendTo($('').appendTo(op)).change(function(e){ff.load(f.prop('selectedIndex'));checkFont();}); ff.list.forEach(function(i){$('').appendTo(f);});f.prop('selectedIndex',ff.last); $('+').appendTo(op).click(function(e){ if(e=prompt('请输入字体名称:')) { ff.load(ff.push(e)); $('