vendor: 16,980 bytes, lines 1-571
1/*!* 2 * project: digitalstrategie / msb 3 * release: 48 4 * build-date: 15.12.2016 / 16:00 5 */ 6 7/* Modernizr 2.6.2 (Custom Build) | MIT & BSD 8 * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 9 */ 10; 11 12 13 14window.Modernizr = (function( window, document, undefined ) { 15 16 var version = '2.6.2', 17 18 Modernizr = {}, 19 20 enableClasses = true, 21 22 docElement = document.documentElement, 23 24 mod = 'modernizr', 25 modElem = document.createElement(mod), 26 mStyle = modElem.style, 27 28 inputElem = document.createElement('input') , 29 30 smile = ':)', 31 32 toString = {}.toString, 33 34 prefixes = ' -webkit- -moz- -o- -ms- '.split(' '), 35 36 37 38 omPrefixes = 'Webkit Moz O ms', 39 40 cssomPrefixes = omPrefixes.split(' '), 41 42 domPrefixes = omPrefixes.toLowerCase().split(' '), 43 44 ns = {'svg': 'http://www.w3.org/2000/svg'}, 45 46 tests = {}, 47 inputs = {}, 48 attrs = {}, 49 50 classes = [], 51 52 slice = classes.slice, 53 54 featureName, 55 56 57 injectElementWithStyles = function( rule, callback, nodes, testnames ) { 58 59 var style, ret, node, docOverflow, 60 div = document.createElement('div'), 61 body = document.body, 62 fakeBody = body || document.createElement('body'); 63 64 if ( parseInt(nodes, 10) ) { 65 while ( nodes-- ) { 66 node = document.createElement('div'); 67 node.id = testnames ? testnames[nodes] : mod + (nodes + 1); 68 div.appendChild(node); 69 } 70 } 71 72 style = ['­','<style id="s', mod, '">', rule, '</style>'].join(''); 73 div.id = mod; 74 (body ? div : fakeBody).innerHTML += style; 75 fakeBody.appendChild(div); 76 if ( !body ) { 77 fakeBody.style.background = ''; 78 fakeBody.style.overflow = 'hidden'; 79 docOverflow = docElement.style.overflow; 80 docElement.style.overflow = 'hidden'; 81 docElement.appendChild(fakeBody); 82 } 83 84 ret = callback(div, rule); 85 if ( !body ) { 86 fakeBody.parentNode.removeChild(fakeBody); 87 docElement.style.overflow = docOverflow; 88 } else { 89 div.parentNode.removeChild(div); 90 } 91 92 return !!ret; 93 94 }, 95 96 97 98 isEventSupported = (function() { 99 100 var TAGNAMES = { 101 'select': 'input', 'change': 'input', 102 'submit': 'form', 'reset': 'form', 103 'error': 'img', 'load': 'img', 'abort': 'img' 104 }; 105 106 function isEventSupported( eventName, element ) { 107 108 element = element || document.createElement(TAGNAMES[eventName] || 'div'); 109 eventName = 'on' + eventName; 110 111 var isSupported = eventName in element; 112 113 if ( !isSupported ) { 114 if ( !element.setAttribute ) { 115 element = document.createElement('div'); 116 } 117 if ( element.setAttribute && element.removeAttribute ) { 118 element.setAttribute(eventName, ''); 119 isSupported = is(element[eventName], 'function'); 120 121 if ( !is(element[eventName], 'undefined') ) { 122 element[eventName] = undefined; 123 } 124 element.removeAttribute(eventName); 125 } 126 } 127 128 element = null; 129 return isSupported; 130 } 131 return isEventSupported; 132 })(), 133 134 135 _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp; 136 137 if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) { 138 hasOwnProp = function (object, property) { 139 return _hasOwnProperty.call(object, property); 140 }; 141 } 142 else { 143 hasOwnProp = function (object, property) { 144 return ((property in object) && is(object.constructor.prototype[property], 'undefined')); 145 }; 146 } 147 148 149 if (!Function.prototype.bind) { 150 Function.prototype.bind = function bind(that) { 151 152 var target = this; 153 154 if (typeof target != "function") { 155 throw new TypeError(); 156 } 157 158 var args = slice.call(arguments, 1), 159 bound = function () { 160 161 if (this instanceof bound) { 162 163 var F = function(){}; 164 F.prototype = target.prototype; 165 var self = new F(); 166 167 var result = target.apply( 168 self, 169 args.concat(slice.call(arguments)) 170 ); 171 if (Object(result) === result) { 172 return result; 173 } 174 return self; 175 176 } else { 177 178 return target.apply( 179 that, 180 args.concat(slice.call(arguments)) 181 ); 182 183 } 184 185 }; 186 187 return bound; 188 }; 189 } 190 191 function setCss( str ) { 192 mStyle.cssText = str; 193 } 194 195 function setCssAll( str1, str2 ) { 196 return setCss(prefixes.join(str1 + ';') + ( str2 || '' )); 197 } 198 199 function is( obj, type ) { 200 return typeof obj === type; 201 } 202 203 function contains( str, substr ) { 204 return !!~('' + str).indexOf(substr); 205 } 206 207 function testProps( props, prefixed ) { 208 for ( var i in props ) { 209 var prop = props[i]; 210 if ( !contains(prop, "-") && mStyle[prop] !== undefined ) { 211 return prefixed == 'pfx' ? prop : true; 212 } 213 } 214 return false; 215 } 216 217 function testDOMProps( props, obj, elem ) { 218 for ( var i in props ) { 219 var item = obj[props[i]]; 220 if ( item !== undefined) { 221 222 if (elem === false) return props[i]; 223 224 if (is(item, 'function')){ 225 return item.bind(elem || obj); 226 } 227 228 return item; 229 } 230 } 231 return false; 232 } 233 234 function testPropsAll( prop, prefixed, elem ) { 235 236 var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), 237 props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); 238 239 if(is(prefixed, "string") || is(prefixed, "undefined")) { 240 return testProps(props, prefixed); 241 242 } else { 243 props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); 244 return testDOMProps(props, prefixed, elem); 245 } 246 } tests['flexbox'] = function() { 247 return testPropsAll('flexWrap'); 248 }; tests['canvas'] = function() { 249 var elem = document.createElement('canvas'); 250 return !!(elem.getContext && elem.getContext('2d')); 251 }; 252 253 tests['canvastext'] = function() { 254 return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function')); 255 }; 256 257 258 259 tests['webgl'] = function() { 260 return !!window.WebGLRenderingContext; 261 }; 262 263 264 tests['touch'] = function() { 265 var bool; 266 267 if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { 268 bool = true; 269 } else { 270 injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) { 271 bool = node.offsetTop === 9; 272 }); 273 } 274 275 return bool; 276 }; 277 278 279 280 tests['geolocation'] = function() { 281 return 'geolocation' in navigator; 282 }; 283 284 285 tests['postmessage'] = function() { 286 return !!window.postMessage; 287 }; 288 289 290 tests['websqldatabase'] = function() { 291 return !!window.openDatabase; 292 }; 293 294 tests['indexedDB'] = function() { 295 return !!testPropsAll("indexedDB", window); 296 }; 297 298 tests['hashchange'] = function() { 299 return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7); 300 }; 301 302 tests['history'] = function() { 303 return !!(window.history && history.pushState); 304 }; 305 306 tests['draganddrop'] = function() { 307 var div = document.createElement('div'); 308 return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div); 309 }; 310 311 tests['websockets'] = function() { 312 return 'WebSocket' in window || 'MozWebSocket' in window; 313 }; 314 315 316 tests['rgba'] = function() { 317 setCss('background-color:rgba(150,255,150,.5)'); 318 319 return contains(mStyle.backgroundColor, 'rgba'); 320 }; 321 322 tests['hsla'] = function() { 323 setCss('background-color:hsla(120,40%,100%,.5)'); 324 325 return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla'); 326 }; 327 328 tests['multiplebgs'] = function() { 329 setCss('background:url(https://),url(https://),red url(https://)'); 330 331 return (/(url\s*\(.*?){3}/).test(mStyle.background); 332 }; tests['backgroundsize'] = function() { 333 return testPropsAll('backgroundSize'); 334 }; 335 336 tests['borderimage'] = function() { 337 return testPropsAll('borderImage'); 338 }; 339 340 341 342 tests['borderradius'] = function() { 343 return testPropsAll('borderRadius'); 344 }; 345 346 tests['boxshadow'] = function() { 347 return testPropsAll('boxShadow'); 348 }; 349 350 tests['textshadow'] = function() { 351 return document.createElement('div').style.textShadow === ''; 352 }; 353 354 355 tests['opacity'] = function() { 356 setCssAll('opacity:.55'); 357 358 return (/^0.55$/).test(mStyle.opacity); 359 }; 360 361 362 tests['cssanimations'] = function() { 363 return testPropsAll('animationName'); 364 }; 365 366 367 tests['csscolumns'] = function() { 368 return testPropsAll('columnCount'); 369 }; 370 371 372 tests['cssgradients'] = function() { 373 var str1 = 'background-image:', 374 str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', 375 str3 = 'linear-gradient(left top,#9f9, white);'; 376 377 setCss( 378 (str1 + '-webkit- '.split(' ').join(str2 + str1) + 379 prefixes.join(str3 + str1)).slice(0, -str1.length) 380 ); 381 382 return contains(mStyle.backgroundImage, 'gradient'); 383 }; 384 385 386 tests['cssreflections'] = function() { 387 return testPropsAll('boxReflect'); 388 }; 389 390 391 tests['csstransforms'] = function() { 392 return !!testPropsAll('transform'); 393 }; 394 395 396 tests['csstransforms3d'] = function() { 397 398 var ret = !!testPropsAll('perspective'); 399 400 if ( ret && 'webkitPerspective' in docElement.style ) { 401 402 injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) { 403 ret = node.offsetLeft === 9 && node.offsetHeight === 3; 404 }); 405 } 406 return ret; 407 }; 408 409 410 tests['csstransitions'] = function() { 411 return testPropsAll('transition'); 412 }; 413 414 415 416 tests['fontface'] = function() { 417 var bool; 418 419 injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) { 420 var style = document.getElementById('smodernizr'), 421 sheet = style.sheet || style.styleSheet, 422 cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : ''; 423 424 bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0; 425 }); 426 427 return bool; 428 }; 429 430 tests['generatedcontent'] = function() { 431 var bool; 432 433 injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) { 434 bool = node.offsetHeight >= 3; 435 }); 436 437 return bool; 438 }; 439 tests['video'] = function() { 440 var elem = document.createElement('video'), 441 bool = false; 442 443 try { 444 if ( bool = !!elem.canPlayType ) { 445 bool = new Boolean(bool); 446 bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,''); 447 448 bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,''); 449 450 bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,''); 451 } 452 453 } catch(e) { } 454 455 return bool; 456 }; 457 458 tests['audio'] = function() { 459 var elem = document.createElement('audio'), 460 bool = false; 461 462 try { 463 if ( bool = !!elem.canPlayType ) { 464 bool = new Boolean(bool); 465 bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,''); 466 bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,''); 467 468 bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,''); 469 bool.m4a = ( elem.canPlayType('audio/x-m4a;') || 470 elem.canPlayType('audio/aac;')) .replace(/^no$/,''); 471 } 472 } catch(e) { } 473 474 return bool; 475 }; 476 477 478 tests['localstorage'] = function() { 479 try { 480 localStorage.setItem(mod, mod); 481 localStorage.removeItem(mod); 482 return true; 483 } catch(e) { 484 return false; 485 } 486 }; 487 488 tests['sessionstorage'] = function() { 489 try { 490 sessionStorage.setItem(mod, mod); 491 sessionStorage.removeItem(mod); 492 return true; 493 } catch(e) { 494 return false; 495 } 496 }; 497 498 499 tests['webworkers'] = function() { 500 return !!window.Worker; 501 }; 502 503 504 tests['applicationcache'] = function() { 505 return !!window.applicationCache; 506 }; 507 508 509 tests['svg'] = function() { 510 return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect; 511 }; 512 513 tests['inlinesvg'] = function() { 514 var div = document.createElement('div'); 515 div.innerHTML = '<svg/>'; 516 return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; 517 }; 518 519 tests['smil'] = function() { 520 return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate'))); 521 }; 522 523 524 tests['svgclippaths'] = function() { 525 return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath'))); 526 }; 527 528 function webforms() { 529 Modernizr['input'] = (function( props ) { 530 for ( var i = 0, len = props.length; i < len; i++ ) { 531 attrs[ props[i] ] = !!(props[i] in inputElem); 532 } 533 if (attrs.list){ 534 attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement); 535 } 536 return attrs; 537 })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); 538 Modernizr['inputtypes'] = (function(props) { 539 540 for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) { 541 542 inputElem.setAttribute('type', inputElemType = props[i]); 543 bool = inputElem.type !== 'text'; 544 545 if ( bool ) { 546 547 inputElem.value = smile; 548 inputElem.style.cssText = 'position:absolute;visibility:hidden;'; 549 550 if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { 551 552 docElement.appendChild(inputElem); 553 defaultView = document.defaultView; 554 555 bool = defaultView.getComputedStyle && 556 defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && 557 (inputElem.offsetHeight !== 0); 558 559 docElement.removeChild(inputElem); 560 561 } else if ( /^(search|tel)$/.test(inputElemType) ){ 562 } else if ( /^(url|email)$/.test(inputElemType) ) { 563 bool = inputElem.checkValidity && inputElem.checkValidity() === false; 564 565 } else { 566 bool = inputElem.value != smile; 567 } 568 } 569 570 inputs[ props[i] ] = !!bool; 571 }
572 return inputs; 573 })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); 574 } 575 for ( var feature in tests ) { 576 if ( hasOwnProp(tests, feature) ) { 577 featureName = feature.toLowerCase(); 578 Modernizr[featureName] = tests[feature](); 579 580 classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); 581 } 582 } 583 584 Modernizr.input || webforms(); 585 586 587 Modernizr.addTest = function ( feature, test ) { 588 if ( typeof feature == 'object' ) { 589 for ( var key in feature ) { 590 if ( hasOwnProp( feature, key ) ) { 591 Modernizr.addTest( key, feature[ key ] ); 592 } 593 } 594 } else { 595 596 feature = feature.toLowerCase(); 597 598 if ( Modernizr[feature] !== undefined ) { 599 return Modernizr; 600 } 601 602 test = typeof test == 'function' ? test() : test; 603 604 if (typeof enableClasses !== "undefined" && enableClasses) { 605 docElement.className += ' ' + (test ? '' : 'no-') + feature; 606 } 607 Modernizr[feature] = test; 608 609 } 610 611 return Modernizr; 612 }; 613 614 615 setCss(''); 616 modElem = inputElem = null; 617 618 619 Modernizr._version = version; 620 621 Modernizr._prefixes = prefixes; 622 Modernizr._domPrefixes = domPrefixes; 623 Modernizr._cssomPrefixes = cssomPrefixes; 624 625 626 Modernizr.hasEvent = isEventSupported; 627 628 Modernizr.testProp = function(prop){ 629 return testProps([prop]); 630 }; 631 632 Modernizr.testAllProps = testPropsAll; 633 634 635 Modernizr.testStyles = injectElementWithStyles; 636 Modernizr.prefixed = function(prop, obj, elem){ 637 if(!obj) { 638 return testPropsAll(prop, 'pfx'); 639 } else { 640 return testPropsAll(prop, obj, elem); 641 } 642 }; 643 644 645 docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + 646 647 (enableClasses ? ' js ' + classes.join(' ') : ''); 648 649 return Modernizr; 650 651})(this, this.document); 652/*yepnope1.5.4|WTFPL*/ 653(function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}})(this,document); 654Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0));}; 655;; 656var mrm = { 657 mod: {}, 658 conf: { 659 adaptiveImage: {} 660 }, 661 util: {}, 662 connector: {}, 663 $: jQuery 664}; 665 666// mapping the mrm object to cfs globally - TODO: probably we'll rename that one later 667var cfs = mrm;; 668/*! 669 * jQuery Smart Banner 670 * Copyright (c) 2012 Arnold Daniels <[email protected]> 671 * Based on 'jQuery Smart Web App Banner' by Kurt Zenisek @ kzeni.com 672 */ 673!function ($) { 674 var SmartBanner = function (options) { 675 this.origHtmlMargin = parseFloat($('html').css('margin-top')) // Get the original margin-top of the HTML element so we can take that into account 676 this.options = $.extend({}, $.smartbanner.defaults, options) 677 678 var standalone = navigator.standalone // Check if it's already a standalone web app or running within a webui view of an app (not mobile safari) 679 , UA = navigator.userAgent 680 681 // Detect banner type (iOS or Android) 682 if (this.options.force) { 683 this.type = this.options.force 684 } else if (UA.match(/Windows Phone 8/i) != null && UA.match(/Touch/i) !== null) { 685 this.type = 'windows' 686 } else if (UA.match(/iPhone|iPod/i) != null || (UA.match(/iPad/) && this.options.iOSUniversalApp)) { 687 if (UA.match(/Safari/i) != null && 688 (UA.match(/CriOS/i) != null || 689 window.Number(UA.substr(UA.indexOf('OS ') + 3, 3).replace('_', '.')) < 6)) this.type = 'ios' // Check webview and native smart banner support (iOS 6+) 690 } else if (UA.match(/\bSilk\/(.*\bMobile Safari\b)?/) || UA.match(/\bKF\w/) || UA.match('Kindle Fire')) { 691 this.type = 'kindle' 692 } else if (UA.match(/Android/i) != null) { 693 this.type = 'android' 694 } 695 696 // Don't show banner if device isn't iOS or Android, website is loaded in app or user dismissed banner 697 if (!this.type || standalone || this.getCookie('sb-closed') || this.getCookie('sb-installed')) { 698 return 699 } 700 701 // Calculate scale 702 this.scale = this.options.scale == 'auto' ? $(window).width() / window.screen.width : this.options.scale 703 if (this.scale < 1) this.scale = 1 704 705 // Get info from meta data 706 var meta = $(this.type == 'android' ? 'meta[name="google-play-app"]' : 707 this.type == 'ios' ? 'meta[name="apple-itunes-app"]' : 708 this.type == 'kindle' ? 'meta[name="kindle-fire-app"]' : 'meta[name="msApplication-ID"]'); 709 if (meta.length == 0) return 710 711 // For Windows Store apps, get the PackageFamilyName for protocol launch
712 if (this.type == 'windows') { 713 this.appId = $('meta[name="msApplication-PackageFamilyName"]').attr('content'); 714 } else { 715 // Try to pull the appId out of the meta tag and store the result 716 var parsedMetaContent = /app-id=([^\s,]+)/.exec(meta.attr('content')); 717 718 if(parsedMetaContent) { 719 this.appId = parsedMetaContent[1]; 720 } else { 721 return; 722 } 723 } 724 725 this.title = this.options.title ? this.options.title : meta.data('title') || $('title').text().replace(/\s*[|\-·].*$/, '') 726 this.author = this.options.author ? this.options.author : meta.data('author') || ($('meta[name="author"]').length ? $('meta[name="author"]').attr('content') : window.location.hostname) 727 this.iconUrl = meta.data('icon-url'); 728 this.price = meta.data('price'); 729 730 // Create banner 731 this.create() 732 this.show() 733 this.listen() 734 } 735 736 SmartBanner.prototype = { 737 738 constructor: SmartBanner 739 740 , create: function() { 741 var iconURL 742 , link=(this.options.url ? this.options.url : (this.type == 'windows' ? 'ms-windows-store:navigate?appid=' : (this.type == 'android' ? 'market://details?id=' : (this.type == 'kindle' ? 'amzn://apps/android?asin=' : 'https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id'))) + this.appId) 743 , price = this.price || this.options.price 744 , inStore=price ? price + ' - ' + (this.type == 'android' ? this.options.inGooglePlay : this.type == 'kindle' ? this.options.inAmazonAppStore : this.type == 'ios' ? this.options.inAppStore : this.options.inWindowsStore) : '' 745 , gloss=this.options.iconGloss === null ? (this.type=='ios') : this.options.iconGloss 746 747 if (this.type == 'android' && this.options.GooglePlayParams) { 748 link = link + '&referrer=' + this.options.GooglePlayParams; 749 } 750 751 var banner = '<div id="smartbanner" class="'+this.type+'"><div class="sb-container"><a href="#" class="sb-close">×</a><span class="sb-icon"></span><div class="sb-info"><strong>'+this.title+'</strong><span>'+this.author+'</span><span>'+inStore+'</span></div><a href="'+link+'" class="sb-button"><span>'+this.options.button+'</span></a></div></div>'; 752 (this.options.layer) ? $(this.options.appendToSelector).append(banner) : $(this.options.appendToSelector).prepend(banner); 753 754 if (this.options.icon) { 755 iconURL = this.options.icon 756 } else if(this.iconUrl) { 757 iconURL = this.iconUrl; 758 } else if ($('link[rel="apple-touch-icon-precomposed"]').length > 0) { 759 iconURL = $('link[rel="apple-touch-icon-precomposed"]').attr('href') 760 if (this.options.iconGloss === null) gloss = false 761 } else if ($('link[rel="apple-touch-icon"]').length > 0) { 762 iconURL = $('link[rel="apple-touch-icon"]').attr('href') 763 } else if ($('meta[name="msApplication-TileImage"]').length > 0) { 764 iconURL = $('meta[name="msApplication-TileImage"]').attr('content') 765 } else if ($('meta[name="msapplication-TileImage"]').length > 0) { /* redundant because ms docs show two case usages */ 766 iconURL = $('meta[name="msapplication-TileImage"]').attr('content') 767 } 768 769 if (iconURL) { 770 $('#smartbanner .sb-icon').css('background-image','url('+iconURL+')') 771 if (gloss) $('#smartbanner .sb-icon').addClass('gloss') 772 } else{ 773 $('#smartbanner').addClass('no-icon') 774 } 775 776 this.bannerHeight = $('#smartbanner').outerHeight() + 2 777 778 if (this.scale > 1) { 779 $('#smartbanner') 780 .css('top', parseFloat($('#smartbanner').css('top')) * this.scale) 781 .css('height', parseFloat($('#smartbanner').css('height')) * this.scale) 782 .hide() 783 $('#smartbanner .sb-container') 784 .css('-webkit-transform', 'scale('+this.scale+')') 785 .css('-msie-transform', 'scale('+this.scale+')') 786 .css('-moz-transform', 'scale('+this.scale+')') 787 .css('width', $(window).width() / this.scale) 788 } 789 $('#smartbanner').css('position', (this.options.layer) ? 'absolute' : 'static') 790 } 791 792 , listen: function () { 793 $('#smartbanner .sb-close').on('click',$.proxy(this.close, this)) 794 $('#smartbanner .sb-button').on('click',$.proxy(this.install, this)) 795 } 796 797 , show: function(callback) { 798 var banner = $('#smartbanner'); 799 banner.stop(); 800 801 if (this.options.layer) { 802 banner.animate({top: 0, display: 'block'}, this.options.speedIn).addClass('shown').show(); 803 $(this.pushSelector).animate({paddingTop: this.origHtmlMargin + (this.bannerHeight * this.scale)}, this.options.speedIn, 'swing', callback); 804 } else {
805 if ($.support.transition) { 806 banner.animate({top:0},this.options.speedIn).addClass('shown'); 807 var transitionCallback = function() { 808 $('html').removeClass('sb-animation'); 809 if (callback) { 810 callback(); 811 } 812 }; 813 $(this.pushSelector).addClass('sb-animation').one($.support.transition.end, transitionCallback).emulateTransitionEnd(this.options.speedIn).css('margin-top', this.origHtmlMargin+(this.bannerHeight*this.scale)); 814 } else { 815 banner.slideDown(this.options.speedIn).addClass('shown'); 816 } 817 } 818 } 819 820 , hide: function(callback) { 821 var banner = $('#smartbanner'); 822 banner.stop(); 823 824 if (this.options.layer) { 825 banner.animate({top: -1 * this.bannerHeight * this.scale, display: 'block'}, this.options.speedIn).removeClass('shown'); 826 $(this.pushSelector).animate({paddingTop: this.origHtmlMargin}, this.options.speedIn, 'swing', callback); 827 } else { 828 if ($.support.transition) { 829 if ( this.type !== 'android' ) 830 banner.css('top', -1*this.bannerHeight*this.scale).removeClass('shown'); 831 else 832 banner.css({display:'none'}).removeClass('shown'); 833 var transitionCallback = function() { 834 $('html').removeClass('sb-animation'); 835 if (callback) { 836 callback(); 837 } 838 }; 839 $(this.pushSelector).addClass('sb-animation').one($.support.transition.end, transitionCallback).emulateTransitionEnd(this.options.speedOut).css('margin-top', this.origHtmlMargin); 840 } else { 841 banner.slideUp(this.options.speedOut).removeClass('shown'); 842 } 843 } 844 } 845 846 , close: function(e) { 847 e.preventDefault() 848 this.hide() 849 this.setCookie('sb-closed','true',this.options.daysHidden); 850 } 851 852 , install: function(e) { 853 if (this.options.hideOnInstall) { 854 this.hide() 855 } 856 this.setCookie('sb-installed','true',this.options.daysReminder) 857 } 858 859 , setCookie: function(name, value, exdays) { 860 var exdate = new Date() 861 exdate.setDate(exdate.getDate()+exdays) 862 value=encodeURI(value)+((exdays==null)?'':'; expires='+exdate.toUTCString()) 863 document.cookie=name+'='+value+'; path=/;' 864 } 865 866 , getCookie: function(name) { 867 var i,x,y,ARRcookies = document.cookie.split(";") 868 for(i=0;i<ARRcookies.length;i++) { 869 x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")) 870 y = ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1) 871 x = x.replace(/^\s+|\s+$/g,"") 872 if (x==name) { 873 return decodeURI(y) 874 } 875 } 876 return null 877 } 878 879 // Demo only 880 , switchType: function() { 881 var that = this 882 883 this.hide(function () { 884 that.type = that.type == 'android' ? 'ios' : 'android' 885 var meta = $(that.type == 'android' ? 'meta[name="google-play-app"]' : 'meta[name="apple-itunes-app"]').attr('content') 886 that.appId = /app-id=([^\s,]+)/.exec(meta)[1] 887 888 $('#smartbanner').detach() 889 that.create() 890 that.show() 891 }) 892 } 893 } 894 895 $.smartbanner = function (option) { 896 var $window = $(window) 897 , data = $window.data('smartbanner') 898 , options = typeof option == 'object' && option 899 if (!data) $window.data('smartbanner', (data = new SmartBanner(options))) 900 if (typeof option == 'string') data[option]() 901 } 902 903 // override these globally if you like (they are all optional) 904 $.smartbanner.defaults = { 905 title: null, // What the title of the app should be in the banner (defaults to <title>) 906 author: null, // What the author of the app should be in the banner (defaults to <meta name="author"> or hostname) 907 price: 'FREE', // Price of the app 908 appStoreLanguage: 'us', // Language code for App Store 909 inAppStore: 'On the App Store', // Text of price for iOS 910 inGooglePlay: 'In Google Play', // Text of price for Android 911 inAmazonAppStore: 'In the Amazon Appstore', 912 inWindowsStore: 'In the Windows Store', //Text of price for Windows 913 GooglePlayParams: null, // Aditional parameters for the market 914 icon: null, // The URL of the icon (defaults to <meta name="apple-touch-icon">) 915 iconGloss: null, // Force gloss effect for iOS even for precomposed 916 button: 'VIEW', // Text for the install button 917 url: null, // The URL for the button. Keep null if you want the button to link to the app store. 918 scale: 'auto', // Scale based on viewport size (set to 1 to disable) 919 speedIn: 300, // Show animation speed of the banner 920 speedOut: 400, // Close animation speed of the banner 921 daysHidden: 15, // Duration to hide the banner after being closed (0 = always show banner) 922 daysReminder: 90, // Duration to hide the banner after "VIEW" is clicked *separate from when the close button is clicked* (0 = always show banner) 923 force: null, // Choose 'ios', 'android' or 'windows'. Don't do a browser check, just always show this banner 924 hideOnInstall: true, // Hide the banner after "VIEW" is clicked. 925 layer: false, // Display as overlay layer or slide down the page 926 iOSUniversalApp: true, // If the iOS App is a universal app for both iPad and iPhone, display Smart Banner to iPad users, too. 927 appendToSelector: 'body', //Append the banner to a specific selector 928 pushSelector: 'html' // What element is going to push the site content down; this is where the banner append animation will start. 929 } 930 931 $.smartbanner.Constructor = SmartBanner; 932 933 934 // ============================================================ 935 // Bootstrap transition 936 // Copyright 2011-2014 Twitter, Inc. 937 // Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 938 939 function transitionEnd() { 940 var el = document.createElement('smartbanner') 941 942 var transEndEventNames = { 943 WebkitTransition: 'webkitTransitionEnd', 944 MozTransition: 'transitionend', 945 OTransition: 'oTransitionEnd otransitionend', 946 transition: 'transitionend' 947 } 948 949 for (var name in transEndEventNames) { 950 if (el.style[name] !== undefined) { 951 return {end: transEndEventNames[name]} 952 } 953 } 954 955 return false // explicit for ie8 ( ._.) 956 } 957
958 if ($.support.transition !== undefined) 959 return // Prevent conflict with Twitter Bootstrap 960 961 // http://blog.alexmaccaw.com/css-transitions 962 $.fn.emulateTransitionEnd = function(duration) { 963 var called = false, $el = this 964 $(this).one($.support.transition.end, function() { 965 called = true 966 }) 967 var callback = function() { 968 if (!called) $($el).trigger($.support.transition.end) 969 } 970 setTimeout(callback, duration) 971 return this 972 } 973 974 $(function() { 975 $.support.transition = transitionEnd() 976 }) 977 // ============================================================ 978 979}(window.jQuery); 980; 981mrm.util.adaptiveImage = { 982 983 selectImage: function(id) { 984 985 if (!id) { 986 return; 987 } 988 989 var windowWidth = jQuery(window).width(); // viewport 990 var $imgDiv = jQuery('#' + id); // div.adaptive-image 991 var col = $imgDiv.closest('.col'); // get col size 992 var mod = $imgDiv.closest('.mod'); // get teaser type 993 var imageIndex = ''; 994 var ratio = ''; 995 996 // define ratio 997 if ($imgDiv.hasClass('img-width-small')) { 998 ratio = 'small'; 999 } 1000 if ($imgDiv.hasClass('img-width-medium')) { 1001 ratio = 'medium'; 1002 } 1003 if ($imgDiv.hasClass('img-width-large')) { 1004 ratio = 'large'; 1005 } 1006 1007 // check viewport/col/ratio and apply appropriate image 1008 if (mod.hasClass('mod-DcrmFormat01')) { 1009 1010 // 21:9 1011 if ( 1012 windowWidth > 999 && !(col.hasClass('col-lg-6')) || 1013 windowWidth > 799 && windowWidth < 1000 && (col.hasClass('col-lg-4')) || 1014 windowWidth < 600 1015 ) { 1016 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1017 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_21:9') { 1018 imageIndex = i; 1019 } 1020 } 1021 1022 // 3:4 image ratio = small 1023 } else if ( 1024 windowWidth > 999 && (col.hasClass('col-lg-6')) || 1025 windowWidth > 799 && windowWidth < 1000 && !(col.hasClass('col-lg-4')) || 1026 windowWidth < 800 && (col.hasClass('col-lg-12')) 1027 ) { 1028 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1029 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_3:4') { 1030 imageIndex = i; 1031 } 1032 } 1033 1034 // 1:1 1035 } else { 1036 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1037 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_1:1') { 1038 imageIndex = i; 1039 } 1040 } 1041 } 1042 1043 // update <img/> 1044 mrm.util.adaptiveImage.updateImage(id, imageIndex); 1045 } 1046 1047 // check viewport/col/ratio and apply appropriate image 1048 if (!(mod.hasClass('mod-DcrmFormat01')) && !(mod.hasClass('mod-Teaser01')) || mod.hasClass('mod-Buehne') ) { 1049 1050 // 21:9 1051 if (windowWidth < 800 && !(col.hasClass('col-lg-12')) && mod.hasClass('mod-Teaser02') || 1052 windowWidth < 800 && mod.hasClass('mod-Teaser03') || 1053 windowWidth < 800 && mod.hasClass('mod-Buehne') || 1054 windowWidth < 1000 && (col.hasClass('col-lg-6')) && ratio == 'medium' || 1055 windowWidth < 600 && col.hasClass('col-lg-12')) { 1056 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1057 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_21:9') { 1058 imageIndex = i; 1059 } 1060 } 1061 1062 // 3:4 image ratio = medium 1063 } else if (ratio == 'medium' && windowWidth < 1000 && !(col.hasClass('col-lg-6'))) { 1064 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1065 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_3:4') { 1066 imageIndex = i; 1067 } 1068 } 1069 1070 // 3:4 image ratio = small 1071 } else if (ratio == 'small' && windowWidth < 1000) { 1072 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1073 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_3:4') { 1074 imageIndex = i; 1075 } 1076 } 1077 1078 // bestChoice of default image (they differ in size only) 1079 } else { 1080 var minPossible = 50001; 1081 var currentWidth = $imgDiv.width(); 1082 imageIndex = 2; 1083 var possible = jQuery.grep(mrm.conf.adaptiveImage[id], function(n, i) { 1084 1085 if (n.key == 'default' && n.imgWidth >= currentWidth) { 1086 1087 // get best choice 1088 if (minPossible >= n.imgWidth) { 1089 minPossible = n.imgWidth; 1090 imageIndex = i; 1091 } 1092 } 1093 }); 1094 } 1095 1096 // update <img/> 1097 mrm.util.adaptiveImage.updateImage(id, imageIndex); 1098 1099 // mod-Teaser01: bestChoice of default image (they differ in size only) 1100 } else if (!(mod.hasClass('mod-DcrmFormat01')) 1101 ) { 1102 var minPossible = 50001; 1103 var currentWidth = $imgDiv.width(); 1104 imageIndex = 2; 1105 var possible = jQuery.grep(mrm.conf.adaptiveImage[id], function(n, i) { 1106 1107 if (n.key == 'default' && n.imgWidth >= currentWidth) { 1108 1109 // get best choice 1110 if (minPossible >= n.imgWidth) { 1111 minPossible = n.imgWidth; 1112 imageIndex = i; 1113 } 1114 } 1115 }); 1116 1117 // update <img/> 1118 mrm.util.adaptiveImage.updateImage(id, imageIndex); 1119 } 1120 1121 // promotion: check viewport and apply appropriate image 1122 if (mod.hasClass('mod-Promotion') && mod.hasClass('pr-01')) { 1123 1124 // 1:1 1125 if (windowWidth < 600) { 1126 for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) { 1127 if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_1:1') { 1128 imageIndex = i; 1129 } 1130 } 1131 1132 // bestChoice of default image (they differ in size only) 1133 } else { 1134 var minPossible = 50001; 1135 var currentWidth = $imgDiv.width(); 1136 imageIndex = 2; 1137 var possible = jQuery.grep(mrm.conf.adaptiveImage[id], function(n, i) { 1138 1139 if (n.key == 'default' && n.imgWidth >= currentWidth) { 1140 1141 // get best choice 1142 if (minPossible >= n.imgWidth) { 1143 minPossible = n.imgWidth; 1144 imageIndex = i; 1145 } 1146 } 1147 }); 1148 } 1149 1150 // update <img/> 1151 mrm.util.adaptiveImage.updateImage(id, imageIndex); 1152 } 1153 }, 1154 1155 updateImage: function(id, index) { 1156 var attached = true; 1157 var $img = jQuery('#'+id).find('img'); 1158 var data = mrm.conf.adaptiveImage[id][index]; 1159 1160 if( !$img.length ) { 1161 attached = false;
1162 $img = jQuery( '<img/>' ); 1163 } 1164 1165 $img 1166 .attr( { 1167 /*alt: data.imgAlt, 1168 title: data.imgTitle,*/ 1169 width: data.imgWidth, 1170 height: data.imgHeight, 1171 src: data.url 1172 } ); 1173 1174 if( !attached ) { 1175 $img.appendTo('#' + id); 1176 } 1177 } 1178 1179} 1180; 1181/* define namespace */ 1182var cSmartBanner = cSmartBanner || {}; 1183 1184 1185 1186 1187var smartbannerParameter = { 1188"7210987_cbknowledgeloungeapp" : { 1189} 1190, 1191"7210987_cb_deutschland" : { 1192"de" : 1193{ 1194"bannerDaysHidden" : 90, 1195"bannerDaysReminder" : 90, 1196"appStoreLanguage" : "de", 1197"appPrice" : "Gratis", 1198"appAuthor" : "Commerzbank AG", 1199"appStoreLanguage" : "de", 1200"iTunesStoreName" : "App Store", 1201"appTitle" : "Commerzbank AG", 1202"androidStoreName" : "Google Play Store", 1203"buttonText" : "downloaden", 1204"androidPhoneTitle" : "Commerzbank Cash Management App", "androidPhoneIcon" : "/portal/media/system/images/smartbanner/Icon_CM_App.png", 1205"androidTabTitle" : "", 1206"androidTabIcon" : "" 1207} 1208, 1209"en" : 1210{ 1211"bannerDaysHidden" : 90, 1212"bannerDaysReminder" : 90, 1213"appStoreLanguage" : "en", 1214"appPrice" : "Free", 1215"appAuthor" : "Commerzbank AG", 1216"appStoreLanguage" : "en", 1217"iTunesStoreName" : "App Store", 1218"appTitle" : "Commerzbank AG", 1219"androidStoreName" : "Play Store", 1220"buttonText" : "download now", 1221"androidPhoneTitle" : "Commerzbank Cash Management App", "androidPhoneIcon" : "/portal/media/system/images/smartbanner/Icon_CM_App.png", 1222"androidTabTitle" : "Commerzbank Tablet Banking", 1223"androidTabIcon" : "/portal/media/system/images/smartbanner/android_tablet_app_icon.png" 1224} 1225} 1226} 1227 1228 /* default locale */ 1229 var actualLang = "de"; 1230 if( jQuery('html').attr('lang') ) { 1231 actualLang = jQuery('html').attr('lang').substring(0, 2).toLowerCase(); 1232 } 1233 /* ipad banner */ 1234 window.setBannerTags = (function( window, document, undefined ) { 1235 /* ua iphone is default and will be rendered directly via framework properties from cif, therefore only ipad is relevant.. */ 1236 var userAgent = navigator.userAgent.toLowerCase(); 1237 var isIpad = userAgent.search("ipad") != -1; 1238 if (smartbannerParameter != undefined && (isIpad || (userAgent.search("android") != -1 && userAgent.search("mobile") == -1))){ 1239 /* get ios or android store meta tag.. */ 1240 var metaTag = isIpad ? jQuery("meta[name=apple-itunes-app]") : jQuery("meta[name=google-play-app]"); 1241 /* if smartbanner configuration exists and ios/android meta tag exists */ 1242 if(metaTag != undefined){ 1243 /* get the section id from the meta tag to identify the right smartbanner configuration */ 1244 var configurationSectionId = metaTag.attr("data-smartbanner-id"); 1245 /* extract the app-id */ 1246 if(configurationSectionId != undefined && smartbannerParameter[configurationSectionId] != undefined && smartbannerParameter[configurationSectionId][actualLang] != undefined){ 1247 var appId = smartbannerParameter[configurationSectionId][actualLang][isIpad?'iTunesTabContentVal':'androidTabID']; 1248 /* check if the app-id is part of the smartbanner configuration */ 1249 if(appId != undefined){ 1250 metaTag.attr("content", appId); 1251 } 1252 } 1253 } 1254 } 1255 })(this, this.document); 1256 1257 /* initialize smartbanner */ 1258 jQuery(function() { 1259 // if smartbanner configuration exists and we got an phone/tablet.. 1260 var userAgent = navigator.userAgent.toLowerCase(); 1261 var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(userAgent)); 1262 var isIOS = userAgent.search("ipad") != -1 || userAgent.search("iphone") != -1; 1263 var metaTag = isIOS ? jQuery("meta[name=apple-itunes-app]") : jQuery("meta[name=google-play-app]"); 1264 if (mobile && smartbannerParameter != undefined && metaTag != undefined){ 1265 var configurationSectionId = metaTag.attr("data-smartbanner-id"); 1266 if(smartbannerParameter[configurationSectionId] != undefined && smartbannerParameter[configurationSectionId][actualLang] != undefined){ 1267 /* initialize the smartbanner with the CMS configuration */ 1268 var bannerParameter = smartbannerParameter[configurationSectionId][actualLang]; 1269 /* use the author instead of an title for iOS, will be overwritten for android.. */ 1270 appTitle = bannerParameter['appAuthor']; 1271 var appIcon; 1272 if(!isIOS){
1273 appTitle = userAgent.search("mobile") == -1 ? bannerParameter['androidTabTitle'] : bannerParameter['androidPhoneTitle'] 1274 appIcon = userAgent.search("mobile") == -1 ? bannerParameter['androidTabIcon'] : bannerParameter['androidPhoneIcon'] 1275 } 1276 jQuery.smartbanner({ 1277 title : appTitle, 1278 author : bannerParameter['appAuthor'], 1279 appStoreLanguage : bannerParameter['appStoreLanguage'], 1280 icon : appIcon, 1281 daysHidden : bannerParameter['bannerDaysHidden'], 1282 daysReminder : bannerParameter['bannerDaysReminder'], 1283 inAppStore : bannerParameter['iTunesStoreName'], 1284 inGooglePlay : bannerParameter['androidStoreName'], 1285 price : bannerParameter['appPrice'], 1286 button : bannerParameter['buttonText'] 1287 }); 1288 } 1289 } 1290 }); 1291
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.