Created
September 24, 2013 06:57
-
-
Save codecandies/6681214 to your computer and use it in GitHub Desktop.
The parts of the ZEIT-Library responsible for mobile redirecting.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
window.myagent = navigator.userAgent||navigator.vendor||window.opera; | |
window.is_mobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(window.myagent)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(window.myagent.substr(0,4)); | |
/* the ZEIT namespace */ | |
var ZEIT = function() { | |
return { | |
cookieCreate: function (name,value,days, domain) { | |
if(arguments.length < 4) domain = "zeit.de"; | |
var expires = ""; | |
if (days) { | |
var date = new Date(); | |
date.setTime(date.getTime()+(days*24*60*60*1000)); | |
expires = "; expires="+date.toGMTString(); | |
} | |
document.cookie = name+"="+value+expires+"; path=/; domain="+domain; | |
}, | |
cookieRead: function (name) { | |
var nameEQ = name + "="; | |
var ca = document.cookie.split(';'); | |
for(var i=0;i < ca.length;i++) { | |
var c = ca[i]; | |
while (c.charAt(0)==' ') c = c.substring(1,c.length); | |
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length); | |
} | |
return null; | |
}, | |
cookieErase: function (name) { | |
ZEIT.cookieCreate(name,"",-1); | |
}, | |
cookieSearchName: function (partofname) { | |
var ca = document.cookie.split(';'); | |
for(var i=0;i < ca.length;i++) { | |
var c = ca[i]; | |
while (c.charAt(0)==' ') c = c.substring(1,c.length); | |
c = c.split("="); | |
if(c[0].indexOf(partofname) > -1) return c[0]; | |
} | |
return null; | |
}, | |
mobileRedirect: function() { | |
// alternative mobile address may defined in head of document | |
var mobile_alternative = jQuery( "head > meta[ property = 'zeit:mobile_alternative' ]" ).attr( "value" ); | |
if ( location.href.indexOf( ZEIT.stripTrailingSlash(mobile_alternative) ) != -1 ) { | |
// matched the mobile_alternative, bumping out of redirect | |
return; | |
} | |
// redirection from mobile.zeit.de with param mobile=false | |
if( ZEIT.getQueryVar("mobile") == "false" ) { | |
ZEIT.cookieCreate('ZEITmobile', 'www', (1/24/3), 'zeit.de'); // cookieCreate expects a *day* as 3rd parameter, to get 20 minutes, first divide by 24 to get 1 hour, then divide by 3 | |
return; | |
} | |
/* | |
the ':8080/preview' in the regex shall allow for local testing via /etc/hosts modification | |
just let 127.0.0.1 point to www.zeit.de in your /etc/hosts and you are able to test | |
mobile redirects way easier | |
*/ | |
var lhome = /(www\.)?zeit.de(\:8080\/preview)?\/index/gi, // homepage | |
lprint = /(www\.)?zeit.de(:8080\/preview)?\/\d{4}\/\d{2}\/[^(index)]+/gi, // print articles | |
lressort = /(www\.)?zeit.de(:8080\/preview)?\/(politik|wirtschaft|meinung|gesellschaft|kultur|wissen|digital|studium|karriere|lebensart|reisen|auto|mobilitaet|sport)\/(.+)/gi, // all other cp and articles | |
// content of the mobile cookie | |
direction = ZEIT.cookieRead('ZEITmobile'), | |
// text to display in alertbox | |
confirmtext = 'Wollen Sie zur mobilen Version dieser Seite wechseln?'; | |
if( mobile_alternative || lhome.test(location.href) || lprint.test(location.href) || lressort.test(location.href) ) { | |
switch( direction ) { | |
case 'www': | |
// wants desktop, do nothing | |
return false; | |
case 'mobile': | |
// wants mobile, redirect | |
if ( mobile_alternative ) { | |
// redirecting to mobile alternative | |
window.location.href = mobile_alternative; | |
} else { | |
ZEIT.redirect('http://mobil.zeit.de/'); | |
} | |
break; | |
default: | |
// don't know? ask for it¦ | |
if( !confirm(confirmtext) ) { | |
// exit to desktop page, save in cookie for 7 days | |
ZEIT.cookieCreate( 'ZEITmobile', 'www', 7, 'zeit.de' ); | |
return false; | |
} else { | |
// ok, go mobile, save in cookie for 7 days | |
ZEIT.cookieCreate( 'ZEITmobile', 'mobile', 7, 'zeit.de' ); | |
if ( mobile_alternative ) { | |
window.location.href = mobile_alternative; | |
} else { | |
ZEIT.redirect('http://mobil.zeit.de/'); | |
} | |
} | |
} | |
} | |
}, | |
redirect: function(target) { | |
try { | |
var r = /http:\/\/(www\.)?zeit.de(?:\:8080\/preview)?\/(.*)/gi, | |
d = r.exec(document.location.href); | |
if(d) location.href = target + d[2]; | |
} catch(e) { | |
console.error("redirect fail", e); | |
} | |
}, | |
stripTrailingSlash: function(str) { | |
if( typeof str !== "undefined" && str.substr( str.length -1 ) == '/' ) { | |
return str.substr( 0, str.length - 1 ); | |
} | |
return str; | |
} | |
}; | |
}(); | |
if( is_mobile ) { | |
if(myagent.search(/opera/gi) > -1) { | |
// opera mobile needs an onload event | |
jQuery(document).ready(function(){ | |
ZEIT.mobileRedirect(); | |
}); | |
} else { | |
ZEIT.mobileRedirect(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment