Version Description
- Fixed: Conflict with front-end editors
Download this release
Release Info
Developer | UmeshSingla |
Plugin | Smush Image Compression and Optimization |
Version | 2.7.9.1 |
Comparing to | |
See all releases |
Code changes from version 2.7.8.1 to 2.7.9.1
- _src/js/index.js +3 -0
- _src/scss/admin.scss +1 -0
- assets/css/wp-smushit-admin.css +60 -121
- assets/images/dev-team@2x.png +0 -0
- assets/images/df-banner.jpg +0 -0
- assets/images/df-icon.png +0 -0
- assets/images/hb-banner.jpg +0 -0
- assets/images/hb-icon.png +0 -0
- assets/images/sc-banner.png +0 -0
- assets/images/sc-icon.png +0 -0
- assets/js/bulk-smush.js +0 -8
- assets/js/jQueryFileTree.js +11 -4
- assets/js/media.js +46 -64
- assets/js/ui.js +0 -23
- assets/js/wp-smushit-admin.js +68 -43
- assets/shared-ui-2/css/admin.min.css +1 -0
- assets/shared-ui-2/fonts/WPMU-DEV-Icon.eot +0 -0
- assets/shared-ui-2/fonts/WPMU-DEV-Icon.svg +233 -0
- assets/shared-ui-2/fonts/WPMU-DEV-Icon.ttf +0 -0
- assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff +0 -0
- assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff2 +0 -0
- assets/shared-ui-2/images/graphic-hb-minify-summary@2x.png +0 -0
- assets/shared-ui-2/images/plugins-crawl-icon.png +0 -0
- assets/shared-ui-2/images/plugins-crawl-icon@2x.png +0 -0
- assets/shared-ui-2/images/plugins-crawl.jpg +0 -0
- assets/shared-ui-2/images/plugins-defender-icon.png +0 -0
- assets/shared-ui-2/images/plugins-defender-icon@2x.png +0 -0
- assets/shared-ui-2/images/plugins-defender.jpg +0 -0
- assets/shared-ui-2/images/plugins-smush-icon.png +0 -0
- assets/shared-ui-2/images/plugins-smush-icon@2x.png +0 -0
- assets/shared-ui-2/images/plugins-smush.jpg +0 -0
- assets/shared-ui-2/js/admin.min.js +7 -0
- assets/shared-ui-2/js/admin.min.js.map +1 -0
- assets/shared-ui/README.md +0 -13
- assets/shared-ui/contributors.txt +0 -1
- assets/shared-ui/wdev-ui.css +177 -858
- extras/dash-notice/wpmudev-dash-notification.php +0 -1306
- languages/wp-smushit.pot +279 -242
- lib/class-wp-smush-admin.php +187 -113
- lib/class-wp-smush-backup.php +9 -5
- lib/class-wp-smush-bulk.php +0 -96
- lib/class-wp-smush-db.php +3 -2
- lib/class-wp-smush-dir.php +101 -52
- lib/class-wp-smush-helper.php +51 -0
- lib/class-wp-smush-nextgen.php +10 -3
- lib/class-wp-smush-recommender.php +134 -0
- lib/class-wp-smush-s3.php +5 -5
- lib/class-wp-smush-settings.php +21 -4
- lib/class-wp-smush-share.php +2 -2
- lib/class-wp-smush-stats.php +0 -592
- lib/class-wp-smush-ui.php +28 -86
- lib/class-wp-smush.php +177 -55
- lib/nextgen-integration/class-wp-smush-nextgen-admin.php +167 -101
- lib/nextgen-integration/class-wp-smush-nextgen-bulk.php +5 -6
- lib/nextgen-integration/class-wp-smush-nextgen-stats.php +219 -41
- lib/wp-async-task.php +0 -275
- readme.txt +30 -4
- uninstall.php +6 -1
- wp-smush.php +31 -8
_src/js/index.js
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
import '@wpmudev/shared-ui';
|
2 |
+
|
3 |
+
console.log('This is the entry point.');
|
_src/scss/admin.scss
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
@import "~@wpmudev/shared-ui/scss/shared-ui.scss";
|
assets/css/wp-smushit-admin.css
CHANGED
@@ -523,7 +523,8 @@ label.setting.smush-stats .wp-smush-stats-holder td,
|
|
523 |
word-wrap: break-word;
|
524 |
}
|
525 |
|
526 |
-
label.setting.smush-stats a.wp-smush-action.wp-smush-title
|
|
|
527 |
display: inline-block;
|
528 |
}
|
529 |
|
@@ -561,7 +562,7 @@ label.setting.smush-stats button.wp-smush-send span {
|
|
561 |
}
|
562 |
|
563 |
.media-modal .media-sidebar label.setting.smush-stats button.wp-smush-send span {
|
564 |
-
|
565 |
}
|
566 |
|
567 |
label.setting.smush-stats button.wp-smush-send[disabled] span {
|
@@ -835,14 +836,6 @@ label.setting.smush-stats div.wp-smush-progress span {
|
|
835 |
padding-top: 20px;
|
836 |
}
|
837 |
|
838 |
-
.wpmud .row .col-half.wp-smush-pro-for-free {
|
839 |
-
padding-left: 0;
|
840 |
-
}
|
841 |
-
|
842 |
-
.wpmud .row .col-half.wp-smush-pro-for-free .dev-box {
|
843 |
-
padding: 30px 0;
|
844 |
-
}
|
845 |
-
|
846 |
.wpmud .wp-smush-premium .smush-container-subheading a {
|
847 |
border: solid 2px #1ABC9C;
|
848 |
border-radius: 13px;
|
@@ -854,6 +847,16 @@ label.setting.smush-stats div.wp-smush-progress span {
|
|
854 |
color: #fff;
|
855 |
}
|
856 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
857 |
.smush-stats-wrapper .smush-container-subheading {
|
858 |
margin: 1.2em 0 0.9em;
|
859 |
max-width: 90%;
|
@@ -930,7 +933,7 @@ Quick Setup Dialog
|
|
930 |
padding: 30px;
|
931 |
}
|
932 |
|
933 |
-
.wpmud .dev-overlay.wp-smush-get-pro .box{
|
934 |
padding-bottom: 0;
|
935 |
}
|
936 |
|
@@ -1015,8 +1018,7 @@ div.smush-quick-setup-settings div.submit-button-wrap {
|
|
1015 |
}
|
1016 |
|
1017 |
.wpmud div.smush-quick-setup-settings div.submit-button-wrap button:hover,
|
1018 |
-
.wpmud div.smush-quick-setup-settings div.submit-button-wrap button:focus
|
1019 |
-
{
|
1020 |
background-color: #0A9BD6 !important;
|
1021 |
}
|
1022 |
|
@@ -1225,7 +1227,8 @@ div.wp-smush-dir-limit,
|
|
1225 |
div.smush-s3-setup-error,
|
1226 |
div.smush-s3-setup-message,
|
1227 |
div.wp-smush-s3support-alert,
|
1228 |
-
div.wp-smush-notice.wp-smush-api-message.warning
|
|
|
1229 |
background-color: #FFF5D5;
|
1230 |
border: none;
|
1231 |
color: #333333;
|
@@ -1309,7 +1312,7 @@ div.wp-smush-dir-limit .icon-fi-info:before {
|
|
1309 |
}
|
1310 |
|
1311 |
.wpmud .bulk-smush-wrapper .wp-smush-remaining .icon-fi-warning-alert,
|
1312 |
-
.wp-smush-api-message .icon-fi-warning-alert{
|
1313 |
display: inline-block;
|
1314 |
font-size: 20px;
|
1315 |
margin-right: 8px;
|
@@ -1544,14 +1547,20 @@ div.smush-sub-setting-wrapper:last-child {
|
|
1544 |
margin-bottom: 0;
|
1545 |
}
|
1546 |
|
1547 |
-
div.smush-sub-setting-wrapper span.wp-smush-setting-desc
|
|
|
1548 |
color: #888888;
|
1549 |
display: inline-block;
|
|
|
1550 |
font-size: 13px;
|
1551 |
line-height: 22px;
|
1552 |
margin-top: 10px;
|
1553 |
}
|
1554 |
|
|
|
|
|
|
|
|
|
1555 |
/** Stats Container **/
|
1556 |
.wpmud .dev-box.smush-stats-wrapper {
|
1557 |
color: #333333;
|
@@ -1632,7 +1641,7 @@ a.wp-smush-lossy-enable {
|
|
1632 |
|
1633 |
.wpmud .wp-smush-stats-try-pro:hover > a, .wpmud .wp-smush-stats-try-pro a:hover {
|
1634 |
background-color: #1ABC9C;
|
1635 |
-
color: #fff;
|
1636 |
cursor: pointer;
|
1637 |
}
|
1638 |
|
@@ -1641,30 +1650,6 @@ a.wp-smush-lossy-enable {
|
|
1641 |
margin-top: -2px;
|
1642 |
}
|
1643 |
|
1644 |
-
/** For Smush Pro Promo and Humming Bird promo **/
|
1645 |
-
.wpmud .wp-smush-pro-adv {
|
1646 |
-
background-image: url(../images/dev-team.png);
|
1647 |
-
background-repeat: no-repeat;
|
1648 |
-
background-position: center bottom;
|
1649 |
-
background-size: 90%;
|
1650 |
-
height: 500px;
|
1651 |
-
overflow: hidden;
|
1652 |
-
}
|
1653 |
-
|
1654 |
-
.wpmud .dev-box.wp-smush-pro-adv .wp-smush-container-header {
|
1655 |
-
margin: -30px 0 30px;
|
1656 |
-
}
|
1657 |
-
|
1658 |
-
.wpmud .wp-smush-pro-adv .box-content {
|
1659 |
-
padding: 0 30px;
|
1660 |
-
}
|
1661 |
-
|
1662 |
-
.wp-smushit-container-right .wp-smush-pro-adv > img {
|
1663 |
-
max-width: 100%;
|
1664 |
-
margin: 0 auto;
|
1665 |
-
display: block;
|
1666 |
-
}
|
1667 |
-
|
1668 |
.wpmud .dev-overlay {
|
1669 |
-webkit-font-smoothing: antialiased;
|
1670 |
}
|
@@ -1732,60 +1717,6 @@ div.smush-pro-link-wrap {
|
|
1732 |
box-shadow: none;
|
1733 |
}
|
1734 |
|
1735 |
-
.wp-smush-pro-cta {
|
1736 |
-
overflow: hidden;
|
1737 |
-
display: block;
|
1738 |
-
padding: 20px;
|
1739 |
-
}
|
1740 |
-
|
1741 |
-
.wp-smush-hb-cta {
|
1742 |
-
display: block;
|
1743 |
-
margin: 0 auto;
|
1744 |
-
overflow: hidden;
|
1745 |
-
padding-bottom: 0;
|
1746 |
-
padding-top: 30px;
|
1747 |
-
width: 242px;
|
1748 |
-
}
|
1749 |
-
|
1750 |
-
.wp-smush-hummingbird-image {
|
1751 |
-
display: block;
|
1752 |
-
margin: 40px 0 20px 0;
|
1753 |
-
overflow: hidden;
|
1754 |
-
}
|
1755 |
-
|
1756 |
-
.wpmud .wp-smush-promo-content {
|
1757 |
-
color: #666666;
|
1758 |
-
line-height: 1.7;
|
1759 |
-
margin: auto;
|
1760 |
-
text-align: center;
|
1761 |
-
}
|
1762 |
-
|
1763 |
-
.wpmud .wp-smush-promo-content-2 {
|
1764 |
-
margin-top: 30px;
|
1765 |
-
}
|
1766 |
-
|
1767 |
-
.wpmud .wp-smush-pro-cta .button.button-cta {
|
1768 |
-
box-shadow: none !important;
|
1769 |
-
}
|
1770 |
-
|
1771 |
-
.wpmud .wp-smush-pro-cta .button.button-cta:hover,
|
1772 |
-
.wpmud .wp-smush-pro-cta .button.button-cta:active,
|
1773 |
-
.wpmud .wp-smush-pro-cta .button.button-cta:focus {
|
1774 |
-
background: #17b394 !important;
|
1775 |
-
}
|
1776 |
-
|
1777 |
-
.wpmud .wp-smush-hb-cta .button.button-cta {
|
1778 |
-
box-shadow: none;
|
1779 |
-
width: 100%;
|
1780 |
-
}
|
1781 |
-
|
1782 |
-
.wpmud .box-content .wp-smush-hb-cta .button.button-cta:hover,
|
1783 |
-
.wpmud .box-content .wp-smush-hb-cta .button.button-cta:active,
|
1784 |
-
.wpmud .box-content .wp-smush-hb-cta .button.button-cta:focus {
|
1785 |
-
background: #0A9BD6 !important;
|
1786 |
-
box-shadow: none;
|
1787 |
-
}
|
1788 |
-
|
1789 |
/** Re Smush **/
|
1790 |
.wp-smush-settings-changed {
|
1791 |
background: #dff6fa;
|
@@ -2315,11 +2246,8 @@ div.wp-smush-dir-desc {
|
|
2315 |
vertical-align: top;
|
2316 |
}
|
2317 |
|
2318 |
-
.jqueryFileTree li {
|
2319 |
-
display: inline-block;
|
2320 |
-
}
|
2321 |
-
|
2322 |
.wpmud UL.jqueryFileTree LI {
|
|
|
2323 |
padding: 0 0 5px 20px;
|
2324 |
}
|
2325 |
|
@@ -2346,7 +2274,8 @@ div.wp-smush-dir-desc {
|
|
2346 |
background: url(../images/folder-open-selected.svg) left top no-repeat;
|
2347 |
}
|
2348 |
|
2349 |
-
.wpmud UL.jqueryFileTree LI.expanded.selected > a
|
|
|
2350 |
color: #17a8e3;
|
2351 |
}
|
2352 |
|
@@ -2537,8 +2466,8 @@ div.smush-s3-setup-message .icon-fi-check-tick {
|
|
2537 |
vertical-align: middle;
|
2538 |
}
|
2539 |
|
2540 |
-
div.smush-s3-setup-error i.
|
2541 |
-
div.smush-s3-setup-message .icon-fi-check-tick {
|
2542 |
margin-top: 3px;
|
2543 |
vertical-align: top;
|
2544 |
}
|
@@ -2683,7 +2612,8 @@ li.wp-smush-image-ele span.wp-smush-image-path {
|
|
2683 |
font-weight: normal;
|
2684 |
height: 22px;
|
2685 |
line-height: 22px;
|
2686 |
-
margin-
|
|
|
2687 |
opacity: 1;
|
2688 |
position: absolute;
|
2689 |
speak: none;
|
@@ -2798,12 +2728,6 @@ div.wp-smush-info.notice {
|
|
2798 |
background-color: #17A8E3;
|
2799 |
}
|
2800 |
|
2801 |
-
.wpmud div.smush-page-wrap div.wp-smush-pro-for-free .button {
|
2802 |
-
background-color: #1ABC9C;
|
2803 |
-
border-radius: 4px;
|
2804 |
-
padding: 10px 20px
|
2805 |
-
}
|
2806 |
-
|
2807 |
/* Bulk Smush button*/
|
2808 |
button.wp-smush-all.wp-smush-button {
|
2809 |
float: right;
|
@@ -2827,6 +2751,33 @@ button.wp-smush-all.wp-smush-button {
|
|
2827 |
background: #AEAEAE;
|
2828 |
}
|
2829 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2830 |
/** Media Queries **/
|
2831 |
@media screen and (min-width: 1425px) {
|
2832 |
.wpmud .wp-smush-super-smush-promo {
|
@@ -2869,14 +2820,6 @@ button.wp-smush-all.wp-smush-button {
|
|
2869 |
}
|
2870 |
|
2871 |
@media screen and (max-width: 1024px) and ( min-width: 800px ) {
|
2872 |
-
.wpmud .wrap .dev-box:not(.wp-smush-pro-adv) {
|
2873 |
-
padding: 20px;
|
2874 |
-
}
|
2875 |
-
|
2876 |
-
.wpmud .dev-box.wp-smush-pro-adv .box-title, .wpmud .wp-smush-pro-adv .box-content {
|
2877 |
-
padding: 0 20px;
|
2878 |
-
}
|
2879 |
-
|
2880 |
/** Stats Section **/
|
2881 |
.smush-stats-wrapper h3 {
|
2882 |
padding: 6px 0;
|
@@ -2920,10 +2863,6 @@ button.wp-smush-all.wp-smush-button {
|
|
2920 |
overflow: visible;
|
2921 |
width: 50% !important;
|
2922 |
}
|
2923 |
-
|
2924 |
-
.wpmud .wp-smush-promo-content, .wpmud .wp-smush-promo-content-smaller {
|
2925 |
-
max-width: none;
|
2926 |
-
}
|
2927 |
}
|
2928 |
|
2929 |
@media only screen and (max-width: 960px) {
|
523 |
word-wrap: break-word;
|
524 |
}
|
525 |
|
526 |
+
label.setting.smush-stats a.wp-smush-action.wp-smush-title,
|
527 |
+
div.smush-status-links a.wp-smush-action.wp-smush-title {
|
528 |
display: inline-block;
|
529 |
}
|
530 |
|
562 |
}
|
563 |
|
564 |
.media-modal .media-sidebar label.setting.smush-stats button.wp-smush-send span {
|
565 |
+
padding-top: 0;
|
566 |
}
|
567 |
|
568 |
label.setting.smush-stats button.wp-smush-send[disabled] span {
|
836 |
padding-top: 20px;
|
837 |
}
|
838 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
839 |
.wpmud .wp-smush-premium .smush-container-subheading a {
|
840 |
border: solid 2px #1ABC9C;
|
841 |
border-radius: 13px;
|
847 |
color: #fff;
|
848 |
}
|
849 |
|
850 |
+
.attachment-details .setting div.smush-status-links {
|
851 |
+
float: none;
|
852 |
+
text-align: left;
|
853 |
+
margin-bottom: 15px;
|
854 |
+
}
|
855 |
+
|
856 |
+
div.attachment-details .setting div.smush-status-links.smush-status-links div.smush-stats-wrapper {
|
857 |
+
margin-top: 15px;
|
858 |
+
}
|
859 |
+
|
860 |
.smush-stats-wrapper .smush-container-subheading {
|
861 |
margin: 1.2em 0 0.9em;
|
862 |
max-width: 90%;
|
933 |
padding: 30px;
|
934 |
}
|
935 |
|
936 |
+
.wpmud .dev-overlay.wp-smush-get-pro .box {
|
937 |
padding-bottom: 0;
|
938 |
}
|
939 |
|
1018 |
}
|
1019 |
|
1020 |
.wpmud div.smush-quick-setup-settings div.submit-button-wrap button:hover,
|
1021 |
+
.wpmud div.smush-quick-setup-settings div.submit-button-wrap button:focus {
|
|
|
1022 |
background-color: #0A9BD6 !important;
|
1023 |
}
|
1024 |
|
1227 |
div.smush-s3-setup-error,
|
1228 |
div.smush-s3-setup-message,
|
1229 |
div.wp-smush-s3support-alert,
|
1230 |
+
div.wp-smush-notice.wp-smush-api-message.warning,
|
1231 |
+
div.wp-smush-notice.missing_table {
|
1232 |
background-color: #FFF5D5;
|
1233 |
border: none;
|
1234 |
color: #333333;
|
1312 |
}
|
1313 |
|
1314 |
.wpmud .bulk-smush-wrapper .wp-smush-remaining .icon-fi-warning-alert,
|
1315 |
+
.wp-smush-api-message .icon-fi-warning-alert {
|
1316 |
display: inline-block;
|
1317 |
font-size: 20px;
|
1318 |
margin-right: 8px;
|
1547 |
margin-bottom: 0;
|
1548 |
}
|
1549 |
|
1550 |
+
div.smush-sub-setting-wrapper span.wp-smush-setting-desc,
|
1551 |
+
div.smush-quick-setup-settings span.wp-smush-setting-desc {
|
1552 |
color: #888888;
|
1553 |
display: inline-block;
|
1554 |
+
font-family: "Roboto", "sans-serif";
|
1555 |
font-size: 13px;
|
1556 |
line-height: 22px;
|
1557 |
margin-top: 10px;
|
1558 |
}
|
1559 |
|
1560 |
+
div.smush-sub-setting-wrapper span.wp-smush-setting-desc.desc-note {
|
1561 |
+
font-weight: 500;
|
1562 |
+
}
|
1563 |
+
|
1564 |
/** Stats Container **/
|
1565 |
.wpmud .dev-box.smush-stats-wrapper {
|
1566 |
color: #333333;
|
1641 |
|
1642 |
.wpmud .wp-smush-stats-try-pro:hover > a, .wpmud .wp-smush-stats-try-pro a:hover {
|
1643 |
background-color: #1ABC9C;
|
1644 |
+
color: #fff !important;
|
1645 |
cursor: pointer;
|
1646 |
}
|
1647 |
|
1650 |
margin-top: -2px;
|
1651 |
}
|
1652 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1653 |
.wpmud .dev-overlay {
|
1654 |
-webkit-font-smoothing: antialiased;
|
1655 |
}
|
1717 |
box-shadow: none;
|
1718 |
}
|
1719 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1720 |
/** Re Smush **/
|
1721 |
.wp-smush-settings-changed {
|
1722 |
background: #dff6fa;
|
2246 |
vertical-align: top;
|
2247 |
}
|
2248 |
|
|
|
|
|
|
|
|
|
2249 |
.wpmud UL.jqueryFileTree LI {
|
2250 |
+
display: inline-block;
|
2251 |
padding: 0 0 5px 20px;
|
2252 |
}
|
2253 |
|
2274 |
background: url(../images/folder-open-selected.svg) left top no-repeat;
|
2275 |
}
|
2276 |
|
2277 |
+
.wpmud UL.jqueryFileTree LI.expanded.selected > a,
|
2278 |
+
.wpmud UL.jqueryFileTree LI.file.selected a {
|
2279 |
color: #17a8e3;
|
2280 |
}
|
2281 |
|
2466 |
vertical-align: middle;
|
2467 |
}
|
2468 |
|
2469 |
+
div.smush-s3-setup-error i.icon-fi-warning-alert,
|
2470 |
+
div.smush-s3-setup-message i.icon-fi-check-tick {
|
2471 |
margin-top: 3px;
|
2472 |
vertical-align: top;
|
2473 |
}
|
2612 |
font-weight: normal;
|
2613 |
height: 22px;
|
2614 |
line-height: 22px;
|
2615 |
+
margin-left: 1px;
|
2616 |
+
margin-top: -11px;
|
2617 |
opacity: 1;
|
2618 |
position: absolute;
|
2619 |
speak: none;
|
2728 |
background-color: #17A8E3;
|
2729 |
}
|
2730 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2731 |
/* Bulk Smush button*/
|
2732 |
button.wp-smush-all.wp-smush-button {
|
2733 |
float: right;
|
2751 |
background: #AEAEAE;
|
2752 |
}
|
2753 |
|
2754 |
+
/**
|
2755 |
+
WordPress.org Recommendation Styling
|
2756 |
+
*/
|
2757 |
+
.sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-hummingbird {
|
2758 |
+
background-image: url(../images/hb-banner.jpg);
|
2759 |
+
}
|
2760 |
+
|
2761 |
+
.sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-defender {
|
2762 |
+
background-image: url(../images/df-banner.jpg);
|
2763 |
+
}
|
2764 |
+
|
2765 |
+
.sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-smartcrawl {
|
2766 |
+
background-image: url(../images/sc-banner.png);
|
2767 |
+
}
|
2768 |
+
|
2769 |
+
.sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-hummingbird > span {
|
2770 |
+
background-image: url(../images/hb-icon.png);
|
2771 |
+
}
|
2772 |
+
|
2773 |
+
.sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-defender > span {
|
2774 |
+
background-image: url(../images/df-icon.png);
|
2775 |
+
}
|
2776 |
+
|
2777 |
+
.sui-2-1-0 .sui-cross-sell-modules .sui-col-md-4 .sui-cross-smartcrawl > span {
|
2778 |
+
background-image: url(../images/sc-icon.png);
|
2779 |
+
}
|
2780 |
+
|
2781 |
/** Media Queries **/
|
2782 |
@media screen and (min-width: 1425px) {
|
2783 |
.wpmud .wp-smush-super-smush-promo {
|
2820 |
}
|
2821 |
|
2822 |
@media screen and (max-width: 1024px) and ( min-width: 800px ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2823 |
/** Stats Section **/
|
2824 |
.smush-stats-wrapper h3 {
|
2825 |
padding: 6px 0;
|
2863 |
overflow: visible;
|
2864 |
width: 50% !important;
|
2865 |
}
|
|
|
|
|
|
|
|
|
2866 |
}
|
2867 |
|
2868 |
@media only screen and (max-width: 960px) {
|
assets/images/dev-team@2x.png
ADDED
Binary file
|
assets/images/df-banner.jpg
ADDED
Binary file
|
assets/images/df-icon.png
ADDED
Binary file
|
assets/images/hb-banner.jpg
ADDED
Binary file
|
assets/images/hb-icon.png
ADDED
Binary file
|
assets/images/sc-banner.png
ADDED
Binary file
|
assets/images/sc-icon.png
ADDED
Binary file
|
assets/js/bulk-smush.js
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* All the function related to Bulk Smushing page
|
3 |
-
*
|
4 |
-
* @author Umesh Kumar <umeshsingla05@gmail.com>
|
5 |
-
*
|
6 |
-
* @since 2.7.1
|
7 |
-
*
|
8 |
-
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/jQueryFileTree.js
CHANGED
@@ -71,7 +71,7 @@ var bind = function(fn, me){ return function(){ return fn.apply(me, arguments);
|
|
71 |
}
|
72 |
if ($ev.parent().hasClass('directory')) {
|
73 |
//Add a selected class to directory, Thanks to shortpixel for the modification in here
|
74 |
-
_this.jqft.container.find('LI
|
75 |
$ev.parent().addClass('selected');
|
76 |
|
77 |
if ($ev.parent().hasClass('collapsed')) {
|
@@ -103,16 +103,23 @@ var bind = function(fn, me){ return function(){ return fn.apply(me, arguments);
|
|
103 |
});
|
104 |
}
|
105 |
} else {
|
106 |
-
if (!options.multiSelect) {
|
107 |
jqft.container.find('li').removeClass('selected');
|
108 |
$ev.parent().addClass('selected');
|
109 |
} else {
|
|
|
110 |
if ($ev.parent().find('input').is(':checked')) {
|
111 |
$ev.parent().find('input').prop('checked', false);
|
112 |
$ev.parent().removeClass('selected');
|
113 |
} else {
|
114 |
-
|
115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
}
|
117 |
}
|
118 |
_this._trigger('filetreeclicked', _this.data);
|
71 |
}
|
72 |
if ($ev.parent().hasClass('directory')) {
|
73 |
//Add a selected class to directory, Thanks to shortpixel for the modification in here
|
74 |
+
_this.jqft.container.find('LI').removeClass('selected');
|
75 |
$ev.parent().addClass('selected');
|
76 |
|
77 |
if ($ev.parent().hasClass('collapsed')) {
|
103 |
});
|
104 |
}
|
105 |
} else {
|
106 |
+
if (!options.multiSelect && ! $ev.parent().hasClass('file') ) {
|
107 |
jqft.container.find('li').removeClass('selected');
|
108 |
$ev.parent().addClass('selected');
|
109 |
} else {
|
110 |
+
jqft.container.find('li.directory').removeClass('selected');
|
111 |
if ($ev.parent().find('input').is(':checked')) {
|
112 |
$ev.parent().find('input').prop('checked', false);
|
113 |
$ev.parent().removeClass('selected');
|
114 |
} else {
|
115 |
+
|
116 |
+
//If the element already have selected class, reset it
|
117 |
+
if( $ev.parent().hasClass('selected') ) {
|
118 |
+
$ev.parent().removeClass('selected');
|
119 |
+
}else {
|
120 |
+
$ev.parent().find('input').prop('checked', true);
|
121 |
+
$ev.parent().addClass('selected');
|
122 |
+
}
|
123 |
}
|
124 |
}
|
125 |
_this._trigger('filetreeclicked', _this.data);
|
assets/js/media.js
CHANGED
@@ -3,59 +3,52 @@
|
|
3 |
*
|
4 |
*
|
5 |
*/
|
6 |
-
(function(
|
7 |
|
8 |
-
|
9 |
-
|
10 |
|
11 |
-
|
12 |
-
'undefined' != typeof smush_media.view.Attachment.Details.TwoColumn
|
13 |
// Local instance of the Attachment Details TwoColumn used in the edit attachment modal view
|
14 |
var smushMediaTwoColumn = smush_media.view.Attachment.Details.TwoColumn;
|
15 |
|
16 |
/**
|
|
|
17 |
* Add Smush details to attachment.
|
18 |
*/
|
19 |
smush_media.view.Attachment.Details.TwoColumn = smushMediaTwoColumn.extend({
|
20 |
|
21 |
-
|
22 |
-
//
|
23 |
-
this.
|
24 |
},
|
25 |
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
_nonce: smush_vars.nonce.get_smush_status,
|
30 |
-
id: id
|
31 |
-
}
|
32 |
-
}).done(_.bind(this.renderSmush, this));
|
33 |
-
},
|
34 |
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
|
39 |
-
|
40 |
-
|
41 |
|
42 |
-
|
43 |
-
if (!response) {
|
44 |
-
return;
|
45 |
-
}
|
46 |
-
var $detailsHtml = this.$el.find('.attachment-compat');
|
47 |
-
var html = this.generateHTML(response);
|
48 |
-
$detailsHtml.append(html);
|
49 |
-
},
|
50 |
|
51 |
-
|
52 |
var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
|
53 |
var html = template({
|
54 |
label: smush_vars.strings['stats_label'],
|
55 |
-
value:
|
56 |
});
|
57 |
|
58 |
-
|
|
|
|
|
|
|
|
|
59 |
}
|
60 |
});
|
61 |
}
|
@@ -66,47 +59,36 @@
|
|
66 |
/**
|
67 |
* Add Smush details to attachment.
|
68 |
*/
|
69 |
-
smush_media.view.Attachment.Details = smushAttachmentDetails.extend(
|
70 |
|
71 |
-
|
72 |
-
//
|
73 |
-
this.
|
74 |
},
|
|
|
|
|
|
|
75 |
|
76 |
-
|
77 |
-
|
78 |
-
data: {
|
79 |
-
_nonce: smush_vars.nonce.get_smush_status,
|
80 |
-
id: id
|
81 |
-
}
|
82 |
-
} ).done( _.bind( this.renderSmush, this ) );
|
83 |
-
},
|
84 |
-
|
85 |
-
renderSmush: function( response ) {
|
86 |
-
// Render parent media.view.Settings.AttachmentDisplay
|
87 |
-
smushAttachmentDetails.prototype.render.apply( this );
|
88 |
-
|
89 |
-
this.renderSmushStatus( response );
|
90 |
-
},
|
91 |
-
|
92 |
-
renderSmushStatus: function( response ) {
|
93 |
-
if ( ! response ) {
|
94 |
-
return;
|
95 |
}
|
96 |
-
var $detailsHtml = this.$el.parent().find('.compat-item');
|
97 |
-
var html = this.generateHTML( response );
|
98 |
-
$detailsHtml.append( html );
|
99 |
-
},
|
100 |
|
101 |
-
|
|
|
|
|
102 |
var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
|
103 |
var html = template({
|
104 |
label: smush_vars.strings['stats_label'],
|
105 |
-
value:
|
106 |
});
|
107 |
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
109 |
}
|
110 |
-
}
|
111 |
|
112 |
-
})(
|
3 |
*
|
4 |
*
|
5 |
*/
|
6 |
+
(function ($, _) {
|
7 |
|
8 |
+
// Local reference to the WordPress media namespace.
|
9 |
+
var smush_media = wp.media;
|
10 |
|
11 |
+
if ('undefined' != typeof smush_media.view &&
|
12 |
+
'undefined' != typeof smush_media.view.Attachment.Details.TwoColumn) {
|
13 |
// Local instance of the Attachment Details TwoColumn used in the edit attachment modal view
|
14 |
var smushMediaTwoColumn = smush_media.view.Attachment.Details.TwoColumn;
|
15 |
|
16 |
/**
|
17 |
+
/*
|
18 |
* Add Smush details to attachment.
|
19 |
*/
|
20 |
smush_media.view.Attachment.Details.TwoColumn = smushMediaTwoColumn.extend({
|
21 |
|
22 |
+
initialize: function () {
|
23 |
+
// Always make sure that our content is up to date.
|
24 |
+
this.model.on('change', this.render, this);
|
25 |
},
|
26 |
|
27 |
+
render: function () {
|
28 |
+
// Ensure that the main attachment fields are rendered.
|
29 |
+
smush_media.view.Attachment.prototype.render.apply(this, arguments);
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
+
if (typeof (this.model.get('smush')) == 'undefined') {
|
32 |
+
return this;
|
33 |
+
}
|
34 |
|
35 |
+
// Detach the views, append our custom fields, make sure that our data is fully updated and re-render the updated view.
|
36 |
+
this.views.detach();
|
37 |
|
38 |
+
var $detailsHtml = this.$el.find('.settings');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
+
//Create the template
|
41 |
var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
|
42 |
var html = template({
|
43 |
label: smush_vars.strings['stats_label'],
|
44 |
+
value: this.model.get('smush')
|
45 |
});
|
46 |
|
47 |
+
$detailsHtml.append(html);
|
48 |
+
this.model.fetch();
|
49 |
+
this.views.render();
|
50 |
+
|
51 |
+
return this;
|
52 |
}
|
53 |
});
|
54 |
}
|
59 |
/**
|
60 |
* Add Smush details to attachment.
|
61 |
*/
|
62 |
+
smush_media.view.Attachment.Details = smushAttachmentDetails.extend({
|
63 |
|
64 |
+
initialize: function () {
|
65 |
+
// Always make sure that our content is up to date.
|
66 |
+
this.model.on('change', this.render, this);
|
67 |
},
|
68 |
+
render: function () {
|
69 |
+
// Ensure that the main attachment fields are rendered.
|
70 |
+
smush_media.view.Attachment.prototype.render.apply(this, arguments);
|
71 |
|
72 |
+
if (typeof (this.model.get('smush')) == 'undefined') {
|
73 |
+
return this;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
}
|
|
|
|
|
|
|
|
|
75 |
|
76 |
+
// Detach the views, append our custom fields, make sure that our data is fully updated and re-render the updated view.
|
77 |
+
this.views.detach();
|
78 |
+
|
79 |
var template = _.template('<label class="setting smush-stats" data-setting="description"><span class="name"><%= label %></span><span class="value"><%= value %></span></label>');
|
80 |
var html = template({
|
81 |
label: smush_vars.strings['stats_label'],
|
82 |
+
value: this.model.get('smush')
|
83 |
});
|
84 |
|
85 |
+
this.$el.append(html);
|
86 |
+
|
87 |
+
this.model.fetch();
|
88 |
+
this.views.render();
|
89 |
+
|
90 |
+
return this;
|
91 |
}
|
92 |
+
});
|
93 |
|
94 |
+
})(jQuery, _);
|
assets/js/ui.js
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Bulk Page UI/UX
|
3 |
-
*
|
4 |
-
*/
|
5 |
-
jQuery(function ($) {
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Remove the quick setup dialog
|
9 |
-
*/
|
10 |
-
function remove_dialog() {
|
11 |
-
$('dialog#smush-quick-setup').remove();
|
12 |
-
}
|
13 |
-
|
14 |
-
//Show the Quick Setup Dialog
|
15 |
-
if ($('#smush-quick-setup').size() > 0) {
|
16 |
-
WDP.showOverlay("#smush-quick-setup", {
|
17 |
-
title: wp_smush_msgs.quick_setup_title,
|
18 |
-
class: 'no-close wp-smush-overlay'
|
19 |
-
});
|
20 |
-
remove_dialog();
|
21 |
-
}
|
22 |
-
}
|
23 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/wp-smushit-admin.js
CHANGED
@@ -41,17 +41,6 @@ var membership_validity = function (data) {
|
|
41 |
}
|
42 |
}
|
43 |
};
|
44 |
-
/**
|
45 |
-
* Resize Background width
|
46 |
-
*/
|
47 |
-
var resize_width = function () {
|
48 |
-
var width = jQuery('.wp-smush-pro-for-free').width();
|
49 |
-
if ('undefined' != typeof ( width ) && 500 < width) {
|
50 |
-
jQuery('.wpmud .wp-smush-pro-adv').css({'background-size': '500px'});
|
51 |
-
} else {
|
52 |
-
jQuery('.wpmud .wp-smush-pro-adv').css({'background-size': '90%'});
|
53 |
-
}
|
54 |
-
};
|
55 |
|
56 |
var remove_element = function (el, timeout) {
|
57 |
if (typeof timeout == 'undefined') {
|
@@ -220,8 +209,17 @@ jQuery(function ($) {
|
|
220 |
this.hide_loader();
|
221 |
this.request.done(function (response) {
|
222 |
if (typeof response.data != 'undefined') {
|
223 |
-
|
224 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
|
226 |
//Check whether to show membership validity notice or not
|
227 |
membership_validity(response.data);
|
@@ -235,12 +233,6 @@ jQuery(function ($) {
|
|
235 |
self.$status.html(response.data.error_msg);
|
236 |
self.$status.show();
|
237 |
}
|
238 |
-
if (response.data.status) {
|
239 |
-
self.$status.html(response.data.status);
|
240 |
-
}
|
241 |
-
//Check if stats div exists
|
242 |
-
var parent = self.$status.parent();
|
243 |
-
var stats_div = parent.find('.smush-stats-wrapper');
|
244 |
if ('undefined' != stats_div && stats_div.length) {
|
245 |
stats_div.replaceWith(response.data.stats);
|
246 |
} else {
|
@@ -519,8 +511,13 @@ jQuery(function ($) {
|
|
519 |
self.update_remaining_count();
|
520 |
} else {
|
521 |
|
522 |
-
if (self.is_bulk
|
523 |
-
|
|
|
|
|
|
|
|
|
|
|
524 |
}
|
525 |
}
|
526 |
self.single_done();
|
@@ -697,9 +694,13 @@ jQuery(function ($) {
|
|
697 |
//Hide stats
|
698 |
$('.smush-stats-wrapper').hide();
|
699 |
|
700 |
-
var mode = '';
|
701 |
if( 'smush_restore_image' == smush_action ) {
|
702 |
-
|
|
|
|
|
|
|
|
|
703 |
}
|
704 |
|
705 |
//Get the image ID and nonce
|
@@ -723,9 +724,15 @@ jQuery(function ($) {
|
|
723 |
//reset all functionality
|
724 |
enable_links(current_button);
|
725 |
|
726 |
-
if (r.success && 'undefined' != typeof(
|
727 |
-
//
|
728 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
729 |
} else {
|
730 |
if (r.data.message) {
|
731 |
//show error
|
@@ -917,6 +924,11 @@ jQuery(function ($) {
|
|
917 |
wp_smushit_data.size_after = 'undefined' != typeof r.data.size_after ? r.data.size_after : wp_smushit_data.size_after;
|
918 |
wp_smushit_data.savings_resize = 'undefined' != typeof r.data.savings_resize ? r.data.savings_resize : wp_smushit_data.savings_resize;
|
919 |
wp_smushit_data.savings_conversion = 'undefined' != typeof r.data.savings_conversion ? r.data.savings_conversion : wp_smushit_data.savings_conversion;
|
|
|
|
|
|
|
|
|
|
|
920 |
}
|
921 |
|
922 |
var smush_percent = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;
|
@@ -1005,6 +1017,8 @@ jQuery(function ($) {
|
|
1005 |
},
|
1006 |
async: false
|
1007 |
});
|
|
|
|
|
1008 |
return res;
|
1009 |
};
|
1010 |
/**
|
@@ -1336,7 +1350,7 @@ jQuery(function ($) {
|
|
1336 |
$('.wp-smush-savings .wp-smush-stats-human').html(formatBytes(wp_smushit_data.savings_bytes, 1));
|
1337 |
|
1338 |
//Update the savings percent
|
1339 |
-
wp_smushit_data.savings_percent = precise_round(( parseInt(wp_smushit_data.savings_bytes) / parseInt(wp_smushit_data.size_before) ) * 100, 1);
|
1340 |
$('.wp-smush-savings .wp-smush-stats-percent').html(wp_smushit_data.savings_percent);
|
1341 |
|
1342 |
//Update Savings in share message
|
@@ -1529,6 +1543,7 @@ jQuery(function ($) {
|
|
1529 |
|
1530 |
//Check, if limit is exceeded for free version
|
1531 |
if (typeof res.data !== "undefined" && res.data.error == 'dir_smush_limit_exceeded') {
|
|
|
1532 |
//Show error, Bulk Smush limit exceeded
|
1533 |
directory_smush_finished('wp-smush-dir-limit');
|
1534 |
return;
|
@@ -1718,7 +1733,7 @@ jQuery(function ($) {
|
|
1718 |
e.preventDefault();
|
1719 |
//Replace the `+` with a `-`
|
1720 |
var slide_symbol = $(this).find('.stats-toggle');
|
1721 |
-
$(this).parents().eq(
|
1722 |
slide_symbol.text(slide_symbol.text() == '+' ? '-' : '+');
|
1723 |
|
1724 |
|
@@ -1766,6 +1781,11 @@ jQuery(function ($) {
|
|
1766 |
var current_button = $(this);
|
1767 |
var smush_action = 'smush_restore_image';
|
1768 |
process_smush_action(e, current_button, smush_action, 'restore');
|
|
|
|
|
|
|
|
|
|
|
1769 |
});
|
1770 |
|
1771 |
/** Resmush: Media Library **/
|
@@ -1972,13 +1992,17 @@ jQuery(function ($) {
|
|
1972 |
wp_smushit_data.savings_resize = 'undefined' != typeof stats.savings_resize ? parseInt(wp_smushit_data.savings_resize) + stats.savings_resize : wp_smushit_data.savings_resize;
|
1973 |
wp_smushit_data.savings_conversion = 'undefined' != typeof stats.savings_conversion ? parseInt(wp_smushit_data.savings_conversion) + stats.savings_conversion : wp_smushit_data.savings_conversion;
|
1974 |
//Add directory smush stats
|
1975 |
-
if( 'undefined' != typeof ( wp_smushit_data.savings_dir_smush.orig_size ) ) {
|
1976 |
wp_smushit_data.size_before = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_before) + parseInt(wp_smushit_data.savings_dir_smush.orig_size) : wp_smushit_data.size_before;
|
1977 |
wp_smushit_data.size_after = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_after) + parseInt(wp_smushit_data.savings_dir_smush.image_size) : wp_smushit_data.size_after;
|
1978 |
}
|
1979 |
|
1980 |
wp_smushit_data.count_resize = 'undefined' != typeof stats.count_resize ? parseInt( wp_smushit_data.count_resize ) + stats.count_resize : wp_smushit_data.count_resize;
|
1981 |
}
|
|
|
|
|
|
|
|
|
1982 |
update_stats();
|
1983 |
}
|
1984 |
});
|
@@ -2112,15 +2136,6 @@ jQuery(function ($) {
|
|
2112 |
return false;
|
2113 |
});
|
2114 |
|
2115 |
-
//Adjust background image size if required
|
2116 |
-
if ($('.wp-smush-pro-for-free').length) {
|
2117 |
-
//On Page load
|
2118 |
-
resize_width();
|
2119 |
-
//Adjust background image
|
2120 |
-
$(window).resize(function () {
|
2121 |
-
resize_width();
|
2122 |
-
});
|
2123 |
-
}
|
2124 |
//Handle Re-check button functionality
|
2125 |
$("#wp-smush-revalidate-member").on('click', function (e) {
|
2126 |
e.preventDefault();
|
@@ -2186,10 +2201,14 @@ jQuery(function ($) {
|
|
2186 |
//Display the loader
|
2187 |
$('button.dir-smush-button-wrap span.spinner').addClass('is-active');
|
2188 |
|
|
|
2189 |
$(".wp-smush-list-dialog .content").fileTree({
|
2190 |
-
|
2191 |
-
|
2192 |
-
|
|
|
|
|
|
|
2193 |
|
2194 |
});
|
2195 |
|
@@ -2252,7 +2271,7 @@ jQuery(function ($) {
|
|
2252 |
close_dialog();
|
2253 |
|
2254 |
//Show Scan result
|
2255 |
-
$('.wp-smush-scan-result').removeClass('hidden');
|
2256 |
}).done(function (res) {
|
2257 |
|
2258 |
//If there was no image list, return
|
@@ -2353,7 +2372,7 @@ jQuery(function ($) {
|
|
2353 |
e.preventDefault();
|
2354 |
|
2355 |
var self = $(this);
|
2356 |
-
var parent = self.
|
2357 |
|
2358 |
//Hide the link
|
2359 |
self.hide();
|
@@ -2384,6 +2403,12 @@ jQuery(function ($) {
|
|
2384 |
parent.siblings('li.wp-smush-image-ul:first').prepend('<hr />');
|
2385 |
}
|
2386 |
parent.remove();
|
|
|
|
|
|
|
|
|
|
|
|
|
2387 |
}
|
2388 |
});
|
2389 |
});
|
41 |
}
|
42 |
}
|
43 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
var remove_element = function (el, timeout) {
|
46 |
if (typeof timeout == 'undefined') {
|
209 |
this.hide_loader();
|
210 |
this.request.done(function (response) {
|
211 |
if (typeof response.data != 'undefined') {
|
212 |
+
|
213 |
+
//Check if stats div exists
|
214 |
+
var parent = self.$status.parent();
|
215 |
+
var stats_div = parent.find('.smush-stats-wrapper');
|
216 |
+
|
217 |
+
//If we've updated status, replace the content
|
218 |
+
if (response.data.status) {
|
219 |
+
//remove Links
|
220 |
+
parent.find('.smush-status-links').remove()
|
221 |
+
self.$status.replaceWith(response.data.status);
|
222 |
+
}
|
223 |
|
224 |
//Check whether to show membership validity notice or not
|
225 |
membership_validity(response.data);
|
233 |
self.$status.html(response.data.error_msg);
|
234 |
self.$status.show();
|
235 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
if ('undefined' != stats_div && stats_div.length) {
|
237 |
stats_div.replaceWith(response.data.stats);
|
238 |
} else {
|
511 |
self.update_remaining_count();
|
512 |
} else {
|
513 |
|
514 |
+
if (self.is_bulk) {
|
515 |
+
if (res.success) {
|
516 |
+
self.update_progress(res);
|
517 |
+
} else if (self.ids.length == 0) {
|
518 |
+
//Sync stats anyway
|
519 |
+
self.sync_stats();
|
520 |
+
}
|
521 |
}
|
522 |
}
|
523 |
self.single_done();
|
694 |
//Hide stats
|
695 |
$('.smush-stats-wrapper').hide();
|
696 |
|
697 |
+
var mode = 'grid';
|
698 |
if( 'smush_restore_image' == smush_action ) {
|
699 |
+
if( $(document).find('div.media-modal.wp-core-ui').length > 0 ) {
|
700 |
+
mode = 'grid';
|
701 |
+
}else {
|
702 |
+
mode = window.location.search.indexOf('item') > -1 ? 'grid' : 'list';
|
703 |
+
}
|
704 |
}
|
705 |
|
706 |
//Get the image ID and nonce
|
724 |
//reset all functionality
|
725 |
enable_links(current_button);
|
726 |
|
727 |
+
if (r.success && 'undefined' != typeof(r.data.button)) {
|
728 |
+
//Replace in immediate parent for nextgen
|
729 |
+
if ('undefined' != typeof (this.data) && this.data.indexOf('nextgen') > -1) {
|
730 |
+
//Show the smush button, and remove stats and restore option
|
731 |
+
current_button.parent().html(r.data.button);
|
732 |
+
} else {
|
733 |
+
//Show the smush button, and remove stats and restore option
|
734 |
+
current_button.parents().eq(1).html(r.data.button);
|
735 |
+
}
|
736 |
} else {
|
737 |
if (r.data.message) {
|
738 |
//show error
|
924 |
wp_smushit_data.size_after = 'undefined' != typeof r.data.size_after ? r.data.size_after : wp_smushit_data.size_after;
|
925 |
wp_smushit_data.savings_resize = 'undefined' != typeof r.data.savings_resize ? r.data.savings_resize : wp_smushit_data.savings_resize;
|
926 |
wp_smushit_data.savings_conversion = 'undefined' != typeof r.data.savings_conversion ? r.data.savings_conversion : wp_smushit_data.savings_conversion;
|
927 |
+
wp_smushit_data.count_resize = 'undefined' != typeof r.data.count_resize ? r.data.count_resize : wp_smushit_data.count_resize;
|
928 |
+
}
|
929 |
+
|
930 |
+
if( 'nextgen' == scan_type ) {
|
931 |
+
wp_smushit_data.bytes = parseInt( wp_smushit_data.size_before ) - parseInt( wp_smushit_data.size_after )
|
932 |
}
|
933 |
|
934 |
var smush_percent = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;
|
1017 |
},
|
1018 |
async: false
|
1019 |
});
|
1020 |
+
//Update the button text
|
1021 |
+
$('button.wp-smush-select-dir').html(wp_smush_msgs.add_dir);
|
1022 |
return res;
|
1023 |
};
|
1024 |
/**
|
1350 |
$('.wp-smush-savings .wp-smush-stats-human').html(formatBytes(wp_smushit_data.savings_bytes, 1));
|
1351 |
|
1352 |
//Update the savings percent
|
1353 |
+
wp_smushit_data.savings_percent = parseInt(wp_smushit_data.savings_bytes) > 0 ? precise_round(( parseInt(wp_smushit_data.savings_bytes) / parseInt(wp_smushit_data.size_before) ) * 100, 1) : 0;
|
1354 |
$('.wp-smush-savings .wp-smush-stats-percent').html(wp_smushit_data.savings_percent);
|
1355 |
|
1356 |
//Update Savings in share message
|
1543 |
|
1544 |
//Check, if limit is exceeded for free version
|
1545 |
if (typeof res.data !== "undefined" && res.data.error == 'dir_smush_limit_exceeded') {
|
1546 |
+
first_child.removeClass('processed');
|
1547 |
//Show error, Bulk Smush limit exceeded
|
1548 |
directory_smush_finished('wp-smush-dir-limit');
|
1549 |
return;
|
1733 |
e.preventDefault();
|
1734 |
//Replace the `+` with a `-`
|
1735 |
var slide_symbol = $(this).find('.stats-toggle');
|
1736 |
+
$(this).parents().eq(2).find('.smush-stats-wrapper').slideToggle();
|
1737 |
slide_symbol.text(slide_symbol.text() == '+' ? '-' : '+');
|
1738 |
|
1739 |
|
1781 |
var current_button = $(this);
|
1782 |
var smush_action = 'smush_restore_image';
|
1783 |
process_smush_action(e, current_button, smush_action, 'restore');
|
1784 |
+
//Change the class oa parent div ( Level 2 )
|
1785 |
+
var parent = current_button.parents().eq(1);
|
1786 |
+
if (parent.hasClass('smushed')) {
|
1787 |
+
parent.removeClass('smushed').addClass('unsmushed');
|
1788 |
+
}
|
1789 |
});
|
1790 |
|
1791 |
/** Resmush: Media Library **/
|
1992 |
wp_smushit_data.savings_resize = 'undefined' != typeof stats.savings_resize ? parseInt(wp_smushit_data.savings_resize) + stats.savings_resize : wp_smushit_data.savings_resize;
|
1993 |
wp_smushit_data.savings_conversion = 'undefined' != typeof stats.savings_conversion ? parseInt(wp_smushit_data.savings_conversion) + stats.savings_conversion : wp_smushit_data.savings_conversion;
|
1994 |
//Add directory smush stats
|
1995 |
+
if( 'undefined' != typeof ( wp_smushit_data.savings_dir_smush ) && 'undefined' != typeof ( wp_smushit_data.savings_dir_smush.orig_size ) ) {
|
1996 |
wp_smushit_data.size_before = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_before) + parseInt(wp_smushit_data.savings_dir_smush.orig_size) : wp_smushit_data.size_before;
|
1997 |
wp_smushit_data.size_after = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt(wp_smushit_data.size_after) + parseInt(wp_smushit_data.savings_dir_smush.image_size) : wp_smushit_data.size_after;
|
1998 |
}
|
1999 |
|
2000 |
wp_smushit_data.count_resize = 'undefined' != typeof stats.count_resize ? parseInt( wp_smushit_data.count_resize ) + stats.count_resize : wp_smushit_data.count_resize;
|
2001 |
}
|
2002 |
+
//Smush Notice
|
2003 |
+
if ($('.bulk-smush-wrapper .wp-smush-remaining-count').length && 'undefined' != typeof wp_smushit_data.unsmushed ) {
|
2004 |
+
$('.bulk-smush-wrapper .wp-smush-remaining-count').html(wp_smushit_data.unsmushed.length);
|
2005 |
+
}
|
2006 |
update_stats();
|
2007 |
}
|
2008 |
});
|
2136 |
return false;
|
2137 |
});
|
2138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2139 |
//Handle Re-check button functionality
|
2140 |
$("#wp-smush-revalidate-member").on('click', function (e) {
|
2141 |
e.preventDefault();
|
2201 |
//Display the loader
|
2202 |
$('button.dir-smush-button-wrap span.spinner').addClass('is-active');
|
2203 |
|
2204 |
+
//Display File tree for Directory Smush
|
2205 |
$(".wp-smush-list-dialog .content").fileTree({
|
2206 |
+
script: getDirectoryList,
|
2207 |
+
multiFolder: false
|
2208 |
+
},
|
2209 |
+
function () {
|
2210 |
+
}
|
2211 |
+
);
|
2212 |
|
2213 |
});
|
2214 |
|
2271 |
close_dialog();
|
2272 |
|
2273 |
//Show Scan result
|
2274 |
+
$('.wp-smush-scan-result').removeClass('hidden').show();
|
2275 |
}).done(function (res) {
|
2276 |
|
2277 |
//If there was no image list, return
|
2372 |
e.preventDefault();
|
2373 |
|
2374 |
var self = $(this);
|
2375 |
+
var parent = self.parents().eq(1);
|
2376 |
|
2377 |
//Hide the link
|
2378 |
self.hide();
|
2403 |
parent.siblings('li.wp-smush-image-ul:first').prepend('<hr />');
|
2404 |
}
|
2405 |
parent.remove();
|
2406 |
+
|
2407 |
+
//Remove the bottom bulk smsuh button if there are no more directories left in scan results
|
2408 |
+
if( 0 == $('ul.wp-smush-image-list li').length ) {
|
2409 |
+
$('div.wp-smush-all-button-wrap.bottom').hide();
|
2410 |
+
$('div.wp-smush-scan-result').hide();
|
2411 |
+
}
|
2412 |
}
|
2413 |
});
|
2414 |
});
|
assets/shared-ui-2/css/admin.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
@import url(https://fonts.googleapis.com/css?family=Roboto+Condensed:400,500,700|Roboto:400,500,700);.sui-2-1-0 .sui-checkbox input,.sui-2-1-0 .sui-radio input,.sui-2-1-0 .sui-toggle input[type=checkbox],.sui-2-1-0 .sui-upload-group input[type=file],.sui-screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.sui-2-1-0 .sui-hidden{display:none!important}.sui-2-1-0 .sui-block-content-center{text-align:center}.sui-2-1-0 .sui-image{display:block;height:auto;max-width:100%}.sui-2-1-0 .sui-image-center{margin-right:auto;margin-left:auto}.sui-2-1-0 .sui-actions-left{margin-left:10px;margin-right:auto}.sui-2-1-0 .sui-actions-left,.sui-2-1-0 .sui-actions-right{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-actions-right{margin-left:auto;margin-right:0}.sui-2-1-0 .sui-space-between{-ms-flex-pack:justify;justify-content:space-between}.sui-2-1-0 .sui-align-start{-ms-flex-pack:start;justify-content:flex-start}.sui-2-1-0 .sui-align-end{-ms-flex-pack:end;justify-content:flex-end}.sui-2-1-0 .sui-success{color:#1abc9c}.sui-2-1-0 .sui-warning{color:#fecf2f}.sui-2-1-0 .sui-error{color:#ff7f83}.sui-2-1-0 .sui-info{color:#17a8e3}.sui-2-1-0 .sui-no-margin{margin:0!important}.sui-2-1-0 .sui-no-margin-top{margin-top:0!important}.sui-2-1-0 .sui-no-margin-bottom{margin-bottom:0!important}.sui-2-1-0 .sui-no-margin-left{margin-left:0!important}.sui-2-1-0 .sui-no-margin-right{margin-right:0!important}.sui-2-1-0 .sui-no-padding{padding:0!important}.sui-2-1-0 .sui-no-padding-top{padding-top:0!important}.sui-2-1-0 .sui-no-padding-bottom{padding-bottom:0!important}.sui-2-1-0 .sui-no-padding-left{padding-left:0!important}.sui-2-1-0 .sui-no-padding-right{padding-right:0!important}.sui-2-1-0 .sui-margin{margin:30px!important}.sui-2-1-0 .sui-margin-top{margin-top:30px!important}.sui-2-1-0 .sui-margin-bottom{margin-bottom:30px!important}.sui-2-1-0 .sui-margin-left{margin-left:30px!important}.sui-2-1-0 .sui-margin-right{margin-right:30px!important}.sui-2-1-0 .sui-padding{padding:30px!important}.sui-2-1-0 .sui-padding-top{padding-top:30px!important}.sui-2-1-0 .sui-padding-bottom{padding-bottom:30px!important}.sui-2-1-0 .sui-padding-left{padding-left:30px!important}.sui-2-1-0 .sui-padding-right{padding-right:30px!important}@media (max-width:479px){.sui-hidden-xs{display:none!important}}@media (min-width:480px) and (max-width:782px){.sui-hidden-sm{display:none!important}}@media (min-width:783px) and (max-width:1199px){.sui-hidden-md{display:none!important}}@media (min-width:1200px){.sui-hidden-lg{display:none!important}}.sui-2-1-0 .sui-fade-in{animation:fadeIn .3s ease-in forwards}.sui-2-1-0 .sui-fade-out{animation:fadeOut .3s ease-in forwards}.sui-2-1-0 .sui-bounce-in{animation:bounceInJiggle .8s ease-in forwards}.sui-2-1-0 .sui-bounce-out{animation:bounceOutJiggle .6s ease-out forwards}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceInJiggle{0%{transform:translateY(-200%) scale(1.5);opacity:0}30%{opacity:1}58%{transform:translateY(0) rotate(1deg) scale(1);opacity:1}72%{transform:translateY(-30px) rotate(-1deg)}80%{transform:translateY(0) rotate(.5deg)}to{transform:translateY(0) rotate(0deg)}}@keyframes bounceOutJiggle{0%{transform:translateY(0)}10%{transform:translateY(-10px) rotate(-.5deg)}30%{transform:translateY(20px) rotate(8deg)}70%{opacity:1}90%{transform:translateY(300%) translateX(40px) rotate(35deg);opacity:0}to{display:none}}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sui-2-1-0 .sui-wrap{font-family:Roboto,Arial,sans-serif;font-weight:400;font-size:15px;line-height:30px;color:#666;letter-spacing:-.025em;text-rendering:optimizeLegibility;margin:30px 30px 0 10px}@media (max-width:782px){.sui-2-1-0 .sui-wrap{margin:20px 10px 0 0}}.sui-2-1-0 h1,.sui-2-1-0 h2,.sui-2-1-0 h3,.sui-2-1-0 h4,.sui-2-1-0 h5,.sui-2-1-0 h6{display:block;margin:.5em auto;padding:0;line-height:30px;color:#333;font-weight:700;font-family:Roboto Condensed,Roboto,Arial,sans-serif}.sui-2-1-0 h1{font-size:32px;line-height:40px;color:#333;margin:0}.sui-2-1-0 h2{font-size:22px;line-height:35px}.sui-2-1-0 h3{font-size:18px;line-height:40px}.sui-2-1-0 h4,.sui-2-1-0 h5,.sui-2-1-0 h6,.sui-2-1-0 p{font-size:15px}.sui-2-1-0 p{font-family:Roboto,Arial,sans-serif;font-weight:400;line-height:30px;color:#666;letter-spacing:-.025em;text-rendering:optimizeLegibility}.sui-2-1-0 p:first-child{margin-top:0}.sui-2-1-0 p:last-child{margin-bottom:0}.sui-2-1-0 p small{font-size:13px;line-height:22px;color:#888}.sui-2-1-0 a{text-decoration:none;color:#17a8e3;font-weight:500;outline-color:transparent;outline-style:none;box-shadow:none}.sui-2-1-0 a:active:not(.sui-button),.sui-2-1-0 a:focus:not(.sui-button),.sui-2-1-0 a:hover:not(.sui-button){color:#0a9bd6}.sui-2-1-0 a.disabled{pointer-events:none}.sui-2-1-0 a.disabled:active,.sui-2-1-0 a.disabled:focus,.sui-2-1-0 a.disabled:hover{color:#888;cursor:default}.sui-2-1-0 code,.sui-2-1-0 pre{font-weight:500;font-size:13px;line-height:18px;color:#333;background-color:#f8f8f8;border:1px solid #e6e6e6;border-radius:3px;margin:0;padding:10px 15px;white-space:pre;overflow:auto;max-width:100%;vertical-align:middle;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.sui-2-1-0 code{display:inline-block;padding:2px 5px}.sui-2-1-0 b,.sui-2-1-0 strong{font-weight:500}.sui-2-1-0 dfn{font-style:normal;font-weight:400;border-bottom:1px dotted #888}.sui-2-1-0 .sui-checkbox span:before,.sui-2-1-0 .sui-dialog-close:before,.sui-2-1-0 .sui-listing li:before,.sui-2-1-0 .sui-notice-top p:before,.sui-2-1-0 .sui-notice p:before,.sui-2-1-0 .sui-radio span:before,.sui-2-1-0 [class*=sui-icon-]:after,.sui-2-1-0 [class*=sui-icon-]:before{font-family:WPMU-DEV-Icon!important;speak:none;font-size:1em;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;text-rendering:auto;display:inline-block;color:#888;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:WPMU-DEV-Icon;src:url(../fonts/WPMU-DEV-Icon.eot);src:url(../fonts/WPMU-DEV-Icon.eot) format("embedded-opentype"),url(../fonts/WPMU-DEV-Icon.ttf) format("truetype"),url(../fonts/WPMU-DEV-Icon.woff) format("woff"),url(../fonts/WPMU-DEV-Icon.woff2) format("woff2"),url(../fonts/WPMU-DEV-Icon.svg) format("svg");font-weight:400;font-style:normal}.sui-2-1-0 .sui-loading:before{animation:spin 1.3s linear infinite}.sui-2-1-0 [class*=sui-icon-]{display:inline-block}.sui-2-1-0 [class*=sui-icon-].sui-xl:before{font-size:30px}.sui-2-1-0 [class*=sui-icon-].sui-lg:before{font-size:20px}.sui-2-1-0 [class*=sui-icon-].sui-md:before{font-size:16px}.sui-2-1-0 [class*=sui-icon-].sui-sm:before{font-size:12px}.sui-2-1-0 [class*=sui-icon-].sui-error:before,.sui-2-1-0 [class*=sui-icon-].sui-info:before,.sui-2-1-0 [class*=sui-icon-].sui-success:before,.sui-2-1-0 [class*=sui-icon-].sui-warning:before{color:inherit}.sui-2-1-0 [class*=sui-icon-].sui-fw{width:1.8em;text-align:center;min-height:1em}.sui-2-1-0 .sui-icon-24-hour-support:before{content:"\C1"}.sui-2-1-0 .sui-icon-2FA:before{content:"\E912"}.sui-2-1-0 .sui-icon-IP:before{content:"\E910"}.sui-2-1-0 .sui-icon-ab-testing:before{content:"\BB"}.sui-2-1-0 .sui-icon-academy:before{content:"\3C0"}.sui-2-1-0 .sui-icon-accounts-billing:before{content:"\E914"}.sui-2-1-0 .sui-icon-alert:before{content:"X"}.sui-2-1-0 .sui-icon-align-center:before{content:"^"}.sui-2-1-0 .sui-icon-align-justify:before{content:"#"}.sui-2-1-0 .sui-icon-align-left:before{content:"%"}.sui-2-1-0 .sui-icon-align-right:before{content:"&"}.sui-2-1-0 .sui-icon-animation-video:before{content:"F"}.sui-2-1-0 .sui-icon-annotate:before{content:"\B4"}.sui-2-1-0 .sui-icon-archive:before{content:"b"}.sui-2-1-0 .sui-icon-arrow-down:before{content:"\C2"}.sui-2-1-0 .sui-icon-arrow-left:before{content:"\F8FF"}.sui-2-1-0 .sui-icon-arrow-location:before{content:"M"}.sui-2-1-0 .sui-icon-arrow-pointer-cursor:before{content:"N"}.sui-2-1-0 .sui-icon-arrow-return-back:before{content:"R"}.sui-2-1-0 .sui-icon-arrow-right:before{content:"\AF"}.sui-2-1-0 .sui-icon-arrow-skip-back:before{content:"\E916"}.sui-2-1-0 .sui-icon-arrow-skip-end:before{content:"\E919"}.sui-2-1-0 .sui-icon-arrow-skip-forward:before{content:"\E917"}.sui-2-1-0 .sui-icon-arrow-skip-start:before{content:"\E918"}.sui-2-1-0 .sui-icon-arrow-up:before{content:"\D4"}.sui-2-1-0 .sui-icon-arrows-compress:before{content:"\2265"}.sui-2-1-0 .sui-icon-arrows-expand:before{content:"\AC"}.sui-2-1-0 .sui-icon-arrows-in:before{content:"\2264"}.sui-2-1-0 .sui-icon-arrows-out:before{content:"\2DA"}.sui-2-1-0 .sui-icon-asterisk:before{content:"*"}.sui-2-1-0 .sui-icon-at-sign:before{content:"@"}.sui-2-1-0 .sui-icon-audio-sound:before{content:"\E9AE"}.sui-2-1-0 .sui-icon-automate:before{content:"\152"}.sui-2-1-0 .sui-icon-blog:before{content:"\E90D"}.sui-2-1-0 .sui-icon-bold:before{content:"B"}.sui-2-1-0 .sui-icon-book:before{content:"\2206"}.sui-2-1-0 .sui-icon-book-bookmark:before{content:"\2D9"}.sui-2-1-0 .sui-icon-bookmark:before{content:"\221A"}.sui-2-1-0 .sui-icon-brush:before{content:"~"}.sui-2-1-0 .sui-icon-buddypress:before{content:"\E90C"}.sui-2-1-0 .sui-icon-calendar:before{content:"\220F"}.sui-2-1-0 .sui-icon-camera:before{content:"\D8"}.sui-2-1-0 .sui-icon-check:before{content:"("}.sui-2-1-0 .sui-icon-check-tick:before{content:"_"}.sui-2-1-0 .sui-icon-chevron-down:before{content:"\131"}.sui-2-1-0 .sui-icon-chevron-left:before{content:"\D3"}.sui-2-1-0 .sui-icon-chevron-right:before{content:"\2DC"}.sui-2-1-0 .sui-icon-chevron-up:before{content:"\2DD"}.sui-2-1-0 .sui-icon-clipboard-notes:before{content:"\BF"}.sui-2-1-0 .sui-icon-clock:before{content:","}.sui-2-1-0 .sui-icon-close:before{content:")"}.sui-2-1-0 .sui-icon-cloud:before{content:"\2122"}.sui-2-1-0 .sui-icon-cloud-migration:before{content:"\E905"}.sui-2-1-0 .sui-icon-cloudflare:before{content:"\D0"}.sui-2-1-0 .sui-icon-code:before{content:":"}.sui-2-1-0 .sui-icon-coffee-cup:before{content:"\E96B"}.sui-2-1-0 .sui-icon-color-pick-eyedropper:before{content:"\A5"}.sui-2-1-0 .sui-icon-comment:before{content:"\A7"}.sui-2-1-0 .sui-icon-comment-2:before{content:"\AA"}.sui-2-1-0 .sui-icon-comments:before{content:"\B6"}.sui-2-1-0 .sui-icon-community-people:before{content:"\2018"}.sui-2-1-0 .sui-icon-compass:before{content:"\2C6"}.sui-2-1-0 .sui-icon-credit-card:before{content:"c"}.sui-2-1-0 .sui-icon-crop:before{content:"C"}.sui-2-1-0 .sui-icon-cross-close:before{content:"+"}.sui-2-1-0 .sui-icon-crown:before{content:"\A1"}.sui-2-1-0 .sui-icon-dashboard:before{content:"\E9B2"}.sui-2-1-0 .sui-icon-dashboard-settings:before{content:"\E901"}.sui-2-1-0 .sui-icon-defender:before{content:"\B7"}.sui-2-1-0 .sui-icon-devman:before{content:"\20AC"}.sui-2-1-0 .sui-icon-dislike:before{content:"k"}.sui-2-1-0 .sui-icon-dollar:before{content:"$"}.sui-2-1-0 .sui-icon-download:before{content:"\E93B"}.sui-2-1-0 .sui-icon-download-cloud:before{content:"\A3"}.sui-2-1-0 .sui-icon-eye:before{content:"e"}.sui-2-1-0 .sui-icon-eye-hide:before{content:"q"}.sui-2-1-0 .sui-icon-fast-forward:before{content:">"}.sui-2-1-0 .sui-icon-filter:before{content:"z"}.sui-2-1-0 .sui-icon-finger-point:before{content:"\2248"}.sui-2-1-0 .sui-icon-finger-swipe:before{content:"\2203"}.sui-2-1-0 .sui-icon-first-aid:before{content:"\E93F"}.sui-2-1-0 .sui-icon-flag:before{content:"|"}.sui-2-1-0 .sui-icon-folder:before{content:"\2D8"}.sui-2-1-0 .sui-icon-forminator:before{content:"\E908"}.sui-2-1-0 .sui-icon-forminator-2:before{content:"\E907"}.sui-2-1-0 .sui-icon-gallery-slider:before{content:"\F7"}.sui-2-1-0 .sui-icon-google-analytics:before{content:"\E5"}.sui-2-1-0 .sui-icon-graph-bar:before{content:"\C7"}.sui-2-1-0 .sui-icon-graph-bar-2:before{content:"\2DB"}.sui-2-1-0 .sui-icon-heart:before{content:"K"}.sui-2-1-0 .sui-icon-help-support:before{content:"H"}.sui-2-1-0 .sui-icon-home:before{content:"J"}.sui-2-1-0 .sui-icon-hub:before{content:"\FB02"}.sui-2-1-0 .sui-icon-hummingbird:before{content:"\B0"}.sui-2-1-0 .sui-icon-hustle:before{content:"\2014"}.sui-2-1-0 .sui-icon-indent-less:before{content:"\201D"}.sui-2-1-0 .sui-icon-indent-more:before{content:"\2019"}.sui-2-1-0 .sui-icon-infinity:before{content:"V"}.sui-2-1-0 .sui-icon-info:before{content:"I"}.sui-2-1-0 .sui-icon-italic:before{content:"{"}.sui-2-1-0 .sui-icon-jobs-pros-search:before{content:"\E90E"}.sui-2-1-0 .sui-icon-key:before{content:"\25CA"}.sui-2-1-0 .sui-icon-laptop:before{content:"\AB"}.sui-2-1-0 .sui-icon-layers:before{content:"\E6"}.sui-2-1-0 .sui-icon-layout:before{content:"\A9"}.sui-2-1-0 .sui-icon-layout-grid:before{content:"\221E"}.sui-2-1-0 .sui-icon-lightbulb:before{content:"L"}.sui-2-1-0 .sui-icon-lightbulb-line:before{content:"\E913"}.sui-2-1-0 .sui-icon-like:before{content:"j"}.sui-2-1-0 .sui-icon-link:before{content:"5"}.sui-2-1-0 .sui-icon-list:before{content:"`"}.sui-2-1-0 .sui-icon-list-bullet:before{content:"8"}.sui-2-1-0 .sui-icon-list-number:before{content:"7"}.sui-2-1-0 .sui-icon-loader:before{content:"\E9BE"}.sui-2-1-0 .sui-icon-location-marker:before{content:"l"}.sui-2-1-0 .sui-icon-lock:before{content:"9"}.sui-2-1-0 .sui-icon-magnifying-glass-search:before{content:"\BA"}.sui-2-1-0 .sui-icon-magnifying-search-glass-love:before{content:"\2022"}.sui-2-1-0 .sui-icon-mail:before{content:"m"}.sui-2-1-0 .sui-icon-map:before{content:"4"}.sui-2-1-0 .sui-icon-megaphone:before{content:"\C5"}.sui-2-1-0 .sui-icon-microphone-audio:before{content:"\2030"}.sui-2-1-0 .sui-icon-minus:before{content:"-"}.sui-2-1-0 .sui-icon-mobile:before{content:"\201C"}.sui-2-1-0 .sui-icon-mobile-signal:before{content:"\201B"}.sui-2-1-0 .sui-icon-monitor:before{content:"\\"}.sui-2-1-0 .sui-icon-more:before{content:"\2026"}.sui-2-1-0 .sui-icon-mouse-scroll:before{content:"\DF"}.sui-2-1-0 .sui-icon-news-paper:before{content:"\2211"}.sui-2-1-0 .sui-icon-notification:before{content:"n"}.sui-2-1-0 .sui-icon-notification-count:before{content:"\E900"}.sui-2-1-0 .sui-icon-open-new-window:before{content:"\E909"}.sui-2-1-0 .sui-icon-page:before{content:"\D2"}.sui-2-1-0 .sui-icon-page-multiple:before{content:"\E7"}.sui-2-1-0 .sui-icon-page-pdf:before{content:"\C6"}.sui-2-1-0 .sui-icon-page-search:before{content:"\DA"}.sui-2-1-0 .sui-icon-paint-bucket:before{content:"\222B"}.sui-2-1-0 .sui-icon-paperclip:before{content:"A"}.sui-2-1-0 .sui-icon-pause:before{content:"o"}.sui-2-1-0 .sui-icon-paypal:before{content:"Y"}.sui-2-1-0 .sui-icon-pencil:before{content:"/"}.sui-2-1-0 .sui-icon-performance:before{content:"\E903"}.sui-2-1-0 .sui-icon-photo-picture:before{content:"D"}.sui-2-1-0 .sui-icon-play:before{content:"p"}.sui-2-1-0 .sui-icon-plug-connected:before{content:"\E90B"}.sui-2-1-0 .sui-icon-plug-disconnected:before{content:"\E90A"}.sui-2-1-0 .sui-icon-plugin-2:before{content:"O"}.sui-2-1-0 .sui-icon-plugins:before{content:"P"}.sui-2-1-0 .sui-icon-plus:before{content:"="}.sui-2-1-0 .sui-icon-power-on-off:before{content:"\E904"}.sui-2-1-0 .sui-icon-price-tag:before{content:"\2C7"}.sui-2-1-0 .sui-icon-profile-female:before{content:"\192"}.sui-2-1-0 .sui-icon-profile-male:before{content:"\B5"}.sui-2-1-0 .sui-icon-progress:before{content:"\E9B1"}.sui-2-1-0 .sui-icon-pulse:before{content:"\201E"}.sui-2-1-0 .sui-icon-puzzle:before{content:";\A}\A\A"}.sui-2-1-0 .sui-icon-question:before{content:"?"}.sui-2-1-0 .sui-icon-quote:before{content:";"}.sui-2-1-0 .sui-icon-quote-2:before{content:"'"}.sui-2-1-0 .sui-icon-refresh:before{content:"E"}.sui-2-1-0 .sui-icon-reply:before{content:"r"}.sui-2-1-0 .sui-icon-rocket-launch:before{content:"\E9BF"}.sui-2-1-0 .sui-icon-security-thumb-print:before{content:"\E90F"}.sui-2-1-0 .sui-icon-settings-slider-control:before{content:"\153"}.sui-2-1-0 .sui-icon-share:before{content:"s"}.sui-2-1-0 .sui-icon-sheild-badge:before{content:"\E96A"}.sui-2-1-0 .sui-icon-shipper-anchor:before{content:"\E906"}.sui-2-1-0 .sui-icon-shopping-cart:before{content:"\CD"}.sui-2-1-0 .sui-icon-sitemap:before{content:"\B8"}.sui-2-1-0 .sui-icon-skull:before{content:"\E96C"}.sui-2-1-0 .sui-icon-smart-crawl:before{content:"\2202"}.sui-2-1-0 .sui-icon-smush:before{content:"\2021"}.sui-2-1-0 .sui-icon-snapshot:before{content:"\FB01"}.sui-2-1-0 .sui-icon-social-android:before{content:"."}.sui-2-1-0 .sui-icon-social-apple:before{content:"a"}.sui-2-1-0 .sui-icon-social-drive:before{content:"v"}.sui-2-1-0 .sui-icon-social-dropbox:before{content:"d"}.sui-2-1-0 .sui-icon-social-facebook:before{content:"f"}.sui-2-1-0 .sui-icon-social-github:before{content:"h"}.sui-2-1-0 .sui-icon-social-google-plus:before{content:"g"}.sui-2-1-0 .sui-icon-social-linkedin:before{content:"i"}.sui-2-1-0 .sui-icon-social-twitter:before{content:"t"}.sui-2-1-0 .sui-icon-social-youtube:before{content:"y"}.sui-2-1-0 .sui-icon-speed-optimize:before{content:"\F8"}.sui-2-1-0 .sui-icon-star:before{content:"S"}.sui-2-1-0 .sui-icon-star-line:before{content:"\CF"}.sui-2-1-0 .sui-icon-stopwatch:before{content:"\E986"}.sui-2-1-0 .sui-icon-storage-server-data:before{content:"\CE"}.sui-2-1-0 .sui-icon-style-type:before{content:"<"}.sui-2-1-0 .sui-icon-tablet-landscape:before{content:"["}.sui-2-1-0 .sui-icon-tablet-portrait:before{content:"]"}.sui-2-1-0 .sui-icon-target:before{content:"\2020"}.sui-2-1-0 .sui-icon-tech-support:before{content:"\E915"}.sui-2-1-0 .sui-icon-testing-bottle-beaker:before{content:"\E9B4"}.sui-2-1-0 .sui-icon-text-color:before{content:"\A8"}.sui-2-1-0 .sui-icon-themes:before{content:"T"}.sui-2-1-0 .sui-icon-thumbnails:before{content:"G"}.sui-2-1-0 .sui-icon-ticket:before{content:"\E97D"}.sui-2-1-0 .sui-icon-timed-countdown:before{content:"\E911"}.sui-2-1-0 .sui-icon-trash:before{content:"Q"}.sui-2-1-0 .sui-icon-underline:before{content:"U"}.sui-2-1-0 .sui-icon-unlink:before{content:"6"}.sui-2-1-0 .sui-icon-unlock:before{content:"0"}.sui-2-1-0 .sui-icon-update:before{content:"\AE"}.sui-2-1-0 .sui-icon-update-arrow:before{content:"\E902"}.sui-2-1-0 .sui-icon-upfront:before{content:"\201A"}.sui-2-1-0 .sui-icon-upload-cloud:before{content:"\A2"}.sui-2-1-0 .sui-icon-uptime:before{content:"\B1"}.sui-2-1-0 .sui-icon-user-hero-points-trophy:before{content:"1"}.sui-2-1-0 .sui-icon-user-reputation-points:before{content:"2"}.sui-2-1-0 .sui-icon-user-star-level-up:before{content:"3"}.sui-2-1-0 .sui-icon-wand-magic:before{content:"Z"}.sui-2-1-0 .sui-icon-warning-alert:before{content:"!"}.sui-2-1-0 .sui-icon-web-globe-world:before{content:"W"}.sui-2-1-0 .sui-icon-white-label-video:before{content:"u"}.sui-2-1-0 .sui-icon-widget-settings-config:before{content:"x"}.sui-2-1-0 .sui-icon-wordpress:before{content:"w"}.sui-2-1-0 .sui-icon-wpmudev-logo:before{content:"\2039"}.sui-2-1-0 .sui-icon-wpmudev-logo-2:before{content:"\203A"}.sui-2-1-0 .sui-icon-wrench-tool:before{content:"\2044"}.sui-2-1-0 .sui-icon-zip:before{content:"\3A9"}.sui-2-1-0 .sui-icon-zoom-in:before{content:"\2260"}.sui-2-1-0 .sui-icon-zoom-out:before{content:"\2013"}.sui-2-1-0 .sui-button,.sui-2-1-0 a.sui-button,.sui-2-1-0 button.sui-button{min-width:80px;height:30px;cursor:pointer;display:inline-block;position:relative;padding:7px 16px;margin:0 10px 0 0;border:0;background-color:#888;color:#fff;font:500 12px/16px Roboto,Arial,sans-serif;letter-spacing:-.025em;text-transform:uppercase;text-align:center;text-decoration:none;border-radius:3px;transition:all .3s ease;text-shadow:none;white-space:nowrap}.sui-2-1-0 .sui-button .sui-loading,.sui-2-1-0 a.sui-button .sui-loading,.sui-2-1-0 button.sui-button .sui-loading{display:none;position:absolute;top:50%;left:50%;margin:-8px}.sui-2-1-0 .sui-button .sui-loading-text,.sui-2-1-0 a.sui-button .sui-loading-text,.sui-2-1-0 button.sui-button .sui-loading-text{pointer-events:none}.sui-2-1-0 .sui-button i:before,.sui-2-1-0 a.sui-button i:before,.sui-2-1-0 button.sui-button i:before{transition:all .3s ease;color:#fff}.sui-2-1-0 .sui-button:focus,.sui-2-1-0 .sui-button:hover,.sui-2-1-0 a.sui-button:focus,.sui-2-1-0 a.sui-button:hover,.sui-2-1-0 button.sui-button:focus,.sui-2-1-0 button.sui-button:hover{outline:none;background:#7b7b7b;border-color:#7b7b7b}.sui-2-1-0 .sui-button:active,.sui-2-1-0 .sui-button:focus,.sui-2-1-0 a.sui-button:active,.sui-2-1-0 a.sui-button:focus,.sui-2-1-0 button.sui-button:active,.sui-2-1-0 button.sui-button:focus{outline:none;box-shadow:none;background:#7b7b7b;border-color:#7b7b7b}.sui-2-1-0 .sui-button.sui-button-blue,.sui-2-1-0 .sui-button.sui-button-primary,.sui-2-1-0 a.sui-button.sui-button-blue,.sui-2-1-0 a.sui-button.sui-button-primary,.sui-2-1-0 button.sui-button.sui-button-blue,.sui-2-1-0 button.sui-button.sui-button-primary{background:#17a8e3}.sui-2-1-0 .sui-button.sui-button-blue i:before,.sui-2-1-0 .sui-button.sui-button-primary i:before,.sui-2-1-0 a.sui-button.sui-button-blue i:before,.sui-2-1-0 a.sui-button.sui-button-primary i:before,.sui-2-1-0 button.sui-button.sui-button-blue i:before,.sui-2-1-0 button.sui-button.sui-button-primary i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-blue:focus,.sui-2-1-0 .sui-button.sui-button-blue:hover,.sui-2-1-0 .sui-button.sui-button-primary:focus,.sui-2-1-0 .sui-button.sui-button-primary:hover,.sui-2-1-0 a.sui-button.sui-button-blue:focus,.sui-2-1-0 a.sui-button.sui-button-blue:hover,.sui-2-1-0 a.sui-button.sui-button-primary:focus,.sui-2-1-0 a.sui-button.sui-button-primary:hover,.sui-2-1-0 button.sui-button.sui-button-blue:focus,.sui-2-1-0 button.sui-button.sui-button-blue:hover,.sui-2-1-0 button.sui-button.sui-button-primary:focus,.sui-2-1-0 button.sui-button.sui-button-primary:hover{background:#0a9bd6}.sui-2-1-0 .sui-button.sui-button-red,.sui-2-1-0 a.sui-button.sui-button-red,.sui-2-1-0 button.sui-button.sui-button-red{background:#cb4b57}.sui-2-1-0 .sui-button.sui-button-red i:before,.sui-2-1-0 a.sui-button.sui-button-red i:before,.sui-2-1-0 button.sui-button.sui-button-red i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-red:focus,.sui-2-1-0 .sui-button.sui-button-red:hover,.sui-2-1-0 a.sui-button.sui-button-red:focus,.sui-2-1-0 a.sui-button.sui-button-red:hover,.sui-2-1-0 button.sui-button.sui-button-red:focus,.sui-2-1-0 button.sui-button.sui-button-red:hover{opacity:1;background:#c40000}.sui-2-1-0 .sui-button.sui-button-green,.sui-2-1-0 a.sui-button.sui-button-green,.sui-2-1-0 button.sui-button.sui-button-green{background:#1abc9c}.sui-2-1-0 .sui-button.sui-button-green i:before,.sui-2-1-0 a.sui-button.sui-button-green i:before,.sui-2-1-0 button.sui-button.sui-button-green i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-green:focus,.sui-2-1-0 .sui-button.sui-button-green:hover,.sui-2-1-0 a.sui-button.sui-button-green:focus,.sui-2-1-0 a.sui-button.sui-button-green:hover,.sui-2-1-0 button.sui-button.sui-button-green:focus,.sui-2-1-0 button.sui-button.sui-button-green:hover{opacity:1;background:#148f77}.sui-2-1-0 .sui-button.sui-button-upsell,.sui-2-1-0 a.sui-button.sui-button-upsell,.sui-2-1-0 button.sui-button.sui-button-upsell{border:2px solid #d1f1ea;color:#1abc9c;width:auto;height:26px;line-height:15px;background:transparent;padding:4px 16px;border-radius:15px;text-transform:none}.sui-2-1-0 .sui-button.sui-button-upsell:focus,.sui-2-1-0 .sui-button.sui-button-upsell:hover,.sui-2-1-0 a.sui-button.sui-button-upsell:focus,.sui-2-1-0 a.sui-button.sui-button-upsell:hover,.sui-2-1-0 button.sui-button.sui-button-upsell:focus,.sui-2-1-0 button.sui-button.sui-button-upsell:hover{opacity:1;border-color:#148f77;background:#148f77;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost,.sui-2-1-0 a.sui-button.sui-button-ghost,.sui-2-1-0 button.sui-button.sui-button-ghost{padding:5px 16px 7px;border:2px solid #ddd;background:transparent;color:#888}.sui-2-1-0 .sui-button.sui-button-ghost i:before,.sui-2-1-0 a.sui-button.sui-button-ghost i:before,.sui-2-1-0 button.sui-button.sui-button-ghost i:before{color:#888}.sui-2-1-0 .sui-button.sui-button-ghost:focus,.sui-2-1-0 .sui-button.sui-button-ghost:hover,.sui-2-1-0 a.sui-button.sui-button-ghost:focus,.sui-2-1-0 a.sui-button.sui-button-ghost:hover,.sui-2-1-0 button.sui-button.sui-button-ghost:focus,.sui-2-1-0 button.sui-button.sui-button-ghost:hover{border-color:#888;background:#888;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost:focus i:before,.sui-2-1-0 .sui-button.sui-button-ghost:hover i:before,.sui-2-1-0 a.sui-button.sui-button-ghost:focus i:before,.sui-2-1-0 a.sui-button.sui-button-ghost:hover i:before,.sui-2-1-0 button.sui-button.sui-button-ghost:focus i:before,.sui-2-1-0 button.sui-button.sui-button-ghost:hover i:before{color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue{border-color:#17a8e3;color:#17a8e3}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue i:before,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue i:before,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue i:before{color:#17a8e3}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue:focus,.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-blue:hover,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue:focus,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-blue:hover,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue:focus,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-blue:hover{border-color:#17a8e3;background:#17a8e3;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red{border-color:#c40000;color:#c40000}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red i:before,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red i:before,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red i:before{color:red}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red:focus,.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-red:hover,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red:focus,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-red:hover,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red:focus,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-red:hover{opacity:1;border-color:#c40000;background:#c40000;color:#fff}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green{border-color:#1abc9c;color:#1abc9c}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green i:before,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green i:before,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green i:before{color:#1abc9c}.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green:focus,.sui-2-1-0 .sui-button.sui-button-ghost.sui-button-green:hover,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green:focus,.sui-2-1-0 a.sui-button.sui-button-ghost.sui-button-green:hover,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green:focus,.sui-2-1-0 button.sui-button.sui-button-ghost.sui-button-green:hover{opacity:1;border-color:#148f77;background:#148f77;color:#fff}.sui-2-1-0 .sui-button.sui-button-lg,.sui-2-1-0 a.sui-button.sui-button-lg,.sui-2-1-0 button.sui-button.sui-button-lg{height:40px;padding:11px 20px 9px;border-radius:3px;font:500 15px/20px Roboto,Arial,sans-serif}.sui-2-1-0 .sui-button.sui-button-lg.sui-button-ghost,.sui-2-1-0 a.sui-button.sui-button-lg.sui-button-ghost,.sui-2-1-0 button.sui-button.sui-button-lg.sui-button-ghost{padding:9px 20px}.sui-2-1-0 .sui-button.sui-button-onload,.sui-2-1-0 a.sui-button.sui-button-onload,.sui-2-1-0 button.sui-button.sui-button-onload{pointer-events:none}.sui-2-1-0 .sui-button.sui-button-onload .sui-loading,.sui-2-1-0 a.sui-button.sui-button-onload .sui-loading,.sui-2-1-0 button.sui-button.sui-button-onload .sui-loading{display:block}.sui-2-1-0 .sui-button.sui-button-onload,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-blue,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-green,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-red,.sui-2-1-0 a.sui-button.sui-button-onload,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-blue,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-green,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-red,.sui-2-1-0 button.sui-button.sui-button-onload,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-blue,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-green,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-red{background:#e6e6e6}.sui-2-1-0 .sui-button.sui-button-onload.sui-button-blue .sui-loading-text,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-green .sui-loading-text,.sui-2-1-0 .sui-button.sui-button-onload.sui-button-red .sui-loading-text,.sui-2-1-0 .sui-button.sui-button-onload .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-blue .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-green .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-red .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-blue .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-green .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-red .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload .sui-loading-text{color:#e6e6e6}.sui-2-1-0 .sui-button.sui-button-onload.sui-button-ghost,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-ghost,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-ghost{border-color:#e6e6e6;background:transparent}.sui-2-1-0 .sui-button.sui-button-onload.sui-button-ghost .sui-loading-text,.sui-2-1-0 a.sui-button.sui-button-onload.sui-button-ghost .sui-loading-text,.sui-2-1-0 button.sui-button.sui-button-onload.sui-button-ghost .sui-loading-text{color:transparent}.sui-2-1-0 .sui-button.disabled,.sui-2-1-0 .sui-button:disabled,.sui-2-1-0 .sui-button[disabled],.sui-2-1-0 a.sui-button.disabled,.sui-2-1-0 a.sui-button:disabled,.sui-2-1-0 a.sui-button[disabled],.sui-2-1-0 button.sui-button.disabled,.sui-2-1-0 button.sui-button:disabled,.sui-2-1-0 button.sui-button[disabled]{color:#aaa;border-color:#ddd;background:#f8f8f8;box-shadow:none;pointer-events:none;cursor:default;transform:none}.sui-2-1-0 .sui-button.disabled:focus,.sui-2-1-0 .sui-button.disabled:hover,.sui-2-1-0 .sui-button:disabled:focus,.sui-2-1-0 .sui-button:disabled:hover,.sui-2-1-0 .sui-button[disabled]:focus,.sui-2-1-0 .sui-button[disabled]:hover,.sui-2-1-0 a.sui-button.disabled:focus,.sui-2-1-0 a.sui-button.disabled:hover,.sui-2-1-0 a.sui-button:disabled:focus,.sui-2-1-0 a.sui-button:disabled:hover,.sui-2-1-0 a.sui-button[disabled]:focus,.sui-2-1-0 a.sui-button[disabled]:hover,.sui-2-1-0 button.sui-button.disabled:focus,.sui-2-1-0 button.sui-button.disabled:hover,.sui-2-1-0 button.sui-button:disabled:focus,.sui-2-1-0 button.sui-button:disabled:hover,.sui-2-1-0 button.sui-button[disabled]:focus,.sui-2-1-0 button.sui-button[disabled]:hover{color:#aaa;border-color:#ddd;background:#f8f8f8;box-shadow:none;cursor:default;transform:none}.sui-2-1-0 .sui-button:last-child,.sui-2-1-0 a.sui-button:last-child,.sui-2-1-0 button.sui-button:last-child{margin:0}.sui-2-1-0 .sui-button.sui-button-icon,.sui-2-1-0 a.sui-button.sui-button-icon,.sui-2-1-0 button.sui-button.sui-button-icon{min-width:0}.sui-2-1-0 .sui-toggle{position:relative;display:inline-block;width:34px;height:16px;margin-right:10px}.sui-2-1-0 .sui-toggle.sui-toggle-label{top:3px}.sui-2-1-0 .sui-toggle-label{vertical-align:text-bottom;line-height:22px;margin-left:10px}.sui-2-1-0 .sui-toggle input[type=checkbox][disabled]+.sui-toggle-slider{opacity:.5;cursor:not-allowed}.sui-2-1-0 .sui-toggle-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f8f8f8;border-radius:100px;transition:.4s;border:1px solid #e6e6e6}.sui-2-1-0 .sui-toggle-slider:before{position:absolute;content:"";height:16px;width:16px;left:-1px;bottom:-1px;background-color:#888;border-radius:50%;transition:.2s}.sui-2-1-0 input[type=checkbox]:checked+.sui-toggle-slider:before{background-color:#17a8e3;transform:translateX(18px)}.sui-2-1-0 .sui-wrap *,.sui-2-1-0 .sui-wrap :after,.sui-2-1-0 .sui-wrap :before{box-sizing:border-box}.sui-2-1-0 .sui-box{position:relative;min-height:20px;background-color:#fff;border-radius:5px;margin-bottom:30px;box-shadow:0 2px 0 #eaeaea}@media (max-width:782px){.sui-2-1-0 .sui-box{margin-bottom:20px}}.sui-2-1-0 .sui-box-header{border-bottom:1px solid #eaeaea;padding:15px 30px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (max-width:782px){.sui-2-1-0 .sui-box-header{padding:15px 20px}}.sui-2-1-0 .sui-box-header>h3>i{line-height:30px}.sui-2-1-0 .sui-box-body{padding:30px}@media (max-width:782px){.sui-2-1-0 .sui-box-body{padding:20px}}.sui-2-1-0 .sui-box-body .sui-box-settings-row{position:relative;border-bottom:1px solid #e6e6e6;padding-bottom:30px;display:table;width:100%;margin-top:30px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-box-settings-row{display:block;margin-top:20px;padding-bottom:20px}}.sui-2-1-0 .sui-box-body .sui-box-settings-row:first-of-type{margin-top:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row:last-of-type{padding-bottom:0;border:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-1{display:table-cell;width:230px;padding-right:30px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-1{display:block;padding-top:20px;width:100%;padding-right:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-1:first-child{padding-top:0}}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-2{display:table-cell}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-2{display:block;padding-top:20px}}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-box-settings-col-2 .sui-settings-label{color:#666}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-form-field:last-of-type{margin-bottom:0}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-settings-label{display:block;font-weight:500;line-height:22px;color:#333}.sui-2-1-0 .sui-box-body .sui-box-settings-row .sui-description{line-height:22px}.sui-2-1-0 .sui-box-body .sui-box-settings-row.sui-disabled{background-color:hsla(0,0%,95%,.5);opacity:.5;pointer-events:none}.sui-2-1-0 .sui-box-body.sui-upsell-items{padding:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row{border-bottom:none;margin-top:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:before{position:absolute;display:block;clear:both;height:1px;content:"";background-color:#e6e6e6;left:30px;right:30px;top:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:first-of-type{margin-top:0}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:first-of-type:before{display:none}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:last-of-type{padding-bottom:30px}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:last-of-type:before{display:none}.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row{padding-right:30px;padding-left:30px;padding-top:31px}@media (max-width:782px){.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row{padding-right:20px;padding-left:20px;padding-top:21px}}@media (max-width:782px){.sui-2-1-0 .sui-box-body.sui-upsell-items .sui-box-settings-row:first-of-type{padding-top:20px}}.sui-2-1-0 .sui-box-body .sui-upsell-row{position:relative}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-image{position:absolute;bottom:0;width:100px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-image{display:none}}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice{padding-left:130px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice{padding-left:0}}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p{position:relative;border-radius:4px;background-color:#e1f6ff;padding:20px 30px;color:#333;font-size:13px;line-height:22px}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p:after{position:absolute;top:43%;left:0;margin-left:-7px;content:"";width:0;height:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-right:7px solid #e1f6ff}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p:after{display:none}}.sui-2-1-0 .sui-box-body .sui-upsell-row .sui-upsell-notice p a{color:#333;text-decoration:underline;font-weight:500}.sui-2-1-0 .sui-box-body .sui-settings-box{padding:30px;border:1px solid #e6e6e6;border-radius:5px}@media (max-width:782px){.sui-2-1-0 .sui-box-body .sui-settings-box{padding:20px}}.sui-2-1-0 .sui-box-footer{border-top:1px solid #eaeaea;padding:30px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-box-footer.sui-pull-up{margin-top:-15px}@media (max-width:782px){.sui-2-1-0 .sui-box-footer{padding:20px}}.sui-2-1-0 .sui-box-title{display:block;font-weight:700;font-size:15px;line-height:30px;font-family:Roboto,Arial,sans-serif;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sui-2-1-0 .sui-box-title *{vertical-align:middle}.sui-2-1-0 .sui-box-title i{margin-right:10px;display:block;float:left}.sui-2-1-0 .sui-box-title i:before{color:inherit;font-size:20px;vertical-align:text-bottom}.sui-2-1-0 h3.sui-box-title{text-transform:none}.sui-2-1-0 .sui-with-bottom-border{padding-bottom:30px;border-bottom:1px solid #e6e6e6;margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .sui-with-bottom-border{margin-bottom:20px;padding-bottom:20px}}.sui-2-1-0 .sui-border-frame{border:1px solid #e6e6e6;border-radius:5px;margin:10px 0 0;padding:30px}@media (max-width:782px){.sui-2-1-0 .sui-border-frame{padding:20px}}.sui-2-1-0 .sui-col,.sui-2-1-0 [class*=sui-col-]{min-height:1px;padding-left:15px;padding-right:15px;position:relative}@media (max-width:782px){.sui-2-1-0 .sui-col,.sui-2-1-0 [class*=sui-col-]{padding-left:10px;padding-right:10px}}.sui-2-1-0 .sui-row{display:-ms-flexbox;display:flex;-ms-flex-flow:wrap;flex-flow:wrap;margin-right:-15px;margin-left:-15px}@media (max-width:782px){.sui-2-1-0 .sui-row{margin-left:-10px;margin-right:-10px}}.sui-2-1-0 .sui-reverse{-ms-flex-direction:row-reverse;flex-direction:row-reverse}.sui-2-1-0 .sui-col{-ms-flex:1;flex:1}.sui-2-1-0 [class*=sui-col-]{-ms-flex:0 0 auto;flex:0 0 auto;width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-xs-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-xs-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-xs-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-xs-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-xs-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-xs-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-xs-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-xs-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-xs-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-xs-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-xs-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-xs-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-xs-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-xs-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-xs-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-xs-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-xs-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-xs-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-xs-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-xs-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-xs-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-xs-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-xs-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-xs-offset-1{margin-left:8.33333%}@media (min-width:0px){.sui-2-1-0 .sui-col-xs-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-xs-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-xs-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-xs-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-xs-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-xs-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-xs-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-xs-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-xs-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-xs-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-xs-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-xs-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-xs-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-xs-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-xs-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-xs-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-xs-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-xs-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-xs-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-xs-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-xs-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-xs-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-xs-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-xs-offset-1{margin-left:8.33333%}}@media (min-width:480px){.sui-2-1-0 .sui-col-sm-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-sm-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-sm-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-sm-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-sm-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-sm-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-sm-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-sm-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-sm-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-sm-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-sm-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-sm-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-sm-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-sm-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-sm-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-sm-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-sm-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-sm-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-sm-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-sm-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-sm-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-sm-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-sm-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-sm-offset-1{margin-left:8.33333%}}@media (min-width:783px){.sui-2-1-0 .sui-col-md-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-md-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-md-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-md-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-md-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-md-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-md-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-md-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-md-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-md-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-md-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-md-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-md-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-md-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-md-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-md-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-md-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-md-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-md-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-md-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-md-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-md-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-md-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-md-offset-1{margin-left:8.33333%}}@media (min-width:1200px){.sui-2-1-0 .sui-col-lg-12{width:100%;max-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.sui-2-1-0 .sui-col-lg-offset-12{margin-left:100%}.sui-2-1-0 .sui-col-lg-11{width:91.66667%;max-width:91.66667%;-ms-flex-preferred-size:91.66667%;flex-basis:91.66667%}.sui-2-1-0 .sui-col-lg-offset-11{margin-left:91.66667%}.sui-2-1-0 .sui-col-lg-10{width:83.33333%;max-width:83.33333%;-ms-flex-preferred-size:83.33333%;flex-basis:83.33333%}.sui-2-1-0 .sui-col-lg-offset-10{margin-left:83.33333%}.sui-2-1-0 .sui-col-lg-9{width:75%;max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}.sui-2-1-0 .sui-col-lg-offset-9{margin-left:75%}.sui-2-1-0 .sui-col-lg-8{width:66.66667%;max-width:66.66667%;-ms-flex-preferred-size:66.66667%;flex-basis:66.66667%}.sui-2-1-0 .sui-col-lg-offset-8{margin-left:66.66667%}.sui-2-1-0 .sui-col-lg-7{width:58.33333%;max-width:58.33333%;-ms-flex-preferred-size:58.33333%;flex-basis:58.33333%}.sui-2-1-0 .sui-col-lg-offset-7{margin-left:58.33333%}.sui-2-1-0 .sui-col-lg-6{width:50%;max-width:50%;-ms-flex-preferred-size:50%;flex-basis:50%}.sui-2-1-0 .sui-col-lg-offset-6{margin-left:50%}.sui-2-1-0 .sui-col-lg-5{width:41.66667%;max-width:41.66667%;-ms-flex-preferred-size:41.66667%;flex-basis:41.66667%}.sui-2-1-0 .sui-col-lg-offset-5{margin-left:41.66667%}.sui-2-1-0 .sui-col-lg-4{width:33.33333%;max-width:33.33333%;-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%}.sui-2-1-0 .sui-col-lg-offset-4{margin-left:33.33333%}.sui-2-1-0 .sui-col-lg-3{width:25%;max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}.sui-2-1-0 .sui-col-lg-offset-3{margin-left:25%}.sui-2-1-0 .sui-col-lg-2{width:16.66667%;max-width:16.66667%;-ms-flex-preferred-size:16.66667%;flex-basis:16.66667%}.sui-2-1-0 .sui-col-lg-offset-2{margin-left:16.66667%}.sui-2-1-0 .sui-col-lg-1{width:8.33333%;max-width:8.33333%;-ms-flex-preferred-size:8.33333%;flex-basis:8.33333%}.sui-2-1-0 .sui-col-lg-offset-1{margin-left:8.33333%}}.sui-2-1-0 .sui-notice,.sui-2-1-0 .sui-notice-top{color:#333;font-weight:400;padding:15px 30px;position:relative;width:100%;border-radius:5px;margin-bottom:30px;background-color:#f2f2f2}@media (max-width:782px){.sui-2-1-0 .sui-notice,.sui-2-1-0 .sui-notice-top{margin-bottom:20px;padding:15px}}.sui-2-1-0 .sui-notice-top:last-child,.sui-2-1-0 .sui-notice:last-child{margin-bottom:0}.sui-2-1-0 .sui-notice-top p,.sui-2-1-0 .sui-notice p{padding:0 0 0 30px;color:#333}.sui-2-1-0 .sui-notice-top p:before,.sui-2-1-0 .sui-notice p:before{content:"I"}.sui-2-1-0 .sui-notice-top p a,.sui-2-1-0 .sui-notice-top p a:focus,.sui-2-1-0 .sui-notice-top p a:hover,.sui-2-1-0 .sui-notice p a,.sui-2-1-0 .sui-notice p a:focus,.sui-2-1-0 .sui-notice p a:hover{color:#333}.sui-2-1-0 .sui-notice-top p:before,.sui-2-1-0 .sui-notice p:before{color:#888;vertical-align:middle;top:-2px;margin-left:-30px;position:relative;margin-right:10px;font-size:20px}.sui-2-1-0 .sui-notice-top p:last-of-type,.sui-2-1-0 .sui-notice p:last-of-type{margin:0}.sui-2-1-0 .sui-notice-top.sui-notice-success,.sui-2-1-0 .sui-notice.sui-notice-success{background-color:#d1f1ea}.sui-2-1-0 .sui-notice-top.sui-notice-success p:before,.sui-2-1-0 .sui-notice.sui-notice-success p:before{content:"_";color:#1abc9c}.sui-2-1-0 .sui-notice-top.sui-notice-warning,.sui-2-1-0 .sui-notice.sui-notice-warning{background-color:#fff5d5}.sui-2-1-0 .sui-notice-top.sui-notice-warning p:before,.sui-2-1-0 .sui-notice.sui-notice-warning p:before{content:"!";color:#fecf2f}.sui-2-1-0 .sui-notice-top.sui-notice-error,.sui-2-1-0 .sui-notice.sui-notice-error{background-color:#ffe5e9}.sui-2-1-0 .sui-notice-top.sui-notice-error p:before,.sui-2-1-0 .sui-notice.sui-notice-error p:before{content:"!";color:#ff7f83}.sui-2-1-0 .sui-notice-top.sui-notice-info,.sui-2-1-0 .sui-notice.sui-notice-info{background-color:#e1f6ff}.sui-2-1-0 .sui-notice-top.sui-notice-info p:before,.sui-2-1-0 .sui-notice.sui-notice-info p:before{color:#17a8e3}.sui-2-1-0 .sui-notice-top.sui-notice-sm p,.sui-2-1-0 .sui-notice.sui-notice-sm p{font-size:13px;line-height:22px}.sui-2-1-0 .sui-notice-top.sui-notice-sm p:before,.sui-2-1-0 .sui-notice.sui-notice-sm p:before{font-size:16px}.sui-2-1-0 .sui-notice-top.sui-notice-sm a,.sui-2-1-0 .sui-notice.sui-notice-sm a{font-size:13px}.sui-2-1-0 .sui-notice-top.sui-notice-sm .sui-notice-dismiss a,.sui-2-1-0 .sui-notice.sui-notice-sm .sui-notice-dismiss a{margin-left:-14px}.sui-2-1-0 .sui-notice-top .sui-notice-dismiss,.sui-2-1-0 .sui-notice .sui-notice-dismiss{padding:0 0 0 30px;display:block;margin-top:6px;margin-bottom:-5px}.sui-2-1-0 .sui-notice-top .sui-notice-dismiss a,.sui-2-1-0 .sui-notice .sui-notice-dismiss a{font-weight:500;font-size:12px;text-transform:uppercase;text-decoration:none;color:#888;line-height:16px;padding:5px 10px;margin-left:-10px}.sui-2-1-0 .sui-notice-top.sui-notice-icon-tick p:before,.sui-2-1-0 .sui-notice.sui-notice-icon-tick p:before{content:"_"}.sui-2-1-0 .sui-notice-top.sui-no-notice-icon p,.sui-2-1-0 .sui-notice.sui-no-notice-icon p{padding:0}.sui-2-1-0 .sui-notice-top.sui-no-notice-icon p:before,.sui-2-1-0 .sui-notice.sui-no-notice-icon p:before{content:"";margin:0;padding:0}.sui-2-1-0 .sui-notice-top.sui-notice-top,.sui-2-1-0 .sui-notice.sui-notice-top{position:absolute;top:0;width:600px;z-index:100;left:50%;transform:translateX(-50%);box-shadow:0 5px 25px 0 rgba(0,0,0,.15)}.sui-2-1-0 .sui-notice-top.sui-notice-top:last-of-type,.sui-2-1-0 .sui-notice.sui-notice-top:last-of-type{margin:0}@media (max-width:782px){.sui-2-1-0 .sui-notice-top.sui-notice-top,.sui-2-1-0 .sui-notice.sui-notice-top{width:90%}}@media (max-width:600px){.sui-2-1-0 .sui-notice-top.sui-notice-top,.sui-2-1-0 .sui-notice.sui-notice-top{top:46px}}.sui-2-1-0 .sui-notice-top .sui-notice-buttons,.sui-2-1-0 .sui-notice .sui-notice-buttons{margin:10px 30px 0}.sui-2-1-0 p+.sui-notice{margin-top:30px}@media (max-width:782px){.sui-2-1-0 p+.sui-notice{margin-top:20px}}.sui-2-1-0 .sui-header{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;position:relative;line-height:1;margin-bottom:30px}.sui-2-1-0 .sui-header h1{text-transform:uppercase}@media (max-width:782px){.sui-2-1-0 .sui-header h1{width:100%}}@media (max-width:782px){.sui-2-1-0 .sui-header{margin-bottom:20px}}@media (max-width:782px){.sui-2-1-0 .sui-header .sui-actions-right{margin-left:0;margin-right:auto;margin-top:10px}}@media (max-width:782px){.sui-2-1-0 .sui-header .sui-actions-left{margin-left:0;margin-right:0;margin-top:10px}}.sui-2-1-0 .sui-header-title{color:#333;margin:0;text-align:left;text-transform:uppercase;font-weight:700;max-width:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sui-2-1-0 .sui-summary{padding:15px 30px 0;background-image:url(../images/graphic-hb-minify-summary@2x.png);background-repeat:no-repeat;background-position:3% 100%;background-size:192px 172px}@media (max-width:782px){.sui-2-1-0 .sui-summary{padding:20px 20px 10px}}@media (max-width:1100px){.sui-2-1-0 .sui-summary{background-image:none!important}}.sui-2-1-0 .sui-summary .sui-summary-image-space{width:100%;min-height:172px;float:left;max-width:192px}@media (max-width:1100px){.sui-2-1-0 .sui-summary .sui-summary-image-space{display:none!important}}.sui-2-1-0 .sui-summary .sui-summary-segment{position:relative;color:#333;width:calc(100% / 2 - 98px);padding-left:5%;display:inline-block;vertical-align:middle}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details{position:absolute;top:-5px;transform:translateY(-50%);min-height:80px}@media (max-width:600px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details{position:inherit;top:0;transform:translateY(0)}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-sub{display:block;font-size:13px;margin-top:0;margin-bottom:20px;line-height:22px;color:#888}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-sub:last-of-type{margin-bottom:0}@media (max-width:960px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-sub{margin-bottom:5px}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-percent{font-size:13px;line-height:22px;margin-left:-5px}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i{position:relative;top:-22px;left:5px;font-size:16px}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i+.sui-summary-percent{margin-left:-20px}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-error:before,.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-info:before,.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-success:before,.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details i.sui-warning:before{color:inherit}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-summary-details .sui-summary-large{font-size:50px;line-height:55px;margin-bottom:20px}@media (max-width:1100px){.sui-2-1-0 .sui-summary .sui-summary-segment{text-align:left;padding-left:0;width:49%}}@media (max-width:600px){.sui-2-1-0 .sui-summary .sui-summary-segment{display:block;text-align:center;width:100%}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list{margin:0 0 15px}@media (max-width:783px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list{margin:0 0 10px}}@media (max-width:600px){.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list{text-align:left}}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list .sui-list-detail{font-size:13px;font-weight:500;line-height:22px;color:#888}.sui-2-1-0 .sui-summary .sui-summary-segment .sui-list .sui-list-detail i{line-height:0;vertical-align:middle}.sui-2-1-0 .sui-list{list-style:none;margin:0 0 20px;padding:0}.sui-2-1-0 .sui-list.sui-list-inline{margin-top:20px;margin-bottom:0}.sui-2-1-0 .sui-list.sui-list-standalone{margin-bottom:20px}.sui-2-1-0 .sui-list>li{position:relative;display:table;width:100%;padding:6px 0;margin:0;border-collapse:collapse;border-spacing:0}.sui-2-1-0 .sui-list>li>div{display:table-row}.sui-2-1-0 .sui-list>li.sui-list-header{color:#333;font-size:13px;font-weight:700;line-height:30px;padding-bottom:0}.sui-2-1-0 .sui-list>li.sui-list-header span{display:table-cell;border-bottom:1px solid #eee}.sui-2-1-0 .sui-list>li.sui-list-header span:nth-child(2){text-align:right}.sui-2-1-0 .sui-list>li .sui-list-detail{color:#888;text-align:right;padding:10px 0;font-size:13px;font-weight:500;line-height:22px}.sui-2-1-0 .sui-list>li .sui-list-detail .sui-tag{font-family:Roboto,Arial,sans-serif}.sui-2-1-0 .sui-list>li .sui-list-detail,.sui-2-1-0 .sui-list>li .sui-list-label{display:table-cell;vertical-align:middle;cursor:default;border-bottom:1px solid #eee}.sui-2-1-0 .sui-list>li .sui-list-label{font-size:13px;font-weight:500;line-height:22px;padding:19px 10px 19px 0;color:#333}.sui-2-1-0 .sui-list>li .sui-list-label.sui-list-header{font-family:Roboto Condensed,Roboto,Arial,sans-serif;width:200px;color:#777771}.sui-2-1-0 .sui-list>li:last-of-type .sui-list-detail,.sui-2-1-0 .sui-list>li:last-of-type .sui-list-label{border-bottom:none}.sui-2-1-0 .sui-list.sui-list-top-border{border-top:1px solid #eee}.sui-2-1-0 .sui-list.sui-list-bottom-border{border-bottom:1px solid #eee}.sui-2-1-0 .sui-tooltip{position:relative}.sui-2-1-0 .sui-tooltip:after,.sui-2-1-0 .sui-tooltip:before{content:"";opacity:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:none;position:absolute;z-index:1;transition:margin .2s,opacity .2s}.sui-2-1-0 .sui-tooltip:before{border:5px solid transparent}.sui-2-1-0 .sui-tooltip:after{content:attr(data-tooltip);min-width:40px;padding:8px 12px;border-radius:4px;background:#000;box-sizing:border-box;color:#fff;font:400 12px/18px Roboto,Arial,sans-serif;text-transform:none;text-align:center;white-space:nowrap}.sui-2-1-0 .sui-tooltip:hover:after,.sui-2-1-0 .sui-tooltip:hover:before{opacity:1}.sui-2-1-0 .sui-tooltip.sui-tooltip-constrained:after{min-width:240px;white-space:normal}.sui-2-1-0 .sui-tooltip.sui-tooltip-top:before,.sui-2-1-0 .sui-tooltip:before{bottom:100%;left:50%;border-top-color:#000;transform:translateX(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-top:after,.sui-2-1-0 .sui-tooltip:after{bottom:100%;left:50%;margin:0 0 10px;transform:translateX(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-top-right:after{left:0;transform:translateX(0)}.sui-2-1-0 .sui-tooltip.sui-tooltip-top-left:after{left:auto;transform:translateX(0);right:0}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-left:before,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-right:before,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom:before{top:100%;bottom:inherit;border-top-color:transparent;border-bottom-color:#000}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-left:after,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-right:after,.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom:after{top:100%;bottom:inherit;margin:10px 0 0;transform:translateX(0)}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom:after{transform:translateX(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-right:after{left:0}.sui-2-1-0 .sui-tooltip.sui-tooltip-bottom-left:after{left:auto;right:0}.sui-2-1-0 .sui-tooltip.sui-tooltip-left:before{top:50%;right:100%;bottom:inherit;left:inherit;border-top-color:transparent;border-left-color:#000;transform:translateY(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-left:after{top:50%;right:100%;bottom:inherit;left:inherit;margin:0 10px 0 0;transform:translateY(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-right:before{top:50%;bottom:inherit;left:100%;border-top-color:transparent;border-right-color:#000;transform:translateY(-50%)}.sui-2-1-0 .sui-tooltip.sui-tooltip-right:after{top:50%;bottom:inherit;left:100%;margin:0 0 0 10px;transform:translateY(-50%)}.sui-2-1-0 .select-container{position:relative;z-index:1;display:block;cursor:pointer;border-radius:4px;transition-property:background,border-color;transition-duration:.3s;text-align:left;border:1px solid #ddd;background-color:#f8f8f8}.sui-2-1-0 .select-container .dropdown-handle{transition:border-color .3s;display:inline-block;position:absolute;width:45px;height:auto;top:0;right:0;z-index:1011;border-radius:0 4px 4px 0;border-bottom:0;border-left-color:transparent;padding:0;text-align:center;line-height:40px;transition-property:color,border-color;transition-duration:.3s;color:#888}.sui-2-1-0 .select-container .dropdown-handle i:before{vertical-align:middle;font-size:12px}.sui-2-1-0 .select-container.sui-mobile-nav{background-color:#fff;margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .select-container.sui-mobile-nav{margin-bottom:20px}}.sui-2-1-0 .select-container.sui-mobile-nav .dropdown-handle{background-color:#fff;font-size:13px}.sui-2-1-0 .select-container:hover{border-color:#ddd}.sui-2-1-0 .select-container:hover .list-value{color:#333}.sui-2-1-0 .select-container:hover .list-results{border-left-color:#ddd;border-right-color:#ddd;border-bottom-color:#ddd}.sui-2-1-0 .select-container:hover .dropdown-handle{border-top-color:#ddd;border-right-color:#ddd}.sui-2-1-0 .select-container.active{z-index:99999;background:#f8f8f8}.sui-2-1-0 .select-container.active .list-value{background:#f8f8f8;border-radius:3px 0 0 0;color:#333}.sui-2-1-0 .select-container.active .dropdown-handle{border-color:#ddd;border-bottom-right-radius:3px}.sui-2-1-0 .select-container.active .list-results{left:0;right:0;width:auto;display:block;transition-duration:0ms}.sui-2-1-0 .select-container.active.sui-mobile-nav .dropdown-handle{background-color:transparent;font-size:13px}.sui-2-1-0 .select-container.active:hover{border-color:#ddd}.sui-2-1-0 .select-container.active:hover .list-value{color:#333}.sui-2-1-0 .select-container.active:hover .list-results{border-color:#ddd}.sui-2-1-0 .select-container.active:hover .list-results li{opacity:1}.sui-2-1-0 .select-container.active:hover .dropdown-handle{border-color:#ddd;color:#ddd}.sui-2-1-0 .select-list-container{position:relative;display:block;vertical-align:middle;padding-right:45px;zoom:1}.sui-2-1-0 .select-list-container .list-value{position:relative;display:block;overflow:hidden;text-overflow:ellipsis;background-clip:padding-box;text-decoration:none;white-space:nowrap;line-height:24px;height:auto;width:100%;padding:8px 8px 8px 15px;border:0;color:#aaa;font:500 15px/25px Roboto,Arial,sans-serif;transition-property:color;transition-duration:.3s}.sui-2-1-0 .select-list-container .list-results{position:absolute;top:41px;left:-9999px;right:-9999px;z-index:1010;width:0;background:#fff;border:1px solid #eaeaea;margin-left:-1px;margin-right:-1px;margin-top:1px;display:none;border-radius:4px;font:500 15px/25px Roboto,Arial,sans-serif;transition-property:opacity,border-color;transition-duration:.3s;padding-left:0;max-height:200px;overflow-y:auto}.sui-2-1-0 .select-list-container .list-results li{padding:10px 15px;background:none;color:#777771;cursor:pointer;list-style:none;font-weight:400;line-height:15px;word-wrap:break-word;margin:0;opacity:.8;transition-property:opacity;transition-duration:.3s;border-radius:0!important}.sui-2-1-0 .select-list-container .list-results .optgroup{cursor:default}.sui-2-1-0 .select-list-container .list-results .optgroup li{padding-left:30px;cursor:pointer}.sui-2-1-0 .select-list-container .list-results .optgroup li.optgroup-label{padding-left:10px;color:#aaa;cursor:default;pointer-events:none}.sui-2-1-0 .select-list-container .list-results li:last-child{border-radius:0 0 3px 3px}.sui-2-1-0 .select-list-container .list-results li:hover{background:#f2f2f2;color:#333}.sui-2-1-0 .select-list-container .list-results .optgroup li.optgroup-label:hover{background:none}.sui-2-1-0 .select-list-container .list-results .current{background:#888;color:#fff}.sui-2-1-0 .list-table>tbody>.select-open td,.sui-2-1-0 .list-table>tfoot>.select-open th,.sui-2-1-0 .list-table>thead>.select-open th{z-index:9}.sui-2-1-0 .sui-tag{display:inline-block;background-color:#fecf2f;color:#333;border-radius:15px;min-width:39px;height:26px;font-size:12px;line-height:26px;text-align:center;font-weight:500;padding:0 16px;cursor:default}.sui-2-1-0 .sui-tag.sui-tag-success{background-color:#1abc9c;color:#fff}.sui-2-1-0 .sui-tag.sui-tag-error{background-color:#ff7f83;color:#fff}.sui-2-1-0 .sui-tag.sui-tag-inactive{background-color:#e6e6e6;color:#aaa}.sui-2-1-0 .sui-tag.sui-tag-disabled{background-color:#f8f8f8;color:#aaa}.sui-2-1-0 .sui-tag.sui-tag-upgrade{background-color:#1abc9c;color:#fff}.sui-2-1-0 .sui-tag.sui-tag-upsell{border:2px solid #d1f1ea;color:#1abc9c;width:auto;height:26px;line-height:15px;background:transparent;padding:4px 16px}.sui-2-1-0 .sui-inline-label,.sui-2-1-0 .sui-label{font-family:Roboto,Arial,sans-serif;font-size:12px;font-weight:500;line-height:16px;color:#888;display:-ms-inline-flexbox;display:inline-flex;width:100%}.sui-2-1-0 label[for]{cursor:pointer}.sui-2-1-0 .sui-label-link{margin-left:auto;margin-right:0;font-weight:400;color:#888}.sui-2-1-0 .sui-inline-label{display:inline-block;margin:0;padding:0}.sui-2-1-0 .sui-form-control,.sui-2-1-0 .sui-upload-group{font-family:Roboto,Arial,sans-serif;letter-spacing:-.025em;display:block;width:100%;height:40px;padding:7px 15px;font-size:15px;font-weight:500;line-height:30px;color:#333;background-color:#f8f8f8;background-image:none;border:1px solid #ddd;border-radius:3px;transition:color .3s ease-in-out,border-color .3s ease-in-out,background-color .3s ease-in-out}.sui-2-1-0 .sui-form-control::-ms-expand,.sui-2-1-0 .sui-upload-group::-ms-expand{border:0;background-color:transparent}.sui-2-1-0 .sui-form-control[disabled],.sui-2-1-0 [disabled].sui-upload-group,fieldset[disabled] .sui-2-1-0 .sui-form-control,fieldset[disabled] .sui-2-1-0 .sui-upload-group{cursor:not-allowed}.sui-2-1-0 .sui-form-control:focus,.sui-2-1-0 .sui-form-control:hover,.sui-2-1-0 .sui-upload-group:focus,.sui-2-1-0 .sui-upload-group:hover{background-color:#fff;border:1px solid #ddd}.sui-2-1-0 .sui-form-control:focus,.sui-2-1-0 .sui-upload-group:focus{color:#333;outline:0;background-color:#fff}.sui-2-1-0 .sui-form-control::-webkit-input-placeholder,.sui-2-1-0 .sui-upload-group::-webkit-input-placeholder{color:#ddd}.sui-2-1-0 .sui-form-control:-ms-input-placeholder,.sui-2-1-0 .sui-upload-group:-ms-input-placeholder{color:#ddd}.sui-2-1-0 .sui-form-control::placeholder,.sui-2-1-0 .sui-upload-group::placeholder{color:#ddd}.sui-2-1-0 textarea.sui-form-control,.sui-2-1-0 textarea.sui-upload-group{line-height:20px;height:auto;max-width:100%;resize:vertical}.sui-2-1-0 select.sui-form-control,.sui-2-1-0 select.sui-upload-group{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAs0lEQVQ4T6WS2w0CIRBF59KA2oklaAdbgpbgB48SIBThduKWYClrA2CGgEEXNWH5moR7Zu48QJ0PnRytA6WUe67svb//clDrUkWt9UxEMYRw/AYzJIS4sd45t0ugMeZERNcY49yCCwRgS0Rna+346rGGAVz4s06aW0gQx2/DUUoNAEYAG86cxezkAWCw1k5lBoupZltThomhEMLhs/fmOgrM2VvQwmq9in8rWncAPWfXXfEJ6RpWD7sJ1JwAAAAASUVORK5CYII=);background-repeat:no-repeat;background-position:center right 10px;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;line-height:1}.sui-2-1-0 .sui-input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;width:100%}.sui-2-1-0 .sui-form-field{margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .sui-form-field{margin-bottom:20px}}.sui-2-1-0 .sui-form-field-error .sui-form-control,.sui-2-1-0 .sui-form-field-error .sui-upload-group{border-bottom:2px solid #ff7f83}.sui-2-1-0 .sui-error-message{display:block;margin-top:8px;color:#ff7f83;font-size:12px;line-height:16px;font-weight:500}.sui-2-1-0 .sui-description{display:block;margin-top:5px;color:#888;font-size:13px;line-height:16px;font-weight:400}.sui-2-1-0 .sui-description.sui-toggle-description{margin-left:48px}.sui-2-1-0 .sui-description.sui-checkbox-description,.sui-2-1-0 .sui-description.sui-radio-description{margin:0 27px 5px}.sui-2-1-0 .sui-password-group{position:relative}.sui-2-1-0 .sui-password-group .sui-password-toggle{cursor:pointer;background:transparent;border:none;color:#888;font-size:15px;line-height:1em;padding:0;position:absolute;top:50%;right:7px;height:30px;width:30px;transform:translateY(-50%);outline:0;border-radius:4px}.sui-2-1-0 .sui-password-group .sui-password-toggle:hover{background-color:rgba(0,0,0,.03)}.sui-2-1-0 .sui-password-group .sui-password-toggle:hover i:before{color:#666}.sui-2-1-0 .sui-checkbox,.sui-2-1-0 .sui-radio{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:start}.sui-2-1-0 .sui-checkbox span,.sui-2-1-0 .sui-radio span{-ms-flex-negative:0;flex-shrink:0;position:relative;display:inline-block;width:16px;height:16px;background-color:#e6e6e6;cursor:pointer;transition:.2s;border-radius:3px;margin-top:3px}.sui-2-1-0 .sui-checkbox span:before,.sui-2-1-0 .sui-radio span:before{opacity:0;content:"(";color:#fff;font-size:10px;line-height:16px;position:absolute;width:100%;text-align:center;transition:.2s}.sui-2-1-0 .sui-checkbox input:checked+span,.sui-2-1-0 .sui-radio input:checked+span{background-color:#17a8e3}.sui-2-1-0 .sui-checkbox input:checked+span:before,.sui-2-1-0 .sui-radio input:checked+span:before{opacity:1}.sui-2-1-0 .sui-checkbox .sui-description,.sui-2-1-0 .sui-radio .sui-description{cursor:pointer;margin-top:0;margin-left:10px;font-size:15px;line-height:22px;color:#666;font-weight:500}.sui-2-1-0 .sui-checkbox .sui-description.sui-description-sm,.sui-2-1-0 .sui-radio .sui-description.sui-description-sm{font-size:13px}.sui-2-1-0 .sui-checkbox input[disabled]+span,.sui-2-1-0 .sui-radio input[disabled]+span,fieldset[disabled] .sui-2-1-0 .sui-checkbox+span,fieldset[disabled] .sui-2-1-0 .sui-radio+span{cursor:not-allowed;opacity:.5}.sui-2-1-0 .sui-checkbox input[disabled]+span+div.sui-description,.sui-2-1-0 .sui-radio input[disabled]+span+div.sui-description{color:#aaa;cursor:not-allowed}.sui-2-1-0 .sui-checkbox span{border-radius:3px}.sui-2-1-0 .sui-checkbox+.sui-checkbox{margin-top:10px}.sui-2-1-0 .sui-radio span{border-radius:50%}.sui-2-1-0 .sui-radio+.sui-radio{margin-top:10px}.sui-2-1-0 .sui-upload-group{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-upload-button{background-color:transparent;border-radius:4px;display:inline-block;margin:0 5px 0 0;font-size:13px;font-weight:400;line-height:1.5;pointer-events:none;padding:1px 16px;border:1px solid #ddd;background:0 0;color:#888;transition:all .2s}.sui-2-1-0 .sui-upload-label{width:100%}.sui-2-1-0 .sui-upload-label:focus .sui-upload-button,.sui-2-1-0 .sui-upload-label:hover .sui-upload-button{background-color:#888;border-color:#888;color:#fff}.sui-2-1-0 .sui-upload-message{font-weight:400}.sui-2-1-0 .sui-tabs{float:none;position:relative;padding:0;margin:0;background-color:#fff;border-top-left-radius:5px;border-top-right-radius:5px}.sui-2-1-0 .sui-tabs:after,.sui-2-1-0 .sui-tabs:before{content:"";display:table;clear:both}.sui-2-1-0 .sui-tabs .sui-tab{float:left}.sui-2-1-0 .sui-tabs .sui-tab:first-child label{border-top-left-radius:5px}.sui-2-1-0 .sui-tabs .sui-tab label{display:block;margin:0;top:0;cursor:pointer;position:relative;border:0;font-size:15px;text-transform:capitalize;color:#888;padding:0 10px;line-height:1.5em;height:40px}.sui-2-1-0 .sui-tabs .sui-tab input[type=radio]{display:none}.sui-2-1-0 .sui-tabs .sui-tab input[type=radio]:checked+label{background-color:#fff;color:#777771;height:61px;z-index:3}.sui-2-1-0 .sui-tabs .sui-tab .sui-tab-content{z-index:2;display:none;text-align:left;left:0;right:0;width:auto;padding:30px 0 0;position:absolute;min-height:150px;border-top:1px solid #eaeaea;background-color:#fff;overflow:auto;border-top:2px solid #eaeaea;top:38px}@media (max-width:782px){.sui-2-1-0 .sui-tabs .sui-tab .sui-tab-content{padding:20px 0 0}}.sui-2-1-0 .sui-tabs .sui-tab input[type=radio]:checked~.sui-tab-content{display:block}.sui-2-1-0 .sui-tabs .sui-tab>.active{color:#333;border-bottom:2px solid #333;z-index:10}.sui-2-1-0 .sui-row-with-sidenav{clear:both;position:relative;display:table;width:100%;table-layout:fixed;margin-bottom:30px}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav{display:block}}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav{width:220px;padding-right:30px;display:table-cell;position:relative;vertical-align:top}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav{display:block;width:100%;padding:0}}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav ul{padding:0}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav li{list-style:none;margin-bottom:6px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab{padding:5px 15px;height:30px;line-height:1.5em}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab.current{background-color:#e6e6e6;border-radius:20px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab.current a{color:#333;font-weight:500}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab .sui-tag,.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab i{position:relative;top:-25px;left:100%;margin-left:-27px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab i{top:-23px;margin-left:-10px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs .sui-vertical-tab i:before{font-size:21px}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs a{color:#666;display:block;font-weight:400;transition:.3s}.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs a:focus,.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-vertical-tabs a:hover{color:#333}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-sidenav-hide-md{display:none}}@media (min-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-sidenav .sui-sidenav-hide-lg{display:none}}.sui-2-1-0 .sui-row-with-sidenav .sui-box{display:block;position:relative;vertical-align:top}@media (max-width:1100px){.sui-2-1-0 .sui-row-with-sidenav .sui-box{display:block}}.sui-2-1-0 .sui-dropdown{position:relative;display:inline-block;text-align:left}.sui-2-1-0 .sui-dropdown-anchor{display:inline-block;color:#888}.sui-2-1-0 .sui-dropdown-anchor:active,.sui-2-1-0 .sui-dropdown-anchor:focus,.sui-2-1-0 .sui-dropdown-anchor:hover,.sui-2-1-0 .sui-dropdown-anchor:hover:not(:focus):not(:active),.sui-2-1-0 .sui-dropdown.open .sui-dropdown-anchor{color:#17a8e3}.sui-2-1-0 .sui-dropdown.open ul{display:block;list-style:none}.sui-2-1-0 .sui-dropdown.open:after,.sui-2-1-0 .sui-dropdown.open:before{content:"";position:absolute;border-style:solid;border-width:0 9px 9px;display:block;width:0;border-top-color:#000;margin:7px 0 0}.sui-2-1-0 .sui-dropdown.open:after{border-color:#fff transparent;z-index:11;top:24px}.sui-2-1-0 .sui-dropdown.open:before{border-color:#e6e6e6 transparent;z-index:10;top:23px}.sui-2-1-0 .sui-dropdown ul{border:1px solid #ddd;box-shadow:0 3px 7px 0 rgba(0,0,0,.05);min-width:180px;margin-bottom:0;margin-top:0;padding:10px 0;font:500 15px/25px Roboto,Arial,sans-serif;background:#fff;position:absolute;left:auto;right:-22px;top:130%;z-index:10;border-radius:4px;display:none}.sui-2-1-0 .sui-dropdown ul li{padding:10px 15px;background:none;color:#777771;cursor:pointer;list-style:none;font-weight:400;line-height:15px;word-wrap:break-word;margin:0;opacity:.8;transition-property:opacity;transition-duration:.3s;border-radius:0!important}.sui-2-1-0 .sui-dropdown ul li a{font-weight:300;color:inherit}.sui-2-1-0 .sui-dropdown ul li a:hover{color:inherit}.sui-2-1-0 .sui-dropdown ul li:hover:not(.sui-dropdown-label){background:#f2f2f2;color:#333}.sui-2-1-0 .sui-dropdown ul li.active{background:#f8f8f8;color:#333}.sui-2-1-0 .sui-dropdown ul li.current{background:#888;color:#fff}.sui-2-1-0 .sui-dropdown ul li.sui-dropdown-label{border-bottom:1px solid #e6e6e6;line-height:30px;cursor:default;color:#666}.sui-2-1-0 .sui-dropdown.sui-dropdown-right ul{left:-22px;transform:none}.sui-2-1-0 .sui-dropdown.sui-dropdown-center ul{left:50%;transform:translateX(-50%)}.sui-2-1-0 .sui-dropdown.wds-item-loading{font-size:18px}.sui-2-1-0 .sui-dropdown.wds-item-loading .sui-dropdown-anchor{visibility:hidden}@keyframes sui1{to{stroke-dasharray:2.63894 262.89378}}@keyframes sui2{to{stroke-dasharray:5.27788 525.78757}}@keyframes sui3{to{stroke-dasharray:7.91681 788.68135}}@keyframes sui4{to{stroke-dasharray:10.55575 1051.57513}}@keyframes sui5{to{stroke-dasharray:13.19469 1314.46891}}@keyframes sui6{to{stroke-dasharray:15.83363 1577.3627}}@keyframes sui7{to{stroke-dasharray:18.47256 1840.25648}}@keyframes sui8{to{stroke-dasharray:21.1115 2103.15026}}@keyframes sui9{to{stroke-dasharray:23.75044 2366.04405}}@keyframes sui10{to{stroke-dasharray:26.38938 2628.93783}}@keyframes sui11{to{stroke-dasharray:29.02832 2891.83161}}@keyframes sui12{to{stroke-dasharray:31.66725 3154.72539}}@keyframes sui13{to{stroke-dasharray:34.30619 3417.61918}}@keyframes sui14{to{stroke-dasharray:36.94513 3680.51296}}@keyframes sui15{to{stroke-dasharray:39.58407 3943.40674}}@keyframes sui16{to{stroke-dasharray:42.22301 4206.30053}}@keyframes sui17{to{stroke-dasharray:44.86194 4469.19431}}@keyframes sui18{to{stroke-dasharray:47.50088 4732.08809}}@keyframes sui19{to{stroke-dasharray:50.13982 4994.98188}}@keyframes sui20{to{stroke-dasharray:52.77876 5257.87566}}@keyframes sui21{to{stroke-dasharray:55.41769 5520.76944}}@keyframes sui22{to{stroke-dasharray:58.05663 5783.66322}}@keyframes sui23{to{stroke-dasharray:60.69557 6046.55701}}@keyframes sui24{to{stroke-dasharray:63.33451 6309.45079}}@keyframes sui25{to{stroke-dasharray:65.97345 6572.34457}}@keyframes sui26{to{stroke-dasharray:68.61238 6835.23836}}@keyframes sui27{to{stroke-dasharray:71.25132 7098.13214}}@keyframes sui28{to{stroke-dasharray:73.89026 7361.02592}}@keyframes sui29{to{stroke-dasharray:76.5292 7623.9197}}@keyframes sui30{to{stroke-dasharray:79.16813 7886.81349}}@keyframes sui31{to{stroke-dasharray:81.80707 8149.70727}}@keyframes sui32{to{stroke-dasharray:84.44601 8412.60105}}@keyframes sui33{to{stroke-dasharray:87.08495 8675.49484}}@keyframes sui34{to{stroke-dasharray:89.72389 8938.38862}}@keyframes sui35{to{stroke-dasharray:92.36282 9201.2824}}@keyframes sui36{to{stroke-dasharray:95.00176 9464.17618}}@keyframes sui37{to{stroke-dasharray:97.6407 9727.06997}}@keyframes sui38{to{stroke-dasharray:100.27964 9989.96375}}@keyframes sui39{to{stroke-dasharray:102.91858 10252.85753}}@keyframes sui40{to{stroke-dasharray:105.55751 10515.75132}}@keyframes sui41{to{stroke-dasharray:108.19645 10778.6451}}@keyframes sui42{to{stroke-dasharray:110.83539 11041.53888}}@keyframes sui43{to{stroke-dasharray:113.47433 11304.43266}}@keyframes sui44{to{stroke-dasharray:116.11326 11567.32645}}@keyframes sui45{to{stroke-dasharray:118.7522 11830.22023}}@keyframes sui46{to{stroke-dasharray:121.39114 12093.11401}}@keyframes sui47{to{stroke-dasharray:124.03008 12356.0078}}@keyframes sui48{to{stroke-dasharray:126.66902 12618.90158}}@keyframes sui49{to{stroke-dasharray:129.30795 12881.79536}}@keyframes sui50{to{stroke-dasharray:131.94689 13144.68915}}@keyframes sui51{to{stroke-dasharray:134.58583 13407.58293}}@keyframes sui52{to{stroke-dasharray:137.22477 13670.47671}}@keyframes sui53{to{stroke-dasharray:139.8637 13933.37049}}@keyframes sui54{to{stroke-dasharray:142.50264 14196.26428}}@keyframes sui55{to{stroke-dasharray:145.14158 14459.15806}}@keyframes sui56{to{stroke-dasharray:147.78052 14722.05184}}@keyframes sui57{to{stroke-dasharray:150.41946 14984.94563}}@keyframes sui58{to{stroke-dasharray:153.05839 15247.83941}}@keyframes sui59{to{stroke-dasharray:155.69733 15510.73319}}@keyframes sui60{to{stroke-dasharray:158.33627 15773.62697}}@keyframes sui61{to{stroke-dasharray:160.97521 16036.52076}}@keyframes sui62{to{stroke-dasharray:163.61415 16299.41454}}@keyframes sui63{to{stroke-dasharray:166.25308 16562.30832}}@keyframes sui64{to{stroke-dasharray:168.89202 16825.20211}}@keyframes sui65{to{stroke-dasharray:171.53096 17088.09589}}@keyframes sui66{to{stroke-dasharray:174.1699 17350.98967}}@keyframes sui67{to{stroke-dasharray:176.80883 17613.88345}}@keyframes sui68{to{stroke-dasharray:179.44777 17876.77724}}@keyframes sui69{to{stroke-dasharray:182.08671 18139.67102}}@keyframes sui70{to{stroke-dasharray:184.72565 18402.5648}}@keyframes sui71{to{stroke-dasharray:187.36459 18665.45859}}@keyframes sui72{to{stroke-dasharray:190.00352 18928.35237}}@keyframes sui73{to{stroke-dasharray:192.64246 19191.24615}}@keyframes sui74{to{stroke-dasharray:195.2814 19454.13993}}@keyframes sui75{to{stroke-dasharray:197.92034 19717.03372}}@keyframes sui76{to{stroke-dasharray:200.55928 19979.9275}}@keyframes sui77{to{stroke-dasharray:203.19821 20242.82128}}@keyframes sui78{to{stroke-dasharray:205.83715 20505.71507}}@keyframes sui79{to{stroke-dasharray:208.47609 20768.60885}}@keyframes sui80{to{stroke-dasharray:211.11503 21031.50263}}@keyframes sui81{to{stroke-dasharray:213.75396 21294.39642}}@keyframes sui82{to{stroke-dasharray:216.3929 21557.2902}}@keyframes sui83{to{stroke-dasharray:219.03184 21820.18398}}@keyframes sui84{to{stroke-dasharray:221.67078 22083.07776}}@keyframes sui85{to{stroke-dasharray:224.30972 22345.97155}}@keyframes sui86{to{stroke-dasharray:226.94865 22608.86533}}@keyframes sui87{to{stroke-dasharray:229.58759 22871.75911}}@keyframes sui88{to{stroke-dasharray:232.22653 23134.6529}}@keyframes sui89{to{stroke-dasharray:234.86547 23397.54668}}@keyframes sui90{to{stroke-dasharray:237.5044 23660.44046}}@keyframes sui91{to{stroke-dasharray:240.14334 23923.33424}}@keyframes sui92{to{stroke-dasharray:242.78228 24186.22803}}@keyframes sui93{to{stroke-dasharray:245.42122 24449.12181}}@keyframes sui94{to{stroke-dasharray:248.06016 24712.01559}}@keyframes sui95{to{stroke-dasharray:250.69909 24974.90938}}@keyframes sui96{to{stroke-dasharray:253.33803 25237.80316}}@keyframes sui97{to{stroke-dasharray:255.97697 25500.69694}}@keyframes sui98{to{stroke-dasharray:258.61591 25763.59072}}@keyframes sui99{to{stroke-dasharray:261.25485 26026.48451}}@keyframes sui100{to{stroke-dasharray:263.89378 26289.37829}}.sui-2-1-0 .sui-circle-score{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:30px;width:auto;opacity:0;transition:all .4s}.sui-2-1-0 .sui-circle-score svg{height:100%;transform:rotate(-90deg);transform-origin:center}.sui-2-1-0 .sui-circle-score svg circle{fill:none;stroke-linecap:butt}.sui-2-1-0 .sui-circle-score svg circle:first-child{stroke:#f2f2f2}.sui-2-1-0 .sui-circle-score svg circle:last-child{stroke:#1abc9c}.sui-2-1-0 .sui-circle-score.loaded{opacity:1}.sui-2-1-0 .sui-circle-score-label{margin-left:10px;font-weight:500}.sui-2-1-0 .sui-circle-score-sm{height:30px}.sui-2-1-0 .sui-circle-score-lg{height:120px}.sui-2-1-0 .sui-circle-score-lg .sui-circle-score-label{display:none}.sui-2-1-0 .sui-grade-aplus svg circle:last-child,.sui-2-1-0 .sui-grade-a svg circle:last-child,.sui-2-1-0 .sui-grade-b svg circle:last-child{stroke:#1abc9c}.sui-2-1-0 .sui-grade-c svg circle:last-child,.sui-2-1-0 .sui-grade-d svg circle:last-child{stroke:#fecf2f}.sui-2-1-0 .sui-grade-e svg circle:last-child,.sui-2-1-0 .sui-grade-f svg circle:last-child{stroke:#ff7f83}.sui-2-1-0 #wpfooter{display:none}.sui-2-1-0 .sui-footer{text-align:center;margin-top:50px;color:#aaa;font-size:13px}.sui-2-1-0 .sui-footer i:before{font-size:11px;line-height:22px;margin:0 3px}.sui-2-1-0 #sui-cross-sell-footer>div{width:100%;text-align:center;border-bottom:1px solid #e6e6e6;line-height:.1em;margin:10px 0 40px}.sui-2-1-0 #sui-cross-sell-footer>div>span{position:relative;color:#888;background-color:#f1f1f1;padding:0 30px;font-size:16px;top:8px}.sui-2-1-0 #sui-cross-sell-footer h3{font-size:22px;font-weight:700;line-height:30px;text-transform:none}.sui-2-1-0 .sui-cross-sell-modules{margin-top:30px}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3{min-height:150px;border-radius:5px 5px 0 0}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1>span,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2>span,.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3>span{width:56px;height:56px;display:block;border:3px solid #fff;border-radius:50%;position:relative;top:80px;left:15px;box-shadow:0 1px 10px 0 rgba(0,0,0,.25)}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1{background:url(../images/plugins-smush.jpg) 50%;background-size:cover}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1>span{background:url(../images/plugins-smush-icon.png) no-repeat 50%;background-size:50px 50px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.sui-2-1-0 .sui-cross-sell-modules .sui-cross-1>span{background-image:url(../images/plugins-smush-icon@2x.png)}}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2{background:url(../images/plugins-defender.jpg) 50%;background-size:cover}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2>span{background:url(../images/plugins-defender-icon.png) no-repeat 50%;background-size:50px 50px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.sui-2-1-0 .sui-cross-sell-modules .sui-cross-2>span{background-image:url(../images/plugins-defender-icon@2x.png)}}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3{background:url(../images/plugins-crawl.jpg) 50%;background-size:cover}.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3>span{background:url(../images/plugins-crawl-icon.png) no-repeat 50%;background-size:50px 50px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.sui-2-1-0 .sui-cross-sell-modules .sui-cross-3>span{background-image:url(../images/plugins-crawl-icon@2x.png)}}.sui-2-1-0 .sui-cross-sell-modules .sui-box-body{text-align:center;border-radius:0 0 5px 5px}.sui-2-1-0 .sui-cross-sell-modules .sui-box-body p{color:#888;font-size:13px;line-height:20px;margin-bottom:30px}.sui-2-1-0 .sui-cross-sell-modules h3{font-size:18px;font-weight:700;line-height:30px;text-transform:none;margin-top:0;min-height:60px}.sui-2-1-0 .sui-cross-sell-bottom{text-align:center;margin-top:50px}.sui-2-1-0 .sui-cross-sell-bottom h3{font-size:22px;font-weight:700;line-height:30px;text-transform:none}.sui-2-1-0 .sui-cross-sell-bottom p{max-width:500px;margin:20px auto 30px}.sui-2-1-0 .sui-cross-sell-bottom .sui-button{margin:0}.sui-2-1-0 .sui-cross-sell-bottom img{display:block;height:auto;max-width:100%;margin:30px auto 0}.sui-2-1-0 .sui-progress-block{background-color:#f8f8f8;border-radius:5px;width:100%;height:60px;padding:15px 30px}.sui-2-1-0 .sui-progress-block .sui-progress{overflow:hidden;width:100%}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text{width:65px;float:left;text-align:left}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text:before{margin-right:10px;position:relative;top:3px;font-size:18px}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text img{display:inline-block;vertical-align:middle;margin-right:10px}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-text span{font-weight:700;font-family:Roboto Condensed,Roboto,Arial,sans-serif;font-size:13px;color:#333;vertical-align:middle;line-height:30px}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-bar{background:#e6e6e6;border-radius:5px;height:10px;overflow:hidden;margin-top:10px;position:relative}.sui-2-1-0 .sui-progress-block .sui-progress .sui-progress-bar span{background:#17a8e3;height:10px;display:inline-block;position:absolute;top:0;left:0;transition:width 1s ease-in-out}.sui-2-1-0 .sui-progress-block .sui-progress-close{display:none}.sui-2-1-0 .sui-progress-block.sui-progress-can-close{position:relative}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress{padding-right:40px}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close{display:block;position:absolute;right:20px;width:30px;height:30px;cursor:pointer;background:transparent;border:none;color:#888;font-size:15px;line-height:1em;padding:0;top:50%;transform:translateY(-50%);outline:0;border-radius:4px}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close i:before{color:#aaa;font-size:16px;position:relative}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close:hover{background-color:rgba(0,0,0,.03)}.sui-2-1-0 .sui-progress-block.sui-progress-can-close .sui-progress-close:hover i:before{color:#666}.sui-2-1-0 .sui-progress-state{margin-top:10px;text-align:center}.sui-2-1-0 .sui-progress-state .sui-progress-state-text{color:#888;font-size:13px;line-height:22px}.sui-2-1-0 .sui-table{width:100%;border:1px solid #e6e6e6;border-collapse:collapse;border-spacing:unset;border-radius:5px;color:#666;font-size:13px}.sui-2-1-0 .sui-table th{white-space:nowrap;text-align:left;padding:20px 30px;font-weight:500;line-height:1;color:#333}.sui-2-1-0 .sui-table td,.sui-2-1-0 .sui-table th{border-bottom:1px solid #e6e6e6}.sui-2-1-0 .sui-table tr:last-child td{border-bottom:none}.sui-2-1-0 .sui-table td{padding:20px 30px}.sui-2-1-0 .sui-table tfoot th{border-bottom:none;border-top:1px solid #e6e6e6}.sui-2-1-0 .sui-field-list{border:1px solid #e6e6e6;border-radius:5px}.sui-2-1-0 .sui-field-list-header{padding:20px 30px}.sui-2-1-0 .sui-field-list-item{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-top:1px solid #e6e6e6;padding:15px 30px}.sui-2-1-0 .sui-field-list-item-label{margin-left:0;margin-right:auto}.sui-2-1-0 .sui-field-list-title{font-family:Roboto,Arial,sans-serif;font-size:13px;line-height:30px;color:#333;text-transform:capitalize;font-weight:500;margin:0}@media (max-width:782px){.sui-2-1-0 .sui-table{border:none}.sui-2-1-0 .sui-table td,.sui-2-1-0 .sui-table th{padding:15px 15px 15px 0}.sui-2-1-0 .sui-table td:last-of-type,.sui-2-1-0 .sui-table th:last-of-type{padding-right:0}.sui-2-1-0 .sui-table tr:last-child td{border-bottom:1px solid #e6e6e6}}.sui-2-1-0 .sui-accordion{border:0}.sui-2-1-0 .sui-accordion:after{content:"";display:table;margin-bottom:30px}.sui-2-1-0 .sui-accordion-item{display:table-row;vertical-align:middle;cursor:pointer;transition:background-color .2s}.sui-2-1-0 .sui-accordion-item,.sui-2-1-0 .sui-accordion-item+.sui-accordion-item-content{border-left:2px solid transparent}.sui-2-1-0 .sui-accordion-item.sui-success{color:inherit;border-color:#1abc9c}.sui-2-1-0 .sui-accordion-item.sui-success i:before{color:inherit}.sui-2-1-0 .sui-accordion-item.sui-success+.sui-accordion-item-content{border-color:#1abc9c}.sui-2-1-0 .sui-accordion-item.sui-warning{color:inherit;border-color:#fecf2f}.sui-2-1-0 .sui-accordion-item.sui-warning i:before{color:inherit}.sui-2-1-0 .sui-accordion-item.sui-warning+.sui-accordion-item-content{border-color:#fecf2f}.sui-2-1-0 .sui-accordion-item.sui-error{color:inherit;border-color:#ff7f83}.sui-2-1-0 .sui-accordion-item.sui-error i:before{color:inherit}.sui-2-1-0 .sui-accordion-item.sui-error+.sui-accordion-item-content{border-color:#ff7f83}.sui-2-1-0 .sui-accordion-item:focus,.sui-2-1-0 .sui-accordion-item:hover{background-color:#f8f8f8}.sui-2-1-0 .sui-accordion-item td{padding:15px 30px}@media (max-width:782px){.sui-2-1-0 .sui-accordion-item td{padding:15px 20px}}.sui-2-1-0 .sui-accordion-item td>*{vertical-align:middle}.sui-2-1-0 .sui-accordion-item--open td{background-color:#f8f8f8;border-bottom:1px solid #f8f8f8}.sui-2-1-0 .sui-accordion-item--open+.sui-accordion-item-content{display:table-row}.sui-2-1-0 .sui-accordion-item--open .sui-accordion-open-indicator i{transform:rotate(180deg)}.sui-2-1-0 .sui-accordion-open-indicator{float:right;text-align:center}.sui-2-1-0 .sui-accordion-open-indicator i{transform-origin:center;font-size:10px;color:#888;transition:.5s}.sui-2-1-0 .sui-accordion-open-indicator i:before{position:relative;top:2px}.sui-2-1-0 .sui-accordion-item-title{font-size:15px}.sui-2-1-0 .sui-accordion-item-title i{font-size:20px;margin-right:10px}.sui-2-1-0 .sui-accordion-item-content{display:none;background-color:#f8f8f8;border-top:0}.sui-2-1-0 .sui-accordion-item-content td{width:100%;padding:0 30px 30px}@media (max-width:782px){.sui-2-1-0 .sui-accordion-item-content td{padding:0 20px 20px}}.sui-2-1-0 .sui-accordion-item-content .sui-box{margin-bottom:0}.sui-2-1-0 .sui-code-snippet-wrapper{position:relative}.sui-2-1-0 .sui-code-snippet-wrapper [data-clipboard-target]{position:absolute;right:15px;top:15px;margin:0;min-width:auto}.sui-2-1-0 .sui-dialog[aria-hidden=true]{display:none}.sui-2-1-0 .sui-dialog{position:fixed;z-index:1;top:0;right:0;bottom:0;left:160px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-dialog-content{max-width:400px}@media (max-width:400px){.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-dialog-content{max-width:90%}}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-header{border:none;text-align:center;display:block;position:relative}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-header .sui-box-title{margin-top:30px;margin-bottom:-10px;font-size:22px}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-header .sui-dialog-close{position:absolute;right:30px;top:30px}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-body p{font-size:13px;line-height:22px;text-align:center}.sui-2-1-0 .sui-dialog.sui-dialog-sm .sui-box-footer{border:none;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.sui-2-1-0 .sui-dialog.sui-dialog-lg .sui-dialog-content{max-width:980px}@media (max-width:1200px){.sui-2-1-0 .sui-dialog.sui-dialog-lg .sui-dialog-content{max-width:90%}}@media (max-width:960px){.sui-2-1-0 .sui-dialog{left:36px}}@media (max-width:782px){.sui-2-1-0 .sui-dialog{left:0}}.sui-2-1-0 .sui-dialog *{box-sizing:border-box}.sui-2-1-0 .sui-dialog-overlay{position:fixed;z-index:2;background-color:rgba(51,51,51,.95);top:0;right:0;bottom:0;left:160px}@media (max-width:960px){.sui-2-1-0 .sui-dialog-overlay{left:36px}}@media (max-width:782px){.sui-2-1-0 .sui-dialog-overlay{left:0}}.sui-2-1-0 .sui-dialog-content{z-index:2;position:relative;width:100%;max-width:600px;margin:0 auto;max-height:85%;overflow-y:auto}.sui-2-1-0 .sui-dialog-content>.sui-box{box-shadow:0 10px 40px rgba(0,0,0,.2)}.sui-2-1-0 .sui-dialog-content .sui-box-body>*{margin-bottom:30px}@media (max-width:782px){.sui-2-1-0 .sui-dialog-content .sui-box-body>*{margin-bottom:20px}}.sui-2-1-0 .sui-dialog-content .sui-box-body>:last-child{margin-bottom:0}.sui-2-1-0 .sui-dialog-close{font-size:1.25em;background-image:none;background-color:transparent;border:0;cursor:pointer;color:#aaa;outline-style:none}.sui-2-1-0 .sui-dialog-close:before{content:")"}.sui-2-1-0 .sui-listing li{color:#777771;line-height:26px;padding:2px 0 2px 34px;position:relative}.sui-2-1-0 .sui-listing li:before{content:"_";color:#17a8e3;top:1px;font-size:20px;vertical-align:middle;position:absolute;left:0;width:20px;height:20px;opacity:.8;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1}
|
assets/shared-ui-2/fonts/WPMU-DEV-Icon.eot
ADDED
Binary file
|
assets/shared-ui-2/fonts/WPMU-DEV-Icon.svg
ADDED
@@ -0,0 +1,233 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
+
<svg xmlns="http://www.w3.org/2000/svg">
|
4 |
+
<metadata>Generated by IcoMoon</metadata>
|
5 |
+
<defs>
|
6 |
+
<font id="WPMU-DEV-Icon" horiz-adv-x="1024">
|
7 |
+
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
8 |
+
<missing-glyph horiz-adv-x="1024" />
|
9 |
+
<glyph unicode=" " horiz-adv-x="512" d="" />
|
10 |
+
<glyph unicode="!" glyph-name="fi-warning-alert" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512s229.23-512 512-512zM459.776 732.843c0 9.426 7.641 17.067 17.067 17.067h68.267c9.426 0 17.067-7.641 17.067-17.067v-330.752c0-9.426-7.641-17.067-17.067-17.067h-67.243c-9.426 0-17.067 7.641-17.067 17.067zM512 310.613c34.109-0.386 61.611-28.126 61.611-62.29 0-0.061 0-0.123 0-0.184 0-34.3-27.813-62.113-62.123-62.113s-62.123 27.813-62.123 62.123c0 0 0 0 0 0 0 34.498 27.966 62.464 62.464 62.464 0.060 0 0.12 0 0.18 0z" />
|
11 |
+
<glyph unicode="#" glyph-name="fi-align-justify" d="M972.8 960h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-46.421c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v46.421c0 28.277-22.923 51.2-51.2 51.2zM972.8 667.136h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-46.421c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v47.275c0 28.277-22.923 51.2-51.2 51.2zM972.8 375.125h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-46.421c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v47.275c0 28.277-22.923 51.2-51.2 51.2zM972.8 83.115h-921.6c-28.277 0-51.2-22.923-51.2-51.2v-44.715c0-28.277 22.923-51.2 51.2-51.2h921.6c28.277 0 51.2 22.923 51.2 51.2v45.568c0 28.277-22.923 51.2-51.2 51.2z" />
|
12 |
+
<glyph unicode="$" glyph-name="fi-dollar" horiz-adv-x="657" d="M397.483 531.797v162.816c57.244-13.411 106.989-39.912 147.792-76.241l-0.336 0.294c3.046-2.866 7.159-4.627 11.684-4.627 5.721 0 10.784 2.815 13.881 7.135l0.035 0.051 68.267 96.768c2.941 3.182 4.744 7.454 4.744 12.146 0 5.442-2.426 10.318-6.256 13.605-64.084 57.685-146.852 95.709-238.205 104.009l-1.606 93.643c0 10.274-8.329 18.603-18.603 18.603h-73.728c-10.274 0-18.603-8.329-18.603-18.603v-91.136c-159.232-16.555-253.611-117.931-253.611-237.056 0-160.427 132.096-206.507 253.611-235.861v-182.955c-73.541 13.989-137.119 49.613-185.583 99.904l-1.126 0.107c-3.077 3.023-7.3 4.89-11.958 4.89-6.999 0-13.014-4.213-15.647-10.241l-0.043-0.11-67.584-96.939c-3.165-3.101-5.127-7.419-5.127-12.195 0-5.934 3.029-11.161 7.625-14.219l0.063-0.039c64.853-64.853 155.648-112.128 279.552-122.709v-87.552c-0.008-0.204-0.013-0.443-0.013-0.683 0-10.218 8.239-18.512 18.436-18.602h73.736c10.274 0 18.603 8.329 18.603 18.603v0 87.552c173.397 17.067 259.584 119.467 259.584 250.027 0 161.621-136.533 208.896-259.584 238.933zM286.549 558.251c-47.616 16.043-81.749 33.621-81.749 67.925 0 40.107 29.525 68.267 81.408 75.435zM397.483 192v158.037c51.2-17.067 88.405-35.499 88.405-74.24s-28.16-72.021-88.405-83.797z" />
|
13 |
+
<glyph unicode="%" glyph-name="fi-align-left" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM50.005 521.387h670.208c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-670.208c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005zM867.157 82.261h-817.152c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h817.152c27.617 0 50.005 22.388 50.005 50.005v0 46.080c0 27.617-22.388 50.005-50.005 50.005zM50.005 228.523h570.197c27.617 0 50.005 22.388 50.005 50.005v0 46.080c0 27.617-22.388 50.005-50.005 50.005h-570.197c0 0 0 0 0 0-27.557 0-49.908-22.291-50.005-49.825v-46.089c0-27.617 22.388-50.005 50.005-50.005z" />
|
14 |
+
<glyph unicode="&" glyph-name="fi-align-right" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM967.339 667.477h-670.208c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h670.208c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005zM967.168 82.261h-816.981c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h816.981c27.617 0 50.005 22.388 50.005 50.005v0 46.080c0 27.617-22.388 50.005-50.005 50.005zM1017.515 324.779c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080z" />
|
15 |
+
<glyph unicode="'" glyph-name="fi-quote-2" d="M214.357 82.432c-117.589 0-219.477 101.888-214.357 237.568 8.021 222.037 243.029 386.56 426.667 493.568l54.955-46.933c-131.413-78.336-259.755-199.168-267.264-339.456-5.12-141.141 167.083-206.165 167.083-211.627-2.56-73.045-75.776-133.291-167.083-133.291zM757.589 82.261c-117.419 0-219.307 102.4-214.187 237.568 7.851 221.867 242.859 386.389 425.643 493.568l54.955-46.763c-130.731-78.336-258.56-199.168-266.411-339.456-5.12-141.141 167.083-206.165 167.083-211.627-2.56-73.045-75.776-133.291-167.083-133.291z" />
|
16 |
+
<glyph unicode="(" glyph-name="fi-check" d="M1010.005 741.035l-68.267 68.267c-8.68 8.854-20.766 14.343-34.133 14.343s-25.453-5.489-34.126-14.335l-503.304-505.181-221.867 221.867c-8.68 8.854-20.766 14.343-34.133 14.343s-25.453-5.489-34.126-14.335l-68.274-68.274c-8.854-8.68-14.343-20.766-14.343-34.133s5.489-25.453 14.335-34.126l290.824-288.093c17.296-17.297 41.19-27.996 67.584-27.996s50.288 10.699 67.584 27.996l572.245 572.075c8.854 8.68 14.343 20.766 14.343 34.133s-5.489 25.453-14.335 34.126z" />
|
17 |
+
<glyph unicode=")" glyph-name="fi-close" horiz-adv-x="774" d="M505.344 448l256 256c8.075 8.115 13.067 19.304 13.067 31.659s-4.992 23.544-13.069 31.66l-55.465 54.612c-8.115 8.075-19.304 13.067-31.659 13.067s-23.544-4.992-31.66-13.069l-255.998-255.998-256 256c-8.042 7.814-19.032 12.632-31.147 12.632s-23.105-4.818-31.157-12.643l-55.115-54.944c-7.974-8.097-12.898-19.217-12.898-31.488s4.924-23.391 12.903-31.494l255.994-255.994-256-256c-8.075-8.115-13.067-19.304-13.067-31.659s4.992-23.544 13.069-31.66l55.124-54.612c8.096-8.116 19.291-13.137 31.659-13.137s23.563 5.021 31.658 13.136l256.001 256.001 256-256c8.115-8.075 19.304-13.067 31.659-13.067s23.544 4.992 31.66 13.069l54.953 54.953c8.075 8.115 13.067 19.304 13.067 31.659s-4.992 23.544-13.069 31.66z" />
|
18 |
+
<glyph unicode="*" glyph-name="fi-asterisk" horiz-adv-x="976" d="M960.341 301.397v0 0.853l-251.904 145.749 253.269 146.091c8.431 5.256 13.959 14.479 13.959 24.993 0 5.373-1.444 10.409-3.964 14.742l0.075-0.14-80.384 139.264c-5.26 8.415-14.473 13.93-24.975 13.93-5.106 0-9.907-1.304-14.089-3.596l0.153 0.077-255.147-145.237v293.376c-0.464 15.61-13.047 28.133-28.637 28.501l-161.827 0.001c-15.552-0.46-28.041-12.949-28.5-28.458l-0.001-0.043v-292.864l-254.123 146.603c-3.946 2.123-8.634 3.37-13.614 3.37-10.762 0-20.164-5.826-25.224-14.495l-0.075-1.163-81.408-139.093c-2.216-4.030-3.519-8.831-3.519-13.937 0-10.502 5.515-19.716 13.807-24.904l0.123-0.072 254.464-146.944-247.979-143.189c-2.348-0.69-4.386-1.561-6.292-2.637-8.651-5.101-14.464-14.526-14.464-25.307 0-5.353 1.433-10.371 3.936-14.693l-0.075 0.141 83.115-144.043c5.422-6.48 13.512-10.571 22.558-10.571 5.392 0 10.444 1.454 14.786 3.99l-0.139-0.075 252.928 145.92v-285.355c0-2.048 0-4.437 0-6.656 0-0.053-0.001-0.116-0.001-0.179 0-16.212 13.143-29.355 29.355-29.355 0.24 0 0.48 0.003 0.719 0.009l165.511-0.001c13.945 3.117 24.262 15.243 24.575 29.833l0.001 0.034v292.011l247.808-142.677c1.6-1.533 3.39-2.889 5.327-4.023 4.333-2.527 9.378-3.976 14.761-3.976 10.73 0 20.115 5.757 25.235 14.35l0.074 0.135 83.115 144.043c1.14 3.009 1.8 6.488 1.8 10.122 0 10.777-5.807 20.197-14.463 25.302z" />
|
19 |
+
<glyph unicode="+" glyph-name="fi-cross-close" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512s512 229.23 512 512zM680.107 235.349c-5.961-5.964-14.198-9.652-23.296-9.652s-17.335 3.689-23.296 9.652l-121.515 121.515-121.515-121.515c-5.961-5.964-14.198-9.652-23.296-9.652s-17.335 3.689-23.296 9.652l-49.835 49.835c-5.964 5.961-9.652 14.198-9.652 23.296s3.689 17.335 9.652 23.296l121.515 121.515-121.515 121.515c-5.964 5.961-9.652 14.198-9.652 23.296s3.689 17.335 9.652 23.296l49.835 49.835c5.961 5.964 14.198 9.652 23.296 9.652s17.335-3.689 23.296-9.652l121.515-120.832 121.515 121.515c5.961 5.964 14.198 9.652 23.296 9.652s17.335-3.689 23.296-9.652l49.835-49.835c5.964-5.961 9.652-14.198 9.652-23.296s-3.689-17.335-9.652-23.296l-121.515-121.515 121.515-121.515c5.964-5.961 9.652-14.198 9.652-23.296s-3.689-17.335-9.652-23.296z" />
|
20 |
+
<glyph unicode="," glyph-name="fi-clock" d="M512 823.467c207.365 0 375.467-168.102 375.467-375.467s-168.102-375.467-375.467-375.467c-207.365 0-375.467 168.102-375.467 375.467 0.677 207.091 168.375 374.79 375.401 375.466zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM774.144 638.293l-53.248 53.248c-4.962 4.662-11.661 7.527-19.029 7.527s-14.067-2.864-19.044-7.54l-170.652-170.653-93.696 93.696c-4.946 4.7-11.65 7.591-19.029 7.591s-14.083-2.891-19.041-7.602l-53.065-53.066c-4.951-4.865-8.020-11.631-8.021-19.114 0-0.020 0-0.043 0-0.066 0-7.378 3.001-14.055 7.85-18.877l165.719-165.719c4.849-4.851 11.549-7.851 18.95-7.851 0.058 0 0.116 0 0.174 0.001h1.015c7.274 0.098 13.834 3.079 18.603 7.851l242.347 242.347c4.857 4.876 7.86 11.602 7.86 19.029s-3.003 14.153-7.861 19.030z" />
|
21 |
+
<glyph unicode="-" glyph-name="fi-minus" horiz-adv-x="980" d="M935.083 531.627h-890.368c-24.656-0.097-44.618-20.058-44.715-44.705v-77.833c0.097-24.656 20.058-44.618 44.705-44.715h890.377c24.656 0.097 44.618 20.058 44.715 44.705v77.833c-0.097 24.656-20.058 44.618-44.705 44.715z" />
|
22 |
+
<glyph unicode="." glyph-name="fi-social-android" horiz-adv-x="867" d="M572.928 866.475l44.032 80.555c0.696 1.23 1.106 2.7 1.106 4.267 0 4.852-3.933 8.786-8.786 8.786-3.286 0-6.15-1.804-7.657-4.475l-44.567-80.94c-36.42 16.441-78.958 26.021-123.733 26.021s-87.314-9.579-125.677-26.801l-42.6 81.505c-1.513 2.739-4.383 4.563-7.68 4.563-4.829 0-8.744-3.915-8.744-8.744 0-1.533 0.394-2.974 1.087-4.226l44.009-80.51c-85.319-42.218-143.333-127.969-145.064-227.44l569.17-0.229c-1.801 99.634-59.797 185.306-143.562 226.824zM303.787 741.888c-13.196 0-23.893 10.697-23.893 23.893s10.697 23.893 23.893 23.893c13.196 0 23.893-10.697 23.893-23.893s-10.697-23.893-23.893-23.893zM563.029 741.888c-13.196 0-23.893 10.697-23.893 23.893s10.697 23.893 23.893 23.893c13.196 0 23.893-10.697 23.893-23.893s-10.697-23.893-23.893-23.893zM866.816 565.589c0 34.922-28.31 63.232-63.232 63.232s-63.232-28.31-63.232-63.232v-264.533c0-34.922 28.31-63.232 63.232-63.232s63.232 28.31 63.232 63.232zM716.8 616.96h-565.931v-409.6c0-37.703 30.564-68.267 68.267-68.267h45.909v-139.947c0-34.875 28.272-63.147 63.147-63.147s63.147 28.272 63.147 63.147v139.947h85.333v-139.947c0-34.922 28.31-63.232 63.232-63.232s63.232 28.31 63.232 63.232v139.947h45.397c12.636 0.101 24.409 3.707 34.419 9.893 20.1 11.527 33.657 33.090 33.847 57.835zM63.147 628.736c-34.836-0.097-63.050-28.311-63.147-63.137v-264.713c0-34.922 28.31-63.232 63.232-63.232s63.232 28.31 63.232 63.232v264.704c0 0 0 0 0 0 0 34.875-28.272 63.147-63.147 63.147-0.060 0-0.12 0-0.18 0z" />
|
23 |
+
<glyph unicode="/" glyph-name="fi-pencil" d="M0-34.987c-0.395-1.591-0.622-3.418-0.622-5.298 0-6.68 2.864-12.692 7.432-16.873 4.214-4.6 10.225-7.464 16.906-7.464 1.88 0 3.707 0.227 5.455 0.655l312.163 95.029 674.133 674.133c4.857 4.876 7.86 11.602 7.86 19.029s-3.003 14.153-7.861 19.030l-208.212 208.895c-4.849 4.847-11.546 7.845-18.944 7.845s-14.095-2.998-18.944-7.845l-674.304-674.816zM88.235 24.917l60.757 199.168 139.093-139.093z" />
|
24 |
+
<glyph unicode="0" glyph-name="fi-unlock" horiz-adv-x="808" d="M767.147 528.896h-507.563v93.696c-0.006 0.491-0.009 1.072-0.009 1.653 0 75.487 56.723 137.726 129.872 146.418 4.812 0.483 9.589 0.72 14.422 0.72 72.754 0 132.97-53.685 143.195-123.602 1.489-12.067 10.93-20.741 22.433-20.922h144.061c12.49 0.060 22.592 10.2 22.592 22.698 0 0.601-0.023 1.196-0.069 1.785-13.165 171.030-153.621 305.322-326.153 308.653-186.354 3.077-338.93-153.595-338.93-341.328v-90.453h-29.696c-0.002 0-0.004 0-0.006 0-22.57 0-40.912-18.104-41.295-40.583v-510.329c0-22.81 18.491-41.301 41.301-41.301h725.845c22.81 0 41.301 18.491 41.301 41.301v510.293c0 22.81-18.491 41.301-41.301 41.301z" />
|
25 |
+
<glyph unicode="1" glyph-name="fi-user-hero-points-trophy" horiz-adv-x="819" d="M795.648 769.195c0 13.007-10.545 23.552-23.552 23.552h-99.499v85.333s0 1.536 0 2.219c0.006 0.255 0.010 0.554 0.010 0.855 0 19.866-16.011 35.992-35.832 36.18h-480.786c-18.655-1.461-33.244-16.941-33.28-35.836s0-1.54 0-2.222v-85.333h-99.157c-0.001 0-0.002 0-0.002 0-13.007 0-23.552-10.545-23.552-23.552 0-0.12 0.001-0.24 0.003-0.359v0.018-322.048c0.097-12.934 10.604-23.381 23.551-23.381 0 0 0 0 0.001 0h102.4c17.299-112.496 100.743-201.565 208.74-226.959l1.862-157.382h-122.88c-16.966 0-30.72-13.754-30.72-30.72s13.754-30.72 30.72-30.72h368.299c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72h-122.88v157.013c109.86 25.763 193.304 114.833 210.408 225.792l102.595 1.536c0.007 0 0.014 0 0.022 0 12.647 0 22.966 9.969 23.528 22.477l0.002 0.051v322.048zM123.051 486.059h-61.611v245.248h61.611zM734.379 486.059h-61.781v245.248h61.269z" />
|
26 |
+
<glyph unicode="2" glyph-name="fi-user-reputation-points" d="M1021.44 565.76c-25.429-116.736-243.712-207.872-509.44-207.872-282.795 0-512 103.253-512 230.741v-140.629c0-127.488 229.205-230.741 512-230.741s512 103.253 512 230.741c-0.030 8.12-0.961 16.008-2.698 23.587zM512 76.629c-282.795 0-512 103.253-512 230.741v-140.629c0-127.488 229.205-230.741 512-230.741s512 103.253 512 230.741v140.629c0-127.488-229.205-230.741-512-230.741zM1024 729.259c0-127.659-229.205-230.059-512-230.059s-512 102.4-512 230.059 229.205 230.741 512 230.741 512-103.253 512-230.741z" />
|
27 |
+
<glyph unicode="3" glyph-name="fi-user-star-level-up" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM753.835 103.936l-241.835 168.277-241.835-168.277 85.333 281.941-234.837 178.176 294.571 5.973 96.768 278.357 96.768-278.357 294.571-5.973-234.837-178.005z" />
|
28 |
+
<glyph unicode="4" glyph-name="fi-map" d="M846.165 15.872l24.235-11.605 32.597-14.677 25.6 57.003-56.661 25.941zM921.6 803.669l-42.155 24.405h-1.365l-11.264 6.656-31.915-53.931 53.931-31.915zM1006.933 753.152l-45.397 26.624-31.915-53.931 37.205-21.845h57.173v18.944c0.004 0.192 0.006 0.418 0.006 0.644 0 12.57-6.795 23.553-16.912 29.477zM961.365 4.267l-15.36-34.133 46.933-20.992c2.607-1.187 5.653-1.878 8.862-1.878 0.065 0 0.129 0 0.194 0.001h-0.010c12.281 0.557 22.027 10.649 22.027 23.018 0 0.248-0.004 0.495-0.012 0.741l0.001 75.74h-62.635zM961.365 658.261h62.635v-93.867h-62.635v93.867zM961.365 345.429h62.635v-93.867h-62.635v93.867zM961.365 501.76h62.635v-93.867h-62.635v93.867zM961.365 188.928h62.635v-93.867h-62.635v93.867zM798.379 811.691l28.16 47.616-7.339 4.267-20.48 11.093-193.536-102.4-179.712 97.28h-1.365c-1.831 0.635-3.971 1.116-6.184 1.354-1.859 0.565-3.887 0.986-5.977 1.196-2.342-0.206-4.37-0.627-6.312-1.242-2.12-0.166-4.262-0.648-6.293-1.366l-0.834 0.058-179.883-97.28-179.541 97.28c-3.779 1.93-8.243 3.061-12.971 3.061s-9.192-1.131-13.136-3.137c-7.174-3.055-12.354-9.947-12.972-18.113l-0.004-788.552c0.277-7.992 4.945-14.831 11.654-18.206l193.146-105.186h1.195c3.582-1.678 7.778-2.657 12.203-2.657s8.621 0.979 12.383 2.732l0.843-0.076 179.541 97.621 180.565-97.621h1.195c3.601-1.724 7.827-2.731 12.288-2.731 0.034 0 0.074 0 0.114 0 4.423 0 8.61 1.007 12.345 2.805l0.853-0.074 180.395 96.597 4.608-0.853 25.6 57.003-30.549 14.507zM202.411 9.557l-136.533 73.557v702.293l136.533-73.557zM426.667 98.987v700.757l161.451-87.893v-699.733z" />
|
29 |
+
<glyph unicode="5" glyph-name="fi-link" d="M937.301 873.301c-53.634 53.723-127.776 86.958-209.68 86.958-76.505 0-146.238-28.998-198.807-76.602l0.252 0.225-149.845-149.845c-25.641-25.678-46.572-56.068-61.381-89.757-31.625-15.29-58.179-32.491-81.399-53.332l0.273 0.241-150.016-149.504c-52.643-53.447-85.149-126.857-85.149-207.859 0-163.629 132.648-296.277 296.277-296.277 81.002 0 154.411 32.506 207.896 85.186l149.808 149.809c20.597 22.947 37.798 49.501 50.462 78.489 36.317 17.445 66.707 38.376 92.389 64.021l149.671 150.013c47.233 52.28 76.134 121.907 76.134 198.285 0 81.784-33.137 155.828-86.717 209.439zM404.651 129.195v0c-27.058-27.058-64.439-43.794-105.728-43.794-82.579 0-149.522 66.943-149.522 149.522 0 41.289 16.736 78.67 43.794 105.728v0l109.227 109.227c27.506-103.779 107.646-183.862 209.402-210.823zM485.888 421.717c-24.767 24.736-40.86 58.152-43.325 95.295 74.658-4.508 134.018-63.81 139.045-138.017-37.57 2.016-70.991 18.113-95.717 42.89zM840.021 564.736l-118.613-118.613c-27.443 103.758-107.527 183.842-209.232 210.822l107.344 109.861 9.216 9.216c26.131 22.897 60.586 36.864 98.304 36.864 82.569 0 149.504-66.935 149.504-149.504 0-37.718-13.967-72.173-37.012-98.476z" />
|
30 |
+
<glyph unicode="6" glyph-name="fi-unlink" horiz-adv-x="1025" d="M129.536 783.36l109.397-110.080c5.875-5.875 13.99-9.508 22.955-9.508 17.929 0 32.463 14.534 32.463 32.463 0 8.964-3.634 17.080-9.508 22.955l-108.885 109.568c-5.652 4.91-13.084 7.903-21.215 7.903-17.909 0-32.427-14.518-32.427-32.427 0-8.131 2.993-15.563 7.936-21.254zM318.635 826.88l39.765-150.357c3.88-13.945 16.466-24.008 31.403-24.008 17.972 0 32.541 14.569 32.541 32.541 0 3.036-0.416 5.974-1.193 8.762l-39.711 149.275c-3.878 13.899-16.427 23.926-31.317 23.926-17.927 0-32.459-14.532-32.459-32.459 0-3.036 0.417-5.975 1.196-8.762zM127.829 567.467v0l149.845-40.107c2.559-0.725 5.497-1.142 8.533-1.142 17.927 0 32.459 14.532 32.459 32.459 0 14.891-10.027 27.439-23.697 31.263l-149.562 40.332c-2.559 0.725-5.497 1.142-8.533 1.142-17.927 0-32.459-14.532-32.459-32.459 0-14.891 10.027-27.439 23.697-31.263zM895.147 112.64l-110.080 110.080c-5.875 5.875-13.99 9.508-22.955 9.508-17.929 0-32.463-14.534-32.463-32.463 0-8.964 3.634-17.080 9.508-22.955l109.568-109.568c5.771-5.373 13.536-8.671 22.072-8.671 17.909 0 32.427 14.518 32.427 32.427 0 8.493-3.265 16.224-8.609 22.005zM706.048 69.12l-40.448 150.357c-3.88 13.945-16.466 24.008-31.403 24.008-17.972 0-32.541-14.569-32.541-32.541 0-3.036 0.416-5.974 1.193-8.762l40.052-149.616c3.878-13.899 16.427-23.926 31.317-23.926 17.927 0 32.459 14.532 32.459 32.459 0 3.036-0.417 5.975-1.196 8.762zM896.853 328.533v0l-149.845 40.107c-2.559 0.725-5.497 1.142-8.533 1.142-17.927 0-32.459-14.532-32.459-32.459 0-14.891 10.027-27.439 23.697-31.263l150.074-40.161c2.559-0.725 5.497-1.142 8.533-1.142 17.927 0 32.459 14.532 32.459 32.459 0 14.891-10.027 27.439-23.697 31.263zM492.032 428.203c-40.919 40.905-97.441 66.205-159.872 66.205-58.335 0-111.51-22.088-151.619-58.358l0.196 0.174-114.347-114.347c-38.111-40.385-61.537-94.988-61.537-155.062 0-124.89 101.243-226.133 226.133-226.133 60.074 0 114.677 23.425 155.173 61.64l114.236 114.243c36.095 39.914 58.183 93.089 58.183 151.424 0 62.431-25.3 118.953-66.206 159.873zM417.963 192l-109.397-109.397c-20.662-20.514-49.128-33.193-80.555-33.193-63.151 0-114.345 51.194-114.345 114.345 0 31.724 12.919 60.43 33.783 81.145l109.404 109.404c19.827 17.113 45.846 27.537 74.3 27.537 62.963 0 114.005-51.042 114.005-114.005 0-28.453-10.424-54.472-27.661-74.446zM958.464 893.781c-40.919 40.905-97.441 66.205-159.872 66.205-58.335 0-111.51-22.088-151.619-58.358l0.196 0.174-114.347-114.347c-37.354-40.216-60.276-94.288-60.276-153.712 0-124.89 101.243-226.133 226.133-226.133 59.467 0 113.573 22.954 153.941 60.486l114.207 114.218c36.095 39.914 58.183 93.089 58.183 151.424 0 62.431-25.3 118.953-66.206 159.873zM884.224 658.091l-109.397-109.397c-19.918-17.349-46.131-27.926-74.814-27.926-63.058 0-114.176 51.118-114.176 114.176 0 29.023 10.829 55.518 28.668 75.662l-0.104-0.12 109.397 109.397c19.827 17.113 45.846 27.537 74.3 27.537 62.963 0 114.005-51.042 114.005-114.005 0-28.453-10.424-54.472-27.661-74.446z" />
|
31 |
+
<glyph unicode="7" glyph-name="fi-list-number" d="M74.923 690.005l-41.643-41.813 16.043-16.896 22.016 22.357v-95.915h28.16v132.267h-24.576zM51.2 357.376c10.923 0 21.504-5.632 21.504-17.067 0-17.067-15.872-29.696-69.973-69.803v-22.187h99.669v24.576h-53.76c34.133 24.917 52.907 44.544 52.907 67.243 0 26.283-22.187 42.155-51.2 42.155-0.385 0.008-0.839 0.012-1.293 0.012-19.679 0-37.412-8.326-49.871-21.648l16.007-18.641c8.674 9.463 21.091 15.373 34.888 15.373 0.395 0 0.788-0.005 1.18-0.014zM73.557 6.656c15.583 1.746 27.742 14.315 28.837 29.935 0.006 22.118-18.938 35.942-49.829 35.942-0.979 0.053-2.125 0.083-3.277 0.083-18.944 0-35.996-8.101-47.88-21.028l13.952-17.113c8.612 8.446 20.422 13.658 33.449 13.658 0.241 0 0.481-0.002 0.721-0.005 13.617 0 24.54-5.12 24.54-15.701s-9.899-14.165-24.576-14.165c-4.949 0-14.165 0-17.067 0v-25.429h17.067c18.432 0 26.624-4.779 26.624-15.36s-8.875-17.067-24.917-17.067c-0.037 0-0.081 0-0.125 0-14.15 0-26.959 5.74-36.226 15.018l-14.849-18.261c12.162-13.097 29.476-21.266 48.697-21.266 1.301 0 2.593 0.037 3.875 0.111 31.567-0.008 52.047 16.035 52.047 38.904-0.683 16.957-14.020 30.59-30.788 31.738zM981.845 685.909h-773.803c-23.281 0-42.155-18.873-42.155-42.155v-38.912c0-23.281 18.873-42.155 42.155-42.155h773.803c23.281 0 42.155 18.873 42.155 42.155v38.912c0 23.281-18.873 42.155-42.155 42.155zM981.845 377.685h-773.803c-23.281 0-42.155-18.873-42.155-42.155v-38.912c0-23.281 18.873-42.155 42.155-42.155h773.803c0 0 0 0 0 0 23.221 0 42.057 18.776 42.154 41.975v39.092c0 23.281-18.873 42.155-42.155 42.155zM981.845 69.291h-773.803c-23.281 0-42.155-18.873-42.155-42.155v-38.912c0-23.281 18.873-42.155 42.155-42.155h773.803c23.281 0 42.155 18.873 42.155 42.155v38.912c0 23.281-18.873 42.155-42.155 42.155z" />
|
32 |
+
<glyph unicode="8" glyph-name="fi-list-bullet" d="M982.528 662.187h-759.125c-22.904 0-41.472-18.568-41.472-41.472v-38.229c0-22.904 18.568-41.472 41.472-41.472h759.125c22.904 0 41.472 18.568 41.472 41.472v38.229c0 22.904-18.568 41.472-41.472 41.472zM982.528 359.595h-759.125c-22.904 0-41.472-18.568-41.472-41.472v-38.229c0-22.904 18.568-41.472 41.472-41.472h759.125c0 0 0 0 0 0 22.904 0 41.472 18.568 41.472 41.472 0 0.060 0 0.12 0 0.18v38.049c0 22.904-18.568 41.472-41.472 41.472zM982.528 57.003h-759.125c-22.904 0-41.472-18.568-41.472-41.472v-38.229c0.097-22.831 18.627-41.301 41.472-41.301 0 0 0 0 0 0h759.125c22.904 0 41.472 18.568 41.472 41.472v38.229c0 22.904-18.568 41.472-41.472 41.472zM60.587 662.187c-33.461 0-60.587-27.126-60.587-60.587s27.126-60.587 60.587-60.587c33.461 0 60.587 27.126 60.587 60.587s-27.126 60.587-60.587 60.587zM60.587 371.712c-33.461-0.001-60.586-27.126-60.586-60.587s27.126-60.587 60.587-60.587c33.461 0 60.587 27.126 60.587 60.587 0 0.12 0 0.24-0.001 0.36 0 33.443-27.125 60.568-60.587 60.568zM60.587 57.173c-33.461 0-60.587-27.126-60.587-60.587s27.126-60.587 60.587-60.587c33.461 0 60.587 27.126 60.587 60.587s-27.126 60.587-60.587 60.587z" />
|
33 |
+
<glyph unicode="9" glyph-name="fi-lock" horiz-adv-x="808" d="M767.147 528.896h-29.696v97.963c-8.285 177.386-154.114 318.065-332.8 318.065s-324.515-140.679-332.772-317.323l-0.028-98.705h-30.549c-22.81 0-41.301-18.491-41.301-41.301v-510.293c0-22.81 18.491-41.301 41.301-41.301h725.845c22.81 0 41.301 18.491 41.301 41.301v510.293c0 22.81-18.491 41.301-41.301 41.301zM259.584 626.859c0 79.835 64.719 144.555 144.555 144.555s144.555-64.719 144.555-144.555v-97.963h-289.109z" />
|
34 |
+
<glyph unicode=":" glyph-name="fi-code" horiz-adv-x="1647" d="M7.68 417.792c-4.757 4.731-7.702 11.28-7.702 18.517s2.944 13.787 7.7 18.516l96.257 95.575 290.133 290.133c4.849 4.847 11.546 7.845 18.944 7.845s14.095-2.998 18.944-7.845l76.971-76.8c4.847-4.849 7.845-11.546 7.845-18.944s-2.998-14.095-7.845-18.944l-290.133-290.133 290.133-290.133c4.847-4.849 7.845-11.546 7.845-18.944s-2.998-14.095-7.845-18.944l-76.971-76.8c-4.849-4.847-11.546-7.845-18.944-7.845s-14.095 2.998-18.944 7.845l-290.133 290.133zM1639.595 417.792c4.757 4.731 7.702 11.28 7.702 18.517s-2.944 13.787-7.7 18.516l-96.428 95.575-290.133 290.133c-4.849 4.847-11.546 7.845-18.944 7.845s-14.095-2.998-18.944-7.845l-76.8-76.8c-4.847-4.849-7.845-11.546-7.845-18.944s2.998-14.095 7.845-18.944l290.133-290.133-290.133-290.133c-4.847-4.849-7.845-11.546-7.845-18.944s2.998-14.095 7.845-18.944l76.8-76.8c4.849-4.847 11.546-7.845 18.944-7.845s14.095 2.998 18.944 7.845l290.133 290.133zM694.955-62.464l-102.4 37.376c-10.309 3.77-17.534 13.493-17.534 24.904 0 3.315 0.61 6.487 1.723 9.411l339.395 933.706c3.811 10.23 13.495 17.384 24.85 17.384 3.335 0 6.526-0.617 9.465-1.743l102.219-37.315c10.23-3.811 17.384-13.495 17.384-24.85 0-3.335-0.617-6.526-1.743-9.465l-339.566-933.877c-3.77-10.309-13.493-17.534-24.904-17.534-3.315 0-6.487 0.61-9.411 1.723z" />
|
35 |
+
<glyph unicode=";" glyph-name="fi-quote" d="M121.515 523.776c-0.889 0.044-1.931 0.070-2.978 0.070-7.62 0-14.927-1.339-21.7-3.794 16.254 48.403 48.287 87.687 89.963 112.438l0.934 0.513h0.853c4.36 2.199 7.299 6.642 7.299 11.771 0 4.647-2.412 8.73-6.052 11.067l-0.052 0.031-51.2 31.915c-2.158 1.841-4.98 2.962-8.064 2.962-2.242 0-4.345-0.592-6.163-1.629l0.061 0.032c-73.388-49.549-121.696-131.41-124.407-224.705-0.009-79.423 51.191-124.309 108.193-124.309 53.055 0.286 96.021 43.073 96.597 96.031 0.102 1.586 0.16 3.374 0.16 5.175 0 45.526-36.906 82.432-82.432 82.432-0.116 0-0.232 0-0.348-0.001zM368.981 523.776c-0.889 0.044-1.931 0.070-2.978 0.070-7.62 0-14.927-1.339-21.7-3.794 16.218 48.471 48.258 87.819 89.964 112.608l0.933 0.513c4.36 2.199 7.299 6.642 7.299 11.771 0 4.647-2.412 8.73-6.052 11.067l-0.052 0.031-51.2 31.915c-2.158 1.841-4.98 2.962-8.064 2.962-2.242 0-4.345-0.592-6.163-1.629l0.061 0.032c-73.989-49.575-122.695-131.902-125.261-225.752-0.008-79.4 51.192-124.286 108.194-124.286 52.835 0.572 95.513 43.25 96.085 96.031 0.102 1.586 0.16 3.374 0.16 5.175 0 45.526-36.906 82.432-82.432 82.432-0.116 0-0.232 0-0.348-0.001zM668.501 555.861c-52.835-0.572-95.513-43.25-96.085-96.031-0.102-1.586-0.16-3.374-0.16-5.175 0-45.526 36.906-82.432 82.432-82.432 0.116 0 0.232 0 0.348 0.001 0.864-0.044 1.896-0.068 2.935-0.068 7.629 0 14.945 1.338 21.726 3.793-16.234-48.464-48.27-87.807-89.966-112.609l-0.932-0.513h-0.853c-4.36-2.199-7.299-6.642-7.299-11.771 0-4.647 2.412-8.73 6.052-11.067l0.052-0.031 51.2-31.915c2.183-1.753 4.97-2.835 8.007-2.901 2.206 0.033 4.258 0.598 6.057 1.57l-0.070-0.034c75.435 53.419 125.269 134.997 125.269 226.133 0 79.019-51.2 123.904-108.203 123.904zM915.797 555.861c-53.055-0.286-96.021-43.073-96.597-96.031-0.102-1.586-0.16-3.374-0.16-5.175 0-45.526 36.906-82.432 82.432-82.432 0.116 0 0.232 0 0.348 0.001 0.909-0.048 1.994-0.076 3.085-0.076 7.636 0 14.959 1.341 21.746 3.8-16.144-48.328-47.991-87.592-89.465-112.44l-0.921-0.511h-0.853c-4.36-2.199-7.299-6.642-7.299-11.771 0-4.647 2.412-8.73 6.052-11.067l0.052-0.031 51.2-31.915c2.183-1.753 4.97-2.835 8.007-2.901 2.206 0.033 4.258 0.598 6.057 1.57l-0.070-0.034c74.752 52.395 124.587 133.803 124.587 225.109 0 79.019-51.2 123.904-108.203 123.904z" />
|
36 |
+
<glyph unicode="<" glyph-name="fi-style-type" d="M600.235-4.608c0-0.042 0-0.092 0-0.143 0-15.931-7.276-30.162-18.685-39.552-11.343-10.55-26.453-17.019-43.073-17.137-0.026 0-0.030 0-0.033 0-11.14 0-21.521 3.244-30.253 8.839-9.496 6.164-17 15.152-21.316 25.776l-44.678 99.359h-283.307l-44.373-98.645c-4.412-10.932-11.786-19.9-21.129-26.154-8.647-5.591-18.965-8.837-30.041-8.837-0.251 0-0.501 0.002-0.75 0.005-16.766 0.139-32.034 6.598-43.532 17.111-11.636 9.226-19.065 23.426-19.065 39.361 0 0.006 0 0.013 0 0.019 0.497 9.522 2.9 18.373 6.832 26.334l225.616 474.401c5.839 13.038 15.402 23.536 27.33 30.381 11.701 6.853 25.389 10.801 39.998 10.801s28.297-3.948 40.055-10.835c11.808-6.995 21.526-17.206 27.932-29.427l225.816-475.714c3.869-7.822 6.285-16.984 6.652-26.671zM203.093 171.691h194.731l-96.939 217.429zM980.48 319.317q43.52-43.861 43.52-134.144v-188.928c0.067-1.036 0.105-2.247 0.105-3.466 0-15.424-6.089-29.425-15.995-39.732-10.73-9.683-25.041-15.619-40.738-15.619-1.273 0-2.536 0.039-3.789 0.116-0.367-0.026-1-0.037-1.635-0.037-16.095 0-30.664 6.534-41.2 17.094-10.549 10.354-17.086 24.76-17.086 40.694 0 0.514 0.007 1.026 0.020 1.537l-0.002 5.727c-7.996-20.951-22.288-37.999-40.536-49.25-18.994-11.008-41.281-17.361-65.052-17.361-1.28 0-2.555 0.018-3.826 0.055-0.297-0.009-0.87-0.012-1.443-0.012-26.924 0-52.375 6.304-74.959 17.516-20.968 10.24-38.97 26.053-51.962 45.498-12.607 18.963-19.936 41.675-19.936 66.099 0 0.451 0.003 0.902 0.007 1.353-0.104 1.659-0.163 3.679-0.163 5.713 0 24.818 8.756 47.591 23.347 65.398 19.243 18.899 44.285 32.287 72.24 37.242 38.061 7.624 80.858 11.917 124.658 11.917 5.548 0 11.080-0.069 16.595-0.206l20.858 0.016v15.019c0.19 1.951 0.299 4.218 0.299 6.51 0 16.996-5.972 32.597-15.932 44.819-11.911 9.935-27.533 16.048-44.582 16.048-2.294 0-4.563-0.111-6.8-0.327-37.555-3.095-72.498-12.15-104.744-26.231-7.318-4.335-18.437-7.661-30.26-8.382-0.641-0.028-1.133-0.038-1.627-0.038-11.135 0-21.095 5.030-27.732 12.942-6.891 8.683-11.027 19.729-11.027 31.74 0 0.861 0.021 1.718 0.063 2.569-0.029 0.454-0.044 1.126-0.044 1.802 0 9.556 2.815 18.454 7.661 25.911 6.169 8.019 14.031 14.681 23.056 19.429 21.018 11.107 44.941 19.783 70.137 24.97 26.728 6.037 55.41 9.331 84.859 9.347q90.294 0 133.814-43.861zM880.981 47.616c14.043 15.93 22.615 36.976 22.615 60.024 0 1.398-0.032 2.789-0.094 4.172l0.007 13.969h-14.165c-4.533 0.256-9.837 0.403-15.176 0.403-28.403 0-55.84-4.137-81.741-11.842-13.531-4.937-24.486-19.494-24.486-36.61 0-0.748 0.021-1.491 0.062-2.228-0.023-0.401-0.033-0.993-0.033-1.586 0-13.9 5.691-26.471 14.87-35.51 9.691-9.115 22.769-14.712 37.154-14.712 0.62 0 1.238 0.010 1.853 0.031 0.789-0.038 1.821-0.059 2.857-0.059 22.309 0 42.392 9.534 56.396 24.749zM571.904 537.941l19.797 53.589c19.302 51.135 58.945 90.778 108.798 109.654l55.042 19.882-53.589 19.797c-51.135 19.302-90.778 58.945-109.654 108.798l-20.394 55.554-19.797-53.76c-19.302-51.135-58.945-90.778-108.798-109.654l-55.042-20.735 53.589-19.797c51.122-19.322 90.758-58.958 109.653-108.798zM889.685 445.781l13.483 36.352c13.184 34.97 40.294 62.080 74.388 74.973l37.569 13.773-36.693 13.653c-34.97 13.184-62.080 40.294-74.973 74.388l-13.773 37.569-13.483-36.693c-13.221-35-40.396-62.12-74.557-74.974l-37.571-13.772 36.693-13.483c35-13.221 62.12-40.396 74.974-74.557z" />
|
37 |
+
<glyph unicode="=" glyph-name="fi-plus" horiz-adv-x="980" d="M935.083 531.627h-361.472v361.472c0 0 0 0.001 0 0.001 0 24.669-19.902 44.691-44.526 44.884h-78.013c-24.695 0-44.715-20.019-44.715-44.715v-361.643h-361.643c-24.656-0.097-44.618-20.058-44.715-44.705v-77.833c0.097-24.656 20.058-44.618 44.705-44.715h361.652v-361.472c0-24.695 20.019-44.715 44.715-44.715h77.995c24.656 0.097 44.618 20.058 44.715 44.705v361.481h361.301c24.656 0.097 44.618 20.058 44.715 44.705v77.833c-0.097 24.656-20.058 44.618-44.705 44.715z" />
|
38 |
+
<glyph unicode=">" glyph-name="fi-fast-forward" d="M1024 448c-0.004 9.861-5.897 18.345-14.353 22.125l-0.154 0.061-526.336 304.811c-4.361 4.245-10.324 6.863-16.898 6.863-13.277 0-24.061-10.677-24.233-23.913v-214.203l-400.896 231.253c-4.361 4.245-10.324 6.863-16.898 6.863-13.277 0-24.061-10.677-24.233-23.913v-619.707c0-0.009 0-0.020 0-0.032 0-13.384 10.85-24.235 24.235-24.235 6.743 0 12.842 2.753 17.235 7.197l400.386 231.256v-214.187c0-0.009 0-0.020 0-0.032 0-13.384 10.85-24.235 24.235-24.235 6.743 0 12.842 2.753 17.235 7.197l529.069 305.325c7.014 4.329 11.619 11.973 11.619 20.692 0 0.286-0.005 0.57-0.015 0.853z" />
|
39 |
+
<glyph unicode="?" glyph-name="fi-question" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM552.789 170.667c-11.513-10.623-26.956-17.137-43.921-17.137-1.059 0-2.113 0.025-3.16 0.076-0.751-0.050-1.805-0.076-2.864-0.076-16.965 0-32.408 6.514-43.966 17.177-11.108 11.186-18 26.656-18 43.736s6.893 32.549 18.048 43.779c12.419 10.757 28.738 17.313 46.589 17.313s34.17-6.556 46.681-17.392c11.062-11.151 17.955-26.621 17.955-43.7s-6.893-32.549-18.048-43.779zM676.352 527.531c-14.593-25.881-32.311-48.004-53.036-66.882l-32.638-31.081c-18.585-17.435-31.085-41.162-34.087-67.765l-1.582-24.907h-102.4c-0.104 2.643-0.163 5.746-0.163 8.863 0 28.82 5.063 56.457 14.347 82.072 11.385 24.359 28.247 46.249 49.016 63.625 18.67 15.401 34.551 32.639 47.867 51.794 8.039 12.997 12.482 27.729 12.496 43.498q0 68.271-62.464 68.271c-0.543 0.017-1.181 0.026-1.822 0.026-17.84 0-33.952-7.398-45.435-19.293-11.575-12.699-18.652-29.637-18.652-48.228 0-0.751 0.012-1.5 0.035-2.246l-116.056 0.109c-0.089 1.957-0.14 4.251-0.14 6.558 0 44.597 19.006 84.754 49.36 112.815 32.988 27.163 75.53 43.576 121.907 43.576 3.801 0 7.575-0.11 11.321-0.328q84.816 0.024 131.067-40.936c28.949-26.748 47.016-64.908 47.016-107.288 0-3.024-0.092-6.026-0.273-9.004 0.020 0.268 0.021 0.101 0.021-0.066 0-23.235-5.614-45.158-15.561-64.488z" />
|
40 |
+
<glyph unicode="@" glyph-name="fi-at-sign" d="M1024 448c0 0.094 0 0.205 0 0.316 0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512 91.978 0 178.291 24.254 252.894 66.714 5.881 1.727 11.779 9.644 11.779 18.94 0 8.449-4.872 15.759-11.96 19.276l-0.125 0.056-89.088 54.613c-3.681 3.179-8.513 5.115-13.797 5.115-3.297 0-6.417-0.754-9.199-2.099l0.126 0.055c-41.375-17.071-89.413-26.983-139.766-26.983-207.365 0-375.467 168.102-375.467 375.467s168.102 375.467 375.467 375.467c194.738 0 354.849-148.253 373.626-338.052 0.125-138.090-59.609-214.378-106.371-214.378-25.259 0-44.373 17.067-44.373 54.101 0.586 10.629 1.864 20.525 3.809 30.179l56.607 270.536c0.039 0.435 0.062 0.94 0.062 1.451s-0.022 1.016-0.066 1.515c0.005 9.927-8.095 18.026-18.086 18.026h-98.645c-8.664-0.322-15.735-6.748-17.053-15.088l-0.013-0.102-10.069-48.469c-25.259 45.568-76.8 80.384-150.187 80.384-139.264 0-271.36-133.291-271.36-294.229 0-116.395 69.632-201.728 186.197-201.728 71.825 3.066 134.397 40.097 172.402 95.342l1.678-6.424c8.363-45.568 134.315-103.424 206.507-103.424 103.765 0 226.475 70.485 226.475 272.213v0c0 7.68 0 15.36 0 23.040zM602.283 354.475c-26.453-37.205-69.632-79.189-133.291-79.189s-98.475 43.179-98.475 105.643c0 87.723 68.267 174.080 164.523 174.080 0.515 0.009 1.121 0.014 1.73 0.014 42.16 0 78.523-24.816 95.279-60.638z" />
|
41 |
+
<glyph unicode="A" glyph-name="fi-paperclip" horiz-adv-x="927" d="M200.533-64c-51.493 1.136-97.52 23.616-129.751 58.91-61.908 61.751-69.588 121.314-65.321 160.396 7.914 52.328 33.104 97.701 69.471 131.097l392.695 392.679c109.568 109.568 182.443 69.461 216.235 35.84 40.789-40.789 68.267-111.275-36.693-215.381l-361.301-361.472-70.315 70.997 361.131 360.448c55.637 55.637 42.837 68.267 36.693 74.752s-19.797 19.797-75.435-35.84l-392.533-392.533c-20.474-18.44-35.098-43.015-40.978-70.817-3.054-26.463 8.893-52.063 36.37-79.711 34.133-34.133 59.904-30.549 68.267-29.355 30.677 7.419 56.812 23.685 76.316 45.914l465.551 465.745c32.166 29.338 56.871 66.308 71.298 108.071 14.547 53.038-2.178 100.313-50.648 148.782-51.2 51.2-133.291 104.448-257.536-19.968l-428.715-429.739c-9.043-9.107-21.57-14.744-35.413-14.744-27.56 0-49.901 22.342-49.901 49.901 0 13.716 5.534 26.14 14.491 35.16l429.224 429.736c133.291 132.779 278.528 140.117 398.677 19.797 93.184-93.184 93.184-183.979 76.629-243.712-19.472-60.91-53.065-112.682-97.048-153.387l-465.811-465.621c-34.177-37.539-79.86-64.066-131.449-74-8.080-1.219-15.674-1.778-23.399-1.778-0.281 0-0.562 0.001-0.843 0.002z" />
|
42 |
+
<glyph unicode="B" glyph-name="fi-bold" horiz-adv-x="854" d="M657.067 464.043c96.768 19.968 176.64 107.52 176.64 234.837 0 136.704-99.84 261.12-294.912 261.12h-491.691c-26.015 0-47.104-21.089-47.104-47.104v-929.792c0-26.015 21.089-47.104 47.104-47.104h508.587c196.608 0 297.643 122.88 297.643 277.845 0 127.488-85.333 234.155-196.267 250.197zM217.941 768h273.067c73.728 0 119.467-44.544 119.467-107.52 0-66.048-46.080-107.52-119.467-107.52h-273.067zM500.395 127.829h-282.453v233.472h282.624c84.48 0 130.56-52.224 130.56-116.736 0-73.728-49.152-116.736-130.56-116.736z" />
|
43 |
+
<glyph unicode="C" glyph-name="fi-crop" horiz-adv-x="1028" d="M993.343 183.651h-90.771v591.382c0 0.856 0 1.713 0 2.569 0 33.106-26.837 59.943-59.943 59.943h-592.581v88.202c0 18.918-15.336 34.253-34.253 34.253h-57.032c-18.918 0-34.253-15.336-34.253-34.253v0-88.373h-90.257c-18.918 0-34.253-15.336-34.253-34.253v-57.374c0-18.918 15.336-34.253 34.253-34.253h90.771v-590.697c0-0.856 0-1.713 0-2.569 0-33.106 26.837-59.943 59.943-59.943h592.581v-88.716c0-18.918 15.336-34.253 34.253-34.253h57.374c18.918 0 34.253 15.336 34.253 34.253v89.058h89.915c18.918 0 34.253 15.336 34.253 34.253v56.86c0 18.918-15.336 34.253-34.253 34.253zM249.535 183.993v528.527h528.013v-528.87h-527.5z" />
|
44 |
+
<glyph unicode="D" glyph-name="fi-photo-picture" d="M1024 747.52c0 29.22-23.687 52.907-52.907 52.907-1.175 0.096-2.544 0.151-3.925 0.151s-2.75-0.055-4.104-0.162l0.179 0.353h-910.336c0 0-0.001 0-0.001 0-29.22 0-52.907-23.687-52.907-52.907 0-0.12 0-0.24 0.001-0.36v0.018-764.245c2.858-26.681 25.25-47.277 52.453-47.277 0.16 0 0.319 0.001 0.478 0.002h909.8v1.195c2.769-0.531 5.955-0.835 9.211-0.835 26.829 0 48.838 20.635 51.022 46.9l1.036 0.186v764.075zM906.069 53.931h-128.683c-0.44 2.001-1.087 3.768-1.935 5.414l0.058-0.123-268.971 466.261c-5.996 12.317-18.418 20.656-32.789 20.656-14.766 0-27.477-8.804-33.167-21.45l-179.292-310.502-43.861 75.947c-3.219 6.282-9.649 10.507-17.067 10.507s-13.848-4.225-17.017-10.399l-65.415-112.577v504.832h788.139zM726.699 623.275c65.98 0 119.467-53.487 119.467-119.467s-53.487-119.467-119.467-119.467c-65.98 0-119.467 53.487-119.467 119.467s53.487 119.467 119.467 119.467z" />
|
45 |
+
<glyph unicode="E" glyph-name="fi-refresh" horiz-adv-x="1001" d="M999.595 858.624c-0.539 11.636-10.103 20.865-21.823 20.865-4.598 0-8.864-1.42-12.383-3.846l-92.087-66.512c-92.294 91.448-219.348 147.953-359.598 147.953-282.204 0-510.976-228.772-510.976-510.976s228.772-510.976 510.976-510.976c175.688 0 330.668 88.667 422.63 223.693 3.844 5.786 5.457 10.731 5.457 16.052 0 8.765-4.375 16.507-11.061 21.163l-128.596 90.168c-4.304 2.932-9.618 4.682-15.341 4.682-9.403 0-17.703-4.724-22.657-11.927-55.279-81.86-147.613-134.911-252.338-134.911-167.588 0-303.445 135.857-303.445 303.445s135.857 303.445 303.445 303.445c71.259 0 136.78-24.562 188.56-65.682l-15.131-9.932-85.333-61.611c-5.509-4.016-9.048-10.447-9.048-17.705 0-9.562 6.143-17.688 14.698-20.649l367.257-125.145c2.119-0.76 4.563-1.2 7.111-1.2 4.765 0 9.171 1.538 12.749 4.144 5.281 3.849 8.77 10.008 8.983 16.991z" />
|
46 |
+
<glyph unicode="F" glyph-name="fi-animation-video" horiz-adv-x="1263" d="M1174.357 908.8h-1085.099c-49.296 0-89.259-39.962-89.259-89.259v-743.083c0-49.296 39.962-89.259 89.259-89.259h1085.099c49.002 0.387 88.576 40.2 88.576 89.256 0 0.001 0 0.002 0 0.003v743.082c0 0.001 0 0.002 0 0.003 0 49.056-39.574 88.869-88.539 89.256zM252.757 91.307c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.253 0.193-29.355 13.413-29.355 29.694 0 0.001 0 0.001 0 0.002v73.557c0 0 0 0 0 0 0 16.401 13.295 29.696 29.696 29.696 0.060 0 0.12 0 0.18-0.001h119.457c16.401 0 29.696-13.295 29.696-29.696zM252.757 731.136c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 0.052-0.001 0.114-0.001 0.175 0 16.401 13.295 29.696 29.696 29.696 0.18 0 0.36-0.002 0.539-0.005h119.44c16.179-0.288 29.185-13.471 29.185-29.692 0-0.062 0-0.123-0.001-0.185zM564.907 91.307c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM564.907 731.136c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM877.056 91.307c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM877.056 731.136c0-16.401-13.295-29.696-29.696-29.696h-119.467c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM1189.205 91.307c0-16.401-13.295-29.696-29.696-29.696h-118.443c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 16.401 13.295 29.696 29.696 29.696h119.467c16.401 0 29.696-13.295 29.696-29.696zM1189.205 731.136c0-16.401-13.295-29.696-29.696-29.696h-118.443c-16.401 0-29.696 13.295-29.696 29.696v73.557c0 0.051 0 0.111 0 0.171 0 16.401 13.295 29.696 29.696 29.696 0 0 0 0 0 0h119.467c15.954-0.567 28.673-13.638 28.673-29.678 0-0.066 0-0.132-0.001-0.199z" />
|
47 |
+
<glyph unicode="G" glyph-name="fi-thumbnails" d="M200.875 960h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 19.794-16.046 35.84-35.84 35.84zM594.432 960h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 0 0 0 0 0 0 19.794-16.046 35.84-35.84 35.84-0.060 0-0.12 0-0.18 0zM1024 924.16c0 19.794-16.046 35.84-35.84 35.84h-165.035c-19.794 0-35.84-16.046-35.84-35.84v0-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864zM200.875 566.272h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 19.794-16.046 35.84-35.84 35.84zM594.432 566.272h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 19.794-16.046 35.84-35.84 35.84zM988.16 566.272h-165.035c-19.794 0-35.84-16.046-35.84-35.84v0-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM200.875 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM594.432 172.544h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM988.16 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84z" />
|
48 |
+
<glyph unicode="H" glyph-name="fi-help-support" d="M989.867 631.637c-7.098 18.287-24.554 31.016-44.983 31.016-6.033 0-11.807-1.11-17.128-3.137l-14.006-5.18c-44.074 84.36-111.225 151.511-193.089 194.394l2.796 15.526c1.895 4.965 2.992 10.707 2.992 16.706 0 20.352-12.633 37.754-30.485 44.791-54.809 21.677-117.927 34.179-183.964 34.179s-129.155-12.502-187.114-35.269c-14.81-5.894-27.539-23.351-27.539-43.78 0-6.033 1.11-11.807 3.137-17.128l5.18-14.006c-84.36-44.074-151.511-111.225-194.394-193.089l-15.526 2.796c-4.965 1.895-10.707 2.992-16.706 2.992-20.352 0-37.754-12.633-44.791-30.485-21.677-54.809-34.179-117.927-34.179-183.964s12.502-129.155 35.269-187.114c5.894-14.81 23.351-27.539 43.78-27.539 6.033 0 11.807 1.11 17.128 3.137l14.006 5.18c44.083-84.353 111.231-151.501 193.089-194.393l-2.795-15.527c-1.895-4.965-2.992-10.707-2.992-16.706 0-20.352 12.633-37.754 30.485-44.791 54.785-21.656 117.873-34.146 183.878-34.146s129.093 12.49 187.029 35.235c14.81 5.895 27.539 23.351 27.539 43.781 0 6.033-1.11 11.807-3.137 17.128l-5.18 14.006c84.422 44.057 151.629 111.21 194.564 193.091l15.527-2.797c4.965-1.895 10.707-2.992 16.706-2.992 20.352 0 37.754 12.633 44.791 30.485 21.656 54.785 34.146 117.873 34.146 183.878s-12.49 129.093-35.235 187.029zM305.152 365.397l-226.133-83.627c-19.522 49.344-30.84 106.508-30.84 166.315s11.318 116.97 31.93 169.465l10.174-7.246 214.869-79.531c-10.091-24.452-15.95-52.843-15.95-82.603s5.859-58.15 16.487-84.082zM512 911.872c0.020 0 0.044 0 0.068 0 59.758 0 116.869-11.337 169.297-31.979l-7.232-10.176-79.531-214.869c-24.452 10.091-52.843 15.95-82.603 15.95s-58.15-5.859-84.082-16.487l-82.147 226.67c49.292 19.553 106.403 30.891 166.161 30.891 0.024 0 0.048 0 0.072 0zM512-15.701c-0.020 0-0.044 0-0.068 0-59.758 0-116.869 11.337-169.297 31.979l86.763 225.045c24.452-10.091 52.843-15.95 82.603-15.95s58.15 5.859 84.082 16.487l82.147-226.67c-49.301-19.615-106.427-31.011-166.209-31.061zM674.133 513.195c7.926-19.144 12.529-41.376 12.529-64.683s-4.603-45.539-12.949-65.836c-1.787-4.171-3.069-10.354-3.069-16.837 0-20.603 12.946-38.182 31.147-45.047l5.793-2.158c-17.663-26.282-39.596-48.214-65.032-65.341l-2.893 4.925c-6.974 18.532-24.553 31.478-45.156 31.478-6.483 0-12.666-1.282-18.311-3.606-18.824-7.81-41.056-12.413-64.362-12.413s-45.539 4.603-65.836 12.949c-4.13 1.75-10.262 3.009-16.689 3.009-20.58 0-38.144-12.918-45.024-31.088l-2.158-5.792c-26.211 17.68-48.086 39.609-65.169 65.027l4.923 2.898c18.532 6.974 31.478 24.553 31.478 45.156 0 6.483-1.282 12.666-3.606 18.311-7.81 18.824-12.413 41.056-12.413 64.362s4.603 45.539 12.949 65.836c1.75 4.13 3.009 10.262 3.009 16.689 0 20.58-12.918 38.144-31.088 45.024l-5.792 2.158c17.637 26.198 39.509 48.070 64.864 65.171l2.891-4.926c6.974-18.532 24.553-31.478 45.156-31.478 6.483 0 12.666 1.282 18.311 3.606 18.823 7.818 41.054 12.426 64.362 12.426s45.54-4.608 65.834-12.962c4.173-1.787 10.356-3.069 16.839-3.069 20.603 0 38.182 12.946 45.047 31.147l2.158 5.793c26.269-17.621 48.198-39.496 65.343-64.868l-4.927-2.886c-18.501-6.99-31.419-24.554-31.419-45.134 0-6.426 1.26-12.559 3.545-18.163zM944.981 281.771l-11.264 4.096-214.869 79.531c10.091 24.452 15.95 52.843 15.95 82.603s-5.859 58.15-16.487 84.082l226.67 82.147c19.522-49.344 30.84-106.508 30.84-166.315s-11.318-116.97-31.93-169.465z" />
|
49 |
+
<glyph unicode="I" glyph-name="fi-info" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM564.224 163.157c0-9.426-7.641-17.067-17.067-17.067h-69.291c-9.426 0-17.067 7.641-17.067 17.067v330.752c0 9.426 7.641 17.067 17.067 17.067h68.267c9.426 0 17.067-7.641 17.067-17.067zM512 585.387c-34.109 0.386-61.611 28.126-61.611 62.29 0 0.061 0 0.123 0 0.184 0 34.3 27.813 62.113 62.123 62.113s62.123-27.813 62.123-62.123c0 0 0 0 0 0 0-34.498-27.966-62.464-62.464-62.464-0.060 0-0.12 0-0.18 0z" />
|
50 |
+
<glyph unicode="J" glyph-name="fi-home" horiz-adv-x="933" d="M919.893 612.352l-439.637 340.48c-5.728 4.501-13.043 7.218-20.992 7.218s-15.264-2.717-21.066-7.274l-425.569-340.766c-7.718-6.297-12.612-15.802-12.629-26.45v-615.427c0-18.851 15.282-34.133 34.133-34.133h252.757c18.851 0 34.133 15.282 34.133 34.133v376.832h291.328v-376.832c0-18.851 15.282-34.133 34.133-34.133h252.757c18.851 0 34.133 15.282 34.133 34.133v615.424c-0.040 10.857-5.142 20.514-13.068 26.739z" />
|
51 |
+
<glyph unicode="K" glyph-name="fi-heart" horiz-adv-x="1066" d="M1064.619 599.723c0 2.901 0 5.973 0 8.875s0 6.485 0 9.899 0 11.093 0 17.067c0 2.389 0 4.608 0 6.827 0 6.997-0.853 13.995-1.707 20.992 0 1.024 0 2.048 0 2.901-7.166 56.63-32.754 106.261-70.47 143.686-52.324 51.4-124.098 83.119-203.279 83.119s-150.955-31.72-203.307-83.146c-39.723-41.089-44.672-54.742-52.864-54.742s-13.483 13.141-53.419 53.76c-51.377 51.152-122.234 82.774-200.476 82.774-0.26 0-0.52 0-0.78-0.001-1.041 0.015-2.318 0.023-3.596 0.023-78.494 0-149.586-31.693-201.177-82.981-37.803-37.152-63.585-86.453-71.016-141.575-0.139-2.283-0.139-3.307-0.139-4.161 0-6.997-1.365-13.824-1.707-20.992q0-3.413 0-6.827c0-5.461 0-11.093 0-17.067s0-6.485 0-9.728 0-6.144 0-9.045c8.14-70.080 31.594-133.365 66.928-188.283l-1.050 1.744c2.389-3.755 4.096-7.68 6.656-11.435 96.256-149.845 375.637-397.141 459.435-397.141v0c83.968 0 363.179 247.979 459.776 397.824 2.389 3.755 4.267 7.68 6.656 11.435v0c34.217 53.55 57.47 117.289 65.018 185.758z" />
|
52 |
+
<glyph unicode="L" glyph-name="fi-lightbulb" horiz-adv-x="693" d="M692.907 613.547c0 0.114 0 0.249 0 0.384 0 191.341-155.112 346.453-346.453 346.453s-346.453-155.112-346.453-346.453c0-103.281 45.193-196.007 116.883-259.48 16.89-14.701 27.326-35.713 27.501-59.166v-44.063c0-0.051 0-0.111 0-0.171 0-23.187 18.797-41.984 41.984-41.984 0 0 0 0 0 0h320.171c23.187 0 41.984 18.797 41.984 41.984v44.203c0.203 23.426 10.635 44.375 27.040 58.628 72.14 63.639 117.344 156.172 117.344 259.263 0 0.142 0 0.283 0 0.425zM530.432 74.581h-367.957c-9.991 0-18.091 8.099-18.091 18.091v39.424c0 9.991 8.099 18.091 18.091 18.091h367.957c9.991 0 18.091-8.099 18.091-18.091v-39.424c0-9.991-8.099-18.091-18.091-18.091zM465.579-64h-238.933c-9.991 0-18.091 8.099-18.091 18.091v39.253c0 9.991 8.099 18.091 18.091 18.091h238.933c9.991 0 18.091-8.099 18.091-18.091v-39.424c-0.097-9.918-8.159-17.92-18.090-17.92 0 0-0.001 0-0.001 0z" />
|
53 |
+
<glyph unicode="M" glyph-name="fi-arrow-location" horiz-adv-x="1032" d="M430.080-59.904l-429.227 1005.397c-0.524 1.201-0.829 2.601-0.829 4.072 0 5.75 4.661 10.411 10.411 10.411 1.471 0 2.871-0.305 4.139-0.855l1013.693-434.833c2.667-0.908 4.552-3.391 4.552-6.315s-1.885-5.406-4.505-6.301l-367.834-112.654c-47.538-14.921-84.376-51.253-99.702-97.401l-118.069-361.010c-0.908-2.667-3.391-4.552-6.315-4.552s-5.406 1.885-6.301 4.505z" />
|
54 |
+
<glyph unicode="N" glyph-name="fi-arrow-pointer-cursor" horiz-adv-x="641" d="M208.213 248.832l-170.667-128.171c-3.885-2.982-8.815-4.779-14.165-4.779-12.913 0-23.381 10.468-23.381 23.381 0 0 0 0.001 0 0.001v797.355c-0.004 0.167-0.007 0.364-0.007 0.562 0 12.913 10.468 23.381 23.381 23.381 6.471 0 12.327-2.628 16.561-6.876l593.921-599.041c4.145-4.216 6.704-10.003 6.704-16.387 0-12.913-10.468-23.381-23.381-23.381-0.137 0-0.273 0.001-0.409 0.004h-208.193l129.536-276.48c1.385-2.898 2.195-6.3 2.195-9.89 0-9.31-5.442-17.349-13.318-21.111l-147.256-68.327c-2.898-1.385-6.3-2.195-9.89-2.195-9.31 0-17.349 5.442-21.111 13.318z" />
|
55 |
+
<glyph unicode="O" glyph-name="fi-plugin-2" horiz-adv-x="645" d="M568.491 655.701l2.731 274.603c0.001 0.101 0.002 0.221 0.002 0.341 0 16.212-13.143 29.355-29.355 29.355-0.001 0-0.001 0-0.002 0h-87.040c-16.055-0.093-29.068-12.987-29.354-28.986l-2.731-275.312h-200.021l2.731 274.432c0.003 0.152 0.004 0.332 0.004 0.512 0 16.154-13.048 29.26-29.179 29.354h-87.049c-0.001 0-0.003 0-0.004 0-16.126 0-29.233-12.929-29.521-28.986l-2.731-275.312h-76.971v-168.96c0.699-144.669 96.73-266.722 228.462-306.607l5.010-214.268c0.049-8.233 3.581-15.631 9.196-20.803 5.313-5.089 12.508-8.21 20.432-8.21 0.024 0 0.048 0 0.072 0h-0.004c29.355 0 45.568 0.853 61.781 1.536s31.573 1.365 59.904 1.536c0.001 0 0.001 0 0.002 0 16.281 0 29.501 13.101 29.694 29.336v209.597c133.939 40.538 229.895 162.573 230.57 307.121v169.039z" />
|
56 |
+
<glyph unicode="P" glyph-name="fi-plugins" d="M552.789 654.336h-122.539v-200.021h119.467c2.567-0.199 5.558-0.312 8.576-0.312 27.747 0 53.258 9.568 73.416 25.586 17.148 16.574 27.949 40.068 27.949 66.085 0 2.143-0.073 4.27-0.218 6.376 0.091 1.159 0.133 2.849 0.133 4.549 0 26.935-10.721 51.366-28.129 69.259-19.352 17.702-45.265 28.562-73.714 28.562-1.498 0-2.988-0.030-4.471-0.090zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM703.829 420.864q-55.296-46.933-154.965-46.933h-118.613v-212.651h-99.669v573.44h219.307q96.256 0 152.747-50.005c34.806-30.999 56.621-75.939 56.621-125.974 0-2.333-0.047-4.655-0.141-6.965 0.161-2.289 0.247-5.355 0.247-8.44 0-48.739-21.416-92.476-55.351-122.315z" />
|
57 |
+
<glyph unicode="Q" glyph-name="fi-trash" horiz-adv-x="845" d="M788.651 828.416c0.052 0 0.113 0.001 0.175 0.001 16.598 0 30.087-13.311 30.374-29.84v-88.091c-0.19-16.512-13.525-29.847-30.019-30.037h-732.69c-0.125-0.002-0.272-0.003-0.42-0.003-8.153 0-15.512 3.403-20.733 8.867l-0.010 0.011c-5.475 5.258-8.877 12.639-8.877 20.815 0 0.122 0.001 0.244 0.002 0.366v-0.019 88.064c-0.001 0.103-0.002 0.225-0.002 0.348 0 8.176 3.402 15.557 8.867 20.806l0.010 0.009c5.258 5.475 12.639 8.877 20.815 8.877 0.122 0 0.244-0.001 0.366-0.002h247.448v37.376c0.19 16.512 13.525 29.847 30.019 30.037h177.17c16.512-0.19 29.847-13.525 30.037-30.019v-37.565zM748.373 626.005c16.512-0.19 29.847-13.525 30.037-30.019v-629.949c0.003-0.149 0.004-0.325 0.004-0.501 0-8.034-3.191-15.324-8.374-20.67l0.007 0.008c-5.204-5.479-12.543-8.887-20.678-8.887-0.29 0-0.58 0.004-0.868 0.013l0.042-0.001h-651.776c-0.267-0.009-0.582-0.014-0.897-0.014-8.113 0-15.43 3.41-20.594 8.875l-0.013 0.013c-5.276 5.332-8.536 12.668-8.536 20.765 0 0.14 0.001 0.279 0.003 0.419v-0.021 629.931c-0.002 0.118-0.003 0.258-0.003 0.397 0 8.097 3.26 15.434 8.539 20.768l-0.003-0.003c5.177 5.479 12.494 8.889 20.607 8.889 0.315 0 0.63-0.005 0.943-0.015l-0.046 0.001z" />
|
58 |
+
<glyph unicode="R" glyph-name="fi-arrow-return-back" d="M957.099 501.248h-760.32l198.144 197.973c3.329 3.122 5.403 7.548 5.403 12.459s-2.074 9.336-5.393 12.45l-51.209 51.209c-3.122 3.329-7.548 5.403-12.459 5.403s-9.336-2.074-12.45-5.393l-250.547-251.913-63.317-63.317c-3.118-3.093-5.048-7.38-5.048-12.117s1.93-9.024 5.047-12.116l314.54-314.54c3.122-3.329 7.548-5.403 12.459-5.403s9.336 2.074 12.45 5.393l51.209 51.209c3.329 3.122 5.403 7.548 5.403 12.459s-2.074 9.336-5.393 12.45l-198.836 197.299h703.829c9.426 0 17.067-7.641 17.067-17.067v-140.288c0-3.413 6.485-6.315 14.507-6.315h77.141c8.021 0 14.507 2.901 14.507 6.315v196.779c0 36.949-29.953 66.901-66.901 66.901z" />
|
59 |
+
<glyph unicode="S" glyph-name="fi-star" d="M1022.635 572.928c-3.255 9.924-12.398 16.98-23.2 17.067h-346.293l-117.931 333.312c-3.443 9.687-12.531 16.499-23.211 16.499s-19.767-6.811-23.157-16.327l-117.984-334.166h-346.283c-13.554-0.025-24.532-11.018-24.532-24.576 0-7.796 3.63-14.744 9.292-19.247l270.386-214.055-121.003-342.357c-0.92-2.477-1.453-5.339-1.453-8.325 0-13.573 11.003-24.576 24.576-24.576 4.699 0 9.091 1.319 12.824 3.607l317.333 190.403 317.44-190.293c3.626-2.227 8.017-3.546 12.717-3.546 13.573 0 24.576 11.003 24.576 24.576 0 2.986-0.533 5.848-1.508 8.495l-120.948 342.016 270.336 214.016c5.646 4.542 9.228 11.45 9.228 19.194 0 2.907-0.505 5.696-1.431 8.284z" />
|
60 |
+
<glyph unicode="T" glyph-name="fi-themes" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM739.499 654.507h-178.859v-493.227h-98.816v493.056h-177.323v80.384h454.997z" />
|
61 |
+
<glyph unicode="U" glyph-name="fi-underline" horiz-adv-x="990" d="M941.397 33.451h-894.293c-26.816 0-48.555-21.739-48.555-48.555s21.739-48.555 48.555-48.555h894.293c26.91 0 48.725 21.815 48.725 48.725s-21.815 48.725-48.725 48.725zM494.933 89.6c256.853 0 382.805 146.944 382.805 365.568v457.387c-0.097 26.164-21.281 47.349-47.436 47.445h-62.303c-26.164-0.097-47.349-21.281-47.445-47.436s0-1.204 0-1.887v-452.267c-0.341-140.288-78.507-232.277-225.621-232.277s-225.109 91.989-225.109 232.277v452.267s0 1.195 0 1.707c0 0 0 0.001 0 0.001 0 26.298-21.318 47.616-47.616 47.616-0.12 0-0.24 0-0.36-0.001h-62.104c-26.164-0.097-47.349-21.281-47.445-47.436v-458.079c0-218.453 126.635-364.885 382.635-364.885z" />
|
62 |
+
<glyph unicode="V" glyph-name="fi-infinity" horiz-adv-x="1365" d="M1085.611 748.373c-141.995 0-297.472-78.507-402.944-198.997-105.472 120.491-261.12 198.997-402.944 198.997-135.339 0-279.723-78.507-279.723-300.373s144.384-300.373 279.723-300.373c141.995 0 297.472 78.507 402.944 198.997 105.472-120.491 260.949-198.997 402.944-198.997 135.339 0 279.723 78.507 279.723 300.373s-144.384 300.373-279.723 300.373zM279.723 267.776c-103.253 0-155.648 60.757-155.648 180.224s52.395 180.224 155.648 180.224c114.176 0 246.613-74.069 328.021-180.224-81.408-106.155-214.016-180.224-328.021-180.224zM1085.611 267.776c-114.176 0-246.784 74.069-328.192 180.224 81.408 106.155 214.016 180.224 328.192 180.224 103.253 0 155.477-60.757 155.477-180.224s-52.224-180.224-155.477-180.224z" />
|
63 |
+
<glyph unicode="W" glyph-name="fi-web-globe-world" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM925.696 495.275h-125.611c-9.899 146.603-64.853 273.067-143.019 343.040 144.888-55.283 249.655-184.947 268.267-341.061zM460.8 789.333v-293.547h-141.141c11.093 146.773 73.045 256 140.629 293.547zM460.288 400.213v-293.547c-68.267 37.888-129.195 146.261-140.629 292.523zM555.861 103.595v296.107h148.309c-11.776-151.723-77.824-262.827-148.309-296.619zM555.861 495.616v297.131c70.656-34.133 136.533-145.237 148.309-297.472zM366.763 838.315c-78.165-70.656-133.12-196.267-143.019-343.040h-125.44c18.804 158.093 123.57 287.757 265.597 342.078zM98.475 399.701h125.44c10.069-146.261 64.853-271.531 142.848-341.333-144.368 55.070-248.893 183.969-268.084 339.305zM657.237 58.368c77.995 70.485 132.949 195.755 142.848 341.333h125.44c-19.395-157.364-123.919-286.263-265.426-340.372z" />
|
64 |
+
<glyph unicode="X" glyph-name="fi-alert" d="M1020.245-2.048v0l-1.707 2.901c-0.944 1.815-1.85 3.322-2.836 4.771l-465.132 806.066c-7.59 13.891-22.097 23.155-38.768 23.155-18.005 0-33.485-10.806-40.31-26.287l-0.111-0.282-461.653-799.915c-6.060-7.461-9.73-17.076-9.73-27.548 0-0.155 0.001-0.31 0.002-0.465 0-24.483 19.866-44.35 44.373-44.35h935.253c0.040 0 0.088 0 0.136 0 24.412 0 44.203 19.79 44.203 44.203 0 6.422-1.369 12.524-3.832 18.030zM512 19.627c-0.203-0.002-0.443-0.004-0.683-0.004-35.005 0-63.393 28.329-63.488 63.312-0.054 0.995-0.085 2.148-0.085 3.309 0 35.252 28.577 63.829 63.829 63.829s63.829-28.577 63.829-63.829c0-1.161-0.031-2.314-0.092-3.459 0.007-34.809-28.341-63.158-63.311-63.158zM575.317 579.755v-349.355c0-14.233-11.538-25.771-25.771-25.771h-75.093c-0.102-0.001-0.222-0.002-0.342-0.002-14.268 0-25.845 11.519-25.941 25.764v348.51s0 0 0 1.024c0.055 13.529 10.527 24.594 23.807 25.595l77.74 0.005c0.052 0 0.114 0.001 0.176 0.001 14.053 0 25.479-11.248 25.765-25.233v-0.027z" />
|
65 |
+
<glyph unicode="Y" glyph-name="fi-paypal" horiz-adv-x="1009" d="M233.301 113.664l44.885 193.195c7.59 27.926 32.257 48.3 61.84 49.32l37.318 0.003c159.232 0 282.624 32.768 371.371 97.963 80.655 55.619 132.844 147.504 132.844 251.578 0 2.215-0.024 4.425-0.071 6.628 0.144 2.73 0.222 6.316 0.222 9.922 0 39.028-9.219 75.903-25.599 108.566-16.178 30.55-40.557 56.516-70.202 74.749-33.285 20.163-71.204 34.707-111.679 41.837-47.247 8.11-99.386 12.581-152.57 12.581-1.056 0-2.113-0.002-3.168-0.005h-271.537c-29.765-1.458-54.414-21.771-62.345-49.182l-183.415-797.154c-1.003-3.287-1.581-7.066-1.581-10.979 0-21.491 17.421-38.912 38.912-38.912 0.736 0 1.468 0.020 2.194 0.061l129.947-0.004c29.943 0.993 54.806 21.619 62.188 49.37zM339.456 576l39.253 168.96c7.495 28.082 32.294 48.584 62.023 49.491l42.767 0.002c49.835 0 87.552-8.533 113.152-25.429 22.931-15.537 37.803-41.467 37.803-70.871 0-2.327-0.093-4.632-0.276-6.912 0.167-2.112 0.252-4.932 0.252-7.772 0-46.969-23.083-88.547-58.523-114.010-39.672-28.958-94.115-43.294-164.6-43.294h-31.915c-0.662-0.040-1.436-0.063-2.216-0.063-21.491 0-38.912 17.421-38.912 38.912 0 3.853 0.56 7.576 1.603 11.090zM984.576 701.781c-16.747 31.847-41.005 57.746-70.504 75.978l-8.003 4.576 2.731-4.949c15.743-31.277 24.962-68.164 24.962-107.204 0-3.593-0.078-7.167-0.233-10.721 0.059-1.368 0.083-3.577 0.083-5.792 0-104.074-52.189-195.959-131.823-250.912-89.767-65.861-213.33-98.458-372.391-98.629h-36.864c-29.787-1.026-54.528-21.474-62.015-49.027l-45.164-193.49c-7.487-28.216-32.35-48.841-62.185-49.832l-88.173-0.003-5.973-25.941c-1.005-3.29-1.584-7.072-1.584-10.989 0-21.491 17.421-38.912 38.912-38.912 0.797 0 1.589 0.024 2.375 0.071l129.94-0.005c29.943 0.993 54.806 21.619 62.188 49.37l44.99 193.83c7.639 27.895 32.278 48.242 61.834 49.319l37.494 0.003c159.232 0 282.624 32.768 371.371 97.963 80.656 55.582 132.849 147.442 132.849 251.492 0 2.305-0.026 4.604-0.077 6.897 0.145 2.729 0.224 6.328 0.224 9.946 0 39.016-9.22 75.879-25.6 108.528z" />
|
66 |
+
<glyph unicode="Z" glyph-name="fi-wand-magic" horiz-adv-x="868" d="M658.432 470.187l106.325 106.325c4.546 4.541 7.358 10.817 7.358 17.749s-2.812 13.208-7.357 17.749l-88.576 88.747c-4.541 4.546-10.817 7.358-17.749 7.358s-13.208-2.812-17.749-7.357l-106.496-106.326zM480.939 541.184l-469.845-470.016c-6.839-6.802-11.072-16.219-11.072-26.624s4.233-19.822 11.070-26.622l70.828-70.828c6.821-6.798 16.232-11.001 26.624-11.001s19.803 4.203 26.625 11.002l470.015 469.844zM250.709 815.616l14.848-40.277c14.495-38.364 44.239-68.107 81.64-82.283l41.24-15.168-40.277-14.848c-38.364-14.495-68.107-44.239-82.283-81.64l-15.168-41.24-14.848 40.277c-14.423 38.302-44.036 68.028-81.302 82.28l-41.237 15.17 40.277 14.848c38.364 14.495 68.107 44.239 82.283 81.64zM551.765 960l10.24-27.477c9.877-26.259 30.232-46.613 55.834-56.273l28.134-10.457-27.477-10.24c-26.246-9.897-46.593-30.245-56.272-55.833l-10.458-27.452-10.24 27.477c-9.897 26.246-30.245 46.593-55.833 56.272l-28.135 10.458 27.477 10.24c26.259 9.877 46.613 30.232 56.273 55.834zM796.331 311.467l7.851-20.992c7.584-20.049 23.129-35.594 42.675-43.011l21.666-8.018-21.163-7.851c-20.049-7.584-35.594-23.129-43.011-42.675l-8.018-21.495-7.851 20.992c-7.584 20.049-23.129 35.594-42.675 43.011l-21.666 8.018 21.163 7.851c20.049 7.584 35.594 23.129 43.011 42.675z" />
|
67 |
+
<glyph unicode="[" glyph-name="fi-tablet-landscape" d="M1024 644.096c0 20.171-16.352 36.523-36.523 36.523h-950.955c-20.171 0-36.523-16.352-36.523-36.523s0-1.024 0-1.536v0-672.427c1.203-19.099 16.988-34.133 36.284-34.133 0.024 0 0.048 0 0.071 0h951.122c0.071 0 0.155-0.001 0.238-0.001 19.296 0 35.081 15.035 36.279 34.029l0.005 0.105v672.427s0 1.024 0 1.536zM904.533 55.467h-785.067v505.344h785.067v-505.344zM964.437 277.333c-16.495 0-29.867 13.372-29.867 29.867s13.372 29.867 29.867 29.867c16.495 0 29.867-13.372 29.867-29.867 0-0.001 0-0.001 0-0.002 0-16.495-13.372-29.867-29.867-29.867-0.12 0-0.24 0.001-0.36 0.002z" />
|
68 |
+
<glyph unicode="\" glyph-name="fi-monitor" d="M961.195 760.491h-898.389c-34.686 0-62.805-28.119-62.805-62.805v-548.011c0-34.686 28.119-62.805 62.805-62.805h338.261v-95.232h-104.789c-9.897 0-17.92-8.023-17.92-17.92v-19.456c-0.002-0.102-0.003-0.221-0.003-0.341 0-9.897 8.023-17.92 17.92-17.92 0.001 0 0.002 0 0.003 0h422.229c9.897 0 17.92 8.023 17.92 17.92v19.627c0 9.897-8.023 17.92-17.92 17.92h-95.573v95.232h338.261c0 0 0 0 0 0 34.686 0 62.805 28.119 62.805 62.805 0 0.060 0 0.12 0 0.18v548.001c0 34.686-28.119 62.805-62.805 62.805zM111.957 649.557h800.085v-451.755h-800.085z" />
|
69 |
+
<glyph unicode="]" glyph-name="fi-tablet-portrait" horiz-adv-x="745" d="M708.096 960h-673.963c-19.099-1.203-34.134-16.988-34.134-36.284 0-0.084 0-0.168 0.001-0.251v-950.942c0-0.071-0.001-0.155-0.001-0.238 0-19.296 15.035-35.081 34.029-36.279l674.068-0.005c20.171 0 36.523 16.352 36.523 36.523v950.955c0 20.171-16.352 36.523-36.523 36.523zM370.859-33.963c-16.495 0-29.867 13.372-29.867 29.867s13.372 29.867 29.867 29.867c16.495 0 29.867-13.372 29.867-29.867s-13.372-29.867-29.867-29.867zM624.811 55.467h-505.344v785.067h505.173v-785.067z" />
|
70 |
+
<glyph unicode="^" glyph-name="fi-align-center" horiz-adv-x="1018" d="M50.005-64h917.333c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-917.333c0 0 0 0 0 0-27.557 0-49.908-22.291-50.005-49.825v-46.089c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0zM123.563 324.779v0-46.080c0-27.617 22.388-50.005 50.005-50.005h670.208c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-670.208c-27.617 0-50.005-22.388-50.005-50.005zM100.352 813.739h816.981c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005h-816.981c-0.051 0-0.111 0-0.171 0-27.617 0-50.005-22.388-50.005-50.005 0 0 0 0 0 0v0-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0.060 0 0.12 0 0.18 0zM173.568 571.221c0-27.617 22.388-50.005 50.005-50.005h570.197c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005h-570.027c-27.617 0-50.005-22.388-50.005-50.005v0-46.080z" />
|
71 |
+
<glyph unicode="_" glyph-name="fi-check-tick" d="M873.984 809.984c-92.651 92.636-220.639 149.931-362.008 149.931-282.77 0-512-229.23-512-512s229.23-512 512-512c141.37 0 269.358 57.295 362.009 149.932 92.671 92.656 149.991 220.668 149.991 362.068s-57.32 269.412-149.991 362.068zM724.651 535.040l-251.392-251.392c-10.683-10.67-25.435-17.268-41.728-17.268s-31.045 6.599-41.729 17.269l-126.805 126.805c-6.868 6.884-11.116 16.386-11.116 26.88s4.247 19.996 11.116 26.881l29.695 29.695c6.893 6.919 16.429 11.201 26.965 11.201s20.073-4.282 26.964-11.2l85.335-85.335 209.067 210.091c6.884 6.868 16.386 11.116 26.88 11.116s19.996-4.247 26.881-11.116l29.695-29.695c6.868-6.884 11.116-16.386 11.116-26.88s-4.247-19.996-11.116-26.881z" />
|
72 |
+
<glyph unicode="`" glyph-name="fi-list" d="M0 759.296v0c0 0 0-0.001 0-0.002 0-19.674 15.852-35.645 35.48-35.838h952.85c19.72 0.097 35.669 16.106 35.669 35.84 0 0 0 0 0 0v0 165.035c-0.096 19.661-16.009 35.573-35.66 35.669h-952.5c-19.794 0-35.84-16.046-35.84-35.84s0-1.195 0-1.877zM988.16 566.272h-952.32c-19.794 0-35.84-16.046-35.84-35.84s0-1.195 0-1.877v-163.157c0 0 0-0.001 0-0.002 0-19.674 15.852-35.645 35.48-35.838h952.85c19.721 0.097 35.67 16.106 35.67 35.84 0 0.060 0 0.12 0 0.18v-0.009 165.035c-0.097 19.72-16.106 35.669-35.84 35.669 0 0 0 0 0 0zM988.16 172.544h-952.32c-19.794 0-35.84-16.046-35.84-35.84s0-1.195 0-1.877v-162.987c0-19.794 16.046-35.84 35.84-35.84h952.491c19.72 0.097 35.669 16.106 35.669 35.84 0 0 0 0 0 0v0 165.035c-0.097 19.72-16.106 35.669-35.84 35.669 0 0 0 0 0 0z" />
|
73 |
+
<glyph unicode="a" glyph-name="fi-social-apple" horiz-adv-x="880" d="M850.261 616.448c-52.736 65.707-126.805 104.619-196.779 104.619-92.501 0-131.584-43.861-195.755-43.861s-116.395 43.008-196.437 43.008-162.133-47.787-215.040-129.365c-74.581-114.688-61.952-330.581 59.051-514.389 43.179-65.707 100.864-140.459 176.299-140.459 67.072 0 85.333 42.837 177.152 43.349s108.203-43.349 175.275-43.349c75.435 0 136.533 82.603 179.541 148.309 24.143 35.8 46.435 76.814 64.74 119.931-172.942 70.874-201.102 317.658-28.046 412.549zM583.339 793.771c31.801 38.422 51.094 88.207 51.094 142.498 0 8.36-0.457 16.612-1.349 24.734-63.001-8.682-117.708-39.6-156.125-84.796-34.42-41.647-62.409-102.746-51.487-162.479 64.235 1.484 120.975 32.321 157.516 79.57z" />
|
74 |
+
<glyph unicode="b" glyph-name="fi-archive" d="M1002.667 675.499h-981.333v-698.197c0-22.81 18.491-41.301 41.301-41.301h898.731c22.81 0 41.301 18.491 41.301 41.301zM712.533 397.995h-400.555v104.107h400.043zM50.005 918.016c-27.526-0.66-49.634-22.947-50.005-50.482v-119.502h1024v119.467c0 0.004 0 0.009 0 0.014 0 27.857-22.247 50.518-49.943 51.185z" />
|
75 |
+
<glyph unicode="c" glyph-name="fi-credit-card" d="M0-14.336c0-27.429 22.235-49.664 49.664-49.664h924.672c27.429 0 49.664 22.235 49.664 49.664v392.533h-1024zM974.336 669.867h-924.672c0 0-0.001 0-0.001 0-27.429 0-49.664-22.235-49.664-49.664 0-0.12 0-0.24 0.001-0.36v-102.382h1024v102.4c0.001 0.101 0.001 0.221 0.001 0.341 0 27.429-22.235 49.664-49.664 49.664 0 0-0.001 0-0.001 0z" />
|
76 |
+
<glyph unicode="d" glyph-name="fi-social-dropbox" d="M301.227 888.491l-301.227-196.779 208.213-166.741 303.787 187.563-210.773 175.957zM0 358.229v0l301.227-196.779 210.773 175.957-303.787 187.563-208.213-166.741zM512 337.408l210.773-175.957 301.227 196.779-208.213 166.741-303.787-187.563zM722.773 888.491l-210.773-175.957 303.787-187.563 208.213 166.741-301.227 196.779zM301.227 124.245l-90.453 59.051v-66.219l301.909-181.077 301.739 181.077v66.219l-90.453-59.051-211.285 175.275-211.456-175.275z" />
|
77 |
+
<glyph unicode="e" glyph-name="fi-eye" d="M512 223.915c123.759 0 224.085 100.326 224.085 224.085s-100.326 224.085-224.085 224.085c-123.759 0-224.085-100.326-224.085-224.085s100.326-224.085 224.085-224.085zM0 448s136.533 352.085 512 352.085 512-352.085 512-352.085-136.533-352.085-512-352.085-512 352.085-512 352.085zM512 352.085c52.972 0 95.915 42.942 95.915 95.915s-42.942 95.915-95.915 95.915c-52.972 0-95.915-42.942-95.915-95.915s42.942-95.915 95.915-95.915z" />
|
78 |
+
<glyph unicode="f" glyph-name="fi-social-facebook" horiz-adv-x="495" d="M109.739-64v512h-109.739v176.469h109.739v105.984c0 144.213 62.123 229.547 238.080 229.547h147.115v-176.469h-91.989c-68.267 0-73.216-24.747-73.216-70.656v-88.235h165.205l-18.773-176.64h-146.603v-512z" />
|
79 |
+
<glyph unicode="g" glyph-name="fi-social-google-plus" horiz-adv-x="1505" d="M1.195 471.893c-15.701-201.216 116.736-399.36 303.445-469.675s424.789-22.869 543.744 144.384c78.507 105.643 95.403 241.664 86.187 369.323-152.405 0.341-304.469 0.341-456.704 0.341 0-54.272 0-108.544 0-162.987 90.965-2.901 182.272-1.536 273.067-2.901-40.107-201.899-314.88-267.435-460.8-135.509-148.309 115.883-141.312 369.664 14.165 477.013 108.544 86.699 262.997 65.195 371.712-9.728 42.469 39.734 82.033 80.649 119.479 123.463-88.759 73.999-199.693 125.369-317.623 120.249-246.101 7.851-472.405-207.872-476.672-453.973zM1231.531 652.8c0-45.397-0.853-90.795-1.195-136.533l-136.533-0.853v-136.533l136.533-1.365c0-45.397 0-90.795 0.853-136.533h136.533c0 45.397 0 90.795 0.853 136.533l136.533 1.195v137.557l-136.533 0.853c0 45.397 0 90.965-0.853 136.533z" />
|
80 |
+
<glyph unicode="h" glyph-name="fi-social-github" d="M512 934.741c-0.11 0-0.241 0-0.371 0-282.77 0-512-229.23-512-512 0-225.030 145.173-416.153 346.974-484.823 29.205-5.844 37.739 10.028 37.739 23.51s0 44.373 0 87.040c-142.507-30.891-172.544 68.267-172.544 68.267-23.211 59.733-56.661 75.264-56.661 75.264-46.421 31.744 3.584 31.061 3.584 31.061 33.642-4.794 61.856-24.567 78.061-52.229 46.013-78.673 119.741-56.145 149.267-43.003 2.518 26.917 14.443 50.654 32.408 68.248-113.645 12.989-233.112 57.192-233.112 253.458-0.013 0.842-0.020 1.835-0.020 2.83 0 52.018 20.062 99.35 52.871 134.681-6.822 18.19-10.702 39.335-10.702 61.387 0 26.775 5.72 52.215 16.004 75.163s42.541 12.658 140.333-53.731c38.377 10.941 82.454 17.232 128 17.232s89.623-6.291 131.409-18.052c94.383 67.038 137.221 53.385 137.221 53.385 9.885-21.837 15.644-47.349 15.644-74.205 0-21.975-3.856-43.050-10.929-62.584 32.998-33.856 52.995-81.074 52.995-132.964 0-1.105-0.009-2.208-0.027-3.309 0.002-196.442-119.465-239.791-233.811-252.421 18.432-15.872 34.133-47.104 34.133-94.891 0-68.267 0-123.563 0-140.459 0-13.653 9.216-29.696 35.157-24.576 205.138 69.887 350.066 260.877 350.066 485.717 0 282.66-229.052 511.822-511.67 512z" />
|
81 |
+
<glyph unicode="i" glyph-name="fi-social-linkedin" d="M229.205-64h-212.139v684.032h212.139zM123.051 713.557c-0.051 0-0.111 0-0.171 0-68.053 0-123.221 55.168-123.221 123.221s55.168 123.221 123.221 123.221c68.053 0 123.221-55.168 123.221-123.221 0-0.051 0-0.111 0-0.171 0-67.959-55.092-123.051-123.051-123.051zM1024-64h-211.968v332.629c0 79.36-1.536 181.419-110.251 181.419s-127.317-86.357-127.317-175.616v-338.432h-212.139v684.032h203.605v-93.525h2.901c28.501 53.76 96.768 110.592 200.704 110.592 214.869 0 254.464-141.653 254.464-325.632v-375.467z" />
|
82 |
+
<glyph unicode="j" glyph-name="fi-like" d="M0 43.349c-0.058 0.817-0.091 1.77-0.091 2.731s0.033 1.914 0.098 2.858l-0.007 424.15c0 22.056 17.88 39.936 39.936 39.936h78.336c21.424-0.661 38.562-18.097 38.741-39.577v-433.51c-2.112-19.854-18.565-35.244-38.699-35.669l-0.042-0.001h-78.336c-0.003 0-0.006 0-0.009 0-21.756 0-39.449 17.397-39.926 39.038zM236.373-23.211v575.147c0 22.056 17.88 39.936 39.936 39.936h158.72c2.507 3.71 5.381 6.909 8.636 9.672l155.716 269.709c15.697 27.709 44.937 46.131 78.49 46.251 49.908-0.578 90.13-41.157 90.13-91.13 0-0.182-0.001-0.364-0.002-0.546l0.853 0.028v-233.984h216.235c21.611-0.572 38.912-18.227 38.912-39.923 0-0.005 0-0.009 0-0.014v0.001-443.733c-0.022-5.463-2.235-10.404-5.804-13.996l-153.599-153.599c-3.34-2.78-7.675-4.467-12.404-4.467-0.983 0-1.948 0.073-2.892 0.213l-572.992-0.013c-0.013 0-0.029 0-0.044 0-21.301 0-38.691 16.749-39.717 37.796l-0.004 0.092v1.195s0 0 0 0 0 0 0 0zM977.067 106.837v0 0z" />
|
83 |
+
<glyph unicode="k" glyph-name="fi-dislike" d="M1024 744.277v0c-0.022 5.463-2.235 10.404-5.804 13.996l-153.599 153.599c-3.36 2.775-7.711 4.458-12.455 4.458-0.965 0-1.913-0.070-2.84-0.204l-571.969 0.013c-0.013 0-0.029 0-0.044 0-21.301 0-38.691-16.749-39.717-37.796l-0.004-0.092v-1.365s0 0 0 0 0 0 0 0v-575.659c-0.008-0.305-0.013-0.664-0.013-1.024 0-22.001 17.79-39.846 39.77-39.936h158.387c2.395-3.843 5.163-7.153 8.325-10.036l1.744-2.935v-1.707h1.024l153.6-264.704c15.852-27.026 44.761-44.886 77.842-44.886 0.114 0 0.227 0 0.34 0.001 49.928 0.385 90.268 40.963 90.268 90.963 0 0.241-0.001 0.482-0.003 0.722l0.854-0.037v233.643h215.381c21.611 0.572 38.912 18.227 38.912 39.923 0 0.005 0 0.009 0 0.014v-0.001 443.733zM156.501 806.4v0c-0.289 21.835-18.057 39.424-39.933 39.424-0.001 0-0.002 0-0.003 0h-77.653c-21.476-0.475-38.726-17.904-38.912-39.406v-433.341c1.956-20.057 18.558-35.654 38.876-36.010h78.201c0 0 0.001 0 0.001 0 21.936 0 39.741 17.686 39.934 39.576 0.062 0.835 0.097 1.788 0.097 2.749s-0.035 1.914-0.104 2.857z" />
|
84 |
+
<glyph unicode="l" glyph-name="fi-location-marker" horiz-adv-x="768" d="M384.037 960c212.124-0.388 383.963-172.467 383.963-384.682 0-0.18 0-0.36 0-0.513 0-268.288-384-638.805-384-638.805s-384 370.517-384 638.778c0 0.18 0 0.36 0 0.54 0 212.215 171.84 384.294 384 384.682zM384 767.317c-0.152 0-0.332 0.001-0.512 0.001-106.416 0-192.683-86.267-192.683-192.683s86.267-192.683 192.683-192.683c106.416 0 192.683 86.267 192.683 192.683 0 0.060 0 0.12 0 0.179 0 0.041 0 0.101 0 0.161 0 106.167-86.017 192.244-192.161 192.341z" />
|
85 |
+
<glyph unicode="m" glyph-name="fi-mail" d="M896 960h-768c-70.614-0.194-127.806-57.386-128-127.981v-76.819c186.027-100.011 418.304-230.912 431.957-238.933 21.96-10.812 47.803-17.137 75.122-17.137 1.73 0 3.454 0.025 5.172 0.076 1.203-0.050 2.914-0.075 4.632-0.075 27.332 0 53.187 6.324 76.181 17.588 12.631 6.886 244.908 137.788 430.935 238.481v76.8c-0.194 70.614-57.386 127.806-127.981 128zM592.043 362.667c-20.366-10.95-44.565-17.384-70.266-17.384-3.44 0-6.853 0.115-10.235 0.342-2.466-0.227-5.878-0.342-9.318-0.342-25.701 0-49.9 6.434-71.073 17.779-17.284 9.674-243.417 140.576-431.151 238.538v-537.6c0.193-70.555 57.288-127.71 127.802-128h768.028c0 0 0 0 0 0 70.727 0 128.073 57.287 128.171 127.991v537.609c-187.733-97.963-413.867-228.864-431.957-238.933z" />
|
86 |
+
<glyph unicode="n" glyph-name="fi-notification" horiz-adv-x="828" d="M804.011 170.155c-56.593 42.156-94.077 107.245-98.612 181.242q-0.034 7.856-0.034 15.195v230.571c0 0.036 0 0.078 0 0.121 0 77.372-30.286 147.671-79.651 199.687l0.12-0.128c-4.779 4.949-9.728 9.728-14.677 14.507l-2.048 1.877c-4.608 4.267-9.557 8.363-14.507 12.288l-3.755 2.901q-6.827 5.291-14.165 10.069l-5.632 3.755c-4.437 2.901-8.875 5.632-13.483 8.192l-7.68 4.096-12.629 6.485-10.24 4.437-11.264 4.608c-4.437 1.707-9.045 3.072-13.653 4.608l-8.875 2.901c-7.68 2.219-15.701 4.096-23.723 5.632v21.504c0 30.586-24.795 55.381-55.381 55.381s-55.381-24.795-55.381-55.381v-21.675c-8.021-1.536-15.872-3.413-23.552-5.632l-9.387-2.731c-4.608-1.536-9.216-2.901-13.653-4.608l-11.264-4.608-10.24-4.437-12.629-6.485-7.68-4.096c-4.608-2.56-9.045-5.461-13.483-8.192l-5.632-3.755c-4.779-3.243-9.557-6.656-14.165-10.069l-3.755-2.901c-4.949-3.925-9.728-8.021-14.507-12.288l-1.877-1.877c-5.12-4.608-10.069-9.387-14.677-14.507v0c-49.244-51.889-79.531-122.187-79.531-199.559 0-0.043 0-0.085 0-0.128v-230.564c0-4.779 0-9.728 0-14.507-4.698-74.762-42.366-139.862-98.498-181.464l-24.212-17.875v-122.539h292.523c14.321-54.478 63.131-94.007 121.173-94.007s106.853 39.529 120.978 93.135l292.889 0.872v122.539z" />
|
87 |
+
<glyph unicode="o" glyph-name="fi-pause" horiz-adv-x="758" d="M217.941 960h-181.077c-20.359 0-36.864-16.505-36.864-36.864v0-950.101c0-0.051 0-0.111 0-0.171 0-20.359 16.505-36.864 36.864-36.864 0 0 0 0 0 0h180.907c20.359 0 36.864 16.505 36.864 36.864v0 950.101c0 0.051 0 0.111 0 0.171 0 20.3-16.408 36.767-36.684 36.864zM758.443-26.965v950.101c0 0 0 0 0 0 0 20.299-16.407 36.767-36.684 36.864h-181.087c-20.359 0-36.864-16.505-36.864-36.864v0-950.101c0-0.051 0-0.111 0-0.171 0-20.359 16.505-36.864 36.864-36.864 0 0 0 0 0 0h180.907c20.359 0 36.864 16.505 36.864 36.864v0z" />
|
88 |
+
<glyph unicode="p" glyph-name="fi-play" horiz-adv-x="897" d="M896.853 448c-0.066 13.948-7.832 26.066-19.263 32.33l-819.051 473.014c-5.945 4.206-13.345 6.724-21.333 6.724-20.548 0-37.205-16.657-37.205-37.205 0-0.024 0-0.048 0-0.071-0.043-0.634-0.067-1.379-0.067-2.13s0.024-1.495 0.072-2.234l-0.005 0.101v-949.419c2.132-18.71 17.874-33.111 36.979-33.111 0.139 0 0.279 0.001 0.418 0.002 6.844 0.018 13.262 1.918 18.748 5.212l-0.166-0.092 822.443 474.112c11.104 6.533 18.439 18.424 18.439 32.028 0 0.26-0.003 0.52-0.008 0.779z" />
|
89 |
+
<glyph unicode="q" glyph-name="fi-eye-hide" d="M201.216 838.997c-2.596 2.605-6.187 4.217-10.155 4.217s-7.559-1.612-10.154-4.216l-61.44-60.928c-2.605-2.596-4.217-6.187-4.217-10.155s1.612-7.559 4.216-10.154l701.27-700.758c2.596-2.605 6.187-4.217 10.155-4.217s7.559 1.612 10.154 4.216l60.928 60.928c2.605 2.596 4.217 6.187 4.217 10.155s-1.612 7.559-4.216 10.154zM665.6 456.533c-4.372 78.297-66.77 140.695-144.666 145.049zM358.4 437.419c5.285-76.768 66.251-137.734 142.541-142.992zM512 671.915c0.243 0.001 0.531 0.002 0.818 0.002 123.288 0 223.232-99.944 223.232-223.232 0-19.895-2.603-39.181-7.486-57.539l150.881-148.97c60.159 57.039 108.919 125.422 142.957 201.809s-134.935 356.101-510.402 356.101c-0.695 0.003-1.517 0.005-2.339 0.005-58.177 0-114.196-9.241-166.669-26.335l113.712-108.838c16.592 4.431 35.643 6.983 55.287 6.997zM512 223.915c-0.228-0.001-0.498-0.001-0.768-0.001-123.288 0-223.232 99.944-223.232 223.232 0 19.337 2.459 38.1 7.081 55.993l-151.38 149.661c-59.739-56.808-108.2-124.836-142.102-200.79s134.934-355.925 510.401-355.925c0.727-0.004 1.587-0.006 2.447-0.006 57.572 0 113.029 9.053 165.026 25.812l-113.884 109.020c-16.056-4.238-34.509-6.722-53.525-6.826z" />
|
90 |
+
<glyph unicode="r" glyph-name="fi-reply" d="M1018.197 2.048c-94.208 337.749-356.693 426.667-516.779 448.683l-84.309 11.605v-223.573l-417.109 327.509 417.109 327.339v-175.957l62.293-10.069c203.264-33.28 352.939-115.2 442.197-243.883 82.773-119.467 115.712-279.723 96.256-461.653z" />
|
91 |
+
<glyph unicode="s" glyph-name="fi-share" horiz-adv-x="871" d="M724.309 594.261c-18.787-0.030-36.732-3.598-53.217-10.072l-378.911 219.821c0 3.243 0 6.485 0 9.728-0.286 80.75-65.812 146.1-146.602 146.1-80.966 0-146.603-65.636-146.603-146.603s65.636-146.603 146.603-146.603c32.171 0 61.921 10.362 86.096 27.931l352.858-203.215c-4.21-13.064-6.637-28.094-6.637-43.691s2.427-30.627 6.924-44.733l-352.543-202.393c-23.762 17.425-53.583 27.883-85.845 27.883-80.684 0-146.091-65.407-146.091-146.091s65.407-146.091 146.091-146.091c80.684 0 146.091 65.407 146.091 146.091 0 0.037 0 0.075 0 0.112 0 3.066 0 5.968 0 8.869l380.416 220.16c15.309-5.943 33.028-9.386 51.552-9.386 80.778 0 146.261 65.483 146.261 146.261s-65.483 146.261-146.261 146.261c-0.124 0-0.247 0-0.371 0z" />
|
92 |
+
<glyph unicode="t" glyph-name="fi-social-twitter" horiz-adv-x="1218" d="M1218.048 825.685c-41.589-18.946-89.834-32.762-140.423-39.009 49.255 31.051 88.111 79.092 106.978 136.225-45.177-25.853-98.349-46.93-154.997-58.44-49.015 48.489-114.054 79.052-186.231 79.052-138.18 0-250.197-112.017-250.197-250.197 0-20.429 2.448-40.285 7.068-59.293-208.387 12.694-391.297 111.711-513.9 261.895-22.372-34.799-34.994-78.235-34.994-124.62 0-86.188 43.58-162.198 109.907-207.195-40.859 0.781-79.652 12.196-113.518 31.316 1.242-1.669 1.242-2.693 1.242-3.717 0.053-120.496 85.278-221.072 198.736-244.793-18.020-5.811-40.581-8.989-63.884-8.989-0.129 0-0.258 0-0.387 0-0.039 0-0.109 0-0.179 0-16.53 0-32.683 1.615-48.31 4.696 34.425-100.367 126.132-171.764 234.807-173.823-84.086-66.609-191.923-106.842-309.157-106.842-0.367 0-0.735 0-1.102 0.001-20.933 0.002-41.631 1.242-61.971 3.651 110.58-70.657 242.885-112.537 384.972-112.537 0.225 0 0.45 0 0.675 0 459.571 0 710.793 380.757 710.793 710.997 0 10.752 0 21.675 0 32.256 49.075 35.761 90.418 78.625 123.442 127.566z" />
|
93 |
+
<glyph unicode="u" glyph-name="fi-white-label-video" horiz-adv-x="1114" d="M1102.848 672.427s-10.581 77.312-44.715 111.445c-28.423 29.011-67.857 47.141-111.527 47.615-155.908 11.265-389.721 11.265-389.721 11.265v0s-89.259 0-194.219-2.731l-1.707-1.707v-388.779c0-6.786-5.502-12.288-12.288-12.288-3.509 0.016-6.664 1.522-8.867 3.917l-88.243 88.243c-1.923 2.313-4.802 3.774-8.021 3.774s-6.098-1.462-8.008-3.757l-0.014-0.017-89.6-88.747c-2.162-2.096-5.109-3.395-8.359-3.413-6.79 0-12.292 5.502-12.292 12.288v375.637c-27.755-7.101-51.477-21.577-69.721-41.213-34.215-34.222-44.284-111.534-44.284-111.534-6.606-53.897-10.682-116.924-11.258-180.786l-0.006-86.137c0.52-64.592 4.535-127.632 11.87-189.654s10.146-69.247 43.426-103.38c42.325-44.715 97.963-43.349 122.88-47.957 89.088-8.533 378.709-11.264 378.709-11.264s234.155 0 389.973 11.776c43.612 0.524 82.907 18.575 111.252 47.422 34.156 34.156 44.396 111.468 44.396 111.468 6.56 54.011 10.575 117.11 11.089 181.045l0.005 86.049c-0.518 64.65-4.534 127.749-11.87 189.832zM440.661 292.352v316.245l295.936-154.965z" />
|
94 |
+
<glyph unicode="v" glyph-name="fi-social-drive" d="M383.488 245.419l-177.664-305.323h640.512l177.664 305.323h-640.512zM329.216 818.688l320.341-554.667 353.28-1.024-320.171 554.667-353.451 1.024zM0 242.517l175.787-306.517 320.171 554.667-175.616 306.517-320.341-554.667z" />
|
95 |
+
<glyph unicode="w" glyph-name="fi-wordpress" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM255.147 644.608c25.259 1.365 47.957 4.096 47.957 4.096 8.85 0.729 15.756 8.091 15.756 17.067 0 9.456-7.665 17.121-17.121 17.121-0.481 0-0.956-0.020-1.427-0.059s-68.205-5.287-111.725-5.287c-7.851 0-17.067 0-26.965 0 76.052 114.526 204.485 188.994 350.311 188.994 109.329 0 208.881-41.857 283.507-110.42l-5.764 0.274c-39.179-1.128-70.51-33.157-70.51-72.505 0-0.67 0.009-1.338 0.027-2.004-0.002-34.035 19.966-63.731 41.129-98.206 21.048-32.798 33.711-72.734 34.132-115.6 0.001-35.952-13.823-77.595-31.914-135.622l-41.813-139.776-150.869 451.925c25.259 1.365 47.957 4.096 47.957 4.096 8.85 0.729 15.756 8.091 15.756 17.067 0 9.456-7.665 17.121-17.121 17.121-0.481 0-0.956-0.020-1.427-0.059s-68.205-5.287-111.725-5.287c-41.131 0-110.421 5.291-110.421 5.291-0.409 0.035-0.885 0.055-1.365 0.055-9.456 0-17.121-7.665-17.121-17.121 0-8.975 6.906-16.337 15.694-17.063s21.395-2.564 44.094-4.1l65.365-179.541-91.819-274.603zM329.045 70.656c-141.030 69.533-236.344 212.284-236.344 377.297 0 61.818 13.377 120.511 37.393 173.343zM519.339 411.989l129.195-353.792c0.957-2.241 1.985-4.148 3.161-5.948-41.53-14.922-89.365-23.635-139.236-23.635-42.262 0-83.063 6.257-121.527 17.896zM722.773 85.675l128 370.347c19.469 44.241 31.134 95.751 31.911 149.895 0.003 0.411 0.004 0.553 0.004 0.694 0 15.086-1.055 29.926-3.094 44.45 32.457-59.671 51.452-128.883 51.452-202.531 0-153.868-82.908-288.372-206.488-361.276z" />
|
96 |
+
<glyph unicode="x" glyph-name="fi-widget-settings-config" d="M999.424 530.944l-129.877 12.8c-9.193 33.918-21.85 63.586-37.968 90.973l83.877 99.32c3.807 4.657 6.114 10.669 6.114 17.22 0 7.537-3.054 14.362-7.992 19.303l-79.019 79.019c-4.941 4.938-11.765 7.992-19.302 7.992-6.551 0-12.564-2.307-17.269-6.153l-100.986-82.905c-25.672 15.185-55.341 27.841-86.69 36.434l-15.369 130.478c-1.433 13.848-13.031 24.558-27.134 24.576h-111.618c-14.105-0.018-25.703-10.728-27.126-24.459l-12.81-130.165c-33.915-9.179-63.585-21.837-90.966-37.965l-99.327 83.874c-4.657 3.807-10.669 6.114-17.22 6.114-7.537 0-14.362-3.054-19.303-7.992l-78.848-78.848c-4.938-4.941-7.992-11.765-7.992-19.302 0-6.551 2.307-12.564 6.153-17.269l82.905-100.986c-15.194-25.673-27.851-55.343-36.436-86.695l-130.646-15.363c-13.848-1.433-24.558-13.031-24.576-27.134v-111.618c0.018-14.105 10.728-25.703 24.459-27.126l130.165-12.81c9.175-33.915 21.832-63.585 37.964-90.964l-83.873-99.329c-3.889-4.663-6.251-10.718-6.251-17.325 0-7.498 3.041-14.286 7.957-19.197l78.848-78.848c4.941-4.938 11.765-7.992 19.302-7.992 6.551 0 12.564 2.307 17.269 6.153l100.986 82.905c25.671-15.228 55.334-27.938 86.678-36.597l15.38-130.485c1.434-13.86 13.050-24.576 27.17-24.576 0.048 0 0.096 0 0.144 0h111.609c14.105 0.018 25.703 10.728 27.126 24.459l12.81 129.994c33.919 9.237 63.585 21.949 90.955 38.133l99.338-83.872c4.657-3.807 10.669-6.114 17.22-6.114 7.537 0 14.362 3.054 19.303 7.992l78.848 78.848c4.916 4.912 7.957 11.699 7.957 19.197 0 6.607-2.361 12.663-6.286 17.369l-82.909 100.991c15.183 25.672 27.839 55.341 36.434 86.688l130.478 15.37c13.995 1.266 24.882 12.924 24.917 27.132v111.62c-0.018 14.105-10.728 25.703-24.459 27.126zM512 296.96c-83.417 0-151.040 67.623-151.040 151.040s67.623 151.040 151.040 151.040c83.417 0 151.040-67.623 151.040-151.040s-67.623-151.040-151.040-151.040z" />
|
97 |
+
<glyph unicode="y" glyph-name="fi-social-youtube" horiz-adv-x="1114" d="M1102.848 672.427s-10.581 77.312-44.715 111.445c-28.423 29.011-67.857 47.141-111.527 47.615-155.908 11.265-389.721 11.265-389.721 11.265v0s-233.813 0-389.803-11.264c-43.755-0.495-83.183-18.62-111.591-47.59-34.159-34.159-44.228-111.471-44.228-111.471-6.601-53.889-10.677-116.916-11.258-180.777l-0.006-86.146c0.524-64.599 4.54-127.638 11.87-189.662s10.146-69.239 43.426-103.372c42.325-44.715 97.963-43.349 122.88-47.957 89.088-8.533 378.709-11.264 378.709-11.264s233.984 0 389.973 11.776c43.612 0.524 82.907 18.575 111.252 47.422 34.156 34.156 44.396 111.468 44.396 111.468 6.56 54.009 10.576 117.109 11.089 181.043l0.005 86.051c-0.518 64.65-4.534 127.749-11.87 189.832zM440.661 292.352v316.245l295.936-154.965z" />
|
98 |
+
<glyph unicode="z" glyph-name="fi-filter" d="M1024 728.576c-0.063 44.774-35.52 81.246-79.888 82.939l-860.997 0.005c-0.072 0-0.157 0-0.243 0-45.903 0-83.115-37.212-83.115-83.115 0-26.158 12.084-49.494 30.974-64.73l386.036-386.343v-238.933c0.665-15.332 9.197-28.533 21.637-35.729l0.209-0.111 103.424-59.733c6.303-3.758 13.9-5.98 22.016-5.98 24.035 0 43.52 19.485 43.52 43.52 0 0.062 0 0.124 0 0.187 0 1.185 0 2.209 0 3.404v0 293.376l389.803 389.632c16.397 15.17 26.628 36.8 26.628 60.82 0 0.278-0.001 0.555-0.004 0.833zM284.843 645.291v0z" />
|
99 |
+
<glyph unicode="{" glyph-name="fi-italic" horiz-adv-x="382" d="M382.464 912.896c0 26.015-21.089 47.104-47.104 47.104h-83.115c-0.17 0.002-0.371 0.003-0.573 0.003-25.081 0-45.568-19.674-46.868-44.432l-0.005-0.116-204.8-921.6v-2.048c-0.118-1.228-0.185-2.654-0.185-4.096s0.067-2.868 0.199-4.276c-0.018-0.060-0.021-0.343-0.021-0.626 0-24.722 19.114-44.979 43.37-46.8l0.157-0.009h86.699c24.249 0.061 44.173 18.503 46.576 42.127l0.016 0.199 203.605 921.6c1.141 3.771 1.823 8.11 1.877 12.6z" />
|
100 |
+
<glyph unicode="|" glyph-name="fi-flag" horiz-adv-x="976" d="M955.733 798.208c-0.041 0-0.090 0-0.138 0-2.841 0-5.551-0.565-8.023-1.588l0.139 0.051c-43.859-23.422-95.925-37.187-151.205-37.205-0.183 0-0.392-0.001-0.601-0.001-100.738 0-190.848 45.506-250.895 117.083-54.643 51.823-128.037 83.375-208.8 83.375-77.746 0-148.664-29.239-202.356-77.32-11.133 24.557-35.409 41.082-63.544 41.082-38.834 0-70.315-31.481-70.315-70.315 0-0.253 0.001-0.507 0.004-0.759v-846.127c0-38.928 31.557-70.485 70.485-70.485s70.485 31.557 70.485 70.485v381.099c42.989 22.156 93.818 35.145 147.68 35.145 100.884 0 191.125-45.566 251.266-117.241 54.587-51.676 127.857-83.13 208.473-83.13 87.143 0 165.702 36.754 221.020 95.606 4.335 3.97 6.957 9.436 6.974 15.516v443.736c0 0.001 0 0.002 0 0.003 0 11.474-9.205 20.797-20.633 20.989z" />
|
101 |
+
<glyph unicode="}" glyph-name="fi-puzzle" horiz-adv-x="750" d="M749.397 464.043v168.96c0 28.277-22.923 51.2-51.2 51.2v0h-164.693c-36.869 2.304-65.899 32.769-65.899 70.015 0 16.259 5.532 31.226 14.816 43.121l-1.141-0.156c9.014 15.408 14.336 33.925 14.336 53.686 0 59.476-48.215 107.691-107.691 107.691s-107.691-48.215-107.691-107.691c0-19.761 5.322-38.278 14.612-54.197l-1.47 0.511c9.091-11.71 14.573-26.616 14.573-42.803 0-37.202-28.961-67.639-65.567-69.997l-0.206-0.011h-190.976c-28.277 0-51.2-22.923-51.2-51.2s0-1.365 0-2.219v-176.128c0-16.212 13.143-29.355 29.355-29.355 3.057 0.029 5.988 0.526 8.739 1.423 15.082 6.908 32.95 10.968 51.766 10.968 70.692 0 128-57.308 128-128s-57.308-128-128-128c-18.031 0-35.192 3.728-50.753 10.456-2.359 0.983-6.059 1.739-9.935 1.739-16.118 0-29.184-13.066-29.184-29.184 0-0.304 0.005-0.606 0.014-0.907-0.073-0.698-0.114-1.559-0.114-2.431s0.041-1.733 0.121-2.583l-0.008 0.109v-168.96s0-1.536 0-2.219c0.097-28.675 23.365-51.883 52.053-51.883 0 0 0 0 0 0h177.152c0.127-0.002 0.276-0.003 0.426-0.003 16.024 0 29.013 12.99 29.013 29.013 0 3.425-0.594 6.712-1.684 9.763l0.063-0.203s0 1.365 0 2.048v0c-3.357 10.903-5.291 23.435-5.291 36.42 0 70.692 57.308 128 128 128s128-57.308 128-128c0-12.984-1.933-25.517-5.528-37.327l0.237 0.907c-1.422-3.329-2.249-7.202-2.249-11.268 0-16.043 12.869-29.080 28.847-29.35h168.132c28.085 0.471 50.729 23.115 51.199 51.155l0.001 0.045v170.667c-1.842 14.555-14.116 25.707-29.007 25.771l-0.007 1.365c-10.294-2.98-22.119-4.693-34.343-4.693-70.692 0-128 57.308-128 128s57.308 128 128 128c12.225 0 24.049-1.714 35.246-4.914l-0.903 1.415c0.009 0 0.019 0 0.029 0 13.136 0 24.245 8.679 27.906 20.615l1.42 0.207v8.021s0 0 0 0 0 0 0 0z" />
|
102 |
+
<glyph unicode="~" glyph-name="fi-brush" horiz-adv-x="696" d="M0 366.080c-0.043-1.089-0.067-2.367-0.067-3.651 0-54.575 44.241-98.816 98.816-98.816 1.284 0 2.563 0.024 3.835 0.073l81.737-0.006c0.943 0.054 2.047 0.085 3.157 0.085 32.236 0 58.368-26.132 58.368-58.368 0-1.111-0.031-2.214-0.092-3.31l0.007-219.496c0.097-25.693 20.899-46.495 46.583-46.592h111.455c25.693 0.097 46.495 20.899 46.592 46.583v219.487c-0.061 0.998-0.096 2.164-0.096 3.338 0 32.236 26.132 58.368 58.368 58.368 1.174 0 2.341-0.035 3.498-0.103l81.761 0.008c1.142-0.047 2.482-0.074 3.829-0.074 54.48 0 98.645 44.165 98.645 98.645 0 1.347-0.027 2.687-0.080 4.020l0.006 102.209h-696.32zM257.707 960l-73.387-73.387-73.387 73.387h-110.933v-450.56h696.32v450.56h-438.613z" />
|
103 |
+
<glyph unicode="¡" glyph-name="fi-crown" horiz-adv-x="943" d="M943.445 31.915v0c0 23.281-18.873 42.155-42.155 42.155h-859.136c-23.281 0-42.155-18.873-42.155-42.155v-53.76c0-23.281 18.873-42.155 42.155-42.155h859.136c23.281 0 42.155 18.873 42.155 42.155zM119.467 608.427v0c-7.861 6.851-18.209 11.028-29.532 11.028-24.621 0-44.629-19.748-45.049-44.268l-1.195-0.039v-405.333h1.365c2.163-23.099 21.415-41.047 44.877-41.131h763.4v1.024c23.081 0.117 42.065 17.505 44.694 39.894l0.020 0.212v397.653c0.631 2.813 1.003 6.051 1.024 9.372 0.001 0.093 0.001 0.185 0.001 0.277 0 24.884-20.172 45.056-45.056 45.056-10.85 0-20.804-3.835-28.581-10.223l0.078 0.063-1.195-1.195c-1.535-1.338-2.929-2.732-4.223-4.215l-95.446-95.454-219.477 219.307c-8.246 8.818-19.951 14.314-32.939 14.314s-24.693-5.496-32.915-14.288l-0.024-0.026-221.355-220.331-93.867 93.867c-1.441 1.579-2.945 3.029-4.537 4.379zM790.187 492.032v-1.365h-1.365zM88.235 849.067c46.28 0 83.797-37.517 83.797-83.797s-37.517-83.797-83.797-83.797c-46.28 0-83.797 37.517-83.797 83.797s37.517 83.797 83.797 83.797zM851.115 849.067c0.203 0.002 0.443 0.003 0.683 0.003 46.28 0 83.797-37.517 83.797-83.797s-37.517-83.797-83.797-83.797c-46.279 0-83.796 37.516-83.797 83.794 0 0.001 0 0.002 0 0.003 0 46.040 37.129 83.408 83.078 83.794zM476.501 960c46.207-0.097 83.627-37.577 83.627-83.797 0-46.28-37.517-83.797-83.797-83.797s-83.797 37.517-83.797 83.797c0 0 0 0 0 0 0 46.28 37.517 83.797 83.797 83.797 0.060 0 0.12 0 0.18 0z" />
|
104 |
+
<glyph unicode="¢" glyph-name="fi-upload-cloud" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.654 94.138-106.132 163.002-205.694 163.002-107.128 0-195.634-79.728-209.42-183.084l-0.118-1.080c-130.046-4.52-233.873-110.554-234.837-241.058l-0.001-0.094c0-134.656 114.688-244.565 249.173-244.565h585.728c0.069 0 0.15 0 0.231 0 102.662 0 186.199 81.884 188.862 183.903l0.005 0.247c-0.079 88.432-62.537 162.253-145.743 179.841l-1.201 0.213zM512 379.733v-136.533c0-5.373-4.355-9.728-9.728-9.728v0h-54.101c-5.373 0-9.728 4.355-9.728 9.728v0 136.533l-131.243-12.459 168.789 296.448 168.789-296.448z" />
|
105 |
+
<glyph unicode="£" glyph-name="fi-download-cloud" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.632 94.168-106.125 163.063-205.709 163.063-107.089 0-195.57-79.67-209.405-182.972l-0.119-1.083c-130.105-4.523-233.967-110.652-234.837-241.238v-0.084c-0.853-134.485 114.688-244.565 249.173-244.565h585.557c0.119 0 0.261 0 0.402 0 102.662 0 186.199 81.884 188.862 183.903l0.005 0.247c-0.079 88.432-62.537 162.253-145.743 179.841l-1.201 0.213zM475.136 233.131l-168.789 296.448 132.096-12.459v136.533c0 5.373 4.355 9.728 9.728 9.728v0h53.931c5.373 0 9.728-4.355 9.728-9.728v0-136.533l132.096 12.459z" />
|
106 |
+
<glyph unicode="¥" glyph-name="fi-color-pick-eyedropper" d="M646.997 791.552l45.056-45.227-304.299-304.469c0.395-4.001 0.62-8.648 0.62-13.348 0-37.29-14.17-71.27-37.419-96.85l22.634-22.41 22.528-22.528c25.415 23.141 59.352 37.311 96.598 37.311 4.687 0 9.321-0.224 13.893-0.663l303.887 304.514 45.056-45.227 51.2 51.2-208.896 208.384zM506.197 385.365c-6.949-6.006-16.072-9.665-26.049-9.665-22.056 0-39.936 17.88-39.936 39.936 0 9.977 3.659 19.1 9.708 26.1l273.024 273.016 56.32-56.491zM999.424 935.424v0c-15.17 15.196-36.14 24.597-59.307 24.597s-44.137-9.401-59.306-24.596l-118.273-118.444 118.613-119.467 118.272 118.443c15.411 15.23 24.955 36.367 24.955 59.733s-9.544 44.503-24.947 59.725zM486.571 51.2h-370.688v371.029h156.331c5.090 0 9.216 4.126 9.216 9.216v96.768c0 5.090-4.126 9.216-9.216 9.216h-262.997c-5.090 0-9.216-4.126-9.216-9.216v-582.997c0-0.008 0-0.016 0-0.025 0-5.090 4.126-9.216 9.216-9.216 0.24 0 0.478 0.009 0.714 0.027l583.819-0.002c5.090 0 9.216 4.126 9.216 9.216v262.485c0 5.090-4.126 9.216-9.216 9.216h-97.451c-5.090 0-9.216-4.126-9.216-9.216z" />
|
107 |
+
<glyph unicode="§" glyph-name="fi-comment" d="M278.357 74.411c-21.845-59.563-82.944-102.4-122.197-123.392-18.091-9.899-3.584-15.019 11.605-15.019h5.291c103.879 7.708 198.451 41.865 278.727 95.689 16.569-3.403 38.282-4.641 60.267-4.724 282.916 0 512.121 190.976 512.121 426.666s-229.205 426.667-512 426.667-512-191.147-512-426.667c0-165.376 113.152-308.395 278.357-379.221z" />
|
108 |
+
<glyph unicode="¨" glyph-name="fi-text-color" d="M982.528 18.944h-942.421c-21.731-1.439-38.813-19.418-38.813-41.387s17.082-39.948 38.688-41.38l942.546-0.007c22.904 0 41.472 18.568 41.472 41.472s-18.568 41.472-41.472 41.472zM170.667 114.517h78.507c0.067 0 0.145-0.001 0.224-0.001 15.639 0 28.938 10.017 33.833 23.984l48.375 127.569h359.765l49.835-131.413c5.533-10.993 16.263-18.657 28.876-19.787l0.138-0.010h81.749c0.053 0 0.115 0 0.178 0 19.7 0 35.669 15.97 35.669 35.669 0 3.903-0.627 7.66-1.786 11.175l0.072-0.252v4.267l-279.040 707.413c-4.82 14.486-18.252 24.747-34.080 24.747-0.019 0-0.038 0-0.056 0h-122.024c-15.996-0.132-29.494-10.673-34.064-25.174l-280.304-710.228c-1.384-3.655-2.186-7.881-2.186-12.294 0-19.7 15.97-35.669 35.669-35.669 0.228 0 0.456 0.002 0.684 0.006zM512 760.491l140.971-373.419h-282.283z" />
|
109 |
+
<glyph unicode="©" glyph-name="fi-layout" horiz-adv-x="1021" d="M1020.757 763.392h-1020.757v133.632c0 34.781 28.195 62.976 62.976 62.976h894.805c34.781 0 62.976-28.195 62.976-62.976zM236.373-64h-173.397c-34.781 0-62.976 28.195-62.976 62.976v697.856h236.373zM299.52 696.832h721.408v-378.368h-721.408v378.368zM957.781-64h-658.261v315.392h721.237v-252.416c0-34.781-28.195-62.976-62.976-62.976z" />
|
110 |
+
<glyph unicode="ª" glyph-name="comment-2" d="M512 899.413c-315.733 0-512-161.28-512-421.205 0-170.667 83.285-300.203 235.349-368.128-5.584-48.986-22.586-93.124-48.264-130.888l-32.461-43.192h54.784c147.115 0 233.301 63.488 281.429 121.515h21.163c320.683 0 512 157.525 512 421.205 0 259.413-196.096 420.693-512 420.693zM512 185.344v0l-80.213 2.389-39.253-48.299c-2.901-3.413-5.803-6.827-8.875-10.069l-17.067-18.432 11.605 76.459-89.259 39.936c-105.813 47.275-159.403 131.755-159.403 250.88-1.024 264.363 267.093 292.864 382.464 292.864s383.488-28.501 383.488-292.864c0-254.635-239.957-292.693-382.976-292.693z" />
|
111 |
+
<glyph unicode="«" glyph-name="fi-laptop" d="M125.099 136.533h773.803c29.523 0.097 53.419 24.053 53.419 53.589 0 0 0 0 0 0v473.941c0 29.502-23.916 53.419-53.419 53.419h-773.803c-29.502 0-53.419-23.916-53.419-53.419v-474.112c0 0 0 0 0 0 0-29.537 23.896-53.492 53.409-53.589zM178.517 610.475h666.795v-367.275h-666.624zM999.424 82.944h-974.677c-13.667 0-24.747-11.079-24.747-24.747v-59.733c-0.002-0.108-0.003-0.235-0.003-0.363 0-6.447 2.465-12.318 6.505-16.722l34.117-37.87c4.505-4.65 10.806-7.537 17.782-7.537 0.409 0 0.815 0.010 1.219 0.029l902.258-0.002c6.688 0.147 12.7 2.925 17.065 7.337l37.549 37.89c4.351 4.388 7.070 10.401 7.168 17.048v59.752c-0.096 13.534-11.042 24.48-24.567 24.576zM605.013-2.731c0.019-0.161 0.029-0.347 0.029-0.536 0-2.563-1.949-4.672-4.446-4.924l-177.344-0.002c-2.518 0.254-4.466 2.362-4.466 4.926 0 0.189 0.011 0.375 0.031 0.558l-0.002 24.041c-0.019 0.161-0.029 0.347-0.029 0.536 0 2.563 1.949 4.672 4.446 4.924l177.514 0.002c2.518-0.254 4.466-2.362 4.466-4.926 0-0.189-0.011-0.375-0.031-0.558z" />
|
112 |
+
<glyph unicode="¬" glyph-name="fi-arrows-expand" d="M52.565 271.872l-52.565-315.051c-0.168-0.922-0.264-1.982-0.264-3.065 0-4.931 1.992-9.397 5.214-12.637l-0.001 0.001c3.114-3.258 7.493-5.283 12.345-5.283 1.188 0 2.347 0.121 3.466 0.352l314.087 53.058c8.563 1.452 15.003 8.814 15.003 17.681 0 4.962-2.016 9.452-5.274 12.697l-61.441 61.441 164.864 164.864c3.269 3.247 5.292 7.745 5.292 12.715s-2.023 9.468-5.291 12.714l-113.665 113.665c-3.247 3.269-7.745 5.292-12.715 5.292s-9.468-2.023-12.714-5.291l-164.524-164.865-61.44 61.44c-3.245 3.259-7.736 5.275-12.698 5.275-8.867 0-16.229-6.44-17.666-14.897zM971.435 624.128l52.565 315.051c0.152 0.878 0.239 1.888 0.239 2.919 0 4.919-1.982 9.374-5.19 12.613l0.001-0.001c-3.296 3.419-7.916 5.543-13.032 5.543-1.064 0-2.106-0.092-3.119-0.268l-314.089-53.403c-8.563-1.452-15.003-8.814-15.003-17.681 0-4.962 2.016-9.452 5.274-12.697l61.441-61.441-164.864-165.035c-3.269-3.247-5.292-7.745-5.292-12.715s2.023-9.468 5.291-12.714l113.665-113.665c3.247-3.269 7.745-5.292 12.715-5.292s9.468 2.023 12.714 5.291l165.036 165.036 61.44-61.44c3.245-3.259 7.736-5.275 12.698-5.275 8.867 0 16.229 6.44 17.666 14.897z" />
|
113 |
+
<glyph unicode="®" glyph-name="fi-update" horiz-adv-x="977" d="M976.384 604.672l-0.853 253.952c-0.539 11.636-10.103 20.865-21.823 20.865-4.598 0-8.864-1.42-12.383-3.846l-92.087-66.342c-92.193 93.060-220.016 150.684-361.299 150.699q-15.021 0-29.699-0.853h-3.755c-9.387 0-18.773-1.536-27.989-2.56h-1.536c-150.735-19.56-278.998-102.185-359.307-220.091-3.935-5.817-5.604-10.823-5.604-16.218 0-8.799 4.44-16.562 11.201-21.17l128.259-88.974c4.269-2.864 9.522-4.57 15.175-4.57 8.987 0 16.966 4.314 21.98 10.985 1.757 2.801 3.805 5.191 5.683 7.751s5.632 7.68 8.704 11.435l7.168 8.704q6.827 8.021 13.995 15.531l6.315 6.144q6.485 6.315 13.483 12.288l6.315 5.291q9.216 7.339 18.773 13.995l5.973 3.925q8.533 5.632 17.067 10.581l5.12 2.901c7.168 3.755 14.507 7.339 21.845 10.581l6.656 2.731c7.68 3.243 15.531 6.144 23.552 8.704h3.072c7.851 2.389 15.872 4.437 23.893 6.144l4.608 1.024q13.483 2.731 27.136 4.096h3.072c9.728 1.024 19.456 1.536 29.355 1.536 4.437 0 8.704 0 13.141 0s9.387 0 13.995 0 11.605-1.365 17.067-2.219l9.557-1.536c6.485-1.195 12.8-2.56 19.115-4.096l5.632-1.536c9.387-2.56 18.603-5.632 27.648-9.045l3.072-1.195c29.425-11.752 54.832-26.628 77.602-44.686l-15.138-9.927-85.333-61.611c-5.666-4.001-9.321-10.523-9.321-17.899 0-9.536 6.11-17.645 14.629-20.625l367.087-125.316c2.087-0.73 4.493-1.151 6.998-1.151 12.065 0 21.845 9.78 21.845 21.845 0 0.045 0 0.089 0 0.134zM916.309 180.907c-1.178 7.109-5.123 13.125-10.669 17.012l-128.253 88.972c-4.269 2.864-9.522 4.57-15.175 4.57-8.987 0-16.966-4.314-21.98-10.985-1.757-2.801-3.805-5.191-5.683-7.751s-5.632-7.68-8.533-11.435l-7.168-8.704c-4.437-5.291-9.216-10.581-13.995-15.531l-6.315-5.973c-4.437-4.267-8.875-8.363-13.483-12.288l-6.315-5.291q-9.216-7.339-18.773-13.995l-5.973-3.925c-5.632-3.755-11.435-7.168-17.067-10.581l-5.12-2.901c-7.168-3.925-14.507-7.339-21.845-10.581l-6.656-2.731c-7.68-3.243-15.531-6.144-23.552-8.704l-3.072-0.853c-7.851-2.389-15.701-4.437-23.893-6.144l-4.608-1.024q-13.312-2.731-27.136-4.096h-3.072c-9.728-1.024-19.456-1.536-29.355-1.536-4.437 0-8.704 0-12.971 0s-9.557 0-14.165 0-11.435 1.365-17.067 2.219l-9.557 1.536c-6.485 1.195-12.8 2.56-19.115 4.096l-6.144 1.536c-9.387 2.56-18.603 5.632-27.648 9.045l-3.072 1.195c-29.425 11.677-54.837 26.501-77.606 44.517l15.142 9.926 85.333 61.611c5.509 4.016 9.048 10.447 9.048 17.705 0 9.562-6.143 17.688-14.698 20.649l-367.087 125.316c-2.119 0.76-4.563 1.2-7.111 1.2-4.765 0-9.171-1.538-12.749-4.144-5.262-3.865-8.743-10.014-8.982-16.987l-0.001-133.84 1.195-254.635c0.539-11.636 10.103-20.865 21.823-20.865 4.598 0 8.864 1.42 12.383 3.846l92.087 66.342c92.193-93.060 220.016-150.684 361.299-150.699q15.021 0 29.869 0.853h3.584c9.387 0 18.773 1.536 28.16 2.56h1.536c150.735 19.56 278.998 102.185 359.307 220.091 3.889 5.777 5.53 10.725 5.53 16.057 0 1.71-0.169 3.38-0.491 4.996z" />
|
114 |
+
<glyph unicode="¯" glyph-name="fi-arrow-right" horiz-adv-x="921" d="M912.213 468.992l-388.949 388.608c-5.491 5.46-13.061 8.836-21.419 8.836s-15.927-3.375-21.42-8.837l-62.463-62.121c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l230.569-230.399h-621.909c0 0 0 0-0.001 0-14.644 0-26.527-11.823-26.623-26.444v-95.583c0-14.704 11.92-26.624 26.624-26.624h621.909l-230.4-230.4c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l62.292-61.951c5.491-5.46 13.061-8.836 21.419-8.836s15.927 3.375 21.42 8.837l388.948 388.607c5.38 5.401 8.706 12.851 8.706 21.077s-3.326 15.677-8.707 21.078z" />
|
115 |
+
<glyph unicode="°" glyph-name="hummingbird" d="M1009.323 570.197c-72.363-3.755-161.621-7.509-238.933-8.192l192.171 128.512c19.042-34.586 34.899-74.653 45.502-116.806zM512 960c189.862-0.034 355.572-103.406 443.951-256.93-61.487-12.553-225.839-36.617-400.943-48.051-34.133-2.219-55.979-36.181-68.267-62.464 0 0-31.061 195.925-244.907 145.408-41.984 18.944-81.237 34.133-116.224 46.251 94.16 107.956 231.957 175.787 385.597 175.787 0.279 0 0.557 0 0.836-0.001zM0 448c0 0.221-0.001 0.483-0.001 0.746 0 121.29 42.344 232.689 113.056 320.222 39.45-15.556 74.218-33.581 106.162-55.431s37.807-77.121 65.284-135.489 46.592-91.136 54.613-161.109 65.877-184.491 168.277-221.867c-34.879-47.972-65.982-102.598-90.759-160.574 26.898-39.4 57.774-69.843 91.053-97.495-280.204 0.74-507.686 229.298-507.686 510.988 0 0.003 0 0.007 0 0.010zM573.952-60.416c0 19.115 0 36.352 1.195 51.2 2.803 46.275 12.454 89.473 27.966 129.761 19.44 50.098 31.281 111.481 31.281 175.63 0 12.407-0.443 24.711-1.314 36.896-1.165 15.156-3.891 30.694-7.991 45.664l392.938 149.478c4.007-24.063 6.297-51.79 6.297-80.052 0-260.928-195.185-476.268-447.514-507.978z" />
|
116 |
+
<glyph unicode="±" glyph-name="uptime" horiz-adv-x="887" d="M117.248 504.832l35.328 57.003c9.877 16.209 27.456 26.867 47.525 26.867 0.993 0 1.979-0.026 2.959-0.078 20.763-0.726 38.722-12.635 48.013-29.9l40.938-76.591 89.088 160.768c9.871 17.66 28.452 29.404 49.776 29.404 24.488 0 45.359-15.488 53.351-37.202l78.975-220.042 35.84 61.611c10.083 16.967 28.318 28.161 49.168 28.161 0.115 0 0.229 0 0.343-0.001h121.156l117.76-56.832v256l-443.733 256-443.733-256v-256zM681.472 391.168l-80.555-138.24c-10.081-16.963-28.309-28.154-49.151-28.16h-5.633c-22.088 2.314-40.256 16.942-47.658 36.811l-78.465 216.117-78.677-143.36c-9.525-17.627-27.868-29.4-48.96-29.4-0.788 0-1.572 0.016-2.352 0.049-21.287 0.311-39.79 12.404-49.233 30.070l-43.84 82.737c-10.18-16.093-27.882-26.624-48.044-26.624-0.029 0-0.059 0-0.088 0l-148.817 56.832v-256l443.733-256 443.733 256v256l-117.76-56.832z" />
|
117 |
+
<glyph unicode="´" glyph-name="fi-annotate" horiz-adv-x="1022" d="M948.565 199.509v496.981c43.813 24.306 72.976 70.29 72.976 123.085 0 77.479-62.809 140.288-140.288 140.288-47.69 0-89.822-23.796-115.17-60.163l-510.083-0.458c-25.659 36.738-67.742 60.47-115.368 60.47-77.479 0-140.288-62.809-140.288-140.288 0-52.685 29.042-98.586 71.99-122.569l0.712-497.346c-43.837-24.3-73.019-70.296-73.019-123.108 0-77.479 62.809-140.288 140.288-140.288 58.492 0 108.623 35.797 129.681 86.678l480.939 0.931c21.399-51.812 71.53-87.61 130.022-87.61 77.479 0 140.288 62.809 140.288 140.288 0 52.812-29.183 98.808-72.302 122.743zM207.189 199.509v496.811c27.728 15.333 49.308 38.895 61.769 67.359l483.17 0.908c12.815-29.372 34.395-52.934 61.399-67.899l0.723-497.008c-18.613-10.583-34.070-24.624-45.957-41.377l-514.001-0.436c-12.344 17.098-27.971 31.035-46.046 41.106z" />
|
118 |
+
<glyph unicode="µ" glyph-name="fi-profile-male" horiz-adv-x="1019" d="M978.261 134.144c-43.008 70.997-144.043 85.333-194.56 102.4s-147.627 87.893-147.627 87.893v51.2c19.87 18.419 36.867 39.546 50.502 62.877l0.698 1.294c2.048 3.584 3.755 6.997 5.461 10.24v1.365c1.365 3.072 2.56 5.803 3.584 8.533v1.877c0.943 2.416 1.88 5.437 2.626 8.532 1.791 8.072 3.238 17.391 4.129 26.872 9.117 3.338 13.725-1.612 25.331 28.255 13.141 34.133 35.328 109.909 20.821 125.952-3.371 3.949-8.353 6.437-13.916 6.437-3.855 0-7.432-1.195-10.379-3.234 7.133 29.653 11.189 63.652 11.189 98.599 0 8.856-0.26 17.651-0.774 26.378-6.599 106.316-111.73 167.927-209.010 177.484-107.861 10.581-105.131-8.363-116.736-46.763-78.848 1.195-112.299-71.339-112.299-71.339-19.115-43.691-20.309-100.693-3.584-182.613-2.887 2-6.463 3.195-10.318 3.195-5.563 0-10.546-2.488-13.895-6.412-14.528-16.068 7.659-92.356 20.8-125.977s17.067-24.235 26.965-27.819c0-4.437 1.365-22.187 2.389-26.795 13.335-37.939 35.415-69.97 63.908-94.837l0.263-52.79s-97.28-70.997-147.797-87.893-151.381-31.744-194.389-102.4-41.643-198.656-41.643-198.656h1019.392s1.877 127.147-41.131 198.144z" />
|
119 |
+
<glyph unicode="¶" glyph-name="fi-comments" d="M874.667 10.24c14.028-28.98 36.738-51.911 64.715-65.848 10.549-5.661 2.698-8.392-5.323-8.392h-2.901c-55.804 4.31-106.547 22.826-149.573 51.896-9.11-1.858-20.974-2.539-32.991-2.573-151.772 0-274.823 102.4-274.823 228.864s123.563 228.523 275.456 228.523 274.773-102.571 274.773-229.035c0-88.747-60.757-165.547-149.333-203.435zM400.213 213.675c0 167.253 156.672 303.445 349.013 303.445h13.141c-72.533 97.792-202.24 162.987-350.208 162.987-227.669-0.171-412.16-153.941-412.16-343.723 0-132.779 90.624-247.637 222.891-304.811-1.365-43.349-44.373-73.557-69.973-87.552-9.728-5.291-1.877-8.021 6.144-8.021h2.901c63.522 4.464 120.844 27.848 167.209 64.486 24.295-4.938 52.997-7.484 82.294-7.484 0.184 0 0.369 0 0.553 0 31.177 0.009 61.68 2.99 91.222 8.675-63.547 51.045-102.025 126.912-103.196 211.796z" />
|
120 |
+
<glyph unicode="·" glyph-name="defender" d="M922.965 925.867c-2.901 0-212.309 22.016-330.923 34.133v-358.4l-80.043-36.523-79.531 35.499v359.424c-119.125-12.117-328.533-34.133-331.435-34.133-58.271-12.934-101.199-64.173-101.199-125.438 0-7.354 0.618-14.563 1.806-21.579l87.788-576.951c6.661-42.74 32.169-78.424 67.598-98.803l354.973-167.096 355.157 166.741c36.081 20.752 61.581 56.427 68.166 98.378l87.994 578.315c1.066 6.216 1.675 13.377 1.675 20.679 0 61.596-43.335 113.070-101.18 125.599zM806.059 215.552l-294.059-131.925-294.229 131.925-60.928 378.88 355.157-158.379 354.987 158.379z" />
|
121 |
+
<glyph unicode="¸" glyph-name="fi-sitemap" d="M425.472 558.763h173.056c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933h-173.056c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933zM598.528 203.093h-173.056c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933h173.056c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933zM977.067 203.093h-173.227c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933h173.227c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933zM220.16 203.093h-173.227c-25.921 0-46.933-21.013-46.933-46.933v-173.227c0-25.921 21.013-46.933 46.933-46.933h173.227c25.921 0 46.933 21.013 46.933 46.933v173.227c0 25.921-21.013 46.933-46.933 46.933zM178.005 378.027h290.133v-85.333h89.088v85.333h290.133v-85.333h89.088v85.333c0 49.202-39.886 89.088-89.088 89.088h-669.355c-49.129-0.097-88.917-39.946-88.917-89.088 0 0 0 0 0 0v-85.333h89.088z" />
|
122 |
+
<glyph unicode="º" glyph-name="fi-magnifying-glass-search" d="M1024 39.595l-226.816 226.816c50.818 70.758 81.267 159.126 81.267 254.605 0 242.711-196.756 439.467-439.467 439.467s-439.467-196.756-439.467-439.467c0-242.711 196.756-439.467 439.467-439.467 95.479 0 183.847 30.449 255.922 82.165l225.67-227.715zM146.432 520.704c0 0.051 0 0.111 0 0.171 0 161.744 131.12 292.864 292.864 292.864s292.864-131.12 292.864-292.864c0-161.744-131.12-292.864-292.864-292.864-161.606 0.194-292.573 131.101-292.864 292.665z" />
|
123 |
+
<glyph unicode="»" glyph-name="fi-ab-testing" d="M189.269 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM271.872 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM354.475 574.293c-0.004-16.303-13.222-29.517-29.525-29.517-16.306 0-29.525 13.219-29.525 29.525 0 16.066 12.833 29.135 28.807 29.517 16.342 0.001 29.561-13.218 29.561-29.525zM432.64 240.981l-78.336 174.080c-2.226 4.78-5.679 8.672-9.96 11.37-4.205 2.546-9.154 4.015-14.445 4.015s-10.241-1.469-14.461-4.020c-4.577-2.699-8.239-6.8-10.392-11.713l-78.059-173.39c-1.585-3.025-2.528-6.604-2.56-10.401 0.077-6.843 3.162-12.939 7.989-17.050 4.416-3.949 10.235-6.346 16.615-6.346 0.17 0 0.34 0.002 0.509 0.005 0.137-0.005 0.328-0.007 0.519-0.007 9.718 0 18.031 6.017 21.417 14.528l16.097 36.337h85.333l15.701-35.84c3.406-8.854 11.842-15.023 21.719-15.023 0.165 0 0.329 0.002 0.492 0.005 0.194-0.007 0.452-0.011 0.71-0.011 6.271 0 11.998 2.333 16.359 6.178 4.79 4.102 7.824 10.191 7.824 16.989 0 0.019 0 0.038 0 0.058-0.001 3.785-0.883 7.366-2.452 10.548zM307.2 304.128l22.357 51.2 22.528-51.2zM769.024 313.173v0c-2.73 3.592-5.759 6.73-9.118 9.48 2.097 2.291 4.115 4.688 5.927 7.241 6.795 10.053 10.777 22.229 10.777 35.334 0 18.947-8.322 35.95-21.511 47.554-13.971 10.285-31.428 16.423-50.318 16.423-1.776 0-3.539-0.054-5.288-0.161l-65.125 0.012c-6.616-0.037-12.619-2.629-17.079-6.838-4.461-4.316-7.259-10.353-7.326-17.043v-170.679c0.068-6.703 2.865-12.739 7.332-17.060 4.455-4.204 10.458-6.796 17.066-6.833h68.274c1.251-0.065 2.716-0.101 4.189-0.101 19.515 0 37.524 6.448 52.013 17.329 13.21 11.032 21.697 27.767 21.697 46.483 0 1.062-0.027 2.118-0.081 3.167 0.024 0.403 0.034 1.050 0.034 1.699 0 13.753-4.494 26.456-12.093 36.721zM720.725 351.573c-5.973-3.725-13.226-5.934-20.994-5.934-1.141 0-2.27 0.048-3.386 0.141l-37.742-0.010v37.205h38.4c30.037 0 30.037-12.459 30.037-19.115 0.059-0.532 0.093-1.15 0.093-1.775 0-5.144-2.275-9.756-5.874-12.885zM658.603 297.984h42.496c28.331 0 30.72-11.264 30.72-21.845s-4.096-14.336-5.461-15.36c-6.014-3.57-13.258-5.68-20.995-5.68-1.502 0-2.985 0.079-4.445 0.234l-42.314-0.016zM480.256 174.933c-0.052 0-0.114-0.001-0.177-0.001-15.081 0-27.307 12.226-27.307 27.307 0 3.242 0.565 6.352 1.602 9.236l77.082 221.676c4.534 9.167 13.821 15.36 24.555 15.36 15.081 0 27.307-12.226 27.307-27.307 0-2.117-0.241-4.178-0.697-6.157l-77.106-221.683c-3.733-10.641-13.583-18.182-25.229-18.431zM917.845 42.155h-811.691v586.24h811.691zM976.725 734.72h-929.451c-0.001 0-0.002 0-0.003 0-26.109 0-47.275-21.166-47.275-47.275 0-0.18 0.001-0.36 0.003-0.539v-703.631c0-26.109 21.166-47.275 47.275-47.275h929.451c26.109 0 47.275 21.166 47.275 47.275v703.659c0 26.109-21.166 47.275-47.275 47.275z" />
|
124 |
+
<glyph unicode="¿" glyph-name="fi-clipboard-notes" horiz-adv-x="730" d="M730.453 836.779v0s0 1.195 0 1.707c0 34.404-27.89 62.293-62.293 62.293h-174.251v40.107c0 0.051 0.001 0.111 0.001 0.171 0 10.462-8.482 18.944-18.944 18.944 0 0-0.001 0-0.001 0h-218.965c-10.462 0-18.944-8.482-18.944-18.944v-40.448h-174.763c-34.404 0-62.293-27.89-62.293-62.293s0-1.024 0-1.707v0-837.803c-0.001-0.152-0.002-0.332-0.002-0.512 0-34.404 27.89-62.293 62.293-62.293 0.001 0 0.002 0 0.002 0h605.696c0 0 0 0 0 0 34.344 0 62.196 27.792 62.293 62.113s0 0.009 0 0.009v0 838.656zM612.352 53.931h-494.933v728.747h59.392v-36.352s0 0 0-1.195c0-11.876 9.628-21.504 21.504-21.504h333.312c11.876 0 21.504 9.628 21.504 21.504s0 0 0 0v37.547h59.221zM236.373 553.472c-0.094 7.751-6.4 13.999-14.164 13.999-0.12 0-0.24-0.002-0.36-0.004h-30.702c-7.823 0-14.165-6.342-14.165-14.165v-30.891c0-7.823 6.342-14.165 14.165-14.165h30.72c0.051-0.001 0.111-0.001 0.171-0.001 7.823 0 14.165 6.342 14.165 14.165 0 0 0 0.001 0 0.001v0 31.061zM553.131 553.472c0 7.823-6.342 14.165-14.165 14.165h-229.035c-7.823 0-14.165-6.342-14.165-14.165v-30.891c0-7.823 6.342-14.165 14.165-14.165h229.035c7.823 0 14.165 6.342 14.165 14.165v0 30.891zM236.373 435.029c0 7.823-6.342 14.165-14.165 14.165h-30.72c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h30.379c0.051-0.001 0.111-0.001 0.171-0.001 7.823 0 14.165 6.342 14.165 14.165 0 0 0 0.001 0 0.001v0 30.891zM553.131 435.029c0 7.823-6.342 14.165-14.165 14.165h-229.035c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h229.035c7.823 0 14.165 6.342 14.165 14.165v0 30.891zM236.373 316.587c0 7.823-6.342 14.165-14.165 14.165h-30.72c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h30.379c0.051-0.001 0.111-0.001 0.171-0.001 7.823 0 14.165 6.342 14.165 14.165 0 0 0 0.001 0 0.001v0 30.891zM553.131 316.587c0 7.823-6.342 14.165-14.165 14.165h-229.035c-7.785-0.095-14.070-6.381-14.165-14.156v-30.9c0-7.823 6.342-14.165 14.165-14.165h229.035c7.823 0 14.165 6.342 14.165 14.165v0 30.891z" />
|
125 |
+
<glyph unicode="Á" glyph-name="fi-24-hour-support" horiz-adv-x="968" d="M483.84-64c-267.265 0-483.925 216.661-483.925 483.925s216.661 483.925 483.925 483.925v-136.533c-188.939-4.316-340.452-158.502-340.452-348.075s151.513-343.758 340.051-348.067c0.715-0.008 1.087-0.009 1.459-0.009 80.175 0 153.958 27.369 212.515 73.273l82.363-107.917c-80.231-62.694-182.536-100.528-293.678-100.528-0.794 0-1.588 0.002-2.381 0.006zM779.776 36.864l-82.773 107.691 9.557 7.509 87.040-104.277-13.824-11.093zM874.325 133.632l-109.568 80.555c15.913 21.446 29.882 45.89 40.787 71.935l126.637-48.895c-16.334-39.103-35.678-72.813-58.609-103.702zM963.243 352.256l-134.485 19.115c2.173 14.773 3.413 31.826 3.413 49.17 0 0.114 0 0.228 0 0.341 0.001 0.341 0.002 0.766 0.002 1.191 0 12.136-0.621 24.127-1.832 35.943l135.291 12.342c1.564-14.718 2.455-31.793 2.455-49.077 0-24.288-1.761-48.165-5.163-71.51zM811.691 540.16c-10.574 28.943-23.525 53.955-39.175 76.985l113.415 74.567c20.549-30.843 38.366-66.252 51.687-103.79zM716.8 678.4c-20.26 18.367-43.050 34.571-67.627 47.901l62.166 120.377c36.795-19.902 68.545-42.563 97.156-68.615zM454.656 719.189v240.811l164.181-120.491-164.181-120.32zM364.373 421.547l-79.019-100.693v-39.765h172.032v47.445h-98.987l37.547 53.76c16.256 18.205 30.601 38.703 42.363 60.785 8.105 16.273 12.485 33.435 12.762 51.592 0.106 1.658 0.166 3.486 0.166 5.327 0 21.61-8.231 41.298-21.728 56.1-14.557 13.363-34.134 21.594-55.634 21.594-1.782 0-3.55-0.057-5.303-0.168-0.187 0.020-0.689 0.024-1.193 0.024-16.309 0-31.55-4.575-44.508-12.512-13.059-8.053-23.722-19.647-30.642-33.444-7.22-14.358-11.322-30.733-11.322-48.065 0-0.55 0.004-1.099 0.012-1.647l56.831 0.083c-0.076 1.203-0.119 2.608-0.119 4.024 0 11.841 3.015 22.978 8.318 32.685 4.18 7.434 12.38 12.614 21.789 12.614 0.017 0 0.034 0 0.051 0 0.196 0.007 0.429 0.010 0.663 0.010 8.002 0 14.967-4.442 18.564-10.994 4.401-8.104 6.955-17.616 6.955-27.725 0-1.032-0.027-2.058-0.079-3.077-0.22-10.879-2.84-21.235-7.353-30.5-6.556-13.584-13.945-25.617-22.393-36.807zM585.557 572.928l-98.987-192 2.56-36.352h96.597v-63.488h56.661v63.488h24.917v46.592h-24.747v181.76zM585.557 391.339h-43.861l42.837 95.403 1.195 2.219z" />
|
126 |
+
<glyph unicode="Â" glyph-name="fi-arrow-down" horiz-adv-x="838" d="M439.808-3.755l388.949 388.949c5.46 5.491 8.836 13.061 8.836 21.419s-3.375 15.927-8.837 21.42l-62.463 62.463c-5.491 5.46-13.061 8.836-21.419 8.836s-15.927-3.375-21.42-8.837l-230.399-230.228v621.568c0.001 0.101 0.002 0.221 0.002 0.341 0 14.704-11.92 26.624-26.624 26.624-0.001 0-0.002 0-0.002 0h-95.403c-14.704 0-26.624-11.92-26.624-26.624v-621.909l-230.4 230.229c-5.491 5.46-13.061 8.836-21.419 8.836s-15.927-3.375-21.42-8.837l-62.292-62.463c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l388.948-388.948c5.401-5.38 12.851-8.706 21.077-8.706s15.677 3.326 21.078 8.707z" />
|
127 |
+
<glyph unicode="Å" glyph-name="fi-megaphone" d="M203.435 724.139c-1.755 0.054-3.82 0.085-5.892 0.085-112.354 0-203.435-91.081-203.435-203.435s91.081-203.435 203.435-203.435c2.072 0 4.136 0.031 6.193 0.092 18.037 0.034 33.228 13.458 36.023 31.015l0.028 0.21v338.261c0 20.454-16.581 37.035-37.035 37.035zM1024 890.027c0 0.001 0 0.003 0 0.004 0 20.359-16.505 36.864-36.864 36.864-8.522 0-16.368-2.891-22.611-7.747l-325.549-187.671h-293.717c-20.454 0-37.035-16.581-37.035-37.035v-351.403c2.287-18.335 17.758-32.388 36.519-32.427h261.124l356.011-204.8c6.582-6.206 15.479-10.020 25.266-10.020 20.102 0 36.446 16.090 36.856 36.094 0.001 1.404 0.001 2.769 0.001 4.134v0 751.957s0 1.365 0 2.219zM597.333 29.013v2.731l-115.371 195.755c-5.893 8.039-14.829 13.548-25.079 14.83l-0.18 0.018h-98.304c-19.097-1.524-34.016-17.397-34.016-36.754 0-6.831 1.858-13.229 5.097-18.714 0.889-1.37 1.901-2.707 3.008-3.959l-0.030 0.034 131.755-228.181 1.365-2.219c6.629-9.966 17.812-16.445 30.509-16.445 9.176 0 17.562 3.384 23.978 8.973l-0.044-0.037 68.267 39.083c8.188 6.811 13.363 17.002 13.363 28.402 0 6.076-1.47 11.808-4.073 16.861z" />
|
128 |
+
<glyph unicode="Æ" glyph-name="fi-page-pdf" horiz-adv-x="717" d="M253.44 307.541h-58.368v-109.227h33.109v34.133h25.259c0.757-0.054 1.64-0.085 2.53-0.085 20.736 0 37.547 16.81 37.547 37.547s-16.81 37.547-37.547 37.547c-0.89 0-1.773-0.031-2.648-0.092zM249.173 261.291h-20.992v17.067h20.992c5.632 0 9.899-2.731 9.899-8.704s-4.437-8.533-9.899-8.533zM358.4 307.541h-48.469v-109.227h48.469c34.133 0 59.733 19.797 59.733 54.784s-25.6 54.443-59.733 54.443zM358.4 227.157h-15.36v51.2h15.36c0.742 0.082 1.602 0.128 2.474 0.128 13.196 0 23.893-10.697 23.893-23.893 0-0.706-0.031-1.405-0.091-2.095 0.007 0.033 0.007-0.035 0.007-0.102 0-13.95-11.309-25.259-25.259-25.259-0.36 0-0.719 0.008-1.076 0.022zM438.784 198.315h33.109v40.789h48.64v28.843h-48.64v10.752h49.835v28.843h-82.944v-109.227zM716.8 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-696.32c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM117.931 53.931v557.909h209.749c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139z" />
|
129 |
+
<glyph unicode="Ç" glyph-name="fi-graph-bar" d="M463.531 242.176h-173.397c-10.274 0-18.603-8.329-18.603-18.603v-268.971c0-10.274 8.329-18.603 18.603-18.603h173.397c10.274 0 18.603 8.329 18.603 18.603v269.141c0 10.274-8.329 18.603-18.603 18.603zM733.867 797.867h-173.397c-10.274 0-18.603-8.329-18.603-18.603v-824.661c0-10.274 8.329-18.603 18.603-18.603h173.397c10.274 0 18.603 8.329 18.603 18.603v824.661c0 10.274-8.329 18.603-18.603 18.603zM1005.397 547.328h-173.227c-10.274 0-18.603-8.329-18.603-18.603v-574.123c0-10.274 8.329-18.603 18.603-18.603h173.227c10.274 0 18.603 8.329 18.603 18.603v574.123c0 10.274-8.329 18.603-18.603 18.603zM191.829 547.328h-173.227c-10.274 0-18.603-8.329-18.603-18.603v-574.123c0-10.274 8.329-18.603 18.603-18.603h173.227c10.274 0 18.603 8.329 18.603 18.603v574.123c0 10.274-8.329 18.603-18.603 18.603z" />
|
130 |
+
<glyph unicode="Í" glyph-name="fi-shopping-cart" d="M885.76 796.501l-3.072 6.656c-9.899 20.309-30.72 32.085-46.421 24.747l-341.333-159.061c-15.872-7.339-20.651-30.549-10.752-51.2l3.072-6.656c9.899-21.163 30.72-32.256 46.592-24.917l341.333 159.061c15.872 7.339 20.651 30.379 10.752 51.2zM1014.784 564.224h-1005.568c-5.090 0-9.216-4.126-9.216-9.216v-63.147c-0.009-0.153-0.014-0.332-0.014-0.512 0-5.090 4.126-9.216 9.216-9.216 0.005 0 0.010 0 0.015 0h29.183l48.128-515.072c1.627-17.483 16.225-31.062 33.995-31.062 0.049 0 0.097 0 0.146 0h804.857c0.015 0 0.034 0 0.052 0 18.191 0 33.058 14.23 34.078 32.166l28.847 513.968h26.453c5.090 0 9.216 4.126 9.216 9.216v63.147c0 5.090-4.126 9.216-9.216 9.216zM298.155 100.693c0-12.065-9.78-21.845-21.845-21.845h-114.859c-12.065 0-21.845 9.78-21.845 21.845v83.285c0 12.065 9.78 21.845 21.845 21.845h115.2c12.065 0 21.845-9.78 21.845-21.845zM298.155 275.285c0-12.065-9.78-21.845-21.845-21.845h-114.859c-12.065 0-21.845 9.78-21.845 21.845v83.285c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c12.065 0 21.845-9.78 21.845-21.845zM494.933 101.205c0-12.065-9.78-21.845-21.845-21.845h-115.712c-12.065 0-21.845 9.78-21.845 21.845v82.773c0 12.065 9.78 21.845 21.845 21.845h115.2c0.152 0.004 0.332 0.006 0.512 0.006 12.065 0 21.845-9.78 21.845-21.845 0-0.002 0-0.004 0-0.006zM494.933 275.797c0-12.065-9.78-21.845-21.845-21.845h-115.712c-12.065 0-21.845 9.78-21.845 21.845v82.773c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c0.156 0.004 0.339 0.006 0.522 0.006 11.827 0 21.459-9.399 21.834-21.134zM690.347 101.205c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0 12.065 9.78 21.845 21.845 21.845h115.2c12.065 0 21.845-9.78 21.845-21.845zM690.347 275.797c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c12.065 0 21.845-9.78 21.845-21.845zM886.101 101.205c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0 12.065 9.78 21.845 21.845 21.845h115.2c12.065 0 21.845-9.78 21.845-21.845zM886.101 275.797c0-12.065-9.78-21.845-21.845-21.845h-115.371c-12.065 0-21.845 9.78-21.845 21.845v82.773c0.379 11.768 10.010 21.163 21.835 21.163 0.004 0 0.008 0 0.011 0h115.199c12.065 0 21.845-9.78 21.845-21.845z" />
|
131 |
+
<glyph unicode="Î" glyph-name="fi-storage-server-data" d="M973.995 704h-923.989c-27.758-0.668-50.005-23.329-50.005-51.186 0-0.005 0-0.010 0-0.015v-238.933c0-0.004 0-0.009 0-0.014 0-27.857 22.247-50.518 49.943-51.185l924.051-0.001c27.758 0.668 50.005 23.329 50.005 51.186 0 0.005 0 0.010 0 0.015v238.933c0 0.004 0 0.009 0 0.014 0 27.857-22.247 50.518-49.943 51.185zM137.728 484.864c-26.1 0.853-46.933 22.216-46.933 48.445 0 26.769 21.7 48.469 48.469 48.469 26.76 0 48.455-21.687 48.469-48.444 0-26.77-21.7-48.471-48.469-48.471zM973.995 277.333h-923.989c-27.758-0.668-50.005-23.329-50.005-51.186 0-0.005 0-0.010 0-0.015v-238.933c0-0.004 0-0.009 0-0.014 0-27.857 22.247-50.518 49.943-51.185l924.051-0.001c27.758 0.668 50.005 23.329 50.005 51.186 0 0.005 0 0.010 0 0.015v238.933c0 0.004 0 0.009 0 0.014 0 27.857-22.247 50.518-49.943 51.185zM137.728 58.197c-26.1 0.853-46.933 22.216-46.933 48.445 0 26.769 21.7 48.469 48.469 48.469 26.76 0 48.455-21.687 48.469-48.444 0-26.77-21.7-48.471-48.469-48.471z" />
|
132 |
+
<glyph unicode="Ï" glyph-name="fi-star-line" d="M512 840.533l106.496-301.056h310.272l-242.517-192.512 11.776-33.109 98.133-278.016-258.901 156.16-25.259 15.531-25.259-15.531-258.901-155.307 98.133 278.357 11.776 33.109-27.477 21.845-215.040 170.155h310.272l11.605 32.768 94.891 267.605zM512 939.008c-10.813-0.086-19.955-7.143-23.161-16.893l-117.98-332.803h-346.283c-13.554-0.025-24.532-11.018-24.532-24.576 0-7.796 3.63-14.744 9.292-19.247l270.386-214.055-121.003-342.357c-0.92-2.477-1.453-5.339-1.453-8.325 0-13.573 11.003-24.576 24.576-24.576 4.699 0 9.091 1.319 12.824 3.607l317.333 190.403 317.44-190.293c3.626-2.227 8.017-3.546 12.717-3.546 13.573 0 24.576 11.003 24.576 24.576 0 2.986-0.533 5.848-1.508 8.495l-120.948 342.016 270.507 214.016c5.713 4.541 9.343 11.489 9.343 19.286 0 13.573-11.003 24.576-24.576 24.576-0.045 0-0.089 0-0.134 0h-346.276l-117.931 333.995c-3.255 9.924-12.398 16.98-23.2 17.067z" />
|
133 |
+
<glyph unicode="Ð" glyph-name="fi-cloudflare" horiz-adv-x="1365" d="M932.181 147.968l6.485 24.064c3.108 8.491 4.906 18.294 4.906 28.518 0 17.179-5.076 33.173-13.811 46.562-13.519 17.979-35.017 29.809-59.296 30.22l-492.439 6.316c-3.23 0.028-6.081 1.626-7.831 4.067-1.033 1.574-1.636 3.467-1.636 5.501 0 1.22 0.217 2.39 0.615 3.473 1.735 4.77 6.123 8.241 11.369 8.632l496.854 6.147c65.808 7.31 120.215 49.655 144.631 107.717l28.767 75.238c0.449 1.456 0.708 3.13 0.708 4.864s-0.259 3.408-0.74 4.985c-34.165 145.122-162.656 251.577-316.011 251.577-140.86 0-260.742-89.814-305.504-215.3-24.681 15.744-54.945 26.574-87.739 26.574-80.495 0-145.749-65.254-145.749-145.749 0-12.669 1.616-24.96 4.654-36.678-111.636-2.593-200.583-93.776-200.583-205.734 0-11.059 0.868-21.916 2.539-32.506 0.462-3.568 4.473-7.191 9.33-7.191 0.026 0 0.053 0 0.079 0h909.82c5.306 0.085 9.765 3.616 11.242 8.449zM1096.192 488.448h-15.701c-2.789-0.948-4.845-3.345-5.285-6.271l-19.12-66.603c-3.108-8.491-4.906-18.294-4.906-28.518 0-17.179 5.076-33.173 13.811-46.562 13.826-17.607 35.467-29.027 59.775-29.027 0.095 0 0.189 0 0.284 0.001l104.945-6.315c3.108-0.113 5.824-1.694 7.489-4.065 1.034-1.575 1.637-3.468 1.637-5.502 0-1.22-0.217-2.39-0.615-3.473-1.735-4.77-6.123-8.241-11.369-8.632l-108.929-6.147c-66.085-7.315-120.688-49.968-144.975-108.393l-8.284-21.826c-0.238-0.61-0.376-1.317-0.376-2.056 0-3.097 2.426-5.627 5.482-5.794l375.481-0.001c0.025 0 0.056 0 0.086 0 4.527 0 8.355 2.987 9.623 7.097 6.246 21.661 9.828 46.459 9.828 72.093 0 148.585-120.33 269.066-268.857 269.312z" />
|
134 |
+
<glyph unicode="Ò" glyph-name="fi-page" horiz-adv-x="717" d="M716.8 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-696.32c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM117.931 53.931v557.909h209.749c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139z" />
|
135 |
+
<glyph unicode="Ó" glyph-name="chevron-left" horiz-adv-x="530" d="M469.163 38.4c-5.492-4.91-11.792-9.080-18.644-12.262-7.344-3.354-15.383-5.196-23.852-5.196s-16.508 1.841-23.738 5.146c-7.031 3.224-13.388 7.396-19.008 12.382l-366.854 367.035c-5.463 5.454-9.854 11.98-12.829 19.236-3.048 7.438-4.735 15.621-4.735 24.198s1.687 16.76 4.748 24.235c2.991 7.15 7.377 13.616 12.814 19.027l367.789 365.4c10.89 10.984 25.984 17.784 42.667 17.784s31.777-6.8 42.662-17.78l41.818-43.012c5.397-5.383 9.775-11.785 12.822-18.894 3.056-7.305 4.744-15.342 4.744-23.773s-1.689-16.467-4.746-23.789c-3.067-7.024-7.441-13.367-12.816-18.703l-279.044-281.433 279.040-280.576c5.394-5.385 9.771-11.787 12.821-18.893 3.065-7.145 4.76-15.008 4.76-23.266 0-0.178-0.001-0.357-0.002-0.535 0-0.035 0.001-0.108 0.001-0.182 0-8.477-1.693-16.559-4.76-23.926-2.85-6.986-7.257-13.255-12.781-18.327l-42.021-43.895z" />
|
136 |
+
<glyph unicode="Ô" glyph-name="fi-arrow-up" horiz-adv-x="838" d="M397.824 899.755l-388.949-388.949c-5.46-5.491-8.836-13.061-8.836-21.419s3.375-15.927 8.837-21.42l62.463-62.463c5.491-5.46 13.061-8.836 21.419-8.836s15.927 3.375 21.42 8.837l230.399 230.228v-621.568c-0.001-0.102-0.002-0.222-0.002-0.342 0-14.645 11.824-26.528 26.446-26.623h95.412c14.704 0 26.624 11.92 26.624 26.624v621.909l230.4-230.4c5.491-5.46 13.061-8.836 21.419-8.836s15.927 3.375 21.42 8.837l62.463 62.463c5.46 5.491 8.836 13.061 8.836 21.419s-3.375 15.927-8.837 21.42l-388.948 389.119c-5.401 5.38-12.851 8.706-21.077 8.706s-15.677-3.326-21.078-8.707z" />
|
137 |
+
<glyph unicode="Ø" glyph-name="fi-camera" d="M512 424.107c65.98 0 119.467-53.487 119.467-119.467s-53.487-119.467-119.467-119.467c-65.98 0-119.467 53.487-119.467 119.467s53.487 119.467 119.467 119.467zM976.896 671.061v0h-210.603v35.84c0 26.015-21.089 47.104-47.104 47.104h-414.379c-26.015 0-47.104-21.089-47.104-47.104v-35.328h-210.603c0 0-0.001 0-0.001 0-26.015 0-47.104-21.089-47.104-47.104 0-0.12 0-0.24 0.001-0.36v-640.664c-0.001-0.101-0.001-0.221-0.001-0.341 0-26.015 21.089-47.104 47.104-47.104 0 0 0.001 0 0.001 0h929.792c0 0 0.001 0 0.001 0 26.015 0 47.104 21.089 47.104 47.104 0 0.12 0 0.24-0.001 0.36v640.664c0 26.015-21.089 47.104-47.104 47.104zM515.072 59.904c-134.693 0-243.883 109.19-243.883 243.883s109.19 243.883 243.883 243.883c134.693 0 243.883-109.19 243.883-243.883s-109.19-243.883-243.883-243.883zM961.024 482.133h-186.368v125.952h186.368v-125.952z" />
|
138 |
+
<glyph unicode="Ú" glyph-name="fi-page-search" horiz-adv-x="931" d="M930.645 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-61.952c0.906-10.518 9.641-18.72 20.304-18.773h76.805c10.668 0.053 19.404 8.255 20.304 18.697l0.005 0.076v20.992h210.261c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139h-481.28v35.669c0 11.311-9.169 20.48-20.48 20.48h-76.8c-11.311 0-20.48-9.169-20.48-20.48v-133.12c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM460.8 340.992c-0.095 104.648-84.95 189.444-189.611 189.444-104.719 0-189.611-84.892-189.611-189.611 0-35.638 9.832-68.98 26.931-97.46l-92.979-91.643c-9.826-9.508-15.926-22.815-15.926-37.547 0-28.843 23.381-52.224 52.224-52.224 0.079 0 0.158 0 0.237 0.001 0.060 0 0.146-0.001 0.232-0.001 14.667 0 27.931 6.007 37.466 15.695l95.068 95.068c25.146-13.181 54.934-20.916 86.528-20.916 104.538 0 189.299 84.674 189.44 189.18zM161.109 340.992c0 60.796 49.284 110.080 110.080 110.080s110.080-49.284 110.080-110.080c0-60.796-49.284-110.080-110.080-110.080s-110.080 49.284-110.080 110.080z" />
|
139 |
+
<glyph unicode="ß" glyph-name="fi-mouse-scroll" horiz-adv-x="460" d="M230.229 730.283c-127.152 0-230.229-103.077-230.229-230.229v-333.824c0-127.246 103.154-230.4 230.4-230.4s230.4 103.154 230.4 230.4v333.824c0 0 0 0 0 0 0 127.152-103.077 230.229-230.229 230.229-0.12 0-0.24 0-0.36 0zM274.261 493.739c0-23.093-18.72-41.813-41.813-41.813h-4.096c-23.093 0-41.813 18.72-41.813 41.813v121.685c0 23.093 18.72 41.813 41.813 41.813h4.096c23.093 0 41.813-18.72 41.813-41.813zM238.933 764.928h-17.067c-0.051 0-0.111-0.001-0.171-0.001-13.984 0-25.332 11.288-25.429 25.25v29.364c0.096 13.971 11.444 25.259 25.429 25.259 0.060 0 0.12 0 0.18-0.001h17.057c13.971-0.097 25.259-11.445 25.259-25.429 0 0 0 0 0-0.001v-29.184c-0.096-13.911-11.348-25.163-25.25-25.259zM238.933 879.957h-17.067c-0.051 0-0.111-0.001-0.171-0.001-14.044 0-25.429 11.385-25.429 25.429 0 0 0 0 0 0.001v29.184c0 0 0 0 0 0.001 0 14.044 11.385 25.429 25.429 25.429 0.060 0 0.12 0 0.18-0.001h17.057c13.971-0.097 25.259-11.445 25.259-25.429 0 0 0 0 0-0.001v-29.184c0 0 0 0 0-0.001 0-13.984-11.288-25.332-25.249-25.429z" />
|
140 |
+
<glyph unicode="å" glyph-name="fi-google-analytics" horiz-adv-x="1365" d="M1365.333 740.693c0-67.299-54.557-121.856-121.856-121.856s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856s121.856-54.557 121.856-121.856zM525.141 479.232c-0.291-67.079-54.736-121.344-121.855-121.344-67.299 0-121.856 54.557-121.856 121.856s54.557 121.856 121.856 121.856c0.060 0 0.119 0 0.179 0 67.29 0 121.847-54.557 121.847-121.856zM985.771 224.085c0-0.101 0-0.221 0-0.341 0-67.299-54.557-121.856-121.856-121.856s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856s121.856-54.557 121.856-121.856zM750.933 347.477l-182.955 101.547c-6.88-37.128-25.193-69.147-51.088-93.082l182.843-101.649c6.867 37.132 25.183 69.154 51.087 93.081zM258.048 396.8l-244.565-274.432c-8.403-9.382-13.54-21.84-13.54-35.499 0-29.44 23.866-53.305 53.305-53.305 15.781 0 29.961 6.858 39.721 17.756l244.439 273.117c-33.987 15.219-61.298 40.275-78.923 71.52zM1182.891 580.949c0-25.261-20.478-45.739-45.739-45.739s-45.739 20.478-45.739 45.739c0 25.261 20.478 45.739 45.739 45.739s45.739-20.478 45.739-45.739zM1106.944 482.133c0-25.261-20.478-45.739-45.739-45.739s-45.739 20.478-45.739 45.739c0 25.261 20.478 45.739 45.739 45.739s45.739-20.478 45.739-45.739zM1031.168 383.659c0-25.261-20.478-45.739-45.739-45.739s-45.739 20.478-45.739 45.739c0 25.261 20.478 45.739 45.739 45.739s45.739-20.478 45.739-45.739z" />
|
141 |
+
<glyph unicode="æ" glyph-name="fi-layers" d="M1011.883 558.080l-447.829-260.267c-14.438-8.497-31.806-13.517-50.347-13.517s-35.908 5.019-50.819 13.773l-450.77 260.181c-7.29 4.311-12.102 12.132-12.102 21.077s4.812 16.766 11.989 21.015l435.655 253.161c17.935 10.569 39.513 16.813 62.549 16.813s44.615-6.244 63.135-17.131l438.54-253.122c7.29-4.311 12.102-12.132 12.102-21.077s-4.812-16.766-11.989-21.015zM1011.883 251.904l-182.784 105.643-264.875-153.6c-14.438-8.497-31.806-13.517-50.347-13.517s-35.908 5.019-50.819 13.773l-268.157 154.197-182.784-106.325c-7.29-4.311-12.102-12.132-12.102-21.077s4.812-16.766 11.989-21.015l451.356-260.499c14.438-8.497 31.806-13.517 50.347-13.517s35.908 5.019 50.819 13.773l447.357 259.327c7.29 4.311 12.102 12.132 12.102 21.077s-4.812 16.766-11.989 21.015z" />
|
142 |
+
<glyph unicode="ç" glyph-name="fi-page-multiple" horiz-adv-x="833" d="M816.128 741.205h-38.059v-733.867c0-9.426-7.641-17.067-17.067-17.067h-542.208v-37.205c0-9.426 7.641-17.067 17.067-17.067h580.267c9.426 0 17.067 7.641 17.067 17.067v771.584c0 9.426-7.641 17.067-17.067 17.067zM723.285 61.952v772.096c0 9.426-7.641 17.067-17.067 17.067h-37.547v-733.867c0-9.426-7.641-17.067-17.067-17.067h-542.208v-38.059c0-9.426 7.641-17.067 17.067-17.067h580.267c9.426 0 17.067 7.641 17.067 17.067zM614.4 171.349v771.584c0 9.426-7.641 17.067-17.067 17.067h-580.267c-9.426 0-17.067-7.641-17.067-17.067v-771.584c0-9.426 7.641-17.067 17.067-17.067h580.267c9.426 0 17.067 7.641 17.067 17.067z" />
|
143 |
+
<glyph unicode="÷" glyph-name="fi-gallery-slider" horiz-adv-x="1071" d="M855.552 789.333h-627.883c-23.963-0.096-43.351-19.544-43.351-43.52 0-0.12 0-0.24 0.001-0.36v-416.92c-0.001-0.102-0.001-0.222-0.001-0.342 0-23.976 19.388-43.423 43.342-43.52h627.892c23.963 0.096 43.351 19.544 43.351 43.52 0 0.12 0 0.24-0.001 0.36v416.92c0.001 0.102 0.001 0.222 0.001 0.342 0 23.976-19.388 43.423-43.342 43.52zM541.696 106.667c-23.187 0-41.984 18.797-41.984 41.984s18.797 41.984 41.984 41.984c23.187 0 41.984-18.797 41.984-41.984s-18.797-41.984-41.984-41.984zM344.576 106.667c-23.187 0-41.984 18.797-41.984 41.984s18.797 41.984 41.984 41.984c23.187 0 41.984-18.797 41.984-41.984s-18.797-41.984-41.984-41.984zM738.645 106.667c-23.187 0-41.984 18.797-41.984 41.984s18.797 41.984 41.984 41.984c23.187 0 41.984-18.797 41.984-41.984s-18.797-41.984-41.984-41.984zM123.221 284.16h-106.155c-9.426 0-17.067 7.641-17.067 17.067v346.965c0 9.426 7.641 17.067 17.067 17.067h106.155zM948.224 284.16h105.301c9.426 0 17.067 7.641 17.067 17.067v346.965c0 9.426-7.641 17.067-17.067 17.067h-105.301z" />
|
144 |
+
<glyph unicode="ø" glyph-name="fi-speed-optimize" horiz-adv-x="1160" d="M538.624 958.635c-301.837-22.621-538.165-273.080-538.165-578.737 0-173.836 76.441-329.818 197.543-436.166 5.686-4.946 12.308-7.618 19.554-7.618 10.608 0 19.879 5.727 24.889 14.258l49.396 85.469c2.31 4.011 3.672 8.821 3.672 13.949 0 7.899-3.233 15.043-8.447 20.181-82.576 77.984-133.977 188.212-133.977 310.447 0 235.641 191.025 426.667 426.667 426.667s426.667-191.025 426.667-426.667c0-122.234-51.401-232.463-133.768-310.251-5.423-5.334-8.656-12.478-8.656-20.377 0-5.128 1.362-9.938 3.745-14.087l49.42-85.195c5.056-8.605 14.266-14.29 24.804-14.29 7.17 0 13.725 2.632 18.752 6.982 121.611 106.875 197.976 262.787 197.976 436.536 0 320.472-259.794 580.267-580.267 580.267-14.006 0-27.896-0.496-41.654-1.472zM523.435 278.528l-66.219 75.435c-5.978 6.784-9.626 15.745-9.626 25.558 0 12.899 6.304 24.326 16 31.368l327.963 235.939c6.198 4.395 13.916 7.025 22.248 7.025 11.496 0 21.823-5.008 28.918-12.96l14.881-17.105c5.747-6.717 9.244-15.508 9.244-25.115 0-10.062-3.836-19.227-10.124-26.115l-276.453-295.223c-7.082-7.509-17.098-12.185-28.207-12.185-11.595 0-22 5.094-29.1 13.165z" />
|
145 |
+
<glyph unicode="ı" glyph-name="chevron-down" horiz-adv-x="854" d="M836.267 652.8c5.562-5.106 9.969-11.375 12.847-18.431 2.739-6.961 4.255-14.629 4.255-22.65 0-0.738-0.013-1.472-0.038-2.204 0.004-0.035 0.005-0.201 0.005-0.368 0-8.27-1.695-16.144-4.757-23.293-2.949-6.896-7.151-13.123-12.321-18.397l-366.241-367.094c-5.618-4.978-12.096-9.16-19.153-12.272-7.479-3.363-15.665-5.215-24.282-5.215s-16.803 1.851-24.179 5.178c-7.157 3.155-13.635 7.336-19.334 12.377l-366.001 367.035c-5.157 5.267-9.359 11.493-12.31 18.382-3.064 7.134-4.76 14.985-4.76 23.232 0 0.19 0.001 0.38 0.003 0.57-0.001 0.053-0.001 0.149-0.001 0.246 0 8.455 1.694 16.514 4.76 23.857 2.613 7.223 6.867 13.729 12.297 19.037l42.506 43.359c5.538 4.921 11.896 9.094 18.81 12.263 7.349 3.353 15.388 5.195 23.857 5.195s16.508-1.841 23.738-5.146c7.034-3.211 13.393-7.384 19.004-12.379l281.695-281.021 280.576 279.723c10.689 10.554 25.384 17.073 41.602 17.073 0.314 0 0.628-0.002 0.941-0.007 0.026 0.001 0.112 0.001 0.198 0.001 8.523 0 16.651-1.693 24.065-4.762 6.98-2.849 13.25-7.256 18.322-12.78l43.895-41.509z" />
|
146 |
+
<glyph unicode="Œ" glyph-name="automate" d="M931.499 741.376c0-141.141-51.2-386.901-170.667-609.792-36.712-69.544-71.186-126.737-108.386-181.941 218.772 71.38 372.244 266.908 372.244 498.28 0 110.018-34.701 211.932-93.754 295.393zM195.584 696.32c222.72 119.467 468.48 171.691 609.621 170.667-11.093 7.68-22.357 15.019-34.133 22.016-74.167 44.233-163.566 70.383-259.072 70.383s-184.905-26.15-261.426-71.68c-108.618-64.826-191.31-168.59-228.802-292.023 47.218 29.124 104.353 63.596 163.286 95.149zM529.067-64c56.491 181.589 193.707 568.832 116.907 645.632s-464.043-59.904-645.973-116.565c0-5.632 0-11.435 0-17.067 0-282.77 229.23-512 512-512h17.067z" />
|
147 |
+
<glyph unicode="œ" glyph-name="fi-settings-slider-control" horiz-adv-x="978" d="M803.84 448c-0.001-67.298-54.557-121.854-121.856-121.854s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856 0.24 0 0.48-0.001 0.72-0.002 66.968-0.387 121.136-54.795 121.136-121.854 0-0.001 0-0.001 0-0.002zM494.933 355.328h-462.507c0 0 0 0 0 0-17.909 0-32.427 14.518-32.427 32.427 0 0.060 0 0.12 0 0.18v97.271c0 17.909 14.518 32.427 32.427 32.427h462.507zM868.693 355.328h77.141c17.87 0.096 32.33 14.557 32.427 32.417v97.289c0 17.909-14.518 32.427-32.427 32.427h-77.141zM803.84 838.144c-0.001-67.298-54.557-121.854-121.856-121.854s-121.856 54.557-121.856 121.856c0 67.299 54.557 121.856 121.856 121.856 0.24 0 0.48-0.001 0.72-0.002 66.968-0.387 121.136-54.795 121.136-121.854 0-0.001 0-0.001 0-0.002zM494.933 745.472h-462.507c-17.909 0-32.427 14.518-32.427 32.427v96.768c0 17.909 14.518 32.427 32.427 32.427h462.507zM868.693 745.472h77.141c17.909 0 32.427 14.518 32.427 32.427v96.768c0 17.909-14.518 32.427-32.427 32.427h-77.141zM174.592 57.856c0-67.299 54.557-121.856 121.856-121.856s121.856 54.557 121.856 121.856c0 67.299-54.557 121.856-121.856 121.856s-121.856-54.557-121.856-121.856zM482.816-34.645h463.019c17.909 0 32.427 14.518 32.427 32.427v97.28c0 17.909-14.518 32.427-32.427 32.427h-463.019zM109.568-34.645h-77.141c-17.909 0-32.427 14.518-32.427 32.427v97.28c0.096 17.87 14.557 32.33 32.417 32.427h77.151z" />
|
148 |
+
<glyph unicode="ƒ" glyph-name="fi-profile-female" horiz-adv-x="788" d="M711.68 214.528c-39.595 26.283-125.269 19.797-146.603 59.392-17.067 41.131-64.171 32.939-64.171 32.939v65.536c3.195 3.816 6.339 8.046 9.237 12.452 30.339-12.412 65.302-22.587 101.736-28.338-18.813 47.459 47.064 139.79 48.6 281.443 0.084 2.937 0.131 6.394 0.131 9.862 0 75.089-22.337 144.961-60.728 203.334-10.445 17.137-30.557 29.323-53.516 29.323-4.923 0-9.714-0.56-14.315-1.62 0.427 27.56-40.021 63.912-82.858 73.811-16.314 3.867-35.343 6.496-54.84 7.318-21.109-1.036-40.303-3.657-58.946-7.749-139.312-29.265-210.139-172.625-208.603-314.278s68.267-233.984 46.080-281.771c39.013 6.069 74.036 16.245 107.018 30.285 0.319-5.956 3.462-10.129 6.821-14.114l-0.175-65.494s-47.616 8.192-64.683-32.939c-21.333-39.595-107.008-32.939-146.603-59.392s-75.264-278.528-75.264-278.528h787.627s-36.693 252.245-75.947 278.528z" />
|
149 |
+
<glyph unicode="ˆ" glyph-name="fi-compass" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM512 72.533c-207.365 0-375.467 168.102-375.467 375.467s168.102 375.467 375.467 375.467c207.365 0 375.467-168.102 375.467-375.467-0.677-207.091-168.375-374.79-375.401-375.466zM712.363 684.373l-266.923-159.061c-3.664-2.158-6.653-5.093-8.812-8.595l-161.001-269.080c-2.292-3.744-3.649-8.276-3.649-13.125 0-7.085 2.897-13.493 7.572-18.104l1.027-1.027c4.402-4.357 10.392-7.117 17.025-7.338 4.85 0.045 9.324 1.437 13.117 3.815l269.548 160.877c3.594 2.243 6.524 5.228 8.639 8.757l159.127 267.041c2.009 3.709 3.189 8.12 3.189 12.807 0 7.526-3.044 14.34-7.969 19.279-4.607 4.638-10.99 7.51-18.043 7.51-4.805 0-9.299-1.333-13.132-3.649z" />
|
150 |
+
<glyph unicode="ˇ" glyph-name="fi-price-tag" horiz-adv-x="856" d="M852.139 230.571l-1.024 1.365-362.667 628.224c-3.008 4.722-7.252 8.418-12.281 10.68l-0.178 0.072-148.48 85.333c-3.981 2.308-8.759 3.67-13.856 3.67-3.868 0-7.553-0.785-10.904-2.203l0.184 0.069-2.731-1.707-286.037-164.693c-8.349-4.804-13.934-13.586-14.165-23.69l-0.001-0.032v-170.667c-0.107-0.92-0.169-1.987-0.169-3.067 0-5.155 1.393-9.984 3.824-14.131l-0.071-0.721 362.325-626.005s0-1.536 1.024-2.219c4.975-8.41 13.999-13.962 24.319-13.962 4.774 0 9.27 1.188 13.209 3.284l-0.152-0.074 437.76 251.904c8.432 4.97 14 14.005 14 24.341 0 5.176-1.396 10.025-3.833 14.192zM244.395 725.333c-7.448-4.358-16.4-6.932-25.953-6.932-28.748 0-52.053 23.305-52.053 52.053s23.305 52.053 52.053 52.053c19.158 0 35.898-10.349 44.935-25.762 4.524-7.716 7.118-16.701 7.118-26.292 0-19.195-10.39-35.964-25.853-44.988z" />
|
151 |
+
<glyph unicode="˘" glyph-name="fi-folder" d="M955.733 666.965h-452.096c-24.405 29.184-49.493 60.075-55.979 69.291-6.464 13.33-19.893 22.357-35.431 22.357-0.024 0-0.048 0-0.071 0h-179.367c-12.32-0.019-23.307-5.711-30.491-14.603l-62.010-77.045h-72.021c-37.703 0-68.267-30.564-68.267-68.267v-594.432c0-37.703 30.564-68.267 68.267-68.267h887.467c37.703 0 68.267 30.564 68.267 68.267v595.115c0 37.703-30.564 68.267-68.267 68.267z" />
|
152 |
+
<glyph unicode="˙" glyph-name="fi-book-bookmark" horiz-adv-x="870" d="M870.4 823.467v0c0 12.253-9.933 22.187-22.187 22.187h-46.080v-819.2c-0.085-11.982-9.583-21.717-21.461-22.185l-690.731-0.001c-10.679 0.117-19.552 7.703-21.649 17.775l-0.025 49.126h643.413c12.215 0.096 22.091 9.972 22.187 22.178v844.297c0 0 0 0 0 0.001 0 12.288-9.913 22.26-22.177 22.357h-78.516v-474.283c0-0.022 0-0.048 0-0.074 0-5.844-4.737-10.581-10.581-10.581-3.11 0-5.907 1.342-7.843 3.478l-76.979 76.98c-1.671 2.029-4.184 3.313-6.997 3.313s-5.326-1.284-6.985-3.298l-0.012-0.016-77.483-77.483c-1.866-1.772-4.386-2.871-7.162-2.901-5.812 0.094-10.493 4.776-10.587 10.572v474.292h-406.187c-12.348 0-22.357-10.010-22.357-22.357s0 0 0-0.853v-977.579s0 0 0 0 0 0 0 0v-1.024c0.097-12.274 10.069-22.187 22.357-22.187 0 0 0 0 0.001 0h825.856c12.274 0.097 22.187 10.069 22.187 22.357 0 0 0 0 0 0.001v0z" />
|
153 |
+
<glyph unicode="˚" glyph-name="fi-arrows-out" d="M48.299 244.736l-48.299-289.621c-0.115-0.746-0.181-1.606-0.181-2.481 0-4.608 1.826-8.789 4.794-11.86l-0.005 0.005c3.066-2.963 7.247-4.789 11.855-4.789 0.875 0 1.736 0.066 2.575 0.193l288.162 48.799c7.625 1.814 13.209 8.568 13.209 16.625 0 4.372-1.644 8.361-4.348 11.381l-56.476 56.474 151.552 151.552c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-103.928 104.269c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-151.202-151.544-56.491 56.491c-3.004 2.69-6.992 4.334-11.364 4.334-8.057 0-14.811-5.584-16.602-13.093zM975.701 651.264l48.299 289.621c0.115 0.746 0.181 1.606 0.181 2.481 0 4.608-1.826 8.789-4.794 11.86l0.005-0.005c-3.087 3.078-7.347 4.982-12.051 4.982-0.927 0-1.837-0.074-2.724-0.216l-287.817-48.968c-7.625-1.814-13.209-8.568-13.209-16.625 0-4.372 1.644-8.361 4.348-11.381l56.476-56.474-152.405-151.552c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l104.781-104.439c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l151.543 151.544 56.491-56.491c2.999-2.672 6.975-4.305 11.332-4.305 8.109 0 14.896 5.655 16.635 13.236zM715.264-15.701l290.133-47.957c0.746-0.115 1.606-0.181 2.481-0.181 4.608 0 8.789 1.826 11.86 4.794l-0.005-0.005c2.963 3.066 4.789 7.247 4.789 11.855 0 0.875-0.066 1.736-0.193 2.575l-49.311 287.82c-1.814 7.625-8.568 13.209-16.625 13.209-4.372 0-8.361-1.644-11.381-4.348l-56.474-56.476-151.552 152.405c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-104.439-104.781c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l151.544-151.543-56.491-56.491c-2.672-2.999-4.305-6.975-4.305-11.332 0-8.109 5.655-14.896 13.236-16.635zM308.736 911.701l-289.621 48.299c-0.7 0.102-1.507 0.16-2.329 0.16-4.683 0-8.925-1.886-12.009-4.94l0.001 0.001c-3.065-3.084-4.96-7.335-4.96-12.029 0-0.874 0.066-1.733 0.193-2.572l48.97-287.82c1.814-7.625 8.568-13.209 16.625-13.209 4.372 0 8.361 1.644 11.381 4.348l56.474 56.476 151.552-151.552c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l104.439 103.928c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-151.715 151.202 56.491 56.491c2.672 2.999 4.305 6.975 4.305 11.332 0 8.109-5.655 14.896-13.236 16.635z" />
|
154 |
+
<glyph unicode="˛" glyph-name="graph-bar-2" d="M569.856 960c-10.085 0-18.261-8.176-18.261-18.261-0.035-0.409-0.055-0.885-0.055-1.365s0.020-0.956 0.059-1.427l-0.004 0.062v-433.493c0-10.085 8.176-18.261 18.261-18.261h433.152c0.409-0.035 0.885-0.055 1.365-0.055s0.956 0.020 1.427 0.059c10.024-0.004 18.2 8.172 18.2 18.257-2.666 249.806-204.366 451.626-453.872 454.483zM918.357 400.213c0 10.085-8.176 18.261-18.261 18.261h-398.336c-10.085 0-18.261 8.176-18.261 18.261v397.141c0.028 0.408 0.044 0.885 0.044 1.365s-0.016 0.957-0.048 1.429c0.003 10.021-8.172 18.197-18.258 18.197h-6.144c-0.051 0-0.111 0-0.171 0-253.739 0-459.435-205.696-459.435-459.435s205.696-459.435 459.435-459.435c253.739 0 459.435 205.696 459.435 459.435 0 1.536 0 2.901 0 4.437s0 0 0 0z" />
|
155 |
+
<glyph unicode="˜" glyph-name="chevron-right" horiz-adv-x="531" d="M61.781 857.6c5.489 4.917 11.79 9.088 18.646 12.264 7.34 3.363 15.379 5.211 23.85 5.211s16.51-1.848 23.736-5.162c7.036-3.211 13.395-7.384 19.006-12.379l364.98-367.037c5.487-5.503 9.971-12.010 13.152-19.22 3.337-7.412 5.188-15.597 5.188-24.214s-1.851-16.803-5.178-24.179c-3.217-7.176-7.697-13.623-13.162-19.084l-365.91-365.398c-10.689-10.554-25.384-17.073-41.602-17.073-0.314 0-0.628 0.002-0.941 0.007 0.015-0.001-0.024-0.001-0.062-0.001-8.512 0-16.628 1.693-24.030 4.761-7.018 2.679-13.345 6.922-18.512 12.289l-43.877 43.024c-4.912 5.491-9.082 11.792-12.263 18.645-3.364 7.341-5.212 15.381-5.212 23.851s1.848 16.51 5.162 23.736c3.219 7.034 7.392 13.392 12.381 19.008l281.020 281.351-279.723 280.576c-5.394 5.385-9.771 11.787-12.821 18.893-3.381 7.189-5.369 15.135-5.609 23.519-0.003 0.196-0.003 0.329-0.003 0.462 0 8.478 1.694 16.561 4.761 23.928 2.85 6.986 7.257 13.255 12.781 18.327l43.387 43.895z" />
|
156 |
+
<glyph unicode="˝" glyph-name="chevron-up" horiz-adv-x="853" d="M17.067 244.736c-4.926 5.536-9.099 11.895-12.264 18.811-3.343 7.338-5.179 15.366-5.179 23.822 0 8.746 1.964 17.033 5.474 24.444 3.18 6.706 7.231 12.776 12.035 18.159l366.185 365.664c5.619 4.975 12.097 9.157 19.152 12.272 7.482 3.354 15.667 5.199 24.283 5.199s16.801-1.845 24.181-5.162c7.155-3.158 13.632-7.339 19.333-12.378l366-367.035c5.397-5.383 9.775-11.785 12.822-18.894 2.75-6.785 4.259-14.202 4.259-21.972 0-0.453-0.005-0.905-0.015-1.356 0.002-0.015 0.002-0.111 0.002-0.208 0-8.455-1.694-16.514-4.76-23.857-2.613-7.223-6.867-13.729-12.297-19.037l-42.506-43.359c-5.537-4.924-11.896-9.096-18.811-12.264-7.346-3.363-15.385-5.211-23.856-5.211s-16.51 1.848-23.736 5.162c-6.969 3.225-13.27 7.396-18.832 12.376l-281.869 281.025-280.576-279.723c-10.714-10.555-25.431-17.072-41.671-17.072-0.29 0-0.58 0.002-0.869 0.006 0.011-0.001-0.027-0.001-0.066-0.001-8.512 0-16.628 1.693-24.030 4.761-6.981 2.849-13.251 7.256-18.323 12.78l-44.066 41.509z" />
|
157 |
+
<glyph unicode="Ω" glyph-name="fi-zip" horiz-adv-x="288" d="M0 960h192v-128h-192v128zM242.347 479.915h-196.779c-25.167 0-45.568-20.401-45.568-45.568v-452.779c0-25.167 20.401-45.568 45.568-45.568h196.779c25.167 0 45.568 20.401 45.568 45.568v452.779c0 25.167-20.401 45.568-45.568 45.568zM229.376-0.171h-170.667c-5.844 0-10.581 4.737-10.581 10.581v107.008c0 5.844 4.737 10.581 10.581 10.581h170.667c5.844 0 10.581-4.737 10.581-10.581v-106.837c0-5.844-4.737-10.581-10.581-10.581zM96.085 800.085h192v-128h-192v128zM0 640h192v-128h-192v128z" />
|
158 |
+
<glyph unicode="π" glyph-name="fi-academy" horiz-adv-x="1353" d="M676.352 42.325c-73.045 0-382.976 69.973-382.976 210.091v157.013l370.859-151.723c3.558-1.498 7.693-2.369 12.032-2.369s8.474 0.87 12.241 2.446l366.553 149.938 4.096-2.048v-153.6c0-140.117-309.76-210.091-382.805-210.091zM1266.517 21.333l-71.851 87.211-72.021-87.211v403.968c0 3.755 0 18.603 0 18.603l-201.728 102.4 345.941-76.8zM1184.427 529.067l-394.069 77.312c-0.322 0.050-0.694 0.079-1.072 0.079-4.053 0-7.339-3.286-7.339-7.339 0-2.399 1.151-4.529 2.931-5.868l212.328-140.814-320.853-131.243-676.352 276.821 676.352 276.651 676.352-276.651z" />
|
159 |
+
<glyph unicode="–" glyph-name="fi-zoom-out" d="M584.875 960c-0.154 0-0.336 0-0.519 0-242.522 0-439.125-196.603-439.125-439.125 0-95.43 30.441-183.75 82.142-255.779l-227.372-225.501 103.595-103.595 226.816 226.816c70.664-50.695 158.892-81.067 254.214-81.067 242.522 0 439.125 196.603 439.125 439.125 0 242.434-196.461 438.983-438.862 439.125zM584.875 228.011c-0.051 0-0.111 0-0.171 0-161.744 0-292.864 131.12-292.864 292.864s131.12 292.864 292.864 292.864c161.744 0 292.864-131.12 292.864-292.864 0-0.060 0-0.12 0-0.18-0.291-161.524-131.161-292.393-292.666-292.684zM772.608 571.563h-375.467c-6.221 0-11.264-5.043-11.264-11.264v-78.165c0-6.221 5.043-11.264 11.264-11.264h375.467c6.221 0 11.264 5.043 11.264 11.264v77.995c0 6.221-5.043 11.264-11.264 11.264z" />
|
160 |
+
<glyph unicode="—" glyph-name="hustle" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM862.891 419.328c-4.096-39.595-19.456-114.005-77.824-159.061-34.957-26.992-79.245-43.462-127.358-44.031-0.805-0.012-1.601-0.019-2.398-0.019-19.34 0-37.801 3.767-54.688 10.607-33.156 14.157-67.29 50.85-65.412 92.834v1.877l17.067 93.184c2.684 11.537 4.293 24.827 4.436 38.469 0.001 23.654-13.311 26.555-23.21 26.555-28.331 0-66.219-37.205-77.653-96.939l-23.040-110.592h-7.851c-0.173-0.001-0.379-0.002-0.584-0.002-28.781 0-54.469 13.242-71.304 33.966-20.101 24.234-24.027 58.879-12.763 109.226l63.829 256-20.821-11.264c-76.89-45.504-127.642-128.014-127.642-222.379 0-142.167 115.196-257.429 257.338-257.536 0.138 0 0.29 0 0.443 0 24.827 0 48.825 3.553 71.511 10.179l6.563 1.939 36.181-89.429-9.899-3.072c-32.113-10.603-69.078-16.718-107.47-16.718-195.394 0-353.792 158.398-353.792 353.792 0 133.919 74.407 250.459 184.134 310.535 25.211 13.761 52.281 24.364 80.775 31.338l6.231 1.501 7.339 35.157h113.835l-50.176-256-2.901-15.019 12.8 8.363c20.948 14.322 46.83 22.87 74.709 22.87 0.075 0 0.151 0 0.226 0 55.626 0 90.271-36.693 90.271-95.573-0.524-21.184-2.675-41.483-6.338-61.251l-14.824-78.013c-0.309-1.655-0.486-3.559-0.486-5.504 0-6.907 2.23-13.294 6.010-18.479 4.456-4.2 10.577-6.837 17.315-6.837 0.792 0 1.576 0.036 2.349 0.108 63.901-0.007 86.258 74.062 89.33 117.923 0.662 6.619 1.040 14.305 1.040 22.079 0 54.114-18.303 103.953-49.057 143.665-35.194 40.291-79.737 72.393-130.243 92.845l16.979 94.18c69.482-23.968 128.484-63.065 175.37-113.566 42.976-47.054 71.974-107.047 80.465-173.451 1.803-13.898 2.737-28.141 2.737-42.602 0-11.217-0.562-22.302-1.661-33.23z" />
|
161 |
+
<glyph unicode="‘" glyph-name="fi-community-people" d="M1006.933 206.507l-174.251 82.773c41.455 28.313 68.313 75.348 68.313 128.655 0 1.33-0.017 2.656-0.050 3.978 0.004 82.919-57.852 150.162-129.191 150.162-25.188-0.030-48.474-8.152-67.404-21.904 11.888-28.284 18.593-61.357 18.593-95.996 0-0.070 0-0.141 0-0.211 0-0.031 0-0.081 0-0.131 0-51.921-15.274-100.275-41.573-140.813 9.235-8.759 19.124-17.128 30.090-23.927l0.561-0.324 111.787-53.248c30.676-16.277 51.214-48.016 51.214-84.552 0-0.575-0.005-1.148-0.015-1.721l0.001-144.981h119.467c16.264 1.302 28.97 14.821 28.97 31.308 0 0.995-0.046 1.978-0.137 2.949l0.009 136.409c0.025 0.492 0.040 1.069 0.040 1.649 0 12.584-6.809 23.577-16.945 29.496zM314.539 289.621c9.565 6.404 17.855 13.609 25.152 21.725-26.524 40.018-42.391 89.074-42.391 141.835 0 0.278 0 0.557 0.001 0.835 0-0.022 0 0.003 0 0.028 0 35.404 7.023 69.167 19.751 99.973-18.433 10.702-40.452 18.255-64.218 18.569-71.416 0.001-129.272-67.242-129.272-150.357-0.034-1.201-0.053-2.615-0.053-4.033 0-53.923 27.603-101.4 69.45-129.070l-174.869-82.619c-10.863-5.857-18.121-17.153-18.121-30.144 0-0.503 0.011-1.003 0.032-1.5l-0.002-138.169c-0.081-0.847-0.127-1.83-0.127-2.825 0-16.487 12.706-30.007 28.859-31.301l115.823-0.007v145.067c-0.006 0.392-0.009 0.856-0.009 1.32 0 37.149 21.309 69.32 52.37 84.959zM800.597 187.221l-214.699 102.229c28.689 18.918 51.133 45.202 64.919 76.188 12.279 26.534 19.194 56.282 19.22 87.643-0.152 18.264-2.571 35.885-6.988 52.696-18.612 76.678-79.711 135.046-153.268 135.046s-131.584-56.491-151.381-132.949c-4.769-16.314-7.621-35.084-7.849-54.485-0.002-0.29-0.002-0.481-0.002-0.673 0-32.828 7.622-63.876 21.193-91.47 14.181-29.538 36.602-54.589 64.276-72.084l-60.551-29.096-155.648-72.533c-13.416-7.233-22.379-21.184-22.379-37.228 0-0.472 0.008-0.942 0.023-1.411l-0.002-170.598c-0.112-1.107-0.176-2.392-0.176-3.692 0-20.471 15.808-37.25 35.883-38.796l553.946-0.008c20.092 1.681 35.762 18.402 35.762 38.784 0 0.946-0.034 1.884-0.1 2.812l0.007 170.542c0.016 0.427 0.024 0.929 0.024 1.432 0 15.977-8.889 29.878-21.99 37.028z" />
|
162 |
+
<glyph unicode="’" glyph-name="fi-indent-more" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM967.339 82.261h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005zM1017.515 324.779c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM1017.515 615.765c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.251c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM8.363 332.8c2.346 0.014 4.461 0.992 5.971 2.557l182.445 105.304c2.555 1.415 4.258 4.092 4.267 7.167 0 0.015 0 0.031 0 0.047 0 3.382-2.008 6.296-4.897 7.613l-0.052 0.021-181.931 105.301c-1.502 1.45-3.549 2.343-5.805 2.343-4.542 0-8.239-3.622-8.36-8.135v-213.856c0-4.619 3.744-8.363 8.363-8.363z" />
|
163 |
+
<glyph unicode="‚" glyph-name="upfront" horiz-adv-x="1000" d="M604.501 902.144l82.603-15.189 16.043-200.021-71.68 47.616-173.568 31.915zM166.912 374.955l3.755 125.952-90.112-84.139zM823.808 379.733l153.6 74.069-19.968 254.464-168.789 113.493zM831.829 277.333v0c-59.051-28.672-142.848-68.267-233.301-111.616l184.32-89.429c113.835 54.443 217.429 104.789 217.088 107.691l-13.653 168.277zM175.787 635.733v0l311.296 287.403-196.949 36.864-271.872-251.733-7.68-226.133zM5.973 345.6l-5.973-173.739 488.107-235.861s84.139 39.595 183.979 86.869z" />
|
164 |
+
<glyph unicode="‛" glyph-name="fi-mobile-signal" horiz-adv-x="498" d="M469.845 677.717h-442.539c-15.219-0.658-27.307-13.155-27.307-28.476 0-0.069 0-0.138 0.001-0.206v-684.533c0-0.007 0-0.016 0-0.025 0-15.321 12.088-27.818 27.247-28.474l442.598-0.002c15.741 0 28.501 12.76 28.501 28.501v684.544c0 15.741-12.76 28.501-28.501 28.501zM249.856-34.475c-15.458 0-27.989 12.531-27.989 27.989s12.531 27.989 27.989 27.989c15.458 0 27.989-12.531 27.989-27.989s-12.531-27.989-27.989-27.989zM384.683 50.005h-271.019v514.048h271.019v-514.048zM472.917 839.68c2.291 2.879 3.676 6.569 3.676 10.581s-1.385 7.702-3.703 10.616l0.027-0.035-11.435 11.435-0.683 1.024c-54.197 53.869-128.896 87.166-211.371 87.166s-157.174-33.297-211.386-87.181l-12.273-12.273c-2.388-2.913-3.835-6.677-3.835-10.779 0-4.556 1.785-8.696 4.695-11.756l-0.007 0.007 21.675-23.723c2.879-2.291 6.569-3.676 10.581-3.676s7.702 1.385 10.616 3.703l-0.035-0.027 12.288 12.288c42.781 42.506 101.736 68.778 166.827 68.778s124.046-26.272 166.839-68.791l12.275-12.275c2.913-2.388 6.677-3.835 10.779-3.835 4.556 0 8.696 1.785 11.756 4.695l21.497 21.497zM388.608 776.363v0l-12.117 12.971c-32.541 32.045-77.233 51.831-126.545 51.831-49.739 0-94.777-20.13-127.41-52.688l-12.285-12.285c-2.388-2.913-3.835-6.677-3.835-10.779 0-4.556 1.785-8.696 4.695-11.756l21.838-21.838c2.879-2.291 6.569-3.676 10.581-3.676s7.702 1.385 10.616 3.703l-0.035-0.027 12.288 12.288c21.169 20.936 50.29 33.869 82.432 33.869s61.263-12.933 82.443-33.879l-0.011 0.010 12.288-12.288c2.913-2.388 6.677-3.835 10.779-3.835 4.556 0 8.696 1.785 11.756 4.695l-0.007-0.007 22.869 22.528c2.291 2.879 3.676 6.569 3.676 10.581s-1.385 7.702-3.703 10.616z" />
|
165 |
+
<glyph unicode="“" glyph-name="fi-mobile" horiz-adv-x="688" d="M648.533 960h-610.816c-21.026-0.939-37.717-18.214-37.717-39.387 0-0.013 0-0.026 0-0.039v-945.15c0-0.060-0.001-0.13-0.001-0.201 0-21.139 16.71-38.375 37.641-39.221l610.893-0.002c21.773 0 39.424 17.651 39.424 39.424v945.152c0 21.773-17.651 39.424-39.424 39.424zM344.917-23.211c-21.302 0-38.571 17.269-38.571 38.571s17.269 38.571 38.571 38.571c21.302 0 38.571-17.269 38.571-38.571s-17.269-38.571-38.571-38.571zM531.115 93.355h-374.101v709.803h374.101v-709.803z" />
|
166 |
+
<glyph unicode="”" glyph-name="fi-indent-less" horiz-adv-x="1018" d="M967.339 960h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.251c0 27.617-22.388 50.005-50.005 50.005zM967.339 82.261h-917.333c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-0.051 0-0.111 0-0.171 0-27.617 22.388-50.005 50.005-50.005 0 0 0 0 0 0h917.333c27.617 0 50.005 22.388 50.005 50.005v46.080c0 27.617-22.388 50.005-50.005 50.005zM1017.515 324.779c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.080c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM1017.515 615.765c0 27.617-22.388 50.005-50.005 50.005h-570.197c-27.617 0-50.005-22.388-50.005-50.005v-46.251c0-27.617 22.388-50.005 50.005-50.005h570.027c27.617 0 50.005 22.388 50.005 50.005v0 46.080zM0 448c0-0.014 0-0.030 0-0.046 0-3.382 2.008-6.296 4.897-7.613l0.052-0.021 181.76-104.96c1.481-1.476 3.525-2.389 5.783-2.389 0.007 0 0.014 0 0.021 0-0.001 0 0 0 0.001 0 4.559 0 8.265 3.647 8.361 8.183v213.684c0 4.619-3.744 8.363-8.363 8.363-0.007 0-0.016 0-0.024 0-2.341 0-4.453-0.982-5.945-2.556l-182.446-105.305c-2.468-1.442-4.1-4.079-4.1-7.097 0-0.085 0.001-0.17 0.004-0.254z" />
|
167 |
+
<glyph unicode="„" glyph-name="pulse" d="M953.344 795.136c-50.228 49.253-119.1 79.651-195.072 79.651s-144.844-30.398-195.117-79.695c-38.696-39.38-43.475-51.156-51.155-51.156s-12.971 12.288-51.2 51.2c-50.201 49.243-119.044 79.636-194.987 79.636s-144.786-30.393-195.031-79.679c-87.849-88.021-85.289-210.559-38.185-319.615l60.587 29.355 35.328 57.003c9.871 16.236 27.465 26.915 47.553 26.915 1.283 0 2.556-0.044 3.817-0.129 20.718-0.759 38.662-12.655 47.979-29.897l40.085-76.59 89.088 160.939c9.915 17.658 28.522 29.393 49.87 29.393 24.834 0 45.958-15.88 53.773-38.040l79.653-219.535 35.84 61.611c10.096 17.054 28.392 28.315 49.32 28.331h120.834l116.907-56.832-117.248-56.832h-88.235l-80.725-138.411c-10.043-16.964-28.248-28.16-49.069-28.16-0.029 0-0.058 0-0.087 0h-5.115c-22.365 2.055-40.84 16.756-48.34 36.812l-78.294 216.116-79.189-143.36c-9.525-17.627-27.868-29.4-48.96-29.4-0.788 0-1.572 0.016-2.352 0.049-21.388 0.143-40.036 12.205-49.574 29.902l-43.839 82.905c-10.219-16.096-27.949-26.624-48.139-26.624-0.056 0-0.112 0-0.168 0l-60.066 22.869c2.219-3.584 4.096-7.509 6.315-11.093 92.843-143.531 361.131-381.44 441.856-381.44s348.843 238.933 441.515 382.123c79.531 123.563 107.861 283.819 0 392.533z" />
|
168 |
+
<glyph unicode="†" glyph-name="fi-target" d="M586.581 478.037c3.74-8.972 5.913-19.395 5.913-30.326 0-44.583-36.142-80.725-80.725-80.725s-80.725 36.142-80.725 80.725c0 44.583 36.142 80.725 80.725 80.725 10.715 0 20.942-2.088 30.298-5.878l129.165 129.9c-43.229 33.318-98.153 53.401-157.767 53.401-143.459 0-259.755-116.296-259.755-259.755s116.296-259.755 259.755-259.755c143.459 0 259.755 116.296 259.755 259.755 0 61.341-21.262 117.715-56.819 162.156zM930.987 742.229l-40.96-40.96-60.757 19.797-23.040-23.040c56.894-66.802 91.503-154.104 91.503-249.489 0-213.114-172.763-385.877-385.877-385.877s-385.877 172.763-385.877 385.877c0 213.114 172.763 385.877 385.877 385.877 95.385 0 182.687-34.609 250.034-91.955l19.424 20.42-29.355 63.488 46.251 46.251c-80.54 55.050-180.045 87.906-287.225 87.906-283.43 0-513.195-229.765-513.195-513.195s229.765-513.195 513.195-513.195c283.43 0 513.195 229.765 513.195 513.195 0 110.456-34.896 212.762-94.264 296.494zM915.968 852.309l-43.179 94.72-74.581-74.581 43.179-94.72 94.72-30.549 74.581 74.581-94.72 30.549z" />
|
169 |
+
<glyph unicode="‡" glyph-name="smush" d="M955.733 702.805v0l-442.709-766.805c282.175 0.786 510.618 229.714 510.618 511.998 0 93.773-25.209 181.658-69.22 257.247zM295.765 628.565l216.235-374.443 216.235 374.443h-432.469zM131.243 789.333h762.368c-93.934 105.383-230.060 171.426-381.611 171.426s-287.677-66.043-381.167-170.92zM68.267 702.293v0c-42.518-73.027-67.616-160.731-67.616-254.297 0-282.121 228.18-510.948 510.054-511.996z" />
|
170 |
+
<glyph unicode="•" glyph-name="fi-magnifying-search-glass-love" d="M1024 33.451l-242.859 242.859c52.055 49.795 98.806 104.294 139.851 163.072 79.456 122.966 106.762 278.272 2.314 382.891-48.581 47.564-115.156 76.915-188.587 76.915s-140.006-29.351-188.634-76.961c-37.841-38.183-42.449-49.959-50.129-49.959s-12.459 11.776-49.835 50.005c-47.787 47.673-113.742 77.152-186.583 77.152-0.824 0-1.648-0.004-2.47-0.011-0.446 0.005-1.122 0.008-1.799 0.008-72.973 0-139.062-29.471-187.015-77.16-104.265-104.607-76.959-259.743 0.012-379.38 89.941-139.435 349.696-370.347 427.691-370.347 34.987 0 106.837 46.592 183.296 110.421l247.296-246.955zM495.957 218.453c-76.117 44.373-245.419 195.413-311.808 299.008-14.848 22.869-85.333 140.629-18.091 207.701 22.936 22.589 54.438 36.537 89.198 36.537 0.682 0 1.362-0.005 2.041-0.016 0.539 0.013 1.297 0.020 2.056 0.020 34.352 0 65.51-13.678 88.323-35.886 13.113-13.285 20.793-22.33 27.108-29.498 28.176-36.777 71.691-60.581 120.811-61.778 49.504 1.197 93.019 25.001 120.919 61.403 6.59 7.542 14.441 17.441 27.411 29.9 23.627 22.433 55.642 36.231 90.88 36.231s67.253-13.798 90.938-36.285c66.673-66.847-3.471-184.607-18.319-207.647-66.219-102.4-235.691-254.635-311.637-299.008z" />
|
171 |
+
<glyph unicode="…" glyph-name="fi-more" d="M236.715 448c0-65.32-52.952-118.272-118.272-118.272s-118.272 52.952-118.272 118.272c0 65.32 52.952 118.272 118.272 118.272s118.272-52.952 118.272-118.272zM630.272 448c0-65.32-52.952-118.272-118.272-118.272s-118.272 52.952-118.272 118.272c0 65.32 52.952 118.272 118.272 118.272s118.272-52.952 118.272-118.272zM1024 448c0-65.32-52.952-118.272-118.272-118.272s-118.272 52.952-118.272 118.272c0 65.32 52.952 118.272 118.272 118.272s118.272-52.952 118.272-118.272z" />
|
172 |
+
<glyph unicode="‰" glyph-name="fi-microphone-audio" horiz-adv-x="700" d="M699.733 459.605v0 197.632c0 28.748-23.305 52.053-52.053 52.053s-52.053-23.305-52.053-52.053v-196.096c0-135.965-110.222-246.187-246.187-246.187s-246.187 110.222-246.187 246.187v196.096c0 28.748-23.305 52.053-52.053 52.053s-52.053-23.305-52.053-52.053v-197.632h0.853c0.808-174.389 128.953-318.607 296.193-344.497l1.961-75.002h-183.979c-28.701 0-51.968-23.267-51.968-51.968s23.267-51.968 51.968-51.968h471.552c28.748 0 52.053 23.305 52.053 52.053s-23.305 52.053-52.053 52.053h-183.467v74.581c168.91 26.444 296.718 170.557 297.472 344.667zM173.909 462.507c0-97.461 79.008-176.469 176.469-176.469s176.469 79.008 176.469 176.469c0 1.365 0 2.56 0 3.925v0 321.024c0 97.367-78.932 176.299-176.299 176.299s-176.299-78.932-176.299-176.299v0-321.024c0-1.365 0-2.56 0-3.925z" />
|
173 |
+
<glyph unicode="‹" glyph-name="wpmudev-logo" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM847.019 345.6c0.009-0.584 0.014-1.273 0.014-1.964 0-35.154-12.93-67.288-34.294-91.906-20.619-23.931-51.098-39.171-85.143-39.421-66.262 0-119.51 59.733-119.51 133.12v204.971c0.271 1.352 0.427 2.905 0.427 4.495 0 13.196-10.697 23.893-23.893 23.893s-23.893-10.697-23.893-23.893c0-1.59 0.155-3.144 0.452-4.647l-0.025-204.648c0.011-0.64 0.017-1.395 0.017-2.151 0-35.094-12.934-67.168-34.294-91.714-20.621-23.935-51.101-39.175-85.146-39.425-66.262 0-119.51 59.733-119.51 133.12v204.971c0.049 0.602 0.078 1.304 0.078 2.012 0 13.487-10.225 24.586-23.346 25.967-14.416-0.145-25.952-11.776-25.952-26.101 0-0.661 0.025-1.317 0.073-1.965l-0.005-390.74-96.427-75.093v465.92c-0.008 0.565-0.013 1.233-0.013 1.901 0 35.174 12.929 67.328 34.294 91.97 20.643 23.895 51.106 39.122 85.133 39.42 66.271 0 119.519-59.733 119.519-133.29v-204.8c-0.049-0.598-0.077-1.294-0.077-1.996 0-13.453 10.24-24.514 23.351-25.814 13.942 0.61 24.924 11.977 24.924 25.908 0 0.669-0.025 1.333-0.075 1.989l0.005 204.713c0 73.387 53.931 133.291 119.467 133.291s119.467-59.733 119.467-133.291v-204.8c0-13.337 10.812-24.149 24.149-24.149s24.149 10.812 24.149 24.149v390.827l96.427 74.923z" />
|
174 |
+
<glyph unicode="›" glyph-name="wpmudev-logo-2" d="M771.413 363.861c0.004-0.373 0.007-0.813 0.007-1.254 0-29.18-10.801-55.837-28.623-76.191-17.051-19.741-42.228-32.293-70.341-32.464-54.643 0-99.187 49.323-99.187 109.909v168.277c0.163 0.95 0.256 2.044 0.256 3.16 0 10.84-8.787 19.627-19.627 19.627s-19.627-8.787-19.627-19.627c0-1.116 0.093-2.21 0.272-3.275l-0.016-168.162c0.005-0.41 0.008-0.895 0.008-1.381 0-29.139-10.803-55.756-28.622-76.062-17.016-19.703-42.123-32.243-70.163-32.466-54.652 0-99.025 49.322-99.025 109.909v168.277c0.040 0.492 0.063 1.066 0.063 1.644 0 11.117-8.436 20.264-19.256 21.388-11.005-1.124-19.441-10.271-19.441-21.388 0-0.579 0.023-1.152 0.068-1.719l-0.005-322.144-79.701-61.952v384.171c-0.004 0.354-0.006 0.772-0.006 1.191 0 29.2 10.8 55.877 28.623 76.256 17.062 19.722 42.232 32.268 70.336 32.462 54.647 0 99.021-49.322 99.021-109.909v-168.277c-0.163-0.95-0.256-2.044-0.256-3.16 0-10.84 8.787-19.627 19.627-19.627s19.627 8.787 19.627 19.627c0 1.116-0.093 2.21-0.272 3.275l0.016 168.162c0 60.587 44.373 109.909 99.157 109.909s98.987-49.323 98.987-109.909v-168.277c-0.163-0.95-0.256-2.044-0.256-3.16 0-10.84 8.787-19.627 19.627-19.627s19.627 8.787 19.627 19.627c0 1.116-0.093 2.21-0.272 3.275l0.016 322.104 79.531 61.952zM512 874.667c235.641 0 426.667-191.025 426.667-426.667s-191.025-426.667-426.667-426.667c-235.641 0-426.667 191.025-426.667 426.667s191.025 426.667 426.667 426.667zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512z" />
|
175 |
+
<glyph unicode="⁄" glyph-name="fi-wrench-tool" d="M985.6 795.307l-162.133-162.133c-2.102-0.132-4.559-0.207-7.034-0.207-65.98 0-119.467 53.487-119.467 119.467 0 2.475 0.075 4.931 0.224 7.369l62.106 61.788 100.011 100.011c1.55 1.519 2.51 3.634 2.51 5.973s-0.961 4.454-2.509 5.972c-0.592 0.532-1.266 0.988-1.998 1.344l-0.052 0.023h-1.365c-33.663 15.322-73.006 24.252-114.435 24.252-155.806 0-282.112-126.306-282.112-282.112 0-30.298 4.776-59.48 13.616-86.835l-294.958-292.404c-98.646-1.646-177.982-81.999-177.982-180.883 0-99.912 80.995-180.907 180.907-180.907 98.884 0 179.237 79.336 180.881 177.827l294.402 294.725c25.684-8.52 55.252-13.435 85.968-13.435 155.618 0 281.771 126.153 281.771 281.771 0 41.642-9.033 81.175-25.248 116.745l0.72-0.228c-0.311 0.584-0.651 1.087-1.036 1.551-1.507 1.535-3.622 2.495-5.961 2.495s-4.454-0.961-5.972-2.509zM256 116.907c-0.194-41.137-33.587-74.41-74.751-74.41-41.284 0-74.752 33.468-74.752 74.752 0 41.164 33.273 74.557 74.391 74.751 0.12 0.001 0.24 0.001 0.361 0.001 41.284 0 74.752-33.468 74.752-74.752 0-0.12 0-0.241-0.001-0.361z" />
|
176 |
+
<glyph unicode="€" glyph-name="devman" horiz-adv-x="989" d="M670.208 850.091c-46.763 109.909-175.275 109.909-175.275 109.909s-129.195 0-175.787-109.909c-53.76-126.635-156.501-549.547-156.501-549.547s80.043-109.909 332.288-109.909 332.117 109.909 332.117 109.909-102.4 422.912-156.501 549.547zM693.077 696.491l-106.325-62.464-68.267 62.464zM484.181 696.491l-71.168-61.611-103.424 62.464zM494.933 265.899c-109.909-119.467-269.483 27.477-269.483 27.477s14.848 65.195 95.573 110.933c-94.379 83.456-55.979 211.285-55.979 211.285l114.859-64 115.029 61.611 115.029-61.611 114.859 64s38.4-127.659-55.979-211.285c80.725-45.739 95.573-110.933 95.573-110.933s-159.915-146.944-269.483-27.477zM769.365 210.773l-274.432-164.864-275.115 164.864-219.819-109.909s52.736-164.864 494.933-164.864 494.933 164.864 494.933 164.864zM494.592 503.296l-60.075-6.827 60.075-74.24 60.075 74.24-60.075 6.827z" />
|
177 |
+
<glyph unicode="™" glyph-name="fi-cloud" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.632 94.168-106.125 163.063-205.709 163.063-107.089 0-195.57-79.67-209.405-182.972l-0.119-1.083c-130.264-5.014-233.965-111.827-233.965-242.86 0-133.915 108.311-242.532 242.109-243.028h597.38c0.016 0 0.036 0 0.056 0 101.609 0 183.979 82.37 183.979 183.979 0 88.518-62.513 162.435-145.799 180.012l-1.201 0.212z" />
|
178 |
+
<glyph unicode="∂" glyph-name="smart-crawl" d="M31.744 272.043c74.227-197.089 261.208-334.754 480.341-334.754s406.114 137.665 479.174 331.229zM992.256 623.957c-74.227 197.089-261.208 334.754-480.341 334.754s-406.114-137.665-479.174-331.229zM2.389 495.957c-1.365-15.701-2.389-31.744-2.389-47.957s1.024-32.085 2.389-47.957h1019.221c1.536 15.872 2.389 31.744 2.389 47.957s-0.853 32.256-2.389 47.957z" />
|
179 |
+
<glyph unicode="∃" glyph-name="fi-finger-swipe" horiz-adv-x="913" d="M777.216 472.917c-0.058 0-0.127 0-0.196 0-18.077 0-34.649-6.446-47.541-17.165-6.523 35.039-36.825 61.099-73.213 61.099-18.417 0-35.275-6.676-48.286-17.739-5.634 36.064-36.441 63.228-73.592 63.228-17.325 0-33.27-5.907-45.932-15.818l0.164 212.262c-1.958 39.719-34.638 71.181-74.667 71.181s-72.709-31.462-74.66-71.007l-0.007-387.929h-131.584c-32.085 0-55.808-21.333-55.808-66.389 1.728-42.208 34.238-76.309 75.589-80.525 52.581-0.030 107.707-26.142 111.291-55.667 2.56-17.92 27.136-232.448 242.859-232.448s270.336 150.528 270.336 252.587v209.579c0 41.284-33.468 74.752-74.752 74.752zM194.901 613.035l17.067 17.067c4.555 4.568 7.372 10.873 7.372 17.835s-2.817 13.266-7.373 17.835l-115.37 117.077 116.224 116.224c4.555 4.568 7.372 10.873 7.372 17.835s-2.817 13.266-7.373 17.835l-17.066 17.066c-4.568 4.555-10.873 7.372-17.835 7.372s-13.266-2.817-17.835-7.373l-152.746-151.039c-4.575-4.623-7.402-10.984-7.402-18.005s2.827-13.382 7.404-18.007l151.721-151.721c4.568-4.555 10.873-7.372 17.835-7.372s13.266 2.817 17.835 7.373zM717.995 952.661l-17.067-17.067c-4.555-4.568-7.372-10.873-7.372-17.835s2.817-13.266 7.373-17.835l116.223-116.223-117.419-117.077c-4.555-4.568-7.372-10.873-7.372-17.835s2.817-13.266 7.373-17.835l17.066-17.066c4.568-4.555 10.873-7.372 17.835-7.372s13.266 2.817 17.835 7.373l151.722 151.722c4.575 4.623 7.402 10.984 7.402 18.005s-2.827 13.382-7.404 18.007l-150.526 151.038c-4.568 4.555-10.873 7.372-17.835 7.372s-13.266-2.817-17.835-7.373z" />
|
180 |
+
<glyph unicode="∆" glyph-name="fi-book" horiz-adv-x="870" d="M870.4 823.467v0c0 12.253-9.933 22.187-22.187 22.187h-46.080v-819.2c-0.085-11.982-9.583-21.717-21.461-22.185l-690.731-0.001c-10.679 0.117-19.552 7.703-21.649 17.775l-0.025 48.956h643.413c12.274 0.097 22.187 10.069 22.187 22.357 0 0 0 0 0 0.001v0 844.288c0 0 0 0 0 0.001 0 12.288-9.913 22.26-22.177 22.357h-689.332c-12.348 0-22.357-10.010-22.357-22.357s0 0 0-0.853v-977.579s0 0 0 0 0 0 0 0v-1.024c0.097-12.274 10.069-22.187 22.357-22.187 0 0 0 0 0.001 0h825.856c12.274 0.097 22.187 10.069 22.187 22.357 0 0 0 0 0 0.001v0z" />
|
181 |
+
<glyph unicode="∏" glyph-name="fi-calendar" horiz-adv-x="907" d="M889.515 597.675h-871.424c0 0-0.001 0-0.001 0-9.931 0-17.993-8.002-18.090-17.911v-625.673c0-9.991 8.099-18.091 18.091-18.091h871.424c0.051-0.001 0.111-0.001 0.171-0.001 9.897 0 17.92 8.023 17.92 17.92 0 0.060 0 0.121-0.001 0.181v625.655c0.001 0.051 0.001 0.111 0.001 0.171 0 9.897-8.023 17.92-17.92 17.92-0.060 0-0.121 0-0.181-0.001zM302.421 68.779c-31.96 0.064-62.513 6.006-90.661 16.801-1.627 0.778-3.962 4.026-3.962 7.818 0 0.406 0.027 0.805 0.079 1.197l8.358 61.223c0.395 2.762 1.989 5.086 4.227 6.463 1.187 0.588 2.537 0.919 3.965 0.919s2.778-0.331 3.979-0.92c23.432-9.491 50.672-15.011 79.201-15.011 0.937 0 1.873 0.006 2.807 0.018 31.261-0.001 53.106 14.847 53.106 36.009 0 26.283-12.629 40.448-82.091 44.373-4.77 0.279-8.533 4.215-8.533 9.031 0 0.005 0 0.010 0 0.015v60.927c0 0.008 0 0.017 0 0.026 0 4.755 3.67 8.654 8.332 9.018 60.106 4.781 66.591 21.847 66.591 36.013 0 9.045 0 24.405-40.448 24.405-24.992-0.457-48.421-6.714-69.134-17.477-0.327-0.196-1.737-0.55-3.229-0.55s-2.902 0.355-4.149 0.984c-2.488 1.281-4.294 3.707-4.72 6.583l-8.369 61.147c-0.051 0.36-0.080 0.776-0.080 1.199 0 3.599 2.102 6.707 5.145 8.164 28.28 12.188 61.139 19.262 95.651 19.262 2.753 0 5.495-0.045 8.226-0.134 72.818 0.010 121.97-34.123 121.97-85.323 0-37.888-19.627-65.877-59.904-85.333 34.133-13.312 69.803-37.547 69.803-88.576 0-73.045-61.269-119.467-156.331-119.467zM682.667 82.432c0-4.996-4.050-9.045-9.045-9.045h-74.069c-4.996 0-9.045 4.050-9.045 9.045v246.101l-48.981-18.603c-1.147-0.565-2.498-0.896-3.925-0.896s-2.778 0.331-3.979 0.92c-2.26 1.339-3.87 3.682-4.209 6.419l-8.367 61.312c-0.053 0.365-0.084 0.787-0.084 1.216 0 3.504 2.031 6.534 4.981 7.977l106.719 52.759c1.19 0.626 2.597 1.003 4.089 1.024h37.212c4.858-0.175 8.73-4.155 8.73-9.040 0-0.242-0.010-0.482-0.028-0.72l0.002-348.47zM889.515 879.445h-92.843v-43.52c0-46.080-26.283-95.232-100.181-95.232s-100.181 48.64-100.181 95.232v43.52h-283.819v-43.52c0-46.080-26.283-95.232-100.181-95.232s-100.352 48.64-100.352 95.232v43.52h-93.867c-0.051 0.001-0.111 0.001-0.171 0.001-9.897 0-17.92-8.023-17.92-17.92 0-0.060 0-0.121 0.001-0.181v-183.116c0-9.991 8.099-18.091 18.091-18.091h871.424c0.051-0.001 0.111-0.001 0.171-0.001 9.897 0 17.92 8.023 17.92 17.92 0 0.060 0 0.121-0.001 0.181v183.116c0.001 0.051 0.001 0.111 0.001 0.171 0 9.897-8.023 17.92-17.92 17.92-0.060 0-0.121 0-0.181-0.001zM212.309 798.891c29.867 0 41.984 10.752 41.984 37.035v86.869c0 26.453-12.117 37.205-41.984 37.205s-41.643-10.752-41.643-37.205v-86.869c0-26.453 12.117-37.035 41.984-37.035zM696.491 798.891c29.867 0 41.984 10.752 41.984 37.035v86.869c0 26.453-12.288 37.205-41.984 37.205s-41.984-10.752-41.984-37.205v-86.869c0-26.453 12.117-37.035 41.984-37.035z" />
|
182 |
+
<glyph unicode="∑" glyph-name="fi-news-paper" d="M999.595 768.341h-848.384c-13.479 0-24.405-10.927-24.405-24.405v-106.155h-90.283c0 0-0.001 0-0.002 0-20.051 0-36.328-16.158-36.521-36.163v-543.592c0-67.393 54.633-122.027 122.027-122.027h779.947c67.393 0 122.027 54.633 122.027 122.027v685.909c0 13.479-10.927 24.405-24.405 24.405zM950.784 82.261c0-40.436-32.78-73.216-73.216-73.216h-719.36c25.4 18.793 41.714 48.612 41.813 82.245v603.835h750.933zM273.408 446.635h268.288v-317.099h-268.288v317.099zM273.408 579.584h603.989v-73.216h-603.989v73.216zM614.912 445.269h262.485v-73.216h-262.485v73.216zM614.912 326.144h262.485v-73.216h-262.485v73.216zM614.912 204.288h262.485v-73.216h-262.485v73.216z" />
|
183 |
+
<glyph unicode="√" glyph-name="fi-bookmark" horiz-adv-x="512" d="M0 960v-1024l256 256 256-256v1024h-512z" />
|
184 |
+
<glyph unicode="∞" glyph-name="fi-layout-grid" d="M200.875 960h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-558.763c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v558.763c0 19.794-16.046 35.84-35.84 35.84zM594.432 960h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-165.035c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v165.035c0 0 0 0 0 0 0 19.794-16.046 35.84-35.84 35.84-0.060 0-0.12 0-0.18 0zM1024 924.16v0c0 19.794-16.046 35.84-35.84 35.84h-165.035c-19.794 0-35.84-16.046-35.84-35.84v0-558.592c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v558.592zM594.432 566.272h-164.864c-19.794 0-35.84-16.046-35.84-35.84v-558.592c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v558.592c0 19.794-16.046 35.84-35.84 35.84zM200.875 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84zM988.16 172.544h-165.035c-19.794 0-35.84-16.046-35.84-35.84v-164.864c0-19.794 16.046-35.84 35.84-35.84h165.035c19.794 0 35.84 16.046 35.84 35.84v164.864c0 19.794-16.046 35.84-35.84 35.84z" />
|
185 |
+
<glyph unicode="∫" glyph-name="fi-paint-bucket" d="M907.435 459.947v0l-383.488 383.488c-5.437 5.441-12.949 8.806-21.248 8.806s-15.811-3.365-21.248-8.806l-62.806-62.806-134.485 134.315c-10.895 11.861-26.477 19.268-43.789 19.268-32.801 0-59.392-26.591-59.392-59.392 0-17.609 7.664-33.429 19.837-44.305l133.86-133.853-325.803-325.803c-5.39-5.428-8.721-12.906-8.721-21.163s3.331-15.735 8.723-21.164l383.657-383.657c5.437-5.441 12.949-8.806 21.248-8.806s15.811 3.365 21.248 8.806l472.406 472.576c5.4 5.455 8.736 12.962 8.736 21.248s-3.336 15.793-8.739 21.251zM671.915 349.696h-515.584l346.453 346.453 257.877-257.707zM1002.667 151.040l-71.339 123.563-1.195 2.731c-3.657 4.662-9.29 7.629-15.616 7.629s-11.959-2.967-15.584-7.586l-0.032-0.043v-1.195c-0.98-1.283-1.837-2.743-2.509-4.303l-69.683-120.796c-13.484-18.059-21.589-40.821-21.589-65.475 0-60.796 49.284-110.080 110.080-110.080s110.080 49.284 110.080 110.080c0 24.655-8.105 47.416-21.796 65.766z" />
|
186 |
+
<glyph unicode="≈" glyph-name="fi-finger-point" horiz-adv-x="830" d="M744.448 548.523c-0.010 0-0.021 0-0.032 0-20.666 0-39.617-7.347-54.382-19.571-7.65 39.865-42.209 69.443-83.676 69.443-21.062 0-40.342-7.631-55.226-20.278-6.564 41.133-41.748 72.072-84.159 72.072-19.772 0-37.974-6.725-52.443-18.012l0.19 242.489c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333v-440.661l-100.352 95.403c-14.507 11.766-33.194 18.891-53.546 18.891-47.128 0-85.333-38.205-85.333-85.333 0-21.842 8.206-41.767 21.704-56.861l110.008-104.536c40.896-39.332 75.123-85.219 101.064-136.040l32.568-64.493c32.768-75.264 102.059-165.035 251.051-165.035 246.784 0 308.395 171.861 308.395 288.085v238.933c0 47.128-38.205 85.333-85.333 85.333z" />
|
187 |
+
<glyph unicode="≠" glyph-name="fi-zoom-in" d="M584.875 960c-0.154 0-0.336 0-0.519 0-242.522 0-439.125-196.603-439.125-439.125 0-95.43 30.441-183.75 82.142-255.779l-227.372-225.501 103.595-103.595 226.816 226.816c70.664-50.695 158.892-81.067 254.214-81.067 242.522 0 439.125 196.603 439.125 439.125 0 242.434-196.461 438.983-438.862 439.125zM584.875 228.011c-0.051 0-0.111 0-0.171 0-161.744 0-292.864 131.12-292.864 292.864s131.12 292.864 292.864 292.864c161.744 0 292.864-131.12 292.864-292.864 0-0.060 0-0.12 0-0.18-0.291-161.524-131.161-292.393-292.666-292.684zM772.608 571.563h-136.533v136.533c0 6.221-5.043 11.264-11.264 11.264h-78.677c-0.051 0.001-0.111 0.001-0.171 0.001-6.221 0-11.264-5.043-11.264-11.264 0 0 0-0.001 0-0.001v-136.533h-136.533c-6.221 0-11.264-5.043-11.264-11.264v-78.165c0-6.221 5.043-11.264 11.264-11.264h136.533v-136.533c0 0 0-0.001 0-0.001 0-6.221 5.043-11.264 11.264-11.264 0.060 0 0.12 0 0.18 0.001h78.839c6.221 0 11.264 5.043 11.264 11.264v136.533h136.533c6.221 0 11.264 5.043 11.264 11.264v77.995c0 6.221-5.043 11.264-11.264 11.264z" />
|
188 |
+
<glyph unicode="≤" glyph-name="fi-arrows-in" d="M368.64 44.885l47.957 290.133c0.115 0.746 0.181 1.606 0.181 2.481 0 4.608-1.826 8.789-4.794 11.86l0.005-0.005c-3.066 2.963-7.247 4.789-11.855 4.789-0.875 0-1.736-0.066-2.575-0.193l-288.674-49.311c-7.383-1.988-12.727-8.623-12.727-16.506 0-4.112 1.454-7.884 3.876-10.831l56.467-56.461-151.723-152.235c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l104.44-104.439c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l151.543 151.544 57.173-56.32c2.999-2.672 6.975-4.305 11.332-4.305 8.109 0 14.896 5.655 16.635 13.236zM655.36 851.115l-47.957-290.133c-0.115-0.746-0.181-1.606-0.181-2.481 0-4.608 1.826-8.789 4.794-11.86l-0.005 0.005c3.066-2.963 7.247-4.789 11.855-4.789 0.875 0 1.736 0.066 2.575 0.193l288.674 48.799c7.563 1.86 13.084 8.583 13.084 16.595 0 4.306-1.595 8.24-4.226 11.243l-56.474 56.471 151.552 151.552c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-104.269 105.122c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-151.543-151.544-57.173 56.32c-2.999 2.672-6.975 4.305-11.332 4.305-8.109 0-14.896-5.655-16.635-13.236zM915.115 304.64l-290.133 47.957c-0.746 0.115-1.606 0.181-2.481 0.181-4.608 0-8.789-1.826-11.86-4.794l0.005 0.005c-2.963-3.066-4.789-7.247-4.789-11.855 0-0.875 0.066-1.736 0.193-2.575l49.311-288.674c1.814-7.625 8.568-13.209 16.625-13.209 4.372 0 8.361 1.644 11.381 4.348l56.474 56.476 151.552-151.552c3.046-2.869 7.163-4.633 11.691-4.633s8.644 1.763 11.699 4.641l104.439 104.44c2.869 3.046 4.633 7.163 4.633 11.691s-1.763 8.644-4.641 11.699l-151.544 151.543 56.32 57.003c2.672 2.999 4.305 6.975 4.305 11.332 0 8.109-5.655 14.896-13.236 16.635zM108.885 591.36l290.133-47.957c0.746-0.115 1.606-0.181 2.481-0.181 4.608 0 8.789 1.826 11.86 4.794l-0.005-0.005c2.963 3.066 4.789 7.247 4.789 11.855 0 0.875-0.066 1.736-0.193 2.575l-49.311 288.674c-1.988 7.383-8.623 12.727-16.506 12.727-4.112 0-7.884-1.454-10.831-3.876l-57.144-56.467-151.552 151.723c-3.046 2.869-7.163 4.633-11.691 4.633s-8.644-1.763-11.699-4.641l-104.439-104.44c-2.869-3.046-4.633-7.163-4.633-11.691s1.763-8.644 4.641-11.699l151.544-151.543-56.32-57.173c-2.672-2.999-4.305-6.975-4.305-11.332 0-8.109 5.655-14.896 13.236-16.635z" />
|
189 |
+
<glyph unicode="≥" glyph-name="fi-arrows-compress" d="M401.067 54.443l52.224 315.051c0.194 0.966 0.305 2.076 0.305 3.212 0 4.839-2.014 9.207-5.249 12.313l-0.006 0.006c-3.239 3.222-7.705 5.213-12.636 5.213-1.083 0-2.144-0.096-3.174-0.28l-314.089-52.891c-8.563-1.452-15.003-8.814-15.003-17.681 0-4.962 2.016-9.452 5.274-12.697l61.441-61.441-164.864-164.864c-3.118-3.22-5.039-7.615-5.039-12.459s1.922-9.238 5.044-12.463l114.171-114.171c3.247-3.269 7.745-5.292 12.715-5.292s9.468 2.023 12.714 5.291l164.353 165.377 61.44-61.44c3.245-3.259 7.736-5.275 12.698-5.275 8.867 0 16.229 6.44 17.666 14.897zM622.933 841.557l-52.395-315.051c-0.152-0.878-0.239-1.888-0.239-2.919 0-4.919 1.982-9.374 5.19-12.613l-0.001 0.001c3.264-3.216 7.747-5.201 12.694-5.201 1.062 0 2.103 0.092 3.116 0.267l314.26 52.891c8.563 1.452 15.003 8.814 15.003 17.681 0 4.962-2.016 9.452-5.274 12.697l-61.953 61.441 165.035 165.035c3.269 3.247 5.292 7.745 5.292 12.715s-2.023 9.468-5.291 12.714l-113.836 113.494c-3.247 3.269-7.745 5.292-12.715 5.292s-9.468-2.023-12.714-5.291l-164.353-165.377-61.44 61.44c-3.245 3.259-7.736 5.275-12.698 5.275-8.867 0-16.229-6.44-17.666-14.897z" />
|
190 |
+
<glyph unicode="◊" glyph-name="fi-key" d="M910.165 573.611h-441.344c-44.245 75.622-125.067 125.611-217.564 125.611-138.746 0-251.221-112.476-251.221-251.221s112.476-251.221 251.221-251.221c92.497 0 173.319 49.989 216.922 124.425l48.087 1.186c0.015 0 0.032 0 0.050 0 2.386 0 4.544 0.98 6.093 2.559l88.236 88.919c1.547 1.559 3.69 2.524 6.059 2.524s4.512-0.965 6.058-2.524l62.123-62.123c1.547-1.559 3.69-2.524 6.059-2.524s4.512 0.965 6.058 2.524l39.254 39.254c1.547 1.559 3.69 2.524 6.059 2.524s4.512-0.965 6.058-2.524l45.057-45.398c1.547-1.559 3.69-2.524 6.059-2.524s4.512 0.965 6.058 2.524l44.886 45.057c1.547 1.559 3.69 2.524 6.059 2.524s4.512-0.965 6.058-2.524l36.353-36.353c1.538-1.508 3.647-2.439 5.973-2.439s4.435 0.931 5.975 2.441l110.42 103.593c1.664 1.561 2.701 3.774 2.701 6.229s-1.037 4.668-2.697 6.225l-105.306 101.38c-1.553 1.476-3.657 2.385-5.972 2.389zM136.533 390.827c-31.355 0.29-56.661 25.775-56.661 57.171 0 31.576 25.597 57.173 57.173 57.173s57.172-25.596 57.173-57.171c0-0.001 0-0.002 0-0.002 0-31.576-25.597-57.173-57.173-57.173-0.18 0-0.36 0.001-0.539 0.002z" />
|
191 |
+
<glyph unicode="" glyph-name="fi-notification-count" horiz-adv-x="828" d="M827.563 610.645c0-77.008-62.427-139.435-139.435-139.435s-139.435 62.427-139.435 139.435c0 77.008 62.427 139.435 139.435 139.435s139.435-62.427 139.435-139.435zM704.853 383.659v30.208c-5.632 0-11.093 0-17.067 0-107.86 1.799-194.606 89.657-194.606 197.777 0 85.329 54.030 158.038 129.745 185.783-39.084 43.125-92.179 73.465-151.907 85.462l-1.855 21.815c0 30.586-24.795 55.381-55.381 55.381s-55.381-24.795-55.381-55.381v-21.675c-135.291-26.866-235.861-144.617-235.861-285.858 0-0.003 0-0.006 0-0.009v-230.57c0-0.027 0-0.060 0-0.092 0-80.194-38.652-151.36-98.342-195.885l-24.197-17.868v-122.539h292.523c14.321-54.478 63.131-94.007 121.173-94.007s106.853 39.529 120.978 93.135l292.889 0.872v122.539l-23.552 17.067c-62.293 46.080-98.987 119.467-98.987 213.504z" />
|
192 |
+
<glyph unicode="" glyph-name="fi-dashboard-settings" horiz-adv-x="1160" d="M522.581 279.040l-65.877 75.605c-5.883 6.757-9.469 15.649-9.469 25.377 0 12.905 6.31 24.336 16.013 31.377l0.112 0.077 328.875 234.837c6.179 4.355 13.863 6.96 22.155 6.96 11.546 0 21.912-5.051 29.010-13.063l14.883-17.107c5.697-6.702 9.162-15.456 9.162-25.019 0-10.108-3.871-19.311-10.211-26.209l0.025 0.028-276.992-294.571c-7.076-7.461-17.061-12.103-28.129-12.103-11.636 0-22.074 5.13-29.176 13.252l-0.039 0.045zM955.733 821.931c-98.42 79.372-225.003 127.407-362.805 127.407-320.472 0-580.267-259.794-580.267-580.267 0-168.145 71.518-319.586 185.794-425.563l0.371-0.34c5.032-4.383 11.653-7.055 18.899-7.055 10.608 0 19.879 5.727 24.889 14.258l0.074 0.136 49.323 85.333c2.31 4.011 3.672 8.821 3.672 13.949 0 7.899-3.233 15.043-8.447 20.181l-0.003 0.003c-75.845 76.975-122.681 182.715-122.681 299.394 0 235.641 191.025 426.667 426.667 426.667 97.952 0 188.194-33.007 260.211-88.506l-0.997 0.739c2.156-1.767 4.941-2.838 7.977-2.838 3.568 0 6.79 1.479 9.087 3.858l0.004 0.004 88.235 94.208c2.417 2.332 3.917 5.599 3.917 9.216s-1.501 6.884-3.913 9.212l-0.004 0.004zM936.96 634.197c-3.125-2.326-5.128-6.009-5.128-10.16 0-2.569 0.767-4.959 2.085-6.954l-0.029 0.047c45.165-66.477 72.109-148.505 72.109-236.827 0-121.799-51.241-231.631-133.342-309.113l-0.207-0.193c-5.218-5.141-8.451-12.285-8.451-20.184 0-5.128 1.362-9.938 3.745-14.087l-0.073 0.138 49.323-85.333c5.045-8.652 14.281-14.375 24.853-14.375 7.306 0 13.974 2.733 19.038 7.232l-0.029-0.026c122.003 106.927 198.616 263.064 198.616 437.095 0 121.548-37.372 234.368-101.252 327.595l1.282-1.981c-2.364 3.025-6.013 4.951-10.111 4.951-3.185 0-6.098-1.163-8.338-3.088l0.017 0.014zM698.368 694.613c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904zM450.389 635.563c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904zM882.347 166.4c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904zM961.707 417.963c0-33.084-26.82-59.904-59.904-59.904s-59.904 26.82-59.904 59.904c0 33.084 26.82 59.904 59.904 59.904s59.904-26.82 59.904-59.904z" />
|
193 |
+
<glyph unicode="" glyph-name="fi-update-arrow" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512v0zM512 31.915c-229.798 0-416.085 186.288-416.085 416.085s186.288 416.085 416.085 416.085c229.798 0 416.085-186.288 416.085-416.085v0c0-0.051 0-0.111 0-0.171 0-229.703-186.211-415.915-415.915-415.915-0.060 0-0.12 0-0.18 0h0.009zM759.467 446.464l-38.229 38.229c-2.406 2.393-5.724 3.873-9.387 3.873s-6.98-1.479-9.387-3.873l-150.186-150.186v352.427c0 6.127-4.967 11.093-11.093 11.093h-58.368c-6.127 0-11.093-4.967-11.093-11.093v0-352.427l-150.187 150.187c-2.406 2.393-5.724 3.873-9.387 3.873s-6.98-1.479-9.387-3.873l-38.228-38.228c-2.393-2.406-3.873-5.724-3.873-9.387s1.479-6.98 3.873-9.387l-0.001 0.001 238.251-238.592c2.352-2.374 5.612-3.844 9.216-3.844s6.864 1.47 9.215 3.843l238.252 238.422c2.393 2.406 3.873 5.724 3.873 9.387s-1.479 6.98-3.873 9.387l0.001-0.001z" />
|
194 |
+
<glyph unicode="" glyph-name="performance" d="M417.792 403.456c1.004 1.77 1.595 3.888 1.595 6.144 0 6.975-5.654 12.629-12.629 12.629-0.021 0-0.042 0-0.063 0h-143.698c-2.535 0.013-4.584 2.071-4.584 4.608 0 1.352 0.582 2.567 1.509 3.41l0.004 0.003 508.075 460.629c-72.482 41.722-159.387 66.332-252.040 66.332-282.77 0-512-229.23-512-512 0-168.707 81.597-318.357 207.479-411.636l1.383-0.979zM789.675 878.080l-186.88-329.045c-0.991-1.775-1.574-3.894-1.574-6.15 0-7.069 5.731-12.8 12.8-12.8 0.133 0 0.266 0.002 0.399 0.006h143.341c2.531-0.018 4.577-2.074 4.577-4.608 0-1.265-0.51-2.41-1.334-3.243v0l-527.36-503.808c80.343-54.904 179.602-87.673 286.514-87.673 282.77 0 512 229.23 512 512 0 182.975-95.982 343.532-240.344 434.070l-2.138 1.251z" />
|
195 |
+
<glyph unicode="" glyph-name="fi-power-on-off" d="M916.651 761.003c-12.235 15.422-30.974 25.224-52.003 25.224-15.397 0-29.566-5.255-40.813-14.069l0.144 0.109c-15.645-12.197-25.611-31.046-25.611-52.223 0-15.306 5.207-29.396 13.945-40.596l-0.11 0.147c49.588-63.037 79.531-143.561 79.531-231.079 0-0.181 0-0.363 0-0.544v0.028c0-209.721-170.012-379.733-379.733-379.733s-379.733 170.012-379.733 379.733v0c-0.001 0.37-0.002 0.807-0.002 1.245 0 87.421 29.877 167.864 79.977 231.675l-0.615-0.813c8.478 10.994 13.589 24.965 13.589 40.129 0 21.067-9.863 39.83-25.223 51.924l-0.141 0.107c-11.057 8.587-25.133 13.767-40.419 13.767-21.171 0-40.022-9.936-52.144-25.398l-0.109-0.144c-66.83-85.078-107.179-193.714-107.179-311.774 0-0.252 0-0.504 0.001-0.756v0.040c0-282.77 229.23-512 512-512s512 229.23 512 512v0c0.002 0.53 0.003 1.158 0.003 1.785 0 117.964-40.283 226.52-107.844 312.661l0.833-1.103zM512 382.123c36.271 0.193 65.61 29.593 65.707 65.868v445.961c0 36.477-29.571 66.048-66.048 66.048s-66.048-29.571-66.048-66.048v0-445.952c0.097-36.404 29.63-65.878 66.048-65.878 0.12 0 0.24 0 0.36 0.001h-0.018z" />
|
196 |
+
<glyph unicode="" glyph-name="fi-cloud-migration" d="M877.056 534.699c-9.452 86.149-81.821 152.577-169.705 152.577-20.539 0-40.23-3.628-58.468-10.278l1.186 0.378c-22.632 94.168-106.125 163.063-205.709 163.063-107.089 0-195.57-79.67-209.405-182.972l-0.119-1.083c-130.264-5.014-233.965-111.827-233.965-242.86 0-133.915 108.311-242.532 242.109-243.028h597.38c0.016 0 0.036 0 0.056 0 101.609 0 183.979 82.37 183.979 183.979 0 88.518-62.513 162.435-145.799 180.012l-1.201 0.212zM563.2 507.733c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h30.046c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0-30.037c0-4.619-3.744-8.363-8.363-8.363h-29.867c-4.619 0-8.363 3.744-8.363 8.363v0zM447.147 324.096c0-4.619-3.744-8.363-8.363-8.363h-30.037c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h30.046c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0zM464.213 477.696c0-4.619-3.744-8.363-8.363-8.363v0h-195.584l72.704-72.533c1.72-1.728 2.783-4.11 2.783-6.741s-1.063-5.013-2.783-6.742v0l-19.627-20.651c-1.728-1.72-4.11-2.783-6.741-2.783s-5.013 1.063-6.742 2.783v0l-122.88 122.88c-1.71 1.7-2.768 4.055-2.768 6.656s1.058 4.956 2.768 6.656v0l122.88 122.88c1.728 1.72 4.11 2.783 6.741 2.783s5.013-1.063 6.742-2.783v0l19.797-19.797c1.72-1.728 2.783-4.11 2.783-6.741s-1.063-5.013-2.783-6.742v0l-72.875-72.192h196.437c4.619 0 8.363-3.744 8.363-8.363v0zM518.827 324.096c0-4.619-3.744-8.363-8.363-8.363v0h-29.184c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h30.729c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0zM535.893 477.696c0-4.619-3.744-8.363-8.363-8.363v0h-28.331c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 0.001 0 0.001 0 0.002 0 4.653 3.724 8.436 8.354 8.531h29.876c4.639-0.096 8.363-3.879 8.363-8.532 0-0.001 0-0.001 0-0.002v0zM831.829 332.459l-121.173-123.392c-1.728-1.72-4.11-2.783-6.741-2.783s-5.013 1.063-6.742 2.783v0l-19.797 19.797c-1.72 1.728-2.783 4.11-2.783 6.741s1.063 5.013 2.783 6.742v0l73.557 73.387h-197.12c-4.619 0-8.363 3.744-8.363 8.363v0 30.037c0 4.619 3.744 8.363 8.363 8.363v0h197.12l-72.875 72.875c-1.72 1.728-2.783 4.11-2.783 6.741s1.063 5.013 2.783 6.742v0l19.797 19.797c1.728 1.72 4.11 2.783 6.741 2.783s5.013-1.063 6.742-2.783v0l122.88-122.88c1.71-1.7 2.768-4.055 2.768-6.656s-1.058-4.956-2.768-6.656v0z" />
|
197 |
+
<glyph unicode="" glyph-name="shipper-anchor" d="M999.595 431.957l-231.595-90.624 75.264-57.856c-40.448-87.723-120.32-185.856-277.163-204.8v405.845h87.552c32.896 0 59.563 26.667 59.563 59.563v0 37.717c0 6.881-5.578 12.459-12.459 12.459h-133.973v83.968c54.046 22.297 91.392 74.577 91.392 135.579 0 80.778-65.483 146.261-146.261 146.261s-146.261-65.483-146.261-146.261c0-61.002 37.345-113.282 90.421-135.224l0.971-0.356v-83.968h-133.803c-6.881 0-12.459-5.578-12.459-12.459v0-37.717c0-32.896 26.667-59.563 59.563-59.563v0h86.869v-405.504c-125.867 11.186-230.756 90.764-278.041 200.922l-0.829 2.171 77.653 59.221-231.595 90.624 9.728-260.437 61.44 47.104c69.568-136.502 204.284-231.011 362.051-242.771l1.469-0.088c1.783-5.006 4.522-9.283 8.023-12.801l-0.001 0.001 19.797-17.067c6.359-6.346 15.137-10.269 24.832-10.269s18.473 3.924 24.833 10.27l-0.001-0.001 19.797 17.067c3.472 3.534 6.205 7.805 7.943 12.556l0.078 0.244c159.506 11.114 294.419 106.399 361.525 241.346l1.142 2.537 62.805-48.128zM512 868.523c30.256 0 54.784-24.528 54.784-54.784s-24.528-54.784-54.784-54.784c-30.256 0-54.784 24.528-54.784 54.784v0c0 30.256 24.528 54.784 54.784 54.784v0z" />
|
198 |
+
<glyph unicode="" glyph-name="forminator-2" horiz-adv-x="1025" d="M976.896 662.699l-436.224-436.565c-4.134-4.113-9.834-6.655-16.128-6.655s-11.994 2.542-16.129 6.656l-53.93 53.93c-4.113 4.134-6.655 9.834-6.655 16.128s2.542 11.994 6.656 16.129l-0.001-0.001 456.192 456.704c-94.399 116.371-237.39 190.138-397.611 190.138-282.11 0-510.805-228.695-510.805-510.805s228.695-510.805 510.805-510.805c282.11 0 510.805 228.695 510.805 510.805 0 77.77-17.38 151.48-48.467 217.459l1.32-3.117zM139.605 348.331c-2.325 0.030-4.551 0.402-6.647 1.068l0.162-0.044c-8.027 2.344-14.11 8.824-15.845 16.919l-0.027 0.148c-5.407 24.515-8.514 52.679-8.533 81.565v0.014c0.291 221.574 179.833 401.117 401.38 401.408h31.772l-93.184-94.208c-2.826-2.847-6.412-4.937-10.427-5.941l-0.154-0.033c-137.039-33.188-237.23-154.794-237.23-299.801 0-0.501 0.001-1.002 0.004-1.502v0.077c0.070-12.104 0.874-23.948 2.37-35.574l-0.151 1.441c0.104-0.817 0.164-1.763 0.164-2.722 0-6.268-2.541-11.943-6.649-16.051v0l-40.789-40.107c-4.134-4.113-9.835-6.656-16.129-6.656-0.030 0-0.059 0-0.089 0h0.005zM347.819 176.128c-1.304-5.253-5.153-9.384-10.13-11.061l-0.11-0.032-146.432-47.787c-0.744-0.129-1.601-0.203-2.475-0.203s-1.731 0.074-2.564 0.216l0.090-0.013c-8.559 0.025-15.487 6.969-15.487 15.531 0 1.771 0.296 3.473 0.842 5.059l-0.033-0.109 47.787 146.432c2.091 6.273 7.909 10.716 14.766 10.716 4.3 0 8.192-1.748 11.005-4.572l98.646-98.646c2.797-2.782 4.528-6.634 4.528-10.89 0-1.284-0.157-2.53-0.454-3.722l0.022 0.106zM350.891 394.411c-0.046 0-0.1-0.001-0.155-0.001-6.272 0-11.95 2.544-16.058 6.656v0l-53.931 53.931c-4.113 4.134-6.655 9.834-6.655 16.128s2.542 11.994 6.656 16.129l353.62 353.279c4.134 4.113 9.834 6.655 16.128 6.655s11.994-2.542 16.129-6.656l53.93-53.93c4.113-4.134 6.655-9.834 6.655-16.128s-2.542-11.994-6.656-16.129l0.001 0.001-353.451-354.304c-4.134-4.113-9.835-6.656-16.129-6.656-0.030 0-0.059 0-0.089 0h0.005zM510.123 46.592c-33.752 0.022-66.521 4.19-97.837 12.022l2.776-0.588c-10.167 2.469-17.598 11.493-17.598 22.253 0 6.388 2.619 12.165 6.842 16.314l0.003 0.003 39.424 39.595c4.152 4.070 9.845 6.582 16.124 6.582 1.236 0 2.45-0.097 3.633-0.285l-0.131 0.017c13.975-2.343 30.106-3.706 46.546-3.755h0.046c0.021 0 0.047 0 0.073 0 151.844 0 278.070 109.679 303.78 254.135l0.275 1.865c0.779 4.768 2.98 8.922 6.146 12.119l88.403 88.403 1.365-19.115c0-9.045 1.365-18.091 1.365-27.136 0-0.152 0-0.332 0-0.513 0-221.734-179.557-401.531-401.2-401.919h-0.037z" />
|
199 |
+
<glyph unicode="" glyph-name="forminator" horiz-adv-x="1157" d="M780.459 878.763l-68.267 68.267c-5.283 5.29-12.585 8.562-20.651 8.562s-15.368-3.272-20.65-8.562v0l-451.243-450.219c-5.28-5.255-8.548-12.529-8.548-20.565s3.268-15.31 8.547-20.564l68.268-68.268c5.274-5.239 12.542-8.477 20.565-8.477s15.291 3.238 20.567 8.479l-0.002-0.002 451.413 450.048c5.239 5.274 8.477 12.542 8.477 20.565s-3.238 15.291-8.479 20.567l0.002-0.002zM1148.757 804.523l-68.267 68.267c-5.274 5.239-12.542 8.477-20.565 8.477s-15.291-3.238-20.567-8.479l-597.331-597.331c-5.29-5.283-8.562-12.585-8.562-20.651s3.272-15.368 8.562-20.65v0l68.267-68.267c5.274-5.239 12.542-8.477 20.565-8.477s15.291 3.238 20.567 8.479l597.331 597.331c5.239 5.274 8.477 12.542 8.477 20.565s-3.238 15.291-8.479 20.567l0.002-0.002zM174.080 245.76c-3.561 3.609-8.506 5.844-13.973 5.844-1.643 0-3.239-0.202-4.764-0.582l0.135 0.029c-6.795-1.619-12.148-6.576-14.295-13.002l-0.041-0.14-60.928-186.88c-0.62-1.835-0.978-3.948-0.978-6.144 0-10.917 8.837-19.771 19.748-19.797h0.003c2.205 0.028 4.314 0.401 6.288 1.066l-0.144-0.042 186.709 60.928c8.039 2.641 13.741 10.079 13.741 18.848 0 5.513-2.253 10.499-5.889 14.088l-0.002 0.002zM119.467 404.992c-1.221 11.263-1.918 24.326-1.918 37.553 0 1.918 0.015 3.833 0.044 5.744l-0.003-0.289c-0.001 0.376-0.002 0.821-0.002 1.267 0 184.823 127.735 339.811 299.741 381.501l2.683 0.549c5.364 1.279 9.99 3.91 13.658 7.513l119.463 119.463-22.357 0.853h-7.168c-3.755 0-7.68 0-11.605 0 0 0 0 0-0.001 0-282.47 0-511.513-228.744-511.999-511.1v-0.047c0.085-36.919 4.122-72.848 11.708-107.447l-0.615 3.341c2.19-10.527 9.918-18.823 19.936-21.794l0.203-0.052c2.696-0.908 5.801-1.432 9.028-1.432 7.74 0 14.777 3.013 20 7.931l-0.015-0.014 51.2 51.2c5.206 5.243 8.424 12.466 8.424 20.441 0 1.702-0.146 3.369-0.428 4.99l0.025-0.173zM1020.587 507.051l-112.64-112.64c-4.106-4.022-6.976-9.291-7.997-15.193l-0.024-0.167c-33.583-186.114-194.329-325.461-387.621-325.461-0.107 0-0.213 0-0.32 0h0.016c-20.957 0.064-41.459 1.8-61.442 5.079l2.22-0.301c-1.324 0.212-2.85 0.332-4.405 0.332-8.069 0-15.379-3.256-20.685-8.526l-51.198-51.198c-5.25-5.302-8.494-12.598-8.494-20.653 0-13.714 9.404-25.231 22.116-28.455l0.203-0.044c36.541-9.321 78.489-14.671 121.686-14.671 282.77 0 512 229.23 512 512 0 0.298 0 0.596-0.001 0.893v-0.047c0 11.605 0 23.211-1.707 34.133z" />
|
200 |
+
<glyph unicode="" glyph-name="fi-open-new-window" d="M887.467 960h-273.067v-136.533h176.469l-534.869-534.357c-0.603-0.615-0.976-1.459-0.976-2.389s0.372-1.774 0.976-2.39l92.33-92.33c0.615-0.603 1.459-0.976 2.389-0.976s1.774 0.372 2.39 0.976l534.356 534.868v-176.469h136.533v409.6zM887.467 106.667c0-18.851-15.282-34.133-34.133-34.133v0h-682.667c-18.851 0-34.133 15.282-34.133 34.133v0 682.667c0 18.851 15.282 34.133 34.133 34.133v0h221.867v136.533h-256c-75.405 0-136.533-61.128-136.533-136.533v0-750.933c0-75.405 61.128-136.533 136.533-136.533v0h750.933c75.405 0 136.533 61.128 136.533 136.533v0 256h-136.533z" />
|
201 |
+
<glyph unicode="" glyph-name="fi-plug-disconnected" d="M609.963 390.827c-3.917 3.892-9.315 6.297-15.275 6.297s-11.358-2.405-15.276-6.298l0.001 0.001-130.048-130.56-125.099 125.099 130.048 130.048c3.892 3.917 6.297 9.315 6.297 15.275s-2.405 11.358-6.298 15.276l-30.548 30.548c-3.917 3.892-9.315 6.297-15.275 6.297s-11.358-2.405-15.276-6.298l-130.047-130.047-32.597 32.597c-3.101 3.17-7.422 5.135-12.203 5.135s-9.101-1.965-12.2-5.132l-83.63-83.63c-37.202-37.444-60.196-89.045-60.196-146.015 0-45.244 14.502-87.1 39.111-121.175l-0.419 0.609-82.091-82.091c-11.749-11.749-19.016-27.981-19.016-45.909 0-35.857 29.068-64.926 64.926-64.926 17.929 0 34.16 7.267 45.909 19.016l82.091 82.091c33.426-24.103 75.209-38.549 120.366-38.549 57.155 0 108.904 23.143 146.389 60.568l-0.003-0.003 83.456 83.627c3.17 3.101 5.135 7.422 5.135 12.203s-1.965 9.101-5.132 12.2l-32.6 32.6 130.048 130.048c3.892 3.917 6.297 9.315 6.297 15.275s-2.405 11.358-6.298 15.276l0.001-0.001zM1005.056 941.056c-11.741 11.767-27.975 19.046-45.909 19.046s-34.168-7.28-45.908-19.045l-84.481-84.481c-33.426 24.103-75.209 38.549-120.366 38.549-57.155 0-108.904-23.143-146.389-60.568l0.003 0.003-84.139-83.627c-3.17-3.101-5.135-7.422-5.135-12.203s1.965-9.101 5.132-12.2l312.664-312.664c3.101-3.17 7.422-5.135 12.203-5.135s9.101 1.965 12.2 5.132l83.63 83.63c37.423 37.482 60.565 89.231 60.565 146.386 0 45.157-14.446 86.94-38.97 120.98l0.42-0.613 84.48 84.48c11.767 11.741 19.046 27.975 19.046 45.909s-7.28 34.168-19.045 45.908l-0.001 0.001z" />
|
202 |
+
<glyph unicode="" glyph-name="fi-plug-connected" d="M354.645 573.269c-2.821 2.878-6.749 4.661-11.093 4.661s-8.272-1.784-11.091-4.659l-0.002-0.003-119.467-119.467c-33.906-33.962-54.873-80.85-54.873-132.635 0-40.902 13.080-78.749 35.286-109.586l-0.381 0.556-175.957-175.787c-10.657-10.657-17.249-25.38-17.249-41.643 0-32.525 26.367-58.892 58.892-58.892 16.262 0 30.985 6.592 41.643 17.249v0l175.787 176.128c30.28-21.825 68.127-34.905 109.029-34.905 51.785 0 98.673 20.967 132.637 54.876l119.465 119.465c2.836 2.84 4.59 6.762 4.59 11.093s-1.754 8.253-4.59 11.094v0zM1006.933 942.933c-10.629 10.65-25.324 17.239-41.557 17.239s-30.929-6.589-41.556-17.238l-176.129-175.958c-30.26 21.781-68.071 34.834-108.93 34.834-51.75 0-98.609-20.939-132.568-54.806l-119.463-119.463c-2.836-2.84-4.59-6.762-4.59-11.093s1.754-8.253 4.59-11.094v0l282.624-282.624c2.821-2.878 6.749-4.661 11.093-4.661s8.272 1.784 11.091 4.659l0.002 0.003 119.467 119.467c33.906 33.962 54.873 80.85 54.873 132.635 0 40.902-13.080 78.749-35.286 109.586l0.381-0.556 175.957 175.787c10.701 10.637 17.325 25.366 17.325 41.643s-6.623 31.006-17.322 41.64l-0.003 0.003z" />
|
203 |
+
<glyph unicode="" glyph-name="fi-buddypress" d="M468.992 961.195c-241.049-21.549-433.031-206.468-465.279-442.254l-0.299-2.674c-2.19-20.167-3.439-43.559-3.439-67.243s1.249-47.075 3.685-70.113l-0.246 2.87c34.369-252.374 248.499-444.79 507.57-444.79 145.040 0 275.995 60.309 369.154 157.219l0.162 0.169c74.298 76.085 124.975 175.535 139.996 286.311l0.292 2.628c2.184 20.015 3.43 43.227 3.43 66.731s-1.246 46.717-3.675 69.576l0.245-2.845c-31.561 228.221-208.931 407.041-433.748 440.488l-2.817 0.344c-25.771 2.572-55.7 4.039-85.973 4.039-10.158 0-20.276-0.165-30.354-0.493l1.468 0.038zM574.123 872.107c207.247-31.525 364.213-208.467 364.213-422.071 0-105.118-38.014-201.358-101.045-275.722l0.512 0.62c-69.239-80.962-167.093-135.696-277.728-148.463l-1.995-0.187c-13.792-1.086-29.864-1.704-46.080-1.704s-32.288 0.619-48.193 1.834l2.113-0.13c-28.733 3.469-54.52 8.918-79.435 16.385l3.318-0.854c-177.474 54.354-304.303 216.738-304.303 408.744 0 25.141 2.174 49.774 6.346 73.721l-0.368-2.55c7.401 43.678 20.661 82.826 39.128 118.863l-1.070-2.298c50.933 102.145 138.79 179.508 245.665 215.529l2.997 0.876c30.589 10.51 66.11 17.964 102.907 20.893l1.541 0.099c6.077 0.215 13.218 0.337 20.388 0.337 24.99 0 49.633-1.487 73.844-4.376l-2.926 0.284zM617.813 751.275c46.512-9.953 83.486-43.082 98.701-86.446l0.286-0.935c3.609-9.716 5.697-20.94 5.697-32.652 0-1.241-0.023-2.477-0.070-3.707l0.005 0.177c0.328-3.077 0.515-6.647 0.515-10.261 0-9.090-1.184-17.903-3.407-26.293l0.161 0.714c-10.099-40.75-38.168-73.417-75.101-89.611l-0.846-0.331c-6.339-3.3-13.718-5.648-21.524-6.623l-0.321-0.033s2.389 5.632 5.461 11.776c10.777 20.814 17.096 45.436 17.096 71.534 0 69.751-45.139 128.959-107.799 150.008l-1.116 0.325-11.435 3.755c-3.413 1.195 12.459 9.045 28.501 14.336 12.012 3.985 25.84 6.284 40.205 6.284 8.779 0 17.357-0.859 25.655-2.496l-0.836 0.138zM518.315 704.512c49.603-13.281 87.206-53.394 96.639-103.454l0.129-0.823c0.928-6.459 1.458-13.917 1.458-21.499 0-13.637-1.714-26.874-4.939-39.507l0.239 1.102c-11.086-37.018-37.261-66.486-71.203-81.761l-0.818-0.329c-14.843-7.252-32.297-11.493-50.742-11.493-1.302 0-2.598 0.021-3.889 0.063l0.188-0.005c-0.325-0.003-0.709-0.005-1.093-0.005-57.927 0-106.939 38.174-123.249 90.739l-0.244 0.914c-3.436 9.037-5.425 19.487-5.425 30.401 0 2.575 0.111 5.125 0.328 7.644l-0.023-0.328c-0.178 2.289-0.279 4.957-0.279 7.648 0 10.036 1.411 19.742 4.045 28.931l-0.181-0.74c14.327 49.128 54.827 86.038 105.007 94.943l0.807 0.119c5.364 0.556 11.59 0.873 17.891 0.873 12.51 0 24.727-1.25 36.535-3.631l-1.177 0.198zM721.92 482.133c48.981-15.36 78.848-52.907 91.989-115.541 3.382-19.092 5.316-41.073 5.316-63.505 0-1.554-0.009-3.107-0.028-4.657l0.002 0.236c-1.024-2.219-4.949-2.56-29.696-2.56-1.907-0.060-4.149-0.093-6.399-0.093-7.784 0-15.474 0.406-23.048 1.198l0.946-0.080c-2.199 19.373-5.618 36.748-10.296 53.599l0.568-2.399c-16.043 54.272-51.2 95.232-92.331 107.52-3.925 1.195-6.997 2.731-6.997 3.413 3.645 5.498 7.521 10.296 11.799 14.701l-0.023-0.024 11.776 13.312 17.067-1.024c10.502-0.154 20.59-1.64 30.194-4.294l-0.839 0.198zM444.757 398.507l41.984-41.472 62.635 61.269 32.597 32.085 12.288-1.536c34.458-4.418 64.828-19.264 88.507-41.224l-0.102 0.093c27.282-26.415 45.617-61.926 50.105-101.633l0.071-0.767c1.569-13.736 2.463-29.655 2.463-45.782 0-9.893-0.337-19.707-0.999-29.432l0.072 1.315-0.512-5.291h-247.296c-174.763 0-247.637 0-247.637 1.877-1.571 11.944-2.467 25.756-2.467 39.778 0 9.367 0.4 18.641 1.184 27.805l-0.082-1.193c9.557 91.307 59.221 145.749 140.971 154.453 15.701 1.536 8.875 6.656 66.219-50.005z" />
|
204 |
+
<glyph unicode="" glyph-name="fi-blog" d="M0 960v-136.533h68.267s0 85.333 85.333 85.333v-324.267s0-17.067-34.133-17.067h-17.067v-51.2h221.867v51.2h-17.067c-34.133 0-34.133 17.067-34.133 17.067v324.267c85.333 0 85.333-85.333 85.333-85.333h68.267v136.533zM989.867 806.4h-443.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h443.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0zM989.867-64h-955.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h955.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0zM989.867 226.133h-955.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h955.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0zM989.867 516.267h-443.733c-18.851 0-34.133 15.282-34.133 34.133v0 85.333c0 18.851 15.282 34.133 34.133 34.133v0h443.733c18.851 0 34.133-15.282 34.133-34.133v0-85.333c0-18.851-15.282-34.133-34.133-34.133v0z" />
|
205 |
+
<glyph unicode="" glyph-name="fi-jobs-pros-search" d="M1024 39.595l-226.816 226.816c50.818 70.758 81.267 159.126 81.267 254.605 0 242.711-196.756 439.467-439.467 439.467s-439.467-196.756-439.467-439.467c0-242.711 196.756-439.467 439.467-439.467 95.479 0 183.847 30.449 255.922 82.165l-1.317-0.899 226.987-226.816zM146.432 520.704c0 0.051 0 0.111 0 0.171 0 161.744 131.12 292.864 292.864 292.864s292.864-131.12 292.864-292.864c0-161.744-131.12-292.864-292.864-292.864v0c-161.606 0.194-292.573 131.101-292.864 292.665v0.028zM439.296 770.389l56.832-175.275h184.32l-148.992-108.373 56.832-175.275-148.992 108.373-149.163-108.373 57.003 175.275-149.163 108.373h184.32l57.003 175.275z" />
|
206 |
+
<glyph unicode="" glyph-name="fi-security-thumb-print" horiz-adv-x="780" d="M415.744 604.16c-0.077 14.363-11.738 25.977-26.112 25.977-0.48 0-0.958-0.013-1.432-0.039l0.066 0.003c-13.875-1.418-24.608-13.042-24.608-27.173 0-0.467 0.012-0.932 0.035-1.393l-0.003 0.065c0-164.864-108.715-309.589-269.824-390.315-8.414-4.358-14.065-12.998-14.065-22.959 0-3.216 0.589-6.294 1.665-9.133l-0.059 0.177c3.808-9.777 13.147-16.579 24.076-16.579 4.228 0 8.218 1.018 11.739 2.823l-0.145-0.068c179.029 89.941 298.667 252.928 298.667 438.613zM466.603 617.643c-1.831 10.356-5.469 19.595-10.6 27.803l0.19-0.326c3.763-7.655 7.305-16.771 10.090-26.211l0.32-1.267zM516.949 631.979c-2.969 13.47-7.62 25.386-13.817 36.31l0.334-0.64c4.903-9.958 9.492-21.794 13.079-34.057l0.404-1.612zM198.827 560.299c2.901 159.915 93.867 243.541 182.272 243.541 119.467 0 199.68-104.619 199.68-260.437 0-74.069 47.957-130.56 113.323-173.739 3.992-2.697 8.913-4.305 14.209-4.305 13.612 0 24.742 10.623 25.553 24.031l0.003 0.071c0.102 0.856 0.16 1.846 0.16 2.851 0 9.043-4.721 16.984-11.832 21.493l-0.104 0.062c-59.392 38.741-89.429 82.261-89.429 130.048 0.171 183.467-103.595 311.979-251.563 311.979-113.664 0-230.741-100.693-234.325-294.571-1.365-70.485-48.811-118.101-110.933-150.357q1.707-27.989 4.949-55.637c85.504 39.253 156.16 102.571 158.037 204.971zM319.488-28.16c-5.425-2.551-9.113-7.971-9.113-14.252 0-7.67 5.5-14.055 12.77-15.428l0.098-0.015c18.437-3.908 39.621-6.146 61.328-6.146 0.34 0 0.679 0.001 1.018 0.002h-0.053c0.205 0 0.447-0.001 0.689-0.001 16.803 0 33.301 1.303 49.399 3.815l-1.789-0.23c7.646 1.142 13.445 7.663 13.445 15.538 0 5.696-3.033 10.683-7.572 13.436l-0.070 0.039c-16.603 10.871-36.612 17.916-58.147 19.434l-0.391 0.022c-22.645-0.953-43.71-6.839-62.431-16.603l0.82 0.389zM516.949 631.979c-3.99 13.875-8.579 25.711-14.077 37.024l0.594-1.354c-25.6 53.419-68.437 84.139-122.368 84.139-83.115 0-128.341-96.768-130.219-192.341-0.198-12.223-1.183-24.032-2.911-35.599l0.18 1.466c-10.581-72.363-54.443-155.819-181.077-215.040-8.772-4.187-14.725-12.986-14.725-23.176 0-1.886 0.204-3.725 0.591-5.495l-0.031 0.169c2.837-11.382 12.97-19.682 25.041-19.682 4.117 0 8.009 0.965 11.461 2.682l-0.15-0.067c149.675 69.12 196.949 171.861 209.579 249.344 7.814 26.154 12.467 56.244 12.798 87.371l0.002 0.181c-0.002 0.231-0.004 0.505-0.004 0.779 0 42.827 33.635 77.798 75.93 79.939l0.191 0.008c0.508 0.012 1.108 0.019 1.708 0.019 43.185 0 78.225-34.868 78.505-77.987v-0.027c0-205.995-131.584-386.56-327.339-485.035-8.572-4.353-14.343-13.105-14.343-23.204 0-5.2 1.53-10.043 4.164-14.102l-0.061 0.101c4.702-7.358 12.827-12.166 22.076-12.166 4.406 0 8.558 1.091 12.199 3.019l-0.142-0.068c51.585 25.953 96.037 55.134 136.735 88.704l-1.225-0.981c12.8 10.581 25.088 21.675 36.864 32.939 17.524 16.635 33.864 33.948 49.217 52.12l0.788 0.957c39.718 46.847 72.543 101.171 95.914 160.264l1.366 3.917c4.267 10.923 8.021 22.016 11.605 33.109 15.56 48.061 24.545 103.36 24.576 160.753v0.015c-0.188 9.777-1.421 19.169-3.594 28.196l0.181-0.89zM585.728 323.072c-14.432 17.043-35.845 27.79-59.767 27.79-43.17 0-78.165-34.996-78.165-78.165 0-22.010 9.097-41.896 23.737-56.102l0.020-0.019c43.885-46.683 96.344-84.723 154.946-111.705l3.091-1.276c3.382-1.714 7.375-2.719 11.601-2.719 10.188 0 19.014 5.835 23.317 14.345l0.068 0.149c1.489 3.183 2.358 6.912 2.358 10.843 0 10.113-5.75 18.884-14.158 23.221l-0.146 0.069c-55.524 25.208-102.804 59.050-142.349 100.357l-0.158 0.166c-4.739 4.804-7.665 11.407-7.665 18.693 0 5.791 1.849 11.151 4.989 15.52l-0.054-0.079c4.807 6.492 12.44 10.655 21.045 10.655 7.513 0 14.284-3.173 19.048-8.251l0.013-0.014c35.292-35.938 76.812-65.613 122.837-87.302l2.603-1.103c3.354-1.696 7.311-2.689 11.5-2.689 12.131 0 22.317 8.327 25.155 19.576l0.038 0.179c0.571 2.038 0.9 4.378 0.9 6.795 0 10.077-5.708 18.82-14.067 23.174l-0.145 0.069c-42.862 20.078-79.464 46.2-110.544 77.775l-0.048 0.049zM381.099 40.107c42.155 0 88.235-24.747 131.072-58.368 4.34-3.439 9.895-5.517 15.935-5.517 5.104 0 9.861 1.484 13.864 4.043l-0.103-0.062c7.269 4.717 12.011 12.793 12.011 21.977 0 8.3-3.872 15.695-9.908 20.478l-0.054 0.041c-58.368 46.080-113.152 69.291-163.328 69.291-58.197 0-115.712-26.624-165.547-60.587-6.584-4.695-10.826-12.305-10.826-20.907s4.242-16.212 10.748-20.854l0.078-0.053c4.133-2.944 9.284-4.707 14.848-4.707s10.715 1.763 14.927 4.761l-0.079-0.054c42.667 28.331 90.112 50.517 136.363 50.517zM76.629 509.099c10.953 14.723 17.68 33.162 18.089 53.152l0.002 0.096c1.877 98.645 31.061 184.32 85.333 247.808 47.949 58.992 119.9 96.872 200.751 98.64l0.294 0.005c175.957 0 303.787-153.6 303.787-364.544-0.065-0.97-0.103-2.102-0.103-3.243s0.037-2.273 0.111-3.395l-0.008 0.153c2.863-10.836 12.578-18.695 24.128-18.695 13.133 0 23.894 10.161 24.848 23.050l0.005 0.082c0 6.997 0 13.483-1.195 18.773-4.623 72.966-20.376 140.955-45.602 204.137l1.57-4.457c-58.539 121.685-169.643 199.339-305.323 199.339h-20.309c-90.348-7.036-169.309-50.635-222.961-115.842l-0.441-0.553c-61.44-72.704-94.891-169.643-96.939-280.405 0-7.168-7.339-32.939-7.509-39.083-0.021-0.37-0.033-0.803-0.033-1.239 0-12.725 10.315-23.040 23.040-23.040 7.531 0 14.219 3.614 18.423 9.202l0.042 0.059zM702.123 274.432c-4.306 0.025-8.357 1.095-11.918 2.969l0.142-0.068c-67.619 36.118-123.472 86.075-165.393 146.437l-1.007 1.531c-1.874 3.511-2.975 7.679-2.975 12.104 0 14.421 11.691 26.112 26.112 26.112 8.417 0 15.904-3.982 20.679-10.166l0.045-0.061c38.014-53.976 86.969-97.693 143.885-128.61l2.206-1.096c8.47-4.433 14.151-13.159 14.151-23.211 0-14.356-11.585-26.006-25.917-26.111h-0.010zM597.333 31.403c-6.623 0.175-12.599 2.806-17.081 7.010l0.014-0.013c-120.491 104.789-217.429 90.112-221.867 89.429-0.706-0.068-1.526-0.106-2.354-0.106-14.421 0-26.112 11.691-26.112 26.112 0 11.98 8.068 22.076 19.067 25.151l0.184 0.044c4.949 0.853 124.075 20.821 264.704-101.376 5.462-4.81 8.89-11.818 8.89-19.627 0-14.366-11.602-26.023-25.948-26.111h-0.008z" />
|
207 |
+
<glyph unicode="" glyph-name="fi-IP" d="M664.576 643.413h-110.933v-184.32h108.032c2.047-0.14 4.436-0.22 6.844-0.22 25.202 0 48.357 8.768 66.579 23.421l-0.206-0.161c15.674 14.977 25.419 36.045 25.419 59.39 0 1.802-0.058 3.591-0.172 5.364l0.012-0.242c0.059 1.269 0.093 2.757 0.093 4.252 0 25.31-9.7 48.355-25.585 65.619l0.062-0.069c-17.146 17.018-40.764 27.535-66.839 27.535-1.162 0-2.32-0.021-3.472-0.062l0.167 0.005zM1020.416 515.072c-31.614 228.102-208.881 406.818-433.575 440.316l-2.82 0.345c-27.424 2.91-59.243 4.57-91.45 4.57-8.291 0-16.557-0.11-24.795-0.329l1.216 0.026c-241.077-21.486-433.094-206.439-465.281-442.26l-0.298-2.668c-2.194-20.167-3.445-43.559-3.445-67.243s1.251-47.074 3.692-70.111l-0.246 2.868c35.44-252.308 249.87-444.331 509.149-444.331 51.501 0 101.233 7.576 148.142 21.675l-3.638-0.939c192.476 58.672 335.236 221.894 363.209 421.903l0.311 2.716c2.192 20.015 3.442 43.227 3.442 66.731s-1.25 46.716-3.688 69.573l0.246-2.842zM341.333 340.821v-181.248c-0.029-3.466-2.845-6.264-6.314-6.264-1.816 0-3.453 0.767-4.605 1.994l-45.571 45.571c-0.978 1.189-2.449 1.942-4.096 1.942s-3.118-0.753-4.089-1.933l-0.007-0.009-45.909-45.909c-1.102-1.056-2.6-1.707-4.25-1.707-0.006 0-0.012 0-0.018 0h0.001c-3.487 0-6.315 2.827-6.315 6.315v0 581.803h121.173zM822.613 410.795q-59.051-49.835-163.499-49.835h-105.472v-206.848h-121.003v587.264h229.035c1.662 0.037 3.62 0.059 5.583 0.059 40.198 0 78.304-8.954 112.433-24.977l-1.621 0.684c32.283-15.11 58.544-38.519 76.705-67.519l0.437-0.748c17.066-28.105 27.167-62.079 27.167-98.412 0-1.222-0.011-2.442-0.034-3.658l0.003 0.183c0.127-2.447 0.199-5.313 0.199-8.195 0-51.284-22.895-97.221-59.020-128.147l-0.229-0.192z" />
|
208 |
+
<glyph unicode="" glyph-name="fi-timed-countdown" d="M822.101 832c-8.906 5.673-19.761 9.042-31.403 9.042-32.613 0-59.051-26.438-59.051-59.051 0-0.059 0-0.118 0-0.177v0.009c0.14-20.151 10.622-37.824 26.397-47.991l0.227-0.137c89.977-58.93 148.588-159.269 148.588-273.297 0-179.842-145.79-325.632-325.632-325.632-167.9 0-306.121 127.072-323.736 290.29l-0.126 1.439 41.301-41.301c9.373-10.039 22.685-16.296 37.458-16.296 28.277 0 51.2 22.923 51.2 51.2 0 14.774-6.257 28.086-16.266 37.431l-0.030 0.027-141.824 141.824c-9.263 9.252-22.054 14.974-36.181 14.974s-26.918-5.722-36.182-14.974l-141.823-141.823c-8.514-9.118-13.742-21.401-13.742-34.904 0-28.277 22.923-51.2 51.2-51.2 13.503 0 25.786 5.227 34.934 13.769l-0.030-0.027 51.2 51.2c12.809-234.197 205.837-419.252 442.087-419.252 244.502 0 442.709 198.208 442.709 442.709 0 155.076-79.735 291.529-200.444 370.599l-1.686 1.037zM445.44 263.168c15.615 0.138 29.682 6.648 39.751 17.051l160.612 160.612v381.269c0 31.010-25.139 56.149-56.149 56.149s-56.149-25.139-56.149-56.149v-335.36l-127.659-127.659c-10.198-10.167-16.508-24.229-16.508-39.765 0-31.010 25.139-56.149 56.149-56.149 0.044 0 0.087 0 0.131 0h-0.007z" />
|
209 |
+
<glyph unicode="" glyph-name="2FA" d="M221.867 460.459l-126.976 127.829 49.152 49.152 78.507-78.507 204.8 204.8 49.323-49.323zM292.352 960l-292.352-133.632v-193.707c0-38.741 13.483-259.413 292.352-372.395 278.869 112.299 292.352 333.141 292.352 371.883v194.219zM731.648 635.733l-80.384-36.693c-16.553-141.030-94.408-261.063-205.783-334.281l-1.747-1.079c12.8-80.384 66.731-238.933 288.597-327.68 278.187 112.299 291.669 333.141 291.669 371.883v193.536zM661.675 135.68l-127.659 127.659 49.323 49.323 78.507-78.507 204.8 204.8 49.323-49.323z" />
|
210 |
+
<glyph unicode="" glyph-name="fi-lightbulb-line" horiz-adv-x="693" d="M346.453 874.667c0.074 0 0.161 0 0.249 0 144.024 0 260.779-116.755 260.779-260.779 0-77.848-34.112-147.73-88.203-195.512l-0.28-0.243c-34.22-30.067-55.765-73.851-55.979-122.672v-0.038h-233.301c-0.209 48.912-21.752 92.751-55.797 122.723l-0.182 0.157c-54.306 48.021-88.372 117.86-88.372 195.657 0 133.307 100.025 243.252 229.118 258.876l1.249 0.123c9.148 1.087 19.743 1.707 30.483 1.707 0.083 0 0.167 0 0.25 0h-0.013zM346.453 960c-0.072 0-0.156 0-0.241 0-14.106 0-28.023-0.806-41.708-2.375l1.672 0.156c-173.289-20.605-306.381-166.672-306.381-343.824 0-103.33 45.28-196.083 117.081-259.502l0.372-0.322c16.59-14.358 27.086-35.371 27.306-58.842v-44.070c0-0.051 0-0.111 0-0.171 0-23.127 18.7-41.887 41.804-41.984h320.18c23.187 0 41.984 18.797 41.984 41.984v0 44.203c0.203 23.426 10.635 44.375 27.040 58.628l0.096 0.082c72.241 63.745 117.569 156.542 117.569 259.926 0 191.152-154.96 346.112-346.112 346.112-0.233 0-0.466 0-0.698-0.001h0.036zM530.432 74.581h-367.957c-9.991 0-18.091 8.099-18.091 18.091v0 39.424c0 9.991 8.099 18.091 18.091 18.091h367.957c9.991 0 18.091-8.099 18.091-18.091v0-39.424c0-9.991-8.099-18.091-18.091-18.091v0zM465.579-64h-238.933c-9.991 0-18.091 8.099-18.091 18.091v0 39.253c0 9.991 8.099 18.091 18.091 18.091h238.933c9.991 0 18.091-8.099 18.091-18.091v0-39.424c-0.097-9.918-8.159-17.92-18.090-17.92 0 0-0.001 0-0.001 0v0z" />
|
211 |
+
<glyph unicode="" glyph-name="fi-accounts-billing" d="M887.467 857.6c18.851 0 34.133-15.282 34.133-34.133v0-750.933c0-18.851-15.282-34.133-34.133-34.133v0h-750.933c-18.851 0-34.133 15.282-34.133 34.133v0 750.933c0 18.851 15.282 34.133 34.133 34.133v0h750.933zM887.467 960h-750.933c-75.405 0-136.533-61.128-136.533-136.533v0-750.933c0-75.405 61.128-136.533 136.533-136.533v0h750.933c75.405 0 136.533 61.128 136.533 136.533v0 750.933c0 75.405-61.128 136.533-136.533 136.533v0zM546.133 686.933h273.067v-68.267h-273.067v68.267zM546.133 550.4h273.067v-68.267h-273.067v68.267zM546.133 413.867h273.067v-68.267h-273.067v68.267zM648.533 277.333h170.667v-68.267h-170.667v68.267zM469.163 394.752v0c-6.070 13.397-14.419 24.751-24.662 34.058l-0.084 0.075c-10.841 9.728-23.196 18.101-36.597 24.668l-0.95 0.42c-13.995 6.827-29.867 13.653-47.104 20.139-10.795 3.745-19.757 7.606-28.391 12.017l1.255-0.582c-6.523 3.078-12.14 6.784-17.152 11.166l0.085-0.073c-3.299 2.953-5.91 6.604-7.609 10.727l-0.071 0.195c-1.518 4.090-2.396 8.815-2.396 13.746 0 0.268 0.003 0.535 0.008 0.801l-0.001-0.040c-0.003 0.2-0.005 0.436-0.005 0.672 0 5.255 0.876 10.306 2.491 15.013l-0.097-0.325c1.527 4.41 3.921 8.178 6.998 11.265l-0.001-0.001c3.375 3.307 7.486 5.877 12.062 7.442l0.226 0.067c5.39 1.85 11.601 2.918 18.060 2.918 0.491 0 0.98-0.006 1.468-0.018l-0.072 0.001c0.645 0.038 1.399 0.060 2.158 0.060 11.455 0 21.753-4.949 28.874-12.826l0.030-0.034c7.463-9.919 11.952-22.444 11.952-36.017 0-1.619-0.064-3.224-0.189-4.811l0.013 0.21v-8.704h88.405v8.704c0.008 0.569 0.012 1.242 0.012 1.915 0 16.58-2.69 32.532-7.657 47.443l0.306-1.059c-4.984 14.706-12.244 27.416-21.481 38.41l0.148-0.18c-9.409 10.83-20.741 19.708-33.506 26.166l-0.627 0.288c-10.459 5.418-22.591 9.626-35.368 11.992l-0.813 0.125v56.149h-57.515v-55.296c-13.746-1.918-26.171-5.443-37.819-10.433l0.955 0.364c-13.229-5.818-24.539-13.574-34.146-23.052l0.012 0.012c-9.597-9.452-17.286-20.811-22.457-33.465l-0.241-0.668c-5.316-13.097-8.401-28.29-8.401-44.203s3.085-31.106 8.689-45.012l-0.288 0.81c6.151-13.391 14.551-24.741 24.83-34.055l0.088-0.078c10.83-9.504 23.192-17.661 36.583-23.996l0.963-0.41c12.317-6.145 27.925-12.769 43.929-18.568l3.345-1.059c10.416-3.532 19.045-7.167 27.37-11.32l-1.258 0.568c6.152-2.975 11.439-6.625 16.080-10.957l-0.037 0.035c3.41-3.291 6.13-7.271 7.939-11.718l0.082-0.228c1.628-4.394 2.57-9.469 2.57-14.764 0-0.33-0.004-0.658-0.011-0.986l0.001 0.049c0.008-0.273 0.012-0.594 0.012-0.917 0-9.965-4.27-18.932-11.080-25.172l-0.025-0.023c-8.528-6.586-19.369-10.556-31.136-10.556-1.355 0-2.698 0.053-4.026 0.156l0.176-0.011c-7.080 0.076-13.883 1.13-20.322 3.035l0.525-0.133c-6.203 1.724-11.579 4.667-16.094 8.577l0.052-0.044c-4.991 4.614-8.895 10.329-11.334 16.764l-0.101 0.303c-2.939 7.338-4.644 15.844-4.644 24.749 0 0.78 0.013 1.556 0.039 2.329l-0.003-0.112v8.704h-87.381v-8.704c-0.034-1.148-0.053-2.499-0.053-3.854 0-18.784 3.719-36.7 10.461-53.050l-0.338 0.926c6.427-15.207 15.558-28.114 26.899-38.68l0.067-0.062c10.835-9.886 23.653-17.819 37.761-23.115l0.81-0.267c10.356-3.957 22.498-7.117 35.074-8.934l0.937-0.111v-51.2h57.515v51.2c13.944 1.895 26.55 5.301 38.44 10.108l-1.064-0.38c13.734 5.467 25.514 13.027 35.563 22.417l-0.064-0.059c9.812 9.38 17.628 20.756 22.808 33.487l0.232 0.646c5.077 12.414 8.024 26.821 8.024 41.916 0 0.264-0.001 0.528-0.003 0.792v-0.041c0.014 0.665 0.022 1.449 0.022 2.234 0 15.644-3.209 30.539-9.004 44.063l0.278-0.729z" />
|
212 |
+
<glyph unicode="" glyph-name="fi-tech-support" d="M1024 362.667v170.667l-117.931 26.624c-9.668 33.722-22.168 63.058-37.746 90.414l1.053-2.008 64.512 102.4-119.467 119.467-102.4-64.512c-25.349 14.534-54.685 27.035-85.534 35.98l-2.872 0.713-26.283 117.589h-170.667l-26.112-117.931c-33.72-9.658-63.056-22.159-90.408-37.744l2.003 1.051-102.4 64.512-119.467-119.467 64.512-102.4c-14.525-25.347-27.026-54.683-35.978-85.528l-0.715-2.878-118.101-26.283v-170.667l117.931-26.624c5.127-17.879 10.358-32.504 16.369-46.72l-1.009 2.688 81.067 81.067c-6.075 22.879-9.564 49.146-9.564 76.227 0 170.416 138.149 308.565 308.565 308.565s308.565-138.149 308.565-308.565c0-170.416-138.149-308.565-308.565-308.565-26.915 0-53.026 3.446-77.915 9.921l2.145-0.474-81.067-81.067c11.562-5.025 26.188-10.257 41.175-14.643l2.857-0.717 26.112-117.76h170.667l26.624 117.931c33.722 9.668 63.058 22.168 90.414 37.746l-2.008-1.053 102.4-64.512 119.467 119.467-64.512 102.4c14.518 25.345 27.018 54.68 35.976 85.522l0.717 2.883zM676.523 492.885l-59.051-59.051c-12.339-12.268-29.348-19.851-48.128-19.851s-35.789 7.583-48.131 19.855l-23.378 23.378c-12.268 12.339-19.851 29.348-19.851 48.128s7.583 35.789 19.855 48.131l59.048 59.048c-13.353 3.921-28.694 6.176-44.561 6.176-24.158 0-47.095-5.229-67.741-14.616l1.027 0.418c-34.455-15.502-62.226-40.745-80.448-72.207l-0.448-0.838c-14.639-23.889-23.309-52.81-23.309-83.756 0-13.769 1.716-27.138 4.947-39.903l-0.24 1.12-303.445-303.445c-16.226-16.226-26.262-38.642-26.262-63.403 0-49.521 40.144-89.665 89.665-89.665 24.76 0 47.177 10.036 63.403 26.262l303.275 303.275c11.585-2.959 24.885-4.657 38.582-4.657 31.029 0 60.021 8.716 84.663 23.834l-0.706-0.403c32.301 18.67 57.543 46.441 72.601 79.797l0.444 1.099c8.969 19.618 14.198 42.555 14.198 66.714 0 15.867-2.256 31.208-6.464 45.719l0.287-1.157zM102.4 4.267c-18.851 0-34.133 15.282-34.133 34.133s15.282 34.133 34.133 34.133c18.851 0 34.133-15.282 34.133-34.133v0c0-18.851-15.282-34.133-34.133-34.133v0z" />
|
213 |
+
<glyph unicode="" glyph-name="fi-arrow-skip-back" horiz-adv-x="973" d="M469.163 38.4c-5.459-5.045-11.769-9.279-18.669-12.446l-0.445-0.183c-6.878-3.128-14.917-4.951-23.381-4.951s-16.503 1.823-23.744 5.098l0.363-0.147c-7.395 3.402-13.754 7.631-19.351 12.688l0.066-0.059-366.933 367.104c-5.495 5.378-9.891 11.855-12.835 19.078l-0.136 0.378c-2.595 6.654-4.099 14.357-4.099 22.412 0 0.221 0.001 0.442 0.003 0.662v-0.034c0 0.092-0.001 0.2-0.001 0.308 0 8.443 1.694 16.491 4.76 23.822l-0.151-0.408c2.823 7.964 7.069 14.793 12.483 20.506l-0.024-0.026 367.787 365.397c10.998 10.865 26.121 17.576 42.811 17.576 8.382 0 16.369-1.693 23.637-4.755l-0.401 0.15c7.449-3.171 13.8-7.552 19.106-12.961l0.009-0.009 41.984-43.008c10.865-10.998 17.576-26.121 17.576-42.811 0-8.382-1.693-16.369-4.755-23.637l0.15 0.401c-3.171-7.449-7.552-13.8-12.961-19.106l-0.009-0.009-279.040-281.429 279.040-280.576c5.419-5.315 9.8-11.665 12.826-18.734l0.145-0.38c2.915-6.785 4.609-14.682 4.609-22.975 0-0.143-0.001-0.286-0.002-0.428v0.022c0-0.093 0.001-0.202 0.001-0.312 0-8.501-1.693-16.606-4.761-23.997l0.153 0.415c-3.002-7.398-7.409-13.668-12.933-18.739l-0.037-0.034-41.984-43.861zM911.872 38.4c-5.532-4.998-11.891-9.227-18.819-12.435l-0.467-0.194c-6.786-3.127-14.724-4.95-23.088-4.95-0.103 0-0.206 0-0.309 0.001h0.016c-0.055 0-0.12 0-0.184 0-8.401 0-16.377 1.823-23.553 5.095l0.356-0.145c-7.32 3.449-13.618 7.672-19.183 12.69l0.069-0.061-365.909 367.104c-5.495 5.378-9.891 11.855-12.835 19.078l-0.136 0.378c-2.915 7.017-4.608 15.168-4.608 23.713 0 0.063 0 0.126 0 0.19v-0.010c0 0.092-0.001 0.2-0.001 0.308 0 8.443 1.694 16.491 4.76 23.822l-0.151-0.408c3.079 7.66 7.475 14.193 12.965 19.621l0.005 0.005 366.763 365.397c5.34 5.379 11.683 9.753 18.726 12.82l0.389 0.151c6.456 2.612 13.944 4.127 21.786 4.127 0.681 0 1.359-0.011 2.035-0.034l-0.098 0.003c0.275 0.005 0.599 0.007 0.924 0.007 16.262 0 31.002-6.517 41.751-17.082l-0.009 0.008 42.667-43.008c10.865-10.998 17.576-26.121 17.576-42.811 0-8.382-1.693-16.369-4.755-23.637l0.15 0.401c-3.171-7.449-7.552-13.8-12.961-19.106l-0.009-0.009-280.235-281.429 280.235-280.576c5.419-5.315 9.8-11.665 12.826-18.734l0.145-0.38c2.606-6.45 4.118-13.929 4.118-21.762 0-0.569-0.008-1.137-0.024-1.702l0.002 0.083c0-0.093 0.001-0.202 0.001-0.312 0-8.501-1.693-16.606-4.761-23.997l0.153 0.415c-3.002-7.398-7.409-13.668-12.933-18.739l-0.037-0.034-42.496-43.861z" />
|
214 |
+
<glyph unicode="" glyph-name="fi-arrow-skip-forward" horiz-adv-x="973" d="M503.637 38.4c5.459-5.045 11.769-9.279 18.669-12.446l0.445-0.183c6.878-3.128 14.917-4.951 23.381-4.951s16.503 1.823 23.744 5.098l-0.363-0.147c7.395 3.402 13.754 7.631 19.351 12.688l-0.066-0.059 366.933 367.104c5.495 5.378 9.891 11.855 12.835 19.078l0.136 0.378c2.595 6.654 4.099 14.357 4.099 22.412 0 0.221-0.001 0.442-0.003 0.662v-0.034c0 0.092 0.001 0.2 0.001 0.308 0 8.443-1.694 16.491-4.76 23.822l0.151-0.408c-2.823 7.964-7.069 14.793-12.483 20.506l0.024-0.026-367.787 365.397c-10.998 10.865-26.121 17.576-42.811 17.576-8.382 0-16.369-1.693-23.637-4.755l0.401 0.15c-7.449-3.171-13.8-7.552-19.106-12.961l-0.009-0.009-41.984-43.008c-10.865-10.998-17.576-26.121-17.576-42.811 0-8.382 1.693-16.369 4.755-23.637l-0.15 0.401c3.171-7.449 7.552-13.8 12.961-19.106l0.009-0.009 279.040-281.429-279.040-280.576c-5.419-5.315-9.8-11.665-12.826-18.734l-0.145-0.38c-2.915-6.785-4.609-14.682-4.609-22.975 0-0.143 0.001-0.286 0.002-0.428v0.022c0-0.093-0.001-0.202-0.001-0.312 0-8.501 1.693-16.606 4.761-23.997l-0.153 0.415c3.002-7.398 7.409-13.668 12.933-18.739l0.037-0.034 41.984-43.861zM60.928 38.4c5.532-4.998 11.891-9.227 18.819-12.435l0.467-0.194c6.479-2.817 14.025-4.455 21.955-4.455 0.502 0 1.002 0.007 1.5 0.020l-0.074-0.002c0.055 0 0.12 0 0.184 0 8.401 0 16.377 1.823 23.553 5.095l-0.356-0.145c7.315 3.294 13.614 7.353 19.212 12.2l-0.097-0.082 365.909 367.104c5.495 5.378 9.891 11.855 12.835 19.078l0.136 0.378c2.915 7.017 4.608 15.168 4.608 23.713 0 0.063 0 0.126 0 0.19v-0.010c0 0.092 0.001 0.2 0.001 0.308 0 8.443-1.694 16.491-4.76 23.822l0.151-0.408c-3.079 7.66-7.475 14.193-12.965 19.621l-0.005 0.005-366.763 365.397c-5.34 5.379-11.683 9.753-18.726 12.82l-0.389 0.151c-6.456 2.612-13.944 4.127-21.786 4.127-0.681 0-1.359-0.011-2.035-0.034l0.098 0.003c-0.275 0.005-0.599 0.007-0.924 0.007-16.262 0-31.002-6.517-41.751-17.082l0.009 0.008-42.667-43.008c-10.865-10.998-17.576-26.121-17.576-42.811 0-8.382 1.693-16.369 4.755-23.637l-0.15 0.401c3.171-7.449 7.552-13.8 12.961-19.106l0.009-0.009 280.235-281.429-280.235-280.576c-5.419-5.315-9.8-11.665-12.826-18.734l-0.145-0.38c-2.606-6.45-4.118-13.929-4.118-21.762 0-0.569 0.008-1.137 0.024-1.702l-0.002 0.083c0-0.093-0.001-0.202-0.001-0.312 0-8.501 1.693-16.606 4.761-23.997l-0.153 0.415c2.854-7.368 7.093-13.636 12.44-18.756l0.019-0.018 43.008-43.861z" />
|
215 |
+
<glyph unicode="" glyph-name="fi-arrow-skip-start" horiz-adv-x="786" d="M725.333 38.4c-5.532-4.998-11.891-9.227-18.819-12.435l-0.467-0.194c-6.878-3.128-14.917-4.951-23.381-4.951s-16.503 1.823-23.744 5.098l0.363-0.147c-7.332 3.4-13.636 7.628-19.173 12.682l0.058-0.052-367.104 367.104c-5.495 5.378-9.891 11.855-12.835 19.078l-0.136 0.378c-2.595 6.654-4.099 14.357-4.099 22.412 0 0.221 0.001 0.442 0.003 0.662v-0.034c0 0.092-0.001 0.2-0.001 0.308 0 8.443 1.694 16.491 4.76 23.822l-0.151-0.408c2.823 7.964 7.069 14.793 12.483 20.506l-0.024-0.026 367.957 365.397c5.29 5.458 11.648 9.846 18.742 12.831l0.373 0.139c6.906 2.989 14.947 4.728 23.395 4.728 16.663 0 31.745-6.765 42.652-17.697l0.001-0.001 41.813-43.008c10.865-10.998 17.576-26.121 17.576-42.811 0-8.382-1.693-16.369-4.755-23.637l0.15 0.401c-3.171-7.449-7.552-13.8-12.961-19.106l-0.009-0.009-279.040-281.429 279.040-280.576c5.419-5.315 9.8-11.665 12.826-18.734l0.145-0.38c2.915-6.785 4.609-14.682 4.609-22.975 0-0.143-0.001-0.286-0.002-0.428v0.022c0-0.093 0.001-0.202 0.001-0.312 0-8.501-1.693-16.606-4.761-23.997l0.153 0.415c-3.002-7.398-7.409-13.668-12.933-18.739l-0.037-0.034-41.813-43.861zM136.533 38.4h-102.4c-18.851 0-34.133 15.282-34.133 34.133v0 750.933c0 18.851 15.282 34.133 34.133 34.133v0h102.4c18.851 0 34.133-15.282 34.133-34.133v0-750.933c0-18.851-15.282-34.133-34.133-34.133v0z" />
|
216 |
+
<glyph unicode="" glyph-name="fi-arrow-skip-end" horiz-adv-x="786" d="M60.928 38.4c5.532-4.998 11.891-9.227 18.819-12.435l0.467-0.194c6.479-2.817 14.025-4.455 21.955-4.455 0.502 0 1.002 0.007 1.5 0.020l-0.074-0.002c0.055 0 0.12 0 0.184 0 8.401 0 16.377 1.823 23.553 5.095l-0.356-0.145c7.315 3.294 13.614 7.353 19.212 12.2l-0.097-0.082 365.909 366.933c5.459 5.456 9.849 11.982 12.829 19.236l0.142 0.391c2.915 6.976 4.609 15.081 4.609 23.582 0 0.11 0 0.219-0.001 0.329v-0.017c0 0.092 0.001 0.2 0.001 0.308 0 8.443-1.694 16.491-4.76 23.822l0.151-0.408c-3.079 7.66-7.475 14.193-12.965 19.621l-0.005 0.005-366.763 365.397c-5.34 5.379-11.683 9.753-18.726 12.82l-0.389 0.151c-6.456 2.612-13.944 4.127-21.786 4.127-0.681 0-1.359-0.011-2.035-0.034l0.098 0.003c-0.275 0.005-0.599 0.007-0.924 0.007-16.262 0-31.002-6.517-41.751-17.082l0.009 0.008-42.667-43.008c-5.185-5.414-9.393-11.813-12.311-18.881l-0.148-0.405c-3.113-6.998-4.925-15.163-4.925-23.751 0-16.439 6.641-31.328 17.386-42.128l-0.003 0.003 280.235-281.429-280.235-280.576c-5.419-5.315-9.8-11.665-12.826-18.734l-0.145-0.38c-2.605-6.478-4.115-13.989-4.115-21.853 0-0.538 0.007-1.074 0.021-1.608l-0.002 0.079c0-0.093-0.001-0.202-0.001-0.312 0-8.501 1.693-16.606 4.761-23.997l-0.153 0.415c2.791-7.392 7.040-13.672 12.434-18.75l0.025-0.023 43.008-43.861zM649.728 38.4h102.4c18.851 0 34.133 15.282 34.133 34.133v0 750.933c0 18.851-15.282 34.133-34.133 34.133v0h-102.4c-18.851 0-34.133-15.282-34.133-34.133v0-750.933c0-18.851 15.282-34.133 34.133-34.133v0z" />
|
217 |
+
<glyph unicode="" glyph-name="fi-download" d="M960.171 428.032h-227.328c-0.006 0-0.013 0-0.020 0-28.238 0-52.193-18.336-60.608-43.752-22.516-68.773-85.704-117.249-160.215-117.249s-137.699 48.476-159.747 115.61c-8.882 27.055-32.837 45.391-61.075 45.391-0.007 0-0.014 0-0.022 0h-227.327c0 0 0 0 0 0-35.252 0-63.829-28.577-63.829-63.829 0-0.060 0-0.12 0-0.18v-364.193c0-35.252 28.577-63.829 63.829-63.829h896.341c35.252 0 63.829 28.577 63.829 63.829v364.203c0 35.252-28.577 63.829-63.829 63.829zM498.517 393.899c3.133-4.361 8.19-7.168 13.903-7.168 0.032 0 0.064 0 0.097 0h-0.005c0.027 0 0.059 0 0.092 0 5.713 0 10.77 2.807 13.868 7.117l176.675 248.542c2.213 2.85 3.548 6.478 3.548 10.417 0 9.426-7.641 17.067-17.067 17.067-0.167 0-0.334-0.002-0.501-0.007l-83.090 0.001v222.891c0 9.426-7.641 17.067-17.067 17.067h-153.6c-9.426 0-17.067-7.641-17.067-17.067v-222.891h-83.456c-0.064 0.001-0.14 0.001-0.216 0.001-9.426 0-17.067-7.641-17.067-17.067 0-3.787 1.234-7.286 3.321-10.118z" />
|
218 |
+
<glyph unicode="" glyph-name="fi-first-aid" d="M249.003 658.432h78.336v65.707h366.763v-67.072h78.336v115.2c-0.192 17.325-14.234 31.308-31.564 31.403h-460.809c-17.193-0.285-31.043-14.196-31.232-31.385s0-1.042 0-1.725zM190.464-64h642.901v652.629h-642.901zM317.781 308.053c0.182 5.298 4.43 9.546 9.711 9.728h130.406v130.219c0 5.373 4.355 9.728 9.728 9.728h91.477c0 0 0.001 0 0.001 0 5.373 0 9.728-4.355 9.728-9.728 0-0.060-0.001-0.12-0.002-0.18v-130.38h130.901c5.373 0 9.728-4.355 9.728-9.728v-91.477c0-5.373-4.355-9.728-9.728-9.728h-130.731v-130.56c0-5.373-4.355-9.728-9.728-9.728h-91.477c-5.373 0-9.728 4.355-9.728 9.728v130.901h-130.56c-5.373 0-9.728 4.355-9.728 9.728zM51.2 588.629c-28.277 0-51.2-22.923-51.2-51.2s0-1.365 0-2.048v-546.987s0-1.195 0-1.195c0-28.277 22.923-51.2 51.2-51.2h75.776v652.629zM1024-12.8v550.741c0 28.277-22.923 51.2-51.2 51.2h-75.947v-653.141h75.947c28.277 0 51.2 22.923 51.2 51.2v0z" />
|
219 |
+
<glyph unicode="" glyph-name="fi-sheild-badge" horiz-adv-x="915" d="M808.789 663.211c0 88.917 85.333 153.6 85.333 153.6l-88.064 102.4c-37.364-26.176-83.769-41.829-133.83-41.829-0.95 0-1.899 0.006-2.847 0.017-165.573-0.855-211.824 82.601-211.824 82.601s-46.421-83.456-211.627-83.456c-0.803-0.010-1.753-0.016-2.703-0.016-50.061 0-96.466 15.653-134.588 42.331l-87.306-102.902s85.333-64.512 85.333-153.6-106.667-134.485-106.667-295.083 72.704-275.115 288.597-294.741c83.456-9.045 168.789-136.533 168.789-136.533s85.333 128 168.789 136.533c216.064 19.115 288.768 133.461 288.768 294.059s-106.155 207.019-106.155 295.936zM561.664 454.144l64.341-197.973-168.448 122.368-168.448-122.368 64.341 197.973-168.448 122.368h207.531l64.341 197.973 64.341-197.973h208.213z" />
|
220 |
+
<glyph unicode="" glyph-name="fi-coffee-cup" d="M56.832 49.835h967.168s0-113.835-113.835-113.835h-739.499c-113.835 0-113.835 113.835-113.835 113.835zM853.333 732.501h-568.832c-56.832 0-56.832-60.928-56.832-60.928v-10.411c-16.939 6.366-36.514 10.109-56.946 10.24-94.314 0-170.724-76.41-170.724-170.666s76.41-170.667 170.667-170.667c20.458 0.234 39.959 4.031 58.009 10.798l-1.177-124.632c0-56.832 56.832-52.736 56.832-52.736h57.003v-56.832h455.168v56.832h56.832s56.832-4.096 56.832 52.736v455.168s0 60.928-56.832 60.928zM170.667 443.904c-31.387 0-56.832 25.445-56.832 56.832s25.445 56.832 56.832 56.832c31.327 0 56.735-25.347 56.832-56.652v-0.009c0 0 0 0 0 0 0-31.422-25.424-56.905-56.823-57.002z" />
|
221 |
+
<glyph unicode="" glyph-name="fi-skull" d="M1001.131 155.136c-13.961 14.125-33.335 22.873-54.753 22.873-20.032 0-38.278-7.653-51.971-20.194l-118.044 118.153c32.021 48.523 51.082 108.051 51.082 172.032s-19.061 123.509-51.815 173.216l118.152 116.917c13.202-10.772 30.238-17.297 48.798-17.297 42.792 0 77.483 34.69 77.483 77.483 0 19.455-7.17 37.235-19.012 50.842-13.648 13.555-32.571 21.992-53.464 21.992-4.538 0-8.983-0.398-13.303-1.161 1.346 4.432 1.855 9.45 1.855 14.586 0 20.982-8.489 39.981-22.221 53.749-14.144 14.644-33.956 23.737-55.892 23.737-42.896 0-77.67-34.774-77.67-77.67 0-20.96 8.302-39.981 21.798-53.953l-118.123-118.079c-48.523 32.021-108.051 51.082-172.032 51.082s-123.509-19.061-173.216-51.815l-116.917 118.152c10.772 13.202 17.297 30.238 17.297 48.798 0 42.792-34.69 77.483-77.483 77.483-19.455 0-37.235-7.17-50.842-19.012-13.643-13.663-22.138-32.644-22.138-53.61 0-4.486 0.389-8.881 1.135-13.154-4.431 1.343-9.448 1.852-14.585 1.852-20.982 0-39.981-8.489-53.749-22.221-14.629-14.151-23.711-33.961-23.711-55.892 0-42.929 34.8-77.729 77.729-77.729 20.997 0 40.050 8.326 54.037 21.856l118.080-118.122c-32.021-48.523-51.082-108.051-51.082-172.032s19.061-123.509 51.815-173.216l-118.152-116.917c-13.202 10.772-30.238 17.297-48.798 17.297-42.792 0-77.483-34.69-77.483-77.483 0-19.455 7.17-37.235 19.012-50.842 13.648-13.555 32.571-21.992 53.464-21.992 4.538 0 8.983 0.398 13.303 1.161-1.346-4.432-1.855-9.45-1.855-14.586 0-20.982 8.489-39.981 22.221-53.749 14.144-14.644 33.956-23.737 55.892-23.737 42.896 0 77.67 34.774 77.67 77.67 0 20.96-8.302 39.981-21.798 53.953l114.539 114.495v-77.995c47.44-39.038 108.807-62.708 175.701-62.708s128.261 23.67 176.181 63.091l-0.48 77.612 114.347-113.835c-12.229-13.641-19.707-31.761-19.707-51.628 0-42.792 34.69-77.483 77.483-77.483 20.929 0 39.919 8.298 53.861 21.782 13.628 13.707 22.065 32.63 22.065 53.523 0 4.538-0.398 8.983-1.161 13.303 4.449-1.355 9.486-1.869 14.642-1.869 20.967 0 39.949 8.496 53.691 22.233 13.938 13.93 22.56 33.18 22.56 54.442s-8.622 40.512-22.56 54.442zM426.667 330.069c-33.273 0-60.245 26.973-60.245 60.245s26.973 60.245 60.245 60.245c33.273 0 60.245-26.973 60.245-60.245s-26.973-60.245-60.245-60.245zM597.333 328.533c-33.273 0-60.245 26.973-60.245 60.245s26.973 60.245 60.245 60.245c33.273 0 60.245-26.973 60.245-60.245s-26.973-60.245-60.245-60.245z" />
|
222 |
+
<glyph unicode="" glyph-name="fi-ticket" d="M1018.709 615.595h-1.024l-125.269 125.952c-9.815-6.689-21.933-10.681-34.984-10.681-34.592 0-62.635 28.042-62.635 62.635 0 13.094 4.018 25.25 10.888 35.301l-126.262 125.907c-3.275 3.279-7.8 5.307-12.8 5.307s-9.525-2.028-12.8-5.306l-648.534-648.534c-3.279-3.275-5.307-7.8-5.307-12.8s2.028-9.525 5.306-12.8l126.294-126.123c9.77 6.603 21.813 10.541 34.776 10.541 34.592 0 62.635-28.042 62.635-62.635 0-12.963-3.938-25.006-10.682-34.998l124.728-124.194 1.536-1.707c3.275-3.279 7.8-5.307 12.8-5.307s9.525 2.028 12.8 5.306v0l648.533 648.533c3.279 3.275 5.307 7.8 5.307 12.8s-2.028 9.525-5.306 12.8zM858.624 572.928l-471.552-471.552c-3.275-3.279-7.8-5.307-12.8-5.307s-9.525 2.028-12.8 5.306l-196.096 196.267c-3.279 3.275-5.307 7.8-5.307 12.8s2.028 9.525 5.306 12.8l471.552 471.382c3.275 3.279 7.8 5.307 12.8 5.307s9.525-2.028 12.8-5.306l196.267-196.267c3.228-3.266 5.222-7.757 5.222-12.715s-1.994-9.449-5.223-12.716zM634.027 432.469l-69.803 34.133 8.533 73.045c0.009 0.116 0.014 0.251 0.014 0.388 0 2.922-2.369 5.291-5.291 5.291-1.391 0-2.657-0.537-3.602-1.415l-51.879-52.904-68.267 32.597c-0.639 0.295-1.386 0.467-2.174 0.467-2.922 0-5.291-2.369-5.291-5.291 0-0.788 0.172-1.535 0.481-2.207l32.584-68.234-52.565-51.541c-0.875-0.941-1.412-2.207-1.412-3.598 0-2.922 2.369-5.291 5.291-5.291 0.137 0 0.272 0.005 0.406 0.015l73.028 8.532 34.133-69.803c0.876-1.784 2.679-2.99 4.764-2.99 2.469 0 4.542 1.691 5.126 3.977l19.123 76.666 76.629 19.115c0.942 0.243 1.751 0.719 2.389 1.365 0.954 0.931 1.546 2.23 1.546 3.666 0 2.091-1.253 3.889-3.049 4.684z" />
|
223 |
+
<glyph unicode="" glyph-name="fi-stopwatch" horiz-adv-x="1116" d="M1094.656 829.44l-108.203 109.056c-13.429 16.024-33.451 26.14-55.836 26.14-40.153 0-72.704-32.551-72.704-72.704 0-22.385 10.117-42.407 26.027-55.744l108.316-109.319c13.136-13.032 31.227-21.086 51.2-21.086s38.064 8.054 51.205 21.091c12.987 13.149 21.012 31.235 21.012 51.195s-8.025 38.046-21.024 51.207zM130.56 938.496l-109.056-108.203c-10.494-12.516-16.868-28.795-16.868-46.564 0-40.153 32.551-72.704 72.704-72.704 17.768 0 34.048 6.374 46.677 16.96l109.114 108.281c16.024 13.429 26.14 33.451 26.14 55.836 0 40.153-32.551 72.704-72.704 72.704-22.385 0-42.407-10.117-55.744-26.027zM555.691 721.067c0.101 0 0.222 0 0.342 0 179.088 0 324.267-145.179 324.267-324.267s-145.179-324.267-324.267-324.267c-179.088 0-324.267 145.179-324.267 324.267 0 89.671 36.398 170.84 95.225 229.541 58.194 58.516 138.753 94.727 227.769 94.727 0.327 0 0.654 0 0.981-0.001zM555.691 859.648c-255.077-0.225-461.77-207.057-461.77-462.165 0-255.247 206.918-462.165 462.165-462.165s462.165 206.918 462.165 462.165c0 127.891-51.947 243.65-135.892 327.327-83.437 83.623-198.788 135.351-326.22 135.351-0.158 0-0.315 0-0.472 0zM692.053 430.933v2.901c-1.529 5.5-3.042 9.928-4.767 14.248 0.33 0.941-0.694 2.819-1.548 4.525v0c-14.626 32.964-40.422 58.761-72.483 73.028l-0.904 0.359h-1.707v136.533h-107.691v-136.533h-1.024c-17.925-7.295-33.239-17.516-46.093-30.221-25.198-25.421-40.777-60.439-40.777-99.096 0-0.137 0-0.274 0.001-0.411v0.021s0 0 0-0.853c0.040-7.079 0.597-13.995 1.635-20.751l-0.099 0.783c1.777-12.311 4.879-23.408 9.215-33.864l-34.473-33.208-13.995-13.995 74.752-74.752 48.128 48.128 2.389-1.195h1.195c15.185-6.054 32.782-9.564 51.2-9.564s36.015 3.511 52.16 9.899l1.77-0.335c51.588 21.774 87.207 71.794 87.552 130.175-0.067 12.202-1.682 23.952-4.657 35.149zM593.067 360.619c-9.604-9.596-22.867-15.531-37.516-15.531-29.314 0-53.077 23.764-53.077 53.077s23.764 53.077 53.077 53.077c14.649 0 27.912-5.935 37.516-15.531 9.655-9.587 15.632-22.869 15.632-37.546s-5.977-27.959-15.629-37.544z" />
|
224 |
+
<glyph unicode="" glyph-name="fi-audio-sound" d="M722.091 929.451h-5.291c-0.2 0.002-0.437 0.003-0.674 0.003-19.274 0-36.936-6.901-50.651-18.366l-282.499-235.589c-15.693-13.166-36.108-21.163-58.392-21.163-0.112 0-0.223 0-0.335 0.001h-288.921c0 0-0.001 0-0.002 0-19.511 0-35.328-15.817-35.328-35.328 0-0.12 0.001-0.24 0.002-0.36v-341.315c0-19.511 15.817-35.328 35.328-35.328h288.939c22.275-0.006 42.681-8.002 58.509-21.278l282.824-235.746c13.59-11.364 31.252-18.264 50.526-18.264 0.237 0 0.474 0.001 0.71 0.003h5.767c11.126 0.284 20.047 9.325 20.139 20.471v921.609c0 11.405-9.246 20.651-20.651 20.651zM897.195 26.112c0 0 0 0 0 0-22.81 0-41.301 18.491-41.301 41.301 0 7.055 1.769 13.697 4.887 19.506 51.092 98.083 80.617 226.425 80.617 361.081s-28.501 262.997-80.555 361.301c-2.336 5.017-3.7 10.892-3.7 17.085 0 22.81 18.491 41.301 41.301 41.301 14.865 0 27.897-7.854 35.171-19.638 58.3-109.917 90.385-252.253 90.385-400.050s-32.085-290.133-90.283-399.872c-7.072-13.194-20.767-22.016-36.522-22.016 0 0 0 0 0 0z" />
|
225 |
+
<glyph unicode="" glyph-name="fi-progress" d="M512 960c-282.503-0.353-511.38-229.448-511.38-512 0-123.465 43.701-236.723 116.479-325.15l-28.012-26.424 70.485-70.485 27.307 27.307 10.24-8.021q8.363-6.485 17.067-12.629c35.151-25.522 75.446-47.337 118.498-63.519q15.305-5.43 27.252-9.185 24.064-7.509 49.152-12.629c32.084-7.152 68.933-11.25 106.739-11.25 282.77 0 512 229.23 512 512s-229.23 512-512 512c-1.346 0-2.69-0.005-4.033-0.016zM51.2 448c0 254.493 206.307 460.8 460.8 460.8v-85.333c207.365 0 375.467-168.102 375.467-375.467s-168.102-375.467-375.467-375.467c-0.015 0-0.034 0-0.053 0-26.746 0-52.839 2.797-78.003 8.113-12.283 2.629-24.362 5.868-36.181 9.685-41.855 13.381-80.482 33.913-114.471 60.158l228.708 226.854v446.123c-207.317-0.063-375.356-168.141-375.356-375.467 0-86.079 28.967-165.392 77.684-228.724l-60.728-59.703c-63.692 78.032-102.311 178.711-102.4 288.407z" />
|
226 |
+
<glyph unicode="" glyph-name="fi-dashboard" d="M189.269 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM271.872 574.293c0-16.306-13.219-29.525-29.525-29.525s-29.525 13.219-29.525 29.525c0 16.306 13.219 29.525 29.525 29.525s29.525-13.219 29.525-29.525zM354.475 574.293c-0.004-16.303-13.222-29.517-29.525-29.517-16.306 0-29.525 13.219-29.525 29.525 0 16.066 12.833 29.135 28.807 29.517 16.342 0.001 29.561-13.218 29.561-29.525zM917.845 42.155h-811.691v586.24h811.691zM976.725 734.72h-929.451c-0.001 0-0.002 0-0.003 0-26.109 0-47.275-21.166-47.275-47.275 0-0.18 0.001-0.36 0.003-0.539v-703.631c0-26.109 21.166-47.275 47.275-47.275h929.451c26.109 0 47.275 21.166 47.275 47.275v703.659c0 26.109-21.166 47.275-47.275 47.275zM602.283 328.533h-65.365c-8.012 0-14.507-6.495-14.507-14.507v-207.36c0-8.012 6.495-14.507 14.507-14.507h65.365c8.012 0 14.507 6.495 14.507 14.507v207.36c0 8.012-6.495 14.507-14.507 14.507zM732.16 446.464h-65.536c-8.012 0-14.507-6.495-14.507-14.507v-325.291c0-8.012 6.495-14.507 14.507-14.507h65.536c8.012 0 14.507 6.495 14.507 14.507v324.267c0 8.012-6.495 14.507-14.507 14.507zM861.867 363.861h-65.365c-8.012 0-14.507-6.495-14.507-14.507v-242.688c0-8.012 6.495-14.507 14.507-14.507h65.365c8.012 0 14.507 6.495 14.507 14.507v242.688c0 8.012-6.495 14.507-14.507 14.507zM288.597 307.712l70.656 121.685c-20.284 11.993-44.701 19.080-70.773 19.080-77.762 0-140.8-63.038-140.8-140.8s63.038-140.8 140.8-140.8c76.394 0 138.577 60.84 140.742 136.71zM468.651 328.533c0 1.195 0 2.389 0 3.584-0.040 48.75-26.379 91.339-65.594 114.349l-67.355-114.349zM259.072 116.053h-106.496c-3.205 0-5.803-2.598-5.803-5.803v-12.117c0-3.205 2.598-5.803 5.803-5.803h106.496c3.205 0 5.803 2.598 5.803 5.803v12.117c0 3.205-2.598 5.803-5.803 5.803zM416.768 116.053h-106.496c-3.205 0-5.803-2.598-5.803-5.803v-12.117c0-3.205 2.598-5.803 5.803-5.803h106.496c3.205 0 5.803 2.598 5.803 5.803v12.117c0 3.205-2.598 5.803-5.803 5.803z" />
|
227 |
+
<glyph unicode="" glyph-name="fi-testing-bottle-beaker" horiz-adv-x="857" d="M853.333 2.389l-290.133 646.827v231.595c13.775 1.515 24.397 13.084 24.405 27.135v24.748c0 0.013 0 0.028 0 0.043 0 15.081-12.226 27.307-27.307 27.307-0.54 0-1.077-0.016-1.61-0.047l-260.364 0.003c-15.081 0-27.307-12.226-27.307-27.307v-24.917c0.009-14.052 10.63-25.621 24.283-27.125l0.122-231.435-290.133-646.827c-2.789-5.801-4.419-12.613-4.419-19.805 0-25.426 20.366-46.094 45.675-46.583l763.95-0.001c0.197-0.003 0.43-0.005 0.663-0.005 25.732 0 46.592 20.86 46.592 46.592 0 7.191-1.629 14.002-4.538 20.083zM477.867 635.733c37.703 0 68.267-30.564 68.267-68.267s-30.564-68.267-68.267-68.267c-37.703 0-68.267 30.564-68.267 68.267s30.564 68.267 68.267 68.267zM473.771 379.733c0-17.437-14.136-31.573-31.573-31.573s-31.573 14.136-31.573 31.573c0 17.437 14.136 31.573 31.573 31.573 17.066-0.476 30.72-14.424 30.72-31.562 0-0.004 0-0.008 0-0.012zM308.224 448c46.374 0 83.968-37.594 83.968-83.968s-37.594-83.968-83.968-83.968c-46.374 0-83.968 37.594-83.968 83.968s37.594 83.968 83.968 83.968zM789.675-12.8h-722.261c-0.014 0-0.030 0-0.046 0-4.619 0-8.363 3.744-8.363 8.363 0 1.236 0.268 2.41 0.75 3.466l87.189 193.996c1.002 0.025 2.182 0.039 3.365 0.039 23.648 0 45.982-5.625 65.737-15.611 11.807-6.312 26.8-10.243 42.712-10.243 1.011 0 2.018 0.016 3.021 0.047 0.080-0.006 0.348-0.007 0.616-0.007 16.409 0 31.844 4.173 45.301 11.515 18.425 9.355 40.759 14.981 64.406 14.981 1.183 0 2.363-0.014 3.539-0.042 0.839 0.029 2.032 0.043 3.228 0.043 23.635 0 45.956-5.626 65.697-15.611 11.822-6.312 26.828-10.242 42.753-10.242 0.997 0 1.991 0.015 2.981 0.046 0.7-0.031 1.694-0.046 2.691-0.046 15.924 0 30.931 3.93 44.103 10.872 19.296 9.324 42.571 14.918 67.152 14.918s47.856-5.594 68.62-15.578c11.885-6.36 27.101-10.334 43.246-10.334 1.983 0 3.953 0.060 5.907 0.178l-0.269-0.013 22.016-49.152 53.419-119.467c0.46-1.004 0.728-2.177 0.728-3.413 0-4.619-3.744-8.363-8.363-8.363-0.016 0-0.032 0-0.048 0z" />
|
228 |
+
<glyph unicode="" glyph-name="fi-loader" d="M512 960c-34.404 0-62.293-27.89-62.293-62.293v-151.723c0-34.404 27.89-62.293 62.293-62.293s62.293 27.89 62.293 62.293v151.723c0 34.404-27.89 62.293-62.293 62.293zM512 212.309c-34.404 0-62.293-27.89-62.293-62.293v-151.723c0-34.404 27.89-62.293 62.293-62.293s62.293 27.89 62.293 62.293v151.723c0 34.404-27.89 62.293-62.293 62.293zM722.603 596.309c0.033 0 0.071 0 0.11 0 17.165 0 32.7 6.981 43.92 18.259l107.352 107.352c11.99 11.377 19.45 27.428 19.45 45.221 0 34.404-27.89 62.293-62.293 62.293-17.793 0-33.843-7.46-45.195-19.422l-107.375-107.377c-11.263-11.271-18.229-26.838-18.229-44.032 0-34.392 27.871-62.275 62.26-62.293zM301.397 299.691c-0.033 0-0.071 0-0.11 0-17.165 0-32.7-6.981-43.92-18.259l-107.352-107.352c-11.99-11.377-19.45-27.428-19.45-45.221 0-34.404 27.89-62.293 62.293-62.293 17.793 0 33.843 7.46 45.195 19.422l107.375 107.377c11.263 11.271 18.229 26.838 18.229 44.032 0 34.392-27.871 62.275-62.26 62.293zM961.707 510.293h-151.723c-34.404 0-62.293-27.89-62.293-62.293s27.89-62.293 62.293-62.293h151.723c34.404 0 62.293 27.89 62.293 62.293s-27.89 62.293-62.293 62.293zM276.309 448c0 34.404-27.89 62.293-62.293 62.293h-151.723c-34.404 0-62.293-27.89-62.293-62.293s27.89-62.293 62.293-62.293h151.723c34.404 0 62.293 27.89 62.293 62.293zM766.635 281.429c-11.377 11.99-27.428 19.45-45.221 19.45-34.404 0-62.293-27.89-62.293-62.293 0-17.793 7.46-33.843 19.422-45.195l107.377-107.375c11.377-11.99 27.428-19.45 45.221-19.45 34.404 0 62.293 27.89 62.293 62.293 0 17.793-7.46 33.843-19.422 45.195zM238.080 809.984c-11.14 10.571-26.233 17.073-42.843 17.073-34.404 0-62.293-27.89-62.293-62.293 0-16.611 6.502-31.703 17.099-42.871l107.323-107.322c11.377-11.99 27.428-19.45 45.221-19.45 34.404 0 62.293 27.89 62.293 62.293 0 17.793-7.46 33.843-19.422 45.195z" />
|
229 |
+
<glyph unicode="" glyph-name="fi-rocket-launch" horiz-adv-x="629" d="M435.029 794.453c-31.125 60.201-66.588 112.119-107.493 159.18-3.137 3.56-8.929 6.406-15.387 6.406s-12.25-2.846-16.192-7.353c-40.166-46.117-75.682-98.034-104.772-153.835zM439.808 218.624c43.008 121.515 108.203 328.875 8.875 547.669h-273.067c-99.328-218.795-34.133-426.667 8.875-547.669 2.598-7.137 9.209-12.192 17.035-12.458l220.191-0.001c7.858 0.266 14.469 5.322 17.025 12.328zM312.149 697.515c34.142-0.097 61.781-27.797 61.781-61.952 0-34.215-27.737-61.952-61.952-61.952s-61.952 27.737-61.952 61.952c0 0.060 0 0.12 0 0.18 0 34.206 27.737 61.943 61.952 61.943zM89.429 382.464c-29.355-58.368-80.725-108.032-89.429-266.069-0.017-0.2-0.027-0.434-0.027-0.669 0-4.619 3.744-8.363 8.363-8.363 2.824 0 5.322 1.4 6.836 3.544 38.93 55.834 133.138 89.114 146.108 102.426-25.762 48.102-47.772 103.962-63.133 162.515-1.804 6.993-3.298 8.091-5.048 8.091s-3.244-1.098-3.831-2.643zM539.819 382.464c29.184-58.539 80.555-108.032 89.259-266.069 0.017-0.2 0.027-0.434 0.027-0.669 0-4.619-3.744-8.363-8.363-8.363-2.824 0-5.322 1.4-6.836 3.544-38.93 55.834-133.138 89.114-146.108 102.426 25.762 48.102 47.772 103.962 63.133 162.515 1.804 6.993 3.298 8.091 5.048 8.091s3.244-1.098 3.831-2.643zM271.36 64.683l-4.437 1.536c6.354-48.821 22.355-92.862 46.059-131.686 21.976 38.834 37.92 82.879 44.045 130.007l-4.088 0.143c-12.141-4.48-26.162-7.072-40.789-7.072s-28.649 2.592-41.631 7.341zM372.736 118.272l22.699 5.461 17.067 53.419h-201.045l17.067-53.419 22.699-5.973c18.18-4.931 39.052-7.763 60.587-7.763s42.407 2.833 62.266 8.146z" />
|
230 |
+
<glyph unicode="" glyph-name="fi-arrow-left" horiz-adv-x="921" d="M8.704 468.992l388.949 388.608c5.491 5.46 13.061 8.836 21.419 8.836s15.927-3.375 21.42-8.837l62.463-62.463c5.46-5.491 8.836-13.061 8.836-21.419s-3.375-15.927-8.837-21.42l-229.887-230.057h621.227c0.203 0.006 0.443 0.009 0.683 0.009 14.647 0 26.532-11.828 26.623-26.453v-95.582c0-14.704-11.92-26.624-26.624-26.624h-621.909l230.4-230.4c5.46-5.491 8.836-13.061 8.836-21.419s-3.375-15.927-8.837-21.42l-62.975-61.951c-5.491-5.46-13.061-8.836-21.419-8.836s-15.927 3.375-21.42 8.837l-388.948 388.607c-5.38 5.401-8.706 12.851-8.706 21.077s3.326 15.677 8.707 21.078z" />
|
231 |
+
<glyph unicode="fi" glyph-name="snapshot" horiz-adv-x="939" d="M52.224 749.227l312.832 180.736-208.555-361.472zM347.819 658.944l-121.685-210.944 120.832-209.579s0-1.024 0-1.365h247.808l121.173 204.8-124.416 216.576zM834.56 779.264l-312.832 180.736-104.448-180.736zM0 598.699v-361.472h208.725zM730.283 658.944l208.384-361.472v361.301zM886.784 146.944l-101.717 176.128-209.749-355.84zM417.621-64l106.155 180.224h-419.499l313.173-180.224z" />
|
232 |
+
<glyph unicode="fl" glyph-name="hub" d="M602.283 538.283h-180.565l-0.171 120.491-90.283 60.245-90.283-60.245v-421.547l90.283-60.245 90.795 58.709v122.027h180.224v-120.491l90.453-60.245 90.283 60.245v421.547l-90.283 60.245-90.453-60.245v-120.491zM120.491 185.856v525.312l214.016 128.341h354.987l214.016-128.512v-525.995l-214.016-128.512h-354.816zM301.227 960l-301.227-180.736v-661.504l301.227-181.76h421.547l301.227 180.736v662.528l-301.227 180.736z" />
|
233 |
+
</font></defs></svg>
|
assets/shared-ui-2/fonts/WPMU-DEV-Icon.ttf
ADDED
Binary file
|
assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff
ADDED
Binary file
|
assets/shared-ui-2/fonts/WPMU-DEV-Icon.woff2
ADDED
Binary file
|
assets/shared-ui-2/images/graphic-hb-minify-summary@2x.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-crawl-icon.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-crawl-icon@2x.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-crawl.jpg
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-defender-icon.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-defender-icon@2x.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-defender.jpg
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-smush-icon.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-smush-icon@2x.png
ADDED
Binary file
|
assets/shared-ui-2/images/plugins-smush.jpg
ADDED
Binary file
|
assets/shared-ui-2/js/admin.min.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
!function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";n(2),console.log("This is the entry point.")},function(t,e,n){(function(n,i,o){var r,s,a,a;/*!
|
2 |
+
* WPMU DEV Shared UI
|
3 |
+
* Copyright 2018 Incsub (https://incsub.com)
|
4 |
+
* Licensed under GPL v2 (http://www.gnu.org/licenses/gpl-2.0.html)
|
5 |
+
*/
|
6 |
+
!function(n){"use strict";function i(t,e){this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this.node=t,this._listeners={},this.create(e)}function o(t){return Array.prototype.slice.call(t)}function a(t,e){return o((e||document).querySelectorAll(t))}function c(t){return NodeList.prototype.isPrototypeOf(t)?o(t):Element.prototype.isPrototypeOf(t)?[t]:"string"==typeof t?a(t):void 0}function u(t){var e=l(t);e.length&&e[0].focus()}function l(t){return a(p.join(","),t).filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function d(t,e){var n=l(t),i=n.indexOf(document.activeElement);e.shiftKey&&0===i?(n[n.length-1].focus(),e.preventDefault()):e.shiftKey||i!==n.length-1||(n[0].focus(),e.preventDefault())}function f(t){var e=o(t.parentNode.childNodes),n=e.filter(function(t){return 1===t.nodeType});return n.splice(n.indexOf(t),1),n}var h,p=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];i.prototype.create=function(t){return this._targets=this._targets||c(t)||f(this.node),this.node.setAttribute("aria-hidden",!0),this.shown=!1,this._openers=a('[data-a11y-dialog-show="'+this.node.id+'"]'),this._openers.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._closers=a("[data-a11y-dialog-hide]",this.node).concat(a('[data-a11y-dialog-hide="'+this.node.id+'"]')),this._closers.forEach(function(t){t.addEventListener("click",this._hide)}.bind(this)),this._fire("create"),this},i.prototype.show=function(t){if(this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");return this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-in",e[0].className="sui-dialog-overlay sui-fade-in",this.shown=!0,this.node.removeAttribute("aria-hidden"),this._targets.forEach(function(t){var e=t.getAttribute("aria-hidden");e&&t.setAttribute("data-a11y-dialog-original",e),t.setAttribute("aria-hidden","true")}),h=document.activeElement,u(this.node),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t),this},i.prototype.hide=function(t){if(!this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-out",e[0].className="sui-dialog-overlay sui-fade-out",this.shown=!1;var n=this.node;return setTimeout(function(){n.setAttribute("aria-hidden","true")},300),this._targets.forEach(function(t){var e=t.getAttribute("data-a11y-dialog-original");e?(t.setAttribute("aria-hidden",e),t.removeAttribute("data-a11y-dialog-original")):t.removeAttribute("aria-hidden")}),h&&h.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this},i.prototype.destroy=function(){return this.hide(),this._openers.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._closers.forEach(function(t){t.removeEventListener("click",this._hide)}.bind(this)),this._fire("destroy"),this._listeners={},this},i.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},i.prototype.off=function(t,e){var n=this._listeners[t].indexOf(e);return n>-1&&this._listeners[t].splice(n,1),this},i.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.node,e)}.bind(this))},i.prototype._bindKeypress=function(t){this.shown&&27===t.which&&(t.preventDefault(),this.hide()),this.shown&&9===t.which&&d(this.node,t)},i.prototype._maintainFocus=function(t){this.shown&&!this.node.contains(t.target)&&u(this.node)},void 0!==t&&void 0!==t.exports?t.exports=i:(r=[],void 0!==(s=function(){return i}.apply(e,r))&&(t.exports=s))}(void 0!==n||window),function(t){t(".sui-2-1-0 .sui-accordion").on("click",".sui-accordion-item",function(){var e=t(this).closest(".sui-accordion-item"),n=e.nextUntil(".sui-accordion-item");n.toggleClass("sui-accordion-item--open"),n.hasClass("sui-accordion-item--open")?e.addClass("sui-accordion-item--open"):e.removeClass("sui-accordion-item--open")})}(jQuery),function(e){t.exports=e()}(function(){var t;return function t(e,n,i){function o(s,c){if(!n[s]){if(!e[s]){var u="function"==typeof a&&a;if(!c&&u)return a(s,!0);if(r)return r(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var d=n[s]={exports:{}};e[s][0].call(d.exports,function(t){var n=e[s][1][t];return o(n||t)},d,d.exports,t,e,n,i)}return n[s].exports}for(var r="function"==typeof a&&a,s=0;s<i.length;s++)o(i[s]);return o}({1:[function(t,e,n){function i(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}e.exports=i},{}],2:[function(t,e,n){function i(t,e,n,i,r){var s=o.apply(this,arguments);return t.addEventListener(n,s,r),{destroy:function(){t.removeEventListener(n,s,r)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}var r=t("./closest");e.exports=i},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function i(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!a.string(e))throw new TypeError("Second argument must be a String");if(!a.fn(n))throw new TypeError("Third argument must be a Function");if(a.node(t))return o(t,e,n);if(a.nodeList(t))return r(t,e,n);if(a.string(t))return s(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function r(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function s(t,e,n){return c(document.body,t,e,n)}var a=t("./is"),c=t("delegate");e.exports=i},{"./is":3,delegate:2}],5:[function(t,e,n){function i(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}e.exports=i},{}],6:[function(t,e,n){function i(){}i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i<o;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],o=[];if(i&&e)for(var r=0,s=i.length;r<s;r++)i[r].fn!==e&&i[r].fn._!==e&&o.push(i[r]);return o.length?n[t]=o:delete n[t],this}},e.exports=i},{}],7:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","select"],r);else if(void 0!==i)r(n,e("select"));else{var s={exports:{}};r(s,o.select),o.clipboardAction=s.exports}}(this,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(t){return t&&t.__esModule?t:{default:t}}(e),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),s=function(){function t(e){n(this,t),this.resolveOptions(e),this.initSelection()}return r(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=s})},{select:5}],8:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if(void 0!==i)r(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var s={exports:{}};r(s,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=s.exports}}(this,function(t,e,n,i){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var u=o(e),l=o(n),d=o(i),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),p=function(t){function e(t,n){r(this,e);var i=s(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.resolveOptions(n),i.listenClick(t),i}return a(e,t),h(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===f(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,d.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return c("action",t)}},{key:"defaultTarget",value:function(t){var e=c("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return c("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(l.default);t.exports=p})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}),function(t){t(".sui-2-1-0 .sui-code-snippet:not(.sui-no-copy)").each(function(e){var n="sui-code-snippet-"+e,i='<button class="sui-button" data-clipboard-target="#'+n+'">Copy</button>';t(this).wrap('<div class="sui-code-snippet-wrapper"></div>'),t(this).attr("id",n).after(i)}),t(document).ready(function(){function e(e,n){t(e).addClass("sui-tooltip"),t(e).attr("aria-label",n),t(e).attr("data-tooltip",n)}var n=t("[data-clipboard-target]"),o=new i("[data-clipboard-target]");n.length&&(o.on("success",function(t){t.clearSelection(),e(t.trigger,"Copied!")}),n.mouseleave(function(){t(this).removeClass("sui-tooltip"),t(this).removeAttr("aria-label"),t(this).removeAttr("data-tooltip")}))})}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),SUI.linkDropdown=function(){function e(e){var n=t(".sui-2-1-0 .sui-dropdown");e&&(n=n.not(e)),n.removeClass("open")}t("body").click(function(n){var i=t(n.target),o=i.closest(".sui-dropdown");0==o.length?e():i.is("a")&&(n.preventDefault(),e(o),o.toggleClass("open"))})},SUI.linkDropdown()}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),document.addEventListener("DOMContentLoaded",function(){var e=t(".sui-wrap");t(".sui-dialog").each(function(){new o(this,e)})})}(jQuery),function(t){t(".sui-2-1-0 .sui-notice-top:not(.sui-cant-dismiss)").delay(3e3).slideUp("slow"),t(".sui-2-1-0 .sui-notice-dismiss").click(function(e){return e.preventDefault(),t(this).parent(".sui-notice").stop().slideUp("slow"),!1})}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),SUI.showHidePassword=function(){t(".sui-2-1-0 .sui-password-group").each(function(){var e=t(this),n=e.find('input[type="password"]'),i=e.find(".sui-password-toggle");i.on("click",function(){var e="",o="";t(this).toggleClass("is-visible"),n.hasClass("is-visible")?(n.removeClass("is-visible").addClass("is-hidden"),e="password",i.find("> .sui-screen-reader-text").text("Show Password"),i.find("> i").removeClass("sui-ico-eye-hide").addClass("sui-ico-eye")):(n.removeClass("is-hidden").addClass("is-visible"),e="text",i.find("> .sui-screen-reader-text").text("Hide Password"),i.find("> i").removeClass("sui-ico-eye").addClass("sui-ico-eye-hide")),o=t("<input type="+e+" />").attr("id",n.attr("id")).attr("name",n.attr("name")).attr("class",n.attr("class")).val(n.val()).insertBefore(n),n.remove(),n=o,n.focus()})})},SUI.showHidePassword()}(jQuery),function(t){loadCircleScore=function(e){var n=(t(e).find("svg circle:last-child"),t(e).data("score")),i=2*Math.PI*42,o=i/100*n,r=100*o-n,s='<svg viewbox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">\n<circle stroke-width="16" cx="50" cy="50" r="42" />\n<circle stroke-width="16" cx="50" cy="50" r="42" stroke-dasharray="0,'+r+'" />\n</svg>\n<span class="sui-circle-score-label">'+n+"</span>\n";t(e).prepend(s).addClass("loaded").find("circle:last-child").css("animation","sui"+n+" 3s forwards")},t(".sui-2-1-0 .sui-circle-score").each(function(){loadCircleScore(this)})}(jQuery),function(t){suiSelect=function(e){function n(){y.wrap('<div class="select-container">'),y.hide(),l=y.parent(),d=t('<span class="dropdown-handle"><i class="sui-icon-chevron-down" aria-hidden="true"></i></span>').prependTo(l),f=t('<div class="select-list-container"></div>').appendTo(l),h=t('<div class="list-value"> </div>').appendTo(f),p=t('<ul class="list-results"></ul>').appendTo(f),l.addClass(y.attr("class"))}function i(){y.on("sui:change",function(){o(),p.find("li").not(".optgroup-label").on("click",function(e){u(t(e.target),!1),r()})})}function o(){p.empty(),y.find("optgroup").length?y.find("optgroup").each(function(){var e,n=t(this);e=t("<ul></ul>").appendTo(p),$label=t('<li class="optgroup-label"></li>').text(n.prop("label")),e.html($label),e.addClass("optgroup"),n.find("option").each(function(){var n,i=t(this);n=t("<li></li>").appendTo(e),n.text(i.text()),n.data("value",i.val()),i.val()==y.val()&&u(n)})}):y.find("option").each(function(){var e,n=t(this);e=t("<li></li>").appendTo(p),e.text(n.text()),e.data("value",n.val()),n.val()==y.val()&&u(e,!0)})}function r(){var t=y[0].value;t.match("^https?://|#")&&(window.location.href=t)}function s(){l.find("select").is(":disabled")||(l.hasClass("active")?a():c())}function a(t){t||(t=l),t.removeClass("active"),t.closest("tr").removeClass("select-open")}function c(){t(".select-container.active").each(function(){a(t(this))}),l.addClass("active"),l.closest("tr").addClass("select-open")}function u(e,n){n=void 0!==n&&n,h.text(e.text()),t(".current",p).removeClass("current"),e.addClass("current"),a(),y.val(e.data("value")),n||y.trigger("change")}var l,d,f,h,p,y=t(e);if(y.is("select")&&!(y.closest(".select-container").length||y.data("select2")||y.is(".none-sui")))return function(){var e;n(),o(),i(),p.find("li").not(".optgroup-label").on("click",function(e){u(t(e.target),!1),r()}),d.on("click",s),h.on("click",s),y.on("focus",c),t(document).click(function(e){var n,i=t(e.target);i.closest(".select-container").length||i.is("label")&&i.attr("for")&&(n=i.attr("for"),t("select#"+n).length)||a()}),e=y.attr("id"),e&&t("label[for="+e+"]").on("click",c),y.addClass("sui-styled")}(),this},t(".sui-2-1-0 select").each(function(){suiSelect(this)})}(jQuery),function(t){suiTabs=function(e){function n(){window.setTimeout(i,20)}function i(){var t=a.find(".sui-tab > input:checked").parent(),e=t.find(".sui-tab-content");a.height(e.outerHeight()+t.outerHeight()-6)}function o(){var t=a.find(".sui-tab > input:checked");a.find(".sui-tab label.active").removeClass("active"),t.parent().find("label").addClass("active"),n()}function r(){var t,e=window.location.hash.replace(/[^\w-_]/g,"");e&&(t=a.find("input#"+e),t.parent().find("label").length&&(a.find(".sui-tab label.active").removeClass("active"),t.parent().find("label").addClass("active"),t.length&&!t.prop("checked")&&(t.prop("checked",!0),s())))}function s(){n(),t("html, body").scrollTop(a.offset().top-parseInt(t("html").css("paddingTop"))-20)}var a=t(e).closest(".sui-tabs");if(a.length)return function(){var e=a.find(".sui-tab > input:checked");a.on("click",".sui-tab > input[type=radio]",o),t(window).on("hashchange",r),e.parent().find("label").addClass("active"),n(),r()}(),t(window).resize(function(){n()}),this},t(".sui-2-1-0 .sui-tabs").each(function(){suiTabs(this)})}(jQuery),function(t){"use strict";"object"!=typeof window.SUI&&(window.SUI={}),SUI.upload=function(){t('.sui-2-1-0 .sui-upload-group input[type="file"]').on("change",function(e){var n=t(this)[0].files[0],i=t(this).find("~ .sui-upload-message");n&&i.text(n.name)})},SUI.upload()}(jQuery)}).call(e,n(0),n(3),n(4))},function(t,e,n){var i,i;!function(e){t.exports=e()}(function(){var t;return function t(e,n,o){function r(a,c){if(!n[a]){if(!e[a]){var u="function"==typeof i&&i;if(!c&&u)return i(a,!0);if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var d=n[a]={exports:{}};e[a][0].call(d.exports,function(t){var n=e[a][1][t];return r(n||t)},d,d.exports,t,e,n,o)}return n[a].exports}for(var s="function"==typeof i&&i,a=0;a<o.length;a++)r(o[a]);return r}({1:[function(t,e,n){function i(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}e.exports=i},{}],2:[function(t,e,n){function i(t,e,n,i,r){var s=o.apply(this,arguments);return t.addEventListener(n,s,r),{destroy:function(){t.removeEventListener(n,s,r)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}var r=t("./closest");e.exports=i},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function i(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!a.string(e))throw new TypeError("Second argument must be a String");if(!a.fn(n))throw new TypeError("Third argument must be a Function");if(a.node(t))return o(t,e,n);if(a.nodeList(t))return r(t,e,n);if(a.string(t))return s(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function r(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function s(t,e,n){return c(document.body,t,e,n)}var a=t("./is"),c=t("delegate");e.exports=i},{"./is":3,delegate:2}],5:[function(t,e,n){function i(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}e.exports=i},{}],6:[function(t,e,n){function i(){}i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i<o;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],o=[];if(i&&e)for(var r=0,s=i.length;r<s;r++)i[r].fn!==e&&i[r].fn._!==e&&o.push(i[r]);return o.length?n[t]=o:delete n[t],this}},e.exports=i},{}],7:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","select"],r);else if(void 0!==i)r(n,e("select"));else{var s={exports:{}};r(s,o.select),o.clipboardAction=s.exports}}(this,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(t){return t&&t.__esModule?t:{default:t}}(e),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),s=function(){function t(e){n(this,t),this.resolveOptions(e),this.initSelection()}return r(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=s})},{select:5}],8:[function(e,n,i){!function(o,r){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if(void 0!==i)r(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var s={exports:{}};r(s,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=s.exports}}(this,function(t,e,n,i){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var u=o(e),l=o(n),d=o(i),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),p=function(t){function e(t,n){r(this,e);var i=s(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.resolveOptions(n),i.listenClick(t),i}return a(e,t),h(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===f(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,d.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return c("action",t)}},{key:"defaultTarget",value:function(t){var e=c("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return c("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(l.default);t.exports=p})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)})},function(t,e,n){(function(n){var i,o;!function(n){"use strict";function r(t,e){this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this.node=t,this._listeners={},this.create(e)}function s(t){return Array.prototype.slice.call(t)}function a(t,e){return s((e||document).querySelectorAll(t))}function c(t){return NodeList.prototype.isPrototypeOf(t)?s(t):Element.prototype.isPrototypeOf(t)?[t]:"string"==typeof t?a(t):void 0}function u(t){var e=l(t);e.length&&e[0].focus()}function l(t){return a(p.join(","),t).filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function d(t,e){var n=l(t),i=n.indexOf(document.activeElement);e.shiftKey&&0===i?(n[n.length-1].focus(),e.preventDefault()):e.shiftKey||i!==n.length-1||(n[0].focus(),e.preventDefault())}function f(t){var e=s(t.parentNode.childNodes),n=e.filter(function(t){return 1===t.nodeType});return n.splice(n.indexOf(t),1),n}var h,p=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];r.prototype.create=function(t){return this._targets=this._targets||c(t)||f(this.node),this.node.setAttribute("aria-hidden",!0),this.shown=!1,this._openers=a('[data-a11y-dialog-show="'+this.node.id+'"]'),this._openers.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._closers=a("[data-a11y-dialog-hide]",this.node).concat(a('[data-a11y-dialog-hide="'+this.node.id+'"]')),this._closers.forEach(function(t){t.addEventListener("click",this._hide)}.bind(this)),this._fire("create"),this},r.prototype.show=function(t){if(this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");return this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-in",e[0].className="sui-dialog-overlay sui-fade-in",this.shown=!0,this.node.removeAttribute("aria-hidden"),this._targets.forEach(function(t){var e=t.getAttribute("aria-hidden");e&&t.setAttribute("data-a11y-dialog-original",e),t.setAttribute("aria-hidden","true")}),h=document.activeElement,u(this.node),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t),this},r.prototype.hide=function(t){if(!this.shown)return this;var e=this.node.getElementsByClassName("sui-dialog-overlay");this.node.getElementsByClassName("sui-dialog-content")[0].className="sui-dialog-content sui-bounce-out",e[0].className="sui-dialog-overlay sui-fade-out",this.shown=!1;var n=this.node;return setTimeout(function(){n.setAttribute("aria-hidden","true")},300),this._targets.forEach(function(t){var e=t.getAttribute("data-a11y-dialog-original");e?(t.setAttribute("aria-hidden",e),t.removeAttribute("data-a11y-dialog-original")):t.removeAttribute("aria-hidden")}),h&&h.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this},r.prototype.destroy=function(){return this.hide(),this._openers.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._closers.forEach(function(t){t.removeEventListener("click",this._hide)}.bind(this)),this._fire("destroy"),this._listeners={},this},r.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},r.prototype.off=function(t,e){var n=this._listeners[t].indexOf(e);return n>-1&&this._listeners[t].splice(n,1),this},r.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.node,e)}.bind(this))},r.prototype._bindKeypress=function(t){this.shown&&27===t.which&&(t.preventDefault(),this.hide()),this.shown&&9===t.which&&d(this.node,t)},r.prototype._maintainFocus=function(t){this.shown&&!this.node.contains(t.target)&&u(this.node)},void 0!==t&&void 0!==t.exports?t.exports=r:(i=[],void 0!==(o=function(){return r}.apply(e,i))&&(t.exports=o))}(void 0!==n||window)}).call(e,n(0))}]);
|
7 |
+
//# sourceMappingURL=admin.min.js.map
|
assets/shared-ui-2/js/admin.min.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"version":3,"sources":["webpack:///admin.min.js","webpack:///webpack/bootstrap 25ae4da958e7cc0546a0","webpack:///(webpack)/buildin/global.js","webpack:///./_src/js/index.js","webpack:///./node_modules/@wpmudev/shared-ui/dist/js/shared-ui.js","webpack:///./node_modules/@wpmudev/shared-ui/js/clipboard.js","webpack:///./node_modules/@wpmudev/shared-ui/js/a11y-dialog.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","g","this","Function","eval","e","window","console","log","global","ClipboardJS","A11yDialog","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","require","node","targets","_show","show","bind","_hide","hide","_maintainFocus","_bindKeypress","_listeners","create","toArray","collection","Array","slice","$$","selector","context","document","querySelectorAll","collect","target","NodeList","isPrototypeOf","Element","setFocusToFirstItem","focusableChildren","getFocusableChildren","length","focus","FOCUSABLE_ELEMENTS","join","filter","child","offsetWidth","offsetHeight","getClientRects","trapTabKey","event","focusedItemIndex","indexOf","activeElement","shiftKey","preventDefault","getSiblings","nodes","parentNode","childNodes","siblings","nodeType","splice","focusedBeforeDialog","_targets","setAttribute","shown","_openers","id","forEach","opener","addEventListener","_closers","concat","closer","_fire","overlay","getElementsByClassName","className","removeAttribute","original","getAttribute","body","timeout_node","setTimeout","removeEventListener","destroy","on","type","handler","push","off","index","listener","which","contains","undefined","apply","$","getParentItem","closest","getNextAdditionalContentRow","nextUntil","toggleClass","hasClass","addClass","removeClass","jQuery","f","define","t","r","u","a","Error","code","1","element","DOCUMENT_NODE_TYPE","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","2","delegate","callback","useCapture","listenerFn","arguments","delegateTarget","./closest","3","value","HTMLElement","nodeList","toString","string","String","fn","4","listen","is","TypeError","listenNode","listenNodeList","listenSelector","./is","5","select","selectedText","nodeName","isReadOnly","hasAttribute","setSelectionRange","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","6","E","ctx","once","self","_","emit","data","evtArr","len","evts","liveEvents","7","factory","amd","mod","clipboardAction","_select","_classCallCheck","instance","Constructor","_select2","obj","default","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","props","descriptor","writable","key","protoProps","staticProps","ClipboardJSAction","options","resolveOptions","initSelection","action","container","emitter","text","trigger","selectFake","selectTarget","_this","isRTL","documentElement","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","appendChild","copyText","removeChild","succeeded","execCommand","err","handleResult","clearSelection","set","_action","_target","8","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_interopRequireDefault","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","getAttributeValue","suffix","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","_Emitter","getPrototypeOf","listenClick","defaultAction","defaultTarget","defaultText","_this2","onClick","currentTarget","querySelector","actions","support","queryCommandSupported","./clipboard-action","good-listener","tiny-emitter","each","button","wrap","attr","after","ready","showTooltip","msg","btns","mouseleave","removeAttr","SUI","linkDropdown","closeAllDropdowns","$except","$dropdowns","not","click","$this","$el","mainEl","delay","slideUp","parent","stop","showHidePassword","$input","find","$button","$inputType","$repInput","val","insertBefore","remove","loadCircleScore","el","score","circumference","Math","PI","dashLength","gapLength","svg","prepend","css","suiSelect","setupElement","jq","handle","prependTo","list","appendTo","items","handleSelectionChange","populateList","ev","selectItem","handleValue","empty","optGroupItem","optgroup","$label","prop","html","item","opt","match","location","href","stateToggle","stateClose","stateOpen","isInit","selectID","suiTabs","resizeArea","resizeAreaHandler","current","content","height","outerHeight","updateHash","switchTab","curTab","route","hash","replace","scrollWindow","offset","parseInt","resize","upload","file","files","message"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,GAGAzB,IAAA0B,EAAA,KDMM,SAAUtB,EAAQD,GEnExB,GAAAwB,EAGAA,GAAA,WACA,MAAAC,QAGA,KAEAD,KAAAE,SAAA,qBAAAC,MAAA,QACC,MAAAC,GAED,gBAAAC,UACAL,EAAAK,QAOA5B,EAAAD,QAAAwB,GF0EM,SAAUvB,EAAQD,EAASH,GAEjC,YGhGAA,GAAA,GAEAiC,QAAQC,IAAI,6BHuGN,SAAU9B,EAAQD,EAASH,IAEL,SAASmC,EAAQC,EAAaC,GAAa,GAAIC,GAA8BC,EAAkCC,EI3G3IA;;;;;CAOA,SAAAL,GACA,YAcA,SAAAE,GAAAI,EAAAC,GAGAd,KAAAe,MAAAf,KAAAgB,KAAAC,KAAAjB,MACAA,KAAAkB,MAAAlB,KAAAmB,KAAAF,KAAAjB,MACAA,KAAAoB,eAAApB,KAAAoB,eAAAH,KAAAjB,MACAA,KAAAqB,cAAArB,KAAAqB,cAAAJ,KAAAjB,MAGAA,KAAAa,OAGAb,KAAAsB,cAGAtB,KAAAuB,OAAAT,GAiRA,QAAAU,GAAAC,GACA,MAAAC,OAAA/B,UAAAgC,MAAAhD,KAAA8C,GAWA,QAAAG,GAAAC,EAAAC,GACA,MAAAN,IAAAM,GAAAC,UAAAC,iBAAAH,IAUA,QAAAI,GAAAC,GACA,MAAAC,UAAAxC,UAAAyC,cAAAF,GACAV,EAAAU,GAGAG,QAAA1C,UAAAyC,cAAAF,IACAA,GAGA,gBAAAA,GACAN,EAAAM,OADA,GAUA,QAAAI,GAAAzB,GACA,GAAA0B,GAAAC,EAAA3B,EAEA0B,GAAAE,QACAF,EAAA,GAAAG,QAUA,QAAAF,GAAA3B,GACA,MAAAe,GAAAe,EAAAC,KAAA,KAAA/B,GAAAgC,OAAA,SAAAC,GACA,SAAAA,EAAAC,aAAAD,EAAAE,cAAAF,EAAAG,iBAAAR,UAUA,QAAAS,GAAArC,EAAAsC,GACA,GAAAZ,GAAAC,EAAA3B,GACAuC,EAAAb,EAAAc,QAAAtB,SAAAuB,cAKAH,GAAAI,UAAA,IAAAH,GACAb,IAAAE,OAAA,GAAAC,QACAS,EAAAK,kBAIKL,EAAAI,UAAAH,IAAAb,EAAAE,OAAA,IACLF,EAAA,GAAAG,QACAS,EAAAK,kBAUA,QAAAC,GAAA5C,GACA,GAAA6C,GAAAlC,EAAAX,EAAA8C,WAAAC,YACAC,EAAAH,EAAAb,OAAA,SAAAhC,GACA,WAAAA,EAAAiD,UAKA,OAFAD,GAAAE,OAAAF,EAAAR,QAAAxC,GAAA,GAEAgD,EAjZA,GAGAG,GAHArB,GAAA,4MAoCAlC,GAAAd,UAAA4B,OAAA,SAAAT,GA2BA,MAzBAd,MAAAiE,SAAAjE,KAAAiE,UAAAhC,EAAAnB,IAAA2C,EAAAzD,KAAAa,MAIAb,KAAAa,KAAAqD,aAAA,kBACAlE,KAAAmE,OAAA,EAIAnE,KAAAoE,SAAAxC,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,MACArE,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAC,iBAAA,QAAAxE,KAAAe,QACKE,KAAAjB,OAILA,KAAAyE,SAAA7C,EAAA,0BAAA5B,KAAAa,MACA6D,OAAA9C,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,OACArE,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAH,iBAAA,QAAAxE,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,UAEA5E,MAWAS,EAAAd,UAAAqB,KAAA,SAAAmC,GAEA,GAAAnD,KAAAmE,MACA,MAAAnE,KAGA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAoCA,OAnCA9E,MAAAa,KAAAiE,uBAAA,sBACA,GAAAC,UAAA,mCACAF,EAAA,GAAAE,UAAA,iCAEA/E,KAAAmE,OAAA,EACAnE,KAAAa,KAAAmE,gBAAA,eAKAhF,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,cAEAD,IACA/C,EAAAgC,aAAA,4BAAAe,GAGA/C,EAAAgC,aAAA,wBAMAF,EAAAjC,SAAAuB,cACAhB,EAAAtC,KAAAa,MAKAkB,SAAAoD,KAAAX,iBAAA,QAAAxE,KAAAoB,gBAAA,GACAW,SAAAyC,iBAAA,UAAAxE,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MAWAS,EAAAd,UAAAwB,KAAA,SAAAgC,GAEA,IAAAnD,KAAAmE,MACA,MAAAnE,KAIA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAEA9E,MAAAa,KAAAiE,uBAAA,sBAEA,GAAAC,UAAA,oCAEAF,EAAA,GAAAE,UAAA,kCAEA/E,KAAAmE,OAAA,CAEA,IAAAiB,GAAApF,KAAAa,IAiCA,OAhCAwE,YAAA,WACAD,EAAAlB,aAAA,uBACE,KAIFlE,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,4BAGAD,IACA/C,EAAAgC,aAAA,cAAAe,GACA/C,EAAA8C,gBAAA,8BAEA9C,EAAA8C,gBAAA,iBAMAhB,GACAA,EAAAtB,QAKAX,SAAAoD,KAAAG,oBAAA,QAAAtF,KAAAoB,gBAAA,GACAW,SAAAuD,oBAAA,UAAAtF,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MASAS,EAAAd,UAAA4F,QAAA,WAoBA,MAlBAvF,MAAAmB,OAGAnB,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAe,oBAAA,QAAAtF,KAAAe,QACKE,KAAAjB,OAGLA,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAW,oBAAA,QAAAtF,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,WAGA5E,KAAAsB,cAEAtB,MASAS,EAAAd,UAAA6F,GAAA,SAAAC,EAAAC,GAOA,WANA,KAAA1F,KAAAsB,WAAAmE,KACAzF,KAAAsB,WAAAmE,OAGAzF,KAAAsB,WAAAmE,GAAAE,KAAAD,GAEA1F,MASAS,EAAAd,UAAAiG,IAAA,SAAAH,EAAAC,GACA,GAAAG,GAAA7F,KAAAsB,WAAAmE,GAAApC,QAAAqC,EAMA,OAJAG,IAAA,GACA7F,KAAAsB,WAAAmE,GAAA1B,OAAA8B,EAAA,GAGA7F,MAWAS,EAAAd,UAAAiF,MAAA,SAAAa,EAAAtC,IACAnD,KAAAsB,WAAAmE,QAEAnB,QAAA,SAAAwB,GACAA,EAAA9F,KAAAa,KAAAsC,IACKlC,KAAAjB,QAULS,EAAAd,UAAA0B,cAAA,SAAA8B,GAGAnD,KAAAmE,OAzQA,KAyQAhB,EAAA4C,QACA5C,EAAAK,iBACAxD,KAAAmB,QAKAnB,KAAAmE,OAjRA,IAiRAhB,EAAA4C,OACA7C,EAAAlD,KAAAa,KAAAsC,IAWA1C,EAAAd,UAAAyB,eAAA,SAAA+B,GAGAnD,KAAAmE,QAAAnE,KAAAa,KAAAmF,SAAA7C,EAAAjB,SACAI,EAAAtC,KAAAa,WAkHA,KAAArC,OAAA,KAAAA,EAAAD,QACAC,EAAAD,QAAAkC,GAEAC,SAEKuF,MAFLtF,EAAA,WACA,MAAAF,IACKyF,MAAA3H,EAAAmC,MAAAlC,EAAAD,QAAAoC,SAIJ,KAAAJ,GAAAH,QAED,SAAA+F,GAEAA,EAAA,6BAEAX,GAAA,yCAEA,GAAAY,GAAAD,EAAAnG,MAAAqG,QAAA,uBACAC,EAAAF,EAAAG,UAAA,sBAEAD,GAAAE,YAAA,4BAEAF,EAAAG,SAAA,4BACAL,EAAAM,SAAA,4BAEAN,EAAAO,YAAA,+BAKCC,QAQD,SAAAC,GAAwErI,EAAAD,QAAAsI,KAA6P,WAAa,GAAAC,EAA0B,gBAAA3G,GAAA4G,EAAAxH,EAAAyH,GAA0B,QAAAlH,GAAAb,EAAAgI,GAAgB,IAAA1H,EAAAN,GAAA,CAAU,IAAA8H,EAAA9H,GAAA,CAAU,GAAAiI,GAAA,kBAAAtG,KAA0C,KAAAqG,GAAAC,EAAA,MAAAtG,GAAA3B,GAAA,EAAwB,IAAAR,EAAA,MAAAA,GAAAQ,GAAA,EAAoB,IAAA4H,GAAA,GAAAM,OAAA,uBAAAlI,EAAA,IAA8C,MAAA4H,GAAAO,KAAA,mBAAAP,EAAkC,GAAAnI,GAAAa,EAAAN,IAAYV,WAAYwI,GAAA9H,GAAA,GAAAN,KAAAD,EAAAH,QAAA,SAAA4B,GAAmC,GAAAZ,GAAAwH,EAAA9H,GAAA,GAAAkB,EAAiB,OAAAL,GAAAP,GAAAY,IAAgBzB,IAAAH,QAAA4B,EAAA4G,EAAAxH,EAAAyH,GAAsB,MAAAzH,GAAAN,GAAAV,QAA8D,OAA1CE,GAAA,kBAAAmC,MAA0C3B,EAAA,EAAYA,EAAA+H,EAAAvE,OAAWxD,IAAAa,EAAAkH,EAAA/H,GAAY,OAAAa,KAAYuH,GAAA,SAAAzG,EAAApC,EAAAD,GAuB/yB,QAAA8H,GAAAiB,EAAAzF,GACA,KAAAyF,KAAAxD,WAAAyD,GAAA,CACA,qBAAAD,GAAAE,SACAF,EAAAE,QAAA3F,GACA,MAAAyF,EAEAA,KAAA3D,YA5BA,GAAA4D,GAAA,CAKA,uBAAAlF,mBAAA1C,UAAA6H,QAAA,CACA,GAAAC,GAAApF,QAAA1C,SAEA8H,GAAAD,QAAAC,EAAAC,iBACAD,EAAAE,oBACAF,EAAAG,mBACAH,EAAAI,kBACAJ,EAAAK,sBAoBAtJ,EAAAD,QAAA8H,OAEI0B,GAAA,SAAAnH,EAAApC,EAAAD,GAaJ,QAAAyJ,GAAAV,EAAAzF,EAAA4D,EAAAwC,EAAAC,GACA,GAAAC,GAAArC,EAAAI,MAAAlG,KAAAoI,UAIA,OAFAd,GAAA9C,iBAAAiB,EAAA0C,EAAAD,IAGA3C,QAAA,WACA+B,EAAAhC,oBAAAG,EAAA0C,EAAAD,KAcA,QAAApC,GAAAwB,EAAAzF,EAAA4D,EAAAwC,GACA,gBAAA9H,GACAA,EAAAkI,eAAAhC,EAAAlG,EAAA+B,OAAAL,GAEA1B,EAAAkI,gBACAJ,EAAAtJ,KAAA2I,EAAAnH,IAtCA,GAAAkG,GAAAzF,EAAA,YA2CApC,GAAAD,QAAAyJ,IAEGM,YAAA,IAAcC,GAAA,SAAA3H,EAAApC,EAAAD,GAOjBA,EAAAsC,KAAA,SAAA2H,GACA,WAAAvC,KAAAuC,GACAA,YAAAC,cACA,IAAAD,EAAA1E,UASAvF,EAAAmK,SAAA,SAAAF,GACA,GAAA/C,GAAAvG,OAAAS,UAAAgJ,SAAAhK,KAAA6J,EAEA,YAAAvC,KAAAuC,IACA,sBAAA/C,GAAA,4BAAAA,IACA,UAAA+C,KACA,IAAAA,EAAA/F,QAAAlE,EAAAsC,KAAA2H,EAAA,MASAjK,EAAAqK,OAAA,SAAAJ,GACA,sBAAAA,IACAA,YAAAK,SASAtK,EAAAuK,GAAA,SAAAN,GAGA,4BAFAtJ,OAAAS,UAAAgJ,SAAAhK,KAAA6J,SAKIO,GAAA,SAAAnI,EAAApC,EAAAD,GAaJ,QAAAyK,GAAA9G,EAAAuD,EAAAwC,GACA,IAAA/F,IAAAuD,IAAAwC,EACA,SAAAd,OAAA,6BAGA,KAAA8B,EAAAL,OAAAnD,GACA,SAAAyD,WAAA,mCAGA,KAAAD,EAAAH,GAAAb,GACA,SAAAiB,WAAA,oCAGA,IAAAD,EAAApI,KAAAqB,GACA,MAAAiH,GAAAjH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAP,SAAAxG,GACA,MAAAkH,GAAAlH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAL,OAAA1G,GACA,MAAAmH,GAAAnH,EAAAuD,EAAAwC,EAGA,UAAAiB,WAAA,6EAaA,QAAAC,GAAAtI,EAAA4E,EAAAwC,GAGA,MAFApH,GAAA2D,iBAAAiB,EAAAwC,IAGA1C,QAAA,WACA1E,EAAAyE,oBAAAG,EAAAwC,KAcA,QAAAmB,GAAAV,EAAAjD,EAAAwC,GAKA,MAJAvG,OAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAA2D,iBAAAiB,EAAAwC,MAIA1C,QAAA,WACA7D,MAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAAyE,oBAAAG,EAAAwC,OAeA,QAAAoB,GAAAxH,EAAA4D,EAAAwC,GACA,MAAAD,GAAAjG,SAAAoD,KAAAtD,EAAA4D,EAAAwC,GA3FA,GAAAgB,GAAArI,EAAA,QACAoH,EAAApH,EAAA,WA6FApC,GAAAD,QAAAyK,IAEGM,OAAA,EAAAtB,SAAA,IAAsBuB,GAAA,SAAA3I,EAAApC,EAAAD,GACzB,QAAAiL,GAAAlC,GACA,GAAAmC,EAEA,eAAAnC,EAAAoC,SACApC,EAAA5E,QAEA+G,EAAAnC,EAAAkB,UAEA,cAAAlB,EAAAoC,UAAA,aAAApC,EAAAoC,SAAA,CACA,GAAAC,GAAArC,EAAAsC,aAAA,WAEAD,IACArC,EAAApD,aAAA,eAGAoD,EAAAkC,SACAlC,EAAAuC,kBAAA,EAAAvC,EAAAkB,MAAA/F,QAEAkH,GACArC,EAAAtC,gBAAA,YAGAyE,EAAAnC,EAAAkB,UAEA,CACAlB,EAAAsC,aAAA,oBACAtC,EAAA5E,OAGA,IAAAoH,GAAA1J,OAAA2J,eACAC,EAAAjI,SAAAkI,aAEAD,GAAAE,mBAAA5C,GACAwC,EAAAK,kBACAL,EAAAM,SAAAJ,GAEAP,EAAAK,EAAAnB,WAGA,MAAAc,GAGAjL,EAAAD,QAAAiL,OAEIa,GAAA,SAAAzJ,EAAApC,EAAAD,GACJ,QAAA+L,MAKAA,EAAA3K,WACA6F,GAAA,SAAAzG,EAAAkJ,EAAAsC,GACA,GAAApK,GAAAH,KAAAG,IAAAH,KAAAG,KAOA,QALAA,EAAApB,KAAAoB,EAAApB,QAAA4G,MACAmD,GAAAb,EACAsC,QAGAvK,MAGAwK,KAAA,SAAAzL,EAAAkJ,EAAAsC,GAEA,QAAAzE,KACA2E,EAAA7E,IAAA7G,EAAA+G,GACAmC,EAAA/B,MAAAqE,EAAAnC,WAHA,GAAAqC,GAAAzK,IAOA,OADA8F,GAAA4E,EAAAzC,EACAjI,KAAAwF,GAAAzG,EAAA+G,EAAAyE,IAGAI,KAAA,SAAA5L,GACA,GAAA6L,MAAAjJ,MAAAhD,KAAAyJ,UAAA,GACAyC,IAAA7K,KAAAG,IAAAH,KAAAG,OAAsCpB,QAAA4C,QACtClD,EAAA,EACAqM,EAAAD,EAAApI,MAEA,KAAAhE,EAAQA,EAAAqM,EAASrM,IACjBoM,EAAApM,GAAAqK,GAAA5C,MAAA2E,EAAApM,GAAA8L,IAAAK,EAGA,OAAA5K,OAGA4F,IAAA,SAAA7G,EAAAkJ,GACA,GAAA9H,GAAAH,KAAAG,IAAAH,KAAAG,MACA4K,EAAA5K,EAAApB,GACAiM,IAEA,IAAAD,GAAA9C,EACA,OAAAxJ,GAAA,EAAAqM,EAAAC,EAAAtI,OAAoChE,EAAAqM,EAASrM,IAC7CsM,EAAAtM,GAAAqK,KAAAb,GAAA8C,EAAAtM,GAAAqK,GAAA4B,IAAAzC,GACA+C,EAAArF,KAAAoF,EAAAtM,GAYA,OAJAuM,GAAA,OACA7K,EAAApB,GAAAiM,QACA7K,GAAApB,GAEAiB,OAIAxB,EAAAD,QAAA+L,OAEIW,GAAA,SAAArK,EAAApC,EAAAD,IACJ,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,mBAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,eACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAAiJ,QACAjJ,EAAA8K,gBAAAD,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA8M,GACD,YAgBA,SAAAC,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAhBA,GAAAwC,GAEA,SAAAC,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,IAJAL,GAQAO,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MAIAgB,EAAA,WAIA,QAAAA,GAAAC,GACAnB,EAAAvL,KAAAyM,GAEAzM,KAAA2M,eAAAD,GACA1M,KAAA4M,gBAmKA,MA1JAX,GAAAQ,IACAH,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAAH,EAAAG,OACA7M,KAAA8M,UAAAJ,EAAAI,UACA9M,KAAA+M,QAAAL,EAAAK,QACA/M,KAAAkC,OAAAwK,EAAAxK,OACAlC,KAAAgN,KAAAN,EAAAM,KACAhN,KAAAiN,QAAAP,EAAAO,QAEAjN,KAAAyJ,aAAA,MAGA6C,IAAA,gBACA9D,MAAA,WACAxI,KAAAgN,KACAhN,KAAAkN,aACKlN,KAAAkC,QACLlC,KAAAmN,kBAIAb,IAAA,aACA9D,MAAA,WACA,GAAA4E,GAAApN,KAEAqN,EAAA,OAAAtL,SAAAuL,gBAAApI,aAAA,MAEAlF,MAAAuN,aAEAvN,KAAAwN,oBAAA,WACA,MAAAJ,GAAAG,cAEAvN,KAAAyN,YAAAzN,KAAA8M,UAAAtI,iBAAA,QAAAxE,KAAAwN,uBAAA,EAEAxN,KAAA0N,SAAA3L,SAAA4L,cAAA,YAEA3N,KAAA0N,SAAAE,MAAAC,SAAA,OAEA7N,KAAA0N,SAAAE,MAAAE,OAAA,IACA9N,KAAA0N,SAAAE,MAAAG,QAAA,IACA/N,KAAA0N,SAAAE,MAAAI,OAAA,IAEAhO,KAAA0N,SAAAE,MAAAK,SAAA,WACAjO,KAAA0N,SAAAE,MAAAP,EAAA,yBAEA,IAAAa,GAAA9N,OAAA+N,aAAApM,SAAAuL,gBAAAc,SACApO,MAAA0N,SAAAE,MAAAS,IAAAH,EAAA,KAEAlO,KAAA0N,SAAAxJ,aAAA,eACAlE,KAAA0N,SAAAlF,MAAAxI,KAAAgN,KAEAhN,KAAA8M,UAAAwB,YAAAtO,KAAA0N,UAEA1N,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAA0N,UACA1N,KAAAuO,cAGAjC,IAAA,aACA9D,MAAA,WACAxI,KAAAyN,cACAzN,KAAA8M,UAAAxH,oBAAA,QAAAtF,KAAAwN,qBACAxN,KAAAyN,YAAA,KACAzN,KAAAwN,oBAAA,MAGAxN,KAAA0N,WACA1N,KAAA8M,UAAA0B,YAAAxO,KAAA0N,UACA1N,KAAA0N,SAAA,SAIApB,IAAA,eACA9D,MAAA,WACAxI,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAAkC,QACAlC,KAAAuO,cAGAjC,IAAA,WACA9D,MAAA,WACA,GAAAiG,OAAA,EAEA,KACAA,EAAA1M,SAAA2M,YAAA1O,KAAA6M,QACK,MAAA8B,GACLF,GAAA,EAGAzO,KAAA4O,aAAAH,MAGAnC,IAAA,eACA9D,MAAA,SAAAiG,GACAzO,KAAA+M,QAAApC,KAAA8D,EAAA,mBACA5B,OAAA7M,KAAA6M,OACAG,KAAAhN,KAAAyJ,aACAwD,QAAAjN,KAAAiN,QACA4B,eAAA7O,KAAA6O,eAAA5N,KAAAjB,WAIAsM,IAAA,iBACA9D,MAAA,WACAxI,KAAAiN,SACAjN,KAAAiN,QAAAvK,QAGAtC,OAAA2J,eAAAI,qBAGAmC,IAAA,UACA9D,MAAA,WACAxI,KAAAuN,gBAGAjB,IAAA,SACAwC,IAAA,WACA,GAAAjC,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,SAIA,IAFApI,KAAA+O,QAAAlC,EAEA,SAAA7M,KAAA+O,SAAA,QAAA/O,KAAA+O,QACA,SAAA5H,OAAA,uDAGA7H,IAAA,WACA,MAAAU,MAAA+O,WAGAzC,IAAA,SACAwC,IAAA,SAAA5M,GACA,OAAA+D,KAAA/D,EAAA,CACA,IAAAA,GAAA,qBAAAA,EAAA,YAAA2J,EAAA3J,KAAA,IAAAA,EAAA4B,SAWA,SAAAqD,OAAA,8CAVA,aAAAnH,KAAA6M,QAAA3K,EAAA0H,aAAA,YACA,SAAAzC,OAAA,oFAGA,YAAAnH,KAAA6M,SAAA3K,EAAA0H,aAAA,aAAA1H,EAAA0H,aAAA,aACA,SAAAzC,OAAA,yGAGAnH,MAAAgP,QAAA9M,IAMA5C,IAAA,WACA,MAAAU,MAAAgP,YAIAvC,IAGAjO,GAAAD,QAAAkO,MAGGjD,OAAA,IAAWyF,GAAA,SAAArO,EAAApC,EAAAD,IACd,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,8DAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,sBAAAA,EAAA,gBAAAA,EAAA,sBACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAA8K,gBAAA9K,EAAA2O,YAAA3O,EAAA4O,cACA5O,EAAA6O,UAAAhE,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA6Q,EAAAC,EAAAC,GACD,YAQA,SAAAC,GAAA7D,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,GAUA,QAAAJ,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAsBA,QAAAuG,GAAAhF,EAAA9L,GACA,IAAA8L,EACA,SAAAiF,gBAAA,4DAGA,QAAA/Q,GAAA,gBAAAA,IAAA,kBAAAA,GAAA8L,EAAA9L,EAGA,QAAAgR,GAAAC,EAAAC,GACA,qBAAAA,IAAA,OAAAA,EACA,SAAA3G,WAAA,iEAAA2G,GAGAD,GAAAjQ,UAAAT,OAAAqC,OAAAsO,KAAAlQ,WACAqM,aACAxD,MAAAoH,EACAvQ,YAAA,EACAgN,UAAA,EACAjN,cAAA,KAGAyQ,IAAA3Q,OAAA4Q,eAAA5Q,OAAA4Q,eAAAF,EAAAC,GAAAD,EAAAG,UAAAF,GAqHA,QAAAG,GAAAC,EAAA3I,GACA,GAAA4I,GAAA,kBAAAD,CAEA,IAAA3I,EAAAsC,aAAAsG,GAIA,MAAA5I,GAAApC,aAAAgL,GA3LA,GAAAC,GAAAX,EAAAH,GAEAe,EAAAZ,EAAAF,GAEAe,EAAAb,EAAAD,GAQA1D,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MA4BAjL,EAAA,SAAA8P,GAOA,QAAA9P,GAAAyM,EAAAP,GACAnB,EAAAvL,KAAAQ,EAEA,IAAA4M,GAAAqC,EAAAzP,MAAAQ,EAAAuP,WAAA7Q,OAAAqR,eAAA/P,IAAA7B,KAAAqB,MAIA,OAFAoN,GAAAT,eAAAD,GACAU,EAAAoD,YAAAvD,GACAG,EA4FA,MAzGAuC,GAAAnP,EAAA8P,GAuBArE,EAAAzL,IACA8L,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAA,kBAAAH,GAAAG,OAAAH,EAAAG,OAAA7M,KAAAyQ,cACAzQ,KAAAkC,OAAA,kBAAAwK,GAAAxK,OAAAwK,EAAAxK,OAAAlC,KAAA0Q,cACA1Q,KAAAgN,KAAA,kBAAAN,GAAAM,KAAAN,EAAAM,KAAAhN,KAAA2Q,YACA3Q,KAAA8M,UAAA,WAAAjB,EAAAa,EAAAI,WAAAJ,EAAAI,UAAA/K,SAAAoD,QAGAmH,IAAA,cACA9D,MAAA,SAAAyE,GACA,GAAA2D,GAAA5Q,IAEAA,MAAA8F,UAAA,EAAAuK,EAAAzE,SAAAqB,EAAA,iBAAA9M,GACA,MAAAyQ,GAAAC,QAAA1Q,QAIAmM,IAAA,UACA9D,MAAA,SAAArI,GACA,GAAA8M,GAAA9M,EAAAkI,gBAAAlI,EAAA2Q,aAEA9Q,MAAAqL,kBACArL,KAAAqL,gBAAA,MAGArL,KAAAqL,gBAAA,GAAA8E,GAAAvE,SACAiB,OAAA7M,KAAA6M,OAAAI,GACA/K,OAAAlC,KAAAkC,OAAA+K,GACAD,KAAAhN,KAAAgN,KAAAC,GACAH,UAAA9M,KAAA8M,UACAG,UACAF,QAAA/M,UAIAsM,IAAA,gBACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,SAAA/C,MAGAX,IAAA,gBACA9D,MAAA,SAAAyE,GACA,GAAApL,GAAAmO,EAAA,SAAA/C,EAEA,IAAApL,EACA,MAAAE,UAAAgP,cAAAlP,MAIAyK,IAAA,cACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,OAAA/C,MAGAX,IAAA,UACA9D,MAAA,WACAxI,KAAA8F,SAAAP,UAEAvF,KAAAqL,kBACArL,KAAAqL,gBAAA9F,UACAvF,KAAAqL,gBAAA,WAIAiB,IAAA,cACA9D,MAAA,WACA,GAAAqE,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,kBAEA4I,EAAA,gBAAAnE,SACAoE,IAAAlP,SAAAmP,qBAMA,OAJAF,GAAA1M,QAAA,SAAAuI,GACAoE,OAAAlP,SAAAmP,sBAAArE,KAGAoE,MAIAzQ,GACE4P,EAAAxE,QAiBFpN,GAAAD,QAAAiC,MAGG2Q,qBAAA,EAAAC,gBAAA,EAAAC,eAAA,SAA+D,SAGlE,SAAAlL,GAEAA,EAAA,kDAAAmL,KAAA,SAAA7S,GACA,GAAA4F,GAAA,oBAAA5F,EACA8S,EAAA,sDAAAlN,EAAA,iBAEA8B,GAAAnG,MAAAwR,KAAA,gDACArL,EAAAnG,MAAAyR,KAAA,KAAApN,GAAAqN,MAAAH,KAGApL,EAAApE,UAAA4P,MAAA,WAiBA,QAAAC,GAAAzR,EAAA0R,GACA1L,EAAAhG,GAAAuG,SAAA,eACAP,EAAAhG,GAAAsR,KAAA,aAAAI,GACA1L,EAAAhG,GAAAsR,KAAA,eAAAI,GAnBA,GAAAC,GAAA3L,EAAA,2BACAiJ,EAAA,GAAA5O,GAAA,0BAEAsR,GAAArP,SAEA2M,EAAA5J,GAAA,mBAAArF,GACAA,EAAA0O,iBACA+C,EAAAzR,EAAA8M,QAAA,aAGA6E,EAAAC,WAAA,WACA5L,EAAAnG,MAAA2G,YAAA,eACAR,EAAAnG,MAAAgS,WAAA,cACA7L,EAAAnG,MAAAgS,WAAA,sBAaCpL,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAA,IAAAC,aAAA,WAEA,QAAAC,GAAAC,GACA,GAAAC,GAAAlM,EAAA,2BAEAiM,KACAC,IAAAC,IAAAF,IAGAC,EAAA1L,YAAA,QAGAR,EAAA,QAAAoM,MAAA,SAAApS,GACA,GAAAqS,GAAArM,EAAAhG,EAAA+B,QACAuQ,EAAAD,EAAAnM,QAAA,gBAEA,IAAAoM,EAAAhQ,OACA0P,IACIK,EAAAvJ,GAAA,OACJ9I,EAAAqD,iBAEA2O,EAAAM,GAEAA,EAAAjM,YAAA,YAOAyL,IAAAC,gBAECtL,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAlQ,SAAAyC,iBAAA,8BACA,GAAAkO,GAAAvM,EAAA,YAGAA,GAAA,eAAAmL,KAAA,WACA,GAAA7Q,GAAAT,KAAA0S,QAKC9L,QAED,SAAAT,GAEAA,EAAA,qDAAAwM,MAAA,KAAAC,QAAA,QAEAzM,EAAA,kCAAAoM,MAAA,SAAApS,GAKA,MAJAA,GAAAqD,iBAEA2C,EAAAnG,MAAA6S,OAAA,eAAAC,OAAAF,QAAA,SAEA,KAGChM,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAA,IAAAc,iBAAA,WAEA5M,EAAA,kCAAAmL,KAAA,WACA,GAAAkB,GAAArM,EAAAnG,MACAgT,EAAAR,EAAAS,KAAA,0BACAC,EAAAV,EAAAS,KAAA,uBAEAC,GAAA1N,GAAA,mBACA,GAAA2N,GAAA,GACAC,EAAA,EAEAjN,GAAAnG,MAAAwG,YAAA,cAEAwM,EAAAvM,SAAA,eACAuM,EAAArM,YAAA,cAAAD,SAAA,aACAyM,EAAA,WACAD,EAAAD,KAAA,6BAAAjG,KAAA,iBACAkG,EAAAD,KAAA,OAAAtM,YAAA,oBAAAD,SAAA,iBAEAsM,EAAArM,YAAA,aAAAD,SAAA,cACAyM,EAAA,OACAD,EAAAD,KAAA,6BAAAjG,KAAA,iBACAkG,EAAAD,KAAA,OAAAtM,YAAA,eAAAD,SAAA,qBAGA0M,EAAAjN,EAAA,eAAAgN,EAAA,OACA1B,KAAA,KAAAuB,EAAAvB,KAAA,OACAA,KAAA,OAAAuB,EAAAvB,KAAA,SACAA,KAAA,QAAAuB,EAAAvB,KAAA,UACA4B,IAAAL,EAAAK,OACAC,aAAAN,GAEAA,EAAAO,SACAP,EAAAI,EACAJ,EAAAtQ,aAQAuP,IAAAc,oBAECnM,QAED,SAAAT,GAEAqN,gBAAA,SAAAC,GACA,GACAC,IADAvN,EAAAsN,GAAAR,KAAA,yBACA9M,EAAAsN,GAAA7I,KAAA,UAEA+I,EAAA,EAAAC,KAAAC,GADA,GAEAC,EAAAH,EAAA,IAAAD,EACAK,EAAA,IAAAD,EAAAJ,EACAM,EACA,6LAEAD,EAAA,sDAEAL,EAAA,WAGAvN,GAAAsN,GAAAQ,QAAAD,GAAAtN,SAAA,UAAAuM,KAAA,qBAAAiB,IAAA,kBAAAR,EAAA,iBAGAvN,EAAA,gCAAAmL,KAAA,WACAkC,gBAAAxT,SAGC4G,QAED,SAAAT,GAEAgO,UAAA,SAAAV,GAaA,QAAAW,KACAC,EAAA7C,KAAA,kCACA6C,EAAAlT,OAEAqQ,EAAA6C,EAAAxB,SACAyB,EAAAnO,EAAA,iGAAAoO,UAAA/C,GACAgD,EAAArO,EAAA,6CAAAsO,SAAAjD,GACAhJ,EAAArC,EAAA,wCAA6CsO,SAAAD,GAC7CE,EAAAvO,EAAA,kCAAAsO,SAAAD,GAEAhD,EAAA9K,SAAA2N,EAAA5C,KAAA,UAKA,QAAAkD,KACAN,EAAA7O,GAAA,wBAGAoP,IACAF,EAAAzB,KAAA,MAAAX,IAAA,mBAAA9M,GAAA,iBAAAqP,GAEAC,EADA3O,EAAA0O,EAAA3S,SACA,GACA6S,QAMA,QAAAH,KACAF,EAAAM,QACAX,EAAApB,KAAA,YAAAxQ,OACA4R,EAAApB,KAAA,YAAA3B,KAAA,WACA,GACA2D,GADAC,EAAA/O,EAAAnG,KAEAiV,GAAA9O,EAAA,aAAAsO,SAAAC,GACAS,OAAAhP,EAAA,oCAAA6G,KAAAkI,EAAAE,KAAA,UAEAH,EAAAI,KAAAF,QACAF,EAAAvO,SAAA,YAEAwO,EAAAjC,KAAA,UAAA3B,KAAA,WACA,GACAgE,GADAC,EAAApP,EAAAnG,KAEAsV,GAAAnP,EAAA,aAAAsO,SAAAQ,GACAK,EAAAtI,KAAAuI,EAAAvI,QACAsI,EAAA1K,KAAA,QAAA2K,EAAAlC,OAEAkC,EAAAlC,OAAAgB,EAAAhB,OACAyB,EAAAQ,OAKAjB,EAAApB,KAAA,UAAA3B,KAAA,WACA,GACAgE,GADAC,EAAApP,EAAAnG,KAEAsV,GAAAnP,EAAA,aAAAsO,SAAAC,GACAY,EAAAtI,KAAAuI,EAAAvI,QACAsI,EAAA1K,KAAA,QAAA2K,EAAAlC,OAEAkC,EAAAlC,OAAAgB,EAAAhB,OACAyB,EAAAQ,GAAA,KAQA,QAAAP,KACA,GAAA1B,GAAAgB,EAAA,GAAA7L,KAGA6K,GAAAmC,MAAA,kBACApV,OAAAqV,SAAAC,KAAArC,GAKA,QAAAsC,KACAnE,EAAAyB,KAAA,UAAAhK,GAAA,eAGAuI,EAAA/K,SAAA,UAGAmP,IAFAC,KAOA,QAAAD,GAAAN,GACAA,IACAA,EAAA9D,GAGA8D,EAAA3O,YAAA,UACA2O,EAAAjP,QAAA,MAAAM,YAAA,eAIA,QAAAkP,KACA1P,EAAA,4BAAAmL,KAAA,WACAsE,EAAAzP,EAAAnG,SAGAwR,EAAA9K,SAAA,UACA8K,EAAAnL,QAAA,MAAAK,SAAA,eAIA,QAAAoO,GAAAS,EAAAO,GACAA,MAAA,KAAAA,KACAtN,EAAAwE,KAAAuI,EAAAvI,QACA7G,EAAA,WAAAuO,GAAA/N,YAAA,WACA4O,EAAA7O,SAAA,WACAkP,IAGAvB,EAAAhB,IAAAkC,EAAA3K,KAAA,UAEAkL,GACAzB,EAAApH,QAAA,UAvIA,GACAuE,GAAA8C,EAAAE,EAAAhM,EAAAkM,EADAL,EAAAlO,EAAAsN,EAGA,IAAAY,EAAApL,GAAA,aAIAoL,EAAAhO,QAAA,qBAAA5D,QAAA4R,EAAAzJ,KAAA,YAAAyJ,EAAApL,GAAA,cAqLA,MA/CA,YACA,GAAA8M,EAEA3B,KACAQ,IACAD,IAEAD,EAAAzB,KAAA,MAAAX,IAAA,mBAAA9M,GAAA,iBAAAqP,GAEAC,EADA3O,EAAA0O,EAAA3S,SACA,GACA6S,MAGAT,EAAA9O,GAAA,QAAAmQ,GACAnN,EAAAhD,GAAA,QAAAmQ,GACAtB,EAAA7O,GAAA,QAAAqQ,GAEA1P,EAAApE,UAAAwQ,MAAA,SAAAsC,GACA,GACAkB,GADA1B,EAAAlO,EAAA0O,EAAA3S,OAGAmS,GAAAhO,QAAA,qBAAA5D,QAIA4R,EAAApL,GAAA,UAAAoL,EAAA5C,KAAA,SACAsE,EAAA1B,EAAA5C,KAAA,OAEAtL,EAAA,UAAA4P,GAAAtT,SAKAmT,MAGAG,EAAA1B,EAAA5C,KAAA,MAEAsE,GACA5P,EAAA,aAAA4P,EAAA,KAAAvQ,GAAA,QAAAqQ,GAGAxB,EAAA3N,SAAA,iBAKA1G,MAIAmG,EAAA,qBAAAmL,KAAA,WACA6C,UAAAnU,SAGC4G,QAED,SAAAT,GAEA6P,QAAA,SAAAvC,GAQA,QAAAwC,KACA7V,OAAAiF,WAAA6Q,EAAA,IAIA,QAAAA,KACA,GAAAC,GAAA9B,EAAApB,KAAA,4BAAAJ,SACAuD,EAAAD,EAAAlD,KAAA,mBAEAoB,GAAAgC,OAAAD,EAAAE,cAAAH,EAAAG,cAAA,GAIA,QAAAC,KACA,GAAAJ,GAAA9B,EAAApB,KAAA,2BAEAoB,GAAApB,KAAA,yBAAAtM,YAAA,UACAwP,EAAAtD,SAAAI,KAAA,SAAAvM,SAAA,UAEAuP,IAIA,QAAAO,KACA,GAAAC,GACAC,EAAAtW,OAAAqV,SAAAkB,KAAAC,QAAA,cAEAF,KACAD,EAAApC,EAAApB,KAAA,SAAAyD,GAEAD,EAAA5D,SAAAI,KAAA,SAAAxQ,SACA4R,EAAApB,KAAA,yBAAAtM,YAAA,UACA8P,EAAA5D,SAAAI,KAAA,SAAAvM,SAAA,UAEA+P,EAAAhU,SAAAgU,EAAArB,KAAA,aACAqB,EAAArB,KAAA,cAEAyB,OAUA,QAAAA,KACAZ,IAEA9P,EAAA,cAAAiI,UACAiG,EAAAyC,SAAAzI,IACA0I,SAAA5Q,EAAA,QAAA+N,IAAA,eACA,IA5DA,GAAAG,GAAAlO,EAAAsN,GAAApN,QAAA,YAEA,IAAAgO,EAAA5R,OAgFA,MAjBA,YACA,GAAA0T,GAAA9B,EAAApB,KAAA,2BAEAoB,GAAA7O,GAAA,uCAAA+Q,GACApQ,EAAA/F,QAAAoF,GAAA,aAAAgR,GACAL,EAAAtD,SAAAI,KAAA,SAAAvM,SAAA,UAEAuP,IACAO,OAKArQ,EAAA/F,QAAA4W,OAAA,WACAf,MAGAjW,MAIAmG,EAAA,wBAAAmL,KAAA,WACA0E,QAAAhW,SAGC4G,QAED,SAAAT,GAGA,YAGA,iBAAA/F,QAAA6R,MACA7R,OAAA6R,QAGAA,IAAAgF,OAAA,WAEA9Q,EAAA,mDAAAX,GAAA,kBAAArF,GACA,GAAA+W,GAAA/Q,EAAAnG,MAAA,GAAAmX,MAAA,GACAC,EAAAjR,EAAAnG,MAAAiT,KAAA,wBAEAiE,IACAE,EAAApK,KAAAkK,EAAAnY,SAOAkT,IAAAgF,UAECrQ,UJ8G4BjI,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,GAAIwC,GKp1DJA,GAMA,SAAAiG,GAAwErI,EAAAD,QAAAsI,KAA6P,WAAa,GAAAC,EAA0B,gBAAA3G,GAAA4G,EAAAxH,EAAAyH,GAA0B,QAAAlH,GAAAb,EAAAgI,GAAgB,IAAA1H,EAAAN,GAAA,CAAU,IAAA8H,EAAA9H,GAAA,CAAU,GAAAiI,GAAA,kBAAAtG,KAA0C,KAAAqG,GAAAC,EAAA,MAAAtG,GAAA3B,GAAA,EAAwB,IAAAR,EAAA,MAAAA,GAAAQ,GAAA,EAAoB,IAAA4H,GAAA,GAAAM,OAAA,uBAAAlI,EAAA,IAA8C,MAAA4H,GAAAO,KAAA,mBAAAP,EAAkC,GAAAnI,GAAAa,EAAAN,IAAYV,WAAYwI,GAAA9H,GAAA,GAAAN,KAAAD,EAAAH,QAAA,SAAA4B,GAAmC,GAAAZ,GAAAwH,EAAA9H,GAAA,GAAAkB,EAAiB,OAAAL,GAAAP,GAAAY,IAAgBzB,IAAAH,QAAA4B,EAAA4G,EAAAxH,EAAAyH,GAAsB,MAAAzH,GAAAN,GAAAV,QAA8D,OAA1CE,GAAA,kBAAAmC,MAA0C3B,EAAA,EAAYA,EAAA+H,EAAAvE,OAAWxD,IAAAa,EAAAkH,EAAA/H,GAAY,OAAAa,KAAYuH,GAAA,SAAAzG,EAAApC,EAAAD,GAuB/yB,QAAA8H,GAAAiB,EAAAzF,GACA,KAAAyF,KAAAxD,WAAAyD,GAAA,CACA,qBAAAD,GAAAE,SACAF,EAAAE,QAAA3F,GACA,MAAAyF,EAEAA,KAAA3D,YA5BA,GAAA4D,GAAA,CAKA,uBAAAlF,mBAAA1C,UAAA6H,QAAA,CACA,GAAAC,GAAApF,QAAA1C,SAEA8H,GAAAD,QAAAC,EAAAC,iBACAD,EAAAE,oBACAF,EAAAG,mBACAH,EAAAI,kBACAJ,EAAAK,sBAoBAtJ,EAAAD,QAAA8H,OAEI0B,GAAA,SAAAnH,EAAApC,EAAAD,GAaJ,QAAAyJ,GAAAV,EAAAzF,EAAA4D,EAAAwC,EAAAC,GACA,GAAAC,GAAArC,EAAAI,MAAAlG,KAAAoI,UAIA,OAFAd,GAAA9C,iBAAAiB,EAAA0C,EAAAD,IAGA3C,QAAA,WACA+B,EAAAhC,oBAAAG,EAAA0C,EAAAD,KAcA,QAAApC,GAAAwB,EAAAzF,EAAA4D,EAAAwC,GACA,gBAAA9H,GACAA,EAAAkI,eAAAhC,EAAAlG,EAAA+B,OAAAL,GAEA1B,EAAAkI,gBACAJ,EAAAtJ,KAAA2I,EAAAnH,IAtCA,GAAAkG,GAAAzF,EAAA,YA2CApC,GAAAD,QAAAyJ,IAEGM,YAAA,IAAcC,GAAA,SAAA3H,EAAApC,EAAAD,GAOjBA,EAAAsC,KAAA,SAAA2H,GACA,WAAAvC,KAAAuC,GACAA,YAAAC,cACA,IAAAD,EAAA1E,UASAvF,EAAAmK,SAAA,SAAAF,GACA,GAAA/C,GAAAvG,OAAAS,UAAAgJ,SAAAhK,KAAA6J,EAEA,YAAAvC,KAAAuC,IACA,sBAAA/C,GAAA,4BAAAA,IACA,UAAA+C,KACA,IAAAA,EAAA/F,QAAAlE,EAAAsC,KAAA2H,EAAA,MASAjK,EAAAqK,OAAA,SAAAJ,GACA,sBAAAA,IACAA,YAAAK,SASAtK,EAAAuK,GAAA,SAAAN,GAGA,4BAFAtJ,OAAAS,UAAAgJ,SAAAhK,KAAA6J,SAKIO,GAAA,SAAAnI,EAAApC,EAAAD,GAaJ,QAAAyK,GAAA9G,EAAAuD,EAAAwC,GACA,IAAA/F,IAAAuD,IAAAwC,EACA,SAAAd,OAAA,6BAGA,KAAA8B,EAAAL,OAAAnD,GACA,SAAAyD,WAAA,mCAGA,KAAAD,EAAAH,GAAAb,GACA,SAAAiB,WAAA,oCAGA,IAAAD,EAAApI,KAAAqB,GACA,MAAAiH,GAAAjH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAP,SAAAxG,GACA,MAAAkH,GAAAlH,EAAAuD,EAAAwC,EAEA,IAAAgB,EAAAL,OAAA1G,GACA,MAAAmH,GAAAnH,EAAAuD,EAAAwC,EAGA,UAAAiB,WAAA,6EAaA,QAAAC,GAAAtI,EAAA4E,EAAAwC,GAGA,MAFApH,GAAA2D,iBAAAiB,EAAAwC,IAGA1C,QAAA,WACA1E,EAAAyE,oBAAAG,EAAAwC,KAcA,QAAAmB,GAAAV,EAAAjD,EAAAwC,GAKA,MAJAvG,OAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAA2D,iBAAAiB,EAAAwC,MAIA1C,QAAA,WACA7D,MAAA/B,UAAA2E,QAAA3F,KAAA+J,EAAA,SAAA7H,GACAA,EAAAyE,oBAAAG,EAAAwC,OAeA,QAAAoB,GAAAxH,EAAA4D,EAAAwC,GACA,MAAAD,GAAAjG,SAAAoD,KAAAtD,EAAA4D,EAAAwC,GA3FA,GAAAgB,GAAArI,EAAA,QACAoH,EAAApH,EAAA,WA6FApC,GAAAD,QAAAyK,IAEGM,OAAA,EAAAtB,SAAA,IAAsBuB,GAAA,SAAA3I,EAAApC,EAAAD,GACzB,QAAAiL,GAAAlC,GACA,GAAAmC,EAEA,eAAAnC,EAAAoC,SACApC,EAAA5E,QAEA+G,EAAAnC,EAAAkB,UAEA,cAAAlB,EAAAoC,UAAA,aAAApC,EAAAoC,SAAA,CACA,GAAAC,GAAArC,EAAAsC,aAAA,WAEAD,IACArC,EAAApD,aAAA,eAGAoD,EAAAkC,SACAlC,EAAAuC,kBAAA,EAAAvC,EAAAkB,MAAA/F,QAEAkH,GACArC,EAAAtC,gBAAA,YAGAyE,EAAAnC,EAAAkB,UAEA,CACAlB,EAAAsC,aAAA,oBACAtC,EAAA5E,OAGA,IAAAoH,GAAA1J,OAAA2J,eACAC,EAAAjI,SAAAkI,aAEAD,GAAAE,mBAAA5C,GACAwC,EAAAK,kBACAL,EAAAM,SAAAJ,GAEAP,EAAAK,EAAAnB,WAGA,MAAAc,GAGAjL,EAAAD,QAAAiL,OAEIa,GAAA,SAAAzJ,EAAApC,EAAAD,GACJ,QAAA+L,MAKAA,EAAA3K,WACA6F,GAAA,SAAAzG,EAAAkJ,EAAAsC,GACA,GAAApK,GAAAH,KAAAG,IAAAH,KAAAG,KAOA,QALAA,EAAApB,KAAAoB,EAAApB,QAAA4G,MACAmD,GAAAb,EACAsC,QAGAvK,MAGAwK,KAAA,SAAAzL,EAAAkJ,EAAAsC,GAEA,QAAAzE,KACA2E,EAAA7E,IAAA7G,EAAA+G,GACAmC,EAAA/B,MAAAqE,EAAAnC,WAHA,GAAAqC,GAAAzK,IAOA,OADA8F,GAAA4E,EAAAzC,EACAjI,KAAAwF,GAAAzG,EAAA+G,EAAAyE,IAGAI,KAAA,SAAA5L,GACA,GAAA6L,MAAAjJ,MAAAhD,KAAAyJ,UAAA,GACAyC,IAAA7K,KAAAG,IAAAH,KAAAG,OAAsCpB,QAAA4C,QACtClD,EAAA,EACAqM,EAAAD,EAAApI,MAEA,KAAAhE,EAAQA,EAAAqM,EAASrM,IACjBoM,EAAApM,GAAAqK,GAAA5C,MAAA2E,EAAApM,GAAA8L,IAAAK,EAGA,OAAA5K,OAGA4F,IAAA,SAAA7G,EAAAkJ,GACA,GAAA9H,GAAAH,KAAAG,IAAAH,KAAAG,MACA4K,EAAA5K,EAAApB,GACAiM,IAEA,IAAAD,GAAA9C,EACA,OAAAxJ,GAAA,EAAAqM,EAAAC,EAAAtI,OAAoChE,EAAAqM,EAASrM,IAC7CsM,EAAAtM,GAAAqK,KAAAb,GAAA8C,EAAAtM,GAAAqK,GAAA4B,IAAAzC,GACA+C,EAAArF,KAAAoF,EAAAtM,GAYA,OAJAuM,GAAA,OACA7K,EAAApB,GAAAiM,QACA7K,GAAApB,GAEAiB,OAIAxB,EAAAD,QAAA+L,OAEIW,GAAA,SAAArK,EAAApC,EAAAD,IACJ,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,mBAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,eACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAAiJ,QACAjJ,EAAA8K,gBAAAD,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA8M,GACD,YAgBA,SAAAC,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAhBA,GAAAwC,GAEA,SAAAC,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,IAJAL,GAQAO,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MAIAgB,EAAA,WAIA,QAAAA,GAAAC,GACAnB,EAAAvL,KAAAyM,GAEAzM,KAAA2M,eAAAD,GACA1M,KAAA4M,gBAmKA,MA1JAX,GAAAQ,IACAH,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAAH,EAAAG,OACA7M,KAAA8M,UAAAJ,EAAAI,UACA9M,KAAA+M,QAAAL,EAAAK,QACA/M,KAAAkC,OAAAwK,EAAAxK,OACAlC,KAAAgN,KAAAN,EAAAM,KACAhN,KAAAiN,QAAAP,EAAAO,QAEAjN,KAAAyJ,aAAA,MAGA6C,IAAA,gBACA9D,MAAA,WACAxI,KAAAgN,KACAhN,KAAAkN,aACKlN,KAAAkC,QACLlC,KAAAmN,kBAIAb,IAAA,aACA9D,MAAA,WACA,GAAA4E,GAAApN,KAEAqN,EAAA,OAAAtL,SAAAuL,gBAAApI,aAAA,MAEAlF,MAAAuN,aAEAvN,KAAAwN,oBAAA,WACA,MAAAJ,GAAAG,cAEAvN,KAAAyN,YAAAzN,KAAA8M,UAAAtI,iBAAA,QAAAxE,KAAAwN,uBAAA,EAEAxN,KAAA0N,SAAA3L,SAAA4L,cAAA,YAEA3N,KAAA0N,SAAAE,MAAAC,SAAA,OAEA7N,KAAA0N,SAAAE,MAAAE,OAAA,IACA9N,KAAA0N,SAAAE,MAAAG,QAAA,IACA/N,KAAA0N,SAAAE,MAAAI,OAAA,IAEAhO,KAAA0N,SAAAE,MAAAK,SAAA,WACAjO,KAAA0N,SAAAE,MAAAP,EAAA,yBAEA,IAAAa,GAAA9N,OAAA+N,aAAApM,SAAAuL,gBAAAc,SACApO,MAAA0N,SAAAE,MAAAS,IAAAH,EAAA,KAEAlO,KAAA0N,SAAAxJ,aAAA,eACAlE,KAAA0N,SAAAlF,MAAAxI,KAAAgN,KAEAhN,KAAA8M,UAAAwB,YAAAtO,KAAA0N,UAEA1N,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAA0N,UACA1N,KAAAuO,cAGAjC,IAAA,aACA9D,MAAA,WACAxI,KAAAyN,cACAzN,KAAA8M,UAAAxH,oBAAA,QAAAtF,KAAAwN,qBACAxN,KAAAyN,YAAA,KACAzN,KAAAwN,oBAAA,MAGAxN,KAAA0N,WACA1N,KAAA8M,UAAA0B,YAAAxO,KAAA0N,UACA1N,KAAA0N,SAAA,SAIApB,IAAA,eACA9D,MAAA,WACAxI,KAAAyJ,cAAA,EAAAiC,EAAAE,SAAA5L,KAAAkC,QACAlC,KAAAuO,cAGAjC,IAAA,WACA9D,MAAA,WACA,GAAAiG,OAAA,EAEA,KACAA,EAAA1M,SAAA2M,YAAA1O,KAAA6M,QACK,MAAA8B,GACLF,GAAA,EAGAzO,KAAA4O,aAAAH,MAGAnC,IAAA,eACA9D,MAAA,SAAAiG,GACAzO,KAAA+M,QAAApC,KAAA8D,EAAA,mBACA5B,OAAA7M,KAAA6M,OACAG,KAAAhN,KAAAyJ,aACAwD,QAAAjN,KAAAiN,QACA4B,eAAA7O,KAAA6O,eAAA5N,KAAAjB,WAIAsM,IAAA,iBACA9D,MAAA,WACAxI,KAAAiN,SACAjN,KAAAiN,QAAAvK,QAGAtC,OAAA2J,eAAAI,qBAGAmC,IAAA,UACA9D,MAAA,WACAxI,KAAAuN,gBAGAjB,IAAA,SACAwC,IAAA,WACA,GAAAjC,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,SAIA,IAFApI,KAAA+O,QAAAlC,EAEA,SAAA7M,KAAA+O,SAAA,QAAA/O,KAAA+O,QACA,SAAA5H,OAAA,uDAGA7H,IAAA,WACA,MAAAU,MAAA+O,WAGAzC,IAAA,SACAwC,IAAA,SAAA5M,GACA,OAAA+D,KAAA/D,EAAA,CACA,IAAAA,GAAA,qBAAAA,EAAA,YAAA2J,EAAA3J,KAAA,IAAAA,EAAA4B,SAWA,SAAAqD,OAAA,8CAVA,aAAAnH,KAAA6M,QAAA3K,EAAA0H,aAAA,YACA,SAAAzC,OAAA,oFAGA,YAAAnH,KAAA6M,SAAA3K,EAAA0H,aAAA,aAAA1H,EAAA0H,aAAA,aACA,SAAAzC,OAAA,yGAGAnH,MAAAgP,QAAA9M,IAMA5C,IAAA,WACA,MAAAU,MAAAgP,YAIAvC,IAGAjO,GAAAD,QAAAkO,MAGGjD,OAAA,IAAWyF,GAAA,SAAArO,EAAApC,EAAAD,IACd,SAAAgC,EAAA2K,GACA,qBAAApE,MAAAqE,IACArE,GAAA,8DAAAoE,OACE,aAAA3M,EACF2M,EAAA1M,EAAAoC,EAAA,sBAAAA,EAAA,gBAAAA,EAAA,sBACE,CACF,GAAAwK,IACA7M,WAEA2M,GAAAE,EAAA7K,EAAA8K,gBAAA9K,EAAA2O,YAAA3O,EAAA4O,cACA5O,EAAA6O,UAAAhE,EAAA7M,UAECyB,KAAA,SAAAxB,EAAA6Q,EAAAC,EAAAC,GACD,YAQA,SAAAC,GAAA7D,GACA,MAAAA,MAAAnM,WAAAmM,GACAC,QAAAD,GAUA,QAAAJ,GAAAC,EAAAC,GACA,KAAAD,YAAAC,IACA,SAAAvC,WAAA,qCAsBA,QAAAuG,GAAAhF,EAAA9L,GACA,IAAA8L,EACA,SAAAiF,gBAAA,4DAGA,QAAA/Q,GAAA,gBAAAA,IAAA,kBAAAA,GAAA8L,EAAA9L,EAGA,QAAAgR,GAAAC,EAAAC,GACA,qBAAAA,IAAA,OAAAA,EACA,SAAA3G,WAAA,iEAAA2G,GAGAD,GAAAjQ,UAAAT,OAAAqC,OAAAsO,KAAAlQ,WACAqM,aACAxD,MAAAoH,EACAvQ,YAAA,EACAgN,UAAA,EACAjN,cAAA,KAGAyQ,IAAA3Q,OAAA4Q,eAAA5Q,OAAA4Q,eAAAF,EAAAC,GAAAD,EAAAG,UAAAF,GAqHA,QAAAG,GAAAC,EAAA3I,GACA,GAAA4I,GAAA,kBAAAD,CAEA,IAAA3I,EAAAsC,aAAAsG,GAIA,MAAA5I,GAAApC,aAAAgL,GA3LA,GAAAC,GAAAX,EAAAH,GAEAe,EAAAZ,EAAAF,GAEAe,EAAAb,EAAAD,GAQA1D,EAAA,kBAAAC,SAAA,gBAAAA,QAAAC,SAAA,SAAAJ,GACA,aAAAA,IACE,SAAAA,GACF,MAAAA,IAAA,kBAAAG,SAAAH,EAAAK,cAAAF,QAAAH,IAAAG,OAAAnM,UAAA,eAAAgM,IASAM,EAAA,WACA,QAAAC,GAAAhK,EAAAiK,GACA,OAAA1N,GAAA,EAAkBA,EAAA0N,EAAA1J,OAAkBhE,IAAA,CACpC,GAAA2N,GAAAD,EAAA1N,EACA2N,GAAA/M,WAAA+M,EAAA/M,aAAA,EACA+M,EAAAhN,cAAA,EACA,SAAAgN,OAAAC,UAAA,GACAnN,OAAAC,eAAA+C,EAAAkK,EAAAE,IAAAF,IAIA,gBAAAX,EAAAc,EAAAC,GAGA,MAFAD,IAAAL,EAAAT,EAAA9L,UAAA4M,GACAC,GAAAN,EAAAT,EAAAe,GACAf,MA4BAjL,EAAA,SAAA8P,GAOA,QAAA9P,GAAAyM,EAAAP,GACAnB,EAAAvL,KAAAQ,EAEA,IAAA4M,GAAAqC,EAAAzP,MAAAQ,EAAAuP,WAAA7Q,OAAAqR,eAAA/P,IAAA7B,KAAAqB,MAIA,OAFAoN,GAAAT,eAAAD,GACAU,EAAAoD,YAAAvD,GACAG,EA4FA,MAzGAuC,GAAAnP,EAAA8P,GAuBArE,EAAAzL,IACA8L,IAAA,iBACA9D,MAAA,WACA,GAAAkE,GAAAtE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,KAEApI,MAAA6M,OAAA,kBAAAH,GAAAG,OAAAH,EAAAG,OAAA7M,KAAAyQ,cACAzQ,KAAAkC,OAAA,kBAAAwK,GAAAxK,OAAAwK,EAAAxK,OAAAlC,KAAA0Q,cACA1Q,KAAAgN,KAAA,kBAAAN,GAAAM,KAAAN,EAAAM,KAAAhN,KAAA2Q,YACA3Q,KAAA8M,UAAA,WAAAjB,EAAAa,EAAAI,WAAAJ,EAAAI,UAAA/K,SAAAoD,QAGAmH,IAAA,cACA9D,MAAA,SAAAyE,GACA,GAAA2D,GAAA5Q,IAEAA,MAAA8F,UAAA,EAAAuK,EAAAzE,SAAAqB,EAAA,iBAAA9M,GACA,MAAAyQ,GAAAC,QAAA1Q,QAIAmM,IAAA,UACA9D,MAAA,SAAArI,GACA,GAAA8M,GAAA9M,EAAAkI,gBAAAlI,EAAA2Q,aAEA9Q,MAAAqL,kBACArL,KAAAqL,gBAAA,MAGArL,KAAAqL,gBAAA,GAAA8E,GAAAvE,SACAiB,OAAA7M,KAAA6M,OAAAI,GACA/K,OAAAlC,KAAAkC,OAAA+K,GACAD,KAAAhN,KAAAgN,KAAAC,GACAH,UAAA9M,KAAA8M,UACAG,UACAF,QAAA/M,UAIAsM,IAAA,gBACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,SAAA/C,MAGAX,IAAA,gBACA9D,MAAA,SAAAyE,GACA,GAAApL,GAAAmO,EAAA,SAAA/C,EAEA,IAAApL,EACA,MAAAE,UAAAgP,cAAAlP,MAIAyK,IAAA,cACA9D,MAAA,SAAAyE,GACA,MAAA+C,GAAA,OAAA/C,MAGAX,IAAA,UACA9D,MAAA,WACAxI,KAAA8F,SAAAP,UAEAvF,KAAAqL,kBACArL,KAAAqL,gBAAA9F,UACAvF,KAAAqL,gBAAA,WAIAiB,IAAA,cACA9D,MAAA,WACA,GAAAqE,GAAAzE,UAAA3F,OAAA,OAAAwD,KAAAmC,UAAA,GAAAA,UAAA,kBAEA4I,EAAA,gBAAAnE,SACAoE,IAAAlP,SAAAmP,qBAMA,OAJAF,GAAA1M,QAAA,SAAAuI,GACAoE,OAAAlP,SAAAmP,sBAAArE,KAGAoE,MAIAzQ,GACE4P,EAAAxE,QAiBFpN,GAAAD,QAAAiC,MAGG2Q,qBAAA,EAAAC,gBAAA,EAAAC,eAAA,SAA+D,UL01D5D,SAAU7S,EAAQD,EAASH,IAEL,SAASmC,GMhnFrC,GAAAG,GAAAC,GAEA,SAAAJ,GACA,YAcA,SAAAE,GAAAI,EAAAC,GAGAd,KAAAe,MAAAf,KAAAgB,KAAAC,KAAAjB,MACAA,KAAAkB,MAAAlB,KAAAmB,KAAAF,KAAAjB,MACAA,KAAAoB,eAAApB,KAAAoB,eAAAH,KAAAjB,MACAA,KAAAqB,cAAArB,KAAAqB,cAAAJ,KAAAjB,MAGAA,KAAAa,OAGAb,KAAAsB,cAGAtB,KAAAuB,OAAAT,GAiRA,QAAAU,GAAAC,GACA,MAAAC,OAAA/B,UAAAgC,MAAAhD,KAAA8C,GAWA,QAAAG,GAAAC,EAAAC,GACA,MAAAN,IAAAM,GAAAC,UAAAC,iBAAAH,IAUA,QAAAI,GAAAC,GACA,MAAAC,UAAAxC,UAAAyC,cAAAF,GACAV,EAAAU,GAGAG,QAAA1C,UAAAyC,cAAAF,IACAA,GAGA,gBAAAA,GACAN,EAAAM,OADA,GAUA,QAAAI,GAAAzB,GACA,GAAA0B,GAAAC,EAAA3B,EAEA0B,GAAAE,QACAF,EAAA,GAAAG,QAUA,QAAAF,GAAA3B,GACA,MAAAe,GAAAe,EAAAC,KAAA,KAAA/B,GAAAgC,OAAA,SAAAC,GACA,SAAAA,EAAAC,aAAAD,EAAAE,cAAAF,EAAAG,iBAAAR,UAUA,QAAAS,GAAArC,EAAAsC,GACA,GAAAZ,GAAAC,EAAA3B,GACAuC,EAAAb,EAAAc,QAAAtB,SAAAuB,cAKAH,GAAAI,UAAA,IAAAH,GACAb,IAAAE,OAAA,GAAAC,QACAS,EAAAK,kBAIKL,EAAAI,UAAAH,IAAAb,EAAAE,OAAA,IACLF,EAAA,GAAAG,QACAS,EAAAK,kBAUA,QAAAC,GAAA5C,GACA,GAAA6C,GAAAlC,EAAAX,EAAA8C,WAAAC,YACAC,EAAAH,EAAAb,OAAA,SAAAhC,GACA,WAAAA,EAAAiD,UAKA,OAFAD,GAAAE,OAAAF,EAAAR,QAAAxC,GAAA,GAEAgD,EAjZA,GAGAG,GAHArB,GAAA,4MAoCAlC,GAAAd,UAAA4B,OAAA,SAAAT,GA2BA,MAzBAd,MAAAiE,SAAAjE,KAAAiE,UAAAhC,EAAAnB,IAAA2C,EAAAzD,KAAAa,MAIAb,KAAAa,KAAAqD,aAAA,kBACAlE,KAAAmE,OAAA,EAIAnE,KAAAoE,SAAAxC,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,MACArE,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAC,iBAAA,QAAAxE,KAAAe,QACKE,KAAAjB,OAILA,KAAAyE,SAAA7C,EAAA,0BAAA5B,KAAAa,MACA6D,OAAA9C,EAAA,2BAAA5B,KAAAa,KAAAwD,GAAA,OACArE,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAH,iBAAA,QAAAxE,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,UAEA5E,MAWAS,EAAAd,UAAAqB,KAAA,SAAAmC,GAEA,GAAAnD,KAAAmE,MACA,MAAAnE,KAGA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAoCA,OAnCA9E,MAAAa,KAAAiE,uBAAA,sBACA,GAAAC,UAAA,mCACAF,EAAA,GAAAE,UAAA,iCAEA/E,KAAAmE,OAAA,EACAnE,KAAAa,KAAAmE,gBAAA,eAKAhF,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,cAEAD,IACA/C,EAAAgC,aAAA,4BAAAe,GAGA/C,EAAAgC,aAAA,wBAMAF,EAAAjC,SAAAuB,cACAhB,EAAAtC,KAAAa,MAKAkB,SAAAoD,KAAAX,iBAAA,QAAAxE,KAAAoB,gBAAA,GACAW,SAAAyC,iBAAA,UAAAxE,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MAWAS,EAAAd,UAAAwB,KAAA,SAAAgC,GAEA,IAAAnD,KAAAmE,MACA,MAAAnE,KAIA,IAAA6E,GAAA7E,KAAAa,KAAAiE,uBAAA,qBAEA9E,MAAAa,KAAAiE,uBAAA,sBAEA,GAAAC,UAAA,oCAEAF,EAAA,GAAAE,UAAA,kCAEA/E,KAAAmE,OAAA,CAEA,IAAAiB,GAAApF,KAAAa,IAiCA,OAhCAwE,YAAA,WACAD,EAAAlB,aAAA,uBACE,KAIFlE,KAAAiE,SAAAK,QAAA,SAAApC,GACA,GAAA+C,GAAA/C,EAAAgD,aAAA,4BAGAD,IACA/C,EAAAgC,aAAA,cAAAe,GACA/C,EAAA8C,gBAAA,8BAEA9C,EAAA8C,gBAAA,iBAMAhB,GACAA,EAAAtB,QAKAX,SAAAoD,KAAAG,oBAAA,QAAAtF,KAAAoB,gBAAA,GACAW,SAAAuD,oBAAA,UAAAtF,KAAAqB,eAGArB,KAAA4E,MAAA,OAAAzB,GAEAnD,MASAS,EAAAd,UAAA4F,QAAA,WAoBA,MAlBAvF,MAAAmB,OAGAnB,KAAAoE,SAAAE,QAAA,SAAAC,GACAA,EAAAe,oBAAA,QAAAtF,KAAAe,QACKE,KAAAjB,OAGLA,KAAAyE,SAAAH,QAAA,SAAAK,GACAA,EAAAW,oBAAA,QAAAtF,KAAAkB,QACKD,KAAAjB,OAGLA,KAAA4E,MAAA,WAGA5E,KAAAsB,cAEAtB,MASAS,EAAAd,UAAA6F,GAAA,SAAAC,EAAAC,GAOA,WANA,KAAA1F,KAAAsB,WAAAmE,KACAzF,KAAAsB,WAAAmE,OAGAzF,KAAAsB,WAAAmE,GAAAE,KAAAD,GAEA1F,MASAS,EAAAd,UAAAiG,IAAA,SAAAH,EAAAC,GACA,GAAAG,GAAA7F,KAAAsB,WAAAmE,GAAApC,QAAAqC,EAMA,OAJAG,IAAA,GACA7F,KAAAsB,WAAAmE,GAAA1B,OAAA8B,EAAA,GAGA7F,MAWAS,EAAAd,UAAAiF,MAAA,SAAAa,EAAAtC,IACAnD,KAAAsB,WAAAmE,QAEAnB,QAAA,SAAAwB,GACAA,EAAA9F,KAAAa,KAAAsC,IACKlC,KAAAjB,QAULS,EAAAd,UAAA0B,cAAA,SAAA8B,GAGAnD,KAAAmE,OAzQA,KAyQAhB,EAAA4C,QACA5C,EAAAK,iBACAxD,KAAAmB,QAKAnB,KAAAmE,OAjRA,IAiRAhB,EAAA4C,OACA7C,EAAAlD,KAAAa,KAAAsC,IAWA1C,EAAAd,UAAAyB,eAAA,SAAA+B,GAGAnD,KAAAmE,QAAAnE,KAAAa,KAAAmF,SAAA7C,EAAAjB,SACAI,EAAAtC,KAAAa,WAkHA,KAAArC,OAAA,KAAAA,EAAAD,QACAC,EAAAD,QAAAkC,GAEAC,SAEKuF,MAFLtF,EAAA,WACA,MAAAF,IACKyF,MAAA3H,EAAAmC,MAAAlC,EAAAD,QAAAoC,SAIJ,KAAAJ,GAAAH,UNmnF4BzB,KAAKJ,EAASH,EAAoB","file":"admin.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2);\n\nconsole.log('This is the entry point.');\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, ClipboardJS, A11yDialog) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;/*!\n * WPMU DEV Shared UI\n * Copyright 2018 Incsub (https://incsub.com)\n * Licensed under GPL v2 (http://www.gnu.org/licenses/gpl-2.0.html)\n */\n/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return A11yDialog;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n( function( $ ) {\n\n\tvar accordionTable = $( '.sui-2-1-0 .sui-accordion' );\n\n\taccordionTable.on( 'click', '.sui-accordion-item', function() {\n\n\t\tvar getParentItem = $( this ).closest( '.sui-accordion-item' ),\n\t\t\tgetNextAdditionalContentRow = getParentItem.nextUntil( '.sui-accordion-item' );\n\n\t\tgetNextAdditionalContentRow.toggleClass( 'sui-accordion-item--open' );\n\n\t\tif ( getNextAdditionalContentRow.hasClass( 'sui-accordion-item--open' ) ) {\n\t\t\tgetParentItem.addClass( 'sui-accordion-item--open' );\n\t\t} else {\n\t\t\tgetParentItem.removeClass( 'sui-accordion-item--open' );\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-code-snippet:not(.sui-no-copy)' ).each( function( i ) {\n\t\tvar id = 'sui-code-snippet-' + i,\n\t\t\tbutton = '<button class=\"sui-button\" data-clipboard-target=\"#' + id + '\">Copy</button>';\n\n\t\t$( this ).wrap( '<div class=\"sui-code-snippet-wrapper\"></div>' );\n\t\t$( this ).attr( 'id', id ).after( button );\n\t});\n\n\t$( document ).ready( function() {\n\t\tvar btns = $( '[data-clipboard-target]' );\n\t\tvar clipboard = new ClipboardJS( '[data-clipboard-target]' );\n\n\t\tif ( btns.length ) {\n\n\t\t\tclipboard.on( 'success', function( e ) {\n\t\t\t\te.clearSelection();\n\t\t\t\tshowTooltip( e.trigger, 'Copied!' );\n\t\t\t});\n\n\t\t\tbtns.mouseleave( function() {\n\t\t\t\t$( this ).removeClass( 'sui-tooltip' );\n\t\t\t\t$( this ).removeAttr( 'aria-label' );\n\t\t\t\t$( this ).removeAttr( 'data-tooltip' );\n\t\t\t});\n\n\t\t\tfunction showTooltip( e, msg ) {\n\t\t\t\t$( e ).addClass( 'sui-tooltip' );\n\t\t\t\t$( e ).attr( 'aria-label', msg );\n\t\t\t\t$( e ).attr( 'data-tooltip', msg );\n\t\t\t}\n\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.linkDropdown = function() {\n\n\t\tfunction closeAllDropdowns( $except ) {\n\t\t\tvar $dropdowns = $( '.sui-2-1-0 .sui-dropdown' );\n\n\t\t\tif ( $except ) {\n\t\t\t\t$dropdowns = $dropdowns.not( $except );\n\t\t\t}\n\n\t\t\t$dropdowns.removeClass( 'open' );\n\t\t}\n\n\t\t$( 'body' ).click( function( e ) {\n\t\t\tvar $this = $( e.target ),\n\t\t\t\t$el = $this.closest( '.sui-dropdown' );\n\n\t\t\tif ( 0 == $el.length ) {\n\t\t\t\tcloseAllDropdowns();\n\t\t\t} else if ( $this.is( 'a' ) ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tcloseAllDropdowns( $el );\n\n\t\t\t\t$el.toggleClass( 'open' );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.linkDropdown();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tdocument.addEventListener( 'DOMContentLoaded', function() {\n\t\tvar mainEl = $( '.sui-wrap' );\n\n\t\t// Init the dialog elements.\n\t\t$( '.sui-dialog' ).each( function() {\n\t\t\tnew A11yDialog( this, mainEl );\n\t\t});\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-notice-top:not(.sui-cant-dismiss)' ).delay( 3000 ).slideUp( 'slow' );\n\n\t$( '.sui-2-1-0 .sui-notice-dismiss' ).click( function( e ) {\n\t\te.preventDefault();\n\n\t\t$( this ).parent( '.sui-notice' ).stop().slideUp( 'slow' );\n\n\t\treturn false;\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.showHidePassword = function() {\n\n\t\t$( '.sui-2-1-0 .sui-password-group' ).each( function() {\n\t\t\tvar $this = $( this ),\n\t\t\t\t$input = $this.find( 'input[type=\"password\"]' ),\n\t\t\t\t$button = $this.find( '.sui-password-toggle' );\n\n\t\t\t$button.on( 'click', function() {\n\t\t\t\tvar $inputType = '',\n\t\t\t\t\t$repInput = '';\n\n\t\t\t\t$( this ).toggleClass( 'is-visible' );\n\n\t\t\t\tif ( $input.hasClass( 'is-visible' ) ) {\n\t\t\t\t\t$input.removeClass( 'is-visible' ).addClass( 'is-hidden' );\n\t\t\t\t\t$inputType = 'password';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Show Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye-hide' ).addClass( 'sui-ico-eye' );\n\t\t\t\t} else {\n\t\t\t\t\t$input.removeClass( 'is-hidden' ).addClass( 'is-visible' );\n\t\t\t\t\t$inputType = 'text';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Hide Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye' ).addClass( 'sui-ico-eye-hide' );\n\t\t\t\t}\n\n\t\t\t\t$repInput = $( '<input type=' + $inputType + ' />' )\n\t\t\t\t\t.attr( 'id', $input.attr( 'id' ) )\n\t\t\t\t\t.attr( 'name', $input.attr( 'name' ) )\n\t\t\t\t\t.attr( 'class', $input.attr( 'class' ) )\n\t\t\t\t\t.val( $input.val() )\n\t\t\t\t\t.insertBefore( $input );\n\n\t\t\t\t$input.remove();\n\t\t\t\t$input = $repInput;\n\t\t\t\t$input.focus();\n\n\t\t\t});\n\n\t\t});\n\n\t};\n\n\tSUI.showHidePassword();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tloadCircleScore = function( el ) {\n\t\tvar dial = $( el ).find( 'svg circle:last-child' ),\n\t\t\tscore = $( el ).data( 'score' ),\n\t\t\tradius = 42,\n\t\t\tcircumference = 2 * Math.PI * radius,\n\t\t\tdashLength = ( circumference / 100 ) * score,\n\t\t\tgapLength = dashLength * 100 - score,\n\t\t\tsvg =\n\t\t\t\t'<svg viewbox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" />\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" stroke-dasharray=\"0,' + gapLength + '\" />\\n' +\n\t\t\t\t'</svg>\\n' +\n\t\t\t\t'<span class=\"sui-circle-score-label\">' + score + '</span>\\n';\n\n\t\t// Add svg to score element, add loaded class, & change stroke-dasharray to represent target score/percentage.\n\t\t$( el ).prepend( svg ).addClass( 'loaded' ).find( 'circle:last-child' ).css( 'animation', 'sui' + score + ' 3s forwards' );\n\t};\n\n\t$( '.sui-2-1-0 .sui-circle-score' ).each( function() {\n\t\tloadCircleScore( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiSelect = function( el ) {\n\t\tvar jq = $( el ),\n\t\t\twrap, handle, list, value, items;\n\n\t\tif ( ! jq.is( 'select' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( jq.closest( '.select-container' ).length || jq.data( 'select2' ) || jq.is( '.none-sui' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add the DOM elements to style the select list.\n\t\tfunction setupElement() {\n\t\t\tjq.wrap( '<div class=\"select-container\">' );\n\t\t\tjq.hide();\n\n\t\t\twrap = jq.parent();\n\t\t\thandle = $( '<span class=\"dropdown-handle\"><i class=\"sui-icon-chevron-down\" aria-hidden=\"true\"></i></span>' ).prependTo( wrap );\n\t\t\tlist = $( '<div class=\"select-list-container\"></div>' ).appendTo( wrap );\n\t\t\tvalue = $( '<div class=\"list-value\"> </div>' ).appendTo( list );\n\t\t\titems = $( '<ul class=\"list-results\"></ul>' ).appendTo( list );\n\n\t\t\twrap.addClass( jq.attr( 'class' ) );\n\t\t}\n\n\t\t// When changing selection using JS, you need to trigger a 'sui:change' event\n\t\t// eg: $('select').val('4').trigger('sui:change')\n\t\tfunction handleSelectionChange() {\n\t\t\tjq.on( 'sui:change', function() {\n\n\t\t\t\t// We need to re-populateList to handle dynamic select options added via JS/ajax.\n\t\t\t\tpopulateList();\n\t\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\t\tvar opt = $( ev.target );\n\t\t\t\t\tselectItem( opt, false );\n\t\t\t\t\thandleValue();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Add all the options to the new DOM elements.\n\t\tfunction populateList() {\n\t\t\titems.empty();\n\t\t\tif ( jq.find( 'optgroup' ).length ) {\n\t\t\t\tjq.find( 'optgroup' ).each( function() {\n\t\t\t\t\tvar optgroup = $( this ),\n\t\t\t\t\t\toptGroupItem;\n\t\t\t\t\toptGroupItem = $( '<ul></ul>' ).appendTo( items );\n\t\t\t\t\t$label = $( '<li class=\"optgroup-label\"></li>' ).text( optgroup.prop( 'label' ) );\n\n\t\t\t\t\toptGroupItem.html( $label );\n\t\t\t\t\toptGroupItem.addClass( 'optgroup' );\n\n\t\t\t\t\toptgroup.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\t\titem;\n\t\t\t\t\t\titem = $( '<li></li>' ).appendTo( optGroupItem );\n\t\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\t\tselectItem( item );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tjq.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\titem;\n\t\t\t\t\titem = $( '<li></li>' ).appendTo( items );\n\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\tselectItem( item, true );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\t// Checks the option value for a link.\n\t\tfunction handleValue() {\n\t\t\tvar val = jq[0].value;\n\n\t\t\t// If option is link, navigate to it.\n\t\t\tif ( val.match( '^https?:\\/\\/|#' ) ) {\n\t\t\t\twindow.location.href = val;\n\t\t\t}\n\t\t}\n\n\t\t// Toggle the dropdown state between open/closed.\n\t\tfunction stateToggle() {\n\t\t\tif ( wrap.find( 'select' ).is( ':disabled' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ! wrap.hasClass( 'active' ) ) {\n\t\t\t\tstateOpen();\n\t\t\t} else {\n\t\t\t\tstateClose();\n\t\t\t}\n\t\t}\n\n\t\t// Close the dropdown list.\n\t\tfunction stateClose( item ) {\n\t\t\tif ( ! item ) {\n\t\t\t\titem = wrap;\n\t\t\t}\n\n\t\t\titem.removeClass( 'active' );\n\t\t\titem.closest( 'tr' ).removeClass( 'select-open' );\n\t\t}\n\n\t\t// Open the dropdown list.\n\t\tfunction stateOpen() {\n\t\t\t$( '.select-container.active' ).each( function() {\n\t\t\t\tstateClose( $( this ) );\n\t\t\t});\n\n\t\t\twrap.addClass( 'active' );\n\t\t\twrap.closest( 'tr' ).addClass( 'select-open' );\n\t\t}\n\n\t\t// Visually mark the specified option as \"selected\".\n\t\tfunction selectItem( opt, isInit ) {\n\t\t\tisInit = 'undefined' === typeof isInit ? false : isInit;\n\t\t\tvalue.text( opt.text() );\n\t\t\t$( '.current', items ).removeClass( 'current' );\n\t\t\topt.addClass( 'current' );\n\t\t\tstateClose();\n\n\t\t\t// Also update the select list value.\n\t\t\tjq.val( opt.data( 'value' ) );\n\n\t\t\tif ( ! isInit ) {\n\t\t\t\tjq.trigger( 'change' );\n\t\t\t}\n\n\t\t}\n\n\t\t// Element constructor.\n\t\tfunction init() {\n\t\t\tvar selectID;\n\n\t\t\tsetupElement();\n\t\t\tpopulateList();\n\t\t\thandleSelectionChange();\n\n\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\tvar opt = $( ev.target );\n\t\t\t\tselectItem( opt, false );\n\t\t\t\thandleValue();\n\t\t\t});\n\n\t\t\thandle.on( 'click', stateToggle );\n\t\t\tvalue.on( 'click', stateToggle );\n\t\t\tjq.on( 'focus', stateOpen );\n\n\t\t\t$( document ).click( function onOutsideClick( ev ) {\n\t\t\t\tvar jq = $( ev.target ),\n\t\t\t\t\tselectID;\n\n\t\t\t\tif ( jq.closest( '.select-container' ).length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( jq.is( 'label' ) && jq.attr( 'for' ) ) {\n\t\t\t\t\tselectID = jq.attr( 'for' );\n\n\t\t\t\t\tif ( $( 'select#' + selectID ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstateClose();\n\t\t\t});\n\n\t\t\tselectID = jq.attr( 'id' );\n\n\t\t\tif ( selectID ) {\n\t\t\t\t$( 'label[for=' + selectID + ']' ).on( 'click', stateOpen );\n\t\t\t}\n\n\t\t\tjq.addClass( 'sui-styled' );\n\t\t}\n\n\t\tinit();\n\n\t\treturn this;\n\t};\n\n\t// Convert all select lists to fancy sui Select lists.\n\t$( '.sui-2-1-0 select' ).each( function() {\n\t\tsuiSelect( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiTabs = function( el ) {\n\t\tvar jq = $( el ).closest( '.sui-tabs' );\n\n\t\tif ( ! jq.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Resize the tab-area after short delay.\n\t\tfunction resizeArea() {\n\t\t\twindow.setTimeout( resizeAreaHandler, 20 );\n\t\t}\n\n\t\t// Resize the tab area to match the current tab.\n\t\tfunction resizeAreaHandler() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' ).parent(),\n\t\t\t\tcontent = current.find( '.sui-tab-content' );\n\n\t\t\tjq.height( content.outerHeight() + current.outerHeight() - 6 );\n\t\t}\n\n\t\t// Updates the URL hash to keep tab open during page refresh\n\t\tfunction updateHash() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t}\n\n\t\t// Open the tab that is specified in window URL hash\n\t\tfunction switchTab() {\n\t\t\tvar curTab,\n\t\t\t\troute = window.location.hash.replace( /[^\\w-_]/g, '' );\n\n\t\t\tif ( route ) {\n\t\t\t\tcurTab = jq.find( 'input#' + route );\n\n\t\t\t\tif ( curTab.parent().find( 'label' ).length ) {\n\t\t\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\t\t\tcurTab.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\t\t\tif ( curTab.length && ! curTab.prop( 'checked' ) ) {\n\t\t\t\t\t\tcurTab.prop( 'checked', true );\n\n\t\t\t\t\t\tscrollWindow();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Scroll the window to top of the tab list.\n\t\tfunction scrollWindow() {\n\t\t\tresizeArea();\n\n\t\t\t$( 'html, body' ).scrollTop(\n\t\t\t\tjq.offset().top -\n\t\t\t\tparseInt( $( 'html' ).css( 'paddingTop' ) ) -\n\t\t\t\t20\n\t\t\t);\n\t\t}\n\n\t\t// Constructor.\n\t\tfunction init() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.on( 'click', '.sui-tab > input[type=radio]', updateHash );\n\t\t\t$( window ).on( 'hashchange', switchTab );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t\tswitchTab();\n\t\t}\n\n\t\tinit();\n\n\t\t$( window ).resize( function() {\n\t\t\tresizeArea();\n\t\t});\n\n\t\treturn this;\n\t};\n\n\t// Initialize all tab-areas.\n\t$( '.sui-2-1-0 .sui-tabs' ).each( function() {\n\t\tsuiTabs( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.upload = function() {\n\n\t\t$( '.sui-2-1-0 .sui-upload-group input[type=\"file\"]' ).on( 'change', function( e ) {\n\t\t\tvar file = $( this )[0].files[0],\n\t\t\t\tmessage = $( this ).find( '~ .sui-upload-message' );\n\n\t\t\tif ( file ) {\n\t\t\t\tmessage.text( file.name );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.upload();\n\n}( jQuery ) );\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(3), __webpack_require__(4)))\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar require;var require;/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return A11yDialog;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// admin.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 25ae4da958e7cc0546a0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 0\n// module chunks = 0","import '@wpmudev/shared-ui';\n\nconsole.log('This is the entry point.');\n\n\n\n// WEBPACK FOOTER //\n// ./_src/js/index.js","/*!\n * WPMU DEV Shared UI\n * Copyright 2018 Incsub (https://incsub.com)\n * Licensed under GPL v2 (http://www.gnu.org/licenses/gpl-2.0.html)\n */\n/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (typeof define === 'function' && define.amd) {\n define('A11yDialog', [], function () {\n return A11yDialog;\n });\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n( function( $ ) {\n\n\tvar accordionTable = $( '.sui-2-1-0 .sui-accordion' );\n\n\taccordionTable.on( 'click', '.sui-accordion-item', function() {\n\n\t\tvar getParentItem = $( this ).closest( '.sui-accordion-item' ),\n\t\t\tgetNextAdditionalContentRow = getParentItem.nextUntil( '.sui-accordion-item' );\n\n\t\tgetNextAdditionalContentRow.toggleClass( 'sui-accordion-item--open' );\n\n\t\tif ( getNextAdditionalContentRow.hasClass( 'sui-accordion-item--open' ) ) {\n\t\t\tgetParentItem.addClass( 'sui-accordion-item--open' );\n\t\t} else {\n\t\t\tgetParentItem.removeClass( 'sui-accordion-item--open' );\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-code-snippet:not(.sui-no-copy)' ).each( function( i ) {\n\t\tvar id = 'sui-code-snippet-' + i,\n\t\t\tbutton = '<button class=\"sui-button\" data-clipboard-target=\"#' + id + '\">Copy</button>';\n\n\t\t$( this ).wrap( '<div class=\"sui-code-snippet-wrapper\"></div>' );\n\t\t$( this ).attr( 'id', id ).after( button );\n\t});\n\n\t$( document ).ready( function() {\n\t\tvar btns = $( '[data-clipboard-target]' );\n\t\tvar clipboard = new ClipboardJS( '[data-clipboard-target]' );\n\n\t\tif ( btns.length ) {\n\n\t\t\tclipboard.on( 'success', function( e ) {\n\t\t\t\te.clearSelection();\n\t\t\t\tshowTooltip( e.trigger, 'Copied!' );\n\t\t\t});\n\n\t\t\tbtns.mouseleave( function() {\n\t\t\t\t$( this ).removeClass( 'sui-tooltip' );\n\t\t\t\t$( this ).removeAttr( 'aria-label' );\n\t\t\t\t$( this ).removeAttr( 'data-tooltip' );\n\t\t\t});\n\n\t\t\tfunction showTooltip( e, msg ) {\n\t\t\t\t$( e ).addClass( 'sui-tooltip' );\n\t\t\t\t$( e ).attr( 'aria-label', msg );\n\t\t\t\t$( e ).attr( 'data-tooltip', msg );\n\t\t\t}\n\n\t\t}\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.linkDropdown = function() {\n\n\t\tfunction closeAllDropdowns( $except ) {\n\t\t\tvar $dropdowns = $( '.sui-2-1-0 .sui-dropdown' );\n\n\t\t\tif ( $except ) {\n\t\t\t\t$dropdowns = $dropdowns.not( $except );\n\t\t\t}\n\n\t\t\t$dropdowns.removeClass( 'open' );\n\t\t}\n\n\t\t$( 'body' ).click( function( e ) {\n\t\t\tvar $this = $( e.target ),\n\t\t\t\t$el = $this.closest( '.sui-dropdown' );\n\n\t\t\tif ( 0 == $el.length ) {\n\t\t\t\tcloseAllDropdowns();\n\t\t\t} else if ( $this.is( 'a' ) ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tcloseAllDropdowns( $el );\n\n\t\t\t\t$el.toggleClass( 'open' );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.linkDropdown();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tdocument.addEventListener( 'DOMContentLoaded', function() {\n\t\tvar mainEl = $( '.sui-wrap' );\n\n\t\t// Init the dialog elements.\n\t\t$( '.sui-dialog' ).each( function() {\n\t\t\tnew A11yDialog( this, mainEl );\n\t\t});\n\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t$( '.sui-2-1-0 .sui-notice-top:not(.sui-cant-dismiss)' ).delay( 3000 ).slideUp( 'slow' );\n\n\t$( '.sui-2-1-0 .sui-notice-dismiss' ).click( function( e ) {\n\t\te.preventDefault();\n\n\t\t$( this ).parent( '.sui-notice' ).stop().slideUp( 'slow' );\n\n\t\treturn false;\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.showHidePassword = function() {\n\n\t\t$( '.sui-2-1-0 .sui-password-group' ).each( function() {\n\t\t\tvar $this = $( this ),\n\t\t\t\t$input = $this.find( 'input[type=\"password\"]' ),\n\t\t\t\t$button = $this.find( '.sui-password-toggle' );\n\n\t\t\t$button.on( 'click', function() {\n\t\t\t\tvar $inputType = '',\n\t\t\t\t\t$repInput = '';\n\n\t\t\t\t$( this ).toggleClass( 'is-visible' );\n\n\t\t\t\tif ( $input.hasClass( 'is-visible' ) ) {\n\t\t\t\t\t$input.removeClass( 'is-visible' ).addClass( 'is-hidden' );\n\t\t\t\t\t$inputType = 'password';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Show Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye-hide' ).addClass( 'sui-ico-eye' );\n\t\t\t\t} else {\n\t\t\t\t\t$input.removeClass( 'is-hidden' ).addClass( 'is-visible' );\n\t\t\t\t\t$inputType = 'text';\n\t\t\t\t\t$button.find( '> .sui-screen-reader-text' ).text( 'Hide Password' );\n\t\t\t\t\t$button.find( '> i' ).removeClass( 'sui-ico-eye' ).addClass( 'sui-ico-eye-hide' );\n\t\t\t\t}\n\n\t\t\t\t$repInput = $( '<input type=' + $inputType + ' />' )\n\t\t\t\t\t.attr( 'id', $input.attr( 'id' ) )\n\t\t\t\t\t.attr( 'name', $input.attr( 'name' ) )\n\t\t\t\t\t.attr( 'class', $input.attr( 'class' ) )\n\t\t\t\t\t.val( $input.val() )\n\t\t\t\t\t.insertBefore( $input );\n\n\t\t\t\t$input.remove();\n\t\t\t\t$input = $repInput;\n\t\t\t\t$input.focus();\n\n\t\t\t});\n\n\t\t});\n\n\t};\n\n\tSUI.showHidePassword();\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tloadCircleScore = function( el ) {\n\t\tvar dial = $( el ).find( 'svg circle:last-child' ),\n\t\t\tscore = $( el ).data( 'score' ),\n\t\t\tradius = 42,\n\t\t\tcircumference = 2 * Math.PI * radius,\n\t\t\tdashLength = ( circumference / 100 ) * score,\n\t\t\tgapLength = dashLength * 100 - score,\n\t\t\tsvg =\n\t\t\t\t'<svg viewbox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" />\\n' +\n\t\t\t\t\t'<circle stroke-width=\"16\" cx=\"50\" cy=\"50\" r=\"42\" stroke-dasharray=\"0,' + gapLength + '\" />\\n' +\n\t\t\t\t'</svg>\\n' +\n\t\t\t\t'<span class=\"sui-circle-score-label\">' + score + '</span>\\n';\n\n\t\t// Add svg to score element, add loaded class, & change stroke-dasharray to represent target score/percentage.\n\t\t$( el ).prepend( svg ).addClass( 'loaded' ).find( 'circle:last-child' ).css( 'animation', 'sui' + score + ' 3s forwards' );\n\t};\n\n\t$( '.sui-2-1-0 .sui-circle-score' ).each( function() {\n\t\tloadCircleScore( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiSelect = function( el ) {\n\t\tvar jq = $( el ),\n\t\t\twrap, handle, list, value, items;\n\n\t\tif ( ! jq.is( 'select' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( jq.closest( '.select-container' ).length || jq.data( 'select2' ) || jq.is( '.none-sui' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add the DOM elements to style the select list.\n\t\tfunction setupElement() {\n\t\t\tjq.wrap( '<div class=\"select-container\">' );\n\t\t\tjq.hide();\n\n\t\t\twrap = jq.parent();\n\t\t\thandle = $( '<span class=\"dropdown-handle\"><i class=\"sui-icon-chevron-down\" aria-hidden=\"true\"></i></span>' ).prependTo( wrap );\n\t\t\tlist = $( '<div class=\"select-list-container\"></div>' ).appendTo( wrap );\n\t\t\tvalue = $( '<div class=\"list-value\"> </div>' ).appendTo( list );\n\t\t\titems = $( '<ul class=\"list-results\"></ul>' ).appendTo( list );\n\n\t\t\twrap.addClass( jq.attr( 'class' ) );\n\t\t}\n\n\t\t// When changing selection using JS, you need to trigger a 'sui:change' event\n\t\t// eg: $('select').val('4').trigger('sui:change')\n\t\tfunction handleSelectionChange() {\n\t\t\tjq.on( 'sui:change', function() {\n\n\t\t\t\t// We need to re-populateList to handle dynamic select options added via JS/ajax.\n\t\t\t\tpopulateList();\n\t\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\t\tvar opt = $( ev.target );\n\t\t\t\t\tselectItem( opt, false );\n\t\t\t\t\thandleValue();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Add all the options to the new DOM elements.\n\t\tfunction populateList() {\n\t\t\titems.empty();\n\t\t\tif ( jq.find( 'optgroup' ).length ) {\n\t\t\t\tjq.find( 'optgroup' ).each( function() {\n\t\t\t\t\tvar optgroup = $( this ),\n\t\t\t\t\t\toptGroupItem;\n\t\t\t\t\toptGroupItem = $( '<ul></ul>' ).appendTo( items );\n\t\t\t\t\t$label = $( '<li class=\"optgroup-label\"></li>' ).text( optgroup.prop( 'label' ) );\n\n\t\t\t\t\toptGroupItem.html( $label );\n\t\t\t\t\toptGroupItem.addClass( 'optgroup' );\n\n\t\t\t\t\toptgroup.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\t\titem;\n\t\t\t\t\t\titem = $( '<li></li>' ).appendTo( optGroupItem );\n\t\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\t\tselectItem( item );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tjq.find( 'option' ).each( function onPopulateLoop() {\n\t\t\t\t\tvar opt = $( this ),\n\t\t\t\t\t\titem;\n\t\t\t\t\titem = $( '<li></li>' ).appendTo( items );\n\t\t\t\t\titem.text( opt.text() );\n\t\t\t\t\titem.data( 'value', opt.val() );\n\n\t\t\t\t\tif ( opt.val() == jq.val() ) {\n\t\t\t\t\t\tselectItem( item, true );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\t// Checks the option value for a link.\n\t\tfunction handleValue() {\n\t\t\tvar val = jq[0].value;\n\n\t\t\t// If option is link, navigate to it.\n\t\t\tif ( val.match( '^https?:\\/\\/|#' ) ) {\n\t\t\t\twindow.location.href = val;\n\t\t\t}\n\t\t}\n\n\t\t// Toggle the dropdown state between open/closed.\n\t\tfunction stateToggle() {\n\t\t\tif ( wrap.find( 'select' ).is( ':disabled' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ! wrap.hasClass( 'active' ) ) {\n\t\t\t\tstateOpen();\n\t\t\t} else {\n\t\t\t\tstateClose();\n\t\t\t}\n\t\t}\n\n\t\t// Close the dropdown list.\n\t\tfunction stateClose( item ) {\n\t\t\tif ( ! item ) {\n\t\t\t\titem = wrap;\n\t\t\t}\n\n\t\t\titem.removeClass( 'active' );\n\t\t\titem.closest( 'tr' ).removeClass( 'select-open' );\n\t\t}\n\n\t\t// Open the dropdown list.\n\t\tfunction stateOpen() {\n\t\t\t$( '.select-container.active' ).each( function() {\n\t\t\t\tstateClose( $( this ) );\n\t\t\t});\n\n\t\t\twrap.addClass( 'active' );\n\t\t\twrap.closest( 'tr' ).addClass( 'select-open' );\n\t\t}\n\n\t\t// Visually mark the specified option as \"selected\".\n\t\tfunction selectItem( opt, isInit ) {\n\t\t\tisInit = 'undefined' === typeof isInit ? false : isInit;\n\t\t\tvalue.text( opt.text() );\n\t\t\t$( '.current', items ).removeClass( 'current' );\n\t\t\topt.addClass( 'current' );\n\t\t\tstateClose();\n\n\t\t\t// Also update the select list value.\n\t\t\tjq.val( opt.data( 'value' ) );\n\n\t\t\tif ( ! isInit ) {\n\t\t\t\tjq.trigger( 'change' );\n\t\t\t}\n\n\t\t}\n\n\t\t// Element constructor.\n\t\tfunction init() {\n\t\t\tvar selectID;\n\n\t\t\tsetupElement();\n\t\t\tpopulateList();\n\t\t\thandleSelectionChange();\n\n\t\t\titems.find( 'li' ).not( '.optgroup-label' ).on( 'click', function onItemClick( ev ) {\n\t\t\t\tvar opt = $( ev.target );\n\t\t\t\tselectItem( opt, false );\n\t\t\t\thandleValue();\n\t\t\t});\n\n\t\t\thandle.on( 'click', stateToggle );\n\t\t\tvalue.on( 'click', stateToggle );\n\t\t\tjq.on( 'focus', stateOpen );\n\n\t\t\t$( document ).click( function onOutsideClick( ev ) {\n\t\t\t\tvar jq = $( ev.target ),\n\t\t\t\t\tselectID;\n\n\t\t\t\tif ( jq.closest( '.select-container' ).length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( jq.is( 'label' ) && jq.attr( 'for' ) ) {\n\t\t\t\t\tselectID = jq.attr( 'for' );\n\n\t\t\t\t\tif ( $( 'select#' + selectID ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstateClose();\n\t\t\t});\n\n\t\t\tselectID = jq.attr( 'id' );\n\n\t\t\tif ( selectID ) {\n\t\t\t\t$( 'label[for=' + selectID + ']' ).on( 'click', stateOpen );\n\t\t\t}\n\n\t\t\tjq.addClass( 'sui-styled' );\n\t\t}\n\n\t\tinit();\n\n\t\treturn this;\n\t};\n\n\t// Convert all select lists to fancy sui Select lists.\n\t$( '.sui-2-1-0 select' ).each( function() {\n\t\tsuiSelect( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\tsuiTabs = function( el ) {\n\t\tvar jq = $( el ).closest( '.sui-tabs' );\n\n\t\tif ( ! jq.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Resize the tab-area after short delay.\n\t\tfunction resizeArea() {\n\t\t\twindow.setTimeout( resizeAreaHandler, 20 );\n\t\t}\n\n\t\t// Resize the tab area to match the current tab.\n\t\tfunction resizeAreaHandler() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' ).parent(),\n\t\t\t\tcontent = current.find( '.sui-tab-content' );\n\n\t\t\tjq.height( content.outerHeight() + current.outerHeight() - 6 );\n\t\t}\n\n\t\t// Updates the URL hash to keep tab open during page refresh\n\t\tfunction updateHash() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t}\n\n\t\t// Open the tab that is specified in window URL hash\n\t\tfunction switchTab() {\n\t\t\tvar curTab,\n\t\t\t\troute = window.location.hash.replace( /[^\\w-_]/g, '' );\n\n\t\t\tif ( route ) {\n\t\t\t\tcurTab = jq.find( 'input#' + route );\n\n\t\t\t\tif ( curTab.parent().find( 'label' ).length ) {\n\t\t\t\t\tjq.find( '.sui-tab label.active' ).removeClass( 'active' );\n\t\t\t\t\tcurTab.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\t\t\tif ( curTab.length && ! curTab.prop( 'checked' ) ) {\n\t\t\t\t\t\tcurTab.prop( 'checked', true );\n\n\t\t\t\t\t\tscrollWindow();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Scroll the window to top of the tab list.\n\t\tfunction scrollWindow() {\n\t\t\tresizeArea();\n\n\t\t\t$( 'html, body' ).scrollTop(\n\t\t\t\tjq.offset().top -\n\t\t\t\tparseInt( $( 'html' ).css( 'paddingTop' ) ) -\n\t\t\t\t20\n\t\t\t);\n\t\t}\n\n\t\t// Constructor.\n\t\tfunction init() {\n\t\t\tvar current = jq.find( '.sui-tab > input:checked' );\n\n\t\t\tjq.on( 'click', '.sui-tab > input[type=radio]', updateHash );\n\t\t\t$( window ).on( 'hashchange', switchTab );\n\t\t\tcurrent.parent().find( 'label' ).addClass( 'active' );\n\n\t\t\tresizeArea();\n\t\t\tswitchTab();\n\t\t}\n\n\t\tinit();\n\n\t\t$( window ).resize( function() {\n\t\t\tresizeArea();\n\t\t});\n\n\t\treturn this;\n\t};\n\n\t// Initialize all tab-areas.\n\t$( '.sui-2-1-0 .sui-tabs' ).each( function() {\n\t\tsuiTabs( this );\n\t});\n\n}( jQuery ) );\n\n( function( $ ) {\n\n\t// Enable strict mode.\n\t'use strict';\n\n\t// Define global SUI object if it doesn't exist.\n\tif ( 'object' !== typeof window.SUI ) {\n\t\twindow.SUI = {};\n\t}\n\n\tSUI.upload = function() {\n\n\t\t$( '.sui-2-1-0 .sui-upload-group input[type=\"file\"]' ).on( 'change', function( e ) {\n\t\t\tvar file = $( this )[0].files[0],\n\t\t\t\tmessage = $( this ).find( '~ .sui-upload-message' );\n\n\t\t\tif ( file ) {\n\t\t\t\tmessage.text( file.name );\n\t\t\t}\n\n\t\t});\n\n\t};\n\n\tSUI.upload();\n\n}( jQuery ) );\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@wpmudev/shared-ui/dist/js/shared-ui.js\n// module id = 2\n// module chunks = 0","/**\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ClipboardJS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n\tvar proto = Element.prototype;\n\n\tproto.matches = proto.matchesSelector ||\n\t\t\t\t\tproto.mozMatchesSelector ||\n\t\t\t\t\tproto.msMatchesSelector ||\n\t\t\t\t\tproto.oMatchesSelector ||\n\t\t\t\t\tproto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest(element, selector) {\n\twhile (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n\t\tif (typeof element.matches === 'function' &&\n\t\t\telement.matches(selector)) {\n\t\t\treturn element;\n\t\t}\n\t\telement = element.parentNode;\n\t}\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n\tvar listenerFn = listener.apply(this, arguments);\n\n\telement.addEventListener(type, listenerFn, useCapture);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\telement.removeEventListener(type, listenerFn, useCapture);\n\t\t}\n\t}\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n\treturn function(e) {\n\t\te.delegateTarget = closest(e.target, selector);\n\n\t\tif (e.delegateTarget) {\n\t\t\tcallback.call(element, e);\n\t\t}\n\t}\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n\treturn value !== undefined\n\t\t&& value instanceof HTMLElement\n\t\t&& value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn value !== undefined\n\t\t&& (type === '[object NodeList]' || type === '[object HTMLCollection]')\n\t\t&& ('length' in value)\n\t\t&& (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n\treturn typeof value === 'string'\n\t\t|| value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n\tvar type = Object.prototype.toString.call(value);\n\n\treturn type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n\tif (!target && !type && !callback) {\n\t\tthrow new Error('Missing required arguments');\n\t}\n\n\tif (!is.string(type)) {\n\t\tthrow new TypeError('Second argument must be a String');\n\t}\n\n\tif (!is.fn(callback)) {\n\t\tthrow new TypeError('Third argument must be a Function');\n\t}\n\n\tif (is.node(target)) {\n\t\treturn listenNode(target, type, callback);\n\t}\n\telse if (is.nodeList(target)) {\n\t\treturn listenNodeList(target, type, callback);\n\t}\n\telse if (is.string(target)) {\n\t\treturn listenSelector(target, type, callback);\n\t}\n\telse {\n\t\tthrow new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n\t}\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n\tnode.addEventListener(type, callback);\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tnode.removeEventListener(type, callback);\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\tnode.addEventListener(type, callback);\n\t});\n\n\treturn {\n\t\tdestroy: function() {\n\t\t\tArray.prototype.forEach.call(nodeList, function(node) {\n\t\t\t\tnode.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n\treturn delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n\tvar selectedText;\n\n\tif (element.nodeName === 'SELECT') {\n\t\telement.focus();\n\n\t\tselectedText = element.value;\n\t}\n\telse if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n\t\tvar isReadOnly = element.hasAttribute('readonly');\n\n\t\tif (!isReadOnly) {\n\t\t\telement.setAttribute('readonly', '');\n\t\t}\n\n\t\telement.select();\n\t\telement.setSelectionRange(0, element.value.length);\n\n\t\tif (!isReadOnly) {\n\t\t\telement.removeAttribute('readonly');\n\t\t}\n\n\t\tselectedText = element.value;\n\t}\n\telse {\n\t\tif (element.hasAttribute('contenteditable')) {\n\t\t\telement.focus();\n\t\t}\n\n\t\tvar selection = window.getSelection();\n\t\tvar range = document.createRange();\n\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\n\t\tselectedText = selection.toString();\n\t}\n\n\treturn selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n\t// Keep this empty so it's easier to inherit from\n\t// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n\ton: function (name, callback, ctx) {\n\tvar e = this.e || (this.e = {});\n\n\t(e[name] || (e[name] = [])).push({\n\t\tfn: callback,\n\t\tctx: ctx\n\t});\n\n\treturn this;\n\t},\n\n\tonce: function (name, callback, ctx) {\n\tvar self = this;\n\tfunction listener () {\n\t\tself.off(name, listener);\n\t\tcallback.apply(ctx, arguments);\n\t};\n\n\tlistener._ = callback\n\treturn this.on(name, listener, ctx);\n\t},\n\n\temit: function (name) {\n\tvar data = [].slice.call(arguments, 1);\n\tvar evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n\tvar i = 0;\n\tvar len = evtArr.length;\n\n\tfor (i; i < len; i++) {\n\t\tevtArr[i].fn.apply(evtArr[i].ctx, data);\n\t}\n\n\treturn this;\n\t},\n\n\toff: function (name, callback) {\n\tvar e = this.e || (this.e = {});\n\tvar evts = e[name];\n\tvar liveEvents = [];\n\n\tif (evts && callback) {\n\t\tfor (var i = 0, len = evts.length; i < len; i++) {\n\t\tif (evts[i].fn !== callback && evts[i].fn._ !== callback)\n\t\t\tliveEvents.push(evts[i]);\n\t\t}\n\t}\n\n\t// Remove event from queue to prevent memory leak\n\t// Suggested by https://github.com/lazd\n\t// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n\t(liveEvents.length)\n\t\t? e[name] = liveEvents\n\t\t: delete e[name];\n\n\treturn this;\n\t}\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'select'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('select'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.select);\n\t\tglobal.clipboardAction = mod.exports;\n\t}\n})(this, function (module, _select) {\n\t'use strict';\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tvar ClipboardJSAction = function () {\n\t\t/**\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJSAction(options) {\n\t\t\t_classCallCheck(this, ClipboardJSAction);\n\n\t\t\tthis.resolveOptions(options);\n\t\t\tthis.initSelection();\n\t\t}\n\n\t\t/**\n\t\t * Defines base properties passed from constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJSAction, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = options.action;\n\t\t\t\tthis.container = options.container;\n\t\t\t\tthis.emitter = options.emitter;\n\t\t\t\tthis.target = options.target;\n\t\t\t\tthis.text = options.text;\n\t\t\t\tthis.trigger = options.trigger;\n\n\t\t\t\tthis.selectedText = '';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'initSelection',\n\t\t\tvalue: function initSelection() {\n\t\t\t\tif (this.text) {\n\t\t\t\t\tthis.selectFake();\n\t\t\t\t} else if (this.target) {\n\t\t\t\t\tthis.selectTarget();\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectFake',\n\t\t\tvalue: function selectFake() {\n\t\t\t\tvar _this = this;\n\n\t\t\t\tvar isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n\t\t\t\tthis.removeFake();\n\n\t\t\t\tthis.fakeHandlerCallback = function () {\n\t\t\t\t\treturn _this.removeFake();\n\t\t\t\t};\n\t\t\t\tthis.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n\t\t\t\tthis.fakeElem = document.createElement('textarea');\n\t\t\t\t// Prevent zooming on iOS\n\t\t\t\tthis.fakeElem.style.fontSize = '12pt';\n\t\t\t\t// Reset box model\n\t\t\t\tthis.fakeElem.style.border = '0';\n\t\t\t\tthis.fakeElem.style.padding = '0';\n\t\t\t\tthis.fakeElem.style.margin = '0';\n\t\t\t\t// Move element out of screen horizontally\n\t\t\t\tthis.fakeElem.style.position = 'absolute';\n\t\t\t\tthis.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n\t\t\t\t// Move element to the same position vertically\n\t\t\t\tvar yPosition = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\t\tthis.fakeElem.style.top = yPosition + 'px';\n\n\t\t\t\tthis.fakeElem.setAttribute('readonly', '');\n\t\t\t\tthis.fakeElem.value = this.text;\n\n\t\t\t\tthis.container.appendChild(this.fakeElem);\n\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.fakeElem);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'removeFake',\n\t\t\tvalue: function removeFake() {\n\t\t\t\tif (this.fakeHandler) {\n\t\t\t\t\tthis.container.removeEventListener('click', this.fakeHandlerCallback);\n\t\t\t\t\tthis.fakeHandler = null;\n\t\t\t\t\tthis.fakeHandlerCallback = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.fakeElem) {\n\t\t\t\t\tthis.container.removeChild(this.fakeElem);\n\t\t\t\t\tthis.fakeElem = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'selectTarget',\n\t\t\tvalue: function selectTarget() {\n\t\t\t\tthis.selectedText = (0, _select2.default)(this.target);\n\t\t\t\tthis.copyText();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'copyText',\n\t\t\tvalue: function copyText() {\n\t\t\t\tvar succeeded = void 0;\n\n\t\t\t\ttry {\n\t\t\t\t\tsucceeded = document.execCommand(this.action);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tsucceeded = false;\n\t\t\t\t}\n\n\t\t\t\tthis.handleResult(succeeded);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'handleResult',\n\t\t\tvalue: function handleResult(succeeded) {\n\t\t\t\tthis.emitter.emit(succeeded ? 'success' : 'error', {\n\t\t\t\t\taction: this.action,\n\t\t\t\t\ttext: this.selectedText,\n\t\t\t\t\ttrigger: this.trigger,\n\t\t\t\t\tclearSelection: this.clearSelection.bind(this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clearSelection',\n\t\t\tvalue: function clearSelection() {\n\t\t\t\tif (this.trigger) {\n\t\t\t\t\tthis.trigger.focus();\n\t\t\t\t}\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.removeFake();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'action',\n\t\t\tset: function set() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n\t\t\t\tthis._action = action;\n\n\t\t\t\tif (this._action !== 'copy' && this._action !== 'cut') {\n\t\t\t\t\tthrow new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._action;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'target',\n\t\t\tset: function set(target) {\n\t\t\t\tif (target !== undefined) {\n\t\t\t\t\tif (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n\t\t\t\t\t\tif (this.action === 'copy' && target.hasAttribute('disabled')) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n\t\t\t\t\t\t\tthrow new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Invalid \"target\" value, use a valid Element');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\t\t\t\treturn this._target;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJSAction;\n\t}();\n\n\tmodule.exports = ClipboardJSAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n\t\tglobal.clipboard = mod.exports;\n\t}\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n\t'use strict';\n\n\tvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n\tvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n\tvar _goodListener2 = _interopRequireDefault(_goodListener);\n\n\tfunction _interopRequireDefault(obj) {\n\t\treturn obj && obj.__esModule ? obj : {\n\t\t\tdefault: obj\n\t\t};\n\t}\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t\treturn typeof obj;\n\t} : function (obj) {\n\t\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t\tif (!(instance instanceof Constructor)) {\n\t\t\tthrow new TypeError(\"Cannot call a class as a function\");\n\t\t}\n\t}\n\n\tvar _createClass = function () {\n\t\tfunction defineProperties(target, props) {\n\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\tvar descriptor = props[i];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t\t}\n\t\t}\n\n\t\treturn function (Constructor, protoProps, staticProps) {\n\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t\t\tif (staticProps) defineProperties(Constructor, staticProps);\n\t\t\treturn Constructor;\n\t\t};\n\t}();\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t\tif (!self) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t}\n\n\tfunction _inherits(subClass, superClass) {\n\t\tif (typeof superClass !== \"function\" && superClass !== null) {\n\t\t\tthrow new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t\t}\n\n\t\tsubClass.prototype = Object.create(superClass && superClass.prototype, {\n\t\t\tconstructor: {\n\t\t\t\tvalue: subClass,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\tif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t}\n\n\tvar ClipboardJS = function (_Emitter) {\n\t\t_inherits(ClipboardJS, _Emitter);\n\n\t\t/**\n\t\t * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n\t\t * @param {Object} options\n\t\t */\n\t\tfunction ClipboardJS(trigger, options) {\n\t\t\t_classCallCheck(this, ClipboardJS);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (ClipboardJS.__proto__ || Object.getPrototypeOf(ClipboardJS)).call(this));\n\n\t\t\t_this.resolveOptions(options);\n\t\t\t_this.listenClick(trigger);\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n\t\t * Defines if attributes would be resolved using internal setter functions\n\t\t * or custom functions that were passed in the constructor.\n\t\t * @param {Object} options\n\t\t */\n\n\n\t\t_createClass(ClipboardJS, [{\n\t\t\tkey: 'resolveOptions',\n\t\t\tvalue: function resolveOptions() {\n\t\t\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\t\t\tthis.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n\t\t\t\tthis.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n\t\t\t\tthis.text = typeof options.text === 'function' ? options.text : this.defaultText;\n\t\t\t\tthis.container = _typeof(options.container) === 'object' ? options.container : document.body;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'listenClick',\n\t\t\tvalue: function listenClick(trigger) {\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n\t\t\t\t\treturn _this2.onClick(e);\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'onClick',\n\t\t\tvalue: function onClick(e) {\n\t\t\t\tvar trigger = e.delegateTarget || e.currentTarget;\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\n\t\t\t\tthis.clipboardAction = new _clipboardAction2.default({\n\t\t\t\t\taction: this.action(trigger),\n\t\t\t\t\ttarget: this.target(trigger),\n\t\t\t\t\ttext: this.text(trigger),\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\ttrigger: trigger,\n\t\t\t\t\temitter: this\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultAction',\n\t\t\tvalue: function defaultAction(trigger) {\n\t\t\t\treturn getAttributeValue('action', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultTarget',\n\t\t\tvalue: function defaultTarget(trigger) {\n\t\t\t\tvar selector = getAttributeValue('target', trigger);\n\n\t\t\t\tif (selector) {\n\t\t\t\t\treturn document.querySelector(selector);\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'defaultText',\n\t\t\tvalue: function defaultText(trigger) {\n\t\t\t\treturn getAttributeValue('text', trigger);\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'destroy',\n\t\t\tvalue: function destroy() {\n\t\t\t\tthis.listener.destroy();\n\n\t\t\t\tif (this.clipboardAction) {\n\t\t\t\t\tthis.clipboardAction.destroy();\n\t\t\t\t\tthis.clipboardAction = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}], [{\n\t\t\tkey: 'isSupported',\n\t\t\tvalue: function isSupported() {\n\t\t\t\tvar action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n\t\t\t\tvar actions = typeof action === 'string' ? [action] : action;\n\t\t\t\tvar support = !!document.queryCommandSupported;\n\n\t\t\t\tactions.forEach(function (action) {\n\t\t\t\t\tsupport = support && !!document.queryCommandSupported(action);\n\t\t\t\t});\n\n\t\t\t\treturn support;\n\t\t\t}\n\t\t}]);\n\n\t\treturn ClipboardJS;\n\t}(_tinyEmitter2.default);\n\n\t/**\n\t * Helper function to retrieve attribute value.\n\t * @param {String} suffix\n\t * @param {Element} element\n\t */\n\tfunction getAttributeValue(suffix, element) {\n\t\tvar attribute = 'data-clipboard-' + suffix;\n\n\t\tif (!element.hasAttribute(attribute)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn element.getAttribute(attribute);\n\t}\n\n\tmodule.exports = ClipboardJS;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@wpmudev/shared-ui/js/clipboard.js\n// module id = 3\n// module chunks = 0","/* global NodeList, Element, define */\n\n(function (global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog (node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node on the instance\n this.node = node;\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function (targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets = this._targets || collect(targets) || getSiblings(this.node);\n\n // Make sure the dialog element is disabled on load, and that the `shown`\n // property is synced with its value\n this.node.setAttribute('aria-hidden', true);\n this.shown = false;\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.node.id + '\"]');\n this._openers.forEach(function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this));\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.node)\n .concat($$('[data-a11y-dialog-hide=\"' + this.node.id + '\"]'));\n this._closers.forEach(function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n var content = this.node.getElementsByClassName('sui-dialog-content');\n content[0].className = 'sui-dialog-content sui-bounce-in';\n overlay[0].className = 'sui-dialog-overlay sui-fade-in';\n\n this.shown = true;\n this.node.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`; in case they already have this attribute, keep a\n // reference of their original value to be able to restore it later\n this._targets.forEach(function (target) {\n var original = target.getAttribute('aria-hidden');\n\n if (original) {\n target.setAttribute('data-a11y-dialog-original', original);\n }\n\n target.setAttribute('aria-hidden', 'true');\n });\n\n // Keep a reference to the currently focused element to be able to restore\n // it later, then set the focus to the first focusable child of the dialog\n // element\n focusedBeforeDialog = document.activeElement;\n setFocusToFirstItem(this.node);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n\n var overlay = this.node.getElementsByClassName('sui-dialog-overlay');\n\n var content = this.node.getElementsByClassName('sui-dialog-content');\n\n content[0].className = 'sui-dialog-content sui-bounce-out';\n\n overlay[0].className = 'sui-dialog-overlay sui-fade-out';\n\n this.shown = false;\n // This has been set so there is enough time for the animation to show\n var timeout_node = this.node;\n setTimeout(function () {\n\t\ttimeout_node.setAttribute('aria-hidden', 'true');\n\t}, 300);\n\n // Iterate over the targets to enable them by remove their `aria-hidden`\n // attribute or resetting them to their initial value\n this._targets.forEach(function (target) {\n var original = target.getAttribute('data-a11y-dialog-original');\n\n\n if (original) {\n target.setAttribute('aria-hidden', original);\n target.removeAttribute('data-a11y-dialog-original');\n } else {\n target.removeAttribute('aria-hidden');\n }\n });\n\n // If their was a focused element before the dialog was opened, restore the\n // focus back to it\n if (focusedBeforeDialog) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this));\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this));\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(function (listener) {\n listener(this.node, event);\n }.bind(this));\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog\n if (this.shown && event.which === ESCAPE_KEY) {\n event.preventDefault();\n this.hide();\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.node, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.node.contains(event.target)) {\n setFocusToFirstItem(this.node);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array<Element>}\n */\n function toArray (collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array<Element>}\n */\n function $$ (selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array<Element>}\n */\n function collect (target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first focusable child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem (node) {\n var focusableChildren = getFocusableChildren(node);\n\n if (focusableChildren.length) {\n focusableChildren[0].focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getFocusableChildren (node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function (child) {\n return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length);\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey (node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (!event.shiftKey && focusedItemIndex === focusableChildren.length - 1) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array<Element>}\n */\n function getSiblings (node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function (node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (typeof define === 'function' && define.amd) {\n define('A11yDialog', [], function () {\n return A11yDialog;\n });\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n}(typeof global !== 'undefined' ? global : window));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@wpmudev/shared-ui/js/a11y-dialog.js\n// module id = 4\n// module chunks = 0"],"sourceRoot":""}
|
assets/shared-ui/README.md
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
# README #
|
2 |
-
|
3 |
-
|
4 |
-
## Modification
|
5 |
-
|
6 |
-
Files `wdev-ui.css` and `wdev-ui.js` contain the new WPMUDEV-style UI definitions and can be updated if needed.
|
7 |
-
|
8 |
-
**Tip:** Those files are loaded after the notice-files below to ensure that notice definitions can be overwritten by wdev-ui files.
|
9 |
-
|
10 |
-
|
11 |
-
## Do not edit
|
12 |
-
|
13 |
-
Do not modify the files `notice.css` and `notice.js` - those files are also used by a lot of other plugins. If they are changed they also need to be modified in submodule `incsub/free-dashboard` and all related plugins need to be updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/shared-ui/contributors.txt
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
Philipp Stracker
|
|
assets/shared-ui/wdev-ui.css
CHANGED
@@ -45,7 +45,7 @@
|
|
45 |
}
|
46 |
.wpmud #wpbody {
|
47 |
background: #F4F4F4;
|
48 |
-
|
49 |
}
|
50 |
.wpmud #wpbody * {
|
51 |
box-sizing: border-box;
|
@@ -69,9 +69,9 @@
|
|
69 |
display: block;
|
70 |
margin: 0.5em auto;
|
71 |
padding: 0;
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
}
|
76 |
.wpmud h1,
|
77 |
.wpmud h2,
|
@@ -355,8 +355,8 @@
|
|
355 |
}
|
356 |
.wpmud .box-footer {
|
357 |
text-align: center;
|
358 |
-
|
359 |
-
|
360 |
}
|
361 |
|
362 |
/* ****************************************************************************
|
@@ -994,10 +994,10 @@
|
|
994 |
top: 0;
|
995 |
padding: 0 24px;
|
996 |
line-height: 60px;
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
}
|
1002 |
.wpmud .dev-overlay .title .close:hover {
|
1003 |
color: #777771;
|
@@ -1298,12 +1298,12 @@
|
|
1298 |
.wpmud .notice-dismiss:hover,
|
1299 |
.wpmud .notice-dismiss:focus,
|
1300 |
.wpmud .notice-dismiss:active {
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
}
|
1308 |
|
1309 |
/* ****************************************************************************
|
@@ -1669,12 +1669,12 @@
|
|
1669 |
}
|
1670 |
.wpmud .select-list-container .list-results {
|
1671 |
position: absolute;
|
1672 |
-
|
1673 |
-
|
1674 |
-
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
background: #FFF;
|
1679 |
border: 1px solid #ddd;
|
1680 |
margin-left: -1px;
|
@@ -1810,14 +1810,14 @@
|
|
1810 |
opacity: 0.8;
|
1811 |
|
1812 |
font-family: 'WPMU-DEV-App-Icons';
|
1813 |
-
|
1814 |
-
|
1815 |
-
|
1816 |
-
|
1817 |
-
|
1818 |
-
|
1819 |
-
|
1820 |
-
|
1821 |
}
|
1822 |
.wpmud .listing li.circle:before {
|
1823 |
content: "\68";
|
@@ -2186,48 +2186,48 @@
|
|
2186 |
vertical-align: middle;
|
2187 |
height: 30px;
|
2188 |
line-height: 24px;
|
2189 |
-
|
2190 |
-
|
2191 |
-
|
2192 |
}
|
2193 |
.wpmud .count.reply:before {
|
2194 |
-
|
2195 |
-
|
2196 |
-
|
2197 |
-
|
2198 |
-
|
2199 |
-
|
2200 |
-
|
2201 |
-
|
2202 |
-
|
2203 |
}
|
2204 |
.wpmud .count.reply:after {
|
2205 |
-
|
2206 |
-
|
2207 |
-
|
2208 |
-
|
2209 |
-
|
2210 |
-
|
2211 |
-
|
2212 |
-
|
2213 |
-
|
2214 |
}
|
2215 |
.wpmud .count.reply.mirror:before {
|
2216 |
-
|
2217 |
-
|
2218 |
}
|
2219 |
.wpmud .count.reply.mirror:after {
|
2220 |
-
|
2221 |
-
|
2222 |
}
|
2223 |
.wpmud .count.notification {
|
2224 |
-
|
2225 |
-
|
2226 |
-
|
2227 |
}
|
2228 |
.wpmud .count.notification:before,
|
2229 |
.wpmud .count.notification:after {
|
2230 |
-
|
2231 |
}
|
2232 |
|
2233 |
/* ****************************************************************************
|
@@ -2293,15 +2293,15 @@
|
|
2293 |
* 23. FONTAWESOME
|
2294 |
*/
|
2295 |
@font-face {
|
2296 |
-
|
2297 |
-
|
2298 |
-
|
2299 |
-
|
2300 |
-
|
2301 |
-
|
2302 |
-
|
2303 |
-
|
2304 |
-
|
2305 |
}
|
2306 |
.wdv-icon:before{font-family:FontAwesomeWdv;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit}a .wdv-icon{display:inline-block;text-decoration:inherit}.wdv-icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn .wdv-icon{line-height:.9em}li .wdv-icon, .action_links .wdv-icon, .wdv-icon.wdv-icon-fw{display:inline-block;width:1.25em;text-align:center}li .wdv-icon-large.wdv-icon,li .wdv-icon-large.wdv-icon{width:1.875em}li.wdv-icon{margin-left:0;list-style-type:none}li.wdv-icon:before{text-indent:-2em;text-align:center}li.wdv-icon.wdv-icon-large:before{text-indent:-1.3333333333333333em}.wdv-icon-glass:before{content:"\f000"}.wdv-icon-music:before{content:"\f001"}.wdv-icon-search:before{content:"\f002"}.wdv-icon-envelope:before{content:"\f003"}.wdv-icon-heart:before{content:"\f004"}.wdv-icon-star:before{content:"\f005"}.wdv-icon-star-empty:before{content:"\f006"}.wdv-icon-user:before{content:"\f007"}.wdv-icon-film:before{content:"\f008"}.wdv-icon-th-large:before{content:"\f009"}.wdv-icon-th:before{content:"\f00a"}.wdv-icon-th-list:before{content:"\f00b"}.wdv-icon-ok:before{content:"\f00c"}.wdv-icon-remove:before{content:"\f00d"}.wdv-icon-zoom-in:before{content:"\f00e"}.wdv-icon-zoom-out:before{content:"\f010"}.wdv-icon-off:before{content:"\f011"}.wdv-icon-signal:before{content:"\f012"}.wdv-icon-cog:before{content:"\f013"}.wdv-icon-trash:before{content:"\f014"}.wdv-icon-home:before{content:"\f015"}.wdv-icon-file:before{content:"\f016"}.wdv-icon-time:before{content:"\f017"}.wdv-icon-road:before{content:"\f018"}.wdv-icon-download-alt:before{content:"\f019"}.wdv-icon-download:before{content:"\f01a"}.wdv-icon-upload:before{content:"\f01b"}.wdv-icon-inbox:before{content:"\f01c"}.wdv-icon-play-circle:before{content:"\f01d"}.wdv-icon-repeat:before{content:"\f01e"}.wdv-icon-refresh:before{content:"\f021"}.wdv-icon-list-alt:before{content:"\f022"}.wdv-icon-lock:before{content:"\f023"}.wdv-icon-flag:before{content:"\f024"}.wdv-icon-headphones:before{content:"\f025"}.wdv-icon-volume-off:before{content:"\f026"}.wdv-icon-volume-down:before{content:"\f027"}.wdv-icon-volume-up:before{content:"\f028"}.wdv-icon-qrcode:before{content:"\f029"}.wdv-icon-barcode:before{content:"\f02a"}.wdv-icon-tag:before{content:"\f02b"}.wdv-icon-tags:before{content:"\f02c"}.wdv-icon-book:before{content:"\f02d"}.wdv-icon-bookmark:before{content:"\f02e"}.wdv-icon-print:before{content:"\f02f"}.wdv-icon-camera:before{content:"\f030"}.wdv-icon-font:before{content:"\f031"}.wdv-icon-bold:before{content:"\f032"}.wdv-icon-italic:before{content:"\f033"}.wdv-icon-text-height:before{content:"\f034"}.wdv-icon-text-width:before{content:"\f035"}.wdv-icon-align-left:before{content:"\f036"}.wdv-icon-align-center:before{content:"\f037"}.wdv-icon-align-right:before{content:"\f038"}.wdv-icon-align-justify:before{content:"\f039"}.wdv-icon-list:before{content:"\f03a"}.wdv-icon-indent-left:before{content:"\f03b"}.wdv-icon-indent-right:before{content:"\f03c"}.wdv-icon-facetime-video:before{content:"\f03d"}.wdv-icon-picture:before{content:"\f03e"}.wdv-icon-pencil:before{content:"\f040"}.wdv-icon-map-marker:before{content:"\f041"}.wdv-icon-adjust:before{content:"\f042"}.wdv-icon-tint:before{content:"\f043"}.wdv-icon-edit:before{content:"\f044"}.wdv-icon-share:before{content:"\f045"}.wdv-icon-check:before{content:"\f046"}.wdv-icon-move:before{content:"\f047"}.wdv-icon-step-backward:before{content:"\f048"}.wdv-icon-fast-backward:before{content:"\f049"}.wdv-icon-backward:before{content:"\f04a"}.wdv-icon-play:before{content:"\f04b"}.wdv-icon-pause:before{content:"\f04c"}.wdv-icon-stop:before{content:"\f04d"}.wdv-icon-forward:before{content:"\f04e"}.wdv-icon-fast-forward:before{content:"\f050"}.wdv-icon-step-forward:before{content:"\f051"}.wdv-icon-eject:before{content:"\f052"}.wdv-icon-chevron-left:before{content:"\f053"}.wdv-icon-chevron-right:before{content:"\f054"}.wdv-icon-plus-sign:before{content:"\f055"}.wdv-icon-minus-sign:before{content:"\f056"}.wdv-icon-remove-sign:before{content:"\f057"}.wdv-icon-ok-sign:before{content:"\f058"}.wdv-icon-question-sign:before{content:"\f059"}.wdv-icon-info-sign:before{content:"\f05a"}.wdv-icon-screenshot:before{content:"\f05b"}.wdv-icon-remove-circle:before{content:"\f05c"}.wdv-icon-ok-circle:before{content:"\f05d"}.wdv-icon-ban-circle:before{content:"\f05e"}.wdv-icon-arrow-left:before{content:"\f060"}.wdv-icon-arrow-right:before{content:"\f061"}.wdv-icon-arrow-up:before{content:"\f062"}.wdv-icon-arrow-down:before{content:"\f063"}.wdv-icon-share-alt:before{content:"\f064"}.wdv-icon-resize-full:before{content:"\f065"}.wdv-icon-resize-small:before{content:"\f066"}.wdv-icon-plus:before{content:"\f067"}.wdv-icon-minus:before{content:"\f068"}.wdv-icon-asterisk:before{content:"\f069"}.wdv-icon-exclamation-sign:before{content:"\f06a"}.wdv-icon-gift:before{content:"\f06b"}.wdv-icon-leaf:before{content:"\f06c"}.wdv-icon-fire:before{content:"\f06d"}.wdv-icon-eye-open:before{content:"\f06e"}.wdv-icon-eye-close:before{content:"\f070"}.wdv-icon-warning-sign:before{content:"\f071"}.wdv-icon-plane:before{content:"\f072"}.wdv-icon-calendar:before{content:"\f073"}.wdv-icon-random:before{content:"\f074"}.wdv-icon-comment:before{content:"\f075"}.wdv-icon-magnet:before{content:"\f076"}.wdv-icon-chevron-up:before{content:"\f077"}.wdv-icon-chevron-down:before{content:"\f078"}.wdv-icon-retweet:before{content:"\f079"}.wdv-icon-shopping-cart:before{content:"\f07a"}.wdv-icon-folder-close:before{content:"\f07b"}.wdv-icon-folder-open:before{content:"\f07c"}.wdv-icon-resize-vertical:before{content:"\f07d"}.wdv-icon-resize-horizontal:before{content:"\f07e"}.wdv-icon-bar-chart:before{content:"\f080"}.wdv-icon-twitter-sign:before{content:"\f081"}.wdv-icon-facebook-sign:before{content:"\f082"}.wdv-icon-camera-retro:before{content:"\f083"}.wdv-icon-key:before{content:"\f084"}.wdv-icon-cogs:before{content:"\f085"}.wdv-icon-comments:before{content:"\f086"}.wdv-icon-thumbs-up:before{content:"\f087"}.wdv-icon-thumbs-down:before{content:"\f088"}.wdv-icon-star-half:before{content:"\f089"}.wdv-icon-heart-empty:before{content:"\f08a"}.wdv-icon-signout:before{content:"\f08b"}.wdv-icon-linkedin-sign:before{content:"\f08c"}.wdv-icon-pushpin:before{content:"\f08d"}.wdv-icon-external-link:before{content:"\f08e"}.wdv-icon-signin:before{content:"\f090"}.wdv-icon-trophy:before{content:"\f091"}.wdv-icon-github-sign:before{content:"\f092"}.wdv-icon-upload-alt:before{content:"\f093"}.wdv-icon-lemon:before{content:"\f094"}.wdv-icon-phone:before{content:"\f095"}.wdv-icon-check-empty:before{content:"\f096"}.wdv-icon-bookmark-empty:before{content:"\f097"}.wdv-icon-phone-sign:before{content:"\f098"}.wdv-icon-twitter:before{content:"\f099"}.wdv-icon-facebook:before{content:"\f09a"}.wdv-icon-github:before{content:"\f09b"}.wdv-icon-unlock:before{content:"\f09c"}.wdv-icon-credit-card:before{content:"\f09d"}.wdv-icon-rss:before{content:"\f09e"}.wdv-icon-hdd:before{content:"\f0a0"}.wdv-icon-bullhorn:before{content:"\f0a1"}.wdv-icon-bell:before{content:"\f0a2"}.wdv-icon-certificate:before{content:"\f0a3"}.wdv-icon-hand-right:before{content:"\f0a4"}.wdv-icon-hand-left:before{content:"\f0a5"}.wdv-icon-hand-up:before{content:"\f0a6"}.wdv-icon-hand-down:before{content:"\f0a7"}.wdv-icon-circle-arrow-left:before{content:"\f0a8"}.wdv-icon-circle-arrow-right:before{content:"\f0a9"}.wdv-icon-circle-arrow-up:before{content:"\f0aa"}.wdv-icon-circle-arrow-down:before{content:"\f0ab"}.wdv-icon-globe:before{content:"\f0ac"}.wdv-icon-wrench:before{content:"\f0ad"}.wdv-icon-tasks:before{content:"\f0ae"}.wdv-icon-filter:before{content:"\f0b0"}.wdv-icon-briefcase:before{content:"\f0b1"}.wdv-icon-fullscreen:before{content:"\f0b2"}.wdv-icon-group:before{content:"\f0c0"}.wdv-icon-link:before{content:"\f0c1"}.wdv-icon-cloud:before{content:"\f0c2"}.wdv-icon-beaker:before{content:"\f0c3"}.wdv-icon-cut:before{content:"\f0c4"}.wdv-icon-copy:before{content:"\f0c5"}.wdv-icon-paper-clip:before{content:"\f0c6"}.wdv-icon-save:before{content:"\f0c7"}.wdv-icon-sign-blank:before{content:"\f0c8"}.wdv-icon-reorder:before{content:"\f0c9"}.wdv-icon-list-ul:before{content:"\f0ca"}.wdv-icon-list-ol:before{content:"\f0cb"}.wdv-icon-strikethrough:before{content:"\f0cc"}.wdv-icon-underline:before{content:"\f0cd"}.wdv-icon-table:before{content:"\f0ce"}.wdv-icon-magic:before{content:"\f0d0"}.wdv-icon-truck:before{content:"\f0d1"}.wdv-icon-pinterest:before{content:"\f0d2"}.wdv-icon-pinterest-sign:before{content:"\f0d3"}.wdv-icon-google-plus-sign:before{content:"\f0d4"}.wdv-icon-google-plus:before{content:"\f0d5"}.wdv-icon-money:before{content:"\f0d6"}.wdv-icon-caret-down:before{content:"\f0d7"}.wdv-icon-caret-up:before{content:"\f0d8"}.wdv-icon-caret-left:before{content:"\f0d9"}.wdv-icon-caret-right:before{content:"\f0da"}.wdv-icon-columns:before{content:"\f0db"}.wdv-icon-sort:before{content:"\f0dc"}.wdv-icon-sort-down:before{content:"\f0dd"}.wdv-icon-sort-up:before{content:"\f0de"}.wdv-icon-envelope-alt:before{content:"\f0e0"}.wdv-icon-linkedin:before{content:"\f0e1"}.wdv-icon-undo:before{content:"\f0e2"}.wdv-icon-legal:before{content:"\f0e3"}.wdv-icon-dashboard:before{content:"\f0e4"}.wdv-icon-comment-alt:before{content:"\f0e5"}.wdv-icon-comments-alt:before{content:"\f0e6"}.wdv-icon-bolt:before{content:"\f0e7"}.wdv-icon-sitemap:before{content:"\f0e8"}.wdv-icon-umbrella:before{content:"\f0e9"}.wdv-icon-paste:before{content:"\f0ea"}.wdv-icon-user-md:before{content:"\f200"}
|
2307 |
|
@@ -2345,869 +2345,188 @@
|
|
2345 |
-webkit-font-smoothing: antialiased;
|
2346 |
-moz-osx-font-smoothing: grayscale;
|
2347 |
}
|
2348 |
-
.icon-
|
2349 |
-
content: "\
|
2350 |
-
color: #888;
|
2351 |
-
}
|
2352 |
-
.icon-fi-jobs-pros-search:before {
|
2353 |
-
content: "\e90e";
|
2354 |
-
color: #888;
|
2355 |
-
}
|
2356 |
-
.icon-fi-security-thumb-print:before {
|
2357 |
-
content: "\e90f";
|
2358 |
-
color: #888;
|
2359 |
-
}
|
2360 |
-
.icon-fi-IP:before {
|
2361 |
-
content: "\e910";
|
2362 |
-
color: #888;
|
2363 |
-
}
|
2364 |
-
.icon-fi-timed-countdown:before {
|
2365 |
-
content: "\e911";
|
2366 |
-
color: #888;
|
2367 |
-
}
|
2368 |
-
.icon-fi-2factor-authentication-security:before {
|
2369 |
-
content: "\e912";
|
2370 |
-
color: #888;
|
2371 |
-
}
|
2372 |
-
.icon-fi-buddypress:before {
|
2373 |
-
content: "\e90c";
|
2374 |
-
color: #888;
|
2375 |
-
}
|
2376 |
-
.icon-fi-plug-disconnected:before {
|
2377 |
-
content: "\e90a";
|
2378 |
-
color: #888;
|
2379 |
-
}
|
2380 |
-
.icon-fi-plug-connected:before {
|
2381 |
-
content: "\e90b";
|
2382 |
-
color: #888;
|
2383 |
-
}
|
2384 |
-
.icon-fi-open-new-window:before {
|
2385 |
-
content: "\e909";
|
2386 |
-
color: #888;
|
2387 |
-
}
|
2388 |
-
.icon-fi-icon-shipper-anchor:before {
|
2389 |
-
content: "\e906";
|
2390 |
-
color: #888;
|
2391 |
-
}
|
2392 |
-
.icon-fi-icon-forminator2:before {
|
2393 |
-
content: "\e907";
|
2394 |
-
color: #888;
|
2395 |
-
}
|
2396 |
-
.icon-fi-icon-forminator1:before {
|
2397 |
-
content: "\e908";
|
2398 |
-
color: #888;
|
2399 |
-
}
|
2400 |
-
.icon-fi-cloud-migration:before {
|
2401 |
-
content: "\e905";
|
2402 |
-
color: #888;
|
2403 |
-
}
|
2404 |
-
.icon-fi-icon-performance:before {
|
2405 |
-
content: "\e903";
|
2406 |
-
color: #888;
|
2407 |
-
}
|
2408 |
-
.icon-fi-power-on-off:before {
|
2409 |
-
content: "\e904";
|
2410 |
-
color: #888;
|
2411 |
-
}
|
2412 |
-
.icon-fi-update-arrow:before {
|
2413 |
-
content: "\e902";
|
2414 |
-
color: #888;
|
2415 |
-
}
|
2416 |
-
.icon-fi-dashboard-settings:before {
|
2417 |
-
content: "\e901";
|
2418 |
-
color: #888;
|
2419 |
-
}
|
2420 |
-
.icon-fi-icon-wpmu-logo-line:before {
|
2421 |
-
content: "\203a";
|
2422 |
-
color: #888;
|
2423 |
-
}
|
2424 |
-
.icon-fi-icon-wpmu-logo-solid:before {
|
2425 |
-
content: "\2039";
|
2426 |
-
color: #888;
|
2427 |
-
}
|
2428 |
-
.icon-fi-star-line:before {
|
2429 |
-
content: "\cf";
|
2430 |
-
color: #888;
|
2431 |
-
}
|
2432 |
-
.icon-fi-notification-count:before {
|
2433 |
-
content: "\e900";
|
2434 |
-
color: #888;
|
2435 |
-
}
|
2436 |
-
.icon-fi-24-hour-support:before {
|
2437 |
-
content: "\c1";
|
2438 |
-
color: #888;
|
2439 |
-
}
|
2440 |
-
.icon-fi-speed-optimize:before {
|
2441 |
-
content: "\f8";
|
2442 |
-
color: #888;
|
2443 |
-
}
|
2444 |
-
.icon-fi-cloudflare:before {
|
2445 |
-
content: "\d0";
|
2446 |
-
color: #888;
|
2447 |
-
}
|
2448 |
-
.icon-fi-alert:before {
|
2449 |
-
content: "\58";
|
2450 |
-
color: #888;
|
2451 |
-
}
|
2452 |
-
.icon-fi-align-center:before {
|
2453 |
-
content: "\5e";
|
2454 |
-
color: #888;
|
2455 |
-
}
|
2456 |
-
.icon-fi-align-justify:before {
|
2457 |
-
content: "\23";
|
2458 |
-
color: #888;
|
2459 |
-
}
|
2460 |
-
.icon-fi-align-left:before {
|
2461 |
-
content: "\25";
|
2462 |
-
color: #888;
|
2463 |
-
}
|
2464 |
-
.icon-fi-align-right:before {
|
2465 |
-
content: "\26";
|
2466 |
-
color: #888;
|
2467 |
-
}
|
2468 |
-
.icon-fi-annotate:before {
|
2469 |
-
content: "\b4";
|
2470 |
-
color: #888;
|
2471 |
-
}
|
2472 |
-
.icon-fi-arrow-up:before {
|
2473 |
-
content: "\d4";
|
2474 |
-
color: #888;
|
2475 |
-
}
|
2476 |
-
.icon-fi-arrow-right:before {
|
2477 |
-
content: "\af";
|
2478 |
-
color: #888;
|
2479 |
-
}
|
2480 |
-
.icon-fi-arrow-down:before {
|
2481 |
-
content: "\c2";
|
2482 |
-
color: #888;
|
2483 |
-
}
|
2484 |
-
.icon-fi-arrow-left:before {
|
2485 |
-
content: "\f8ff";
|
2486 |
-
color: #888;
|
2487 |
-
}
|
2488 |
-
.icon-fi-more:before {
|
2489 |
-
content: "\2026";
|
2490 |
-
color: #888;
|
2491 |
}
|
2492 |
-
.icon-
|
2493 |
-
content: "\
|
2494 |
-
color: #888;
|
2495 |
}
|
2496 |
-
.icon-
|
2497 |
content: "\3d";
|
2498 |
-
color: #888;
|
2499 |
-
}
|
2500 |
-
.icon-fi-arrow-up-carats:before {
|
2501 |
-
content: "\2dd";
|
2502 |
-
color: #888;
|
2503 |
-
}
|
2504 |
-
.icon-fi-arrow-down-carats:before {
|
2505 |
-
content: "\131";
|
2506 |
-
color: #888;
|
2507 |
}
|
2508 |
-
.icon-
|
2509 |
-
content: "\d3";
|
2510 |
-
color: #888;
|
2511 |
-
}
|
2512 |
-
.icon-fi-arrow-right-carats:before {
|
2513 |
-
content: "\2dc";
|
2514 |
-
color: #888;
|
2515 |
-
}
|
2516 |
-
.icon-fi-arrows-compress:before {
|
2517 |
-
content: "\2265";
|
2518 |
-
color: #888;
|
2519 |
-
}
|
2520 |
-
.icon-fi-arrows-expand:before {
|
2521 |
-
content: "\ac";
|
2522 |
-
color: #888;
|
2523 |
-
}
|
2524 |
-
.icon-fi-arrows-in:before {
|
2525 |
-
content: "\2264";
|
2526 |
-
color: #888;
|
2527 |
-
}
|
2528 |
-
.icon-fi-arrows-out:before {
|
2529 |
-
content: "\2da";
|
2530 |
-
color: #888;
|
2531 |
-
}
|
2532 |
-
.icon-fi-check:before {
|
2533 |
-
content: "\28";
|
2534 |
-
color: #888;
|
2535 |
-
}
|
2536 |
-
.icon-fi-close:before {
|
2537 |
-
content: "\29";
|
2538 |
-
color: #888;
|
2539 |
-
}
|
2540 |
-
.icon-fi-at-sign:before {
|
2541 |
-
content: "\40";
|
2542 |
-
color: #888;
|
2543 |
-
}
|
2544 |
-
.icon-fi-calendar:before {
|
2545 |
-
content: "\220f";
|
2546 |
-
color: #888;
|
2547 |
-
}
|
2548 |
-
.icon-fi-camera:before {
|
2549 |
-
content: "\d8";
|
2550 |
-
color: #888;
|
2551 |
-
}
|
2552 |
-
.icon-fi-clipboard-notes:before {
|
2553 |
-
content: "\bf";
|
2554 |
-
color: #888;
|
2555 |
-
}
|
2556 |
-
.icon-fi-clock:before {
|
2557 |
-
content: "\2c";
|
2558 |
-
color: #888;
|
2559 |
-
}
|
2560 |
-
.icon-fi-cloud:before {
|
2561 |
-
content: "\2122";
|
2562 |
-
color: #888;
|
2563 |
-
}
|
2564 |
-
.icon-fi-download-cloud:before {
|
2565 |
-
content: "\a3";
|
2566 |
-
color: #888;
|
2567 |
-
}
|
2568 |
-
.icon-fi-upload-cloud:before {
|
2569 |
-
content: "\a2";
|
2570 |
-
color: #888;
|
2571 |
-
}
|
2572 |
-
.icon-fi-comment:before {
|
2573 |
-
content: "\a7";
|
2574 |
-
color: #888;
|
2575 |
-
}
|
2576 |
-
.icon-fi-comments:before {
|
2577 |
-
content: "\b6";
|
2578 |
-
color: #888;
|
2579 |
-
}
|
2580 |
-
.icon-fi-comment-3:before {
|
2581 |
-
content: "\aa";
|
2582 |
-
color: #888;
|
2583 |
-
}
|
2584 |
-
.icon-fi-compass:before {
|
2585 |
-
content: "\2c6";
|
2586 |
-
color: #888;
|
2587 |
-
}
|
2588 |
-
.icon-fi-credit-card:before {
|
2589 |
-
content: "\63";
|
2590 |
-
color: #888;
|
2591 |
-
}
|
2592 |
-
.icon-fi-crop:before {
|
2593 |
-
content: "\43";
|
2594 |
-
color: #888;
|
2595 |
-
}
|
2596 |
-
.icon-fi-crown:before {
|
2597 |
-
content: "\a1";
|
2598 |
-
color: #888;
|
2599 |
-
}
|
2600 |
-
.icon-fi-italic:before {
|
2601 |
-
content: "\7b";
|
2602 |
-
color: #888;
|
2603 |
-
}
|
2604 |
-
.icon-fi-bold:before {
|
2605 |
content: "\42";
|
2606 |
-
color: #888;
|
2607 |
-
}
|
2608 |
-
.icon-fi-underline:before {
|
2609 |
-
content: "\55";
|
2610 |
-
color: #888;
|
2611 |
-
}
|
2612 |
-
.icon-fi-text-color:before {
|
2613 |
-
content: "\a8";
|
2614 |
-
color: #888;
|
2615 |
-
}
|
2616 |
-
.icon-fi-style-type:before {
|
2617 |
-
content: "\3c";
|
2618 |
-
color: #888;
|
2619 |
-
}
|
2620 |
-
.icon-fi-quote-2:before {
|
2621 |
-
content: "\27";
|
2622 |
-
color: #888;
|
2623 |
-
}
|
2624 |
-
.icon-fi-quote:before {
|
2625 |
-
content: "\3b";
|
2626 |
-
color: #888;
|
2627 |
-
}
|
2628 |
-
.icon-fi-paperclip:before {
|
2629 |
-
content: "\41";
|
2630 |
-
color: #888;
|
2631 |
-
}
|
2632 |
-
.icon-fi-indent-less:before {
|
2633 |
-
content: "\201d";
|
2634 |
-
color: #888;
|
2635 |
}
|
2636 |
-
.icon-
|
2637 |
-
content: "\
|
2638 |
-
color: #888;
|
2639 |
-
}
|
2640 |
-
.icon-fi-list-bullet:before {
|
2641 |
-
content: "\38";
|
2642 |
-
color: #888;
|
2643 |
-
}
|
2644 |
-
.icon-fi-list-number:before {
|
2645 |
-
content: "\37";
|
2646 |
-
color: #888;
|
2647 |
-
}
|
2648 |
-
.icon-fi-list:before {
|
2649 |
-
content: "\60";
|
2650 |
-
color: #888;
|
2651 |
-
}
|
2652 |
-
.icon-fi-link:before {
|
2653 |
-
content: "\35";
|
2654 |
-
color: #888;
|
2655 |
-
}
|
2656 |
-
.icon-fi-unlink:before {
|
2657 |
-
content: "\36";
|
2658 |
-
color: #888;
|
2659 |
-
}
|
2660 |
-
.icon-fi-color-pick-eyedropper:before {
|
2661 |
-
content: "\a5";
|
2662 |
-
color: #888;
|
2663 |
-
}
|
2664 |
-
.icon-fi-wand-magic:before {
|
2665 |
-
content: "\5a";
|
2666 |
-
color: #888;
|
2667 |
-
}
|
2668 |
-
.icon-fi-layers:before {
|
2669 |
-
content: "\e6";
|
2670 |
-
color: #888;
|
2671 |
-
}
|
2672 |
-
.icon-fi-dislike:before {
|
2673 |
-
content: "\6b";
|
2674 |
-
color: #888;
|
2675 |
-
}
|
2676 |
-
.icon-fi-like:before {
|
2677 |
-
content: "\6a";
|
2678 |
-
color: #888;
|
2679 |
-
}
|
2680 |
-
.icon-fi-dollar:before {
|
2681 |
-
content: "\24";
|
2682 |
-
color: #888;
|
2683 |
-
}
|
2684 |
-
.icon-fi-download:before {
|
2685 |
-
content: "\e93b";
|
2686 |
-
color: #888;
|
2687 |
-
}
|
2688 |
-
.icon-fi-eye:before {
|
2689 |
-
content: "\65";
|
2690 |
-
color: #888;
|
2691 |
-
}
|
2692 |
-
.icon-fi-eye-hide:before {
|
2693 |
-
content: "\71";
|
2694 |
-
color: #888;
|
2695 |
-
}
|
2696 |
-
.icon-fi-arrow-return-back:before {
|
2697 |
-
content: "\52";
|
2698 |
-
color: #888;
|
2699 |
-
}
|
2700 |
-
.icon-fi-first-aid:before {
|
2701 |
-
content: "\e93f";
|
2702 |
-
color: #888;
|
2703 |
-
}
|
2704 |
-
.icon-fi-folder:before {
|
2705 |
-
content: "\2d8";
|
2706 |
-
color: #888;
|
2707 |
-
}
|
2708 |
-
.icon-fi-map:before {
|
2709 |
-
content: "\34";
|
2710 |
-
color: #888;
|
2711 |
-
}
|
2712 |
-
.icon-fi-graph-bar:before {
|
2713 |
-
content: "\c7";
|
2714 |
-
color: #888;
|
2715 |
-
}
|
2716 |
-
.icon-fi-graph-bar_1:before {
|
2717 |
-
content: "\2db";
|
2718 |
-
color: #888;
|
2719 |
-
}
|
2720 |
-
.icon-fi-heart:before {
|
2721 |
-
content: "\4b";
|
2722 |
-
color: #888;
|
2723 |
-
}
|
2724 |
-
.icon-fi-home:before {
|
2725 |
-
content: "\4a";
|
2726 |
-
color: #888;
|
2727 |
-
}
|
2728 |
-
.icon-fi-info:before {
|
2729 |
-
content: "\49";
|
2730 |
-
color: #888;
|
2731 |
-
}
|
2732 |
-
.icon-fi-key:before {
|
2733 |
-
content: "\25ca";
|
2734 |
-
color: #888;
|
2735 |
}
|
2736 |
-
.icon-
|
2737 |
-
content: "\
|
2738 |
-
color: #888;
|
2739 |
}
|
2740 |
-
.icon-
|
2741 |
-
content: "\
|
2742 |
-
color: #888;
|
2743 |
}
|
2744 |
-
.icon-
|
2745 |
-
content: "\
|
2746 |
-
color: #888;
|
2747 |
}
|
2748 |
-
.icon-
|
2749 |
content: "\39";
|
2750 |
-
color: #888;
|
2751 |
}
|
2752 |
-
.icon-
|
2753 |
content: "\30";
|
2754 |
-
color: #888;
|
2755 |
-
}
|
2756 |
-
.icon-fi-mail:before {
|
2757 |
-
content: "\6d";
|
2758 |
-
color: #888;
|
2759 |
-
}
|
2760 |
-
.icon-fi-location-marker:before {
|
2761 |
-
content: "\6c";
|
2762 |
-
color: #888;
|
2763 |
-
}
|
2764 |
-
.icon-fi-microphone-audio:before {
|
2765 |
-
content: "\2030";
|
2766 |
-
color: #888;
|
2767 |
}
|
2768 |
-
.icon-
|
2769 |
-
content: "\
|
2770 |
-
color: #888;
|
2771 |
-
}
|
2772 |
-
.icon-fi-mobile:before {
|
2773 |
-
content: "\201c";
|
2774 |
-
color: #888;
|
2775 |
-
}
|
2776 |
-
.icon-fi-monitor:before {
|
2777 |
-
content: "\5c";
|
2778 |
-
color: #888;
|
2779 |
-
}
|
2780 |
-
.icon-fi-magnifying-glass-search:before {
|
2781 |
-
content: "\ba";
|
2782 |
-
color: #888;
|
2783 |
-
}
|
2784 |
-
.icon-fi-zoom-in:before {
|
2785 |
-
content: "\2260";
|
2786 |
-
color: #888;
|
2787 |
}
|
2788 |
-
.icon-
|
2789 |
-
content: "\
|
2790 |
-
color: #888;
|
2791 |
}
|
2792 |
-
.icon-
|
2793 |
-
content: "\
|
2794 |
-
color: #888;
|
2795 |
}
|
2796 |
-
.icon-
|
2797 |
-
content: "\
|
2798 |
-
color: #888;
|
2799 |
}
|
2800 |
-
.icon-
|
2801 |
-
content: "\
|
2802 |
-
color: #888;
|
2803 |
}
|
2804 |
-
.icon-
|
2805 |
-
content: "\
|
2806 |
-
color: #888;
|
2807 |
}
|
2808 |
-
.icon-
|
2809 |
-
content: "\
|
2810 |
-
color: #888;
|
2811 |
}
|
2812 |
-
.icon-
|
2813 |
-
content: "\
|
2814 |
-
color: #888;
|
2815 |
}
|
2816 |
-
.icon-
|
2817 |
-
content: "\
|
2818 |
-
color: #888;
|
2819 |
}
|
2820 |
-
.icon-
|
2821 |
-
content: "\
|
2822 |
-
color: #888;
|
2823 |
}
|
2824 |
-
.icon-
|
2825 |
-
content: "\
|
2826 |
-
color: #888;
|
2827 |
}
|
2828 |
-
.icon-
|
2829 |
-
content: "\
|
2830 |
-
color: #888;
|
2831 |
}
|
2832 |
-
.icon-
|
2833 |
content: "\59";
|
2834 |
-
color: #888;
|
2835 |
}
|
2836 |
-
.icon-
|
2837 |
-
content: "\
|
2838 |
-
color: #888;
|
2839 |
-
}
|
2840 |
-
.icon-fi-photo-picture:before {
|
2841 |
-
content: "\44";
|
2842 |
-
color: #888;
|
2843 |
-
}
|
2844 |
-
.icon-fi-play:before {
|
2845 |
-
content: "\70";
|
2846 |
-
color: #888;
|
2847 |
-
}
|
2848 |
-
.icon-fi-pause:before {
|
2849 |
-
content: "\6f";
|
2850 |
-
color: #888;
|
2851 |
}
|
2852 |
-
.icon-
|
2853 |
-
content: "\
|
2854 |
-
color: #888;
|
2855 |
}
|
2856 |
-
.icon-
|
2857 |
-
content: "\
|
2858 |
-
color: #888;
|
2859 |
}
|
2860 |
-
.icon-
|
2861 |
-
content: "\
|
2862 |
-
color: #888;
|
2863 |
}
|
2864 |
-
.icon-
|
2865 |
-
content: "\
|
2866 |
-
color: #888;
|
2867 |
}
|
2868 |
-
.icon-
|
2869 |
-
content: "\
|
2870 |
-
color: #888;
|
2871 |
}
|
2872 |
-
.icon-
|
2873 |
-
content: "\
|
2874 |
-
color: #888;
|
2875 |
}
|
2876 |
-
.icon-
|
2877 |
-
content: "\
|
2878 |
-
color: #888;
|
2879 |
}
|
2880 |
-
.icon-
|
2881 |
-
content: "\
|
2882 |
-
color: #888;
|
2883 |
}
|
2884 |
-
.icon-
|
2885 |
-
content: "\
|
2886 |
-
color: #888;
|
2887 |
}
|
2888 |
-
.icon-
|
2889 |
-
content: "\
|
2890 |
-
color: #888;
|
2891 |
}
|
2892 |
-
.icon-
|
2893 |
-
content: "\
|
2894 |
-
color: #888;
|
2895 |
}
|
2896 |
-
.icon-
|
2897 |
-
content: "\
|
2898 |
-
color: #888;
|
2899 |
}
|
2900 |
-
.icon-
|
2901 |
content: "\66";
|
2902 |
-
color: #888;
|
2903 |
}
|
2904 |
-
.icon-
|
2905 |
content: "\68";
|
2906 |
-
color: #888;
|
2907 |
}
|
2908 |
-
.icon-
|
2909 |
-
content: "\
|
2910 |
-
color: #888;
|
2911 |
-
}
|
2912 |
-
.icon-fi-social-linkedin:before {
|
2913 |
-
content: "\69";
|
2914 |
-
color: #888;
|
2915 |
-
}
|
2916 |
-
.icon-fi-social-twitter:before {
|
2917 |
-
content: "\74";
|
2918 |
-
color: #888;
|
2919 |
}
|
2920 |
-
.icon-
|
2921 |
-
content: "\
|
2922 |
-
color: #888;
|
2923 |
}
|
2924 |
-
.icon-
|
2925 |
content: "\79";
|
2926 |
-
color: #888;
|
2927 |
-
}
|
2928 |
-
.icon-fi-white-label-video:before {
|
2929 |
-
content: "\75";
|
2930 |
-
color: #888;
|
2931 |
-
}
|
2932 |
-
.icon-fi-star:before {
|
2933 |
-
content: "\53";
|
2934 |
-
color: #888;
|
2935 |
-
}
|
2936 |
-
.icon-fi-tablet-landscape:before {
|
2937 |
-
content: "\5b";
|
2938 |
-
color: #888;
|
2939 |
-
}
|
2940 |
-
.icon-fi-tablet-portrait:before {
|
2941 |
-
content: "\5d";
|
2942 |
-
color: #888;
|
2943 |
}
|
2944 |
-
.icon-
|
2945 |
-
content: "\
|
2946 |
-
color: #888;
|
2947 |
-
}
|
2948 |
-
.icon-fi-ticket:before {
|
2949 |
-
content: "\e97d";
|
2950 |
-
color: #888;
|
2951 |
-
}
|
2952 |
-
.icon-fi-profile-male:before {
|
2953 |
-
content: "\b5";
|
2954 |
-
color: #888;
|
2955 |
-
}
|
2956 |
-
.icon-fi-profile-female:before {
|
2957 |
-
content: "\192";
|
2958 |
-
color: #888;
|
2959 |
-
}
|
2960 |
-
.icon-fi-community-people:before {
|
2961 |
-
content: "\2018";
|
2962 |
-
color: #888;
|
2963 |
}
|
2964 |
-
.icon-
|
2965 |
-
content: "\
|
2966 |
-
color: #888;
|
2967 |
}
|
2968 |
-
.icon-
|
2969 |
-
content: "\
|
2970 |
-
color: #888;
|
2971 |
}
|
2972 |
-
.icon-
|
2973 |
content: "\31";
|
2974 |
-
color: #888;
|
2975 |
-
}
|
2976 |
-
.icon-fi-megaphone:before {
|
2977 |
-
content: "\c5";
|
2978 |
-
color: #888;
|
2979 |
-
}
|
2980 |
-
.icon-fi-flag:before {
|
2981 |
-
content: "\7c";
|
2982 |
-
color: #888;
|
2983 |
}
|
2984 |
-
.icon-
|
2985 |
-
content: "\
|
2986 |
-
color: #888;
|
2987 |
-
}
|
2988 |
-
.icon-fi-shopping-cart:before {
|
2989 |
-
content: "\cd";
|
2990 |
-
color: #888;
|
2991 |
-
}
|
2992 |
-
.icon-fi-share:before {
|
2993 |
-
content: "\73";
|
2994 |
-
color: #888;
|
2995 |
}
|
2996 |
-
.icon-
|
2997 |
content: "\48";
|
2998 |
-
color: #888;
|
2999 |
}
|
3000 |
-
.icon-
|
3001 |
-
content: "\
|
3002 |
-
color: #888;
|
3003 |
-
}
|
3004 |
-
.icon-fi-widget-settings-config:before {
|
3005 |
-
content: "\78";
|
3006 |
-
color: #888;
|
3007 |
-
}
|
3008 |
-
.icon-fi-wrench-tool:before {
|
3009 |
-
content: "\2044";
|
3010 |
-
color: #888;
|
3011 |
-
}
|
3012 |
-
.icon-fi-settings-slider-control:before {
|
3013 |
-
content: "\153";
|
3014 |
-
color: #888;
|
3015 |
-
}
|
3016 |
-
.icon-fi-filter:before {
|
3017 |
-
content: "\7a";
|
3018 |
-
color: #888;
|
3019 |
-
}
|
3020 |
-
.icon-fi-reply:before {
|
3021 |
-
content: "\72";
|
3022 |
-
color: #888;
|
3023 |
-
}
|
3024 |
-
.icon-fi-finger-point:before {
|
3025 |
-
content: "\2248";
|
3026 |
-
color: #888;
|
3027 |
-
}
|
3028 |
-
.icon-fi-finger-swipe:before {
|
3029 |
-
content: "\2203";
|
3030 |
-
color: #888;
|
3031 |
-
}
|
3032 |
-
.icon-fi-mouse-scroll:before {
|
3033 |
-
content: "\df";
|
3034 |
-
color: #888;
|
3035 |
-
}
|
3036 |
-
.icon-fi-plugin-2:before {
|
3037 |
-
content: "\4f";
|
3038 |
-
color: #888;
|
3039 |
-
}
|
3040 |
-
.icon-fi-brush:before {
|
3041 |
-
content: "\7e";
|
3042 |
-
color: #888;
|
3043 |
}
|
3044 |
-
.icon-
|
3045 |
-
content: "\
|
3046 |
-
color: #888;
|
3047 |
}
|
3048 |
-
.icon-
|
3049 |
content: "\50";
|
3050 |
-
color: #888;
|
3051 |
}
|
3052 |
-
.icon-
|
3053 |
-
content: "\
|
3054 |
-
color: #888;
|
3055 |
-
}
|
3056 |
-
.icon-fi-warning-alert:before {
|
3057 |
-
content: "\21";
|
3058 |
-
color: #888;
|
3059 |
}
|
3060 |
-
.icon-
|
3061 |
-
content: "\
|
3062 |
-
color: #888;
|
3063 |
}
|
3064 |
-
.icon-
|
3065 |
-
content: "\
|
3066 |
-
color: #888;
|
3067 |
}
|
3068 |
-
.icon-
|
3069 |
content: "\32";
|
3070 |
-
color: #888;
|
3071 |
-
}
|
3072 |
-
.icon-fi-user-star-level-up:before {
|
3073 |
-
content: "\33";
|
3074 |
-
color: #888;
|
3075 |
-
}
|
3076 |
-
.icon-fi-icon-devman:before {
|
3077 |
-
content: "\20ac";
|
3078 |
-
color: #888;
|
3079 |
-
}
|
3080 |
-
.icon-fi-icon-defender:before {
|
3081 |
-
content: "\b7";
|
3082 |
-
color: #888;
|
3083 |
}
|
3084 |
-
.
|
3085 |
-
content: "\
|
3086 |
-
color: #888;
|
3087 |
-
}
|
3088 |
-
.icon-fi-icon-hummingbird:before {
|
3089 |
-
content: "\b0";
|
3090 |
-
color: #888;
|
3091 |
-
}
|
3092 |
-
.icon-fi-icon-hustle:before {
|
3093 |
-
content: "\2014";
|
3094 |
-
color: #888;
|
3095 |
-
}
|
3096 |
-
.icon-fi-icon-smart-crawl:before {
|
3097 |
-
content: "\2202";
|
3098 |
-
color: #888;
|
3099 |
-
}
|
3100 |
-
.icon-fi-icon-smush:before {
|
3101 |
-
content: "\2021";
|
3102 |
-
color: #888;
|
3103 |
-
}
|
3104 |
-
.icon-fi-icon-snapshot:before {
|
3105 |
-
content: "\fb01";
|
3106 |
-
color: #888;
|
3107 |
}
|
3108 |
-
.
|
3109 |
-
content: "\
|
3110 |
-
color: #888;
|
3111 |
}
|
3112 |
-
.
|
3113 |
-
content: "\
|
3114 |
-
color: #888;
|
3115 |
}
|
3116 |
-
.
|
3117 |
-
content: "\
|
3118 |
-
color: #888;
|
3119 |
}
|
3120 |
-
.
|
3121 |
-
content: "\
|
3122 |
-
color: #888;
|
3123 |
}
|
3124 |
-
.icon-
|
3125 |
-
content: "\
|
3126 |
-
color: #888;
|
3127 |
}
|
3128 |
-
.icon-
|
3129 |
content: "\77";
|
3130 |
-
color: #888;
|
3131 |
-
}
|
3132 |
-
.icon-fi-infinity:before {
|
3133 |
-
content: "\56";
|
3134 |
-
color: #888;
|
3135 |
-
}
|
3136 |
-
.icon-fi-audio-sound:before {
|
3137 |
-
content: "\e9ae";
|
3138 |
-
color: #888;
|
3139 |
-
}
|
3140 |
-
.icon-fi-sitemap:before {
|
3141 |
-
content: "\b8";
|
3142 |
-
color: #888;
|
3143 |
-
}
|
3144 |
-
.icon-fi-google-analytics:before {
|
3145 |
-
content: "\e5";
|
3146 |
-
color: #888;
|
3147 |
-
}
|
3148 |
-
.icon-fi-progress:before {
|
3149 |
-
content: "\e9b1";
|
3150 |
-
color: #888;
|
3151 |
-
}
|
3152 |
-
.icon-fi-dashboard:before {
|
3153 |
-
content: "\e9b2";
|
3154 |
-
color: #888;
|
3155 |
-
}
|
3156 |
-
.icon-fi-ab-testing:before {
|
3157 |
-
content: "\bb";
|
3158 |
-
color: #888;
|
3159 |
-
}
|
3160 |
-
.icon-fi-testing-bottle-beaker:before {
|
3161 |
-
content: "\e9b4";
|
3162 |
-
color: #888;
|
3163 |
-
}
|
3164 |
-
.icon-fi-archive:before {
|
3165 |
-
content: "\62";
|
3166 |
-
color: #888;
|
3167 |
-
}
|
3168 |
-
.icon-fi-zip:before {
|
3169 |
-
content: "\3a9";
|
3170 |
-
color: #888;
|
3171 |
-
}
|
3172 |
-
.icon-fi-arrow-location:before {
|
3173 |
-
content: "\4d";
|
3174 |
-
color: #888;
|
3175 |
-
}
|
3176 |
-
.icon-fi-arrow-pointer-cursor:before {
|
3177 |
-
content: "\4e";
|
3178 |
-
color: #888;
|
3179 |
-
}
|
3180 |
-
.icon-fi-code:before {
|
3181 |
-
content: "\3a";
|
3182 |
-
color: #888;
|
3183 |
-
}
|
3184 |
-
.icon-fi-news-paper:before {
|
3185 |
-
content: "\2211";
|
3186 |
-
color: #888;
|
3187 |
-
}
|
3188 |
-
.icon-fi-gallery-slider:before {
|
3189 |
-
content: "\f7";
|
3190 |
-
color: #888;
|
3191 |
-
}
|
3192 |
-
.icon-fi-layout:before {
|
3193 |
-
content: "\a9";
|
3194 |
-
color: #888;
|
3195 |
-
}
|
3196 |
-
.icon-fi-storage-server-data:before {
|
3197 |
-
content: "\ce";
|
3198 |
-
color: #888;
|
3199 |
-
}
|
3200 |
-
.icon-fi-loader:before {
|
3201 |
-
content: "\e9be";
|
3202 |
-
color: #888;
|
3203 |
-
}
|
3204 |
-
.icon-fi-rocket-launch:before {
|
3205 |
-
content: "\e9bf";
|
3206 |
-
color: #888;
|
3207 |
-
}
|
3208 |
-
.icon-fi-target:before {
|
3209 |
-
content: "\2020";
|
3210 |
-
color: #888;
|
3211 |
}
|
3212 |
|
3213 |
/* ****************************************************************************
|
45 |
}
|
46 |
.wpmud #wpbody {
|
47 |
background: #F4F4F4;
|
48 |
+
-webkit-font-smoothing: antialiased !important;
|
49 |
}
|
50 |
.wpmud #wpbody * {
|
51 |
box-sizing: border-box;
|
69 |
display: block;
|
70 |
margin: 0.5em auto;
|
71 |
padding: 0;
|
72 |
+
line-height: 1em;
|
73 |
+
text-align: center;
|
74 |
+
color: #777771;
|
75 |
}
|
76 |
.wpmud h1,
|
77 |
.wpmud h2,
|
355 |
}
|
356 |
.wpmud .box-footer {
|
357 |
text-align: center;
|
358 |
+
margin-top: 32px;
|
359 |
+
font-size: 16px;
|
360 |
}
|
361 |
|
362 |
/* ****************************************************************************
|
994 |
top: 0;
|
995 |
padding: 0 24px;
|
996 |
line-height: 60px;
|
997 |
+
font-size: 24px;
|
998 |
+
font-weight: 400;
|
999 |
+
color: #BABABA;
|
1000 |
+
cursor: pointer;
|
1001 |
}
|
1002 |
.wpmud .dev-overlay .title .close:hover {
|
1003 |
color: #777771;
|
1298 |
.wpmud .notice-dismiss:hover,
|
1299 |
.wpmud .notice-dismiss:focus,
|
1300 |
.wpmud .notice-dismiss:active {
|
1301 |
+
border: none;
|
1302 |
+
margin: 0;
|
1303 |
+
padding: 9px;
|
1304 |
+
background: none;
|
1305 |
+
color: #b4b9be;
|
1306 |
+
cursor: pointer;
|
1307 |
}
|
1308 |
|
1309 |
/* ****************************************************************************
|
1669 |
}
|
1670 |
.wpmud .select-list-container .list-results {
|
1671 |
position: absolute;
|
1672 |
+
top: 41px;
|
1673 |
+
left: -9999px;
|
1674 |
+
right: -9999px;
|
1675 |
+
z-index: 1010;
|
1676 |
+
width: 0;
|
1677 |
+
border-top: 0;
|
1678 |
background: #FFF;
|
1679 |
border: 1px solid #ddd;
|
1680 |
margin-left: -1px;
|
1810 |
opacity: 0.8;
|
1811 |
|
1812 |
font-family: 'WPMU-DEV-App-Icons';
|
1813 |
+
speak: none;
|
1814 |
+
font-style: normal;
|
1815 |
+
font-weight: normal;
|
1816 |
+
font-variant: normal;
|
1817 |
+
text-transform: none;
|
1818 |
+
line-height: 1;
|
1819 |
+
-webkit-font-smoothing: antialiased;
|
1820 |
+
-moz-osx-font-smoothing: grayscale;
|
1821 |
}
|
1822 |
.wpmud .listing li.circle:before {
|
1823 |
content: "\68";
|
2186 |
vertical-align: middle;
|
2187 |
height: 30px;
|
2188 |
line-height: 24px;
|
2189 |
+
color: #b6b6b6;
|
2190 |
+
cursor: default;
|
2191 |
+
font-weight: normal;
|
2192 |
}
|
2193 |
.wpmud .count.reply:before {
|
2194 |
+
content: '';
|
2195 |
+
position: absolute;
|
2196 |
+
bottom: -8px;
|
2197 |
+
right: 4px;
|
2198 |
+
border-width: 8px 0px 0px 12px;
|
2199 |
+
border-style: solid;
|
2200 |
+
border-color: #DDDDDD transparent;
|
2201 |
+
display: block;
|
2202 |
+
width: 0;
|
2203 |
}
|
2204 |
.wpmud .count.reply:after {
|
2205 |
+
content: '';
|
2206 |
+
position: absolute;
|
2207 |
+
bottom: -4px;
|
2208 |
+
right: 6px;
|
2209 |
+
border-width: 4px 0px 0px 6px;
|
2210 |
+
border-style: solid;
|
2211 |
+
border-color: #fff transparent;
|
2212 |
+
display: block;
|
2213 |
+
width: 0;
|
2214 |
}
|
2215 |
.wpmud .count.reply.mirror:before {
|
2216 |
+
left: 4px;
|
2217 |
+
border-width: 8px 12px 0px 0px;
|
2218 |
}
|
2219 |
.wpmud .count.reply.mirror:after {
|
2220 |
+
left: 6px;
|
2221 |
+
border-width: 4px 6px 0px 0px;
|
2222 |
}
|
2223 |
.wpmud .count.notification {
|
2224 |
+
background: #fecf2f;
|
2225 |
+
border-color: #fecf2f;
|
2226 |
+
color: #fff;
|
2227 |
}
|
2228 |
.wpmud .count.notification:before,
|
2229 |
.wpmud .count.notification:after {
|
2230 |
+
border-color: #fecf2f transparent;
|
2231 |
}
|
2232 |
|
2233 |
/* ****************************************************************************
|
2293 |
* 23. FONTAWESOME
|
2294 |
*/
|
2295 |
@font-face {
|
2296 |
+
font-family: 'FontAwesomeWdv';
|
2297 |
+
src: url('font/fontawesome-webfont.eot');
|
2298 |
+
src: url('font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
|
2299 |
+
url('font/fontawesome-webfont.woff') format('woff'),
|
2300 |
+
url('font/fontawesome-webfont.ttf') format('truetype'),
|
2301 |
+
url('font/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),
|
2302 |
+
url('font/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');
|
2303 |
+
font-weight: normal;
|
2304 |
+
font-style: normal;
|
2305 |
}
|
2306 |
.wdv-icon:before{font-family:FontAwesomeWdv;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit}a .wdv-icon{display:inline-block;text-decoration:inherit}.wdv-icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn .wdv-icon{line-height:.9em}li .wdv-icon, .action_links .wdv-icon, .wdv-icon.wdv-icon-fw{display:inline-block;width:1.25em;text-align:center}li .wdv-icon-large.wdv-icon,li .wdv-icon-large.wdv-icon{width:1.875em}li.wdv-icon{margin-left:0;list-style-type:none}li.wdv-icon:before{text-indent:-2em;text-align:center}li.wdv-icon.wdv-icon-large:before{text-indent:-1.3333333333333333em}.wdv-icon-glass:before{content:"\f000"}.wdv-icon-music:before{content:"\f001"}.wdv-icon-search:before{content:"\f002"}.wdv-icon-envelope:before{content:"\f003"}.wdv-icon-heart:before{content:"\f004"}.wdv-icon-star:before{content:"\f005"}.wdv-icon-star-empty:before{content:"\f006"}.wdv-icon-user:before{content:"\f007"}.wdv-icon-film:before{content:"\f008"}.wdv-icon-th-large:before{content:"\f009"}.wdv-icon-th:before{content:"\f00a"}.wdv-icon-th-list:before{content:"\f00b"}.wdv-icon-ok:before{content:"\f00c"}.wdv-icon-remove:before{content:"\f00d"}.wdv-icon-zoom-in:before{content:"\f00e"}.wdv-icon-zoom-out:before{content:"\f010"}.wdv-icon-off:before{content:"\f011"}.wdv-icon-signal:before{content:"\f012"}.wdv-icon-cog:before{content:"\f013"}.wdv-icon-trash:before{content:"\f014"}.wdv-icon-home:before{content:"\f015"}.wdv-icon-file:before{content:"\f016"}.wdv-icon-time:before{content:"\f017"}.wdv-icon-road:before{content:"\f018"}.wdv-icon-download-alt:before{content:"\f019"}.wdv-icon-download:before{content:"\f01a"}.wdv-icon-upload:before{content:"\f01b"}.wdv-icon-inbox:before{content:"\f01c"}.wdv-icon-play-circle:before{content:"\f01d"}.wdv-icon-repeat:before{content:"\f01e"}.wdv-icon-refresh:before{content:"\f021"}.wdv-icon-list-alt:before{content:"\f022"}.wdv-icon-lock:before{content:"\f023"}.wdv-icon-flag:before{content:"\f024"}.wdv-icon-headphones:before{content:"\f025"}.wdv-icon-volume-off:before{content:"\f026"}.wdv-icon-volume-down:before{content:"\f027"}.wdv-icon-volume-up:before{content:"\f028"}.wdv-icon-qrcode:before{content:"\f029"}.wdv-icon-barcode:before{content:"\f02a"}.wdv-icon-tag:before{content:"\f02b"}.wdv-icon-tags:before{content:"\f02c"}.wdv-icon-book:before{content:"\f02d"}.wdv-icon-bookmark:before{content:"\f02e"}.wdv-icon-print:before{content:"\f02f"}.wdv-icon-camera:before{content:"\f030"}.wdv-icon-font:before{content:"\f031"}.wdv-icon-bold:before{content:"\f032"}.wdv-icon-italic:before{content:"\f033"}.wdv-icon-text-height:before{content:"\f034"}.wdv-icon-text-width:before{content:"\f035"}.wdv-icon-align-left:before{content:"\f036"}.wdv-icon-align-center:before{content:"\f037"}.wdv-icon-align-right:before{content:"\f038"}.wdv-icon-align-justify:before{content:"\f039"}.wdv-icon-list:before{content:"\f03a"}.wdv-icon-indent-left:before{content:"\f03b"}.wdv-icon-indent-right:before{content:"\f03c"}.wdv-icon-facetime-video:before{content:"\f03d"}.wdv-icon-picture:before{content:"\f03e"}.wdv-icon-pencil:before{content:"\f040"}.wdv-icon-map-marker:before{content:"\f041"}.wdv-icon-adjust:before{content:"\f042"}.wdv-icon-tint:before{content:"\f043"}.wdv-icon-edit:before{content:"\f044"}.wdv-icon-share:before{content:"\f045"}.wdv-icon-check:before{content:"\f046"}.wdv-icon-move:before{content:"\f047"}.wdv-icon-step-backward:before{content:"\f048"}.wdv-icon-fast-backward:before{content:"\f049"}.wdv-icon-backward:before{content:"\f04a"}.wdv-icon-play:before{content:"\f04b"}.wdv-icon-pause:before{content:"\f04c"}.wdv-icon-stop:before{content:"\f04d"}.wdv-icon-forward:before{content:"\f04e"}.wdv-icon-fast-forward:before{content:"\f050"}.wdv-icon-step-forward:before{content:"\f051"}.wdv-icon-eject:before{content:"\f052"}.wdv-icon-chevron-left:before{content:"\f053"}.wdv-icon-chevron-right:before{content:"\f054"}.wdv-icon-plus-sign:before{content:"\f055"}.wdv-icon-minus-sign:before{content:"\f056"}.wdv-icon-remove-sign:before{content:"\f057"}.wdv-icon-ok-sign:before{content:"\f058"}.wdv-icon-question-sign:before{content:"\f059"}.wdv-icon-info-sign:before{content:"\f05a"}.wdv-icon-screenshot:before{content:"\f05b"}.wdv-icon-remove-circle:before{content:"\f05c"}.wdv-icon-ok-circle:before{content:"\f05d"}.wdv-icon-ban-circle:before{content:"\f05e"}.wdv-icon-arrow-left:before{content:"\f060"}.wdv-icon-arrow-right:before{content:"\f061"}.wdv-icon-arrow-up:before{content:"\f062"}.wdv-icon-arrow-down:before{content:"\f063"}.wdv-icon-share-alt:before{content:"\f064"}.wdv-icon-resize-full:before{content:"\f065"}.wdv-icon-resize-small:before{content:"\f066"}.wdv-icon-plus:before{content:"\f067"}.wdv-icon-minus:before{content:"\f068"}.wdv-icon-asterisk:before{content:"\f069"}.wdv-icon-exclamation-sign:before{content:"\f06a"}.wdv-icon-gift:before{content:"\f06b"}.wdv-icon-leaf:before{content:"\f06c"}.wdv-icon-fire:before{content:"\f06d"}.wdv-icon-eye-open:before{content:"\f06e"}.wdv-icon-eye-close:before{content:"\f070"}.wdv-icon-warning-sign:before{content:"\f071"}.wdv-icon-plane:before{content:"\f072"}.wdv-icon-calendar:before{content:"\f073"}.wdv-icon-random:before{content:"\f074"}.wdv-icon-comment:before{content:"\f075"}.wdv-icon-magnet:before{content:"\f076"}.wdv-icon-chevron-up:before{content:"\f077"}.wdv-icon-chevron-down:before{content:"\f078"}.wdv-icon-retweet:before{content:"\f079"}.wdv-icon-shopping-cart:before{content:"\f07a"}.wdv-icon-folder-close:before{content:"\f07b"}.wdv-icon-folder-open:before{content:"\f07c"}.wdv-icon-resize-vertical:before{content:"\f07d"}.wdv-icon-resize-horizontal:before{content:"\f07e"}.wdv-icon-bar-chart:before{content:"\f080"}.wdv-icon-twitter-sign:before{content:"\f081"}.wdv-icon-facebook-sign:before{content:"\f082"}.wdv-icon-camera-retro:before{content:"\f083"}.wdv-icon-key:before{content:"\f084"}.wdv-icon-cogs:before{content:"\f085"}.wdv-icon-comments:before{content:"\f086"}.wdv-icon-thumbs-up:before{content:"\f087"}.wdv-icon-thumbs-down:before{content:"\f088"}.wdv-icon-star-half:before{content:"\f089"}.wdv-icon-heart-empty:before{content:"\f08a"}.wdv-icon-signout:before{content:"\f08b"}.wdv-icon-linkedin-sign:before{content:"\f08c"}.wdv-icon-pushpin:before{content:"\f08d"}.wdv-icon-external-link:before{content:"\f08e"}.wdv-icon-signin:before{content:"\f090"}.wdv-icon-trophy:before{content:"\f091"}.wdv-icon-github-sign:before{content:"\f092"}.wdv-icon-upload-alt:before{content:"\f093"}.wdv-icon-lemon:before{content:"\f094"}.wdv-icon-phone:before{content:"\f095"}.wdv-icon-check-empty:before{content:"\f096"}.wdv-icon-bookmark-empty:before{content:"\f097"}.wdv-icon-phone-sign:before{content:"\f098"}.wdv-icon-twitter:before{content:"\f099"}.wdv-icon-facebook:before{content:"\f09a"}.wdv-icon-github:before{content:"\f09b"}.wdv-icon-unlock:before{content:"\f09c"}.wdv-icon-credit-card:before{content:"\f09d"}.wdv-icon-rss:before{content:"\f09e"}.wdv-icon-hdd:before{content:"\f0a0"}.wdv-icon-bullhorn:before{content:"\f0a1"}.wdv-icon-bell:before{content:"\f0a2"}.wdv-icon-certificate:before{content:"\f0a3"}.wdv-icon-hand-right:before{content:"\f0a4"}.wdv-icon-hand-left:before{content:"\f0a5"}.wdv-icon-hand-up:before{content:"\f0a6"}.wdv-icon-hand-down:before{content:"\f0a7"}.wdv-icon-circle-arrow-left:before{content:"\f0a8"}.wdv-icon-circle-arrow-right:before{content:"\f0a9"}.wdv-icon-circle-arrow-up:before{content:"\f0aa"}.wdv-icon-circle-arrow-down:before{content:"\f0ab"}.wdv-icon-globe:before{content:"\f0ac"}.wdv-icon-wrench:before{content:"\f0ad"}.wdv-icon-tasks:before{content:"\f0ae"}.wdv-icon-filter:before{content:"\f0b0"}.wdv-icon-briefcase:before{content:"\f0b1"}.wdv-icon-fullscreen:before{content:"\f0b2"}.wdv-icon-group:before{content:"\f0c0"}.wdv-icon-link:before{content:"\f0c1"}.wdv-icon-cloud:before{content:"\f0c2"}.wdv-icon-beaker:before{content:"\f0c3"}.wdv-icon-cut:before{content:"\f0c4"}.wdv-icon-copy:before{content:"\f0c5"}.wdv-icon-paper-clip:before{content:"\f0c6"}.wdv-icon-save:before{content:"\f0c7"}.wdv-icon-sign-blank:before{content:"\f0c8"}.wdv-icon-reorder:before{content:"\f0c9"}.wdv-icon-list-ul:before{content:"\f0ca"}.wdv-icon-list-ol:before{content:"\f0cb"}.wdv-icon-strikethrough:before{content:"\f0cc"}.wdv-icon-underline:before{content:"\f0cd"}.wdv-icon-table:before{content:"\f0ce"}.wdv-icon-magic:before{content:"\f0d0"}.wdv-icon-truck:before{content:"\f0d1"}.wdv-icon-pinterest:before{content:"\f0d2"}.wdv-icon-pinterest-sign:before{content:"\f0d3"}.wdv-icon-google-plus-sign:before{content:"\f0d4"}.wdv-icon-google-plus:before{content:"\f0d5"}.wdv-icon-money:before{content:"\f0d6"}.wdv-icon-caret-down:before{content:"\f0d7"}.wdv-icon-caret-up:before{content:"\f0d8"}.wdv-icon-caret-left:before{content:"\f0d9"}.wdv-icon-caret-right:before{content:"\f0da"}.wdv-icon-columns:before{content:"\f0db"}.wdv-icon-sort:before{content:"\f0dc"}.wdv-icon-sort-down:before{content:"\f0dd"}.wdv-icon-sort-up:before{content:"\f0de"}.wdv-icon-envelope-alt:before{content:"\f0e0"}.wdv-icon-linkedin:before{content:"\f0e1"}.wdv-icon-undo:before{content:"\f0e2"}.wdv-icon-legal:before{content:"\f0e3"}.wdv-icon-dashboard:before{content:"\f0e4"}.wdv-icon-comment-alt:before{content:"\f0e5"}.wdv-icon-comments-alt:before{content:"\f0e6"}.wdv-icon-bolt:before{content:"\f0e7"}.wdv-icon-sitemap:before{content:"\f0e8"}.wdv-icon-umbrella:before{content:"\f0e9"}.wdv-icon-paste:before{content:"\f0ea"}.wdv-icon-user-md:before{content:"\f200"}
|
2307 |
|
2345 |
-webkit-font-smoothing: antialiased;
|
2346 |
-moz-osx-font-smoothing: grayscale;
|
2347 |
}
|
2348 |
+
.dev-icon-comment:before {
|
2349 |
+
content: "\41";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2350 |
}
|
2351 |
+
.dev-icon-speach:before {
|
2352 |
+
content: "\6d";
|
|
|
2353 |
}
|
2354 |
+
.dev-icon-speach_alt:before {
|
2355 |
content: "\3d";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2356 |
}
|
2357 |
+
.dev-icon-download:before {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2358 |
content: "\42";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2359 |
}
|
2360 |
+
.dev-icon-download_alt:before {
|
2361 |
+
content: "\69";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2362 |
}
|
2363 |
+
.dev-icon-upload:before {
|
2364 |
+
content: "\56";
|
|
|
2365 |
}
|
2366 |
+
.dev-icon-error:before {
|
2367 |
+
content: "\45";
|
|
|
2368 |
}
|
2369 |
+
.dev-icon-archive:before {
|
2370 |
+
content: "\4f";
|
|
|
2371 |
}
|
2372 |
+
.dev-icon-logo:before {
|
2373 |
content: "\39";
|
|
|
2374 |
}
|
2375 |
+
.dev-icon-logo_alt:before {
|
2376 |
content: "\30";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2377 |
}
|
2378 |
+
.dev-icon-wordpress:before {
|
2379 |
+
content: "\47";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2380 |
}
|
2381 |
+
.dev-icon-facebook:before {
|
2382 |
+
content: "\46";
|
|
|
2383 |
}
|
2384 |
+
.dev-icon-twitter:before {
|
2385 |
+
content: "\49";
|
|
|
2386 |
}
|
2387 |
+
.dev-icon-github:before {
|
2388 |
+
content: "\4a";
|
|
|
2389 |
}
|
2390 |
+
.dev-icon-stackoverflow:before {
|
2391 |
+
content: "\4b";
|
|
|
2392 |
}
|
2393 |
+
.dev-icon-linkedin:before {
|
2394 |
+
content: "\4c";
|
|
|
2395 |
}
|
2396 |
+
.dev-icon-medium:before {
|
2397 |
+
content: "\4d";
|
|
|
2398 |
}
|
2399 |
+
.dev-icon-quora:before {
|
2400 |
+
content: "\51";
|
|
|
2401 |
}
|
2402 |
+
.dev-icon-seo:before {
|
2403 |
+
content: "\53";
|
|
|
2404 |
}
|
2405 |
+
.dev-icon-minify:before {
|
2406 |
+
content: "\4e";
|
|
|
2407 |
}
|
2408 |
+
.dev-icon-uptime:before {
|
2409 |
+
content: "\55";
|
|
|
2410 |
}
|
2411 |
+
.dev-icon-world:before {
|
2412 |
+
content: "\57";
|
|
|
2413 |
}
|
2414 |
+
.dev-icon-pos_footer:before {
|
2415 |
content: "\59";
|
|
|
2416 |
}
|
2417 |
+
.dev-icon-pos_middle:before {
|
2418 |
+
content: "\58";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2419 |
}
|
2420 |
+
.dev-icon-pos_header:before {
|
2421 |
+
content: "\43";
|
|
|
2422 |
}
|
2423 |
+
.dev-icon-book:before {
|
2424 |
+
content: "\62";
|
|
|
2425 |
}
|
2426 |
+
.dev-icon-support:before {
|
2427 |
+
content: "\6e";
|
|
|
2428 |
}
|
2429 |
+
.dev-icon-rocket:before {
|
2430 |
+
content: "\6a";
|
|
|
2431 |
}
|
2432 |
+
.dev-icon-rocket_alt:before {
|
2433 |
+
content: "\76";
|
|
|
2434 |
}
|
2435 |
+
.dev-icon-lock:before {
|
2436 |
+
content: "\61";
|
|
|
2437 |
}
|
2438 |
+
.dev-icon-unlock:before {
|
2439 |
+
content: "\63";
|
|
|
2440 |
}
|
2441 |
+
.dev-icon-plugin:before {
|
2442 |
+
content: "\64";
|
|
|
2443 |
}
|
2444 |
+
.dev-icon-caret_up:before {
|
2445 |
+
content: "\72";
|
|
|
2446 |
}
|
2447 |
+
.dev-icon-caret_right:before {
|
2448 |
+
content: "\33";
|
|
|
2449 |
}
|
2450 |
+
.dev-icon-caret_down:before {
|
2451 |
+
content: "\65";
|
|
|
2452 |
}
|
2453 |
+
.dev-icon-caret_left:before {
|
2454 |
+
content: "\7c";
|
|
|
2455 |
}
|
2456 |
+
.dev-icon-power:before {
|
2457 |
content: "\66";
|
|
|
2458 |
}
|
2459 |
+
.dev-icon-radio_default:before {
|
2460 |
content: "\68";
|
|
|
2461 |
}
|
2462 |
+
.dev-icon-radio:before {
|
2463 |
+
content: "\68";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2464 |
}
|
2465 |
+
.dev-icon-radio_checked:before {
|
2466 |
+
content: "\67";
|
|
|
2467 |
}
|
2468 |
+
.dev-icon-cross:before {
|
2469 |
content: "\79";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2470 |
}
|
2471 |
+
.dev-icon-tick:before {
|
2472 |
+
content: "\7a";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2473 |
}
|
2474 |
+
.dev-icon-search:before {
|
2475 |
+
content: "\6b";
|
|
|
2476 |
}
|
2477 |
+
.dev-icon-info:before {
|
2478 |
+
content: "\70";
|
|
|
2479 |
}
|
2480 |
+
.dev-icon-devman:before {
|
2481 |
content: "\31";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2482 |
}
|
2483 |
+
.dev-icon-upfront:before {
|
2484 |
+
content: "\37";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2485 |
}
|
2486 |
+
.dev-icon-hummingbird:before {
|
2487 |
content: "\48";
|
|
|
2488 |
}
|
2489 |
+
.dev-icon-defender:before {
|
2490 |
+
content: "\44";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2491 |
}
|
2492 |
+
.dev-icon-theme:before {
|
2493 |
+
content: "\6c";
|
|
|
2494 |
}
|
2495 |
+
.dev-icon-pencil:before {
|
2496 |
content: "\50";
|
|
|
2497 |
}
|
2498 |
+
.dev-icon-star:before {
|
2499 |
+
content: "\5a";
|
|
|
|
|
|
|
|
|
|
|
2500 |
}
|
2501 |
+
.dev-icon-trash:before {
|
2502 |
+
content: "\54";
|
|
|
2503 |
}
|
2504 |
+
.dev-icon-recycle:before {
|
2505 |
+
content: "\52";
|
|
|
2506 |
}
|
2507 |
+
.dev-icon-fix:before {
|
2508 |
content: "\32";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2509 |
}
|
2510 |
+
.dev-icon-edit:before {
|
2511 |
+
content: "\6f";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2512 |
}
|
2513 |
+
.dev-icon-options:before {
|
2514 |
+
content: "\73";
|
|
|
2515 |
}
|
2516 |
+
.dev-icon-cog:before {
|
2517 |
+
content: "\74";
|
|
|
2518 |
}
|
2519 |
+
.dev-icon-badge:before {
|
2520 |
+
content: "\71";
|
|
|
2521 |
}
|
2522 |
+
.dev-icon-cylinder:before {
|
2523 |
+
content: "\75";
|
|
|
2524 |
}
|
2525 |
+
.dev-icon-trophy:before {
|
2526 |
+
content: "\78";
|
|
|
2527 |
}
|
2528 |
+
.dev-icon-bell:before {
|
2529 |
content: "\77";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2530 |
}
|
2531 |
|
2532 |
/* ****************************************************************************
|
extras/dash-notice/wpmudev-dash-notification.php
DELETED
@@ -1,1306 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/////////////////////////////////////////////////////////////////////////
|
3 |
-
/* -------- WPMU DEV Dashboard Notice - Aaron Edwards (Incsub) ------- */
|
4 |
-
/* This provides notices of available updates for our premium products */
|
5 |
-
if ( ! class_exists( 'WPMUDEV_Dashboard_Notice4' ) ) {
|
6 |
-
class WPMUDEV_Dashboard_Notice4 {
|
7 |
-
|
8 |
-
var $version = '4.2';
|
9 |
-
var $screen_id = false;
|
10 |
-
var $product_name = false;
|
11 |
-
var $product_update = false;
|
12 |
-
var $theme_pack = 128;
|
13 |
-
var $server_url = 'https://premium.wpmudev.org/api/dashboard/v1/';
|
14 |
-
var $update_count = 0;
|
15 |
-
|
16 |
-
function __construct() {
|
17 |
-
add_action( 'init', array( &$this, 'init' ) );
|
18 |
-
add_action( 'plugins_loaded', array( &$this, 'remove_older' ), 5 );
|
19 |
-
}
|
20 |
-
|
21 |
-
function remove_older() {
|
22 |
-
global $WPMUDEV_Dashboard_Notice3;
|
23 |
-
|
24 |
-
//remove 3.0 notices
|
25 |
-
if ( is_object( $WPMUDEV_Dashboard_Notice3 ) ) {
|
26 |
-
remove_action( 'init', array( $WPMUDEV_Dashboard_Notice3, 'init' ) );
|
27 |
-
remove_action( 'plugins_loaded', array( $WPMUDEV_Dashboard_Notice3, 'init' ) );
|
28 |
-
} else if ( method_exists( 'WPMUDEV_Dashboard_Notice3', 'init' ) ) { //if class is not in global (some projects included inside a method), we have to use a hacky way to remove the filter
|
29 |
-
$this->deregister_hook( 'init', 'WPMUDEV_Dashboard_Notice3', 'init', 10 );
|
30 |
-
$this->deregister_hook( 'plugins_loaded', 'WPMUDEV_Dashboard_Notice3', 'init', 10 );
|
31 |
-
}
|
32 |
-
|
33 |
-
//remove version 2.0
|
34 |
-
if ( method_exists( 'WPMUDEV_Dashboard_Notice', 'init' ) ) {
|
35 |
-
$this->deregister_hook( 'init', 'WPMUDEV_Dashboard_Notice', 'init', 10 );
|
36 |
-
$this->deregister_hook( 'plugins_loaded', 'WPMUDEV_Dashboard_Notice', 'init', 10 );
|
37 |
-
}
|
38 |
-
|
39 |
-
//remove version 1.0
|
40 |
-
remove_action( 'admin_notices', 'wdp_un_check', 5 );
|
41 |
-
remove_action( 'network_admin_notices', 'wdp_un_check', 5 );
|
42 |
-
}
|
43 |
-
|
44 |
-
/* Adapted from: https://github.com/herewithme/wp-filters-extras/ - Copyright 2012 Amaury Balmer - amaury@beapi.fr */
|
45 |
-
function deregister_hook( $hook_name, $class_name, $method_name, $priority ) {
|
46 |
-
global $wp_filter;
|
47 |
-
|
48 |
-
// Take only filters on right hook name and priority
|
49 |
-
if ( ! isset( $wp_filter[ $hook_name ][ $priority ] ) || ! is_array( $wp_filter[ $hook_name ][ $priority ] ) ) {
|
50 |
-
return false;
|
51 |
-
}
|
52 |
-
|
53 |
-
// Loop on filters registered
|
54 |
-
foreach ( (array) $wp_filter[ $hook_name ][ $priority ] as $unique_id => $filter_array ) {
|
55 |
-
// Test if filter is an array ! (always for class/method)
|
56 |
-
if ( isset( $filter_array['function'] ) && is_array( $filter_array['function'] ) ) {
|
57 |
-
// Test if object is a class, class and method is equal to param !
|
58 |
-
if ( is_object( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) == $class_name && $filter_array['function'][1] == $method_name ) {
|
59 |
-
if ( class_exists( 'WP_Hook' ) ) { //introduced in WP 4.7 https://make.wordpress.org/core/2016/09/08/wp_hook-next-generation-actions-and-filters/
|
60 |
-
unset( $wp_filter[ $hook_name ]->callbacks[ $priority ][ $unique_id ] );
|
61 |
-
} else {
|
62 |
-
unset( $wp_filter[ $hook_name ][ $priority ][ $unique_id ] );
|
63 |
-
}
|
64 |
-
return true;
|
65 |
-
}
|
66 |
-
}
|
67 |
-
}
|
68 |
-
|
69 |
-
return false;
|
70 |
-
}
|
71 |
-
|
72 |
-
function init() {
|
73 |
-
global $wpmudev_un;
|
74 |
-
|
75 |
-
if ( class_exists( 'WPMUDEV_Dashboard' ) || ( isset( $wpmudev_un->version ) && version_compare( $wpmudev_un->version, '3.4', '<' ) ) ) {
|
76 |
-
return;
|
77 |
-
}
|
78 |
-
|
79 |
-
// Schedule update cron on main site only
|
80 |
-
if ( is_main_site() ) {
|
81 |
-
if ( ! wp_next_scheduled( 'wpmudev_scheduled_jobs' ) ) {
|
82 |
-
wp_schedule_event( time(), 'twicedaily', 'wpmudev_scheduled_jobs' );
|
83 |
-
}
|
84 |
-
|
85 |
-
add_action( 'wpmudev_scheduled_jobs', array( $this, 'updates_check' ) );
|
86 |
-
}
|
87 |
-
add_action( 'delete_site_transient_update_plugins', array(
|
88 |
-
&$this,
|
89 |
-
'updates_check'
|
90 |
-
) ); //refresh after upgrade/install
|
91 |
-
add_action( 'delete_site_transient_update_themes', array(
|
92 |
-
&$this,
|
93 |
-
'updates_check'
|
94 |
-
) ); //refresh after upgrade/install
|
95 |
-
|
96 |
-
if ( is_admin() && current_user_can( 'install_plugins' ) ) {
|
97 |
-
|
98 |
-
add_action( 'site_transient_update_plugins', array( &$this, 'filter_plugin_count' ) );
|
99 |
-
add_action( 'site_transient_update_themes', array( &$this, 'filter_theme_count' ) );
|
100 |
-
add_filter( 'plugins_api', array(
|
101 |
-
&$this,
|
102 |
-
'filter_plugin_info'
|
103 |
-
), 101, 3 ); //run later to work with bad autoupdate plugins
|
104 |
-
add_filter( 'themes_api', array(
|
105 |
-
&$this,
|
106 |
-
'filter_plugin_info'
|
107 |
-
), 101, 3 ); //run later to work with bad autoupdate plugins
|
108 |
-
add_action( 'load-plugins.php', array( &$this, 'filter_plugin_rows' ), 21 ); //make sure it runs after WP's
|
109 |
-
add_action( 'load-themes.php', array( &$this, 'filter_plugin_rows' ), 21 ); //make sure it runs after WP's
|
110 |
-
add_action( 'core_upgrade_preamble', array( &$this, 'disable_checkboxes' ) );
|
111 |
-
add_action( 'activated_plugin', array( &$this, 'set_activate_flag' ) );
|
112 |
-
add_action( 'wp_ajax_wdpun-changelog', array( &$this, 'popup_changelog_ajax' ) );
|
113 |
-
add_action( 'wp_ajax_wdpun-dismiss', array( &$this, 'dismiss_ajax' ) );
|
114 |
-
|
115 |
-
//if dashboard is installed but not activated
|
116 |
-
if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
|
117 |
-
if ( ! get_site_option( 'wdp_un_autoactivated' ) ) {
|
118 |
-
//include plugin API if necessary
|
119 |
-
if ( ! function_exists( 'activate_plugin' ) ) {
|
120 |
-
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
121 |
-
}
|
122 |
-
$result = activate_plugin( '/wpmudev-updates/update-notifications.php', network_admin_url( 'admin.php?page=wpmudev' ), is_multisite() );
|
123 |
-
if ( ! is_wp_error( $result ) ) { //if autoactivate successful don't show notices
|
124 |
-
update_site_option( 'wdp_un_autoactivated', 1 );
|
125 |
-
|
126 |
-
return;
|
127 |
-
}
|
128 |
-
}
|
129 |
-
|
130 |
-
add_action( 'admin_print_styles', array( &$this, 'notice_styles' ) );
|
131 |
-
add_action( 'admin_print_footer_scripts', array( &$this, 'notice_scripts' ) );
|
132 |
-
add_action( 'all_admin_notices', array( &$this, 'activate_notice' ), 5 );
|
133 |
-
} else { //dashboard not installed at all
|
134 |
-
if ( get_site_option( 'wdp_un_autoactivated' ) ) {
|
135 |
-
update_site_option( 'wdp_un_autoactivated', 0 );//reset flag when dashboard is deleted
|
136 |
-
}
|
137 |
-
add_action( 'admin_print_styles', array( &$this, 'notice_styles' ) );
|
138 |
-
add_action( 'admin_print_footer_scripts', array( &$this, 'notice_scripts' ) );
|
139 |
-
add_action( 'all_admin_notices', array( &$this, 'install_notice' ), 5 );
|
140 |
-
}
|
141 |
-
}
|
142 |
-
}
|
143 |
-
|
144 |
-
function is_allowed_screen() {
|
145 |
-
global $wpmudev_notices;
|
146 |
-
$screen = get_current_screen();
|
147 |
-
if ($screen && is_object($screen)) $this->screen_id = $screen->id;
|
148 |
-
|
149 |
-
//Show special message right after plugin activation
|
150 |
-
if ( in_array( $this->screen_id, array(
|
151 |
-
'plugins',
|
152 |
-
'plugins-network'
|
153 |
-
) ) && ( isset( $_GET['activate'] ) || isset( $_GET['activate-multi'] ) )
|
154 |
-
) {
|
155 |
-
$activated = get_site_option( 'wdp_un_activated_flag' );
|
156 |
-
if ( $activated === false ) {
|
157 |
-
$activated = 1;
|
158 |
-
} //on first encounter of new installed notice show
|
159 |
-
if ( $activated ) {
|
160 |
-
if ( $activated >= 2 ) {
|
161 |
-
update_site_option( 'wdp_un_activated_flag', 0 );
|
162 |
-
} else {
|
163 |
-
update_site_option( 'wdp_un_activated_flag', 2 );
|
164 |
-
}
|
165 |
-
|
166 |
-
return true;
|
167 |
-
}
|
168 |
-
}
|
169 |
-
|
170 |
-
//check dismiss flag
|
171 |
-
$dismissed = get_site_option( 'wdp_un_dismissed' );
|
172 |
-
if ( $dismissed && $dismissed > strtotime( '-1 week' ) ) {
|
173 |
-
return false;
|
174 |
-
}
|
175 |
-
|
176 |
-
//always show on certain core pages if updates are available
|
177 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
178 |
-
if ( is_array( $updates ) && count( $updates ) ) {
|
179 |
-
$this->update_count = count( $updates );
|
180 |
-
if ( in_array( $this->screen_id, array(
|
181 |
-
'update-core',
|
182 |
-
'update-core-network'
|
183 |
-
) ) ) {
|
184 |
-
return true;
|
185 |
-
}
|
186 |
-
}
|
187 |
-
|
188 |
-
//check our registered plugins for hooks
|
189 |
-
if ( isset( $wpmudev_notices ) && is_array( $wpmudev_notices ) ) {
|
190 |
-
foreach ( $wpmudev_notices as $product ) {
|
191 |
-
if ( isset( $product['screens'] ) && is_array( $product['screens'] ) && in_array( $this->screen_id, $product['screens'] ) ) {
|
192 |
-
$this->product_name = $product['name'];
|
193 |
-
//if this plugin needs updating flag it
|
194 |
-
if ( isset( $product['id'] ) && isset( $updates[ $product['id'] ] ) ) {
|
195 |
-
$this->product_update = true;
|
196 |
-
}
|
197 |
-
|
198 |
-
return true;
|
199 |
-
}
|
200 |
-
}
|
201 |
-
}
|
202 |
-
|
203 |
-
return false;
|
204 |
-
}
|
205 |
-
|
206 |
-
function auto_install_url() {
|
207 |
-
$function = is_multisite() ? 'network_admin_url' : 'admin_url';
|
208 |
-
|
209 |
-
return wp_nonce_url( $function( "update.php?action=install-plugin&plugin=install_wpmudev_dash" ), "install-plugin_install_wpmudev_dash" );
|
210 |
-
}
|
211 |
-
|
212 |
-
function activate_url() {
|
213 |
-
$function = is_multisite() ? 'network_admin_url' : 'admin_url';
|
214 |
-
|
215 |
-
return wp_nonce_url( $function( 'plugins.php?action=activate&plugin=wpmudev-updates%2Fupdate-notifications.php' ), 'activate-plugin_wpmudev-updates/update-notifications.php' );
|
216 |
-
}
|
217 |
-
|
218 |
-
function install_notice() {
|
219 |
-
if ( ! $this->is_allowed_screen() ) return; ?>
|
220 |
-
|
221 |
-
<div class="notice wdpun-notice" style="display: none;">
|
222 |
-
|
223 |
-
<input type="hidden" name="msg_id" value="<?php _e( 'install', 'wpmudev' ); ?>" />
|
224 |
-
|
225 |
-
<div class="wdpun-notice-logo"></div>
|
226 |
-
<div class="wdpun-notice-message">
|
227 |
-
<?php
|
228 |
-
if ( $this->product_name ) {
|
229 |
-
if ( $this->product_update ) {
|
230 |
-
printf( __( 'Important updates are available for <strong>%s</strong>. Install the free WPMU DEV Dashboard plugin now for updates and support!', 'wpmudev' ), esc_html( $this->product_name ) );
|
231 |
-
} else {
|
232 |
-
printf( __( '<strong>%s</strong> is almost ready - install the free WPMU DEV Dashboard plugin for updates and support!', 'wpmudev' ), esc_html( $this->product_name ) );
|
233 |
-
}
|
234 |
-
|
235 |
-
} else if ( $this->update_count ) {
|
236 |
-
_e( 'Important updates are available for your WPMU DEV plugins/themes. Install the free WPMU DEV Dashboard plugin now for updates and support!', 'wpmudev' );
|
237 |
-
} else {
|
238 |
-
_e( 'Almost ready - install the free WPMU DEV Dashboard plugin for updates and support!', 'wpmudev' );
|
239 |
-
}
|
240 |
-
?>
|
241 |
-
</div><!-- end wdpun-notice-message -->
|
242 |
-
<div class="wdpun-notice-cta">
|
243 |
-
<a href="<?php echo $this->auto_install_url(); ?>"
|
244 |
-
class="wdpun-button wdpun-button-small"><?php _e( 'Install Plugin', 'wpmudev' ); ?></a>
|
245 |
-
|
246 |
-
<button class="wdpun-button wdpun-button-notice-dismiss"
|
247 |
-
data-msg="<?php _e( 'Saving...', 'wpmudev' ); ?>">
|
248 |
-
<?php _e( 'Dismiss', 'wpmudev' ); ?>
|
249 |
-
</button>
|
250 |
-
</div><!-- end wdpun-notice-cta -->
|
251 |
-
|
252 |
-
</div><!-- end notice wdpun-notice -->
|
253 |
-
|
254 |
-
<?php
|
255 |
-
|
256 |
-
return;
|
257 |
-
}
|
258 |
-
|
259 |
-
function activate_notice() {
|
260 |
-
if ( ! $this->is_allowed_screen() ) return; ?>
|
261 |
-
|
262 |
-
<div class="notice wdpun-notice" style="display: none;">
|
263 |
-
|
264 |
-
<input type="hidden" name="msg_id" value="<?php _e( 'activate', 'wpmudev' ); ?>" />
|
265 |
-
|
266 |
-
<div class="wdpun-notice-logo"><span></span></div>
|
267 |
-
<div class="wdpun-notice-message">
|
268 |
-
<?php
|
269 |
-
if ( $this->product_name ) {
|
270 |
-
if ( $this->product_update ) {
|
271 |
-
printf( __( 'Important updates are available for <strong>%s</strong>. Activate the WPMU DEV Dashboard to update now!', 'wpmudev' ), esc_html( $this->product_name ) );
|
272 |
-
} else {
|
273 |
-
printf( __( 'Just one more step to enable updates and support for <strong>%s</strong>!', 'wpmudev' ), esc_html( $this->product_name ) );
|
274 |
-
}
|
275 |
-
|
276 |
-
} else if ( $this->update_count ) {
|
277 |
-
_e( 'Important updates are available for your WPMU DEV plugins/themes. Activate the WPMU DEV Dashboard to update now!', 'wpmudev' );
|
278 |
-
} else {
|
279 |
-
_e( "Just one more step - activate the WPMU DEV Dashboard plugin and you're all done!", 'wpmudev' );
|
280 |
-
}
|
281 |
-
?>
|
282 |
-
</div><!-- end wdpun-notice-message -->
|
283 |
-
<div class="wdpun-notice-cta">
|
284 |
-
<a href="<?php echo $this->activate_url(); ?>"
|
285 |
-
class="wdpun-button wdpun-button-small"><?php _e( 'Activate WPMU DEV Dashboard', 'wpmudev' ); ?></a>
|
286 |
-
|
287 |
-
<button class="wdpun-button wdpun-button-notice-dismiss"
|
288 |
-
data-msg="<?php _e( 'Saving...', 'wpmudev' ); ?>">
|
289 |
-
<?php _e( 'Dismiss', 'wpmudev' ); ?>
|
290 |
-
</button>
|
291 |
-
</div><!-- end wdpun-notice-cta -->
|
292 |
-
|
293 |
-
</div><!-- end notice wdpun-notice -->
|
294 |
-
|
295 |
-
<?php
|
296 |
-
|
297 |
-
return;
|
298 |
-
}
|
299 |
-
|
300 |
-
function notice_styles() {
|
301 |
-
if ( !$this->is_allowed_screen() ) return;
|
302 |
-
?>
|
303 |
-
<style type="text/css" media="all">
|
304 |
-
.cf:after{content:"";display:table;clear:both}@media only screen and (min-width: 1200px){.hide-to-large{display:none}}@media only screen and (min-width: 1140px){.hide-to-desktop{display:none}}.wrap>.wdpun-notice.notice,.wrap #header>.wdpun-notice.notice{width:100%}.wrap #header>.wdpun-notice.notice{box-shadow:none}.wdpun-notice *,.wdpun-notice *:after,.wdpun-notice *:before{box-sizing:border-box}.wdpun-notice.notice{background:#fff;border:1px solid #E5E5E5;border-radius:6px;box-shadow:0 1px 1px 0 rgba(0,0,0,0.05);clear:both;display:block;font:400 13px/20px "Open Sans",Arial,sans-serif;overflow:hidden;margin:10px 20px 20px 0;min-height:80px;padding:0;position:relative;text-align:center;z-index:1}.wdpun-notice.notice.loading:before{background-color:rgba(255,255,255,0.7);bottom:0;content:attr(data-message);font-size:22px;font-weight:600;left:0;line-height:80px;position:absolute;right:0;text-align:center;top:0;z-index:5}.wdpun-notice.notice.loading>div{-webkit-filter:blur(2px);filter:blur(2px)}.wdpun-notice-logo{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjU2cHgiIGhlaWdodD0iNTZweCIgdmlld0JveD0iMCAwIDU2IDU2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzLjguMyAoMjk4MDIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPndwbXVkZXYtc3ZnPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImlQYWQtUHJvLUxhbmRzY2FwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjAwMDAwMCwgLTIyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0id3BtdWRldi1zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzLjAwMDAwMCwgMjIuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjgsNTYgQzEyLjUzNTg3MSw1NiAwLDQzLjQ2NDEyOSAwLDI4IEMwLDEyLjUzNjc3NDIgMTIuNTM1ODcxLDAgMjgsMCBDNDMuNDY0MTI5LDAgNTYsMTIuNTM2Nzc0MiA1NiwyOCBDNTYsNDMuNDY0MTI5IDQzLjQ2NDEyOSw1NiAyOCw1NiBMMjgsNTYgWiIgaWQ9IkZpbGwtMSIgZmlsbD0iI0ZGRDAwNSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTUxLjQ4Mzg3MSwyOCBDNTEuNDgzODcxLDQwLjk2OTQxOTQgNDAuOTY5NDE5NCw1MS40ODM4NzEgMjgsNTEuNDgzODcxIEMxNS4wMzA1ODA2LDUxLjQ4Mzg3MSA0LjUxNjEyOTAzLDQwLjk2OTQxOTQgNC41MTYxMjkwMywyOCBDNC41MTYxMjkwMywxNS4wMzA1ODA2IDE1LjAzMDU4MDYsNC41MTYxMjkwMyAyOCw0LjUxNjEyOTAzIEM0MC45Njk0MTk0LDQuNTE2MTI5MDMgNTEuNDgzODcxLDE1LjAzMDU4MDYgNTEuNDgzODcxLDI4IiBpZD0iRmlsbC0zIiBmaWxsPSIjMzMzMzMzIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDIuNzc4ODUxNiwzMi42NzY2MzIzIEw0Mi43Nzg4NTE2LDEyLjUzMTA4MzkgTDM5LjUzMDg1MTYsMTUuMDU4MzA5NyBMMzkuNTMwODUxNiwzMi42NzY2MzIzIEwzOS41MjcyMzg3LDMyLjY3NjYzMjMgQzM5LjUyNzIzODcsMzMuNzA4MTE2MSAzOC43ODI5ODA2LDM0LjU0NDUwMzIgMzcuODY2MjA2NSwzNC41NDQ1MDMyIEMzNi45NDY3MjI2LDM0LjU0NDUwMzIgMzYuMjAyNDY0NSwzMy43MDgxMTYxIDM2LjIwMjQ2NDUsMzIuNjc2NjMyMyBMMzYuMjA3ODgzOSwyMy4zMjM3MjkgQzM2LjIwNzg4MzksMjAuMjc0NDM4NyAzNC4wMDU4MTk0LDE3LjgwMTQwNjUgMzEuMjkwNzIyNiwxNy44MDE0MDY1IEMyOC41NzM4MTk0LDE3LjgwMTQwNjUgMjYuMzcyNjU4MSwyMC4yNzQ0Mzg3IDI2LjM3MjY1ODEsMjMuMzIzNzI5IEwyNi4zNzI2NTgxLDMyLjY3NjYzMjMgQzI2LjM3MjY1ODEsMzMuNzA4MTE2MSAyNS42Mjg0LDM0LjU0NDUwMzIgMjQuNzA4OTE2MSwzNC41NDQ1MDMyIEMyMy43OTIxNDE5LDM0LjU0NDUwMzIgMjMuMDQ1MTc0MiwzMy43MDgxMTYxIDIzLjA0NTE3NDIsMzIuNjc2NjMyMyBMMjMuMDUyNCwyMy4zMjM3MjkgQzIzLjA1MjQsMjAuMjc0NDM4NyAyMC44NTEyMzg3LDE3LjgwMTQwNjUgMTguMTM2MTQxOSwxNy44MDE0MDY1IEMxNS40MjEwNDUyLDE3LjgwMTQwNjUgMTMuMjE4OTgwNiwyMC4yNzQ0Mzg3IDEzLjIxODk4MDYsMjMuMzIzNzI5IEwxMy4yMjA3ODcxLDIzLjMyMzcyOSBMMTMuMjIwNzg3MSw0My40NjkyNzc0IEwxNi40Njg3ODcxLDQwLjk0MTE0ODQgTDE2LjQ3MjQsMjMuMzIzNzI5IEMxNi40NzI0LDIyLjI5MjI0NTIgMTcuMjE2NjU4MSwyMS40NTU4NTgxIDE4LjEzNjE0MTksMjEuNDU1ODU4MSBDMTkuMDU0NzIyNiwyMS40NTU4NTgxIDE5Ljc5OTg4MzksMjIuMjkyMjQ1MiAxOS43OTk4ODM5LDIzLjMyMzcyOSBMMTkuNzkyNjU4MSwzMi42NzY2MzIzIEMxOS43OTI2NTgxLDM1LjcyNTkyMjYgMjEuOTkzODE5NCwzOC4xOTg5NTQ4IDI0LjcwODkxNjEsMzguMTk4OTU0OCBDMjcuNDI0MDEyOSwzOC4xOTg5NTQ4IDI5LjYyNTE3NDIsMzUuNzI1OTIyNiAyOS42MjUxNzQyLDMyLjY3NjYzMjMgTDI5LjYyNDI3MSwzMi42NzY2MzIzIEwyOS42MjY5ODA2LDIzLjMyMzcyOSBDMjkuNjI2OTgwNiwyMi4yOTIyNDUyIDMwLjM3MjE0MTksMjEuNDU1ODU4MSAzMS4yOTA3MjI2LDIxLjQ1NTg1ODEgQzMyLjIwODQsMjEuNDU1ODU4MSAzMi45NTI2NTgxLDIyLjI5MjI0NTIgMzIuOTUyNjU4MSwyMy4zMjM3MjkgTDMyLjk0NzIzODcsMzIuNjc2NjMyMyBDMzIuOTQ3MjM4NywzNS43MjU5MjI2IDM1LjE0OTMwMzIsMzguMTk4OTU0OCAzNy44NjYyMDY1LDM4LjE5ODk1NDggQzQwLjU4MDQsMzguMTk4OTU0OCA0Mi43ODA2NTgxLDM1LjcyNTkyMjYgNDIuNzgwNjU4MSwzMi42NzY2MzIzIEw0Mi43Nzg4NTE2LDMyLjY3NjYzMjMgTDQyLjc3ODg1MTYsMzIuNjc2NjMyMyBaIiBpZD0iRmlsbC01IiBmaWxsPSIjRjlFQzFDIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);background-repeat:no-repeat;background-position:50% 50%;display:block;height:56px;margin:10px auto 0;width:56px}.wdpun-notice .wdpun-notice-message{color:#23282D;display:block;font-family:"Open Sans",Arial,sans-serif;font-size:13px;line-height:20px;padding:10px}.wdpun-notice .wdpun-notice-message strong{font-weight:600}.wdpun-notice .wdpun-button{background:#00ACCA;border:1px solid #0087B9;border-radius:2px;color:#fff;cursor:pointer;display:block;font-weight:500;font-size:16px;height:auto;line-height:18px;margin:0;padding:10px 20px;text-decoration:none;-webkit-transition:color 0.3s, opacity 0.3s, background 0.3s;transition:color 0.3s, opacity 0.3s, background 0.3s;white-space:nowrap}.wdpun-notice .wdpun-button:hover:not(:focus):not(:active){background-color:#0093B1;color:#fff}.wdpun-notice .wdpun-button:focus,.wdpun-notice .wdpun-button:active{background:#0082a1;background:-webkit-linear-gradient(top, #0082a1 0%, #008fae 100%);background:linear-gradient(to bottom, #0082a1 0%, #008fae 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#0082a1', endColorstr='#008fae',GradientType=0 );border-color:transparent;color:#fff;outline-color:transparent;outline-style:none}.wdpun-notice .wdpun-button-small{padding:5px 15px}.wdpun-notice .wdpun-button-notice-dismiss{background:transparent;border:none;border-radius:0;color:#C5C5C5;padding:0;text-transform:none;-webkit-transition:color 0.3s;transition:color 0.3s}.wdpun-notice .wdpun-button-notice-dismiss:hover:not(:focus):not(:active),.wdpun-notice .wdpun-button-notice-dismiss:active,.wdpun-notice .wdpun-button-notice-dismiss:focus{background:transparent;color:#666}.wdpun-notice .wdpun-notice-cta{border-top:1px solid #E5E5E5;background:#F8F8F8;clear:both;display:block;padding:15px 20px;position:relative;text-align:center;white-space:nowrap}.wdpun-notice .wdpun-notice-cta .wdpun-button{vertical-align:middle}.wdpun-notice .wdpun-notice-cta .wdpun-button-notice-dismiss{margin:10px auto 0}.wdpun-notice .wdpun-notice-cta input[type="email"]{line-height:20px;margin:0;max-width:320px;min-width:50px;padding-right:0;padding-left:0;text-align:center;vertical-align:middle}@media only screen and (min-width: 601px){.wdpun-notice.notice{text-align:left}.wdpun-notice-logo{float:left;margin:10px}.wdpun-notice .wdpun-notice-message{margin-top:5px;margin-left:76px;padding:10px 20px 10px 10px}.wdpun-notice .wdpun-button{display:inline-block;font-size:14px}}@media only screen and (min-width: 783px){.wdpun-notice .wdpun-notice-cta .wdpun-button-notice-dismiss{margin-top:0}.wdpun-notice button+button,.wdpun-notice .wdpun-button+button,.wdpun-notice button+.wdpun-button,.wdpun-notice .wdpun-button+.wdpun-button,.wdpun-notice a+button,.wdpun-notice a+.wdpun-button{margin-left:10px}}@media only screen and (min-width: 961px){.wdpun-notice.notice{display:table}.wdpun-notice-logo{border-radius:0;height:auto;margin:0;min-height:80px;min-width:80px;width:5%}.wdpun-notice .wdpun-notice-logo,.wdpun-notice .wdpun-notice-message,.wdpun-notice .wdpun-notice-cta{cursor:default;display:table-cell;float:none;vertical-align:middle}.wdpun-notice .wdpun-notice-message{margin-top:0;max-width:100%;min-height:80px;width:75%}.wdpun-notice .wdpun-notice-cta{border-left:1px solid #E5E5E5;border-top:none;padding:0 30px;width:20%}}@media only screen and (min-width: 1140px){.wdpun-notice .wdpun-button{font-size:13px}}
|
305 |
-
</style>
|
306 |
-
<?php
|
307 |
-
}
|
308 |
-
|
309 |
-
function notice_scripts() {
|
310 |
-
if ( !$this->is_allowed_screen() ) return;
|
311 |
-
?>
|
312 |
-
<script type="text/javascript">
|
313 |
-
!function($){function n(){function n(){a.fadeIn(500)}function i(){a.fadeTo(100,0,function(){a.slideUp(100,function(){a.remove()})})}function t(n,t){"0"!==e?(a.attr("data-message",t),a.addClass("saving"),s.action=n,jQuery.post(window.ajaxurl,s,i)):i()}var a=jQuery(".wdpun-notice"),e=a.find("input[name=msg_id]").val(),o=a.find(".wdpun-button-notice-dismiss"),s={};s.msg_id=e,o.click(function(n){n.preventDefault(),t("wdpun-dismiss",o.data("msg"))}),window.setTimeout(n,500)}$(n)}(jQuery);
|
314 |
-
</script>
|
315 |
-
<?php
|
316 |
-
}
|
317 |
-
|
318 |
-
function get_id_plugin( $plugin_file ) {
|
319 |
-
return get_file_data( $plugin_file, array(
|
320 |
-
'name' => 'Plugin Name',
|
321 |
-
'id' => 'WDP ID',
|
322 |
-
'version' => 'Version'
|
323 |
-
) );
|
324 |
-
}
|
325 |
-
|
326 |
-
//simple check for updates
|
327 |
-
function updates_check() {
|
328 |
-
global $wp_version;
|
329 |
-
$local_projects = array();
|
330 |
-
|
331 |
-
//----------------------------------------------------------------------------------//
|
332 |
-
//plugins directory
|
333 |
-
//----------------------------------------------------------------------------------//
|
334 |
-
$plugins_root = WP_PLUGIN_DIR;
|
335 |
-
if ( empty( $plugins_root ) ) {
|
336 |
-
$plugins_root = ABSPATH . 'wp-content/plugins';
|
337 |
-
}
|
338 |
-
|
339 |
-
$plugins_dir = @opendir( $plugins_root );
|
340 |
-
$plugin_files = array();
|
341 |
-
if ( $plugins_dir ) {
|
342 |
-
while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
|
343 |
-
if ( substr( $file, 0, 1 ) == '.' ) {
|
344 |
-
continue;
|
345 |
-
}
|
346 |
-
if ( is_dir( $plugins_root . '/' . $file ) ) {
|
347 |
-
$plugins_subdir = @ opendir( $plugins_root . '/' . $file );
|
348 |
-
if ( $plugins_subdir ) {
|
349 |
-
while ( ( $subfile = readdir( $plugins_subdir ) ) !== false ) {
|
350 |
-
if ( substr( $subfile, 0, 1 ) == '.' ) {
|
351 |
-
continue;
|
352 |
-
}
|
353 |
-
if ( substr( $subfile, - 4 ) == '.php' ) {
|
354 |
-
$plugin_files[] = "$file/$subfile";
|
355 |
-
}
|
356 |
-
}
|
357 |
-
}
|
358 |
-
} else {
|
359 |
-
if ( substr( $file, - 4 ) == '.php' ) {
|
360 |
-
$plugin_files[] = $file;
|
361 |
-
}
|
362 |
-
}
|
363 |
-
}
|
364 |
-
}
|
365 |
-
@closedir( $plugins_dir );
|
366 |
-
@closedir( $plugins_subdir );
|
367 |
-
|
368 |
-
if ( $plugins_dir && ! empty( $plugin_files ) ) {
|
369 |
-
foreach ( $plugin_files as $plugin_file ) {
|
370 |
-
if ( is_readable( "$plugins_root/$plugin_file" ) ) {
|
371 |
-
|
372 |
-
unset( $data );
|
373 |
-
$data = $this->get_id_plugin( "$plugins_root/$plugin_file" );
|
374 |
-
|
375 |
-
if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
|
376 |
-
$local_projects[ $data['id'] ]['type'] = 'plugin';
|
377 |
-
$local_projects[ $data['id'] ]['version'] = $data['version'];
|
378 |
-
$local_projects[ $data['id'] ]['filename'] = $plugin_file;
|
379 |
-
}
|
380 |
-
}
|
381 |
-
}
|
382 |
-
}
|
383 |
-
|
384 |
-
//----------------------------------------------------------------------------------//
|
385 |
-
// mu-plugins directory
|
386 |
-
//----------------------------------------------------------------------------------//
|
387 |
-
$mu_plugins_root = WPMU_PLUGIN_DIR;
|
388 |
-
if ( empty( $mu_plugins_root ) ) {
|
389 |
-
$mu_plugins_root = ABSPATH . 'wp-content/mu-plugins';
|
390 |
-
}
|
391 |
-
|
392 |
-
if ( is_dir( $mu_plugins_root ) && $mu_plugins_dir = @opendir( $mu_plugins_root ) ) {
|
393 |
-
while ( ( $file = readdir( $mu_plugins_dir ) ) !== false ) {
|
394 |
-
if ( substr( $file, - 4 ) == '.php' ) {
|
395 |
-
if ( is_readable( "$mu_plugins_root/$file" ) ) {
|
396 |
-
|
397 |
-
unset( $data );
|
398 |
-
$data = $this->get_id_plugin( "$mu_plugins_root/$file" );
|
399 |
-
|
400 |
-
if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
|
401 |
-
$local_projects[ $data['id'] ]['type'] = 'mu-plugin';
|
402 |
-
$local_projects[ $data['id'] ]['version'] = $data['version'];
|
403 |
-
$local_projects[ $data['id'] ]['filename'] = $file;
|
404 |
-
}
|
405 |
-
}
|
406 |
-
}
|
407 |
-
}
|
408 |
-
@closedir( $mu_plugins_dir );
|
409 |
-
}
|
410 |
-
|
411 |
-
//----------------------------------------------------------------------------------//
|
412 |
-
// wp-content directory
|
413 |
-
//----------------------------------------------------------------------------------//
|
414 |
-
$content_plugins_root = WP_CONTENT_DIR;
|
415 |
-
if ( empty( $content_plugins_root ) ) {
|
416 |
-
$content_plugins_root = ABSPATH . 'wp-content';
|
417 |
-
}
|
418 |
-
|
419 |
-
$content_plugins_dir = @opendir( $content_plugins_root );
|
420 |
-
$content_plugin_files = array();
|
421 |
-
if ( $content_plugins_dir ) {
|
422 |
-
while ( ( $file = readdir( $content_plugins_dir ) ) !== false ) {
|
423 |
-
if ( substr( $file, 0, 1 ) == '.' ) {
|
424 |
-
continue;
|
425 |
-
}
|
426 |
-
if ( ! is_dir( $content_plugins_root . '/' . $file ) ) {
|
427 |
-
if ( substr( $file, - 4 ) == '.php' ) {
|
428 |
-
$content_plugin_files[] = $file;
|
429 |
-
}
|
430 |
-
}
|
431 |
-
}
|
432 |
-
}
|
433 |
-
@closedir( $content_plugins_dir );
|
434 |
-
|
435 |
-
if ( $content_plugins_dir && ! empty( $content_plugin_files ) ) {
|
436 |
-
foreach ( $content_plugin_files as $content_plugin_file ) {
|
437 |
-
if ( is_readable( "$content_plugins_root/$content_plugin_file" ) ) {
|
438 |
-
unset( $data );
|
439 |
-
$data = $this->get_id_plugin( "$content_plugins_root/$content_plugin_file" );
|
440 |
-
|
441 |
-
if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
|
442 |
-
$local_projects[ $data['id'] ]['type'] = 'drop-in';
|
443 |
-
$local_projects[ $data['id'] ]['version'] = $data['version'];
|
444 |
-
$local_projects[ $data['id'] ]['filename'] = $content_plugin_file;
|
445 |
-
}
|
446 |
-
}
|
447 |
-
}
|
448 |
-
}
|
449 |
-
|
450 |
-
//----------------------------------------------------------------------------------//
|
451 |
-
//themes directory
|
452 |
-
//----------------------------------------------------------------------------------//
|
453 |
-
$themes_root = WP_CONTENT_DIR . '/themes';
|
454 |
-
if ( empty( $themes_root ) ) {
|
455 |
-
$themes_root = ABSPATH . 'wp-content/themes';
|
456 |
-
}
|
457 |
-
|
458 |
-
$themes_dir = @opendir( $themes_root );
|
459 |
-
$themes_files = array();
|
460 |
-
$local_themes = array();
|
461 |
-
if ( $themes_dir ) {
|
462 |
-
while ( ( $file = readdir( $themes_dir ) ) !== false ) {
|
463 |
-
if ( substr( $file, 0, 1 ) == '.' ) {
|
464 |
-
continue;
|
465 |
-
}
|
466 |
-
if ( is_dir( $themes_root . '/' . $file ) ) {
|
467 |
-
$themes_subdir = @ opendir( $themes_root . '/' . $file );
|
468 |
-
if ( $themes_subdir ) {
|
469 |
-
while ( ( $subfile = readdir( $themes_subdir ) ) !== false ) {
|
470 |
-
if ( substr( $subfile, 0, 1 ) == '.' ) {
|
471 |
-
continue;
|
472 |
-
}
|
473 |
-
if ( substr( $subfile, - 4 ) == '.css' ) {
|
474 |
-
$themes_files[] = "$file/$subfile";
|
475 |
-
}
|
476 |
-
}
|
477 |
-
}
|
478 |
-
} else {
|
479 |
-
if ( substr( $file, - 4 ) == '.css' ) {
|
480 |
-
$themes_files[] = $file;
|
481 |
-
}
|
482 |
-
}
|
483 |
-
}
|
484 |
-
}
|
485 |
-
@closedir( $themes_dir );
|
486 |
-
@closedir( $themes_subdir );
|
487 |
-
|
488 |
-
if ( $themes_dir && ! empty( $themes_files ) ) {
|
489 |
-
foreach ( $themes_files as $themes_file ) {
|
490 |
-
|
491 |
-
//skip child themes
|
492 |
-
if ( strpos( $themes_file, '-child' ) !== false ) {
|
493 |
-
continue;
|
494 |
-
}
|
495 |
-
|
496 |
-
if ( is_readable( "$themes_root/$themes_file" ) ) {
|
497 |
-
|
498 |
-
unset( $data );
|
499 |
-
$data = $this->get_id_plugin( "$themes_root/$themes_file" );
|
500 |
-
|
501 |
-
if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
|
502 |
-
$local_projects[ $data['id'] ]['type'] = 'theme';
|
503 |
-
$local_projects[ $data['id'] ]['filename'] = substr( $themes_file, 0, strpos( $themes_file, '/' ) );
|
504 |
-
|
505 |
-
//keep record of all themes for 133 themepack
|
506 |
-
if ( $data['id'] == $this->theme_pack ) {
|
507 |
-
$local_themes[ $themes_file ]['id'] = $data['id'];
|
508 |
-
$local_themes[ $themes_file ]['filename'] = substr( $themes_file, 0, strpos( $themes_file, '/' ) );
|
509 |
-
$local_themes[ $themes_file ]['version'] = $data['version'];
|
510 |
-
//increment 133 theme pack version to lowest in all of them
|
511 |
-
if ( isset( $local_projects[ $data['id'] ]['version'] ) && version_compare( $data['version'], $local_projects[ $data['id'] ]['version'], '<' ) ) {
|
512 |
-
$local_projects[ $data['id'] ]['version'] = $data['version'];
|
513 |
-
} else if ( ! isset( $local_projects[ $data['id'] ]['version'] ) ) {
|
514 |
-
$local_projects[ $data['id'] ]['version'] = $data['version'];
|
515 |
-
}
|
516 |
-
} else {
|
517 |
-
$local_projects[ $data['id'] ]['version'] = $data['version'];
|
518 |
-
}
|
519 |
-
}
|
520 |
-
}
|
521 |
-
}
|
522 |
-
}
|
523 |
-
update_site_option( 'wdp_un_local_themes', $local_themes );
|
524 |
-
|
525 |
-
update_site_option( 'wdp_un_local_projects', $local_projects );
|
526 |
-
|
527 |
-
//now check the API
|
528 |
-
|
529 |
-
$projects = array();
|
530 |
-
$theme = wp_get_theme();
|
531 |
-
$ms_allowed = $theme->get_allowed();
|
532 |
-
foreach ( $local_projects as $pid => $item ) {
|
533 |
-
if ( ! empty( $blog_projects[ $pid ] ) ) { //not yet implemented
|
534 |
-
// This project is activated on a blog!
|
535 |
-
$active = true;
|
536 |
-
} else {
|
537 |
-
if ( is_multisite() ) {
|
538 |
-
if ( 'theme' == $item['type'] ) {
|
539 |
-
// If the theme is available on main site it's "active".
|
540 |
-
$slug = $item['filename'];
|
541 |
-
$active = ! empty( $ms_allowed[ $slug ] );
|
542 |
-
} else {
|
543 |
-
$active = is_plugin_active_for_network( $item['filename'] );
|
544 |
-
}
|
545 |
-
} else {
|
546 |
-
if ( 'theme' == $item['type'] ) {
|
547 |
-
$slug = $item['filename'];
|
548 |
-
$active = ( $theme->stylesheet == $slug || $theme->template == $slug );
|
549 |
-
} else {
|
550 |
-
$active = is_plugin_active( $item['filename'] );
|
551 |
-
}
|
552 |
-
}
|
553 |
-
}
|
554 |
-
$extra = '';
|
555 |
-
|
556 |
-
/**
|
557 |
-
* Collect extra data from individual plugins.
|
558 |
-
*
|
559 |
-
* @since 4.0.0
|
560 |
-
* @api wpmudev_api_project_extra_data-$pid
|
561 |
-
*
|
562 |
-
* @param string $extra Default extra data is an empty string.
|
563 |
-
*/
|
564 |
-
$extra = apply_filters( "wpmudev_api_project_extra_data-$pid", $extra );
|
565 |
-
$extra = apply_filters( 'wpmudev_api_project_extra_data', $extra, $pid );
|
566 |
-
|
567 |
-
$projects[ $pid ] = array(
|
568 |
-
'version' => $item['version'],
|
569 |
-
'active' => $active ? true : false,
|
570 |
-
'extra' => $extra,
|
571 |
-
);
|
572 |
-
}
|
573 |
-
|
574 |
-
//get WP/BP version string to help with support
|
575 |
-
$wp_ver = is_multisite() ? "WordPress Multisite $wp_version" : "WordPress $wp_version";
|
576 |
-
if ( defined( 'BP_VERSION' ) ) {
|
577 |
-
$wp_ver .= ', BuddyPress ' . BP_VERSION;
|
578 |
-
}
|
579 |
-
|
580 |
-
//add blog count if multisite
|
581 |
-
$blog_count = is_multisite() ? get_blog_count() : 1;
|
582 |
-
|
583 |
-
$url = $this->server_url . 'updates';
|
584 |
-
|
585 |
-
$options = array(
|
586 |
-
'timeout' => 15,
|
587 |
-
'sslverify' => false, // Many hosts have no updated CA bundle.
|
588 |
-
'user-agent' => 'Dashboard Notification/' . $this->version
|
589 |
-
);
|
590 |
-
|
591 |
-
$options['body'] = array(
|
592 |
-
'blog_count' => $blog_count,
|
593 |
-
'wp_version' => $wp_ver,
|
594 |
-
'projects' => json_encode( $projects ),
|
595 |
-
'domain' => network_site_url(),
|
596 |
-
'admin_url' => network_admin_url(),
|
597 |
-
'home_url' => network_home_url(),
|
598 |
-
);
|
599 |
-
|
600 |
-
$response = wp_remote_post( $url, $options );
|
601 |
-
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
602 |
-
$data = $response['body'];
|
603 |
-
if ( $data != 'error' ) {
|
604 |
-
$data = json_decode( $data, true );
|
605 |
-
if ( is_array( $data ) ) {
|
606 |
-
|
607 |
-
//we've made it here with no errors, now check for available updates
|
608 |
-
$remote_projects = isset( $data['projects'] ) ? $data['projects'] : array();
|
609 |
-
$updates = array();
|
610 |
-
|
611 |
-
//check for updates
|
612 |
-
if ( is_array( $remote_projects ) ) {
|
613 |
-
foreach ( $remote_projects as $id => $remote_project ) {
|
614 |
-
if ( isset( $local_projects[ $id ] ) && is_array( $local_projects[ $id ] ) ) {
|
615 |
-
//match
|
616 |
-
$local_version = $local_projects[ $id ]['version'];
|
617 |
-
$remote_version = $remote_project['version'];
|
618 |
-
|
619 |
-
if ( version_compare( $remote_version, $local_version, '>' ) ) {
|
620 |
-
//add to array
|
621 |
-
$updates[ $id ] = $local_projects[ $id ];
|
622 |
-
$updates[ $id ]['url'] = $remote_project['url'];
|
623 |
-
$updates[ $id ]['name'] = $remote_project['name'];
|
624 |
-
$updates[ $id ]['version'] = $local_version;
|
625 |
-
$updates[ $id ]['new_version'] = $remote_version;
|
626 |
-
$updates[ $id ]['autoupdate'] = $remote_project['autoupdate'];
|
627 |
-
}
|
628 |
-
}
|
629 |
-
}
|
630 |
-
|
631 |
-
//record results
|
632 |
-
update_site_option( 'wdp_un_updates_available', $updates );
|
633 |
-
} else {
|
634 |
-
return false;
|
635 |
-
}
|
636 |
-
}
|
637 |
-
}
|
638 |
-
}
|
639 |
-
}
|
640 |
-
|
641 |
-
function filter_plugin_info( $res, $action, $args ) {
|
642 |
-
global $wp_version;
|
643 |
-
$cur_wp_version = preg_replace( '/-.*$/', '', $wp_version );
|
644 |
-
|
645 |
-
if ( ( $action == 'plugin_information' || $action == 'theme_information' ) && strpos( $args->slug, 'wpmudev_install' ) !== false ) {
|
646 |
-
$string = explode( '-', $args->slug );
|
647 |
-
$id = intval( $string[1] );
|
648 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
649 |
-
//if in details iframe on update core page short-curcuit it
|
650 |
-
if ( did_action( 'install_plugins_pre_plugin-information' ) && is_array( $updates ) && isset( $updates[ $id ] ) ) {
|
651 |
-
$this->popup_changelog( $id );
|
652 |
-
}
|
653 |
-
|
654 |
-
$res = new stdClass;
|
655 |
-
$res->name = $updates[ $id ]['name'];
|
656 |
-
$res->slug = sanitize_title( $updates[ $id ]['name'] );
|
657 |
-
$res->version = $updates[ $id ]['version'];
|
658 |
-
$res->rating = 100;
|
659 |
-
$res->homepage = $updates[ $id ]['url'];
|
660 |
-
$res->download_link = '';
|
661 |
-
$res->tested = $cur_wp_version;
|
662 |
-
|
663 |
-
return $res;
|
664 |
-
}
|
665 |
-
|
666 |
-
if ( $action == 'plugin_information' && strpos( $args->slug, 'install_wpmudev_dash' ) !== false ) {
|
667 |
-
$res = new stdClass;
|
668 |
-
$res->name = 'WPMU DEV Dashboard';
|
669 |
-
$res->slug = 'wpmu-dev-dashboard';
|
670 |
-
$res->version = '';
|
671 |
-
$res->rating = 100;
|
672 |
-
$res->homepage = 'https://premium.wpmudev.org/project/wpmu-dev-dashboard/';
|
673 |
-
$res->download_link = $this->server_url . "download-dashboard";
|
674 |
-
$res->tested = $cur_wp_version;
|
675 |
-
|
676 |
-
return $res;
|
677 |
-
}
|
678 |
-
|
679 |
-
return $res;
|
680 |
-
}
|
681 |
-
|
682 |
-
function filter_plugin_rows() {
|
683 |
-
if ( ! current_user_can( 'update_plugins' ) ) {
|
684 |
-
return;
|
685 |
-
}
|
686 |
-
|
687 |
-
//don't show on per site plugins list, just like core
|
688 |
-
if ( is_multisite() && ! is_network_admin() ) { return; }
|
689 |
-
|
690 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
691 |
-
if ( is_array( $updates ) && count( $updates ) ) {
|
692 |
-
foreach ( $updates as $id => $plugin ) {
|
693 |
-
if ( $plugin['autoupdate'] != '2' ) {
|
694 |
-
if ( $plugin['type'] == 'theme' ) {
|
695 |
-
remove_all_actions( 'after_theme_row_' . $plugin['filename'] );
|
696 |
-
add_action( 'after_theme_row_' . $plugin['filename'], array( &$this, 'plugin_row' ), 99, 2 );
|
697 |
-
} else {
|
698 |
-
remove_all_actions( 'after_plugin_row_' . $plugin['filename'] );
|
699 |
-
add_action( 'after_plugin_row_' . $plugin['filename'], array(
|
700 |
-
&$this,
|
701 |
-
'plugin_row'
|
702 |
-
), 99, 2 );
|
703 |
-
}
|
704 |
-
}
|
705 |
-
}
|
706 |
-
}
|
707 |
-
|
708 |
-
$local_themes = get_site_option( 'wdp_un_local_themes' );
|
709 |
-
if ( is_array( $local_themes ) && count( $local_themes ) ) {
|
710 |
-
foreach ( $local_themes as $id => $plugin ) {
|
711 |
-
remove_all_actions( 'after_theme_row_' . $plugin['filename'] );
|
712 |
-
//only add the notice if specific version is wrong
|
713 |
-
if ( isset( $updates[ $this->theme_pack ] ) && version_compare( $plugin['version'], $updates[ $this->theme_pack ]['new_version'], '<' ) ) {
|
714 |
-
add_action( 'after_theme_row_' . $plugin['filename'], array( &$this, 'themepack_row' ), 9, 2 );
|
715 |
-
}
|
716 |
-
}
|
717 |
-
}
|
718 |
-
}
|
719 |
-
|
720 |
-
function filter_plugin_count( $value ) {
|
721 |
-
global $wp_version;
|
722 |
-
$cur_wp_version = preg_replace( '/-.*$/', '', $wp_version );
|
723 |
-
|
724 |
-
//remove any conflicting slug local WPMU DEV plugins from WP update notifications
|
725 |
-
$local_projects = get_site_option( 'wdp_un_local_projects' );
|
726 |
-
if ( is_array( $local_projects ) && count( $local_projects ) ) {
|
727 |
-
foreach ( $local_projects as $id => $plugin ) {
|
728 |
-
if ( isset( $value->response[ $plugin['filename'] ] ) ) {
|
729 |
-
unset( $value->response[ $plugin['filename'] ] );
|
730 |
-
}
|
731 |
-
}
|
732 |
-
}
|
733 |
-
|
734 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
735 |
-
if ( is_array( $updates ) && count( $updates ) ) {
|
736 |
-
foreach ( $updates as $id => $plugin ) {
|
737 |
-
if ( $plugin['type'] != 'theme' && $plugin['autoupdate'] != '2' ) {
|
738 |
-
|
739 |
-
//build plugin class
|
740 |
-
$object = new stdClass;
|
741 |
-
$object->url = $plugin['url'];
|
742 |
-
$object->slug = "wpmudev_install-$id";
|
743 |
-
$object->new_version = $plugin['new_version'];
|
744 |
-
$object->package = '';
|
745 |
-
$object->tested = $cur_wp_version;
|
746 |
-
|
747 |
-
//add to class
|
748 |
-
$value->response[ $plugin['filename'] ] = $object;
|
749 |
-
}
|
750 |
-
}
|
751 |
-
}
|
752 |
-
|
753 |
-
return $value;
|
754 |
-
}
|
755 |
-
|
756 |
-
function filter_theme_count( $value ) {
|
757 |
-
|
758 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
759 |
-
if ( is_array( $updates ) && count( $updates ) ) {
|
760 |
-
foreach ( $updates as $id => $theme ) {
|
761 |
-
if ( $theme['type'] == 'theme' && $theme['autoupdate'] != '2' ) {
|
762 |
-
|
763 |
-
$theme_slug = $theme['filename'];
|
764 |
-
|
765 |
-
//build theme listing
|
766 |
-
$value->response[ $theme_slug ]['theme'] = $theme['filename'];
|
767 |
-
$value->response[ $theme_slug ]['url'] = admin_url( 'admin-ajax.php?action=wdpun-changelog&pid=' . $id );
|
768 |
-
$value->response[ $theme_slug ]['new_version'] = $theme['new_version'];
|
769 |
-
$value->response[ $theme_slug ]['package'] = '';
|
770 |
-
}
|
771 |
-
}
|
772 |
-
}
|
773 |
-
|
774 |
-
//filter 133 theme pack themes from the list unless update is available
|
775 |
-
$local_themes = get_site_option( 'wdp_un_local_themes' );
|
776 |
-
if ( is_array( $local_themes ) && count( $local_themes ) ) {
|
777 |
-
foreach ( $local_themes as $id => $theme ) {
|
778 |
-
$theme_slug = $theme['filename'];
|
779 |
-
|
780 |
-
//add to count only if new version exists, otherwise remove
|
781 |
-
if ( isset( $updates[ $theme['id'] ] ) && isset( $updates[ $theme['id'] ]['new_version'] ) && version_compare( $theme['version'], $updates[ $theme['id'] ]['new_version'], '<' ) ) {
|
782 |
-
$value->response[ $theme_slug ]['new_version'] = $updates[ $theme['id'] ]['new_version'];
|
783 |
-
$value->response[ $theme_slug ]['package'] = '';
|
784 |
-
} else if ( isset( $value ) && isset( $value->response ) && isset( $theme_slug ) && isset( $value->response[ $theme_slug ] ) ) {
|
785 |
-
unset( $value->response[ $theme_slug ] );
|
786 |
-
}
|
787 |
-
}
|
788 |
-
}
|
789 |
-
|
790 |
-
return $value;
|
791 |
-
}
|
792 |
-
|
793 |
-
function plugin_row( $file, $plugin_data ) {
|
794 |
-
//get new version and update url
|
795 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
796 |
-
if ( is_array( $updates ) && count( $updates ) ) {
|
797 |
-
foreach ( $updates as $id => $plugin ) {
|
798 |
-
if ( $plugin['filename'] == $file ) {
|
799 |
-
$project_id = $id;
|
800 |
-
$version = $plugin['new_version'];
|
801 |
-
$plugin_url = $plugin['url'];
|
802 |
-
$autoupdate = $plugin['autoupdate'];
|
803 |
-
$filename = $plugin['filename'];
|
804 |
-
$type = $plugin['type'];
|
805 |
-
break;
|
806 |
-
}
|
807 |
-
}
|
808 |
-
} else {
|
809 |
-
return false;
|
810 |
-
}
|
811 |
-
|
812 |
-
$plugins_allowedtags = array(
|
813 |
-
'a' => array( 'href' => array(), 'title' => array() ),
|
814 |
-
'abbr' => array( 'title' => array() ),
|
815 |
-
'acronym' => array( 'title' => array() ),
|
816 |
-
'code' => array(),
|
817 |
-
'em' => array(),
|
818 |
-
'strong' => array()
|
819 |
-
);
|
820 |
-
$plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags );
|
821 |
-
|
822 |
-
$info_url = admin_url( 'admin-ajax.php?action=wdpun-changelog&pid=' . $project_id . '&TB_iframe=true&width=640&height=800' );
|
823 |
-
if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
|
824 |
-
$message = "Activate WPMU DEV Dashboard";
|
825 |
-
$action_url = $this->activate_url();
|
826 |
-
} else { //dashboard not installed at all
|
827 |
-
$message = "Install WPMU DEV Dashboard";
|
828 |
-
$action_url = $this->auto_install_url();
|
829 |
-
}
|
830 |
-
|
831 |
-
if ( current_user_can( 'update_plugins' ) ) {
|
832 |
-
echo '<tr class="plugin-update-tr"><td colspan="3" class="plugin-update colspanchange"><div class="update-message notice inline notice-warning notice-alt"><p>';
|
833 |
-
printf( 'There is a new version of %1$s available on WPMU DEV. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">%6$s</a> to update.', $plugin_name, esc_url( $info_url ), esc_attr( $plugin_name ), $version, esc_url( $action_url ), $message );
|
834 |
-
echo '</p></div></td></tr>';
|
835 |
-
}
|
836 |
-
}
|
837 |
-
|
838 |
-
function themepack_row( $file, $plugin_data ) {
|
839 |
-
|
840 |
-
//get new version and update url
|
841 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
842 |
-
if ( isset( $updates[ $this->theme_pack ] ) ) {
|
843 |
-
$plugin = $updates[ $this->theme_pack ];
|
844 |
-
$project_id = $this->theme_pack;
|
845 |
-
$version = $plugin['new_version'];
|
846 |
-
$plugin_url = $plugin['url'];
|
847 |
-
} else {
|
848 |
-
return false;
|
849 |
-
}
|
850 |
-
|
851 |
-
$plugins_allowedtags = array(
|
852 |
-
'a' => array( 'href' => array(), 'title' => array() ),
|
853 |
-
'abbr' => array( 'title' => array() ),
|
854 |
-
'acronym' => array( 'title' => array() ),
|
855 |
-
'code' => array(),
|
856 |
-
'em' => array(),
|
857 |
-
'strong' => array()
|
858 |
-
);
|
859 |
-
$plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags );
|
860 |
-
|
861 |
-
$info_url = admin_url( 'admin_ajax.php?action=wdpun-changelog&pid=' . $project_id . '&TB_iframe=true&width=640&height=800' );
|
862 |
-
if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
|
863 |
-
$message = "Activate WPMU DEV Dashboard";
|
864 |
-
$action_url = $this->activate_url();
|
865 |
-
} else { //dashboard not installed at all
|
866 |
-
$message = "Install WPMU DEV Dashboard";
|
867 |
-
$action_url = $this->auto_install_url();
|
868 |
-
}
|
869 |
-
|
870 |
-
if ( current_user_can( 'update_themes' ) ) {
|
871 |
-
echo '<tr class="plugin-update-tr"><td colspan="3" class="plugin-update colspanchange"><div class="update-message notice inline notice-warning notice-alt"><p>';
|
872 |
-
printf( 'There is a new version of %1$s available on WPMU DEV. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">%6$s</a> to update.', $plugin_name, esc_url( $info_url ), esc_attr( $plugin_name ), $version, esc_url( $action_url ), $message );
|
873 |
-
echo '</p></div></td></tr>';
|
874 |
-
}
|
875 |
-
}
|
876 |
-
|
877 |
-
function disable_checkboxes() {
|
878 |
-
|
879 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
880 |
-
if ( ! is_array( $updates ) || ( is_array( $updates ) && ! count( $updates ) ) ) {
|
881 |
-
return;
|
882 |
-
}
|
883 |
-
|
884 |
-
$jquery = "<script type='text/javascript'>";
|
885 |
-
|
886 |
-
if ( file_exists( WP_PLUGIN_DIR . '/wpmudev-updates/update-notifications.php' ) ) {
|
887 |
-
$message = "Activate WPMU DEV Dashboard";
|
888 |
-
$action_url = $this->activate_url();
|
889 |
-
} else { //dashboard not installed at all
|
890 |
-
$message = "Install WPMU DEV Dashboard";
|
891 |
-
$action_url = $this->auto_install_url();
|
892 |
-
}
|
893 |
-
$jquery .= "var wdp_note = '<br><span class=\"notice inline notice-warning notice-alt\">" . sprintf( '<a href="%s">%s</a> to update.', esc_url( $action_url ), $message ) . "</span>';\n";
|
894 |
-
|
895 |
-
foreach ( (array) $updates as $id => $project ) {
|
896 |
-
$slug = $project['filename'];
|
897 |
-
$jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $slug ) . "']\").closest('tr').find('td p').last().append(wdp_note);\n";
|
898 |
-
$jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $slug ) . "']\").remove();\n";
|
899 |
-
}
|
900 |
-
|
901 |
-
//disable checkboxes for 133 theme pack themes
|
902 |
-
$local_themes = get_site_option( 'wdp_un_local_themes' );
|
903 |
-
if ( is_array( $local_themes ) && count( $local_themes ) ) {
|
904 |
-
foreach ( $local_themes as $id => $theme ) {
|
905 |
-
$jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $theme['filename'] ) . "']\").closest('tr').find('td p').last().append(wdp_note);\n";
|
906 |
-
$jquery .= "jQuery(\"input:checkbox[value='" . esc_attr( $theme['filename'] ) . "']\").remove();\n";
|
907 |
-
}
|
908 |
-
}
|
909 |
-
|
910 |
-
$jquery .= "</script>\n";
|
911 |
-
|
912 |
-
echo $jquery;
|
913 |
-
}
|
914 |
-
|
915 |
-
function set_activate_flag( $plugin ) {
|
916 |
-
$data = $this->get_id_plugin( WP_PLUGIN_DIR . '/' . $plugin );
|
917 |
-
if ( isset( $data['id'] ) && ! empty( $data['id'] ) ) {
|
918 |
-
update_site_option( 'wdp_un_activated_flag', 1 );
|
919 |
-
}
|
920 |
-
}
|
921 |
-
|
922 |
-
function popup_changelog( $project_id ) {
|
923 |
-
/**
|
924 |
-
* Dashboard popup template: Project changelog
|
925 |
-
*
|
926 |
-
* Displays the changelog of a specific project.
|
927 |
-
*
|
928 |
-
* Following variables are passed into the template:
|
929 |
-
* $pid (project ID)
|
930 |
-
*
|
931 |
-
* @since 4.0.5
|
932 |
-
* @package WPMUDEV_Dashboard
|
933 |
-
*/
|
934 |
-
|
935 |
-
$url = $this->server_url . 'changelog/' . $project_id;
|
936 |
-
|
937 |
-
$options = array(
|
938 |
-
'timeout' => 15,
|
939 |
-
'sslverify' => false, // Many hosts have no updated CA bundle.
|
940 |
-
'user-agent' => 'Dashboard Notification/' . $this->version
|
941 |
-
);
|
942 |
-
|
943 |
-
$response = wp_remote_get( $url, $options );
|
944 |
-
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
945 |
-
$changelog = json_decode( wp_remote_retrieve_body( $response ), true );
|
946 |
-
}
|
947 |
-
|
948 |
-
$updates = get_site_option( 'wdp_un_updates_available' );
|
949 |
-
$item = $updates[ $project_id ];
|
950 |
-
|
951 |
-
if ( ! $changelog || ! is_array( $changelog ) || ! $item ) {
|
952 |
-
wp_die( __( 'We did not find any data for this plugin or theme...', 'wpmudev' ) );
|
953 |
-
}
|
954 |
-
$dlg_id = 'dlg-' . md5( time() . '-' . $project_id );
|
955 |
-
|
956 |
-
|
957 |
-
?>
|
958 |
-
<div id="content" class="<?php echo esc_attr( $dlg_id ); ?>">
|
959 |
-
<script src="<?php echo includes_url( '/wp-includes/js/jquery/jquery.js' ); ?>"></script>
|
960 |
-
<link rel="stylesheet"
|
961 |
-
href="https://fonts.googleapis.com/css?family=Roboto+Condensed%3A400%2C700%7CRoboto%3A400%2C500%2C300%2C300italic%2C100"
|
962 |
-
type="text/css" media="all"/>
|
963 |
-
<style>
|
964 |
-
* {
|
965 |
-
box-sizing: border-box;
|
966 |
-
-moz-box-sizing: border-box;
|
967 |
-
}
|
968 |
-
|
969 |
-
html, body {
|
970 |
-
margin: 0;
|
971 |
-
padding: 0;
|
972 |
-
height: 100%;
|
973 |
-
font-family: 'Roboto', 'Helvetica Neue', Helvetica, sans-serif;
|
974 |
-
font-size: 15px;
|
975 |
-
}
|
976 |
-
|
977 |
-
h1, h2, h3, h4 {
|
978 |
-
font-family: 'Roboto Condensed', 'Roboto', 'Helvetica Neue', Helvetica, sans-serif;
|
979 |
-
font-weight: 700;
|
980 |
-
color: #777771;
|
981 |
-
}
|
982 |
-
|
983 |
-
h1 {
|
984 |
-
font-size: 3em;
|
985 |
-
}
|
986 |
-
|
987 |
-
p {
|
988 |
-
font-size: 1.2em;
|
989 |
-
font-weight: 300;
|
990 |
-
color: #777771;
|
991 |
-
}
|
992 |
-
|
993 |
-
a {
|
994 |
-
color: #19b4cf;
|
995 |
-
text-decoration: none;
|
996 |
-
}
|
997 |
-
|
998 |
-
a:hover,
|
999 |
-
a:focus,
|
1000 |
-
a:active {
|
1001 |
-
color: #387ac1;
|
1002 |
-
}
|
1003 |
-
|
1004 |
-
#content {
|
1005 |
-
min-height: 100%;
|
1006 |
-
text-align: center;
|
1007 |
-
background: #FFF;
|
1008 |
-
position: absolute;
|
1009 |
-
left: 0;
|
1010 |
-
top: 0;
|
1011 |
-
right: 0;
|
1012 |
-
bottom: 0;
|
1013 |
-
overflow: auto;
|
1014 |
-
}
|
1015 |
-
|
1016 |
-
#content .excerpt {
|
1017 |
-
width: 100%;
|
1018 |
-
background-color: #14485F;
|
1019 |
-
padding: 10px;
|
1020 |
-
color: #FFF;
|
1021 |
-
}
|
1022 |
-
|
1023 |
-
#content .excerpt h1 {
|
1024 |
-
margin: 30px;
|
1025 |
-
color: #FFF;
|
1026 |
-
font-weight: 100;
|
1027 |
-
}
|
1028 |
-
|
1029 |
-
#content .versions h4 {
|
1030 |
-
font-size: 15px;
|
1031 |
-
text-transform: uppercase;
|
1032 |
-
text-align: left;
|
1033 |
-
padding: 0 0 15px;
|
1034 |
-
font-weight: bold;
|
1035 |
-
line-height: 20px;
|
1036 |
-
}
|
1037 |
-
|
1038 |
-
#content .excerpt a {
|
1039 |
-
float: left;
|
1040 |
-
margin-right: 40px;
|
1041 |
-
text-decoration: none;
|
1042 |
-
color: #6ECEDE;
|
1043 |
-
}
|
1044 |
-
|
1045 |
-
#content .excerpt a:hover,
|
1046 |
-
#content .excerpt a:focus,
|
1047 |
-
#content .excerpt a:active {
|
1048 |
-
color: #C7F7FF;
|
1049 |
-
}
|
1050 |
-
|
1051 |
-
#content .footer {
|
1052 |
-
background-color: #0B2F3F;
|
1053 |
-
padding: 20px 0;
|
1054 |
-
margin: 0;
|
1055 |
-
position: relative;
|
1056 |
-
}
|
1057 |
-
|
1058 |
-
#content .footer p {
|
1059 |
-
color: #FFF;
|
1060 |
-
margin: 10px 0;
|
1061 |
-
padding: 0;
|
1062 |
-
font-size: 15px;
|
1063 |
-
}
|
1064 |
-
|
1065 |
-
#content .information {
|
1066 |
-
padding: 0;
|
1067 |
-
text-align: left;
|
1068 |
-
}
|
1069 |
-
|
1070 |
-
#content .versions > li {
|
1071 |
-
border-bottom: 1px solid #E5E5E5;
|
1072 |
-
padding: 40px;
|
1073 |
-
margin: 0;
|
1074 |
-
}
|
1075 |
-
|
1076 |
-
#content .versions > li.new {
|
1077 |
-
background: #fffff6;
|
1078 |
-
}
|
1079 |
-
|
1080 |
-
#content .information .current-version,
|
1081 |
-
#content .information .new-version {
|
1082 |
-
border-radius: 5px;
|
1083 |
-
color: #FFF;
|
1084 |
-
cursor: default;
|
1085 |
-
display: inline-block;
|
1086 |
-
position: relative;
|
1087 |
-
top: -2px;
|
1088 |
-
margin: 0 0 0 10px;
|
1089 |
-
padding: 1px 5px;
|
1090 |
-
font-size: 10px;
|
1091 |
-
line-height: 20px;
|
1092 |
-
height: 20px;
|
1093 |
-
box-sizing: border-box;
|
1094 |
-
}
|
1095 |
-
|
1096 |
-
#content .information .new-version {
|
1097 |
-
background: #FDCE43;
|
1098 |
-
text-shadow: 0 1px 1px #DDAE30;
|
1099 |
-
}
|
1100 |
-
|
1101 |
-
#content .current-version {
|
1102 |
-
background: #00ACCA;
|
1103 |
-
text-shadow: 0 1px 1px #008CAA;
|
1104 |
-
}
|
1105 |
-
|
1106 |
-
#content .versions {
|
1107 |
-
margin: 0;
|
1108 |
-
padding: 0;
|
1109 |
-
}
|
1110 |
-
|
1111 |
-
#content .versions .changes {
|
1112 |
-
list-style: disc;
|
1113 |
-
padding: 0 0 0 20px;
|
1114 |
-
margin: 0;
|
1115 |
-
}
|
1116 |
-
|
1117 |
-
#content .versions .changes li {
|
1118 |
-
padding: 3px 0 3px 20px;
|
1119 |
-
margin: 0;
|
1120 |
-
color: #777771;
|
1121 |
-
cursor: default;
|
1122 |
-
}
|
1123 |
-
|
1124 |
-
#content .version-meta {
|
1125 |
-
float: right;
|
1126 |
-
text-align: right;
|
1127 |
-
}
|
1128 |
-
</style>
|
1129 |
-
|
1130 |
-
<div class="excerpt">
|
1131 |
-
<h1><?php printf( esc_attr__( '%s changelog', 'wpmudev' ), esc_html( $item['name'] ) ); ?></h1>
|
1132 |
-
</div>
|
1133 |
-
|
1134 |
-
<div class="information">
|
1135 |
-
|
1136 |
-
<ul class="versions">
|
1137 |
-
<?php
|
1138 |
-
foreach ( $changelog as $log ) {
|
1139 |
-
$row_class = '';
|
1140 |
-
$badge = '';
|
1141 |
-
|
1142 |
-
if ( ! is_array( $log ) ) {
|
1143 |
-
continue;
|
1144 |
-
}
|
1145 |
-
if ( empty( $log ) ) {
|
1146 |
-
continue;
|
1147 |
-
}
|
1148 |
-
|
1149 |
-
// -1 .. local is higher (dev) | 0 .. equal | 1 .. new version available
|
1150 |
-
$version_check = version_compare( $log['version'], $item['version'] );
|
1151 |
-
|
1152 |
-
if ( $item['version'] && 1 === $version_check ) {
|
1153 |
-
$row_class = 'new';
|
1154 |
-
}
|
1155 |
-
|
1156 |
-
if ( $item['version'] ) {
|
1157 |
-
if ( 0 === $version_check ) {
|
1158 |
-
$badge = sprintf(
|
1159 |
-
'<div class="current-version">%s %s</div>',
|
1160 |
-
'<i class="wdv-icon wdv-icon-ok"></i>',
|
1161 |
-
__( 'Current', 'wpmudev' )
|
1162 |
-
);
|
1163 |
-
} elseif ( 1 === $version_check ) {
|
1164 |
-
$badge = sprintf(
|
1165 |
-
'<div class="new-version">%s %s</div>',
|
1166 |
-
'<i class="wdv-icon wdv-icon-star"></i>',
|
1167 |
-
__( 'New', 'wpmudev' )
|
1168 |
-
);
|
1169 |
-
}
|
1170 |
-
}
|
1171 |
-
|
1172 |
-
$version = $log['version'];
|
1173 |
-
|
1174 |
-
if ( empty( $log['time'] ) ) {
|
1175 |
-
$rel_date = '';
|
1176 |
-
} else {
|
1177 |
-
$rel_date = date_i18n( get_option( 'date_format' ), $log['time'] );
|
1178 |
-
}
|
1179 |
-
|
1180 |
-
printf(
|
1181 |
-
'<li class="%1$s"><h4>%2$s %3$s <small class="version-meta">%4$s</small></h4>',
|
1182 |
-
esc_attr( $row_class ),
|
1183 |
-
sprintf(
|
1184 |
-
esc_html__( 'Version %s', 'wpmudev' ), esc_html( $version )
|
1185 |
-
),
|
1186 |
-
wp_kses_post( $badge ),
|
1187 |
-
esc_html( $rel_date )
|
1188 |
-
);
|
1189 |
-
|
1190 |
-
$notes = explode( "\n", $log['log'] );
|
1191 |
-
$detail_level = 0;
|
1192 |
-
$detail_class = 'intro';
|
1193 |
-
|
1194 |
-
echo '<ul class="changes">';
|
1195 |
-
foreach ( $notes as $note ) {
|
1196 |
-
if ( 0 === strpos( $note, '<p>' ) ) {
|
1197 |
-
if ( 1 == $detail_level ) {
|
1198 |
-
printf(
|
1199 |
-
'<li class="toggle-details">
|
1200 |
-
<a href="#" class="for-intro">%s</a><a href="#" class="for-detail">%s</a>
|
1201 |
-
</li>',
|
1202 |
-
esc_html__( 'Show all changes', 'wpmudev' ),
|
1203 |
-
esc_html__( 'Hide details', 'wpmudev' )
|
1204 |
-
);
|
1205 |
-
$detail_class = 'detail';
|
1206 |
-
}
|
1207 |
-
$detail_level += 1;
|
1208 |
-
}
|
1209 |
-
|
1210 |
-
$note = stripslashes( $note );
|
1211 |
-
$note = preg_replace( '/(<br ?\/?>|<p>|<\/p>)/', '', $note );
|
1212 |
-
$note = trim( preg_replace( '/^\s*(\*|\-)\s*/', '', $note ) );
|
1213 |
-
$note = str_replace( array( '<', '>' ), array( '<', '>' ), $note );
|
1214 |
-
$note = preg_replace( '/`(.*?)`/', '<code>\1</code>', $note );
|
1215 |
-
if ( empty( $note ) ) {
|
1216 |
-
continue;
|
1217 |
-
}
|
1218 |
-
|
1219 |
-
printf(
|
1220 |
-
'<li class="version-%s">%s</li>',
|
1221 |
-
esc_attr( $detail_class ),
|
1222 |
-
wp_kses_post( $note )
|
1223 |
-
);
|
1224 |
-
}
|
1225 |
-
echo '</ul></li>';
|
1226 |
-
}
|
1227 |
-
?>
|
1228 |
-
</ul>
|
1229 |
-
</div>
|
1230 |
-
|
1231 |
-
<div class="footer">
|
1232 |
-
<p>Copyright 2009 - <?php echo esc_html( date( 'Y' ) ); ?> WPMU DEV</p>
|
1233 |
-
</div>
|
1234 |
-
|
1235 |
-
<style>
|
1236 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .for-detail,
|
1237 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .version-detail {
|
1238 |
-
display: none;
|
1239 |
-
}
|
1240 |
-
|
1241 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .for-intro {
|
1242 |
-
display: inline-block;
|
1243 |
-
}
|
1244 |
-
|
1245 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes.show-details .for-intro {
|
1246 |
-
display: none;
|
1247 |
-
}
|
1248 |
-
|
1249 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes.show-details .for-detail {
|
1250 |
-
display: inline-block;
|
1251 |
-
}
|
1252 |
-
|
1253 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes.show-details .version-detail {
|
1254 |
-
display: list-item;
|
1255 |
-
}
|
1256 |
-
|
1257 |
-
.<?php echo esc_attr( $dlg_id ); ?> .versions ul.changes .toggle-details {
|
1258 |
-
padding: 8px 0 4px;
|
1259 |
-
text-align: right;
|
1260 |
-
font-size: 12px;
|
1261 |
-
list-style: none;
|
1262 |
-
}
|
1263 |
-
</style>
|
1264 |
-
<script>
|
1265 |
-
jQuery(function () {
|
1266 |
-
jQuery('.<?php echo esc_attr( $dlg_id ); ?>').on('click', '.toggle-details a', function (ev) {
|
1267 |
-
var li = jQuery(this),
|
1268 |
-
ver = li.closest('.changes');
|
1269 |
-
|
1270 |
-
ev.preventDefault();
|
1271 |
-
ev.stopPropagation();
|
1272 |
-
ver.toggleClass('show-details');
|
1273 |
-
return false;
|
1274 |
-
});
|
1275 |
-
});
|
1276 |
-
</script>
|
1277 |
-
</div>
|
1278 |
-
<?php
|
1279 |
-
exit; //this is for output, we are done after this.
|
1280 |
-
}
|
1281 |
-
|
1282 |
-
function popup_changelog_ajax() {
|
1283 |
-
$project_id = $_GET['pid'];
|
1284 |
-
$this->popup_changelog( $project_id );
|
1285 |
-
}
|
1286 |
-
|
1287 |
-
function dismiss_ajax() {
|
1288 |
-
update_site_option( 'wdp_un_dismissed', time() );
|
1289 |
-
wp_send_json_success();
|
1290 |
-
}
|
1291 |
-
|
1292 |
-
}
|
1293 |
-
|
1294 |
-
$GLOBALS['WPMUDEV_Dashboard_Notice4'] = new WPMUDEV_Dashboard_Notice4();
|
1295 |
-
}
|
1296 |
-
|
1297 |
-
//disable older versions
|
1298 |
-
if ( ! class_exists( 'WPMUDEV_Dashboard_Notice' ) ) {
|
1299 |
-
class WPMUDEV_Dashboard_Notice {
|
1300 |
-
}
|
1301 |
-
}
|
1302 |
-
|
1303 |
-
if ( ! class_exists( 'WPMUDEV_Dashboard_Notice3' ) ) {
|
1304 |
-
class WPMUDEV_Dashboard_Notice3 {
|
1305 |
-
}
|
1306 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/wp-smushit.pot
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
-
"Project-Id-Version:
|
5 |
-
"POT-Creation-Date: 2018-05-24
|
6 |
-
"PO-Revision-Date: 2018-05-24
|
7 |
"Last-Translator: Umesh <umeshsingla05@gmail.com>\n"
|
8 |
"Language-Team: Umesh <umeshsingla05@gmail.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
@@ -32,11 +32,11 @@ msgid "Oops, we could not do this..."
|
|
32 |
msgstr ""
|
33 |
|
34 |
#: assets/shared-ui/plugin-ui.php:272 extras/free-dashboard/module.php:395
|
35 |
-
#: extras/free-dashboard/module.php:434 lib/class-wp-smush-ui.php:
|
36 |
msgid "Saving"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: assets/shared-ui/plugin-ui.php:301 lib/class-wp-smush-ui.php:
|
40 |
msgid "Dismiss"
|
41 |
msgstr ""
|
42 |
|
@@ -157,10 +157,10 @@ msgstr ""
|
|
157 |
|
158 |
#: lib/class-wp-smush-admin.php:261
|
159 |
msgid ""
|
160 |
-
"
|
161 |
-
"
|
162 |
-
"
|
163 |
-
"
|
164 |
msgstr ""
|
165 |
|
166 |
#: lib/class-wp-smush-admin.php:264
|
@@ -188,109 +188,123 @@ msgid ""
|
|
188 |
"JPEG will further reduce its size."
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: lib/class-wp-smush-admin.php:
|
192 |
-
#: lib/
|
193 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
msgid "Super-Smush"
|
195 |
msgstr ""
|
196 |
|
197 |
-
#: lib/class-wp-smush-admin.php:
|
198 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
199 |
msgid "Smush Now"
|
200 |
msgstr ""
|
201 |
|
202 |
-
#: lib/class-wp-smush-admin.php:
|
203 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
204 |
msgid "{{errors}} image(s) were skipped due to an error."
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: lib/class-wp-smush-admin.php:
|
208 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
209 |
msgid "All images are fully optimized."
|
210 |
msgstr ""
|
211 |
|
212 |
-
#: lib/class-wp-smush-admin.php:
|
213 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
214 |
msgid "Restoring image.."
|
215 |
msgstr ""
|
216 |
|
217 |
-
#: lib/class-wp-smush-admin.php:
|
218 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
219 |
msgid "Smushing image.."
|
220 |
msgstr ""
|
221 |
|
222 |
-
#: lib/class-wp-smush-admin.php:
|
223 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
224 |
msgid "Checking images.."
|
225 |
msgstr ""
|
226 |
|
227 |
-
#: lib/class-wp-smush-admin.php:
|
228 |
msgid ""
|
229 |
"We successfully verified your membership, all the Pro features should work "
|
230 |
"completely. "
|
231 |
msgstr ""
|
232 |
|
233 |
-
#: lib/class-wp-smush-admin.php:
|
234 |
msgid "Your membership couldn't be verified."
|
235 |
msgstr ""
|
236 |
|
237 |
-
#: lib/class-wp-smush-admin.php:
|
238 |
msgid "Missing file path."
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: lib/class-wp-smush-admin.php:
|
242 |
msgid "image could not be smushed."
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: lib/class-wp-smush-admin.php:
|
246 |
msgid "images could not be smushed."
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: lib/class-wp-smush-admin.php:
|
250 |
-
#: lib/class-wp-smush.php:
|
251 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:
|
252 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:
|
253 |
msgid "Already Optimized"
|
254 |
msgstr ""
|
255 |
|
256 |
-
#: lib/class-wp-smush-admin.php:
|
257 |
msgid "Ajax Error"
|
258 |
msgstr ""
|
259 |
|
260 |
-
#: lib/class-wp-smush-admin.php:
|
261 |
msgid "All Done!"
|
262 |
msgstr ""
|
263 |
|
264 |
-
#: lib/class-wp-smush-admin.php:
|
265 |
msgid "QUICK SETUP"
|
266 |
msgstr ""
|
267 |
|
268 |
-
#: lib/class-wp-smush-admin.php:
|
269 |
msgid "Skip"
|
270 |
msgstr ""
|
271 |
|
272 |
-
#: lib/class-wp-smush-admin.php:
|
273 |
msgid "Give us a moment while we sync the stats."
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: lib/class-wp-smush-admin.php:
|
277 |
#, php-format
|
278 |
msgid "%s%d%s Attachment(s) could not be smushed, as no ID was received."
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: lib/class-wp-smush-admin.php:
|
282 |
#, php-format
|
283 |
msgid ""
|
284 |
"You've exceeded Bulk Smush limit of %d images at once for standard users. "
|
285 |
"Click on Bulk Smush to continue."
|
286 |
msgstr ""
|
287 |
|
288 |
-
#: lib/class-wp-smush-admin.php:
|
289 |
#, php-format
|
290 |
msgid "%s%d%s Attachment(s) were skipped."
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: lib/class-wp-smush-admin.php:
|
294 |
#, php-format
|
295 |
msgid ""
|
296 |
"%s%d%s Attachment(s) were not smushed due to a timeout error, You can "
|
@@ -298,101 +312,92 @@ msgid ""
|
|
298 |
"larger files. `define('WP_SMUSH_API_TIMEOUT', 150);`"
|
299 |
msgstr ""
|
300 |
|
301 |
-
#: lib/class-wp-smush-admin.php:
|
302 |
msgid "You don't have permission to work with uploaded files."
|
303 |
msgstr ""
|
304 |
|
305 |
-
#: lib/class-wp-smush-admin.php:
|
306 |
msgid "No attachment ID was provided."
|
307 |
msgstr ""
|
308 |
|
309 |
-
#: lib/class-wp-smush-admin.php:
|
310 |
msgid "Attachment Skipped - Check `wp_smush_image` filter."
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: lib/class-wp-smush-admin.php:
|
314 |
#, php-format
|
315 |
msgid "<strong>%d of %d images</strong> were sent for smushing:"
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: lib/class-wp-smush-admin.php:
|
319 |
msgid "Smushing in progress.."
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: lib/class-wp-smush-admin.php:
|
323 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
324 |
msgid "Smush Now!"
|
325 |
msgstr ""
|
326 |
|
327 |
-
#: lib/class-wp-smush-admin.php:
|
328 |
msgid "Settings"
|
329 |
msgstr ""
|
330 |
|
331 |
-
#: lib/class-wp-smush-admin.php:
|
332 |
msgid "Image not smushed, fields empty."
|
333 |
msgstr ""
|
334 |
|
335 |
-
#: lib/class-wp-smush-admin.php:
|
336 |
msgid ""
|
337 |
"Image couldn't be smushed as the nonce verification failed, try reloading "
|
338 |
"the page."
|
339 |
msgstr ""
|
340 |
|
341 |
-
#: lib/class-wp-smush-admin.php:
|
342 |
msgid ""
|
343 |
"We haven’t found any images in your media library yet so there’s no smushing "
|
344 |
"to be done! Once you upload images, reload this page and start playing!"
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: lib/class-wp-smush-admin.php:
|
348 |
msgid "Yay! All images are optimized as per your current settings."
|
349 |
msgstr ""
|
350 |
|
351 |
-
#: lib/class-wp-smush-admin.php:
|
352 |
#, php-format
|
353 |
msgid "You have images that need smushing. %sBulk smush now!%s"
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: lib/class-wp-smush-admin.php:
|
357 |
msgid "Review your setting now."
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: lib/class-wp-smush-admin.php:
|
361 |
-
#: lib/class-wp-smush-ui.php:792 lib/class-wp-smush-ui.php:931
|
362 |
-
msgid "WP Smush Pro"
|
363 |
-
msgstr ""
|
364 |
-
|
365 |
-
#: lib/class-wp-smush-admin.php:2001
|
366 |
msgid ""
|
367 |
-
"Welcome to the newest version of
|
368 |
"ability to bulk smush images in directories outside your uploads folder."
|
369 |
msgstr ""
|
370 |
|
371 |
-
#: lib/class-wp-smush-admin.php:
|
372 |
#, php-format
|
373 |
msgid ""
|
374 |
" And as a multisite user, you can manage %sSmush settings%s globally across "
|
375 |
"all sites!"
|
376 |
msgstr ""
|
377 |
|
378 |
-
#: lib/class-wp-smush-admin.php:
|
379 |
#, php-format
|
380 |
msgid " %sFind out more here >>%s"
|
381 |
msgstr ""
|
382 |
|
383 |
-
#: lib/class-wp-smush-
|
384 |
-
msgid "Smush Stats"
|
385 |
-
msgstr ""
|
386 |
-
|
387 |
-
#: lib/class-wp-smush-backup.php:148 lib/class-wp-smush-nextgen.php:530
|
388 |
msgid "Error in processing restore action, Fields empty."
|
389 |
msgstr ""
|
390 |
|
391 |
-
#: lib/class-wp-smush-backup.php:155 lib/class-wp-smush-nextgen.php:
|
392 |
msgid "Image not restored, Nonce verification failed."
|
393 |
msgstr ""
|
394 |
|
395 |
-
#: lib/class-wp-smush-backup.php:
|
396 |
msgid "Unable to restore image"
|
397 |
msgstr ""
|
398 |
|
@@ -400,159 +405,199 @@ msgstr ""
|
|
400 |
msgid "Directory-smush savings"
|
401 |
msgstr ""
|
402 |
|
403 |
-
#: lib/class-wp-smush-dir.php:
|
404 |
msgid "Updating Stats"
|
405 |
msgstr ""
|
406 |
|
407 |
-
#: lib/class-wp-smush-dir.php:
|
408 |
msgid "Smush images that aren't located in your uploads folder."
|
409 |
msgstr ""
|
410 |
|
411 |
-
#: lib/class-wp-smush-dir.php:
|
412 |
msgid "Select a directory you'd like to Smush."
|
413 |
msgstr ""
|
414 |
|
415 |
-
#: lib/class-wp-smush-dir.php:
|
416 |
msgid "Choose directory"
|
417 |
msgstr ""
|
418 |
|
419 |
-
#: lib/class-wp-smush-dir.php:
|
420 |
msgid "RESUME LAST SCAN"
|
421 |
msgstr ""
|
422 |
|
423 |
-
#: lib/class-wp-smush-dir.php:
|
424 |
msgid "DIRECTORY SMUSH"
|
425 |
msgstr ""
|
426 |
|
427 |
-
#: lib/class-wp-smush-dir.php:
|
428 |
msgid ""
|
429 |
"In addition to smushing your media uploads, you may want to also smush "
|
430 |
"images living outside your uploads directory. Simply add any directories you "
|
431 |
"wish to smush and bulk smush away!"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: lib/class-wp-smush-dir.php:
|
435 |
msgid ""
|
436 |
"All images for the selected directory are smushed and up to date. Awesome!"
|
437 |
msgstr ""
|
438 |
|
439 |
-
#: lib/class-wp-smush-dir.php:
|
440 |
#, php-format
|
441 |
msgid ""
|
442 |
"%s/%s image(s) were successfully smushed, however %s image(s) could not be "
|
443 |
"smushed due to an error."
|
444 |
msgstr ""
|
445 |
|
446 |
-
#: lib/class-wp-smush-dir.php:
|
447 |
#, php-format
|
448 |
msgid ""
|
449 |
" %sUpgrade to pro%s to bulk smush all your directory images with one click. "
|
450 |
"Free users can smush 50 images with each click."
|
451 |
msgstr ""
|
452 |
|
453 |
-
#: lib/class-wp-smush-dir.php:
|
454 |
-
#: lib/class-wp-smush-ui.php:
|
455 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
456 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
457 |
msgid "BULK SMUSH"
|
458 |
msgstr ""
|
459 |
|
460 |
-
#: lib/class-wp-smush-dir.php:
|
461 |
msgid "Click to stop the directory smushing process."
|
462 |
msgstr ""
|
463 |
|
464 |
-
#: lib/class-wp-smush-dir.php:
|
465 |
msgid "CANCEL"
|
466 |
msgstr ""
|
467 |
|
468 |
-
#: lib/class-wp-smush-dir.php:
|
469 |
msgid "CHOOSE DIRECTORY"
|
470 |
msgstr ""
|
471 |
|
472 |
-
#: lib/class-wp-smush-dir.php:
|
473 |
msgid "Exclude directory from Smush List"
|
474 |
msgstr ""
|
475 |
|
476 |
-
#: lib/class-wp-smush-dir.php:
|
477 |
msgid "We could not find any images in the selected directory."
|
478 |
msgstr ""
|
479 |
|
480 |
-
#: lib/class-wp-smush-dir.php:
|
481 |
#, php-format
|
482 |
msgid "%d images"
|
483 |
msgstr ""
|
484 |
|
485 |
-
#: lib/class-wp-smush-dir.php:
|
486 |
msgid "Waiting.."
|
487 |
msgstr ""
|
488 |
|
489 |
-
#: lib/class-wp-smush-dir.php:
|
490 |
msgid "Incorrect image id"
|
491 |
msgstr ""
|
492 |
|
493 |
-
#: lib/class-wp-smush-dir.php:
|
494 |
msgid "Could not find image id in last scanned images"
|
495 |
msgstr ""
|
496 |
|
497 |
-
#: lib/class-wp-smush-dir.php:
|
498 |
msgid "Image couldn't be optimized"
|
499 |
msgstr ""
|
500 |
|
501 |
-
#: lib/class-wp-smush-dir.php:
|
502 |
#, php-format
|
503 |
msgid "You've smushed %d images in total."
|
504 |
msgstr ""
|
505 |
|
506 |
-
#: lib/class-wp-smush-dir.php:
|
507 |
msgid ""
|
508 |
"We were unable to retrieve the image list from last scan, please continue "
|
509 |
"with the latest scan"
|
510 |
msgstr ""
|
511 |
|
512 |
-
#: lib/class-wp-smush-dir.php:
|
513 |
msgid "Directory list"
|
514 |
msgstr ""
|
515 |
|
516 |
-
#: lib/class-wp-smush-dir.php:
|
517 |
msgid "Choose the folder you wish to smush."
|
518 |
msgstr ""
|
519 |
|
520 |
-
#: lib/class-wp-smush-dir.php:
|
521 |
msgid ""
|
522 |
"Smush will also include any images in sub folders of your selected folder."
|
523 |
msgstr ""
|
524 |
|
525 |
-
#: lib/class-wp-smush-dir.php:
|
526 |
msgid "ADD DIRECTORY"
|
527 |
msgstr ""
|
528 |
|
529 |
-
#: lib/class-wp-smush-
|
|
|
|
|
|
|
|
|
|
|
|
|
530 |
msgid "Enable NextGen Gallery integration"
|
531 |
msgstr ""
|
532 |
|
533 |
-
#: lib/class-wp-smush-nextgen.php:
|
534 |
msgid "NextGen Gallery"
|
535 |
msgstr ""
|
536 |
|
537 |
-
#: lib/class-wp-smush-nextgen.php:
|
538 |
msgid "Allow smushing images directly through NextGen Gallery settings."
|
539 |
msgstr ""
|
540 |
|
541 |
-
#: lib/class-wp-smush-nextgen.php:
|
542 |
msgid ""
|
543 |
"We couldn't find the metadata for the image, possibly the image has been "
|
544 |
"deleted."
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: lib/class-wp-smush-nextgen.php:
|
548 |
msgid "We couldn't process the image, fields empty."
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: lib/class-wp-smush-nextgen.php:
|
552 |
#, php-format
|
553 |
msgid "Unable to smush image, %s"
|
554 |
msgstr ""
|
555 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
#: lib/class-wp-smush-s3.php:60
|
557 |
msgid "Enable Amazon S3 support"
|
558 |
msgstr ""
|
@@ -614,8 +659,8 @@ msgstr ""
|
|
614 |
#: lib/class-wp-smush-share.php:26
|
615 |
#, php-format
|
616 |
msgid ""
|
617 |
-
"I saved %s%s%s on my site with
|
618 |
-
"
|
619 |
msgstr ""
|
620 |
|
621 |
#: lib/class-wp-smush-share.php:34
|
@@ -659,19 +704,19 @@ msgid "SETTINGS"
|
|
659 |
msgstr ""
|
660 |
|
661 |
#: lib/class-wp-smush-ui.php:172
|
662 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
663 |
msgid ""
|
664 |
"Lets you check if any images can be further optimized. Useful after changing "
|
665 |
"settings."
|
666 |
msgstr ""
|
667 |
|
668 |
#: lib/class-wp-smush-ui.php:172
|
669 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
670 |
msgid "RE-CHECK IMAGES"
|
671 |
msgstr ""
|
672 |
|
673 |
#: lib/class-wp-smush-ui.php:173
|
674 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
675 |
msgid "STATS"
|
676 |
msgstr ""
|
677 |
|
@@ -681,7 +726,7 @@ msgid "You've smushed %d images in total"
|
|
681 |
msgstr ""
|
682 |
|
683 |
#: lib/class-wp-smush-ui.php:194
|
684 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
685 |
msgid "Images smushed"
|
686 |
msgstr ""
|
687 |
|
@@ -694,7 +739,7 @@ msgid "Images resized"
|
|
694 |
msgstr ""
|
695 |
|
696 |
#: lib/class-wp-smush-ui.php:218
|
697 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
698 |
msgid "Total savings"
|
699 |
msgstr ""
|
700 |
|
@@ -759,20 +804,12 @@ msgstr ""
|
|
759 |
msgid "Save a ton of space by not storing over-sized images on your server."
|
760 |
msgstr ""
|
761 |
|
762 |
-
#: lib/class-wp-smush-ui.php:
|
763 |
-
|
764 |
-
msgstr ""
|
765 |
-
|
766 |
-
#: lib/class-wp-smush-ui.php:701
|
767 |
-
msgid "BOOST YOUR PERFORMANCE - HUMMINGBIRD"
|
768 |
-
msgstr ""
|
769 |
-
|
770 |
-
#: lib/class-wp-smush-ui.php:739
|
771 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:389
|
772 |
msgid "No attachments found - Upload some images"
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: lib/class-wp-smush-ui.php:
|
776 |
#, php-format
|
777 |
msgid ""
|
778 |
"We haven’t found any images in your %smedia library%s yet so there’s no "
|
@@ -780,160 +817,156 @@ msgid ""
|
|
780 |
"playing!"
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: lib/class-wp-smush-ui.php:
|
784 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
785 |
msgid "UPLOAD IMAGES"
|
786 |
msgstr ""
|
787 |
|
788 |
-
#: lib/class-wp-smush-ui.php:
|
789 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
790 |
msgid "All images are smushed and up to date. Awesome!"
|
791 |
msgstr ""
|
792 |
|
793 |
-
#: lib/class-wp-smush-ui.php:
|
794 |
msgid "Still having trouble with PageSpeed tests? Give these a go…"
|
795 |
msgstr ""
|
796 |
|
797 |
-
#: lib/class-wp-smush-ui.php:
|
798 |
#, php-format
|
799 |
msgid "Upgrade to Smush Pro for advanced lossy compression. %sTry pro free%s."
|
800 |
msgstr ""
|
801 |
|
802 |
-
#: lib/class-wp-smush-ui.php:
|
803 |
#, php-format
|
804 |
msgid ""
|
805 |
"Enable %sSuper-smush%s for advanced lossy compression to optimise images "
|
806 |
"further with almost no visible drop in quality."
|
807 |
msgstr ""
|
808 |
|
809 |
-
#: lib/class-wp-smush-ui.php:
|
810 |
#, php-format
|
811 |
msgid ""
|
812 |
"Make sure your images are the right size for your theme. %sLearn more%s."
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: lib/class-wp-smush-ui.php:
|
816 |
#, php-format
|
817 |
msgid ""
|
818 |
"Enable %sResize Original Images%s to scale big images down to a reasonable "
|
819 |
"size and save a ton of space."
|
820 |
msgstr ""
|
821 |
|
822 |
-
#: lib/class-wp-smush-ui.php:
|
823 |
msgid "DISMISS"
|
824 |
msgstr ""
|
825 |
|
826 |
-
#: lib/class-wp-smush-ui.php:
|
827 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
828 |
#, php-format
|
829 |
msgid "%s, you have %s%s%d%s attachment%s that needs smushing!"
|
830 |
msgid_plural "%s, you have %s%s%d%s attachments%s that need smushing!"
|
831 |
msgstr[0] ""
|
832 |
msgstr[1] ""
|
833 |
|
834 |
-
#: lib/class-wp-smush-ui.php:
|
835 |
#, php-format
|
836 |
msgid " %sUpgrade to Pro%s to bulk smush all your images with one click."
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: lib/class-wp-smush-ui.php:
|
840 |
msgid " Free users can smush 50 images with each click."
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: lib/class-wp-smush-ui.php:
|
844 |
msgid "Click to start Bulk Smushing images in Media Library"
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: lib/class-wp-smush-ui.php:
|
848 |
msgid ""
|
849 |
"Tip: Enable Super-smush in the Settings area to get even more savings with "
|
850 |
"almost no visible drop in quality."
|
851 |
msgstr ""
|
852 |
|
853 |
-
#: lib/class-wp-smush-ui.php:
|
854 |
#, php-format
|
855 |
msgid ""
|
856 |
"%sBulk smush is currently running.%s You need to keep this page open for the "
|
857 |
"process to complete."
|
858 |
msgstr ""
|
859 |
|
860 |
-
#: lib/class-wp-smush-ui.php:
|
861 |
#, php-format
|
862 |
msgid "%s%d%s of your media attachments have been smushed."
|
863 |
msgstr ""
|
864 |
|
865 |
-
#: lib/class-wp-smush-ui.php:
|
866 |
msgid "Stop current bulk smush process."
|
867 |
msgstr ""
|
868 |
|
869 |
-
#: lib/class-wp-smush-ui.php:
|
870 |
#, php-format
|
871 |
msgid "%s, you have %s%s%d%s attachment%s that needs re-compressing!"
|
872 |
msgid_plural "%s, you have %s%s%d%s attachments%s that need re-compressing!"
|
873 |
msgstr[0] ""
|
874 |
msgstr[1] ""
|
875 |
|
876 |
-
#: lib/class-wp-smush-ui.php:
|
877 |
msgid "Skip re-smushing the images"
|
878 |
msgstr ""
|
879 |
|
880 |
-
#: lib/class-wp-smush-ui.php:
|
881 |
msgid "Your settings have been updated!"
|
882 |
msgstr ""
|
883 |
|
884 |
-
|
885 |
-
|
886 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:71
|
887 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:90
|
888 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:92
|
889 |
-
msgid "WP Smush"
|
890 |
msgstr ""
|
891 |
|
892 |
-
#: lib/class-wp-smush-ui.php:
|
893 |
#, php-format
|
894 |
msgid ""
|
895 |
"Automatic smushing is %senabled%s. Newly uploaded images will be "
|
896 |
"automagically compressed."
|
897 |
msgstr ""
|
898 |
|
899 |
-
#: lib/class-wp-smush-ui.php:
|
900 |
#, php-format
|
901 |
msgid ""
|
902 |
"Automatic smushing is %sdisabled%s. Newly uploaded images will need to be "
|
903 |
"manually smushed."
|
904 |
msgstr ""
|
905 |
|
906 |
-
#: lib/class-wp-smush-ui.php:
|
907 |
msgid "Thanks for installing Smush. We hope you like it!"
|
908 |
msgstr ""
|
909 |
|
910 |
-
#: lib/class-wp-smush-ui.php:
|
911 |
msgid ""
|
912 |
"And hey, if you do, you can join WPMU DEV for a free 30 day trial and get "
|
913 |
"access to even more features!"
|
914 |
msgstr ""
|
915 |
|
916 |
-
#: lib/class-wp-smush-ui.php:
|
917 |
msgid "Try Smush Pro Free"
|
918 |
msgstr ""
|
919 |
|
920 |
-
#: lib/class-wp-smush-ui.php:
|
921 |
msgid "Thanks for upgrading Smush!"
|
922 |
msgstr ""
|
923 |
|
924 |
-
#: lib/class-wp-smush-ui.php:
|
925 |
#, php-format
|
926 |
msgid ""
|
927 |
-
"Did you know
|
928 |
-
"
|
929 |
"absolutely FREE%s"
|
930 |
msgstr ""
|
931 |
|
932 |
-
#: lib/class-wp-smush-ui.php:
|
933 |
-
msgid "Try
|
934 |
msgstr ""
|
935 |
|
936 |
-
#: lib/class-wp-smush-ui.php:
|
937 |
#, php-format
|
938 |
msgid ""
|
939 |
"Smush Pro gives you all these extra settings and absolutely no limits on "
|
@@ -942,11 +975,11 @@ msgid ""
|
|
942 |
"%s"
|
943 |
msgstr ""
|
944 |
|
945 |
-
#: lib/class-wp-smush-ui.php:
|
946 |
msgid "Validating.."
|
947 |
msgstr ""
|
948 |
|
949 |
-
#: lib/class-wp-smush-ui.php:
|
950 |
#, php-format
|
951 |
msgid ""
|
952 |
"It looks like Smush couldn’t verify your WPMU DEV membership so Pro features "
|
@@ -954,21 +987,21 @@ msgid ""
|
|
954 |
"%s or get in touch with our %ssupport team%s."
|
955 |
msgstr ""
|
956 |
|
957 |
-
#: lib/class-wp-smush-ui.php:
|
958 |
msgid "UPDATE SETTINGS"
|
959 |
msgstr ""
|
960 |
|
961 |
-
#: lib/class-wp-smush-ui.php:
|
962 |
msgid "Smush will automatically check for any images that need re-smushing."
|
963 |
msgstr ""
|
964 |
|
965 |
-
#: lib/class-wp-smush-ui.php:
|
966 |
msgid ""
|
967 |
"Smush settings were updated, performing a quick scan to check if any of the "
|
968 |
"images need to be Smushed again."
|
969 |
msgstr ""
|
970 |
|
971 |
-
#: lib/class-wp-smush-ui.php:
|
972 |
#, php-format
|
973 |
msgid ""
|
974 |
"Every time you upload an image to your site, WordPress generates a resized "
|
@@ -978,40 +1011,48 @@ msgid ""
|
|
978 |
"optimized:%s"
|
979 |
msgstr ""
|
980 |
|
981 |
-
#: lib/class-wp-smush-ui.php:
|
982 |
msgid "Max width"
|
983 |
msgstr ""
|
984 |
|
985 |
-
#: lib/class-wp-smush-ui.php:
|
986 |
msgid "Max height"
|
987 |
msgstr ""
|
988 |
|
989 |
-
#: lib/class-wp-smush-ui.php:
|
990 |
#, php-format
|
991 |
msgid ""
|
992 |
"Currently, your largest image size is set at %s%dpx wide %s %dpx high%s."
|
993 |
msgstr ""
|
994 |
|
995 |
-
#: lib/class-wp-smush-ui.php:
|
996 |
msgid ""
|
997 |
"Just to let you know, the width you've entered is less than your largest "
|
998 |
"image and may result in pixelation."
|
999 |
msgstr ""
|
1000 |
|
1001 |
-
#: lib/class-wp-smush-ui.php:
|
1002 |
msgid ""
|
1003 |
"Just to let you know, the height you’ve entered is less than your largest "
|
1004 |
"image and may result in pixelation."
|
1005 |
msgstr ""
|
1006 |
|
1007 |
-
#: lib/class-wp-smush-ui.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1008 |
msgid ""
|
1009 |
"Note: This data, called EXIF, adds to the size of the image. While this "
|
1010 |
"information might be important to photographers, it’s unnecessary for most "
|
1011 |
"users and safe to remove."
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#: lib/class-wp-smush-ui.php:
|
1015 |
msgid ""
|
1016 |
"Note: Any PNGs with transparency will be ignored. Smush will only convert "
|
1017 |
"PNGs if it results in a smaller file size. The resulting file will have a "
|
@@ -1019,170 +1060,170 @@ msgid ""
|
|
1019 |
"contain the original PNG filename will need to be updated."
|
1020 |
msgstr ""
|
1021 |
|
1022 |
-
#: lib/class-wp-smush-ui.php:
|
1023 |
msgid ""
|
1024 |
"Note: For this process to happen automatically you need automatic smushing "
|
1025 |
"enabled."
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: lib/class-wp-smush-ui.php:
|
1029 |
msgid "GET SMUSH PRO"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
-
#: lib/class-wp-smush-ui.php:
|
1033 |
msgid "LEARN MORE"
|
1034 |
msgstr ""
|
1035 |
|
1036 |
-
#: lib/class-wp-smush-ui.php:
|
1037 |
msgid "Here’s what you’ll get by uprading to Smush Pro."
|
1038 |
msgstr ""
|
1039 |
|
1040 |
-
#: lib/class-wp-smush-ui.php:
|
1041 |
msgid "Double the compression"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
-
#: lib/class-wp-smush-ui.php:
|
1045 |
msgid ""
|
1046 |
"Optimize images 2x more than regular smushing and with no visible loss in "
|
1047 |
"quality using Smush’s intelligent multi-pass lossy compression."
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: lib/class-wp-smush-ui.php:
|
1051 |
msgid "No limits"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
-
#: lib/class-wp-smush-ui.php:
|
1055 |
msgid ""
|
1056 |
"The free version allows you to Smush up to 1Mb images, and 50 at a time. The "
|
1057 |
"Pro version releases all those limits so you can smush all the things."
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: lib/class-wp-smush-ui.php:
|
1061 |
msgid "Include your originals"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: lib/class-wp-smush-ui.php:
|
1065 |
msgid ""
|
1066 |
"The free version of Smush only compresses your automatically generated image "
|
1067 |
"thumbnails. With Pro you can compress your original size images too - in "
|
1068 |
"case you want to use them in your theme."
|
1069 |
msgstr ""
|
1070 |
|
1071 |
-
#: lib/class-wp-smush-ui.php:
|
1072 |
msgid "Convert PNGs to JPEGs"
|
1073 |
msgstr ""
|
1074 |
|
1075 |
-
#: lib/class-wp-smush-ui.php:
|
1076 |
msgid ""
|
1077 |
"If any of your non-transparent PNGs can be made smaller by converting to "
|
1078 |
"JPEG, Smush will automatically convert them to JPEGs so they load faster for "
|
1079 |
"your visitors."
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: lib/class-wp-smush-ui.php:
|
1083 |
msgid "Integration with NextGen Gallery"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: lib/class-wp-smush-ui.php:
|
1087 |
msgid ""
|
1088 |
"Using the NextGen Gallery plugin? The Pro version allows you to compress "
|
1089 |
"images directly through NextGen Gallery’s settings."
|
1090 |
msgstr ""
|
1091 |
|
1092 |
-
#: lib/class-wp-smush-ui.php:
|
1093 |
#, php-format
|
1094 |
msgid ""
|
1095 |
"Get all of this including 200% faster smushing, Amazon S3 support and heaps "
|
1096 |
"more as part of a WPMU DEV membership."
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: lib/class-wp-smush.php:
|
1100 |
msgid "File path is empty"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: lib/class-wp-smush.php:
|
1104 |
#, php-format
|
1105 |
msgid "Could not find %s"
|
1106 |
msgstr ""
|
1107 |
|
1108 |
-
#: lib/class-wp-smush.php:
|
1109 |
#, php-format
|
1110 |
msgid "%s is not writable"
|
1111 |
msgstr ""
|
1112 |
|
1113 |
-
#: lib/class-wp-smush.php:
|
1114 |
#, php-format
|
1115 |
msgid "Skipped (%s), image not found. Attachment: %s"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
-
#: lib/class-wp-smush.php:
|
1119 |
#, php-format
|
1120 |
msgid "Skipped (%s), size limit exceeded. Attachment: %s"
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: lib/class-wp-smush.php:
|
1124 |
msgid "Unknown API error"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: lib/class-wp-smush.php:
|
1128 |
msgid ""
|
1129 |
"Skipped due to a timeout error. You can increase the request timeout to make "
|
1130 |
"sure Smush has enough time to process larger files. "
|
1131 |
"`define('WP_SMUSH_API_TIMEOUT', 150);`."
|
1132 |
msgstr ""
|
1133 |
|
1134 |
-
#: lib/class-wp-smush.php:
|
1135 |
#, php-format
|
1136 |
msgid "Error posting to API: %s"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: lib/class-wp-smush.php:
|
1140 |
#, php-format
|
1141 |
msgid "Error posting to API: %s %s"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
-
#: lib/class-wp-smush.php:
|
1145 |
msgid "Smush data corrupted, try again."
|
1146 |
msgstr ""
|
1147 |
|
1148 |
-
#: lib/class-wp-smush.php:
|
1149 |
msgid "Image couldn't be smushed"
|
1150 |
msgstr ""
|
1151 |
|
1152 |
-
#: lib/class-wp-smush.php:
|
1153 |
#, php-format
|
1154 |
msgid "%d images reduced "
|
1155 |
msgstr ""
|
1156 |
|
1157 |
-
#: lib/class-wp-smush.php:
|
1158 |
msgid "Reduced "
|
1159 |
msgstr ""
|
1160 |
|
1161 |
-
#: lib/class-wp-smush.php:
|
1162 |
#, php-format
|
1163 |
msgid "by %s %s"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
-
#: lib/class-wp-smush.php:
|
1167 |
#, php-format
|
1168 |
msgid "<br /> Image Size: %s"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#: lib/class-wp-smush.php:
|
1172 |
msgid "Detailed stats for all the image sizes"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: lib/class-wp-smush.php:
|
1176 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:
|
1177 |
msgid "Smush stats"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
-
#: lib/class-wp-smush.php:
|
1181 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1182 |
msgid "Not processed"
|
1183 |
msgstr ""
|
1184 |
|
1185 |
-
#: lib/class-wp-smush.php:
|
1186 |
#, php-format
|
1187 |
msgid ""
|
1188 |
"When you upload an image to WordPress it automatically creates %s thumbnail "
|
@@ -1191,47 +1232,47 @@ msgid ""
|
|
1191 |
"site we don’t Smush them. Pro users can override this."
|
1192 |
msgstr ""
|
1193 |
|
1194 |
-
#: lib/class-wp-smush.php:
|
1195 |
msgid ""
|
1196 |
"Image couldn't be smushed as it exceeded the 1Mb size limit, Pro users can "
|
1197 |
"smush images with size up to 32Mb."
|
1198 |
msgstr ""
|
1199 |
|
1200 |
-
#: lib/class-wp-smush.php:
|
1201 |
msgid " Skipped"
|
1202 |
msgstr ""
|
1203 |
|
1204 |
-
#: lib/class-wp-smush.php:
|
1205 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:
|
1206 |
msgid "Image size"
|
1207 |
msgstr ""
|
1208 |
|
1209 |
-
#: lib/class-wp-smush.php:
|
1210 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:
|
1211 |
msgid "Savings"
|
1212 |
msgstr ""
|
1213 |
|
1214 |
-
#: lib/class-wp-smush.php:
|
1215 |
msgid "Restore original image."
|
1216 |
msgstr ""
|
1217 |
|
1218 |
-
#: lib/class-wp-smush.php:
|
1219 |
msgid "Restore image"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
-
#: lib/class-wp-smush.php:
|
1223 |
msgid "Smush image including original file."
|
1224 |
msgstr ""
|
1225 |
|
1226 |
-
#: lib/class-wp-smush.php:
|
1227 |
msgid "Resmush image"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: lib/class-wp-smush.php:
|
1231 |
msgid "Plugin: Smush"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: lib/class-wp-smush.php:
|
1235 |
msgid ""
|
1236 |
"Note: Smush does not interact with end users on your website. The only input "
|
1237 |
"option Smush has is to a newsletter subscription for site admins only. If "
|
@@ -1239,14 +1280,14 @@ msgid ""
|
|
1239 |
"use the information below."
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: lib/class-wp-smush.php:
|
1243 |
msgid ""
|
1244 |
"Smush sends images to the WPMU DEV servers to optimize them for web use. "
|
1245 |
"This includes the transfer of EXIF data. The EXIF data will either be "
|
1246 |
"stripped or returned as it is. It is not stored on the WPMU DEV servers."
|
1247 |
msgstr ""
|
1248 |
|
1249 |
-
#: lib/class-wp-smush.php:
|
1250 |
msgid ""
|
1251 |
"Smush uses a third-party email service (Drip) to send informational emails "
|
1252 |
"to the site administrator. The administrator's email address is sent to Drip "
|
@@ -1254,38 +1295,34 @@ msgid ""
|
|
1254 |
"collected by Drip."
|
1255 |
msgstr ""
|
1256 |
|
1257 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1258 |
-
msgid "Bulk WP Smush"
|
1259 |
-
msgstr ""
|
1260 |
-
|
1261 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:391
|
1262 |
#, php-format
|
1263 |
msgid ""
|
1264 |
"We haven’t found any images in your %sgallery%s yet, so there’s no smushing "
|
1265 |
"to be done! Once you upload images, reload this page and start playing!"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1269 |
#, php-format
|
1270 |
msgid ""
|
1271 |
"Enable Super-smush in the %sSettings%s area to get even more savings with "
|
1272 |
"almost no visible drop in quality."
|
1273 |
msgstr ""
|
1274 |
|
1275 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1276 |
#, php-format
|
1277 |
msgid "Smush individual images via your %sManage Galleries%s section"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1281 |
msgid "Manage Galleries"
|
1282 |
msgstr ""
|
1283 |
|
1284 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1285 |
msgid "Super-smushed images"
|
1286 |
msgstr ""
|
1287 |
|
1288 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:
|
1289 |
#, php-format
|
1290 |
msgid "%sDISABLED%s"
|
1291 |
msgstr ""
|
@@ -1296,7 +1333,7 @@ msgid ""
|
|
1296 |
"`WP_SMUSH_API_TIMEOUT`."
|
1297 |
msgstr ""
|
1298 |
|
1299 |
-
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:
|
1300 |
#, php-format
|
1301 |
msgid "Reduced by %s ( %01.1f%% )"
|
1302 |
msgstr ""
|
@@ -1305,8 +1342,8 @@ msgstr ""
|
|
1305 |
msgid "Get Fast"
|
1306 |
msgstr ""
|
1307 |
|
1308 |
-
#: wp-smush.php:
|
1309 |
-
msgid "
|
1310 |
msgstr ""
|
1311 |
|
1312 |
#. Plugin URI of the plugin/theme
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
+
"Project-Id-Version: Smush\n"
|
5 |
+
"POT-Creation-Date: 2018-05-24 10:53+0530\n"
|
6 |
+
"PO-Revision-Date: 2018-05-24 10:52+0530\n"
|
7 |
"Last-Translator: Umesh <umeshsingla05@gmail.com>\n"
|
8 |
"Language-Team: Umesh <umeshsingla05@gmail.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
32 |
msgstr ""
|
33 |
|
34 |
#: assets/shared-ui/plugin-ui.php:272 extras/free-dashboard/module.php:395
|
35 |
+
#: extras/free-dashboard/module.php:434 lib/class-wp-smush-ui.php:948
|
36 |
msgid "Saving"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: assets/shared-ui/plugin-ui.php:301 lib/class-wp-smush-ui.php:948
|
40 |
msgid "Dismiss"
|
41 |
msgstr ""
|
42 |
|
157 |
|
158 |
#: lib/class-wp-smush-admin.php:261
|
159 |
msgid ""
|
160 |
+
"Save a ton of space by not storing over-sized images on your server. Set a "
|
161 |
+
"maximum height and width for all images uploaded to your site so that any "
|
162 |
+
"unnecessarily large images are automatically resized before they are added "
|
163 |
+
"to the media gallery."
|
164 |
msgstr ""
|
165 |
|
166 |
#: lib/class-wp-smush-admin.php:264
|
188 |
"JPEG will further reduce its size."
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: lib/class-wp-smush-admin.php:294 lib/class-wp-smush-admin.php:2005
|
192 |
+
#: lib/class-wp-smush-dir.php:287 lib/class-wp-smush-ui.php:732
|
193 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:81
|
194 |
+
msgid "Smush Pro"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#. Plugin Name of the plugin/theme
|
198 |
+
#: lib/class-wp-smush-admin.php:294 lib/class-wp-smush-admin.php:2257
|
199 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:81
|
200 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:101
|
201 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:103
|
202 |
+
msgid "Smush"
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: lib/class-wp-smush-admin.php:397 lib/class-wp-smush.php:1112
|
206 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:172
|
207 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:269
|
208 |
msgid "Super-Smush"
|
209 |
msgstr ""
|
210 |
|
211 |
+
#: lib/class-wp-smush-admin.php:398
|
212 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:173
|
213 |
msgid "Smush Now"
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: lib/class-wp-smush-admin.php:399
|
217 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:174
|
218 |
msgid "{{errors}} image(s) were skipped due to an error."
|
219 |
msgstr ""
|
220 |
|
221 |
+
#: lib/class-wp-smush-admin.php:400
|
222 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:175
|
223 |
msgid "All images are fully optimized."
|
224 |
msgstr ""
|
225 |
|
226 |
+
#: lib/class-wp-smush-admin.php:401
|
227 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:176
|
228 |
msgid "Restoring image.."
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: lib/class-wp-smush-admin.php:402
|
232 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:177
|
233 |
msgid "Smushing image.."
|
234 |
msgstr ""
|
235 |
|
236 |
+
#: lib/class-wp-smush-admin.php:403
|
237 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:178
|
238 |
msgid "Checking images.."
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: lib/class-wp-smush-admin.php:404
|
242 |
msgid ""
|
243 |
"We successfully verified your membership, all the Pro features should work "
|
244 |
"completely. "
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: lib/class-wp-smush-admin.php:405
|
248 |
msgid "Your membership couldn't be verified."
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: lib/class-wp-smush-admin.php:406
|
252 |
msgid "Missing file path."
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: lib/class-wp-smush-admin.php:408
|
256 |
msgid "image could not be smushed."
|
257 |
msgstr ""
|
258 |
|
259 |
+
#: lib/class-wp-smush-admin.php:409
|
260 |
msgid "images could not be smushed."
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: lib/class-wp-smush-admin.php:410 lib/class-wp-smush.php:1030
|
264 |
+
#: lib/class-wp-smush.php:1037
|
265 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:188
|
266 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:191
|
267 |
msgid "Already Optimized"
|
268 |
msgstr ""
|
269 |
|
270 |
+
#: lib/class-wp-smush-admin.php:411
|
271 |
msgid "Ajax Error"
|
272 |
msgstr ""
|
273 |
|
274 |
+
#: lib/class-wp-smush-admin.php:412
|
275 |
msgid "All Done!"
|
276 |
msgstr ""
|
277 |
|
278 |
+
#: lib/class-wp-smush-admin.php:413 lib/class-wp-smush-ui.php:72
|
279 |
msgid "QUICK SETUP"
|
280 |
msgstr ""
|
281 |
|
282 |
+
#: lib/class-wp-smush-admin.php:413 lib/class-wp-smush-ui.php:818
|
283 |
msgid "Skip"
|
284 |
msgstr ""
|
285 |
|
286 |
+
#: lib/class-wp-smush-admin.php:414
|
287 |
msgid "Give us a moment while we sync the stats."
|
288 |
msgstr ""
|
289 |
|
290 |
+
#: lib/class-wp-smush-admin.php:589
|
291 |
#, php-format
|
292 |
msgid "%s%d%s Attachment(s) could not be smushed, as no ID was received."
|
293 |
msgstr ""
|
294 |
|
295 |
+
#: lib/class-wp-smush-admin.php:605
|
296 |
#, php-format
|
297 |
msgid ""
|
298 |
"You've exceeded Bulk Smush limit of %d images at once for standard users. "
|
299 |
"Click on Bulk Smush to continue."
|
300 |
msgstr ""
|
301 |
|
302 |
+
#: lib/class-wp-smush-admin.php:629
|
303 |
#, php-format
|
304 |
msgid "%s%d%s Attachment(s) were skipped."
|
305 |
msgstr ""
|
306 |
|
307 |
+
#: lib/class-wp-smush-admin.php:702
|
308 |
#, php-format
|
309 |
msgid ""
|
310 |
"%s%d%s Attachment(s) were not smushed due to a timeout error, You can "
|
312 |
"larger files. `define('WP_SMUSH_API_TIMEOUT', 150);`"
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: lib/class-wp-smush-admin.php:761 lib/class-wp-smush-nextgen.php:447
|
316 |
msgid "You don't have permission to work with uploaded files."
|
317 |
msgstr ""
|
318 |
|
319 |
+
#: lib/class-wp-smush-admin.php:765 lib/class-wp-smush-nextgen.php:451
|
320 |
msgid "No attachment ID was provided."
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: lib/class-wp-smush-admin.php:777
|
324 |
msgid "Attachment Skipped - Check `wp_smush_image` filter."
|
325 |
msgstr ""
|
326 |
|
327 |
+
#: lib/class-wp-smush-admin.php:968
|
328 |
#, php-format
|
329 |
msgid "<strong>%d of %d images</strong> were sent for smushing:"
|
330 |
msgstr ""
|
331 |
|
332 |
+
#: lib/class-wp-smush-admin.php:1157 lib/class-wp-smush.php:1118
|
333 |
msgid "Smushing in progress.."
|
334 |
msgstr ""
|
335 |
|
336 |
+
#: lib/class-wp-smush-admin.php:1163 lib/class-wp-smush.php:1137
|
337 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:294
|
338 |
msgid "Smush Now!"
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: lib/class-wp-smush-admin.php:1184
|
342 |
msgid "Settings"
|
343 |
msgstr ""
|
344 |
|
345 |
+
#: lib/class-wp-smush-admin.php:1347
|
346 |
msgid "Image not smushed, fields empty."
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: lib/class-wp-smush-admin.php:1354 lib/class-wp-smush-nextgen.php:638
|
350 |
msgid ""
|
351 |
"Image couldn't be smushed as the nonce verification failed, try reloading "
|
352 |
"the page."
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: lib/class-wp-smush-admin.php:1400
|
356 |
msgid ""
|
357 |
"We haven’t found any images in your media library yet so there’s no smushing "
|
358 |
"to be done! Once you upload images, reload this page and start playing!"
|
359 |
msgstr ""
|
360 |
|
361 |
+
#: lib/class-wp-smush-admin.php:1415
|
362 |
msgid "Yay! All images are optimized as per your current settings."
|
363 |
msgstr ""
|
364 |
|
365 |
+
#: lib/class-wp-smush-admin.php:1610 lib/class-wp-smush-ui.php:845
|
366 |
#, php-format
|
367 |
msgid "You have images that need smushing. %sBulk smush now!%s"
|
368 |
msgstr ""
|
369 |
|
370 |
+
#: lib/class-wp-smush-admin.php:2004
|
371 |
msgid "Review your setting now."
|
372 |
msgstr ""
|
373 |
|
374 |
+
#: lib/class-wp-smush-admin.php:2006
|
|
|
|
|
|
|
|
|
|
|
375 |
msgid ""
|
376 |
+
"Welcome to the newest version of Smush! In this update we've added the "
|
377 |
"ability to bulk smush images in directories outside your uploads folder."
|
378 |
msgstr ""
|
379 |
|
380 |
+
#: lib/class-wp-smush-admin.php:2009
|
381 |
#, php-format
|
382 |
msgid ""
|
383 |
" And as a multisite user, you can manage %sSmush settings%s globally across "
|
384 |
"all sites!"
|
385 |
msgstr ""
|
386 |
|
387 |
+
#: lib/class-wp-smush-admin.php:2012
|
388 |
#, php-format
|
389 |
msgid " %sFind out more here >>%s"
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: lib/class-wp-smush-backup.php:148 lib/class-wp-smush-nextgen.php:534
|
|
|
|
|
|
|
|
|
393 |
msgid "Error in processing restore action, Fields empty."
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: lib/class-wp-smush-backup.php:155 lib/class-wp-smush-nextgen.php:542
|
397 |
msgid "Image not restored, Nonce verification failed."
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: lib/class-wp-smush-backup.php:286 lib/class-wp-smush-nextgen.php:620
|
401 |
msgid "Unable to restore image"
|
402 |
msgstr ""
|
403 |
|
405 |
msgid "Directory-smush savings"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: lib/class-wp-smush-dir.php:94
|
409 |
msgid "Updating Stats"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: lib/class-wp-smush-dir.php:105
|
413 |
msgid "Smush images that aren't located in your uploads folder."
|
414 |
msgstr ""
|
415 |
|
416 |
+
#: lib/class-wp-smush-dir.php:107
|
417 |
msgid "Select a directory you'd like to Smush."
|
418 |
msgstr ""
|
419 |
|
420 |
+
#: lib/class-wp-smush-dir.php:107
|
421 |
msgid "Choose directory"
|
422 |
msgstr ""
|
423 |
|
424 |
+
#: lib/class-wp-smush-dir.php:224
|
425 |
msgid "RESUME LAST SCAN"
|
426 |
msgstr ""
|
427 |
|
428 |
+
#: lib/class-wp-smush-dir.php:263
|
429 |
msgid "DIRECTORY SMUSH"
|
430 |
msgstr ""
|
431 |
|
432 |
+
#: lib/class-wp-smush-dir.php:268
|
433 |
msgid ""
|
434 |
"In addition to smushing your media uploads, you may want to also smush "
|
435 |
"images living outside your uploads directory. Simply add any directories you "
|
436 |
"wish to smush and bulk smush away!"
|
437 |
msgstr ""
|
438 |
|
439 |
+
#: lib/class-wp-smush-dir.php:281
|
440 |
msgid ""
|
441 |
"All images for the selected directory are smushed and up to date. Awesome!"
|
442 |
msgstr ""
|
443 |
|
444 |
+
#: lib/class-wp-smush-dir.php:284
|
445 |
#, php-format
|
446 |
msgid ""
|
447 |
"%s/%s image(s) were successfully smushed, however %s image(s) could not be "
|
448 |
"smushed due to an error."
|
449 |
msgstr ""
|
450 |
|
451 |
+
#: lib/class-wp-smush-dir.php:287
|
452 |
#, php-format
|
453 |
msgid ""
|
454 |
" %sUpgrade to pro%s to bulk smush all your directory images with one click. "
|
455 |
"Free users can smush 50 images with each click."
|
456 |
msgstr ""
|
457 |
|
458 |
+
#: lib/class-wp-smush-dir.php:291 lib/class-wp-smush-ui.php:143
|
459 |
+
#: lib/class-wp-smush-ui.php:713
|
460 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:429
|
461 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:470
|
462 |
msgid "BULK SMUSH"
|
463 |
msgstr ""
|
464 |
|
465 |
+
#: lib/class-wp-smush-dir.php:293
|
466 |
msgid "Click to stop the directory smushing process."
|
467 |
msgstr ""
|
468 |
|
469 |
+
#: lib/class-wp-smush-dir.php:294 lib/class-wp-smush-ui.php:780
|
470 |
msgid "CANCEL"
|
471 |
msgstr ""
|
472 |
|
473 |
+
#: lib/class-wp-smush-dir.php:302
|
474 |
msgid "CHOOSE DIRECTORY"
|
475 |
msgstr ""
|
476 |
|
477 |
+
#: lib/class-wp-smush-dir.php:474
|
478 |
msgid "Exclude directory from Smush List"
|
479 |
msgstr ""
|
480 |
|
481 |
+
#: lib/class-wp-smush-dir.php:619
|
482 |
msgid "We could not find any images in the selected directory."
|
483 |
msgstr ""
|
484 |
|
485 |
+
#: lib/class-wp-smush-dir.php:942
|
486 |
#, php-format
|
487 |
msgid "%d images"
|
488 |
msgstr ""
|
489 |
|
490 |
+
#: lib/class-wp-smush-dir.php:977
|
491 |
msgid "Waiting.."
|
492 |
msgstr ""
|
493 |
|
494 |
+
#: lib/class-wp-smush-dir.php:1099
|
495 |
msgid "Incorrect image id"
|
496 |
msgstr ""
|
497 |
|
498 |
+
#: lib/class-wp-smush-dir.php:1133
|
499 |
msgid "Could not find image id in last scanned images"
|
500 |
msgstr ""
|
501 |
|
502 |
+
#: lib/class-wp-smush-dir.php:1146
|
503 |
msgid "Image couldn't be optimized"
|
504 |
msgstr ""
|
505 |
|
506 |
+
#: lib/class-wp-smush-dir.php:1190 lib/class-wp-smush-dir.php:1323
|
507 |
#, php-format
|
508 |
msgid "You've smushed %d images in total."
|
509 |
msgstr ""
|
510 |
|
511 |
+
#: lib/class-wp-smush-dir.php:1267
|
512 |
msgid ""
|
513 |
"We were unable to retrieve the image list from last scan, please continue "
|
514 |
"with the latest scan"
|
515 |
msgstr ""
|
516 |
|
517 |
+
#: lib/class-wp-smush-dir.php:1365
|
518 |
msgid "Directory list"
|
519 |
msgstr ""
|
520 |
|
521 |
+
#: lib/class-wp-smush-dir.php:1369
|
522 |
msgid "Choose the folder you wish to smush."
|
523 |
msgstr ""
|
524 |
|
525 |
+
#: lib/class-wp-smush-dir.php:1373
|
526 |
msgid ""
|
527 |
"Smush will also include any images in sub folders of your selected folder."
|
528 |
msgstr ""
|
529 |
|
530 |
+
#: lib/class-wp-smush-dir.php:1376
|
531 |
msgid "ADD DIRECTORY"
|
532 |
msgstr ""
|
533 |
|
534 |
+
#: lib/class-wp-smush-dir.php:1403
|
535 |
+
msgid ""
|
536 |
+
"Directory smushing requires custom tables and it seems there was an error "
|
537 |
+
"creating tables. For help, please contact our team on the support forums"
|
538 |
+
msgstr ""
|
539 |
+
|
540 |
+
#: lib/class-wp-smush-nextgen.php:80
|
541 |
msgid "Enable NextGen Gallery integration"
|
542 |
msgstr ""
|
543 |
|
544 |
+
#: lib/class-wp-smush-nextgen.php:81
|
545 |
msgid "NextGen Gallery"
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: lib/class-wp-smush-nextgen.php:82
|
549 |
msgid "Allow smushing images directly through NextGen Gallery settings."
|
550 |
msgstr ""
|
551 |
|
552 |
+
#: lib/class-wp-smush-nextgen.php:388
|
553 |
msgid ""
|
554 |
"We couldn't find the metadata for the image, possibly the image has been "
|
555 |
"deleted."
|
556 |
msgstr ""
|
557 |
|
558 |
+
#: lib/class-wp-smush-nextgen.php:631
|
559 |
msgid "We couldn't process the image, fields empty."
|
560 |
msgstr ""
|
561 |
|
562 |
+
#: lib/class-wp-smush-nextgen.php:655
|
563 |
#, php-format
|
564 |
msgid "Unable to smush image, %s"
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: lib/class-wp-smush-recommender.php:50
|
568 |
+
msgid "Check out our other free wordpress.org plugins!"
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: lib/class-wp-smush-recommender.php:54
|
572 |
+
msgid "Hummingbird Page Speed Optimization"
|
573 |
+
msgstr ""
|
574 |
+
|
575 |
+
#: lib/class-wp-smush-recommender.php:55
|
576 |
+
msgid ""
|
577 |
+
"Performance Tests, File Optimization & Compression, Page, Browser & Gravatar "
|
578 |
+
"Caching, GZIP Compression, CloudFlare Integration & more."
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: lib/class-wp-smush-recommender.php:60
|
582 |
+
msgid "Defender Security, Monitoring, and Hack Protection"
|
583 |
+
msgstr ""
|
584 |
+
|
585 |
+
#: lib/class-wp-smush-recommender.php:61
|
586 |
+
msgid ""
|
587 |
+
"Security Tweaks & Recommendations, File & Malware Scanning, Login & 404 "
|
588 |
+
"Lockout Protection, Two-Factor Authentication & more."
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: lib/class-wp-smush-recommender.php:66
|
592 |
+
msgid "SmartCrawl Search Engine Optimization"
|
593 |
+
msgstr ""
|
594 |
+
|
595 |
+
#: lib/class-wp-smush-recommender.php:67
|
596 |
+
msgid ""
|
597 |
+
"Customize Titles & Meta Data, OpenGraph, Twitter & Pinterest Support, Auto-"
|
598 |
+
"Keyword Linking, SEO & Readability Analysis, Sitemaps, URL Crawler & more."
|
599 |
+
msgstr ""
|
600 |
+
|
601 |
#: lib/class-wp-smush-s3.php:60
|
602 |
msgid "Enable Amazon S3 support"
|
603 |
msgstr ""
|
659 |
#: lib/class-wp-smush-share.php:26
|
660 |
#, php-format
|
661 |
msgid ""
|
662 |
+
"I saved %s%s%s on my site with Smush ( %s ) - wanna make your website light "
|
663 |
+
"and faster?"
|
664 |
msgstr ""
|
665 |
|
666 |
#: lib/class-wp-smush-share.php:34
|
704 |
msgstr ""
|
705 |
|
706 |
#: lib/class-wp-smush-ui.php:172
|
707 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:487
|
708 |
msgid ""
|
709 |
"Lets you check if any images can be further optimized. Useful after changing "
|
710 |
"settings."
|
711 |
msgstr ""
|
712 |
|
713 |
#: lib/class-wp-smush-ui.php:172
|
714 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:487
|
715 |
msgid "RE-CHECK IMAGES"
|
716 |
msgstr ""
|
717 |
|
718 |
#: lib/class-wp-smush-ui.php:173
|
719 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:488
|
720 |
msgid "STATS"
|
721 |
msgstr ""
|
722 |
|
726 |
msgstr ""
|
727 |
|
728 |
#: lib/class-wp-smush-ui.php:194
|
729 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:499
|
730 |
msgid "Images smushed"
|
731 |
msgstr ""
|
732 |
|
739 |
msgstr ""
|
740 |
|
741 |
#: lib/class-wp-smush-ui.php:218
|
742 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:505
|
743 |
msgid "Total savings"
|
744 |
msgstr ""
|
745 |
|
804 |
msgid "Save a ton of space by not storing over-sized images on your server."
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: lib/class-wp-smush-ui.php:679
|
808 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:414
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
809 |
msgid "No attachments found - Upload some images"
|
810 |
msgstr ""
|
811 |
|
812 |
+
#: lib/class-wp-smush-ui.php:681
|
813 |
#, php-format
|
814 |
msgid ""
|
815 |
"We haven’t found any images in your %smedia library%s yet so there’s no "
|
817 |
"playing!"
|
818 |
msgstr ""
|
819 |
|
820 |
+
#: lib/class-wp-smush-ui.php:684
|
821 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:419
|
822 |
msgid "UPLOAD IMAGES"
|
823 |
msgstr ""
|
824 |
|
825 |
+
#: lib/class-wp-smush-ui.php:689
|
826 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:424
|
827 |
msgid "All images are smushed and up to date. Awesome!"
|
828 |
msgstr ""
|
829 |
|
830 |
+
#: lib/class-wp-smush-ui.php:693
|
831 |
msgid "Still having trouble with PageSpeed tests? Give these a go…"
|
832 |
msgstr ""
|
833 |
|
834 |
+
#: lib/class-wp-smush-ui.php:696
|
835 |
#, php-format
|
836 |
msgid "Upgrade to Smush Pro for advanced lossy compression. %sTry pro free%s."
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: lib/class-wp-smush-ui.php:698
|
840 |
#, php-format
|
841 |
msgid ""
|
842 |
"Enable %sSuper-smush%s for advanced lossy compression to optimise images "
|
843 |
"further with almost no visible drop in quality."
|
844 |
msgstr ""
|
845 |
|
846 |
+
#: lib/class-wp-smush-ui.php:700
|
847 |
#, php-format
|
848 |
msgid ""
|
849 |
"Make sure your images are the right size for your theme. %sLearn more%s."
|
850 |
msgstr ""
|
851 |
|
852 |
+
#: lib/class-wp-smush-ui.php:703
|
853 |
#, php-format
|
854 |
msgid ""
|
855 |
"Enable %sResize Original Images%s to scale big images down to a reasonable "
|
856 |
"size and save a ton of space."
|
857 |
msgstr ""
|
858 |
|
859 |
+
#: lib/class-wp-smush-ui.php:707
|
860 |
msgid "DISMISS"
|
861 |
msgstr ""
|
862 |
|
863 |
+
#: lib/class-wp-smush-ui.php:730
|
864 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:435
|
865 |
#, php-format
|
866 |
msgid "%s, you have %s%s%d%s attachment%s that needs smushing!"
|
867 |
msgid_plural "%s, you have %s%s%d%s attachments%s that need smushing!"
|
868 |
msgstr[0] ""
|
869 |
msgstr[1] ""
|
870 |
|
871 |
+
#: lib/class-wp-smush-ui.php:732
|
872 |
#, php-format
|
873 |
msgid " %sUpgrade to Pro%s to bulk smush all your images with one click."
|
874 |
msgstr ""
|
875 |
|
876 |
+
#: lib/class-wp-smush-ui.php:733
|
877 |
msgid " Free users can smush 50 images with each click."
|
878 |
msgstr ""
|
879 |
|
880 |
+
#: lib/class-wp-smush-ui.php:738
|
881 |
msgid "Click to start Bulk Smushing images in Media Library"
|
882 |
msgstr ""
|
883 |
|
884 |
+
#: lib/class-wp-smush-ui.php:743
|
885 |
msgid ""
|
886 |
"Tip: Enable Super-smush in the Settings area to get even more savings with "
|
887 |
"almost no visible drop in quality."
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: lib/class-wp-smush-ui.php:765
|
891 |
#, php-format
|
892 |
msgid ""
|
893 |
"%sBulk smush is currently running.%s You need to keep this page open for the "
|
894 |
"process to complete."
|
895 |
msgstr ""
|
896 |
|
897 |
+
#: lib/class-wp-smush-ui.php:776
|
898 |
#, php-format
|
899 |
msgid "%s%d%s of your media attachments have been smushed."
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: lib/class-wp-smush-ui.php:780
|
903 |
msgid "Stop current bulk smush process."
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: lib/class-wp-smush-ui.php:817
|
907 |
#, php-format
|
908 |
msgid "%s, you have %s%s%d%s attachment%s that needs re-compressing!"
|
909 |
msgid_plural "%s, you have %s%s%d%s attachments%s that need re-compressing!"
|
910 |
msgstr[0] ""
|
911 |
msgstr[1] ""
|
912 |
|
913 |
+
#: lib/class-wp-smush-ui.php:818
|
914 |
msgid "Skip re-smushing the images"
|
915 |
msgstr ""
|
916 |
|
917 |
+
#: lib/class-wp-smush-ui.php:838
|
918 |
msgid "Your settings have been updated!"
|
919 |
msgstr ""
|
920 |
|
921 |
+
#: lib/class-wp-smush-ui.php:871
|
922 |
+
msgid "DASHBOARD"
|
|
|
|
|
|
|
|
|
923 |
msgstr ""
|
924 |
|
925 |
+
#: lib/class-wp-smush-ui.php:873
|
926 |
#, php-format
|
927 |
msgid ""
|
928 |
"Automatic smushing is %senabled%s. Newly uploaded images will be "
|
929 |
"automagically compressed."
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: lib/class-wp-smush-ui.php:873
|
933 |
#, php-format
|
934 |
msgid ""
|
935 |
"Automatic smushing is %sdisabled%s. Newly uploaded images will need to be "
|
936 |
"manually smushed."
|
937 |
msgstr ""
|
938 |
|
939 |
+
#: lib/class-wp-smush-ui.php:921
|
940 |
msgid "Thanks for installing Smush. We hope you like it!"
|
941 |
msgstr ""
|
942 |
|
943 |
+
#: lib/class-wp-smush-ui.php:922
|
944 |
msgid ""
|
945 |
"And hey, if you do, you can join WPMU DEV for a free 30 day trial and get "
|
946 |
"access to even more features!"
|
947 |
msgstr ""
|
948 |
|
949 |
+
#: lib/class-wp-smush-ui.php:923 lib/class-wp-smush-ui.php:927
|
950 |
msgid "Try Smush Pro Free"
|
951 |
msgstr ""
|
952 |
|
953 |
+
#: lib/class-wp-smush-ui.php:925
|
954 |
msgid "Thanks for upgrading Smush!"
|
955 |
msgstr ""
|
956 |
|
957 |
+
#: lib/class-wp-smush-ui.php:976
|
958 |
#, php-format
|
959 |
msgid ""
|
960 |
+
"Did you know Smush Pro delivers up to 2x better compression, allows you to "
|
961 |
+
"smush your originals and removes any bulk smushing limits? – %sTry it "
|
962 |
"absolutely FREE%s"
|
963 |
msgstr ""
|
964 |
|
965 |
+
#: lib/class-wp-smush-ui.php:976 lib/class-wp-smush-ui.php:1001
|
966 |
+
msgid "Try Smush Pro for FREE"
|
967 |
msgstr ""
|
968 |
|
969 |
+
#: lib/class-wp-smush-ui.php:1001
|
970 |
#, php-format
|
971 |
msgid ""
|
972 |
"Smush Pro gives you all these extra settings and absolutely no limits on "
|
975 |
"%s"
|
976 |
msgstr ""
|
977 |
|
978 |
+
#: lib/class-wp-smush-ui.php:1024
|
979 |
msgid "Validating.."
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: lib/class-wp-smush-ui.php:1026
|
983 |
#, php-format
|
984 |
msgid ""
|
985 |
"It looks like Smush couldn’t verify your WPMU DEV membership so Pro features "
|
987 |
"%s or get in touch with our %ssupport team%s."
|
988 |
msgstr ""
|
989 |
|
990 |
+
#: lib/class-wp-smush-ui.php:1048
|
991 |
msgid "UPDATE SETTINGS"
|
992 |
msgstr ""
|
993 |
|
994 |
+
#: lib/class-wp-smush-ui.php:1050
|
995 |
msgid "Smush will automatically check for any images that need re-smushing."
|
996 |
msgstr ""
|
997 |
|
998 |
+
#: lib/class-wp-smush-ui.php:1076
|
999 |
msgid ""
|
1000 |
"Smush settings were updated, performing a quick scan to check if any of the "
|
1001 |
"images need to be Smushed again."
|
1002 |
msgstr ""
|
1003 |
|
1004 |
+
#: lib/class-wp-smush-ui.php:1097
|
1005 |
#, php-format
|
1006 |
msgid ""
|
1007 |
"Every time you upload an image to your site, WordPress generates a resized "
|
1011 |
"optimized:%s"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
+
#: lib/class-wp-smush-ui.php:1142
|
1015 |
msgid "Max width"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
+
#: lib/class-wp-smush-ui.php:1145
|
1019 |
msgid "Max height"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
+
#: lib/class-wp-smush-ui.php:1148
|
1023 |
#, php-format
|
1024 |
msgid ""
|
1025 |
"Currently, your largest image size is set at %s%dpx wide %s %dpx high%s."
|
1026 |
msgstr ""
|
1027 |
|
1028 |
+
#: lib/class-wp-smush-ui.php:1149
|
1029 |
msgid ""
|
1030 |
"Just to let you know, the width you've entered is less than your largest "
|
1031 |
"image and may result in pixelation."
|
1032 |
msgstr ""
|
1033 |
|
1034 |
+
#: lib/class-wp-smush-ui.php:1150
|
1035 |
msgid ""
|
1036 |
"Just to let you know, the height you’ve entered is less than your largest "
|
1037 |
"image and may result in pixelation."
|
1038 |
msgstr ""
|
1039 |
|
1040 |
+
#: lib/class-wp-smush-ui.php:1152
|
1041 |
+
msgid ""
|
1042 |
+
"Note: Image resizing happens automatically when you upload attachments. This "
|
1043 |
+
"setting does not apply to images smushed using Directory Smush feature. To "
|
1044 |
+
"support retina devices, we recommend using 2x the dimensions of your image "
|
1045 |
+
"size."
|
1046 |
+
msgstr ""
|
1047 |
+
|
1048 |
+
#: lib/class-wp-smush-ui.php:1211
|
1049 |
msgid ""
|
1050 |
"Note: This data, called EXIF, adds to the size of the image. While this "
|
1051 |
"information might be important to photographers, it’s unnecessary for most "
|
1052 |
"users and safe to remove."
|
1053 |
msgstr ""
|
1054 |
|
1055 |
+
#: lib/class-wp-smush-ui.php:1214
|
1056 |
msgid ""
|
1057 |
"Note: Any PNGs with transparency will be ignored. Smush will only convert "
|
1058 |
"PNGs if it results in a smaller file size. The resulting file will have a "
|
1060 |
"contain the original PNG filename will need to be updated."
|
1061 |
msgstr ""
|
1062 |
|
1063 |
+
#: lib/class-wp-smush-ui.php:1217
|
1064 |
msgid ""
|
1065 |
"Note: For this process to happen automatically you need automatic smushing "
|
1066 |
"enabled."
|
1067 |
msgstr ""
|
1068 |
|
1069 |
+
#: lib/class-wp-smush-ui.php:1237
|
1070 |
msgid "GET SMUSH PRO"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
+
#: lib/class-wp-smush-ui.php:1237 lib/class-wp-smush-ui.php:1267
|
1074 |
msgid "LEARN MORE"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
+
#: lib/class-wp-smush-ui.php:1238
|
1078 |
msgid "Here’s what you’ll get by uprading to Smush Pro."
|
1079 |
msgstr ""
|
1080 |
|
1081 |
+
#: lib/class-wp-smush-ui.php:1242
|
1082 |
msgid "Double the compression"
|
1083 |
msgstr ""
|
1084 |
|
1085 |
+
#: lib/class-wp-smush-ui.php:1243
|
1086 |
msgid ""
|
1087 |
"Optimize images 2x more than regular smushing and with no visible loss in "
|
1088 |
"quality using Smush’s intelligent multi-pass lossy compression."
|
1089 |
msgstr ""
|
1090 |
|
1091 |
+
#: lib/class-wp-smush-ui.php:1247
|
1092 |
msgid "No limits"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
+
#: lib/class-wp-smush-ui.php:1248
|
1096 |
msgid ""
|
1097 |
"The free version allows you to Smush up to 1Mb images, and 50 at a time. The "
|
1098 |
"Pro version releases all those limits so you can smush all the things."
|
1099 |
msgstr ""
|
1100 |
|
1101 |
+
#: lib/class-wp-smush-ui.php:1252
|
1102 |
msgid "Include your originals"
|
1103 |
msgstr ""
|
1104 |
|
1105 |
+
#: lib/class-wp-smush-ui.php:1253
|
1106 |
msgid ""
|
1107 |
"The free version of Smush only compresses your automatically generated image "
|
1108 |
"thumbnails. With Pro you can compress your original size images too - in "
|
1109 |
"case you want to use them in your theme."
|
1110 |
msgstr ""
|
1111 |
|
1112 |
+
#: lib/class-wp-smush-ui.php:1257
|
1113 |
msgid "Convert PNGs to JPEGs"
|
1114 |
msgstr ""
|
1115 |
|
1116 |
+
#: lib/class-wp-smush-ui.php:1258
|
1117 |
msgid ""
|
1118 |
"If any of your non-transparent PNGs can be made smaller by converting to "
|
1119 |
"JPEG, Smush will automatically convert them to JPEGs so they load faster for "
|
1120 |
"your visitors."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
+
#: lib/class-wp-smush-ui.php:1262
|
1124 |
msgid "Integration with NextGen Gallery"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
+
#: lib/class-wp-smush-ui.php:1263
|
1128 |
msgid ""
|
1129 |
"Using the NextGen Gallery plugin? The Pro version allows you to compress "
|
1130 |
"images directly through NextGen Gallery’s settings."
|
1131 |
msgstr ""
|
1132 |
|
1133 |
+
#: lib/class-wp-smush-ui.php:1266
|
1134 |
#, php-format
|
1135 |
msgid ""
|
1136 |
"Get all of this including 200% faster smushing, Amazon S3 support and heaps "
|
1137 |
"more as part of a WPMU DEV membership."
|
1138 |
msgstr ""
|
1139 |
|
1140 |
+
#: lib/class-wp-smush.php:224
|
1141 |
msgid "File path is empty"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
+
#: lib/class-wp-smush.php:227
|
1145 |
#, php-format
|
1146 |
msgid "Could not find %s"
|
1147 |
msgstr ""
|
1148 |
|
1149 |
+
#: lib/class-wp-smush.php:230
|
1150 |
#, php-format
|
1151 |
msgid "%s is not writable"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
+
#: lib/class-wp-smush.php:240
|
1155 |
#, php-format
|
1156 |
msgid "Skipped (%s), image not found. Attachment: %s"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
+
#: lib/class-wp-smush.php:243
|
1160 |
#, php-format
|
1161 |
msgid "Skipped (%s), size limit exceeded. Attachment: %s"
|
1162 |
msgstr ""
|
1163 |
|
1164 |
+
#: lib/class-wp-smush.php:261
|
1165 |
msgid "Unknown API error"
|
1166 |
msgstr ""
|
1167 |
|
1168 |
+
#: lib/class-wp-smush.php:744
|
1169 |
msgid ""
|
1170 |
"Skipped due to a timeout error. You can increase the request timeout to make "
|
1171 |
"sure Smush has enough time to process larger files. "
|
1172 |
"`define('WP_SMUSH_API_TIMEOUT', 150);`."
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: lib/class-wp-smush.php:747
|
1176 |
#, php-format
|
1177 |
msgid "Error posting to API: %s"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
+
#: lib/class-wp-smush.php:754
|
1181 |
#, php-format
|
1182 |
msgid "Error posting to API: %s %s"
|
1183 |
msgstr ""
|
1184 |
|
1185 |
+
#: lib/class-wp-smush.php:771
|
1186 |
msgid "Smush data corrupted, try again."
|
1187 |
msgstr ""
|
1188 |
|
1189 |
+
#: lib/class-wp-smush.php:797
|
1190 |
msgid "Image couldn't be smushed"
|
1191 |
msgstr ""
|
1192 |
|
1193 |
+
#: lib/class-wp-smush.php:1044
|
1194 |
#, php-format
|
1195 |
msgid "%d images reduced "
|
1196 |
msgstr ""
|
1197 |
|
1198 |
+
#: lib/class-wp-smush.php:1044
|
1199 |
msgid "Reduced "
|
1200 |
msgstr ""
|
1201 |
|
1202 |
+
#: lib/class-wp-smush.php:1048
|
1203 |
#, php-format
|
1204 |
msgid "by %s %s"
|
1205 |
msgstr ""
|
1206 |
|
1207 |
+
#: lib/class-wp-smush.php:1054
|
1208 |
#, php-format
|
1209 |
msgid "<br /> Image Size: %s"
|
1210 |
msgstr ""
|
1211 |
|
1212 |
+
#: lib/class-wp-smush.php:1084
|
1213 |
msgid "Detailed stats for all the image sizes"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
+
#: lib/class-wp-smush.php:1084
|
1217 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:231
|
1218 |
msgid "Smush stats"
|
1219 |
msgstr ""
|
1220 |
|
1221 |
+
#: lib/class-wp-smush.php:1131
|
1222 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:288
|
1223 |
msgid "Not processed"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
+
#: lib/class-wp-smush.php:1451
|
1227 |
#, php-format
|
1228 |
msgid ""
|
1229 |
"When you upload an image to WordPress it automatically creates %s thumbnail "
|
1232 |
"site we don’t Smush them. Pro users can override this."
|
1233 |
msgstr ""
|
1234 |
|
1235 |
+
#: lib/class-wp-smush.php:1454
|
1236 |
msgid ""
|
1237 |
"Image couldn't be smushed as it exceeded the 1Mb size limit, Pro users can "
|
1238 |
"smush images with size up to 32Mb."
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: lib/class-wp-smush.php:1456
|
1242 |
msgid " Skipped"
|
1243 |
msgstr ""
|
1244 |
|
1245 |
+
#: lib/class-wp-smush.php:1478
|
1246 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:463
|
1247 |
msgid "Image size"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
+
#: lib/class-wp-smush.php:1479
|
1251 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:464
|
1252 |
msgid "Savings"
|
1253 |
msgstr ""
|
1254 |
|
1255 |
+
#: lib/class-wp-smush.php:1730
|
1256 |
msgid "Restore original image."
|
1257 |
msgstr ""
|
1258 |
|
1259 |
+
#: lib/class-wp-smush.php:1730
|
1260 |
msgid "Restore image"
|
1261 |
msgstr ""
|
1262 |
|
1263 |
+
#: lib/class-wp-smush.php:1778
|
1264 |
msgid "Smush image including original file."
|
1265 |
msgstr ""
|
1266 |
|
1267 |
+
#: lib/class-wp-smush.php:1778
|
1268 |
msgid "Resmush image"
|
1269 |
msgstr ""
|
1270 |
|
1271 |
+
#: lib/class-wp-smush.php:2544
|
1272 |
msgid "Plugin: Smush"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
+
#: lib/class-wp-smush.php:2546
|
1276 |
msgid ""
|
1277 |
"Note: Smush does not interact with end users on your website. The only input "
|
1278 |
"option Smush has is to a newsletter subscription for site admins only. If "
|
1280 |
"use the information below."
|
1281 |
msgstr ""
|
1282 |
|
1283 |
+
#: lib/class-wp-smush.php:2548
|
1284 |
msgid ""
|
1285 |
"Smush sends images to the WPMU DEV servers to optimize them for web use. "
|
1286 |
"This includes the transfer of EXIF data. The EXIF data will either be "
|
1287 |
"stripped or returned as it is. It is not stored on the WPMU DEV servers."
|
1288 |
msgstr ""
|
1289 |
|
1290 |
+
#: lib/class-wp-smush.php:2553
|
1291 |
msgid ""
|
1292 |
"Smush uses a third-party email service (Drip) to send informational emails "
|
1293 |
"to the site administrator. The administrator's email address is sent to Drip "
|
1295 |
"collected by Drip."
|
1296 |
msgstr ""
|
1297 |
|
1298 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:416
|
|
|
|
|
|
|
|
|
1299 |
#, php-format
|
1300 |
msgid ""
|
1301 |
"We haven’t found any images in your %sgallery%s yet, so there’s no smushing "
|
1302 |
"to be done! Once you upload images, reload this page and start playing!"
|
1303 |
msgstr ""
|
1304 |
|
1305 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:450
|
1306 |
#, php-format
|
1307 |
msgid ""
|
1308 |
"Enable Super-smush in the %sSettings%s area to get even more savings with "
|
1309 |
"almost no visible drop in quality."
|
1310 |
msgstr ""
|
1311 |
|
1312 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:465
|
1313 |
#, php-format
|
1314 |
msgid "Smush individual images via your %sManage Galleries%s section"
|
1315 |
msgstr ""
|
1316 |
|
1317 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:465
|
1318 |
msgid "Manage Galleries"
|
1319 |
msgstr ""
|
1320 |
|
1321 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:521
|
1322 |
msgid "Super-smushed images"
|
1323 |
msgstr ""
|
1324 |
|
1325 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-admin.php:529
|
1326 |
#, php-format
|
1327 |
msgid "%sDISABLED%s"
|
1328 |
msgstr ""
|
1333 |
"`WP_SMUSH_API_TIMEOUT`."
|
1334 |
msgstr ""
|
1335 |
|
1336 |
+
#: lib/nextgen-integration/class-wp-smush-nextgen-stats.php:200
|
1337 |
#, php-format
|
1338 |
msgid "Reduced by %s ( %01.1f%% )"
|
1339 |
msgstr ""
|
1342 |
msgid "Get Fast"
|
1343 |
msgstr ""
|
1344 |
|
1345 |
+
#: wp-smush.php:213
|
1346 |
+
msgid "Smush Free was deactivated. You have Smush Pro active!"
|
1347 |
msgstr ""
|
1348 |
|
1349 |
#. Plugin URI of the plugin/theme
|
lib/class-wp-smush-admin.php
CHANGED
@@ -116,16 +116,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
116 |
'post',
|
117 |
'post-new',
|
118 |
'upload',
|
119 |
-
'
|
120 |
-
'
|
121 |
-
'media_page_wp-smush-all'
|
122 |
);
|
123 |
|
124 |
public $plugin_pages = array(
|
125 |
'gallery_page_wp-smush-nextgen-bulk',
|
126 |
-
'
|
127 |
-
'
|
128 |
-
'media_page_wp-smush-all'
|
129 |
);
|
130 |
|
131 |
public $basic_features = array(
|
@@ -220,12 +218,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
220 |
*/
|
221 |
add_action( 'wp_ajax_hide_api_message', array( $this, 'hide_api_message' ) );
|
222 |
|
223 |
-
|
224 |
-
add_action( 'wp_ajax_smush_get_attachment_details', array( $this, 'smush_send_status' ) );
|
225 |
|
226 |
//Send smush stats
|
227 |
add_action( 'wp_ajax_get_stats', array( $this, 'get_stats' ) );
|
228 |
|
|
|
|
|
|
|
229 |
}
|
230 |
|
231 |
function init_settings() {
|
@@ -258,7 +258,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
258 |
'resize' => array(
|
259 |
'label' => esc_html__( 'Resize my full size images', 'wp-smushit' ),
|
260 |
'short_label' => esc_html__( 'Full size images', 'wp-smushit' ),
|
261 |
-
'desc' => esc_html__( 'Set a maximum height and width for all images uploaded to your site so that any unnecessarily large images are automatically resized before they are added to the media gallery.
|
262 |
),
|
263 |
'backup' => array(
|
264 |
'label' => esc_html__( 'Make a copy of my full size images', 'wp-smushit' ),
|
@@ -288,22 +288,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
288 |
* Add Bulk option settings page
|
289 |
*/
|
290 |
function screen() {
|
291 |
-
global $
|
292 |
-
|
293 |
-
//Bulk Smush Page for each site
|
294 |
-
$admin_page_suffix = add_media_page( 'Bulk WP Smush', 'WP Smush', 'edit_others_posts', 'wp-smush-bulk', array(
|
295 |
-
$wpsmush_bulkui,
|
296 |
-
'ui'
|
297 |
-
) );
|
298 |
-
|
299 |
-
//Network Settings Page
|
300 |
-
$page = 'settings.php';
|
301 |
-
$cap = 'manage_network_options';
|
302 |
|
303 |
-
|
|
|
|
|
304 |
$wpsmush_bulkui,
|
305 |
'ui'
|
306 |
-
) );
|
307 |
|
308 |
//For Nextgen gallery Pages, check later in enqueue function
|
309 |
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
|
@@ -345,36 +337,55 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
345 |
*/
|
346 |
function enqueue() {
|
347 |
|
348 |
-
$
|
349 |
-
|
|
|
|
|
|
|
350 |
|
351 |
-
|
352 |
-
* Allows to disable enqueuing smush files on a particular page
|
353 |
-
*/
|
354 |
-
$enqueue_smush = apply_filters( 'wp_smush_enqueue', true );
|
355 |
|
356 |
//Load js and css on all admin pages, in order t display install/upgrade notice
|
357 |
// And If upgrade/install message is dismissed or for pro users, Do not enqueue script
|
358 |
if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) || $this->validate_install() ) {
|
359 |
/** @var $pages List of screens where script needs to be loaded */
|
360 |
|
361 |
-
//Do not enqueue, unless it is one of the required screen
|
362 |
-
if (
|
363 |
|
364 |
-
|
365 |
}
|
366 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
$this->load_shared_ui( $current_page );
|
368 |
wp_enqueue_script( 'wp-smushit-admin-js' );
|
369 |
|
370 |
//Style
|
371 |
wp_enqueue_style( 'wp-smushit-admin-css' );
|
372 |
|
|
|
|
|
373 |
//Load on Smush all page only
|
374 |
-
if ( '
|
375 |
//Load Jquery tree on specified page
|
376 |
wp_enqueue_script( 'jqft-js' );
|
377 |
wp_enqueue_style( 'jqft-css' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
378 |
}
|
379 |
|
380 |
// localize translatable strings for js
|
@@ -415,7 +426,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
415 |
wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
|
416 |
|
417 |
//Load the stats on selected screens only
|
418 |
-
if ( $current_page == '
|
419 |
|
420 |
//Get resmush list, If we have a resmush list already, localize those ids
|
421 |
if ( $resmush_ids = get_option( "wp-smush-resmush-list" ) ) {
|
@@ -640,10 +651,10 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
640 |
|
641 |
if ( ! $send_error ) {
|
642 |
//Proceed only if Smushing Transient is not set for the given attachment id
|
643 |
-
if ( !
|
644 |
|
645 |
//Set a transient to avoid multiple request
|
646 |
-
|
647 |
|
648 |
$original_meta = wp_get_attachment_metadata( $attachment_id, true );
|
649 |
|
@@ -673,7 +684,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
673 |
}
|
674 |
|
675 |
//Delete Transient
|
676 |
-
|
677 |
}
|
678 |
|
679 |
$smush_data = get_post_meta( $attachment_id, $this->smushed_meta_key, true );
|
@@ -779,6 +790,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
779 |
) );
|
780 |
}
|
781 |
|
|
|
782 |
//Pass on the attachment id to smush single function
|
783 |
$this->smush_single( $attachemnt_id );
|
784 |
}
|
@@ -793,8 +805,8 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
793 |
*/
|
794 |
function smush_single( $attachment_id, $return = false ) {
|
795 |
|
796 |
-
//If the smushing
|
797 |
-
if (
|
798 |
//Get the button status
|
799 |
$status = $this->set_status( $attachment_id, false, true );
|
800 |
if ( $return ) {
|
@@ -805,9 +817,9 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
805 |
}
|
806 |
|
807 |
//Set a transient to avoid multiple request
|
808 |
-
|
809 |
|
810 |
-
global $
|
811 |
|
812 |
$attachment_id = absint( (int) ( $attachment_id ) );
|
813 |
|
@@ -835,16 +847,16 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
835 |
$original_meta = ! empty( $updated_meta ) ? $updated_meta : $original_meta;
|
836 |
|
837 |
//Smush the image
|
838 |
-
$smush = $
|
839 |
|
840 |
//Update the details, after smushing, so that latest image is used in hook
|
841 |
wp_update_attachment_metadata( $attachment_id, $original_meta );
|
842 |
|
843 |
//Get the button status
|
844 |
-
$status = $
|
845 |
|
846 |
//Delete the transient after attachment meta is updated
|
847 |
-
|
848 |
|
849 |
//Send Json response if we are not suppose to return the results
|
850 |
|
@@ -1149,9 +1161,9 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1149 |
global $WpSmush;
|
1150 |
|
1151 |
//Show Temporary Status, For Async Optimisation, No Good workaround
|
1152 |
-
if ( !
|
1153 |
// the status
|
1154 |
-
$status_txt = __( 'Smushing in progress..', 'wp-smushit' );
|
1155 |
|
1156 |
// we need to show the smush button
|
1157 |
$show_button = false;
|
@@ -1177,7 +1189,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1177 |
*/
|
1178 |
function settings_link( $links, $url_only = false ) {
|
1179 |
|
1180 |
-
$settings_page = is_multisite() ? network_admin_url( '
|
1181 |
$settings = '<a href="' . $settings_page . '">' . __( 'Settings', 'wp-smushit' ) . '</a>';
|
1182 |
|
1183 |
//Return Only settings page link
|
@@ -1203,17 +1215,17 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1203 |
|
1204 |
//Return, If a pro user, or not super admin, or don't have the admin privilleges
|
1205 |
if ( $this->validate_install() || ! current_user_can( 'edit_others_posts' ) || ! is_super_admin() ) {
|
1206 |
-
return;
|
1207 |
}
|
1208 |
|
1209 |
//No need to show it on bulk smush
|
1210 |
-
if ( isset( $_GET['page'] ) && '
|
1211 |
-
return;
|
1212 |
}
|
1213 |
|
1214 |
//Return if notice is already dismissed
|
1215 |
if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) ) {
|
1216 |
-
return;
|
1217 |
}
|
1218 |
|
1219 |
$install_type = get_site_option( 'wp-smush-install-type', false );
|
@@ -1373,6 +1385,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1373 |
/**
|
1374 |
* Scans all the smushed attachments to check if they need to be resmushed as per the
|
1375 |
* current settings, as user might have changed one of the configurations "Lossy", "Keep Original", "Preserve Exif"
|
|
|
1376 |
*/
|
1377 |
function scan_images() {
|
1378 |
|
@@ -1382,6 +1395,9 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1382 |
|
1383 |
$resmush_list = array();
|
1384 |
|
|
|
|
|
|
|
1385 |
//Save settings only if networkwide settings are disabled
|
1386 |
if ( ( ! is_multisite() || ! $wpsmush_settings->is_network_enabled() ) && ( ! isset( $_REQUEST['process_settings'] ) || 'false' != $_REQUEST['process_settings'] ) ) {
|
1387 |
//Save Settings
|
@@ -1389,7 +1405,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1389 |
}
|
1390 |
|
1391 |
//If there aren't any images in the library, return the notice
|
1392 |
-
if ( 0 == $wpsmush_db->get_media_attachments( true ) ) {
|
1393 |
$notice = esc_html__( "We haven’t found any images in your media library yet so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" );
|
1394 |
$resp = '<div class="wp-smush-notice wp-smush-resmush-message" tabindex="0"><i class="icon-fi-check-tick"></i> ' . $notice . '
|
1395 |
<i class="icon-fi-close"></i>
|
@@ -1410,9 +1426,6 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1410 |
<i class="icon-fi-close"></i>
|
1411 |
</div>';
|
1412 |
|
1413 |
-
//Scanning for NextGen or Media Library
|
1414 |
-
$type = isset( $_REQUEST['type'] ) ? sanitize_text_field( $_REQUEST['type'] ) : '';
|
1415 |
-
|
1416 |
//If a user manually runs smush check
|
1417 |
$return_ui = isset( $_REQUEST['get_ui'] ) && 'true' == $_REQUEST['get_ui'] ? true : false;
|
1418 |
|
@@ -1431,7 +1444,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1431 |
|
1432 |
//Intialize NextGen Stats
|
1433 |
if ( 'nextgen' == $type && is_object( $wpsmushnextgenadmin ) && empty( $wpsmushnextgenadmin->remaining_count ) ) {
|
1434 |
-
$wpsmushnextgenadmin->
|
1435 |
}
|
1436 |
|
1437 |
$key = 'nextgen' == $type ? 'wp-smush-nextgen-resmush-list' : 'wp-smush-resmush-list';
|
@@ -1460,7 +1473,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1460 |
|
1461 |
}
|
1462 |
|
1463 |
-
$image_count = $super_smushed_count = $smushed_count = 0;
|
1464 |
//Check if any of the smushed image needs to be resmushed
|
1465 |
if ( ! empty( $attachments ) && is_array( $attachments ) ) {
|
1466 |
$stats = array(
|
@@ -1527,6 +1540,10 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1527 |
|
1528 |
//Increase the smushed count
|
1529 |
$smushed_count += 1;
|
|
|
|
|
|
|
|
|
1530 |
|
1531 |
//Get the image count
|
1532 |
$image_count += ( ! empty( $smush_data['sizes'] ) && is_array( $smush_data['sizes'] ) ) ? sizeof( $smush_data['sizes'] ) : 0;
|
@@ -1548,35 +1565,26 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1548 |
}
|
1549 |
}
|
1550 |
}
|
1551 |
-
}
|
1552 |
|
1553 |
//Check for Upfront images that needs to be smushed
|
1554 |
if ( $upfront_active && 'nextgen' != $type ) {
|
1555 |
-
$
|
1556 |
-
if ( ! empty( $upfront_attachments ) && is_array( $upfront_attachments ) ) {
|
1557 |
-
foreach ( $upfront_attachments as $u_attachment_id ) {
|
1558 |
-
if ( ! in_array( $u_attachment_id, $resmush_list ) ) {
|
1559 |
-
//Check if not smushed
|
1560 |
-
$upfront_images = get_post_meta( $u_attachment_id, 'upfront_used_image_sizes', true );
|
1561 |
-
if ( ! empty( $upfront_images ) && is_array( $upfront_images ) ) {
|
1562 |
-
//Iterate over all the images
|
1563 |
-
foreach ( $upfront_images as $image ) {
|
1564 |
-
//If any of the element image is not smushed, add the id to resmush list
|
1565 |
-
//and skip to next image
|
1566 |
-
if ( empty( $image['is_smushed'] ) || 1 != $image['is_smushed'] ) {
|
1567 |
-
$resmush_list[] = $u_attachment_id;
|
1568 |
-
break;
|
1569 |
-
}
|
1570 |
-
}
|
1571 |
-
}
|
1572 |
-
}
|
1573 |
-
}
|
1574 |
-
}
|
1575 |
}//End Of Upfront loop
|
1576 |
|
1577 |
//Store the resmush list in Options table
|
1578 |
update_option( $key, $resmush_list, false );
|
1579 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1580 |
|
1581 |
//Delete resmush list if empty
|
1582 |
if ( empty( $resmush_list ) ) {
|
@@ -1614,19 +1622,23 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1614 |
</div>';
|
1615 |
}
|
1616 |
|
1617 |
-
|
1618 |
-
|
1619 |
-
if (
|
|
|
|
|
|
|
1620 |
|
1621 |
-
|
1622 |
-
|
1623 |
-
|
1624 |
-
|
1625 |
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
|
|
1630 |
}
|
1631 |
}
|
1632 |
|
@@ -1637,10 +1649,11 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1637 |
'count_image' => $image_count,
|
1638 |
'count_supersmushed' => $super_smushed_count,
|
1639 |
'count_smushed' => $smushed_count,
|
|
|
1640 |
'size_before' => $stats['size_before'],
|
1641 |
'size_after' => $stats['size_after'],
|
1642 |
-
'savings_resize' => $stats['savings_resize'],
|
1643 |
-
'savings_conversion' => $stats['savings_conversion']
|
1644 |
) : array();
|
1645 |
|
1646 |
//Include the count
|
@@ -1811,13 +1824,14 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1811 |
if ( 'nextgen' != $_POST['type'] ) {
|
1812 |
$resmush_list = get_option( $key );
|
1813 |
if ( ! empty( $resmush_list ) && is_array( $resmush_list ) ) {
|
1814 |
-
$stats = $wpsmush_db->
|
1815 |
}
|
1816 |
} else {
|
1817 |
-
//For Nextgen. Get the stats
|
1818 |
-
$
|
|
|
1819 |
|
1820 |
-
$stats['count_images'] = $wpsmushnextgenadmin->
|
1821 |
}
|
1822 |
|
1823 |
//Delete the resmush list
|
@@ -1982,7 +1996,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1982 |
|
1983 |
//Do not display the notice on Bulk Smush Screen
|
1984 |
global $current_screen;
|
1985 |
-
if ( ! empty( $current_screen->base ) && ( '
|
1986 |
return true;
|
1987 |
}
|
1988 |
|
@@ -1994,11 +2008,11 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
1994 |
),
|
1995 |
$this->upgrade_url
|
1996 |
);
|
1997 |
-
$settings_link = is_multisite() ? network_admin_url( '
|
1998 |
|
1999 |
$settings_link = '<a href="' . $settings_link . '" title="' . esc_html__( "Review your setting now.", "wp-smushit" ) . '">';
|
2000 |
-
$upgrade_link = '<a href="' . esc_url( $upgrade_url ) . '" title="' . esc_html__( "
|
2001 |
-
$message_s = sprintf( esc_html__( "Welcome to the newest version of
|
2002 |
|
2003 |
//Message for network admin
|
2004 |
$message_s .= is_multisite() ? sprintf( esc_html__( " And as a multisite user, you can manage %sSmush settings%s globally across all sites!", 'wp-smushit' ), $settings_link, '</a>' ) : '';
|
@@ -2162,6 +2176,7 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
2162 |
|
2163 |
//Check the last settings stored in db
|
2164 |
$settings = $wpsmush_settings->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
|
|
|
2165 |
|
2166 |
//Available settings for free/pro version
|
2167 |
$exclude = array(
|
@@ -2238,17 +2253,17 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
2238 |
* Load media assets.
|
2239 |
*/
|
2240 |
public function extend_media_modal() {
|
2241 |
-
if ( ! wp_script_is( 'smush-
|
2242 |
-
wp_enqueue_script( 'smush-
|
2243 |
'jquery',
|
2244 |
'media-views',
|
2245 |
'media-grid',
|
2246 |
'wp-util',
|
2247 |
), $this->version, true );
|
2248 |
|
2249 |
-
wp_localize_script( 'smush-
|
2250 |
'strings' => array(
|
2251 |
-
'stats_label' => esc_html__( "Smush
|
2252 |
),
|
2253 |
'nonce' => array(
|
2254 |
'get_smush_status' => wp_create_nonce( 'get-smush-status' ),
|
@@ -2258,22 +2273,23 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
2258 |
}
|
2259 |
|
2260 |
/**
|
2261 |
-
*
|
|
|
|
|
|
|
2262 |
*
|
2263 |
-
* @
|
2264 |
*/
|
2265 |
-
function smush_send_status() {
|
2266 |
-
if ( ! isset( $
|
2267 |
-
return;
|
2268 |
}
|
2269 |
|
2270 |
-
check_ajax_referer( 'get-smush-status', '_nonce' );
|
2271 |
-
|
2272 |
-
$id = intval( $_POST['id'] );
|
2273 |
-
|
2274 |
//Validate nonce
|
2275 |
-
$status
|
2276 |
-
|
|
|
|
|
2277 |
}
|
2278 |
|
2279 |
/**
|
@@ -2298,6 +2314,64 @@ if ( ! class_exists( 'WpSmushitAdmin' ) ) {
|
|
2298 |
);
|
2299 |
wp_send_json_success( $stats );
|
2300 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2301 |
}
|
2302 |
|
2303 |
global $wpsmushit_admin;
|
116 |
'post',
|
117 |
'post-new',
|
118 |
'upload',
|
119 |
+
'toplevel_page_smush-network',
|
120 |
+
'toplevel_page_smush',
|
|
|
121 |
);
|
122 |
|
123 |
public $plugin_pages = array(
|
124 |
'gallery_page_wp-smush-nextgen-bulk',
|
125 |
+
'toplevel_page_smush-network',
|
126 |
+
'toplevel_page_smush'
|
|
|
127 |
);
|
128 |
|
129 |
public $basic_features = array(
|
218 |
*/
|
219 |
add_action( 'wp_ajax_hide_api_message', array( $this, 'hide_api_message' ) );
|
220 |
|
221 |
+
add_filter('wp_prepare_attachment_for_js', array( $this, 'smush_send_status' ), 99, 3 );
|
|
|
222 |
|
223 |
//Send smush stats
|
224 |
add_action( 'wp_ajax_get_stats', array( $this, 'get_stats' ) );
|
225 |
|
226 |
+
//Load js and css on pages with Media Uploader - WP Enqueue Media
|
227 |
+
add_action('wp_enqueue_media', array( $this, 'enqueue') );
|
228 |
+
|
229 |
}
|
230 |
|
231 |
function init_settings() {
|
258 |
'resize' => array(
|
259 |
'label' => esc_html__( 'Resize my full size images', 'wp-smushit' ),
|
260 |
'short_label' => esc_html__( 'Full size images', 'wp-smushit' ),
|
261 |
+
'desc' => esc_html__( 'Save a ton of space by not storing over-sized images on your server. Set a maximum height and width for all images uploaded to your site so that any unnecessarily large images are automatically resized before they are added to the media gallery.', 'wp-smushit' )
|
262 |
),
|
263 |
'backup' => array(
|
264 |
'label' => esc_html__( 'Make a copy of my full size images', 'wp-smushit' ),
|
288 |
* Add Bulk option settings page
|
289 |
*/
|
290 |
function screen() {
|
291 |
+
global $wpsmush_bulkui;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
|
293 |
+
$cap = is_multisite() ? 'manage_network_options' : 'manage_options';
|
294 |
+
$title = $this->validate_install() ? esc_html__( "Smush Pro", "wp-smushit" ) : esc_html__( "Smush", "wp-smushit" );
|
295 |
+
add_menu_page( $title, $title, $cap, 'smush', array(
|
296 |
$wpsmush_bulkui,
|
297 |
'ui'
|
298 |
+
), $this->get_menu_icon() );
|
299 |
|
300 |
//For Nextgen gallery Pages, check later in enqueue function
|
301 |
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
|
337 |
*/
|
338 |
function enqueue() {
|
339 |
|
340 |
+
$current_page = '';
|
341 |
+
if ( function_exists( 'get_current_screen' ) ) {
|
342 |
+
$current_screen = get_current_screen();
|
343 |
+
$current_page = !empty( $current_screen ) ? $current_screen->base : $current_page;
|
344 |
+
}
|
345 |
|
346 |
+
$enqueue_smush = true;
|
|
|
|
|
|
|
347 |
|
348 |
//Load js and css on all admin pages, in order t display install/upgrade notice
|
349 |
// And If upgrade/install message is dismissed or for pro users, Do not enqueue script
|
350 |
if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) || $this->validate_install() ) {
|
351 |
/** @var $pages List of screens where script needs to be loaded */
|
352 |
|
353 |
+
//Do not enqueue, unless it is one of the required screen, or not in wordpress backend
|
354 |
+
if ( empty( $current_page ) || ! is_admin() || ( ! in_array( $current_page, $this->pages ) && ! did_action( 'wp_enqueue_media' ) ) ) {
|
355 |
|
356 |
+
$enqueue_smush = false;
|
357 |
}
|
358 |
}
|
359 |
+
/**
|
360 |
+
* Allows to disable enqueuing smush files on a particular page
|
361 |
+
*/
|
362 |
+
$enqueue_smush = apply_filters( 'wp_smush_enqueue', $enqueue_smush );
|
363 |
+
|
364 |
+
if ( ! $enqueue_smush ) {
|
365 |
+
return;
|
366 |
+
}
|
367 |
+
|
368 |
$this->load_shared_ui( $current_page );
|
369 |
wp_enqueue_script( 'wp-smushit-admin-js' );
|
370 |
|
371 |
//Style
|
372 |
wp_enqueue_style( 'wp-smushit-admin-css' );
|
373 |
|
374 |
+
$dir = defined('__DIR__') ? __DIR__ : dirname(__FILE__);
|
375 |
+
|
376 |
//Load on Smush all page only
|
377 |
+
if ( 'toplevel_page_smush' == $current_page || 'toplevel_page_smush-network' == $current_page ) {
|
378 |
//Load Jquery tree on specified page
|
379 |
wp_enqueue_script( 'jqft-js' );
|
380 |
wp_enqueue_style( 'jqft-css' );
|
381 |
+
wp_enqueue_style( 'wpmudev-sui', plugins_url( 'assets/shared-ui-2/css/admin.min.css', $dir ) );
|
382 |
+
wp_enqueue_script(
|
383 |
+
'wpmudev-sui',
|
384 |
+
plugins_url( 'assets/shared-ui-2/js/admin.min.js', $dir ),
|
385 |
+
array( 'jquery' ),
|
386 |
+
null,
|
387 |
+
true
|
388 |
+
);
|
389 |
}
|
390 |
|
391 |
// localize translatable strings for js
|
426 |
wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
|
427 |
|
428 |
//Load the stats on selected screens only
|
429 |
+
if ( $current_page == 'toplevel_page_smush' ) {
|
430 |
|
431 |
//Get resmush list, If we have a resmush list already, localize those ids
|
432 |
if ( $resmush_ids = get_option( "wp-smush-resmush-list" ) ) {
|
651 |
|
652 |
if ( ! $send_error ) {
|
653 |
//Proceed only if Smushing Transient is not set for the given attachment id
|
654 |
+
if ( ! get_option( 'smush-in-progress-' . $attachment_id, false ) ) {
|
655 |
|
656 |
//Set a transient to avoid multiple request
|
657 |
+
update_option( 'smush-in-progress-' . $attachment_id, true );
|
658 |
|
659 |
$original_meta = wp_get_attachment_metadata( $attachment_id, true );
|
660 |
|
684 |
}
|
685 |
|
686 |
//Delete Transient
|
687 |
+
delete_option( 'smush-in-progress-' . $attachment_id );
|
688 |
}
|
689 |
|
690 |
$smush_data = get_post_meta( $attachment_id, $this->smushed_meta_key, true );
|
790 |
) );
|
791 |
}
|
792 |
|
793 |
+
$this->initialise();
|
794 |
//Pass on the attachment id to smush single function
|
795 |
$this->smush_single( $attachemnt_id );
|
796 |
}
|
805 |
*/
|
806 |
function smush_single( $attachment_id, $return = false ) {
|
807 |
|
808 |
+
//If the smushing option is already set, return the status
|
809 |
+
if ( get_option( 'smush-in-progress-' . $attachment_id, false ) || get_option( "wp-smush-restore-$attachment_id", false ) ) {
|
810 |
//Get the button status
|
811 |
$status = $this->set_status( $attachment_id, false, true );
|
812 |
if ( $return ) {
|
817 |
}
|
818 |
|
819 |
//Set a transient to avoid multiple request
|
820 |
+
update_option( 'smush-in-progress-' . $attachment_id, true );
|
821 |
|
822 |
+
global $wpsmush_pngjpg, $wpsmush_helper;
|
823 |
|
824 |
$attachment_id = absint( (int) ( $attachment_id ) );
|
825 |
|
847 |
$original_meta = ! empty( $updated_meta ) ? $updated_meta : $original_meta;
|
848 |
|
849 |
//Smush the image
|
850 |
+
$smush = $this->resize_from_meta_data( $original_meta, $attachment_id );
|
851 |
|
852 |
//Update the details, after smushing, so that latest image is used in hook
|
853 |
wp_update_attachment_metadata( $attachment_id, $original_meta );
|
854 |
|
855 |
//Get the button status
|
856 |
+
$status = $this->set_status( $attachment_id, false, true );
|
857 |
|
858 |
//Delete the transient after attachment meta is updated
|
859 |
+
delete_option( 'smush-in-progress-' . $attachment_id );
|
860 |
|
861 |
//Send Json response if we are not suppose to return the results
|
862 |
|
1161 |
global $WpSmush;
|
1162 |
|
1163 |
//Show Temporary Status, For Async Optimisation, No Good workaround
|
1164 |
+
if ( ! get_option( "wp-smush-restore-$id", false ) && ! empty( $_POST['action'] ) && 'upload-attachment' == $_POST['action'] && $WpSmush->is_auto_smush_enabled() ) {
|
1165 |
// the status
|
1166 |
+
$status_txt = '<p class="smush-status">'. __( 'Smushing in progress..', 'wp-smushit' ) . "</p>";
|
1167 |
|
1168 |
// we need to show the smush button
|
1169 |
$show_button = false;
|
1189 |
*/
|
1190 |
function settings_link( $links, $url_only = false ) {
|
1191 |
|
1192 |
+
$settings_page = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : menu_page_url( 'smush', false );
|
1193 |
$settings = '<a href="' . $settings_page . '">' . __( 'Settings', 'wp-smushit' ) . '</a>';
|
1194 |
|
1195 |
//Return Only settings page link
|
1215 |
|
1216 |
//Return, If a pro user, or not super admin, or don't have the admin privilleges
|
1217 |
if ( $this->validate_install() || ! current_user_can( 'edit_others_posts' ) || ! is_super_admin() ) {
|
1218 |
+
return false;
|
1219 |
}
|
1220 |
|
1221 |
//No need to show it on bulk smush
|
1222 |
+
if ( isset( $_GET['page'] ) && 'smush' == $_GET['page'] ) {
|
1223 |
+
return false;
|
1224 |
}
|
1225 |
|
1226 |
//Return if notice is already dismissed
|
1227 |
if ( get_option( 'wp-smush-hide_upgrade_notice' ) || get_site_option( 'wp-smush-hide_upgrade_notice' ) ) {
|
1228 |
+
return false;
|
1229 |
}
|
1230 |
|
1231 |
$install_type = get_site_option( 'wp-smush-install-type', false );
|
1385 |
/**
|
1386 |
* Scans all the smushed attachments to check if they need to be resmushed as per the
|
1387 |
* current settings, as user might have changed one of the configurations "Lossy", "Keep Original", "Preserve Exif"
|
1388 |
+
* @todo: Needs some refactoring big time
|
1389 |
*/
|
1390 |
function scan_images() {
|
1391 |
|
1395 |
|
1396 |
$resmush_list = array();
|
1397 |
|
1398 |
+
//Scanning for NextGen or Media Library
|
1399 |
+
$type = isset( $_REQUEST['type'] ) ? sanitize_text_field( $_REQUEST['type'] ) : '';
|
1400 |
+
|
1401 |
//Save settings only if networkwide settings are disabled
|
1402 |
if ( ( ! is_multisite() || ! $wpsmush_settings->is_network_enabled() ) && ( ! isset( $_REQUEST['process_settings'] ) || 'false' != $_REQUEST['process_settings'] ) ) {
|
1403 |
//Save Settings
|
1405 |
}
|
1406 |
|
1407 |
//If there aren't any images in the library, return the notice
|
1408 |
+
if ( 0 == $wpsmush_db->get_media_attachments( true ) && 'nextgen' != $type ) {
|
1409 |
$notice = esc_html__( "We haven’t found any images in your media library yet so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" );
|
1410 |
$resp = '<div class="wp-smush-notice wp-smush-resmush-message" tabindex="0"><i class="icon-fi-check-tick"></i> ' . $notice . '
|
1411 |
<i class="icon-fi-close"></i>
|
1426 |
<i class="icon-fi-close"></i>
|
1427 |
</div>';
|
1428 |
|
|
|
|
|
|
|
1429 |
//If a user manually runs smush check
|
1430 |
$return_ui = isset( $_REQUEST['get_ui'] ) && 'true' == $_REQUEST['get_ui'] ? true : false;
|
1431 |
|
1444 |
|
1445 |
//Intialize NextGen Stats
|
1446 |
if ( 'nextgen' == $type && is_object( $wpsmushnextgenadmin ) && empty( $wpsmushnextgenadmin->remaining_count ) ) {
|
1447 |
+
$wpsmushnextgenadmin->setup_image_counts();
|
1448 |
}
|
1449 |
|
1450 |
$key = 'nextgen' == $type ? 'wp-smush-nextgen-resmush-list' : 'wp-smush-resmush-list';
|
1473 |
|
1474 |
}
|
1475 |
|
1476 |
+
$image_count = $super_smushed_count = $smushed_count = $resized_count = 0;
|
1477 |
//Check if any of the smushed image needs to be resmushed
|
1478 |
if ( ! empty( $attachments ) && is_array( $attachments ) ) {
|
1479 |
$stats = array(
|
1540 |
|
1541 |
//Increase the smushed count
|
1542 |
$smushed_count += 1;
|
1543 |
+
//Get the resized image count
|
1544 |
+
if( !empty( $resize_savings ) ) {
|
1545 |
+
$resized_count += 1;
|
1546 |
+
}
|
1547 |
|
1548 |
//Get the image count
|
1549 |
$image_count += ( ! empty( $smush_data['sizes'] ) && is_array( $smush_data['sizes'] ) ) ? sizeof( $smush_data['sizes'] ) : 0;
|
1565 |
}
|
1566 |
}
|
1567 |
}
|
1568 |
+
}# End of Foreach Loop
|
1569 |
|
1570 |
//Check for Upfront images that needs to be smushed
|
1571 |
if ( $upfront_active && 'nextgen' != $type ) {
|
1572 |
+
$resmush_list = $this->get_upfront_resmush_list( $resmush_list );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1573 |
}//End Of Upfront loop
|
1574 |
|
1575 |
//Store the resmush list in Options table
|
1576 |
update_option( $key, $resmush_list, false );
|
1577 |
}
|
1578 |
+
//Get updated stats for Nextgen
|
1579 |
+
if ( 'nextgen' == $type ) {
|
1580 |
+
#Reinitialize Nextgen stats
|
1581 |
+
$wpsmushnextgenadmin->setup_image_counts();
|
1582 |
+
//Image count, Smushed Count, Supersmushed Count, Savings
|
1583 |
+
$stats = $wpsmushnextgenstats->get_smush_stats();
|
1584 |
+
$image_count = $wpsmushnextgenadmin->image_count;
|
1585 |
+
$smushed_count = $wpsmushnextgenadmin->smushed_count;
|
1586 |
+
$super_smushed_count = $wpsmushnextgenadmin->super_smushed;
|
1587 |
+
}
|
1588 |
|
1589 |
//Delete resmush list if empty
|
1590 |
if ( empty( $resmush_list ) ) {
|
1622 |
</div>';
|
1623 |
}
|
1624 |
|
1625 |
+
##Directory Smush Stats
|
1626 |
+
//Include directory smush stats if not requested for nextgen
|
1627 |
+
if ( 'nextgen' != $type ) {
|
1628 |
+
//Append the directory smush stats
|
1629 |
+
$dir_smush_stats = get_option( 'dir_smush_stats' );
|
1630 |
+
if ( ! empty( $dir_smush_stats ) && is_array( $dir_smush_stats ) ) {
|
1631 |
|
1632 |
+
if ( ! empty( $dir_smush_stats['dir_smush'] ) && ! empty( $dir_smush_stats['optimised'] ) ) {
|
1633 |
+
$dir_smush_stats = $dir_smush_stats['dir_smush'];
|
1634 |
+
$image_count += $dir_smush_stats['optimised'];
|
1635 |
+
}
|
1636 |
|
1637 |
+
//Add directory smush stats if not empty
|
1638 |
+
if ( ! empty( $dir_smush_stats['image_size'] ) && ! empty( $dir_smush_stats['orig_size'] ) ) {
|
1639 |
+
$stats['size_before'] += $dir_smush_stats['orig_size'];
|
1640 |
+
$stats['size_after'] += $dir_smush_stats['image_size'];
|
1641 |
+
}
|
1642 |
}
|
1643 |
}
|
1644 |
|
1649 |
'count_image' => $image_count,
|
1650 |
'count_supersmushed' => $super_smushed_count,
|
1651 |
'count_smushed' => $smushed_count,
|
1652 |
+
'count_resize' => $resized_count,
|
1653 |
'size_before' => $stats['size_before'],
|
1654 |
'size_after' => $stats['size_after'],
|
1655 |
+
'savings_resize' => ! empty( $stats['savings_resize'] ) ? $stats['savings_resize'] : 0,
|
1656 |
+
'savings_conversion' => ! empty( $stats['savings_conversion'] ) ? $stats['savings_conversion'] : 0
|
1657 |
) : array();
|
1658 |
|
1659 |
//Include the count
|
1824 |
if ( 'nextgen' != $_POST['type'] ) {
|
1825 |
$resmush_list = get_option( $key );
|
1826 |
if ( ! empty( $resmush_list ) && is_array( $resmush_list ) ) {
|
1827 |
+
$stats = $wpsmush_db->get_stats_for_attachments( $resmush_list );
|
1828 |
}
|
1829 |
} else {
|
1830 |
+
//For Nextgen. Get the stats( Get the resmush ids )
|
1831 |
+
$resmush_ids = get_option( "wp-smush-nextgen-resmush-list", array() );
|
1832 |
+
$stats = $wpsmushnextgenstats->get_stats_for_ids( $resmush_ids );
|
1833 |
|
1834 |
+
$stats['count_images'] = $wpsmushnextgenadmin->get_image_count( $resmush_ids, false );
|
1835 |
}
|
1836 |
|
1837 |
//Delete the resmush list
|
1996 |
|
1997 |
//Do not display the notice on Bulk Smush Screen
|
1998 |
global $current_screen;
|
1999 |
+
if ( ! empty( $current_screen->base ) && ( 'toplevel_page_smush' == $current_screen->base || 'toplevel_page_smush-network' == $current_screen->base || 'gallery_page_wp-smush-nextgen-bulk' == $current_screen->base || 'toplevel_page_smush-network' == $current_screen->base ) ) {
|
2000 |
return true;
|
2001 |
}
|
2002 |
|
2008 |
),
|
2009 |
$this->upgrade_url
|
2010 |
);
|
2011 |
+
$settings_link = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : menu_page_url( 'smush', false );
|
2012 |
|
2013 |
$settings_link = '<a href="' . $settings_link . '" title="' . esc_html__( "Review your setting now.", "wp-smushit" ) . '">';
|
2014 |
+
$upgrade_link = '<a href="' . esc_url( $upgrade_url ) . '" title="' . esc_html__( "Smush Pro", "wp-smushit" ) . '">';
|
2015 |
+
$message_s = sprintf( esc_html__( "Welcome to the newest version of Smush! In this update we've added the ability to bulk smush images in directories outside your uploads folder.", 'wp-smushit' ), WP_SMUSH_VERSION, '<strong>', '</strong>' );
|
2016 |
|
2017 |
//Message for network admin
|
2018 |
$message_s .= is_multisite() ? sprintf( esc_html__( " And as a multisite user, you can manage %sSmush settings%s globally across all sites!", 'wp-smushit' ), $settings_link, '</a>' ) : '';
|
2176 |
|
2177 |
//Check the last settings stored in db
|
2178 |
$settings = $wpsmush_settings->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
|
2179 |
+
$settings = maybe_unserialize( $settings );
|
2180 |
|
2181 |
//Available settings for free/pro version
|
2182 |
$exclude = array(
|
2253 |
* Load media assets.
|
2254 |
*/
|
2255 |
public function extend_media_modal() {
|
2256 |
+
if ( ! wp_script_is( 'smush-backbone-extension', 'enqueued' ) ) {
|
2257 |
+
wp_enqueue_script( 'smush-backbone-extension', WP_SMUSH_URL . 'assets/js/media.js', array(
|
2258 |
'jquery',
|
2259 |
'media-views',
|
2260 |
'media-grid',
|
2261 |
'wp-util',
|
2262 |
), $this->version, true );
|
2263 |
|
2264 |
+
wp_localize_script( 'smush-backbone-extension', 'smush_vars', array(
|
2265 |
'strings' => array(
|
2266 |
+
'stats_label' => esc_html__( "Smush", "wp-smushit" )
|
2267 |
),
|
2268 |
'nonce' => array(
|
2269 |
'get_smush_status' => wp_create_nonce( 'get-smush-status' ),
|
2273 |
}
|
2274 |
|
2275 |
/**
|
2276 |
+
* Send smush status for attachment
|
2277 |
+
*
|
2278 |
+
* @param $response
|
2279 |
+
* @param $attachment
|
2280 |
*
|
2281 |
+
* @return mixed
|
2282 |
*/
|
2283 |
+
function smush_send_status( $response, $attachment ) {
|
2284 |
+
if ( ! isset( $attachment->ID ) ) {
|
2285 |
+
return $response;
|
2286 |
}
|
2287 |
|
|
|
|
|
|
|
|
|
2288 |
//Validate nonce
|
2289 |
+
$status = $this->smush_status( $attachment->ID );
|
2290 |
+
$response['smush'] = $status;
|
2291 |
+
|
2292 |
+
return $response;
|
2293 |
}
|
2294 |
|
2295 |
/**
|
2314 |
);
|
2315 |
wp_send_json_success( $stats );
|
2316 |
}
|
2317 |
+
|
2318 |
+
/**
|
2319 |
+
* Smush icon svg image
|
2320 |
+
* @return string
|
2321 |
+
*
|
2322 |
+
*/
|
2323 |
+
private function get_menu_icon() {
|
2324 |
+
ob_start();
|
2325 |
+
?>
|
2326 |
+
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
2327 |
+
<!-- Generator: Sketch 49.1 (51147) - http://www.bohemiancoding.com/sketch -->
|
2328 |
+
<title>icon-smush</title>
|
2329 |
+
<desc>Created with Sketch.</desc>
|
2330 |
+
<defs></defs>
|
2331 |
+
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
2332 |
+
<g id="WP-/-Menu---Free" transform="translate(-12.000000, -428.000000)" fill="#FFFFFF;">
|
2333 |
+
<path d="M26.9310561,432.026782 C27.2629305,432.598346 27.5228884,433.217017 27.7109375,433.882812 C27.9036468,434.565108 28,435.27083 28,436 C28,437.104172 27.7916687,438.14062 27.375,439.109375 C26.9479145,440.07813 26.3750036,440.924476 25.65625,441.648438 C24.9374964,442.372399 24.0937548,442.942706 23.125,443.359375 C22.1562452,443.78646 21.1197972,444 20.015625,444 L26.9310562,432.026782 L26.9310561,432.026782 Z M26.9310561,432.026782 C26.9228316,432.012617 26.9145629,431.998482 26.90625,431.984375 L26.9375,432.015625 L26.9310562,432.026782 L26.9310561,432.026782 Z M16.625,433.171875 L23.375,433.171875 L20,439.03125 L16.625,433.171875 Z M14.046875,430.671875 L14.046875,430.65625 C14.4114602,430.249998 14.8177061,429.88021 15.265625,429.546875 C15.7031272,429.223957 16.1744766,428.945314 16.6796875,428.710938 C17.1848984,428.476561 17.7187472,428.296876 18.28125,428.171875 C18.8333361,428.046874 19.406247,427.984375 20,427.984375 C20.593753,427.984375 21.1666639,428.046874 21.71875,428.171875 C22.2812528,428.296876 22.8151016,428.476561 23.3203125,428.710938 C23.8255234,428.945314 24.3020811,429.223957 24.75,429.546875 C25.1875022,429.88021 25.5937481,430.255206 25.96875,430.671875 L14.046875,430.671875 Z M13.0625,432.03125 L19.984375,444 C18.8802028,444 17.8437548,443.78646 16.875,443.359375 C15.9062452,442.942706 15.0625036,442.372399 14.34375,441.648438 C13.6249964,440.924476 13.0572937,440.07813 12.640625,439.109375 C12.2239563,438.14062 12.015625,437.104172 12.015625,436 C12.015625,435.27083 12.1067699,434.567712 12.2890625,433.890625 C12.4713551,433.213538 12.729165,432.593753 13.0625,432.03125 Z" id="icon-smush"></path>
|
2334 |
+
</g>
|
2335 |
+
</g>
|
2336 |
+
</svg>
|
2337 |
+
<?php
|
2338 |
+
$svg = ob_get_clean();
|
2339 |
+
|
2340 |
+
return 'data:image/svg+xml;base64,' . base64_encode( $svg );
|
2341 |
+
}
|
2342 |
+
|
2343 |
+
/**
|
2344 |
+
* Checks if upfront images needs to be resmushed
|
2345 |
+
*
|
2346 |
+
* @param $resmush_list
|
2347 |
+
*
|
2348 |
+
* @return array Returns the list of image ids that needs to be re-smushed
|
2349 |
+
*/
|
2350 |
+
function get_upfront_resmush_list( $resmush_list ) {
|
2351 |
+
global $wpsmush_db;
|
2352 |
+
$upfront_attachments = $wpsmush_db->get_upfront_images( $resmush_list );
|
2353 |
+
if ( ! empty( $upfront_attachments ) && is_array( $upfront_attachments ) ) {
|
2354 |
+
foreach ( $upfront_attachments as $u_attachment_id ) {
|
2355 |
+
if ( ! in_array( $u_attachment_id, $resmush_list ) ) {
|
2356 |
+
//Check if not smushed
|
2357 |
+
$upfront_images = get_post_meta( $u_attachment_id, 'upfront_used_image_sizes', true );
|
2358 |
+
if ( ! empty( $upfront_images ) && is_array( $upfront_images ) ) {
|
2359 |
+
//Iterate over all the images
|
2360 |
+
foreach ( $upfront_images as $image ) {
|
2361 |
+
//If any of the element image is not smushed, add the id to resmush list
|
2362 |
+
//and skip to next image
|
2363 |
+
if ( empty( $image['is_smushed'] ) || 1 != $image['is_smushed'] ) {
|
2364 |
+
$resmush_list[] = $u_attachment_id;
|
2365 |
+
break;
|
2366 |
+
}
|
2367 |
+
}
|
2368 |
+
}
|
2369 |
+
}
|
2370 |
+
}
|
2371 |
+
}
|
2372 |
+
|
2373 |
+
return $resmush_list;
|
2374 |
+
}
|
2375 |
}
|
2376 |
|
2377 |
global $wpsmushit_admin;
|
lib/class-wp-smush-backup.php
CHANGED
@@ -163,8 +163,8 @@ if ( ! class_exists( 'WpSmushBackup' ) ) {
|
|
163 |
//Process Now
|
164 |
$attachment_id = empty( $attachment ) ? absint( (int) $_POST['attachment_id'] ) : $attachment;
|
165 |
|
166 |
-
//Set a
|
167 |
-
|
168 |
|
169 |
//Restore Full size -> get other image sizes -> restore other images
|
170 |
|
@@ -264,11 +264,14 @@ if ( ! class_exists( 'WpSmushBackup' ) ) {
|
|
264 |
//Remove Original File
|
265 |
delete_post_meta( $attachment_id, WP_SMUSH_PREFIX . 'original_file' );
|
266 |
|
|
|
|
|
|
|
267 |
//Get the Button html without wrapper
|
268 |
$button_html = $WpSmush->set_status( $attachment_id, false, false, false );
|
269 |
|
270 |
//Remove the transient
|
271 |
-
|
272 |
|
273 |
if ( $resp ) {
|
274 |
wp_send_json_success( array( 'button' => $button_html ) );
|
@@ -277,8 +280,9 @@ if ( ! class_exists( 'WpSmushBackup' ) ) {
|
|
277 |
}
|
278 |
}
|
279 |
//Remove the transient
|
280 |
-
|
281 |
-
|
|
|
282 |
wp_send_json_error( array( 'message' => '<div class="wp-smush-error">' . __( "Unable to restore image", "wp-smushit" ) . '</div>' ) );
|
283 |
}
|
284 |
|
163 |
//Process Now
|
164 |
$attachment_id = empty( $attachment ) ? absint( (int) $_POST['attachment_id'] ) : $attachment;
|
165 |
|
166 |
+
//Set a Option to avoid the smush-restore-smush loop
|
167 |
+
update_option( "wp-smush-restore-$attachment_id", true );
|
168 |
|
169 |
//Restore Full size -> get other image sizes -> restore other images
|
170 |
|
264 |
//Remove Original File
|
265 |
delete_post_meta( $attachment_id, WP_SMUSH_PREFIX . 'original_file' );
|
266 |
|
267 |
+
//Delete resize savings
|
268 |
+
delete_post_meta( $attachment_id, WP_SMUSH_PREFIX . 'resize_savings' );
|
269 |
+
|
270 |
//Get the Button html without wrapper
|
271 |
$button_html = $WpSmush->set_status( $attachment_id, false, false, false );
|
272 |
|
273 |
//Remove the transient
|
274 |
+
delete_option( "wp-smush-restore-$attachment_id" );
|
275 |
|
276 |
if ( $resp ) {
|
277 |
wp_send_json_success( array( 'button' => $button_html ) );
|
280 |
}
|
281 |
}
|
282 |
//Remove the transient
|
283 |
+
delete_option( "wp-smush-restore-$attachment_id" );
|
284 |
+
|
285 |
+
if ( !$resp ) {
|
286 |
wp_send_json_error( array( 'message' => '<div class="wp-smush-error">' . __( "Unable to restore image", "wp-smushit" ) . '</div>' ) );
|
287 |
}
|
288 |
|
lib/class-wp-smush-bulk.php
DELETED
@@ -1,96 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* @package WP SmushIt
|
5 |
-
* @subpackage Admin
|
6 |
-
* @version 1.0
|
7 |
-
*
|
8 |
-
* @author Saurabh Shukla <saurabh@incsub.com>
|
9 |
-
* @author Umesh Kumar <umesh@incsub.com>
|
10 |
-
*
|
11 |
-
* @copyright (c) 2016, Incsub (http://incsub.com)
|
12 |
-
*/
|
13 |
-
if ( ! class_exists( 'WpSmushitBulk' ) ) {
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Methods for bulk processing
|
17 |
-
*/
|
18 |
-
class WpSmushitBulk {
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Fetch all the unsmushed attachments
|
22 |
-
* @return array $attachments
|
23 |
-
*/
|
24 |
-
function get_attachments() {
|
25 |
-
global $wpsmushit_admin, $wpsmush_stats;
|
26 |
-
|
27 |
-
if ( ! isset( $_REQUEST['ids'] ) ) {
|
28 |
-
$limit = $wpsmushit_admin->query_limit();
|
29 |
-
$limit = ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $limit ? $wpsmushit_admin->total_count : $limit;
|
30 |
-
|
31 |
-
//Do not fetch more than this, any time
|
32 |
-
//Localizing all rows at once increases the page load and sloes down everything
|
33 |
-
$r_limit = apply_filters( 'wp_smush_max_rows', 5000 );
|
34 |
-
|
35 |
-
$get_posts = true;
|
36 |
-
$unsmushed_posts = array();
|
37 |
-
$args = array(
|
38 |
-
'fields' => array( 'ids', 'post_mime_type' ),
|
39 |
-
'post_type' => 'attachment',
|
40 |
-
'post_status' => 'any',
|
41 |
-
'orderby' => 'ID',
|
42 |
-
'order' => 'DESC',
|
43 |
-
'posts_per_page' => $limit,
|
44 |
-
'offset' => 0,
|
45 |
-
'meta_query' => array(
|
46 |
-
array(
|
47 |
-
'key' => 'wp-smpro-smush-data',
|
48 |
-
'compare' => 'NOT EXISTS'
|
49 |
-
)
|
50 |
-
),
|
51 |
-
'update_post_meta_cache' => false,
|
52 |
-
'update_post_term_cache' => false,
|
53 |
-
'no_found_rows' => true,
|
54 |
-
);
|
55 |
-
//Loop Over to get all the attachments
|
56 |
-
while ( $get_posts ) {
|
57 |
-
|
58 |
-
//Remove the Filters added by WP Media Folder
|
59 |
-
$wpsmush_stats->remove_filters();
|
60 |
-
|
61 |
-
$query = new WP_Query( $args );
|
62 |
-
|
63 |
-
if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
|
64 |
-
|
65 |
-
//Get a filtered list of post ids
|
66 |
-
$posts = $wpsmushit_admin->filter_by_mime( $query->posts );
|
67 |
-
|
68 |
-
//Merge the results
|
69 |
-
$unsmushed_posts = array_merge( $unsmushed_posts, $posts );
|
70 |
-
|
71 |
-
//Update the offset
|
72 |
-
$args['offset'] += $limit;
|
73 |
-
} else {
|
74 |
-
//If we didn't get any posts from query, set $get_posts to false
|
75 |
-
$get_posts = false;
|
76 |
-
}
|
77 |
-
|
78 |
-
//If we already got enough posts
|
79 |
-
if ( count( $unsmushed_posts ) >= $r_limit ) {
|
80 |
-
$get_posts = false;
|
81 |
-
}
|
82 |
-
|
83 |
-
//If total Count is set, and it is alread lesser than offset, don't query
|
84 |
-
if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $args['offset'] ) {
|
85 |
-
$get_posts = false;
|
86 |
-
}
|
87 |
-
}
|
88 |
-
} else {
|
89 |
-
return array_map( 'intval', explode( ',', $_REQUEST['ids'] ) );
|
90 |
-
}
|
91 |
-
|
92 |
-
return $unsmushed_posts;
|
93 |
-
}
|
94 |
-
|
95 |
-
}
|
96 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/class-wp-smush-db.php
CHANGED
@@ -835,7 +835,7 @@ if ( ! class_exists( 'WpSmushDB' ) ) {
|
|
835 |
*
|
836 |
*
|
837 |
*/
|
838 |
-
function
|
839 |
//@todo: Add image_count, lossy count, count_smushed
|
840 |
$stats = array(
|
841 |
'size_before' => 0,
|
@@ -845,7 +845,8 @@ if ( ! class_exists( 'WpSmushDB' ) ) {
|
|
845 |
'count_images' => 0,
|
846 |
'count_supersmushed' => 0,
|
847 |
'count_smushed' => 0,
|
848 |
-
'count_resize' => 0
|
|
|
849 |
);
|
850 |
|
851 |
//If we don't have any attachments, return empty array
|
835 |
*
|
836 |
*
|
837 |
*/
|
838 |
+
function get_stats_for_attachments( $attachments = array() ) {
|
839 |
//@todo: Add image_count, lossy count, count_smushed
|
840 |
$stats = array(
|
841 |
'size_before' => 0,
|
845 |
'count_images' => 0,
|
846 |
'count_supersmushed' => 0,
|
847 |
'count_smushed' => 0,
|
848 |
+
'count_resize' => 0,
|
849 |
+
'count_remaining' => 0
|
850 |
);
|
851 |
|
852 |
//If we don't have any attachments, return empty array
|
lib/class-wp-smush-dir.php
CHANGED
@@ -34,7 +34,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
34 |
add_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
|
35 |
|
36 |
//Hook UI at the end of Settings UI
|
37 |
-
add_action( 'smush_settings_ui_bottom', array( $this, 'ui' ) );
|
38 |
|
39 |
//Output Stats after Resize savings
|
40 |
add_action( 'stats_ui_after_resize_savings', array( $this, 'stats_ui' ) );
|
@@ -58,7 +58,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
58 |
add_action( 'wp_ajax_get_dir_smush_stats', array( $this, 'get_dir_smush_stats' ) );
|
59 |
|
60 |
//Add Directory list overlay at the end of content
|
61 |
-
add_action('admin_footer', array( $this, 'directory_list_dialog' ) );
|
62 |
|
63 |
}
|
64 |
|
@@ -85,19 +85,21 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
85 |
if ( ! empty( $dir_smush_stats ) && ! empty( $dir_smush_stats['dir_smush'] ) ) {
|
86 |
$human = ! empty( $dir_smush_stats['dir_smush']['bytes'] ) && $dir_smush_stats['dir_smush']['bytes'] > 0 ? $dir_smush_stats['dir_smush']['bytes'] : 0;
|
87 |
$percent = ! empty( $dir_smush_stats['dir_smush']['percent'] ) && $dir_smush_stats['dir_smush']['percent'] > 0 ? number_format_i18n( $dir_smush_stats['dir_smush']['percent'], 1, '.', '' ) : 0;
|
88 |
-
}?>
|
89 |
<!-- Savings from Directory Smush -->
|
90 |
<div class="row smush-dir-savings">
|
91 |
<span class="float-l wp-smush-stats-label"><strong><?php esc_html_e( "Directory-smush savings", "wp-smushit" ); ?></strong></span>
|
92 |
-
<span class="wp-smush-stats<?php echo $human > 0 ? ' float-r' : ' float-l'?>">
|
93 |
-
<span class="spinner" style="visibility: visible"
|
|
|
94 |
<?php
|
95 |
if ( $human < 0 ) { ?>
|
96 |
-
<span class="wp-smush-stats-human"> <?php echo size_format( $human,1 ); ?></span><?php
|
97 |
//Output percentage only if > 1
|
98 |
if ( $percent > 1 ) { ?>
|
99 |
<span class="wp-smush-stats-sep">/</span>
|
100 |
-
<span class="wp-smush-stats-percent"><?php echo ! empty( $percent ) ? $percent : '';
|
|
|
101 |
}
|
102 |
} else { ?>
|
103 |
<span class="wp-smush-stats-human settings-desc"><?php esc_html_e( "Smush images that aren't located in your uploads folder.", "wp-smushit" ); ?>
|
@@ -117,10 +119,12 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
117 |
function create_table() {
|
118 |
global $wpdb;
|
119 |
|
120 |
-
|
|
|
|
|
|
|
121 |
|
122 |
-
|
123 |
-
$path_index_size = 191;
|
124 |
|
125 |
/**
|
126 |
* Table: wp_smush_dir_images
|
@@ -141,6 +145,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
141 |
$sql = "CREATE TABLE {$wpdb->prefix}smush_dir_images (
|
142 |
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
143 |
path text NOT NULL,
|
|
|
144 |
resize varchar(55),
|
145 |
lossy varchar(55),
|
146 |
error varchar(55) DEFAULT NULL,
|
@@ -150,7 +155,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
150 |
last_scan timestamp DEFAULT '0000-00-00 00:00:00',
|
151 |
meta text,
|
152 |
UNIQUE KEY id (id),
|
153 |
-
UNIQUE KEY
|
154 |
KEY image_size (image_size)
|
155 |
) $charset_collate;";
|
156 |
|
@@ -234,7 +239,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
234 |
if ( $WpSmush->validate_install() ) {
|
235 |
remove_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
|
236 |
} else {
|
237 |
-
remove_action( 'smush_settings_ui_bottom', array( $this, 'ui' ) );
|
238 |
}
|
239 |
|
240 |
//Reset the bulk limit
|
@@ -246,6 +251,14 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
246 |
wp_nonce_field( 'smush_get_dir_list', 'list_nonce' );
|
247 |
wp_nonce_field( 'smush_get_image_list', 'image_list_nonce' );
|
248 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
/** Directory Browser and Image List **/
|
250 |
$wpsmush_bulkui->container_header( 'wp-smush-dir-browser', 'wp-smush-dir-browser', esc_html__( "DIRECTORY SMUSH", "wp-smushit" ) ); ?>
|
251 |
<div class="box-content">
|
@@ -271,7 +284,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
271 |
<i class="icon-fi-warning-alert"></i><?php printf( esc_html__( "%s/%s image(s) were successfully smushed, however %s image(s) could not be smushed due to an error.", "wp-smushit" ), '<span class="wp-smush-dir-smushed"></span>', '<span class="wp-smush-dir-total"></span>', '<span class="wp-smush-dir-remaining"></span>' ); ?>
|
272 |
</div>
|
273 |
<div class="wp-smush-notice wp-smush-dir-limit hidden">
|
274 |
-
<i class="icon-fi-info"></i><?php printf( esc_html__( " %sUpgrade to pro%s to bulk smush all your directory images with one click. Free users can smush 50 images with each click.", "wp-smushit" ), '<a href="' . esc_url( $
|
275 |
</div>
|
276 |
<div class="wp-smush-all-button-wrap bottom">
|
277 |
<!-- @todo: Check status of the images in last scan and do not show smush now button, if already finished -->
|
@@ -321,6 +334,8 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
321 |
|
322 |
/**
|
323 |
* Return a directory/File list
|
|
|
|
|
324 |
*/
|
325 |
function directory_list() {
|
326 |
//Check For Permission
|
@@ -338,7 +353,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
338 |
$postDir = realpath( rawurldecode( $postDir ) );
|
339 |
|
340 |
//If the final path doesn't contains the root path, bail out.
|
341 |
-
if (
|
342 |
wp_send_json_error( "Unauthorized" );
|
343 |
}
|
344 |
|
@@ -353,7 +368,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
353 |
|
354 |
if ( file_exists( $postDir ) ) {
|
355 |
|
356 |
-
$files
|
357 |
//Exclude hidden files
|
358 |
if ( ! empty( $files ) ) {
|
359 |
$files = preg_grep( '/^([^.])/', $files );
|
@@ -366,7 +381,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
366 |
$list = "<ul class='jqueryFileTree' tabindex='0'>";
|
367 |
foreach ( $files as $file ) {
|
368 |
|
369 |
-
$htmlRel = htmlentities( ltrim( path_join( $returnDir
|
370 |
$htmlName = htmlentities( $file );
|
371 |
$ext = preg_replace( '/^.*\./', '', $file );
|
372 |
|
@@ -469,13 +484,18 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
469 |
* @return string
|
470 |
*/
|
471 |
function get_image_list( $path = '' ) {
|
472 |
-
global $wpdb;
|
|
|
|
|
|
|
|
|
|
|
473 |
|
474 |
$base_dir = empty( $path ) ? ltrim( $_GET['path'], '/' ) : $path;
|
475 |
$base_dir = realpath( rawurldecode( $base_dir ) );
|
476 |
|
477 |
-
if (
|
478 |
-
wp_send_json_error( "Unauthorized" );
|
479 |
}
|
480 |
|
481 |
//Store the path in option
|
@@ -500,9 +520,9 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
500 |
$images = array();
|
501 |
$count = 0;
|
502 |
$timestamp = gmdate( 'Y-m-d H:i:s' );
|
503 |
-
$values
|
504 |
//Temporary Increase the limit
|
505 |
-
|
506 |
foreach ( $iterator as $path ) {
|
507 |
|
508 |
//Used in place of Skip Dots, For php 5.2 compatability
|
@@ -531,10 +551,11 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
531 |
/** To be stored in DB, Part of code inspired from Ewwww Optimiser */
|
532 |
$image_size = $path->getSize();
|
533 |
$images [] = $file_path;
|
|
|
534 |
$images [] = $image_size;
|
535 |
$images [] = $file_time;
|
536 |
$images [] = $timestamp;
|
537 |
-
$values[] = '(%s, %d, %d, %s)';
|
538 |
$count ++;
|
539 |
}
|
540 |
}
|
@@ -584,7 +605,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
584 |
$values = implode( ',', $values );
|
585 |
|
586 |
//Replace with image path and respective parameters
|
587 |
-
$query = "INSERT INTO {$wpdb->prefix}smush_dir_images (path,orig_size,file_time,last_scan) VALUES $values ON DUPLICATE KEY UPDATE image_size = IF( file_time < VALUES(file_time), NULL, image_size ), file_time = IF( file_time < VALUES(file_time), VALUES(file_time), file_time ), last_scan = VALUES( last_scan )";
|
588 |
$query = $wpdb->prepare( $query, $images );
|
589 |
|
590 |
return $query;
|
@@ -930,21 +951,23 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
930 |
}
|
931 |
|
932 |
$image_id = $this->get_image_id( $item, $images['image_items'] );
|
933 |
-
|
934 |
-
|
935 |
-
|
|
|
|
|
936 |
}
|
937 |
$div .= "</ul>
|
938 |
<hr />
|
939 |
</li>";
|
940 |
-
$hr
|
941 |
} else {
|
942 |
$hr = true;
|
943 |
$image_p = array_pop( $image );
|
944 |
//Check if the image is already in optimised list
|
945 |
$class = is_array( $this->optimised_images ) && array_key_exists( $image_p, $this->optimised_images ) ? ' optimised' : '';
|
946 |
$image_id = $this->get_image_id( $image_p, $images['image_items'] );
|
947 |
-
$div
|
948 |
//Close LI
|
949 |
$div .= "</li>";
|
950 |
}
|
@@ -985,7 +1008,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
985 |
}
|
986 |
$offset += $limit;
|
987 |
//If offset is above total number, do not query
|
988 |
-
if( $offset > $total ) {
|
989 |
$continue = false;
|
990 |
}
|
991 |
}
|
@@ -1079,7 +1102,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
1079 |
|
1080 |
// Get the last scan stats.
|
1081 |
$last_scan = $this->last_scan_stats();
|
1082 |
-
$stats
|
1083 |
|
1084 |
//Check smush limit for free users
|
1085 |
if ( ! $WpSmush->validate_install() ) {
|
@@ -1155,9 +1178,9 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
1155 |
if ( isset( $_GET['get_stats'] ) && 1 == $_GET['get_stats'] ) {
|
1156 |
// This will setup directory smush stats too.
|
1157 |
$wpsmushit_admin->setup_global_stats();
|
1158 |
-
$stats
|
1159 |
-
$stats['total']
|
1160 |
-
$resmush_count
|
1161 |
// $stats['smushed'] = ! empty( $wpsmushit_admin->resmush_ids ) ? $wpsmushit_admin->smushed_count - $resmush_count : $wpsmushit_admin->smushed_count;
|
1162 |
$stats['smushed'] = $wpsmushit_admin->smushed_count;
|
1163 |
if ( $lossy == 1 ) {
|
@@ -1173,7 +1196,7 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
1173 |
|
1174 |
//Show the image wise stats
|
1175 |
$image = array(
|
1176 |
-
'id'
|
1177 |
'size_before' => $image['orig_size'],
|
1178 |
'size_after' => $smush_results['data']->after_size
|
1179 |
);
|
@@ -1328,36 +1351,62 @@ if ( ! class_exists( 'WpSmushDir' ) ) {
|
|
1328 |
|
1329 |
/**
|
1330 |
* Output the content for Directory smush list dialog content
|
1331 |
-
|
1332 |
*/
|
1333 |
function directory_list_dialog() {
|
1334 |
$current_screen = get_current_screen();
|
1335 |
-
if ( empty( $current_screen ) || empty( $current_screen->base ) || '
|
1336 |
return;
|
1337 |
} ?>
|
1338 |
<div class="dev-overlay small wp-smush-list-dialog roboto-regular">
|
1339 |
-
|
1340 |
-
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
</div>
|
1355 |
</div>
|
1356 |
</div>
|
1357 |
</div>
|
|
|
1358 |
</div><?php
|
1359 |
}
|
1360 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1361 |
}
|
1362 |
|
1363 |
//Class Object
|
34 |
add_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
|
35 |
|
36 |
//Hook UI at the end of Settings UI
|
37 |
+
add_action( 'smush_settings_ui_bottom', array( $this, 'ui' ), 11 );
|
38 |
|
39 |
//Output Stats after Resize savings
|
40 |
add_action( 'stats_ui_after_resize_savings', array( $this, 'stats_ui' ) );
|
58 |
add_action( 'wp_ajax_get_dir_smush_stats', array( $this, 'get_dir_smush_stats' ) );
|
59 |
|
60 |
//Add Directory list overlay at the end of content
|
61 |
+
add_action( 'admin_footer', array( $this, 'directory_list_dialog' ) );
|
62 |
|
63 |
}
|
64 |
|
85 |
if ( ! empty( $dir_smush_stats ) && ! empty( $dir_smush_stats['dir_smush'] ) ) {
|
86 |
$human = ! empty( $dir_smush_stats['dir_smush']['bytes'] ) && $dir_smush_stats['dir_smush']['bytes'] > 0 ? $dir_smush_stats['dir_smush']['bytes'] : 0;
|
87 |
$percent = ! empty( $dir_smush_stats['dir_smush']['percent'] ) && $dir_smush_stats['dir_smush']['percent'] > 0 ? number_format_i18n( $dir_smush_stats['dir_smush']['percent'], 1, '.', '' ) : 0;
|
88 |
+
} ?>
|
89 |
<!-- Savings from Directory Smush -->
|
90 |
<div class="row smush-dir-savings">
|
91 |
<span class="float-l wp-smush-stats-label"><strong><?php esc_html_e( "Directory-smush savings", "wp-smushit" ); ?></strong></span>
|
92 |
+
<span class="wp-smush-stats<?php echo $human > 0 ? ' float-r' : ' float-l' ?>">
|
93 |
+
<span class="spinner" style="visibility: visible"
|
94 |
+
title="<?php esc_html_e( "Updating Stats", "wp-smushit" ); ?>"></span>
|
95 |
<?php
|
96 |
if ( $human < 0 ) { ?>
|
97 |
+
<span class="wp-smush-stats-human"> <?php echo size_format( $human, 1 ); ?></span><?php
|
98 |
//Output percentage only if > 1
|
99 |
if ( $percent > 1 ) { ?>
|
100 |
<span class="wp-smush-stats-sep">/</span>
|
101 |
+
<span class="wp-smush-stats-percent"><?php echo ! empty( $percent ) ? $percent : ''; ?>
|
102 |
+
%</span><?php
|
103 |
}
|
104 |
} else { ?>
|
105 |
<span class="wp-smush-stats-human settings-desc"><?php esc_html_e( "Smush images that aren't located in your uploads folder.", "wp-smushit" ); ?>
|
119 |
function create_table() {
|
120 |
global $wpdb;
|
121 |
|
122 |
+
//Run the query only on directory smush page
|
123 |
+
if ( ! isset( $_GET['page'] ) || 'smush' != $_GET['page'] ) {
|
124 |
+
return null;
|
125 |
+
}
|
126 |
|
127 |
+
$charset_collate = $wpdb->get_charset_collate();
|
|
|
128 |
|
129 |
/**
|
130 |
* Table: wp_smush_dir_images
|
145 |
$sql = "CREATE TABLE {$wpdb->prefix}smush_dir_images (
|
146 |
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
147 |
path text NOT NULL,
|
148 |
+
path_hash CHAR(32),
|
149 |
resize varchar(55),
|
150 |
lossy varchar(55),
|
151 |
error varchar(55) DEFAULT NULL,
|
155 |
last_scan timestamp DEFAULT '0000-00-00 00:00:00',
|
156 |
meta text,
|
157 |
UNIQUE KEY id (id),
|
158 |
+
UNIQUE KEY path_hash (path_hash),
|
159 |
KEY image_size (image_size)
|
160 |
) $charset_collate;";
|
161 |
|
239 |
if ( $WpSmush->validate_install() ) {
|
240 |
remove_action( 'wp_smush_before_advanced_settings', array( $this, 'ui' ) );
|
241 |
} else {
|
242 |
+
remove_action( 'smush_settings_ui_bottom', array( $this, 'ui' ), 11 );
|
243 |
}
|
244 |
|
245 |
//Reset the bulk limit
|
251 |
wp_nonce_field( 'smush_get_dir_list', 'list_nonce' );
|
252 |
wp_nonce_field( 'smush_get_image_list', 'image_list_nonce' );
|
253 |
|
254 |
+
$upgrade_url = add_query_arg(
|
255 |
+
array(
|
256 |
+
'utm_source' => 'smush',
|
257 |
+
'utm_medium' => 'plugin',
|
258 |
+
'utm_campaign' => 'smush_directorysmush_limit_notice'
|
259 |
+
),
|
260 |
+
$wpsmushit_admin->upgrade_url
|
261 |
+
);
|
262 |
/** Directory Browser and Image List **/
|
263 |
$wpsmush_bulkui->container_header( 'wp-smush-dir-browser', 'wp-smush-dir-browser', esc_html__( "DIRECTORY SMUSH", "wp-smushit" ) ); ?>
|
264 |
<div class="box-content">
|
284 |
<i class="icon-fi-warning-alert"></i><?php printf( esc_html__( "%s/%s image(s) were successfully smushed, however %s image(s) could not be smushed due to an error.", "wp-smushit" ), '<span class="wp-smush-dir-smushed"></span>', '<span class="wp-smush-dir-total"></span>', '<span class="wp-smush-dir-remaining"></span>' ); ?>
|
285 |
</div>
|
286 |
<div class="wp-smush-notice wp-smush-dir-limit hidden">
|
287 |
+
<i class="icon-fi-info"></i><?php printf( esc_html__( " %sUpgrade to pro%s to bulk smush all your directory images with one click. Free users can smush 50 images with each click.", "wp-smushit" ), '<a href="' . esc_url( $upgrade_url ) . '" target="_blank" title="' . esc_html__( "Smush Pro", "wp-smushit" ) . '">', '</a>' ); ?>
|
288 |
</div>
|
289 |
<div class="wp-smush-all-button-wrap bottom">
|
290 |
<!-- @todo: Check status of the images in last scan and do not show smush now button, if already finished -->
|
334 |
|
335 |
/**
|
336 |
* Return a directory/File list
|
337 |
+
*
|
338 |
+
* PHP Connector
|
339 |
*/
|
340 |
function directory_list() {
|
341 |
//Check For Permission
|
353 |
$postDir = realpath( rawurldecode( $postDir ) );
|
354 |
|
355 |
//If the final path doesn't contains the root path, bail out.
|
356 |
+
if ( ! $root || $postDir === false || strpos( $postDir, $root ) !== 0 ) {
|
357 |
wp_send_json_error( "Unauthorized" );
|
358 |
}
|
359 |
|
368 |
|
369 |
if ( file_exists( $postDir ) ) {
|
370 |
|
371 |
+
$files = scandir( $postDir );
|
372 |
//Exclude hidden files
|
373 |
if ( ! empty( $files ) ) {
|
374 |
$files = preg_grep( '/^([^.])/', $files );
|
381 |
$list = "<ul class='jqueryFileTree' tabindex='0'>";
|
382 |
foreach ( $files as $file ) {
|
383 |
|
384 |
+
$htmlRel = htmlentities( ltrim( path_join( $returnDir, $file ), '/' ) );
|
385 |
$htmlName = htmlentities( $file );
|
386 |
$ext = preg_replace( '/^.*\./', '', $file );
|
387 |
|
484 |
* @return string
|
485 |
*/
|
486 |
function get_image_list( $path = '' ) {
|
487 |
+
global $wpdb, $wpsmush_helper;
|
488 |
+
|
489 |
+
//Return Error if not a valid directory path
|
490 |
+
if ( ! is_dir( $path ) ) {
|
491 |
+
wp_send_json_error( array( "message" => "Not a valid directory path" ) );
|
492 |
+
}
|
493 |
|
494 |
$base_dir = empty( $path ) ? ltrim( $_GET['path'], '/' ) : $path;
|
495 |
$base_dir = realpath( rawurldecode( $base_dir ) );
|
496 |
|
497 |
+
if ( ! $base_dir ) {
|
498 |
+
wp_send_json_error( array( "message" => "Unauthorized" ) );
|
499 |
}
|
500 |
|
501 |
//Store the path in option
|
520 |
$images = array();
|
521 |
$count = 0;
|
522 |
$timestamp = gmdate( 'Y-m-d H:i:s' );
|
523 |
+
$values = array();
|
524 |
//Temporary Increase the limit
|
525 |
+
$wpsmush_helper->increase_memory_limit();
|
526 |
foreach ( $iterator as $path ) {
|
527 |
|
528 |
//Used in place of Skip Dots, For php 5.2 compatability
|
551 |
/** To be stored in DB, Part of code inspired from Ewwww Optimiser */
|
552 |
$image_size = $path->getSize();
|
553 |
$images [] = $file_path;
|
554 |
+
$images [] = md5($file_path );
|
555 |
$images [] = $image_size;
|
556 |
$images [] = $file_time;
|
557 |
$images [] = $timestamp;
|
558 |
+
$values[] = '(%s, %s, %d, %d, %s)';
|
559 |
$count ++;
|
560 |
}
|
561 |
}
|
605 |
$values = implode( ',', $values );
|
606 |
|
607 |
//Replace with image path and respective parameters
|
608 |
+
$query = "INSERT INTO {$wpdb->prefix}smush_dir_images (path, path_hash, orig_size,file_time,last_scan) VALUES $values ON DUPLICATE KEY UPDATE image_size = IF( file_time < VALUES(file_time), NULL, image_size ), file_time = IF( file_time < VALUES(file_time), VALUES(file_time), file_time ), last_scan = VALUES( last_scan )";
|
609 |
$query = $wpdb->prepare( $query, $images );
|
610 |
|
611 |
return $query;
|
951 |
}
|
952 |
|
953 |
$image_id = $this->get_image_id( $item, $images['image_items'] );
|
954 |
+
if( !empty( $image_id ) ) {
|
955 |
+
$div .= "<li class='wp-smush-image-ele{$class}' id='{$image_id}'><span class='wp-smush-image-ele-status'></span><span class='wp-smush-image-path'>{$item}</span>";
|
956 |
+
//Close LI
|
957 |
+
$div .= "</li>";
|
958 |
+
}
|
959 |
}
|
960 |
$div .= "</ul>
|
961 |
<hr />
|
962 |
</li>";
|
963 |
+
$hr = false;
|
964 |
} else {
|
965 |
$hr = true;
|
966 |
$image_p = array_pop( $image );
|
967 |
//Check if the image is already in optimised list
|
968 |
$class = is_array( $this->optimised_images ) && array_key_exists( $image_p, $this->optimised_images ) ? ' optimised' : '';
|
969 |
$image_id = $this->get_image_id( $image_p, $images['image_items'] );
|
970 |
+
$div .= "<li class='wp-smush-image-ele{$class}' id='{$image_id}'><span class='wp-smush-image-ele-status'></span><span class='wp-smush-image-path'>{$image_p}</span>";
|
971 |
//Close LI
|
972 |
$div .= "</li>";
|
973 |
}
|
1008 |
}
|
1009 |
$offset += $limit;
|
1010 |
//If offset is above total number, do not query
|
1011 |
+
if ( $offset > $total ) {
|
1012 |
$continue = false;
|
1013 |
}
|
1014 |
}
|
1102 |
|
1103 |
// Get the last scan stats.
|
1104 |
$last_scan = $this->last_scan_stats();
|
1105 |
+
$stats = array();
|
1106 |
|
1107 |
//Check smush limit for free users
|
1108 |
if ( ! $WpSmush->validate_install() ) {
|
1178 |
if ( isset( $_GET['get_stats'] ) && 1 == $_GET['get_stats'] ) {
|
1179 |
// This will setup directory smush stats too.
|
1180 |
$wpsmushit_admin->setup_global_stats();
|
1181 |
+
$stats = $wpsmushit_admin->stats;
|
1182 |
+
$stats['total'] = $wpsmushit_admin->total_count;
|
1183 |
+
$resmush_count = empty( $wpsmushit_admin->resmush_ids ) ? count( $wpsmushit_admin->resmush_ids = get_option( "wp-smush-resmush-list" ) ) : count( $wpsmushit_admin->resmush_ids );
|
1184 |
// $stats['smushed'] = ! empty( $wpsmushit_admin->resmush_ids ) ? $wpsmushit_admin->smushed_count - $resmush_count : $wpsmushit_admin->smushed_count;
|
1185 |
$stats['smushed'] = $wpsmushit_admin->smushed_count;
|
1186 |
if ( $lossy == 1 ) {
|
1196 |
|
1197 |
//Show the image wise stats
|
1198 |
$image = array(
|
1199 |
+
'id' => $id,
|
1200 |
'size_before' => $image['orig_size'],
|
1201 |
'size_after' => $smush_results['data']->after_size
|
1202 |
);
|
1351 |
|
1352 |
/**
|
1353 |
* Output the content for Directory smush list dialog content
|
1354 |
+
*
|
1355 |
*/
|
1356 |
function directory_list_dialog() {
|
1357 |
$current_screen = get_current_screen();
|
1358 |
+
if ( empty( $current_screen ) || empty( $current_screen->base ) || ( 'toplevel_page_smush' != $current_screen->base && 'toplevel_page_smush-network' != $current_screen->base ) ) {
|
1359 |
return;
|
1360 |
} ?>
|
1361 |
<div class="dev-overlay small wp-smush-list-dialog roboto-regular">
|
1362 |
+
<div class="back"></div>
|
1363 |
+
<div class="box-scroll">
|
1364 |
+
<div class="box">
|
1365 |
+
<div class="title"><h3><?php esc_html_e( "Directory list", "wp-smushit" ); ?></h3>
|
1366 |
+
<div aria-hidden="true" class="close">×</div>
|
1367 |
+
<button class="wpdui-sr-only"><span class="wpdui-sr-only">Close</span></button>
|
1368 |
+
</div>
|
1369 |
+
<div class="wp-smush-instruct"><?php esc_html_e( "Choose the folder you wish to smush.", "wp-smushit" ); ?></div>
|
1370 |
+
<div class="content">
|
1371 |
+
</div>
|
1372 |
+
<div class="wp-smush-select-button-wrap">
|
1373 |
+
<div class="wp-smush-section-desc"><?php esc_html_e( "Smush will also include any images in sub folders of your selected folder.", "wp-smushit" ); ?></div>
|
1374 |
+
<div class="wp-smush-select-button-wrap-child">
|
1375 |
+
<span class="spinner"></span>
|
1376 |
+
<button class="wp-smush-select-dir"><?php esc_html_e( "ADD DIRECTORY", "wp-smushit" ); ?></button>
|
|
|
1377 |
</div>
|
1378 |
</div>
|
1379 |
</div>
|
1380 |
+
</div>
|
1381 |
</div><?php
|
1382 |
}
|
1383 |
|
1384 |
+
/**
|
1385 |
+
* Display a admin notice on smush screen if the custom table wasn't created
|
1386 |
+
*
|
1387 |
+
* @return Notice if table doesn't exists
|
1388 |
+
*
|
1389 |
+
* @todo: Update text
|
1390 |
+
*/
|
1391 |
+
function check_for_table_error() {
|
1392 |
+
global $wpdb;
|
1393 |
+
$notice = '';
|
1394 |
+
$current_screen = get_current_screen();
|
1395 |
+
if ( 'toplevel_page_smush' != $current_screen->id && 'toplevel_page_smush-network' != $current_screen->id ) {
|
1396 |
+
return $notice;
|
1397 |
+
}
|
1398 |
+
$sql = $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $wpdb->prefix . 'smush_dir_images' ) );
|
1399 |
+
$smush_table = ( $wpdb->get_var( $sql ) != null );
|
1400 |
+
if ( ! $smush_table ) {
|
1401 |
+
//Display a notice
|
1402 |
+
$notice = '<div class="wp-smush-notice missing_table"><p>';
|
1403 |
+
$notice .= esc_html__( 'Directory smushing requires custom tables and it seems there was an error creating tables. For help, please contact our team on the support forums', "wp-smushit" );
|
1404 |
+
$notice .= '</p></div>';
|
1405 |
+
}
|
1406 |
+
|
1407 |
+
return $notice;
|
1408 |
+
}
|
1409 |
+
|
1410 |
}
|
1411 |
|
1412 |
//Class Object
|
lib/class-wp-smush-helper.php
CHANGED
@@ -155,6 +155,57 @@ if ( ! class_exists( 'WpSmushHelper' ) ) {
|
|
155 |
|
156 |
return $string;
|
157 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
}
|
159 |
|
160 |
global $wpsmush_helper;
|
155 |
|
156 |
return $string;
|
157 |
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Bump up the PHP memory limit temporarily
|
161 |
+
*/
|
162 |
+
function increase_memory_limit() {
|
163 |
+
$mlimit = ini_get('memory_limit');
|
164 |
+
$trim_limit = rtrim($mlimit,"M");
|
165 |
+
if ($trim_limit < '256') {
|
166 |
+
@ini_set('memory_limit', '256M');
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Returns true if a database table column exists. Otherwise returns false.
|
172 |
+
*
|
173 |
+
* @link http://stackoverflow.com/a/5943905/2489248
|
174 |
+
* @global wpdb $wpdb
|
175 |
+
*
|
176 |
+
* @param string $table_name Name of table we will check for column existence.
|
177 |
+
* @param string $column_name Name of column we are checking for.
|
178 |
+
*
|
179 |
+
* @return boolean True if column exists. Else returns false.
|
180 |
+
*/
|
181 |
+
function table_column_exists( $table_name, $column_name ) {
|
182 |
+
global $wpdb;
|
183 |
+
$column = $wpdb->get_results( $wpdb->prepare(
|
184 |
+
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s ",
|
185 |
+
DB_NAME, $table_name, $column_name
|
186 |
+
) );
|
187 |
+
if ( ! empty( $column ) ) {
|
188 |
+
return true;
|
189 |
+
}
|
190 |
+
return false;
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Drops a specified index from a table.
|
195 |
+
*
|
196 |
+
* @since 1.0.1
|
197 |
+
*
|
198 |
+
* @global wpdb $wpdb
|
199 |
+
*
|
200 |
+
* @param string $table Database table name.
|
201 |
+
* @param string $index Index name to drop.
|
202 |
+
* @return true True, when finished.
|
203 |
+
*/
|
204 |
+
function drop_index($table, $index) {
|
205 |
+
global $wpdb;
|
206 |
+
$wpdb->query("ALTER TABLE `$table` DROP INDEX `$index`");
|
207 |
+
return true;
|
208 |
+
}
|
209 |
}
|
210 |
|
211 |
global $wpsmush_helper;
|
lib/class-wp-smush-nextgen.php
CHANGED
@@ -39,9 +39,13 @@ if ( ! class_exists( 'WpSmushNextGen' ) ) {
|
|
39 |
add_filter( 'wp_smush_pro_settings', array( $this, 'add_setting' ), 5 );
|
40 |
|
41 |
//Check if integration is Enabled or not
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
45 |
|
46 |
//return if not a pro user, or nextgen integration is not enabled
|
47 |
if( !$WpSmush->validate_install() || !$opt_nextgen_val ) {
|
@@ -601,6 +605,9 @@ if ( ! class_exists( 'WpSmushNextGen' ) ) {
|
|
601 |
//If any of the image is restored, we count it as success
|
602 |
if ( in_array( true, $restored ) ) {
|
603 |
|
|
|
|
|
|
|
604 |
//Remove the Meta, And send json success
|
605 |
$image->meta_data['wp_smush'] = '';
|
606 |
nggdb::update_image_meta( $image->pid, $image->meta_data );
|
39 |
add_filter( 'wp_smush_pro_settings', array( $this, 'add_setting' ), 5 );
|
40 |
|
41 |
//Check if integration is Enabled or not
|
42 |
+
if ( ! empty( $wpsmush_settings->settings ) ) {
|
43 |
+
$opt_nextgen_val = $wpsmush_settings->settings['nextgen'];
|
44 |
+
} else {
|
45 |
+
//Smush NextGen key
|
46 |
+
$opt_nextgen = WP_SMUSH_PREFIX . 'nextgen';
|
47 |
+
$opt_nextgen_val = $wpsmush_settings->get_setting( $opt_nextgen, false );
|
48 |
+
}
|
49 |
|
50 |
//return if not a pro user, or nextgen integration is not enabled
|
51 |
if( !$WpSmush->validate_install() || !$opt_nextgen_val ) {
|
605 |
//If any of the image is restored, we count it as success
|
606 |
if ( in_array( true, $restored ) ) {
|
607 |
|
608 |
+
//Update the global Stats
|
609 |
+
$wpsmushnextgenadmin->update_nextgen_stats( $image_id );
|
610 |
+
|
611 |
//Remove the Meta, And send json success
|
612 |
$image->meta_data['wp_smush'] = '';
|
613 |
nggdb::update_image_meta( $image->pid, $image->meta_data );
|
lib/class-wp-smush-recommender.php
ADDED
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Displays the UI for .org plugin recommendations
|
4 |
+
*
|
5 |
+
* @package WP Smush
|
6 |
+
* @subpackage Admin
|
7 |
+
* @since 2.7.9
|
8 |
+
*
|
9 |
+
* @author Umesh Kumar <umesh@incsub.com>
|
10 |
+
*
|
11 |
+
* @copyright (c) 2018, Incsub (http://incsub.com)
|
12 |
+
*/
|
13 |
+
|
14 |
+
if ( ! class_exists( 'WpSmushRecommender' ) ) {
|
15 |
+
|
16 |
+
class WpSmushRecommender {
|
17 |
+
|
18 |
+
function __construct() {
|
19 |
+
//Hook UI at the end of Settings UI
|
20 |
+
add_action( 'smush_settings_ui_bottom', array( $this, 'ui' ), 12 );
|
21 |
+
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Do not display Directory smush for Subsites
|
26 |
+
*
|
27 |
+
* @return bool True/False, whether to display the Directory smush or not
|
28 |
+
*
|
29 |
+
*/
|
30 |
+
function should_continue() {
|
31 |
+
global $WpSmush;
|
32 |
+
|
33 |
+
//Do not show directory smush, if not main site in a network
|
34 |
+
if ( $WpSmush->validate_install() ) {
|
35 |
+
return false;
|
36 |
+
}
|
37 |
+
|
38 |
+
return true;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Output the required UI for Plugin recommendations
|
43 |
+
*/
|
44 |
+
function ui() {
|
45 |
+
global $wpsmushit_admin;
|
46 |
+
if ( $this->should_continue() ) { ?>
|
47 |
+
|
48 |
+
<div class="sui-row" id="sui-cross-sell-footer">
|
49 |
+
<div><span class="sui-icon-plugin-2"></span></div>
|
50 |
+
<h3><?php esc_html_e( "Check out our other free wordpress.org plugins!", "wp-smushit" ); ?></h3>
|
51 |
+
</div>
|
52 |
+
<div class="sui-row sui-cross-sell-modules"><?php
|
53 |
+
//Hummingbird
|
54 |
+
$hb_title = esc_html__( "Hummingbird Page Speed Optimization", "wp-smushit" );
|
55 |
+
$hb_content = esc_html__( "Performance Tests, File Optimization & Compression, Page, Browser & Gravatar Caching, GZIP Compression, CloudFlare Integration & more.", "wp-smushit" );
|
56 |
+
$hb_class = "hummingbird";
|
57 |
+
$hb_url = esc_url( "https://wordpress.org/plugins/hummingbird-performance/" );
|
58 |
+
echo $this->recommendation_box( $hb_title, $hb_content, $hb_url, $hb_class, 1 );
|
59 |
+
//Defender
|
60 |
+
$df_title = esc_html__( "Defender Security, Monitoring, and Hack Protection", "wp-smushit" );
|
61 |
+
$df_content = esc_html__( "Security Tweaks & Recommendations, File & Malware Scanning, Login & 404 Lockout Protection, Two-Factor Authentication & more.", "wp-smushit" );
|
62 |
+
$df_class = "defender";
|
63 |
+
$df_url = esc_url( "https://wordpress.org/plugins/defender-security/" );
|
64 |
+
echo $this->recommendation_box( $df_title, $df_content, $df_url, $df_class, 2 );
|
65 |
+
//SmartCrawl
|
66 |
+
$sc_title = esc_html__( "SmartCrawl Search Engine Optimization", "wp-smushit" );
|
67 |
+
$sc_content = esc_html__( "Customize Titles & Meta Data, OpenGraph, Twitter & Pinterest Support, Auto-Keyword Linking, SEO & Readability Analysis, Sitemaps, URL Crawler & more.", "wp-smushit" );
|
68 |
+
$sc_class = "smartcrawl";
|
69 |
+
$sc_url = esc_url( "https://wordpress.org/plugins/smartcrawl-seo" );
|
70 |
+
echo $this->recommendation_box( $sc_title, $sc_content, $sc_url, $sc_class, 3 );
|
71 |
+
$site_url = esc_url( "https://premium.wpmudev.org/projects/" );
|
72 |
+
$site_url = add_query_arg(
|
73 |
+
array(
|
74 |
+
'utm_source' => 'smush',
|
75 |
+
'utm_medium' => 'plugin',
|
76 |
+
'utm_campaign' => 'smush_footer_upsell_notice'
|
77 |
+
),
|
78 |
+
$site_url
|
79 |
+
);
|
80 |
+
$dir = defined('__DIR__') ? __DIR__ : dirname(__FILE__);
|
81 |
+
?>
|
82 |
+
</div>
|
83 |
+
<div class="sui-cross-sell-bottom">
|
84 |
+
<h3>WPMU DEV - Your WordPress Toolkit</h3>
|
85 |
+
<p>Pretty much everything you need for developing and managing WordPress based websites, and then
|
86 |
+
some.</p>
|
87 |
+
|
88 |
+
<a class="sui-button sui-button-green" href="<?php echo $site_url; ?>"
|
89 |
+
id="dash-uptime-update-membership" target="_blank">
|
90 |
+
Learn more
|
91 |
+
</a>
|
92 |
+
|
93 |
+
<img class="sui-image"
|
94 |
+
src="<?php echo plugins_url( "assets/images/dev-team.png", $dir ); ?>"
|
95 |
+
srcset="<?php echo plugins_url( "assets/images/dev-team@2x.png", $dir ); ?> 2x"
|
96 |
+
alt="Try pro features for free!">
|
97 |
+
</div><?php
|
98 |
+
}
|
99 |
+
?>
|
100 |
+
<div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div><?php
|
101 |
+
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Prints the UI for the given recommended plugin
|
106 |
+
*
|
107 |
+
* @param $title
|
108 |
+
* @param $content
|
109 |
+
* @param $link
|
110 |
+
* @param $plugin_class
|
111 |
+
*/
|
112 |
+
function recommendation_box( $title, $content, $link, $plugin_class, $seq ) {
|
113 |
+
//Put bg to box parent div ?>
|
114 |
+
<div class="sui-col-md-4">
|
115 |
+
<div class="sui-cross-<?php echo $seq; ?> sui-cross-<?php echo $plugin_class; ?>"><span></span></div>
|
116 |
+
<div class="sui-box">
|
117 |
+
<div class="sui-box-body">
|
118 |
+
<h3><?php echo $title; ?></h3>
|
119 |
+
<p><?php echo $content; ?></p>
|
120 |
+
<a href="<?php echo esc_url( $link ); ?>" class="sui-button sui-button-ghost"
|
121 |
+
target="_blank">
|
122 |
+
View features <i class="sui-icon-arrow-right"></i>
|
123 |
+
</a>
|
124 |
+
</div>
|
125 |
+
</div>
|
126 |
+
</div><?php
|
127 |
+
}
|
128 |
+
|
129 |
+
}
|
130 |
+
|
131 |
+
//Class Object
|
132 |
+
global $wpsmush_recommender;
|
133 |
+
$wpsmush_promo = new WpSmushRecommender();
|
134 |
+
}
|
lib/class-wp-smush-s3.php
CHANGED
@@ -155,7 +155,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
|
|
155 |
|
156 |
// Do not display the notice on Bulk Smush Screen.
|
157 |
global $current_screen;
|
158 |
-
if ( ! empty( $current_screen->base ) && '
|
159 |
return true;
|
160 |
}
|
161 |
|
@@ -171,7 +171,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
|
|
171 |
|
172 |
wp_enqueue_script( 'wp-smushit-notice-js' );
|
173 |
// Settings link.
|
174 |
-
$settings_link = is_multisite() &&
|
175 |
|
176 |
if ( $wpsmushit_admin->validate_install() ) {
|
177 |
// If premium user, but S3 support is not enabled.
|
@@ -217,7 +217,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
|
|
217 |
}
|
218 |
|
219 |
//If we only have the attachment id
|
220 |
-
$full_url = $as3cf->is_attachment_served_by_s3( $attachment_id );
|
221 |
//If the filepath contains S3, get the s3 URL for the file
|
222 |
if ( ! empty( $full_url ) ) {
|
223 |
$full_url = $as3cf->get_attachment_url( $attachment_id );
|
@@ -256,7 +256,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
|
|
256 |
|
257 |
//If we have plugin method available, us that otherwise check it ourselves
|
258 |
if ( method_exists( $as3cf, 'is_attachment_served_by_s3' ) ) {
|
259 |
-
$s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id );
|
260 |
$size_prefix = dirname( $s3_object['key'] );
|
261 |
$size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
|
262 |
if ( ! empty( $size_details ) && is_array( $size_details ) ) {
|
@@ -331,7 +331,7 @@ if ( ! class_exists( 'WpSmushS3' ) ) {
|
|
331 |
return false;
|
332 |
}
|
333 |
//Get s3 object for the file
|
334 |
-
$s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id );
|
335 |
|
336 |
$size_prefix = dirname( $s3_object['key'] );
|
337 |
$size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
|
155 |
|
156 |
// Do not display the notice on Bulk Smush Screen.
|
157 |
global $current_screen;
|
158 |
+
if ( ! empty( $current_screen->base ) && 'toplevel_page_smush' != $current_screen->base && 'toplevel_page_smush-network' != $current_screen->base && 'gallery_page_wp-smush-nextgen-bulk' != $current_screen->base && 'toplevel_page_smush-network' != $current_screen->base ) {
|
159 |
return true;
|
160 |
}
|
161 |
|
171 |
|
172 |
wp_enqueue_script( 'wp-smushit-notice-js' );
|
173 |
// Settings link.
|
174 |
+
$settings_link = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : menu_page_url( 'smush', false );
|
175 |
|
176 |
if ( $wpsmushit_admin->validate_install() ) {
|
177 |
// If premium user, but S3 support is not enabled.
|
217 |
}
|
218 |
|
219 |
//If we only have the attachment id
|
220 |
+
$full_url = $as3cf->is_attachment_served_by_s3( $attachment_id, true );
|
221 |
//If the filepath contains S3, get the s3 URL for the file
|
222 |
if ( ! empty( $full_url ) ) {
|
223 |
$full_url = $as3cf->get_attachment_url( $attachment_id );
|
256 |
|
257 |
//If we have plugin method available, us that otherwise check it ourselves
|
258 |
if ( method_exists( $as3cf, 'is_attachment_served_by_s3' ) ) {
|
259 |
+
$s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id, true );
|
260 |
$size_prefix = dirname( $s3_object['key'] );
|
261 |
$size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
|
262 |
if ( ! empty( $size_details ) && is_array( $size_details ) ) {
|
331 |
return false;
|
332 |
}
|
333 |
//Get s3 object for the file
|
334 |
+
$s3_object = $as3cf->is_attachment_served_by_s3( $attachment_id, true );
|
335 |
|
336 |
$size_prefix = dirname( $s3_object['key'] );
|
337 |
$size_file_prefix = ( '.' === $size_prefix ) ? '' : $size_prefix . '/';
|
lib/class-wp-smush-settings.php
CHANGED
@@ -22,6 +22,11 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
|
|
22 |
);
|
23 |
|
24 |
function __construct() {
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
//Save Settings
|
27 |
add_action( 'wp_ajax_save_settings', array( $this, 'save_settings' ) );
|
@@ -36,13 +41,24 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
|
|
36 |
*/
|
37 |
function init_settings() {
|
38 |
|
|
|
39 |
$last_settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
|
40 |
-
if( empty( $last_settings ) ) {
|
|
|
41 |
$last_settings = $this->get_serialised_settings();
|
|
|
|
|
|
|
|
|
42 |
}
|
|
|
|
|
43 |
$last_settings = maybe_unserialize( $last_settings );
|
44 |
-
|
45 |
-
|
|
|
|
|
|
|
46 |
return $this->settings;
|
47 |
|
48 |
}
|
@@ -69,7 +85,7 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
|
|
69 |
function get_serialised_settings() {
|
70 |
$settings = array();
|
71 |
foreach ( $this->settings as $key => $val ) {
|
72 |
-
$value = $this->get_setting( WP_SMUSH_PREFIX . $key )
|
73 |
if ( 'auto' == $key && $value === false ) {
|
74 |
$settings[ $key ] = 1;
|
75 |
} else {
|
@@ -118,6 +134,7 @@ if ( ! class_exists( 'WpSmushSettings' ) ) {
|
|
118 |
|
119 |
//Check the last settings stored in db
|
120 |
$settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
|
|
|
121 |
|
122 |
//If not saved earlier, get it from stored options
|
123 |
if ( empty( $settings ) || 0 == sizeof( $settings ) ) {
|
22 |
);
|
23 |
|
24 |
function __construct() {
|
25 |
+
//Do not initialize if not in admin area
|
26 |
+
#wp_head runs specifically in the frontend, good check to make sure we're accidentally not loading settings on required pages
|
27 |
+
if ( ! is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && did_action('wp_head') ) {
|
28 |
+
return null;
|
29 |
+
}
|
30 |
|
31 |
//Save Settings
|
32 |
add_action( 'wp_ajax_save_settings', array( $this, 'save_settings' ) );
|
41 |
*/
|
42 |
function init_settings() {
|
43 |
|
44 |
+
#See if we've got serialised settings stored already
|
45 |
$last_settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
|
46 |
+
if ( empty( $last_settings ) ) {
|
47 |
+
#Nope - No serialised settings, We populate it and store it in db
|
48 |
$last_settings = $this->get_serialised_settings();
|
49 |
+
if ( ! empty( $last_settings ) ) {
|
50 |
+
//Store Last Settings in db
|
51 |
+
$this->update_setting( WP_SMUSH_PREFIX . 'last_settings', $last_settings );
|
52 |
+
}
|
53 |
}
|
54 |
+
|
55 |
+
#Store it in class variable
|
56 |
$last_settings = maybe_unserialize( $last_settings );
|
57 |
+
if ( ! empty( $last_settings ) && is_array( $last_settings ) ) {
|
58 |
+
//Merge with the existing settings
|
59 |
+
$this->settings = array_merge( $this->settings, $last_settings );
|
60 |
+
}
|
61 |
+
|
62 |
return $this->settings;
|
63 |
|
64 |
}
|
85 |
function get_serialised_settings() {
|
86 |
$settings = array();
|
87 |
foreach ( $this->settings as $key => $val ) {
|
88 |
+
$value = $this->get_setting( WP_SMUSH_PREFIX . $key );
|
89 |
if ( 'auto' == $key && $value === false ) {
|
90 |
$settings[ $key ] = 1;
|
91 |
} else {
|
134 |
|
135 |
//Check the last settings stored in db
|
136 |
$settings = $this->get_setting( WP_SMUSH_PREFIX . 'last_settings', array() );
|
137 |
+
$settings = maybe_unserialize( $settings );
|
138 |
|
139 |
//If not saved earlier, get it from stored options
|
140 |
if ( empty( $settings ) || 0 == sizeof( $settings ) ) {
|
lib/class-wp-smush-share.php
CHANGED
@@ -23,7 +23,7 @@ if ( ! class_exists( 'WpSmushShare' ) ) {
|
|
23 |
}
|
24 |
|
25 |
$message = sprintf( esc_html__( "%s, you've smushed %s%d%s images and saved %s%s%s in total. Help your friends save bandwidth easily, and help me in my quest to Smush the internet!", "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<span class="smush-share-image-count">', $savings['total_images'], '</span>', '<span class="smush-share-savings">', $savings['human'], '</span>' );
|
26 |
-
$share_msg = sprintf( esc_html__( 'I saved %s%s%s on my site with
|
27 |
<section class="dev-box" id="wp-smush-share-widget">
|
28 |
<div class="box-content roboto-medium">
|
29 |
<p class="wp-smush-share-message"><?php echo $message; ?></p>
|
@@ -33,7 +33,7 @@ if ( ! class_exists( 'WpSmushShare' ) ) {
|
|
33 |
class="button wp-smush-share-button" id="wp-smush-twitter-share">
|
34 |
<i class="icon-fi-social-twitter"></i><?php esc_html_e( "TWEET", "wp-smushit" ); ?></a>
|
35 |
<!-- Facebook Button -->
|
36 |
-
<a href="http://www.facebook.com/sharer.php?s=100&p[title]=
|
37 |
class="button wp-smush-share-button" id="wp-smush-facebook-share">
|
38 |
<i class="icon-fi-social-facebook"></i><?php esc_html_e( "SHARE", "wp-smushit" ); ?></a>
|
39 |
<a href="whatsapp://send?text='<?php echo esc_attr( $share_msg ); ?>'"
|
23 |
}
|
24 |
|
25 |
$message = sprintf( esc_html__( "%s, you've smushed %s%d%s images and saved %s%s%s in total. Help your friends save bandwidth easily, and help me in my quest to Smush the internet!", "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<span class="smush-share-image-count">', $savings['total_images'], '</span>', '<span class="smush-share-savings">', $savings['human'], '</span>' );
|
26 |
+
$share_msg = sprintf( esc_html__( 'I saved %s%s%s on my site with Smush ( %s ) - wanna make your website light and faster?', "wp-smushit" ) , '<span class="smush-share-savings">', $savings['human'], '</span>', urlencode( "https://wordpress.org/plugins/wp-smushit/" ) ); ?>
|
27 |
<section class="dev-box" id="wp-smush-share-widget">
|
28 |
<div class="box-content roboto-medium">
|
29 |
<p class="wp-smush-share-message"><?php echo $message; ?></p>
|
33 |
class="button wp-smush-share-button" id="wp-smush-twitter-share">
|
34 |
<i class="icon-fi-social-twitter"></i><?php esc_html_e( "TWEET", "wp-smushit" ); ?></a>
|
35 |
<!-- Facebook Button -->
|
36 |
+
<a href="http://www.facebook.com/sharer.php?s=100&p[title]=Smush&p[url]=http://wordpress.org/plugins/wp-smushit/"
|
37 |
class="button wp-smush-share-button" id="wp-smush-facebook-share">
|
38 |
<i class="icon-fi-social-facebook"></i><?php esc_html_e( "SHARE", "wp-smushit" ); ?></a>
|
39 |
<a href="whatsapp://send?text='<?php echo esc_attr( $share_msg ); ?>'"
|
lib/class-wp-smush-stats.php
DELETED
@@ -1,592 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package WP Smush
|
4 |
-
* @subpackage Admin
|
5 |
-
* @version 2.3
|
6 |
-
*
|
7 |
-
* @author Umesh Kumar <umesh@incsub.com>
|
8 |
-
*
|
9 |
-
* @copyright (c) 2016, Incsub (http://incsub.com)
|
10 |
-
*/
|
11 |
-
if ( ! class_exists( 'WpSmushStats' ) ) {
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Class WpSmushStats
|
15 |
-
*/
|
16 |
-
class WpSmushStats {
|
17 |
-
function __construct() {
|
18 |
-
//Update resize savings
|
19 |
-
add_action( 'wp_smush_image_resized', array( $this, 'resize_savings' ) );
|
20 |
-
//Update Conversion savings
|
21 |
-
add_action( 'wp_smush_png_jpg_converted', array( $this, 'conversion_savings' ) );
|
22 |
-
}
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Total Image count
|
26 |
-
* @return int
|
27 |
-
*/
|
28 |
-
function total_count() {
|
29 |
-
global $wpsmushit_admin;
|
30 |
-
|
31 |
-
//Remove the Filters added by WP Media Folder
|
32 |
-
$this->remove_filters();
|
33 |
-
|
34 |
-
$count = 0;
|
35 |
-
|
36 |
-
$counts = wp_count_attachments( $wpsmushit_admin->mime_types );
|
37 |
-
foreach ( $wpsmushit_admin->mime_types as $mime ) {
|
38 |
-
if ( isset( $counts->$mime ) ) {
|
39 |
-
$count += $counts->$mime;
|
40 |
-
}
|
41 |
-
}
|
42 |
-
|
43 |
-
// send the count
|
44 |
-
return $count;
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Optimised images count
|
49 |
-
*
|
50 |
-
* @param bool $return_ids
|
51 |
-
*
|
52 |
-
* @return array|int
|
53 |
-
*/
|
54 |
-
function smushed_count( $return_ids = false ) {
|
55 |
-
global $wpsmushit_admin;
|
56 |
-
|
57 |
-
//Don't query again, if the variable is already set
|
58 |
-
if ( ! $return_ids && ! empty( $wpsmushit_admin->smushed_count ) && $wpsmushit_admin->smushed_count > 0 ) {
|
59 |
-
return $wpsmushit_admin->smushed_count;
|
60 |
-
}
|
61 |
-
|
62 |
-
$query = array(
|
63 |
-
'fields' => array( 'ids', 'post_mime_type' ) ,
|
64 |
-
'post_type' => 'attachment',
|
65 |
-
'post_status' => 'inherit',
|
66 |
-
'order' => 'ASC',
|
67 |
-
'posts_per_page' => - 1,
|
68 |
-
'meta_key' => 'wp-smpro-smush-data',
|
69 |
-
'no_found_rows' => true
|
70 |
-
);
|
71 |
-
|
72 |
-
//Remove the Filters added by WP Media Folder
|
73 |
-
$this->remove_filters();
|
74 |
-
|
75 |
-
$results = new WP_Query( $query );
|
76 |
-
|
77 |
-
if ( ! is_wp_error( $results ) && $results->post_count > 0 ) {
|
78 |
-
|
79 |
-
$posts = $wpsmushit_admin->filter_by_mime( $results->posts );
|
80 |
-
|
81 |
-
if ( ! $return_ids ) {
|
82 |
-
//return Post Count
|
83 |
-
return count( $posts );
|
84 |
-
} else {
|
85 |
-
//Return post ids
|
86 |
-
return $posts;
|
87 |
-
}
|
88 |
-
} else {
|
89 |
-
return false;
|
90 |
-
}
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Returns/Updates the number of images Super Smushed
|
95 |
-
*
|
96 |
-
* @param string $type media/nextgen, Type of images to get/set the super smushed count for
|
97 |
-
*
|
98 |
-
* @param array $attachments Optional, By default Media attachments will be fetched
|
99 |
-
*
|
100 |
-
* @return array|mixed|void
|
101 |
-
*
|
102 |
-
*/
|
103 |
-
function super_smushed_count( $type = 'media', $attachments = '' ) {
|
104 |
-
|
105 |
-
if ( 'media' == $type ) {
|
106 |
-
$count = $this->media_super_smush_count();
|
107 |
-
} else {
|
108 |
-
$key = 'wp-smush-super_smushed_nextgen';
|
109 |
-
|
110 |
-
//Flag to check if we need to re-evaluate the count
|
111 |
-
$revaluate = false;
|
112 |
-
|
113 |
-
$super_smushed = get_option( $key, false );
|
114 |
-
|
115 |
-
//Check if need to revalidate
|
116 |
-
if ( ! $super_smushed || empty( $super_smushed ) || empty( $super_smushed['ids'] ) ) {
|
117 |
-
|
118 |
-
$super_smushed = array(
|
119 |
-
'ids' => array()
|
120 |
-
);
|
121 |
-
|
122 |
-
$revaluate = true;
|
123 |
-
} else {
|
124 |
-
$last_checked = $super_smushed['timestamp'];
|
125 |
-
|
126 |
-
$diff = $last_checked - current_time( 'timestamp' );
|
127 |
-
|
128 |
-
//Difference in hour
|
129 |
-
$diff_h = $diff / 3600;
|
130 |
-
|
131 |
-
//if last checked was more than 1 hours.
|
132 |
-
if ( $diff_h > 1 ) {
|
133 |
-
$revaluate = true;
|
134 |
-
}
|
135 |
-
}
|
136 |
-
//Do not Revaluate stats if nextgen attachments are not provided
|
137 |
-
if ( 'nextgen' == $type && empty( $attachments ) && $revaluate ) {
|
138 |
-
$revaluate = false;
|
139 |
-
}
|
140 |
-
|
141 |
-
//Need to scan all the image
|
142 |
-
if ( $revaluate ) {
|
143 |
-
//Get all the Smushed attachments ids
|
144 |
-
$super_smushed_images = $this->get_lossy_attachments( $attachments, false );
|
145 |
-
|
146 |
-
if ( ! empty( $super_smushed_images ) && is_array( $super_smushed_images ) ) {
|
147 |
-
//Iterate over all the attachments to check if it's already there in list, else add it
|
148 |
-
foreach ( $super_smushed_images as $id ) {
|
149 |
-
if ( ! in_array( $id, $super_smushed['ids'] ) ) {
|
150 |
-
$super_smushed['ids'][] = $id;
|
151 |
-
}
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
$super_smushed['timestamp'] = current_time( 'timestamp' );
|
156 |
-
|
157 |
-
update_option( $key, $super_smushed );
|
158 |
-
}
|
159 |
-
|
160 |
-
$count = ! empty( $super_smushed['ids'] ) ? count( $super_smushed['ids'] ) : 0;
|
161 |
-
}
|
162 |
-
|
163 |
-
return $count;
|
164 |
-
}
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Updates the Meta for existing smushed images and retrieves the count of Super Smushed images
|
168 |
-
*
|
169 |
-
* @return int Count of Super Smushed images
|
170 |
-
*
|
171 |
-
*/
|
172 |
-
function media_super_smush_count( $return_ids = false ) {
|
173 |
-
|
174 |
-
global $wpsmushit_admin;
|
175 |
-
|
176 |
-
//Check if we have updated the stats for existing images, One time
|
177 |
-
if ( ! $lossy_updated = get_option( WP_SMUSH_PREFIX . 'lossy-updated' ) ) {
|
178 |
-
|
179 |
-
//Get all the smushed attachments
|
180 |
-
$attachments = $this->get_lossy_attachments( '', false );
|
181 |
-
if ( ! empty( $attachments ) ) {
|
182 |
-
foreach ( $attachments as $attachment ) {
|
183 |
-
update_post_meta( $attachment, WP_SMUSH_PREFIX . 'lossy', 1 );
|
184 |
-
}
|
185 |
-
}
|
186 |
-
}
|
187 |
-
|
188 |
-
//Get all the attachments with wp-smush-lossy
|
189 |
-
$limit = $wpsmushit_admin->query_limit();
|
190 |
-
$get_posts = true;
|
191 |
-
$super_smushed = array();
|
192 |
-
$args = array(
|
193 |
-
'fields' => array( 'ids', 'post_mime_type' ),
|
194 |
-
'post_type' => 'attachment',
|
195 |
-
'post_status' => 'any',
|
196 |
-
'orderby' => 'ID',
|
197 |
-
'order' => 'DESC',
|
198 |
-
'posts_per_page' => $limit,
|
199 |
-
'offset' => 0,
|
200 |
-
'meta_query' => array(
|
201 |
-
array(
|
202 |
-
'key' => 'wp-smush-lossy',
|
203 |
-
'value' => 1
|
204 |
-
)
|
205 |
-
),
|
206 |
-
'update_post_term_cache' => false,
|
207 |
-
'no_found_rows' => true,
|
208 |
-
);
|
209 |
-
//Loop Over to get all the attachments
|
210 |
-
while ( $get_posts ) {
|
211 |
-
|
212 |
-
//Remove the Filters added by WP Media Folder
|
213 |
-
$this->remove_filters();
|
214 |
-
|
215 |
-
$query = new WP_Query( $args );
|
216 |
-
|
217 |
-
if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
|
218 |
-
$posts = $wpsmushit_admin->filter_by_mime( $query->posts );
|
219 |
-
//Merge the results
|
220 |
-
$super_smushed = array_merge( $super_smushed, $posts );
|
221 |
-
|
222 |
-
//Update the offset
|
223 |
-
$args['offset'] += $limit;
|
224 |
-
} else {
|
225 |
-
//If we didn't get any posts from query, set $get_posts to false
|
226 |
-
$get_posts = false;
|
227 |
-
}
|
228 |
-
|
229 |
-
//If total Count is set, and it is alread lesser than offset, don't query
|
230 |
-
if ( ! empty( $this->total_count ) && $this->total_count < $args['offset'] ) {
|
231 |
-
$get_posts = false;
|
232 |
-
}
|
233 |
-
}
|
234 |
-
if ( ! $lossy_updated ) {
|
235 |
-
update_option( 'wp-smush-lossy-updated', true );
|
236 |
-
}
|
237 |
-
|
238 |
-
return $return_ids ? $super_smushed : count( $super_smushed );
|
239 |
-
}
|
240 |
-
|
241 |
-
/**
|
242 |
-
* Remove any pre_get_posts_filters added by WP Media Folder plugin
|
243 |
-
*/
|
244 |
-
function remove_filters() {
|
245 |
-
//remove any filters added b WP media Folder plugin to get the all attachments
|
246 |
-
if ( class_exists( 'Wp_Media_Folder' ) ) {
|
247 |
-
global $wp_media_folder;
|
248 |
-
if ( is_object( $wp_media_folder ) ) {
|
249 |
-
remove_filter( 'pre_get_posts', array( $wp_media_folder, 'wpmf_pre_get_posts1' ) );
|
250 |
-
remove_filter( 'pre_get_posts', array( $wp_media_folder, 'wpmf_pre_get_posts' ), 0, 1 );
|
251 |
-
}
|
252 |
-
}
|
253 |
-
global $wpml_query_filter;
|
254 |
-
//If WPML is not installed, return
|
255 |
-
if ( ! is_object( $wpml_query_filter ) ) {
|
256 |
-
return;
|
257 |
-
}
|
258 |
-
|
259 |
-
//Remove language filter and let all the images be smushed at once
|
260 |
-
if ( has_filter( 'posts_join', array( $wpml_query_filter, 'posts_join_filter' ) ) ) {
|
261 |
-
remove_filter( 'posts_join', array( $wpml_query_filter, 'posts_join_filter' ), 10, 2 );
|
262 |
-
remove_filter( 'posts_where', array( $wpml_query_filter, 'posts_where_filter' ), 10, 2 );
|
263 |
-
}
|
264 |
-
}
|
265 |
-
|
266 |
-
/**
|
267 |
-
* Get the savings from image resizing, And force update if set to true
|
268 |
-
*
|
269 |
-
* @param bool $force_update , Whether to Re-Calculate all the stats or not
|
270 |
-
*
|
271 |
-
* @param bool $format Format the Bytes in readable format
|
272 |
-
*
|
273 |
-
* @return array|bool|mixed|string Array of {
|
274 |
-
* 'bytes',
|
275 |
-
* 'before_size',
|
276 |
-
* 'after_size'
|
277 |
-
* }
|
278 |
-
*
|
279 |
-
*/
|
280 |
-
function resize_savings( $force_update = true, $format = false ) {
|
281 |
-
$savings = '';
|
282 |
-
|
283 |
-
if ( ! $force_update ) {
|
284 |
-
$savings = wp_cache_get( WP_SMUSH_PREFIX . 'resize_savings', 'wp-smush' );
|
285 |
-
}
|
286 |
-
|
287 |
-
global $wpsmushit_admin;
|
288 |
-
|
289 |
-
//If nothing in cache, Calculate it
|
290 |
-
if ( empty( $savings ) || $force_update ) {
|
291 |
-
$savings = array(
|
292 |
-
'bytes' => 0,
|
293 |
-
'size_before' => 0,
|
294 |
-
'size_after' => 0,
|
295 |
-
);
|
296 |
-
|
297 |
-
$limit = $wpsmushit_admin->query_limit();
|
298 |
-
$offset = 0;
|
299 |
-
$query_next = true;
|
300 |
-
global $wpdb;
|
301 |
-
|
302 |
-
while ( $query_next ) {
|
303 |
-
|
304 |
-
$resize_data = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key=%s LIMIT $offset, $limit", WP_SMUSH_PREFIX . 'resize_savings' ) );
|
305 |
-
|
306 |
-
if ( ! empty( $resize_data ) ) {
|
307 |
-
foreach ( $resize_data as $data ) {
|
308 |
-
|
309 |
-
if ( ! empty( $data ) ) {
|
310 |
-
$meta = maybe_unserialize( $data );
|
311 |
-
if ( ! empty( $meta ) && ! empty( $meta['bytes'] ) ) {
|
312 |
-
$savings['bytes'] += $meta['bytes'];
|
313 |
-
$savings['size_before'] += $meta['size_before'];
|
314 |
-
$savings['size_after'] += $meta['size_after'];
|
315 |
-
}
|
316 |
-
}
|
317 |
-
}
|
318 |
-
}
|
319 |
-
//Update the offset
|
320 |
-
$offset += $limit;
|
321 |
-
|
322 |
-
//Compare the Offset value to total images
|
323 |
-
if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $offset ) {
|
324 |
-
$query_next = false;
|
325 |
-
} elseif ( ! $resize_data ) {
|
326 |
-
//If we didn' got any results
|
327 |
-
$query_next = false;
|
328 |
-
}
|
329 |
-
}
|
330 |
-
|
331 |
-
if ( $format ) {
|
332 |
-
$savings['bytes'] = size_format( $savings['bytes'], 1 );
|
333 |
-
}
|
334 |
-
|
335 |
-
wp_cache_set( WP_SMUSH_PREFIX . 'resize_savings', $savings, 'wp-smush' );
|
336 |
-
}
|
337 |
-
|
338 |
-
return $savings;
|
339 |
-
}
|
340 |
-
|
341 |
-
/**
|
342 |
-
* Return/Update PNG -> JPG Conversion savings
|
343 |
-
*
|
344 |
-
* @param bool $force_update Whether to force update the conversion savings or not
|
345 |
-
* @param bool $format Optionally return formatted savings
|
346 |
-
*
|
347 |
-
* @return array Savings
|
348 |
-
*/
|
349 |
-
function conversion_savings( $force_update = true, $format = false ) {
|
350 |
-
$savings = '';
|
351 |
-
|
352 |
-
if ( ! $force_update ) {
|
353 |
-
$savings = wp_cache_get( WP_SMUSH_PREFIX . 'pngjpg_savings', 'wp-smush' );
|
354 |
-
}
|
355 |
-
//If nothing in cache, Calculate it
|
356 |
-
if ( empty( $savings ) || $force_update ) {
|
357 |
-
global $wpsmushit_admin;
|
358 |
-
$savings = array(
|
359 |
-
'bytes' => 0,
|
360 |
-
'size_before' => 0,
|
361 |
-
'size_after' => 0,
|
362 |
-
);
|
363 |
-
|
364 |
-
$limit = $wpsmushit_admin->query_limit();
|
365 |
-
$offset = 0;
|
366 |
-
$query_next = true;
|
367 |
-
global $wpdb;
|
368 |
-
|
369 |
-
while ( $query_next ) {
|
370 |
-
|
371 |
-
$conversion_savings = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key=%s LIMIT $offset, $limit", WP_SMUSH_PREFIX . 'pngjpg_savings' ) );
|
372 |
-
|
373 |
-
if ( ! empty( $conversion_savings ) ) {
|
374 |
-
foreach ( $conversion_savings as $data ) {
|
375 |
-
|
376 |
-
if ( ! empty( $data ) ) {
|
377 |
-
$meta = maybe_unserialize( $data );
|
378 |
-
|
379 |
-
if( is_array( $meta ) ) {
|
380 |
-
foreach ( $meta as $size ) {
|
381 |
-
if ( ! empty( $size ) && is_array( $size ) ) {
|
382 |
-
$savings['bytes'] += $size['bytes'];
|
383 |
-
$savings['size_before'] += $size['size_before'];
|
384 |
-
$savings['size_after'] += $size['size_after'];
|
385 |
-
}
|
386 |
-
}
|
387 |
-
}
|
388 |
-
}
|
389 |
-
}
|
390 |
-
}
|
391 |
-
//Update the offset
|
392 |
-
$offset += $limit;
|
393 |
-
|
394 |
-
//Compare the Offset value to total images
|
395 |
-
if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $offset ) {
|
396 |
-
$query_next = false;
|
397 |
-
} elseif ( ! $conversion_savings ) {
|
398 |
-
//If we didn' got any results
|
399 |
-
$query_next = false;
|
400 |
-
}
|
401 |
-
}
|
402 |
-
|
403 |
-
if ( $format ) {
|
404 |
-
$savings['bytes'] = size_format( $savings['bytes'], 1 );
|
405 |
-
}
|
406 |
-
|
407 |
-
wp_cache_set( WP_SMUSH_PREFIX . 'pngjpg_savings', $savings, 'wp-smush' );
|
408 |
-
}
|
409 |
-
|
410 |
-
return $savings;
|
411 |
-
}
|
412 |
-
|
413 |
-
/**
|
414 |
-
* Get all the resized images
|
415 |
-
*
|
416 |
-
* @return array Array of post ids of all the resized images
|
417 |
-
*
|
418 |
-
*/
|
419 |
-
function resize_images() {
|
420 |
-
global $wpsmushit_admin;
|
421 |
-
$limit = $wpsmushit_admin->query_limit();
|
422 |
-
$limit = ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $limit ? $wpsmushit_admin->total_count : $limit;
|
423 |
-
$get_posts = true;
|
424 |
-
$resized_images = array();
|
425 |
-
$args = array(
|
426 |
-
'fields' => array( 'ids', 'post_mime_type' ),
|
427 |
-
'post_type' => 'attachment',
|
428 |
-
'post_status' => 'inherit',
|
429 |
-
'orderby' => 'ID',
|
430 |
-
'order' => 'DESC',
|
431 |
-
'posts_per_page' => $limit,
|
432 |
-
'offset' => 0,
|
433 |
-
'meta_key' => WP_SMUSH_PREFIX . 'resize_savings',
|
434 |
-
'update_post_term_cache' => false,
|
435 |
-
'no_found_rows' => true,
|
436 |
-
);
|
437 |
-
//Loop Over to get all the attachments
|
438 |
-
while ( $get_posts ) {
|
439 |
-
|
440 |
-
//Remove the Filters added by WP Media Folder
|
441 |
-
$this->remove_filters();
|
442 |
-
|
443 |
-
$query = new WP_Query( $args );
|
444 |
-
|
445 |
-
if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
|
446 |
-
|
447 |
-
$posts = $wpsmushit_admin->filter_by_mime( $query->posts );
|
448 |
-
|
449 |
-
//Merge the results
|
450 |
-
$resized_images = array_merge( $resized_images, $posts );
|
451 |
-
|
452 |
-
//Update the offset
|
453 |
-
$args['offset'] += $limit;
|
454 |
-
} else {
|
455 |
-
//If we didn't get any posts from query, set $get_posts to false
|
456 |
-
$get_posts = false;
|
457 |
-
}
|
458 |
-
|
459 |
-
//If total Count is set, and it is alread lesser than offset, don't query
|
460 |
-
if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $args['offset'] ) {
|
461 |
-
$get_posts = false;
|
462 |
-
}
|
463 |
-
}
|
464 |
-
|
465 |
-
return $resized_images;
|
466 |
-
}
|
467 |
-
|
468 |
-
/**
|
469 |
-
* Get all the PNGJPG Converted images
|
470 |
-
*
|
471 |
-
* @return array Array of post ids of all the converted images
|
472 |
-
*
|
473 |
-
*/
|
474 |
-
function converted_images() {
|
475 |
-
global $wpsmushit_admin;
|
476 |
-
$limit = $wpsmushit_admin->query_limit();
|
477 |
-
$limit = ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $limit ? $wpsmushit_admin->total_count : $limit;
|
478 |
-
$get_posts = true;
|
479 |
-
$converted_images = array();
|
480 |
-
$args = array(
|
481 |
-
'fields' => array( 'ids', 'post_mime_type' ),
|
482 |
-
'post_type' => 'attachment',
|
483 |
-
'post_status' => 'inherit',
|
484 |
-
'orderby' => 'ID',
|
485 |
-
'order' => 'DESC',
|
486 |
-
'posts_per_page' => $limit,
|
487 |
-
'offset' => 0,
|
488 |
-
'meta_key' => WP_SMUSH_PREFIX . 'pngjpg_savings',
|
489 |
-
'update_post_term_cache' => false,
|
490 |
-
'no_found_rows' => true,
|
491 |
-
);
|
492 |
-
//Loop Over to get all the attachments
|
493 |
-
while ( $get_posts ) {
|
494 |
-
|
495 |
-
//Remove the Filters added by WP Media Folder
|
496 |
-
$this->remove_filters();
|
497 |
-
|
498 |
-
$query = new WP_Query( $args );
|
499 |
-
|
500 |
-
if ( ! empty( $query->post_count ) && sizeof( $query->posts ) > 0 ) {
|
501 |
-
|
502 |
-
//Filter Posts by mime types
|
503 |
-
$posts = $wpsmushit_admin->filter_by_mime( $query->posts );
|
504 |
-
|
505 |
-
//Merge the results
|
506 |
-
$converted_images = array_merge( $converted_images, $posts );
|
507 |
-
|
508 |
-
//Update the offset
|
509 |
-
$args['offset'] += $limit;
|
510 |
-
} else {
|
511 |
-
//If we didn't get any posts from query, set $get_posts to false
|
512 |
-
$get_posts = false;
|
513 |
-
}
|
514 |
-
|
515 |
-
//If total Count is set, and it is alread lesser than offset, don't query
|
516 |
-
if ( ! empty( $wpsmushit_admin->total_count ) && $wpsmushit_admin->total_count < $args['offset'] ) {
|
517 |
-
$get_posts = false;
|
518 |
-
}
|
519 |
-
}
|
520 |
-
|
521 |
-
return $converted_images;
|
522 |
-
}
|
523 |
-
|
524 |
-
/**
|
525 |
-
* Returns the ids and meta which are losslessly compressed
|
526 |
-
*
|
527 |
-
* Called only if the meta key isn't updated for old images, else it is not used
|
528 |
-
*
|
529 |
-
* @return array
|
530 |
-
*/
|
531 |
-
function get_lossy_attachments( $attachments = '', $return_count = true ) {
|
532 |
-
|
533 |
-
$lossy_attachments = array();
|
534 |
-
$count = 0;
|
535 |
-
|
536 |
-
if ( empty( $attachments ) ) {
|
537 |
-
//Fetch all the smushed attachment ids
|
538 |
-
$attachments = $this->smushed_count( true );
|
539 |
-
}
|
540 |
-
|
541 |
-
//If we dont' have any attachments
|
542 |
-
if ( empty( $attachments ) || 0 == count( $attachments ) ) {
|
543 |
-
return 0;
|
544 |
-
}
|
545 |
-
|
546 |
-
//Check if image is lossless or lossy
|
547 |
-
foreach ( $attachments as $attachment ) {
|
548 |
-
|
549 |
-
//Check meta for lossy value
|
550 |
-
$smush_data = ! empty( $attachment->smush_data ) ? maybe_unserialize( $attachment->smush_data ) : '';
|
551 |
-
|
552 |
-
//For Nextgen Gallery images
|
553 |
-
if ( empty( $smush_data ) && is_array( $attachment ) && ! empty( $attachment['wp_smush'] ) ) {
|
554 |
-
$smush_data = ! empty( $attachment['wp_smush'] ) ? $attachment['wp_smush'] : '';
|
555 |
-
}
|
556 |
-
|
557 |
-
//Return if not smushed
|
558 |
-
if ( empty( $smush_data ) ) {
|
559 |
-
continue;
|
560 |
-
}
|
561 |
-
|
562 |
-
//if stats not set or lossy is not set for attachment, return
|
563 |
-
if ( empty( $smush_data['stats'] ) || ! isset( $smush_data['stats']['lossy'] ) ) {
|
564 |
-
continue;
|
565 |
-
}
|
566 |
-
|
567 |
-
//Add to array if lossy is not 1
|
568 |
-
if ( 1 == $smush_data['stats']['lossy'] ) {
|
569 |
-
$count ++;
|
570 |
-
if ( ! empty( $attachment->attachment_id ) ) {
|
571 |
-
$lossy_attachments[] = $attachment->attachment_id;
|
572 |
-
} elseif ( is_array( $attachment ) && ! empty( $attachment['pid'] ) ) {
|
573 |
-
$lossy_attachments[] = $attachment['pid'];
|
574 |
-
}
|
575 |
-
}
|
576 |
-
}
|
577 |
-
unset( $attachments );
|
578 |
-
|
579 |
-
if ( $return_count ) {
|
580 |
-
return $count;
|
581 |
-
}
|
582 |
-
|
583 |
-
return $lossy_attachments;
|
584 |
-
}
|
585 |
-
}
|
586 |
-
|
587 |
-
/**
|
588 |
-
* Initialise class
|
589 |
-
*/
|
590 |
-
global $wpsmush_stats;
|
591 |
-
$wpsmush_stats = new WpSmushStats();
|
592 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/class-wp-smush-ui.php
CHANGED
@@ -305,9 +305,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
305 |
//If we have any savings
|
306 |
$upgrade_url = add_query_arg(
|
307 |
array(
|
308 |
-
'utm_source' => '
|
309 |
-
'utm_medium' => '
|
310 |
-
'utm_campaign'=> '
|
311 |
),
|
312 |
$wpsmushit_admin->upgrade_url
|
313 |
);
|
@@ -357,9 +357,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
357 |
}
|
358 |
$upgrade_url = add_query_arg(
|
359 |
array(
|
360 |
-
'utm_source' => '
|
361 |
-
'utm_medium' => '
|
362 |
-
'utm_campaign'=> '
|
363 |
),
|
364 |
$wpsmushit_admin->upgrade_url
|
365 |
);
|
@@ -592,7 +592,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
592 |
|
593 |
if( !$is_network ) {
|
594 |
//Show Configure screen for only a new installation and for only network admins
|
595 |
-
if ( ( 1 != get_site_option( 'skip-smush-setup' ) && 1 !=
|
596 |
echo '<div class="block float-l">';
|
597 |
$this->quick_setup();
|
598 |
echo '</div>';
|
@@ -645,71 +645,11 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
645 |
$this->settings_ui();
|
646 |
}
|
647 |
|
648 |
-
do_action('smush_settings_ui_bottom');
|
649 |
-
|
650 |
-
//Validate Membership
|
651 |
-
if( !$wpsmushit_admin->validate_install() ) {?>
|
652 |
-
<div class="wp-smush-pro-for-free wp-smushit-container-left col-half float-l"><?php
|
653 |
-
$this->wp_smush_promo();?>
|
654 |
-
</div>
|
655 |
-
<div class="wp-smushit-container-left col-half float-l"><?php
|
656 |
-
$this->wp_smush_hummingbird_promo(); ?>
|
657 |
-
</div><?php
|
658 |
-
} ?>
|
659 |
</div><?php
|
660 |
$this->smush_page_footer();
|
661 |
}
|
662 |
|
663 |
-
/**
|
664 |
-
* Pro Version
|
665 |
-
*/
|
666 |
-
function wp_smush_promo() {
|
667 |
-
global $wpsmushit_admin;
|
668 |
-
$this->container_header( 'wp-smush-pro-adv', 'wp-smush-pro-promo', "READY TO LEVEL UP YOUR WEB DEVELOPMENT?" );
|
669 |
-
$upgrade_url = add_query_arg(
|
670 |
-
array(
|
671 |
-
'utm_source' => 'Smush-Free',
|
672 |
-
'utm_medium' => 'Banner',
|
673 |
-
'utm_campaign' => 'settings-sidebar'
|
674 |
-
),
|
675 |
-
$wpsmushit_admin->upgrade_url
|
676 |
-
);
|
677 |
-
?>
|
678 |
-
<div class="box-content">
|
679 |
-
<p class="wp-smush-promo-content wp-smush-promo-content-2 roboto">Create amazing websites, automate your workflow, and run your business like a well-oiled machine.
|
680 |
-
Get access to the tools that will win you more clients and help you spend less time working.
|
681 |
-
Start a free WPMU DEV trial today.</p>
|
682 |
-
<span class="wp-smush-pro-cta tc">
|
683 |
-
<a href="#smush-pro-features" class="button button-cta button-green get-smush-pro-cta" rel="dialog" target="_blank"><?php esc_html_e("GET STARTED", "wp-smushit"); ?></a>
|
684 |
-
</span>
|
685 |
-
</div><?php
|
686 |
-
echo "</section>";
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* HummingBird Promo
|
691 |
-
*/
|
692 |
-
function wp_smush_hummingbird_promo() {
|
693 |
-
//Plugin Already Installed
|
694 |
-
if ( class_exists( 'WP_Hummingbird' ) ) {
|
695 |
-
return;
|
696 |
-
}
|
697 |
-
$this->container_header( 'wp-smush-hb-adv', 'wp-smush-hb-promo', "OH YEAH, SMUSHING ON STEROIDS!" ); ?>
|
698 |
-
<div class="box-content">
|
699 |
-
<span class="wp-smush-hummingbird-image tc">
|
700 |
-
<img src="<?php echo WP_SMUSH_URL . 'assets/images/hummingbird.png'; ?>"
|
701 |
-
alt="<?php esc_html_e( "BOOST YOUR PERFORMANCE - HUMMINGBIRD", "wp-smushit" ); ?>">
|
702 |
-
</span>
|
703 |
-
<p class="wp-smush-promo-content tc roboto">Hummingbird goes beyond Smush compression with
|
704 |
-
minification, caching, performance monitoring and more - every millisecond counts!</p>
|
705 |
-
<span class="wp-smush-hb-cta tc roboto-medium">
|
706 |
-
<a href="<?php echo esc_url( "https://premium.wpmudev.org/project/wp-hummingbird/" ); ?>"
|
707 |
-
class="button button-cta" target="_blank">TRY HUMMINGBIRD FOR FREE</a>
|
708 |
-
</span>
|
709 |
-
</div><?php
|
710 |
-
echo "</section>";
|
711 |
-
}
|
712 |
-
|
713 |
/**
|
714 |
* Outputs the Content for Bulk Smush Div
|
715 |
*/
|
@@ -777,9 +717,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
777 |
$class = count( $wpsmushit_admin->resmush_ids ) > 0 ? ' hidden' : '';
|
778 |
$upgrade_url = add_query_arg(
|
779 |
array(
|
780 |
-
'utm_source' => '
|
781 |
-
'utm_medium' => '
|
782 |
-
'utm_campaign' => '
|
783 |
),
|
784 |
$wpsmushit_admin->upgrade_url
|
785 |
);
|
@@ -789,7 +729,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
789 |
<span class="wp-smush-notice-text"><?php
|
790 |
printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $wpsmushit_admin->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $wpsmushit_admin->remaining_count, '</span>', '</strong>' );
|
791 |
if( !$WpSmush->validate_install() && $wpsmushit_admin->remaining_count > 50 ) {
|
792 |
-
printf( esc_html__(" %sUpgrade to Pro%s to bulk smush all your images with one click.", "wp-smushit") , '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("
|
793 |
esc_html_e(" Free users can smush 50 images with each click.", "wp-smushit");
|
794 |
}?>
|
795 |
</span>
|
@@ -816,7 +756,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
816 |
// calculate %ages, avoid divide by zero error with no attachments
|
817 |
|
818 |
if ( $count->total_count > 0 && $count->smushed_count > 0 ) {
|
819 |
-
$smushed_pc = $count->smushed_count / $count->total_count * 100;
|
820 |
} else {
|
821 |
$smushed_pc = 0;
|
822 |
}
|
@@ -917,7 +857,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
917 |
* Prints out the page header for Bulk Smush Page
|
918 |
*/
|
919 |
function smush_page_header() {
|
920 |
-
global $WpSmush, $wpsmushit_admin, $wpsmush_s3;
|
921 |
|
922 |
//Include Shared UI
|
923 |
require_once WP_SMUSH_DIR . 'assets/shared-ui/plugin-ui.php';
|
@@ -928,7 +868,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
928 |
}
|
929 |
|
930 |
//Page Heading for Free and Pro Version
|
931 |
-
$page_heading =
|
932 |
|
933 |
$auto_smush_message = $WpSmush->is_auto_smush_enabled() ? sprintf( esc_html__( "Automatic smushing is %senabled%s. Newly uploaded images will be automagically compressed.", "wp-smushit" ), '<span class="wp-smush-auto-enabled">', '</span>' ) : sprintf( esc_html__( "Automatic smushing is %sdisabled%s. Newly uploaded images will need to be manually smushed.", "wp-smushit" ), '<span class="wp-smush-auto-disabled">', '</span>' );
|
934 |
|
@@ -946,6 +886,7 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
946 |
</div>' .
|
947 |
$user_validation .
|
948 |
$recheck_notice .
|
|
|
949 |
'</section>';
|
950 |
|
951 |
//Check for any stored API message and show it
|
@@ -1023,16 +964,16 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
1023 |
}
|
1024 |
$upgrade_url = add_query_arg(
|
1025 |
array(
|
1026 |
-
'utm_source' => '
|
1027 |
-
'utm_medium' => '
|
1028 |
-
'utm_campaign' => '
|
1029 |
),
|
1030 |
$wpsmushit_admin->upgrade_url
|
1031 |
); ?>
|
1032 |
<div class="wp-smush-super-smush-promo">
|
1033 |
<div class="wp-smush-super-smush-content-wrapper">
|
1034 |
<div class="wp-smush-super-smush-content"><?php
|
1035 |
-
printf( esc_html__("Did you know
|
1036 |
</div>
|
1037 |
</div>
|
1038 |
</div>
|
@@ -1049,15 +990,15 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
1049 |
}
|
1050 |
$upgrade_url = add_query_arg(
|
1051 |
array(
|
1052 |
-
'utm_source' => '
|
1053 |
-
'utm_medium' => '
|
1054 |
'utm_campaign' => 'smush-advanced-settings-upsell'
|
1055 |
),
|
1056 |
$wpsmushit_admin->upgrade_url
|
1057 |
); ?>
|
1058 |
<div class="wp-smush-super-smush-promo">
|
1059 |
<div class="wp-smush-super-smush-content"><?php
|
1060 |
-
printf( esc_html__("Smush Pro gives you all these extra settings and absolutely no limits on smushing your images! Did we mention Smush Pro also gives you up to 2x better compression too? – %sTry it all free with a WPMU DEV membership today!%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try
|
1061 |
</div>
|
1062 |
</div>
|
1063 |
<?php
|
@@ -1207,7 +1148,8 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
1207 |
<div class="wp-smush-resize-note" id="<?php echo $prefix; ?>wp-smush-resize-note"><?php printf( esc_html__("Currently, your largest image size is set at %s%dpx wide %s %dpx high%s.", "wp-smushit"), '<strong>', $max_sizes['width'], '×', $max_sizes['height'], '</strong>' ); ?></div>
|
1208 |
<div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-width hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the width you've entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
|
1209 |
<div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-height hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the height you’ve entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
|
1210 |
-
</div
|
|
|
1211 |
}
|
1212 |
|
1213 |
/**
|
@@ -1286,9 +1228,9 @@ if ( ! class_exists( 'WpSmushBulkUi' ) ) {
|
|
1286 |
//If we have any savings
|
1287 |
$upgrade_url = add_query_arg(
|
1288 |
array(
|
1289 |
-
'utm_source' => '
|
1290 |
-
'utm_medium' => '
|
1291 |
-
'utm_campaign'=> '
|
1292 |
),
|
1293 |
$wpsmushit_admin->upgrade_url
|
1294 |
);?>
|
305 |
//If we have any savings
|
306 |
$upgrade_url = add_query_arg(
|
307 |
array(
|
308 |
+
'utm_source' => 'smush',
|
309 |
+
'utm_medium' => 'plugin',
|
310 |
+
'utm_campaign'=> 'smush_stats_prosavings_tag'
|
311 |
),
|
312 |
$wpsmushit_admin->upgrade_url
|
313 |
);
|
357 |
}
|
358 |
$upgrade_url = add_query_arg(
|
359 |
array(
|
360 |
+
'utm_source' => 'smush',
|
361 |
+
'utm_medium' => 'plugin',
|
362 |
+
'utm_campaign'=> 'smush_advancedsettings_profeature_tag'
|
363 |
),
|
364 |
$wpsmushit_admin->upgrade_url
|
365 |
);
|
592 |
|
593 |
if( !$is_network ) {
|
594 |
//Show Configure screen for only a new installation and for only network admins
|
595 |
+
if ( ( 1 != get_site_option( 'skip-smush-setup' ) && 1 != get_option( 'wp-smush-hide_smush_welcome' ) ) && 1 != get_option( 'hide_smush_features' ) && is_super_admin() ) {
|
596 |
echo '<div class="block float-l">';
|
597 |
$this->quick_setup();
|
598 |
echo '</div>';
|
645 |
$this->settings_ui();
|
646 |
}
|
647 |
|
648 |
+
do_action('smush_settings_ui_bottom'); ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
649 |
</div><?php
|
650 |
$this->smush_page_footer();
|
651 |
}
|
652 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
653 |
/**
|
654 |
* Outputs the Content for Bulk Smush Div
|
655 |
*/
|
717 |
$class = count( $wpsmushit_admin->resmush_ids ) > 0 ? ' hidden' : '';
|
718 |
$upgrade_url = add_query_arg(
|
719 |
array(
|
720 |
+
'utm_source' => 'smush',
|
721 |
+
'utm_medium' => 'plugin',
|
722 |
+
'utm_campaign' => 'smush_bulksmush_limit_notice'
|
723 |
),
|
724 |
$wpsmushit_admin->upgrade_url
|
725 |
);
|
729 |
<span class="wp-smush-notice-text"><?php
|
730 |
printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $wpsmushit_admin->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $wpsmushit_admin->remaining_count, '</span>', '</strong>' );
|
731 |
if( !$WpSmush->validate_install() && $wpsmushit_admin->remaining_count > 50 ) {
|
732 |
+
printf( esc_html__(" %sUpgrade to Pro%s to bulk smush all your images with one click.", "wp-smushit") , '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Smush Pro", "wp-smushit") . '">', '</a>' );
|
733 |
esc_html_e(" Free users can smush 50 images with each click.", "wp-smushit");
|
734 |
}?>
|
735 |
</span>
|
756 |
// calculate %ages, avoid divide by zero error with no attachments
|
757 |
|
758 |
if ( $count->total_count > 0 && $count->smushed_count > 0 ) {
|
759 |
+
$smushed_pc = ( $count->smushed_count / $count->total_count ) * 100;
|
760 |
} else {
|
761 |
$smushed_pc = 0;
|
762 |
}
|
857 |
* Prints out the page header for Bulk Smush Page
|
858 |
*/
|
859 |
function smush_page_header() {
|
860 |
+
global $WpSmush, $wpsmushit_admin, $wpsmush_s3, $wpsmush_dir;
|
861 |
|
862 |
//Include Shared UI
|
863 |
require_once WP_SMUSH_DIR . 'assets/shared-ui/plugin-ui.php';
|
868 |
}
|
869 |
|
870 |
//Page Heading for Free and Pro Version
|
871 |
+
$page_heading = esc_html__("DASHBOARD", "wp-smushit");
|
872 |
|
873 |
$auto_smush_message = $WpSmush->is_auto_smush_enabled() ? sprintf( esc_html__( "Automatic smushing is %senabled%s. Newly uploaded images will be automagically compressed.", "wp-smushit" ), '<span class="wp-smush-auto-enabled">', '</span>' ) : sprintf( esc_html__( "Automatic smushing is %sdisabled%s. Newly uploaded images will need to be manually smushed.", "wp-smushit" ), '<span class="wp-smush-auto-disabled">', '</span>' );
|
874 |
|
886 |
</div>' .
|
887 |
$user_validation .
|
888 |
$recheck_notice .
|
889 |
+
$wpsmush_dir->check_for_table_error();
|
890 |
'</section>';
|
891 |
|
892 |
//Check for any stored API message and show it
|
964 |
}
|
965 |
$upgrade_url = add_query_arg(
|
966 |
array(
|
967 |
+
'utm_source' => 'smush',
|
968 |
+
'utm_medium' => 'plugin',
|
969 |
+
'utm_campaign' => 'smush_bulksmush_upsell_notice'
|
970 |
),
|
971 |
$wpsmushit_admin->upgrade_url
|
972 |
); ?>
|
973 |
<div class="wp-smush-super-smush-promo">
|
974 |
<div class="wp-smush-super-smush-content-wrapper">
|
975 |
<div class="wp-smush-super-smush-content"><?php
|
976 |
+
printf( esc_html__("Did you know Smush Pro delivers up to 2x better compression, allows you to smush your originals and removes any bulk smushing limits? – %sTry it absolutely FREE%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try Smush Pro for FREE", "wp-smushit") . '">', '</a>' ); ?>
|
977 |
</div>
|
978 |
</div>
|
979 |
</div>
|
990 |
}
|
991 |
$upgrade_url = add_query_arg(
|
992 |
array(
|
993 |
+
'utm_source' => 'smush',
|
994 |
+
'utm_medium' => 'plugin',
|
995 |
'utm_campaign' => 'smush-advanced-settings-upsell'
|
996 |
),
|
997 |
$wpsmushit_admin->upgrade_url
|
998 |
); ?>
|
999 |
<div class="wp-smush-super-smush-promo">
|
1000 |
<div class="wp-smush-super-smush-content"><?php
|
1001 |
+
printf( esc_html__("Smush Pro gives you all these extra settings and absolutely no limits on smushing your images! Did we mention Smush Pro also gives you up to 2x better compression too? – %sTry it all free with a WPMU DEV membership today!%s", "wp-smushit"), '<a href="' . esc_url( $upgrade_url ). '" target="_blank" title="' . esc_html__("Try Smush Pro for FREE", "wp-smushit") . '">', '</a>' ); ?>
|
1002 |
</div>
|
1003 |
</div>
|
1004 |
<?php
|
1148 |
<div class="wp-smush-resize-note" id="<?php echo $prefix; ?>wp-smush-resize-note"><?php printf( esc_html__("Currently, your largest image size is set at %s%dpx wide %s %dpx high%s.", "wp-smushit"), '<strong>', $max_sizes['width'], '×', $max_sizes['height'], '</strong>' ); ?></div>
|
1149 |
<div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-width hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the width you've entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
|
1150 |
<div class="wp-smush-settings-info wp-smush-size-info wp-smush-update-height hidden" tabindex="0"><?php esc_html_e( "Just to let you know, the height you’ve entered is less than your largest image and may result in pixelation.", "wp-smushit" ); ?></div>
|
1151 |
+
</div>
|
1152 |
+
<span class="wp-smush-setting-desc desc-note"><?php esc_html_e("Note: Image resizing happens automatically when you upload attachments. This setting does not apply to images smushed using Directory Smush feature. To support retina devices, we recommend using 2x the dimensions of your image size.", "wp-smushit"); ?></span><?php
|
1153 |
}
|
1154 |
|
1155 |
/**
|
1228 |
//If we have any savings
|
1229 |
$upgrade_url = add_query_arg(
|
1230 |
array(
|
1231 |
+
'utm_source' => 'smush',
|
1232 |
+
'utm_medium' => 'plugin',
|
1233 |
+
'utm_campaign'=> 'smush_stats_prosavings_tag'
|
1234 |
),
|
1235 |
$wpsmushit_admin->upgrade_url
|
1236 |
);?>
|
lib/class-wp-smush.php
CHANGED
@@ -86,6 +86,18 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
86 |
*/
|
87 |
var $media_type = 'wp';
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
/**
|
90 |
* Constructor
|
91 |
*/
|
@@ -121,17 +133,18 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
121 |
//Enqueue Scripts, And Initialize variables
|
122 |
add_action( 'admin_init', array( $this, 'admin_init' ) );
|
123 |
|
124 |
-
//Load NextGen Gallery, S3, if hooked too late or early, auto smush doesn't works, also Load after settings have been saved on init action
|
125 |
-
add_action( 'plugins_loaded', array( $this, 'load_modules' ), 90 );
|
126 |
-
|
127 |
//Send Smush Stats for pro members
|
128 |
add_filter( 'wpmudev_api_project_extra_data-912164', array( $this, 'send_smush_stats' ) );
|
129 |
|
130 |
//Send Smush Stats for pro members
|
131 |
add_action( 'wp_ajax_smush_show_warning', array( $this, 'show_warning_ajax' ) );
|
132 |
|
133 |
-
|
134 |
-
add_action( 'plugins_loaded', array( $this, '
|
|
|
|
|
|
|
|
|
135 |
|
136 |
//Handle the Async optimisation
|
137 |
add_action( 'wp_async_wp_generate_attachment_metadata', array( $this, 'wp_smush_handle_async' ) );
|
@@ -179,11 +192,19 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
179 |
//Initialize variables
|
180 |
$this->initialise();
|
181 |
|
|
|
|
|
|
|
182 |
//Create a clas object, if doesn't exists
|
183 |
if ( empty( $wpsmush_dir ) && class_exists( 'WpSmushDir' ) ) {
|
184 |
$wpsmush_dir = new WpSmushDir();
|
185 |
}
|
|
|
186 |
$wpsmush_dir->create_table();
|
|
|
|
|
|
|
|
|
187 |
}
|
188 |
|
189 |
/**
|
@@ -196,7 +217,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
196 |
*/
|
197 |
function do_smushit( $file_path = '' ) {
|
198 |
$errors = new WP_Error();
|
199 |
-
$dir_name = dirname( $file_path );
|
200 |
|
201 |
//Check if file exists and the directory is writable
|
202 |
if ( empty( $file_path ) ) {
|
@@ -589,7 +610,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
589 |
}
|
590 |
|
591 |
//Check if we're restoring the image Or already smushing the image
|
592 |
-
if (
|
593 |
return $meta;
|
594 |
}
|
595 |
|
@@ -608,7 +629,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
608 |
}
|
609 |
|
610 |
//Set a transient to avoid multiple request
|
611 |
-
|
612 |
|
613 |
global $wpsmush_resize, $wpsmush_pngjpg, $wpsmush_settings, $wpsmush_helper;
|
614 |
|
@@ -656,7 +677,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
656 |
}
|
657 |
|
658 |
//Delete Transient
|
659 |
-
|
660 |
|
661 |
return $meta;
|
662 |
}
|
@@ -671,7 +692,8 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
671 |
* @return bool|array array containing success status, and stats
|
672 |
*/
|
673 |
function _post( $file_path, $file_size ) {
|
674 |
-
|
|
|
675 |
|
676 |
$data = false;
|
677 |
|
@@ -688,13 +710,13 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
688 |
$headers['apikey'] = $api_key;
|
689 |
}
|
690 |
|
691 |
-
if ( $this->
|
692 |
$headers['lossy'] = 'true';
|
693 |
} else {
|
694 |
$headers['lossy'] = 'false';
|
695 |
}
|
696 |
|
697 |
-
$headers['exif'] = $
|
698 |
|
699 |
$api_url = defined( 'WP_SMUSH_API_HTTP' ) ? WP_SMUSH_API_HTTP : WP_SMUSH_API;
|
700 |
$args = array(
|
@@ -704,7 +726,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
704 |
'user-agent' => WP_SMUSH_UA,
|
705 |
);
|
706 |
//Temporary Increase the limit
|
707 |
-
|
708 |
$result = wp_remote_post( $api_url, $args );
|
709 |
|
710 |
unset( $file_data );//free memory
|
@@ -786,7 +808,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
786 |
* the `manage_media_columns` hook.
|
787 |
*/
|
788 |
function columns( $defaults ) {
|
789 |
-
$defaults['smushit'] = '
|
790 |
|
791 |
return $defaults;
|
792 |
}
|
@@ -818,7 +840,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
818 |
/**
|
819 |
* Check if user is premium member, check for api key
|
820 |
*
|
821 |
-
* @return mixed|string
|
822 |
*/
|
823 |
function validate_install() {
|
824 |
|
@@ -970,9 +992,11 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
970 |
*/
|
971 |
function set_status( $id, $echo = true, $text_only = false, $wrapper = true ) {
|
972 |
global $wpsmush_s3_compat;
|
973 |
-
$status_txt = $button_txt = $stats = '';
|
974 |
$show_button = $show_resmush = false;
|
975 |
|
|
|
|
|
976 |
// If variables are not initialized properly, initialize it.
|
977 |
if ( ! has_action( 'admin_init', array( $this, 'admin_init' ) ) ) {
|
978 |
$this->initialise();
|
@@ -1005,7 +1029,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1005 |
if ( empty( $wp_resize_savings['bytes'] ) && isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
|
1006 |
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
1007 |
if ( $show_resmush ) {
|
1008 |
-
$
|
1009 |
}
|
1010 |
$show_button = false;
|
1011 |
} else {
|
@@ -1013,7 +1037,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1013 |
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
1014 |
|
1015 |
if ( $show_resmush ) {
|
1016 |
-
$
|
1017 |
}
|
1018 |
|
1019 |
} elseif ( ! empty( $percent ) && ! empty( $bytes_readable ) ) {
|
@@ -1034,7 +1058,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1034 |
$show_resmush = $this->show_resmush( $id, $wp_smush_data );
|
1035 |
|
1036 |
if ( $show_resmush ) {
|
1037 |
-
$
|
1038 |
}
|
1039 |
|
1040 |
//Restore Image: Check if we need to show the restore image option
|
@@ -1043,12 +1067,9 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1043 |
if ( $show_restore ) {
|
1044 |
if ( $show_resmush ) {
|
1045 |
//Show Separator
|
1046 |
-
$
|
1047 |
-
} else {
|
1048 |
-
//Show the link in next line
|
1049 |
-
$status_txt .= '<br />';
|
1050 |
}
|
1051 |
-
$
|
1052 |
}
|
1053 |
|
1054 |
//Detailed Stats: Show detailed stats if available
|
@@ -1056,24 +1077,24 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1056 |
|
1057 |
if ( $show_resmush || $show_restore ) {
|
1058 |
//Show Separator
|
1059 |
-
$
|
1060 |
-
} else {
|
1061 |
-
//Show the link in next line
|
1062 |
-
$status_txt .= '<br />';
|
1063 |
}
|
1064 |
|
1065 |
//Detailed Stats Link
|
1066 |
-
$
|
1067 |
|
1068 |
//Stats
|
1069 |
$stats = $this->get_detailed_stats( $id, $wp_smush_data, $attachment_data );
|
1070 |
|
1071 |
if ( ! $text_only ) {
|
1072 |
-
$
|
1073 |
}
|
1074 |
}
|
1075 |
}
|
1076 |
}
|
|
|
|
|
|
|
1077 |
/** Super Smush Button */
|
1078 |
//IF current compression is lossy
|
1079 |
if ( ! empty( $wp_smush_data ) && ! empty( $wp_smush_data['stats'] ) ) {
|
@@ -1086,13 +1107,13 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1086 |
|
1087 |
//Check if premium user, compression was lossless, and lossy compression is enabled
|
1088 |
//If we are displaying the resmush option already, no need to show the Super Smush button
|
1089 |
-
if ( ! $show_resmush &&
|
1090 |
// the button text
|
1091 |
$button_txt = __( 'Super-Smush', 'wp-smushit' );
|
1092 |
$show_button = true;
|
1093 |
}
|
1094 |
|
1095 |
-
} elseif (
|
1096 |
// the status
|
1097 |
$status_txt = __( 'Smushing in progress..', 'wp-smushit' );
|
1098 |
|
@@ -1115,6 +1136,12 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1115 |
// the button text
|
1116 |
$button_txt = __( 'Smush Now!', 'wp-smushit' );
|
1117 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
1118 |
if ( $text_only ) {
|
1119 |
//For ajax response
|
1120 |
return array(
|
@@ -1148,7 +1175,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1148 |
*
|
1149 |
* @return string|void
|
1150 |
*/
|
1151 |
-
function column_html( $id, $
|
1152 |
$allowed_images = array( 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' );
|
1153 |
|
1154 |
// don't proceed if attachment is not image, or if image is not a jpg, png or gif
|
@@ -1156,8 +1183,6 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1156 |
return;
|
1157 |
}
|
1158 |
|
1159 |
-
$class = $smushed ? '' : ' hidden';
|
1160 |
-
$html = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
|
1161 |
// if we aren't showing the button
|
1162 |
if ( ! $show_button ) {
|
1163 |
if ( $echo ) {
|
@@ -1175,6 +1200,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1175 |
}
|
1176 |
}
|
1177 |
$mode_class = ! empty( $_POST['mode'] ) && 'grid' == $_POST['mode'] ? ' button-primary' : '';
|
|
|
1178 |
if ( ! $echo ) {
|
1179 |
$button_class = $wrapper || ! empty( $mode_class ) ? 'button button-primary wp-smush-send' : 'button wp-smush-send';
|
1180 |
$html .= '
|
@@ -1514,12 +1540,11 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1514 |
* Load Plugin Modules
|
1515 |
*
|
1516 |
*/
|
1517 |
-
function
|
|
|
|
|
1518 |
$this->load_nextgen();
|
1519 |
-
|
1520 |
-
if( has_action('aws_init') ) {
|
1521 |
-
add_action( 'aws_init', array( $this, 'load_s3' ), 120 );
|
1522 |
-
}
|
1523 |
}
|
1524 |
|
1525 |
/**
|
@@ -1534,9 +1559,13 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
1534 |
global $wpsmush_settings;
|
1535 |
|
1536 |
//Check if integration is Enabled or not
|
1537 |
-
|
1538 |
-
|
1539 |
-
|
|
|
|
|
|
|
|
|
1540 |
|
1541 |
require_once( WP_SMUSH_DIR . '/lib/class-wp-smush-nextgen.php' );
|
1542 |
// Do not continue if integration not enabled or not a pro user.
|
@@ -2010,18 +2039,14 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2010 |
return false;
|
2011 |
}
|
2012 |
|
2013 |
-
|
2014 |
-
$url =
|
2015 |
-
array(
|
2016 |
-
'page' => 'wp-smush-bulk'
|
2017 |
-
),
|
2018 |
-
$url
|
2019 |
-
);
|
2020 |
|
2021 |
//Store that we need not redirect again
|
2022 |
add_site_option( 'wp-smush-skip-redirect', true );
|
2023 |
|
2024 |
-
|
|
|
2025 |
}
|
2026 |
|
2027 |
/**
|
@@ -2226,7 +2251,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2226 |
function wp_smush_async() {
|
2227 |
|
2228 |
//Don't load the Async task, if user not logged in or not in backend
|
2229 |
-
if ( !
|
2230 |
return;
|
2231 |
}
|
2232 |
|
@@ -2248,7 +2273,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2248 |
function wp_smush_handle_async( $id ) {
|
2249 |
|
2250 |
//If we don't have image id, or the smush is already in progress for the image, return
|
2251 |
-
if ( empty( $id ) ||
|
2252 |
return;
|
2253 |
}
|
2254 |
|
@@ -2284,7 +2309,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2284 |
function wp_smush_handle_editor_async( $id, $post_data ) {
|
2285 |
|
2286 |
//If we don't have image id, or the smush is already in progress for the image, return
|
2287 |
-
if ( empty( $id ) ||
|
2288 |
return;
|
2289 |
}
|
2290 |
|
@@ -2416,9 +2441,102 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2416 |
update_site_option( WP_SMUSH_PREFIX . 'api_message', $message );
|
2417 |
}
|
2418 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2419 |
/**
|
2420 |
* Add Smush Policy to "Privace Policy" page during creation.
|
2421 |
*
|
|
|
2422 |
*/
|
2423 |
public function add_policy( $content ) {
|
2424 |
$dir_path = get_plugin_dir();
|
@@ -2436,6 +2554,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2436 |
}
|
2437 |
return $content;
|
2438 |
}
|
|
|
2439 |
}
|
2440 |
|
2441 |
global $WpSmush;
|
@@ -2447,4 +2566,7 @@ if ( ! class_exists( 'WpSmush' ) ) {
|
|
2447 |
require_once( WP_SMUSH_DIR . 'lib/class-wp-smush-admin.php' );
|
2448 |
|
2449 |
//Include Directory Smush
|
2450 |
-
require_once WP_SMUSH_DIR . 'lib/class-wp-smush-dir.php';
|
|
|
|
|
|
86 |
*/
|
87 |
var $media_type = 'wp';
|
88 |
|
89 |
+
const
|
90 |
+
OPTION_NAME = 'smush_option',
|
91 |
+
VERSION = WP_SMUSH_VERSION;
|
92 |
+
|
93 |
+
protected
|
94 |
+
$options = null,
|
95 |
+
|
96 |
+
// default options and values go here
|
97 |
+
$defaults = array(
|
98 |
+
'version' => self::VERSION, // this one should not change
|
99 |
+
);
|
100 |
+
|
101 |
/**
|
102 |
* Constructor
|
103 |
*/
|
133 |
//Enqueue Scripts, And Initialize variables
|
134 |
add_action( 'admin_init', array( $this, 'admin_init' ) );
|
135 |
|
|
|
|
|
|
|
136 |
//Send Smush Stats for pro members
|
137 |
add_filter( 'wpmudev_api_project_extra_data-912164', array( $this, 'send_smush_stats' ) );
|
138 |
|
139 |
//Send Smush Stats for pro members
|
140 |
add_action( 'wp_ajax_smush_show_warning', array( $this, 'show_warning_ajax' ) );
|
141 |
|
142 |
+
////Load NextGen Gallery, Instanitate the Async class. if hooked too late or early, auto smush doesn't works, also Load after settings have been saved on init action
|
143 |
+
add_action( 'plugins_loaded', array( $this, 'load_libs'), 90 );
|
144 |
+
|
145 |
+
//Load S3 library
|
146 |
+
add_action( 'aws_init', array( $this, 'load_s3' ), 15 );
|
147 |
+
add_action( 'as3cf_init', array( $this, 'load_s3' ), 15 );
|
148 |
|
149 |
//Handle the Async optimisation
|
150 |
add_action( 'wp_async_wp_generate_attachment_metadata', array( $this, 'wp_smush_handle_async' ) );
|
192 |
//Initialize variables
|
193 |
$this->initialise();
|
194 |
|
195 |
+
#Localize version, Update
|
196 |
+
$this->getOptions();
|
197 |
+
|
198 |
//Create a clas object, if doesn't exists
|
199 |
if ( empty( $wpsmush_dir ) && class_exists( 'WpSmushDir' ) ) {
|
200 |
$wpsmush_dir = new WpSmushDir();
|
201 |
}
|
202 |
+
//Run only on wp smush page
|
203 |
$wpsmush_dir->create_table();
|
204 |
+
|
205 |
+
#Run the Directory Smush table update
|
206 |
+
$this->update_dir_path_hash();
|
207 |
+
|
208 |
}
|
209 |
|
210 |
/**
|
217 |
*/
|
218 |
function do_smushit( $file_path = '' ) {
|
219 |
$errors = new WP_Error();
|
220 |
+
$dir_name = trailingslashit( dirname( $file_path ) );
|
221 |
|
222 |
//Check if file exists and the directory is writable
|
223 |
if ( empty( $file_path ) ) {
|
610 |
}
|
611 |
|
612 |
//Check if we're restoring the image Or already smushing the image
|
613 |
+
if ( get_option( "wp-smush-restore-$ID", false ) || get_option( "smush-in-progress-$ID", false ) ) {
|
614 |
return $meta;
|
615 |
}
|
616 |
|
629 |
}
|
630 |
|
631 |
//Set a transient to avoid multiple request
|
632 |
+
update_option( 'smush-in-progress-' . $ID, true );
|
633 |
|
634 |
global $wpsmush_resize, $wpsmush_pngjpg, $wpsmush_settings, $wpsmush_helper;
|
635 |
|
677 |
}
|
678 |
|
679 |
//Delete Transient
|
680 |
+
delete_option( 'smush-in-progress-' . $ID );
|
681 |
|
682 |
return $meta;
|
683 |
}
|
692 |
* @return bool|array array containing success status, and stats
|
693 |
*/
|
694 |
function _post( $file_path, $file_size ) {
|
695 |
+
|
696 |
+
global $wpsmushit_admin, $wpsmush_settings, $wpsmush_helper;
|
697 |
|
698 |
$data = false;
|
699 |
|
710 |
$headers['apikey'] = $api_key;
|
711 |
}
|
712 |
|
713 |
+
if ( $this->validate_install() && $wpsmush_settings->settings['lossy'] ) {
|
714 |
$headers['lossy'] = 'true';
|
715 |
} else {
|
716 |
$headers['lossy'] = 'false';
|
717 |
}
|
718 |
|
719 |
+
$headers['exif'] = $wpsmush_settings->settings['keep_exif'] ? 'true' : 'false';
|
720 |
|
721 |
$api_url = defined( 'WP_SMUSH_API_HTTP' ) ? WP_SMUSH_API_HTTP : WP_SMUSH_API;
|
722 |
$args = array(
|
726 |
'user-agent' => WP_SMUSH_UA,
|
727 |
);
|
728 |
//Temporary Increase the limit
|
729 |
+
$wpsmush_helper->increase_memory_limit();
|
730 |
$result = wp_remote_post( $api_url, $args );
|
731 |
|
732 |
unset( $file_data );//free memory
|
808 |
* the `manage_media_columns` hook.
|
809 |
*/
|
810 |
function columns( $defaults ) {
|
811 |
+
$defaults['smushit'] = 'Smush';
|
812 |
|
813 |
return $defaults;
|
814 |
}
|
840 |
/**
|
841 |
* Check if user is premium member, check for api key
|
842 |
*
|
843 |
+
* @return mixed|string True if a premium member, false if regular user
|
844 |
*/
|
845 |
function validate_install() {
|
846 |
|
992 |
*/
|
993 |
function set_status( $id, $echo = true, $text_only = false, $wrapper = true ) {
|
994 |
global $wpsmush_s3_compat;
|
995 |
+
$status_txt = $button_txt = $stats = $links = '';
|
996 |
$show_button = $show_resmush = false;
|
997 |
|
998 |
+
$links = "";
|
999 |
+
|
1000 |
// If variables are not initialized properly, initialize it.
|
1001 |
if ( ! has_action( 'admin_init', array( $this, 'admin_init' ) ) ) {
|
1002 |
$this->initialise();
|
1029 |
if ( empty( $wp_resize_savings['bytes'] ) && isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
|
1030 |
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
1031 |
if ( $show_resmush ) {
|
1032 |
+
$links .= $this->get_resmsuh_link( $id );
|
1033 |
}
|
1034 |
$show_button = false;
|
1035 |
} else {
|
1037 |
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
1038 |
|
1039 |
if ( $show_resmush ) {
|
1040 |
+
$links .= $this->get_resmsuh_link( $id );
|
1041 |
}
|
1042 |
|
1043 |
} elseif ( ! empty( $percent ) && ! empty( $bytes_readable ) ) {
|
1058 |
$show_resmush = $this->show_resmush( $id, $wp_smush_data );
|
1059 |
|
1060 |
if ( $show_resmush ) {
|
1061 |
+
$links .= $this->get_resmsuh_link( $id );
|
1062 |
}
|
1063 |
|
1064 |
//Restore Image: Check if we need to show the restore image option
|
1067 |
if ( $show_restore ) {
|
1068 |
if ( $show_resmush ) {
|
1069 |
//Show Separator
|
1070 |
+
$links .= ' | ';
|
|
|
|
|
|
|
1071 |
}
|
1072 |
+
$links .= $this->get_restore_link( $id );
|
1073 |
}
|
1074 |
|
1075 |
//Detailed Stats: Show detailed stats if available
|
1077 |
|
1078 |
if ( $show_resmush || $show_restore ) {
|
1079 |
//Show Separator
|
1080 |
+
$links .= ' | ';
|
|
|
|
|
|
|
1081 |
}
|
1082 |
|
1083 |
//Detailed Stats Link
|
1084 |
+
$links .= sprintf( '<a href="#" class="wp-smush-action smush-stats-details wp-smush-title" tooltip="%s">%s [<span class="stats-toggle">+</span>]</a>', esc_html__( "Detailed stats for all the image sizes", "wp-smushit" ), esc_html__( "Smush stats", 'wp-smushit' ) );
|
1085 |
|
1086 |
//Stats
|
1087 |
$stats = $this->get_detailed_stats( $id, $wp_smush_data, $attachment_data );
|
1088 |
|
1089 |
if ( ! $text_only ) {
|
1090 |
+
$links .= $stats;
|
1091 |
}
|
1092 |
}
|
1093 |
}
|
1094 |
}
|
1095 |
+
//Wrap links if not empty
|
1096 |
+
$links = !empty( $links ) ? "<div class='smush-status-links'>" . $links . "</div>" : '';
|
1097 |
+
|
1098 |
/** Super Smush Button */
|
1099 |
//IF current compression is lossy
|
1100 |
if ( ! empty( $wp_smush_data ) && ! empty( $wp_smush_data['stats'] ) ) {
|
1107 |
|
1108 |
//Check if premium user, compression was lossless, and lossy compression is enabled
|
1109 |
//If we are displaying the resmush option already, no need to show the Super Smush button
|
1110 |
+
if ( ! $show_resmush && ! $is_lossy && $this->lossy_enabled && $image_type != 'image/gif' ) {
|
1111 |
// the button text
|
1112 |
$button_txt = __( 'Super-Smush', 'wp-smushit' );
|
1113 |
$show_button = true;
|
1114 |
}
|
1115 |
|
1116 |
+
} elseif ( get_option( 'smush-in-progress-' . $id, false ) ) {
|
1117 |
// the status
|
1118 |
$status_txt = __( 'Smushing in progress..', 'wp-smushit' );
|
1119 |
|
1136 |
// the button text
|
1137 |
$button_txt = __( 'Smush Now!', 'wp-smushit' );
|
1138 |
}
|
1139 |
+
|
1140 |
+
$class = $wp_smush_data ? '' : ' hidden';
|
1141 |
+
$status_txt = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
|
1142 |
+
|
1143 |
+
$status_txt .= $links;
|
1144 |
+
|
1145 |
if ( $text_only ) {
|
1146 |
//For ajax response
|
1147 |
return array(
|
1175 |
*
|
1176 |
* @return string|void
|
1177 |
*/
|
1178 |
+
function column_html( $id, $html = "", $button_txt = "", $show_button = true, $smushed = false, $echo = true, $wrapper = true ) {
|
1179 |
$allowed_images = array( 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' );
|
1180 |
|
1181 |
// don't proceed if attachment is not image, or if image is not a jpg, png or gif
|
1183 |
return;
|
1184 |
}
|
1185 |
|
|
|
|
|
1186 |
// if we aren't showing the button
|
1187 |
if ( ! $show_button ) {
|
1188 |
if ( $echo ) {
|
1200 |
}
|
1201 |
}
|
1202 |
$mode_class = ! empty( $_POST['mode'] ) && 'grid' == $_POST['mode'] ? ' button-primary' : '';
|
1203 |
+
|
1204 |
if ( ! $echo ) {
|
1205 |
$button_class = $wrapper || ! empty( $mode_class ) ? 'button button-primary wp-smush-send' : 'button wp-smush-send';
|
1206 |
$html .= '
|
1540 |
* Load Plugin Modules
|
1541 |
*
|
1542 |
*/
|
1543 |
+
function load_libs() {
|
1544 |
+
|
1545 |
+
//Load Nextgen lib, and initialize wp smush async class
|
1546 |
$this->load_nextgen();
|
1547 |
+
$this->wp_smush_async();
|
|
|
|
|
|
|
1548 |
}
|
1549 |
|
1550 |
/**
|
1559 |
global $wpsmush_settings;
|
1560 |
|
1561 |
//Check if integration is Enabled or not
|
1562 |
+
if ( ! empty( $wpsmush_settings->settings ) ) {
|
1563 |
+
$opt_nextgen_val = $wpsmush_settings->settings['nextgen'];
|
1564 |
+
} else {
|
1565 |
+
//Smush NextGen key
|
1566 |
+
$opt_nextgen = WP_SMUSH_PREFIX . 'nextgen';
|
1567 |
+
$opt_nextgen_val = $wpsmush_settings->get_setting( $opt_nextgen, false );
|
1568 |
+
}
|
1569 |
|
1570 |
require_once( WP_SMUSH_DIR . '/lib/class-wp-smush-nextgen.php' );
|
1571 |
// Do not continue if integration not enabled or not a pro user.
|
2039 |
return false;
|
2040 |
}
|
2041 |
|
2042 |
+
//Do not use menu_page_url(), by the time menu is not registered and it returns a empty URL, and in turn wp_redirect() gives a fatal error
|
2043 |
+
$url = is_multisite() && is_network_admin() ? network_admin_url( 'admin.php?page=smush' ) : admin_url( 'admin.php?page=smush' );
|
|
|
|
|
|
|
|
|
|
|
2044 |
|
2045 |
//Store that we need not redirect again
|
2046 |
add_site_option( 'wp-smush-skip-redirect', true );
|
2047 |
|
2048 |
+
wp_redirect( $url );
|
2049 |
+
exit;
|
2050 |
}
|
2051 |
|
2052 |
/**
|
2251 |
function wp_smush_async() {
|
2252 |
|
2253 |
//Don't load the Async task, if user not logged in or not in backend
|
2254 |
+
if ( ! is_admin() || ! is_user_logged_in() ) {
|
2255 |
return;
|
2256 |
}
|
2257 |
|
2273 |
function wp_smush_handle_async( $id ) {
|
2274 |
|
2275 |
//If we don't have image id, or the smush is already in progress for the image, return
|
2276 |
+
if ( empty( $id ) || get_option( 'smush-in-progress-' . $id, false ) || get_option( "wp-smush-restore-$id", false ) ) {
|
2277 |
return;
|
2278 |
}
|
2279 |
|
2309 |
function wp_smush_handle_editor_async( $id, $post_data ) {
|
2310 |
|
2311 |
//If we don't have image id, or the smush is already in progress for the image, return
|
2312 |
+
if ( empty( $id ) || get_option( "smush-in-progress-$id", false ) || get_option( "wp-smush-restore-$id", false ) ) {
|
2313 |
return;
|
2314 |
}
|
2315 |
|
2441 |
update_site_option( WP_SMUSH_PREFIX . 'api_message', $message );
|
2442 |
}
|
2443 |
|
2444 |
+
/**
|
2445 |
+
* Store/Perform updates as per the plugin version
|
2446 |
+
*
|
2447 |
+
* @uses $wpsmush_helper, $wpdb, $wpsmush_dir
|
2448 |
+
*
|
2449 |
+
* @return array|mixed|null|void
|
2450 |
+
*
|
2451 |
+
* Source: Stackoverflow
|
2452 |
+
* https://wordpress.stackexchange.com/a/49797/32466
|
2453 |
+
*
|
2454 |
+
*/
|
2455 |
+
public function getOptions() {
|
2456 |
+
|
2457 |
+
// already did the checks
|
2458 |
+
if ( isset( $this->options ) ) {
|
2459 |
+
return $this->options;
|
2460 |
+
}
|
2461 |
+
|
2462 |
+
// first call, get the options
|
2463 |
+
$options = get_option( self::OPTION_NAME );
|
2464 |
+
|
2465 |
+
// options exist
|
2466 |
+
if ( $options !== false ) {
|
2467 |
+
|
2468 |
+
$new_version = version_compare( $options['version'], self::VERSION, '!=' );
|
2469 |
+
// $desync = array_diff_key( $this->defaults, $options ) !== array_diff_key( $options, $this->defaults );
|
2470 |
+
|
2471 |
+
// update options if version changed
|
2472 |
+
if ( $new_version ) {
|
2473 |
+
|
2474 |
+
$new_options = array();
|
2475 |
+
|
2476 |
+
// check for new options and set defaults if necessary
|
2477 |
+
foreach ( $this->defaults as $option => $value ) {
|
2478 |
+
$new_options[ $option ] = isset( $options[ $option ] ) ? $options[ $option ] : $value;
|
2479 |
+
}
|
2480 |
+
|
2481 |
+
// update version info
|
2482 |
+
$new_options['version'] = self::VERSION;
|
2483 |
+
|
2484 |
+
update_option( self::OPTION_NAME, $new_options );
|
2485 |
+
$this->options = $new_options;
|
2486 |
+
|
2487 |
+
// no update was required
|
2488 |
+
} else {
|
2489 |
+
$this->options = $options;
|
2490 |
+
}
|
2491 |
+
|
2492 |
+
// new install (plugin was just activated)
|
2493 |
+
} else {
|
2494 |
+
//Store the version details
|
2495 |
+
update_option( self::OPTION_NAME, $this->defaults );
|
2496 |
+
$this->options = $this->defaults;
|
2497 |
+
}
|
2498 |
+
|
2499 |
+
return $this->options;
|
2500 |
+
|
2501 |
+
}
|
2502 |
+
|
2503 |
+
/**
|
2504 |
+
* Update path_hash, and store a flag if all the rows were updated
|
2505 |
+
*
|
2506 |
+
* @return null
|
2507 |
+
*
|
2508 |
+
* @todo, Stop running this function after 2-3 updates using version check
|
2509 |
+
*
|
2510 |
+
*/
|
2511 |
+
function update_dir_path_hash() {
|
2512 |
+
//If we've already performed the update
|
2513 |
+
if ( get_option( 'smush-directory-path-hash-updated', false ) ) {
|
2514 |
+
return null;
|
2515 |
+
}
|
2516 |
+
global $wpsmush_helper, $wpdb;
|
2517 |
+
//Check if Column exists
|
2518 |
+
if ( ! $wpsmush_helper->table_column_exists( $wpdb->prefix . 'smush_dir_images', 'path_hash' ) ) {
|
2519 |
+
return null;
|
2520 |
+
}
|
2521 |
+
|
2522 |
+
## Update the rows
|
2523 |
+
$query = "UPDATE {$wpdb->prefix}smush_dir_images SET path_hash = MD5(path) WHERE path IS NOT NULL";
|
2524 |
+
$wpdb->query( $query );
|
2525 |
+
|
2526 |
+
## Check if there are any pending rows that needs to be updated
|
2527 |
+
$pending_rows = "SELECT count(*) FROM {$wpdb->prefix}smush_dir_images WHERE path_hash is NULL AND path IS NOT NULL";
|
2528 |
+
$index_exists = "SHOW INDEX FROM {$wpdb->prefix}smush_dir_images WHERE KEY_NAME = 'path'";
|
2529 |
+
//If all the rows are updated and Index exists
|
2530 |
+
if ( ! $wpdb->get_var( $pending_rows ) && $wpdb->get_var( $index_exists ) != null ) {
|
2531 |
+
$wpsmush_helper->drop_index( $wpdb->prefix. 'smush_dir_images', 'path' );
|
2532 |
+
update_option( 'smush-directory-path-hash-updated', 1 );
|
2533 |
+
}
|
2534 |
+
}
|
2535 |
+
|
2536 |
/**
|
2537 |
* Add Smush Policy to "Privace Policy" page during creation.
|
2538 |
*
|
2539 |
+
* @since 2.3.0
|
2540 |
*/
|
2541 |
public function add_policy( $content ) {
|
2542 |
$dir_path = get_plugin_dir();
|
2554 |
}
|
2555 |
return $content;
|
2556 |
}
|
2557 |
+
|
2558 |
}
|
2559 |
|
2560 |
global $WpSmush;
|
2566 |
require_once( WP_SMUSH_DIR . 'lib/class-wp-smush-admin.php' );
|
2567 |
|
2568 |
//Include Directory Smush
|
2569 |
+
require_once WP_SMUSH_DIR . 'lib/class-wp-smush-dir.php';
|
2570 |
+
|
2571 |
+
//Include Plugin Recommendations
|
2572 |
+
require_once WP_SMUSH_DIR . 'lib/class-wp-smush-recommender.php';
|
lib/nextgen-integration/class-wp-smush-nextgen-admin.php
CHANGED
@@ -16,10 +16,17 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
16 |
class WpSmushNextGenAdmin extends WpSmushNextGen {
|
17 |
|
18 |
var $total_count = 0;
|
|
|
|
|
|
|
19 |
var $smushed_count = 0;
|
|
|
|
|
|
|
20 |
var $image_count = 0;
|
21 |
var $remaining_count = 0;
|
22 |
var $super_smushed = 0;
|
|
|
23 |
var $bulk_page_handle;
|
24 |
|
25 |
//Stores all lossless smushed ids
|
@@ -27,6 +34,8 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
27 |
|
28 |
function __construct() {
|
29 |
|
|
|
|
|
30 |
//Update the number of columns
|
31 |
add_filter( 'ngg_manage_images_number_of_columns', array(
|
32 |
&$this,
|
@@ -46,7 +55,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
46 |
add_action( 'ngg_delete_picture', array( $this, 'update_nextgen_stats' ) );
|
47 |
|
48 |
//Update Stats, Lists - if a NextGen Gallery is deleted
|
49 |
-
|
50 |
|
51 |
//Update the Super Smush count, after the smushing
|
52 |
add_action( 'wp_smush_image_optimised_nextgen', array( $this, 'update_lists' ), '', 2 );
|
@@ -67,8 +76,10 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
67 |
* Add a WP Smush page for bulk smush and settings related to Nextgen gallery
|
68 |
*/
|
69 |
function wp_smush_bulk_menu() {
|
|
|
70 |
if ( defined( 'NGGFOLDER' ) ) {
|
71 |
-
$
|
|
|
72 |
&$this,
|
73 |
'wp_smush_bulk'
|
74 |
) );
|
@@ -87,9 +98,9 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
87 |
function wp_smush_image_column_name( $columns ) {
|
88 |
//Latest next gen takes string, while the earlier WP Smush plugin shows there use to be a array
|
89 |
if ( is_array( $columns ) ) {
|
90 |
-
$columns['wp_smush_image'] = esc_html__( '
|
91 |
} else {
|
92 |
-
$columns = esc_html__( '
|
93 |
}
|
94 |
|
95 |
return $columns;
|
@@ -107,6 +118,8 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
107 |
//NExtGen Doesn't returns Column name, weird? yeah, right, it is proper because hook is called for the particular column
|
108 |
if ( $column_name == 'wp_smush_image' || $column_name == '' ) {
|
109 |
|
|
|
|
|
110 |
// Registry Object for NextGen Gallery
|
111 |
$registry = C_Component_Registry::get_instance();
|
112 |
|
@@ -167,8 +180,14 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
167 |
|
168 |
wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
|
169 |
|
170 |
-
//
|
171 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
|
173 |
//Get the Latest Stats
|
174 |
$this->stats = $wpsmushnextgenstats->get_smush_stats();
|
@@ -180,25 +199,31 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
180 |
$smushed = $wpsmushnextgenstats->get_ngg_images();
|
181 |
$smushed = ( ! empty( $smushed ) && is_array( $smushed ) ) ? array_keys( $smushed ) : '';
|
182 |
|
|
|
183 |
if ( ! empty( $_REQUEST['ids'] ) ) {
|
184 |
//Sanitize the ids and assign it to a variable
|
185 |
$this->ids = array_map( 'intval', explode( ',', $_REQUEST['ids'] ) );
|
186 |
} else {
|
187 |
$this->ids = $unsmushed;
|
188 |
}
|
189 |
-
//If premium, Super smush allowed, all images are smushed, localize lossless smushed ids for bulk compression
|
190 |
-
if ( $resmush_ids = get_option( 'wp-smush-nextgen-resmush-list' ) ) {
|
191 |
|
192 |
-
|
|
|
|
|
|
|
|
|
|
|
193 |
}
|
194 |
|
195 |
-
|
196 |
-
|
|
|
|
|
197 |
|
198 |
//Array of all smushed, unsmushed and lossless ids
|
199 |
$data = array(
|
200 |
'count_smushed' => $this->smushed_count,
|
201 |
-
'count_supersmushed' => count( $super_smushed ),
|
202 |
'count_total' => $this->total_count,
|
203 |
'count_images' => $this->image_count,
|
204 |
'smushed' => $smushed,
|
@@ -285,7 +310,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
285 |
/**
|
286 |
* Print the column html
|
287 |
*
|
288 |
-
* @param string $
|
289 |
* @param string $status_txt Status text
|
290 |
* @param string $button_txt Button label
|
291 |
* @param boolean $show_button Whether to shoe the button
|
@@ -297,7 +322,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
297 |
|
298 |
$class = $smushed ? '' : ' hidden';
|
299 |
$html = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
|
300 |
-
$html
|
301 |
// if we aren't showing the button
|
302 |
if ( ! $show_button ) {
|
303 |
if ( $echo ) {
|
@@ -316,7 +341,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
316 |
}
|
317 |
if ( ! $echo ) {
|
318 |
$html .= '
|
319 |
-
<button class="button wp-smush-nextgen-send" data-id="' . $pid . '">
|
320 |
<span>' . $button_txt . '</span>
|
321 |
</button>';
|
322 |
if ( ! $smushed ) {
|
@@ -329,7 +354,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
329 |
|
330 |
return $html;
|
331 |
} else {
|
332 |
-
$html .= '<button class="button wp-smush-nextgen-send" data-id="' . $pid . '">
|
333 |
<span>' . $button_txt . '</span>
|
334 |
</button>';
|
335 |
echo $html . $WpSmush->progress_bar();
|
@@ -340,22 +365,22 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
340 |
*
|
341 |
*/
|
342 |
function bulk_smush_ui() {
|
343 |
-
|
344 |
//Page Header
|
345 |
$wpsmush_bulkui->smush_page_header(); ?>
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
$wpsmush_bulkui->smush_page_footer();
|
360 |
}
|
361 |
|
@@ -384,47 +409,47 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
384 |
|
385 |
//If there are no images in Media Library
|
386 |
if ( 0 >= $this->total_count ) { ?>
|
387 |
-
|
388 |
<img src="<?php echo WP_SMUSH_URL . 'assets/images/smush-no-media.png'; ?>"
|
389 |
-
|
390 |
</span>
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
} else { ?>
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
//If all the images in media library are smushed
|
403 |
//Button Text
|
404 |
$button_content = esc_html__( "BULK SMUSH", "wp-smushit" );
|
405 |
// DO not show the remaining notice if we have resmush ids
|
406 |
?>
|
407 |
-
|
408 |
<i class="icon-fi-warning-alert"></i>
|
409 |
-
|
410 |
<?php printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $this->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $this->remaining_count, '</span>', '</strong>' ); ?>
|
411 |
</span>
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
|
416 |
//Enable Super Smush
|
417 |
if ( ! $WpSmush->lossy_enabled ) {
|
418 |
$url = admin_url( 'upload.php' );
|
419 |
$url = add_query_arg(
|
420 |
array(
|
421 |
-
'page'
|
422 |
),
|
423 |
$url
|
424 |
); ?>
|
425 |
-
|
426 |
} ?>
|
427 |
-
|
428 |
$wpsmush_bulkui->progress_bar( $this );
|
429 |
}
|
430 |
}
|
@@ -444,9 +469,9 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
444 |
//Container Header
|
445 |
$wpsmush_bulkui->container_header( $class, 'wp-smush-bulk-wrap-box', esc_html__( "BULK SMUSH", "wp-smushit" ), $smush_individual_msg ); ?>
|
446 |
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
echo "</section>";
|
451 |
}
|
452 |
|
@@ -460,58 +485,58 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
460 |
$smushed_count = ( $resmush_count = count( $this->resmush_ids ) ) > 0 ? ( $this->total_count - ( $resmush_count + $this->remaining_count ) ) : $this->smushed_count;
|
461 |
|
462 |
$button = '<span class="spinner"></span><button tooltip="' . esc_html__( "Lets you check if any images can be further optimized. Useful after changing settings.", "wp-smushit" ) . '" data-type="nextgen" class="wp-smush-title button button-grey button-small wp-smush-scan">' . esc_html__( "RE-CHECK IMAGES", "wp-smushit" ) . '</button>';
|
463 |
-
$wpsmush_bulkui->container_header( 'smush-stats-wrapper', 'wp-smush-stats-box', esc_html__( "STATS", "wp-smushit" ), $button )
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
<span class="wp-smush-stats-percent"><?php echo $this->stats['percent'] > 0 ? number_format_i18n( $this->stats['percent'], 1, '.', '' ) : 0; ?></span>%
|
483 |
<span class="wp-smush-stats-sep">/</span>
|
484 |
<span class="wp-smush-stats-human">
|
485 |
<?php echo $this->stats['human'] > 0 ? $this->stats['human'] : "0MB"; ?>
|
486 |
</span>
|
487 |
</span>
|
488 |
-
|
489 |
<?php
|
490 |
//Nonce Field for Ajax requests
|
491 |
echo wp_nonce_field( 'save_wp_smush_options', 'wp_smush_options_nonce', '', false );
|
492 |
if ( apply_filters( 'wp_smush_show_nextgen_lossy_stats', true ) ) { ?>
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
<strong><?php esc_html_e( "Super-smushed images", "wp-smushit" ); ?></strong>
|
497 |
</span>
|
498 |
-
|
499 |
<?php
|
500 |
if ( $WpSmush->lossy_enabled ) {
|
501 |
-
$
|
502 |
-
echo '<span class="smushed-count">' . $
|
503 |
} else {
|
504 |
printf( esc_html__( "%sDISABLED%s", "wp-smushit" ), '<span class="wp-smush-lossy-disabled">', '</span>' );
|
505 |
} ?>
|
506 |
</span>
|
507 |
-
|
508 |
}
|
509 |
/**
|
510 |
* Allows you to output any content within the stats box at the end
|
511 |
*/
|
512 |
do_action( 'wp_smush_after_stats' );
|
513 |
?>
|
514 |
-
|
515 |
echo "</section>";
|
516 |
}
|
517 |
|
@@ -591,35 +616,67 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
591 |
/**
|
592 |
* Initialize NextGen Gallery Stats
|
593 |
*/
|
594 |
-
function
|
595 |
global $wpsmushnextgenstats;
|
596 |
|
597 |
$smushed_images = $wpsmushnextgenstats->get_ngg_images( 'smushed' );
|
598 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
599 |
//Set the counts
|
600 |
-
$this->total_count
|
601 |
-
|
602 |
-
|
|
|
|
|
|
|
|
|
|
|
603 |
$this->remaining_count = $wpsmushnextgenstats->get_ngg_images( 'unsmushed', true );
|
604 |
}
|
605 |
|
606 |
/**
|
607 |
* Get the image count for nextgen images
|
608 |
*
|
609 |
-
* @param array $
|
|
|
|
|
610 |
*
|
611 |
* @return int
|
612 |
*/
|
613 |
-
function get_image_count( $
|
614 |
-
if ( empty( $
|
615 |
return 0;
|
616 |
}
|
|
|
617 |
$image_count = 0;
|
618 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
619 |
//If there are no smush stats, skip
|
620 |
if ( empty( $image['wp_smush'] ) ) {
|
621 |
continue;
|
622 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
623 |
//Get the image count
|
624 |
if ( ! empty( $image['wp_smush']['sizes'] ) ) {
|
625 |
$image_count += count( $image['wp_smush']['sizes'] );
|
@@ -630,7 +687,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
630 |
}
|
631 |
|
632 |
/**
|
633 |
-
* Combine the resizing stats and smush stats
|
634 |
*
|
635 |
* @param $metadata
|
636 |
*
|
@@ -656,7 +713,7 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
656 |
//Round off
|
657 |
$smush_stats['stats']['percent'] = round( $smush_stats['stats']['percent'], 2 );
|
658 |
|
659 |
-
if( !empty( $smush_stats['sizes']['full'] ) ) {
|
660 |
//Full Image
|
661 |
$smush_stats['sizes']['full']['bytes'] = ! empty( $resize_savings['bytes'] ) ? $smush_stats['sizes']['full']['bytes'] + $resize_savings['bytes'] : $smush_stats['sizes']['full']['bytes'];
|
662 |
$smush_stats['sizes']['full']['size_before'] = ! empty( $resize_savings['size_before'] ) ? $smush_stats['sizes']['full']['size_before'] + $resize_savings['size_before'] : $smush_stats['sizes']['full']['size_before'];
|
@@ -664,25 +721,34 @@ if ( ! class_exists( 'WpSmushNextGenAdmin' ) ) {
|
|
664 |
$smush_stats['sizes']['full']['percent'] = ! empty( $smush_stats['sizes']['full']['bytes'] ) && $smush_stats['sizes']['full']['size_before'] > 0 ? ( $smush_stats['sizes']['full']['bytes'] / $smush_stats['sizes']['full']['size_before'] ) * 100 : $smush_stats['sizes']['full']['percent'];
|
665 |
|
666 |
$smush_stats['sizes']['full']['percent'] = round( $smush_stats['sizes']['full']['percent'], 2 );
|
667 |
-
}else{
|
668 |
$smush_stats['sizes']['full'] = $resize_savings;
|
669 |
}
|
670 |
|
671 |
$metadata['wp_smush'] = $smush_stats;
|
|
|
672 |
return $metadata;
|
673 |
|
674 |
}
|
675 |
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
|
|
|
|
|
|
|
|
684 |
}
|
685 |
-
|
|
|
|
|
|
|
|
|
686 |
}
|
687 |
|
688 |
}//End of Class
|
16 |
class WpSmushNextGenAdmin extends WpSmushNextGen {
|
17 |
|
18 |
var $total_count = 0;
|
19 |
+
/*
|
20 |
+
* @var int $smushed_count Count of images ( Attachments ), Does not includes additional sizes that might have been created
|
21 |
+
*/
|
22 |
var $smushed_count = 0;
|
23 |
+
/*
|
24 |
+
* @var int $image_count Includes the count of different sizes an image might have
|
25 |
+
*/
|
26 |
var $image_count = 0;
|
27 |
var $remaining_count = 0;
|
28 |
var $super_smushed = 0;
|
29 |
+
var $smushed = array();
|
30 |
var $bulk_page_handle;
|
31 |
|
32 |
//Stores all lossless smushed ids
|
34 |
|
35 |
function __construct() {
|
36 |
|
37 |
+
global $wpsmushnextgenstats;
|
38 |
+
|
39 |
//Update the number of columns
|
40 |
add_filter( 'ngg_manage_images_number_of_columns', array(
|
41 |
&$this,
|
55 |
add_action( 'ngg_delete_picture', array( $this, 'update_nextgen_stats' ) );
|
56 |
|
57 |
//Update Stats, Lists - if a NextGen Gallery is deleted
|
58 |
+
add_action( 'ngg_delete_gallery', array( $wpsmushnextgenstats, 'update_stats_cache' ) );
|
59 |
|
60 |
//Update the Super Smush count, after the smushing
|
61 |
add_action( 'wp_smush_image_optimised_nextgen', array( $this, 'update_lists' ), '', 2 );
|
76 |
* Add a WP Smush page for bulk smush and settings related to Nextgen gallery
|
77 |
*/
|
78 |
function wp_smush_bulk_menu() {
|
79 |
+
global $WpSmush;
|
80 |
if ( defined( 'NGGFOLDER' ) ) {
|
81 |
+
$title = $WpSmush->validate_install() ? esc_html__( "Smush Pro", "wp-smushit" ) : esc_html__( "Smush", "wp-smushit" );
|
82 |
+
$this->bulk_page_handle = add_submenu_page( NGGFOLDER, $title, $title, 'NextGEN Manage gallery', 'wp-smush-nextgen-bulk', array(
|
83 |
&$this,
|
84 |
'wp_smush_bulk'
|
85 |
) );
|
98 |
function wp_smush_image_column_name( $columns ) {
|
99 |
//Latest next gen takes string, while the earlier WP Smush plugin shows there use to be a array
|
100 |
if ( is_array( $columns ) ) {
|
101 |
+
$columns['wp_smush_image'] = esc_html__( 'Smush', 'wp-smushit' );
|
102 |
} else {
|
103 |
+
$columns = esc_html__( 'Smush', 'wp-smushit' );
|
104 |
}
|
105 |
|
106 |
return $columns;
|
118 |
//NExtGen Doesn't returns Column name, weird? yeah, right, it is proper because hook is called for the particular column
|
119 |
if ( $column_name == 'wp_smush_image' || $column_name == '' ) {
|
120 |
|
121 |
+
#We're not using our in-house function WpSmushNextGen::get_nextgen_image_from_id()
|
122 |
+
#as we're already instializing the nextgen gallery object, we need $storage instance later
|
123 |
// Registry Object for NextGen Gallery
|
124 |
$registry = C_Component_Registry::get_instance();
|
125 |
|
180 |
|
181 |
wp_localize_script( $handle, 'wp_smush_msgs', $wp_smush_msgs );
|
182 |
|
183 |
+
//If premium, Super smush allowed, all images are smushed, localize lossless smushed ids for bulk compression
|
184 |
+
if ( $resmush_ids = get_option( 'wp-smush-nextgen-resmush-list', array() ) ) {
|
185 |
+
|
186 |
+
$this->resmush_ids = $resmush_ids;
|
187 |
+
}
|
188 |
+
|
189 |
+
//Setup image counts ( Total, Smushed, Super-smushed, Remaining )
|
190 |
+
$this->setup_image_counts();
|
191 |
|
192 |
//Get the Latest Stats
|
193 |
$this->stats = $wpsmushnextgenstats->get_smush_stats();
|
199 |
$smushed = $wpsmushnextgenstats->get_ngg_images();
|
200 |
$smushed = ( ! empty( $smushed ) && is_array( $smushed ) ) ? array_keys( $smushed ) : '';
|
201 |
|
202 |
+
$this->smushed = $smushed;
|
203 |
if ( ! empty( $_REQUEST['ids'] ) ) {
|
204 |
//Sanitize the ids and assign it to a variable
|
205 |
$this->ids = array_map( 'intval', explode( ',', $_REQUEST['ids'] ) );
|
206 |
} else {
|
207 |
$this->ids = $unsmushed;
|
208 |
}
|
|
|
|
|
209 |
|
210 |
+
$this->super_smushed = get_option( 'wp-smush-super_smushed_nextgen', array() );
|
211 |
+
$this->super_smushed = ! empty( $this->super_smushed['ids'] ) ? $this->super_smushed['ids'] : array();
|
212 |
+
|
213 |
+
#If we have images to be resmushed, Update supersmush list
|
214 |
+
if ( ! empty( $this->resmush_ids ) && ! empty( $this->super_smushed ) ) {
|
215 |
+
$this->super_smushed = array_diff( $this->super_smushed, $this->resmush_ids );
|
216 |
}
|
217 |
|
218 |
+
//If supersmushedimages are more than total, clean it up
|
219 |
+
if ( sizeof( $this->super_smushed ) > $this->total_count ) {
|
220 |
+
$this->super_smushed = $this->cleanup_super_smush_data();
|
221 |
+
}
|
222 |
|
223 |
//Array of all smushed, unsmushed and lossless ids
|
224 |
$data = array(
|
225 |
'count_smushed' => $this->smushed_count,
|
226 |
+
'count_supersmushed' => count( $this->super_smushed ),
|
227 |
'count_total' => $this->total_count,
|
228 |
'count_images' => $this->image_count,
|
229 |
'smushed' => $smushed,
|
310 |
/**
|
311 |
* Print the column html
|
312 |
*
|
313 |
+
* @param string $pid Media id
|
314 |
* @param string $status_txt Status text
|
315 |
* @param string $button_txt Button label
|
316 |
* @param boolean $show_button Whether to shoe the button
|
322 |
|
323 |
$class = $smushed ? '' : ' hidden';
|
324 |
$html = '<p class="smush-status' . $class . '">' . $status_txt . '</p>';
|
325 |
+
$html .= wp_nonce_field( 'wp_smush_nextgen', '_wp_smush_nonce', '', false );
|
326 |
// if we aren't showing the button
|
327 |
if ( ! $show_button ) {
|
328 |
if ( $echo ) {
|
341 |
}
|
342 |
if ( ! $echo ) {
|
343 |
$html .= '
|
344 |
+
<button class="button button-primary wp-smush-nextgen-send" data-id="' . $pid . '">
|
345 |
<span>' . $button_txt . '</span>
|
346 |
</button>';
|
347 |
if ( ! $smushed ) {
|
354 |
|
355 |
return $html;
|
356 |
} else {
|
357 |
+
$html .= '<button class="button button-primary wp-smush-nextgen-send" data-id="' . $pid . '">
|
358 |
<span>' . $button_txt . '</span>
|
359 |
</button>';
|
360 |
echo $html . $WpSmush->progress_bar();
|
365 |
*
|
366 |
*/
|
367 |
function bulk_smush_ui() {
|
368 |
+
global $wpsmush_bulkui;
|
369 |
//Page Header
|
370 |
$wpsmush_bulkui->smush_page_header(); ?>
|
371 |
+
<!-- Bulk Smush Progress Bar -->
|
372 |
+
<div class="wp-smushit-container-left col-half float-l"><?php
|
373 |
+
//Bulk Smush Container
|
374 |
+
$this->bulk_smush_container();
|
375 |
+
?>
|
376 |
+
</div>
|
377 |
+
|
378 |
+
<!-- Stats -->
|
379 |
+
<div class="wp-smushit-container-right col-half float-l"><?php
|
380 |
+
//Stats
|
381 |
+
$this->smush_stats_container(); ?>
|
382 |
+
</div><!-- End Of Smushit Container right -->
|
383 |
+
</div><?php
|
384 |
$wpsmush_bulkui->smush_page_footer();
|
385 |
}
|
386 |
|
409 |
|
410 |
//If there are no images in Media Library
|
411 |
if ( 0 >= $this->total_count ) { ?>
|
412 |
+
<span class="wp-smush-no-image tc">
|
413 |
<img src="<?php echo WP_SMUSH_URL . 'assets/images/smush-no-media.png'; ?>"
|
414 |
+
alt="<?php esc_html_e( "No attachments found - Upload some images", "wp-smushit" ); ?>">
|
415 |
</span>
|
416 |
+
<p class="wp-smush-no-images-content tc roboto-regular"><?php printf( esc_html__( "We haven’t found any images in your %sgallery%s yet, so there’s no smushing to be done! Once you upload images, reload this page and start playing!", "wp-smushit" ), '<a href="' . esc_url( admin_url( 'admin.php?page=ngg_addgallery' ) ) . '">', '</a>' ); ?></p>
|
417 |
+
<span class="wp-smush-upload-images tc">
|
418 |
+
<a class="button button-cta"
|
419 |
+
href="<?php echo esc_url( admin_url( 'admin.php?page=ngg_addgallery' ) ); ?>"><?php esc_html_e( "UPLOAD IMAGES", "wp-smushit" ); ?></a>
|
420 |
+
</span><?php
|
421 |
} else { ?>
|
422 |
+
<!-- Hide All done div if there are images pending -->
|
423 |
+
<div class="wp-smush-notice wp-smush-all-done<?php echo $all_done ? '' : ' hidden' ?>">
|
424 |
+
<i class="icon-fi-check-tick"></i><?php esc_html_e( "All images are smushed and up to date. Awesome!", "wp-smushit" ); ?>
|
425 |
+
</div>
|
426 |
+
<div class="wp-smush-bulk-wrapper <?php echo $all_done ? ' hidden' : ''; ?>"><?php
|
427 |
//If all the images in media library are smushed
|
428 |
//Button Text
|
429 |
$button_content = esc_html__( "BULK SMUSH", "wp-smushit" );
|
430 |
// DO not show the remaining notice if we have resmush ids
|
431 |
?>
|
432 |
+
<div class="wp-smush-notice wp-smush-remaining <?php echo count( $this->resmush_ids ) > 0 ? ' hidden' : ''; ?>">
|
433 |
<i class="icon-fi-warning-alert"></i>
|
434 |
+
<span class="wp-smush-notice-text">
|
435 |
<?php printf( _n( "%s, you have %s%s%d%s attachment%s that needs smushing!", "%s, you have %s%s%d%s attachments%s that need smushing!", $this->remaining_count, "wp-smushit" ), $wpsmushit_admin->get_user_name(), '<strong>', '<span class="wp-smush-remaining-count">', $this->remaining_count, '</span>', '</strong>' ); ?>
|
436 |
</span>
|
437 |
+
</div>
|
438 |
+
<button type="button"
|
439 |
+
class="wp-smush-button wp-smush-nextgen-bulk float-r"><?php echo $button_content; ?></button><?php
|
440 |
|
441 |
//Enable Super Smush
|
442 |
if ( ! $WpSmush->lossy_enabled ) {
|
443 |
$url = admin_url( 'upload.php' );
|
444 |
$url = add_query_arg(
|
445 |
array(
|
446 |
+
'page' => 'smush#wp-smush-settings-box'
|
447 |
),
|
448 |
$url
|
449 |
); ?>
|
450 |
+
<p class="wp-smush-enable-lossy"><?php printf( esc_html__( "Enable Super-smush in the %sSettings%s area to get even more savings with almost no visible drop in quality.", "wp-smushit" ), '<a href="' . $url . '" target="_blank">', "</a>" ); ?></p><?php
|
451 |
} ?>
|
452 |
+
</div><?php
|
453 |
$wpsmush_bulkui->progress_bar( $this );
|
454 |
}
|
455 |
}
|
469 |
//Container Header
|
470 |
$wpsmush_bulkui->container_header( $class, 'wp-smush-bulk-wrap-box', esc_html__( "BULK SMUSH", "wp-smushit" ), $smush_individual_msg ); ?>
|
471 |
|
472 |
+
<div class="box-container"><?php
|
473 |
+
$this->bulk_smush_content(); ?>
|
474 |
+
</div><?php
|
475 |
echo "</section>";
|
476 |
}
|
477 |
|
485 |
$smushed_count = ( $resmush_count = count( $this->resmush_ids ) ) > 0 ? ( $this->total_count - ( $resmush_count + $this->remaining_count ) ) : $this->smushed_count;
|
486 |
|
487 |
$button = '<span class="spinner"></span><button tooltip="' . esc_html__( "Lets you check if any images can be further optimized. Useful after changing settings.", "wp-smushit" ) . '" data-type="nextgen" class="wp-smush-title button button-grey button-small wp-smush-scan">' . esc_html__( "RE-CHECK IMAGES", "wp-smushit" ) . '</button>';
|
488 |
+
$wpsmush_bulkui->container_header( 'smush-stats-wrapper', 'wp-smush-stats-box', esc_html__( "STATS", "wp-smushit" ), $button ); ?>
|
489 |
+
|
490 |
+
<div class="box-content">
|
491 |
+
<div class="row smush-total-savings smush-total-reduction-percent">
|
492 |
+
|
493 |
+
<div class="wp-smush-current-progress">
|
494 |
+
|
495 |
+
<div class="wp-smush-count-total">
|
496 |
+
<div class="wp-smush-smush-stats-wrapper">
|
497 |
+
<span class="wp-smush-total-optimised"><?php echo $this->image_count; ?></span>
|
498 |
+
</div>
|
499 |
+
<span class="total-stats-label"><?php esc_html_e( "Images smushed", "wp-smushit" ); ?></span>
|
500 |
+
</div>
|
501 |
+
</div>
|
502 |
+
</div>
|
503 |
+
<hr/>
|
504 |
+
<div class="row wp-smush-savings">
|
505 |
+
<span class="float-l wp-smush-stats-label"><?php esc_html_e( "Total savings", "wp-smushit" ); ?></span>
|
506 |
+
<span class="float-r wp-smush-stats">
|
507 |
<span class="wp-smush-stats-percent"><?php echo $this->stats['percent'] > 0 ? number_format_i18n( $this->stats['percent'], 1, '.', '' ) : 0; ?></span>%
|
508 |
<span class="wp-smush-stats-sep">/</span>
|
509 |
<span class="wp-smush-stats-human">
|
510 |
<?php echo $this->stats['human'] > 0 ? $this->stats['human'] : "0MB"; ?>
|
511 |
</span>
|
512 |
</span>
|
513 |
+
</div>
|
514 |
<?php
|
515 |
//Nonce Field for Ajax requests
|
516 |
echo wp_nonce_field( 'save_wp_smush_options', 'wp_smush_options_nonce', '', false );
|
517 |
if ( apply_filters( 'wp_smush_show_nextgen_lossy_stats', true ) ) { ?>
|
518 |
+
<hr>
|
519 |
+
<div class="row super-smush-attachments">
|
520 |
+
<span class="float-l wp-smush-stats-label">
|
521 |
<strong><?php esc_html_e( "Super-smushed images", "wp-smushit" ); ?></strong>
|
522 |
</span>
|
523 |
+
<span class="float-r wp-smush-stats">
|
524 |
<?php
|
525 |
if ( $WpSmush->lossy_enabled ) {
|
526 |
+
$smushed_image_count = is_array( $this->super_smushed ) ? sizeof( $this->super_smushed ) : 0;
|
527 |
+
echo '<span class="smushed-count">' . $smushed_image_count . '</span>/' . $this->total_count;
|
528 |
} else {
|
529 |
printf( esc_html__( "%sDISABLED%s", "wp-smushit" ), '<span class="wp-smush-lossy-disabled">', '</span>' );
|
530 |
} ?>
|
531 |
</span>
|
532 |
+
</div><?php
|
533 |
}
|
534 |
/**
|
535 |
* Allows you to output any content within the stats box at the end
|
536 |
*/
|
537 |
do_action( 'wp_smush_after_stats' );
|
538 |
?>
|
539 |
+
</div><?php
|
540 |
echo "</section>";
|
541 |
}
|
542 |
|
616 |
/**
|
617 |
* Initialize NextGen Gallery Stats
|
618 |
*/
|
619 |
+
function setup_image_counts() {
|
620 |
global $wpsmushnextgenstats;
|
621 |
|
622 |
$smushed_images = $wpsmushnextgenstats->get_ngg_images( 'smushed' );
|
623 |
|
624 |
+
//Check if resmush ids are not set, get it
|
625 |
+
if ( empty( $this->resmush_ids ) ) {
|
626 |
+
$this->resmush_ids = get_option( 'wp-smush-nextgen-resmush-list', array() );
|
627 |
+
}
|
628 |
+
|
629 |
+
//I fwe have images to be resmushed, exclude it
|
630 |
+
if ( ! empty( $this->resmush_ids ) ) {
|
631 |
+
//Get the Smushed images, exlude resmush ids
|
632 |
+
$smushed_images = array_diff_key( $smushed_images, array_flip( $this->resmush_ids ) );
|
633 |
+
}
|
634 |
+
|
635 |
//Set the counts
|
636 |
+
$this->total_count = $wpsmushnextgenstats->total_count();
|
637 |
+
|
638 |
+
//Includes the count of different sizes an image might have
|
639 |
+
$this->image_count = $this->get_image_count( $smushed_images );
|
640 |
+
|
641 |
+
//Count of images ( Attachments ), Does not includes additioanl sizes that might have been created
|
642 |
+
$this->smushed_count = isset( $smushed_images ) && is_array( $smushed_images ) ? sizeof( $smushed_images ) : $smushed_images;
|
643 |
+
|
644 |
$this->remaining_count = $wpsmushnextgenstats->get_ngg_images( 'unsmushed', true );
|
645 |
}
|
646 |
|
647 |
/**
|
648 |
* Get the image count for nextgen images
|
649 |
*
|
650 |
+
* @param array $images Array of attachments to get the image count for
|
651 |
+
*
|
652 |
+
* @param bool $exclude_resmush_ids Whether to exclude resmush ids or not
|
653 |
*
|
654 |
* @return int
|
655 |
*/
|
656 |
+
function get_image_count( $images = array(), $exclude_resmush_ids = true ) {
|
657 |
+
if ( empty( $images ) || ! is_array( $images ) ) {
|
658 |
return 0;
|
659 |
}
|
660 |
+
|
661 |
$image_count = 0;
|
662 |
+
#$image in here is expected to be metadata array
|
663 |
+
foreach ( $images as $image_k => $image ) {
|
664 |
+
#Get image object if not there already
|
665 |
+
if ( ! is_array( $image ) ) {
|
666 |
+
$image = $this->get_nextgen_image_from_id( $image );
|
667 |
+
//Get the meta
|
668 |
+
$image = !empty( $image->meta_data ) ? $image->meta_data : '';
|
669 |
+
}
|
670 |
//If there are no smush stats, skip
|
671 |
if ( empty( $image['wp_smush'] ) ) {
|
672 |
continue;
|
673 |
}
|
674 |
+
|
675 |
+
//If resmush ids needs to be excluded
|
676 |
+
if ( $exclude_resmush_ids && ( ! empty( $this->resmush_ids ) && in_array( $image_k, $this->resmush_ids ) ) ) {
|
677 |
+
continue;
|
678 |
+
}
|
679 |
+
|
680 |
//Get the image count
|
681 |
if ( ! empty( $image['wp_smush']['sizes'] ) ) {
|
682 |
$image_count += count( $image['wp_smush']['sizes'] );
|
687 |
}
|
688 |
|
689 |
/**
|
690 |
+
* Combine the resizing stats and smush stats , One time operation - performed during the image optimization
|
691 |
*
|
692 |
* @param $metadata
|
693 |
*
|
713 |
//Round off
|
714 |
$smush_stats['stats']['percent'] = round( $smush_stats['stats']['percent'], 2 );
|
715 |
|
716 |
+
if ( ! empty( $smush_stats['sizes']['full'] ) ) {
|
717 |
//Full Image
|
718 |
$smush_stats['sizes']['full']['bytes'] = ! empty( $resize_savings['bytes'] ) ? $smush_stats['sizes']['full']['bytes'] + $resize_savings['bytes'] : $smush_stats['sizes']['full']['bytes'];
|
719 |
$smush_stats['sizes']['full']['size_before'] = ! empty( $resize_savings['size_before'] ) ? $smush_stats['sizes']['full']['size_before'] + $resize_savings['size_before'] : $smush_stats['sizes']['full']['size_before'];
|
721 |
$smush_stats['sizes']['full']['percent'] = ! empty( $smush_stats['sizes']['full']['bytes'] ) && $smush_stats['sizes']['full']['size_before'] > 0 ? ( $smush_stats['sizes']['full']['bytes'] / $smush_stats['sizes']['full']['size_before'] ) * 100 : $smush_stats['sizes']['full']['percent'];
|
722 |
|
723 |
$smush_stats['sizes']['full']['percent'] = round( $smush_stats['sizes']['full']['percent'], 2 );
|
724 |
+
} else {
|
725 |
$smush_stats['sizes']['full'] = $resize_savings;
|
726 |
}
|
727 |
|
728 |
$metadata['wp_smush'] = $smush_stats;
|
729 |
+
|
730 |
return $metadata;
|
731 |
|
732 |
}
|
733 |
|
734 |
+
/**
|
735 |
+
* Cleanup Super-smush images array against the all ids in gallery
|
736 |
+
*
|
737 |
+
* @return array|mixed|void
|
738 |
+
*/
|
739 |
+
function cleanup_super_smush_data() {
|
740 |
+
global $wpsmushnextgenstats;
|
741 |
+
$super_smushed = get_option( 'wp-smush-super_smushed_nextgen', array() );
|
742 |
+
$ids = $wpsmushnextgenstats->total_count( false, true );
|
743 |
+
|
744 |
+
if ( is_array( $super_smushed ) && !empty( $super_smushed['ids'] ) && is_array( $ids ) ) {
|
745 |
+
$super_smushed['ids'] = array_intersect( $super_smushed['ids'], $ids );
|
746 |
}
|
747 |
+
|
748 |
+
update_option( 'wp-smush-super_smushed_nextgen', $super_smushed );
|
749 |
+
|
750 |
+
return $super_smushed['ids'];
|
751 |
+
|
752 |
}
|
753 |
|
754 |
}//End of Class
|
lib/nextgen-integration/class-wp-smush-nextgen-bulk.php
CHANGED
@@ -35,13 +35,12 @@ if ( ! class_exists( 'WPSmushNextGenBulk' ) ) {
|
|
35 |
if ( ! empty( $_REQUEST['is_bulk_resmush'] ) && $_REQUEST['is_bulk_resmush'] ) {
|
36 |
$wpsmushit_admin->update_resmush_list( $atchmnt_id, 'wp-smush-nextgen-resmush-list' );
|
37 |
}
|
38 |
-
|
39 |
-
|
40 |
-
$stats['is_lossy'] = !empty( $smush['stats'] ) ? $smush['stats']['lossy'] : 0;
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
45 |
|
46 |
//Get the resmush ids list
|
47 |
if ( empty( $wpsmushnextgenadmin->resmush_ids ) ) {
|
35 |
if ( ! empty( $_REQUEST['is_bulk_resmush'] ) && $_REQUEST['is_bulk_resmush'] ) {
|
36 |
$wpsmushit_admin->update_resmush_list( $atchmnt_id, 'wp-smush-nextgen-resmush-list' );
|
37 |
}
|
38 |
+
$stats['is_lossy'] = !empty( $smush['stats'] ) ? $smush['stats']['lossy'] : 0;
|
|
|
|
|
39 |
|
40 |
+
//Size before and after smush
|
41 |
+
$stats['size_before'] = !empty( $smush['stats'] ) ? $smush['stats']['size_before'] : 0;
|
42 |
+
$stats['size_after'] = !empty( $smush['stats'] ) ? $smush['stats']['size_after'] : 0;
|
43 |
+
}
|
44 |
|
45 |
//Get the resmush ids list
|
46 |
if ( empty( $wpsmushnextgenadmin->resmush_ids ) ) {
|
lib/nextgen-integration/class-wp-smush-nextgen-stats.php
CHANGED
@@ -33,7 +33,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
33 |
add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_cache' ) );
|
34 |
|
35 |
//Add the resizing stats to Global stats
|
36 |
-
add_action( 'wp_smush_image_nextgen_resized',
|
37 |
|
38 |
//Get the stats for single image, update the global stats
|
39 |
add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_stats' ), '', 2 );
|
@@ -55,8 +55,10 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
55 |
* @param bool $force_refresh Optional. Whether to force the cache to be refreshed.
|
56 |
* Default false.
|
57 |
*
|
58 |
-
* @return
|
59 |
-
*
|
|
|
|
|
60 |
*/
|
61 |
function total_count( $force_refresh = false, $return_ids = false ) {
|
62 |
// Check for the wp_smush_images in the 'nextgen' group.
|
@@ -76,13 +78,6 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
76 |
return $return_ids ? $attachment_ids : count( $attachment_ids );
|
77 |
}
|
78 |
|
79 |
-
/**
|
80 |
-
*
|
81 |
-
*
|
82 |
-
* @param bool $return_ids Whether to return the ids array, set to false by default
|
83 |
-
*
|
84 |
-
* @return int|mixed|void Returns the images ids or the count
|
85 |
-
*/
|
86 |
/**
|
87 |
* Returns the ngg images list(id and meta ) or count
|
88 |
*
|
@@ -190,7 +185,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
190 |
$percent = $percent < 0 ? 0 : $percent;
|
191 |
|
192 |
if ( isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
|
193 |
-
$status_txt
|
194 |
} else {
|
195 |
if ( $bytes == 0 || $percent == 0 ) {
|
196 |
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
@@ -269,7 +264,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
269 |
$opt_lossy_val = $wpsmush_settings->settings['lossy'];
|
270 |
|
271 |
//Check if premium user, compression was lossless, and lossy compression is enabled
|
272 |
-
if (
|
273 |
// the button text
|
274 |
$button_txt = __( 'Super-Smush', 'wp-smushit' );
|
275 |
$show_button = true;
|
@@ -297,17 +292,12 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
297 |
*/
|
298 |
function update_stats( $image_id, $stats ) {
|
299 |
|
300 |
-
global $WpSmush;
|
301 |
-
|
302 |
$stats = ! empty( $stats['stats'] ) ? $stats['stats'] : '';
|
303 |
|
304 |
$smush_stats = get_option( 'wp_smush_stats_nextgen', array() );
|
305 |
|
306 |
if ( ! empty( $stats ) ) {
|
307 |
|
308 |
-
//Compression Bytes
|
309 |
-
$smush_stats['bytes'] = ! empty( $smush_stats['bytes'] ) ? ( $smush_stats['bytes'] + $stats['bytes'] ) : $stats['bytes'];
|
310 |
-
|
311 |
//Human Readable
|
312 |
$smush_stats['human'] = ! empty( $smush_stats['bytes'] ) ? size_format( $smush_stats['bytes'], 1 ) : '';
|
313 |
|
@@ -317,14 +307,13 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
317 |
//Size of image after compression
|
318 |
$smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
|
319 |
|
|
|
|
|
320 |
//Compression Percentage
|
321 |
-
$smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && !empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
|
322 |
}
|
323 |
|
324 |
update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
|
325 |
-
|
326 |
-
//Cahce the results, we don't need a timed cache expiration.
|
327 |
-
wp_cache_set( 'wp_smush_stats_nextgen', $smush_stats, 'nextgen' );
|
328 |
}
|
329 |
|
330 |
/**
|
@@ -355,12 +344,48 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
355 |
$smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
|
356 |
|
357 |
//Compression Percentage
|
358 |
-
$smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && !empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
|
359 |
}
|
360 |
update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
361 |
|
362 |
-
|
363 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
364 |
}
|
365 |
|
366 |
/**
|
@@ -369,6 +394,8 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
369 |
*/
|
370 |
function get_smush_stats() {
|
371 |
|
|
|
|
|
372 |
$smushed_stats = array(
|
373 |
'savings_bytes' => 0,
|
374 |
'size_before' => 0,
|
@@ -377,24 +404,13 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
377 |
);
|
378 |
|
379 |
//Clear up the stats
|
380 |
-
if( 0 == $this->total_count() ) {
|
381 |
-
delete_option('wp_smush_stats_nextgen');
|
382 |
-
wp_cache_delete( 'wp_smush_stats_nextgen', 'nextgen' );
|
383 |
}
|
384 |
|
385 |
-
// Check for the
|
386 |
-
$stats =
|
387 |
-
|
388 |
-
// If nothing is found, build the object.
|
389 |
-
if ( false === $stats ) {
|
390 |
-
// Check for the wp_smush_images in the 'nextgen' group.
|
391 |
-
$stats = get_option( 'wp_smush_stats_nextgen', array() );
|
392 |
|
393 |
-
if ( ! is_wp_error( $stats ) ) {
|
394 |
-
// In this case we don't need a timed cache expiration.
|
395 |
-
wp_cache_set( 'wp_smush_stats_nextgen', $stats, 'nextgen' );
|
396 |
-
}
|
397 |
-
}
|
398 |
if ( empty( $stats['bytes'] ) || $stats['bytes'] < 0 ) {
|
399 |
$stats['bytes'] = 0;
|
400 |
}
|
@@ -410,6 +426,13 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
410 |
|
411 |
$smushed_stats = array_merge( $smushed_stats, $stats );
|
412 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
413 |
return $smushed_stats;
|
414 |
}
|
415 |
|
@@ -422,6 +445,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
422 |
|
423 |
/**
|
424 |
* Returns the Stats for a image formatted into a nice table
|
|
|
425 |
* @param $image_id
|
426 |
* @param $wp_smush_data
|
427 |
* @param $attachment_metadata
|
@@ -453,7 +477,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
453 |
if ( ! empty( $skipped ) ) {
|
454 |
foreach ( $skipped as $img_data ) {
|
455 |
$skip_class = $img_data['reason'] == 'size_limit' ? ' error' : '';
|
456 |
-
$stats
|
457 |
<td>' . strtoupper( $img_data['size'] ) . '</td>
|
458 |
<td class="smush-skipped' . $skip_class . '">' . $WpSmush->skip_reason( $img_data['reason'] ) . '</td>
|
459 |
</tr>';
|
@@ -476,7 +500,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
476 |
$stats .= " ( $size_value->percent% )";
|
477 |
}
|
478 |
|
479 |
-
$stats .='</td>
|
480 |
</tr>';
|
481 |
}
|
482 |
$stats .= '</tbody>
|
@@ -553,6 +577,7 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
553 |
|
554 |
/**
|
555 |
* Check if image can be resmushed
|
|
|
556 |
* @param $status_txt
|
557 |
*
|
558 |
* @return string
|
@@ -576,6 +601,159 @@ if ( ! class_exists( 'WpSmushNextGenStats' ) ) {
|
|
576 |
return $show_resmush;
|
577 |
}
|
578 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
579 |
}//End of Class
|
580 |
|
581 |
}//End Of if class not exists
|
33 |
add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_cache' ) );
|
34 |
|
35 |
//Add the resizing stats to Global stats
|
36 |
+
add_action( 'wp_smush_image_nextgen_resized', array( $this, 'update_stats' ), '', 2 );
|
37 |
|
38 |
//Get the stats for single image, update the global stats
|
39 |
add_action( 'wp_smush_nextgen_image_stats', array( $this, 'update_stats' ), '', 2 );
|
55 |
* @param bool $force_refresh Optional. Whether to force the cache to be refreshed.
|
56 |
* Default false.
|
57 |
*
|
58 |
+
* @param bool $return_ids Whether to return the ids array, set to false by default
|
59 |
+
*
|
60 |
+
* @return int|mixed|void Returns the images ids or the count
|
61 |
+
*
|
62 |
*/
|
63 |
function total_count( $force_refresh = false, $return_ids = false ) {
|
64 |
// Check for the wp_smush_images in the 'nextgen' group.
|
78 |
return $return_ids ? $attachment_ids : count( $attachment_ids );
|
79 |
}
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
/**
|
82 |
* Returns the ngg images list(id and meta ) or count
|
83 |
*
|
185 |
$percent = $percent < 0 ? 0 : $percent;
|
186 |
|
187 |
if ( isset( $wp_smush_data['stats']['size_before'] ) && $wp_smush_data['stats']['size_before'] == 0 && ! empty( $wp_smush_data['sizes'] ) ) {
|
188 |
+
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
189 |
} else {
|
190 |
if ( $bytes == 0 || $percent == 0 ) {
|
191 |
$status_txt = __( 'Already Optimized', 'wp-smushit' );
|
264 |
$opt_lossy_val = $wpsmush_settings->settings['lossy'];
|
265 |
|
266 |
//Check if premium user, compression was lossless, and lossy compression is enabled
|
267 |
+
if ( ! $show_resmush && $this->is_pro_user && ! $is_lossy && $opt_lossy_val && ! empty( $image_type ) && $image_type != 'image/gif' ) {
|
268 |
// the button text
|
269 |
$button_txt = __( 'Super-Smush', 'wp-smushit' );
|
270 |
$show_button = true;
|
292 |
*/
|
293 |
function update_stats( $image_id, $stats ) {
|
294 |
|
|
|
|
|
295 |
$stats = ! empty( $stats['stats'] ) ? $stats['stats'] : '';
|
296 |
|
297 |
$smush_stats = get_option( 'wp_smush_stats_nextgen', array() );
|
298 |
|
299 |
if ( ! empty( $stats ) ) {
|
300 |
|
|
|
|
|
|
|
301 |
//Human Readable
|
302 |
$smush_stats['human'] = ! empty( $smush_stats['bytes'] ) ? size_format( $smush_stats['bytes'], 1 ) : '';
|
303 |
|
307 |
//Size of image after compression
|
308 |
$smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
|
309 |
|
310 |
+
$smush_stats['bytes'] = ! empty( $smush_stats['size_before'] ) && !empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_before'] - $smush_stats['size_after'] ) : 0;
|
311 |
+
|
312 |
//Compression Percentage
|
313 |
+
$smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && ! empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
|
314 |
}
|
315 |
|
316 |
update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
|
|
|
|
|
|
|
317 |
}
|
318 |
|
319 |
/**
|
344 |
$smush_stats['size_after'] = ! empty( $smush_stats['size_after'] ) ? ( $smush_stats['size_after'] + $stats['size_after'] ) : $stats['size_after'];
|
345 |
|
346 |
//Compression Percentage
|
347 |
+
$smush_stats['percent'] = ! empty( $smush_stats['size_before'] ) && ! empty( $smush_stats['size_after'] ) && $smush_stats['size_before'] > 0 ? ( $smush_stats['bytes'] / $smush_stats['size_before'] ) * 100 : $stats['percent'];
|
348 |
}
|
349 |
update_option( 'wp_smush_stats_nextgen', $smush_stats, false );
|
350 |
+
}
|
351 |
+
|
352 |
+
/**
|
353 |
+
* Get the attachment stats for a image
|
354 |
+
*
|
355 |
+
* @param $id
|
356 |
+
*
|
357 |
+
* @return null
|
358 |
+
*/
|
359 |
+
function get_attachment_stats( $id ) {
|
360 |
+
|
361 |
+
//We'll get the image object in $id itself, else fetch it using Gallery Storage
|
362 |
+
if ( is_object( $id ) || is_array( $id ) ) {
|
363 |
+
$image = $id;
|
364 |
+
} else {
|
365 |
+
// Registry Object for NextGen Gallery
|
366 |
+
$registry = C_Component_Registry::get_instance();
|
367 |
+
|
368 |
+
//Gallery Storage Object
|
369 |
+
$storage = $registry->get_utility( 'I_Gallery_Storage' );
|
370 |
|
371 |
+
// get an image object
|
372 |
+
$image = $storage->object->_image_mapper->find( $id );
|
373 |
+
}
|
374 |
+
|
375 |
+
//Check if we've smush stats, return it
|
376 |
+
if ( is_object( $image ) ) {
|
377 |
+
if ( ! empty( $image->meta_data ) && ! empty( $image->meta_data['wp_smush'] ) ) {
|
378 |
+
return $image->meta_data['wp_smush'];
|
379 |
+
}
|
380 |
+
} elseif ( is_array( $image ) ) {
|
381 |
+
if ( ! empty( $image['wp_smush'] ) ) {
|
382 |
+
return $image['wp_smush'];
|
383 |
+
} else if ( ! empty( $image['meta_data'] ) && ! empty( $image['meta_data']['wp_smush'] ) ) {
|
384 |
+
return $image['meta_data']['wp_smush'];
|
385 |
+
}
|
386 |
+
}
|
387 |
+
|
388 |
+
return null;
|
389 |
}
|
390 |
|
391 |
/**
|
394 |
*/
|
395 |
function get_smush_stats() {
|
396 |
|
397 |
+
global $wpsmushnextgenadmin;
|
398 |
+
|
399 |
$smushed_stats = array(
|
400 |
'savings_bytes' => 0,
|
401 |
'size_before' => 0,
|
404 |
);
|
405 |
|
406 |
//Clear up the stats
|
407 |
+
if ( 0 == $this->total_count() ) {
|
408 |
+
delete_option( 'wp_smush_stats_nextgen' );
|
|
|
409 |
}
|
410 |
|
411 |
+
// Check for the wp_smush_images in the 'nextgen' group.
|
412 |
+
$stats = get_option( 'wp_smush_stats_nextgen', array() );
|
|
|
|
|
|
|
|
|
|
|
413 |
|
|
|
|
|
|
|
|
|
|
|
414 |
if ( empty( $stats['bytes'] ) || $stats['bytes'] < 0 ) {
|
415 |
$stats['bytes'] = 0;
|
416 |
}
|
426 |
|
427 |
$smushed_stats = array_merge( $smushed_stats, $stats );
|
428 |
|
429 |
+
//Gotta remove the stats for re-smush ids
|
430 |
+
if ( is_array( $wpsmushnextgenadmin->resmush_ids ) && ! empty( $wpsmushnextgenadmin->resmush_ids ) ) {
|
431 |
+
$resmush_stats = $this->get_stats_for_ids( $wpsmushnextgenadmin->resmush_ids );
|
432 |
+
//Recalculate stats, Remove stats for resmush ids
|
433 |
+
$smushed_stats = $this->recalculate_stats( 'sub', $smushed_stats, $resmush_stats );
|
434 |
+
}
|
435 |
+
|
436 |
return $smushed_stats;
|
437 |
}
|
438 |
|
445 |
|
446 |
/**
|
447 |
* Returns the Stats for a image formatted into a nice table
|
448 |
+
*
|
449 |
* @param $image_id
|
450 |
* @param $wp_smush_data
|
451 |
* @param $attachment_metadata
|
477 |
if ( ! empty( $skipped ) ) {
|
478 |
foreach ( $skipped as $img_data ) {
|
479 |
$skip_class = $img_data['reason'] == 'size_limit' ? ' error' : '';
|
480 |
+
$stats .= '<tr>
|
481 |
<td>' . strtoupper( $img_data['size'] ) . '</td>
|
482 |
<td class="smush-skipped' . $skip_class . '">' . $WpSmush->skip_reason( $img_data['reason'] ) . '</td>
|
483 |
</tr>';
|
500 |
$stats .= " ( $size_value->percent% )";
|
501 |
}
|
502 |
|
503 |
+
$stats .= '</td>
|
504 |
</tr>';
|
505 |
}
|
506 |
$stats .= '</tbody>
|
577 |
|
578 |
/**
|
579 |
* Check if image can be resmushed
|
580 |
+
*
|
581 |
* @param $status_txt
|
582 |
*
|
583 |
* @return string
|
601 |
return $show_resmush;
|
602 |
}
|
603 |
|
604 |
+
/**
|
605 |
+
* Get the combined stats for given Ids
|
606 |
+
*
|
607 |
+
* @param $ids
|
608 |
+
*
|
609 |
+
* @return array Array of Stats for the given ids
|
610 |
+
*
|
611 |
+
*/
|
612 |
+
function get_stats_for_ids( $ids = array() ) {
|
613 |
+
//Return if we don't have an array or no ids
|
614 |
+
if ( ! is_array( $ids ) || empty( $ids ) ) {
|
615 |
+
return false;
|
616 |
+
}
|
617 |
+
|
618 |
+
//Initialize the Stats array
|
619 |
+
$stats = array(
|
620 |
+
'size_before' => 0,
|
621 |
+
'size_after' => 0
|
622 |
+
);
|
623 |
+
//Calculate the stats, Expensive Operation
|
624 |
+
foreach ( $ids as $id ) {
|
625 |
+
$image_stats = $this->get_attachment_stats( $id );
|
626 |
+
//Add the stats to $stats
|
627 |
+
foreach ( $stats as $k => $value ) {
|
628 |
+
if ( empty( $image_stats['stats'] ) || empty( $image_stats['stats'][ $k ] ) ) {
|
629 |
+
continue;
|
630 |
+
}
|
631 |
+
$stats[ $k ] += $image_stats['stats'][ $k ];
|
632 |
+
}
|
633 |
+
}
|
634 |
+
|
635 |
+
//Calculate savings
|
636 |
+
if ( ! empty( $stats['size_before'] ) && ! empty( $stats['size_after'] ) ) {
|
637 |
+
$stats['bytes'] = $stats['size_before'] - $stats['size_after'];
|
638 |
+
}
|
639 |
+
|
640 |
+
return $stats;
|
641 |
+
}
|
642 |
+
|
643 |
+
/**
|
644 |
+
* Add/Subtract the values from 2nd array to First array
|
645 |
+
* This function is very specific to current requirement of stats re-calculation
|
646 |
+
*
|
647 |
+
* @param string $op 'add', 'sub' Add or Subtract the values
|
648 |
+
* @param array $a1
|
649 |
+
* @param array $a2
|
650 |
+
*
|
651 |
+
* @return array Return $a1
|
652 |
+
*/
|
653 |
+
function recalculate_stats( $op = 'add', $a1 = array(), $a2 = array() ) {
|
654 |
+
//If the first array itself is not set, return
|
655 |
+
if ( empty( $a1 ) ) {
|
656 |
+
return $a1;
|
657 |
+
}
|
658 |
+
|
659 |
+
//Iterate over keys in first array, and add/subtract the values
|
660 |
+
foreach ( $a1 as $k => $v ) {
|
661 |
+
//If the key is not set in 2nd array, skip
|
662 |
+
if ( empty( $a2[ $k ] ) ) {
|
663 |
+
continue;
|
664 |
+
}
|
665 |
+
//Else perform the operation, Considers the value to be integer, doesn't performs a check
|
666 |
+
if ( 'sub' == $op ) {
|
667 |
+
//Subtract the value
|
668 |
+
$a1[ $k ] -= $a2[ $k ];
|
669 |
+
} elseif ( 'add' == $op ) {
|
670 |
+
//add the value
|
671 |
+
$a1[ $k ] += $a2[ $k ];
|
672 |
+
}
|
673 |
+
}
|
674 |
+
|
675 |
+
//Recalculate percentage and human savings
|
676 |
+
$a1['percent'] = !empty( $a1['size_before'] ) ? ( ( $a1['bytes'] / $a1['size_before'] ) * 100 ) : 0;
|
677 |
+
$a1['human'] = !empty( $a1['bytes'] ) ? size_format( $a1['bytes'], 1 ) : 0;
|
678 |
+
|
679 |
+
return $a1;
|
680 |
+
}
|
681 |
+
|
682 |
+
/**
|
683 |
+
* Get Super smushed images from the given images array
|
684 |
+
*
|
685 |
+
* @param array $images Array of images containing metadata
|
686 |
+
*
|
687 |
+
* @return array Array containing ids of supersmushed images
|
688 |
+
*/
|
689 |
+
function get_super_smushed_images( $images = array() ) {
|
690 |
+
if ( empty( $images ) ) {
|
691 |
+
return array();
|
692 |
+
}
|
693 |
+
$super_smushed = array();
|
694 |
+
//Iterate Over all the images
|
695 |
+
foreach ( $images as $image_k => $image ) {
|
696 |
+
if ( empty( $image ) || ! is_array( $image ) || ! isset( $image['wp_smush'] ) ) {
|
697 |
+
continue;
|
698 |
+
}
|
699 |
+
//Check for lossy compression
|
700 |
+
if ( ! empty( $image['wp_smush']['stats'] ) && ! empty( $image['wp_smush']['stats']['lossy'] ) ) {
|
701 |
+
$super_smushed[] = $image_k;
|
702 |
+
}
|
703 |
+
|
704 |
+
}
|
705 |
+
return $super_smushed;
|
706 |
+
}
|
707 |
+
|
708 |
+
/**
|
709 |
+
* Recalculate stats for the given smushed ids and update the cache
|
710 |
+
* Update Super smushed image ids
|
711 |
+
*
|
712 |
+
*/
|
713 |
+
function update_stats_cache() {
|
714 |
+
|
715 |
+
global $wpsmushnextgenadmin;
|
716 |
+
//Get the Image ids
|
717 |
+
$smushed_images = $this->get_ngg_images( 'smushed' );
|
718 |
+
$super_smushed = array(
|
719 |
+
'ids' => array(),
|
720 |
+
'timestamp' => ''
|
721 |
+
);
|
722 |
+
|
723 |
+
$stats = $this->get_stats_for_ids( $smushed_images );
|
724 |
+
$lossy = $this->get_super_smushed_images( $smushed_images );
|
725 |
+
|
726 |
+
if ( empty( $stats['bytes'] ) && ! empty( $stats['size_before'] ) ) {
|
727 |
+
$stats['bytes'] = $stats['size_before'] - $stats['size_after'];
|
728 |
+
}
|
729 |
+
$stats['human'] = size_format( $stats['bytes'] );
|
730 |
+
if ( ! empty( $stats['size_before'] ) ) {
|
731 |
+
$stats['percent'] = ( $stats['bytes'] / $stats['size_before'] ) * 100;
|
732 |
+
$stats['percent'] = round( $stats['percent'], 2 );
|
733 |
+
}
|
734 |
+
|
735 |
+
$super_smushed['ids'] = $lossy;
|
736 |
+
$super_smushed['timestamp'] = current_time( 'timestamp' );
|
737 |
+
|
738 |
+
//Update Re-smush list
|
739 |
+
if ( is_array( $wpsmushnextgenadmin->resmush_ids ) && is_array( $smushed_images ) ) {
|
740 |
+
$resmush_ids = array_intersect( $wpsmushnextgenadmin->resmush_ids, array_keys( $smushed_images ) );
|
741 |
+
}
|
742 |
+
|
743 |
+
//If we have resmush ids, add it to db
|
744 |
+
if( !empty( $resmush_ids ) ) {
|
745 |
+
//Update re-smush images to db
|
746 |
+
update_option( 'wp-smush-nextgen-resmush-list', $resmush_ids, false );
|
747 |
+
}
|
748 |
+
|
749 |
+
//Update Super smushed images in db
|
750 |
+
update_option( 'wp-smush-super_smushed_nextgen', $super_smushed, false );
|
751 |
+
|
752 |
+
//Update Stats Cache
|
753 |
+
update_option( 'wp_smush_stats_nextgen', $stats, false );
|
754 |
+
|
755 |
+
}
|
756 |
+
|
757 |
}//End of Class
|
758 |
|
759 |
}//End Of if class not exists
|
lib/wp-async-task.php
DELETED
@@ -1,275 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WP Asynchronous Tasks
|
4 |
-
* Version: 1.0
|
5 |
-
* Description: Creates an abstract class to execute asynchronous tasks
|
6 |
-
* Author: 10up, Eric Mann, Luke Gedeon, John P. Bloch
|
7 |
-
* License: MIT
|
8 |
-
* Note: Modified to return metadata at the end of the launch function
|
9 |
-
*/
|
10 |
-
|
11 |
-
if ( ! class_exists( 'WP_Async_Task' ) ) {
|
12 |
-
abstract class WP_Async_Task {
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Constant identifier for a task that should be available to logged-in users
|
16 |
-
*
|
17 |
-
* See constructor documentation for more details.
|
18 |
-
*/
|
19 |
-
const LOGGED_IN = 1;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Constant identifier for a task that should be available to logged-out users
|
23 |
-
*
|
24 |
-
* See constructor documentation for more details.
|
25 |
-
*/
|
26 |
-
const LOGGED_OUT = 2;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Constant identifier for a task that should be available to all users regardless of auth status
|
30 |
-
*
|
31 |
-
* See constructor documentation for more details.
|
32 |
-
*/
|
33 |
-
const BOTH = 3;
|
34 |
-
|
35 |
-
/**
|
36 |
-
* This is the argument count for the main action set in the constructor. It
|
37 |
-
* is set to an arbitrarily high value of twenty, but can be overridden if
|
38 |
-
* necessary
|
39 |
-
*
|
40 |
-
* @var int
|
41 |
-
*/
|
42 |
-
protected $argument_count = 20;
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Priority to fire intermediate action.
|
46 |
-
*
|
47 |
-
* @var int
|
48 |
-
*/
|
49 |
-
protected $priority = 10;
|
50 |
-
|
51 |
-
/**
|
52 |
-
* @var string
|
53 |
-
*/
|
54 |
-
protected $action;
|
55 |
-
|
56 |
-
/**
|
57 |
-
* @var array
|
58 |
-
*/
|
59 |
-
protected $_body_data;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Constructor to wire up the necessary actions
|
63 |
-
*
|
64 |
-
* Which hooks the asynchronous postback happens on can be set by the
|
65 |
-
* $auth_level parameter. There are essentially three options: logged in users
|
66 |
-
* only, logged out users only, or both. Set this when you instantiate an
|
67 |
-
* object by using one of the three class constants to do so:
|
68 |
-
* - LOGGED_IN
|
69 |
-
* - LOGGED_OUT
|
70 |
-
* - BOTH
|
71 |
-
* $auth_level defaults to BOTH
|
72 |
-
*
|
73 |
-
* @throws Exception If the class' $action value hasn't been set
|
74 |
-
*
|
75 |
-
* @param int $auth_level The authentication level to use (see above)
|
76 |
-
*/
|
77 |
-
public function __construct( $auth_level = self::BOTH ) {
|
78 |
-
if ( empty( $this->action ) ) {
|
79 |
-
throw new Exception( 'Action not defined for class ' . __CLASS__ );
|
80 |
-
}
|
81 |
-
//Handle the actual action
|
82 |
-
add_action( $this->action, array( $this, 'launch' ), (int) $this->priority, (int) $this->argument_count );
|
83 |
-
|
84 |
-
add_action( "admin_post_wp_async_$this->action", array( $this, 'handle_postback' ) );
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Add the shutdown action for launching the real postback if we don't
|
89 |
-
* get an exception thrown by prepare_data().
|
90 |
-
*
|
91 |
-
* @uses func_get_args() To grab any arguments passed by the action
|
92 |
-
*/
|
93 |
-
public function launch() {
|
94 |
-
$data = func_get_args();
|
95 |
-
try {
|
96 |
-
$data = $this->prepare_data( $data );
|
97 |
-
} catch ( Exception $e ) {
|
98 |
-
return;
|
99 |
-
}
|
100 |
-
|
101 |
-
$data['action'] = "wp_async_$this->action";
|
102 |
-
$data['_nonce'] = $this->create_async_nonce();
|
103 |
-
|
104 |
-
$this->_body_data = $data;
|
105 |
-
|
106 |
-
if ( ! has_action( 'shutdown', array( $this, 'launch_on_shutdown' ) ) ) {
|
107 |
-
add_action( 'shutdown', array( $this, 'launch_on_shutdown' ) );
|
108 |
-
}
|
109 |
-
|
110 |
-
//If we have image metadata return it
|
111 |
-
if ( ! empty( $data['metadata'] ) ) {
|
112 |
-
return $data['metadata'];
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* Launch the request on the WordPress shutdown hook
|
118 |
-
*
|
119 |
-
* On VIP we got into data races due to the postback sometimes completing
|
120 |
-
* faster than the data could propogate to the database server cluster.
|
121 |
-
* This made WordPress get empty data sets from the database without
|
122 |
-
* failing. On their advice, we're moving the actual firing of the async
|
123 |
-
* postback to the shutdown hook. Supposedly that will ensure that the
|
124 |
-
* data at least has time to get into the object cache.
|
125 |
-
*
|
126 |
-
* @uses $_COOKIE To send a cookie header for async postback
|
127 |
-
* @uses apply_filters()
|
128 |
-
* @uses admin_url()
|
129 |
-
* @uses wp_remote_post()
|
130 |
-
*/
|
131 |
-
public function launch_on_shutdown() {
|
132 |
-
if ( ! empty( $this->_body_data ) ) {
|
133 |
-
$cookies = array();
|
134 |
-
foreach ( $_COOKIE as $name => $value ) {
|
135 |
-
$cookies[] = "$name=" . urlencode( is_array( $value ) ? serialize( $value ) : $value );
|
136 |
-
}
|
137 |
-
|
138 |
-
//@todo: We've set sslverify to false
|
139 |
-
$request_args = array(
|
140 |
-
'timeout' => 10,
|
141 |
-
'blocking' => false,
|
142 |
-
'sslverify' => false,
|
143 |
-
'body' => $this->_body_data,
|
144 |
-
'headers' => array(
|
145 |
-
'cookie' => implode( '; ', $cookies ),
|
146 |
-
),
|
147 |
-
);
|
148 |
-
|
149 |
-
$url = admin_url( 'admin-post.php' );
|
150 |
-
|
151 |
-
wp_remote_post( $url, $request_args );
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
/**
|
156 |
-
* Verify the postback is valid, then fire any scheduled events.
|
157 |
-
*
|
158 |
-
* @uses $_POST['_nonce']
|
159 |
-
* @uses is_user_logged_in()
|
160 |
-
* @uses add_filter()
|
161 |
-
* @uses wp_die()
|
162 |
-
*/
|
163 |
-
public function handle_postback() {
|
164 |
-
if ( isset( $_POST['_nonce'] ) && $this->verify_async_nonce( $_POST['_nonce'] ) ) {
|
165 |
-
$this->run_action();
|
166 |
-
}
|
167 |
-
|
168 |
-
add_filter( 'wp_die_handler', array( $this, 'handle_die' ) );
|
169 |
-
wp_die();
|
170 |
-
}
|
171 |
-
|
172 |
-
/**
|
173 |
-
* Handle Die
|
174 |
-
*/
|
175 |
-
function handle_die() {
|
176 |
-
die();
|
177 |
-
}
|
178 |
-
|
179 |
-
/**
|
180 |
-
* Create a random, one time use token.
|
181 |
-
*
|
182 |
-
* Based entirely on wp_create_nonce() but does not tie the nonce to the
|
183 |
-
* current logged-in user.
|
184 |
-
*
|
185 |
-
* @uses wp_nonce_tick()
|
186 |
-
* @uses wp_hash()
|
187 |
-
*
|
188 |
-
* @return string The one-time use token
|
189 |
-
*/
|
190 |
-
protected function create_async_nonce() {
|
191 |
-
$action = $this->get_nonce_action();
|
192 |
-
$i = wp_nonce_tick();
|
193 |
-
|
194 |
-
return substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 );
|
195 |
-
}
|
196 |
-
|
197 |
-
/**
|
198 |
-
* Verify that the correct nonce was used within the time limit.
|
199 |
-
*
|
200 |
-
* @uses wp_nonce_tick()
|
201 |
-
* @uses wp_hash()
|
202 |
-
*
|
203 |
-
* @param string $nonce Nonce to be verified
|
204 |
-
*
|
205 |
-
* @return bool Whether the nonce check passed or failed
|
206 |
-
*/
|
207 |
-
protected function verify_async_nonce( $nonce ) {
|
208 |
-
$action = $this->get_nonce_action();
|
209 |
-
$i = wp_nonce_tick();
|
210 |
-
|
211 |
-
// Nonce generated 0-12 hours ago
|
212 |
-
if ( substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {
|
213 |
-
return 1;
|
214 |
-
}
|
215 |
-
|
216 |
-
// Nonce generated 12-24 hours ago
|
217 |
-
if ( substr( wp_hash( ( $i - 1 ) . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {
|
218 |
-
return 2;
|
219 |
-
}
|
220 |
-
|
221 |
-
// Invalid nonce
|
222 |
-
return false;
|
223 |
-
}
|
224 |
-
|
225 |
-
/**
|
226 |
-
* Get a nonce action based on the $action property of the class
|
227 |
-
*
|
228 |
-
* @return string The nonce action for the current instance
|
229 |
-
*/
|
230 |
-
protected function get_nonce_action() {
|
231 |
-
$action = $this->action;
|
232 |
-
if ( substr( $action, 0, 7 ) === 'nopriv_' ) {
|
233 |
-
$action = substr( $action, 7 );
|
234 |
-
}
|
235 |
-
$action = "wp_async_$action";
|
236 |
-
|
237 |
-
return $action;
|
238 |
-
}
|
239 |
-
|
240 |
-
/**
|
241 |
-
* Prepare any data to be passed to the asynchronous postback
|
242 |
-
*
|
243 |
-
* The array this function receives will be a numerically keyed array from
|
244 |
-
* func_get_args(). It is expected that you will return an associative array
|
245 |
-
* so that the $_POST values used in the asynchronous call will make sense.
|
246 |
-
*
|
247 |
-
* The array you send back may or may not have anything to do with the data
|
248 |
-
* passed into this method. It all depends on the implementation details and
|
249 |
-
* what data is needed in the asynchronous postback.
|
250 |
-
*
|
251 |
-
* Do not set values for 'action' or '_nonce', as those will get overwritten
|
252 |
-
* later in launch().
|
253 |
-
*
|
254 |
-
* @throws Exception If the postback should not occur for any reason
|
255 |
-
*
|
256 |
-
* @param array $data The raw data received by the launch method
|
257 |
-
*
|
258 |
-
* @return array The prepared data
|
259 |
-
*/
|
260 |
-
abstract protected function prepare_data( $data );
|
261 |
-
|
262 |
-
/**
|
263 |
-
* Run the do_action function for the asynchronous postback.
|
264 |
-
*
|
265 |
-
* This method needs to fetch and sanitize any and all data from the $_POST
|
266 |
-
* superglobal and provide them to the do_action call.
|
267 |
-
*
|
268 |
-
* The action should be constructed as "wp_async_task_$this->action"
|
269 |
-
*/
|
270 |
-
abstract protected function run_action();
|
271 |
-
|
272 |
-
}
|
273 |
-
|
274 |
-
}
|
275 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -1,13 +1,13 @@
|
|
1 |
=== Smush Image Compression and Optimization ===
|
2 |
Plugin Name: Smush Image Compression and Optimization
|
3 |
-
Version: 2.7.
|
4 |
Author: WPMU DEV
|
5 |
Author URI: https://premium.wpmudev.org/
|
6 |
Contributors: WPMUDEV, alexdunae
|
7 |
Tags: image, resize, optimize, optimise, compress, performance, optimisation, optimise JPG, photo, pictures, optimizer, Smush WordPress Compression, Smush.it
|
8 |
Requires at least: 4.6
|
9 |
Tested up to: 4.9.6
|
10 |
-
Stable tag: 2.7.
|
11 |
Requires PHP: 5.2.4
|
12 |
License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
13 |
|
@@ -164,9 +164,35 @@ Yahoo's Smush.it API is gone forever. So WPMU DEV built our own free API that is
|
|
164 |
|
165 |
== Changelog ==
|
166 |
|
167 |
-
= 2.7.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
|
169 |
-
* Added Privacy Policy content for Smush in Privacy Policy Guide
|
170 |
|
171 |
= 2.7.8 =
|
172 |
|
1 |
=== Smush Image Compression and Optimization ===
|
2 |
Plugin Name: Smush Image Compression and Optimization
|
3 |
+
Version: 2.7.9.1
|
4 |
Author: WPMU DEV
|
5 |
Author URI: https://premium.wpmudev.org/
|
6 |
Contributors: WPMUDEV, alexdunae
|
7 |
Tags: image, resize, optimize, optimise, compress, performance, optimisation, optimise JPG, photo, pictures, optimizer, Smush WordPress Compression, Smush.it
|
8 |
Requires at least: 4.6
|
9 |
Tested up to: 4.9.6
|
10 |
+
Stable tag: 2.7.9.1
|
11 |
Requires PHP: 5.2.4
|
12 |
License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
13 |
|
164 |
|
165 |
== Changelog ==
|
166 |
|
167 |
+
= 2.7.9.1 =
|
168 |
+
|
169 |
+
* Fixed: Conflict with front-end editors
|
170 |
+
|
171 |
+
= 2.7.9 =
|
172 |
+
|
173 |
+
* Update:
|
174 |
+
* Smush settings moved to separate top level page in dashboard ( Smush/Smush Pro )
|
175 |
+
* Added Privacy Policy content for Smush in Privacy Policy Guide
|
176 |
+
|
177 |
+
* Fixed:
|
178 |
+
* Conflict with plugin Download Manager, Embed any document, Getty
|
179 |
+
* Settings link incorrect for sub sites
|
180 |
+
* Don't load smush settings in front-end
|
181 |
+
* Increase php memory limit only if lesser than required
|
182 |
+
* Display a warning if custom table isn't created
|
183 |
+
* Attachment details not being displayed when uploading image in post edit screen
|
184 |
+
* Compatibility with WP Offload S3 latest version
|
185 |
+
* Directory Smush skips 1 image for every iteration of 50 images ( Free version )
|
186 |
+
* Nextgen Gallery Stats not updated properly ( Pro Version )
|
187 |
+
* Added instructions for Resize Image feature - It works independent of Auto Smush, If "Automatic Smush" is off and
|
188 |
+
"Resize my full size image" is kept on, the image would be resized
|
189 |
+
* Smush button doesn not appears in Media Modal window for Ultimate Branding
|
190 |
+
* NextGen Integration: Smush stats not updated after image deletion
|
191 |
+
* Warning/Error for settings on initial setup
|
192 |
+
|
193 |
+
* Integrations:
|
194 |
+
* Updated WP Offload S3 integration to smush images with Cloudfront enabled
|
195 |
|
|
|
196 |
|
197 |
= 2.7.8 =
|
198 |
|
uninstall.php
CHANGED
@@ -47,7 +47,12 @@ $smushit_keys = array(
|
|
47 |
'networkwide',
|
48 |
'dir_path',
|
49 |
'scan',
|
50 |
-
'last_settings'
|
|
|
|
|
|
|
|
|
|
|
51 |
);
|
52 |
|
53 |
//Cache Keys
|
47 |
'networkwide',
|
48 |
'dir_path',
|
49 |
'scan',
|
50 |
+
'last_settings',
|
51 |
+
's3',
|
52 |
+
'smush_option',
|
53 |
+
'smush-directory-path-hash-updated',
|
54 |
+
'smush_global_stats',
|
55 |
+
'skip-smush-setup'
|
56 |
);
|
57 |
|
58 |
//Cache Keys
|
wp-smush.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
-
Plugin Name:
|
4 |
Plugin URI: http://wordpress.org/extend/plugins/wp-smushit/
|
5 |
Description: Reduce image file sizes, improve performance and boost your SEO using the free <a href="https://premium.wpmudev.org/">WPMU DEV</a> WordPress Smush API.
|
6 |
Author: WPMU DEV
|
7 |
-
Version: 2.7.
|
8 |
Author URI: https://premium.wpmudev.org/
|
9 |
Text Domain: wp-smushit
|
10 |
*/
|
@@ -35,7 +35,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
35 |
* Constants
|
36 |
*/
|
37 |
$prefix = 'WP_SMUSH_';
|
38 |
-
$version = '2.7.
|
39 |
|
40 |
//Deactivate the .org version, if pro version is active
|
41 |
add_action( 'admin_init', 'deactivate_smush_org' );
|
@@ -53,7 +53,7 @@ if ( ! function_exists( 'deactivate_smush_org' ) ) {
|
|
53 |
/**
|
54 |
* Set the default timeout for API request and AJAX timeout
|
55 |
*/
|
56 |
-
$timeout = apply_filters( 'WP_SMUSH_API_TIMEOUT',
|
57 |
|
58 |
// To support smushing on staging sites like SiteGround staging where
|
59 |
// staging site urls are different but redirects to main site url.
|
@@ -130,7 +130,7 @@ if ( ! function_exists( 'wp_smush_rating_message' ) ) {
|
|
130 |
*/
|
131 |
if ( ! function_exists( 'wp_smush_email_message' ) ) {
|
132 |
function wp_smush_email_message( $message ) {
|
133 |
-
$message = "You're awesome for installing %s! Site speed isn't all image optimization though, so we've collected all the best speed resources we know in a single email - just for users of
|
134 |
|
135 |
return $message;
|
136 |
}
|
@@ -194,7 +194,8 @@ if ( is_admin() ) {
|
|
194 |
'name' => 'WP Smush Pro',
|
195 |
'screens' => array(
|
196 |
'upload',
|
197 |
-
'
|
|
|
198 |
)
|
199 |
);
|
200 |
}
|
@@ -206,9 +207,10 @@ add_action( 'admin_notices', 'smush_deactivated' );
|
|
206 |
//Display a admin Notice about plugin deactivation
|
207 |
if ( ! function_exists( 'smush_deactivated' ) ) {
|
208 |
function smush_deactivated() {
|
209 |
-
|
|
|
210 |
<div class="updated">
|
211 |
-
<p><?php esc_html_e( '
|
212 |
</div> <?php
|
213 |
delete_site_option( 'smush_deactivated' );
|
214 |
}
|
@@ -296,4 +298,25 @@ if ( ! function_exists( 'smush_i18n' ) ) {
|
|
296 |
}
|
297 |
}
|
298 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
register_activation_hook( __FILE__, 'smush_activated' );
|
1 |
<?php
|
2 |
/*
|
3 |
+
Plugin Name: Smush
|
4 |
Plugin URI: http://wordpress.org/extend/plugins/wp-smushit/
|
5 |
Description: Reduce image file sizes, improve performance and boost your SEO using the free <a href="https://premium.wpmudev.org/">WPMU DEV</a> WordPress Smush API.
|
6 |
Author: WPMU DEV
|
7 |
+
Version: 2.7.9.1
|
8 |
Author URI: https://premium.wpmudev.org/
|
9 |
Text Domain: wp-smushit
|
10 |
*/
|
35 |
* Constants
|
36 |
*/
|
37 |
$prefix = 'WP_SMUSH_';
|
38 |
+
$version = '2.7.9.1';
|
39 |
|
40 |
//Deactivate the .org version, if pro version is active
|
41 |
add_action( 'admin_init', 'deactivate_smush_org' );
|
53 |
/**
|
54 |
* Set the default timeout for API request and AJAX timeout
|
55 |
*/
|
56 |
+
$timeout = apply_filters( 'WP_SMUSH_API_TIMEOUT', 150 );
|
57 |
|
58 |
// To support smushing on staging sites like SiteGround staging where
|
59 |
// staging site urls are different but redirects to main site url.
|
130 |
*/
|
131 |
if ( ! function_exists( 'wp_smush_email_message' ) ) {
|
132 |
function wp_smush_email_message( $message ) {
|
133 |
+
$message = "You're awesome for installing %s! Site speed isn't all image optimization though, so we've collected all the best speed resources we know in a single email - just for users of Smush!";
|
134 |
|
135 |
return $message;
|
136 |
}
|
194 |
'name' => 'WP Smush Pro',
|
195 |
'screens' => array(
|
196 |
'upload',
|
197 |
+
'toplevel_page_smush',
|
198 |
+
'toplevel_page_smush-network'
|
199 |
)
|
200 |
);
|
201 |
}
|
207 |
//Display a admin Notice about plugin deactivation
|
208 |
if ( ! function_exists( 'smush_deactivated' ) ) {
|
209 |
function smush_deactivated() {
|
210 |
+
//Display only in backend for administrators
|
211 |
+
if ( is_admin() && is_super_admin() && get_site_option( 'smush_deactivated' ) ) { ?>
|
212 |
<div class="updated">
|
213 |
+
<p><?php esc_html_e( 'Smush Free was deactivated. You have Smush Pro active!', 'wp-smushit' ); ?></p>
|
214 |
</div> <?php
|
215 |
delete_site_option( 'smush_deactivated' );
|
216 |
}
|
298 |
}
|
299 |
}
|
300 |
|
301 |
+
//Add Share UI Class
|
302 |
+
add_filter( 'admin_body_class', 'smush_body_classes' );
|
303 |
+
|
304 |
+
if ( ! function_exists( 'smush_body_classes' ) ) {
|
305 |
+
function smush_body_classes( $classes ) {
|
306 |
+
//Exit if function doesn't exists
|
307 |
+
if ( ! function_exists( 'get_current_screen' ) ) {
|
308 |
+
return $classes;
|
309 |
+
}
|
310 |
+
$current_screen = get_current_screen();
|
311 |
+
//If not on plugin page
|
312 |
+
if ( 'toplevel_page_smush' != $current_screen->id && 'toplevel_page_smush-network' != $current_screen->id ) {
|
313 |
+
return $classes;
|
314 |
+
}
|
315 |
+
$classes .= 'sui-2-1-0';
|
316 |
+
|
317 |
+
return $classes;
|
318 |
+
|
319 |
+
}
|
320 |
+
}
|
321 |
+
|
322 |
register_activation_hook( __FILE__, 'smush_activated' );
|