All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.javascript.CommonJS Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
package com.hfg.javascript;


//------------------------------------------------------------------------------
/**
 * Repository of reusable javascript snippets.
 * 
* The generateDomSearchJS() function produces the domSearch javascript which allows * more flexible DOM element selection with search scoping capability. *
*
* Ex: domSearch(inElement).getElementsByTagNameAndAttribute(inTagName, inAttriubtePattern, inAttriubteValuePattern) *
*
*
    *
  • inElement is the DOM Element object which is the root element from which to search. * [No argument defaults to document]
  • *
  • inTagName is the tag name used to limit the search. * Use '*' to specify all tag types.
  • *
  • inAttributePattern is the Pattern to use for matching * to attribute names. 'width' would match elements with a 'width' * attribute but would also match 'shoeWidth' (matches are case insensitive). To return just * elements containing a 'width' attribute, a pattern of '^width$' * should be used.
  • *
  • inAttributeValuePattern is the Pattern to use for matching * to attribute values. [No argument defaults to '.*' which matches all values.]
  • *
*
*
* Sometimes it would be nice to use the same id for more than element in the page but * where the id would be unique within a portion of the page's DOM. While getElementById() * is only available on the document object, domSearch(inElement).getElementById(inId) * can be used to scope to only a portion of the DOM tree. *
*
* The raw domSearch() javascript can be seen here. *
*
* See this page for some simple examples. *
* @author J. Alex Taylor, hairyfatguy.com */ //------------------------------------------------------------------------------ // com.hfg XML/HTML Coding Library // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com // [email protected] //------------------------------------------------------------------------------ public class CommonJS { //########################################################################## // PRIVATE FIELDS //########################################################################## private static String sCachedBrowserDetectionJS; //########################################################################## // PUBLIC METHODS //########################################################################## //-------------------------------------------------------------------------- public static String generateBrowserDetectionJS() { if (null == sCachedBrowserDetectionJS) { initializeBrowserDetectionJS(); } return sCachedBrowserDetectionJS; } //-------------------------------------------------------------------------- public static String generateDomSearchJS() { return JsUtil.getJSResourceAsString("domSearch.js"); } //-------------------------------------------------------------------------- public static String generateXMLHttpRequestJS() { return JsUtil.getJSResourceAsString("XMLHttpRequester.js"); } //########################################################################## // PRIVATE METHODS //########################################################################## //-------------------------------------------------------------------------- private static void initializeBrowserDetectionJS() { StringBuffer js = new StringBuffer(); js.append("function Browser() {\n"); js.append(" var ua= navigator.userAgent;\n"); js.append(" this.ua = ua;\n"); js.append(" ua = ua.toLowerCase();\n"); js.append("\n"); js.append(" // DOM support?\n"); js.append(" this.isDOM1 = (Boolean(document.getElementById));\n"); js.append(" this.isDOM2Event = (Boolean(document.addEventListener)\n"); js.append(" && Boolean(document.removeEventListener));\n"); js.append(" // CSS compatibility mode?\n"); js.append(" this.mode = document.compatMode ? document.compatMode : 'BackCompat';\n"); js.append("\n"); js.append(" // Browser name\n"); js.append(" this.isSafari = (ua.indexOf('safari') != - 1);\n"); js.append(" this.isGecko = (ua.indexOf('gecko') != -1 && !this.isSafari);\n"); js.append(" this.isMozilla = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);\n"); js.append(" this.isNS = ( (this.isGecko) ? (ua.indexOf('netscape') != -1)\n"); js.append(" : ( (ua.indexOf('mozilla') != -1) \n"); js.append(" && (ua.indexOf('spoofer') == -1)\n"); js.append(" && (ua.indexOf('compatible') == -1)\n"); js.append(" && (ua.indexOf('opera') == -1)\n"); js.append(" && (ua.indexOf('safari') == -1)\n"); js.append(" && (ua.indexOf('webtv') == -1)\n"); js.append(" && (ua.indexOf('hotjava') == -1) ) );\n"); js.append(" this.isIE = ( (ua.indexOf('msie') != -1)\n"); js.append(" && (ua.indexOf('opera') == -1) \n"); js.append(" && (ua.indexOf('webtv') == -1) );\n"); js.append(" this.isOpera = (ua.indexOf('opera') != -1);\n"); js.append(" this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari);\n"); js.append(" this.isICab = (ua.indexOf('icab') != -1);\n"); js.append(" this.isAOL = (ua.indexOf('aol') != -1);\n"); js.append(" this.isOMNI = (ua.indexOf('omni') != -1);\n"); js.append("\n"); js.append(" // Spoofing and compatible browsers\n"); js.append(" this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);\n"); js.append(" this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);\n"); js.append("\n"); js.append(" // Browser version\n"); js.append(" this.version = parseFloat(navigator.appVersion);\n"); js.append("\n"); js.append(" // correct version number\n"); js.append(" if (this.isNS && this.isGecko) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );\n"); js.append(" }\n"); js.append(" else if (this.isIE && this.version >= 4) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );\n"); js.append(" }\n"); js.append(" else if (this.isMozilla) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );\n"); js.append(" }\n"); js.append(" else if (this.isSafari) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );\n"); js.append(" }\n"); js.append(" else if (this.isOpera) {\n"); js.append(" if (ua.indexOf('opera/') != -1) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );\n"); js.append(" }\n"); js.append(" else {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );\n"); js.append(" }\n"); js.append(" }\n"); js.append(" else if (this.isKonqueror) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );\n"); js.append(" }\n"); js.append(" else if (this.isICab) {\n"); js.append(" if (ua.indexOf('icab/') != -1) {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );\n"); js.append(" }\n"); js.append(" else {\n"); js.append(" this.version = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );\n"); js.append(" }\n"); js.append(" }\n"); js.append("\n"); js.append(" this.versionMajor = parseInt(this.version);\n"); js.append(" this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );\n"); js.append("\n"); js.append(" // Platform\n"); js.append(" this.Win = (ua.indexOf('win') != -1);\n"); js.append(" this.Win32 = (this.Win && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );\n"); js.append(" this.MacOS = (ua.indexOf('mac') != -1);\n"); js.append(" this.Unix = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1);\n"); js.append(" this.Linux = (ua.indexOf('linux') != -1);\n"); js.append("\n"); js.append(" // Specific browser shortcuts\n"); js.append(" this.isNS4x = (this.isNS && this.versionMajor == 4);\n"); js.append(" this.isNS40x = (this.isNS4x && this.version < 4.5);\n"); js.append(" this.isNS47x = (this.isNS4x && this.version >= 4.7);\n"); js.append(" this.isNS4up = (this.isNS && this.version >= 4);\n"); js.append(" this.isNS6x = (this.isNS && this.versionMajor == 6);\n"); js.append(" this.isNS6up = (this.isNS && this.versionMajor >= 6);\n"); js.append(" this.isNS7x = (this.isNS && this.versionMajor == 7);\n"); js.append(" this.isNS7up = (this.isNS && this.versionMajor >= 7);\n"); js.append("\n"); js.append(" this.isIE4x = (this.isIE && this.versionMajor == 4);\n"); js.append(" this.isIE4up = (this.isIE && this.versionMajor >= 4);\n"); js.append(" this.isIE5x = (this.isIE && this.versionMajor == 5);\n"); js.append(" this.isIE55 = (this.isIE && this.version == 5.5);\n"); js.append(" this.isIE5up = (this.isIE && this.versionMajor >= 5);\n"); js.append(" this.isIE6x = (this.isIE && this.versionMajor == 6);\n"); js.append(" this.isIE6up = (this.isIE && this.versionMajor >= 6);\n"); js.append("\n"); js.append(" this.isIE4xMac = (this.isIE4x && this.isMacOS);\n"); js.append("\n"); js.append(" // To display all the fields in this object\n"); js.append(" this.write = writeMethod;\n"); js.append("\n"); js.append(" function writeMethod() {\n"); js.append(" document.writeln('
');\n");
      js.append("    for(var x in this)\n");
      js.append("      // Print the value of ea. field (skipping methods).\n");
      js.append("      if (!this[x].arguments)\n");
      js.append("        document.writeln(padString('browser.' + x, 22) + ' = ' + this[x]);\n");
      js.append("    document.writeln('<\\/pre>');\n");
      js.append("  }\n");
      js.append("\n");
      js.append("  function padString(inString, targetLength) {\n");
      js.append("    var spacesNeeded = targetLength - inString.length\n");
      js.append("\n");
      js.append("    for (var i = 0; i < spacesNeeded; i++) {\n");
      js.append("      inString += ' '\n");
      js.append("    }\n");
      js.append("    return inString;\n");
      js.append("  }\n");
      js.append("}\n");
      js.append("var browser = new Browser();\n");

      sCachedBrowserDetectionJS = js.toString();
   }

   //--------------------------------------------------------------------------
   private static void line(StringBuffer inBuffer, String inLine)
   {
      inBuffer.append(inLine + "\n");
   }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy