Version Description
Download this release
Release Info
Developer | optimole |
Plugin | ![]() |
Version | 2.0.0 |
Comparing to | |
See all releases |
Code changes from version 1.1.2 to 2.0.0
- CHANGELOG.md +102 -60
- README.md +223 -0
- assets/css/style.scss +189 -164
- assets/js/bundle.js +20296 -17468
- assets/js/bundle.min.js +21 -16
- inc/admin.php +562 -523
- inc/api.php +241 -166
- inc/app_replacer.php +288 -0
- inc/config.php +81 -0
- inc/image.php +143 -0
- inc/image_properties/height.php +60 -0
- inc/image_properties/property_type.php +31 -0
- inc/image_properties/quality.php +78 -0
- inc/image_properties/resize.php +162 -0
- inc/image_properties/watermark.php +73 -0
- inc/image_properties/width.php +62 -0
- inc/lazyload_replacer.php +161 -0
- inc/main.php +229 -197
- inc/manager.php +352 -0
- inc/replacer.php +0 -1050
- inc/rest.php +451 -356
- inc/settings.php +308 -227
- inc/tag_replacer.php +361 -0
- inc/traits/normalizer.php +196 -0
- inc/traits/validator.php +44 -0
- inc/url_replacer.php +143 -0
- optimole-wp.php +95 -61
- readme.md +0 -117
- readme.txt +223 -117
- themeisle-hash.json +1 -1
- vendor/autoload.php +2 -2
- vendor/codeinwp/themeisle-sdk/CHANGELOG.md +14 -0
- vendor/codeinwp/themeisle-sdk/load.php +2 -2
- vendor/composer/ClassLoader.php +46 -14
- vendor/composer/LICENSE +1 -1
- vendor/composer/autoload_psr4.php +0 -1
- vendor/composer/autoload_real.php +28 -17
- vendor/composer/autoload_static.php +19 -0
- vendor/composer/installed.json +7 -132
- vendor/composer/installers/LICENSE +0 -19
- vendor/composer/installers/composer.json +0 -105
- vendor/composer/installers/src/Composer/Installers/AglInstaller.php +0 -21
- vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php +0 -49
- vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/BaseInstaller.php +0 -136
- vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php +0 -126
- vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php +0 -82
- vendor/composer/installers/src/Composer/Installers/ChefInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php +0 -34
- vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php +0 -13
- vendor/composer/installers/src/Composer/Installers/CraftInstaller.php +0 -35
- vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php +0 -21
- vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php +0 -50
- vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php +0 -16
- vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php +0 -16
- vendor/composer/installers/src/Composer/Installers/ElggInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php +0 -12
- vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php +0 -29
- vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/FuelInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/GravInstaller.php +0 -30
- vendor/composer/installers/src/Composer/Installers/HuradInstaller.php +0 -25
- vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/Installer.php +0 -274
- vendor/composer/installers/src/Composer/Installers/ItopInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php +0 -15
- vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php +0 -18
- vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php +0 -27
- vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php +0 -16
- vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php +0 -37
- vendor/composer/installers/src/Composer/Installers/MakoInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/MauticInstaller.php +0 -25
- vendor/composer/installers/src/Composer/Installers/MayaInstaller.php +0 -33
- vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php +0 -51
- vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php +0 -111
- vendor/composer/installers/src/Composer/Installers/ModxInstaller.php +0 -12
- vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php +0 -57
- vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php +0 -47
- vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php +0 -24
- vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php +0 -14
- vendor/composer/installers/src/Composer/Installers/OxidInstaller.php +0 -59
- vendor/composer/installers/src/Composer/Installers/PPIInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php +0 -21
- vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php +0 -32
- vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php +0 -29
- vendor/composer/installers/src/Composer/Installers/Plugin.php +0 -17
- vendor/composer/installers/src/Composer/Installers/PortoInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php +0 -63
- vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php +0 -24
- vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php +0 -22
- vendor/composer/installers/src/Composer/Installers/SMFInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php +0 -60
- vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php +0 -35
- vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php +0 -25
- vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php +0 -49
- vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php +0 -26
- vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php +0 -16
- vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php +0 -38
- vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php +0 -12
- vendor/composer/installers/src/Composer/Installers/TuskInstaller.php +0 -14
- vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php +0 -49
- vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php +0 -10
- vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php +0 -9
- vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php +0 -12
- vendor/composer/installers/src/Composer/Installers/YawikInstaller.php +0 -32
- vendor/composer/installers/src/Composer/Installers/ZendInstaller.php +0 -11
- vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php +0 -10
- vendor/composer/installers/src/bootstrap.php +0 -13
CHANGELOG.md
CHANGED
@@ -1,60 +1,102 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
*
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
*
|
13 |
-
|
14 |
-
*
|
15 |
-
|
16 |
-
*
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
*
|
23 |
-
|
24 |
-
*
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
*
|
33 |
-
|
34 |
-
*
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
*
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
*
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
* Improve
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### [2.0.0](https://github.com/Codeinwp/optimole-wp/compare/v1.1.2...v2.0.0) (2019-01-21)
|
2 |
+
|
3 |
+
|
4 |
+
#### Bug Fixes
|
5 |
+
|
6 |
+
* errors on low PHP environments when PHP_INT_MIN constant is not available ([44eb4af](https://github.com/Codeinwp/optimole-wp/commit/44eb4af))
|
7 |
+
|
8 |
+
* fix tag replacement on lazy load, preserve image size when found ([5c6ef70](https://github.com/Codeinwp/optimole-wp/commit/5c6ef70))
|
9 |
+
|
10 |
+
* improve image size replacement mapping for custom image sizes ([d816ccb](https://github.com/Codeinwp/optimole-wp/commit/d816ccb))
|
11 |
+
|
12 |
+
* improve lazyload fade in effect, fixes [#71](https://github.com/Codeinwp/optimole-wp/issues/71) ([eb0f76c](https://github.com/Codeinwp/optimole-wp/commit/eb0f76c))
|
13 |
+
|
14 |
+
* possible issue with image replacement not taking place when other buffer handler is registered ([3ce600a](https://github.com/Codeinwp/optimole-wp/commit/3ce600a))
|
15 |
+
|
16 |
+
* resize behaviour for WordPress defined image sizes, preserve cropping for custom sizes ([a42f830](https://github.com/Codeinwp/optimole-wp/commit/a42f830))
|
17 |
+
|
18 |
+
|
19 |
+
|
20 |
+
#### Documentation
|
21 |
+
|
22 |
+
* add basic faq to readme file ([2c09d26](https://github.com/Codeinwp/optimole-wp/commit/2c09d26))
|
23 |
+
|
24 |
+
* adds contributor related docs and github templates ([c7bbce2](https://github.com/Codeinwp/optimole-wp/commit/c7bbce2))
|
25 |
+
|
26 |
+
|
27 |
+
|
28 |
+
#### Features
|
29 |
+
|
30 |
+
* adds new service schema ([330fba0](https://github.com/Codeinwp/optimole-wp/commit/330fba0))
|
31 |
+
|
32 |
+
* adds watermark integration along with various options for watermark position ([6a4538a](https://github.com/Codeinwp/optimole-wp/commit/6a4538a))
|
33 |
+
|
34 |
+
* deactivate plugin on lower php versions, adds notice for PHP for upgrade ([58d2607](https://github.com/Codeinwp/optimole-wp/commit/58d2607))
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
#### Performance Improvements
|
39 |
+
|
40 |
+
* improve srcset replacement, use attachement id when present ([5587221](https://github.com/Codeinwp/optimole-wp/commit/5587221))
|
41 |
+
|
42 |
+
* improve type casting on size constrain ([589b046](https://github.com/Codeinwp/optimole-wp/commit/589b046))
|
43 |
+
|
44 |
+
### v1.1.2 - 2018-12-24
|
45 |
+
**Changes:**
|
46 |
+
* Minor fixes to Optimole dashboard page.
|
47 |
+
* Fixes DNS prefetch call when lazyload is off.
|
48 |
+
* Enable lazyload and javascript replacement by default for new users.
|
49 |
+
|
50 |
+
### v1.1.1 - 2018-12-10
|
51 |
+
**Changes:**
|
52 |
+
* Improve the lazy loading mechanism and adds compatibility with the new javascript library.
|
53 |
+
* Improve sample images and quality selector integration.
|
54 |
+
* Adds a notice when the Rest API is not available.
|
55 |
+
* Adds notice for new users on how the plugin works.
|
56 |
+
* Tested up with WordPress 5.0, all working smooth.
|
57 |
+
* Fix possible issues with thumbnails when the original image is available on a different url scheme.
|
58 |
+
* Ignore lazyload replacement on feed/amp pages.
|
59 |
+
|
60 |
+
### v1.1.0 - 2018-11-16
|
61 |
+
**Changes:**
|
62 |
+
* Integrates lazy load feature with support for low-quality placeholders ( LQIP ).
|
63 |
+
* Integrates Javascript library which delivers images at the right size for each device, including Retina.
|
64 |
+
* Improve image replacement algorithm.
|
65 |
+
* Improves compatibility with Elementor and Gutenberg.
|
66 |
+
* Adds support for Custom CNAME and Client hints.
|
67 |
+
* Improves support for custom CDN.
|
68 |
+
* Improves AMP support.
|
69 |
+
* Improves compatibility with WordPress Multisites.
|
70 |
+
|
71 |
+
### v1.0.5 - 2018-10-05
|
72 |
+
**Changes:**
|
73 |
+
* Adds max width/height option.
|
74 |
+
* Improves registration workflow.
|
75 |
+
* Adds image comparison slider ratio.
|
76 |
+
* Adds logo on link preload.
|
77 |
+
|
78 |
+
### v1.0.4 - 2018-10-03
|
79 |
+
**Changes:**
|
80 |
+
* Adds in-plugin service registration.
|
81 |
+
* Adds image quality control.
|
82 |
+
* Adds slider for image comparison.
|
83 |
+
* Improvements to UX and workflow.
|
84 |
+
|
85 |
+
### v1.0.3 - 2018-09-26
|
86 |
+
**Changes:**
|
87 |
+
* Adds redirect on first install.
|
88 |
+
* Improve elementor assets replacement.
|
89 |
+
|
90 |
+
### v1.0.2 - 2018-09-25
|
91 |
+
**Changes:**
|
92 |
+
* Improve compatibility with elementor external css files.
|
93 |
+
* Adds generator tag.
|
94 |
+
* Improve replacer handler hook register.
|
95 |
+
|
96 |
+
### v1.0.1 - 2018-09-23
|
97 |
+
**Changes:**
|
98 |
+
* Tag first stable version for wordpress.org.
|
99 |
+
|
100 |
+
### v1.0.0 - 2018-09-11
|
101 |
+
**Changes:**
|
102 |
+
* First version of the plugin
|
README.md
ADDED
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Image optimization service by Optimole #
|
2 |
+
**Contributors:** [optimole](https://profiles.wordpress.org/optimole)
|
3 |
+
**Tags:** image optmization, cdn, image compression, compress image, images, optimization, perfomance, photos
|
4 |
+
**Requires at least:** 4.7
|
5 |
+
**Tested up to:** 5.0
|
6 |
+
**Requires PHP:** 5.4
|
7 |
+
**License:** GPLv3
|
8 |
+
**License URI:** https://www.gnu.org/licenses/gpl-3.0.en.html
|
9 |
+
|
10 |
+
End-to-end image processing
|
11 |
+
With OptiMole, your site’s images will be cropped, optimized and processed on-the-fly.
|
12 |
+
|
13 |
+
|
14 |
+
## Description ##
|
15 |
+
**Image optimization & resizing**
|
16 |
+
Images are processed for best results with both lossless and lossy optimization and are automatically resized for any device.
|
17 |
+
|
18 |
+
**Image acceleration through CDN**
|
19 |
+
If you dont use a CDN, we got you covered, we will serve the images using our default CDN. You already have one, just let us know and we can integrate yours.
|
20 |
+
|
21 |
+
**On-the-fly image handling**
|
22 |
+
Dynamic manipulation of images and videos (resize, compress and serve via CDN on the fly).
|
23 |
+
|
24 |
+
**Easy tracking & monitoring**
|
25 |
+
Check how OptiMole is improving your site from day 1. Transparent optimization stats are always available.
|
26 |
+
|
27 |
+
### How does it work? ###
|
28 |
+
|
29 |
+
This plugin connects via API to OptiMole [image optimization service](https://optimole.com/) in order to send the images to its servers and crop, optimize and process them on-the-fly. The EXIF data will either be stripped and it is not stored on our servers. Optimole does not interact with the visitors on your website. We care about your privacy so check our [terms of use](https://optimole.com/terms/).
|
30 |
+
|
31 |
+
The plugin will rewrite your image URLs to replace them with OptiMole URLs. Your origin images will be downloaded from your storage, processed by the OptiMole infrastructure and cached in the CDN. NO development needed. Simply set up your account and enjoy faster image loading.
|
32 |
+
|
33 |
+
|
34 |
+
## Screenshots ##
|
35 |
+
|
36 |
+
1. Welcome screen
|
37 |
+
2. Connect screen
|
38 |
+
3. Plugin dashboard
|
39 |
+
4. Plugin settings
|
40 |
+
|
41 |
+
## Changelog ##
|
42 |
+
|
43 |
+
### [2.0.0](https://github.com/Codeinwp/optimole-wp/compare/v1.1.2...v2.0.0) (2019-01-21)
|
44 |
+
|
45 |
+
|
46 |
+
#### Bug Fixes
|
47 |
+
|
48 |
+
* errors on low PHP environments when PHP_INT_MIN constant is not available ([44eb4af](https://github.com/Codeinwp/optimole-wp/commit/44eb4af))
|
49 |
+
|
50 |
+
* fix tag replacement on lazy load, preserve image size when found ([5c6ef70](https://github.com/Codeinwp/optimole-wp/commit/5c6ef70))
|
51 |
+
|
52 |
+
* improve image size replacement mapping for custom image sizes ([d816ccb](https://github.com/Codeinwp/optimole-wp/commit/d816ccb))
|
53 |
+
|
54 |
+
* improve lazyload fade in effect, fixes [#71](https://github.com/Codeinwp/optimole-wp/issues/71) ([eb0f76c](https://github.com/Codeinwp/optimole-wp/commit/eb0f76c))
|
55 |
+
|
56 |
+
* possible issue with image replacement not taking place when other buffer handler is registered ([3ce600a](https://github.com/Codeinwp/optimole-wp/commit/3ce600a))
|
57 |
+
|
58 |
+
* resize behaviour for WordPress defined image sizes, preserve cropping for custom sizes ([a42f830](https://github.com/Codeinwp/optimole-wp/commit/a42f830))
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
#### Documentation
|
63 |
+
|
64 |
+
* add basic faq to readme file ([2c09d26](https://github.com/Codeinwp/optimole-wp/commit/2c09d26))
|
65 |
+
|
66 |
+
* adds contributor related docs and github templates ([c7bbce2](https://github.com/Codeinwp/optimole-wp/commit/c7bbce2))
|
67 |
+
|
68 |
+
|
69 |
+
|
70 |
+
#### Features
|
71 |
+
|
72 |
+
* adds new service schema ([330fba0](https://github.com/Codeinwp/optimole-wp/commit/330fba0))
|
73 |
+
|
74 |
+
* adds watermark integration along with various options for watermark position ([6a4538a](https://github.com/Codeinwp/optimole-wp/commit/6a4538a))
|
75 |
+
|
76 |
+
* deactivate plugin on lower php versions, adds notice for PHP for upgrade ([58d2607](https://github.com/Codeinwp/optimole-wp/commit/58d2607))
|
77 |
+
|
78 |
+
|
79 |
+
|
80 |
+
#### Performance Improvements
|
81 |
+
|
82 |
+
* improve srcset replacement, use attachement id when present ([5587221](https://github.com/Codeinwp/optimole-wp/commit/5587221))
|
83 |
+
|
84 |
+
* improve type casting on size constrain ([589b046](https://github.com/Codeinwp/optimole-wp/commit/589b046))
|
85 |
+
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
|
90 |
+
### 1.1.2 - 2018-12-24 ###
|
91 |
+
|
92 |
+
* Minor fixes to Optimole dashboard page.
|
93 |
+
* Fixes DNS prefetch call when lazyload is off.
|
94 |
+
* Enable lazyload and javascript replacement by default for new users.
|
95 |
+
|
96 |
+
|
97 |
+
### 1.1.1 - 2018-12-10 ###
|
98 |
+
|
99 |
+
* Improve the lazy loading mechanism and adds compatibility with the new javascript library.
|
100 |
+
* Improve sample images and quality selector integration.
|
101 |
+
* Adds a notice when the Rest API is not available.
|
102 |
+
* Adds notice for new users on how the plugin works.
|
103 |
+
* Tested up with WordPress 5.0, all working smooth.
|
104 |
+
* Fix possible issues with thumbnails when the original image is available on a different url scheme.
|
105 |
+
* Ignore lazyload replacement on feed/amp pages.
|
106 |
+
|
107 |
+
|
108 |
+
### 1.1.0 - 2018-11-16 ###
|
109 |
+
|
110 |
+
* Integrates lazy load feature with support for low-quality placeholders ( LQIP ).
|
111 |
+
* Integrates Javascript library which delivers images at the right size for each device, including Retina.
|
112 |
+
* Improve image replacement algorithm.
|
113 |
+
* Improves compatibility with Elementor and Gutenberg.
|
114 |
+
* Adds support for Custom CNAME and Client hints.
|
115 |
+
* Improves support for custom CDN.
|
116 |
+
* Improves AMP support.
|
117 |
+
* Improves compatibility with WordPress Multisites.
|
118 |
+
|
119 |
+
|
120 |
+
### 1.0.5 - 2018-10-05 ###
|
121 |
+
|
122 |
+
* Adds max width/height option.
|
123 |
+
* Improves registration workflow.
|
124 |
+
* Adds image comparison slider ratio.
|
125 |
+
* Adds logo on link preload.
|
126 |
+
|
127 |
+
|
128 |
+
### 1.0.4 - 2018-10-03 ###
|
129 |
+
|
130 |
+
* Adds in-plugin service registration.
|
131 |
+
* Adds image quality control.
|
132 |
+
* Adds slider for image comparison.
|
133 |
+
* Improvements to UX and workflow.
|
134 |
+
|
135 |
+
|
136 |
+
### 1.0.3 - 2018-09-26 ###
|
137 |
+
|
138 |
+
* Adds redirect on first install.
|
139 |
+
* Improve elementor assets replacement.
|
140 |
+
|
141 |
+
|
142 |
+
### 1.0.2 - 2018-09-25 ###
|
143 |
+
|
144 |
+
* Improve compatibility with elementor external css files.
|
145 |
+
* Adds generator tag.
|
146 |
+
* Improve replacer handler hook register.
|
147 |
+
|
148 |
+
|
149 |
+
### 1.0.1 - 2018-09-23 ###
|
150 |
+
|
151 |
+
* Tag first stable version for wordpress.org.
|
152 |
+
|
153 |
+
|
154 |
+
|
155 |
+
### 1.0.0 - 2018-09-22 ###
|
156 |
+
* First version of the plugin
|
157 |
+
|
158 |
+
## Installation ##
|
159 |
+
The following are the steps to install the OptiMole plugin
|
160 |
+
|
161 |
+
1. In your WordPress Administration Panels, click on Add New option under Plugins from the menu.
|
162 |
+
Click on upload at the top.
|
163 |
+
2. Browse the location and select the OptiMole Plugin and click install now.
|
164 |
+
3. Go to Media -> OptiMole and follow in the instructions on how to enable the service.
|
165 |
+
|
166 |
+
## Frequently Asked Questions ##
|
167 |
+
|
168 |
+
### How many images I can optimize with each plan? ###
|
169 |
+
|
170 |
+
The number of images that you can optimize depends on your original image size and the number of transformations you do for it. Using the Free plan you can optimize up to 1 GB of images, which means around 2000 images at an average of 500Kb per image.
|
171 |
+
|
172 |
+
### What happens if I exceed plan limits? ###
|
173 |
+
|
174 |
+
Once you exceed these, we will contact you and kindly ask to upgrade to the plan that fits you best.
|
175 |
+
|
176 |
+
### What Content Delivery Network (CDN) do you use? ###
|
177 |
+
|
178 |
+
Our FREE plan uses our custom made CDN built with 7 locations around the globe. For the paid plans, we have direct integration with Amazon Cloudfront, with more than 130 locations around the globe.
|
179 |
+
|
180 |
+
### I'm already using a CDN, can I use that instead of yours ? ###
|
181 |
+
|
182 |
+
Short answer, YES. We can help you integrate your default CDN but it will require some additional work from our side and is available to Enterprise plans.
|
183 |
+
|
184 |
+
### I'm already using an image optimization plugin, why should I switch to OptiMole? ###
|
185 |
+
|
186 |
+
You don’t need to change your existing optimization plugin, image optimization is just a small part of what we do, if you are happy with ShortPixel for e.g, feel free to continue to use it, OptiMole would then take care only of serving your image at the RIGHT size, advanced cropping and smart lazy-loading.
|
187 |
+
|
188 |
+
### Will the original images be deleted? ###
|
189 |
+
|
190 |
+
Absolutely No. We use your original images as sources when deliver the optimized images.
|
191 |
+
|
192 |
+
### What is the difference between the Auto, High, Medium, Low compression levels? ###
|
193 |
+
|
194 |
+
A higher compression might result in a small loss of image quality. Selecting the auto level will let Optimole choose the minimum size with no loss in the quality of your picture.
|
195 |
+
|
196 |
+
### I used Kraken, Shortpixel, Optimus, EWWW or WP Smush, Imagify will OptiMole further optimize my images? ###
|
197 |
+
|
198 |
+
Yes, Optimole will also take care of serving your image at the RIGHT size for your visitors and optimize them to the best possible format for their browser.
|
199 |
+
|
200 |
+
### Which formats can be optimized ? ###
|
201 |
+
|
202 |
+
For now we support jpg, png and svg format.
|
203 |
+
|
204 |
+
### Does Optimole automatically serve WebP for Chrome users ? ###
|
205 |
+
|
206 |
+
Yes. We automatically detect user browser and serve WebP if is supported, otherwise we optimize the image in the original format.
|
207 |
+
|
208 |
+
### Can i disable lazyload for PNG images ? ###
|
209 |
+
|
210 |
+
Yes. You need to add `define("OPTML_DISABLE_PNG_LAZYLOAD",true);` to `your wp-config.php` file.
|
211 |
+
|
212 |
+
### Can i disable optimization for a certain image ? ###
|
213 |
+
|
214 |
+
Yes, you can follow this code snippet and replace the sample image with the one you need:
|
215 |
+
<code>
|
216 |
+
add_filter('optml_dont_replace_url', function( $old, $url ) {
|
217 |
+
if ( $url === 'https://example.com/wp-content/uploads/2018/09/1.jpg' ) {
|
218 |
+
return true;
|
219 |
+
}
|
220 |
+
return $old;
|
221 |
+
|
222 |
+
}, 10, 2);
|
223 |
+
</code>
|
assets/css/style.scss
CHANGED
@@ -1,164 +1,189 @@
|
|
1 |
-
|
2 |
-
#optimole-app {
|
3 |
-
padding: 0 30px 0 20px;
|
4 |
-
|
5 |
-
$primary: #EF686B;
|
6 |
-
$success: #34a85e;
|
7 |
-
$danger: #D54222;
|
8 |
-
$info: #5180C1;
|
9 |
-
|
10 |
-
@import "~bulma/bulma";
|
11 |
-
|
12 |
-
.card {
|
13 |
-
transition: all 750ms ease-in-out;
|
14 |
-
border: 0;
|
15 |
-
border-radius: .1875rem;
|
16 |
-
-webkit-box-shadow: 0 1px 15px 1px rgba(39, 39, 39, .1);
|
17 |
-
box-shadow: 0 1px 15px 1px rgba(39, 39, 39, .1);
|
18 |
-
}
|
19 |
-
|
20 |
-
.logo {
|
21 |
-
margin-bottom: 10px;
|
22 |
-
img {
|
23 |
-
max-width: 180px;
|
24 |
-
margin: 0 auto;
|
25 |
-
}
|
26 |
-
}
|
27 |
-
.vue-js-switch {
|
28 |
-
align-self: center;
|
29 |
-
}
|
30 |
-
.api-key-control {
|
31 |
-
padding: 0 15px 0 0;
|
32 |
-
}
|
33 |
-
|
34 |
-
.api-key-field .button.is-danger {
|
35 |
-
padding-left: 20px;
|
36 |
-
padding-right: 20px;
|
37 |
-
}
|
38 |
-
|
39 |
-
.api-key-label {
|
40 |
-
align-self: center;
|
41 |
-
margin: 0.5em 10px 0.5em 0;
|
42 |
-
font-size: 1em;
|
43 |
-
}
|
44 |
-
.header {
|
45 |
-
padding: 0 1.5rem 0;
|
46 |
-
&.level {
|
47 |
-
margin-bottom: 0;
|
48 |
-
}
|
49 |
-
}
|
50 |
-
.account {
|
51 |
-
img {
|
52 |
-
border-top-right-radius: 4px;
|
53 |
-
border-bottom-right-radius: 4px;
|
54 |
-
}
|
55 |
-
.label {
|
56 |
-
margin-bottom: 0;
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
//Optimized images.
|
61 |
-
.optimized-images {
|
62 |
-
|
63 |
-
table td, table th {
|
64 |
-
vertical-align: middle;
|
65 |
-
}
|
66 |
-
}
|
67 |
-
.media-diff {
|
68 |
-
position: relative;
|
69 |
-
margin: 0 auto;
|
70 |
-
video, img {
|
71 |
-
display: block;
|
72 |
-
position: absolute;
|
73 |
-
top: 0;
|
74 |
-
left: 0;
|
75 |
-
width: 100%;
|
76 |
-
height: 100%;
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
.origin-wrapper {
|
81 |
-
position: absolute;
|
82 |
-
left: 0;
|
83 |
-
top: 0;
|
84 |
-
width: 100%;
|
85 |
-
height: 100%;
|
86 |
-
overflow: hidden;
|
87 |
-
z-index: 1;
|
88 |
-
transform: translateZ(0);
|
89 |
-
will-change: width;
|
90 |
-
}
|
91 |
-
|
92 |
-
.handle {
|
93 |
-
position: absolute;
|
94 |
-
top: 0;
|
95 |
-
bottom: 0;
|
96 |
-
color: rgba(255, 255, 255, 0.80);
|
97 |
-
background-color: rgba(255, 255, 255, 0.80);;
|
98 |
-
width: 2px;
|
99 |
-
cursor: ew-resize;
|
100 |
-
transform: translateX(-50%) translateZ(0);
|
101 |
-
z-index: 2;
|
102 |
-
will-change: left;
|
103 |
-
left: 200px;
|
104 |
-
}
|
105 |
-
|
106 |
-
.cursor {
|
107 |
-
position: absolute;
|
108 |
-
top: 50%;
|
109 |
-
left: 50%;
|
110 |
-
transform: translateX(-50%) translateZ(0);
|
111 |
-
.circle {
|
112 |
-
background-color: rgba(255, 255, 255, 0.80);
|
113 |
-
width: 24px;
|
114 |
-
height: 24px;
|
115 |
-
border-radius: 50%;
|
116 |
-
}
|
117 |
-
}
|
118 |
-
.no-padding-right{
|
119 |
-
padding-right:0px !important;
|
120 |
-
}
|
121 |
-
}
|
122 |
-
|
123 |
-
//Fade animation.
|
124 |
-
.fade-enter-active, .fade-leave-active {
|
125 |
-
transition: opacity .5s;
|
126 |
-
}
|
127 |
-
|
128 |
-
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */
|
129 |
-
{
|
130 |
-
opacity: 0;
|
131 |
-
}
|
132 |
-
|
133 |
-
.media_page_optimole #wpbody-content > * {
|
134 |
-
display: none !important;
|
135 |
-
}
|
136 |
-
|
137 |
-
.media_page_optimole #wpbody-content > #optimole-app {
|
138 |
-
display: block !important;
|
139 |
-
}
|
140 |
-
|
141 |
-
#optimole-app img.optml-image {
|
142 |
-
float: left;
|
143 |
-
max-width: 100px;
|
144 |
-
width: auto;
|
145 |
-
margin: auto;
|
146 |
-
}
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
}
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
#optimole-app {
|
3 |
+
padding: 0 30px 0 20px;
|
4 |
+
|
5 |
+
$primary: #EF686B;
|
6 |
+
$success: #34a85e;
|
7 |
+
$danger: #D54222;
|
8 |
+
$info: #5180C1;
|
9 |
+
|
10 |
+
@import "~bulma/bulma";
|
11 |
+
|
12 |
+
.card {
|
13 |
+
transition: all 750ms ease-in-out;
|
14 |
+
border: 0;
|
15 |
+
border-radius: .1875rem;
|
16 |
+
-webkit-box-shadow: 0 1px 15px 1px rgba(39, 39, 39, .1);
|
17 |
+
box-shadow: 0 1px 15px 1px rgba(39, 39, 39, .1);
|
18 |
+
}
|
19 |
+
|
20 |
+
.logo {
|
21 |
+
margin-bottom: 10px;
|
22 |
+
img {
|
23 |
+
max-width: 180px;
|
24 |
+
margin: 0 auto;
|
25 |
+
}
|
26 |
+
}
|
27 |
+
.vue-js-switch {
|
28 |
+
align-self: center;
|
29 |
+
}
|
30 |
+
.api-key-control {
|
31 |
+
padding: 0 15px 0 0;
|
32 |
+
}
|
33 |
+
|
34 |
+
.api-key-field .button.is-danger {
|
35 |
+
padding-left: 20px;
|
36 |
+
padding-right: 20px;
|
37 |
+
}
|
38 |
+
|
39 |
+
.api-key-label {
|
40 |
+
align-self: center;
|
41 |
+
margin: 0.5em 10px 0.5em 0;
|
42 |
+
font-size: 1em;
|
43 |
+
}
|
44 |
+
.header {
|
45 |
+
padding: 0 1.5rem 0;
|
46 |
+
&.level {
|
47 |
+
margin-bottom: 0;
|
48 |
+
}
|
49 |
+
}
|
50 |
+
.account {
|
51 |
+
img {
|
52 |
+
border-top-right-radius: 4px;
|
53 |
+
border-bottom-right-radius: 4px;
|
54 |
+
}
|
55 |
+
.label {
|
56 |
+
margin-bottom: 0;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
//Optimized images.
|
61 |
+
.optimized-images {
|
62 |
+
|
63 |
+
table td, table th {
|
64 |
+
vertical-align: middle;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
.media-diff {
|
68 |
+
position: relative;
|
69 |
+
margin: 0 auto;
|
70 |
+
video, img {
|
71 |
+
display: block;
|
72 |
+
position: absolute;
|
73 |
+
top: 0;
|
74 |
+
left: 0;
|
75 |
+
width: 100%;
|
76 |
+
height: 100%;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
.origin-wrapper {
|
81 |
+
position: absolute;
|
82 |
+
left: 0;
|
83 |
+
top: 0;
|
84 |
+
width: 100%;
|
85 |
+
height: 100%;
|
86 |
+
overflow: hidden;
|
87 |
+
z-index: 1;
|
88 |
+
transform: translateZ(0);
|
89 |
+
will-change: width;
|
90 |
+
}
|
91 |
+
|
92 |
+
.handle {
|
93 |
+
position: absolute;
|
94 |
+
top: 0;
|
95 |
+
bottom: 0;
|
96 |
+
color: rgba(255, 255, 255, 0.80);
|
97 |
+
background-color: rgba(255, 255, 255, 0.80);;
|
98 |
+
width: 2px;
|
99 |
+
cursor: ew-resize;
|
100 |
+
transform: translateX(-50%) translateZ(0);
|
101 |
+
z-index: 2;
|
102 |
+
will-change: left;
|
103 |
+
left: 200px;
|
104 |
+
}
|
105 |
+
|
106 |
+
.cursor {
|
107 |
+
position: absolute;
|
108 |
+
top: 50%;
|
109 |
+
left: 50%;
|
110 |
+
transform: translateX(-50%) translateZ(0);
|
111 |
+
.circle {
|
112 |
+
background-color: rgba(255, 255, 255, 0.80);
|
113 |
+
width: 24px;
|
114 |
+
height: 24px;
|
115 |
+
border-radius: 50%;
|
116 |
+
}
|
117 |
+
}
|
118 |
+
.no-padding-right{
|
119 |
+
padding-right:0px !important;
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
//Fade animation.
|
124 |
+
.fade-enter-active, .fade-leave-active {
|
125 |
+
transition: opacity .5s;
|
126 |
+
}
|
127 |
+
|
128 |
+
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */
|
129 |
+
{
|
130 |
+
opacity: 0;
|
131 |
+
}
|
132 |
+
|
133 |
+
.media_page_optimole #wpbody-content > * {
|
134 |
+
display: none !important;
|
135 |
+
}
|
136 |
+
|
137 |
+
.media_page_optimole #wpbody-content > #optimole-app {
|
138 |
+
display: block !important;
|
139 |
+
}
|
140 |
+
|
141 |
+
#optimole-app img.optml-image {
|
142 |
+
float: left;
|
143 |
+
max-width: 100px;
|
144 |
+
width: auto;
|
145 |
+
margin: auto;
|
146 |
+
}
|
147 |
+
#optimole-app img.optml-image-watermark {
|
148 |
+
width:50px;
|
149 |
+
}
|
150 |
+
|
151 |
+
.optml-ratio-feedback .emoji {
|
152 |
+
font-size: 1.5em;
|
153 |
+
}
|
154 |
+
|
155 |
+
|
156 |
+
.optml-ratio-feedback {
|
157 |
+
float: right;
|
158 |
+
padding-right: 20px;
|
159 |
+
}
|
160 |
+
.optml-image-heading {
|
161 |
+
text-align: left;
|
162 |
+
}
|
163 |
+
|
164 |
+
th.optml-image-ratio-heading {
|
165 |
+
text-align: right !important;
|
166 |
+
font-size: 150%;
|
167 |
+
}
|
168 |
+
@media screen and (max-width: 768px) {
|
169 |
+
li:not(.is-active) > a > span:not(.icon) {
|
170 |
+
visibility: hidden;
|
171 |
+
position: absolute;
|
172 |
+
}
|
173 |
+
|
174 |
+
nav.tabs li:not(.is-active) {
|
175 |
+
-webkit-box-flex: 0;
|
176 |
+
-ms-flex-positive: 0;
|
177 |
+
flex-grow: 0;
|
178 |
+
-ms-flex-negative: 1;
|
179 |
+
flex-shrink: 1;
|
180 |
+
}
|
181 |
+
|
182 |
+
.tabs .icon {
|
183 |
+
margin-left: 0.5em;
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
.tabs li {
|
188 |
+
transition: flex-grow 1s ease;
|
189 |
+
}
|
assets/js/bundle.js
CHANGED
@@ -1,17469 +1,20297 @@
|
|
1 |
-
/******/ (function(modules) { // webpackBootstrap
|
2 |
-
/******/ // The module cache
|
3 |
-
/******/ var installedModules = {};
|
4 |
-
/******/
|
5 |
-
/******/ // The require function
|
6 |
-
/******/ function __webpack_require__(moduleId) {
|
7 |
-
/******/
|
8 |
-
/******/ // Check if module is in cache
|
9 |
-
/******/ if(installedModules[moduleId]) {
|
10 |
-
/******/ return installedModules[moduleId].exports;
|
11 |
-
/******/ }
|
12 |
-
/******/ // Create a new module (and put it into the cache)
|
13 |
-
/******/ var module = installedModules[moduleId] = {
|
14 |
-
/******/ i: moduleId,
|
15 |
-
/******/ l: false,
|
16 |
-
/******/ exports: {}
|
17 |
-
/******/ };
|
18 |
-
/******/
|
19 |
-
/******/ // Execute the module function
|
20 |
-
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
21 |
-
/******/
|
22 |
-
/******/ // Flag the module as loaded
|
23 |
-
/******/ module.l = true;
|
24 |
-
/******/
|
25 |
-
/******/ // Return the exports of the module
|
26 |
-
/******/ return module.exports;
|
27 |
-
/******/ }
|
28 |
-
/******/
|
29 |
-
/******/
|
30 |
-
/******/ // expose the modules object (__webpack_modules__)
|
31 |
-
/******/ __webpack_require__.m = modules;
|
32 |
-
/******/
|
33 |
-
/******/ // expose the module cache
|
34 |
-
/******/ __webpack_require__.c = installedModules;
|
35 |
-
/******/
|
36 |
-
/******/ // define getter function for harmony exports
|
37 |
-
/******/ __webpack_require__.d = function(exports, name, getter) {
|
38 |
-
/******/ if(!__webpack_require__.o(exports, name)) {
|
39 |
-
/******/ Object.defineProperty(exports, name, {
|
40 |
-
/******/ configurable: false,
|
41 |
-
/******/ enumerable: true,
|
42 |
-
/******/ get: getter
|
43 |
-
/******/ });
|
44 |
-
/******/ }
|
45 |
-
/******/ };
|
46 |
-
/******/
|
47 |
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
48 |
-
/******/ __webpack_require__.n = function(module) {
|
49 |
-
/******/ var getter = module && module.__esModule ?
|
50 |
-
/******/ function getDefault() { return module['default']; } :
|
51 |
-
/******/ function getModuleExports() { return module; };
|
52 |
-
/******/ __webpack_require__.d(getter, 'a', getter);
|
53 |
-
/******/ return getter;
|
54 |
-
/******/ };
|
55 |
-
/******/
|
56 |
-
/******/ // Object.prototype.hasOwnProperty.call
|
57 |
-
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
58 |
-
/******/
|
59 |
-
/******/ // __webpack_public_path__
|
60 |
-
/******/ __webpack_require__.p = "/";
|
61 |
-
/******/
|
62 |
-
/******/ // Load entry module and return exports
|
63 |
-
/******/ return __webpack_require__(__webpack_require__.s = 7);
|
64 |
-
/******/ })
|
65 |
-
/************************************************************************/
|
66 |
-
/******/ ([
|
67 |
-
/* 0 */
|
68 |
-
/***/ (function(module, exports) {
|
69 |
-
|
70 |
-
/*
|
71 |
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
72 |
-
Author Tobias Koppers @sokra
|
73 |
-
*/
|
74 |
-
// css base code, injected by the css-loader
|
75 |
-
module.exports = function() {
|
76 |
-
var list = [];
|
77 |
-
|
78 |
-
// return the list of modules as css string
|
79 |
-
list.toString = function toString() {
|
80 |
-
var result = [];
|
81 |
-
for(var i = 0; i < this.length; i++) {
|
82 |
-
var item = this[i];
|
83 |
-
if(item[2]) {
|
84 |
-
result.push("@media " + item[2] + "{" + item[1] + "}");
|
85 |
-
} else {
|
86 |
-
result.push(item[1]);
|
87 |
-
}
|
88 |
-
}
|
89 |
-
return result.join("");
|
90 |
-
};
|
91 |
-
|
92 |
-
// import a list of modules into the list
|
93 |
-
list.i = function(modules, mediaQuery) {
|
94 |
-
if(typeof modules === "string")
|
95 |
-
modules = [[null, modules, ""]];
|
96 |
-
var alreadyImportedModules = {};
|
97 |
-
for(var i = 0; i < this.length; i++) {
|
98 |
-
var id = this[i][0];
|
99 |
-
if(typeof id === "number")
|
100 |
-
alreadyImportedModules[id] = true;
|
101 |
-
}
|
102 |
-
for(i = 0; i < modules.length; i++) {
|
103 |
-
var item = modules[i];
|
104 |
-
// skip already imported module
|
105 |
-
// this implementation is not 100% perfect for weird media query combinations
|
106 |
-
// when a module is imported multiple times with different media queries.
|
107 |
-
// I hope this will never occur (Hey this way we have smaller bundles)
|
108 |
-
if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
|
109 |
-
if(mediaQuery && !item[2]) {
|
110 |
-
item[2] = mediaQuery;
|
111 |
-
} else if(mediaQuery) {
|
112 |
-
item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
|
113 |
-
}
|
114 |
-
list.push(item);
|
115 |
-
}
|
116 |
-
}
|
117 |
-
};
|
118 |
-
return list;
|
119 |
-
};
|
120 |
-
|
121 |
-
|
122 |
-
/***/ }),
|
123 |
-
/* 1 */
|
124 |
-
/***/ (function(module, exports) {
|
125 |
-
|
126 |
-
/*
|
127 |
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
128 |
-
Author Tobias Koppers @sokra
|
129 |
-
*/
|
130 |
-
var stylesInDom = {},
|
131 |
-
memoize = function(fn) {
|
132 |
-
var memo;
|
133 |
-
return function () {
|
134 |
-
if (typeof memo === "undefined") memo = fn.apply(this, arguments);
|
135 |
-
return memo;
|
136 |
-
};
|
137 |
-
},
|
138 |
-
isOldIE = memoize(function() {
|
139 |
-
return /msie [6-9]\b/.test(self.navigator.userAgent.toLowerCase());
|
140 |
-
}),
|
141 |
-
getHeadElement = memoize(function () {
|
142 |
-
return document.head || document.getElementsByTagName("head")[0];
|
143 |
-
}),
|
144 |
-
singletonElement = null,
|
145 |
-
singletonCounter = 0,
|
146 |
-
styleElementsInsertedAtTop = [];
|
147 |
-
|
148 |
-
module.exports = function(list, options) {
|
149 |
-
if(typeof DEBUG !== "undefined" && DEBUG) {
|
150 |
-
if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
|
151 |
-
}
|
152 |
-
|
153 |
-
options = options || {};
|
154 |
-
// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
|
155 |
-
// tags it will allow on a page
|
156 |
-
if (typeof options.singleton === "undefined") options.singleton = isOldIE();
|
157 |
-
|
158 |
-
// By default, add <style> tags to the bottom of <head>.
|
159 |
-
if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
|
160 |
-
|
161 |
-
var styles = listToStyles(list);
|
162 |
-
addStylesToDom(styles, options);
|
163 |
-
|
164 |
-
return function update(newList) {
|
165 |
-
var mayRemove = [];
|
166 |
-
for(var i = 0; i < styles.length; i++) {
|
167 |
-
var item = styles[i];
|
168 |
-
var domStyle = stylesInDom[item.id];
|
169 |
-
domStyle.refs--;
|
170 |
-
mayRemove.push(domStyle);
|
171 |
-
}
|
172 |
-
if(newList) {
|
173 |
-
var newStyles = listToStyles(newList);
|
174 |
-
addStylesToDom(newStyles, options);
|
175 |
-
}
|
176 |
-
for(var i = 0; i < mayRemove.length; i++) {
|
177 |
-
var domStyle = mayRemove[i];
|
178 |
-
if(domStyle.refs === 0) {
|
179 |
-
for(var j = 0; j < domStyle.parts.length; j++)
|
180 |
-
domStyle.parts[j]();
|
181 |
-
delete stylesInDom[domStyle.id];
|
182 |
-
}
|
183 |
-
}
|
184 |
-
};
|
185 |
-
}
|
186 |
-
|
187 |
-
function addStylesToDom(styles, options) {
|
188 |
-
for(var i = 0; i < styles.length; i++) {
|
189 |
-
var item = styles[i];
|
190 |
-
var domStyle = stylesInDom[item.id];
|
191 |
-
if(domStyle) {
|
192 |
-
domStyle.refs++;
|
193 |
-
for(var j = 0; j < domStyle.parts.length; j++) {
|
194 |
-
domStyle.parts[j](item.parts[j]);
|
195 |
-
}
|
196 |
-
for(; j < item.parts.length; j++) {
|
197 |
-
domStyle.parts.push(addStyle(item.parts[j], options));
|
198 |
-
}
|
199 |
-
} else {
|
200 |
-
var parts = [];
|
201 |
-
for(var j = 0; j < item.parts.length; j++) {
|
202 |
-
parts.push(addStyle(item.parts[j], options));
|
203 |
-
}
|
204 |
-
stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
|
205 |
-
}
|
206 |
-
}
|
207 |
-
}
|
208 |
-
|
209 |
-
function listToStyles(list) {
|
210 |
-
var styles = [];
|
211 |
-
var newStyles = {};
|
212 |
-
for(var i = 0; i < list.length; i++) {
|
213 |
-
var item = list[i];
|
214 |
-
var id = item[0];
|
215 |
-
var css = item[1];
|
216 |
-
var media = item[2];
|
217 |
-
var sourceMap = item[3];
|
218 |
-
var part = {css: css, media: media, sourceMap: sourceMap};
|
219 |
-
if(!newStyles[id])
|
220 |
-
styles.push(newStyles[id] = {id: id, parts: [part]});
|
221 |
-
else
|
222 |
-
newStyles[id].parts.push(part);
|
223 |
-
}
|
224 |
-
return styles;
|
225 |
-
}
|
226 |
-
|
227 |
-
function insertStyleElement(options, styleElement) {
|
228 |
-
var head = getHeadElement();
|
229 |
-
var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
|
230 |
-
if (options.insertAt === "top") {
|
231 |
-
if(!lastStyleElementInsertedAtTop) {
|
232 |
-
head.insertBefore(styleElement, head.firstChild);
|
233 |
-
} else if(lastStyleElementInsertedAtTop.nextSibling) {
|
234 |
-
head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
|
235 |
-
} else {
|
236 |
-
head.appendChild(styleElement);
|
237 |
-
}
|
238 |
-
styleElementsInsertedAtTop.push(styleElement);
|
239 |
-
} else if (options.insertAt === "bottom") {
|
240 |
-
head.appendChild(styleElement);
|
241 |
-
} else {
|
242 |
-
throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
|
243 |
-
}
|
244 |
-
}
|
245 |
-
|
246 |
-
function removeStyleElement(styleElement) {
|
247 |
-
styleElement.parentNode.removeChild(styleElement);
|
248 |
-
var idx = styleElementsInsertedAtTop.indexOf(styleElement);
|
249 |
-
if(idx >= 0) {
|
250 |
-
styleElementsInsertedAtTop.splice(idx, 1);
|
251 |
-
}
|
252 |
-
}
|
253 |
-
|
254 |
-
function createStyleElement(options) {
|
255 |
-
var styleElement = document.createElement("style");
|
256 |
-
styleElement.type = "text/css";
|
257 |
-
insertStyleElement(options, styleElement);
|
258 |
-
return styleElement;
|
259 |
-
}
|
260 |
-
|
261 |
-
function createLinkElement(options) {
|
262 |
-
var linkElement = document.createElement("link");
|
263 |
-
linkElement.rel = "stylesheet";
|
264 |
-
insertStyleElement(options, linkElement);
|
265 |
-
return linkElement;
|
266 |
-
}
|
267 |
-
|
268 |
-
function addStyle(obj, options) {
|
269 |
-
var styleElement, update, remove;
|
270 |
-
|
271 |
-
if (options.singleton) {
|
272 |
-
var styleIndex = singletonCounter++;
|
273 |
-
styleElement = singletonElement || (singletonElement = createStyleElement(options));
|
274 |
-
update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
|
275 |
-
remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
|
276 |
-
} else if(obj.sourceMap &&
|
277 |
-
typeof URL === "function" &&
|
278 |
-
typeof URL.createObjectURL === "function" &&
|
279 |
-
typeof URL.revokeObjectURL === "function" &&
|
280 |
-
typeof Blob === "function" &&
|
281 |
-
typeof btoa === "function") {
|
282 |
-
styleElement = createLinkElement(options);
|
283 |
-
update = updateLink.bind(null, styleElement);
|
284 |
-
remove = function() {
|
285 |
-
removeStyleElement(styleElement);
|
286 |
-
if(styleElement.href)
|
287 |
-
URL.revokeObjectURL(styleElement.href);
|
288 |
-
};
|
289 |
-
} else {
|
290 |
-
styleElement = createStyleElement(options);
|
291 |
-
update = applyToTag.bind(null, styleElement);
|
292 |
-
remove = function() {
|
293 |
-
removeStyleElement(styleElement);
|
294 |
-
};
|
295 |
-
}
|
296 |
-
|
297 |
-
update(obj);
|
298 |
-
|
299 |
-
return function updateStyle(newObj) {
|
300 |
-
if(newObj) {
|
301 |
-
if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
|
302 |
-
return;
|
303 |
-
update(obj = newObj);
|
304 |
-
} else {
|
305 |
-
remove();
|
306 |
-
}
|
307 |
-
};
|
308 |
-
}
|
309 |
-
|
310 |
-
var replaceText = (function () {
|
311 |
-
var textStore = [];
|
312 |
-
|
313 |
-
return function (index, replacement) {
|
314 |
-
textStore[index] = replacement;
|
315 |
-
return textStore.filter(Boolean).join('\n');
|
316 |
-
};
|
317 |
-
})();
|
318 |
-
|
319 |
-
function applyToSingletonTag(styleElement, index, remove, obj) {
|
320 |
-
var css = remove ? "" : obj.css;
|
321 |
-
|
322 |
-
if (styleElement.styleSheet) {
|
323 |
-
styleElement.styleSheet.cssText = replaceText(index, css);
|
324 |
-
} else {
|
325 |
-
var cssNode = document.createTextNode(css);
|
326 |
-
var childNodes = styleElement.childNodes;
|
327 |
-
if (childNodes[index]) styleElement.removeChild(childNodes[index]);
|
328 |
-
if (childNodes.length) {
|
329 |
-
styleElement.insertBefore(cssNode, childNodes[index]);
|
330 |
-
} else {
|
331 |
-
styleElement.appendChild(cssNode);
|
332 |
-
}
|
333 |
-
}
|
334 |
-
}
|
335 |
-
|
336 |
-
function applyToTag(styleElement, obj) {
|
337 |
-
var css = obj.css;
|
338 |
-
var media = obj.media;
|
339 |
-
|
340 |
-
if(media) {
|
341 |
-
styleElement.setAttribute("media", media)
|
342 |
-
}
|
343 |
-
|
344 |
-
if(styleElement.styleSheet) {
|
345 |
-
styleElement.styleSheet.cssText = css;
|
346 |
-
} else {
|
347 |
-
while(styleElement.firstChild) {
|
348 |
-
styleElement.removeChild(styleElement.firstChild);
|
349 |
-
}
|
350 |
-
styleElement.appendChild(document.createTextNode(css));
|
351 |
-
}
|
352 |
-
}
|
353 |
-
|
354 |
-
function updateLink(linkElement, obj) {
|
355 |
-
var css = obj.css;
|
356 |
-
var sourceMap = obj.sourceMap;
|
357 |
-
|
358 |
-
if(sourceMap) {
|
359 |
-
// http://stackoverflow.com/a/26603875
|
360 |
-
css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
|
361 |
-
}
|
362 |
-
|
363 |
-
var blob = new Blob([css], { type: "text/css" });
|
364 |
-
|
365 |
-
var oldSrc = linkElement.href;
|
366 |
-
|
367 |
-
linkElement.href = URL.createObjectURL(blob);
|
368 |
-
|
369 |
-
if(oldSrc)
|
370 |
-
URL.revokeObjectURL(oldSrc);
|
371 |
-
}
|
372 |
-
|
373 |
-
|
374 |
-
/***/ }),
|
375 |
-
/* 2 */
|
376 |
-
/***/ (function(module,
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
//
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
function
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
*
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
function
|
462 |
-
return
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
function
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
}
|
495 |
-
|
496 |
-
/**
|
497 |
-
*
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
*
|
508 |
-
*/
|
509 |
-
function
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
/**
|
546 |
-
*
|
547 |
-
*/
|
548 |
-
var
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
*
|
566 |
-
*/
|
567 |
-
|
568 |
-
|
569 |
-
function
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
return
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
*
|
593 |
-
*/
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
return
|
612 |
-
}
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
}
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
*
|
813 |
-
*/
|
814 |
-
|
815 |
-
|
816 |
-
/**
|
817 |
-
*
|
818 |
-
*/
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
var
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
var
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
//
|
914 |
-
var
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
var
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
var
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
if (
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
}
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
this.
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
|
1190 |
-
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
1214 |
-
|
1215 |
-
|
1216 |
-
|
1217 |
-
|
1218 |
-
|
1219 |
-
|
1220 |
-
|
1221 |
-
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
|
1230 |
-
|
1231 |
-
|
1232 |
-
|
1233 |
-
|
1234 |
-
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
1263 |
-
|
1264 |
-
|
1265 |
-
|
1266 |
-
|
1267 |
-
|
1268 |
-
|
1269 |
-
|
1270 |
-
|
1271 |
-
|
1272 |
-
|
1273 |
-
|
1274 |
-
|
1275 |
-
|
1276 |
-
|
1277 |
-
|
1278 |
-
|
1279 |
-
|
1280 |
-
|
1281 |
-
|
1282 |
-
|
1283 |
-
|
1284 |
-
|
1285 |
-
|
1286 |
-
|
1287 |
-
|
1288 |
-
|
1289 |
-
*
|
1290 |
-
|
1291 |
-
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
|
1297 |
-
|
1298 |
-
|
1299 |
-
*
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
-
|
1308 |
-
|
1309 |
-
|
1310 |
-
|
1311 |
-
|
1312 |
-
|
1313 |
-
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
|
1322 |
-
|
1323 |
-
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
|
1329 |
-
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
1334 |
-
|
1335 |
-
|
1336 |
-
|
1337 |
-
|
1338 |
-
|
1339 |
-
|
1340 |
-
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
var
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
|
1367 |
-
|
1368 |
-
|
1369 |
-
|
1370 |
-
|
1371 |
-
|
1372 |
-
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
1381 |
-
|
1382 |
-
|
1383 |
-
|
1384 |
-
|
1385 |
-
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
1389 |
-
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
|
1394 |
-
|
1395 |
-
|
1396 |
-
|
1397 |
-
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
|
1406 |
-
) {
|
1407 |
-
|
1408 |
-
}
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
|
1418 |
-
|
1419 |
-
|
1420 |
-
|
1421 |
-
|
1422 |
-
|
1423 |
-
|
1424 |
-
|
1425 |
-
|
1426 |
-
|
1427 |
-
|
1428 |
-
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
|
1433 |
-
|
1434 |
-
|
1435 |
-
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
1442 |
-
|
1443 |
-
|
1444 |
-
|
1445 |
-
|
1446 |
-
|
1447 |
-
|
1448 |
-
|
1449 |
-
|
1450 |
-
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
-
|
1459 |
-
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
|
1464 |
-
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
1469 |
-
|
1470 |
-
|
1471 |
-
|
1472 |
-
|
1473 |
-
|
1474 |
-
|
1475 |
-
|
1476 |
-
|
1477 |
-
|
1478 |
-
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
-
|
1487 |
-
|
1488 |
-
|
1489 |
-
|
1490 |
-
|
1491 |
-
|
1492 |
-
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
}
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
if
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
1516 |
-
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
|
1531 |
-
|
1532 |
-
|
1533 |
-
|
1534 |
-
|
1535 |
-
|
1536 |
-
|
1537 |
-
|
1538 |
-
|
1539 |
-
|
1540 |
-
|
1541 |
-
|
1542 |
-
|
1543 |
-
|
1544 |
-
|
1545 |
-
|
1546 |
-
|
1547 |
-
|
1548 |
-
|
1549 |
-
|
1550 |
-
|
1551 |
-
|
1552 |
-
|
1553 |
-
|
1554 |
-
|
1555 |
-
|
1556 |
-
|
1557 |
-
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
|
1562 |
-
|
1563 |
-
|
1564 |
-
|
1565 |
-
|
1566 |
-
|
1567 |
-
}
|
1568 |
-
|
1569 |
-
|
1570 |
-
|
1571 |
-
|
1572 |
-
|
1573 |
-
|
1574 |
-
|
1575 |
-
|
1576 |
-
|
1577 |
-
|
1578 |
-
|
1579 |
-
|
1580 |
-
|
1581 |
-
);
|
1582 |
-
|
1583 |
-
|
1584 |
-
|
1585 |
-
|
1586 |
-
|
1587 |
-
|
1588 |
-
|
1589 |
-
|
1590 |
-
|
1591 |
-
|
1592 |
-
|
1593 |
-
|
1594 |
-
|
1595 |
-
|
1596 |
-
|
1597 |
-
) {
|
1598 |
-
|
1599 |
-
|
1600 |
-
|
1601 |
-
|
1602 |
-
|
1603 |
-
|
1604 |
-
|
1605 |
-
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
|
1611 |
-
|
1612 |
-
|
1613 |
-
|
1614 |
-
|
1615 |
-
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
|
1620 |
-
|
1621 |
-
|
1622 |
-
|
1623 |
-
) {
|
1624 |
-
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
1630 |
-
|
1631 |
-
|
1632 |
-
|
1633 |
-
|
1634 |
-
|
1635 |
-
|
1636 |
-
|
1637 |
-
|
1638 |
-
|
1639 |
-
|
1640 |
-
|
1641 |
-
|
1642 |
-
|
1643 |
-
|
1644 |
-
|
1645 |
-
|
1646 |
-
|
1647 |
-
|
1648 |
-
)
|
1649 |
-
|
1650 |
-
|
1651 |
-
|
1652 |
-
|
1653 |
-
|
1654 |
-
|
1655 |
-
|
1656 |
-
|
1657 |
-
|
1658 |
-
|
1659 |
-
|
1660 |
-
|
1661 |
-
|
1662 |
-
|
1663 |
-
|
1664 |
-
|
1665 |
-
|
1666 |
-
|
1667 |
-
|
1668 |
-
|
1669 |
-
|
1670 |
-
|
1671 |
-
|
1672 |
-
|
1673 |
-
|
1674 |
-
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
-
|
1679 |
-
|
1680 |
-
|
1681 |
-
|
1682 |
-
|
1683 |
-
|
1684 |
-
|
1685 |
-
|
1686 |
-
|
1687 |
-
|
1688 |
-
if
|
1689 |
-
|
1690 |
-
|
1691 |
-
|
1692 |
-
|
1693 |
-
|
1694 |
-
|
1695 |
-
|
1696 |
-
|
1697 |
-
|
1698 |
-
|
1699 |
-
|
1700 |
-
|
1701 |
-
|
1702 |
-
|
1703 |
-
|
1704 |
-
|
1705 |
-
|
1706 |
-
|
1707 |
-
|
1708 |
-
|
1709 |
-
|
1710 |
-
|
1711 |
-
|
1712 |
-
|
1713 |
-
|
1714 |
-
|
1715 |
-
if
|
1716 |
-
|
1717 |
-
|
1718 |
-
|
1719 |
-
|
1720 |
-
|
1721 |
-
|
1722 |
-
|
1723 |
-
|
1724 |
-
|
1725 |
-
|
1726 |
-
|
1727 |
-
|
1728 |
-
}
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
|
1733 |
-
|
1734 |
-
|
1735 |
-
|
1736 |
-
|
1737 |
-
|
1738 |
-
|
1739 |
-
|
1740 |
-
|
1741 |
-
|
1742 |
-
|
1743 |
-
|
1744 |
-
|
1745 |
-
|
1746 |
-
|
1747 |
-
|
1748 |
-
|
1749 |
-
|
1750 |
-
}
|
1751 |
-
|
1752 |
-
|
1753 |
-
|
1754 |
-
|
1755 |
-
|
1756 |
-
|
1757 |
-
|
1758 |
-
|
1759 |
-
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
1763 |
-
|
1764 |
-
|
1765 |
-
|
1766 |
-
|
1767 |
-
|
1768 |
-
/**
|
1769 |
-
*
|
1770 |
-
*/
|
1771 |
-
function
|
1772 |
-
var
|
1773 |
-
|
1774 |
-
|
1775 |
-
|
1776 |
-
|
1777 |
-
|
1778 |
-
|
1779 |
-
|
1780 |
-
|
1781 |
-
|
1782 |
-
|
1783 |
-
|
1784 |
-
|
1785 |
-
|
1786 |
-
|
1787 |
-
|
1788 |
-
|
1789 |
-
|
1790 |
-
|
1791 |
-
|
1792 |
-
|
1793 |
-
|
1794 |
-
|
1795 |
-
|
1796 |
-
|
1797 |
-
|
1798 |
-
|
1799 |
-
|
1800 |
-
|
1801 |
-
|
1802 |
-
|
1803 |
-
|
1804 |
-
|
1805 |
-
|
1806 |
-
|
1807 |
-
|
1808 |
-
|
1809 |
-
|
1810 |
-
|
1811 |
-
|
1812 |
-
|
1813 |
-
|
1814 |
-
|
1815 |
-
|
1816 |
-
|
1817 |
-
|
1818 |
-
|
1819 |
-
|
1820 |
-
|
1821 |
-
|
1822 |
-
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
-
|
1827 |
-
|
1828 |
-
|
1829 |
-
|
1830 |
-
|
1831 |
-
|
1832 |
-
|
1833 |
-
|
1834 |
-
|
1835 |
-
|
1836 |
-
|
1837 |
-
|
1838 |
-
|
1839 |
-
|
1840 |
-
|
1841 |
-
|
1842 |
-
|
1843 |
-
|
1844 |
-
|
1845 |
-
|
1846 |
-
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
|
1851 |
-
|
1852 |
-
|
1853 |
-
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
1859 |
-
|
1860 |
-
|
1861 |
-
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
|
1866 |
-
|
1867 |
-
|
1868 |
-
|
1869 |
-
|
1870 |
-
|
1871 |
-
|
1872 |
-
|
1873 |
-
|
1874 |
-
|
1875 |
-
|
1876 |
-
|
1877 |
-
|
1878 |
-
|
1879 |
-
|
1880 |
-
}
|
1881 |
-
|
1882 |
-
|
1883 |
-
|
1884 |
-
|
1885 |
-
|
1886 |
-
|
1887 |
-
|
1888 |
-
|
1889 |
-
|
1890 |
-
|
1891 |
-
|
1892 |
-
|
1893 |
-
|
1894 |
-
|
1895 |
-
|
1896 |
-
|
1897 |
-
|
1898 |
-
|
1899 |
-
|
1900 |
-
|
1901 |
-
|
1902 |
-
|
1903 |
-
|
1904 |
-
|
1905 |
-
|
1906 |
-
|
1907 |
-
|
1908 |
-
|
1909 |
-
|
1910 |
-
|
1911 |
-
|
1912 |
-
|
1913 |
-
|
1914 |
-
|
1915 |
-
|
1916 |
-
|
1917 |
-
|
1918 |
-
|
1919 |
-
|
1920 |
-
|
1921 |
-
|
1922 |
-
|
1923 |
-
}
|
1924 |
-
|
1925 |
-
|
1926 |
-
|
1927 |
-
|
1928 |
-
|
1929 |
-
|
1930 |
-
|
1931 |
-
|
1932 |
-
|
1933 |
-
|
1934 |
-
|
1935 |
-
|
1936 |
-
|
1937 |
-
|
1938 |
-
|
1939 |
-
|
1940 |
-
|
1941 |
-
|
1942 |
-
|
1943 |
-
|
1944 |
-
|
1945 |
-
|
1946 |
-
|
1947 |
-
|
1948 |
-
|
1949 |
-
|
1950 |
-
|
1951 |
-
|
1952 |
-
|
1953 |
-
|
1954 |
-
|
1955 |
-
|
1956 |
-
|
1957 |
-
|
1958 |
-
|
1959 |
-
|
1960 |
-
|
1961 |
-
|