Extension:MobileFrontend

From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manual - list
Crystal Clear action run.png
MobileFrontend

Release status: stable

Description Provides a mobile-friendly view
Author(s) Patrick Reilly, Max Semenik, Jon Robson, Arthur Richards, Brion Vibber, Juliusz Gonera
MediaWiki 1.22+
PHP 5.3+
License GPL v2 or later
Download
Hooks used
RequestContextCreateSkin

BeforePageRedirect
SkinTemplateOutputPageBeforeExec
TestCanonicalRedirect
ResourceLoaderTestModules
GetCacheVaryCookies
ResourceLoaderRegisterModules
APIGetAllowedParams
APIAfterExecute
APIGetParamDescription
APIGetDescription
UnitTestsList
GetBetaFeaturePreferences

Translate the MobileFrontend extension if possible

Check usage and version matrix; code metrics
Bugs: list open list all report

The MobileFrontend extension provides a mobile-friendly view.

Download[edit | edit source]

You can download the extension directly from the MediaWiki source code repository (browse code). You can get:

One of the extensions tags

Not all extensions have tags. Some extensions have tags for each release, in which case those tags have the same stability as the release. To download a tag

  • Go to the tags list
  • Click the name of the tag you want to download
  • Click "snapshot"
The latest version of one of the extensions branches

Each extension has a master branch containing the latest code (might be unstable). Extensions can have further branches as well.

  • Go to the branches list
  • Click the branch name
  • Click "snapshot"
A snapshot made during the release of a MediaWiki version.

This might be unstable and is not guaranteed to work with the associated MediaWiki version.

After you've got the code, save it into the extensions/MobileFrontend directory of your wiki.

If you are familiar with git and have shell access to your server, you can obtain the extension, with all its tags and branches, as follows:

cd extensions
git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/MobileFrontend.git

Installation[edit | edit source]

  • Download and extract the files in a directory called MobileFrontend in your extensions/ folder. If you're a developer and this extension is in a Git repository, then instead you should clone the repository.
  • Add the following code at the bottom of your LocalSettings.php:
require_once( "$IP/extensions/MobileFrontend/MobileFrontend.php" );
$wgMFAutodetectMobileView = true;
  • Done! Navigate to "Special:Version" on your wiki to verify that the extension is successfully installed.

Prerequisites[edit | edit source]

Although MediaWiki doesn't require it, PHP must have mbstring support for this extension to work (bug 60174).

Configuration settings[edit | edit source]

The following variables can be defined in LocalSettings.php after calling require_once "$IP/extensions/MobileFrontend/MobileFrontend.php";. Note that for a simple site adding $wgMFAutodetectMobileView = true; might be all you need to make it Just Work.

Setting name Default value Description
$wgMFPhotoUploadEndpoint '' URL of MediaWiki API entry point to which upload images. If it's an empty string, upload locally.
$wgMFPhotoUploadWiki null ID/database name of the wiki with uploaded images. If null, use local database.
$wgMobileFrontendLogo false, defaults to $wgExtensionAssetsPath . '/MobileFrontend/stylesheets/images/mw.png' URL to the logo used in the mobile view. Should be 35 × 22 px.
$wgMobileUrlTemplate '' Template used to transcode regular URLs into mobile URLs (optional, and probably an overkill for low-traffic sites). Can either be set as a static domain (eg 'mobile.mydomain.com'), or can use a template based off the host portion of your desktop domain. The token '%h0' represents the first portion of the hostname, '%h1' the second, and so on. For example, to achieve http://en.m.wikipedia.org from http://en.wikipedia.org, you would use: %h0.m.%h1.%h2
$wgMFRemovableClasses array() Make the classes, tags and IDs stripped from page content configurable. Each item will be stripped from the page. The extension adds some classes by default.
$wgMFCustomLogos array( array() ) Makes the logos configurable. Example: array( 'site' => 'mysite', 'copyright' => 'img.jpg' ) Note that 'copyright' controls the image shown in the footer of the mobile page.
$wgMFExtendOpenSearchXml false Whether this extension should provide its excerpts to OpenSearchXml extension
$wgMobileFrontendFormatCookieExpiry null The number of seconds the 'useformat' cookie should be valid (used to keep you on mobile or desktop view of site when manually toggling between the two). If unset, defaults to $wgCookieExpiration.
$wgMFRemotePostFeedback

$wgMFRemotePostFeedbackUrl $wgMFRemotePostFeedbackUsername $wgMFRemotePostFeedbackPassword $wgMFRemotePostFeedbackArticle

$wgMFRemotePostFeedback = true;

$wgMFRemotePostFeedbackUrl = 'http://www.mediawiki.org/w/api.php'; $wgMFRemotePostFeedbackUsername = 'username'; $wgMFRemotePostFeedbackPassword = 'password'; $wgMFRemotePostFeedbackArticle = 'ArticleNameForResults';

Configure the contact us page on the mobile site
$wgMFAutodetectMobileView false Whether or not the MobileFrontend extension autodetects devices for mobile view on its own, rather than using detection at the proxy/webserver layer, or using third party tools like Apache AMF. Depending on your setup, this is probably the easiest method of device detection, though least performant.

