Hi,
I am using this script which is nearly working correctly, but not quite!
When a user selects some text from the web-page and copies it,
the script is supposed to pick up the current web-page url and create a
resource box or credit line that is added to the selected text when the
data is pasted.
You will see that the meta keywords are used (randomly) as the anchor text
and this should be wrapped with the href= tags in order to create a link. Thats the bit that is not workink, but I can not see why.
Here is the complete script.
I have put the script on this page:
test page
To test it, just go to that page, highlight some text
(at least 40 characters) copy it, and then paste it
into your editor or notepad.
You can see that it is picking up some info and
writing the attribute line but it doesn't create the link
If it helps get it working, I am happy to slim the code
down by excluding some features.
Any ideas ?
I am using this script which is nearly working correctly, but not quite!
When a user selects some text from the web-page and copies it,
the script is supposed to pick up the current web-page url and create a
resource box or credit line that is added to the selected text when the
data is pasted.
You will see that the meta keywords are used (randomly) as the anchor text
and this should be wrapped with the href= tags in order to create a link. Thats the bit that is not workink, but I can not see why.
Here is the complete script.
Code:
function init(){
// Options:
var useMetaKeyword = true; // Otherwise, page title
var minLength = 40; // Min selection chars
var useMetaAuthor = true; // Otherwise use domain
var addLinks = true; // Otherwise, just cite at end
var skip = new Array("home","link","click here"); // Don't link these (lowercase!)
function D(b,a,c){
if(b.addEventListener)b.addEventListener(a,c,false);
else b.attachEvent&&b.attachEvent("on"+a,c)}
function o(b,a){
if(typeof b=="undefined"||b==null||!RegExp)return false;
a=new RegExp("(^|\\s)"+a+"(\\s|$)");
if(typeof b=="string")return a.test(b);
else if(typeof b=="object"&&b.className)return a.test(b.className);return false}
function E(b,a){
var c=false,j;
for(j=b.parentNode;j!=undefined;){
if(b.parentNode==e.body)break;
else if(b.parentNode==a){c=true;break}j=j.parentNode}return c}
function F(b){
return b.replace(/^\s*/,"")
}
function G(b){
return b.replace(/\s*$/,"")
}
function H(b){
return G(F(b))
}
var I=new Array("home","link","click here"),
e=document,
x=window,
t=e.getElementsByTagName("body")[0],
p=e.getElementsByName("author"),
i=e.getElementsByName("keywords"),
q=x.location.toString(),
u=e.title.toString(),
d;if(!Array.indexOf)Array.prototype.indexOf=function(b,a){
var c=-1;
for(a=a|0;a<this.length||a==-1;a++)
if(this[a]==b)c=a;return c};
if(i.length>0&&useMetaKeyword){
i=e.getElementsByName("keywords")[0].getAttribute("content").split(",");
u=Math.floor(Math.random()*i.length);
i=i[u].replace(/^\s*|\s*$/,"")}
else
i=u;
p=(p.length>0&&useMetaAuthor)?p[0].getAttribute("content"):e.domain;
var y="<p id='credit'><br/>Read more about <a href='"+q+"'>"+i+"</a> by <a href='http://"+e.domain+"' />"+p+"</a></p>";
if(/MSIE/g.test(navigator.userAgent))var v="msie";
else if(/Safari/g.test(navigator.userAgent))v="safChrome";
q=e.createElement("span");q.setAttribute("id","sasText");
t.appendChild(q);
d=e.getElementById("sasText");
posType=document.all&&!window.opera&&!window.XMLHttpRequest?"absolute":"fixed";
d.style.position=posType;
d.style.top="0px";
d.style.left="-9999px";
D(t,"copy",function(){d.innerHTML=y;
if(v=="msie"){
for(var b=e.selection.createRange(),
a=b.parentElement();
a.nodeName!="BODY"&&!o(a,"lbExclude");)a=a.parentNode;
if(o(a,"lbExclude"))return true;
a=e.body.createTextRange();
a.moveToElementText(d);
var c=b.duplicate();
c=c.htmlText;
if(c.length>minLength){
d.id="tempSasText";
d.innerHTML=c+y;
(c=e.getElementById("sasText"))&&c.parentNode.removeChild(c);
d.id="sasText";a.select()}}
else{b=x.getSelection();
for(a=b.anchorNode;a.nodeName!="BODY"&&!o(a,"lbExclude");)a=a.parentNode;
if(o(a,"lbExclude"))return false;
if(b==""&&v=="safChrome"){
d.innerHTML=t.innerHTML;
a=document.createRange();
b.removeAllRanges();
a.selectNodeContents(d);b.addRange(a)}
else if(b.toString().length>minLength){
var j=e.getElementById("credit");
a=b.getRangeAt(0);
c=a.cloneContents();
d.id="tempSasText";
d.insertBefore(c,j);
(c=e.getElementById("sasText"))&&c.parentNode.removeChild(c);
d.id="sasText";
b.removeAllRanges();
a.selectNode(d);
b.addRange(a)}}
var w=[];a=d.getElementsByTagName("a");for(b=0;b<a.length;b++)w.push(a[b].href);
if(addLinks){a=e.getElementsByTagName("a");
for(b=0;b<a.length;b++){var r=a[b].href;
if(w.indexOf(r)==-1)if(E(a[b],d)==false){
var f=H(a[b].innerHTML).toLowerCase();
if(skip.indexOf(f)==-1)
if((new RegExp(e.domain,"g")).test(r)){
var z=[];
function n(g,k,l){
for(var A=g.childNodes.length;A-- >0;){
var h=g.childNodes[A];
if(h.nodeType===1)h.tagName.toLowerCase()!=="a"&&n(h,k,l);
else if(h.nodeType===3)
for(var m=h.data.length;1;){
m=h.data.lastIndexOf(k,m);
if(m===-1||z.indexOf(k.toLowerCase())!==-1)break;
var B=/\w/;
if(h.nodeValue.charAt(m-1).match(B)||h.nodeValue.charAt(m+f.length).match(B))break;
l.call(window,h,m)}}}
function s(g,k){g.splitText(k+f.length);
var l=e.createElement("a");
l.href=r;l.appendChild(g.splitText(k));
g.parentNode.insertBefore(l,g.nextSibling);
z.push(f.toLowerCase());
w.push(r)}n(d,f,s);f=f.charAt(0).toUpperCase()+f.slice(1);n(d,f,s);
f=f.toUpperCase();
n(d,f,s);f=f.replace(/\w\S*/g,function(g){
return g.charAt(0).toUpperCase()+g.substr(1).toLowerCase()});n(d,f,s)}}}}})}
window.onload=init;
test page
To test it, just go to that page, highlight some text
(at least 40 characters) copy it, and then paste it
into your editor or notepad.
You can see that it is picking up some info and
writing the attribute line but it doesn't create the link
If it helps get it working, I am happy to slim the code
down by excluding some features.
Any ideas ?
Comment