User:Zocky/foolib.js

From Wikipedia

Note: After saving, you may have to bypass your browser's cache to see the changes. Mozilla / Firefox / Safari: hold down Shift while clicking Reload, or press Ctrl-Shift-R (Cmd-Shift-R on Apple Mac); IE: hold Ctrl while clicking Refresh, or press Ctrl-F5; Konqueror:: simply click the Reload button, or press F5; Opera users may need to completely clear their cache in Tools→Preferences.

/* 
debug, >/dev/null for now, may be redefined 
*/ 
var debug$=function(e,f){alert(e + f.toSource())}; 

/* 
GENERAL SHORTCUTS 
*/ 

/* 
is el a dom element? - silly test, there must be better ways 
*/ 
var $is = function (el) { return el && typeof el =='object' && 'nodeType' in el }; 


/* 
if the argument is an element, return it, otherwise try to find the element with the given id 
*/ 
var $ = function (idel)  
{ 
  return $is(idel) ? idel : document.getElementById(idel); 
} 

/* 
if the argument is an element, return its id, otherwise return the string 
*/ 
var $id = function (idel)  
{  
  return $is(idel) ? idel : document.getElementById(idel); 
} 

/* 
create new element 
*/ 
var new$ = function (tag,doc) 
{ 
  return (doc||document).createElement(tag); 
} 

/* 
create a div containing either an element or a piece of html code 
*/ 
var wrap$ = function (elcode) 
{ 
  var f=document.createElement('div'); 
  if ($is(elcode)) 
  { 
    f.appendChild(elcode) 
    return f; 
  } 
  else try 
  { 
    f.innerHTML=elcode; 
    return f; 
  } 
  catch (e) 
  { 
    debug$(e,this); 
    return false;   
  } 
} 

/* 
if the argument is an element, return its content, otherwise return the string 
*/ 
var $code = function (elcode)  
{  
  var wrap=wrap$(elcode);
  return wrap.fistChild ? wrap.innerHTML : false; 
} 

/*  
shortcuts for getting and setting attributes 
*/ 
var $attr = function (idel,name)  
{ 
  return $(idel) && $(idel).getAttribute(name) 
} 
var attr$ = function (idel,name,value)  
{ 
  return $(idel) && $(idel).setAttribute(name,value) 
} 
/*  
shortcuts for getting and setting values 
*/ 
var $val = function (idel)  
{ 
  var el=idel; 
  if (!el) return false; 
  if ('value' in el) return el.value; 
  if ('textContent' in el) return el.textContent; 
  return false; 
} 

var val$ = function (idel,value)  
{ 
  var el=idel; 
  if (!el) return false; 
  if ('value' in el)  
  { 
    el.value = value; 
    return true; 
  } 
  else if ('textContent' in el) 
  { 
    el.textContent = value; 
    return true; 
  }  
  else return false; 
} 


/* 
PLACEMENT SHORTCUTS 
*/ 

/* 
place elcode at the bottom of idel 
*/ 
var bottom$ =function(idel,elcode) 
{ 
  var el=$(idel); 
  var wrap=wrap$(elcode); 

  try 
  {  
    el.innerHTML=el.innerHTML+wrap.innerHTML; 
    return true; 
  }  
  catch (e)  
  {  
    debug$(e,this);return false 
  } 
} 

/* 
place elcode at the top of idel 
*/ 
var top$ =function(idel,elcode) 
{ 
  var el=$(idel); 
  var wrap=wrap$(elcode); 

  try 
  {  
    el.innerHTML=wrap.innerHTML+el.innerHTML; 
    return true; 
  }  
  catch (e)  
  {  
    debug$(e,this);return false 
  } 
} 

/* 
place elcode over the content of idel 
*/ 
var over$=function(idel,elcode) 
{ 
  var el=$(idel); 
  var wrap=wrap$(elcode); 

  try 
  {  
    el.innerHTML=wrap.innerHTML; 
    return true; 
  }  
  catch (e)  
  {  
    debug$(e,this);return false 
  } 
} 

