Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 5 of 5
  1. #1
    Senior Coder
    Join Date
    May 2006
    Posts
    1,673
    Thanks
    28
    Thanked 4 Times in 4 Posts

    Script not picking up the url and adding tags

    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.




    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;
    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 ?
    Last edited by jeddi; 12-11-2009 at 04:32 PM.

  • #2
    Senior Coder
    Join Date
    May 2006
    Posts
    1,673
    Thanks
    28
    Thanked 4 Times in 4 Posts
    Would really appreciate some help if anyone
    has any ideas about this.

    Thanks

  • #3
    Senior Coder
    Join Date
    May 2006
    Posts
    1,673
    Thanks
    28
    Thanked 4 Times in 4 Posts
    The script is supposed to create a credit line with working html hyperlinks
    unfortunately the links don't appear.

    Line 58 is where this credit line is created
    - but I don't know why the hyperlink doesn't work

    Any ideas ?

  • #4
    Regular Coder hdewantara's Avatar
    Join Date
    Aug 2009
    Location
    Jakarta, Indonesia.
    Posts
    351
    Thanks
    9
    Thanked 51 Times in 50 Posts
    Well surely it would took looong time for me as new scripter to have an idea,
    since your script has already been optimized.

    Think I'll leave this one for the forum seniors

    NB: Interesting, I didn't know javascript could do like following,
    what exactly they do?
    line 84, and line 102:
    PHP Code:
    (c=e.getElementById("sasText"))&&c.parentNode.removeChild(c); 

  • #5
    Senior Coder
    Join Date
    May 2006
    Posts
    1,673
    Thanks
    28
    Thanked 4 Times in 4 Posts
    Thanks for replying.

    Although I understand a lot of the code, some of the
    functions I have never used either.

    I am also hoping that the senior guys will take a look and help me out.

    It seems to be quite a tough one!


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •