Partial implementation for ticket #2442: MobileProfile plugin should allow manual switching between regular and mobile rendering modes

http://status.net/open-source/issues/2442

Notes:
* Mapstraction causes JavaScript errors in XHTML mode, breaking our code if we're run later so the link doesn't work to get back to Desktop.
* not 100% sure how safe feature detection is here?
* Currently will be useless but visible links if no JS available; need to fall back to server-side for limited browsers
This commit is contained in:
Brion Vibber 2011-02-21 16:10:07 -08:00
parent f3c822cc15
commit 2a42dac72a
2 changed files with 40 additions and 3 deletions

View File

@ -854,8 +854,11 @@ class Action extends HTMLOutputter // lawsuit
function showFooter() function showFooter()
{ {
$this->elementStart('div', array('id' => 'footer')); $this->elementStart('div', array('id' => 'footer'));
$this->showSecondaryNav(); if (Event::handle('StartShowInsideFooter', array($this))) {
$this->showLicenses(); $this->showSecondaryNav();
$this->showLicenses();
Event::handle('EndShowInsideFooter', array($this));
}
$this->elementEnd('div'); $this->elementEnd('div');
} }

View File

@ -68,6 +68,9 @@ class MobileProfilePlugin extends WAP20Plugin
$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) { $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) {
$this->serveMobile = true; $this->serveMobile = true;
} else if (isset($_COOKIE['MobileOverride'])) {
// Cookie override is controlled by link at bottom.
$this->serveMobile = (bool)$_COOKIE['MobileOverride'];
} else { } else {
// If they like the WAP 2.0 mimetype, serve them MP // If they like the WAP 2.0 mimetype, serve them MP
// @fixme $type is undefined, making this if case useless and spewing errors. // @fixme $type is undefined, making this if case useless and spewing errors.
@ -381,9 +384,40 @@ class MobileProfilePlugin extends WAP20Plugin
} }
} }
function onStartShowScripts($action) function onEndShowScripts($action)
{ {
$action->inlineScript('
$(function() {
$("#mobile-toggle-disable").click(function() {
$.cookie("MobileOverride", "0", {path: "/"});
window.location.reload();
return false;
});
$("#mobile-toggle-enable").click(function() {
$.cookie("MobileOverride", "1", {path: "/"});
window.location.reload();
return false;
});
});'
);
}
function onEndShowInsideFooter($action)
{
if ($this->serveMobile) {
// TRANS: Link to switch site layout from mobile to desktop mode. Appears at very bottom of page.
$linkText = _m('Switch to desktop site layout.');
$key = 'mobile-toggle-disable';
} else {
// TRANS: Link to switch site layout from desktop to mobile mode. Appears at very bottom of page.
$linkText = _m('Switch to mobile site layout.');
$key = 'mobile-toggle-enable';
}
$action->elementStart('p');
$action->element('a', array('href' => '#', 'id' => $key), $linkText);
$action->elementEnd('p');
return true;
} }
function _common_path($relative, $ssl=false) function _common_path($relative, $ssl=false)