If this option is set to true file cache must be disabled by setting $wgUseFileCache to false (otherwise autodetection won't be reliable due to cached copies being shown).

$wgMFNearby false Whether geodata related functionality should be enabled, such as Special:Nearby. Requires GeoData extension.

Configuring mobile browser auto detection[edit | edit source]

See /Configuring browser auto-detection

Configuring the main page[edit | edit source]

By default, the Main Page on the mobile site is disabled.

The Main Page is rendered via 2 rules:

  • A selector that is prefixed with mf- will be added to the mobile main page for any project. Any title attributes set on these elements will be promoted into a heading before the section. A title attribute is optional.
  • Any element with the class 'nomobile' will not show on mobile.

For example:

<div id="mf-blog" title="Wikimedia Blog">Hello</div>

would create a section named Wikimedia Blog with the text 'Hello'.

Quick how to[edit | edit source]

Add <div id="mf-home"> at the top of the wikitext and add </div> at the bottom. Refresh the mobile site. Now you can either adjust your styling to be mobile friendly or you can hide parts of the homepage by adding class="nomobile" to the elements you do not want to show.

A more complete set of instructions can be found here.

More information[edit | edit source]

If you would like to test the mobile extension on a desktop browser or your device doesn't render the mobile version, you can append the following key-value pair to the query string: useformat=mobile e.g., https://en.wikipedia.org/wiki/Chuck_Schuldiner?useformat=mobile

If you would like to see the wap version of the mobile extension, use ?useformat=mobile-wap instead.

If you would like to view a page in the beta without enabling it across the entire site you can append to the query string of any page ?mobileaction=beta

If you would like to force your wiki to always display in mobile view, add the following to your LocalSettings.php:

MobileContext::singleton()->setForceMobileView( true );

API[edit | edit source]

Extended action=parse[edit | edit source]

Warning Warning: mobileformat parameter calling style have changed and current usage will be deprecated. See https://lists.wikimedia.org/pipermail/mediawiki-api/2013-October/003131.html for details.

action=parse receives the following extra parameters:

mobileformat={html|wml}
Return rendered page in a mobile format, HTML for modern phones or WML for dumb phones.
noimages
Disable images in mobile output.
mainpage
Apply mobile main page transformations.

Example:

api.php?action=parse&page=Therion_(band)&mobileformat=html&prop=text&format=json


{
"parse": {
"title": "Therion (band)",
"text": "\n<table class=\"metadata plainlinks ambox ambox-style ambox-Copy_edit\" style=\"\"><tr>\n<td class=\"mbox-image\">\n<div style=\"width: 52px;\"><img alt=\"\" src=\"\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/5\/52\/Acap.svg\/36px-Acap.svg.png\" width=\"36\" height=\"40\"><\/div>\n<\/td>\n<td class=\"mbox-text\" style=\"\">

. . .

action=mobileview[edit | edit source]

Delivers content optimized for mobile devices for use by mobile apps and dynamic section views. Almost like a restricted-functionality action=parse, but more flexible and returns separate sections that are always obtained from full-page parse.

Parameters:

page
Title of page to process.
sections
Pipe-separated list of section numbers for which to return text or all for all sections.
redirect
Whether redirects should be followed, yes (default) or no. This parameter is intentionally made similar to the one to index.php.
prop
Which information to get:
  • text: HTML of selected section(s)
  • sections: Information about all sections on page
  • normalizedtitle: Normalized page title, will be returned only if it differs from the specified one.
sectionprop
What information about sections to get: pipe-separated list of value types defined by parser. It's the same as in action=parse: toclevel, level, line, number, index, fromtitle, anchor. "byteoffset" has been excluded as it makes no sense for this action.
noimages
Return HTML without images.
noheadings
Return HTML without headings.

Returned section information also includes the id for every section - its zero-based number; and for sections that contains references added by Extension:Cite, there's also references data member.

Examples:

{
	"mobileview": {
		"sections": [
			{
				"id": 0,
				"text": "<div id=\"content\"><p>Hi<sup id=\"cite_ref-0\" class=\"reference\"><a href=\"#cite_note-0\">[1]<\/a><\/sup><\/p></div>\n"
			},
			{
				"toclevel": 1,
				"line": "This is first section",
				"id": 1
			},
			{
				"toclevel": 2,
				"line": "This is nested section",
				"id": 2
			},
			{
				"toclevel": 1,
				"line": "References",
				"id": 3,
				"references": ""
			}
		]
	}
}

Same request for XML: api.php?action=mobileview&page=Extension:MobileFrontend/Example&sections=0&prop=text|sections&format=xml

<?xml version="1.0"?>
<api>
  <mobileview>
    <sections>
      <section id="0" xml:space="preserve">&lt;div id=&quot;content&quot;&gt;&lt;p&gt;Hi&lt;sup id=&quot;cite_ref-0&quot; class=&quot;reference&quot;&gt;&lt;a href=&quot;#cite_note-0&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
</section>
      <section toclevel="1" line="This is first section" id="1" />
      <section toclevel="2" line="This is nested section" id="2" />
      <section toclevel="1" line="References" id="3" references="" />
    </sections>
  </mobileview>
</api>

prop=extracts[edit | edit source]

Migrated to Extension:TextExtracts

Using the mobile view[edit | edit source]

WMF sites[edit | edit source]

On Wikimedia Foundation-run sites, we use Varnish caching servers to check the user agent of your device. If your user agent appears to be coming from a mobile device, the Varnish servers will set an appropriate 'X-Device' header for your request, and you will be redirected to the MobileFrontend version of an article. Alternatively, you can click 'Mobile view' in the footer of an article or append "useformat=mobile" to the query string to view an article in the mobile view.

Example:

Varnish server vcl config for X-Device

sub vcl_recv {
set req.http.X-Device = req.http.User-Agent;
}

If you are viewing the mobile version of article but wish to see the desktop-version of that article, you can click 'View this article on regular <SITENAME>' to switch back.

If you want to permanently disable the mobile view for your web browser, you can click 'Permanently disable mobile site', which will set a cookie instructing the WMF servers to always display the desktop version of the site.

Non-WMF sites[edit | edit source]

For non-WMF sites, you can either set up your configuration to mimic how things are done at the WMF (doing device detection at the proxy layer and setting specific X-Device headers), or you can simply use "?useformat=mobile" to switch an article to use the mobile view.