浏览代码

Add mobile device detection to project. Improved Messages app when used on a mobile device.

Nate 6 年之前
父节点
当前提交
1980539c4f

+ 29 - 2
resources/functions.php

@@ -1940,7 +1940,7 @@ function number_pad($number,$n) {
 		//return htmlentities($string, ENT_QUOTES, 'UTF-8');
 	}
 
-// output pre-formatted array keys and values
+//output pre-formatted array keys and values
 	if (!function_exists('view_array')) {
 		function view_array($array, $exit = true) {
 			echo '<br><pre>'.print_r($array, true).'</pre><br>';
@@ -1948,7 +1948,7 @@ function number_pad($number,$n) {
 		}
 	}
 
-// format db date and/or time to local date and/or time
+//format db date and/or time to local date and/or time
 	if (!function_exists('format_when_local')) {
 		function format_when_local($when, $format = 'dt', $include_seconds = false) {
 			if ($when != '') {
@@ -2004,4 +2004,31 @@ function number_pad($number,$n) {
 		}
 	}
 
+//mobile device detection
+	require_once 'resources/mobile-detect/Mobile_Detect.php';
+	if (!function_exists('is_mobile')) {
+		function is_mobile() {
+			$detect = new Mobile_Detect;
+			return $detect->isMobile();
+		}
+	}
+	if (!function_exists('is_tablet')) {
+		function is_tablet() {
+			$detect = new Mobile_Detect;
+			return $detect->isTablet();
+		}
+	}
+	if (!function_exists('is_ios')) {
+		function is_ios() {
+			$detect = new Mobile_Detect;
+			return $detect->isiOS();
+		}
+	}
+	if (!function_exists('is_android')) {
+		function is_android() {
+			$detect = new Mobile_Detect;
+			return $detect->isAndroidOS();
+		}
+	}
+
 ?>

+ 48 - 0
resources/mobile-detect/LICENSE.txt

@@ -0,0 +1,48 @@
+MIT License
+
+Copyright (c) <2011-2015> Serban Ghita, Nick Ilyin and contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Developer’s Certificate of Origin 1.1
+
+By making a contribution to this project, I certify that:
+
+(a) The contribution was created in whole or in part by me and I
+    have the right to submit it under the open source license
+    indicated in the file; or
+
+(b) The contribution is based upon previous work that, to the best
+    of my knowledge, is covered under an appropriate open source
+    license and I have the right under that license to submit that
+    work with modifications, whether created in whole or in part
+    by me, under the same open source license (unless I am
+    permitted to submit under a different license), as indicated
+    in the file; or
+
+(c) The contribution was provided directly to me by some other
+    person who certified (a), (b) or (c) and I have not modified
+    it.
+
+(d) I understand and agree that this project and the contribution
+    are public and that a record of the contribution (including all
+    personal information I submit with it, including my sign-off) is
+    maintained indefinitely and may be redistributed consistent with
+    this project or the open source license(s) involved.

文件差异内容过多而无法显示
+ 0 - 0
resources/mobile-detect/Mobile_Detect.json


文件差异内容过多而无法显示
+ 172 - 0
resources/mobile-detect/Mobile_Detect.php


+ 344 - 0
resources/mobile-detect/README.md

@@ -0,0 +1,344 @@
+![Mobile Detect](http://demo.mobiledetect.net/logo-github.png)
+
+> Motto: "Every business should have a detection script to detect mobile readers."
+
+[![Build Status](https://travis-ci.org/serbanghita/Mobile-Detect.svg?branch=devel)](https://travis-ci.org/serbanghita/Mobile-Detect) 
+[![Latest Stable Version](https://poser.pugx.org/mobiledetect/mobiledetectlib/v/stable.svg)](https://packagist.org/packages/mobiledetect/mobiledetectlib) 
+[![Total Downloads](https://poser.pugx.org/mobiledetect/mobiledetectlib/downloads.svg)](https://packagist.org/packages/mobiledetect/mobiledetectlib) 
+[![Daily Downloads](https://poser.pugx.org/mobiledetect/mobiledetectlib/d/daily.png)](https://packagist.org/packages/mobiledetect/mobiledetectlib) 
+[![License](https://poser.pugx.org/mobiledetect/mobiledetectlib/license.svg)](https://packagist.org/packages/mobiledetect/mobiledetectlib)
+[![Chat on Slack](https://img.shields.io/badge/Slack%20%23general-join-orange.svg)](https://join.slack.com/t/mobiledetect/shared_invite/enQtMjg1NDY0OTg5NzgzLTcwMzEzMWJjZjRlOWFkY2ZiNzE1ZmRmNzEwM2VhOGY5OGVkYWMxNjdkZDU5YjQ5MmM5MGUxYjhlZDQwOGVjZjE)
+
+#### About
+
+Mobile Detect is a lightweight PHP class for detecting mobile devices (including tablets).
+It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
+
+*Why*
+
+Your website's _content strategy_ is important! You need a complete toolkit to deliver an experience that is _optimized_, 
+_fast_ and _relevant_ to your users. Mobile Detect class is a 
+[server-side detection](http://www.w3.org/TR/mwabp/#bp-devcap-detection) tool that can help you with your RWD strategy, 
+it is not a replacement for CSS3 media queries or other forms of client-side feature detection.
+
+*How*
+
+We're committed to make Mobile_Detect the best open-source mobile detection resource and this is why before 
+each release we're running [unit tests](./tests) and research and update the detection rules on **monthly** basis.
+
+*Who*
+
+See [the history](./docs/HISTORY.md) of the project.
+
+#### Announcements
+
+* **JetBrains** is sponsoring the project by providing licenses for [PHPStorm](https://www.jetbrains.com/phpstorm/) and 
+[DataGrip](https://www.jetbrains.com/datagrip/).
+* **Mobile_Detect `2.x.x`** is only integrating new regexes, User-Agents and tests. We are focusing on **new tablets only**. 
+The rest of the PRs about TVs, bots or optimizations will be closed and analyzed after `3.0.0-beta` is released.
+* **Mobile_Detect `3.x.x`** is experimental and WIP.
+
+
+#### Install
+
+**Download and include manually**
+> Use this to quickly test the demo.
+
+* [Download latest release](../../tags)
+* [Mobile_Detect.php](./Mobile_Detect.php)
+
+```php
+require_once "libs/Mobile_Detect.php";
+```
+
+**Install as a [composer package](https://packagist.org/packages/mobiledetect/mobiledetectlib)**
+> Use this method to get continuous updates.
+
+```
+composer require mobiledetect/mobiledetectlib
+```
+or include the dependency in the `composer.json` file:
+```json
+{
+    "require": {
+        "mobiledetect/mobiledetectlib": "^2.8"
+    }
+}
+```
+
+#### Demo 
+
+* [:iphone: Live demo!](http://demo.mobiledetect.net)
+* [Code examples](../../wiki/Code-examples)
+
+#### Contribute
+
+*Submit a PR*
+> Submit a pull request but before make sure you read [how to contribute](docs/CONTRIBUTING.md) guide.
+
+*Donate*
+
+|Paypal|
+|------|
+|[Donate :+1:](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mobiledetectlib%40gmail%2ecom&lc=US&item_name=Mobile%20Detect&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted)|
+
+
+I'm currently paying for hosting and spend a lot of my family time to maintain the project and planning the future releases.
+I would highly appreciate any money donations that will keep the research going.
+
+Special thanks to the community :+1: for donations, JetBrains team for the continuous support and [Dragos Gavrila](https://twitter.com/grafician) who contributed with the logo.
+
+#### Modules, plugins, ports
+> [Submit new module, plugin, port](../../issues/new?title=New%203rd%20party%20module&body=Name,%20Link%20and%20Description%20of%20the%20module.)
+
+:point_right: Keep `Mobile_Detect.php` class in a separate `module` and do NOT include it in your script core because of the high frequency of updates.
+:point_right: When including the class into your `web application` or `module` always use `include_once '../path/to/Mobile_Detect.php` to prevent conflicts.
+
+**JavaScript**
+
+* mobile-detect.js - A [JavaScript port](https://github.com/hgoebl/mobile-detect.js) of Mobile-Detect class. Made by [Heinrich Goebl](https://github.com/hgoebl).
+
+**Varnish Cache**
+
+* [Varnish Mobile Detect](https://github.com/willemk/varnish-mobiletranslate) - Drop-in varnish solution to mobile user 
+detection based on the Mobile-Detect library. Made by [willemk](https://github.com/willemk).
+* [mobiledetect2vcl](https://github.com/carlosabalde/mobiledetect2vcl) - Python script to transform the Mobile 
+Detect JSON database into an UA-based mobile detection VCL subroutine easily integrable in any Varnish Cache 
+configuration. Made by [Carlos Abalde](https://github.com/carlosabalde).
+
+**LUA**
+
+* [mobile-detect.lua](https://github.com/yourpalmark/mobile-detect.lua) is a port of Mobile-Detect to Lua for 
+NGINX HTTP servers. Follows closely to mobile-detect.js. Supports all methods that server-side 
+mobile-detect.js supports. Fully unit-tested and synced with Travis CI (Build Passing badge included). 
+Made by [Mark Walters](https://github.com/yourpalmark).
+
+**PHP**
+
+**WordPress**
+
+* [Mobile Detect for WordPress](https://wordpress.org/plugins/tinywp-mobile-detect/) - WordPress has a built-in function 
+(`wp_is_mobile()`) to detect mobile devices. There is (at least) one catch, though. It considers iPad (iPad pro, 
+and any tablet) as a mobile. So, this 3rd party module changes the way `wp_is_mobile()` works with the help of 
+Mobile Detect PHP library!
+Made by [Pothi Kalimuthu](https://github.com/pothi)
+
+* [WordPress Mobile Detect](https://wordpress.org/plugins/wp-mobile-detect/) - Gives you the ability to wrap that 
+infographic in a `[notdevice][/notdevice]` shortcode so at the server level WordPress will 
+decide to show that content only if the user is NOT on a phone or tablet. 
+Made by [Jesse Friedman](https://profiles.wordpress.org/professor44/).
+
+* [mobble](https://wordpress.org/plugins/mobble/) - provides mobile related conditional functions for your site. 
+e.g. `is_iphone()`, `is_mobile()` and `is_tablet()`. Made by Scott Evans.
+
+* [WordPress Responsage](https://github.com/iamspacehead/responsage) - A small WordPress theme plugin that allows 
+you to make your images responsive. Made by [Adrian Ciaschetti](https://github.com/iamspacehead).
+    
+* [WP247 Body Classes](https://wordpress.org/plugins/wp247-body-classes/) - Add unique classes to the `body` tag for 
+easy styling based on various attributes (archive, user, post, mobile) and various WordPress "is" functions. 
+Mobile attributes include type of device, Operating System, Browser, etc. Examples: .is-mobile, .is-not-mobile, 
+.is-tablet, .is-ios, .is-not-ios, .is-androidos, .is-chromebrowser. 
+Made by [wescleveland56](https://github.com/wescleveland56).
+
+* [Adaptive Content](https://wordpress.org/plugins/addfunc-adaptive-content/) for WordPress provides the most
+intuitive set of shortcodes for including/excluding content  on mobile devices, tablets desktops and other
+more specific device parameters. This lightweight plugin lets content writers and theme authors choose when
+WordPress should or shouldn’t show any give content item using shortcodes and quicktags or theme elements using functions.
+Made by [AddFunc](https://profiles.wordpress.org/addfunc).
+
+* [AddFunc Mobile Detect](https://wordpress.org/plugins/addfunc-mobile-detect/) for WordPress redirects
+mobile traffic to your mobile website and, basically, gives you loads of control over your mobile redirects.
+Made by [AddFunc](https://profiles.wordpress.org/addfunc).
+
+**Drupal**
+
+* [Drupal Mobile Switch](https://www.drupal.org/project/mobile_switch) - The Mobile Switch Drupal module provides a 
+automatic theme switch functionality for mobile devices, detected by Browscap or Mobile Detect. 
+Made by [Siegfried Neumann](https://www.drupal.org/user/45267).
+
+* [Drupal Context Mobile Detect](https://www.drupal.org/project/context_mobile_detect) - This is a Drupal context module 
+which integrates Context and PHP Mobile Detect library.
+Created by [Artem Shymko](https://www.drupal.org/user/432492).
+
+* [Drupal Mobile Detect](https://www.drupal.org/project/mobile_detect) - Lightweight mobile detect module for Drupal
+ created by [Matthew Donadio](https://www.drupal.org/user/325244).
+
+**Joomla**
+
+* [yagendoo Joomla! Mobile Detection Plugin](http://www.yagendoo.com/en/blog/free-mobile-detection-plugin-for-joomla.html) - Lightweight PHP plugin for Joomla! 
+that detects a mobile browser using the Mobile Detect class.
+Made by yagendoo media.
+ 
+* [User Agent Detector plugin](https://github.com/renekreijveld/UserAgentDetector) - This system plugin detects the user 
+agent of your website visitor and sets a session variable accordingly. Based on the user agent, the plugin detects if the 
+site is running on a desktop pc, tablet or smartphone. It can also detect if the visitor is a spider bot (search engine). 
+Session variable that is set: `ualayout`. Possible values: desktop, tablet, mobile, bot.
+Made by @ReneKreijveld.
+
+**Magento**
+
+* [Magento helper](http://www.magentocommerce.com/magento-connect/catalog/product/view/id/16835/) from Optimise Web enables 
+the use of all functions provided by Mobile Detect. Made by [Kathir Vel](http://www.kathirvel.com).
+
+* [Magento 2 Mobile Detect Theme Change](https://github.com/EaDesgin/magento2-mobiledetect) is an extension for Magento 2 
+that will change the theme or redirect to a different URL. Also containing a helper to check for the device type.
+
+**PrestaShop**
+
+* [PrestaShop](https://www.prestashop.com) is a free, secure and open source shopping cart platform. Mobile_Detect 
+is included in the default package since 1.5.x.
+
+**Laravel**
+
+* [Agent](https://github.com/jenssegers/agent) is a user agent class for Laravel based on Mobile Detect with some 
+additional functionality. 
+Made by [Jens Segers](https://github.com/jenssegers).
+
+* [Laravel Mobile Detect](https://github.com/riverskies/laravel-mobile-detect) is a package that enables you to use device detection right in your Laravel Blade templates. (Utilises the well-known, constantly updated PHP mobile detection library.)
+Made by [Barnabas Kecskes](https://github.com/barnabaskecskes).
+
+* [BrowserDetect](https://github.com/hisorange/browser-detect) is a browser and mobile detection package, collects 
+and wrap together the best user-agent identifiers for Laravel. 
+Created by [Varga Zsolt](https://github.com/hisorange).
+
+**Zend Framework**
+
+* [ZF2 Mobile-Detect](https://github.com/neilime/zf2-mobile-detect.git) is a Zend Framework 2 module that provides 
+Mobile-Detect features (Mobile_Detect class as a service, helper for views and plugin controllers). 
+Made by [neilime](https://github.com/neilime).
+
+* [ZF2 MobileDetectModule](https://github.com/nikolaposa/MobileDetectModule) facilitates integration of a PHP MobileDetect 
+class with some ZF2-based application. Has similar idea like the existing ZF2 Mobile-Detect module, 
+but differs in initialization and provision routine of the actual Mobile_Detect class. 
+Appropriate view helper and controller plugin also have different conceptions. 
+Made by [Nikola Posa](https://github.com/nikolaposa).
+
+**Symfony**
+
+* [Symfony2 Mobile Detect Bundle](https://github.com/suncat2000/MobileDetectBundle) is a bundle for detecting mobile devices, 
+manage mobile view and redirect to the mobile and tablet version.
+Made by [Nikolay Ivlev](https://github.com/suncat2000).
+
+* [Silex Mobile Detect Service Provider](https://github.com/jbinfo/MobileDetectServiceProvider) is a service provider to 
+interact with Mobile detect class methods.
+Made by [Lhassan Baazzi](https://github.com/jbinfo).
+
+**Slim Framework**
+
+* [Slim_Mobile_Detect](https://github.com/zguillez/slim_mobile_detect) implements Mobile_Detect lib for different 
+responses write on Slim Framework App.
+
+**ExpressionEngine**
+
+* [EE2 Detect Mobile](https://github.com/garethtdavies/detect-mobile) is a lightweight PHP plugin for EE2 that detects
+ a mobile browser using the Mobile Detect class. Made by [Gareth Davies](https://github.com/garethtdavies).
+
+**Yii Framework**
+
+* [Yii Extension](https://github.com/iamsalnikov/MobileDetect) - Mobile detect plugin for Yii framework. 
+Made by [Alexey Salnikov](https://github.com/iamsalnikov).
+
+* [Yii Extension](https://github.com/candasm/yii1-mobile-detect-component) - Mobile detect component for Yii framework 
+1.x version which supports composer package manager. Made by [Candas Minareci](https://github.com/candasm).
+
+* [Yii2 Device Detect](https://github.com/alexandernst/yii2-device-detect/) - Yii2 extension for Mobile-Detect library. 
+Made by [Alexander Nestorov](https://github.com/alexandernst).
+
+**CakePHP**
+
+* [CakePHP MobileDetect](https://github.com/chronon/CakePHP-MobileDetectComponent-Plugin) is a plugin component for 
+CakePHP 2.x. Made by [Gregory Gaskill](https://github.com/chronon).
+
+**FuelPHP**
+
+* [Special Agent](https://github.com/rob-bar/special_agent) is a FuelPHP package which uses php-mobile-detect to 
+determine whether a device is mobile or not. It overrides the Fuelphp Agent class its methods. 
+Made by [Robbie Bardjin](https://github.com/rob-bar).
+
+
+**TYPO3**
+
+* [px_mobiledetect](https://typo3.org/extensions/repository/view/px_mobiledetect) is an extension that helps to detect 
+visitor's mobile device class (if that’s tablet or mobile device like smartphone). Made by Alexander Tretyak.
+
+**Other**
+
+* [PageCache](https://github.com/mmamedov/page-cache) is a lightweight PHP library for full page cache, 
+with built-in Mobile-Detect support. Made by [Muhammed Mamedov](https://github.com/mmamedov).
+
+* [Statamic CMS Mobile Detect](https://github.com/haikulab/statamic-mobile-detect) is a plugin. 
+Made by [Sergei Filippov](https://github.com/haikulab/statamic-mobile-detect) of Haiku Lab.
+
+* [Kohana Mobile Detect](https://github.com/madeinnordeste/kohana-mobile-detect) is an example of implementation of 
+Mobile_Detect class with Kohana framework. 
+Written by [Luiz Alberto S. Ribeiro](https://github.com/madeinnordeste).
+
+* [MemHT](https://www.memht.com) is a Free PHP CMS and Blog that permit the creation and the management online 
+of websites with few and easy steps. Has the class included in the core.
+
+* [concrete5](https://www.concrete5.org) is a CMS that is free and open source. The library is included in the core.
+
+* [engine7](https://github.com/QOXCorp/exengine) is PHP Open Source Framework. The Mobile_Detect class is included in 
+the engine.
+
+* [Zikula](http://zikula.org) is a free and open-source Content Management Framework, which allows you to run 
+impressive websites and build powerful online applications. The core uses Mobile-Detect to switch to a special 
+Mobile theme, using jQueryMobile.
+
+* [UserAgentInfo](https://github.com/quentin389/UserAgentInfo) is a PHP class for parsing user agent strings 
+(HTTP_USER_AGENT). Includes mobile checks, bot checks, browser types/versions and more.
+Based on browscap, Mobile_Detect and ua-parser. Created for high traffic websites and fast batch processing. 
+Made by [quentin389](https://github.com/quentin389).
+
+* [LJ Mobile Detect](https://github.com/lewisjenkins/craft-lj-mobiledetect) is a simple implementation of Mobile Detect 
+for Craft CMS. Made by [Lewis Jenkins](https://github.com/lewisjenkins).
+
+* [Detect Craft](https://github.com/mmikkel/Detect-Craft) is a Craft CMS wrapper for the Mobile_Detect library. Made by [Mikkel Rummelhoff](https://github.com/mmikkel).
+
+* [Grav Plugin Mobile Detect](https://github.com/dimitrilongo/grav-plugin-mobile-detect/) is a simple implementation 
+of Mobile Detect for Grav CMS. Made by [Dimitri Longo](https://github.com/dimitrilongo).
+
+* [Mobile_Detect module for UliCMS](https://github.com/derUli/ulicms-Mobile_Detect). 
+Made by [derUli](https://github.com/derUli).
+
+**Perl**
+
+ * [MobileDetect.pm](https://www.buzzerstar.com/development/) is a Perl module for Mobile Detect. 
+ Made by [Sebastian Enger](https://devop.tools/).
+
+**Python**
+
+* [pymobiledetect](https://pypi.python.org/pypi/pymobiledetect) - Mobile detect python package. 
+Made by Bas van Oostveen. 
+
+**Ruby**
+
+* [mobile_detect.rb](https://github.com/ktaragorn/mobile_detect) is a Ruby gem using the JSON data exposed by the 
+php project and implementing a basic subset of the API (as much as can be done by the exposed data). 
+Made by [Karthik T](https://github.com/ktaragorn).
+
+**Go**
+
+* [GoMobileDetect](https://github.com/Shaked/gomobiledetect) is a Go port of Mobile Detect class. 
+Made by [https://github.com/Shaked](Shaked).
+
+
+**LUA**
+
+* [ua-lua](https://github.com/robinef/ua-lua) is a small lib written in LUA providing device type detection. 
+ua-lua is detecting mobile or tablet devices based on user-agent inside nginx daemon. 
+Made by [Frédéric Robinet](https://github.com/robinef).
+
+**.Net**
+
+* [mobile-detect](https://github.com/validide/mobile-detect) is a .Net partial port written in C#. 
+Made by [Valentin Dide](https://github.com/validide).
+
+**ColdFusion**
+
+* [MobileDetect](https://github.com/GiancarloGomez/ColdFusion-MobileDetect) is a CFC port of the 
+Mobile_Detect PHP Library. Made by [Giancarlo Gomez](https://github.com/GiancarloGomez).
+
+**Experiments** :bulb:
+
+* [Mobile Detect Fast](https://bitbucket.org/lanaguani/mobile-detect-fast/) (See: [#474](https://github.com/serbanghita/Mobile-Detect/issues/474)) is a class to increase the performance of Mobile Detect lib. Made by [LanaGuani](https://github.com/lanaguanifw).

+ 31 - 0
resources/mobile-detect/composer.json

@@ -0,0 +1,31 @@
+{
+    "name": "mobiledetect/mobiledetectlib",
+    "type": "library",
+    "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
+    "keywords": ["mobile", "mobile detect", "mobile detector", "php mobile detect", "detect mobile devices"],
+    "homepage": "https://github.com/serbanghita/Mobile-Detect",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Serban Ghita",
+            "email": "[email protected]",
+            "homepage": "http://mobiledetect.net",
+            "role": "Developer"
+        }
+    ],
+    "require": {
+        "php": ">=5.0.0"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~4.8.35||~5.7"
+    },
+    "autoload": {
+        "classmap": ["Mobile_Detect.php"],
+        "psr-0": {
+            "Detection": "namespaced/"
+        }
+    },
+    "archive": {
+      "exclude": ["docs", "examples", "export"]
+    }
+}

+ 983 - 0
resources/mobile-detect/composer.lock

@@ -0,0 +1,983 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "4a5fd4cd7cc7247a6df7411b031d4845",
+    "packages": [],
+    "packages-dev": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3,<8.0-DEV"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "[email protected]",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2015-06-14T21:17:01+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "2.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
+                "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "suggest": {
+                "dflydev/markdown": "~1.0",
+                "erusev/parsedown": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "[email protected]"
+                }
+            ],
+            "time": "2016-01-25T08:17:30+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "1.7.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
+                "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
+                "sebastian/comparator": "^1.1|^2.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5|^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.7.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Prophecy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "[email protected]",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2017-11-24T13:59:53+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "2.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "phpunit/php-file-iterator": "~1.3",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-token-stream": "~1.3",
+                "sebastian/environment": "^1.3.2",
+                "sebastian/version": "~1.0"
+            },
+            "require-dev": {
+                "ext-xdebug": ">=2.1.4",
+                "phpunit/phpunit": "~4"
+            },
+            "suggest": {
+                "ext-dom": "*",
+                "ext-xdebug": ">=2.2.1",
+                "ext-xmlwriter": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2015-10-06T15:47:00+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2017-11-27T13:52:08+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "1.4.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "time": "2017-12-04T08:55:13+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "4.8.36",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
+                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-pcre": "*",
+                "ext-reflection": "*",
+                "ext-spl": "*",
+                "php": ">=5.3.3",
+                "phpspec/prophecy": "^1.3.1",
+                "phpunit/php-code-coverage": "~2.1",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "~2.3",
+                "sebastian/comparator": "~1.2.2",
+                "sebastian/diff": "~1.2",
+                "sebastian/environment": "~1.3",
+                "sebastian/exporter": "~1.2",
+                "sebastian/global-state": "~1.0",
+                "sebastian/version": "~1.0",
+                "symfony/yaml": "~2.1|~3.0"
+            },
+            "suggest": {
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.8.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-06-21T08:07:12+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "2.3.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": ">=5.3.3",
+                "phpunit/php-text-template": "~1.2",
+                "sebastian/exporter": "~1.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.3.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "time": "2015-10-02T06:51:40+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2017-01-29T09:50:25+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "1.3.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8 || ^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-08-18T05:49:44+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
+                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~1.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2016-06-17T09:04:28+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2015-10-12T03:26:01+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-10-03T07:41:43+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "1.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "[email protected]",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2015-06-21T13:59:46+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v2.8.32",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "968ef42161e4bc04200119da473077f9e7015128"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/968ef42161e4bc04200119da473077f9e7015128",
+                "reference": "968ef42161e4bc04200119da473077f9e7015128",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-11-29T09:33:18+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.0.0"
+    },
+    "platform-dev": []
+}

+ 48 - 0
resources/mobile-detect/docs/CONTRIBUTING.md

@@ -0,0 +1,48 @@
+**Reporting issues**
+
+1. Specify the User-agent by visiting [http://demo.mobiledetect.net](http://demo.mobiledetect.net).
+1. Specify the expected behaviour.
+
+**Developing**
+
+1. Fork Mobile Detect repository. See ["How to fork"](https://help.github.com/articles/fork-a-repo/#fork-an-example-repository) example.
+1. `git clone https://github.com/[yourname]/Mobile-Detect.git`
+1. `git add remote serbanghita https://github.com/serbanghita/Mobile-Detect.git`
+1. `git remote -v` - You should see:
+    ```
+    origin       [email protected]:serbanghita/Mobile-Detect.git
+    serbanghita  https://github.com/serbanghita/Mobile-Detect.git
+    ```
+1. `git checkout -b devel origin/devel`
+1. `composer install`
+1. Start working on your changes.
+    1. If you add new methods or make structural changes to the `Mobile_Detect.php` class
+    you need to add unit tests!
+    1. If you add new regexes make sure you commit the User-Agents in [`tests/providers/vendors`](https://github.com/serbanghita/Mobile-Detect/tree/master/tests/providers/vendors)
+1. Run tests `vendor/bin/phpunit -v -c tests/phpunit.xml --coverage-text --strict-coverage --stop-on-risky`
+1. `git status` or `git diff` - inspect your changes
+1  `git stage .`
+1. `git commit -m "[your commit message here]`
+1. `git push origin devel`
+1. Go to your repo on GitHub and ["Submit the PR"](https://help.github.com/articles/about-pull-requests/)
+
+**New module, plugin, plugin or port**
+
+[Submit new module, plugin, port](../../issues/new?title=New%203rd%20party%20module&body=Name,%20Link%20and%20Description%20of%20the%20module.)
+ including the following information:
+* Module name
+* Description
+* Link
+* Author
+
+Or you can submit a PR against `README.md`.
+
+**Website updates**
+
+1. Our official website is hosted at [http://mobiledetect.net](http://mobiledetect.net).
+1. The files are found on the `gh-pages` branch.
+1. `git checkout gh-pages`
+1. `npm install -g browser-sync`
+1. `browser-sync start --s . --f . --port 3000 --reload-debounce 1500 --no-ui`
+1. Go to `http://localhost:3000` and make changes.
+1. Commit, push and submit the PR against `serbanghita:gh-pages`.

+ 11 - 0
resources/mobile-detect/docs/HISTORY.md

@@ -0,0 +1,11 @@
+The first version of the script was developed in 2009 and it was hosted at https://code.google.com/p/php-mobile-detect/, it was a small project with around 30 stars. (Original blog post by Victor: http://victorstanciu.ro/detectarea-platformelor-mobile-in-php/)
+
+In December 2011 it received a major update from the first version, an important number of issues were fixed, then 2.0 was launched. The new version marks a new mindset and also featuring tablet detection.
+
+Throughout 2012 the script has been updated constantly and we have received tons of feedback and requests. 
+
+In July 2012 we moved the repository from Google Code to GitHub in order to quickly accommodate the frequent updates and to involve more people.
+
+In August 2013 the library has 1800+ stargazers and support for: composer, PHPUnit tests, PSR standards and a new webpage http://mobiledetect.net
+
+Mobile Detect library and user contributions are <a href="https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt">MIT Licensed</a>.

+ 15 - 0
resources/mobile-detect/docs/ISSUE_TEMPLATE.md

@@ -0,0 +1,15 @@
+-------------delete this message-------------
+* By submitting a new issue I acknowledge that I already read the README, CODE EXAMPLES and KNOWN LIMITATIONS. 
+* I understand that the current version `2.x` is only meant to detect `mobile` devices.
+* Please post your User-Agent string! On a real device/s, the library is expected to work correctly.
+-------------delete this message-------------
+
+
+
+**Issue description**
+
+
+**User-Agent(s)**
+
+
+**Suggestions**

+ 11 - 0
resources/mobile-detect/docs/KNOWN_LIMITATIONS.md

@@ -0,0 +1,11 @@
+**Known limitations**
+
+* Mobile Detect script was designed to detect `mobile` devices. Implicitly other devices are considered to be `desktop`.
+* User-Agent and HTTP headers sniffing is a non reliable method of detecting a mobile device.
+* If the mobile browser is set on `Desktop mode`, the Mobile Detect script has no way of knowing that the device is `mobile`.
+* Some touchscreen devices (eg. Microsoft Surface) are tough to detect as mobile since they can be used in a laptop mode.
+* Detecting the device brand (eg. Apple, Samsung, HTC) is not 100% reliable.
+* We don't monitor the quality of the 3rd party tools based on Mobile Detect script. 
+We cannot guarantee that they are using the class properly or if they provide the latest version.
+* Version `2.x` is made to be PHP 5.3 compatible because of the backward compatibility changes of PHP.
+* There are hundreds of devices launched every month, we cannot keep a 100% up to date detection rate.

+ 67 - 0
resources/mobile-detect/export/exportToJSON.php

@@ -0,0 +1,67 @@
+<?php
+/**
+ * Mobile Detect Library
+ * - export -
+ * =====================
+ *
+ * Use the resulting JSON export file in other languages
+ * other than PHP. Always check for 'version' key because
+ * new major versions can modify the structure of the JSON file.
+ *
+ * The result of running this script is the export.json file.
+ *
+ * @license     Code and contributions have 'MIT License'
+ *              More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
+ *
+ */
+
+// Included nicejson function to beautify the result JSON file.
+// This library is not mandatory.
+if( file_exists(dirname(__FILE__).'/nicejson/nicejson.php') ) {
+	include_once dirname(__FILE__).'/nicejson/nicejson.php';
+}
+
+// Include Mobile Detect.
+require_once dirname(__FILE__).'/../Mobile_Detect.php';
+$detect = new Mobile_Detect;
+
+$json = array(
+	// The current version of Mobile Detect class that
+	// is being exported.
+	'version' => $detect->getScriptVersion(),
+
+	// All headers that trigger 'isMobile' to be 'true',
+	// before reaching the User-Agent match detection.
+	'headerMatch' => $detect->getMobileHeaders(),
+
+	// All possible User-Agent headers.
+	'uaHttpHeaders' => $detect->getUaHttpHeaders(),
+
+	// All the regexes that trigger 'isMobile' or 'isTablet'
+	// to be true.
+	'uaMatch' => array(
+		// If match is found, triggers 'isMobile' to be true.
+		'phones'   => $detect->getPhoneDevices(),
+		// Triggers 'isTablet' to be true.
+		'tablets'  => $detect->getTabletDevices(),
+		// If match is found, triggers 'isMobile' to be true.
+		'browsers' => $detect->getBrowsers(),
+		// If match is found, triggers 'isMobile' to be true.
+		'os'       => $detect->getOperatingSystems(),
+		// Various utilities. To be further discussed.
+		'utilities' => $detect->getUtilities()
+	)
+);
+
+$fileName = dirname(__FILE__).'/../Mobile_Detect.json';
+// Write the JSON file to disk.11
+// You can import this file in your app.
+if (file_put_contents(
+	$fileName, 
+	function_exists('json_format') ? json_format($json) : json_encode($json)
+)) {
+	echo 'Done. Check '.realpath($fileName).' file.';
+}
+else {
+	echo 'Failed to write '.realpath($fileName).' to disk.';
+}

+ 22 - 0
resources/mobile-detect/namespaced/Detection/MobileDetect.php

@@ -0,0 +1,22 @@
+<?php
+/**
+ * Little piece of PHP to make Mobile_Detect auto-loadable in PSR-0 compatible PHP autoloaders like
+ * the Symfony Universal ClassLoader by Fabien Potencier. Since PSR-0 handles an underscore in
+ * classnames (on the filesystem) as a slash, "Mobile_Detect.php" autoloaders will try to convert
+ * the classname and path to "Mobile\Detect.php". This script will ensure autoloading with:
+ *  - Namespace:       Detection
+ *  - Classname:       MobileDetect
+ *  - Namespased:      \Detection\MobileDetect
+ *  - Autoload path:   ./namespaced
+ *  - Converted path:  ./namespaced/Detection/MobileDetect.php
+ *
+ * Don't forget to use MobileDetect (instead of Mobile_Detect) as class in code when autoloading.
+ *
+ * Thanks to @WietseWind.
+ * For details please check: https://github.com/serbanghita/Mobile-Detect/pull/120
+ */
+
+namespace Detection;
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'Mobile_Detect.php';
+
+class MobileDetect extends \Mobile_Detect {}

+ 20 - 0
resources/mobile-detect/phpcs.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<ruleset name="PSR1">
+    <description>The PSR-2 coding standard extended.</description>
+    <rule ref="PSR1">
+        <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
+    </rule>
+    <rule ref="Squiz">
+        <exclude name="Squiz.Classes.ValidClassName.NotCamelCaps"/>
+        <exclude name="Squiz.Files.FileExtension.ClassFound"/>
+        <exclude name="Squiz.Commenting.ClassComment.TagNotAllowed"/>
+    </rule>
+    <rule ref="Squiz.Strings.DoubleQuoteUsage">
+        <type>error</type>
+    </rule>
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="140"/>
+        </properties>
+    </rule>
+</ruleset>

部分文件因为文件数量过多而无法显示