/* 
place elcode before idel 
*/ 
var before$=function(idel,elcode) 
{ 
  var el=$(idel); 
  var wrap=wrap$(elcode); 
  try 
  {  
    if (wrap.firstChild) 
    { 
      var i=wrap.firstChild;
      do 
      { 
        el.parentNode.insertBefore(i.cloneNode(true),el); 
      } while (i=i.nextSibling)
    } 
    return true; 
  }  
  catch (e)  
  {  
    debug$(e,this);return false 
  } 
} 
/* 
place elcode after idel 
*/ 
var after$=function(idel,elcode) 
{ 
  var el=$(idel); 
  var wrap=wrap$(elcode); 
  try 
  {  
    if (wrap.firstChild) 
    { 
      if (el.nextSibling) 
      { 
        for (var i=wrap.firstChild;i;i=i.nextSibling) 
        { 
          el.parentNode.insertBefore(i.cloneNode(true),el.nextSibling); 
        } 
         return true; 
      } 
      else return bottom$(el.parentNode,elcode); 
    } 
    return true; 
  }  
  catch (e)  
  {  
    debug$(e,this);return false 
  } 
} 

/* 
replace elcode with idel 
*/ 
var replace$=function(idel,elcode) 
{ 
  var el=$(idel); 
  try 
  {  
    return before$(idel,elcode) && $el.parent.removeChild(el); 
    return true; 
  }  
  catch (e)  
  {  
    debug$(e,this);return false 
  } 
} 

/* 
place elcode at specified position relative to idel 
*/ 
var insert$=function(elcode, where, idel) 
{ 
  switch(where) 
  { 
  case 'top'       : return top$     (idel,elcode); break; 
  case 'before'    : return before$  (idel,elcode); break; 
  case 'over'      : return over$    (idel,elcode); break; 
  case 'replace'   : return replace$ (idel,elcode); break; 
  case 'after'     : return after$   (idel,elcode); break; 
  case 'bottom'    :   
  default          : return bottom$  (idel,elcode); 
  } 
} 
/*
load url and callback
*/
function load$(url,callback) 
{
  var x = new XMLHttpRequest();
  x.onreadystatechange=function() 
  { 
    if (x.readyState==4)
    {
      if (x.status==200)
      {
        callback(x.responseText);
      }
      else callback(false);
    }
  }
  x.open("GET",url,true);
  x.setRequestHeader('Accept','text/*');
  x.send(null);
  return x;
}
/*
load and place into document
*/
var loadAndPlace$ = function (url,where,place)
{
  load$
  (
    url, 
    function(t)
    {
      insert$(t,where,place)
    }
  );
}

/* 
xPath shortcuts 
*/ 

var $x = function (idel) 
{ 
  return "//*[id='" + $id(idel) + "']"; 
} 

var x$nodes=function(x,ref)  
{ 
  try 
  { 
    return document.evaluate(x, $(ref)||document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
  }  
  catch (e) {debug$(e,this);return false;} 
}; 

var x$node=function(x,ref)  
{ 
  try 
  { 
    return document.evaluate(x, $(ref)||document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
  }  
  catch (e) {debug$(e,this);return false;} 
}; 

var x$string=function(x,ref)  
{ 
  try 
  { 
    return document.evaluate(x, $(ref)||document, null, XPathResult.STRING_TYPE, null).stringValue; 
  }  
  catch (e) {debug$(e,this);return false;} 
}; 

/*
iterate through a nodeset
*/

var x$doforeach=function(callback,x,ref)  
{
  try 
  { 
    var nodes=x$nodes(x,ref);
    for ( var j=0 ; j < nodes.snapshotLength; j++ )
    {
      callback(nodes.snapshotItem(j));
    }
  } 
  catch (e)  
  {  
    debug$(e,this);return false 
  }  
}
/*
create empty xml document
*/
var x$newDoc =function() 
{ 
  try    {  return document.implementation.createDocument("", "", null);  } 
  catch (e) {debug$(e,this);return false;} 
} 
/*
create an xml document from code
*/
var x$doc=function(code)
{
  var parser = new DOMParser();
  return parser.parseFromString('<?xml version="1.0" encoding="UTF-8"?>'+code,"text/xml")
}

/*
create an xslt processor from code
*/
var x$proc=function(code)
{
  var xslt = new XSLTProcessor();
  xslt.importStylesheet
  (
    x$doc
    (
      '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'
      + code
      + '</xsl:stylesheet>'
    )
  );
  return xslt;
}
/*
process xml to document fragment
*/
var x$transform=function(xml,xslt,doc)
{
  return xslt.transformToFragment(xml, doc || document)
}
Navigation