| 1 |
2
|
Manuela
|
/**
|
| 2 |
|
|
* http://molily.de/js/
|
| 3 |
|
|
* Cross browser addEvent function by John Resig
|
| 4 |
|
|
* http://ejohn.org/blog/flexible-javascript-events/
|
| 5 |
|
|
* some samples
|
| 6 |
|
|
* addEvent( document.getElementById('foo'), 'click', doSomething );
|
| 7 |
|
|
* addEvent( obj, 'mouseover', function(){ alert('hello!'); } );
|
| 8 |
|
|
*
|
| 9 |
|
|
*/
|
| 10 |
|
|
/**
|
| 11 |
|
|
* Cross Browser helper to addEventListener.
|
| 12 |
|
|
* http://webintersect.com/articles/72/add-event-listener-to-dynamic-elements
|
| 13 |
|
|
*
|
| 14 |
|
|
* @param {HTMLElement} obj The Element to attach event to.
|
| 15 |
|
|
* @param {string} evt The event that will trigger the binded function.
|
| 16 |
|
|
* @param {function(event)} fnc The function to bind to the element.
|
| 17 |
|
|
* @return {boolean} true if it was successfuly binded.
|
| 18 |
|
|
*/
|
| 19 |
|
|
var addEvent = function (obj, evt, fnc) {
|
| 20 |
|
|
// W3C model
|
| 21 |
|
|
if (obj.addEventListener) {
|
| 22 |
|
|
obj.addEventListener(evt, fnc, false);
|
| 23 |
|
|
return true;
|
| 24 |
|
|
}
|
| 25 |
|
|
// Microsoft model
|
| 26 |
|
|
else if (obj.attachEvent) {
|
| 27 |
|
|
return obj.attachEvent('on' + evt, fnc);
|
| 28 |
|
|
}
|
| 29 |
|
|
// Browser don't support W3C or MSFT model, go on with traditional
|
| 30 |
|
|
else {
|
| 31 |
|
|
evt = 'on' + evt;
|
| 32 |
|
|
if (typeof obj[evt] === 'function') {
|
| 33 |
|
|
// Object already has a function on traditional
|
| 34 |
|
|
// Let's wrap it with our own function inside another function
|
| 35 |
|
|
fnc = (function (f1, f2) {
|
| 36 |
|
|
return function () {
|
| 37 |
|
|
f1.apply(this, arguments);
|
| 38 |
|
|
f2.apply(this, arguments);
|
| 39 |
|
|
}
|
| 40 |
|
|
}) (obj[evt], fnc);
|
| 41 |
|
|
}
|
| 42 |
|
|
obj[evt] = fnc;
|
| 43 |
|
|
return true;
|
| 44 |
|
|
}
|
| 45 |
|
|
return false;
|
| 46 |
|
|
};
|
| 47 |
|
|
/*****************************************************************************/
|
| 48 |
|
|
/**
|
| 49 |
|
|
* sample
|
| 50 |
|
|
* removeEvent( object, eventType, function );
|
| 51 |
|
|
*
|
| 52 |
|
|
*/
|
| 53 |
|
|
function removeEvent(obj, ev, fn) {
|
| 54 |
|
|
if (obj.detachEvent) {
|
| 55 |
|
|
obj.detachEvent('on' + ev, obj[ev + fn]);
|
| 56 |
|
|
obj[ev + fn] = null;
|
| 57 |
|
|
} else
|
| 58 |
|
|
obj.removeEventListener(ev, fn, false);
|
| 59 |
|
|
}
|
| 60 |
|
|
/*****************************************************************************/
|
| 61 |
|
|
|
| 62 |
|
|
var getBrowser = (function () {
|
| 63 |
|
|
var navigatorObj = navigator.appName,
|
| 64 |
|
|
userAgentObj = navigator.userAgent,
|
| 65 |
|
|
matchVersion;
|
| 66 |
|
|
var match = userAgentObj.match(/(opera|opr|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
|
| 67 |
|
|
if (match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) {
|
| 68 |
|
|
match[2] = matchVersion[1];
|
| 69 |
|
|
}
|
| 70 |
|
|
//mobile
|
| 71 |
|
|
|
| 72 |
|
|
if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
|
| 73 |
|
|
return match ? [
|
| 74 |
|
|
match[1],
|
| 75 |
|
|
match[2],
|
| 76 |
|
|
mobile
|
| 77 |
|
|
] : [
|
| 78 |
|
|
navigatorObj,
|
| 79 |
|
|
navigator.appVersion,
|
| 80 |
|
|
mobile
|
| 81 |
|
|
];
|
| 82 |
|
|
}
|
| 83 |
|
|
// web browser
|
| 84 |
|
|
|
| 85 |
|
|
return match ? [
|
| 86 |
|
|
match[1],
|
| 87 |
|
|
match[2]
|
| 88 |
|
|
] : [
|
| 89 |
|
|
navigatorObj,
|
| 90 |
|
|
navigator.appVersion,
|
| 91 |
|
|
'-?'
|
| 92 |
|
|
];
|
| 93 |
|
|
}) ();
|
| 94 |
|
|
// forEach method, could be shipped as part of an Object Literal/Module
|
| 95 |
|
|
var forEach = function (array, callback, scope) {
|
| 96 |
|
|
for (var i = 0; i < array.length; i++) {
|
| 97 |
|
|
callback.call(scope, i, array[i]); // passes back stuff we need
|
| 98 |
|
|
}
|
| 99 |
|
|
};
|
| 100 |
|
|
function each(elm, fn) {
|
| 101 |
|
|
for (var i = 0, l = elm.length; i < l; i++) {
|
| 102 |
|
|
fn.call(elm, elm[i], i);
|
| 103 |
|
|
}
|
| 104 |
|
|
}
|
| 105 |
|
|
function doSomething(elm) {
|
| 106 |
|
|
if ((typeof elm !== 'undefined') || elm) console.log(elm);
|
| 107 |
|
|
}
|
| 108 |
|
|
/**
|
| 109 |
|
|
* http://www.axel-hahn.de/blog/2015/01/21/javascript-schnipsel-html-strippen/
|
| 110 |
|
|
*/
|
| 111 |
|
|
|
| 112 |
|
|
function strip_tags(s) {
|
| 113 |
|
|
return s.replace(/<[^>]*>/g, '');
|
| 114 |
|
|
}
|
| 115 |
|
|
/**
|
| 116 |
|
|
* discuss at: http:phpjs.org/functions/dirname/
|
| 117 |
|
|
* http: kevin.vanzonneveld.net
|
| 118 |
|
|
* original by: Ozh
|
| 119 |
|
|
* improved by: XoraX (http:www.xorax.info)
|
| 120 |
|
|
* example 1: dirname('/etc/passwd');
|
| 121 |
|
|
* returns 1: '/etc'
|
| 122 |
|
|
*/
|
| 123 |
|
|
|
| 124 |
|
|
var dirname = function (path) {
|
| 125 |
|
|
var tmp = path.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '');
|
| 126 |
|
|
return tmp;
|
| 127 |
|
|
};
|
| 128 |
|
|
/**
|
| 129 |
|
|
* http://durhamhale.com/blog/javascript-version-of-phps-str-replace-function
|
| 130 |
|
|
*/
|
| 131 |
|
|
var str_replace = function (search, replace, string) {
|
| 132 |
|
|
return string.split(search).join(replace);
|
| 133 |
|
|
};
|
| 134 |
|
|
/**
|
| 135 |
|
|
* trim, rtrim, ltrim
|
| 136 |
|
|
* http://coursesweb.net/javascript/trim-rtrim-ltrim-javascript_cs
|
| 137 |
|
|
*/
|
| 138 |
|
|
var trim = function (str, chr) {
|
| 139 |
|
|
var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g') : new RegExp('^' + chr + '+|' + chr + '+$', 'g');
|
| 140 |
|
|
return str.replace(rgxtrim, '');
|
| 141 |
|
|
};
|
| 142 |
|
|
var rtrim = function (str, chr) {
|
| 143 |
|
|
var rgxtrim = (!chr) ? new RegExp('\\s+$') : new RegExp(chr + '+$');
|
| 144 |
|
|
return str.replace(rgxtrim, '');
|
| 145 |
|
|
};
|
| 146 |
|
|
var ltrim = function (str, chr) {
|
| 147 |
|
|
var rgxtrim = (!chr) ? new RegExp('^\\s+') : new RegExp('^' + chr + '+');
|
| 148 |
|
|
return str.replace(rgxtrim, '');
|
| 149 |
|
|
};
|
| 150 |
|
|
var confirm_link = function (message, url) { // class="alert rounded"
|
| 151 |
|
|
if (confirm(message)) location.href = url;
|
| 152 |
|
|
};
|
| 153 |
|
|
var showMessage = (function (txt, sel) {
|
| 154 |
|
|
var result = window.document.getElementById('messages');
|
| 155 |
|
|
if (!result) {
|
| 156 |
|
|
return false;
|
| 157 |
|
|
}
|
| 158 |
|
|
var elm = document.createElement('P');
|
| 159 |
|
|
elm.setAttribute('class', sel + ' rounded');
|
| 160 |
|
|
elm.appendChild(document.createTextNode(txt));
|
| 161 |
|
|
result.appendChild(elm);
|
| 162 |
|
|
});
|
| 163 |
|
|
/**
|
| 164 |
|
|
* http://www.javascriptkit.com/dhtmltutors/treewalker.shtml
|
| 165 |
|
|
*
|
| 166 |
|
|
*/
|
| 167 |
|
|
/********************************************************************************************************/
|
| 168 |
|
|
var LoadOnFly = (function (nodeName, file) {
|
| 169 |
|
|
'use strict';
|
| 170 |
|
|
if (typeof file === 'undefined') {
|
| 171 |
|
|
return false;
|
| 172 |
|
|
}
|
| 173 |
|
|
// console.info(document.doctype);
|
| 174 |
|
|
if (!document.doctype) {
|
| 175 |
|
|
return false;
|
| 176 |
|
|
}
|
| 177 |
|
|
/*
|
| 178 |
|
|
var nodeDoctype = document.implementation.createDocumentType(
|
| 179 |
|
|
'html','',''
|
| 180 |
|
|
);
|
| 181 |
|
|
document.replaceChild(nodeDoctype, document.doctype);
|
| 182 |
|
|
} else {
|
| 183 |
|
|
document.insertBefore(nodeDoctype, document.childNodes[0]);
|
| 184 |
|
|
}
|
| 185 |
|
|
*/
|
| 186 |
|
|
// var LoadOnFly = function (nodeName, url) {
|
| 187 |
|
|
|
| 188 |
|
|
var jsRegex = /.js$/gi;
|
| 189 |
|
|
var cssRegex = /.css$/gi;
|
| 190 |
|
|
var scripts = {
|
| 191 |
|
|
};
|
| 192 |
|
|
// console.info(' 0.' + file );fileExtension = file.replace(/^.*\./, '');
|
| 193 |
|
|
var url = file;
|
| 194 |
|
|
var urlExt = trim(file.replace(/^.*\./, ''));
|
| 195 |
|
|
var NodeList = null;
|
| 196 |
|
|
var len = 0;
|
| 197 |
|
|
var node = null;
|
| 198 |
|
|
var str = 'undefined';
|
| 199 |
|
|
var done = false;
|
| 200 |
|
|
//console.info( urlExt + ' = 1.) ' + url);
|
| 201 |
|
|
if ((typeof url !== 'undefined') && (urlExt === 'js')) {
|
| 202 |
|
|
// console.info(urlExt + ' = 1.) ' + url);
|
| 203 |
|
|
scripts[url] = false;
|
| 204 |
|
|
switch (nodeName) {
|
| 205 |
|
|
case 'body':
|
| 206 |
|
|
NodeList = document.body.querySelectorAll('SCRIPT');
|
| 207 |
|
|
break;
|
| 208 |
|
|
default:
|
| 209 |
|
|
NodeList = document.head.querySelectorAll('SCRIPT');
|
| 210 |
|
|
break;
|
| 211 |
|
|
}
|
| 212 |
|
|
if (NodeList) {
|
| 213 |
|
|
len = NodeList.length - 1;
|
| 214 |
|
|
}
|
| 215 |
|
|
//console.info(NodeList);
|
| 216 |
|
|
// console.info(' JS ' + url);
|
| 217 |
|
|
|
| 218 |
|
|
try {
|
| 219 |
|
|
var js = document.createElement('SCRIPT');
|
| 220 |
|
|
js.setAttribute('type', 'text/javascript'); // optional, if not a html5 node
|
| 221 |
|
|
js.setAttribute('src', url); // src setzen
|
| 222 |
|
|
js.setAttribute('charset', 'UTF-8');
|
| 223 |
|
|
// js.setAttribute("async", true); // HTML5 Asyncron attribute
|
| 224 |
|
|
done = false;
|
| 225 |
|
|
if (nodeName == 'body') {
|
| 226 |
|
|
node = window.document.body.querySelectorAll('SCRIPT') [len];
|
| 227 |
|
|
node.parentNode.appendChild(js);
|
| 228 |
|
|
// script.parentNode.insertBefore(js,script);
|
| 229 |
|
|
} else {
|
| 230 |
|
|
node = window.document.head.querySelectorAll('SCRIPT') [len];
|
| 231 |
|
|
node.parentNode.appendChild(js);
|
| 232 |
|
|
}
|
| 233 |
|
|
} catch (e) {
|
| 234 |
|
|
var str = '<script type=\'text/javascript\' src=\'' + url + '\' charset="UTF-8"><' + '/script>';
|
| 235 |
|
|
document.write(str);
|
| 236 |
|
|
}
|
| 237 |
|
|
}
|
| 238 |
|
|
// load css only within head
|
| 239 |
|
|
|
| 240 |
|
|
if ((typeof url !== 'undefined') && (urlExt === 'css')) {
|
| 241 |
|
|
//console.info(urlExt + ' = 2.) ' + url);
|
| 242 |
|
|
scripts[url] = false;
|
| 243 |
|
|
try {
|
| 244 |
|
|
var css = document.createElement('link'),
|
| 245 |
|
|
len = 0;
|
| 246 |
|
|
css.setAttribute('type', 'text/css');
|
| 247 |
|
|
css.setAttribute('rel', 'stylesheet');
|
| 248 |
|
|
css.setAttribute('media', 'all');
|
| 249 |
|
|
css.setAttribute('href', url);
|
| 250 |
|
|
NodeList = window.document.querySelectorAll('LINK');
|
| 251 |
|
|
if (NodeList) {
|
| 252 |
|
|
len = NodeList.length - 1;
|
| 253 |
|
|
}
|
| 254 |
|
|
//console.info(NodeList);
|
| 255 |
|
|
// insert after last link element if exist otherwise before first script
|
| 256 |
|
|
if (len > - 1) {
|
| 257 |
|
|
node = window.document.head.querySelectorAll('LINK') [len];
|
| 258 |
|
|
// console.info( len );
|
| 259 |
|
|
// console.info(node);
|
| 260 |
|
|
// return false;
|
| 261 |
|
|
node.parentNode.insertBefore(css, node.nextSibling);
|
| 262 |
|
|
// console.info('CSS ' + url);
|
| 263 |
|
|
} else {
|
| 264 |
|
|
node = window.document.head.querySelectorAll('SCRIPT') [0];
|
| 265 |
|
|
node.parentNode.insertBefore(css, node);
|
| 266 |
|
|
}
|
| 267 |
|
|
} catch (e) {
|
| 268 |
|
|
str = '<link href=\'' + url + '\' media="all" rel="stylesheet" />';
|
| 269 |
|
|
document.write(str);
|
| 270 |
|
|
}
|
| 271 |
|
|
}
|
| 272 |
|
|
// console.info( url );
|
| 273 |
|
|
// showMessage(url);
|
| 274 |
|
|
|
| 275 |
|
|
});
|
| 276 |
|
|
/**
|
| 277 |
|
|
*
|
| 278 |
|
|
document.onreadystatechange = function () {
|
| 279 |
|
|
if (document.readyState == "interactive") {
|
| 280 |
|
|
console.info( 'Start readyState.interactive' );
|
| 281 |
|
|
}
|
| 282 |
|
|
}
|
| 283 |
|
|
|
| 284 |
|
|
// Alternativ zu load event
|
| 285 |
|
|
document.onreadystatechange = function () {
|
| 286 |
|
|
if (document.readyState == "complete") {
|
| 287 |
|
|
console.info( 'Start readyState.complete' );
|
| 288 |
|
|
}
|
| 289 |
|
|
}
|
| 290 |
|
|
|
| 291 |
|
|
|
| 292 |
|
|
window.onload = function() {
|
| 293 |
|
|
addEvent(document, "DOMContentLoaded", LoadOnFly);
|
| 294 |
|
|
console.info( 'Start window.onload' );
|
| 295 |
|
|
};
|
| 296 |
|
|
*/
|
| 297 |
|
|
/*
|
| 298 |
|
|
undefined
|
| 299 |
|
|
*/
|