Photo Gallery by Envira – Responsive Image Gallery for WordPress - Version 1.5.5

Version Description

  • Added: Select Image sizes for Automatic Layout.
  • Fix: Some servers limit how many images can be inserted at a time.
  • Fix: Various minor bug fixes.
Download this release

Release Info

Developer chrisakelley
Plugin Icon 128x128 Photo Gallery by Envira – Responsive Image Gallery for WordPress
Version 1.5.5
Comparing to
See all releases

Code changes from version 1.5.4 to 1.5.5

Files changed (59) hide show
  1. assets/css/admin.css +598 -1
  2. assets/css/fancybox.css +1 -1
  3. assets/css/images/blank.gif +0 -0
  4. assets/css/images/envirabox_buttons.png +0 -0
  5. assets/css/images/envirabox_loading.gif +0 -0
  6. assets/css/images/envirabox_overlay.png +0 -0
  7. assets/css/images/envirabox_sprite.png +0 -0
  8. assets/css/images/holder.gif +0 -0
  9. assets/css/images/preloader.gif +0 -0
  10. assets/css/table.css +178 -1
  11. assets/fonts/envira.eot +0 -0
  12. assets/fonts/envira.svg +0 -0
  13. assets/fonts/envira.ttf +0 -0
  14. assets/fonts/envira.woff +0 -0
  15. assets/js/clipboard.js +0 -0
  16. assets/js/conditional-fields.js +302 -129
  17. assets/js/conditions.js +212 -0
  18. assets/js/envira.js +0 -0
  19. assets/js/lib/fancybox.js +1 -1
  20. assets/js/list.js +0 -0
  21. assets/js/media-edit.js +1 -1
  22. assets/js/media-insert.js +2 -1
  23. assets/js/metabox.js +10 -27
  24. assets/js/min/conditional-fields-min.js +8 -1
  25. assets/js/min/metabox-min.js +1 -1
  26. assets/scss/_fonts.scss +42 -0
  27. assets/scss/_mixins.scss +63 -0
  28. assets/scss/_vars.scss +34 -0
  29. assets/scss/addons.scss +597 -0
  30. assets/scss/admin.scss +678 -0
  31. assets/scss/editor.scss +42 -0
  32. assets/scss/envira.scss +1344 -0
  33. assets/scss/metabox.scss +1598 -0
  34. assets/scss/settings.scss +252 -0
  35. assets/scss/table.scss +181 -0
  36. envira-gallery-lite.php +21 -4
  37. includes/admin/addons.php +2 -2
  38. includes/admin/ajax.php +43 -66
  39. includes/admin/common.php +2 -10
  40. includes/admin/editor.php +1 -1
  41. includes/admin/media-view.php +4 -61
  42. includes/admin/media.php +1 -1
  43. includes/admin/metaboxes.php +65 -707
  44. includes/admin/partials/metabox-gallery-settings.php +1 -0
  45. includes/admin/partials/metabox-gallery-type.php +19 -57
  46. includes/admin/posttype.php +1 -1
  47. includes/admin/table.php +2 -9
  48. includes/global/Mobile_Detect.php +1458 -0
  49. includes/global/common.php +15 -12
  50. includes/global/posttype.php +1 -27
  51. includes/global/shortcode.php +49 -61
  52. languages/envira-gallery-es_ES.mo +0 -0
  53. languages/envira-gallery-es_ES.po +0 -0
  54. readme.txt +20 -15
  55. themes/base_dark/css/style.css +1 -0
  56. themes/base_dark/images/close@2x.png +0 -0
  57. themes/base_dark/images/left-nav.png +0 -0
  58. themes/base_dark/images/right-nav.png +0 -0
  59. themes/base_dark/scss/style.scss +400 -0
assets/css/admin.css CHANGED
@@ -1 +1,598 @@
1
- body.post-type-envira #wpcontent,body.post-type-envira_album #wpcontent{padding-left:0}body.post-type-envira .update-nag,body.post-type-envira_album .update-nag{margin-left:20px;margin-bottom:20px}body.post-type-envira .subheading,body.post-type-envira_album .subheading{background-color:#fff;height:45px;margin-left:-20px}@media (min-width: 600px) and (max-width: 767px){body.post-type-envira .subheading,body.post-type-envira_album .subheading{height:auto;padding-bottom:20px}}body.post-type-envira .subheading h1,body.post-type-envira_album .subheading h1{font-size:20px;font-weight:400;line-height:45px;margin:0 0 0 20px;padding-left:20px}body.post-type-envira div.wrap,body.post-type-envira_album div.wrap{margin:0}body.post-type-envira div.wrap>h1,body.post-type-envira div.wrap>h2,body.post-type-envira_album div.wrap>h1,body.post-type-envira_album div.wrap>h2{margin:0 0 20px 0;padding:15px 20px 10px 20px;background:#fff;font-weight:600;font-size:20px}body.post-type-envira div.wrap>h1 a.page-title-action:hover,body.post-type-envira div.wrap>h2 a.page-title-action:hover,body.post-type-envira_album div.wrap>h1 a.page-title-action:hover,body.post-type-envira_album div.wrap>h2 a.page-title-action:hover{background:#95dc5e;border-color:#95dc5e;color:#fff}body.post-type-envira div.wrap>h1 span.subtitle,body.post-type-envira div.wrap>h2 span.subtitle,body.post-type-envira_album div.wrap>h1 span.subtitle,body.post-type-envira_album div.wrap>h2 span.subtitle{float:right}body.post-type-envira div.wrap .envira-tab,body.post-type-envira_album div.wrap .envira-tab{display:none}body.post-type-envira div.wrap .envira-tab.envira-active,body.post-type-envira_album div.wrap .envira-tab.envira-active{display:block}body.post-type-envira div.wrap div.envira-code,body.post-type-envira_album div.wrap div.envira-code{position:relative;margin:0 0 10px 0}body.post-type-envira div.wrap div.envira-code:after,body.post-type-envira_album div.wrap div.envira-code:after{content:"";display:table;clear:both}body.post-type-envira div.wrap div.envira-code code,body.post-type-envira_album div.wrap div.envira-code code{display:block;font-size:11px;padding:5px 20px 5px 5px}body.post-type-envira div.wrap div.envira-code a.envira-clipboard,body.post-type-envira_album div.wrap div.envira-code a.envira-clipboard{position:absolute;top:5px;right:5px;color:#23282d}body.post-type-envira div.wrap div.envira-code a.envira-clipboard span,body.post-type-envira_album div.wrap div.envira-code a.envira-clipboard span{display:block;text-indent:-9999px}body.post-type-envira .button,body.post-type-envira_album .button{-webkit-border-radius:2px;-moz-border-radius:2px;-o-border-radius:2px;border-radius:2px;padding:0 16px 1px;height:33px;line-height:30px;text-decoration:none;text-shadow:none;font-weight:600;-webkit-box-shadow:none;box-shadow:none}body.post-type-envira .button.button-small,body.post-type-envira_album .button.button-small{padding:0 8px 1px;line-height:22px;height:24px}body.post-type-envira .button.button-x-large,body.post-type-envira_album .button.button-x-large{padding:0 32px 1px;line-height:48px;height:50px;font-size:18px;text-transform:uppercase}@media (min-width: 600px) and (max-width: 767px){body.post-type-envira .button,body.post-type-envira_album .button{margin-top:10px}}body.post-type-envira .button.show-settings,body.post-type-envira_album .button.show-settings{height:auto}body.post-type-envira .button.button-primary,body.post-type-envira_album .button.button-primary{background:#7cc048;border-color:#7cc048;-webkit-box-shadow:none;box-shadow:none;color:#fff}body.post-type-envira .button.button-primary:hover,body.post-type-envira_album .button.button-primary:hover{background:#95dc5e;border-color:#95dc5e;color:#fff}body.post-type-envira .button.button-danger,body.post-type-envira_album .button.button-danger{background:#e02626;border-color:#e02626;-webkit-box-shadow:none;box-shadow:none;color:#fff}body.post-type-envira .button.button-danger:hover,body.post-type-envira_album .button.button-danger:hover{background:#f85959;border-color:#f85959;color:#fff}body.post-type-envira div#TB_window div.wrap,body.post-type-envira_album div#TB_window div.wrap{margin:10px 20px 0 2px}#envira-header-temp{position:relative}#envira-header{background-color:#7cc048;height:120px}@media (max-width: 599px){#envira-header{padding-top:46px}}#envira-header h1.envira-logo{margin:0;line-height:120px;margin-left:20px}#envira-header h1.envira-logo img{max-width:339px;height:auto;width:90%}@media (min-width: 600px) and (max-width: 767px){#envira-header h1.envira-logo img{width:90%}}@media (max-width: 599px){#wpbody{padding-top:0}}.envira-notice{position:relative;margin:0 0 20px 0;padding:20px;-webkit-border-radius:2px;-moz-border-radius:2px;-o-border-radius:2px;border-radius:2px}.envira-notice p.envira-intro{border:none !important;margin:0 0 20px 0 !important;padding:0 !important}.envira-notice .notice-dismiss{top:10px;right:10px;color:#fff}.envira-notice .notice-dismiss:before{color:#fff;width:26px;height:26px;font-size:22px}.envira-notice.success{background:#7cc048;color:#fff;border:none}.envira-notice.success .button.button-primary{background-color:#95dc5e;border-color:#95dc5e}.envira-notice.warning{background:#fcf8e3;border:1px solid #faebcc}.envira-notice.warning .notice-dismiss{color:#000}.envira-notice.warning .notice-dismiss:before{color:#000}.envira-notice.error{border-top:1px solid #dc3232;border-right:1px solid #dc3232;border-bottom:1px solid #dc3232}body.post-type-envira.edit-php div.wrap,body.post-type-envira.post-new-php div.wrap,body.post-type-envira.post-php div.wrap,body.post-type-envira_album.edit-php div.wrap,body.post-type-envira_album.post-new-php div.wrap,body.post-type-envira_album.post-php div.wrap{margin:0}body.post-type-envira.edit-php div.wrap>div.error,body.post-type-envira.edit-php div.wrap>div.notice,body.post-type-envira.edit-php div.wrap>div.updated,body.post-type-envira.post-new-php div.wrap>div.error,body.post-type-envira.post-new-php div.wrap>div.notice,body.post-type-envira.post-new-php div.wrap>div.updated,body.post-type-envira.post-php div.wrap>div.error,body.post-type-envira.post-php div.wrap>div.notice,body.post-type-envira.post-php div.wrap>div.updated,body.post-type-envira_album.edit-php div.wrap>div.error,body.post-type-envira_album.edit-php div.wrap>div.notice,body.post-type-envira_album.edit-php div.wrap>div.updated,body.post-type-envira_album.post-new-php div.wrap>div.error,body.post-type-envira_album.post-new-php div.wrap>div.notice,body.post-type-envira_album.post-new-php div.wrap>div.updated,body.post-type-envira_album.post-php div.wrap>div.error,body.post-type-envira_album.post-php div.wrap>div.notice,body.post-type-envira_album.post-php div.wrap>div.updated{margin-left:20px;margin-right:20px}body.post-type-envira.edit-tags-php div.wrap,body.post-type-envira.taxonomy-envira-tag div.wrap{margin:0}body.post-type-envira.edit-tags-php div.wrap>div.error,body.post-type-envira.edit-tags-php div.wrap>div.notice,body.post-type-envira.edit-tags-php div.wrap>div.updated,body.post-type-envira.taxonomy-envira-tag div.wrap>div.error,body.post-type-envira.taxonomy-envira-tag div.wrap>div.notice,body.post-type-envira.taxonomy-envira-tag div.wrap>div.updated{margin-left:20px;margin-right:20px}body.post-type-envira.edit-tags-php div.wrap form.search-form,body.post-type-envira.edit-tags-php div.wrap form#edittag,body.post-type-envira.edit-tags-php div.wrap #col-container,body.post-type-envira.taxonomy-envira-tag div.wrap form.search-form,body.post-type-envira.taxonomy-envira-tag div.wrap form#edittag,body.post-type-envira.taxonomy-envira-tag div.wrap #col-container{margin:0 20px}body.post-type-envira.edit-tags-php div.wrap .button,body.post-type-envira.taxonomy-envira-tag div.wrap .button{height:28px;line-height:26px}body.post-type-envira div.wrap{margin:0 20px}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor div.envira-gallery-error{position:absolute;top:50px;left:0;right:300px}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment{width:20%}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail img{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0.2}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail strong{position:absolute;z-index:2;height:50%;top:0;left:0;right:0;padding:10px;text-align:center;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;background:rgba(0,0,0,0.07);text-shadow:1px 1px #ddd}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail strong span{display:block;position:absolute;bottom:10px;left:0;right:0;padding:0 10px;text-align:center}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail code{position:absolute;z-index:2;height:50%;bottom:0;left:0;right:0;padding:10px;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle;text-shadow:1px 1px #ddd}.media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor div.media-sidebar div.settings .name{text-align:left}@media screen and (max-width: 640px){body.post-type-envira div.wrap h1,body.post-type-envira_album div.wrap h1{padding-bottom:40px}body.post-type-envira div.wrap h1 span.subtitle,body.post-type-envira_album div.wrap h1 span.subtitle{clear:both;width:100%;padding:0}}@media screen and (max-width: 340px){body.post-type-envira div.wrap h1,body.post-type-envira_album div.wrap h1{text-align:center}body.post-type-envira div.wrap h1 a.page-title-action,body.post-type-envira_album div.wrap h1 a.page-title-action{display:block;text-align:center;margin:10px 0 0 0}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ admin.css loads on all Envira Administration Screens:
3
+ - WP_List_Tables
4
+ - Add New
5
+ - Albums
6
+ - Settings
7
+ - NextGEN Import
8
+
9
+ Any styles that will be used by all of the above (or are useful to be included
10
+ for future use) should be added to this file:
11
+ - Header and Logo
12
+ - WordPress Red Button
13
+ ========================================================================== */
14
+ /* ==========================================================================
15
+ Imports
16
+ ========================================================================== */
17
+ /* ==========================================================================
18
+ Variables SCSS
19
+ ========================================================================== */
20
+ /* ==========================================================================
21
+ Mixins
22
+ ========================================================================== */
23
+ /**
24
+ * Media Query
25
+ */
26
+ /**
27
+ * Border-Radius
28
+ */
29
+ body.post-type-envira,
30
+ body.post-type-envira_album {
31
+ /**
32
+ * Subheading
33
+ */
34
+ /**
35
+ * Wrapper
36
+ */
37
+ /* ==========================================================================
38
+ Button Styles
39
+ ========================================================================== */
40
+ /* ==========================================================================
41
+ Thickbox (used for choosing a Default Gallery/Album)
42
+ ========================================================================== */ }
43
+ body.post-type-envira #wpcontent,
44
+ body.post-type-envira_album #wpcontent {
45
+ padding-left: 0; }
46
+ body.post-type-envira .update-nag,
47
+ body.post-type-envira_album .update-nag {
48
+ margin-left: 20px;
49
+ margin-bottom: 20px; }
50
+ body.post-type-envira .subheading,
51
+ body.post-type-envira_album .subheading {
52
+ background-color: #ffffff;
53
+ height: 45px;
54
+ margin-left: -20px; }
55
+ @media (min-width: 600px) and (max-width: 767px) {
56
+ body.post-type-envira .subheading,
57
+ body.post-type-envira_album .subheading {
58
+ height: auto;
59
+ padding-bottom: 20px; } }
60
+ body.post-type-envira .subheading h1,
61
+ body.post-type-envira_album .subheading h1 {
62
+ font-size: 20px;
63
+ font-weight: 400;
64
+ line-height: 45px;
65
+ margin: 0 0 0 20px;
66
+ padding-left: 20px; }
67
+ body.post-type-envira div.wrap,
68
+ body.post-type-envira_album div.wrap {
69
+ margin: 0;
70
+ /**
71
+ * Page Title Action (i.e. Add New)
72
+ */
73
+ /**
74
+ * Screen Title
75
+ * - h1 used from WordPress 4.3+
76
+ * - h2 used in WordPress 4.2-
77
+ */
78
+ /**
79
+ * Tab Panels
80
+ * - By default, they're hidden and the .envira-active class displays them
81
+ */
82
+ /**
83
+ * Code Snippets
84
+ */ }
85
+ body.post-type-envira div.wrap a.page-title-action,
86
+ body.post-type-envira_album div.wrap a.page-title-action {
87
+ position: relative;
88
+ top: -55px;
89
+ left: 185px;
90
+ /* display: none; */
91
+ /* Trying To Prevent The "Shift" Upload Page Load Before JS can move the button */
92
+ /* margin-left: 10px; */
93
+ /* Change WordPress 4.7 */ }
94
+ body.post-type-envira div.wrap a.page-title-action:hover,
95
+ body.post-type-envira_album div.wrap a.page-title-action:hover {
96
+ background: #95dc5e;
97
+ border-color: #95dc5e;
98
+ color: #ffffff; }
99
+ body.post-type-envira div.wrap > h1,
100
+ body.post-type-envira div.wrap > h2,
101
+ body.post-type-envira_album div.wrap > h1,
102
+ body.post-type-envira_album div.wrap > h2 {
103
+ margin: 0 0 20px 0;
104
+ padding: 15px 20px 10px 20px;
105
+ background: #ffffff;
106
+ font-weight: 600;
107
+ font-size: 20px;
108
+ width: 100%;
109
+ /**
110
+ * Page Title Action (i.e. Add New)
111
+ */
112
+ /**
113
+ * Subtitle (search results title)
114
+ */ }
115
+ body.post-type-envira div.wrap > h1 a.page-title-action,
116
+ body.post-type-envira div.wrap > h2 a.page-title-action,
117
+ body.post-type-envira_album div.wrap > h1 a.page-title-action,
118
+ body.post-type-envira_album div.wrap > h2 a.page-title-action {
119
+ top: -3px;
120
+ left: auto;
121
+ /* display: none; */
122
+ /* Trying To Prevent The "Shift" Upload Page Load Before JS can move the button */
123
+ /* margin-left: 10px; */
124
+ /* Change WordPress 4.7 */ }
125
+ body.post-type-envira div.wrap > h1 a.page-title-action:hover,
126
+ body.post-type-envira div.wrap > h2 a.page-title-action:hover,
127
+ body.post-type-envira_album div.wrap > h1 a.page-title-action:hover,
128
+ body.post-type-envira_album div.wrap > h2 a.page-title-action:hover {
129
+ background: #95dc5e;
130
+ border-color: #95dc5e;
131
+ color: #ffffff; }
132
+ body.post-type-envira div.wrap > h1 span.subtitle,
133
+ body.post-type-envira div.wrap > h2 span.subtitle,
134
+ body.post-type-envira_album div.wrap > h1 span.subtitle,
135
+ body.post-type-envira_album div.wrap > h2 span.subtitle {
136
+ float: right; }
137
+ body.post-type-envira div.wrap .envira-tab,
138
+ body.post-type-envira_album div.wrap .envira-tab {
139
+ display: none;
140
+ /**
141
+ * Active Tab
142
+ */ }
143
+ body.post-type-envira div.wrap .envira-tab.envira-active,
144
+ body.post-type-envira_album div.wrap .envira-tab.envira-active {
145
+ display: block; }
146
+ body.post-type-envira div.wrap div.envira-code,
147
+ body.post-type-envira_album div.wrap div.envira-code {
148
+ position: relative;
149
+ margin: 0 0 10px 0;
150
+ /**
151
+ * Clearfix
152
+ */
153
+ /**
154
+ * Copy to Clipboard
155
+ */ }
156
+ body.post-type-envira div.wrap div.envira-code:after,
157
+ body.post-type-envira_album div.wrap div.envira-code:after {
158
+ content: "";
159
+ display: table;
160
+ clear: both; }
161
+ body.post-type-envira div.wrap div.envira-code code,
162
+ body.post-type-envira_album div.wrap div.envira-code code {
163
+ display: block;
164
+ font-size: 11px;
165
+ padding: 5px 20px 5px 5px; }
166
+ body.post-type-envira div.wrap div.envira-code a.envira-clipboard,
167
+ body.post-type-envira_album div.wrap div.envira-code a.envira-clipboard {
168
+ position: absolute;
169
+ top: 5px;
170
+ right: 5px;
171
+ color: #23282d; }
172
+ body.post-type-envira div.wrap div.envira-code a.envira-clipboard span,
173
+ body.post-type-envira_album div.wrap div.envira-code a.envira-clipboard span {
174
+ display: block;
175
+ text-indent: -9999px; }
176
+ body.post-type-envira .button,
177
+ body.post-type-envira_album .button {
178
+ -webkit-border-radius: 2px;
179
+ -moz-border-radius: 2px;
180
+ -o-border-radius: 2px;
181
+ border-radius: 2px;
182
+ padding: 0 16px 1px;
183
+ height: 33px;
184
+ line-height: 30px;
185
+ text-decoration: none;
186
+ text-shadow: none;
187
+ font-weight: 600;
188
+ -webkit-box-shadow: none;
189
+ box-shadow: none;
190
+ /**
191
+ * Small
192
+ */
193
+ /**
194
+ * Extra Large
195
+ * (.button-large is used on publish actions in WordPress, so we don't want to affect that)
196
+ */
197
+ /**
198
+ * Screen Options
199
+ * - Don't set a height
200
+ */
201
+ /**
202
+ * Green Button
203
+ * - Replaces WordPress' default primary button style
204
+ */
205
+ /**
206
+ * Red Button
207
+ */ }
208
+ body.post-type-envira .button.button-small,
209
+ body.post-type-envira_album .button.button-small {
210
+ padding: 0 8px 1px;
211
+ line-height: 22px;
212
+ height: 24px; }
213
+ body.post-type-envira .button.button-x-large,
214
+ body.post-type-envira_album .button.button-x-large {
215
+ padding: 0 32px 1px;
216
+ line-height: 48px;
217
+ height: 50px;
218
+ font-size: 18px;
219
+ text-transform: uppercase; }
220
+ @media (min-width: 600px) and (max-width: 767px) {
221
+ body.post-type-envira .button,
222
+ body.post-type-envira_album .button {
223
+ margin-top: 10px; } }
224
+ body.post-type-envira .button.show-settings,
225
+ body.post-type-envira_album .button.show-settings {
226
+ height: auto; }
227
+ body.post-type-envira .button.button-primary,
228
+ body.post-type-envira_album .button.button-primary {
229
+ background: #7cc048;
230
+ border-color: #7cc048;
231
+ -webkit-box-shadow: none;
232
+ box-shadow: none;
233
+ color: #ffffff; }
234
+ body.post-type-envira .button.button-primary:hover,
235
+ body.post-type-envira_album .button.button-primary:hover {
236
+ background: #95dc5e;
237
+ border-color: #95dc5e;
238
+ color: #ffffff; }
239
+ body.post-type-envira .button.button-danger,
240
+ body.post-type-envira_album .button.button-danger {
241
+ background: #e02626;
242
+ border-color: #e02626;
243
+ -webkit-box-shadow: none;
244
+ box-shadow: none;
245
+ color: #ffffff; }
246
+ body.post-type-envira .button.button-danger:hover,
247
+ body.post-type-envira_album .button.button-danger:hover {
248
+ background: #f85959;
249
+ border-color: #f85959;
250
+ color: #ffffff; }
251
+ body.post-type-envira div#TB_window div.wrap,
252
+ body.post-type-envira_album div#TB_window div.wrap {
253
+ margin: 10px 20px 0 2px; }
254
+
255
+ /* ==========================================================================
256
+ Header
257
+ ========================================================================== */
258
+ #envira-header-temp {
259
+ position: relative; }
260
+
261
+ #envira-header {
262
+ background-color: #7cc048;
263
+ height: 120px; }
264
+ @media (max-width: 599px) {
265
+ #envira-header {
266
+ padding-top: 46px; } }
267
+ #envira-header h1.envira-logo {
268
+ margin: 0;
269
+ line-height: 120px;
270
+ margin-left: 20px; }
271
+ #envira-header h1.envira-logo img {
272
+ /**
273
+ * Image width and height (image is 2x so this ensures it displays correctly)
274
+ */
275
+ max-width: 339px;
276
+ height: auto;
277
+ width: 90%;
278
+ /**
279
+ * Responsive - ensure the logo doesn't exceed the header dimensions
280
+ */ }
281
+ @media (min-width: 600px) and (max-width: 767px) {
282
+ #envira-header h1.envira-logo img {
283
+ width: 90%; } }
284
+
285
+ @media (max-width: 599px) {
286
+ #wpbody {
287
+ padding-top: 0; } }
288
+
289
+ body.post-type-envira_album div.wrap {
290
+ /**
291
+ * Page Title Action (i.e. Add New)
292
+ */ }
293
+ body.post-type-envira_album div.wrap a.page-title-action {
294
+ left: 180px !important; }
295
+ body.post-type-envira_album div.wrap > h1 a.page-title-action,
296
+ body.post-type-envira_album div.wrap > h2 a.page-title-action {
297
+ top: -3px !important;
298
+ left: auto !important; }
299
+
300
+ body.post-php.post-type-envira_album div.wrap {
301
+ /**
302
+ * Page Title Action (i.e. Add New)
303
+ */ }
304
+ body.post-php.post-type-envira_album div.wrap a.page-title-action {
305
+ left: 200px !important; }
306
+ body.post-php.post-type-envira_album div.wrap > h1 a.page-title-action,
307
+ body.post-php.post-type-envira_album div.wrap > h2 a.page-title-action {
308
+ top: -3px !important;
309
+ left: auto !important; }
310
+
311
+ body.post-php.post-type-envira div.wrap {
312
+ /**
313
+ * Page Title Action (i.e. Add New)
314
+ */ }
315
+ body.post-php.post-type-envira div.wrap a.page-title-action {
316
+ left: 215px !important; }
317
+ body.post-php.post-type-envira div.wrap > h1 a.page-title-action,
318
+ body.post-php.post-type-envira div.wrap > h2 a.page-title-action {
319
+ top: -3px !important;
320
+ left: auto !important; }
321
+
322
+ /* ==========================================================================
323
+ Inline Notices
324
+ - These are Envira-specific notices with custom styling for e.g. Instagram oAuth,
325
+ upgrade / upsells.
326
+ ========================================================================== */
327
+ .envira-notice {
328
+ position: relative;
329
+ margin: 0 0 20px 0;
330
+ padding: 20px;
331
+ -webkit-border-radius: 2px;
332
+ -moz-border-radius: 2px;
333
+ -o-border-radius: 2px;
334
+ border-radius: 2px;
335
+ /**
336
+ * Heading
337
+ */
338
+ /**
339
+ * Close Button
340
+ */
341
+ /**
342
+ * Success
343
+ */
344
+ /**
345
+ * Warning
346
+ */
347
+ /**
348
+ * Error
349
+ */ }
350
+ .envira-notice p.envira-intro {
351
+ border: none !important;
352
+ margin: 0 0 20px 0 !important;
353
+ padding: 0 !important; }
354
+ .envira-notice .notice-dismiss {
355
+ top: 10px;
356
+ right: 10px;
357
+ color: #ffffff; }
358
+ .envira-notice .notice-dismiss:before {
359
+ color: #ffffff;
360
+ width: 26px;
361
+ height: 26px;
362
+ font-size: 22px; }
363
+ .envira-notice.success {
364
+ background: #7cc048;
365
+ color: #ffffff;
366
+ border: none;
367
+ /**
368
+ * Button background color needs to be adjusted so it displays over the green background
369
+ * of the success message
370
+ */ }
371
+ .envira-notice.success .button.button-primary {
372
+ background-color: #95dc5e;
373
+ border-color: #95dc5e; }
374
+ .envira-notice.warning {
375
+ background: #fcf8e3;
376
+ border: 1px solid #faebcc; }
377
+ .envira-notice.warning .notice-dismiss {
378
+ color: #000000; }
379
+ .envira-notice.warning .notice-dismiss:before {
380
+ color: #000000; }
381
+ .envira-notice.error {
382
+ border-top: 1px solid #dc3232;
383
+ border-right: 1px solid #dc3232;
384
+ border-bottom: 1px solid #dc3232; }
385
+
386
+ /* ==========================================================================
387
+ Table, Add, Edit Screens
388
+ ========================================================================== */
389
+ body.post-type-envira.edit-php div.wrap,
390
+ body.post-type-envira.post-new-php div.wrap,
391
+ body.post-type-envira.post-php div.wrap,
392
+ body.post-type-envira_album.edit-php div.wrap,
393
+ body.post-type-envira_album.post-new-php div.wrap,
394
+ body.post-type-envira_album.post-php div.wrap {
395
+ /**
396
+ * Remove the margin on the wrapper
397
+ */
398
+ margin: 0;
399
+ /**
400
+ * Add margin to notices
401
+ */ }
402
+ body.post-type-envira.edit-php div.wrap > div.error,
403
+ body.post-type-envira.edit-php div.wrap > div.notice,
404
+ body.post-type-envira.edit-php div.wrap > div.updated,
405
+ body.post-type-envira.post-new-php div.wrap > div.error,
406
+ body.post-type-envira.post-new-php div.wrap > div.notice,
407
+ body.post-type-envira.post-new-php div.wrap > div.updated,
408
+ body.post-type-envira.post-php div.wrap > div.error,
409
+ body.post-type-envira.post-php div.wrap > div.notice,
410
+ body.post-type-envira.post-php div.wrap > div.updated,
411
+ body.post-type-envira_album.edit-php div.wrap > div.error,
412
+ body.post-type-envira_album.edit-php div.wrap > div.notice,
413
+ body.post-type-envira_album.edit-php div.wrap > div.updated,
414
+ body.post-type-envira_album.post-new-php div.wrap > div.error,
415
+ body.post-type-envira_album.post-new-php div.wrap > div.notice,
416
+ body.post-type-envira_album.post-new-php div.wrap > div.updated,
417
+ body.post-type-envira_album.post-php div.wrap > div.error,
418
+ body.post-type-envira_album.post-php div.wrap > div.notice,
419
+ body.post-type-envira_album.post-php div.wrap > div.updated {
420
+ margin-left: 20px;
421
+ margin-right: 20px; }
422
+
423
+ /* ==========================================================================
424
+ Taxonomy Screens
425
+ ========================================================================== */
426
+ body.post-type-envira.edit-tags-php div.wrap,
427
+ body.post-type-envira.taxonomy-envira-tag div.wrap {
428
+ margin: 0;
429
+ /**
430
+ * Add margin to notices
431
+ */
432
+ /**
433
+ * Reduce our global custom button sizes so they align with inputs
434
+ */ }
435
+ body.post-type-envira.edit-tags-php div.wrap > div.error,
436
+ body.post-type-envira.edit-tags-php div.wrap > div.notice,
437
+ body.post-type-envira.edit-tags-php div.wrap > div.updated,
438
+ body.post-type-envira.taxonomy-envira-tag div.wrap > div.error,
439
+ body.post-type-envira.taxonomy-envira-tag div.wrap > div.notice,
440
+ body.post-type-envira.taxonomy-envira-tag div.wrap > div.updated {
441
+ margin-left: 20px;
442
+ margin-right: 20px; }
443
+ body.post-type-envira.edit-tags-php div.wrap form.search-form,
444
+ body.post-type-envira.edit-tags-php div.wrap form#edittag,
445
+ body.post-type-envira.edit-tags-php div.wrap #col-container,
446
+ body.post-type-envira.taxonomy-envira-tag div.wrap form.search-form,
447
+ body.post-type-envira.taxonomy-envira-tag div.wrap form#edittag,
448
+ body.post-type-envira.taxonomy-envira-tag div.wrap #col-container {
449
+ /**
450
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
451
+ * and the content
452
+ */
453
+ margin: 0 20px; }
454
+ body.post-type-envira.edit-tags-php div.wrap .button,
455
+ body.post-type-envira.taxonomy-envira-tag div.wrap .button {
456
+ height: 28px;
457
+ line-height: 26px; }
458
+
459
+ /* ==========================================================================
460
+ Third Party Screens
461
+ ========================================================================== */
462
+ body.post-type-envira div.wrap {
463
+ /**
464
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
465
+ * and the content for any third party plugins which add sections / pages within Envira
466
+ */
467
+ margin: 0 20px; }
468
+
469
+ /* ==========================================================================
470
+ Gallery / Album Selection Media Modal
471
+ ========================================================================== */
472
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor {
473
+ /**
474
+ * Error
475
+ * - Position below the search bar
476
+ */
477
+ /**
478
+ * Grid
479
+ */
480
+ /**
481
+ * Sidebar
482
+ */ }
483
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor div.envira-gallery-error {
484
+ position: absolute;
485
+ top: 50px;
486
+ left: 0;
487
+ right: 300px; }
488
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment {
489
+ width: 20%; }
490
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail {
491
+ /**
492
+ * Thumbnail Image
493
+ */
494
+ /**
495
+ * Title
496
+ */
497
+ /**
498
+ * Shortcode
499
+ */ }
500
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail img {
501
+ position: absolute;
502
+ z-index: 1;
503
+ top: 0;
504
+ left: 0;
505
+ width: 100%;
506
+ height: 100%;
507
+ opacity: 0.2; }
508
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail strong {
509
+ position: absolute;
510
+ z-index: 2;
511
+ height: 50%;
512
+ top: 0;
513
+ left: 0;
514
+ right: 0;
515
+ padding: 10px;
516
+ text-align: center;
517
+ overflow: hidden;
518
+ -webkit-box-sizing: border-box;
519
+ -moz-box-sizing: border-box;
520
+ box-sizing: border-box;
521
+ vertical-align: bottom;
522
+ background: rgba(0, 0, 0, 0.07);
523
+ text-shadow: 1px 1px #ddd; }
524
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail strong span {
525
+ display: block;
526
+ position: absolute;
527
+ bottom: 10px;
528
+ left: 0;
529
+ right: 0;
530
+ padding: 0 10px;
531
+ text-align: center; }
532
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor ul.attachments li.attachment div.attachment-preview div.thumbnail code {
533
+ position: absolute;
534
+ z-index: 2;
535
+ height: 50%;
536
+ bottom: 0;
537
+ left: 0;
538
+ right: 0;
539
+ padding: 10px;
540
+ text-align: center;
541
+ -webkit-box-sizing: border-box;
542
+ -moz-box-sizing: border-box;
543
+ box-sizing: border-box;
544
+ vertical-align: middle;
545
+ text-shadow: 1px 1px #ddd; }
546
+ .media-modal .media-modal-content .media-frame-content .attachments-browser.envira-gallery-editor div.media-sidebar div.settings .name {
547
+ text-align: left; }
548
+
549
+ /* ==========================================================================
550
+ Responsive
551
+ ========================================================================== */
552
+ @media screen and (max-width: 640px) {
553
+ body.post-type-envira,
554
+ body.post-type-envira_album {
555
+ /**
556
+ * Wrapper
557
+ */ }
558
+ body.post-type-envira div.wrap,
559
+ body.post-type-envira_album div.wrap {
560
+ /**
561
+ * Screen Title
562
+ */ }
563
+ body.post-type-envira div.wrap h1,
564
+ body.post-type-envira_album div.wrap h1 {
565
+ /**
566
+ * Allow space for the "Search results for..." text to display, when searching
567
+ */
568
+ padding-bottom: 40px;
569
+ /**
570
+ * Subtitle (search results title)
571
+ */ }
572
+ body.post-type-envira div.wrap h1 span.subtitle,
573
+ body.post-type-envira_album div.wrap h1 span.subtitle {
574
+ clear: both;
575
+ width: 100%;
576
+ padding: 0; } }
577
+ @media screen and (max-width: 340px) {
578
+ body.post-type-envira,
579
+ body.post-type-envira_album {
580
+ /**
581
+ * Wrapper
582
+ */ }
583
+ body.post-type-envira div.wrap,
584
+ body.post-type-envira_album div.wrap {
585
+ /**
586
+ * Screen Title
587
+ */ }
588
+ body.post-type-envira div.wrap h1,
589
+ body.post-type-envira_album div.wrap h1 {
590
+ text-align: center;
591
+ /**
592
+ * Page Title Action (i.e. Add New)
593
+ */ }
594
+ body.post-type-envira div.wrap h1 a.page-title-action,
595
+ body.post-type-envira_album div.wrap h1 a.page-title-action {
596
+ display: block;
597
+ text-align: center;
598
+ margin: 10px 0 0 0; } }
assets/css/fancybox.css CHANGED
@@ -37,7 +37,7 @@
37
  z-index: 988010;
38
  display: none;
39
  background: url('images/envirabox_overlay.png');
40
- background-color: rgba(0,0,0,.9) !important;
41
  }
42
 
43
  #envirabox-tmp {
37
  z-index: 988010;
38
  display: none;
39
  background: url('images/envirabox_overlay.png');
40
+ background-color: rgba(0,0,0,.9); /* !important; */
41
  }
42
 
43
  #envirabox-tmp {
assets/css/images/blank.gif CHANGED
File without changes
assets/css/images/envirabox_buttons.png CHANGED
File without changes
assets/css/images/envirabox_loading.gif CHANGED
File without changes
assets/css/images/envirabox_overlay.png CHANGED
File without changes
assets/css/images/envirabox_sprite.png CHANGED
File without changes
assets/css/images/holder.gif CHANGED
File without changes
assets/css/images/preloader.gif CHANGED
File without changes
assets/css/table.css CHANGED
@@ -1 +1,178 @@
1
- body.post-type-envira ul.subsubsub,body.post-type-envira_album ul.subsubsub{margin:0 0 20px 0;padding-left:20px}body.post-type-envira form#posts-filter,body.post-type-envira_album form#posts-filter{margin:0 20px}body.post-type-envira form#posts-filter div.tablenav.top,body.post-type-envira_album form#posts-filter div.tablenav.top{margin:0 0 8px 0}body.post-type-envira form#posts-filter .button,body.post-type-envira_album form#posts-filter .button{height:28px;line-height:26px}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left{width:40%}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-date,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-date{display:none}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left div.inline-edit-group:last-child,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left div.inline-edit-group:last-child{display:none}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-center.inline-edit-categories,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-center.inline-edit-categories{display:none}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right{margin:30px 0 0 0}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right label.inline-edit-status.alignleft,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right label.inline-edit-status.alignleft{width:100%}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right,body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery{width:60%}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group,body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group{clear:none;float:left;width:50%}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group span.title,body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group span.title,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title{width:40%;padding-right:0.5em}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group input[type=number],body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group input[type=number],body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group input[type=number],body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group input[type=number]{width:60px;line-height:normal}body.post-type-envira #wpbody-content td.colspanchange p.submit.inline-edit-save,body.post-type-envira_album #wpbody-content td.colspanchange p.submit.inline-edit-save{margin-bottom:20px}@media screen and (max-width: 940px){body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-col-right,body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-col-right,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery{clear:both;width:100%}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-col-right .inline-edit-group,body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-col-right .inline-edit-group,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group{clear:both;float:left;width:100%}body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-col-right .inline-edit-group span.title,body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-col-right .inline-edit-group span.title,body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title{width:100%}body.post-type-envira p.search-box,body.post-type-envira_album p.search-box{width:94%}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ table.css loads on any Envira WP_List_Table Screen:
3
+ - Galleries
4
+ - Albums
5
+
6
+ Any styles that will be used by these list tables should be added to this
7
+ file:
8
+ - Quick Edit
9
+ ========================================================================== */
10
+ /* ==========================================================================
11
+ Imports
12
+ ========================================================================== */
13
+ /* ==========================================================================
14
+ Variables SCSS
15
+ ========================================================================== */
16
+ /* ==========================================================================
17
+ Mixins
18
+ ========================================================================== */
19
+ /**
20
+ * Media Query
21
+ */
22
+ /**
23
+ * Border-Radius
24
+ */
25
+ body.post-type-envira,
26
+ body.post-type-envira_album {
27
+ /* ==========================================================================
28
+ Post Filters
29
+ ========================================================================== */
30
+ /* ==========================================================================
31
+ Post Table Form
32
+ ========================================================================== */
33
+ /* ==========================================================================
34
+ Quick Edit
35
+ ========================================================================== */ }
36
+ body.post-type-envira ul.subsubsub,
37
+ body.post-type-envira_album ul.subsubsub {
38
+ /**
39
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
40
+ * and the content
41
+ */
42
+ margin: 0 0 20px 0;
43
+ padding-left: 20px; }
44
+ body.post-type-envira .column-image,
45
+ body.post-type-envira_album .column-image {
46
+ width: 85px !important; }
47
+ body.post-type-envira form#posts-filter,
48
+ body.post-type-envira_album form#posts-filter {
49
+ /**
50
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
51
+ * and the content
52
+ */
53
+ margin: 0 20px;
54
+ /**
55
+ * Table Navigation (Bulk Actions, Dates, SEO Score dropdowns etc)
56
+ */
57
+ /**
58
+ * Reduce our global custom button sizes so they align with inputs
59
+ */ }
60
+ body.post-type-envira form#posts-filter div.tablenav.top,
61
+ body.post-type-envira_album form#posts-filter div.tablenav.top {
62
+ margin: 0 0 8px 0; }
63
+ body.post-type-envira form#posts-filter .button,
64
+ body.post-type-envira_album form#posts-filter .button {
65
+ height: 28px;
66
+ line-height: 26px; }
67
+ body.post-type-envira #wpbody-content td.colspanchange,
68
+ body.post-type-envira_album #wpbody-content td.colspanchange {
69
+ /**
70
+ * Left Col (Title, Slug, Date, Password)
71
+ */
72
+ /**
73
+ * Category Column
74
+ */
75
+ /**
76
+ * Right Column (Comments + Status)
77
+ */
78
+ /**
79
+ * Envira Gallery Col
80
+ */
81
+ /**
82
+ * Submit
83
+ */ }
84
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left,
85
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left {
86
+ width: 40%; }
87
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-date,
88
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left fieldset.inline-edit-date {
89
+ display: none; }
90
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left div.inline-edit-group:last-child,
91
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left div.inline-edit-group:last-child {
92
+ display: none; }
93
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-center.inline-edit-categories,
94
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-center.inline-edit-categories {
95
+ display: none; }
96
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right,
97
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right {
98
+ margin: 30px 0 0 0; }
99
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right label.inline-edit-status.alignleft,
100
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right label.inline-edit-status.alignleft {
101
+ width: 100%; }
102
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right,
103
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery,
104
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right,
105
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery {
106
+ width: 60%;
107
+ /* Fill the remainder of the width */ }
108
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group,
109
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group,
110
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group,
111
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group {
112
+ clear: none;
113
+ float: left;
114
+ width: 50%;
115
+ /**
116
+ * Label
117
+ */
118
+ /**
119
+ * Inputs
120
+ */ }
121
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group span.title,
122
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title,
123
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group span.title,
124
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title {
125
+ width: 40%;
126
+ padding-right: 0.5em; }
127
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group input[type=number],
128
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group input[type=number],
129
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-right .inline-edit-group input[type=number],
130
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group input[type=number] {
131
+ width: 60px;
132
+ line-height: normal; }
133
+ body.post-type-envira #wpbody-content td.colspanchange p.submit.inline-edit-save,
134
+ body.post-type-envira_album #wpbody-content td.colspanchange p.submit.inline-edit-save {
135
+ margin-bottom: 20px; }
136
+
137
+ /* ==========================================================================
138
+ Responsive
139
+ ========================================================================== */
140
+ @media screen and (max-width: 940px) {
141
+ body.post-type-envira,
142
+ body.post-type-envira_album {
143
+ /* ==========================================================================
144
+ Quick Edit
145
+ ========================================================================== */
146
+ /* ==========================================================================
147
+ Search Box
148
+ ========================================================================== */ }
149
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left
150
+ fieldset.inline-edit-col-right,
151
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery,
152
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left
153
+ fieldset.inline-edit-col-right,
154
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery {
155
+ clear: both;
156
+ width: 100%; }
157
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left
158
+ fieldset.inline-edit-col-right .inline-edit-group,
159
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group,
160
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left
161
+ fieldset.inline-edit-col-right .inline-edit-group,
162
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group {
163
+ clear: both;
164
+ float: left;
165
+ width: 100%;
166
+ /**
167
+ * Label
168
+ */ }
169
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-col-left
170
+ fieldset.inline-edit-col-right .inline-edit-group span.title,
171
+ body.post-type-envira #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title,
172
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-col-left
173
+ fieldset.inline-edit-col-right .inline-edit-group span.title,
174
+ body.post-type-envira_album #wpbody-content td.colspanchange fieldset.inline-edit-envira-gallery .inline-edit-group span.title {
175
+ width: 100%; }
176
+ body.post-type-envira p.search-box,
177
+ body.post-type-envira_album p.search-box {
178
+ width: 94%; } }
assets/fonts/envira.eot CHANGED
File without changes
assets/fonts/envira.svg CHANGED
File without changes
assets/fonts/envira.ttf CHANGED
File without changes
assets/fonts/envira.woff CHANGED
File without changes
assets/js/clipboard.js CHANGED
File without changes
assets/js/conditional-fields.js CHANGED
@@ -1,136 +1,309 @@
 
 
1
  /**
2
- * Handles showing and hiding fields conditionally, based on
3
- * HTML data- attributes
4
  */
5
  jQuery( document ).ready( function( $ ) {
6
 
7
- // Show/hide elements as necessary when a conditional field is changed
8
- $( 'input, select' ).conditional( {
9
- data: 'envira-conditional',
10
- toggle: 'envira-conditional-toggle',
11
- value: 'envira-conditional-value',
12
- displayOnEnabled: 'envira-conditional-display'
13
- } );
14
 
15
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- /**
18
- * jQuery Conditionals 1.0.0
19
- *
20
- * Copyright 2015 n7 Studios
21
- * Released under the MIT license.
22
- * http://jquery.org/license
23
- */
24
- (function( $ ) {
25
- "use strict";
26
-
27
- /**
28
- * Create .conditional() function
29
- *
30
- * @param object options Override Default Settings
31
- */
32
- $.fn.conditional = function(options) {
33
- // Default Settings
34
- var settings = $.extend({
35
- data: 'conditional',
36
- value: 'conditional-value',
37
- toggle: 'conditional-toggle',
38
- displayOnEnabled: 'conditional-display'
39
- }, options);
40
-
41
- // Setup conditionals on each DOM element
42
- this.each(function() {
43
-
44
- // Check for conditional elements
45
- if ( typeof $( this ).data( settings.data ) === 'undefined' ) {
46
- return true;
47
- }
48
-
49
- // Setup vars
50
- var conditionalElements,
51
- displayOnEnabled,
52
- value,
53
- toggle,
54
- displayElements;
55
-
56
- // Toggle + toggle on change
57
- $( this ).on( 'change', function() {
58
- // List the DOM elements to toggle
59
- conditionalElements = $( this ).data( settings.data ).split(',');
60
-
61
- // Determine whether to display DOM elements when the input is 'enabled'
62
- displayOnEnabled = $( this ).data( settings.displayOnEnabled );
63
- if ( typeof displayOnEnabled === 'undefined' ) {
64
- displayOnEnabled = true;
65
- }
66
-
67
- // Determine the value required to display elements
68
- value = $( this ).data( settings.value );
69
- if ( typeof value === 'undefined' ) {
70
- value = '';
71
- }
72
-
73
- //
74
- toggle = $( this ).data( settings.toggle );
75
- if ( typeof value === 'undefined' ) {
76
- toggle = '';
77
- }
78
-
79
- // By default, don't display elements
80
- displayElements = false;
81
-
82
- // Determine whether to display relational elements or not
83
- switch ( $( this ).attr( 'type' ) ) {
84
- case 'checkbox':
85
- if ( displayOnEnabled ) {
86
- displayElements = $( this ).is( ':checked' );
87
- } else {
88
- displayElements = ( $( this ).is( ':checked' ) ? false : true );
89
- }
90
- break;
91
-
92
- default:
93
- console.log( $( this ).attr( 'type' ) );
94
- console.log( displayOnEnabled );
95
- console.log( 'toggle: ' + toggle );
96
- if ( displayOnEnabled ) {
97
- if ( value !== '' ) {
98
- displayElements = ( ( String( $( this ).val() ) !== String( value ) ) ? false : true );
99
- } else {
100
- displayElements = ( ( $( this ).val() === '' || $( this ).val() === '0' ) ? false : true );
101
- }
102
- } else {
103
- if ( value !== '' ) {
104
- displayElements = ( ( $( this ).val() !== value ) ? true : false );
105
- } else {
106
- displayElements = ( ( $( this ).val() === '' || $( this ).val() === '0' ) ? true : false );
107
- }
108
- }
109
- break;
110
- }
111
-
112
- // Show/hide elements
113
- for (var i = 0; i < conditionalElements.length; i++) {
114
- if ( displayElements ) {
115
- $( '#' + conditionalElements[i] ).fadeIn( 300 );
116
- if ( toggle ) {
117
- $( '#' + toggle ).fadeOut( 300 );
118
- }
119
- } else {
120
- $( '#' + conditionalElements[i] ).fadeOut( 300 );
121
- if ( toggle ) {
122
- $( '#' + toggle ).fadeIn( 300 );
123
- }
124
- }
125
- }
126
- });
127
-
128
- // Trigger a change on init so we run the above routine
129
- $ ( this ).trigger( 'change' );
130
- });
131
-
132
- // Return DOM elements
133
- return this;
134
- };
135
 
136
- })(jQuery);
1
+ // @codekit-prepend "conditional-fields-legacy.js";
2
+ // @codekit-prepend "conditions.js";
3
  /**
4
+ * Handles showing and hiding fields conditionally
 
5
  */
6
  jQuery( document ).ready( function( $ ) {
7
 
8
+ // Show/hide elements as necessary when a conditional field is changed
9
+ $( '#envira-gallery-settings input:not([type=hidden]), #envira-gallery-settings select' ).conditions(
10
+ [
 
 
 
 
11
 
12
+ { // Main Theme Elements
13
+ conditions: {
14
+ element: '[name="_envira_gallery[lightbox_theme]"]',
15
+ type: 'value',
16
+ operator: 'array',
17
+ condition: [ 'base', 'captioned', 'polaroid', 'showcase', 'sleek', 'subtle' ]
18
+ },
19
+ actions: {
20
+ if: [
21
+ {
22
+ element: '#envira-config-lightbox-title-display-box, #envira-config-lightbox-arrows-box, #envira-config-lightbox-toolbar-box, #envira-config-supersize-box',
23
+ action: 'show'
24
+ }
25
+ ]
26
+ }
27
+ },
28
+ {
29
+ conditions: {
30
+ element: '[name="_envira_gallery[lightbox_theme]"]',
31
+ type: 'value',
32
+ operator: 'array',
33
+ condition: [ 'base_dark' ]
34
+ },
35
+ actions: {
36
+ if: [
37
+ {
38
+ element: '#envira-config-lightbox-title-display-box, #envira-config-lightbox-arrows-box, #envira-config-lightbox-toolbar-box, #envira-config-supersize-box',
39
+ action: 'hide'
40
+ }
41
+ ]
42
+ }
43
+ },
44
+ { // Gallery arrows Dependant on Theme
45
+ conditions: [
46
+ {
47
+ element: '[name="_envira_gallery[lightbox_theme]"]',
48
+ type: 'value',
49
+ operator: 'array',
50
+ condition: [ 'base', 'captioned', 'polaroid', 'showcase', 'sleek', 'subtle' ]
51
+ },
52
+ {
53
+ element: '[name="_envira_gallery[arrows]"]',
54
+ type: 'checked',
55
+ operator: 'is'
56
+ }
57
+ ],
58
+ actions: {
59
+ if: {
60
+ element: '#envira-config-lightbox-arrows-position-box',
61
+ action: 'show'
62
+ },
63
+ else: {
64
+ element: '#envira-config-lightbox-arrows-position-box',
65
+ action: 'hide'
66
+ }
67
+ }
68
+ },
69
+ { // Gallery Toolbar
70
+ conditions: [
71
+ {
72
+ element: '[name="_envira_gallery[toolbar]"]',
73
+ type: 'checked',
74
+ operator: 'is'
75
+ },
76
+ {
77
+ element: '[name="_envira_gallery[lightbox_theme]"]',
78
+ type: 'value',
79
+ operator: 'array',
80
+ condition: [ 'base', 'captioned', 'polaroid', 'showcase', 'sleek', 'subtle' ]
81
+ }
82
+ ],
83
+ actions: {
84
+ if: [
85
+ {
86
+ element: '#envira-config-lightbox-toolbar-title-box, #envira-config-lightbox-toolbar-position-box',
87
+ action: 'show'
88
+ }
89
+ ],
90
+ else: [
91
+ {
92
+ element: '#envira-config-lightbox-toolbar-title-box, #envira-config-lightbox-toolbar-position-box',
93
+ action: 'hide'
94
+ }
95
+ ]
96
+ }
97
+ },
98
+ { // Mobile Elements Dependant on Theme
99
+ conditions: [
100
+ {
101
+ element: '[name="_envira_gallery[lightbox_theme]"]',
102
+ type: 'value',
103
+ operator: 'array',
104
+ condition: [ 'base', 'captioned', 'polaroid', 'showcase', 'sleek', 'subtle' ]
105
+ },
106
+ {
107
+ element: '[name="_envira_gallery[mobile_lightbox]"]',
108
+ type: 'checked',
109
+ operator: 'is'
110
+ }
111
+ ],
112
+ actions: {
113
+ if: {
114
+ element: '#envira-config-mobile-arrows-box, #envira-config-mobile-toolbar-box',
115
+ action: 'show'
116
+ },
117
+ else: {
118
+ element: '#envira-config-mobile-arrows-box, #envira-config-mobile-toolbar-box',
119
+ action: 'hide'
120
+ }
121
+ }
122
+ },
123
+ { // Thumbnail Elements Dependant on Theme
124
+ conditions: [
125
+ {
126
+ element: '[name="_envira_gallery[lightbox_theme]"]',
127
+ type: 'value',
128
+ operator: 'array',
129
+ condition: [ 'base', 'captioned', 'polaroid', 'showcase', 'sleek', 'subtle' ]
130
+ },
131
+ {
132
+ element: '[name="_envira_gallery[thumbnails]"]',
133
+ type: 'checked',
134
+ operator: 'is'
135
+ }
136
+ ],
137
+ actions: {
138
+ if: {
139
+ element: '#envira-config-thumbnails-position-box',
140
+ action: 'show'
141
+ },
142
+ else: {
143
+ element: '#envira-config-thumbnails-position-box',
144
+ action: 'hide'
145
+ }
146
+ }
147
+ },
148
+ { // Thumbnail Elements Independant of Theme
149
+ conditions: [
150
+ {
151
+ element: '[name="_envira_gallery[thumbnails]"]',
152
+ type: 'checked',
153
+ operator: 'is'
154
+ }
155
+ ],
156
+ actions: {
157
+ if: {
158
+ element: '#envira-config-thumbnails-height-box, #envira-config-thumbnails-width-box',
159
+ action: 'show'
160
+ },
161
+ else: {
162
+ element: '#envira-config-thumbnails-height-box, #envira-config-thumbnails-width-box',
163
+ action: 'hide'
164
+ }
165
+ }
166
+ },
167
+ { // Justified Gallery
168
+ conditions: {
169
+ element: '[name="_envira_gallery[columns]"]',
170
+ type: 'value',
171
+ operator: 'array',
172
+ condition: [ '0' ]
173
+ },
174
+ actions: {
175
+ if: [
176
+ {
177
+ element: '#envira-config-standard-settings-box',
178
+ action: 'hide'
179
+ },
180
+ {
181
+ element: '#envira-config-justified-settings-box',
182
+ action: 'show'
183
+ }
184
+ ],
185
+ else: [
186
+ {
187
+ element: '#envira-config-standard-settings-box',
188
+ action: 'show'
189
+ },
190
+ {
191
+ element: '#envira-config-justified-settings-box',
192
+ action: 'hide'
193
+ }
194
+ ]
195
+ }
196
+ },
197
+ { // Gallery Description
198
+ conditions: {
199
+ element: '[name="_envira_gallery[description_position]"]',
200
+ type: 'value',
201
+ operator: 'array',
202
+ condition: [ '0' ]
203
+ },
204
+ actions: {
205
+ if: [
206
+ {
207
+ element: '#envira-config-description-box',
208
+ action: 'hide'
209
+ }
210
+ ],
211
+ else: [
212
+ {
213
+ element: '#envira-config-description-box',
214
+ action: 'show'
215
+ }
216
+ ]
217
+ }
218
+ },
219
+ { // Gallery Sorting
220
+ conditions: {
221
+ element: '[name="_envira_gallery[random]"]',
222
+ type: 'value',
223
+ operator: 'array',
224
+ condition: [ '0' ]
225
+ },
226
+ actions: {
227
+ if: [
228
+ {
229
+ element: '#envira-config-sorting-direction-box',
230
+ action: 'hide'
231
+ }
232
+ ],
233
+ else: [
234
+ {
235
+ element: '#envira-config-sorting-direction-box',
236
+ action: 'show'
237
+ }
238
+ ]
239
+ }
240
+ },
241
+ { // Gallery CSS animations
242
+ conditions: {
243
+ element: '[name="_envira_gallery[css_animations]"]',
244
+ type: 'checked',
245
+ operator: 'is'
246
+ },
247
+ actions: {
248
+ if: [
249
+ {
250
+ element: '#envira-config-css-opacity-box',
251
+ action: 'show'
252
+ }
253
+ ],
254
+ else: [
255
+ {
256
+ element: '#envira-config-css-opacity-box',
257
+ action: 'hide'
258
+ }
259
+ ]
260
+ }
261
+ },
262
+ { // Gallery image size
263
+ conditions: {
264
+ element: '[name="_envira_gallery[image_size]"]',
265
+ type: 'value',
266
+ operator: 'array',
267
+ condition: [ 'default' ]
268
+ },
269
+ actions: {
270
+ if: [
271
+ {
272
+ element: '#envira-config-crop-size-box, #envira-config-crop-box',
273
+ action: 'show'
274
+ }
275
+ ],
276
+ else: [
277
+ {
278
+ element: '#envira-config-crop-size-box, #envira-config-crop-box',
279
+ action: 'hide'
280
+ }
281
+ ]
282
+ }
283
+ },
284
+ { // Gallery Lightbox
285
+ conditions: {
286
+ element: '[name="_envira_gallery[lightbox_enabled]"]',
287
+ type: 'checked',
288
+ operator: 'is'
289
+ },
290
+ actions: {
291
+ if: [
292
+ {
293
+ element: '#envira-lightbox-settings',
294
+ action: 'show'
295
+ }
296
+ ],
297
+ else: [
298
+ {
299
+ element: '#envira-lightbox-settings',
300
+ action: 'hide'
301
+ }
302
+ ]
303
+ }
304
+ },
305
 
306
+ ]
307
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
308
 
309
+ } );
assets/js/conditions.js ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * jQuery Conditions 1.0.0
3
+ *
4
+ * Copyright 2016 Bejamin Rojas
5
+ * @license Released under the MIT license.
6
+ * http://jquery.org/license
7
+ */
8
+ (function($) {
9
+ "use strict";
10
+
11
+ $.fn.conditions = function(conditions) {
12
+ return this.each( function(index, element) {
13
+ var CJS = new ConditionsJS(element, conditions, $.fn.conditions.defaults);
14
+ CJS.init();
15
+ });
16
+ };
17
+
18
+ $.fn.conditions.defaults = {
19
+ condition: null,
20
+ actions: {},
21
+ effect: 'fade'
22
+ };
23
+
24
+ var ConditionsJS = function(element, conditions, defaults) {
25
+ var that = this;
26
+
27
+ that.element = $(element);
28
+ that.defaults = defaults;
29
+ that.conditions = conditions;
30
+ that._init = false;
31
+
32
+ if(!$.isArray(that.conditions)) {
33
+ that.conditions = [that.conditions];
34
+ }
35
+
36
+ $.each(that.conditions, function(i, v) {
37
+
38
+ v = $.extend({}, that.defaults, v);
39
+
40
+ that.conditions[i] = v;
41
+
42
+ });
43
+
44
+ };
45
+
46
+ ConditionsJS.prototype.init = function() {
47
+ var that = this;
48
+ that._init = true;
49
+ // Set up event listener
50
+ $(that.element).on('change', function() {
51
+ that.matchConditions();
52
+ });
53
+
54
+ $(that.element).on('keyup', function() {
55
+ that.matchConditions();
56
+ });
57
+
58
+ //Show based on current value on page load
59
+ that.matchConditions(true);
60
+ };
61
+
62
+ ConditionsJS.prototype.matchConditions = function(init) {
63
+ var that = this;
64
+
65
+ if(!init) {
66
+ that._init = false;
67
+ }
68
+
69
+ $.each(that.conditions, function(ind, cond) {
70
+
71
+ var condition_matches = false, all_conditions_match = true;
72
+
73
+ if(!$.isArray(cond.conditions)) {
74
+ cond.conditions = [cond.conditions];
75
+ }
76
+
77
+ $.each(cond.conditions, function(i, c) {
78
+
79
+ c.element = $(c.element);
80
+
81
+ switch(c.type) {
82
+ case 'value':
83
+ case 'val':
84
+ switch(c.operator) {
85
+ case '===':
86
+ case '==':
87
+ case '=':
88
+ condition_matches = c.element.val() === c.condition;
89
+ break;
90
+ case '!==':
91
+ case '!=':
92
+ condition_matches = c.element.val() !== c.condition;
93
+ break;
94
+ case 'array':
95
+ condition_matches = $.inArray( c.element.val(), c.condition ) !== -1;
96
+ break;
97
+ case '!array':
98
+ condition_matches = $.inArray( c.element.val(), c.condition ) === -1;
99
+ break;
100
+ }
101
+ break;
102
+ case 'checked':
103
+ switch(c.operator) {
104
+ case 'is':
105
+ condition_matches = c.element.is(':checked');
106
+ break;
107
+ case '!is':
108
+ condition_matches = !c.element.is(':checked');
109
+ break;
110
+ }
111
+ }
112
+
113
+ if(!condition_matches && all_conditions_match) {
114
+ all_conditions_match = false;
115
+ }
116
+
117
+ });
118
+
119
+ if(all_conditions_match) {
120
+
121
+ if(!$.isEmptyObject(cond.actions.if)) {
122
+
123
+ if(!$.isArray(cond.actions.if)) {
124
+ cond.actions.if = [cond.actions.if];
125
+ }
126
+
127
+ $.each(cond.actions.if, function(i, condition) {
128
+ that.showAndHide(condition, cond.effect);
129
+ });
130
+
131
+ }
132
+
133
+ }
134
+ else {
135
+
136
+ if(!$.isEmptyObject(cond.actions.else)) {
137
+
138
+ if(!$.isArray(cond.actions.else)) {
139
+ cond.actions.else = [cond.actions.else];
140
+ }
141
+
142
+ $.each(cond.actions.else, function(i, condition) {
143
+ that.showAndHide(condition, cond.effect);
144
+ });
145
+
146
+ }
147
+
148
+ }
149
+
150
+ });
151
+
152
+ };
153
+
154
+ ConditionsJS.prototype.showAndHide = function(condition, effect) {
155
+ var that = this;
156
+
157
+ switch(condition.action) {
158
+ case 'show':
159
+ that._show($(condition.element), effect);
160
+ break;
161
+ case 'hide':
162
+ that._hide($(condition.element), effect);
163
+ break;
164
+ }
165
+
166
+ };
167
+
168
+ ConditionsJS.prototype._show = function(element, effect) {
169
+ var that = this;
170
+
171
+ if(that._init) {
172
+ element.show();
173
+ }
174
+ else {
175
+ switch(effect) {
176
+ case 'appear':
177
+ element.show();
178
+ break;
179
+ case 'slide':
180
+ element.slideDown();
181
+ break;
182
+ case 'fade':
183
+ element.fadeIn( 300 );
184
+ break;
185
+ }
186
+ }
187
+
188
+ };
189
+
190
+ ConditionsJS.prototype._hide = function(element, effect) {
191
+ var that = this;
192
+
193
+ if(that._init) {
194
+ element.hide();
195
+ }
196
+ else {
197
+ switch(effect) {
198
+ case 'appear':
199
+ element.hide();
200
+ break;
201
+ case 'slide':
202
+ element.slideUp();
203
+ break;
204
+ case 'fade':
205
+ element.fadeOut( 300 );
206
+ break;
207
+ }
208
+ }
209
+
210
+ };
211
+
212
+ }(jQuery));
assets/js/envira.js CHANGED
File without changes
assets/js/lib/fancybox.js CHANGED
@@ -806,7 +806,7 @@
806
  hideOnOverlayClick: true,
807
  hideOnContentClick: false,
808
  overlayShow: true,
809
- overlayOpacity: 0.7,
810
  overlayColor: "#777",
811
  titleShow: true,
812
  titlePosition: "float",
806
  hideOnOverlayClick: true,
807
  hideOnContentClick: false,
808
  overlayShow: true,
809
+ overlayOpacity: 0.9, /* was 0.7 but upped to remove CSS !important */
810
  overlayColor: "#777",
811
  titleShow: true,
812
  titlePosition: "float",
assets/js/list.js CHANGED
File without changes
assets/js/media-edit.js CHANGED
@@ -132,7 +132,7 @@ var EnviraGalleryEditView = wp.Backbone.View.extend( {
132
  } );
133
 
134
  // Render view within our main view
135
- this.$el.find( 'div.addons' ).append( child_view.render().el );
136
  }, this );
137
  }
138
 
132
  } );
133
 
134
  // Render view within our main view
135
+ this.$el.find( 'div.envira-addons' ).append( child_view.render().el );
136
  }, this );
137
  }
138
 
assets/js/media-insert.js CHANGED
@@ -78,7 +78,8 @@ jQuery( document ).ready( function( $ ) {
78
  action: 'envira_gallery_insert_images',
79
  nonce: envira_gallery_metabox.insert_nonce,
80
  post_id: envira_gallery_metabox.id,
81
- images: images,
 
82
  },
83
  function( response ) {
84
  // Response should be a JSON success with the HTML for the image grid
78
  action: 'envira_gallery_insert_images',
79
  nonce: envira_gallery_metabox.insert_nonce,
80
  post_id: envira_gallery_metabox.id,
81
+ // make this a JSON string so we can send larger amounts of data (images), otherwise max is around 20 by default for most server configs
82
+ images: JSON.stringify(images),
83
  },
84
  function( response ) {
85
  // Response should be a JSON success with the HTML for the image grid
assets/js/metabox.js CHANGED
@@ -1,36 +1,19 @@
1
  /**
2
  * You'll need to use CodeKit or similar, as this file is a placeholder to combine
3
  * the following JS files into min/metabox-min.js:
4
- *
5
- * - conditional-fields.js
6
- * - gallery-preview.js
7
- * - gallery-types.js
8
- * - gallery-help.js
9
- * - media-bulk-edit.js
10
- * - media-delete.js
11
- * - media-edit.js
12
- * - media-insert.js
13
- * - media-manage.js
14
- * - media-move.js
15
- * - media-upload.js
16
  */
 
 
 
 
 
 
 
 
 
 
17
 
18
  jQuery( document ).ready( function( $ ) {
19
 
20
- // Image Size: Random
21
- // conditional-fields doesn't support multiple conditions, so we manually show/hide
22
- // the Random Image Sizes option depending on the Image Size value
23
- $( 'select[name="_envira_gallery[image_size]"]' ).on( 'change', function() {
24
-
25
- if ( $( this ).val() == 'envira_gallery_random' ) {
26
- $( 'tr#envira-config-image-sizes-random-box' ).show();
27
- } else {
28
- $( 'tr#envira-config-image-sizes-random-box' ).hide();
29
- }
30
-
31
- } );
32
-
33
- // Run the above conditions on load.
34
- $( 'select[name="_envira_gallery[image_size]"]' ).trigger( 'change' );
35
 
36
  } );
1
  /**
2
  * You'll need to use CodeKit or similar, as this file is a placeholder to combine
3
  * the following JS files into min/metabox-min.js:
 
 
 
 
 
 
 
 
 
 
 
 
4
  */
5
+ // @codekit-append "gallery-preview.js";
6
+ // @codekit-append "gallery-types.js";
7
+ // @codekit-append "gallery-help.js";
8
+ // @codekit-append "media-bulk-edit.js";
9
+ // @codekit-append "media-delete.js";
10
+ // @codekit-append "media-edit.js";
11
+ // @codekit-append "media-insert.js";
12
+ // @codekit-append "media-manage.js";
13
+ // @codekit-append "media-move.js";
14
+ // @codekit-append "media-upload.js";
15
 
16
  jQuery( document ).ready( function( $ ) {
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
  } );
assets/js/min/conditional-fields-min.js CHANGED
@@ -1 +1,8 @@
1
- jQuery(document).ready(function($){$("input, select").conditional({data:"envira-conditional",toggle:"envira-conditional-toggle",value:"envira-conditional-value",displayOnEnabled:"envira-conditional-display"})}),function($){"use strict";$.fn.conditional=function(t){var a=$.extend({data:"conditional",value:"conditional-value",toggle:"conditional-toggle",displayOnEnabled:"conditional-display"},t);return this.each(function(){if("undefined"==typeof $(this).data(a.data))return!0;var t,i,n,e,o;$(this).on("change",function(){switch(t=$(this).data(a.data).split(","),i=$(this).data(a.displayOnEnabled),"undefined"==typeof i&&(i=!0),n=$(this).data(a.value),"undefined"==typeof n&&(n=""),e=$(this).data(a.toggle),"undefined"==typeof n&&(e=""),o=!1,$(this).attr("type")){case"checkbox":o=i?$(this).is(":checked"):$(this).is(":checked")?!1:!0;break;default:console.log($(this).attr("type")),console.log(i),console.log("toggle: "+e),o=i?""!==n?String($(this).val())!==String(n)?!1:!0:""===$(this).val()||"0"===$(this).val()?!1:!0:""!==n?$(this).val()!==n?!0:!1:""===$(this).val()||"0"===$(this).val()?!0:!1}for(var d=0;d<t.length;d++)o?($("#"+t[d]).fadeIn(300),e&&$("#"+e).fadeOut(300)):($("#"+t[d]).fadeOut(300),e&&$("#"+e).fadeIn(300))}),$(this).trigger("change")}),this}}(jQuery);
 
 
 
 
 
 
 
1
+ /**
2
+ * jQuery Conditions 1.0.0
3
+ *
4
+ * Copyright 2016 Bejamin Rojas
5
+ * @license Released under the MIT license.
6
+ * http://jquery.org/license
7
+ */
8
+ !function($){"use strict";$.fn.conditions=function(i){return this.each(function(n,o){var t=new e(o,i,$.fn.conditions.defaults);t.init()})},$.fn.conditions.defaults={condition:null,actions:{},effect:"fade"};var e=function(e,i,n){var o=this;o.element=$(e),o.defaults=n,o.conditions=i,o._init=!1,$.isArray(o.conditions)||(o.conditions=[o.conditions]),$.each(o.conditions,function(e,i){i=$.extend({},o.defaults,i),o.conditions[e]=i})};e.prototype.init=function(){var e=this;e._init=!0,$(e.element).on("change",function(){e.matchConditions()}),$(e.element).on("keyup",function(){e.matchConditions()}),e.matchConditions(!0)},e.prototype.matchConditions=function(e){var i=this;e||(i._init=!1),$.each(i.conditions,function(e,n){var o=!1,t=!0;$.isArray(n.conditions)||(n.conditions=[n.conditions]),$.each(n.conditions,function(e,i){switch(i.element=$(i.element),i.type){case"value":case"val":switch(i.operator){case"===":case"==":case"=":o=i.element.val()===i.condition;break;case"!==":case"!=":o=i.element.val()!==i.condition;break;case"array":o=$.inArray(i.element.val(),i.condition)!==-1;break;case"!array":o=$.inArray(i.element.val(),i.condition)===-1}break;case"checked":switch(i.operator){case"is":o=i.element.is(":checked");break;case"!is":o=!i.element.is(":checked")}}!o&&t&&(t=!1)}),t?$.isEmptyObject(n.actions.if)||($.isArray(n.actions.if)||(n.actions.if=[n.actions.if]),$.each(n.actions.if,function(e,o){i.showAndHide(o,n.effect)})):$.isEmptyObject(n.actions.else)||($.isArray(n.actions.else)||(n.actions.else=[n.actions.else]),$.each(n.actions.else,function(e,o){i.showAndHide(o,n.effect)}))})},e.prototype.showAndHide=function(e,i){var n=this;switch(e.action){case"show":n._show($(e.element),i);break;case"hide":n._hide($(e.element),i)}},e.prototype._show=function(e,i){var n=this;if(n._init)e.show();else switch(i){case"appear":e.show();break;case"slide":e.slideDown();break;case"fade":e.fadeIn(300)}},e.prototype._hide=function(e,i){var n=this;if(n._init)e.hide();else switch(i){case"appear":e.hide();break;case"slide":e.slideUp();break;case"fade":e.fadeOut(300)}}}(jQuery),jQuery(document).ready(function($){$("#envira-gallery-settings input:not([type=hidden]), #envira-gallery-settings select").conditions([{conditions:{element:'[name="_envira_gallery[lightbox_theme]"]',type:"value",operator:"array",condition:["base","captioned","polaroid","showcase","sleek","subtle"]},actions:{if:[{element:"#envira-config-lightbox-title-display-box, #envira-config-lightbox-arrows-box, #envira-config-lightbox-toolbar-box, #envira-config-supersize-box",action:"show"}]}},{conditions:{element:'[name="_envira_gallery[lightbox_theme]"]',type:"value",operator:"array",condition:["base_dark"]},actions:{if:[{element:"#envira-config-lightbox-title-display-box, #envira-config-lightbox-arrows-box, #envira-config-lightbox-toolbar-box, #envira-config-supersize-box",action:"hide"}]}},{conditions:[{element:'[name="_envira_gallery[lightbox_theme]"]',type:"value",operator:"array",condition:["base","captioned","polaroid","showcase","sleek","subtle"]},{element:'[name="_envira_gallery[arrows]"]',type:"checked",operator:"is"}],actions:{if:{element:"#envira-config-lightbox-arrows-position-box",action:"show"},else:{element:"#envira-config-lightbox-arrows-position-box",action:"hide"}}},{conditions:[{element:'[name="_envira_gallery[toolbar]"]',type:"checked",operator:"is"},{element:'[name="_envira_gallery[lightbox_theme]"]',type:"value",operator:"array",condition:["base","captioned","polaroid","showcase","sleek","subtle"]}],actions:{if:[{element:"#envira-config-lightbox-toolbar-title-box, #envira-config-lightbox-toolbar-position-box",action:"show"}],else:[{element:"#envira-config-lightbox-toolbar-title-box, #envira-config-lightbox-toolbar-position-box",action:"hide"}]}},{conditions:[{element:'[name="_envira_gallery[lightbox_theme]"]',type:"value",operator:"array",condition:["base","captioned","polaroid","showcase","sleek","subtle"]},{element:'[name="_envira_gallery[mobile_lightbox]"]',type:"checked",operator:"is"}],actions:{if:{element:"#envira-config-mobile-arrows-box, #envira-config-mobile-toolbar-box",action:"show"},else:{element:"#envira-config-mobile-arrows-box, #envira-config-mobile-toolbar-box",action:"hide"}}},{conditions:[{element:'[name="_envira_gallery[lightbox_theme]"]',type:"value",operator:"array",condition:["base","captioned","polaroid","showcase","sleek","subtle"]},{element:'[name="_envira_gallery[thumbnails]"]',type:"checked",operator:"is"}],actions:{if:{element:"#envira-config-thumbnails-position-box",action:"show"},else:{element:"#envira-config-thumbnails-position-box",action:"hide"}}},{conditions:[{element:'[name="_envira_gallery[thumbnails]"]',type:"checked",operator:"is"}],actions:{if:{element:"#envira-config-thumbnails-height-box, #envira-config-thumbnails-width-box",action:"show"},else:{element:"#envira-config-thumbnails-height-box, #envira-config-thumbnails-width-box",action:"hide"}}},{conditions:{element:'[name="_envira_gallery[columns]"]',type:"value",operator:"array",condition:["0"]},actions:{if:[{element:"#envira-config-standard-settings-box",action:"hide"},{element:"#envira-config-justified-settings-box",action:"show"}],else:[{element:"#envira-config-standard-settings-box",action:"show"},{element:"#envira-config-justified-settings-box",action:"hide"}]}},{conditions:{element:'[name="_envira_gallery[description_position]"]',type:"value",operator:"array",condition:["0"]},actions:{if:[{element:"#envira-config-description-box",action:"hide"}],else:[{element:"#envira-config-description-box",action:"show"}]}},{conditions:{element:'[name="_envira_gallery[random]"]',type:"value",operator:"array",condition:["0"]},actions:{if:[{element:"#envira-config-sorting-direction-box",action:"hide"}],else:[{element:"#envira-config-sorting-direction-box",action:"show"}]}},{conditions:{element:'[name="_envira_gallery[css_animations]"]',type:"checked",operator:"is"},actions:{if:[{element:"#envira-config-css-opacity-box",action:"show"}],else:[{element:"#envira-config-css-opacity-box",action:"hide"}]}},{conditions:{element:'[name="_envira_gallery[image_size]"]',type:"value",operator:"array",condition:["default"]},actions:{if:[{element:"#envira-config-crop-size-box, #envira-config-crop-box",action:"show"}],else:[{element:"#envira-config-crop-size-box, #envira-config-crop-box",action:"hide"}]}},{conditions:{element:'[name="_envira_gallery[lightbox_enabled]"]',type:"checked",operator:"is"},actions:{if:[{element:"#envira-lightbox-settings",action:"show"}],else:[{element:"#envira-lightbox-settings",action:"hide"}]}}])});
assets/js/min/metabox-min.js CHANGED
@@ -1 +1 @@
1
- function EnviraGalleryImagesUpdate(e){EnviraGalleryImages.reset();var a="ul#envira-gallery-output li.envira-gallery-image"+(e?".selected":"");jQuery(a).each(function(){var e=jQuery.parseJSON(jQuery(this).attr("data-envira-gallery-image-model"));e.alt=EnviraGalleryStripslashes(e.alt),EnviraGalleryImages.add(new EnviraGalleryImage(e))}),jQuery("#envira-gallery-main span.count").text(jQuery("ul#envira-gallery-output li.envira-gallery-image").length)}function EnviraGalleryStripslashes(e){return(e+"").replace(/\\(.?)/g,function(e,a){switch(a){case"\\":return"\\";case"0":return"\x00";case"":return"";default:return a}})}function envira_gallery_sortable($){$(envira_gallery_output).sortable({containment:envira_gallery_output,items:"li",cursor:"move",forcePlaceholderSize:!0,placeholder:"dropzone",helper:function(e,a){a.hasClass("selected")||a.addClass("selected").siblings().removeClass("selected");var t=a.parent().children(".selected").clone();a.data("multidrag",t).siblings(".selected").remove();var i=$("<li/>");return i.append(t)},stop:function(e,a){var t=a.item.data("multidrag");a.item.after(t).remove(),$("li.selected",$(envira_gallery_output)).removeClass("selected"),$.ajax({url:envira_gallery_metabox.ajax,type:"post",async:!0,cache:!1,dataType:"json",data:{action:"envira_gallery_sort_images",order:$(envira_gallery_output).sortable("toArray").toString(),post_id:envira_gallery_metabox.id,nonce:envira_gallery_metabox.sort},success:function(e){EnviraGalleryImagesUpdate(!1)},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}})}})}var envira_video_link="p.envira-intro a.envira-video",envira_close_video_link="a.envira-video-close";jQuery(document).ready(function($){$(document).on("click",envira_video_link,function(e){e.preventDefault();var a=$(this).attr("href");-1==a.search("autoplay=1")&&(a+=-1==a.search("rel=")?"?rel=0&autoplay=1":"&autoplay=1"),$("div.envira-video-help").remove();var t=$(this).closest("p.envira-intro");$(t).append('<div class="envira-video-help"><iframe src="'+a+'" /><a href="#" class="envira-video-close dashicons dashicons-no"></a></div>')}),$(document).on("click",envira_close_video_link,function(e){e.preventDefault(),$(this).closest(".envira-video-help").remove()})}),function($){$(function(){var e=!1;"default"==$('input[name="_envira_gallery[type]"]:checked').val()?$("#envira-gallery-preview").hide():$("#envira-gallery-preview").show(),$(document).on("enviraGalleryType enviraGalleryPreview",function(){var a=$('input[name="_envira_gallery[type]"]:checked').val(),t=$("#envira-gallery-preview .spinner"),i=$("#envira-gallery-preview-main");return"default"==a?void $(i).hide():void(e||(e=!0,$(i).html(""),$.ajax({type:"post",url:envira_gallery_metabox.ajax,dataType:"json",data:{action:"envira_gallery_change_preview",post_id:envira_gallery_metabox.id,type:a,data:$("form#post").serializeArray(),nonce:envira_gallery_metabox.preview_nonce},success:function(a){$(i).html(a),$(t).hide(),e=!1},error:function(a,n){$(i).html('<div class="error"><p>'+a.responseText+"</p></div>"),$(t).hide(),e=!1}})))})})}(jQuery),function($){$(function(){$("#envira-gallery-types-nav").on("click","li",function(e){$('input[name="_envira_gallery[type]"]',$(this)).prop("checked",!0).trigger("change")}),$(document).on("change",'input[name="_envira_gallery[type]"]:radio',function(e){var a=$(this).val(),t=$("#envira-tabs #envira-tab-images .spinner"),i=$("#envira-tabs #envira-tab-images #envira-gallery-main");$(t).css("visibility","visible"),$("li",$(this).closest("#envira-gallery-types-nav")).removeClass("envira-active"),$(this).closest("li").addClass("envira-active"),$("a",$("#envira-tabs-nav li").first()).trigger("click"),$(i).html(""),$.ajax({type:"post",url:envira_gallery_metabox.ajax,dataType:"json",data:{action:"envira_gallery_change_type",post_id:envira_gallery_metabox.id,type:a,nonce:envira_gallery_metabox.change_nonce},success:function(e){$(i).html(e.html),$(document).trigger("enviraGalleryType",e),$(t).hide()},error:function(e,a){$(i).html('<div class="error"><p>'+e.responseText+"</p></div>"),$(t).hide()}})})})}(jQuery);var EnviraGalleryBulkEditImageView=wp.Backbone.View.extend({tagName:"li",className:"attachment",template:wp.template("envira-meta-bulk-editor-image"),initialize:function(e){this.model=e.model},render:function(){return this.$el.html(this.template(this.model.attributes)),this}}),EnviraGalleryBulkEditView=wp.Backbone.View.extend({tagName:"div",className:"edit-attachment-frame mode-select hide-menu hide-router",template:wp.template("envira-meta-bulk-editor"),events:{"keyup input":"updateItem","keyup textarea":"updateItem","change input":"updateItem","change textarea":"updateItem","blur textarea":"updateItem","change select":"updateItem","click .actions a.envira-gallery-meta-submit":"saveItem","keyup input#link-search":"searchLinks","click div.query-results li":"insertLink","click button.media-file":"insertMediaFileLink","click button.attachment-page":"insertAttachmentPageLink"},initialize:function(e){this.on("loading",this.loading,this),this.on("loaded",this.loaded,this),this.is_loading=!1,this.collection=e.collection,this.child_views=e.child_views,this.model=new EnviraGalleryImage},render:function(){return this.$el.html(this.template(this.model.toJSON())),this.collection.forEach(function(e){var a=new EnviraGalleryBulkEditImageView({model:e});this.$el.find("ul.attachments").append(a.render().el)},this),this.child_views.length>0&&this.child_views.forEach(function(e){var a=new e({model:this.model});this.$el.find("div.addons").append(a.render().el)},this),setTimeout(function(){quicktags({id:"caption",buttons:"strong,em,link,ul,ol,li,close"}),QTags._buttonsInit()},500),wpLink.init,this},renderError:function(e){var a={};a.error=e;var t=new wp.media.view.EnviraGalleryError({model:a});return t.render().el},loading:function(){this.is_loading=!0,this.$el.find(".spinner").css("visibility","visible")},loaded:function(e){this.is_loading=!1,this.$el.find(".spinner").css("visibility","hidden"),"undefined"!=typeof e&&this.$el.find("ul.attachments").before(this.renderError(e))},updateItem:function(e){""!=e.target.name&&("checkbox"==e.target.type?value=e.target.checked?1:0:value=e.target.value,this.model.set(e.target.name,value))},saveItem:function(e){e.preventDefault(),this.trigger("loading");var a=[];this.collection.forEach(function(e){a.push(e.id)},this),wp.media.ajax("envira_gallery_save_bulk_meta",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,post_id:envira_gallery_metabox.id,meta:this.model.attributes,image_ids:a},success:function(e){this.collection.forEach(function(e){for(var a in this.model.attributes)value=this.model.attributes[a],value.length>0&&e.set(a,value);var t=JSON.stringify(e.attributes);jQuery("ul#envira-gallery-output li#"+e.get("id")).attr("data-envira-gallery-image-model",t),jQuery("ul#envira-gallery-output li#"+e.get("id")+" div.title").text(e.get("title"))},this),jQuery("nav.envira-tab-options input[type=checkbox]").prop("checked",!1).trigger("change"),this.trigger("loaded loaded:success"),EnviraGalleryModalWindow.close()},error:function(e){this.trigger("loaded loaded:error",e)}})},insertMediaFileLink:function(e){this.trigger("loading"),this.model.set("link",response.media_link),this.trigger("loaded loaded:success"),this.render()},insertAttachmentPageLink:function(e){this.trigger("loading"),this.model.set("link",response.media_link),this.trigger("loaded loaded:success"),this.render()}});jQuery(document).ready(function($){$("#envira-gallery-main").on("click","a.envira-gallery-images-edit",function(e){e.preventDefault(),EnviraGalleryImagesUpdate(!0),EnviraGalleryModalWindow.content(new EnviraGalleryBulkEditView({collection:EnviraGalleryImages,child_views:EnviraGalleryChildViews})),EnviraGalleryModalWindow.open()})}),jQuery(document).ready(function($){$(document).on("click","a.envira-gallery-images-delete",function(e){e.preventDefault();var a=confirm(envira_gallery_metabox.remove_multiple);if(!a)return!1;var t=[];$("ul#envira-gallery-output > li.selected").each(function(){t.push($(this).attr("id"))});var i=$(this).parent().attr("id");$.ajax({url:envira_gallery_metabox.ajax,type:"post",dataType:"json",data:{action:"envira_gallery_remove_images",attachment_ids:t,post_id:envira_gallery_metabox.id,nonce:envira_gallery_metabox.remove_nonce},success:function(e){$("ul#envira-gallery-output > li.selected").remove(),$("nav.envira-select-options").fadeOut(),$(".envira-gallery-load-library").attr("data-envira-gallery-offset",0).addClass("has-search").trigger("click"),EnviraGalleryImagesUpdate(!1)},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}})}),$(document).on("click","#envira-gallery-main .envira-gallery-remove-image",function(e){e.preventDefault();var a=confirm(envira_gallery_metabox.remove);if(a){var t=$(this).parent().attr("id");$.ajax({url:envira_gallery_metabox.ajax,type:"post",dataType:"json",data:{action:"envira_gallery_remove_image",attachment_id:t,post_id:envira_gallery_metabox.id,nonce:envira_gallery_metabox.remove_nonce},success:function(e){$("#"+t).fadeOut("normal",function(){$(this).remove(),$(".envira-gallery-load-library").attr("data-envira-gallery-offset",0).addClass("has-search").trigger("click"),EnviraGalleryImagesUpdate(!1)})},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}})}})});var EnviraGalleryImage=Backbone.Model.extend({defaults:{id:"",title:"",caption:"",alt:"",link:""}}),EnviraGalleryImages=new Backbone.Collection;if("undefined"==typeof EnviraGalleryModalWindow)var EnviraGalleryModalWindow=new wp.media.view.Modal({controller:{trigger:function(){}}});var EnviraGalleryEditView=wp.Backbone.View.extend({tagName:"div",className:"edit-attachment-frame mode-select hide-menu hide-router",template:wp.template("envira-meta-editor"),events:{"click .edit-media-header .left":"loadPreviousItem","click .edit-media-header .right":"loadNextItem","keyup input":"updateItem","keyup textarea":"updateItem","change input":"updateItem","change textarea":"updateItem","blur textarea":"updateItem","change select":"updateItem","click .actions a.envira-gallery-meta-submit":"saveItem","keyup input#link-search":"searchLinks","click div.query-results li":"insertLink","click button.media-file":"insertMediaFileLink","click button.attachment-page":"insertAttachmentPageLink"},initialize:function(e){this.on("loading",this.loading,this),this.on("loaded",this.loaded,this),this.is_loading=!1,this.collection=e.collection,this.child_views=e.child_views,this.attachment_id=e.attachment_id,this.attachment_index=0,this.search_timer="";var a=0;this.collection.each(function(e){return e.get("id")==this.attachment_id?(this.model=e,this.attachment_index=a,!1):void a++},this)},render:function(){return this.$el.html(this.template(this.model.attributes)),this.child_views.length>0&&this.child_views.forEach(function(e){var a=new e({model:this.model});this.$el.find("div.addons").append(a.render().el)},this),this.$el.find("textarea[name=caption]").val(this.model.get("caption")),setTimeout(function(){quicktags({id:"caption",buttons:"strong,em,link,ul,ol,li,close"}),QTags._buttonsInit()},500),wpLink.init,0==this.attachment_index&&this.$el.find("button.left").addClass("disabled"),this.attachment_index==this.collection.length-1&&this.$el.find("button.right").addClass("disabled"),this},renderError:function(e){var a={};a.error=e;var t=new wp.media.view.EnviraGalleryError({model:a});return t.render().el},loading:function(){this.is_loading=!0,this.$el.find(".spinner").css("visibility","visible")},loaded:function(e){this.is_loading=!1,this.$el.find(".spinner").css("visibility","hidden"),"undefined"!=typeof e&&this.$el.find("div.media-toolbar").after(this.renderError(e))},loadPreviousItem:function(){this.attachment_index--,this.model=this.collection.at(this.attachment_index),this.attachment_id=this.model.get("id"),this.render()},loadNextItem:function(){this.attachment_index++,this.model=this.collection.at(this.attachment_index),this.attachment_id=this.model.get("id"),this.render()},updateItem:function(e){""!=e.target.name&&("checkbox"==e.target.type?value=e.target.checked?e.target.value:0:value=e.target.value,this.model.set(e.target.name,value))},saveItem:function(e){e.preventDefault(),this.trigger("loading"),wp.media.ajax("envira_gallery_save_meta",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,post_id:envira_gallery_metabox.id,attach_id:this.model.get("id"),meta:this.model.attributes},success:function(e){this.trigger("loaded loaded:success");var a=JSON.stringify(this.model.attributes),t=jQuery("ul#envira-gallery-output li#"+this.model.get("id"));jQuery(t).attr("data-envira-gallery-image-model",a),jQuery("div.meta div.title span",t).text(this.model.get("title")),jQuery("div.meta div.title a.hint",t).attr("title",this.model.get("title")),this.model.get("title").length>20?jQuery("div.meta div.title a.hint",t).removeClass("hidden"):jQuery("div.meta div.title a.hint",t).addClass("hidden");var i=this.$el.find(".saved");i.fadeIn(),setTimeout(function(){i.fadeOut()},1500)},error:function(e){this.trigger("loaded loaded:error",e)}})},searchLinks:function(e){},insertLink:function(e){},insertMediaFileLink:function(e){this.trigger("loading"),wp.media.ajax("envira_gallery_get_attachment_links",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,attachment_id:this.model.get("id")},success:function(e){this.model.set("link",e.media_link),this.trigger("loaded loaded:success"),this.render()},error:function(e){this.trigger("loaded loaded:error",e)}})},insertAttachmentPageLink:function(e){this.trigger("loading"),wp.media.ajax("envira_gallery_get_attachment_links",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,attachment_id:this.model.get("id")},success:function(e){this.model.set("link",e.attachment_page),this.trigger("loaded loaded:success"),this.render()},error:function(e){this.trigger("loaded loaded:error",e)}})}}),EnviraGalleryChildViews=[];jQuery(document).ready(function($){$(document).on("click","#envira-gallery-main a.envira-gallery-modify-image",function(e){e.preventDefault(),EnviraGalleryImagesUpdate(!1);var a=$(this).parent().data("envira-gallery-image");EnviraGalleryModalWindow.content(new EnviraGalleryEditView({collection:EnviraGalleryImages,child_views:EnviraGalleryChildViews,attachment_id:a})),EnviraGalleryModalWindow.open()})}),jQuery(document).ready(function($){$("a.envira-media-library").on("click",function(e){return e.preventDefault(),wp.media.frames.envira?void wp.media.frames.envira.open():(wp.media.frames.envira=wp.media({frame:"post",title:wp.media.view.l10n.insertIntoPost,button:{text:wp.media.view.l10n.insertIntoPost},multiple:!0}),wp.media.frames.envira.on("open",function(){var e=wp.media.frames.envira.state().get("selection");$("ul#envira-gallery-output li").each(function(){var a=wp.media.attachment($(this).attr("id"));e.add(a?[a]:[])})}),wp.media.frames.envira.on("insert",function(e){var a=wp.media.frames.envira.state(),t=[];e.each(function(e){var i=a.display(e).toJSON();switch(i.link){case"none":e.set("link",e.get("url"));break;case"file":e.set("link",e.get("url"));break;case"post":break;case"custom":e.set("link",i.linkUrl)}t.push(e.toJSON())},this),$.post(envira_gallery_metabox.ajax,{action:"envira_gallery_insert_images",nonce:envira_gallery_metabox.insert_nonce,post_id:envira_gallery_metabox.id,images:t},function(e){e&&e.success&&($("#envira-gallery-output").html(e.success),EnviraGalleryImagesUpdate(!1))},"json")}),void wp.media.frames.envira.open())})});var envira_gallery_output="#envira-gallery-output",envira_gallery_shift_key_pressed=!1,envira_gallery_last_selected_image=!1;jQuery(document).ready(function($){$(document).on("click","nav.envira-tab-options a",function(e){e.preventDefault();var a=$(this).closest(".envira-tab-options"),t=$(this).data("view"),i=$(this).data("view-style");$(t).hasClass(i)||($(t).removeClass("list").removeClass("grid").addClass(i),$("a",a).removeClass("selected"),$(this).addClass("selected"),$.ajax({url:envira_gallery_metabox.ajax,type:"post",dataType:"json",data:{action:"envira_gallery_set_user_setting",name:"envira_gallery_image_view",value:i,nonce:envira_gallery_metabox.set_user_setting_nonce},success:function(e){},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}}))}),$(document).on("change","nav.envira-tab-options input",function(e){$(this).prop("checked")?($("li",$(envira_gallery_output)).addClass("selected"),$("nav.envira-select-options").fadeIn()):($("li",$(envira_gallery_output)).removeClass("selected"),$("nav.envira-select-options").fadeOut())}),envira_gallery_sortable($),$(document).on("enviraGalleryType",function(){$(envira_gallery_output).length>0&&envira_gallery_sortable($)}),$(document).on("click","ul#envira-gallery-output li.envira-gallery-image > img, li.envira-gallery-image > div, li.envira-gallery-image > a.check",function(e){e.preventDefault();var a=$(this).parent();if($(a).hasClass("selected"))$(a).removeClass("selected"),envira_gallery_last_selected_image=!1;else{if(envira_gallery_shift_key_pressed&&envira_gallery_last_selected_image!==!1){var t=$("ul#envira-gallery-output li").index($(envira_gallery_last_selected_image)),i=$("ul#envira-gallery-output li").index($(a)),n=0;if(i>t)for(n=t;i>=n;n++)$("ul#envira-gallery-output li:eq( "+n+")").addClass("selected");else for(n=i;t>=n;n++)$("ul#envira-gallery-output li:eq( "+n+")").addClass("selected")}$(a).addClass("selected"),envira_gallery_last_selected_image=$(a)}$("ul#envira-gallery-output > li.selected").length>0?$("nav.envira-select-options").fadeIn():$("nav.envira-select-options").fadeOut()}),$(document).on("keyup keydown",function(e){envira_gallery_shift_key_pressed=e.shiftKey})}),jQuery(document).ready(function($){$("#envira-gallery-main").on("click","a.envira-gallery-images-move",function(e){e.preventDefault();var a=$(this).data("action");EnviraGalleryModalWindow.content(new EnviraGallerySelectionView({action:a,multiple:!1,sidebar_view:"envira-meta-move-media-sidebar",modal_title:envira_gallery_metabox.move_media_modal_title,insert_button_label:envira_gallery_metabox.move_media_insert_button_label,onInsert:function(){EnviraGalleryImagesUpdate(!0);var e=[];EnviraGalleryImages.forEach(function(a){e.push(a.get("id"))}),this.selection.forEach(function(t){wp.media.ajax("envira_"+a+"_move_media",{context:this,data:{nonce:envira_gallery_metabox.move_media_nonce,from_gallery_id:envira_gallery_metabox.id,to_gallery_id:t.id,image_ids:e},success:function(e){$("ul#envira-gallery-output > li.selected").remove(),$("nav.envira-select-options").fadeOut(),EnviraGalleryImagesUpdate(!1),EnviraGalleryModalWindow.close()},error:function(e){alert(e)}})})}})),EnviraGalleryModalWindow.open()})}),function($){$(function(){if("undefined"!=typeof uploader){$("input#plupload-browse-button").val(envira_gallery_metabox.uploader_files_computer);var e=$("#envira-gallery .envira-progress-bar"),a=$("#envira-gallery .envira-progress-bar div.envira-progress-bar-inner"),t=$("#envira-gallery .envira-progress-bar div.envira-progress-bar-status"),i=$("#envira-gallery-output"),n=$("#envira-gallery-upload-error"),r=0;uploader.bind("Init",function(e){$("#drag-drop-area").fadeIn(),$("a.envira-media-library.button").fadeIn()}),uploader.bind("FilesAdded",function(a,i){$(n).html(""),r=i.length,$(".uploading .current",$(t)).text("1"),$(".uploading .total",$(t)).text(r),$(".uploading",$(t)).show(),$(".done",$(t)).hide(),$(e).fadeIn()}),uploader.bind("UploadProgress",function(e,i){$(".uploading .current",$(t)).text(r-e.total.queued+1),$(a).css({width:e.total.percent+"%"})}),uploader.bind("FileUploaded",function(e,a,t){$.post(envira_gallery_metabox.ajax,{action:"envira_gallery_load_image",nonce:envira_gallery_metabox.load_image,id:t.response,post_id:envira_gallery_metabox.id},function(e){switch(envira_gallery_metabox.media_position){case"before":$(i).prepend(e);break;case"after":default:$(i).append(e)}EnviraGalleryImagesUpdate(!1)},"json")}),uploader.bind("UploadComplete",function(){$(".uploading",$(t)).hide(),$(".done",$(t)).show(),setTimeout(function(){$(e).fadeOut()},1e3)}),uploader.bind("Error",function(e,a){$("#envira-gallery-upload-error").html('<div class="error fade"><p>'+a.file.name+": "+a.message+"</p></div>"),e.refresh()})}})}(jQuery),jQuery(document).ready(function($){$('select[name="_envira_gallery[image_size]"]').on("change",function(){"envira_gallery_random"==$(this).val()?$("tr#envira-config-image-sizes-random-box").show():$("tr#envira-config-image-sizes-random-box").hide()}),$('select[name="_envira_gallery[image_size]"]').trigger("change")});
1
+ function EnviraGalleryImagesUpdate(e){EnviraGalleryImages.reset();var a="ul#envira-gallery-output li.envira-gallery-image"+(e?".selected":"");jQuery(a).each(function(){var e=jQuery.parseJSON(jQuery(this).attr("data-envira-gallery-image-model"));e.alt=EnviraGalleryStripslashes(e.alt),EnviraGalleryImages.add(new EnviraGalleryImage(e))}),jQuery("#envira-gallery-main span.count").text(jQuery("ul#envira-gallery-output li.envira-gallery-image").length)}function EnviraGalleryStripslashes(e){return(e+"").replace(/\\(.?)/g,function(e,a){switch(a){case"\\":return"\\";case"0":return"\0";case"":return"";default:return a}})}function envira_gallery_sortable($){$(envira_gallery_output).sortable({containment:envira_gallery_output,items:"li",cursor:"move",forcePlaceholderSize:!0,placeholder:"dropzone",helper:function(e,a){a.hasClass("selected")||a.addClass("selected").siblings().removeClass("selected");var t=a.parent().children(".selected").clone();a.data("multidrag",t).siblings(".selected").remove();var i=$("<li/>");return i.append(t)},stop:function(e,a){var t=a.item.data("multidrag");a.item.after(t).remove(),$("li.selected",$(envira_gallery_output)).removeClass("selected"),$.ajax({url:envira_gallery_metabox.ajax,type:"post",async:!0,cache:!1,dataType:"json",data:{action:"envira_gallery_sort_images",order:$(envira_gallery_output).sortable("toArray").toString(),post_id:envira_gallery_metabox.id,nonce:envira_gallery_metabox.sort},success:function(e){EnviraGalleryImagesUpdate(!1)},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}})}})}jQuery(document).ready(function($){});var envira_video_link="p.envira-intro a.envira-video",envira_close_video_link="a.envira-video-close";jQuery(document).ready(function($){$(document).on("click",envira_video_link,function(e){e.preventDefault();var a=$(this).attr("href");a.search("autoplay=1")==-1&&(a+=a.search("rel=")==-1?"?rel=0&autoplay=1":"&autoplay=1"),$("div.envira-video-help").remove();var t=$(this).closest("p.envira-intro");$(t).append('<div class="envira-video-help"><iframe src="'+a+'" /><a href="#" class="envira-video-close dashicons dashicons-no"></a></div>')}),$(document).on("click",envira_close_video_link,function(e){e.preventDefault(),$(this).closest(".envira-video-help").remove()})}),jQuery(document).ready(function($){$(document).on("click","a.envira-gallery-images-delete",function(e){e.preventDefault();var a=confirm(envira_gallery_metabox.remove_multiple);if(!a)return!1;var t=[];$("ul#envira-gallery-output > li.selected").each(function(){t.push($(this).attr("id"))});var i=$(this).parent().attr("id");$.ajax({url:envira_gallery_metabox.ajax,type:"post",dataType:"json",data:{action:"envira_gallery_remove_images",attachment_ids:t,post_id:envira_gallery_metabox.id,nonce:envira_gallery_metabox.remove_nonce},success:function(e){$("ul#envira-gallery-output > li.selected").remove(),$("nav.envira-select-options").fadeOut(),$(".envira-gallery-load-library").attr("data-envira-gallery-offset",0).addClass("has-search").trigger("click"),EnviraGalleryImagesUpdate(!1)},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}})}),$(document).on("click","#envira-gallery-main .envira-gallery-remove-image",function(e){e.preventDefault();var a=confirm(envira_gallery_metabox.remove);if(a){var t=$(this).parent().attr("id");$.ajax({url:envira_gallery_metabox.ajax,type:"post",dataType:"json",data:{action:"envira_gallery_remove_image",attachment_id:t,post_id:envira_gallery_metabox.id,nonce:envira_gallery_metabox.remove_nonce},success:function(e){$("#"+t).fadeOut("normal",function(){$(this).remove(),$(".envira-gallery-load-library").attr("data-envira-gallery-offset",0).addClass("has-search").trigger("click"),EnviraGalleryImagesUpdate(!1)})},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}})}})});var EnviraGalleryImage=Backbone.Model.extend({defaults:{id:"",title:"",caption:"",alt:"",link:""}}),EnviraGalleryImages=new Backbone.Collection;if("undefined"==typeof EnviraGalleryModalWindow)var EnviraGalleryModalWindow=new wp.media.view.Modal({controller:{trigger:function(){}}});var EnviraGalleryEditView=wp.Backbone.View.extend({tagName:"div",className:"edit-attachment-frame mode-select hide-menu hide-router",template:wp.template("envira-meta-editor"),events:{"click .edit-media-header .left":"loadPreviousItem","click .edit-media-header .right":"loadNextItem","keyup input":"updateItem","keyup textarea":"updateItem","change input":"updateItem","change textarea":"updateItem","blur textarea":"updateItem","change select":"updateItem","click .actions a.envira-gallery-meta-submit":"saveItem","keyup input#link-search":"searchLinks","click div.query-results li":"insertLink","click button.media-file":"insertMediaFileLink","click button.attachment-page":"insertAttachmentPageLink"},initialize:function(e){this.on("loading",this.loading,this),this.on("loaded",this.loaded,this),this.is_loading=!1,this.collection=e.collection,this.child_views=e.child_views,this.attachment_id=e.attachment_id,this.attachment_index=0,this.search_timer="";var a=0;this.collection.each(function(e){return e.get("id")==this.attachment_id?(this.model=e,this.attachment_index=a,!1):void a++},this)},render:function(){return this.$el.html(this.template(this.model.attributes)),this.child_views.length>0&&this.child_views.forEach(function(e){var a=new e({model:this.model});this.$el.find("div.envira-addons").append(a.render().el)},this),this.$el.find("textarea[name=caption]").val(this.model.get("caption")),setTimeout(function(){quicktags({id:"caption",buttons:"strong,em,link,ul,ol,li,close"}),QTags._buttonsInit()},500),wpLink.init,0==this.attachment_index&&this.$el.find("button.left").addClass("disabled"),this.attachment_index==this.collection.length-1&&this.$el.find("button.right").addClass("disabled"),this},renderError:function(e){var a={};a.error=e;var t=new wp.media.view.EnviraGalleryError({model:a});return t.render().el},loading:function(){this.is_loading=!0,this.$el.find(".spinner").css("visibility","visible")},loaded:function(e){this.is_loading=!1,this.$el.find(".spinner").css("visibility","hidden"),"undefined"!=typeof e&&this.$el.find("div.media-toolbar").after(this.renderError(e))},loadPreviousItem:function(){this.attachment_index--,this.model=this.collection.at(this.attachment_index),this.attachment_id=this.model.get("id"),this.render()},loadNextItem:function(){this.attachment_index++,this.model=this.collection.at(this.attachment_index),this.attachment_id=this.model.get("id"),this.render()},updateItem:function(e){""!=e.target.name&&("checkbox"==e.target.type?value=e.target.checked?e.target.value:0:value=e.target.value,this.model.set(e.target.name,value))},saveItem:function(e){e.preventDefault(),this.trigger("loading"),wp.media.ajax("envira_gallery_save_meta",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,post_id:envira_gallery_metabox.id,attach_id:this.model.get("id"),meta:this.model.attributes},success:function(e){this.trigger("loaded loaded:success");var a=JSON.stringify(this.model.attributes),t=jQuery("ul#envira-gallery-output li#"+this.model.get("id"));jQuery(t).attr("data-envira-gallery-image-model",a),jQuery("div.meta div.title span",t).text(this.model.get("title")),jQuery("div.meta div.title a.hint",t).attr("title",this.model.get("title")),this.model.get("title").length>20?jQuery("div.meta div.title a.hint",t).removeClass("hidden"):jQuery("div.meta div.title a.hint",t).addClass("hidden");var i=this.$el.find(".saved");i.fadeIn(),setTimeout(function(){i.fadeOut()},1500)},error:function(e){this.trigger("loaded loaded:error",e)}})},searchLinks:function(e){},insertLink:function(e){},insertMediaFileLink:function(e){this.trigger("loading"),wp.media.ajax("envira_gallery_get_attachment_links",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,attachment_id:this.model.get("id")},success:function(e){this.model.set("link",e.media_link),this.trigger("loaded loaded:success"),this.render()},error:function(e){this.trigger("loaded loaded:error",e)}})},insertAttachmentPageLink:function(e){this.trigger("loading"),wp.media.ajax("envira_gallery_get_attachment_links",{context:this,data:{nonce:envira_gallery_metabox.save_nonce,attachment_id:this.model.get("id")},success:function(e){this.model.set("link",e.attachment_page),this.trigger("loaded loaded:success"),this.render()},error:function(e){this.trigger("loaded loaded:error",e)}})}}),EnviraGalleryChildViews=[];jQuery(document).ready(function($){$(document).on("click","#envira-gallery-main a.envira-gallery-modify-image",function(e){e.preventDefault(),EnviraGalleryImagesUpdate(!1);var a=$(this).parent().data("envira-gallery-image");EnviraGalleryModalWindow.content(new EnviraGalleryEditView({collection:EnviraGalleryImages,child_views:EnviraGalleryChildViews,attachment_id:a})),EnviraGalleryModalWindow.open()})}),jQuery(document).ready(function($){$("a.envira-media-library").on("click",function(e){return e.preventDefault(),wp.media.frames.envira?void wp.media.frames.envira.open():(wp.media.frames.envira=wp.media({frame:"post",title:wp.media.view.l10n.insertIntoPost,button:{text:wp.media.view.l10n.insertIntoPost},multiple:!0}),wp.media.frames.envira.on("open",function(){var e=wp.media.frames.envira.state().get("selection");$("ul#envira-gallery-output li").each(function(){var a=wp.media.attachment($(this).attr("id"));e.add(a?[a]:[])})}),wp.media.frames.envira.on("insert",function(e){var a=wp.media.frames.envira.state(),t=[];e.each(function(e){var i=a.display(e).toJSON();switch(i.link){case"none":e.set("link",e.get("url"));break;case"file":e.set("link",e.get("url"));break;case"post":break;case"custom":e.set("link",i.linkUrl)}t.push(e.toJSON())},this),$.post(envira_gallery_metabox.ajax,{action:"envira_gallery_insert_images",nonce:envira_gallery_metabox.insert_nonce,post_id:envira_gallery_metabox.id,images:JSON.stringify(t)},function(e){e&&e.success&&($("#envira-gallery-output").html(e.success),EnviraGalleryImagesUpdate(!1))},"json")}),void wp.media.frames.envira.open())})});var envira_gallery_output="#envira-gallery-output",envira_gallery_shift_key_pressed=!1,envira_gallery_last_selected_image=!1;jQuery(document).ready(function($){$(document).on("click","nav.envira-tab-options a",function(e){e.preventDefault();var a=$(this).closest(".envira-tab-options"),t=$(this).data("view"),i=$(this).data("view-style");$(t).hasClass(i)||($(t).removeClass("list").removeClass("grid").addClass(i),$("a",a).removeClass("selected"),$(this).addClass("selected"),$.ajax({url:envira_gallery_metabox.ajax,type:"post",dataType:"json",data:{action:"envira_gallery_set_user_setting",name:"envira_gallery_image_view",value:i,nonce:envira_gallery_metabox.set_user_setting_nonce},success:function(e){},error:function(e,a,t){$(envira_gallery_output).before('<div class="error"><p>'+a.responseText+"</p></div>")}}))}),$(document).on("change","nav.envira-tab-options input",function(e){$(this).prop("checked")?($("li",$(envira_gallery_output)).addClass("selected"),$("nav.envira-select-options").fadeIn()):($("li",$(envira_gallery_output)).removeClass("selected"),$("nav.envira-select-options").fadeOut())}),envira_gallery_sortable($),$(document).on("enviraGalleryType",function(){$(envira_gallery_output).length>0&&envira_gallery_sortable($)}),$(document).on("click","ul#envira-gallery-output li.envira-gallery-image > img, li.envira-gallery-image > div, li.envira-gallery-image > a.check",function(e){e.preventDefault();var a=$(this).parent();if($(a).hasClass("selected"))$(a).removeClass("selected"),envira_gallery_last_selected_image=!1;else{if(envira_gallery_shift_key_pressed&&envira_gallery_last_selected_image!==!1){var t=$("ul#envira-gallery-output li").index($(envira_gallery_last_selected_image)),i=$("ul#envira-gallery-output li").index($(a)),r=0;if(t<i)for(r=t;r<=i;r++)$("ul#envira-gallery-output li:eq( "+r+")").addClass("selected");else for(r=i;r<=t;r++)$("ul#envira-gallery-output li:eq( "+r+")").addClass("selected")}$(a).addClass("selected"),envira_gallery_last_selected_image=$(a)}$("ul#envira-gallery-output > li.selected").length>0?$("nav.envira-select-options").fadeIn():$("nav.envira-select-options").fadeOut()}),$(document).on("keyup keydown",function(e){envira_gallery_shift_key_pressed=e.shiftKey})}),function($){$(function(){if("undefined"!=typeof uploader){$("input#plupload-browse-button").val(envira_gallery_metabox.uploader_files_computer);var e=$("#envira-gallery .envira-progress-bar"),a=$("#envira-gallery .envira-progress-bar div.envira-progress-bar-inner"),t=$("#envira-gallery .envira-progress-bar div.envira-progress-bar-status"),i=$("#envira-gallery-output"),r=$("#envira-gallery-upload-error"),n=0;uploader.bind("Init",function(e){$("#drag-drop-area").fadeIn(),$("a.envira-media-library.button").fadeIn()}),uploader.bind("FilesAdded",function(a,i){$(r).html(""),n=i.length,$(".uploading .current",$(t)).text("1"),$(".uploading .total",$(t)).text(n),$(".uploading",$(t)).show(),$(".done",$(t)).hide(),$(e).fadeIn()}),uploader.bind("UploadProgress",function(e,i){$(".uploading .current",$(t)).text(n-e.total.queued+1),$(a).css({width:e.total.percent+"%"})}),uploader.bind("FileUploaded",function(e,a,t){$.post(envira_gallery_metabox.ajax,{action:"envira_gallery_load_image",nonce:envira_gallery_metabox.load_image,id:t.response,post_id:envira_gallery_metabox.id},function(e){switch(envira_gallery_metabox.media_position){case"before":$(i).prepend(e);break;case"after":default:$(i).append(e)}EnviraGalleryImagesUpdate(!1)},"json")}),uploader.bind("UploadComplete",function(){$(".uploading",$(t)).hide(),$(".done",$(t)).show(),setTimeout(function(){$(e).fadeOut()},1e3)}),uploader.bind("Error",function(e,a){$("#envira-gallery-upload-error").html('<div class="error fade"><p>'+a.file.name+": "+a.message+"</p></div>"),e.refresh()})}})}(jQuery);
assets/scss/_fonts.scss ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Generated by Glyphter (http://www.glyphter.com) on Tue Mar 22 2016*/
2
+ @font-face {
3
+ font-family: 'envira';
4
+ src: url('../fonts/envira.eot');
5
+ src: url('../fonts/envira.eot?#iefix') format('embedded-opentype'),
6
+ url('../fonts/envira.woff') format('woff'),
7
+ url('../fonts/envira.ttf') format('truetype'),
8
+ url('../fonts/envira.svg#envira') format('svg');
9
+ font-weight: normal;
10
+ font-style: normal;
11
+ }
12
+ [class*='envira-']:before{
13
+ display: inline-block;
14
+ font-family: 'envira';
15
+ font-style: normal;
16
+ font-weight: normal;
17
+ line-height: 1;
18
+ -webkit-font-smoothing: antialiased;
19
+ -moz-osx-font-smoothing: grayscale
20
+ }
21
+ .envira-configuration:before{content:'\0041';}
22
+ .envira-leaf:before{content:'\0042';}
23
+ .envira-lightbox:before{content:'\0044';}
24
+ .envira-misc:before{content:'\0045';}
25
+ .envira-mobile:before{content:'\0046';}
26
+ .envira-pagination:before{content:'\0047';}
27
+ .envira-proofing:before{content:'\0048';}
28
+ .envira-slideshow:before{content:'\0049';}
29
+ .envira-tags:before{content:'\004a';}
30
+ .envira-thumbnails:before{content:'\004b';}
31
+ .envira-video:before{content:'\004c';}
32
+ .envira-watermark:before{content:'\004d';}
33
+ .envira-cloud-download:before{content:'\004e';}
34
+ .envira-toggle-on:before{content:'\004f';}
35
+ .envira-plus-circle:before{content:'\0050';}
36
+ .envira-down-arrow:before{content:'\0051';}
37
+ .envira-list:before{content:'\0052';}
38
+ .envira-grid:before{content:'\0053';}
39
+ .envira-pinterest-p:before{content:'\0054';}
40
+ .envira-pencil:before{content:'\0055';}
41
+ .envira-close:before{content:'\0056';}
42
+ .envira-check:before{content:'\0057';}
assets/scss/_mixins.scss ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ Mixins
3
+ ========================================================================== */
4
+ /**
5
+ * Media Query
6
+ */
7
+
8
+ @mixin mq($breakpoint) {
9
+
10
+ $mq-xxs: "(max-width: 599px)";
11
+ $mq-xs: "(min-width: 600px) and (max-width: 767px)";
12
+ $mq-sm: "(min-width: 768px) and (max-width: 991px)";
13
+ $mq-md: "(min-width: 992px) and (max-width: 1199px)";
14
+ $mq-lg: "(min-width: 1200px)";
15
+
16
+ @if $breakpoint == xxs {
17
+ @media #{$mq-xxs} { @content; }
18
+ }
19
+ @if $breakpoint == xs {
20
+ @media #{$mq-xs} { @content; }
21
+ }
22
+ @else if $breakpoint == sm {
23
+ @media #{$mq-sm} { @content; }
24
+ }
25
+ @else if $breakpoint == md {
26
+ @media #{$mq-md} { @content; }
27
+ }
28
+ @else if $breakpoint == lg {
29
+ @media #{$mq-lg} { @content; }
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Border-Radius
35
+ */
36
+
37
+ $prefixes: -webkit-, -moz-, -o-, "";
38
+
39
+ @mixin borderRadius($size...) {
40
+ @if length($size) == 1 {
41
+ @each $prefix in $prefixes {
42
+ #{$prefix}border-radius: $size;
43
+ }
44
+ } @else {
45
+ @include customBorderRadius($size...);
46
+ }
47
+ }
48
+
49
+ @mixin customBorderRadius($topLeft: 0, $topRight: 0, $bottomRight: 0, $bottomLeft: 0) {
50
+ @each $prefix in $prefixes {
51
+ @if $prefix == "-moz-" {
52
+ @if $topLeft != 0 { -moz-border-radius-topleft: $topLeft; }
53
+ @if $topRight != 0 { -moz-border-radius-topright: $topRight; }
54
+ @if $bottomRight != 0 { -moz-border-radius-bottomright: $bottomRight; }
55
+ @if $bottomLeft != 0 { -moz-border-radius-bottomleft: $bottomLeft; }
56
+ } @else {
57
+ @if $topLeft != 0 { #{$prefix}border-top-left-radius: $topLeft; }
58
+ @if $topRight != 0 { #{$prefix}border-top-right-radius: $topRight; }
59
+ @if $bottomRight != 0 { #{$prefix}border-bottom-right-radius: $bottomRight; }
60
+ @if $bottomLeft != 0 { #{$prefix}border-bottom-left-radius: $bottomLeft; }
61
+ }
62
+ }
63
+ }
assets/scss/_vars.scss ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ Variables SCSS
3
+ ========================================================================== */
4
+
5
+ $font__main: sans-serif;
6
+ $font__code: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
7
+ $font__pre: "Courier 10 Pitch", Courier, monospace;
8
+ $font__line-height-body: 1.5;
9
+ $font__line-height-pre: 1.6;
10
+
11
+ $font_size_tab: 13px;
12
+
13
+ $white: #ffffff;
14
+ $beige_light: #f7f7f7;
15
+ $black: #000000;
16
+ $green: #7cc048;
17
+ $green_alt: #95dc5e;
18
+ $grey: #666666;
19
+ $grey_dark: #6b6e72;
20
+ $grey_dark_2: #dddddd;
21
+ $red: #e02626;
22
+ $red_alt: #f85959;
23
+
24
+ $primary_color: $green;
25
+ $primary_button_color: $primary_color;
26
+ $primary_button_color_hover: $green_alt;
27
+
28
+ $danger_button_color: $red;
29
+ $danger_button_color_hover: $red_alt;
30
+
31
+ $color_bg: #f1f1f1;
32
+
33
+ $header-height: 120px;
34
+ $navbar-height: 50px;
assets/scss/addons.scss ADDED
@@ -0,0 +1,597 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ addons.css loads on all the Envira Addons Administration Screen
3
+
4
+ Any styles that will be used by the Addons section (or are useful to be
5
+ included for future use) should be added to this file.
6
+
7
+ ========================================================================== */
8
+
9
+ /* ==========================================================================
10
+ Imports
11
+ ========================================================================== */
12
+ @import "vars";
13
+ @import "mixins";
14
+ @import "fonts";
15
+
16
+ /* ==========================================================================
17
+ Header
18
+ ========================================================================== */
19
+
20
+ #addon-heading {
21
+ /**
22
+ * Clearfix
23
+ */
24
+ &:after {
25
+ content: "";
26
+ display: table;
27
+ clear: both;
28
+ }
29
+ h1 {
30
+ float: left;
31
+ @include mq(xs) {
32
+ float: none;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Search Addons and Filter
38
+ */
39
+ form {
40
+ float: right;
41
+
42
+ input {
43
+ border: 1px solid $grey_dark_2;
44
+ @include borderRadius(3px);
45
+ background-color: $white;
46
+ color: $grey;
47
+ margin: 7px 10px 0 5px;
48
+ font-size: 14px;
49
+ padding: 5px 8px;
50
+ }
51
+ select {
52
+ margin: -5px 20px 0 0;
53
+ }
54
+ .spinner {
55
+ float: none;
56
+ margin: -3px auto auto auto;
57
+ }
58
+ @include mq(xs) {
59
+ float: none;
60
+ display: table;
61
+ margin: 10px auto 0 auto;
62
+ }
63
+ }
64
+ }
65
+
66
+ /* ==========================================================================
67
+ Addons Styles
68
+ ========================================================================== */
69
+
70
+ .envira-gallery {
71
+ margin: 20px auto;
72
+ }
73
+
74
+ .envira-hideme {
75
+ display: none;
76
+ }
77
+
78
+ #envira-gallery-addons {
79
+ padding: 20px 0;
80
+ }
81
+
82
+ #envira-addons {
83
+ /**
84
+ * Buttons
85
+ * - Make buttons beige
86
+ */
87
+ .button,
88
+ .button-primary {
89
+ text-shadow: none;
90
+ background-color: $beige_light;
91
+ color: #23282d;
92
+ font-weight: 600;
93
+ border: 1px solid #ccc;
94
+ line-height: inherit;
95
+ height: inherit;
96
+ padding: 5px 15px;
97
+ box-shadow: none;
98
+ cursor: pointer;
99
+
100
+ &:hover {
101
+ color: #23282d;
102
+ background-color: #fafafa;
103
+ border-color: #999;
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Action Buttons
109
+ * - Activate / Deactivate Addon
110
+ * - Install Addon
111
+ */
112
+ .envira-addon-action-button {
113
+ padding-left: 20px;
114
+ padding-right: 20px;
115
+ .envira-cloud-download {
116
+ font-size: 19px;
117
+ float: left;
118
+ margin-right: 8px;
119
+ color: #8d8f92;
120
+ }
121
+ .envira-toggle-on {
122
+ font-size: 19px;
123
+ float: left;
124
+ margin-right: 8px;
125
+ margin-top: 1px;
126
+ color: $green;
127
+ }
128
+ }
129
+ .envira-addon-upgrade-button {
130
+ background-color: $green;
131
+ color: $white;
132
+ float: none !important;
133
+ margin: 0 auto;
134
+ display: table;
135
+ line-height: 25px;
136
+ &:hover {
137
+ background-color: #95dc5e;
138
+ color: $white;
139
+ border-color: #95dc5e;
140
+ }
141
+ }
142
+ .envira-addon-action-button.envira-activate-addon {
143
+ .envira-toggle-on {
144
+ color: #e92c21;
145
+ -moz-transform: scaleX(-1);
146
+ -o-transform: scaleX(-1);
147
+ -webkit-transform: scaleX(-1);
148
+ transform: scaleX(-1);
149
+ filter: FlipH;
150
+ -ms-filter: "FlipH";
151
+ }
152
+ }
153
+ .envira-addon-title {
154
+ margin-top: 30px;
155
+ }
156
+
157
+ /**
158
+ * Addons Area:
159
+ * - Licensed
160
+ * - Unlicensed
161
+ */
162
+ .envira-addons-area {
163
+
164
+ /**
165
+ * Clearfix
166
+ */
167
+ &:after {
168
+ content: "";
169
+ display: table;
170
+ clear: both;
171
+ }
172
+
173
+ &.licensed {
174
+ margin: 20px 0 40px 0;
175
+ padding: 0 0 20px 0;
176
+ border-bottom: 1px solid #ddd;
177
+ }
178
+
179
+ /**
180
+ * Addon Card
181
+ */
182
+ .envira-addon {
183
+ border: 1px solid $grey_dark_2;
184
+ position: relative;
185
+ background: $white;
186
+ border-radius: 3px;
187
+ float: left;
188
+ margin: 0 2% 2% 0;
189
+ min-height: 465px;
190
+ padding: 0px;
191
+ text-align: center;
192
+ width: 32%;
193
+ box-sizing: border-box;
194
+ -webkit-box-sizing: border-box;
195
+ -moz-box-sizing: border-box;
196
+
197
+ &:nth-child(3n) {
198
+ margin-right: 0;
199
+ }
200
+ &:nth-child(3n+1) {
201
+ clear: both;
202
+ }
203
+ @include mq(md) {
204
+ min-height: 420px;
205
+ }
206
+ @include mq(sm) {
207
+ width: 100% !important;
208
+ min-height: 525px;
209
+ }
210
+ @include mq(xs) {
211
+ width: 100% !important;
212
+ min-height: 525px;
213
+ }
214
+
215
+
216
+ /**
217
+ * Thumbnail Image
218
+ */
219
+ .envira-addon-thumb {
220
+ margin: 20px auto 20px auto;
221
+ max-width: 100%;
222
+ @include mq(md) {
223
+ margin: 10px auto 15px auto;
224
+ }
225
+ @include mq(sm) {
226
+ margin: 10px auto 15px auto;
227
+ }
228
+ @include mq(xs) {
229
+ margin: 10px auto 15px auto;
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Paragraph Tag
235
+ */
236
+ .envira-addon-excerpt {
237
+ margin-top: 0;
238
+ margin-bottom: 90px; /* 70px height on abs toolbar + 20px */
239
+ margin-left: 0px;
240
+ margin-right: 0px;
241
+ color: #2f2f2f;
242
+ font-weight: 200;
243
+ padding: 0 20px;
244
+ display: table;
245
+ }
246
+
247
+ /**
248
+ * Success and Error Messages
249
+ */
250
+ .envira-addon-message {
251
+ background: $beige_light;
252
+ border-top: 1px solid $grey_dark_2;
253
+ }
254
+
255
+ .envira-addon-message,
256
+ .envira-addon-error {
257
+ position: absolute;
258
+ bottom: 0;
259
+ float: left;
260
+ width: 100%;
261
+ -moz-border-radius: 3px;
262
+ -webkit-border-radius: 3px;
263
+ border-radius: 3px;
264
+ margin: 0;
265
+ padding: 0;
266
+ text-align: left;
267
+
268
+ /**
269
+ * Interior
270
+ */
271
+ .interior {
272
+ padding: 20px;
273
+ /**
274
+ * Clearfix
275
+ */
276
+ &:after {
277
+ content: "";
278
+ display: table;
279
+ clear: both;
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Active Addon
285
+ */
286
+ &.envira-addon-active {
287
+ .addon-status span {
288
+ color: $green;
289
+ }
290
+ .interior.envira-addon-active .addon-status span {
291
+ color: $green;
292
+ }
293
+ .interior.envira-addon-inactive .addon-status span {
294
+ color: #e82c20;
295
+ }
296
+ .interior.envira-addon-not-installed .addon-status span {
297
+ color: #a3a4a5;
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Inactive Addon
303
+ */
304
+ &.envira-addon-inactive {
305
+ .addon-status span {
306
+ color: #e82c20;
307
+ }
308
+ .interior.envira-addon-active .addon-status span {
309
+ color: $green;
310
+ }
311
+ .interior.envira-addon-inactive .addon-status span {
312
+ color: #e82c20;
313
+ }
314
+ .interior.envira-addon-not-installed .addon-status span {
315
+ color: #a3a4a5;
316
+ }
317
+ }
318
+
319
+ /**
320
+ * Not Installed Addon
321
+ */
322
+ &.envira-addon-not-installed {
323
+ .addon-status span {
324
+ color: #a3a4a5;
325
+ }
326
+ .interior.envira-addon-active .addon-status span {
327
+ color: $green;
328
+ }
329
+ .interior.envira-addon-inactive .addon-status span {
330
+ color: #e82c20;
331
+ }
332
+ .interior.envira-addon-not-installed .addon-status span {
333
+ color: #a3a4a5;
334
+ }
335
+ }
336
+
337
+ span.addon-status {
338
+ float: left;
339
+ font-weight: bold;
340
+ }
341
+ a.button {
342
+ float: right;
343
+ /* margin-right: 30px;*/
344
+ }
345
+ span.envira-gallery-spinner {
346
+ position: absolute;
347
+ bottom: 15px;
348
+ right: 0;
349
+ }
350
+ }
351
+
352
+ /**
353
+ * Action
354
+ */
355
+ .envira-addon-action {
356
+ display: inline;
357
+ float: right;
358
+
359
+ .button-primary {
360
+ margin: -5px 0 0 0;
361
+ @include borderRadius(3px);
362
+ }
363
+ .button-primary:hover {
364
+ color: #23282d;
365
+ background-color: #fafafa;
366
+ border-color: #999;
367
+ }
368
+ }
369
+
370
+ /**
371
+ * Error
372
+ */
373
+ .envira-addon-error {
374
+ bottom: 10px;
375
+ float: none;
376
+ left: 15px;
377
+ right: 20px;
378
+ width: auto;
379
+ .xinterior {
380
+ width: 100%;
381
+ margin: 0;
382
+ background: #fff;
383
+ border-left: 4px solid #dc3232;
384
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
385
+ }
386
+ p {
387
+ padding: 10px;
388
+
389
+ margin: 5px 10px;
390
+ }
391
+
392
+ .wrap {
393
+ margin: 0;
394
+ }
395
+
396
+ .icon32 {
397
+ display: none;
398
+ }
399
+
400
+ h2 {
401
+ padding: 0;
402
+ }
403
+
404
+ .form-table th {
405
+ padding: 10px 0;
406
+ width: 30% !important;
407
+ }
408
+
409
+ .form-table input[type="text"],
410
+ .envira-addon .envira-addon-error .form-table input[type="password"] {
411
+ width: 100% !important;
412
+ }
413
+
414
+ p.submit {
415
+ padding: 0;
416
+ }
417
+ }
418
+
419
+ /**
420
+ * Description
421
+ */
422
+ p {
423
+ color: #2f2f2f;
424
+ font-size: 13px;
425
+ margin: 10px 0 0;
426
+ text-shadow: 0 1px #fff;
427
+ }
428
+ }
429
+ #envira-addons-unlock-more-area {
430
+ margin: 40px auto 20px auto;
431
+ padding-bottom: 0;
432
+ border-bottom: 0;
433
+ }
434
+ }
435
+ }
436
+
437
+ #envira-addons-more-area {
438
+ .envira-addon .interior {
439
+ padding: 15px 20px !important;
440
+ }
441
+ }
442
+
443
+ /**
444
+ * Forms
445
+ */
446
+
447
+ #envira-addons-refresh-addons-form {
448
+ width: 100%;
449
+ max-width: 850px;
450
+ float: left;
451
+ @include mq(md) {
452
+ max-width: 450px;
453
+ }
454
+ @include mq(sm) {
455
+ max-width: 50%;
456
+ input.button {
457
+ display: block;
458
+ }
459
+ }
460
+ @include mq(xs) {
461
+ width: 100%;
462
+ float: none;
463
+ input.button {
464
+ display: block;
465
+ }
466
+ }
467
+
468
+ }
469
+ #envira-filter-form {
470
+ float: right;
471
+ input[type='submit'],
472
+ select {
473
+ background-color: $beige_light;
474
+ color: #23282d;
475
+ border: 1px solid $grey_dark_2;
476
+ height: 30px;
477
+ width: 120px;
478
+ margin-top: -2px;
479
+ }
480
+ input {
481
+ padding: 5px 15px;
482
+ box-shadow: 0;
483
+ /*max-height: 30px;*/
484
+ cursor: pointer;
485
+ background-color: $beige_light;
486
+ color: #23282d;
487
+ &:hover {
488
+ color: #23282d;
489
+ background-color: #fafafa;
490
+ border-color: #999;
491
+ }
492
+ }
493
+
494
+ .spinner {
495
+ float: left;
496
+ }
497
+
498
+ }
499
+
500
+ /**
501
+ * Clearfix
502
+ */
503
+ .clearfix {
504
+ &:after {
505
+ content: "";
506
+ display: table;
507
+ clear: both;
508
+ }
509
+ }
510
+
511
+
512
+
513
+ /* ==========================================================================
514
+ Responsive Addons Styles
515
+ ========================================================================== */
516
+ @media only screen and (max-width: 1050px) {
517
+ #envira-addons-area {
518
+ /**
519
+ * Addons - 2 Column
520
+ */
521
+ .envira-addon {
522
+ width: 49%;
523
+ /*min-height: 300px;*/
524
+
525
+ &:nth-child(2n) {
526
+ margin-right: 0;
527
+ }
528
+ &:nth-child(2n+1) {
529
+ clear: both;
530
+ }
531
+
532
+ &:nth-child(3n) {
533
+ margin-right: 2%;
534
+ }
535
+ &:nth-child(3n+1) {
536
+ clear: none;
537
+ }
538
+ .envira-addon-excerpt {
539
+ margin-bottom: 90px;
540
+ }
541
+ }
542
+ }
543
+ }
544
+ @media only screen and (max-width: 782px) {
545
+ #envira-addons-area {
546
+ .envira-addon {
547
+ min-height: auto;
548
+ /**
549
+ * Action
550
+ */
551
+ .envira-addon-action {
552
+ .button-primary {
553
+ margin: -7px 0 0 0;
554
+ }
555
+ }
556
+ }
557
+ }
558
+ }
559
+ @media only screen and (max-width: 600px) {
560
+
561
+ #envira-addons-area {
562
+
563
+ .envira-addon {
564
+ width: 99%;
565
+ /**
566
+ * Messages
567
+ */
568
+ .envira-addon-message {
569
+ float: left;
570
+ width: 100%;
571
+ /*margin: 0 0 10px 0;*/
572
+
573
+ span.addon-status {
574
+ display: block;
575
+ width: 100%;
576
+ margin: 0 0 5px 0;
577
+ text-align: center;
578
+ }
579
+ div.envira-addon-action {
580
+ clear: both;
581
+ display: block;
582
+ width: 100%;
583
+ text-align: center;
584
+
585
+ .button-primary {
586
+ clear: both;
587
+ float: none;
588
+ margin: 0 auto;
589
+ }
590
+ }
591
+ }
592
+ .envira-addon-excerpt {
593
+ margin-bottom: 120px;
594
+ }
595
+ }
596
+ }
597
+ }
assets/scss/admin.scss ADDED
@@ -0,0 +1,678 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ admin.css loads on all Envira Administration Screens:
3
+ - WP_List_Tables
4
+ - Add New
5
+ - Albums
6
+ - Settings
7
+ - NextGEN Import
8
+
9
+ Any styles that will be used by all of the above (or are useful to be included
10
+ for future use) should be added to this file:
11
+ - Header and Logo
12
+ - WordPress Red Button
13
+ ========================================================================== */
14
+
15
+ /* ==========================================================================
16
+ Imports
17
+ ========================================================================== */
18
+ @import "vars";
19
+ @import "mixins";
20
+
21
+ body.post-type-envira,
22
+ body.post-type-envira_album {
23
+ // Remove left padding on the main content area, so items can be full width e.g. the header
24
+ #wpcontent {
25
+ padding-left: 0;
26
+ }
27
+
28
+ // adding some padding/margin around the WordPress update-nag
29
+ .update-nag {
30
+ margin-left: 20px;
31
+ margin-bottom: 20px;
32
+ }
33
+ /**
34
+ * Subheading
35
+ */
36
+ .subheading {
37
+ background-color: $white;
38
+ height: 45px;
39
+ margin-left: -20px;
40
+ @include mq(xs) {
41
+ height: auto;
42
+ padding-bottom: 20px;
43
+ }
44
+
45
+ h1 {
46
+ font-size: 20px;
47
+ font-weight: 400;
48
+ line-height: 45px;
49
+ margin: 0 0 0 20px;
50
+ padding-left: 20px;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Wrapper
56
+ */
57
+ div.wrap {
58
+ margin: 0;
59
+
60
+ /**
61
+ * Page Title Action (i.e. Add New)
62
+ */
63
+ a.page-title-action {
64
+ position: relative;
65
+ top: -55px;
66
+ left: 185px;
67
+ &:hover {
68
+ background: $primary_button_color_hover;
69
+ border-color: $primary_button_color_hover;
70
+ color: $white;
71
+ }
72
+ /* display: none; */ /* Trying To Prevent The "Shift" Upload Page Load Before JS can move the button */
73
+ /* margin-left: 10px; */ /* Change WordPress 4.7 */
74
+ }
75
+
76
+ /**
77
+ * Screen Title
78
+ * - h1 used from WordPress 4.3+
79
+ * - h2 used in WordPress 4.2-
80
+ */
81
+ > h1,
82
+ > h2 {
83
+ margin: 0 0 20px 0;
84
+ padding: 15px 20px 10px 20px;
85
+ background: $white;
86
+ font-weight: 600;
87
+ font-size: 20px;
88
+ width: 100%;
89
+
90
+ /**
91
+ * Page Title Action (i.e. Add New)
92
+ */
93
+ a.page-title-action {
94
+ top: -3px;
95
+ left: auto;
96
+ &:hover {
97
+ background: $primary_button_color_hover;
98
+ border-color: $primary_button_color_hover;
99
+ color: $white;
100
+ }
101
+ /* display: none; */ /* Trying To Prevent The "Shift" Upload Page Load Before JS can move the button */
102
+ /* margin-left: 10px; */ /* Change WordPress 4.7 */
103
+ }
104
+
105
+ /**
106
+ * Subtitle (search results title)
107
+ */
108
+ span.subtitle {
109
+ float: right;
110
+ }
111
+ }
112
+
113
+
114
+ /**
115
+ * Tab Panels
116
+ * - By default, they're hidden and the .envira-active class displays them
117
+ */
118
+ .envira-tab {
119
+ display: none;
120
+
121
+ /**
122
+ * Active Tab
123
+ */
124
+ &.envira-active {
125
+ display: block;
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Code Snippets
131
+ */
132
+ div.envira-code {
133
+ position: relative;
134
+ margin: 0 0 10px 0;
135
+
136
+ /**
137
+ * Clearfix
138
+ */
139
+ &:after {
140
+ content: "";
141
+ display: table;
142
+ clear: both;
143
+ }
144
+
145
+ code {
146
+ display: block;
147
+ font-size: 11px;
148
+ padding: 5px 20px 5px 5px;
149
+ }
150
+
151
+ /**
152
+ * Copy to Clipboard
153
+ */
154
+ a.envira-clipboard {
155
+ position: absolute;
156
+ top: 5px;
157
+ right: 5px;
158
+ color: #23282d;
159
+
160
+ span {
161
+ display: block;
162
+ text-indent: -9999px;
163
+ }
164
+ }
165
+ }
166
+ }
167
+
168
+ /* ==========================================================================
169
+ Button Styles
170
+ ========================================================================== */
171
+ .button {
172
+ @include borderRadius(2px);
173
+ padding: 0 16px 1px;
174
+ height: 33px;
175
+ line-height: 30px;
176
+ text-decoration: none;
177
+ text-shadow: none;
178
+ font-weight: 600;
179
+ -webkit-box-shadow: none;
180
+ box-shadow: none;
181
+
182
+ /**
183
+ * Small
184
+ */
185
+ &.button-small {
186
+ padding: 0 8px 1px;
187
+ line-height: 22px;
188
+ height: 24px;
189
+ }
190
+
191
+ /**
192
+ * Extra Large
193
+ * (.button-large is used on publish actions in WordPress, so we don't want to affect that)
194
+ */
195
+ &.button-x-large {
196
+ padding: 0 32px 1px;
197
+ line-height: 48px;
198
+ height: 50px;
199
+ font-size: 18px;
200
+ text-transform: uppercase;
201
+ }
202
+
203
+ @include mq(xs) {
204
+ margin-top: 10px;
205
+ }
206
+
207
+ /**
208
+ * Screen Options
209
+ * - Don't set a height
210
+ */
211
+ &.show-settings {
212
+ height: auto;
213
+ }
214
+
215
+ /**
216
+ * Green Button
217
+ * - Replaces WordPress' default primary button style
218
+ */
219
+ &.button-primary {
220
+ background: $primary_button_color;
221
+ border-color: $primary_button_color;
222
+ -webkit-box-shadow: none;
223
+ box-shadow: none;
224
+ color: $white;
225
+
226
+ &:hover{
227
+ background: $primary_button_color_hover;
228
+ border-color: $primary_button_color_hover;
229
+ color: $white;
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Red Button
235
+ */
236
+ &.button-danger {
237
+ background: $danger_button_color;
238
+ border-color: $danger_button_color;
239
+ -webkit-box-shadow: none;
240
+ box-shadow: none;
241
+ color: $white;
242
+
243
+ &:hover{
244
+ background: $danger_button_color_hover;
245
+ border-color: $danger_button_color_hover;
246
+ color: $white;
247
+ }
248
+ }
249
+ }
250
+
251
+ /* ==========================================================================
252
+ Thickbox (used for choosing a Default Gallery/Album)
253
+ ========================================================================== */
254
+ div#TB_window {
255
+ div.wrap {
256
+ margin: 10px 20px 0 2px;
257
+ }
258
+ }
259
+ }
260
+
261
+ /* ==========================================================================
262
+ Header
263
+ ========================================================================== */
264
+ #envira-header-temp {
265
+ position: relative;
266
+ }
267
+
268
+ #envira-header {
269
+ background-color: $green;
270
+ height: $header-height;
271
+ @include mq(xxs) {
272
+ padding-top: 46px;
273
+ }
274
+
275
+ h1.envira-logo {
276
+ margin: 0;
277
+ line-height: $header-height;
278
+ margin-left: 20px;
279
+
280
+ img {
281
+ /**
282
+ * Image width and height (image is 2x so this ensures it displays correctly)
283
+ */
284
+ max-width: 339px;
285
+ height: auto;
286
+ width: 90%;
287
+
288
+ /**
289
+ * Responsive - ensure the logo doesn't exceed the header dimensions
290
+ */
291
+ @include mq(xs) {
292
+ width: 90%;
293
+ }
294
+ }
295
+ }
296
+ }
297
+ #wpbody {
298
+ @include mq(xxs) {
299
+ padding-top: 0;
300
+ }
301
+ }
302
+ body.post-type-envira_album {
303
+ div.wrap {
304
+ /**
305
+ * Page Title Action (i.e. Add New)
306
+ */
307
+ a.page-title-action {
308
+ left: 180px !important;
309
+ }
310
+ > h1,
311
+ > h2 {
312
+ a.page-title-action {
313
+ top: -3px !important;
314
+ left: auto !important;
315
+ }
316
+ }
317
+ }
318
+ }
319
+ body.post-php.post-type-envira_album {
320
+ div.wrap {
321
+ /**
322
+ * Page Title Action (i.e. Add New)
323
+ */
324
+ a.page-title-action {
325
+ left: 200px !important;
326
+ }
327
+ > h1,
328
+ > h2 {
329
+ a.page-title-action {
330
+ top: -3px !important;
331
+ left: auto !important;
332
+ }
333
+ }
334
+ }
335
+ }
336
+ body.post-php.post-type-envira {
337
+ div.wrap {
338
+ /**
339
+ * Page Title Action (i.e. Add New)
340
+ */
341
+ a.page-title-action {
342
+ left: 215px !important;
343
+ }
344
+ > h1,
345
+ > h2 {
346
+ a.page-title-action {
347
+ top: -3px !important;
348
+ left: auto !important;
349
+ }
350
+ }
351
+ }
352
+ }
353
+
354
+ /* ==========================================================================
355
+ Inline Notices
356
+ - These are Envira-specific notices with custom styling for e.g. Instagram oAuth,
357
+ upgrade / upsells.
358
+ ========================================================================== */
359
+ .envira-notice {
360
+ position: relative;
361
+ margin: 0 0 20px 0;
362
+ padding: 20px;
363
+ @include borderRadius(2px);
364
+
365
+ /**
366
+ * Heading
367
+ */
368
+ p.envira-intro {
369
+ border: none !important;
370
+ margin: 0 0 20px 0 !important;
371
+ padding: 0 !important;
372
+ }
373
+
374
+ /**
375
+ * Close Button
376
+ */
377
+ .notice-dismiss {
378
+ top: 10px;
379
+ right: 10px;
380
+ color: $white;
381
+
382
+ &:before {
383
+ color: $white;
384
+ width: 26px;
385
+ height: 26px;
386
+ font-size: 22px;
387
+ }
388
+ }
389
+
390
+ /**
391
+ * Success
392
+ */
393
+ &.success {
394
+ background: $green;
395
+ color: $white;
396
+ border: none;
397
+
398
+ /**
399
+ * Button background color needs to be adjusted so it displays over the green background
400
+ * of the success message
401
+ */
402
+ .button.button-primary {
403
+ background-color: $green_alt;
404
+ border-color: $green_alt;
405
+ }
406
+ }
407
+
408
+ /**
409
+ * Warning
410
+ */
411
+ &.warning {
412
+ background: #fcf8e3;
413
+ border: 1px solid #faebcc;
414
+
415
+ .notice-dismiss {
416
+ color: $black;
417
+
418
+ &:before {
419
+ color: $black;
420
+ }
421
+ }
422
+ }
423
+
424
+ /**
425
+ * Error
426
+ */
427
+ &.error {
428
+ border-top: 1px solid #dc3232;
429
+ border-right: 1px solid #dc3232;
430
+ border-bottom: 1px solid #dc3232;
431
+ }
432
+ }
433
+
434
+ /* ==========================================================================
435
+ Table, Add, Edit Screens
436
+ ========================================================================== */
437
+ body.post-type-envira.edit-php,
438
+ body.post-type-envira.post-new-php,
439
+ body.post-type-envira.post-php,
440
+ body.post-type-envira_album.edit-php,
441
+ body.post-type-envira_album.post-new-php,
442
+ body.post-type-envira_album.post-php {
443
+ div.wrap {
444
+ /**
445
+ * Remove the margin on the wrapper
446
+ */
447
+ margin: 0;
448
+
449
+ /**
450
+ * Add margin to notices
451
+ */
452
+ > div.error,
453
+ > div.notice,
454
+ > div.updated {
455
+ margin-left: 20px;
456
+ margin-right: 20px;
457
+ }
458
+ }
459
+ }
460
+
461
+ /* ==========================================================================
462
+ Taxonomy Screens
463
+ ========================================================================== */
464
+ body.post-type-envira.edit-tags-php,
465
+ body.post-type-envira.taxonomy-envira-tag {
466
+ div.wrap {
467
+ margin: 0;
468
+
469
+ /**
470
+ * Add margin to notices
471
+ */
472
+ > div.error,
473
+ > div.notice,
474
+ > div.updated {
475
+ margin-left: 20px;
476
+ margin-right: 20px;
477
+ }
478
+
479
+ form.search-form,
480
+ form#edittag,
481
+ #col-container {
482
+ /**
483
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
484
+ * and the content
485
+ */
486
+ margin: 0 20px;
487
+ }
488
+
489
+ /**
490
+ * Reduce our global custom button sizes so they align with inputs
491
+ */
492
+ .button {
493
+ height: 28px;
494
+ line-height: 26px;
495
+ }
496
+ }
497
+ }
498
+
499
+ /* ==========================================================================
500
+ Third Party Screens
501
+ ========================================================================== */
502
+ body.post-type-envira {
503
+ div.wrap {
504
+ /**
505
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
506
+ * and the content for any third party plugins which add sections / pages within Envira
507
+ */
508
+ margin: 0 20px;
509
+ }
510
+ }
511
+
512
+ /* ==========================================================================
513
+ Gallery / Album Selection Media Modal
514
+ ========================================================================== */
515
+ .media-modal {
516
+ .media-modal-content {
517
+ .media-frame-content {
518
+ .attachments-browser.envira-gallery-editor {
519
+ /**
520
+ * Error
521
+ * - Position below the search bar
522
+ */
523
+ div.envira-gallery-error {
524
+ position: absolute;
525
+ top: 50px;
526
+ left: 0;
527
+ right: 300px;
528
+ }
529
+
530
+ /**
531
+ * Grid
532
+ */
533
+ ul.attachments {
534
+ li.attachment {
535
+ width: 20%;
536
+
537
+ div.attachment-preview {
538
+ div.thumbnail {
539
+ /**
540
+ * Thumbnail Image
541
+ */
542
+ img {
543
+ position: absolute;
544
+ z-index: 1;
545
+ top: 0;
546
+ left: 0;
547
+ width: 100%;
548
+ height: 100%;
549
+ opacity: 0.2;
550
+ }
551
+
552
+ /**
553
+ * Title
554
+ */
555
+ strong {
556
+ position: absolute;
557
+ z-index: 2;
558
+ height: 50%;
559
+ top: 0;
560
+ left: 0;
561
+ right: 0;
562
+ padding: 10px;
563
+ text-align: center;
564
+ overflow: hidden;
565
+ -webkit-box-sizing: border-box;
566
+ -moz-box-sizing: border-box;
567
+ box-sizing: border-box;
568
+ vertical-align: bottom;
569
+ background: rgba(0,0,0,0.07);
570
+ text-shadow: 1px 1px #ddd;
571
+
572
+ span {
573
+ display: block;
574
+ position: absolute;
575
+ bottom: 10px;
576
+ left: 0;
577
+ right: 0;
578
+ padding: 0 10px;
579
+ text-align: center;
580
+ }
581
+ }
582
+
583
+ /**
584
+ * Shortcode
585
+ */
586
+ code {
587
+ position: absolute;
588
+ z-index: 2;
589
+ height: 50%;
590
+ bottom: 0;
591
+ left: 0;
592
+ right: 0;
593
+ padding: 10px;
594
+ text-align: center;
595
+ -webkit-box-sizing: border-box;
596
+ -moz-box-sizing: border-box;
597
+ box-sizing: border-box;
598
+ vertical-align: middle;
599
+ text-shadow: 1px 1px #ddd;
600
+ }
601
+ }
602
+ }
603
+ }
604
+ }
605
+
606
+ /**
607
+ * Sidebar
608
+ */
609
+ div.media-sidebar {
610
+ div.settings {
611
+ .name {
612
+ text-align: left;
613
+ }
614
+ }
615
+ }
616
+
617
+ }
618
+ }
619
+ }
620
+ }
621
+
622
+ /* ==========================================================================
623
+ Responsive
624
+ ========================================================================== */
625
+ @media screen and (max-width: 640px) {
626
+ body.post-type-envira,
627
+ body.post-type-envira_album {
628
+ /**
629
+ * Wrapper
630
+ */
631
+ div.wrap {
632
+ /**
633
+ * Screen Title
634
+ */
635
+ h1 {
636
+ /**
637
+ * Allow space for the "Search results for..." text to display, when searching
638
+ */
639
+ padding-bottom: 40px;
640
+
641
+ /**
642
+ * Subtitle (search results title)
643
+ */
644
+ span.subtitle {
645
+ clear: both;
646
+ width: 100%;
647
+ padding: 0;
648
+ }
649
+ }
650
+ }
651
+ }
652
+ }
653
+
654
+ @media screen and (max-width: 340px) {
655
+ body.post-type-envira,
656
+ body.post-type-envira_album {
657
+ /**
658
+ * Wrapper
659
+ */
660
+ div.wrap {
661
+ /**
662
+ * Screen Title
663
+ */
664
+ h1 {
665
+ text-align: center;
666
+
667
+ /**
668
+ * Page Title Action (i.e. Add New)
669
+ */
670
+ a.page-title-action {
671
+ display: block;
672
+ text-align: center;
673
+ margin: 10px 0 0 0;
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
assets/scss/editor.scss ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ editor.css loads on any screen where the Add Gallery button is output
3
+
4
+ Any styles that will be used by the Insert Gallery modal should be put here
5
+ ========================================================================== */
6
+
7
+ /* ==========================================================================
8
+ Imports
9
+ ========================================================================== */
10
+ @import "vars";
11
+ @import "mixins";
12
+
13
+ /* ==========================================================================
14
+ Add Gallery Button
15
+ ========================================================================== */
16
+ .envira-gallery-choose-gallery,
17
+ .envira-albums-choose-album {
18
+ padding-left: .4em;
19
+
20
+ span.envira-media-icon {
21
+ background: url(images/menu-icon.png) transparent no-repeat scroll 0 0;
22
+ width: 16px;
23
+ height: 16px;
24
+ display: inline-block;
25
+ vertical-align: text-top;
26
+ }
27
+ }
28
+
29
+ /* ==========================================================================
30
+ Retina
31
+ ========================================================================== */
32
+ @media only screen and (-webkit-min-device-pixel-ratio: 2),
33
+ only screen and (min--moz-device-pixel-ratio: 2),
34
+ only screen and (-o-min-device-pixel-ratio: 2/1),
35
+ only screen and (min-device-pixel-ratio: 2),
36
+ only screen and (min-resolution: 192dpi),
37
+ only screen and (min-resolution: 2dppx) {
38
+ #envira-media-modal-button .envira-media-icon[style] {
39
+ background-image: url(images/menu-icon@2x.png) !important;
40
+ background-size: 16px 16px !important;
41
+ }
42
+ }
assets/scss/envira.scss ADDED
@@ -0,0 +1,1344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ Envira Gallery Styles
3
+ ========================================================================== */
4
+
5
+ /**
6
+ * Envira Gallery - Reset
7
+ */
8
+ .envira-gallery-wrap,
9
+ .envira-gallery-wrap *,
10
+ .envira-tags-filter-list,
11
+ .envira-tags-filter-list * {
12
+ background:none;
13
+ border:0 none;
14
+ border-radius:0;
15
+ -webkit-border-radius:0;
16
+ -moz-border-radius:0;
17
+ float:none;
18
+ font-size:100%;
19
+ height:auto;
20
+ letter-spacing:normal;
21
+ list-style:none;
22
+ outline:none;
23
+ position:static;
24
+ text-decoration:none;
25
+ text-indent:0;
26
+ text-shadow:none;
27
+ text-transform:none;
28
+ width:auto;
29
+ visibility:visible;
30
+ overflow:visible;
31
+ margin:0;
32
+ padding:0;
33
+ line-height:1;
34
+ box-sizing:border-box;
35
+ -webkit-box-sizing:border-box;
36
+ -moz-box-sizing:border-box;
37
+ -webkit-box-shadow:none;
38
+ -moz-box-shadow:none;
39
+ -ms-box-shadow:none;
40
+ -o-box-shadow:none;
41
+ box-shadow:none;
42
+ -webkit-appearance:none;
43
+ transition: none;
44
+ -webkit-transition: none;
45
+ -moz-transition: none;
46
+ -o-transition: none;
47
+ -ms-transition: none;
48
+ }
49
+
50
+ /**
51
+ * Tags Addon
52
+ */
53
+ .envira-tags-filter-list {
54
+ clear: both;
55
+ margin: 0 0 10px 0;
56
+
57
+ li.envira-tags-filter,
58
+ li.envira-tag-filter {
59
+ float: left;
60
+ margin: 0 20px 10px 0;
61
+
62
+ }
63
+ .envira-tag-filter-link {
64
+ font-size: 13px;
65
+ font-weight: bold;
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Breadcrumbs Addon
71
+ */
72
+ .envira-breadcrumbs {
73
+ display: block;
74
+ margin: 0 0 20px 0;
75
+ padding: 10px;
76
+ background: #eee;
77
+ clear: both;
78
+
79
+ a {
80
+ text-decoration: none;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * WooCommerce Addon
86
+ */
87
+ .envira-hidden {
88
+ display: none;
89
+ }
90
+
91
+ /**
92
+ * Main Wrapper
93
+ */
94
+ .envira-gallery-wrap {
95
+ width: 100%;
96
+ margin: 0 auto 20px auto;
97
+
98
+ /**
99
+ * Pagination Addon
100
+ */
101
+ .envira-pagination {
102
+ margin: 0 0 20px 0;
103
+ }
104
+
105
+ /**
106
+ * Description
107
+ */
108
+ .envira-gallery-description {
109
+ clear: both;
110
+ }
111
+
112
+ /**
113
+ * Inner Wrapper
114
+ */
115
+ .envira-gallery-public {
116
+ width: 100%;
117
+ margin: 0 auto 20px auto;
118
+ -webkit-box-sizing: border-box;
119
+ -moz-box-sizing: border-box;
120
+ box-sizing: border-box;
121
+
122
+ /**
123
+ * Clearing
124
+ */
125
+ &.envira-clear {
126
+ clear: both;
127
+
128
+ &:after {
129
+ clear: both;
130
+ content: '.';
131
+ display: block;
132
+ height: 0;
133
+ line-height: 0;
134
+ overflow: auto;
135
+ visibility: hidden;
136
+ zoom: 1;
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Inner
142
+ */
143
+ .envira-gallery-item-inner {
144
+ position: relative;
145
+
146
+ /**
147
+ * Dynamic Positioning
148
+ */
149
+ .envira-gallery-position-overlay {
150
+ box-sizing: border-box;
151
+ position: absolute;
152
+ overflow: visible;
153
+ z-index: 999;
154
+
155
+ /**
156
+ * Top Left
157
+ */
158
+ &.envira-gallery-top-left {
159
+ top: 0;
160
+ left: 0;
161
+ padding: 5px 0 0 5px;
162
+ }
163
+
164
+ /**
165
+ * Top Right
166
+ */
167
+ &.envira-gallery-top-right {
168
+ top: 0;
169
+ right: 0;
170
+ padding: 5px 5px 0 0;
171
+ text-align: right;
172
+ }
173
+
174
+ /**
175
+ * Bottom Left
176
+ */
177
+ &.envira-gallery-bottom-left {
178
+ bottom: 0;
179
+ left: 0;
180
+ padding: 0 0 5px 5px;
181
+ }
182
+
183
+ /**
184
+ * Bottom Right
185
+ */
186
+ &.envira-gallery-bottom-right {
187
+ bottom: 0;
188
+ right: 0;
189
+ padding: 0 5px 5px 0;
190
+ text-align: right;
191
+ }
192
+
193
+ }
194
+
195
+ }
196
+
197
+ /**
198
+ * Gallery Item
199
+ */
200
+ .envira-gallery-item {
201
+ float: left;
202
+
203
+ /**
204
+ * Link
205
+ */
206
+ > .envira-gallery-link {
207
+ display: block;
208
+ outline: none;
209
+ border: 0 none;
210
+ position: relative;
211
+ }
212
+
213
+ /**
214
+ * Image
215
+ */
216
+ img {
217
+ float: none;
218
+ display: block;
219
+ margin: 0 auto;
220
+ padding: 0;
221
+ max-width: 100%;
222
+ }
223
+
224
+ /**
225
+ * Videos
226
+ */
227
+ iframe, video {
228
+ display: block;
229
+ margin: 0 auto;
230
+ width: 100%;
231
+ }
232
+ }
233
+
234
+ /**
235
+ * Column Widths and Clearing
236
+ */
237
+ &.envira-gallery-1-columns {
238
+ .envira-gallery-item {
239
+ clear: both;
240
+ width: 100%;
241
+ }
242
+ }
243
+ &.envira-gallery-2-columns {
244
+ .envira-gallery-item {
245
+ width: 50%;
246
+
247
+ &:nth-child(2n+1) {
248
+ clear: both;
249
+ }
250
+ }
251
+ }
252
+ &.envira-gallery-3-columns {
253
+ .envira-gallery-item {
254
+ width: 33.33%;
255
+
256
+ &:nth-child(3n+1) {
257
+ clear: both;
258
+ }
259
+ }
260
+ }
261
+ &.envira-gallery-4-columns {
262
+ .envira-gallery-item {
263
+ width: 25%;
264
+ margin: 0;
265
+ padding: 0;
266
+ box-sizing: border-box;
267
+
268
+ &:nth-child(4n+1) {
269
+ clear: both;
270
+ }
271
+ }
272
+ }
273
+ &.envira-gallery-5-columns {
274
+ .envira-gallery-item {
275
+ width: 20%;
276
+
277
+ &:nth-child(5n+1) {
278
+ clear: both;
279
+ }
280
+ }
281
+ }
282
+ &.envira-gallery-6-columns {
283
+ .envira-gallery-item {
284
+ width: 16.66%;
285
+
286
+ &:nth-child(6n+1) {
287
+ clear: both;
288
+ }
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Optional: Isotope
294
+ * - if enabled, .enviratope is added to .envira-gallery-public
295
+ * - no clearing on gallery items
296
+ */
297
+ &.enviratope {
298
+ .envira-gallery-item {
299
+ clear: none !important;
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Optional: CSS Animations
305
+ * - if enabled, .envira-gallery-css-animations is added to .envira-gallery-public
306
+ */
307
+ &.envira-gallery-css-animations {
308
+ /**
309
+ * Gallery Item
310
+ */
311
+ .envira-gallery-item {
312
+ /**
313
+ * Image
314
+ */
315
+ img {
316
+ opacity: 0;
317
+ transition: all .2s ease-in-out;
318
+ }
319
+
320
+ /**
321
+ * Image Hover
322
+ * - Always force opacity: 1, as the CSS Opacity setting for images may be less e.g. 0.5
323
+ */
324
+ a:hover {
325
+ img {
326
+ opacity: 1 !important;
327
+ }
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }
333
+
334
+ /**
335
+ * Main Wrapper
336
+ */
337
+ .envira-gallery-public.envira-justified-gallery {
338
+ /**
339
+ * Inner
340
+ */
341
+ .envira-gallery-item-inner {
342
+ position: absolute;
343
+ }
344
+ .envira-exif {
345
+
346
+ }
347
+
348
+ /* .envira-gallery-description {
349
+ &.envira-gallery-description-above {
350
+ display: table;
351
+ }
352
+ }*/
353
+ }
354
+
355
+ /**
356
+ * RTL Support
357
+ */
358
+ .envira-gallery-wrap.envira-gallery-rtl {
359
+ /**
360
+ * Inner Wrapper
361
+ */
362
+ .envira-gallery-public {
363
+ /**
364
+ * Gallery Item
365
+ */
366
+ .envira-gallery-item {
367
+ float: right;
368
+ }
369
+ }
370
+ }
371
+
372
+ /**
373
+ * Mobile Landscape Size to Tablet Portrait (devices and browsers)
374
+ * - Envira Gallery Columns: If 4, 5 or 6, reduce to 3 columns. Isotope will detect change + resize automatically.
375
+ */
376
+ @media only screen and (max-width: 767px) {
377
+ /**
378
+ * Main Wrapper
379
+ */
380
+ .envira-gallery-wrap {
381
+ /**
382
+ * Inner Wrapper
383
+ */
384
+ .envira-gallery-public {
385
+ /**
386
+ * Column Widths and Clearing
387
+ */
388
+
389
+ // 4, 5 + 6 cols becomes 3 cols
390
+ &.envira-gallery-4-columns {
391
+ .envira-gallery-item {
392
+ width: 33%;
393
+
394
+ &:nth-child(4n+1) {
395
+ clear: none;
396
+ }
397
+ &:nth-child(3n+1) {
398
+ clear: both;
399
+ }
400
+ }
401
+ }
402
+ &.envira-gallery-5-columns {
403
+ .envira-gallery-item {
404
+ width: 33%;
405
+
406
+ &:nth-child(5n+1) {
407
+ clear: none;
408
+ }
409
+ &:nth-child(3n+1) {
410
+ clear: both;
411
+ }
412
+ }
413
+ }
414
+ &.envira-gallery-6-columns {
415
+ .envira-gallery-item {
416
+ width: 33%;
417
+
418
+ &:nth-child(6n+1) {
419
+ clear: none;
420
+ }
421
+ &:nth-child(3n+1) {
422
+ clear: both;
423
+ }
424
+ }
425
+ }
426
+
427
+ /**
428
+ * Optional: Isotope
429
+ * - if enabled, .enviratope is added to .envira-gallery-public
430
+ * - no clearing on gallery items
431
+ */
432
+ &.enviratope {
433
+ .envira-gallery-item {
434
+ clear: none !important;
435
+ }
436
+ }
437
+ }
438
+ }
439
+ }
440
+
441
+ /**
442
+ * Mobile Landscape (devices and browsers)
443
+ * - Envira Gallery Columns: Reduce to 2 column. Isotope will detect change + resize automatically.
444
+ */
445
+ @media only screen and (max-width: 459px) {
446
+ /**
447
+ * Main Wrapper
448
+ */
449
+ .envira-gallery-wrap {
450
+ /**
451
+ * Inner Wrapper
452
+ */
453
+ .envira-gallery-public {
454
+ /**
455
+ * Column Widths and Clearing
456
+ */
457
+
458
+ // 2, 3, 4, 5 + 6 cols becomes 2 cols
459
+ &.envira-gallery-2-columns,
460
+ &.envira-gallery-3-columns,
461
+ &.envira-gallery-4-columns,
462
+ &.envira-gallery-5-columns,
463
+ &.envira-gallery-6-columns {
464
+ .envira-gallery-item {
465
+ width: 50% ;
466
+
467
+ &:nth-child(3n+1),
468
+ &:nth-child(4n+1),
469
+ &:nth-child(5n+1),
470
+ &:nth-child(6n+1) {
471
+ clear: none;
472
+ }
473
+
474
+ &:nth-child(2n+1) {
475
+ clear: both;
476
+ }
477
+ }
478
+ }
479
+
480
+ /**
481
+ * Optional: Isotope
482
+ * - if enabled, .enviratope is added to .envira-gallery-public
483
+ * - no clearing on gallery items
484
+ */
485
+ &.enviratope {
486
+ .envira-gallery-item {
487
+ clear: none !important;
488
+ }
489
+ }
490
+ }
491
+ }
492
+ }
493
+
494
+ /**
495
+ * Mobile Portrait (devices and browsers)
496
+ * - Envira Gallery Columns: Reduce to 1 column. Isotope will detect change + resize automatically.
497
+ */
498
+ @media only screen and (max-width: 320px) {
499
+ /**
500
+ * Main Wrapper
501
+ */
502
+ .envira-gallery-wrap {
503
+ /**
504
+ * Inner Wrapper
505
+ */
506
+ .envira-gallery-public {
507
+ /**
508
+ * Column Widths and Clearing
509
+ */
510
+
511
+ // 1, 2, 3, 4, 5 + 6 cols becomes 2 cols
512
+ &.envira-gallery-1-columns,
513
+ &.envira-gallery-2-columns,
514
+ &.envira-gallery-3-columns,
515
+ &.envira-gallery-4-columns,
516
+ &.envira-gallery-5-columns,
517
+ &.envira-gallery-6-columns {
518
+ .envira-gallery-item {
519
+ width: 100% ;
520
+
521
+ &:nth-child(2n+1),
522
+ &:nth-child(3n+1),
523
+ &:nth-child(4n+1),
524
+ &:nth-child(5n+1),
525
+ &:nth-child(6n+1) {
526
+ clear: both;
527
+ }
528
+ }
529
+ }
530
+
531
+ /**
532
+ * Optional: Isotope
533
+ * - if enabled, .enviratope is added to .envira-gallery-public
534
+ * - no clearing on gallery items
535
+ */
536
+ &.enviratope {
537
+ .envira-gallery-item {
538
+ clear: none !important;
539
+ }
540
+ }
541
+ }
542
+ }
543
+ }
544
+
545
+ /* ==========================================================================
546
+ Envira Lightbox Gallery Styles
547
+ ========================================================================== */
548
+
549
+ /*! envirabox v2.1.5 fancyapps.com | fancyapps.com/envirabox/#license */
550
+ .envirabox-wrap,
551
+ .envirabox-skin,
552
+ .envirabox-outer,
553
+ .envirabox-inner,
554
+ .envirabox-image,
555
+ .envirabox-wrap iframe,
556
+ .envirabox-wrap object,
557
+ .envirabox-nav,
558
+ .envirabox-nav span,
559
+ .envirabox-tmp,
560
+ .envirabox-buttons,
561
+ .envirabox-thumbs,
562
+ .envirabox-wrap *,
563
+ .envirabox-thumbs *,
564
+ .envirabox-buttons *
565
+ {
566
+ background:none;
567
+ border:0 none;
568
+ border-radius:0;
569
+ -webkit-border-radius:0;
570
+ -moz-border-radius:0;
571
+ float:none;
572
+ font-size:100%;
573
+ height:auto;
574
+ letter-spacing:normal;
575
+ list-style:none;
576
+ outline:none;
577
+ position:static;
578
+ text-decoration:none;
579
+ text-indent:0;
580
+ text-shadow:none;
581
+ text-transform:none;
582
+ width:auto;
583
+ visibility:visible;
584
+ overflow:visible;
585
+ margin:0;
586
+ padding:0;
587
+ line-height:1;
588
+ box-sizing:border-box;
589
+ -webkit-box-sizing:border-box;
590
+ -moz-box-sizing:border-box;
591
+ -webkit-box-shadow:none;
592
+ -moz-box-shadow:none;
593
+ -ms-box-shadow:none;
594
+ -o-box-shadow:none;
595
+ box-shadow:none;
596
+ -webkit-appearance:none;
597
+ transition: none;
598
+ -webkit-transition: none;
599
+ -moz-transition: none;
600
+ -o-transition: none;
601
+ -ms-transition: none;
602
+ }
603
+
604
+ .envirabox-wrap {
605
+ position: absolute;
606
+ top: 0;
607
+ left: 0;
608
+ z-index: 988020;
609
+ }
610
+
611
+ .envirabox-skin {
612
+ position: relative;
613
+ background: #f9f9f9;
614
+ color: #444;
615
+ text-shadow: none;
616
+ -webkit-border-radius: 4px;
617
+ -moz-border-radius: 4px;
618
+ border-radius: 4px;
619
+ }
620
+
621
+ .envirabox-opened {
622
+ z-index: 988030;
623
+ }
624
+
625
+ .envirabox-opened .envirabox-skin {
626
+ -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
627
+ -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
628
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
629
+ }
630
+
631
+ .envirabox-outer, .envirabox-inner {
632
+ position: relative;
633
+ }
634
+
635
+ .envirabox-inner {
636
+ overflow: hidden;
637
+
638
+ /**
639
+ * Actions
640
+ */
641
+
642
+ .envirabox-actions {
643
+ position: absolute;
644
+ z-index: 988050;
645
+ }
646
+
647
+ /**
648
+ * Dynamic Positioning
649
+ */
650
+ .envirabox-position-overlay {
651
+ box-sizing: border-box;
652
+ position: absolute;
653
+ overflow: visible;
654
+ z-index: 988041; /* Beat the prev/next controls */
655
+ padding: 0;
656
+
657
+ /**
658
+ * Top Left
659
+ */
660
+ &.envira-gallery-top-left {
661
+ top: 0;
662
+ left: 0;
663
+ text-align: left;
664
+ }
665
+
666
+ /**
667
+ * Top Right
668
+ */
669
+ &.envira-gallery-top-right {
670
+ top: 0;
671
+ right: 0;
672
+ text-align: right;
673
+ }
674
+
675
+ /**
676
+ * Bottom Left
677
+ */
678
+ &.envira-gallery-bottom-left {
679
+ bottom: 0;
680
+ left: 0;
681
+ text-align: left;
682
+ }
683
+
684
+ /**
685
+ * Bottom Right
686
+ */
687
+ &.envira-gallery-bottom-right {
688
+ bottom: 0;
689
+ right: 0;
690
+ text-align: right;
691
+ }
692
+
693
+ }
694
+ }
695
+
696
+ .envirabox-type-iframe .envirabox-inner {
697
+ -webkit-overflow-scrolling: touch;
698
+ height: 100%;
699
+ .envirabox-iframe {
700
+ width: 100%;
701
+ height: 100%;
702
+ }
703
+ }
704
+
705
+ .envirabox-error {
706
+ color: #444;
707
+ font: 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
708
+ margin: 0;
709
+ padding: 15px;
710
+ white-space: nowrap;
711
+ }
712
+
713
+ .envirabox-image, .envirabox-iframe {
714
+ display: block;
715
+ width: 100%;
716
+ height: 100%;
717
+ }
718
+
719
+ .envirabox-image {
720
+ max-width: 100%;
721
+ max-height: 100%;
722
+ }
723
+
724
+ #envirabox-loading, .envirabox-close, .envirabox-prev span, .envirabox-next span {
725
+ background-image: url('images/envirabox_sprite.png');
726
+ }
727
+
728
+ #envirabox-loading {
729
+ position: absolute;
730
+ top: 50%;
731
+ left: 50%;
732
+ margin-top: -22px;
733
+ margin-left: -22px;
734
+ background-position: 0 -108px;
735
+ opacity: 0.8;
736
+ cursor: pointer;
737
+ z-index: 988060;
738
+ }
739
+
740
+ #envirabox-loading div {
741
+ width: 44px;
742
+ height: 44px;
743
+ background: url('images/envirabox_loading.gif') center center no-repeat;
744
+ }
745
+
746
+ .envirabox-close {
747
+ position: absolute;
748
+ top: -18px;
749
+ right: -18px;
750
+ width: 36px;
751
+ height: 36px;
752
+ cursor: pointer;
753
+ z-index: 988040;
754
+ }
755
+
756
+ .envirabox-nav {
757
+ position: absolute;
758
+ top: 0;
759
+ width: 40%;
760
+ height: 100%;
761
+ cursor: pointer;
762
+ text-decoration: none;
763
+ background: transparent url('images/blank.gif'); /* helps IE */
764
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
765
+ z-index: 988040;
766
+ }
767
+
768
+ .envirabox-nav:focus {
769
+ outline:none;
770
+ }
771
+
772
+ .envirabox-prev {
773
+ left: 0;
774
+ }
775
+
776
+ .envirabox-next {
777
+ right: 0;
778
+ }
779
+
780
+ .envirabox-prev.envirabox-arrows-outside {
781
+ left: -100px;
782
+ }
783
+ .envirabox-next.envirabox-arrows-outside {
784
+ right: -100px;
785
+ }
786
+
787
+ .envirabox-nav span {
788
+ position: absolute;
789
+ top: 50%;
790
+ width: 36px;
791
+ height: 34px;
792
+ margin-top: -18px;
793
+ cursor: pointer;
794
+ z-index: 988040;
795
+ visibility: hidden;
796
+ }
797
+
798
+ body.envira-touch .envirabox-nav span {
799
+ visibility: visible;
800
+ }
801
+
802
+ .envirabox-prev span {
803
+ left: 10px;
804
+ background-position: 0 -36px;
805
+ }
806
+
807
+ .envirabox-next span {
808
+ right: 10px;
809
+ background-position: 0 -72px;
810
+ }
811
+
812
+ .envirabox-nav:hover span {
813
+ visibility: visible;
814
+ }
815
+
816
+ .envirabox-tmp {
817
+ position: absolute;
818
+ top: -99999px;
819
+ left: -99999px;
820
+ max-width: 99999px;
821
+ max-height: 99999px;
822
+ overflow: visible !important;
823
+ }
824
+
825
+ a.envirabox-close,
826
+ a.envirabox-nav,
827
+ a.fancy-close:hover,
828
+ a.envirabox-nav:hover {
829
+ border: 0;
830
+ }
831
+
832
+ /* Overlay helper */
833
+
834
+ .envirabox-lock {
835
+ overflow: visible !important;
836
+ width: auto;
837
+ }
838
+
839
+ .envirabox-lock body {
840
+ overflow: hidden !important;
841
+ }
842
+
843
+ .envirabox-lock-test {
844
+ overflow-y: hidden !important;
845
+ }
846
+
847
+ .envirabox-overlay {
848
+ position: absolute;
849
+ top: 0;
850
+ left: 0;
851
+ overflow: hidden;
852
+ display: none;
853
+ z-index: 988010;
854
+ background: url('images/envirabox_overlay.png');
855
+ }
856
+
857
+ .envirabox-overlay-fixed {
858
+ position: fixed;
859
+ bottom: 0;
860
+ right: 0;
861
+ }
862
+
863
+ .envirabox-lock .envirabox-overlay {
864
+ // overflow: auto;
865
+ }
866
+
867
+ /* Title helper */
868
+ .envirabox-title {
869
+ visibility: hidden;
870
+ font-size: 13px;
871
+ line-height: 20px;
872
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
873
+ position: relative;
874
+ text-shadow: none;
875
+ z-index: 988090;
876
+ }
877
+
878
+ .envirabox-opened .envirabox-title {
879
+ visibility: visible;
880
+ }
881
+
882
+ .envirabox-title-float-wrap {
883
+ position: absolute;
884
+ bottom: auto;
885
+ right: 50%;
886
+ margin-top: 20px;
887
+ z-index: 988050;
888
+ text-align: center;
889
+ }
890
+
891
+ .envirabox-title-float-wrap .child {
892
+ display: inline-block;
893
+ margin-right: -100%;
894
+ padding: 2px 20px;
895
+ background: transparent; /* Fallback for web browsers that doesn't support RGBa */
896
+ background: rgba(0, 0, 0, 0.8);
897
+ -webkit-border-radius: 15px;
898
+ -moz-border-radius: 15px;
899
+ border-radius: 15px;
900
+ text-shadow: 0 1px 2px #222;
901
+ color: #FFF;
902
+ line-height: 24px;
903
+ white-space: normal;
904
+ }
905
+ .envirabox-title-float-wrap.envirabox-title-text-wrap .child {
906
+ white-space: normal;
907
+ }
908
+
909
+ .envirabox-title-outside-wrap {
910
+ position: relative;
911
+ margin-top: 10px;
912
+ color: #fff;
913
+ }
914
+
915
+ .envirabox-title-inside-wrap {
916
+ padding-top: 10px;
917
+ }
918
+
919
+ .envirabox-title-over-wrap {
920
+ position: absolute;
921
+ bottom: 0;
922
+ left: 0;
923
+ color: #fff;
924
+ padding: 10px;
925
+ background: #000;
926
+ background: rgba(0, 0, 0, .8);
927
+ }
928
+
929
+ #envirabox-buttons {
930
+ position: fixed;
931
+ left: 0;
932
+ width: 100%;
933
+ z-index: 988050;
934
+ }
935
+
936
+ #envirabox-buttons.top {
937
+ top: 10px;
938
+ }
939
+
940
+ #envirabox-buttons.bottom {
941
+ bottom: 10px;
942
+ }
943
+
944
+ /* Allows for thumbnails to be displayed */
945
+ #envirabox-buttons.bottom.has-padding {
946
+ bottom: 80px;
947
+ }
948
+ #envirabox-buttons.top.has-padding {
949
+ top: 80px;
950
+ }
951
+
952
+ #envirabox-buttons ul {
953
+ display: block;
954
+ width: auto;
955
+ height: 30px;
956
+ margin: 0 auto;
957
+ padding: 0;
958
+ list-style: none;
959
+ border: 1px solid #111;
960
+ border-radius: 3px;
961
+ -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
962
+ -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
963
+ box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
964
+ background: rgb(50,50,50);
965
+ background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%);
966
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51)));
967
+ background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
968
+ background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
969
+ background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
970
+ background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
971
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 );
972
+ }
973
+
974
+ #envirabox-buttons ul li {
975
+ float: left;
976
+ margin: 0;
977
+ padding: 0;
978
+ }
979
+
980
+ #envirabox-buttons ul li#envirabox-buttons-title span {
981
+ display: block;
982
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
983
+ font-size: 13px;
984
+ line-height: 30px;
985
+ padding: 0 10px;
986
+ color: #fff;
987
+ }
988
+
989
+ #envirabox-buttons a {
990
+ display: block;
991
+ width: 30px;
992
+ height: 30px;
993
+ text-indent: -9999px;
994
+ background-color: transparent;
995
+ background-image: url('images/envirabox_buttons.png');
996
+ background-repeat: no-repeat;
997
+ outline: none;
998
+ opacity: 0.8;
999
+ }
1000
+
1001
+ #envirabox-buttons a:hover {
1002
+ opacity: 1;
1003
+ }
1004
+
1005
+ #envirabox-buttons a.btnPrev {
1006
+ background-position: 5px 0;
1007
+ }
1008
+
1009
+ #envirabox-buttons a.btnNext {
1010
+ background-position: -33px 0;
1011
+ border-right: 1px solid #3e3e3e;
1012
+ }
1013
+
1014
+ #envirabox-buttons a.btnPlay {
1015
+ background-position: 0 -30px;
1016
+ }
1017
+
1018
+ #envirabox-buttons a.btnPlayOn {
1019
+ background-position: -30px -30px;
1020
+ }
1021
+
1022
+ #envirabox-buttons a.btnToggle,
1023
+ #envirabox-buttons a.btnFullscreen {
1024
+ background-position: 3px -60px;
1025
+ border-left: 1px solid #111;
1026
+ border-right: 1px solid #3e3e3e;
1027
+ width: 35px
1028
+ }
1029
+
1030
+ #envirabox-buttons a.btnToggleOn,
1031
+ #envirabox-buttons a.btnFullscreenOn {
1032
+ background-position: -27px -60px;
1033
+ }
1034
+
1035
+ #envirabox-buttons a.btnClose {
1036
+ border-left: 1px solid #111;
1037
+ width: 35px;
1038
+ background-position: -56px 0px;
1039
+ }
1040
+
1041
+ #envirabox-buttons a.btnDisabled {
1042
+ opacity : 0.4;
1043
+ cursor: default;
1044
+ }
1045
+
1046
+ /**
1047
+ * Lightbox: Thumbnails Helper
1048
+ */
1049
+ #envirabox-thumbs {
1050
+ position: fixed;
1051
+ left: 0;
1052
+ width: 100%;
1053
+ overflow: hidden;
1054
+ z-index: 988050;
1055
+ box-sizing: border-box;
1056
+
1057
+ &.top {
1058
+ top: 2px;
1059
+ }
1060
+
1061
+ &.top.has-other-content {
1062
+ top: 50px;
1063
+ }
1064
+
1065
+ &.bottom {
1066
+ bottom: 2px;
1067
+ }
1068
+
1069
+ &.bottom.has-other-content {
1070
+ bottom: 50px;
1071
+ }
1072
+
1073
+ &.inline {
1074
+ position: absolute;
1075
+ }
1076
+
1077
+ * {
1078
+ box-sizing: border-box;
1079
+ }
1080
+
1081
+ }
1082
+
1083
+ #envirabox-thumbs ul {
1084
+ position: relative;
1085
+ list-style: none;
1086
+ margin: 0;
1087
+ padding: 0;
1088
+ }
1089
+
1090
+ #envirabox-thumbs ul li {
1091
+ border: 3px solid #fff;
1092
+ float: left;
1093
+ margin: 5px;
1094
+ opacity: 1;
1095
+ }
1096
+
1097
+ #envirabox-thumbs ul li.active {
1098
+ opacity: 0.75;
1099
+ border: 3px solid #888;
1100
+ }
1101
+
1102
+ #envirabox-thumbs ul li:hover {
1103
+ opacity: 0.75;
1104
+ }
1105
+
1106
+ #envirabox-thumbs ul li a {
1107
+ display: block;
1108
+ position: relative;
1109
+ overflow: hidden;
1110
+ border: 1px solid #222;
1111
+ background: #111;
1112
+ outline: none;
1113
+ }
1114
+
1115
+ #envirabox-thumbs ul li img {
1116
+ display: block;
1117
+ position: relative;
1118
+ border: 0;
1119
+ padding: 0;
1120
+ max-width: none;
1121
+ width: 100%;
1122
+ height: auto;
1123
+ }
1124
+
1125
+
1126
+ /* Retina stuff */
1127
+ @media
1128
+ only screen and (-webkit-min-device-pixel-ratio: 2),
1129
+ only screen and ( min--moz-device-pixel-ratio: 2),
1130
+ only screen and ( -o-min-device-pixel-ratio: 2/1),
1131
+ only screen and ( min-device-pixel-ratio: 2),
1132
+ only screen and ( min-resolution: 192dpi),
1133
+ only screen and ( min-resolution: 2dppx) {
1134
+
1135
+ #envirabox-loading, .envirabox-close, .envirabox-prev span, .envirabox-next span {
1136
+ background-image: url('images/envirabox_sprite@2x.png');
1137
+ background-size: 44px 152px;
1138
+ }
1139
+
1140
+ #envirabox-loading div {
1141
+ background-image: url('images/envirabox_loading@2x.gif');
1142
+ background-size: 24px 24px;
1143
+ }
1144
+
1145
+ }
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+ @media only screen and (max-width: 600px) {
1158
+
1159
+ .envirabox-prev.envirabox-arrows-outside {
1160
+ left: -75px;
1161
+ width: 12%;
1162
+ }
1163
+ .envirabox-next.envirabox-arrows-outside {
1164
+ right: -75px;
1165
+ width: 12%;
1166
+ }
1167
+
1168
+ }
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+ /*
1177
+ #content img{
1178
+ height: 0;
1179
+ width: 0;
1180
+ padding: 35px 120px; // adjust that depend on your image size
1181
+ background-image: url('YOUR_IMAGE_PATH');
1182
+ background-repeat: no-repeat;
1183
+ }*/
1184
+
1185
+ /*.envira-gallery-public a.envira-gallery-link {
1186
+ background-image: url("../images/placeholders/spinner.gif");
1187
+ background-repeat: no-repeat;
1188
+ background-position: center;
1189
+ background-size: 25%;
1190
+ display: inline-block;
1191
+ background-color: #f1f1f1;
1192
+ color: transparent; }*/
1193
+
1194
+ /*.envira-gallery-public img.envira-gallery-image {
1195
+ opacity: 0.0; }*/
1196
+
1197
+
1198
+ /*
1199
+
1200
+
1201
+
1202
+ .meter {
1203
+ box-sizing: unset;
1204
+ height: 20px;
1205
+ position: relative;
1206
+ margin: 10px 0 10px 0;
1207
+ background: #555;
1208
+ -moz-border-radius: 25px;
1209
+ -webkit-border-radius: 25px;
1210
+ border-radius: 25px;
1211
+ padding: 10px;
1212
+ -webkit-box-shadow: inset 0 -1px 1px rgba(255,255,255,0.3);
1213
+ -moz-box-shadow : inset 0 -1px 1px rgba(255,255,255,0.3);
1214
+ box-shadow : inset 0 -1px 1px rgba(255,255,255,0.3);
1215
+ }
1216
+ .meter > span {
1217
+ display: block;
1218
+ height: 100%;
1219
+ -webkit-border-top-right-radius: 8px;
1220
+ -webkit-border-bottom-right-radius: 8px;
1221
+ -moz-border-radius-topright: 8px;
1222
+ -moz-border-radius-bottomright: 8px;
1223
+ border-top-right-radius: 8px;
1224
+ border-bottom-right-radius: 8px;
1225
+ -webkit-border-top-left-radius: 20px;
1226
+ -webkit-border-bottom-left-radius: 20px;
1227
+ -moz-border-radius-topleft: 20px;
1228
+ -moz-border-radius-bottomleft: 20px;
1229
+ border-top-left-radius: 20px;
1230
+ border-bottom-left-radius: 20px;
1231
+ background-color: rgb(43,194,83);
1232
+ background-image: -webkit-gradient(
1233
+ linear,
1234
+ left bottom,
1235
+ left top,
1236
+ color-stop(0, rgb(43,194,83)),
1237
+ color-stop(1, rgb(84,240,84))
1238
+ );
1239
+ background-image: -moz-linear-gradient(
1240
+ center bottom,
1241
+ rgb(43,194,83) 37%,
1242
+ rgb(84,240,84) 69%
1243
+ );
1244
+ -webkit-box-shadow:
1245
+ inset 0 2px 9px rgba(255,255,255,0.3),
1246
+ inset 0 -2px 6px rgba(0,0,0,0.4);
1247
+ -moz-box-shadow:
1248
+ inset 0 2px 9px rgba(255,255,255,0.3),
1249
+ inset 0 -2px 6px rgba(0,0,0,0.4);
1250
+ box-shadow:
1251
+ inset 0 2px 9px rgba(255,255,255,0.3),
1252
+ inset 0 -2px 6px rgba(0,0,0,0.4);
1253
+ position: relative;
1254
+ overflow: hidden;
1255
+ }
1256
+ .meter > span:after, .animate > span > span {
1257
+ content: "";
1258
+ position: absolute;
1259
+ top: 0; left: 0; bottom: 0; right: 0;
1260
+ background-image:
1261
+ -webkit-gradient(linear, 0 0, 100% 100%,
1262
+ color-stop(.25, rgba(255, 255, 255, .2)),
1263
+ color-stop(.25, transparent), color-stop(.5, transparent),
1264
+ color-stop(.5, rgba(255, 255, 255, .2)),
1265
+ color-stop(.75, rgba(255, 255, 255, .2)),
1266
+ color-stop(.75, transparent), to(transparent)
1267
+ );
1268
+ background-image:
1269
+ -moz-linear-gradient(
1270
+ -45deg,
1271
+ rgba(255, 255, 255, .2) 25%,
1272
+ transparent 25%,
1273
+ transparent 50%,
1274
+ rgba(255, 255, 255, .2) 50%,
1275
+ rgba(255, 255, 255, .2) 75%,
1276
+ transparent 75%,
1277
+ transparent
1278
+ );
1279
+ z-index: 1;
1280
+ -webkit-background-size: 50px 50px;
1281
+ -moz-background-size: 50px 50px;
1282
+ background-size: 50px 50px;
1283
+ -webkit-animation: move 2s linear infinite;
1284
+ -moz-animation: move 2s linear infinite;
1285
+ -webkit-border-top-right-radius: 8px;
1286
+ -webkit-border-bottom-right-radius: 8px;
1287
+ -moz-border-radius-topright: 8px;
1288
+ -moz-border-radius-bottomright: 8px;
1289
+ border-top-right-radius: 8px;
1290
+ border-bottom-right-radius: 8px;
1291
+ -webkit-border-top-left-radius: 20px;
1292
+ -webkit-border-bottom-left-radius: 20px;
1293
+ -moz-border-radius-topleft: 20px;
1294
+ -moz-border-radius-bottomleft: 20px;
1295
+ border-top-left-radius: 20px;
1296
+ border-bottom-left-radius: 20px;
1297
+ overflow: hidden;
1298
+ }
1299
+
1300
+ .animate > span:after {
1301
+ display: none;
1302
+ }
1303
+
1304
+ @-webkit-keyframes move {
1305
+ 0% {
1306
+ background-position: 0 0;
1307
+ }
1308
+ 100% {
1309
+ background-position: 50px 50px;
1310
+ }
1311
+ }
1312
+
1313
+ @-moz-keyframes move {
1314
+ 0% {
1315
+ background-position: 0 0;
1316
+ }
1317
+ 100% {
1318
+ background-position: 50px 50px;
1319
+ }
1320
+ }
1321
+
1322
+
1323
+ .orange > span {
1324
+ background-color: #f1a165;
1325
+ background-image: -moz-linear-gradient(top, #f1a165, #f36d0a);
1326
+ background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f1a165),color-stop(1, #f36d0a));
1327
+ background-image: -webkit-linear-gradient(#f1a165, #f36d0a);
1328
+ }
1329
+
1330
+ .red > span {
1331
+ background-color: #f0a3a3;
1332
+ background-image: -moz-linear-gradient(top, #f0a3a3, #f42323);
1333
+ background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f0a3a3),color-stop(1, #f42323));
1334
+ background-image: -webkit-linear-gradient(#f0a3a3, #f42323);
1335
+ }
1336
+
1337
+ .nostripes > span > span, .nostripes > span:after {
1338
+ -webkit-animation: none;
1339
+ -moz-animation: none;
1340
+ background-image: none;
1341
+ }
1342
+
1343
+
1344
+ */
assets/scss/metabox.scss ADDED
@@ -0,0 +1,1598 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ metabox.css loads on any Envira Gallery and Album Create/Edit Screen
3
+
4
+ Any styles that will be used by the main Gallery / Album editor screen should be
5
+ added to this file
6
+ ========================================================================== */
7
+
8
+ /* ==========================================================================
9
+ Imports
10
+ ========================================================================== */
11
+ @import "vars";
12
+ @import "mixins";
13
+
14
+ /* ==========================================================================
15
+ Messages
16
+ ========================================================================== */
17
+ body.post-type-envira,
18
+ body.post-type-envira_album {
19
+ /**
20
+ * Add left and right margins to ensure the message notification horizontally lines up
21
+ * with the metaboxes
22
+ */
23
+ #message {
24
+ margin: 5px 20px 15px 20px;
25
+ }
26
+
27
+ #wp-link-wrap{
28
+ z-index: 180105 !important;
29
+ }
30
+
31
+ #wp-link-backdrop{
32
+ z-index: 160105 !important;
33
+
34
+ }
35
+ }
36
+
37
+ /* ==========================================================================
38
+ Form
39
+ - The envira-gallery class is assigned to the Gallery and Album Add/Edit screens form.
40
+ ========================================================================== */
41
+ form#post.envira-gallery {
42
+ /**
43
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
44
+ * and the content
45
+ */
46
+ margin: 0 20px;
47
+
48
+ /**
49
+ * Defined so we override WordPress' default styles
50
+ */
51
+ #poststuff {
52
+ /* ==========================================================================
53
+ Envira Gallery Shared Styles for Types and Settings
54
+ ========================================================================== */
55
+
56
+ /**
57
+ * Intro Text
58
+ */
59
+ p.envira-intro {
60
+ margin: 0;
61
+ padding: 0 0 30px 0;
62
+ border-bottom: 1px solid #ddd;
63
+ font-size: 16px;
64
+ font-weight: 700;
65
+
66
+ small {
67
+ margin: 5px 0 0 0;
68
+ display: block;
69
+ font-weight: 400;
70
+
71
+ a {
72
+ text-decoration: none;
73
+ font-weight: 600;
74
+ }
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Help Video
80
+ * - Can be placed inside p.envira-intro by JS, or outside p.envira-intro when
81
+ * viewing the Images tab for a Dynamic or Default Gallery
82
+ */
83
+ div.envira-video-help {
84
+ position: relative;
85
+ z-index: 1;
86
+ width: 100%;
87
+ margin: 20px 0 0 0;
88
+
89
+ iframe {
90
+ position: relative;
91
+ z-index: 1;
92
+ width: 100%;
93
+ height: auto;
94
+ min-height: 300px;
95
+ }
96
+
97
+ a.envira-video-close {
98
+ position: absolute;
99
+ z-index: 2;
100
+ top: -12px;
101
+ right: -12px;
102
+ width: 24px;
103
+ height: 24px;
104
+ line-height: 24px;
105
+ @include borderRadius(50%);
106
+ background: #f5f5f5;
107
+ color: #000;
108
+ text-align: center;
109
+ text-decoration: none;
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Image Grid
115
+ * - Used on the Images tab for Default Galleries, as well as the Preview Metabox
116
+ */
117
+ ul.envira-gallery-images-output {
118
+ width: 100%;
119
+
120
+ li {
121
+ position: relative;
122
+ display: inline-block;
123
+ width: 150px;
124
+ margin: 0 20px 20px 0;
125
+ padding: 0;
126
+ list-style: none;
127
+ vertical-align: top;
128
+ -moz-background-clip: padding;
129
+ -webkit-background-clip: padding-box;
130
+ background-clip: padding-box;
131
+ background: #f7f7f7;
132
+
133
+ img {
134
+ display: block;
135
+ width: 150px;
136
+ height: 150px;
137
+ }
138
+
139
+ /**
140
+ * If, for some reason, the image doesn't exist or fails to load,
141
+ * the placeholder logo is displayed
142
+ */
143
+ div.placeholder-image {
144
+ display: block;
145
+ width: 148px;
146
+ height: 149px;
147
+ background: url(images/icons/leaf.svg) center no-repeat;
148
+ background-size: 64px 64px;
149
+ border-left: 1px solid #dfdfdf;
150
+ border-top: 1px solid #dfdfdf;
151
+ border-right: 1px solid #dfdfdf;
152
+ }
153
+
154
+ /**
155
+ * Metadata
156
+ */
157
+ div.meta {
158
+ width: 148px;
159
+ overflow: hidden;
160
+ text-align: center;
161
+ border-left: 1px solid #dfdfdf;
162
+ border-bottom: 1px solid #dfdfdf;
163
+ border-right: 1px solid #dfdfdf;
164
+
165
+ /**
166
+ * Title
167
+ */
168
+ div.title {
169
+ font-size: 12px;
170
+ font-weight: 700;
171
+ width: 138px;
172
+ height: 18px;
173
+ line-height: 18px;
174
+ margin: 8px 5px;
175
+ overflow: hidden;
176
+
177
+ /**
178
+ * Hint
179
+ * - Displays the full title on hover
180
+ */
181
+ a.hint {
182
+ position: absolute;
183
+ display: inline-block;
184
+ bottom: 10px;
185
+ right: 10px;
186
+ width: 16px;
187
+ height: 16px;
188
+ background: #f7f7f7;
189
+
190
+ &.hidden {
191
+ display: none;
192
+ }
193
+ }
194
+ }
195
+
196
+ /**
197
+ * Additional metadata
198
+ */
199
+ div.additional {
200
+ display: none;
201
+ margin: 5px 0 0 0;
202
+ font-weight: 400;
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Tick Icon
208
+ */
209
+ a.check {
210
+ display: none;
211
+ position: absolute;
212
+ right: 5px;
213
+ top: 5px;
214
+ width: 24px;
215
+ height: 24px;
216
+ background-color: #eee;
217
+ -webkit-box-shadow: 0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,0.15);
218
+ box-shadow: 0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,0.15);
219
+
220
+ div.media-modal-icon {
221
+ display: none;
222
+ width: 15px;
223
+ height: 15px;
224
+ margin: 5px 0 0 5px;
225
+ background-position: -21px 0;
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Edit / Delete Buttons
231
+ */
232
+ a.dashicons {
233
+ position: absolute;
234
+ display: block;
235
+ top: 5px;
236
+ left: 5px;
237
+ width: 25px;
238
+ height: 25px;
239
+ line-height: 25px;
240
+ font-size: 18px; /* Controls the icon size */
241
+ outline: none;
242
+ z-index: 20;
243
+ border-radius: 2px;
244
+ -moz-border-radius: 2px;
245
+ -webkit-border-radius: 2px;
246
+
247
+ &.envira-gallery-modify-image {
248
+ background: #0085ba;
249
+ color: $white;
250
+ }
251
+ &.envira-gallery-remove-image {
252
+ left: 35px;
253
+ background: #e02626;
254
+ color: $white;
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Selected state
260
+ */
261
+ &.selected {
262
+ width: 148px;
263
+ border: 2px solid $green !important;
264
+
265
+ a.check {
266
+ display: block;
267
+ background-color: $green;
268
+ -webkit-box-shadow: 0 0 0 1px #fff,0 0 0 2px $green;
269
+ box-shadow: 0 0 0 1px #fff,0 0 0 2px $green;
270
+
271
+ div.media-modal-icon {
272
+ display: block;
273
+ }
274
+ }
275
+
276
+ div.meta {
277
+ width: 146px;
278
+ }
279
+ }
280
+
281
+ /**
282
+ * Multiple selection sorting - stacks images when the user has selected more than one image + dragged them
283
+ */
284
+ &.ui-sortable-helper {
285
+ li {
286
+ position: absolute;
287
+ top: 0;
288
+ left: 0;
289
+ }
290
+ }
291
+ }
292
+
293
+ /**
294
+ * List View
295
+ */
296
+ &.list {
297
+ li {
298
+ position: relative;
299
+ z-index: 2;
300
+ display: block;
301
+ width: 100%;
302
+ margin: 0 0 10px 0;
303
+ padding: 10px 15px;
304
+ background: #fff;
305
+ border: 1px solid #ddd;
306
+ -webkit-box-sizing: border-box;
307
+ -moz-box-sizing: border-box;
308
+ box-sizing: border-box;
309
+ border-radius: 2px;
310
+ -moz-border-radius: 2px;
311
+ -webkit-border-radius: 2px;
312
+
313
+ img {
314
+ display: inline-block;
315
+ width: 75px;
316
+ margin-left: 45px;
317
+ }
318
+
319
+ /**
320
+ * Metadata
321
+ */
322
+ div.meta {
323
+ position: absolute;
324
+ z-index: 1;
325
+ left: 0;
326
+ display: inline-block;
327
+ width: 100%;
328
+ padding: 0 80px 0 150px;
329
+ border: none;
330
+ font-weight: 700;
331
+ text-align: left;
332
+ -webkit-box-sizing: border-box;
333
+ -moz-box-sizing: border-box;
334
+ box-sizing: border-box;
335
+
336
+ /**
337
+ * Title
338
+ */
339
+ div.title {
340
+ display: block;
341
+ width: 100%;
342
+ height: auto;
343
+ font-size: 16px;
344
+ margin: 0;
345
+ padding: 0;
346
+
347
+ a.hint {
348
+ display: none;
349
+ }
350
+ }
351
+
352
+ /**
353
+ * Additional metadata
354
+ * - Displayed in list view
355
+ */
356
+ div.additional {
357
+ display: block;
358
+ }
359
+ }
360
+
361
+ /**
362
+ * Checkbox
363
+ * - Always display
364
+ */
365
+ a.check {
366
+ display: block;
367
+ position: absolute;
368
+ left: 15px;
369
+ top: 35px;
370
+ }
371
+
372
+ a.envira-gallery-remove-image {
373
+ left: auto;
374
+ top: 10px;
375
+ right: 10px;
376
+ }
377
+
378
+ a.envira-gallery-modify-image {
379
+ left: auto;
380
+ top: 10px;
381
+ right: 40px;
382
+ }
383
+ }
384
+ }
385
+ }
386
+
387
+ /* ==========================================================================
388
+ Envira Gallery Type
389
+ Envira Album Type
390
+ ========================================================================== */
391
+ #envira-gallery {
392
+ margin: 60px 0 20px 0;
393
+ }
394
+ #envira-gallery,
395
+ #envira-albums {
396
+ /**
397
+ * Hide the title bar of the metabox, so we have a seamless style
398
+ */
399
+ .handlediv {
400
+ display: none;
401
+ }
402
+ .hndle {
403
+ display: none;
404
+ }
405
+
406
+ /**
407
+ * Tabs
408
+ * - Move up vertically so they sit above the metabox
409
+ */
410
+ h2.nav-tab-wrapper {
411
+ margin: -56px 0 0 -1px; /* The height of the tab */
412
+ padding: 0;
413
+ border-bottom: none;
414
+
415
+ /**
416
+ * Increase tab sizes and style
417
+ */
418
+ .nav-tab {
419
+ display: inline-block;
420
+ width: 49%;
421
+ margin: 0;
422
+ padding: 15px 0;
423
+ text-align: center;
424
+ font-size: 16px;
425
+ border-color: #e5e5e5; /* Matches the metabox border for a seamless UI */
426
+ background: #f5f5f5;
427
+
428
+ /**
429
+ * Envira Gallery Icon
430
+ */
431
+ &.nav-tab-native-envira-gallery {
432
+ span {
433
+ display: inline-block;
434
+ background: url(images/icons/leaf.svg) 0 5px no-repeat;
435
+ background-size: 14px 14px;
436
+ text-indent: 20px;
437
+ }
438
+ }
439
+
440
+ /**
441
+ * External Gallery Tab
442
+ */
443
+ &.nav-tab-external-gallery {
444
+ margin-right: -1px;
445
+ }
446
+
447
+ /**
448
+ * Hover and Active States
449
+ */
450
+ &:hover,
451
+ &.envira-active {
452
+ background: $white;
453
+ border-bottom: 1px solid $white;
454
+ }
455
+
456
+ /**
457
+ * Focus State
458
+ * - Remove WordPress' blue focus box from tabs
459
+ */
460
+ &:focus {
461
+ -webkit-box-shadow: none;
462
+ -moz-box-shadow: none;
463
+ box-shadow: none;
464
+ }
465
+
466
+ &:last-child {
467
+ float: right;
468
+ }
469
+
470
+ /**
471
+ * Hides the radio input on a label
472
+ * The radio input will be selected when the label is clicked
473
+ */
474
+ input[type=radio] {
475
+ display: none;
476
+ }
477
+ }
478
+ }
479
+
480
+ /**
481
+ * Tab Settings
482
+ */
483
+ .inside {
484
+ margin: 0;
485
+ padding: 0;
486
+
487
+ /**
488
+ * Native Envira Gallery Uploader / Select Files
489
+ * - Styles the pluploader instance to look the way we want it
490
+ * - Also see responsive styles at the end of this file
491
+ */
492
+ #envira-gallery-native {
493
+ #plupload-upload-ui {
494
+ /* Reserves the space needed for the drag-drop-area, which is loaded using JS */
495
+ height: 210px;
496
+
497
+ /**
498
+ * A drag-drop-area div is always output, whether we're on a touch
499
+ * device or not. WordPress will only style this div if its parent
500
+ * has the .drag-drop class (i.e. touch devices won't get any CSS styling)
501
+ *
502
+ * The below CSS ensures that the drag drop area looks consistent
503
+ * regardless of device used, and then adjusts the layout if drag-drop is supported.
504
+ */
505
+ #drag-drop-area {
506
+ display: none;
507
+ border: 4px dashed #b4b9be;
508
+ height: 200px;
509
+
510
+ .drag-drop-inside {
511
+ margin: 0 auto 0 auto;
512
+
513
+ p {
514
+ display: block;
515
+ text-align: center;
516
+ color: #a0a5aa;
517
+ position: absolute;
518
+ top: 50%;
519
+ left: 50%;
520
+ margin: -10px 0 0 -10px;
521
+
522
+ /**
523
+ * "Drop Files here"
524
+ */
525
+ &.drag-drop-info {
526
+ display: none;
527
+ font-size: 20px;
528
+ }
529
+ &.drag-drop-buttons {
530
+ text-align: center;
531
+ position: relative;
532
+ top: 20px;
533
+ left: 0;
534
+ margin: 0;
535
+ }
536
+ }
537
+ }
538
+ }
539
+
540
+ /**
541
+ * Select Files from Other Sources Button
542
+ */
543
+ a.envira-media-library.button {
544
+ display: none;
545
+ position: absolute;
546
+ margin: 0 auto;
547
+ left: 280px;
548
+ right: 0;
549
+ width: 230px;
550
+ top: 115px;
551
+ text-align: center;
552
+ }
553
+
554
+ /**
555
+ * When the uploader supports drag and drop, a .drag-drop
556
+ * class is appended to #drag-drop-area by WordPress
557
+ *
558
+ * We use this to show certain descriptions
559
+ */
560
+ &.drag-drop {
561
+ #drag-drop-area {
562
+ .drag-drop-inside {
563
+ width: 520px;
564
+ margin: 50px auto 0 auto;
565
+
566
+ p {
567
+ position: relative;
568
+ top: 0;
569
+ left: 0;
570
+ margin: 0;
571
+ }
572
+
573
+ p.drag-drop-info {
574
+ display: block;
575
+ }
576
+
577
+ p.drag-drop-buttons {
578
+ margin: 10px 0 0 0;
579
+ text-align: left;
580
+ }
581
+ }
582
+
583
+
584
+ }
585
+ }
586
+
587
+ /**
588
+ * Upload Progress Bar
589
+ */
590
+ .envira-progress-bar {
591
+ display: none;
592
+ width: 100%;
593
+ position: relative;
594
+ height: 10px;
595
+ width: 100%;
596
+ margin: 10px auto;
597
+ border-radius: 10px;
598
+ background: #dfdfdf;
599
+ background: rgba(0,0,0,.1);
600
+
601
+ .envira-progress-bar-inner {
602
+ height: 10px;
603
+ min-width: 20px;
604
+ width: 0;
605
+ background: #aaa;
606
+ background: rgba(0,0,0,.2);
607
+ border-radius: 10px;
608
+ -webkit-transition: width 300ms;
609
+ -moz-transition: width 300ms;
610
+ -ms-transition: width 300ms;
611
+ -o-transition: width 300ms;
612
+ transition: width 300ms;
613
+ }
614
+
615
+ .envira-progress-bar-status {
616
+ clear: both;
617
+ position: absolute;
618
+ right: 0;
619
+ width: 50%;
620
+ height: 30px;
621
+ margin: 12px 0 0 0;
622
+ text-align: right;
623
+
624
+ .uploading {
625
+
626
+ }
627
+ .done {
628
+ display: none;
629
+ }
630
+ }
631
+
632
+
633
+ }
634
+
635
+ p.upload-flash-bypass {
636
+ display: none;
637
+ }
638
+ }
639
+ }
640
+
641
+ div.envira-tab {
642
+ padding: 20px;
643
+
644
+ /**
645
+ * External Gallery Tab Area
646
+ */
647
+ &#envira-gallery-external {
648
+ text-align: center;
649
+
650
+ /**
651
+ * Header
652
+ */
653
+ p.envira-intro {
654
+ margin: 0 0 20px 0;
655
+ padding: 0;
656
+ border: none;
657
+ }
658
+
659
+ /**
660
+ * External Gallery Types
661
+ */
662
+ ul#envira-gallery-types-nav {
663
+ margin: 0 0 40px 0;
664
+ text-align: center;
665
+
666
+ li {
667
+ display: inline-block;
668
+ margin: 0 20px 0 0;
669
+ vertical-align: top;
670
+
671
+ &:last-child {
672
+ margin: 0;
673
+ }
674
+
675
+ /**
676
+ * Pro uses a <label> element so the user can select the Gallery Type
677
+ * Lite uses an <a> element so the user can go to the Upgrade URL
678
+ */
679
+ label,
680
+ a {
681
+ float: left;
682
+ width: 110px;
683
+
684
+ input {
685
+ display: none;
686
+ }
687
+ div.icon {
688
+ width: 110px;
689
+ height: 110px;
690
+ margin: 0 0 10px 0;
691
+ border: 1px solid #ddd;
692
+ background-size: 64px 64px;
693
+ background-position: center;
694
+ background-repeat: no-repeat;
695
+ }
696
+ div.title {
697
+ font-weight: 700;
698
+ }
699
+ }
700
+
701
+ /**
702
+ * Hover State
703
+ * Selected State
704
+ */
705
+ &:hover,
706
+ &.envira-active {
707
+ label,
708
+ a {
709
+ div.icon {
710
+ background-color: #f7fcf3;
711
+ border-color: #7cc048;
712
+ }
713
+ }
714
+ }
715
+
716
+ /**
717
+ * Featured Content
718
+ */
719
+ &#envira-gallery-type-fc {
720
+ label,
721
+ a {
722
+ div.icon {
723
+ background-image: url(../images/types/fc.png);
724
+ }
725
+ }
726
+ }
727
+
728
+ /**
729
+ * Instagram
730
+ */
731
+ &#envira-gallery-type-instagram {
732
+ label,
733
+ a {
734
+ div.icon {
735
+ background-image: url(../images/types/instagram.png);
736
+ }
737
+ }
738
+ }
739
+ }
740
+ }
741
+
742
+ /**
743
+ * Upgrade Button
744
+ */
745
+ a.button.button-x-large {
746
+ margin-top: 30px;
747
+ }
748
+ }
749
+ }
750
+ }
751
+ }
752
+
753
+ /* ==========================================================================
754
+ Envira Albums Drag & Drop Area
755
+ ========================================================================== */
756
+ #envira-albums {
757
+ .inside {
758
+ #envira-types {
759
+ #envira-album-native {
760
+ position: relative;
761
+
762
+ /**
763
+ * Galleries (Drop Target)
764
+ */
765
+ ul#envira-album-drag-drop-area {
766
+ z-index: 2;
767
+ min-height: 200px;
768
+ margin: 0;
769
+ padding: 20px;
770
+ border: 4px dashed #b4b9be;
771
+ -webkit-box-sizing: border-box;
772
+ -moz-box-sizing: border-box;
773
+ box-sizing: border-box;
774
+
775
+ li {
776
+ cursor: move;
777
+ }
778
+ }
779
+
780
+ /**
781
+ * Drag & Drop Instructions
782
+ */
783
+ p.drag-drop-info {
784
+ position: absolute;
785
+ top: 80px;
786
+ z-index: 1;
787
+ margin: 0 auto;
788
+ left: 0;
789
+ right: 0;
790
+ text-align: center;
791
+ color: #a0a5aa;
792
+ font-size: 20px;
793
+ -webkit-box-sizing: border-box;
794
+ -moz-box-sizing: border-box;
795
+ box-sizing: border-box;
796
+
797
+ span {
798
+ display: block;
799
+
800
+ &.drag {
801
+
802
+ }
803
+ &.click {
804
+ font-size: 18px;
805
+ }
806
+ }
807
+ small {
808
+ display: block;
809
+ margin: 5px 0;
810
+ font-size: 14px;
811
+ }
812
+ }
813
+ }
814
+ }
815
+ }
816
+ }
817
+
818
+ /* ==========================================================================
819
+ Envira Gallery Settings
820
+ Envira Albums Settings
821
+ ========================================================================== */
822
+ #envira-gallery-settings,
823
+ #envira-albums-settings {
824
+ background: $beige_light; /* The background for tabs, full height */
825
+
826
+ /**
827
+ * Clearfix
828
+ */
829
+ &:after {
830
+ content: "";
831
+ display: table;
832
+ clear: both;
833
+ }
834
+
835
+ /**
836
+ * Hide the title bar of the metabox, so we have a seamless style
837
+ */
838
+ .handlediv {
839
+ display: none;
840
+ }
841
+ .hndle {
842
+ display: none;
843
+ }
844
+ .inside {
845
+ margin: 0;
846
+ padding: 0;
847
+ }
848
+
849
+ /**
850
+ * Tabs
851
+ */
852
+ ul#envira-tabs-nav {
853
+ width: 160px;
854
+ margin: 0;
855
+ padding: 0;
856
+ border-right: 1px solid #ddd;
857
+
858
+ li {
859
+ float: left;
860
+ width: 100%;
861
+ margin: 0;
862
+ padding: 0;
863
+
864
+ a {
865
+ float: left;
866
+ width: 120px;
867
+ margin: 0 20px;
868
+ padding: 20px 0 20px 25px;
869
+ text-decoration: none;
870
+ color: #999;
871
+ border-bottom: 1px solid #ddd;
872
+ background-position: left center;
873
+ background-repeat: no-repeat;
874
+ -webkit-box-sizing: border-box;
875
+ -moz-box-sizing: border-box;
876
+ box-sizing: border-box;
877
+ transition: none;
878
+ -webkit-transition: none;
879
+
880
+ /**
881
+ * Hover and Active States
882
+ */
883
+ &:hover,
884
+ &.envira-active {
885
+ width: 161px;
886
+ margin: -1px 0 0 0;
887
+ padding: 20px 20px 20px ( 20px + 25px );
888
+ text-decoration: none;
889
+ color: #444;
890
+ border-top: 1px solid #ddd;
891
+ border-bottom: 1px solid #ddd;
892
+ border-right: 1px solid $white;
893
+ background-color: $white;
894
+ background-position: 20px center;
895
+ }
896
+
897
+ /**
898
+ * Focus State
899
+ * - Remove WordPress' blue focus box from tabs
900
+ */
901
+ &:focus {
902
+ -webkit-box-shadow: none;
903
+ -moz-box-shadow: none;
904
+ box-shadow: none;
905
+ }
906
+ }
907
+
908
+ /**
909
+ * Last Item
910
+ */
911
+ &:last-child {
912
+ a {
913
+ border-bottom: none;
914
+
915
+ &:hover {
916
+ border-bottom: none;
917
+ }
918
+ }
919
+ }
920
+
921
+ /**
922
+ * Tab Icons
923
+ */
924
+ &.envira-images,
925
+ &.envira-galleries {
926
+ a {
927
+ background-image: url(images/icons/leaf.svg);
928
+ background-size: 16px 16px;
929
+ }
930
+ }
931
+ &.envira-config {
932
+ a {
933
+ background-image: url(images/icons/configuration.svg);
934
+ background-size: 16px 16px;
935
+ }
936
+ }
937
+ &.envira-lightbox {
938
+ a {
939
+ background-image: url(images/icons/lightbox.svg);
940
+ background-size: 16px 16px;
941
+ }
942
+ }
943
+ &.envira-mobile {
944
+ a {
945
+ background-image: url(images/icons/mobile.svg);
946
+ background-size: 16px 16px;
947
+ }
948
+ }
949
+ &.envira-breadcrumbs {
950
+ a {
951
+ background-image: url(images/icons/breadcrumbs.svg);
952
+ background-size: 16px 16px;
953
+ }
954
+ }
955
+ &.envira-comments {
956
+ a {
957
+ background-image: url(images/icons/comments.svg);
958
+ background-size: 16px 16px;
959
+ }
960
+ }
961
+ &.envira-downloads {
962
+ a {
963
+ background-image: url(images/icons/downloads.svg);
964
+ background-size: 16px 16px;
965
+ }
966
+ }
967
+ &.envira-exif {
968
+ a {
969
+ background-image: url(images/icons/exif.svg);
970
+ background-size: 16px 16px;
971
+ }
972
+ }
973
+ &.envira-pagination {
974
+ a {
975
+ background-image: url(images/icons/pagination.svg);
976
+ background-size: 16px 16px;
977
+ }
978
+ }
979
+ &.envira-pinterest {
980
+ a {
981
+ background-image: url(images/icons/pinterest.svg);
982
+ background-size: 16px 16px;
983
+ }
984
+ }
985
+ &.envira-proofing {
986
+ a {
987
+ background-image: url(images/icons/proofing.svg);
988
+ background-size: 16px 16px;
989
+ }
990
+ }
991
+ &.envira-printing {
992
+ a {
993
+ background-image: url(images/icons/printing.svg);
994
+ background-size: 16px 16px;
995
+ }
996
+ }
997
+ &.envira-slideshow {
998
+ a {
999
+ background-image: url(images/icons/slideshow.svg);
1000
+ background-size: 16px 16px;
1001
+ }
1002
+ }
1003
+ &.envira-standalone {
1004
+ a {
1005
+ background-image: url(images/icons/standalone.svg);
1006
+ background-size: 16px 16px;
1007
+ }
1008
+ }
1009
+ &.envira-social {
1010
+ a {
1011
+ background-image: url(images/icons/social.svg);
1012
+ background-size: 16px 16px;
1013
+ }
1014
+ }
1015
+ &.envira-tags {
1016
+ a {
1017
+ background-image: url(images/icons/tags.svg);
1018
+ background-size: 16px 16px;
1019
+ }
1020
+ }
1021
+ &.envira-videos {
1022
+ a {
1023
+ background-image: url(images/icons/video.svg);
1024
+ background-size: 16px 16px;
1025
+ }
1026
+ }
1027
+ &.envira-watermarking {
1028
+ a {
1029
+ background-image: url(images/icons/watermark.svg);
1030
+ background-size: 16px 16px;
1031
+ }
1032
+ }
1033
+ &.envira-woocommerce {
1034
+ a {
1035
+ background-image: url(images/icons/woocommerce.svg);
1036
+ background-size: 16px 16px;
1037
+ }
1038
+ }
1039
+ &.envira-zoom {
1040
+ a {
1041
+ background-image: url(images/icons/zoom.svg);
1042
+ background-size: 16px 16px;
1043
+ }
1044
+ }
1045
+ &.envira-misc {
1046
+ a {
1047
+ background-image: url(images/icons/misc.svg);
1048
+ background-size: 16px 16px;
1049
+ }
1050
+ }
1051
+ }
1052
+ }
1053
+
1054
+ /**
1055
+ * Settings
1056
+ */
1057
+ #envira-tabs {
1058
+ margin: 0 0 0 160px; /* Must match #ul#envira-tabs-nav width */
1059
+ padding: 20px;
1060
+ -webkit-box-sizing: border-box;
1061
+ -moz-box-sizing: border-box;
1062
+ box-sizing: border-box;
1063
+ background: $white;
1064
+ border-left: 1px solid #ddd;
1065
+
1066
+ /**
1067
+ * Headings
1068
+ */
1069
+ h2 {
1070
+ clear: none; // Prevents config layouts breaking in WordPress 4.3 and older
1071
+ }
1072
+
1073
+ /**
1074
+ * All Tabs
1075
+ */
1076
+ table.form-table {
1077
+ clear: none;
1078
+ margin: 0 0 40px 0;
1079
+
1080
+ &.no-margin {
1081
+ margin: 0;
1082
+ }
1083
+
1084
+ /**
1085
+ * Row padding
1086
+ */
1087
+ th,td {
1088
+ padding-top: 20px;
1089
+ padding-bottom: 20px;
1090
+ }
1091
+
1092
+ /**
1093
+ * Sub Headings
1094
+ * - Used to denote an Addon's settings within a settings tab e.g. the Mobile tab
1095
+ */
1096
+ tr.sub-heading {
1097
+ th {
1098
+ margin: 0;
1099
+ padding: 20px 0 0 0;
1100
+ font-style: italic;
1101
+ font-weight: 400;
1102
+ font-size: 16px;
1103
+ }
1104
+ }
1105
+
1106
+ /**
1107
+ * Full width labels (used for checkboxes that we don't want to be inline)
1108
+ */
1109
+ label.full-width {
1110
+ display: block;
1111
+ margin: 0 0 5px 0;
1112
+
1113
+ &:first-child {
1114
+ margin-top: 5px;
1115
+ }
1116
+ }
1117
+
1118
+ /**
1119
+ * Full width textareas
1120
+ */
1121
+ textarea {
1122
+ width: 100%;
1123
+ }
1124
+
1125
+ /**
1126
+ * Checkbox alignment
1127
+ */
1128
+ input[type=checkbox] {
1129
+ margin-bottom: 2px;
1130
+ }
1131
+
1132
+ /**
1133
+ * Descriptions
1134
+ */
1135
+ p.description,
1136
+ span.description {
1137
+ font-size: 13px;
1138
+ font-style: italic;
1139
+ color: #666;
1140
+ }
1141
+ }
1142
+
1143
+ /**
1144
+ * Tab: Images
1145
+ */
1146
+ #envira-tab-images {
1147
+ /**
1148
+ * Inline Navigation
1149
+ * - Select All
1150
+ * - List View / Grid View
1151
+ * - Edit / Delete Selected Items
1152
+ */
1153
+ nav {
1154
+ width: 100%;
1155
+
1156
+ &.envira-tab-options {
1157
+ margin: 20px 0;
1158
+ }
1159
+
1160
+ a.dashicons {
1161
+ position: absolute;
1162
+ color: #999;
1163
+
1164
+ &.dashicons-grid-view {
1165
+ right: 20px;
1166
+ }
1167
+ &.dashicons-list-view {
1168
+ right: 50px;
1169
+ }
1170
+
1171
+ &.selected {
1172
+ color: #23282d;
1173
+ }
1174
+
1175
+ span {
1176
+ display: inline-block;
1177
+ text-indent: -9999px;
1178
+ }
1179
+ }
1180
+
1181
+ /**
1182
+ * Edit / Delete Selected
1183
+ * - Hidden by default, shown by JS when image(s) are selected
1184
+ */
1185
+ &.envira-select-options {
1186
+ display: none;
1187
+ }
1188
+ }
1189
+
1190
+ /**
1191
+ * Images
1192
+ * - Show move cursor
1193
+ */
1194
+ ul#envira-gallery-output {
1195
+ li {
1196
+ cursor: move;
1197
+ }
1198
+ }
1199
+ }
1200
+
1201
+ /**
1202
+ * Tab: Galleries
1203
+ * - Used on Albums
1204
+ */
1205
+ #envira-tab-galleries {
1206
+ /**
1207
+ * Inline Navigation
1208
+ * - Search
1209
+ */
1210
+ nav {
1211
+ width: 100%;
1212
+
1213
+ &.envira-tab-options {
1214
+ height: 40px;
1215
+ margin: 20px 0;
1216
+ position: relative;
1217
+
1218
+ /**
1219
+ * Add Galleries to Album Button
1220
+ */
1221
+ a.envira-galleries-add {
1222
+ display: none; /* Displayed via JS when Galleries selected */
1223
+ position: absolute;
1224
+ top: 0;
1225
+ left: 0;
1226
+ }
1227
+
1228
+ /**
1229
+ * Search
1230
+ */
1231
+ input#envira-albums-gallery-search {
1232
+ position: absolute;
1233
+ top: 0;
1234
+ right: 0;
1235
+ }
1236
+ }
1237
+
1238
+ /**
1239
+ * Bulk Action Buttons
1240
+ * - Hidden by default, shown by JS when galleries(s) are selected
1241
+ */
1242
+ &.envira-select-options {
1243
+ display: none;
1244
+ }
1245
+ }
1246
+
1247
+ /**
1248
+ * Images
1249
+ * - Show move cursor
1250
+ * - Hide Edit & Delete icons, as these are only displayed when the gallery is assigned to the Album
1251
+ */
1252
+ ul.envira-gallery-images-output {
1253
+ li {
1254
+ cursor: move;
1255
+
1256
+ a.envira-gallery-remove-image,
1257
+ a.envira-gallery-modify-image {
1258
+ display: none;
1259
+ }
1260
+ }
1261
+ }
1262
+ }
1263
+
1264
+ /**
1265
+ * Clearfix
1266
+ */
1267
+ &:after {
1268
+ content: "";
1269
+ display: table;
1270
+ clear: both;
1271
+ }
1272
+ }
1273
+
1274
+ }
1275
+
1276
+ /* ==========================================================================
1277
+ Envira Gallery Preview Metabox
1278
+ ========================================================================== */
1279
+ #envira-gallery-preview {
1280
+ /**
1281
+ * Clearfix
1282
+ */
1283
+ &:after {
1284
+ content: "";
1285
+ display: table;
1286
+ clear: both;
1287
+ }
1288
+
1289
+ /**
1290
+ * Hide the title bar of the metabox, so we have a seamless style
1291
+ */
1292
+ button.handlediv {
1293
+ display: none;
1294
+ }
1295
+ h2.hndle {
1296
+ display: none;
1297
+ }
1298
+ .inside {
1299
+ margin: 0;
1300
+ padding: 20px;
1301
+ }
1302
+ }
1303
+ }
1304
+ }
1305
+
1306
+ /* ==========================================================================
1307
+ Media Modal (Insert Images and Edit Metadata)
1308
+ ========================================================================== */
1309
+ .media-modal {
1310
+ /**
1311
+ * Header Buttons
1312
+ */
1313
+ .edit-attachment-frame {
1314
+ .edit-media-header {
1315
+ button.right {
1316
+ border-right: 1px solid #ddd;
1317
+ }
1318
+ }
1319
+ }
1320
+
1321
+ /**
1322
+ * Upload
1323
+ */
1324
+ .uploader-inline {
1325
+ /**
1326
+ * Don't display the 'Select Files from Other Sources' button that we add to plupload
1327
+ * when we're in a modal.
1328
+ */
1329
+ a.envira-media-library.button {
1330
+ display: none;
1331
+ }
1332
+ }
1333
+
1334
+ /**
1335
+ * Insert
1336
+ */
1337
+ .attachment.details {
1338
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px $green;
1339
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px $green;
1340
+
1341
+ .check {
1342
+ background-color: $green;
1343
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px $green;
1344
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px $green;
1345
+ }
1346
+ }
1347
+
1348
+ /**
1349
+ * Attachments
1350
+ * - Ensures that images fill each <li> attachment block, providing compatibility from WordPress 4.0 upwards
1351
+ * - Removed as breaks 4.4, 4.5
1352
+ ul.attachments {
1353
+ li.attachment {
1354
+ width: 20%;
1355
+
1356
+ img {
1357
+ width: 100%;
1358
+ height: 100%;
1359
+ }
1360
+ }
1361
+ }
1362
+ */
1363
+
1364
+ /**
1365
+ * Albums: Select Gallery Cover Image
1366
+ * - Add some top spacing so that a selected cover image that's on the first line of the results
1367
+ * doesn't have its checkmark cut off
1368
+ */
1369
+ ul.attachments.envira-albums-gallery-cover-image {
1370
+ padding: 10px;
1371
+ }
1372
+
1373
+ /**
1374
+ * Bulk Edit Attachments
1375
+ * - Restore cursor to default, so the user doesn't think they can click an image
1376
+ */
1377
+ ul.attachments.envira-bulk-edit {
1378
+ li.attachment {
1379
+ cursor: default;
1380
+
1381
+ .attachment-preview {
1382
+ cursor: default;
1383
+ }
1384
+ }
1385
+ }
1386
+
1387
+ /**
1388
+ * Edit
1389
+ */
1390
+ .attachment-details {
1391
+ .attachment-info {
1392
+ padding: 16px;
1393
+
1394
+ /**
1395
+ * Settings
1396
+ * - Contains one or more setting elements (Title, Alt etc)
1397
+ */
1398
+ .settings {
1399
+ margin: 0;
1400
+ padding: 0;
1401
+ border: none;
1402
+
1403
+ /**
1404
+ * Individual Setting (Title, Alt etc)
1405
+ */
1406
+ .setting {
1407
+ margin: 0 0 20px 0;
1408
+ padding: 0 0 20px 0;
1409
+ border-bottom: 1px solid #ddd;
1410
+
1411
+ /**
1412
+ * Input
1413
+ */
1414
+ input[type="text"],
1415
+ textarea {
1416
+ display: block;
1417
+ width: 100%;
1418
+ min-width: 100%;
1419
+ margin: 0;
1420
+ }
1421
+ input[type="checkbox"] {
1422
+ float: left;
1423
+ margin: 0 5px 0 0;
1424
+ }
1425
+ select {
1426
+ margin: 0;
1427
+ }
1428
+
1429
+ span {
1430
+ /**
1431
+ * Title
1432
+ */
1433
+ &.name {
1434
+ display: block;
1435
+ width: 100%;
1436
+ min-width: 100%;
1437
+ margin: 0;
1438
+ padding: 0;
1439
+ text-align: left;
1440
+ font-weight: 700;
1441
+ font-size: 14px;
1442
+ }
1443
+
1444
+ /**
1445
+ * Description
1446
+ */
1447
+ &.description {
1448
+ text-align: left;
1449
+ font-style: normal;
1450
+ font-size: 13px;
1451
+ font-style: italic;
1452
+ color: #666;
1453
+ }
1454
+ }
1455
+
1456
+ div.description {
1457
+ clear: both;
1458
+ float: left;
1459
+ margin: 5px 0 0 0;
1460
+ text-align: left;
1461
+ font-size: 13px;
1462
+ font-style: italic;
1463
+ color: #666;
1464
+ }
1465
+ }
1466
+ }
1467
+
1468
+ /**
1469
+ * Actions
1470
+ * - Save Button
1471
+ * - Spinner
1472
+ */
1473
+ div.actions {
1474
+ /**
1475
+ * Ensure button renders at correct height
1476
+ */
1477
+ a.button {
1478
+ display: inline-block;
1479
+ }
1480
+ }
1481
+ }
1482
+ }
1483
+ }
1484
+
1485
+ /* ==========================================================================
1486
+ Retina
1487
+ ========================================================================== */
1488
+ @media (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
1489
+ /**
1490
+ * WP media-views.css doesn't use .wp-core-ui for the x2 icons, therefore they never get applied
1491
+ */
1492
+ .wp-core-ui a.check .media-modal-icon {
1493
+ background-image: url(../../../../../wp-includes/images/uploader-icons-2x.png) !important;
1494
+ -webkit-background-size: 134px 15px;
1495
+ background-size: 134px 15px;
1496
+ }
1497
+ }
1498
+
1499
+ /* ==========================================================================
1500
+ Responsive
1501
+ ========================================================================== */
1502
+ @media screen and (max-width: 1100px) {
1503
+ /* ==========================================================================
1504
+ Form
1505
+ - The envira-gallery class is assigned to the Gallery and Album Add/Edit screens form.
1506
+ ========================================================================== */
1507
+ form#post.envira-gallery {
1508
+ #poststuff {
1509
+ #envira-gallery,
1510
+ #envira-albums {
1511
+ /**
1512
+ * Tab Settings
1513
+ */
1514
+ .inside {
1515
+ /**
1516
+ * Native Envira Gallery
1517
+ */
1518
+ #envira-gallery-native {
1519
+ #plupload-upload-ui {
1520
+ &.drag-drop {
1521
+ #drag-drop-area {
1522
+ border-color: #d5d5d5;
1523
+
1524
+ .drag-drop-inside {
1525
+ width: 100%;
1526
+ margin-top: 20px;
1527
+
1528
+ p.drag-drop-buttons {
1529
+ text-align: center;
1530
+ }
1531
+ }
1532
+ }
1533
+ }
1534
+ a.envira-media-library.button {
1535
+ left: 0;
1536
+ right: 0;
1537
+ width: 235px;
1538
+ top: 145px;
1539
+ }
1540
+ }
1541
+ }
1542
+ }
1543
+ }
1544
+ }
1545
+ }
1546
+ }
1547
+
1548
+ @media screen and (max-width: 768px) {
1549
+ /* ==========================================================================
1550
+ Form
1551
+ - The envira-gallery class is assigned to the Gallery and Album Add/Edit screens form.
1552
+ ========================================================================== */
1553
+ form#post.envira-gallery {
1554
+ #poststuff {
1555
+ /* ==========================================================================
1556
+ Envira Gallery Settings
1557
+ Envira Albums Settings
1558
+ ========================================================================== */
1559
+ #envira-gallery-settings,
1560
+ #envira-albums-settings {
1561
+ /**
1562
+ * Tabs
1563
+ */
1564
+ ul#envira-tabs-nav {
1565
+ width: 60px;
1566
+
1567
+ li {
1568
+ a {
1569
+ width: 60px;
1570
+ height: 60px;
1571
+ margin: 0;
1572
+ padding: 0;
1573
+ text-indent: -9999px;
1574
+ background-position: center;
1575
+
1576
+ &:hover,
1577
+ &.envira-active {
1578
+ width: 60px;
1579
+ height: 60px;
1580
+ margin: 0;
1581
+ padding: 0;
1582
+ text-indent: -9999px;
1583
+ background-position: center;
1584
+ }
1585
+ }
1586
+ }
1587
+ }
1588
+
1589
+ /**
1590
+ * Settings
1591
+ */
1592
+ #envira-tabs {
1593
+ margin: 0 0 0 60px; /* Must match #ul#envira-tabs-nav width */
1594
+ }
1595
+ }
1596
+ }
1597
+ }
1598
+ }
assets/scss/settings.scss ADDED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ settings.css loads on all the Envira Settings Administration Screen
3
+
4
+ Any styles that will be used by the Settings section (or are useful to be
5
+ included for future use) should be added to this file:
6
+ - Settings
7
+ - Settings Tabs
8
+ - Addons
9
+ ========================================================================== */
10
+
11
+ /* ==========================================================================
12
+ Imports
13
+ ========================================================================== */
14
+ @import "vars";
15
+ @import "mixins";
16
+
17
+ /* ==========================================================================
18
+ Settings Styles
19
+ ========================================================================== */
20
+ .envira-tab {
21
+ label {
22
+ margin-top: 7px;
23
+ display: block;
24
+ }
25
+ }
26
+ .nav-tab {
27
+ // ensure tabs are floated
28
+ float: left;
29
+ }
30
+
31
+ #envira-gallery-settings {
32
+ padding: 20px 0;
33
+
34
+ #envira-gallery-refresh-submit {
35
+ margin-left: 10px;
36
+ }
37
+
38
+ .envira-hideme {
39
+ display: none;
40
+ }
41
+ /**
42
+ * Clearing
43
+ */
44
+ .envira-clear {
45
+ clear: both;
46
+
47
+ &:after {
48
+ clear: both;
49
+ content: '.';
50
+ display: block;
51
+ height: 0;
52
+ line-height: 0;
53
+ overflow: auto;
54
+ visibility: hidden;
55
+ zoom: 1;
56
+ }
57
+ }
58
+
59
+ .envira-gallery {
60
+ margin: 15px 0 20px;
61
+ }
62
+
63
+ /**
64
+ * Tab Panels
65
+ */
66
+ .envira-tab {
67
+ display: none;
68
+
69
+ /**
70
+ * Active Tab Panel
71
+ */
72
+ &.envira-active {
73
+ display: block;
74
+ }
75
+
76
+ th {
77
+ width: 170px;
78
+ padding-right: 40px;
79
+ @include mq(xs) {
80
+ width: auto;
81
+ }
82
+ }
83
+
84
+ input[type="text"],
85
+ input[type="number"],
86
+ input[type="password"],
87
+ select,
88
+ textarea {
89
+ width: 350px;
90
+ padding-right: 0;
91
+ @include mq(xs) {
92
+ width: 100%;
93
+ }
94
+ font-size: 13px;
95
+ }
96
+
97
+ input[type="text"],
98
+ input[type="number"],
99
+ input[type="password"] {
100
+ height: 32px;
101
+ @include mq(xs) {
102
+ height: auto;
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Copy to Clipboard Button
108
+ */
109
+ a.envira-clipboard {
110
+ width: 33px;
111
+ padding: 0;
112
+ }
113
+
114
+ /**
115
+ * Submit Button
116
+ */
117
+ #envira-gallery-settings-submit {
118
+ margin: 40px 0 0 0px;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Refresh
124
+ */
125
+ #envira-gallery-refresh-submit {
126
+ vertical-align: baseline;
127
+ }
128
+ }
129
+
130
+ /* ==========================================================================
131
+ Settings Tab Styles
132
+ ========================================================================== */
133
+ #envira-tabs {
134
+ .form-table {
135
+ th, td {
136
+ padding-top: 40px;
137
+ padding-bottom: 40px;
138
+ }
139
+ th {
140
+ @include mq(sm) {
141
+ padding-top: 40px;
142
+ padding-bottom: 10px;
143
+ padding-right: 0px !important;
144
+ }
145
+ @include mq(xs) {
146
+ padding-top: 40px;
147
+ padding-bottom: 10px;
148
+ padding-right: 0px !important;
149
+ }
150
+ }
151
+ tr#envira-settings-key-box th { /* bit of a hack */
152
+ @include mq(sm) {
153
+ padding-top: 20px;
154
+ }
155
+ @include mq(xs) {
156
+ padding-top: 20px;
157
+ }
158
+ }
159
+ td {
160
+ @include mq(sm) {
161
+ padding-top: 0;
162
+ padding-right: 0px;
163
+ }
164
+ @include mq(xs) {
165
+ padding-top: 0;
166
+ padding-right: 0px;
167
+ }
168
+ }
169
+ tr {
170
+ border-bottom: 1px solid #ddd;
171
+ }
172
+ tr.no-bottom-border {
173
+ border-bottom: 0;
174
+ }
175
+ }
176
+ .description {
177
+ color: $grey;
178
+ font-size: 13px;
179
+ margin-top: 10px;
180
+ }
181
+ }
182
+ #envira-tabs-nav {
183
+ border-bottom: 0 !important;
184
+ background-color: $white;
185
+ height: $navbar-height;
186
+ padding-left: 20px;
187
+ margin: 0 0 0 -20px;
188
+ display: table;
189
+ width: 100%;
190
+ @include mq(xs) {
191
+ height: auto;
192
+ background-color: transparent;
193
+ margin: 5px 0 0 0;
194
+ padding: 0 10px;
195
+ display: table;
196
+ }
197
+ a {
198
+ float: left; /* Required for WordPress 4.3 and under */
199
+ border-left: 1px solid $color_bg;
200
+ border-right: 1px solid $color_bg;
201
+ border-top: 0;
202
+ color: $grey_dark;
203
+ background: none;
204
+ line-height: $navbar-height;
205
+ font-size: $font_size_tab;
206
+ padding: 0 15px;
207
+ margin: 0;
208
+ @include mq(xs) {
209
+ @include borderRadius(5px);
210
+ background-color: $beige_light;
211
+ padding: 0px 20px;
212
+ margin: 5px 5px 0px 0;
213
+ border: 1px solid #ddd;
214
+ line-height: 35px;
215
+ min-height: 30px;
216
+ }
217
+ }
218
+ a:first-child {
219
+ /* margin-left: 20px;
220
+ @include mq(xs) {
221
+ margin-left: 0;
222
+ }*/
223
+ }
224
+ .envira-active {
225
+ background-color: $color_bg;
226
+ border-left: 0;
227
+ border-right: 0;
228
+ border-top: 0;
229
+ color: $black;
230
+ @include mq(xs) {
231
+ background-color: $grey_dark;
232
+ color: $white;
233
+ }
234
+ }
235
+ a:hover {
236
+ @include mq(xs) {
237
+ background-color: $grey_dark;
238
+ color: $white;
239
+ }
240
+ }
241
+ }
242
+
243
+ /* ==========================================================================
244
+ Responsive
245
+ ========================================================================== */
246
+ @media only screen and (max-width: 770px) {
247
+ #envira-gallery-settings {
248
+ #envira-gallery-settings-submit {
249
+ margin: 40px 0 0 0;
250
+ }
251
+ }
252
+ }
assets/scss/table.scss ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ table.css loads on any Envira WP_List_Table Screen:
3
+ - Galleries
4
+ - Albums
5
+
6
+ Any styles that will be used by these list tables should be added to this
7
+ file:
8
+ - Quick Edit
9
+ ========================================================================== */
10
+
11
+ /* ==========================================================================
12
+ Imports
13
+ ========================================================================== */
14
+ @import "vars";
15
+ @import "mixins";
16
+
17
+ body.post-type-envira,
18
+ body.post-type-envira_album {
19
+ /* ==========================================================================
20
+ Post Filters
21
+ ========================================================================== */
22
+ ul.subsubsub {
23
+ /**
24
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
25
+ * and the content
26
+ */
27
+ margin: 0 0 20px 0;
28
+ padding-left: 20px;
29
+ }
30
+ //make our image col smaller
31
+ .column-image{
32
+ width: 85px !important;
33
+ }
34
+ /* ==========================================================================
35
+ Post Table Form
36
+ ========================================================================== */
37
+ form#posts-filter {
38
+ /**
39
+ * Re-establish the left and right margins, so there's spacing between the Admin Menu
40
+ * and the content
41
+ */
42
+ margin: 0 20px;
43
+
44
+ /**
45
+ * Table Navigation (Bulk Actions, Dates, SEO Score dropdowns etc)
46
+ */
47
+ div.tablenav.top {
48
+ margin: 0 0 8px 0;
49
+ }
50
+
51
+ /**
52
+ * Reduce our global custom button sizes so they align with inputs
53
+ */
54
+ .button {
55
+ height: 28px;
56
+ line-height: 26px;
57
+ }
58
+ }
59
+
60
+ /* ==========================================================================
61
+ Quick Edit
62
+ ========================================================================== */
63
+ #wpbody-content {
64
+
65
+ td.colspanchange {
66
+ /**
67
+ * Left Col (Title, Slug, Date, Password)
68
+ */
69
+ fieldset.inline-edit-col-left {
70
+ width: 40%;
71
+
72
+ fieldset.inline-edit-date {
73
+ display: none;
74
+ }
75
+ div.inline-edit-group:last-child {
76
+ display: none;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Category Column
82
+ */
83
+ fieldset.inline-edit-col-center.inline-edit-categories {
84
+ display: none;
85
+ }
86
+
87
+ /**
88
+ * Right Column (Comments + Status)
89
+ */
90
+ fieldset.inline-edit-col-right {
91
+ margin: 30px 0 0 0;
92
+
93
+ label.inline-edit-status.alignleft {
94
+ width: 100%;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Envira Gallery Col
100
+ */
101
+ fieldset.inline-edit-col-right,
102
+ fieldset.inline-edit-envira-gallery {
103
+ width: 60%; /* Fill the remainder of the width */
104
+
105
+ .inline-edit-group {
106
+ clear: none;
107
+ float: left;
108
+ width: 50%;
109
+
110
+ /**
111
+ * Label
112
+ */
113
+ span.title {
114
+ width: 40%;
115
+ padding-right: 0.5em;
116
+ }
117
+
118
+ /**
119
+ * Inputs
120
+ */
121
+ input[type=number] {
122
+ width: 60px;
123
+ line-height: normal;
124
+ }
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Submit
130
+ */
131
+ p.submit.inline-edit-save {
132
+ margin-bottom: 20px;
133
+ }
134
+ }
135
+
136
+ }
137
+ }
138
+
139
+ /* ==========================================================================
140
+ Responsive
141
+ ========================================================================== */
142
+ @media screen and (max-width: 940px) {
143
+ body.post-type-envira,
144
+ body.post-type-envira_album {
145
+
146
+ /* ==========================================================================
147
+ Quick Edit
148
+ ========================================================================== */
149
+ #wpbody-content {
150
+ td.colspanchange {
151
+ fieldset.inline-edit-col-left
152
+ fieldset.inline-edit-col-right,
153
+ fieldset.inline-edit-envira-gallery {
154
+ clear: both;
155
+ width: 100%;
156
+
157
+ .inline-edit-group {
158
+ clear: both;
159
+ float: left;
160
+ width: 100%;
161
+
162
+ /**
163
+ * Label
164
+ */
165
+ span.title {
166
+ width: 100%;
167
+ }
168
+ }
169
+ }
170
+ }
171
+
172
+ }
173
+
174
+ /* ==========================================================================
175
+ Search Box
176
+ ========================================================================== */
177
+ p.search-box {
178
+ width: 94%;
179
+ }
180
+ }
181
+ }
envira-gallery-lite.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: Envira Gallery is best responsive WordPress gallery plugin. This is the lite version.
6
  * Author: Thomas Griffin
7
  * Author URI: http://enviragallery.com
8
- * Version: 1.5.4
9
  * Text Domain: envira-gallery
10
  *
11
  * Envira Gallery is free software: you can redistribute it and/or modify
@@ -53,7 +53,7 @@ class Envira_Gallery_Lite {
53
  *
54
  * @var string
55
  */
56
- public $version = '1.5.4';
57
 
58
  /**
59
  * The name of the plugin.
@@ -155,13 +155,11 @@ class Envira_Gallery_Lite {
155
  require plugin_dir_path( __FILE__ ) . 'includes/admin/ajax.php';
156
  require plugin_dir_path( __FILE__ ) . 'includes/admin/common.php';
157
  require plugin_dir_path( __FILE__ ) . 'includes/admin/editor.php';
158
- require plugin_dir_path( __FILE__ ) . 'includes/admin/license.php';
159
  require plugin_dir_path( __FILE__ ) . 'includes/admin/media.php';
160
  require plugin_dir_path( __FILE__ ) . 'includes/admin/media-view.php';
161
  require plugin_dir_path( __FILE__ ) . 'includes/admin/metaboxes.php';
162
  require plugin_dir_path( __FILE__ ) . 'includes/admin/notice.php';
163
  require plugin_dir_path( __FILE__ ) . 'includes/admin/posttype.php';
164
- require plugin_dir_path( __FILE__ ) . 'includes/admin/settings.php';
165
  require plugin_dir_path( __FILE__ ) . 'includes/admin/table.php';
166
 
167
  }
@@ -513,6 +511,25 @@ function envira_gallery_lite_activation_hook( $network_wide ) {
513
  // Load the main plugin class.
514
  $envira_gallery_lite = Envira_Gallery_Lite::get_instance();
515
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
  // Conditionally load the template tag.
517
  if ( ! function_exists( 'envira_gallery' ) ) {
518
  /**
5
  * Description: Envira Gallery is best responsive WordPress gallery plugin. This is the lite version.
6
  * Author: Thomas Griffin
7
  * Author URI: http://enviragallery.com
8
+ * Version: 1.5.5
9
  * Text Domain: envira-gallery
10
  *
11
  * Envira Gallery is free software: you can redistribute it and/or modify
53
  *
54
  * @var string
55
  */
56
+ public $version = '1.5.5';
57
 
58
  /**
59
  * The name of the plugin.
155
  require plugin_dir_path( __FILE__ ) . 'includes/admin/ajax.php';
156
  require plugin_dir_path( __FILE__ ) . 'includes/admin/common.php';
157
  require plugin_dir_path( __FILE__ ) . 'includes/admin/editor.php';
 
158
  require plugin_dir_path( __FILE__ ) . 'includes/admin/media.php';
159
  require plugin_dir_path( __FILE__ ) . 'includes/admin/media-view.php';
160
  require plugin_dir_path( __FILE__ ) . 'includes/admin/metaboxes.php';
161
  require plugin_dir_path( __FILE__ ) . 'includes/admin/notice.php';
162
  require plugin_dir_path( __FILE__ ) . 'includes/admin/posttype.php';
 
163
  require plugin_dir_path( __FILE__ ) . 'includes/admin/table.php';
164
 
165
  }
511
  // Load the main plugin class.
512
  $envira_gallery_lite = Envira_Gallery_Lite::get_instance();
513
 
514
+ /**
515
+ * Holder for mobile detect.
516
+ *
517
+ * @access public
518
+ * @return void
519
+ */
520
+ function envira_mobile_detect(){
521
+
522
+ //Check for mobile detect class before loading it again //prevents conflicts with themes
523
+ if ( ! class_exists( 'Mobile_Detect' ) ) {
524
+
525
+ require_once trailingslashit( plugin_dir_path( __FILE__ ) ) . 'includes/global/Mobile_Detect.php';
526
+
527
+ }
528
+
529
+ return new Mobile_Detect;
530
+
531
+ }
532
+
533
  // Conditionally load the template tag.
534
  if ( ! function_exists( 'envira_gallery' ) ) {
535
  /**
includes/admin/addons.php CHANGED
@@ -53,7 +53,7 @@ class Envira_Gallery_Addons {
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
57
 
58
  // Add custom addons submenu.
59
  add_action( 'admin_menu', array( $this, 'admin_menu' ), 12 );
@@ -444,7 +444,7 @@ class Envira_Gallery_Addons {
444
  */
445
  public function addons_link( $links ) {
446
 
447
- $addons_link = sprintf( '<a href="%s">%s</a>', esc_url( add_query_arg( array( 'post_type' => 'envira', 'page' => ( class_exists( 'Envira_Gallery' ) ? 'envira-gallery-addons' : 'envira-gallery-lite-addons' ) ), admin_url( 'edit.php' ) ) ), __( 'Addons', 'envira-gallery' ) );
448
  array_unshift( $links, $addons_link );
449
 
450
  return $links;
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
+ $this->base = Envira_Gallery_Lite::get_instance();
57
 
58
  // Add custom addons submenu.
59
  add_action( 'admin_menu', array( $this, 'admin_menu' ), 12 );
444
  */
445
  public function addons_link( $links ) {
446
 
447
+ $addons_link = sprintf( '<a href="%s">%s</a>', esc_url( add_query_arg( array( 'post_type' => 'envira', 'page' => 'envira-gallery-lite-addons' ), admin_url( 'edit.php' ) ) ), __( 'Addons', 'envira-gallery' ) );
448
  array_unshift( $links, $addons_link );
449
 
450
  return $links;
includes/admin/ajax.php CHANGED
@@ -17,7 +17,7 @@ add_action( 'wp_ajax_envira_gallery_change_type', 'envira_gallery_ajax_change_ty
17
  function envira_gallery_ajax_change_type() {
18
 
19
  // Run a security check first.
20
- check_ajax_referer( 'envira-gallery-change-type', 'nonce' );
21
 
22
  // Prepare variables.
23
  $post_id = absint( $_POST['post_id'] );
@@ -45,17 +45,17 @@ add_action( 'wp_ajax_envira_gallery_change_preview', 'envira_gallery_ajax_change
45
  function envira_gallery_ajax_change_preview() {
46
 
47
  // Run a security check first.
48
- check_ajax_referer( 'envira-gallery-change-preview', 'nonce' );
49
 
50
  // Prepare variables.
51
  $post_id = absint( $_POST['post_id'] );
52
  $type = stripslashes( $_POST['type'] );
53
 
54
  // Get the saved Gallery configuration.
55
- $data = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance()->get_gallery( $post_id ) : Envira_Gallery_Lite::get_instance()->get_gallery( $post_id ) );
56
 
57
  // Iterate through the POSTed Gallery configuration (which comprises of index based fields),
58
- // overwriting the above with the supplied values. This gives us the most up to date,
59
  // unsaved configuration.
60
  foreach ( $_POST['data'] as $index => $field ) {
61
 
@@ -69,7 +69,7 @@ function envira_gallery_ajax_change_preview() {
69
  if ( ! isset( $matches[1] ) || count( $matches[1] ) == 0 ) {
70
  continue;
71
  }
72
-
73
  // Add this field key/value pair to the configuration
74
  $data['config'][ $matches[1][0] ] = $field['value'];
75
 
@@ -95,7 +95,7 @@ add_action( 'wp_ajax_envira_gallery_set_user_setting', 'envira_gallery_ajax_set_
95
  function envira_gallery_ajax_set_user_setting() {
96
 
97
  // Run a security check first.
98
- check_ajax_referer( 'envira-gallery-set-user-setting', 'nonce' );
99
 
100
  // Prepare variables.
101
  $name = stripslashes( $_POST['name'] );
@@ -119,7 +119,7 @@ add_action( 'wp_ajax_envira_gallery_load_image', 'envira_gallery_ajax_load_image
119
  function envira_gallery_ajax_load_image() {
120
 
121
  // Run a security check first.
122
- check_ajax_referer( 'envira-gallery-load-image', 'nonce' );
123
 
124
  // Prepare variables.
125
  $id = absint( $_POST['id'] );
@@ -184,14 +184,15 @@ add_action( 'wp_ajax_envira_gallery_insert_images', 'envira_gallery_ajax_insert_
184
  function envira_gallery_ajax_insert_images() {
185
 
186
  // Run a security check first.
187
- check_ajax_referer( 'envira-gallery-insert-images', 'nonce' );
188
 
189
  // Prepare variables.
190
  $images = array();
 
191
  if ( isset( $_POST['images'] ) ) {
192
- $images = stripslashes_deep( (array) $_POST['images'] );
193
  }
194
-
195
  // Get the Envira Gallery ID
196
  $post_id = absint( $_POST['post_id'] );
197
 
@@ -214,6 +215,12 @@ function envira_gallery_ajax_insert_images() {
214
 
215
  // Loop through the images and add them to the gallery.
216
  foreach ( (array) $images as $i => $image ) {
 
 
 
 
 
 
217
  // Update the attachment image post meta first.
218
  $has_gallery = get_post_meta( $image['id'], '_eg_has_gallery', true );
219
  if ( empty( $has_gallery ) ) {
@@ -259,13 +266,13 @@ add_action( 'wp_ajax_envira_gallery_sort_images', 'envira_gallery_ajax_sort_imag
259
  function envira_gallery_ajax_sort_images() {
260
 
261
  // Run a security check first.
262
- check_ajax_referer( 'envira-gallery-sort', 'nonce' );
263
 
264
  // Prepare variables.
265
  $order = explode( ',', $_POST['order'] );
266
  $post_id = absint( $_POST['post_id'] );
267
  $gallery_data = get_post_meta( $post_id, '_eg_gallery_data', true );
268
-
269
  // Copy the gallery config, removing the images
270
  // Stops config from getting lost when sorting + not clicking Publish/Update
271
  $new_order = $gallery_data;
@@ -297,7 +304,7 @@ add_action( 'wp_ajax_envira_gallery_remove_image', 'envira_gallery_ajax_remove_i
297
  function envira_gallery_ajax_remove_image() {
298
 
299
  // Run a security check first.
300
- check_ajax_referer( 'envira-gallery-remove-image', 'nonce' );
301
 
302
  // Prepare variables.
303
  $post_id = absint( $_POST['post_id'] );
@@ -325,19 +332,6 @@ function envira_gallery_ajax_remove_image() {
325
  // Run hook before finishing the reponse.
326
  do_action( 'envira_gallery_ajax_remove_image', $attach_id, $post_id );
327
 
328
- // If the global setting for deleting images on gallery image deletion is enabled, check
329
- // that the image doesn't belong to another gallery and isn't attached
330
- $image_delete = Envira_Gallery_Settings::get_instance()->get_setting( 'image_delete' );
331
- if ( $image_delete ) {
332
- // Get attachment
333
- $attachment = get_post( $attach_id );
334
-
335
- // If post parent is the Gallery ID, and the image isn't in another gallery, we're OK to delete the image
336
- if ( ( $attachment->post_parent == $post_id ) && ( count( $in_gallery ) == 0 ) ) {
337
- wp_delete_attachment( $attach_id );
338
- }
339
- }
340
-
341
  // Flush the gallery cache.
342
  Envira_Gallery_Common::get_instance()->flush_gallery_caches( $post_id );
343
 
@@ -355,7 +349,7 @@ add_action( 'wp_ajax_envira_gallery_remove_images', 'envira_gallery_ajax_remove_
355
  function envira_gallery_ajax_remove_images() {
356
 
357
  // Run a security check first.
358
- check_ajax_referer( 'envira-gallery-remove-image', 'nonce' );
359
 
360
  // Prepare variables.
361
  $post_id = absint( $_POST['post_id'] );
@@ -405,14 +399,14 @@ add_action( 'wp_ajax_envira_gallery_save_meta', 'envira_gallery_ajax_save_meta'
405
  function envira_gallery_ajax_save_meta() {
406
 
407
  // Run a security check first.
408
- check_ajax_referer( 'envira-gallery-save-meta', 'nonce' );
409
 
410
  // Prepare variables.
411
  $post_id = absint( $_POST['post_id'] );
412
  $attach_id = absint( $_POST['attach_id'] );
413
  $meta = $_POST['meta'];
414
  $gallery_data = get_post_meta( $post_id, '_eg_gallery_data', true );
415
-
416
  if ( isset( $meta['title'] ) ) {
417
  $gallery_data['gallery'][ $attach_id ]['title'] = trim( $meta['title'] );
418
  }
@@ -428,7 +422,7 @@ function envira_gallery_ajax_save_meta() {
428
  if ( isset( $meta['link_new_window'] ) ) {
429
  $gallery_data['gallery'][ $attach_id ]['link_new_window'] = trim( $meta['link_new_window'] );
430
  }
431
-
432
  if ( isset( $meta['caption'] ) ) {
433
  $gallery_data['gallery'][ $attach_id ]['caption'] = trim( $meta['caption'] );
434
  }
@@ -457,13 +451,13 @@ add_action( 'wp_ajax_envira_gallery_save_bulk_meta', 'envira_gallery_ajax_save_b
457
  function envira_gallery_ajax_save_bulk_meta() {
458
 
459
  // Run a security check first.
460
- check_ajax_referer( 'envira-gallery-save-meta', 'nonce' );
461
 
462
  // Prepare variables.
463
  $post_id = absint( $_POST['post_id'] );
464
  $image_ids = $_POST['image_ids'];
465
  $meta = $_POST['meta'];
466
-
467
  // Check the required variables exist.
468
  if ( empty( $post_id ) ) {
469
  wp_send_json_error();
@@ -504,7 +498,7 @@ function envira_gallery_ajax_save_bulk_meta() {
504
  if ( isset( $meta['link_new_window'] ) && ! empty( $meta['link_new_window'] ) ) {
505
  $gallery_data['gallery'][ $image_id ]['link_new_window'] = trim( $meta['link_new_window'] );
506
  }
507
-
508
  if ( isset( $meta['caption'] ) && ! empty( $meta['caption'] ) ) {
509
  $gallery_data['gallery'][ $image_id ]['caption'] = trim( $meta['caption'] );
510
  }
@@ -534,7 +528,7 @@ add_action( 'wp_ajax_envira_gallery_refresh', 'envira_gallery_ajax_refresh' );
534
  function envira_gallery_ajax_refresh() {
535
 
536
  // Run a security check first.
537
- check_ajax_referer( 'envira-gallery-refresh', 'nonce' );
538
 
539
  // Prepare variables.
540
  $post_id = absint( $_POST['post_id'] );
@@ -586,7 +580,7 @@ add_action( 'wp_ajax_envira_gallery_install_addon', 'envira_gallery_ajax_install
586
  function envira_gallery_ajax_install_addon() {
587
 
588
  // Run a security check first.
589
- check_ajax_referer( 'envira-gallery-install', 'nonce' );
590
 
591
  // Install the addon.
592
  if ( isset( $_POST['plugin'] ) ) {
@@ -655,7 +649,7 @@ add_action( 'wp_ajax_envira_gallery_activate_addon', 'envira_gallery_ajax_activa
655
  function envira_gallery_ajax_activate_addon() {
656
 
657
  // Run a security check first.
658
- check_ajax_referer( 'envira-gallery-activate', 'nonce' );
659
 
660
  // Activate the addon.
661
  if ( isset( $_POST['plugin'] ) ) {
@@ -681,7 +675,7 @@ add_action( 'wp_ajax_envira_gallery_deactivate_addon', 'envira_gallery_ajax_deac
681
  function envira_gallery_ajax_deactivate_addon() {
682
 
683
  // Run a security check first.
684
- check_ajax_referer( 'envira-gallery-deactivate', 'nonce' );
685
 
686
  // Deactivate the addon.
687
  if ( isset( $_POST['plugin'] ) ) {
@@ -741,27 +735,10 @@ function envira_gallery_ajax_prepare_gallery_data( $gallery_data, $id, $image =
741
  $gallery_data['gallery'] = array();
742
  $gallery_data['gallery'][ $id ] = $image;
743
  } else {
744
- // Add this image to the start or end of the gallery, depending on the setting
745
- $instance = Envira_Gallery_Settings::get_instance();
746
- $media_position = $instance->get_setting( 'media_position' );
747
-
748
- switch ( $media_position ) {
749
- case 'before':
750
- // Add image to start of images array
751
- // Store copy of images, reset gallery array and rebuild
752
- $images = $gallery_data['gallery'];
753
- $gallery_data['gallery'] = array();
754
- $gallery_data['gallery'][ $id ] = $image;
755
- foreach ( $images as $old_image_id => $old_image ) {
756
- $gallery_data['gallery'][ $old_image_id ] = $old_image;
757
- }
758
- break;
759
- case 'after':
760
- default:
761
- // Add image, this will default to the end of the array
762
- $gallery_data['gallery'][ $id ] = $image;
763
- break;
764
- }
765
  }
766
 
767
  // Filter and return
@@ -782,7 +759,7 @@ function envira_gallery_ajax_prepare_gallery_data( $gallery_data, $id, $image =
782
  function envira_gallery_ajax_dismiss_notice() {
783
 
784
  // Run a security check first.
785
- check_ajax_referer( 'envira-gallery-dismiss-notice', 'nonce' );
786
 
787
  // Deactivate the notice
788
  if ( isset( $_POST['notice'] ) ) {
@@ -833,7 +810,7 @@ add_action( 'wp_ajax_envira_gallery_editor_get_galleries', 'envira_gallery_edito
833
  function envira_gallery_editor_get_galleries() {
834
 
835
  // Check nonce
836
- check_ajax_referer( 'envira-gallery-editor-get-galleries', 'nonce' );
837
 
838
  // Get POSTed fields
839
  $search = (bool) $_POST['search'];
@@ -841,7 +818,7 @@ function envira_gallery_editor_get_galleries() {
841
  $prepend_ids = stripslashes_deep( $_POST['prepend_ids'] );
842
 
843
  // Get galleries
844
- $instance = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
845
  $galleries = $instance->get_galleries( false, true, ( $search ? $search_terms : '' ) );
846
 
847
  // Build array of just the data we need.
@@ -863,12 +840,12 @@ function envira_gallery_editor_get_galleries() {
863
  'action' => 'gallery', // Tells the editor modal whether this is a Gallery or Album for the shortcode output
864
  );
865
  }
866
-
867
  // If any prepended Gallery IDs were specified, get them now
868
  // These will typically be a Defaults Gallery, which wouldn't be included in the above get_galleries() call
869
  if ( is_array( $prepend_ids ) && count( $prepend_ids ) > 0 ) {
870
  $prepend_results = array();
871
-
872
  // Get each Gallery
873
  foreach ( $prepend_ids as $gallery_id ) {
874
  // Get gallery
@@ -912,7 +889,7 @@ add_action( 'wp_ajax_envira_gallery_move_media', 'envira_gallery_move_media' );
912
  function envira_gallery_move_media() {
913
 
914
  // Check nonce
915
- check_ajax_referer( 'envira-gallery-move-media', 'nonce' );
916
 
917
  // Get POSTed fields
918
  $from_gallery_id = absint( $_POST['from_gallery_id'] );
@@ -932,7 +909,7 @@ function envira_gallery_move_media() {
932
  // Get from and to Galleries
933
  $from_gallery = Envira_Gallery::get_instance()->get_gallery( $from_gallery_id );
934
  $to_gallery = Envira_Gallery::get_instance()->get_gallery( $to_gallery_id );
935
-
936
  // Iterate through each image ID, adding the image to $to_gallery, then removing from $from_gallery
937
  foreach ( $image_ids as $image_id ) {
938
  // Check the image exists in $from_gallery
@@ -955,4 +932,4 @@ function envira_gallery_move_media() {
955
  // Return success
956
  wp_send_json_success();
957
 
958
- }
17
  function envira_gallery_ajax_change_type() {
18
 
19
  // Run a security check first.
20
+ check_admin_referer( 'envira-gallery-change-type', 'nonce' );
21
 
22
  // Prepare variables.
23
  $post_id = absint( $_POST['post_id'] );
45
  function envira_gallery_ajax_change_preview() {
46
 
47
  // Run a security check first.
48
+ check_admin_referer( 'envira-gallery-change-preview', 'nonce' );
49
 
50
  // Prepare variables.
51
  $post_id = absint( $_POST['post_id'] );
52
  $type = stripslashes( $_POST['type'] );
53
 
54
  // Get the saved Gallery configuration.
55
+ $data = Envira_Gallery_Lite::get_instance()->get_gallery( $post_id );
56
 
57
  // Iterate through the POSTed Gallery configuration (which comprises of index based fields),
58
+ // overwriting the above with the supplied values. This gives us the most up to date,
59
  // unsaved configuration.
60
  foreach ( $_POST['data'] as $index => $field ) {
61
 
69
  if ( ! isset( $matches[1] ) || count( $matches[1] ) == 0 ) {
70
  continue;
71
  }
72
+
73
  // Add this field key/value pair to the configuration
74
  $data['config'][ $matches[1][0] ] = $field['value'];
75
 
95
  function envira_gallery_ajax_set_user_setting() {
96
 
97
  // Run a security check first.
98
+ check_admin_referer( 'envira-gallery-set-user-setting', 'nonce' );
99
 
100
  // Prepare variables.
101
  $name = stripslashes( $_POST['name'] );
119
  function envira_gallery_ajax_load_image() {
120
 
121
  // Run a security check first.
122
+ check_admin_referer( 'envira-gallery-load-image', 'nonce' );
123
 
124
  // Prepare variables.
125
  $id = absint( $_POST['id'] );
184
  function envira_gallery_ajax_insert_images() {
185
 
186
  // Run a security check first.
187
+ check_admin_referer( 'envira-gallery-insert-images', 'nonce' );
188
 
189
  // Prepare variables.
190
  $images = array();
191
+
192
  if ( isset( $_POST['images'] ) ) {
193
+ $images = json_decode( stripslashes( $_POST['images'] ), true );
194
  }
195
+
196
  // Get the Envira Gallery ID
197
  $post_id = absint( $_POST['post_id'] );
198
 
215
 
216
  // Loop through the images and add them to the gallery.
217
  foreach ( (array) $images as $i => $image ) {
218
+
219
+ // If the image is already in the gallery, lets skip it since we don't want to override the image metadata settings
220
+ if ( in_array( $image['id'], $in_gallery ) ) {
221
+ continue;
222
+ }
223
+
224
  // Update the attachment image post meta first.
225
  $has_gallery = get_post_meta( $image['id'], '_eg_has_gallery', true );
226
  if ( empty( $has_gallery ) ) {
266
  function envira_gallery_ajax_sort_images() {
267
 
268
  // Run a security check first.
269
+ check_admin_referer( 'envira-gallery-sort', 'nonce' );
270
 
271
  // Prepare variables.
272
  $order = explode( ',', $_POST['order'] );
273
  $post_id = absint( $_POST['post_id'] );
274
  $gallery_data = get_post_meta( $post_id, '_eg_gallery_data', true );
275
+
276
  // Copy the gallery config, removing the images
277
  // Stops config from getting lost when sorting + not clicking Publish/Update
278
  $new_order = $gallery_data;
304
  function envira_gallery_ajax_remove_image() {
305
 
306
  // Run a security check first.
307
+ check_admin_referer( 'envira-gallery-remove-image', 'nonce' );
308
 
309
  // Prepare variables.
310
  $post_id = absint( $_POST['post_id'] );
332
  // Run hook before finishing the reponse.
333
  do_action( 'envira_gallery_ajax_remove_image', $attach_id, $post_id );
334
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335
  // Flush the gallery cache.
336
  Envira_Gallery_Common::get_instance()->flush_gallery_caches( $post_id );
337
 
349
  function envira_gallery_ajax_remove_images() {
350
 
351
  // Run a security check first.
352
+ check_admin_referer( 'envira-gallery-remove-image', 'nonce' );
353
 
354
  // Prepare variables.
355
  $post_id = absint( $_POST['post_id'] );
399
  function envira_gallery_ajax_save_meta() {
400
 
401
  // Run a security check first.
402
+ check_admin_referer( 'envira-gallery-save-meta', 'nonce' );
403
 
404
  // Prepare variables.
405
  $post_id = absint( $_POST['post_id'] );
406
  $attach_id = absint( $_POST['attach_id'] );
407
  $meta = $_POST['meta'];
408
  $gallery_data = get_post_meta( $post_id, '_eg_gallery_data', true );
409
+
410
  if ( isset( $meta['title'] ) ) {
411
  $gallery_data['gallery'][ $attach_id ]['title'] = trim( $meta['title'] );
412
  }
422
  if ( isset( $meta['link_new_window'] ) ) {
423
  $gallery_data['gallery'][ $attach_id ]['link_new_window'] = trim( $meta['link_new_window'] );
424
  }
425
+
426
  if ( isset( $meta['caption'] ) ) {
427
  $gallery_data['gallery'][ $attach_id ]['caption'] = trim( $meta['caption'] );
428
  }
451
  function envira_gallery_ajax_save_bulk_meta() {
452
 
453
  // Run a security check first.
454
+ check_admin_referer( 'envira-gallery-save-meta', 'nonce' );
455
 
456
  // Prepare variables.
457
  $post_id = absint( $_POST['post_id'] );
458
  $image_ids = $_POST['image_ids'];
459
  $meta = $_POST['meta'];
460
+
461
  // Check the required variables exist.
462
  if ( empty( $post_id ) ) {
463
  wp_send_json_error();
498
  if ( isset( $meta['link_new_window'] ) && ! empty( $meta['link_new_window'] ) ) {
499
  $gallery_data['gallery'][ $image_id ]['link_new_window'] = trim( $meta['link_new_window'] );
500
  }
501
+
502
  if ( isset( $meta['caption'] ) && ! empty( $meta['caption'] ) ) {
503
  $gallery_data['gallery'][ $image_id ]['caption'] = trim( $meta['caption'] );
504
  }
528
  function envira_gallery_ajax_refresh() {
529
 
530
  // Run a security check first.
531
+ check_admin_referer( 'envira-gallery-refresh', 'nonce' );
532
 
533
  // Prepare variables.
534
  $post_id = absint( $_POST['post_id'] );
580
  function envira_gallery_ajax_install_addon() {
581
 
582
  // Run a security check first.
583
+ check_admin_referer( 'envira-gallery-install', 'nonce' );
584
 
585
  // Install the addon.
586
  if ( isset( $_POST['plugin'] ) ) {
649
  function envira_gallery_ajax_activate_addon() {
650
 
651
  // Run a security check first.
652
+ check_admin_referer( 'envira-gallery-activate', 'nonce' );
653
 
654
  // Activate the addon.
655
  if ( isset( $_POST['plugin'] ) ) {
675
  function envira_gallery_ajax_deactivate_addon() {
676
 
677
  // Run a security check first.
678
+ check_admin_referer( 'envira-gallery-deactivate', 'nonce' );
679
 
680
  // Deactivate the addon.
681
  if ( isset( $_POST['plugin'] ) ) {
735
  $gallery_data['gallery'] = array();
736
  $gallery_data['gallery'][ $id ] = $image;
737
  } else {
738
+
739
+ // Add image, this will default to the end of the array
740
+ $gallery_data['gallery'][ $id ] = $image;
741
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
742
  }
743
 
744
  // Filter and return
759
  function envira_gallery_ajax_dismiss_notice() {
760
 
761
  // Run a security check first.
762
+ check_admin_referer( 'envira-gallery-dismiss-notice', 'nonce' );
763
 
764
  // Deactivate the notice
765
  if ( isset( $_POST['notice'] ) ) {
810
  function envira_gallery_editor_get_galleries() {
811
 
812
  // Check nonce
813
+ check_admin_referer( 'envira-gallery-editor-get-galleries', 'nonce' );
814
 
815
  // Get POSTed fields
816
  $search = (bool) $_POST['search'];
818
  $prepend_ids = stripslashes_deep( $_POST['prepend_ids'] );
819
 
820
  // Get galleries
821
+ $instance = Envira_Gallery_Lite::get_instance();
822
  $galleries = $instance->get_galleries( false, true, ( $search ? $search_terms : '' ) );
823
 
824
  // Build array of just the data we need.
840
  'action' => 'gallery', // Tells the editor modal whether this is a Gallery or Album for the shortcode output
841
  );
842
  }
843
+
844
  // If any prepended Gallery IDs were specified, get them now
845
  // These will typically be a Defaults Gallery, which wouldn't be included in the above get_galleries() call
846
  if ( is_array( $prepend_ids ) && count( $prepend_ids ) > 0 ) {
847
  $prepend_results = array();
848
+
849
  // Get each Gallery
850
  foreach ( $prepend_ids as $gallery_id ) {
851
  // Get gallery
889
  function envira_gallery_move_media() {
890
 
891
  // Check nonce
892
+ check_admin_referer( 'envira-gallery-move-media', 'nonce' );
893
 
894
  // Get POSTed fields
895
  $from_gallery_id = absint( $_POST['from_gallery_id'] );
909
  // Get from and to Galleries
910
  $from_gallery = Envira_Gallery::get_instance()->get_gallery( $from_gallery_id );
911
  $to_gallery = Envira_Gallery::get_instance()->get_gallery( $to_gallery_id );
912
+
913
  // Iterate through each image ID, adding the image to $to_gallery, then removing from $from_gallery
914
  foreach ( $image_ids as $image_id ) {
915
  // Check the image exists in $from_gallery
932
  // Return success
933
  wp_send_json_success();
934
 
935
+ }
includes/admin/common.php CHANGED
@@ -53,7 +53,7 @@ class Envira_Gallery_Common_Admin {
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
57
 
58
  // Handle any necessary DB upgrades.
59
  add_action( 'admin_init', array( $this, 'db_upgrade' ) );
@@ -85,7 +85,7 @@ class Envira_Gallery_Common_Admin {
85
  // Upgrade to allow captions (v1.1.6).
86
  $captions = get_option( 'envira_gallery_116' );
87
  if ( ! $captions ) {
88
- $galleries = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance()->_get_galleries() : Envira_Gallery_Lite::get_instance()->_get_galleries() );
89
  if ( $galleries ) {
90
  foreach ( $galleries as $gallery ) {
91
  foreach ( (array) $gallery['gallery'] as $id => $item ) {
@@ -514,14 +514,6 @@ class Envira_Gallery_Common_Admin {
514
  */
515
  public function get_upgrade_link() {
516
 
517
- if ( class_exists( 'Envira_Gallery' ) ) {
518
- // User is using Envira Gallery, so just take them to the Pricing page.
519
- // Note: On the Addons screen, if the user has a license, we won't hit this function,
520
- // as the API will tell us the direct URL to send the user to based on their license key,
521
- // so they see pro-rata pricing.
522
- return 'http://enviragallery.com/pricing/?utm_source=proplugin&utm_medium=link&utm_campaign=WordPress';
523
- }
524
-
525
  // Check if there's a constant.
526
  $shareasale_id = '';
527
  if ( defined( 'ENVIRA_GALLERY_SHAREASALE_ID' ) ) {
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
+ $this->base = Envira_Gallery_Lite::get_instance();
57
 
58
  // Handle any necessary DB upgrades.
59
  add_action( 'admin_init', array( $this, 'db_upgrade' ) );
85
  // Upgrade to allow captions (v1.1.6).
86
  $captions = get_option( 'envira_gallery_116' );
87
  if ( ! $captions ) {
88
+ $galleries = Envira_Gallery_Lite::get_instance()->_get_galleries();
89
  if ( $galleries ) {
90
  foreach ( $galleries as $gallery ) {
91
  foreach ( (array) $gallery['gallery'] as $id => $item ) {
514
  */
515
  public function get_upgrade_link() {
516
 
 
 
 
 
 
 
 
 
517
  // Check if there's a constant.
518
  $shareasale_id = '';
519
  if ( defined( 'ENVIRA_GALLERY_SHAREASALE_ID' ) ) {
includes/admin/editor.php CHANGED
@@ -53,7 +53,7 @@ class Envira_Gallery_Editor {
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
57
 
58
  // Add a custom media button to the editor.
59
  add_filter( 'media_buttons_context', array( $this, 'media_button' ) );
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
+ $this->base = Envira_Gallery_Lite::get_instance();
57
 
58
  // Add a custom media button to the editor.
59
  add_filter( 'media_buttons_context', array( $this, 'media_button' ) );
includes/admin/media-view.php CHANGED
@@ -44,7 +44,7 @@ class Envira_Gallery_Media_View {
44
  public function __construct() {
45
 
46
  // Base
47
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
48
 
49
  // Modals
50
  add_filter( 'envira_gallery_media_view_strings', array( $this, 'media_view_strings' ) );
@@ -253,32 +253,7 @@ class Envira_Gallery_Media_View {
253
  <?php _e( 'Image titles can take any type of HTML. You can adjust the position of the titles in the main Lightbox settings.', 'envira-gallery' ); ?>
254
  </div>
255
  </label>
256
-
257
- <?php
258
- if ( class_exists( 'Envira_Gallery' ) ) {
259
- ?>
260
- <!-- Caption -->
261
- <div class="setting">
262
- <span class="name"><?php _e( 'Caption', 'envira-gallery' ); ?></span>
263
- <?php
264
- wp_editor( '', 'caption', array(
265
- 'media_buttons' => false,
266
- 'wpautop' => false,
267
- 'tinymce' => false,
268
- 'textarea_name' => 'caption',
269
- 'quicktags' => array(
270
- 'buttons' => 'strong,em,link,ul,ol,li,close'
271
- ),
272
- 'editor_height' => 100,
273
- ) );
274
- ?>
275
- <div class="description">
276
- <?php _e( 'Captions can take any type of HTML, and are displayed when an image is clicked.', 'envira-gallery' ); ?>
277
- </div>
278
- </div>
279
- <?php
280
- }
281
- ?>
282
 
283
  <!-- Alt Text -->
284
  <label class="setting">
@@ -303,41 +278,9 @@ class Envira_Gallery_Media_View {
303
  <?php _e( 'Enter a hyperlink if you wish to link this image to somewhere other than its full size image.', 'envira-gallery' ); ?>
304
  </span>
305
  </label>
306
-
307
- <?php
308
- if ( class_exists( 'Envira_Gallery' ) ) {
309
- ?>
310
- <!-- Link in New Window -->
311
- <label class="setting">
312
- <span class="name"><?php _e( 'Open URL in New Window?', 'envira-gallery' ); ?></span>
313
- <span class="description">
314
- <input type="checkbox" name="link_new_window" value="1"<# if ( data.link_new_window == '1' ) { #> checked <# } #> />
315
- <?php _e( 'Opens your image links in a new browser window / tab.', 'envira-gallery' ); ?>
316
- </span>
317
- </label>
318
- <?php
319
- } else {
320
- ?>
321
- <label class="setting">
322
- <!-- Upgrade -->
323
- <?php
324
- Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
325
- 'envira_gallery_edit_metadata',
326
- __( 'Want Captions and more options?', 'envira-gallery' ),
327
- __( 'By upgrading to Envira Pro, you can get access to numerous other features, including: HTML captions, open links in new windows, WooCommerce product integration and so much more!', 'envira-gallery' ),
328
- 'warning',
329
- __( 'Click here to Upgrade', 'envira-gallery' ),
330
- Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
331
- false
332
- );
333
- ?>
334
- </label>
335
- <?php
336
- }
337
- ?>
338
 
339
  <!-- Addons can populate the UI here -->
340
- <div class="addons"></div>
341
  </div>
342
  <!-- /.settings -->
343
 
@@ -442,7 +385,7 @@ class Envira_Gallery_Media_View {
442
  </label>
443
 
444
  <!-- Addons can populate the UI here -->
445
- <div class="addons"></div>
446
  </div>
447
  <!-- /.settings -->
448
 
44
  public function __construct() {
45
 
46
  // Base
47
+ $this->base = Envira_Gallery_Lite::get_instance();
48
 
49
  // Modals
50
  add_filter( 'envira_gallery_media_view_strings', array( $this, 'media_view_strings' ) );
253
  <?php _e( 'Image titles can take any type of HTML. You can adjust the position of the titles in the main Lightbox settings.', 'envira-gallery' ); ?>
254
  </div>
255
  </label>
256
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
 
258
  <!-- Alt Text -->
259
  <label class="setting">
278
  <?php _e( 'Enter a hyperlink if you wish to link this image to somewhere other than its full size image.', 'envira-gallery' ); ?>
279
  </span>
280
  </label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
 
282
  <!-- Addons can populate the UI here -->
283
+ <div class="envira-addons"></div>
284
  </div>
285
  <!-- /.settings -->
286
 
385
  </label>
386
 
387
  <!-- Addons can populate the UI here -->
388
+ <div class="envira-addons"></div>
389
  </div>
390
  <!-- /.settings -->
391
 
includes/admin/media.php CHANGED
@@ -44,7 +44,7 @@ class Envira_Gallery_Media {
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
48
 
49
  add_filter( 'wp_handle_upload', array( $this, 'fix_image_orientation' ) );
50
 
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
+ $this->base = Envira_Gallery_Lite::get_instance();
48
 
49
  add_filter( 'wp_handle_upload', array( $this, 'fix_image_orientation' ) );
50
 
includes/admin/metaboxes.php CHANGED
@@ -44,7 +44,7 @@ class Envira_Gallery_Metaboxes {
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
48
 
49
  // Output a notice if missing cropping extensions because Envira needs them.
50
  if ( ! $this->has_gd_extension() && ! $this->has_imagick_extension() ) {
@@ -68,19 +68,14 @@ class Envira_Gallery_Metaboxes {
68
  add_action( 'envira_gallery_tab_images', array( $this, 'images_tab' ) );
69
  add_action( 'envira_gallery_tab_config', array( $this, 'config_tab' ) );
70
  add_action( 'envira_gallery_tab_lightbox', array( $this, 'lightbox_tab' ) );
71
- add_action( 'envira_gallery_tab_mobile', array( $this, 'mobile_tab' ) );
72
  add_action( 'envira_gallery_tab_misc', array( $this, 'misc_tab' ) );
73
 
74
- // Load some tabs for Envira Gallery Lite.
75
- if ( 'Envira_Gallery_Lite' == get_class( $this->base ) ) {
76
- remove_action( 'envira_gallery_tab_mobile', array( $this, 'mobile_tab' ) );
77
- add_filter( 'envira_gallery_tab_nav', array( $this, 'lite_tabs' ) );
78
- add_action( 'envira_gallery_tab_mobile', array( $this, 'lite_mobile_tab' ) );
79
- add_action( 'envira_gallery_tab_videos', array( $this, 'lite_videos_tab' ) );
80
- add_action( 'envira_gallery_tab_social', array( $this, 'lite_social_tab' ) );
81
- add_action( 'envira_gallery_tab_tags', array( $this, 'lite_tags_tab' ) );
82
- add_action( 'envira_gallery_tab_pagination', array( $this, 'lite_pagination_tab' ) );
83
- }
84
 
85
  // Save Gallery
86
  add_action( 'save_post', array( $this, 'save_meta_boxes' ), 10, 2 );
@@ -284,7 +279,6 @@ class Envira_Gallery_Metaboxes {
284
  'library_search' => wp_create_nonce( 'envira-gallery-library-search' ),
285
  'load_gallery' => wp_create_nonce( 'envira-gallery-load-gallery' ),
286
  'load_image' => wp_create_nonce( 'envira-gallery-load-image' ),
287
- 'media_position' => Envira_Gallery_Settings::get_instance()->get_setting( 'media_position' ),
288
  'move_media_nonce' => wp_create_nonce( 'envira-gallery-move-media' ),
289
  'move_media_modal_title'=> __( 'Move Media to Gallery', 'envira-gallery' ),
290
  'move_media_insert_button_label' => __( 'Move Media to Selected Gallery', 'envira-gallery' ),
@@ -302,23 +296,6 @@ class Envira_Gallery_Metaboxes {
302
  )
303
  );
304
 
305
- // Insert from Third Party Sources
306
- if ( class_exists( 'Envira_Gallery' ) ) {
307
- wp_register_script( $this->base->plugin_slug . '-media-insert-third-party', plugins_url( 'assets/js/media-insert-third-party.js', $this->base->file ), array( 'jquery' ), $this->base->version, true );
308
- wp_enqueue_script( $this->base->plugin_slug . '-media-insert-third-party' );
309
- wp_localize_script(
310
- $this->base->plugin_slug . '-media-insert-third-party',
311
- 'envira_gallery_media_insert',
312
- array(
313
- 'nonce' => wp_create_nonce( 'envira-gallery-media-insert' ),
314
- 'post_id' => $post_id,
315
-
316
- // Addons must add their slug/base key/value pair to this array to appear within the "Insert from Other Sources" modal
317
- 'addons' => apply_filters( 'envira_gallery_media_insert_third_party_sources', array(), $post_id ),
318
- )
319
- );
320
- }
321
-
322
  // Link Search
323
  wp_enqueue_script( 'wp-link' );
324
 
@@ -708,43 +685,14 @@ class Envira_Gallery_Metaboxes {
708
  <a href="http://enviragallery.com/docs/creating-first-envira-gallery/" class="envira-doc" target="_blank">
709
  <?php _e( 'Read the Documentation', 'envira-gallery' ); ?>
710
  </a>
711
- or
712
  <a href="https://www.youtube.com/embed/F9_wOefuBaw?autoplay=1&amp;rel=0" class="envira-video" target="_blank">
713
  <?php _e( 'Watch a Video', 'envira-gallery' ); ?>
714
  </a>
715
  </small>
716
  </p>
717
 
718
- <?php
719
- if ( 'Envira_Gallery' == get_class( $this->base ) ) {
720
- ?>
721
- <nav class="envira-tab-options">
722
- <!-- Select All -->
723
- <label for="select-all">
724
- <input type="checkbox" name="cb" id="select-all" />
725
- <?php echo sprintf( __( 'Select All (<span class="count">%d</span>)', 'envira-gallery' ), $this->base->get_gallery_image_count( $post->ID ) ); ?>
726
- </label>
727
-
728
- <!-- List / Grid View -->
729
- <a href="#" class="dashicons dashicons-grid-view<?php echo ( $layout == 'grid' ? ' selected' : '' ); ?>" data-view="#envira-gallery-output" data-view-style="grid">
730
- <span><?php _e( 'Grid View', 'envira-gallery' ); ?></span>
731
- </a>
732
- <a href="#" class="dashicons dashicons-list-view<?php echo ( $layout == 'list' ? ' selected' : '' ); ?>" data-view="#envira-gallery-output" data-view-style="list">
733
- <span><?php _e( 'List View', 'envira-gallery' ); ?></span>
734
- </a>
735
- </nav>
736
-
737
- <!-- Bulk Edit / Delete Buttons -->
738
- <nav class="envira-select-options">
739
- <a href="#" class="button envira-gallery-images-edit"><?php _e( 'Edit Selected Images', 'envira-gallery' ); ?></a>
740
- <a href="#" class="button envira-gallery-images-move" data-action="gallery"><?php _e( 'Move Selected Images to another Gallery', 'envira-gallery' ); ?></a>
741
- <a href="#" class="button button-danger envira-gallery-images-delete"><?php _e( 'Delete Selected Images from Gallery', 'envira-gallery' ); ?></a>
742
- </nav>
743
- <?php
744
- }
745
-
746
- do_action( 'envira_gallery_do_default_display', $post );
747
- ?>
748
 
749
  <ul id="envira-gallery-output" class="envira-gallery-images-output <?php echo $layout; ?>">
750
  <?php
@@ -757,27 +705,16 @@ class Envira_Gallery_Metaboxes {
757
  </ul>
758
 
759
  <?php
760
- if ( 'Envira_Gallery' == get_class( $this->base ) ) {
761
- ?>
762
- <!-- Bulk Edit / Delete Buttons -->
763
- <nav class="envira-select-options">
764
- <a href="#" class="button envira-gallery-images-edit"><?php _e( 'Edit Selected Images', 'envira-gallery' ); ?></a>
765
- <a href="#" class="button envira-gallery-images-move" data-action="gallery"><?php _e( 'Move Selected Images to another Gallery', 'envira-gallery' ); ?></a>
766
- <a href="#" class="button button-danger envira-gallery-images-delete"><?php _e( 'Delete Selected Images from Gallery', 'envira-gallery' ); ?></a>
767
- </nav>
768
- <?php
769
- } else {
770
- // Output an upgrade notice
771
- Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
772
- 'envira_gallery_images_tab',
773
- __( 'Want to make your gallery workflow even better?', 'envira-gallery' ),
774
- __( 'By upgrading to Envira Pro, you can get access to numerous other features, including: a fully featured gallery widget, complete gallery API, powerful gallery documentation, full mobile and Retina support, dedicated customer support and so much more!', 'envira-gallery' ),
775
- 'warning',
776
- __( 'Click here to Upgrade', 'envira-gallery' ),
777
- Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
778
- false
779
- );
780
- }
781
 
782
  }
783
 
@@ -814,7 +751,7 @@ class Envira_Gallery_Metaboxes {
814
  <label for="envira-config-columns"><?php _e( 'Number of Gallery Columns', 'envira-gallery' ); ?></label>
815
  </th>
816
  <td>
817
- <select data-envira-conditional-display="true" data-envira-conditional-value="0" data-envira-conditional="envira-config-justified-settings-box" data-envira-conditional-toggle="envira-config-standard-settings-box" data-envira-conditional-value="1" data-envira-conditional="envira-config-standard-settings-box" id="envira-config-columns" name="_envira_gallery[columns]">
818
  <?php foreach ( (array) $this->get_columns() as $i => $data ) : ?>
819
  <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'columns', $this->get_config_default( 'columns' ) ) ); ?>><?php echo $data['name']; ?></option>
820
  <?php endforeach; ?>
@@ -853,63 +790,11 @@ class Envira_Gallery_Metaboxes {
853
  </tbody>
854
  </table>
855
  </div>
856
- <?php
857
- if ( class_exists( 'Envira_Gallery' ) ) {
858
- ?>
859
- <div id="envira-config-description-settings-box">
860
- <table class="form-table">
861
- <tbody>
862
 
863
- <!-- Display Description -->
864
- <tr id="envira-config-display-description-box">
865
- <th scope="row">
866
- <label for="envira-config-display-description"><?php _e( 'Display Gallery Description?', 'envira-gallery' ); ?></label>
867
- </th>
868
- <td>
869
- <select id="envira-config-display-description" name="_envira_gallery[description_position]" data-envira-conditional="envira-config-description-box">
870
- <?php
871
- foreach ( (array) $this->get_display_description_options() as $i => $data ) {
872
- ?>
873
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'description_position', $this->get_config_default( 'description_position' ) ) ); ?>><?php echo $data['name']; ?></option>
874
- <?php
875
- }
876
- ?>
877
- </select>
878
- <p class="description"><?php _e( 'Choose to display a description above or below this gallery\'s images.', 'envira-gallery' ); ?></p>
879
- </td>
880
- </tr>
881
-
882
- <!-- Description -->
883
- <tr id="envira-config-description-box">
884
- <th scope="row">
885
- <label for="envira-config-gallery-description"><?php _e( 'Gallery Description', 'envira-gallery' ); ?></label>
886
- </th>
887
- <td>
888
- <?php
889
- $description = $this->get_config( 'description' );
890
- if ( empty( $description ) ) {
891
- $description = $this->get_config_default( 'description' );
892
- }
893
- wp_editor( $description, 'envira-gallery-description', array(
894
- 'media_buttons' => false,
895
- 'wpautop' => true,
896
- 'tinymce' => true,
897
- 'textarea_name' => '_envira_gallery[description]',
898
- ) );
899
- ?>
900
- <p class="description"><?php _e( 'The description to display for this gallery.', 'envira-gallery' ); ?></p>
901
- </td>
902
- </tr>
903
- </tbody>
904
- </table>
905
- </div>
906
- <?php
907
- }
908
- ?>
909
  <div id="envira-config-standard-settings-box">
910
  <table class="form-table">
911
  <tbody>
912
- <?php // ?>
913
  <tr id="envira-config-gallery-theme-box">
914
  <th scope="row">
915
  <label for="envira-config-gallery-theme"><?php _e( 'Gallery Theme', 'envira-gallery' ); ?></label>
@@ -923,8 +808,6 @@ class Envira_Gallery_Metaboxes {
923
  <p class="description"><?php _e( 'Sets the theme for the gallery display.', 'envira-gallery' ); ?></p>
924
  </td>
925
  </tr>
926
-
927
-
928
  <tr id="envira-config-gutter-box">
929
  <th scope="row">
930
  <label for="envira-config-gutter"><?php _e( 'Column Gutter Width', 'envira-gallery' ); ?></label>
@@ -944,54 +827,22 @@ class Envira_Gallery_Metaboxes {
944
  </td>
945
  </tr>
946
 
947
- <?php
948
- if ( class_exists( 'Envira_Gallery' ) ) {
949
- ?>
950
- <!-- Sorting -->
951
- <tr id="envira-config-sorting-box">
952
- <th scope="row">
953
- <label for="envira-config-sorting"><?php _e( 'Sorting', 'envira-gallery' ); ?></label>
954
- </th>
955
- <td>
956
- <select id="envira-config-sorting" name="_envira_gallery[random]" data-envira-conditional="envira-config-sorting-direction-box">
957
- <?php
958
- foreach ( (array) $this->get_sorting_options() as $i => $data ) {
959
- ?>
960
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'random', $this->get_config_default( 'random' ) ) ); ?>><?php echo $data['name']; ?></option>
961
- <?php
962
- }
963
- ?>
964
- </select>
965
- <p class="description"><?php _e( 'Choose to sort the images in a different order than displayed on the Images tab.', 'envira-gallery' ); ?></p>
966
- </td>
967
- </tr>
968
- <tr id="envira-config-sorting-direction-box">
969
- <th scope="row">
970
- <label for="envira-config-sorting-direction"><?php _e( 'Direction', 'envira-gallery' ); ?></label>
971
- </th>
972
- <td>
973
- <select id="envira-config-sorting-direction" name="_envira_gallery[sorting_direction]">
974
- <?php
975
- foreach ( (array) $this->get_sorting_directions() as $i => $data ) {
976
- ?>
977
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'sorting_direction', $this->get_config_default( 'sorting_direction' ) ) ); ?>><?php echo $data['name']; ?></option>
978
- <?php
979
- }
980
- ?>
981
- </select>
982
- </td>
983
- </tr>
984
- <?php
985
- }
986
- ?>
987
-
988
- <!-- Dimensions -->
989
  <tr id="envira-config-image-size-box">
990
  <th scope="row">
991
  <label for="envira-config-image-size"><?php _e( 'Image Size', 'envira-gallery' ); ?></label>
992
  </th>
993
  <td>
994
- <select id="envira-config-image-size" name="_envira_gallery[image_size]" data-envira-conditional="envira-config-crop-size-box,envira-config-crop-box" data-envira-conditional-value="default">
995
  <?php
996
  foreach ( (array) $this->get_image_sizes() as $i => $data ) {
997
  ?>
@@ -1003,35 +854,6 @@ class Envira_Gallery_Metaboxes {
1003
  <p class="description"><?php _e( 'Define the maximum image size for the Gallery view. Default will use the below Image Dimensions; Random will allow you to choose one or more WordPress image sizes, which will be used for the gallery output.', 'envira-gallery' ); ?></p>
1004
  </td>
1005
  </tr>
1006
-
1007
- <?php
1008
- if ( class_exists( 'Envira_Gallery' ) ) {
1009
- ?>
1010
- <tr id="envira-config-image-sizes-random-box">
1011
- <th scope="row">
1012
- <label for="envira-config-image-sizes-random"><?php _e( 'Random Image Sizes', 'envira-gallery' ); ?></label>
1013
- </th>
1014
- <td>
1015
- <?php
1016
- // Get random image sizes that have been selected, if any.
1017
- $image_sizes_random = (array) $this->get_config( 'image_sizes_random', $this->get_config_default( 'image_sizes_random' ) );
1018
-
1019
- foreach ( (array) $this->get_image_sizes( true ) as $i => $data ) {
1020
- ?>
1021
- <label for="envira-config-image-sizes-random-<?php echo $data['value']; ?>">
1022
- <input id="envira-config-image-sizes-random-<?php echo $data['value']; ?>" type="checkbox" name="_envira_gallery[image_sizes_random][]" value="<?php echo $data['value']; ?>"<?php echo ( in_array( $data['value'], $image_sizes_random ) ? ' checked' : '' ); ?> />
1023
- <?php echo $data['name']; ?>
1024
- </label><br />
1025
- <?php
1026
- }
1027
- ?>
1028
- <p class="description"><?php _e( 'Define the WordPress registered image sizes to include when randomly assigning an image size to each image in your Gallery.', 'envira-gallery' ); ?></p>
1029
- </td>
1030
- </tr>
1031
- <?php
1032
- }
1033
- ?>
1034
-
1035
  <tr id="envira-config-crop-size-box">
1036
  <th scope="row">
1037
  <label for="envira-config-crop-width"><?php _e( 'Image Dimensions', 'envira-gallery' ); ?></label>
@@ -1051,63 +873,13 @@ class Envira_Gallery_Metaboxes {
1051
  <span class="description"><?php _e( 'If disabled, images will be resized to maintain their aspect ratio.', 'envira-gallery' ); ?></span>
1052
 
1053
  </td>
1054
- </tr>
1055
-
1056
- <?php
1057
- if ( class_exists( 'Envira_Gallery' ) ) {
1058
- ?>
1059
- <tr id="envira-config-dimensions-box">
1060
- <th scope="row">
1061
- <label for="envira-config-dimensions"><?php _e( 'Set Dimensions on Images?', 'envira-gallery' ); ?></label>
1062
- </th>
1063
- <td>
1064
- <input id="envira-config-dimensions" type="checkbox" name="_envira_gallery[dimensions]" value="<?php echo $this->get_config( 'dimensions', $this->get_config_default( 'dimensions' ) ); ?>" <?php checked( $this->get_config( 'dimensions', $this->get_config_default( 'dimensions' ) ), 1 ); ?> />
1065
- <span class="description"><?php _e( 'Enables or disables the width and height attributes on the img element. Only needs to be enabled if you need to meet Google Pagespeeds requirements.', 'envira-gallery' ); ?></span>
1066
- </td>
1067
- </tr>
1068
- <tr id="envira-config-isotope-box">
1069
- <th scope="row">
1070
- <label for="envira-config-isotope"><?php _e( 'Enable Isotope?', 'envira-gallery' ); ?></label>
1071
- </th>
1072
- <td>
1073
- <input id="envira-config-isotope" type="checkbox" name="_envira_gallery[isotope]" value="<?php echo $this->get_config( 'isotope', $this->get_config_default( 'isotope' ) ); ?>" <?php checked( $this->get_config( 'isotope', $this->get_config_default( 'isotope' ) ), 1 ); ?> />
1074
- <span class="description"><?php _e( 'Enables or disables isotope/masonry layout support for the main gallery images.', 'envira-gallery' ); ?></span>
1075
- </td>
1076
- </tr>
1077
-
1078
- <tr id="envira-config-css-animations-box">
1079
- <th scope="row">
1080
- <label for="envira-config-css-animations"><?php _e( 'Enable CSS Animations?', 'envira-gallery' ); ?></label>
1081
- </th>
1082
- <td>
1083
- <input id="envira-config-css-animations" type="checkbox" name="_envira_gallery[css_animations]" value="<?php echo $this->get_config( 'css_animations', $this->get_config_default( 'css_animations' ) ); ?>" <?php checked( $this->get_config( 'css_animations', $this->get_config_default( 'css_animations' ) ), 1 ); ?> data-envira-conditional="envira-config-css-opacity-box" />
1084
- <span class="description"><?php _e( 'Enables CSS animations when loading the main gallery images.', 'envira-gallery' ); ?></span>
1085
- </td>
1086
- </tr>
1087
-
1088
- <tr id="envira-config-css-opacity-box">
1089
- <th scope="row">
1090
- <label for="envira-config-css-opacity"><?php _e( 'Image Opacity', 'envira-gallery' ); ?></label>
1091
- </th>
1092
- <td>
1093
- <input id="envira-config-css-opacity" type="number" name="_envira_gallery[css_opacity]" min="0" max="100" step="1" value="<?php echo $this->get_config( 'css_opacity', $this->get_config_default( 'css_opacity' ) ); ?>" /><span class="envira-unit">%</span>
1094
- <p class="description"><?php _e( 'The opacity to display images at when loading the main gallery images using CSS animations (between 1 and 100%).', 'envira-gallery' ); ?></p>
1095
- </td>
1096
- </tr>
1097
- <?php
1098
- }
1099
- ?>
1100
-
1101
- <?php do_action( 'envira_gallery_config_box', $post ); ?>
1102
- </tbody>
1103
- </table>
1104
- </div>
1105
  </div>
1106
-
1107
- <?php
1108
- // Output an upgrade notice
1109
- if ( class_exists( 'Envira_Gallery_Lite' ) ) {
1110
- Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
1111
  'envira_gallery_config_tab',
1112
  __( 'Want to do even more with your gallery display?', 'envira-gallery' ),
1113
  __( 'By upgrading to Envira Pro, you can get access to numerous other gallery display features, including: custom image tagging and filtering, mobile specific image assets for blazing fast load times, dedicated and unique gallery URLs, custom gallery themes, gallery thumbnail support and so much more!', 'envira-gallery' ),
@@ -1116,7 +888,6 @@ class Envira_Gallery_Metaboxes {
1116
  Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
1117
  false
1118
  );
1119
- }
1120
 
1121
  }
1122
 
@@ -1154,7 +925,7 @@ class Envira_Gallery_Metaboxes {
1154
  <label for="envira-config-lightbox-enabled"><?php _e( 'Enable Lightbox?', 'envira-gallery' ); ?></label>
1155
  </th>
1156
  <td>
1157
- <input id="envira-config-lightbox-enabled" type="checkbox" name="_envira_gallery[lightbox_enabled]" value="<?php echo $this->get_config( 'lightbox_enabled', $this->get_config_default( 'lightbox_enabled' ) ); ?>" <?php checked( $this->get_config( 'lightbox_enabled', $this->get_config_default( 'lightbox_enabled' ) ), 1 ); ?> data-envira-conditional="envira-lightbox-settings" />
1158
  <span class="description"><?php _e( 'Enables or disables the gallery lightbox.', 'envira-gallery' ); ?></span>
1159
  </td>
1160
  </tr>
@@ -1177,7 +948,6 @@ class Envira_Gallery_Metaboxes {
1177
  <p class="description"><?php _e( 'Sets the theme for the gallery lightbox display.', 'envira-gallery' ); ?></p>
1178
  </td>
1179
  </tr>
1180
-
1181
  <tr id="envira-config-lightbox-image-size-box">
1182
  <th scope="row">
1183
  <label for="envira-config-lightbox-image-size"><?php _e( 'Image Size', 'envira-gallery' ); ?></label>
@@ -1191,7 +961,6 @@ class Envira_Gallery_Metaboxes {
1191
  <p class="description"><?php _e( 'Define the maximum image size for the Lightbox view. Default will display the original, full size image.', 'envira-gallery' ); ?></p>
1192
  </td>
1193
  </tr>
1194
-
1195
  <tr id="envira-config-lightbox-title-display-box">
1196
  <th scope="row">
1197
  <label for="envira-config-lightbox-title-display"><?php _e( 'Caption Position', 'envira-gallery' ); ?></label>
@@ -1206,223 +975,14 @@ class Envira_Gallery_Metaboxes {
1206
  </td>
1207
  </tr>
1208
 
1209
- <?php
1210
- if ( class_exists( 'Envira_Gallery' ) ) {
1211
- ?>
1212
- <tr id="envira-config-lightbox-arrows-box">
1213
- <th scope="row">
1214
- <label for="envira-config-lightbox-arrows"><?php _e( 'Enable Gallery Arrows?', 'envira-gallery' ); ?></label>
1215
- </th>
1216
- <td>
1217
- <input id="envira-config-lightbox-arrows" type="checkbox" name="_envira_gallery[arrows]" value="<?php echo $this->get_config( 'arrows', $this->get_config_default( 'arrows' ) ); ?>" <?php checked( $this->get_config( 'arrows', $this->get_config_default( 'arrows' ) ), 1 ); ?> data-envira-conditional="envira-config-lightbox-arrows-position-box" />
1218
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox navigation arrows.', 'envira-gallery' ); ?></span>
1219
- </td>
1220
- </tr>
1221
- <tr id="envira-config-lightbox-arrows-position-box">
1222
- <th scope="row">
1223
- <label for="envira-config-lightbox-arrows-position"><?php _e( 'Gallery Arrow Position', 'envira-gallery' ); ?></label>
1224
- </th>
1225
- <td>
1226
- <select id="envira-config-lightbox-arrows-position" name="_envira_gallery[arrows_position]">
1227
- <?php foreach ( (array) $this->get_arrows_positions() as $i => $data ) : ?>
1228
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'arrows_position', $this->get_config_default( 'arrows_position' ) ) ); ?>><?php echo $data['name']; ?></option>
1229
- <?php endforeach; ?>
1230
- </select>
1231
- <p class="description"><?php _e( 'Sets the position of the gallery lightbox navigation arrows.', 'envira-gallery' ); ?></p>
1232
- </td>
1233
- </tr>
1234
- <tr id="envira-config-lightbox-keyboard-box">
1235
- <th scope="row">
1236
- <label for="envira-config-lightbox-keyboard"><?php _e( 'Enable Keyboard Navigation?', 'envira-gallery' ); ?></label>
1237
- </th>
1238
- <td>
1239
- <input id="envira-config-lightbox-keyboard" type="checkbox" name="_envira_gallery[keyboard]" value="<?php echo $this->get_config( 'keyboard', $this->get_config_default( 'keyboard' ) ); ?>" <?php checked( $this->get_config( 'keyboard', $this->get_config_default( 'keyboard' ) ), 1 ); ?> />
1240
- <span class="description"><?php _e( 'Enables or disables keyboard navigation in the gallery lightbox.', 'envira-gallery' ); ?></span>
1241
- </td>
1242
- </tr>
1243
- <tr id="envira-config-lightbox-mousewheel-box">
1244
- <th scope="row">
1245
- <label for="envira-config-lightbox-mousewheel"><?php _e( 'Enable Mousewheel Navigation?', 'envira-gallery' ); ?></label>
1246
- </th>
1247
- <td>
1248
- <input id="envira-config-lightbox-mousewheel" type="checkbox" name="_envira_gallery[mousewheel]" value="<?php echo $this->get_config( 'mousewheel', $this->get_config_default( 'mousewheel' ) ); ?>" <?php checked( $this->get_config( 'mousewheel', $this->get_config_default( 'mousewheel' ) ), 1 ); ?> />
1249
- <span class="description"><?php _e( 'Enables or disables mousewheel navigation in the gallery.', 'envira-gallery' ); ?></span>
1250
- </td>
1251
- </tr>
1252
- <tr id="envira-config-lightbox-toolbar-box">
1253
- <th scope="row">
1254
- <label for="envira-config-lightbox-toolbar"><?php _e( 'Enable Gallery Toolbar?', 'envira-gallery' ); ?></label>
1255
- </th>
1256
- <td>
1257
- <input id="envira-config-lightbox-toolbar" type="checkbox" name="_envira_gallery[toolbar]" value="<?php echo $this->get_config( 'toolbar', $this->get_config_default( 'toolbar' ) ); ?>" <?php checked( $this->get_config( 'toolbar', $this->get_config_default( 'toolbar' ) ), 1 ); ?> data-envira-conditional="envira-config-lightbox-toolbar-title-box,envira-config-lightbox-toolbar-position-box" />
1258
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox toolbar.', 'envira-gallery' ); ?></span>
1259
- </td>
1260
- </tr>
1261
- <tr id="envira-config-lightbox-toolbar-title-box">
1262
- <th scope="row">
1263
- <label for="envira-config-lightbox-toolbar-title"><?php _e( 'Display Gallery Title in Toolbar?', 'envira-gallery' ); ?></label>
1264
- </th>
1265
- <td>
1266
- <input id="envira-config-lightbox-toolbar-title" type="checkbox" name="_envira_gallery[toolbar_title]" value="<?php echo $this->get_config( 'toolbar_title', $this->get_config_default( 'toolbar_title' ) ); ?>" <?php checked( $this->get_config( 'toolbar_title', $this->get_config_default( 'toolbar_title' ) ), 1 ); ?> data-envira-conditional="envira-config-lightbox-toolbar-position-box" />
1267
- <span class="description"><?php _e( 'Display the gallery title in the lightbox toolbar.', 'envira-gallery' ); ?></span>
1268
- </td>
1269
- </tr>
1270
- <tr id="envira-config-lightbox-toolbar-position-box">
1271
- <th scope="row">
1272
- <label for="envira-config-lightbox-toolbar-position"><?php _e( 'Gallery Toolbar Position', 'envira-gallery' ); ?></label>
1273
- </th>
1274
- <td>
1275
- <select id="envira-config-lightbox-toolbar-position" name="_envira_gallery[toolbar_position]">
1276
- <?php foreach ( (array) $this->get_toolbar_positions() as $i => $data ) : ?>
1277
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'toolbar_position', $this->get_config_default( 'toolbar_position' ) ) ); ?>><?php echo $data['name']; ?></option>
1278
- <?php endforeach; ?>
1279
- </select>
1280
- <p class="description"><?php _e( 'Sets the position of the lightbox toolbar.', 'envira-gallery' ); ?></p>
1281
- </td>
1282
- </tr>
1283
- <tr id="envira-config-lightbox-aspect-box">
1284
- <th scope="row">
1285
- <label for="envira-config-lightbox-aspect"><?php _e( 'Keep Aspect Ratio?', 'envira-gallery' ); ?></label>
1286
- </th>
1287
- <td>
1288
- <input id="envira-config-lightbox-toolbar" type="checkbox" name="_envira_gallery[aspect]" value="<?php echo $this->get_config( 'aspect', $this->get_config_default( 'aspect' ) ); ?>" <?php checked( $this->get_config( 'aspect', $this->get_config_default( 'aspect' ) ), 1 ); ?> />
1289
- <span class="description"><?php _e( 'If enabled, images will always resize based on the original aspect ratio.', 'envira-gallery' ); ?></span>
1290
- </td>
1291
- </tr>
1292
- <tr id="envira-config-lightbox-loop-box">
1293
- <th scope="row">
1294
- <label for="envira-config-lightbox-loop"><?php _e( 'Loop Gallery Navigation?', 'envira-gallery' ); ?></label>
1295
- </th>
1296
- <td>
1297
- <input id="envira-config-lightbox-loop" type="checkbox" name="_envira_gallery[loop]" value="<?php echo $this->get_config( 'loop', $this->get_config_default( 'loop' ) ); ?>" <?php checked( $this->get_config( 'loop', $this->get_config_default( 'loop' ) ), 1 ); ?> />
1298
- <span class="description"><?php _e( 'Enables or disables infinite navigation cycling of the lightbox gallery.', 'envira-gallery' ); ?></span>
1299
- </td>
1300
- </tr>
1301
- <tr id="envira-config-lightbox-open-close-effect-box">
1302
- <th scope="row">
1303
- <label for="envira-config-lightbox-open-close-effect"><?php _e( 'Lightbox Open/Close Effect', 'envira-gallery' ); ?></label>
1304
- </th>
1305
- <td>
1306
- <select id="envira-config-lightbox-open-close-effect" name="_envira_gallery[lightbox_open_close_effect]">
1307
- <?php
1308
- // Standard Effects
1309
- foreach ( (array) $this->get_transition_effects() as $i => $data ) {
1310
- ?>
1311
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'lightbox_open_close_effect', $this->get_config_default( 'lightbox_open_close_effect' ) ) ); ?>><?php echo $data['name']; ?></option>
1312
- <?php
1313
- }
1314
-
1315
- // Easing Effects
1316
- foreach ( (array) $this->get_easing_transition_effects() as $i => $data ) {
1317
- ?>
1318
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'lightbox_open_close_effect', $this->get_config_default( 'lightbox_open_close_effect' ) ) ); ?>><?php echo $data['name']; ?></option>
1319
- <?php
1320
- }
1321
- ?>
1322
- </select>
1323
- <p class="description"><?php _e( 'Type of transition when opening and closing the lightbox.', 'envira-gallery' ); ?></p>
1324
- </td>
1325
- </tr>
1326
- <tr id="envira-config-lightbox-effect-box">
1327
- <th scope="row">
1328
- <label for="envira-config-lightbox-effect"><?php _e( 'Lightbox Transition Effect', 'envira-gallery' ); ?></label>
1329
- </th>
1330
- <td>
1331
- <select id="envira-config-lightbox-effect" name="_envira_gallery[effect]">
1332
- <?php
1333
- // Standard Effects
1334
- foreach ( (array) $this->get_transition_effects() as $i => $data ) {
1335
- ?>
1336
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'effect', $this->get_config_default( 'effect' ) ) ); ?>><?php echo $data['name']; ?></option>
1337
- <?php
1338
- }
1339
-
1340
- // Easing Effects
1341
- foreach ( (array) $this->get_easing_transition_effects() as $i => $data ) {
1342
- ?>
1343
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'effect', $this->get_config_default( 'effect' ) ) ); ?>><?php echo $data['name']; ?></option>
1344
- <?php
1345
- }
1346
- ?>
1347
- </select>
1348
- <p class="description"><?php _e( 'Type of transition between images in the lightbox view.', 'envira-gallery' ); ?></p>
1349
- </td>
1350
- </tr>
1351
- <tr id="envira-config-lightbox-html5-box">
1352
- <th scope="row">
1353
- <label for="envira-config-lightbox-html5"><?php _e( 'HTML5 Output?', 'envira-gallery' ); ?></label>
1354
- </th>
1355
- <td>
1356
- <input id="envira-config-lightbox-html5" type="checkbox" name="_envira_gallery[html5]" value="<?php echo $this->get_config( 'html5', $this->get_config_default( 'html5' ) ); ?>" <?php checked( $this->get_config( 'html5', $this->get_config_default( 'html5' ) ), 1 ); ?> />
1357
- <span class="description"><?php _e( 'If enabled, uses data-envirabox-gallery instead of rel attributes for W3C HTML5 validation.', 'envira-gallery' ); ?></span>
1358
- </td>
1359
- </tr>
1360
- <?php
1361
- }
1362
- ?>
1363
-
1364
  <?php do_action( 'envira_gallery_lightbox_box', $post ); ?>
1365
  </tbody>
1366
  </table>
1367
-
1368
- <?php
1369
- if ( class_exists( 'Envira_Gallery' ) ) {
1370
- ?>
1371
- <p class="envira-intro"><?php _e( 'The settings below adjust the thumbnail views for the gallery lightbox display.', 'envira-gallery' ); ?></p>
1372
- <table class="form-table">
1373
- <tbody>
1374
- <tr id="envira-config-thumbnails-box">
1375
- <th scope="row">
1376
- <label for="envira-config-thumbnails"><?php _e( 'Enable Gallery Thumbnails?', 'envira-gallery' ); ?></label>
1377
- </th>
1378
- <td>
1379
- <input id="envira-config-thumbnails" type="checkbox" name="_envira_gallery[thumbnails]" value="<?php echo $this->get_config( 'thumbnails', $this->get_config_default( 'thumbnails' ) ); ?>" <?php checked( $this->get_config( 'thumbnails', $this->get_config_default( 'thumbnails' ) ), 1 ); ?> data-envira-conditional="envira-config-thumbnails-width-box,envira-config-thumbnails-height-box,envira-config-thumbnails-position-box" />
1380
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox thumbnails.', 'envira-gallery' ); ?></span>
1381
- </td>
1382
- </tr>
1383
- <tr id="envira-config-thumbnails-width-box">
1384
- <th scope="row">
1385
- <label for="envira-config-thumbnails-width"><?php _e( 'Gallery Thumbnails Width', 'envira-gallery' ); ?></label>
1386
- </th>
1387
- <td>
1388
- <input id="envira-config-thumbnails-width" type="number" name="_envira_gallery[thumbnails_width]" value="<?php echo $this->get_config( 'thumbnails_width', $this->get_config_default( 'thumbnails_width' ) ); ?>" /> <span class="envira-unit"><?php _e( 'px', 'envira-gallery' ); ?></span>
1389
- <p class="description"><?php _e( 'Sets the width of each lightbox thumbnail.', 'envira-gallery' ); ?></p>
1390
- </td>
1391
- </tr>
1392
- <tr id="envira-config-thumbnails-height-box">
1393
- <th scope="row">
1394
- <label for="envira-config-thumbnails-height"><?php _e( 'Gallery Thumbnails Height', 'envira-gallery' ); ?></label>
1395
- </th>
1396
- <td>
1397
- <input id="envira-config-thumbnails-height" type="number" name="_envira_gallery[thumbnails_height]" value="<?php echo $this->get_config( 'thumbnails_height', $this->get_config_default( 'thumbnails_height' ) ); ?>" /> <span class="envira-unit"><?php _e( 'px', 'envira-gallery' ); ?></span>
1398
- <p class="description"><?php _e( 'Sets the height of each lightbox thumbnail.', 'envira-gallery' ); ?></p>
1399
- </td>
1400
- </tr>
1401
- <tr id="envira-config-thumbnails-position-box">
1402
- <th scope="row">
1403
- <label for="envira-config-thumbnails-position"><?php _e( 'Gallery Thumbnails Position', 'envira-gallery' ); ?></label>
1404
- </th>
1405
- <td>
1406
- <select id="envira-config-thumbnails-position" name="_envira_gallery[thumbnails_position]">
1407
- <?php foreach ( (array) $this->get_thumbnail_positions() as $i => $data ) : ?>
1408
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'thumbnails_position', $this->get_config_default( 'thumbnails_position' ) ) ); ?>><?php echo $data['name']; ?></option>
1409
- <?php endforeach; ?>
1410
- </select>
1411
- <p class="description"><?php _e( 'Sets the position of the lightbox thumbnails.', 'envira-gallery' ); ?></p>
1412
- </td>
1413
- </tr>
1414
- <?php do_action( 'envira_gallery_thumbnails_box', $post ); ?>
1415
- </tbody>
1416
- </table>
1417
- <?php
1418
- }
1419
- ?>
1420
  </div>
1421
  </div>
1422
  <?php
1423
 
1424
  // Output an upgrade notice
1425
- if ( class_exists( 'Envira_Gallery_Lite' ) ) {
1426
  Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
1427
  'envira_gallery_lightbox_tab',
1428
  __( 'Want even more fine tuned control over your lightbox display?', 'envira-gallery' ),
@@ -1432,144 +992,6 @@ class Envira_Gallery_Metaboxes {
1432
  Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
1433
  false
1434
  );
1435
- }
1436
-
1437
- }
1438
-
1439
- /**
1440
- * Callback for displaying the settings UI for the Mobile tab.
1441
- *
1442
- * @since 1.3.2
1443
- *
1444
- * @param object $post The current post object.
1445
- */
1446
- public function mobile_tab( $post ) {
1447
-
1448
- ?>
1449
- <div id="envira-mobile">
1450
- <p class="envira-intro">
1451
- <?php _e( 'Mobile Gallery Settings', 'envira-gallery' ); ?>
1452
- <small>
1453
- <?php _e( 'The settings below adjust configuration options for the Gallery when viewed on a mobile device.', 'envira-gallery' ); ?><br />
1454
- <?php _e( 'Need some help?', 'envira-gallery' ); ?>
1455
- <a href="http://enviragallery.com/docs/creating-first-envira-gallery/" class="envira-doc" target="_blank">
1456
- <?php _e( 'Read the Documentation', 'envira-gallery' ); ?>
1457
- </a>
1458
- or
1459
- <a href="https://www.youtube.com/embed/4jHG3LOmV-c?autoplay=1&amp;rel=0" class="envira-video" target="_blank">
1460
- <?php _e( 'Watch a Video', 'envira-gallery' ); ?>
1461
- </a>
1462
- </small>
1463
- </p>
1464
- <table class="form-table">
1465
- <tbody>
1466
- <tr id="envira-config-mobile-columns-box">
1467
- <th scope="row">
1468
- <label for="envira-config-mobile-columns"><?php _e( 'Number of Gallery Columns', 'envira-gallery' ); ?></label>
1469
- </th>
1470
- <td>
1471
- <select id="envira-config-mobile-columns" name="_envira_gallery[mobile_columns]">
1472
- <?php foreach ( (array) $this->get_columns() as $i => $data ) : ?>
1473
- <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'mobile_columns', $this->get_config_default( 'mobile_columns' ) ) ); ?>><?php echo $data['name']; ?></option>
1474
- <?php endforeach; ?>
1475
- </select>
1476
- <p class="description"><?php _e( 'Determines the number of columns in the gallery on mobile devices. Automatic will attempt to fill each row as much as possible before moving on to the next row.', 'envira-gallery' ); ?></p>
1477
- </td>
1478
- </tr>
1479
-
1480
- <tr id="envira-config-mobile-box">
1481
- <th scope="row">
1482
- <label for="envira-config-mobile"><?php _e( 'Create Mobile Gallery Images?', 'envira-gallery' ); ?></label>
1483
- </th>
1484
- <td>
1485
- <input id="envira-config-mobile" type="checkbox" name="_envira_gallery[mobile]" value="<?php echo $this->get_config( 'mobile', $this->get_config_default( 'mobile' ) ); ?>" <?php checked( $this->get_config( 'mobile', $this->get_config_default( 'mobile' ) ), 1 ); ?> data-envira-conditional="envira-config-mobile-size-box" />
1486
- <span class="description"><?php _e( 'Enables or disables creating specific images for mobile devices.', 'envira-gallery' ); ?></span>
1487
- </td>
1488
- </tr>
1489
-
1490
- <tr id="envira-config-mobile-size-box">
1491
- <th scope="row">
1492
- <label for="envira-config-mobile-width"><?php _e( 'Mobile Dimensions', 'envira-gallery' ); ?></label>
1493
- </th>
1494
- <td>
1495
- <input id="envira-config-mobile-width" type="number" name="_envira_gallery[mobile_width]" value="<?php echo $this->get_config( 'mobile_width', $this->get_config_default( 'mobile_width' ) ); ?>" /> &#215; <input id="envira-config-mobile-height" type="number" name="_envira_gallery[mobile_height]" value="<?php echo $this->get_config( 'mobile_height', $this->get_config_default( 'mobile_height' ) ); ?>" /> <span class="envira-unit"><?php _e( 'px', 'envira-gallery' ); ?></span>
1496
- <p class="description"><?php _e( 'These will be the sizes used for images displayed on mobile devices.', 'envira-gallery' ); ?></p>
1497
- </td>
1498
- </tr>
1499
-
1500
- <?php do_action( 'envira_gallery_mobile_box', $post ); ?>
1501
- </tbody>
1502
- </table>
1503
-
1504
- <!-- Lightbox -->
1505
- <p class="envira-intro">
1506
- <?php _e( 'Mobile Lightbox Settings', 'envira-gallery' ); ?>
1507
- <small>
1508
- <?php _e( 'The settings below adjust configuration options for the Lightbox when viewed on a mobile device.', 'envira-gallery' ); ?><br />
1509
- </small>
1510
- </p>
1511
- <table class="form-table">
1512
- <tbody>
1513
- <tr id="envira-config-mobile-lightbox-box">
1514
- <th scope="row">
1515
- <label for="envira-config-mobile-lightbox"><?php _e( 'Enable Lightbox?', 'envira-gallery' ); ?></label>
1516
- </th>
1517
- <td>
1518
- <input id="envira-config-mobile-lightbox" type="checkbox" name="_envira_gallery[mobile_lightbox]" value="<?php echo $this->get_config( 'mobile_lightbox', $this->get_config_default( 'mobile_lightbox' ) ); ?>" <?php checked( $this->get_config( 'mobile_lightbox', $this->get_config_default( 'mobile_lightbox' ) ), 1 ); ?> data-envira-conditional="envira-config-mobile-touchwipe-box,envira-config-mobile-touchwipe-close-box,envira-config-mobile-arrows-box,envira-config-mobile-toolbar-box,envira-config-mobile-thumbnails-box,envira-config-exif-mobile-box" />
1519
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox on mobile devices.', 'envira-gallery' ); ?></span>
1520
- </td>
1521
- </tr>
1522
- <tr id="envira-config-mobile-touchwipe-box">
1523
- <th scope="row">
1524
- <label for="envira-config-mobile-touchwipe"><?php _e( 'Enable Gallery Touchwipe?', 'envira-gallery' ); ?></label>
1525
- </th>
1526
- <td>
1527
- <input id="envira-config-mobile-touchwipe" type="checkbox" name="_envira_gallery[mobile_touchwipe]" value="<?php echo $this->get_config( 'mobile_touchwipe', $this->get_config_default( 'mobile_touchwipe' ) ); ?>" <?php checked( $this->get_config( 'mobile_touchwipe', $this->get_config_default( 'mobile_touchwipe' ) ), 1 ); ?> data-envira-conditional="envira-config-mobile-touchwipe-close-box" />
1528
- <span class="description"><?php _e( 'Enables or disables touchwipe support for the gallery lightbox on mobile devices.', 'envira-gallery' ); ?></span>
1529
- </td>
1530
- </tr>
1531
- <tr id="envira-config-mobile-touchwipe-close-box">
1532
- <th scope="row">
1533
- <label for="envira-config-mobile-touchwipe-close"><?php _e( 'Close Lightbox on Swipe Up?', 'envira-gallery' ); ?></label>
1534
- </th>
1535
- <td>
1536
- <input id="envira-config-mobile-touchwipe-close" type="checkbox" name="_envira_gallery[mobile_touchwipe_close]" value="<?php echo $this->get_config( 'mobile_touchwipe_close', $this->get_config_default( 'mobile_touchwipe_close' ) ); ?>" <?php checked( $this->get_config( 'mobile_touchwipe_close', $this->get_config_default( 'mobile_touchwipe_close' ) ), 1 ); ?> />
1537
- <span class="description"><?php _e( 'Enables or disables closing the Lightbox when the user swipes up on mobile devices.', 'envira-gallery' ); ?></span>
1538
- </td>
1539
- </tr>
1540
- <tr id="envira-config-mobile-arrows-box">
1541
- <th scope="row">
1542
- <label for="envira-config-mobile-arrows"><?php _e( 'Enable Gallery Arrows?', 'envira-gallery' ); ?></label>
1543
- </th>
1544
- <td>
1545
- <input id="envira-config-mobile-arrows" type="checkbox" name="_envira_gallery[mobile_arrows]" value="<?php echo $this->get_config( 'mobile_arrows', $this->get_config_default( 'mobile_arrows' ) ); ?>" <?php checked( $this->get_config( 'mobile_arrows', $this->get_config_default( 'mobile_arrows' ) ), 1 ); ?> />
1546
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox navigation arrows on mobile devices.', 'envira-gallery' ); ?></span>
1547
- </td>
1548
- </tr>
1549
- <tr id="envira-config-mobile-toolbar-box">
1550
- <th scope="row">
1551
- <label for="envira-config-mobile-toolbar"><?php _e( 'Enable Gallery Toolbar?', 'envira-gallery' ); ?></label>
1552
- </th>
1553
- <td>
1554
- <input id="envira-config-mobile-toolbar" type="checkbox" name="_envira_gallery[mobile_toolbar]" value="<?php echo $this->get_config( 'mobile_toolbar', $this->get_config_default( 'mobile_toolbar' ) ); ?>" <?php checked( $this->get_config( 'mobile_toolbar', $this->get_config_default( 'mobile_toolbar' ) ), 1 ); ?> />
1555
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox toolbar on mobile devices.', 'envira-gallery' ); ?></span>
1556
- </td>
1557
- </tr>
1558
- <tr id="envira-config-mobile-thumbnails-box">
1559
- <th scope="row">
1560
- <label for="envira-config-mobile-thumbnails"><?php _e( 'Enable Gallery Thumbnails?', 'envira-gallery' ); ?></label>
1561
- </th>
1562
- <td>
1563
- <input id="envira-config-mobile-thumbnails" type="checkbox" name="_envira_gallery[mobile_thumbnails]" value="<?php echo $this->get_config( 'mobile_thumbnails', $this->get_config_default( 'mobile_toolbar' ) ); ?>" <?php checked( $this->get_config( 'mobile_thumbnails', $this->get_config_default( 'mobile_thumbnails' ) ), 1 ); ?> />
1564
- <span class="description"><?php _e( 'Enables or disables the gallery lightbox thumbnails on mobile devices.', 'envira-gallery' ); ?></span>
1565
- </td>
1566
- </tr>
1567
-
1568
- <?php do_action( 'envira_gallery_mobile_lightbox_box', $post ); ?>
1569
- </tbody>
1570
- </table>
1571
- </div>
1572
- <?php
1573
 
1574
  }
1575
 
@@ -1628,40 +1050,6 @@ class Envira_Gallery_Metaboxes {
1628
  <p class="description"><?php _e( 'Adds custom CSS classes to this gallery. Enter one class per line.', 'envira-gallery' ); ?></p>
1629
  </td>
1630
  </tr>
1631
-
1632
- <?php
1633
- if ( class_exists( 'Envira_Gallery' ) ) {
1634
- ?>
1635
- <tr id="envira-config-import-export-box">
1636
- <th scope="row">
1637
- <label for="envira-config-import-gallery"><?php _e( 'Import/Export Gallery', 'envira-gallery' ); ?></label>
1638
- </th>
1639
- <td>
1640
- <form></form>
1641
- <?php
1642
- $import_url = 'auto-draft' == $post->post_status ? add_query_arg( array( 'post' => $post->ID, 'action' => 'edit', 'envira-gallery-imported' => true ), admin_url( 'post.php' ) ) : add_query_arg( 'envira-gallery-imported', true );
1643
- $import_url = esc_url( $import_url );
1644
- ?>
1645
- <form action="<?php echo $import_url; ?>" id="envira-config-import-gallery-form" class="envira-gallery-import-form" method="post" enctype="multipart/form-data">
1646
- <input id="envira-config-import-gallery" type="file" name="envira_import_gallery" />
1647
- <input type="hidden" name="envira_import" value="1" />
1648
- <input type="hidden" name="envira_post_id" value="<?php echo $post->ID; ?>" />
1649
- <?php wp_nonce_field( 'envira-gallery-import', 'envira-gallery-import' ); ?>
1650
- <?php submit_button( __( 'Import Gallery', 'envira-gallery' ), 'secondary', 'envira-gallery-import-submit', false ); ?>
1651
- <span class="spinner envira-gallery-spinner"></span>
1652
- </form>
1653
- <form id="envira-config-export-gallery-form" method="post">
1654
- <input type="hidden" name="envira_export" value="1" />
1655
- <input type="hidden" name="envira_post_id" value="<?php echo $post->ID; ?>" />
1656
- <?php wp_nonce_field( 'envira-gallery-export', 'envira-gallery-export' ); ?>
1657
- <?php submit_button( __( 'Export Gallery', 'envira-gallery' ), 'secondary', 'envira-gallery-export-submit', false ); ?>
1658
- </form>
1659
- </td>
1660
- </tr>
1661
- <?php
1662
- }
1663
- ?>
1664
-
1665
  <tr id="envira-config-rtl-box">
1666
  <th scope="row">
1667
  <label for="envira-config-rtl"><?php _e( 'Enable RTL Support?', 'envira-gallery' ); ?></label>
@@ -1672,12 +1060,12 @@ class Envira_Gallery_Metaboxes {
1672
  </td>
1673
  </tr>
1674
  <?php do_action( 'envira_gallery_misc_box', $post ); ?>
 
1675
  </tbody>
1676
  </table>
1677
  </div>
1678
  <?php
1679
  // Output an upgrade notice
1680
- if ( class_exists( 'Envira_Gallery_Lite' ) ) {
1681
  Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
1682
  'envira_gallery_misc_tab',
1683
  __( 'Want to take your galleries further?', 'envira-gallery' ),
@@ -1687,7 +1075,6 @@ class Envira_Gallery_Metaboxes {
1687
  Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
1688
  false
1689
  );
1690
- }
1691
 
1692
  }
1693
 
@@ -1910,7 +1297,7 @@ class Envira_Gallery_Metaboxes {
1910
  $settings['config']['justified_gallery_theme'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['justified_gallery_theme'] );
1911
  $settings['config']['gutter'] = absint( $_POST['_envira_gallery']['gutter'] );
1912
  $settings['config']['margin'] = absint( $_POST['_envira_gallery']['margin'] );
1913
- $settings['config']['image_size'] = sanitize_text_field( $_POST['_envira_gallery']['image_size'] );
1914
  $settings['config']['crop_width'] = absint( $_POST['_envira_gallery']['crop_width'] );
1915
  $settings['config']['crop_height'] = absint( $_POST['_envira_gallery']['crop_height'] );
1916
  $settings['config']['crop'] = isset( $_POST['_envira_gallery']['crop'] ) ? 1 : 0;
@@ -1918,62 +1305,17 @@ class Envira_Gallery_Metaboxes {
1918
  // Automatic/Justified
1919
  $settings['config']['justified_row_height'] = isset( $_POST['_envira_gallery']['justified_row_height'] ) ? absint($_POST['_envira_gallery']['justified_row_height'] ) : 150;
1920
 
1921
- if ( 'Envira_Gallery' == get_class( $this->base ) ) {
1922
- $settings['config']['description_position'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['description_position'] );
1923
- $settings['config']['description'] = trim( $_POST['_envira_gallery']['description'] );
1924
- $settings['config']['random'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['random'] );
1925
- $settings['config']['sorting_direction'] = preg_replace( '#[^A-Z]#', '', $_POST['_envira_gallery']['sorting_direction'] );
1926
- $settings['config']['image_sizes_random'] = ( isset( $_POST['_envira_gallery']['image_sizes_random'] ) ? stripslashes_deep( $_POST['_envira_gallery']['image_sizes_random'] ) : array() );
1927
- $settings['config']['dimensions'] = isset( $_POST['_envira_gallery']['dimensions'] ) ? 1 : 0;
1928
- $settings['config']['isotope'] = isset( $_POST['_envira_gallery']['isotope'] ) ? 1 : 0;
1929
- $settings['config']['css_animations'] = isset( $_POST['_envira_gallery']['css_animations'] ) ? 1 : 0;
1930
- $settings['config']['css_opacity'] = absint( $_POST['_envira_gallery']['css_opacity'] );
1931
- }
1932
-
1933
  // Lightbox
1934
  $settings['config']['lightbox_enabled'] = isset( $_POST['_envira_gallery']['lightbox_enabled'] ) ? 1 : 0;
1935
  $settings['config']['lightbox_theme'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['lightbox_theme'] );
1936
  $settings['config']['lightbox_image_size'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['lightbox_image_size'] );
1937
  $settings['config']['title_display'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['title_display'] );
1938
 
1939
- if ( 'Envira_Gallery' == get_class( $this->base ) ) {
1940
- $settings['config']['arrows'] = isset( $_POST['_envira_gallery']['arrows'] ) ? 1 : 0;
1941
- $settings['config']['arrows_position'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['arrows_position'] );
1942
- $settings['config']['keyboard'] = isset( $_POST['_envira_gallery']['keyboard'] ) ? 1 : 0;
1943
- $settings['config']['mousewheel'] = isset( $_POST['_envira_gallery']['mousewheel'] ) ? 1 : 0;
1944
- $settings['config']['aspect'] = isset( $_POST['_envira_gallery']['aspect'] ) ? 1 : 0;
1945
- $settings['config']['toolbar'] = isset( $_POST['_envira_gallery']['toolbar'] ) ? 1 : 0;
1946
- $settings['config']['toolbar_title'] = isset( $_POST['_envira_gallery']['toolbar_title'] ) ? 1 : 0;
1947
- $settings['config']['toolbar_position'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['toolbar_position'] );
1948
- $settings['config']['loop'] = isset( $_POST['_envira_gallery']['loop'] ) ? 1 : 0;
1949
- $settings['config']['lightbox_open_close_effect'] = preg_replace( '#[^A-Za-z0-9-_]#', '', $_POST['_envira_gallery']['lightbox_open_close_effect'] );
1950
- $settings['config']['effect'] = preg_replace( '#[^A-Za-z0-9-_]#', '', $_POST['_envira_gallery']['effect'] );
1951
- $settings['config']['html5'] = isset( $_POST['_envira_gallery']['html5'] ) ? 1 : 0;
1952
-
1953
- // Lightbox Thumbnails
1954
- $settings['config']['thumbnails'] = isset( $_POST['_envira_gallery']['thumbnails'] ) ? 1 : 0;
1955
- $settings['config']['thumbnails_width'] = absint( $_POST['_envira_gallery']['thumbnails_width'] );
1956
- $settings['config']['thumbnails_height'] = absint( $_POST['_envira_gallery']['thumbnails_height'] );
1957
- $settings['config']['thumbnails_position'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['thumbnails_position'] );
1958
-
1959
- // Mobile
1960
- $settings['config']['mobile_columns'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['mobile_columns'] );
1961
- $settings['config']['mobile'] = isset( $_POST['_envira_gallery']['mobile'] ) ? 1 : 0;
1962
- $settings['config']['mobile_width'] = absint( $_POST['_envira_gallery']['mobile_width'] );
1963
- $settings['config']['mobile_height'] = absint( $_POST['_envira_gallery']['mobile_height'] );
1964
- $settings['config']['mobile_lightbox'] = isset( $_POST['_envira_gallery']['mobile_lightbox'] ) ? 1 : 0;
1965
- $settings['config']['mobile_touchwipe'] = isset( $_POST['_envira_gallery']['mobile_touchwipe'] ) ? 1 : 0;
1966
- $settings['config']['mobile_touchwipe_close'] = isset( $_POST['_envira_gallery']['mobile_touchwipe_close'] ) ? 1 : 0;
1967
- $settings['config']['mobile_arrows'] = isset( $_POST['_envira_gallery']['mobile_arrows'] ) ? 1 : 0;
1968
- $settings['config']['mobile_toolbar'] = isset( $_POST['_envira_gallery']['mobile_toolbar'] ) ? 1 : 0;
1969
- $settings['config']['mobile_thumbnails'] = isset( $_POST['_envira_gallery']['mobile_thumbnails'] ) ? 1 : 0;
1970
- }
1971
-
1972
  // Misc
1973
  $settings['config']['classes'] = explode( "\n", $_POST['_envira_gallery']['classes'] );
1974
  $settings['config']['rtl'] = isset( $_POST['_envira_gallery']['rtl'] ) ? 1 : 0;
1975
  $settings['config']['title'] = trim( strip_tags( $_POST['_envira_gallery']['title'] ) );
1976
- $settings['config']['slug'] = sanitize_text_field( $_POST['_envira_gallery']['slug'] );
1977
 
1978
  // If on an envira post type, map the title and slug of the post object to the custom fields if no value exists yet.
1979
  if ( isset( $post->post_type ) && 'envira' == $post->post_type ) {
@@ -2143,13 +1485,21 @@ class Envira_Gallery_Metaboxes {
2143
  $images = ! empty( $gallery_data['gallery'] ) ? $gallery_data['gallery'] : false;
2144
  $common = Envira_Gallery_Common::get_instance();
2145
 
2146
- // echo "---"; print_r ($gallery_data);
2147
- // print_r ($images);
 
 
 
 
 
 
2148
 
2149
  // Loop through the images and crop them.
2150
  if ( $images ) {
2151
  // Increase the time limit to account for large image sets and suspend cache invalidations.
2152
- if ( ! ini_get( 'safe_mode' ) ) {
 
 
2153
  set_time_limit( Envira_Gallery_Common::get_instance()->get_max_execution_time() );
2154
  }
2155
  wp_suspend_cache_invalidation( true );
@@ -2171,9 +1521,6 @@ class Envira_Gallery_Metaboxes {
2171
  // Generate the cropped image.
2172
  $cropped_image = $common->resize_image( $image[0], $args['width'], $args['height'], true, $args['position'], $args['quality'], $args['retina'], null, $force_overwrite );
2173
 
2174
- // print_r ($image);
2175
- // echo "!!!!!"; print_r ($cropped_image); exit;
2176
-
2177
  // If there is an error, possibly output error message, otherwise woot!
2178
  if ( is_wp_error( $cropped_image ) ) {
2179
  // If WP_DEBUG is enabled, and we're logged in, output an error to the user
@@ -2215,10 +1562,21 @@ class Envira_Gallery_Metaboxes {
2215
  $images = ! empty( $gallery_data['gallery'] ) ? $gallery_data['gallery'] : false;
2216
  $common = Envira_Gallery_Common::get_instance();
2217
 
 
 
 
 
 
 
 
 
 
2218
  // Loop through the images and crop them.
2219
  if ( $images ) {
2220
  // Increase the time limit to account for large image sets and suspend cache invalidations.
2221
- if ( ! ini_get( 'safe_mode' ) ) {
 
 
2222
  set_time_limit( Envira_Gallery_Common::get_instance()->get_max_execution_time() );
2223
  }
2224
  wp_suspend_cache_invalidation( true );
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
+ $this->base = Envira_Gallery_Lite::get_instance();
48
 
49
  // Output a notice if missing cropping extensions because Envira needs them.
50
  if ( ! $this->has_gd_extension() && ! $this->has_imagick_extension() ) {
68
  add_action( 'envira_gallery_tab_images', array( $this, 'images_tab' ) );
69
  add_action( 'envira_gallery_tab_config', array( $this, 'config_tab' ) );
70
  add_action( 'envira_gallery_tab_lightbox', array( $this, 'lightbox_tab' ) );
 
71
  add_action( 'envira_gallery_tab_misc', array( $this, 'misc_tab' ) );
72
 
73
+ add_filter( 'envira_gallery_tab_nav', array( $this, 'lite_tabs' ) );
74
+ add_action( 'envira_gallery_tab_mobile', array( $this, 'lite_mobile_tab' ) );
75
+ add_action( 'envira_gallery_tab_videos', array( $this, 'lite_videos_tab' ) );
76
+ add_action( 'envira_gallery_tab_social', array( $this, 'lite_social_tab' ) );
77
+ add_action( 'envira_gallery_tab_tags', array( $this, 'lite_tags_tab' ) );
78
+ add_action( 'envira_gallery_tab_pagination', array( $this, 'lite_pagination_tab' ) );
 
 
 
 
79
 
80
  // Save Gallery
81
  add_action( 'save_post', array( $this, 'save_meta_boxes' ), 10, 2 );
279
  'library_search' => wp_create_nonce( 'envira-gallery-library-search' ),
280
  'load_gallery' => wp_create_nonce( 'envira-gallery-load-gallery' ),
281
  'load_image' => wp_create_nonce( 'envira-gallery-load-image' ),
 
282
  'move_media_nonce' => wp_create_nonce( 'envira-gallery-move-media' ),
283
  'move_media_modal_title'=> __( 'Move Media to Gallery', 'envira-gallery' ),
284
  'move_media_insert_button_label' => __( 'Move Media to Selected Gallery', 'envira-gallery' ),
296
  )
297
  );
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  // Link Search
300
  wp_enqueue_script( 'wp-link' );
301
 
685
  <a href="http://enviragallery.com/docs/creating-first-envira-gallery/" class="envira-doc" target="_blank">
686
  <?php _e( 'Read the Documentation', 'envira-gallery' ); ?>
687
  </a>
688
+ <?php _e( 'or', 'envira-gallery' ); ?>
689
  <a href="https://www.youtube.com/embed/F9_wOefuBaw?autoplay=1&amp;rel=0" class="envira-video" target="_blank">
690
  <?php _e( 'Watch a Video', 'envira-gallery' ); ?>
691
  </a>
692
  </small>
693
  </p>
694
 
695
+ <?php do_action( 'envira_gallery_do_default_display', $post ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
696
 
697
  <ul id="envira-gallery-output" class="envira-gallery-images-output <?php echo $layout; ?>">
698
  <?php
705
  </ul>
706
 
707
  <?php
708
+ // Output an upgrade notice
709
+ Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
710
+ 'envira_gallery_images_tab',
711
+ __( 'Want to make your gallery workflow even better?', 'envira-gallery' ),
712
+ __( 'By upgrading to Envira Pro, you can get access to numerous other features, including: a fully featured gallery widget, complete gallery API, powerful gallery documentation, full mobile and Retina support, dedicated customer support and so much more!', 'envira-gallery' ),
713
+ 'warning',
714
+ __( 'Click here to Upgrade', 'envira-gallery' ),
715
+ Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
716
+ false
717
+ );
 
 
 
 
 
 
 
 
 
 
 
718
 
719
  }
720
 
751
  <label for="envira-config-columns"><?php _e( 'Number of Gallery Columns', 'envira-gallery' ); ?></label>
752
  </th>
753
  <td>
754
+ <select id="envira-config-columns" name="_envira_gallery[columns]">
755
  <?php foreach ( (array) $this->get_columns() as $i => $data ) : ?>
756
  <option value="<?php echo $data['value']; ?>"<?php selected( $data['value'], $this->get_config( 'columns', $this->get_config_default( 'columns' ) ) ); ?>><?php echo $data['name']; ?></option>
757
  <?php endforeach; ?>
790
  </tbody>
791
  </table>
792
  </div>
 
 
 
 
 
 
793
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
794
  <div id="envira-config-standard-settings-box">
795
  <table class="form-table">
796
  <tbody>
797
+
798
  <tr id="envira-config-gallery-theme-box">
799
  <th scope="row">
800
  <label for="envira-config-gallery-theme"><?php _e( 'Gallery Theme', 'envira-gallery' ); ?></label>
808
  <p class="description"><?php _e( 'Sets the theme for the gallery display.', 'envira-gallery' ); ?></p>
809
  </td>
810
  </tr>
 
 
811
  <tr id="envira-config-gutter-box">
812
  <th scope="row">
813
  <label for="envira-config-gutter"><?php _e( 'Column Gutter Width', 'envira-gallery' ); ?></label>
827
  </td>
828
  </tr>
829
 
830
+ <?php do_action( 'envira_gallery_config_box', $post ); ?>
831
+ </tbody>
832
+ </table>
833
+ </div>
834
+
835
+
836
+ <div id="envira-image-settings-box">
837
+ <table class="form-table">
838
+ <tbody>
839
+ <!-- Dimensions -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
840
  <tr id="envira-config-image-size-box">
841
  <th scope="row">
842
  <label for="envira-config-image-size"><?php _e( 'Image Size', 'envira-gallery' ); ?></label>
843
  </th>
844
  <td>
845
+ <select id="envira-config-image-size" name="_envira_gallery[image_size]">
846
  <?php
847
  foreach ( (array) $this->get_image_sizes() as $i => $data ) {
848
  ?>
854
  <p class="description"><?php _e( 'Define the maximum image size for the Gallery view. Default will use the below Image Dimensions; Random will allow you to choose one or more WordPress image sizes, which will be used for the gallery output.', 'envira-gallery' ); ?></p>
855
  </td>
856
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
857
  <tr id="envira-config-crop-size-box">
858
  <th scope="row">
859
  <label for="envira-config-crop-width"><?php _e( 'Image Dimensions', 'envira-gallery' ); ?></label>
873
  <span class="description"><?php _e( 'If disabled, images will be resized to maintain their aspect ratio.', 'envira-gallery' ); ?></span>
874
 
875
  </td>
876
+ </tr>
877
+ </tbody>
878
+ </table>
879
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
880
  </div>
881
+ </div>
882
+ <?php Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
 
 
 
883
  'envira_gallery_config_tab',
884
  __( 'Want to do even more with your gallery display?', 'envira-gallery' ),
885
  __( 'By upgrading to Envira Pro, you can get access to numerous other gallery display features, including: custom image tagging and filtering, mobile specific image assets for blazing fast load times, dedicated and unique gallery URLs, custom gallery themes, gallery thumbnail support and so much more!', 'envira-gallery' ),
888
  Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
889
  false
890
  );
 
891
 
892
  }
893
 
925
  <label for="envira-config-lightbox-enabled"><?php _e( 'Enable Lightbox?', 'envira-gallery' ); ?></label>
926
  </th>
927
  <td>
928
+ <input id="envira-config-lightbox-enabled" type="checkbox" name="_envira_gallery[lightbox_enabled]" value="<?php echo $this->get_config( 'lightbox_enabled', $this->get_config_default( 'lightbox_enabled' ) ); ?>" <?php checked( $this->get_config( 'lightbox_enabled', $this->get_config_default( 'lightbox_enabled' ) ), 1 ); ?> />
929
  <span class="description"><?php _e( 'Enables or disables the gallery lightbox.', 'envira-gallery' ); ?></span>
930
  </td>
931
  </tr>
948
  <p class="description"><?php _e( 'Sets the theme for the gallery lightbox display.', 'envira-gallery' ); ?></p>
949
  </td>
950
  </tr>
 
951
  <tr id="envira-config-lightbox-image-size-box">
952
  <th scope="row">
953
  <label for="envira-config-lightbox-image-size"><?php _e( 'Image Size', 'envira-gallery' ); ?></label>
961
  <p class="description"><?php _e( 'Define the maximum image size for the Lightbox view. Default will display the original, full size image.', 'envira-gallery' ); ?></p>
962
  </td>
963
  </tr>
 
964
  <tr id="envira-config-lightbox-title-display-box">
965
  <th scope="row">
966
  <label for="envira-config-lightbox-title-display"><?php _e( 'Caption Position', 'envira-gallery' ); ?></label>
975
  </td>
976
  </tr>
977
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
978
  <?php do_action( 'envira_gallery_lightbox_box', $post ); ?>
979
  </tbody>
980
  </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
981
  </div>
982
  </div>
983
  <?php
984
 
985
  // Output an upgrade notice
 
986
  Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
987
  'envira_gallery_lightbox_tab',
988
  __( 'Want even more fine tuned control over your lightbox display?', 'envira-gallery' ),
992
  Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
993
  false
994
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
995
 
996
  }
997
 
1050
  <p class="description"><?php _e( 'Adds custom CSS classes to this gallery. Enter one class per line.', 'envira-gallery' ); ?></p>
1051
  </td>
1052
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1053
  <tr id="envira-config-rtl-box">
1054
  <th scope="row">
1055
  <label for="envira-config-rtl"><?php _e( 'Enable RTL Support?', 'envira-gallery' ); ?></label>
1060
  </td>
1061
  </tr>
1062
  <?php do_action( 'envira_gallery_misc_box', $post ); ?>
1063
+
1064
  </tbody>
1065
  </table>
1066
  </div>
1067
  <?php
1068
  // Output an upgrade notice
 
1069
  Envira_Gallery_Notice_Admin::get_instance()->display_inline_notice(
1070
  'envira_gallery_misc_tab',
1071
  __( 'Want to take your galleries further?', 'envira-gallery' ),
1075
  Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(),
1076
  false
1077
  );
 
1078
 
1079
  }
1080
 
1297
  $settings['config']['justified_gallery_theme'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['justified_gallery_theme'] );
1298
  $settings['config']['gutter'] = absint( $_POST['_envira_gallery']['gutter'] );
1299
  $settings['config']['margin'] = absint( $_POST['_envira_gallery']['margin'] );
1300
+ $settings['config']['image_size'] = sanitize_text_field( esc_attr ( $_POST['_envira_gallery']['image_size'] ) );
1301
  $settings['config']['crop_width'] = absint( $_POST['_envira_gallery']['crop_width'] );
1302
  $settings['config']['crop_height'] = absint( $_POST['_envira_gallery']['crop_height'] );
1303
  $settings['config']['crop'] = isset( $_POST['_envira_gallery']['crop'] ) ? 1 : 0;
1305
  // Automatic/Justified
1306
  $settings['config']['justified_row_height'] = isset( $_POST['_envira_gallery']['justified_row_height'] ) ? absint($_POST['_envira_gallery']['justified_row_height'] ) : 150;
1307
 
 
 
 
 
 
 
 
 
 
 
 
 
1308
  // Lightbox
1309
  $settings['config']['lightbox_enabled'] = isset( $_POST['_envira_gallery']['lightbox_enabled'] ) ? 1 : 0;
1310
  $settings['config']['lightbox_theme'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['lightbox_theme'] );
1311
  $settings['config']['lightbox_image_size'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['lightbox_image_size'] );
1312
  $settings['config']['title_display'] = preg_replace( '#[^a-z0-9-_]#', '', $_POST['_envira_gallery']['title_display'] );
1313
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1314
  // Misc
1315
  $settings['config']['classes'] = explode( "\n", $_POST['_envira_gallery']['classes'] );
1316
  $settings['config']['rtl'] = isset( $_POST['_envira_gallery']['rtl'] ) ? 1 : 0;
1317
  $settings['config']['title'] = trim( strip_tags( $_POST['_envira_gallery']['title'] ) );
1318
+ $settings['config']['slug'] = sanitize_text_field( esc_attr( $_POST['_envira_gallery']['slug'] ) );
1319
 
1320
  // If on an envira post type, map the title and slug of the post object to the custom fields if no value exists yet.
1321
  if ( isset( $post->post_type ) && 'envira' == $post->post_type ) {
1485
  $images = ! empty( $gallery_data['gallery'] ) ? $gallery_data['gallery'] : false;
1486
  $common = Envira_Gallery_Common::get_instance();
1487
 
1488
+ // Populate variable if we are using <= PHP 5.3
1489
+ $php_version = explode('.', phpversion() );
1490
+
1491
+ if ( $php_version[0] <= 5 && $php_version[1] <= 3 ) {
1492
+ $is_using_old_php = true;
1493
+ } else {
1494
+ $is_using_old_php = false;
1495
+ }
1496
 
1497
  // Loop through the images and crop them.
1498
  if ( $images ) {
1499
  // Increase the time limit to account for large image sets and suspend cache invalidations.
1500
+ if ( ! $is_using_old_php ) {
1501
+ set_time_limit( Envira_Gallery_Common::get_instance()->get_max_execution_time() );
1502
+ } else if ( $is_using_old_php && ! ini_get( 'safe_mode' ) ) {
1503
  set_time_limit( Envira_Gallery_Common::get_instance()->get_max_execution_time() );
1504
  }
1505
  wp_suspend_cache_invalidation( true );
1521
  // Generate the cropped image.
1522
  $cropped_image = $common->resize_image( $image[0], $args['width'], $args['height'], true, $args['position'], $args['quality'], $args['retina'], null, $force_overwrite );
1523
 
 
 
 
1524
  // If there is an error, possibly output error message, otherwise woot!
1525
  if ( is_wp_error( $cropped_image ) ) {
1526
  // If WP_DEBUG is enabled, and we're logged in, output an error to the user
1562
  $images = ! empty( $gallery_data['gallery'] ) ? $gallery_data['gallery'] : false;
1563
  $common = Envira_Gallery_Common::get_instance();
1564
 
1565
+ // Populate variable if we are using <= PHP 5.3
1566
+ $php_version = explode('.', phpversion() );
1567
+
1568
+ if ( $php_version[0] <= 5 && $php_version[1] <= 3 ) {
1569
+ $is_using_old_php = true;
1570
+ } else {
1571
+ $is_using_old_php = false;
1572
+ }
1573
+
1574
  // Loop through the images and crop them.
1575
  if ( $images ) {
1576
  // Increase the time limit to account for large image sets and suspend cache invalidations.
1577
+ if ( ! $is_using_old_php ) {
1578
+ set_time_limit( Envira_Gallery_Common::get_instance()->get_max_execution_time() );
1579
+ } else if ( $is_using_old_php && ! ini_get( 'safe_mode' ) ) {
1580
  set_time_limit( Envira_Gallery_Common::get_instance()->get_max_execution_time() );
1581
  }
1582
  wp_suspend_cache_invalidation( true );
includes/admin/partials/metabox-gallery-settings.php CHANGED
@@ -39,6 +39,7 @@
39
  ?>
40
  <div id="envira-tab-<?php echo $id; ?>" class="envira-tab envira-clear <?php echo $class; ?>">
41
  <?php do_action( 'envira_gallery_tab_' . $id, $data['post'] ); ?>
 
42
  </div>
43
  <?php
44
  $i++;
39
  ?>
40
  <div id="envira-tab-<?php echo $id; ?>" class="envira-tab envira-clear <?php echo $class; ?>">
41
  <?php do_action( 'envira_gallery_tab_' . $id, $data['post'] ); ?>
42
+
43
  </div>
44
  <?php
45
  $i++;
includes/admin/partials/metabox-gallery-type.php CHANGED
@@ -39,63 +39,25 @@
39
 
40
  <!-- External Gallery -->
41
  <div id="envira-gallery-external" class="envira-tab envira-clear<?php echo ( ( $data['instance']->get_config( 'type', $data['instance']->get_config_default( 'type' ) ) != 'default' ) ? ' envira-active' : '' ); ?>">
42
- <?php
43
- // If one or more External Gallery Types are registered, display them now.
44
- if ( count( $data['types'] ) > 1 ) {
45
- ?>
46
- <p class="envira-intro"><?php _e( 'Select Your Service', 'envira-gallery' ); ?></p>
47
- <ul id="envira-gallery-types-nav">
48
- <?php
49
- foreach ( $data['types'] as $id => $title ) {
50
- // Don't output the default type as an option here
51
- if ( 'default' == $id ) {
52
- continue;
53
- }
 
 
 
 
 
 
 
54
 
55
- // Output the type as a radio option
56
- ?>
57
- <li id="envira-gallery-type-<?php echo sanitize_html_class( $id ); ?>"<?php echo ( ( $data['instance']->get_config( 'type', $data['instance']->get_config_default( 'type' ) ) == $id ) ? ' class="envira-active"' : '' ); ?>>
58
- <label for="envira-gallery-type-<?php echo $id; ?>">
59
- <input id="envira-gallery-type-<?php echo sanitize_html_class( $id ); ?>" type="radio" name="_envira_gallery[type]" value="<?php echo $id; ?>" <?php checked( $data['instance']->get_config( 'type', $data['instance']->get_config_default( 'type' ) ), $id ); ?> />
60
- <div class="icon"></div>
61
- <div class="title"><?php echo $title; ?></div>
62
- </label>
63
- </li>
64
- <?php
65
- }
66
- ?>
67
- </ul>
68
- <?php
69
- } else {
70
- // No External Gallery Types are registered.
71
- // If we're on the Lite version, show a notice.
72
- if ( class_exists( 'Envira_Gallery_Lite' ) ) {
73
- $upgrade_link = Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link();
74
- ?>
75
- <p class="envira-intro"><?php _e( 'Create Dynamic Galleries with Envira', 'envira-gallery' ); ?></p>
76
- <ul id="envira-gallery-types-nav">
77
- <li id="envira-gallery-type-instagram">
78
- <a href="<?php echo $upgrade_link; ?>" title="<?php _e( 'Build Galleries from Instagram images.', 'envira-gallery' ); ?>" target="_blank">
79
- <div class="icon"></div>
80
- <div class="title"><?php _e( 'Instagram', 'envira-gallery' ); ?></div>
81
- </a>
82
- </li>
83
- </ul>
84
- <p>
85
- <?php _e( 'Envira Pro allows you to build galleries from Instagram photos, images from your posts, and more.', 'envira-gallery' ); ?>
86
- </p>
87
- <p>
88
- <a href="<?php echo $upgrade_link; ?>" class="button button-primary button-x-large" title="<?php _e( 'Click Here to Upgrade', 'envira-gallery' ); ?>" target="_blank">
89
- <?php _e( 'Click Here to Upgrade', 'envira-gallery' ); ?>
90
- </a>
91
- </p>
92
- <?php
93
- } else {
94
- ?>
95
- <p><?php _e( 'It doesn\'t look like you have any Addons activated which import images from external sources.', 'envira-gallery' ); ?></p>
96
- <?php
97
- }
98
- }
99
- ?>
100
  </div>
101
  </div>
39
 
40
  <!-- External Gallery -->
41
  <div id="envira-gallery-external" class="envira-tab envira-clear<?php echo ( ( $data['instance']->get_config( 'type', $data['instance']->get_config_default( 'type' ) ) != 'default' ) ? ' envira-active' : '' ); ?>">
42
+
43
+ <?php $upgrade_link = Envira_Gallery_Common_Admin::get_instance()->get_upgrade_link(); ?>
44
+ <p class="envira-intro"><?php _e( 'Create Dynamic Galleries with Envira', 'envira-gallery' ); ?></p>
45
+ <ul id="envira-gallery-types-nav">
46
+ <li id="envira-gallery-type-instagram">
47
+ <a href="<?php echo $upgrade_link; ?>" title="<?php _e( 'Build Galleries from Instagram images.', 'envira-gallery' ); ?>" target="_blank">
48
+ <div class="icon"></div>
49
+ <div class="title"><?php _e( 'Instagram', 'envira-gallery' ); ?></div>
50
+ </a>
51
+ </li>
52
+ </ul>
53
+ <p>
54
+ <?php _e( 'Envira Pro allows you to build galleries from Instagram photos, images from your posts, and more.', 'envira-gallery' ); ?>
55
+ </p>
56
+ <p>
57
+ <a href="<?php echo $upgrade_link; ?>" class="button button-primary button-x-large" title="<?php _e( 'Click Here to Upgrade', 'envira-gallery' ); ?>" target="_blank">
58
+ <?php _e( 'Click Here to Upgrade', 'envira-gallery' ); ?>
59
+ </a>
60
+ </p>
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  </div>
63
  </div>
includes/admin/posttype.php CHANGED
@@ -44,7 +44,7 @@ class Envira_Gallery_Posttype_Admin {
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
48
  $this->metabox = Envira_Gallery_Metaboxes::get_instance();
49
 
50
  // Update post type messages.
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
+ $this->base = Envira_Gallery_Lite::get_instance();
48
  $this->metabox = Envira_Gallery_Metaboxes::get_instance();
49
 
50
  // Update post type messages.
includes/admin/table.php CHANGED
@@ -53,7 +53,7 @@ class Envira_Gallery_Table_Admin {
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
57
 
58
  // Load the metabox class object.
59
  $this->metabox = Envira_Gallery_Metaboxes::get_instance();
@@ -66,13 +66,6 @@ class Envira_Gallery_Table_Admin {
66
  add_filter( 'manage_edit-envira_columns', array( &$this, 'envira_columns' ) );
67
  add_action( 'manage_envira_posts_custom_column', array( &$this, 'envira_custom_columns'), 10, 2 );
68
 
69
- // Only load Quick and Bulk Editing support if we're running Envira Gallery, and not Envira Gallery Lite.
70
- if ( class_exists( 'Envira_Gallery' ) ) {
71
- add_action( 'quick_edit_custom_box', array( $this, 'quick_edit_custom_box' ), 10, 2 ); // Single Item.
72
- add_action( 'bulk_edit_custom_box', array( $this, 'bulk_edit_custom_box' ), 10, 2 ); // Multiple Items.
73
- add_action( 'post_updated', array( $this, 'bulk_edit_save' ) );
74
- }
75
-
76
  }
77
 
78
  /**
@@ -164,8 +157,8 @@ class Envira_Gallery_Table_Admin {
164
  // Add additional columns we want to display.
165
  $envira_columns = array(
166
  'cb' => '<input type="checkbox" />',
167
- 'title' => __( 'Title', 'envira-gallery' ),
168
  'image' => __( '', 'envira-gallery' ),
 
169
  'shortcode' => __( 'Shortcode', 'envira-gallery' ),
170
  'posts' => __( 'Posts', 'envira-gallery' ),
171
  'modified' => __( 'Last Modified', 'envira-gallery' ),
53
  public function __construct() {
54
 
55
  // Load the base class object.
56
+ $this->base = Envira_Gallery_Lite::get_instance();
57
 
58
  // Load the metabox class object.
59
  $this->metabox = Envira_Gallery_Metaboxes::get_instance();
66
  add_filter( 'manage_edit-envira_columns', array( &$this, 'envira_columns' ) );
67
  add_action( 'manage_envira_posts_custom_column', array( &$this, 'envira_custom_columns'), 10, 2 );
68
 
 
 
 
 
 
 
 
69
  }
70
 
71
  /**
157
  // Add additional columns we want to display.
158
  $envira_columns = array(
159
  'cb' => '<input type="checkbox" />',
 
160
  'image' => __( '', 'envira-gallery' ),
161
+ 'title' => __( 'Title', 'envira-gallery' ),
162
  'shortcode' => __( 'Shortcode', 'envira-gallery' ),
163
  'posts' => __( 'Posts', 'envira-gallery' ),
164
  'modified' => __( 'Last Modified', 'envira-gallery' ),
includes/global/Mobile_Detect.php ADDED
@@ -0,0 +1,1458 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Mobile Detect Library
4
+ * =====================
5
+ *
6
+ * Motto: "Every business should have a mobile detection script to detect mobile readers"
7
+ *
8
+ * Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
9
+ * It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
10
+ *
11
+ * @author Current authors: Serban Ghita <serbanghita@gmail.com>
12
+ * Nick Ilyin <nick.ilyin@gmail.com>
13
+ *
14
+ * Original author: Victor Stanciu <vic.stanciu@gmail.com>
15
+ *
16
+ * @license Code and contributions have 'MIT License'
17
+ * More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
18
+ *
19
+ * @link Homepage: http://mobiledetect.net
20
+ * GitHub Repo: https://github.com/serbanghita/Mobile-Detect
21
+ * Google Code: http://code.google.com/p/php-mobile-detect/
22
+ * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
23
+ * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
24
+ *
25
+ * @version 2.8.24
26
+ */
27
+
28
+ class Mobile_Detect
29
+ {
30
+ /**
31
+ * Mobile detection type.
32
+ *
33
+ * @deprecated since version 2.6.9
34
+ */
35
+ const DETECTION_TYPE_MOBILE = 'mobile';
36
+
37
+ /**
38
+ * Extended detection type.
39
+ *
40
+ * @deprecated since version 2.6.9
41
+ */
42
+ const DETECTION_TYPE_EXTENDED = 'extended';
43
+
44
+ /**
45
+ * A frequently used regular expression to extract version #s.
46
+ *
47
+ * @deprecated since version 2.6.9
48
+ */
49
+ const VER = '([\w._\+]+)';
50
+
51
+ /**
52
+ * Top-level device.
53
+ */
54
+ const MOBILE_GRADE_A = 'A';
55
+
56
+ /**
57
+ * Mid-level device.
58
+ */
59
+ const MOBILE_GRADE_B = 'B';
60
+
61
+ /**
62
+ * Low-level device.
63
+ */
64
+ const MOBILE_GRADE_C = 'C';
65
+
66
+ /**
67
+ * Stores the version number of the current release.
68
+ */
69
+ const VERSION = '2.8.24';
70
+
71
+ /**
72
+ * A type for the version() method indicating a string return value.
73
+ */
74
+ const VERSION_TYPE_STRING = 'text';
75
+
76
+ /**
77
+ * A type for the version() method indicating a float return value.
78
+ */
79
+ const VERSION_TYPE_FLOAT = 'float';
80
+
81
+ /**
82
+ * A cache for resolved matches
83
+ * @var array
84
+ */
85
+ protected $cache = array();
86
+
87
+ /**
88
+ * The User-Agent HTTP header is stored in here.
89
+ * @var string
90
+ */
91
+ protected $userAgent = null;
92
+
93
+ /**
94
+ * HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE.
95
+ * @var array
96
+ */
97
+ protected $httpHeaders = array();
98
+
99
+ /**
100
+ * CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer.
101
+ * @var array
102
+ */
103
+ protected $cloudfrontHeaders = array();
104
+
105
+ /**
106
+ * The matching Regex.
107
+ * This is good for debug.
108
+ * @var string
109
+ */
110
+ protected $matchingRegex = null;
111
+
112
+ /**
113
+ * The matches extracted from the regex expression.
114
+ * This is good for debug.
115
+ * @var string
116
+ */
117
+ protected $matchesArray = null;
118
+
119
+ /**
120
+ * The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
121
+ *
122
+ * @deprecated since version 2.6.9
123
+ *
124
+ * @var string
125
+ */
126
+ protected $detectionType = self::DETECTION_TYPE_MOBILE;
127
+
128
+ /**
129
+ * HTTP headers that trigger the 'isMobile' detection
130
+ * to be true.
131
+ *
132
+ * @var array
133
+ */
134
+ protected static $mobileHeaders = array(
135
+
136
+ 'HTTP_ACCEPT' => array('matches' => array(
137
+ // Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/
138
+ 'application/x-obml2d',
139
+ // BlackBerry devices.
140
+ 'application/vnd.rim.html',
141
+ 'text/vnd.wap.wml',
142
+ 'application/vnd.wap.xhtml+xml'
143
+ )),
144
+ 'HTTP_X_WAP_PROFILE' => null,
145
+ 'HTTP_X_WAP_CLIENTID' => null,
146
+ 'HTTP_WAP_CONNECTION' => null,
147
+ 'HTTP_PROFILE' => null,
148
+ // Reported by Opera on Nokia devices (eg. C3).
149
+ 'HTTP_X_OPERAMINI_PHONE_UA' => null,
150
+ 'HTTP_X_NOKIA_GATEWAY_ID' => null,
151
+ 'HTTP_X_ORANGE_ID' => null,
152
+ 'HTTP_X_VODAFONE_3GPDPCONTEXT' => null,
153
+ 'HTTP_X_HUAWEI_USERID' => null,
154
+ // Reported by Windows Smartphones.
155
+ 'HTTP_UA_OS' => null,
156
+ // Reported by Verizon, Vodafone proxy system.
157
+ 'HTTP_X_MOBILE_GATEWAY' => null,
158
+ // Seen this on HTC Sensation. SensationXE_Beats_Z715e.
159
+ 'HTTP_X_ATT_DEVICEID' => null,
160
+ // Seen this on a HTC.
161
+ 'HTTP_UA_CPU' => array('matches' => array('ARM')),
162
+ );
163
+
164
+ /**
165
+ * List of mobile devices (phones).
166
+ *
167
+ * @var array
168
+ */
169
+ protected static $phoneDevices = array(
170
+ 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes
171
+ 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
172
+ 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m',
173
+ 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6',
174
+ // @todo: Is 'Dell Streak' a tablet or a phone? ;)
175
+ 'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
176
+ 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b',
177
+ 'Samsung' => '\bSamsung\b|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F',
178
+ 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323)',
179
+ 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
180
+ 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
181
+ 'NokiaLumia' => 'Lumia [0-9]{3,4}',
182
+ // http://www.micromaxinfo.com/mobiles/smartphones
183
+ // Added because the codes might conflict with Acer Tablets.
184
+ 'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b',
185
+ // @todo Complete the regex.
186
+ 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ;
187
+ 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
188
+ // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
189
+ // Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
190
+ 'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
191
+ // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
192
+ 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
193
+ // http://fr.wikomobile.com
194
+ 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM',
195
+ 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
196
+ // Added simvalley mobile just for fun. They have some interesting devices.
197
+ // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
198
+ 'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
199
+ // Wolfgang - a brand that is sold by Aldi supermarkets.
200
+ // http://www.wolfgangmobile.com/
201
+ 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q',
202
+ 'Alcatel' => 'Alcatel',
203
+ 'Nintendo' => 'Nintendo 3DS',
204
+ // http://en.wikipedia.org/wiki/Amoi
205
+ 'Amoi' => 'Amoi',
206
+ // http://en.wikipedia.org/wiki/INQ
207
+ 'INQ' => 'INQ',
208
+ // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
209
+ 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser',
210
+ );
211
+
212
+ /**
213
+ * List of tablet devices.
214
+ *
215
+ * @var array
216
+ */
217
+ protected static $tabletDevices = array(
218
+ // @todo: check for mobile friendly emails topic.
219
+ 'iPad' => 'iPad|iPad.*Mobile',
220
+ // Removed |^.*Android.*Nexus(?!(?:Mobile).)*$
221
+ // @see #442
222
+ 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)',
223
+ 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y|SM-T280', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone.
224
+ // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html
225
+ 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI)\b',
226
+ // Only the Surface tablets with Windows RT are considered mobile.
227
+ // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
228
+ 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)',
229
+ // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
230
+ 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10',
231
+ // Watch out for PadFone, see #132.
232
+ // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/
233
+ 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z',
234
+ 'BlackBerryTablet' => 'PlayBook|RIM Tablet',
235
+ 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410',
236
+ 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
237
+ 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
238
+ // http://www.acer.ro/ac/ro/RO/content/drivers
239
+ // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
240
+ // http://us.acer.com/ac/en/US/content/group/tablets
241
+ // http://www.acer.de/ac/de/DE/content/models/tablets/
242
+ // Can conflict with Micromax and Motorola phones codes.
243
+ 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30',
244
+ // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
245
+ // http://us.toshiba.com/tablets/tablet-finder
246
+ // http://www.toshiba.co.jp/regza/tablet/
247
+ 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
248
+ // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
249
+ // http://www.lg.com/us/tablets
250
+ 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b',
251
+ 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b',
252
+ // Prestigio Tablets http://www.prestigio.com/support
253
+ 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002',
254
+ // http://support.lenovo.com/en_GB/downloads/default.page?#
255
+ 'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)',
256
+ // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets
257
+ 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7',
258
+ // http://www.yarvik.com/en/matrix/tablets/
259
+ 'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b',
260
+ 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
261
+ 'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',
262
+ // http://www.intenso.de/kategorie_en.php?kategorie=33
263
+ // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate
264
+ 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004',
265
+ // IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
266
+ 'IRUTablet' => 'M702pro',
267
+ 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b',
268
+ // http://www.e-boda.ro/tablete-pc.html
269
+ 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
270
+ // http://www.allview.ro/produse/droseries/lista-tablete-pc/
271
+ 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
272
+ // http://wiki.archosfans.com/index.php?title=Main_Page
273
+ 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b',
274
+ // http://www.ainol.com/plugin.php?identifier=ainol&module=product
275
+ 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
276
+ 'NokiaLumiaTablet' => 'Lumia 2520',
277
+ // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
278
+ // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
279
+ // http://www.sony.jp/support/tablet/
280
+ 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31',
281
+ // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8
282
+ 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b',
283
+ // db + http://www.cube-tablet.com/buy-products.html
284
+ 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
285
+ // http://www.cobyusa.com/?p=pcat&pcat_id=3001
286
+ 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
287
+ // http://www.match.net.cn/products.asp
288
+ 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10',
289
+ // http://www.msi.com/support
290
+ // @todo Research the Windows Tablets.
291
+ 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b',
292
+ // @todo http://www.kyoceramobile.com/support/drivers/
293
+ // 'KyoceraTablet' => null,
294
+ // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/
295
+ // 'IntextTablet' => null,
296
+ // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
297
+ // http://www.imp3.net/14/show.php?itemid=20454
298
+ 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
299
+ // http://www.rock-chips.com/index.php?do=prod&pid=2
300
+ 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
301
+ // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
302
+ 'FlyTablet' => 'IQ310|Fly Vision',
303
+ // http://www.bqreaders.com/gb/tablets-prices-sale.html
304
+ 'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris [E|M]10)|Maxwell.*Lite|Maxwell.*Plus',
305
+ // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
306
+ // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
307
+ 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim',
308
+ // Nec or Medias Tab
309
+ 'NecTablet' => '\bN-06D|\bN-08D',
310
+ // Pantech Tablets: http://www.pantechusa.com/phones/
311
+ 'PantechTablet' => 'Pantech.*P4100',
312
+ // Broncho Tablets: http://www.broncho.cn/ (hard to find)
313
+ 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
314
+ // http://versusuk.com/support.html
315
+ 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b',
316
+ // http://www.zync.in/index.php/our-products/tablet-phablets
317
+ 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
318
+ // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
319
+ 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
320
+ // https://www.nabitablet.com/
321
+ 'NabiTablet' => 'Android.*\bNabi',
322
+ 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build',
323
+ // French Danew Tablets http://www.danew.com/produits-tablette.php
324
+ 'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b',
325
+ // Texet Tablets and Readers http://www.texet.ru/tablet/
326
+ 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
327
+ // Avoid detecting 'PLAYSTATION 3' as mobile.
328
+ 'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
329
+ // http://www.trekstor.de/surftabs.html
330
+ 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab',
331
+ // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
332
+ 'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b',
333
+ // http://www.advandigital.com/index.php?link=content-product&jns=JP001
334
+ // because of the short codenames we have to include whitespaces to reduce the possible conflicts.
335
+ 'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ',
336
+ // http://www.danytech.com/category/tablet-pc
337
+ 'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
338
+ // http://www.galapad.net/product.html
339
+ 'GalapadTablet' => 'Android.*\bG1\b',
340
+ // http://www.micromaxinfo.com/tablet/funbook
341
+ 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b',
342
+ // http://www.karbonnmobiles.com/products_tablet.php
343
+ 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b',
344
+ // http://www.myallfine.com/Products.asp
345
+ 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
346
+ // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
347
+ 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b',
348
+ // http://www.yonesnav.com/products/products.php
349
+ 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
350
+ // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
351
+ // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
352
+ 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
353
+ // http://www.gloryunion.cn/products.asp
354
+ // http://www.allwinnertech.com/en/apply/mobile.html
355
+ // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
356
+ // @todo: Softwiner tablets?
357
+ // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
358
+ 'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
359
+ // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
360
+ 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
361
+ // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
362
+ // @todo: add more tests.
363
+ 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)',
364
+ // http://hclmetablet.com/India/index.php
365
+ 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
366
+ // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
367
+ 'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
368
+ // http://www.visture.com/index.asp
369
+ 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
370
+ // http://www.mijncresta.nl/tablet
371
+ 'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
372
+ // MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
373
+ 'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b',
374
+ // Concorde tab
375
+ 'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan',
376
+ // GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/
377
+ 'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042',
378
+ // Modecom Tablets - http://www.modecom.eu/tablets/portal/
379
+ 'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003',
380
+ // Vonino Tablets - http://www.vonino.eu/tablets
381
+ 'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b',
382
+ // ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0
383
+ 'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1',
384
+ // Storex Tablets - http://storex.fr/espace_client/support.html
385
+ // @note: no need to add all the tablet codes since they are guided by the first regex.
386
+ 'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab',
387
+ // Generic Vodafone tablets.
388
+ 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497',
389
+ // French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb
390
+ // Aka: http://www.essentielb.fr/
391
+ 'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2',
392
+ // Ross & Moor - http://ross-moor.ru/
393
+ 'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711',
394
+ // i-mobile http://product.i-mobilephone.com/Mobile_Device
395
+ 'iMobileTablet' => 'i-mobile i-note',
396
+ // http://www.tolino.de/de/vergleichen/
397
+ 'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine',
398
+ // AudioSonic - a Kmart brand
399
+ // http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72&currentPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1
400
+ 'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b',
401
+ // AMPE Tablets - http://www.ampe.com.my/product-category/tablets/
402
+ // @todo: add them gradually to avoid conflicts.
403
+ 'AMPETablet' => 'Android.* A78 ',
404
+ // Skk Mobile - http://skkmobile.com.ph/product_tablets.php
405
+ 'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)',
406
+ // Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1
407
+ 'TecnoTablet' => 'TECNO P9',
408
+ // JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3
409
+ 'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b',
410
+ // i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/
411
+ 'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)',
412
+ // http://www.intracon.eu/tablet
413
+ 'FX2Tablet' => 'FX2 PAD7|FX2 PAD10',
414
+ // http://www.xoro.de/produkte/
415
+ // @note: Might be the same brand with 'Simply tablets'
416
+ 'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151',
417
+ // http://www1.viewsonic.com/products/computing/tablets/
418
+ 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a',
419
+ // http://www.odys.de/web/internet-tablet_en.html
420
+ 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10',
421
+ // http://www.captiva-power.de/products.html#tablets-en
422
+ 'CaptivaTablet' => 'CAPTIVA PAD',
423
+ // IconBIT - http://www.iconbit.com/products/tablets/
424
+ 'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S',
425
+ // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63
426
+ 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi',
427
+ // Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price
428
+ 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+',
429
+ 'JaytechTablet' => 'TPC-PA762',
430
+ 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010',
431
+ // http://www.digma.ru/support/download/
432
+ // @todo: Ebooks also (if requested)
433
+ 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b',
434
+ // http://www.evolioshop.com/ro/tablete-pc.html
435
+ // http://www.evolio.ro/support/downloads_static.html?cat=2
436
+ // @todo: Research some more
437
+ 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b',
438
+ // @todo http://www.lavamobiles.com/tablets-data-cards
439
+ 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b',
440
+ // http://www.breezetablet.com/
441
+ 'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712',
442
+ // http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/
443
+ 'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010',
444
+ // https://www.celkonmobiles.com/?_a=categoryphones&sid=2
445
+ 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b',
446
+ // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab
447
+ 'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b',
448
+ // http://www.mi.com/en
449
+ 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b',
450
+ // http://www.nbru.cn/index.html
451
+ 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One',
452
+ // http://navroad.com/products/produkty/tablety/
453
+ 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI',
454
+ // http://leader-online.com/new_site/product-category/tablets/
455
+ // http://www.leader-online.net.au/List/Tablet
456
+ 'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100',
457
+ // http://www.datawind.com/ubislate/
458
+ 'UbislateTablet' => 'UbiSlate[\s]?7C',
459
+ // http://www.pocketbook-int.com/ru/support
460
+ 'PocketBookTablet' => 'Pocketbook',
461
+ // http://www.kocaso.com/product_tablet.html
462
+ 'KocasoTablet' => '\b(TB-1207)\b',
463
+ // http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm
464
+ 'HisenseTablet' => '\b(F5281|E2371)\b',
465
+ // http://www.tesco.com/direct/hudl/
466
+ 'Hudl' => 'Hudl HT7S3|Hudl 2',
467
+ // http://www.telstra.com.au/home-phone/thub-2/
468
+ 'TelstraTablet' => 'T-Hub2',
469
+ 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b'
470
+ );
471
+
472
+ /**
473
+ * List of mobile Operating Systems.
474
+ *
475
+ * @var array
476
+ */
477
+ protected static $operatingSystems = array(
478
+ 'AndroidOS' => 'Android',
479
+ 'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os',
480
+ 'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
481
+ 'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
482
+ // @reference: http://en.wikipedia.org/wiki/Windows_Mobile
483
+ 'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
484
+ // @reference: http://en.wikipedia.org/wiki/Windows_Phone
485
+ // http://wifeng.cn/?r=blog&a=view&id=106
486
+ // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
487
+ // http://msdn.microsoft.com/library/ms537503.aspx
488
+ // https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
489
+ 'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
490
+ 'iOS' => '\biPhone.*Mobile|\biPod|\biPad',
491
+ // http://en.wikipedia.org/wiki/MeeGo
492
+ // @todo: research MeeGo in UAs
493
+ 'MeeGoOS' => 'MeeGo',
494
+ // http://en.wikipedia.org/wiki/Maemo
495
+ // @todo: research Maemo in UAs
496
+ 'MaemoOS' => 'Maemo',
497
+ 'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135
498
+ 'webOS' => 'webOS|hpwOS',
499
+ 'badaOS' => '\bBada\b',
500
+ 'BREWOS' => 'BREW',
501
+ );
502
+
503
+ /**
504
+ * List of mobile User Agents.
505
+ *
506
+ * IMPORTANT: This is a list of only mobile browsers.
507
+ * Mobile Detect 2.x supports only mobile browsers,
508
+ * it was never designed to detect all browsers.
509
+ * The change will come in 2017 in the 3.x release for PHP7.
510
+ *
511
+ * @var array
512
+ */
513
+ protected static $browsers = array(
514
+ //'Vivaldi' => 'Vivaldi',
515
+ // @reference: https://developers.google.com/chrome/mobile/docs/user-agent
516
+ 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?',
517
+ 'Dolfin' => '\bDolfin\b',
518
+ 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',
519
+ 'Skyfire' => 'Skyfire',
520
+ 'Edge' => 'Mobile Safari/[.0-9]* Edge',
521
+ 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+
522
+ 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS',
523
+ 'Bolt' => 'bolt',
524
+ 'TeaShark' => 'teashark',
525
+ 'Blazer' => 'Blazer',
526
+ // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
527
+ 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
528
+ // http://en.wikipedia.org/wiki/Midori_(web_browser)
529
+ //'Midori' => 'midori',
530
+ //'Tizen' => 'Tizen',
531
+ 'UCBrowser' => 'UC.*Browser|UCWEB',
532
+ 'baiduboxapp' => 'baiduboxapp',
533
+ 'baidubrowser' => 'baidubrowser',
534
+ // https://github.com/serbanghita/Mobile-Detect/issues/7
535
+ 'DiigoBrowser' => 'DiigoBrowser',
536
+ // http://www.puffinbrowser.com/index.php
537
+ 'Puffin' => 'Puffin',
538
+ // http://mercury-browser.com/index.html
539
+ 'Mercury' => '\bMercury\b',
540
+ // http://en.wikipedia.org/wiki/Obigo_Browser
541
+ 'ObigoBrowser' => 'Obigo',
542
+ // http://en.wikipedia.org/wiki/NetFront
543
+ 'NetFront' => 'NF-Browser',
544
+ // @reference: http://en.wikipedia.org/wiki/Minimo
545
+ // http://en.wikipedia.org/wiki/Vision_Mobile_Browser
546
+ 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger',
547
+ // @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser)
548
+ 'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon',
549
+ );
550
+
551
+ /**
552
+ * Utilities.
553
+ *
554
+ * @var array
555
+ */
556
+ protected static $utilities = array(
557
+ // Experimental. When a mobile device wants to switch to 'Desktop Mode'.
558
+ // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
559
+ // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
560
+ // https://developers.facebook.com/docs/sharing/best-practices
561
+ 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom',
562
+ 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2',
563
+ 'DesktopMode' => 'WPDesktop',
564
+ 'TV' => 'SonyDTV|HbbTV', // experimental
565
+ 'WebKit' => '(webkit)[ /]([\w.]+)',
566
+ // @todo: Include JXD consoles.
567
+ 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b',
568
+ 'Watch' => 'SM-V700',
569
+ );
570
+
571
+ /**
572
+ * All possible HTTP headers that represent the
573
+ * User-Agent string.
574
+ *
575
+ * @var array
576
+ */
577
+ protected static $uaHttpHeaders = array(
578
+ // The default User-Agent string.
579
+ 'HTTP_USER_AGENT',
580
+ // Header can occur on devices using Opera Mini.
581
+ 'HTTP_X_OPERAMINI_PHONE_UA',
582
+ // Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
583
+ 'HTTP_X_DEVICE_USER_AGENT',
584
+ 'HTTP_X_ORIGINAL_USER_AGENT',
585
+ 'HTTP_X_SKYFIRE_PHONE',
586
+ 'HTTP_X_BOLT_PHONE_UA',
587
+ 'HTTP_DEVICE_STOCK_UA',
588
+ 'HTTP_X_UCBROWSER_DEVICE_UA'
589
+ );
590
+
591
+ /**
592
+ * The individual segments that could exist in a User-Agent string. VER refers to the regular
593
+ * expression defined in the constant self::VER.
594
+ *
595
+ * @var array
596
+ */
597
+ protected static $properties = array(
598
+
599
+ // Build
600
+ 'Mobile' => 'Mobile/[VER]',
601
+ 'Build' => 'Build/[VER]',
602
+ 'Version' => 'Version/[VER]',
603
+ 'VendorID' => 'VendorID/[VER]',
604
+
605
+ // Devices
606
+ 'iPad' => 'iPad.*CPU[a-z ]+[VER]',
607
+ 'iPhone' => 'iPhone.*CPU[a-z ]+[VER]',
608
+ 'iPod' => 'iPod.*CPU[a-z ]+[VER]',
609
+ //'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'),
610
+ 'Kindle' => 'Kindle/[VER]',
611
+
612
+ // Browser
613
+ 'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'),
614
+ 'Coast' => array('Coast/[VER]'),
615
+ 'Dolfin' => 'Dolfin/[VER]',
616
+ // @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox
617
+ 'Firefox' => array('Firefox/[VER]', 'FxiOS/[VER]'),
618
+ 'Fennec' => 'Fennec/[VER]',
619
+ // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
620
+ // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
621
+ 'Edge' => 'Edge/[VER]',
622
+ 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'),
623
+ // http://en.wikipedia.org/wiki/NetFront
624
+ 'NetFront' => 'NetFront/[VER]',
625
+ 'NokiaBrowser' => 'NokiaBrowser/[VER]',
626
+ 'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ),
627
+ 'Opera Mini' => 'Opera Mini/[VER]',
628
+ 'Opera Mobi' => 'Version/[VER]',
629
+ 'UC Browser' => 'UC Browser[VER]',
630
+ 'MQQBrowser' => 'MQQBrowser/[VER]',
631
+ 'MicroMessenger' => 'MicroMessenger/[VER]',
632
+ 'baiduboxapp' => 'baiduboxapp/[VER]',
633
+ 'baidubrowser' => 'baidubrowser/[VER]',
634
+ 'SamsungBrowser' => 'SamsungBrowser/[VER]',
635
+ 'Iron' => 'Iron/[VER]',
636
+ // @note: Safari 7534.48.3 is actually Version 5.1.
637
+ // @note: On BlackBerry the Version is overwriten by the OS.
638
+ 'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
639
+ 'Skyfire' => 'Skyfire/[VER]',
640
+ 'Tizen' => 'Tizen/[VER]',
641
+ 'Webkit' => 'webkit[ /][VER]',
642
+ 'PaleMoon' => 'PaleMoon/[VER]',
643
+
644
+ // Engine
645
+ 'Gecko' => 'Gecko/[VER]',
646
+ 'Trident' => 'Trident/[VER]',
647
+ 'Presto' => 'Presto/[VER]',
648
+ 'Goanna' => 'Goanna/[VER]',
649
+
650
+ // OS
651
+ 'iOS' => ' \bi?OS\b [VER][ ;]{1}',
652
+ 'Android' => 'Android [VER]',
653
+ 'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
654
+ 'BREW' => 'BREW [VER]',
655
+ 'Java' => 'Java/[VER]',
656
+ // @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx
657
+ // @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases
658
+ 'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),
659
+ 'Windows Phone' => 'Windows Phone [VER]',
660
+ 'Windows CE' => 'Windows CE/[VER]',
661
+ // http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd
662
+ 'Windows NT' => 'Windows NT [VER]',
663
+ 'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'),
664
+ 'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'),
665
+ );
666
+
667
+ /**
668
+ * Construct an instance of this class.
669
+ *
670
+ * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
671
+ * If left empty, will use the global _SERVER['HTTP_*'] vars instead.
672
+ * @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
673
+ * from the $headers array instead.
674
+ */
675
+ public function __construct(
676
+ array $headers = null,
677
+ $userAgent = null
678
+ ) {
679
+ $this->setHttpHeaders($headers);
680
+ $this->setUserAgent($userAgent);
681
+ }
682
+
683
+ /**
684
+ * Get the current script version.
685
+ * This is useful for the demo.php file,
686
+ * so people can check on what version they are testing
687
+ * for mobile devices.
688
+ *
689
+ * @return string The version number in semantic version format.
690
+ */
691
+ public static function getScriptVersion()
692
+ {
693
+ return self::VERSION;
694
+ }
695
+
696
+ /**
697
+ * Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers.
698
+ *
699
+ * @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract
700
+ * the headers. The default null is left for backwards compatibility.
701
+ */
702
+ public function setHttpHeaders($httpHeaders = null)
703
+ {
704
+ // use global _SERVER if $httpHeaders aren't defined
705
+ if (!is_array($httpHeaders) || !count($httpHeaders)) {
706
+ $httpHeaders = $_SERVER;
707
+ }
708
+
709
+ // clear existing headers
710
+ $this->httpHeaders = array();
711
+
712
+ // Only save HTTP headers. In PHP land, that means only _SERVER vars that
713
+ // start with HTTP_.
714
+ foreach ($httpHeaders as $key => $value) {
715
+ if (substr($key, 0, 5) === 'HTTP_') {
716
+ $this->httpHeaders[$key] = $value;
717
+ }
718
+ }
719
+
720
+ // In case we're dealing with CloudFront, we need to know.
721
+ $this->setCfHeaders($httpHeaders);
722
+ }
723
+
724
+ /**
725
+ * Retrieves the HTTP headers.
726
+ *
727
+ * @return array
728
+ */
729
+ public function getHttpHeaders()
730
+ {
731
+ return $this->httpHeaders;
732
+ }
733
+
734
+ /**
735
+ * Retrieves a particular header. If it doesn't exist, no exception/error is caused.
736
+ * Simply null is returned.
737
+ *
738
+ * @param string $header The name of the header to retrieve. Can be HTTP compliant such as
739
+ * "User-Agent" or "X-Device-User-Agent" or can be php-esque with the
740
+ * all-caps, HTTP_ prefixed, underscore seperated awesomeness.
741
+ *
742
+ * @return string|null The value of the header.
743
+ */
744
+ public function getHttpHeader($header)
745
+ {
746
+ // are we using PHP-flavored headers?
747
+ if (strpos($header, '_') === false) {
748
+ $header = str_replace('-', '_', $header);
749
+ $header = strtoupper($header);
750
+ }
751
+
752
+ // test the alternate, too
753
+ $altHeader = 'HTTP_' . $header;
754
+
755
+ //Test both the regular and the HTTP_ prefix
756
+ if (isset($this->httpHeaders[$header])) {
757
+ return $this->httpHeaders[$header];
758
+ } elseif (isset($this->httpHeaders[$altHeader])) {
759
+ return $this->httpHeaders[$altHeader];
760
+ }
761
+
762
+ return null;
763
+ }
764
+
765
+ public function getMobileHeaders()
766
+ {
767
+ return self::$mobileHeaders;
768
+ }
769
+
770
+ /**
771
+ * Get all possible HTTP headers that
772
+ * can contain the User-Agent string.
773
+ *
774
+ * @return array List of HTTP headers.
775
+ */
776
+ public function getUaHttpHeaders()
777
+ {
778
+ return self::$uaHttpHeaders;
779
+ }
780
+
781
+
782
+ /**
783
+ * Set CloudFront headers
784
+ * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device
785
+ *
786
+ * @param array $cfHeaders List of HTTP headers
787
+ *
788
+ * @return boolean If there were CloudFront headers to be set
789
+ */
790
+ public function setCfHeaders($cfHeaders = null) {
791
+ // use global _SERVER if $cfHeaders aren't defined
792
+ if (!is_array($cfHeaders) || !count($cfHeaders)) {
793
+ $cfHeaders = $_SERVER;
794
+ }
795
+
796
+ // clear existing headers
797
+ $this->cloudfrontHeaders = array();
798
+
799
+ // Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that
800
+ // start with cloudfront-.
801
+ $response = false;
802
+ foreach ($cfHeaders as $key => $value) {
803
+ if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') {
804
+ $this->cloudfrontHeaders[strtoupper($key)] = $value;
805
+ $response = true;
806
+ }
807
+ }
808
+
809
+ return $response;
810
+ }
811
+
812
+ /**
813
+ * Retrieves the cloudfront headers.
814
+ *
815
+ * @return array
816
+ */
817
+ public function getCfHeaders()
818
+ {
819
+ return $this->cloudfrontHeaders;
820
+ }
821
+
822
+ /**
823
+ * Set the User-Agent to be used.
824
+ *
825
+ * @param string $userAgent The user agent string to set.
826
+ *
827
+ * @return string|null
828
+ */
829
+ public function setUserAgent($userAgent = null)
830
+ {
831
+ // Invalidate cache due to #375
832
+ $this->cache = array();
833
+
834
+ if (false === empty($userAgent)) {
835
+ return $this->userAgent = $userAgent;
836
+ } else {
837
+ $this->userAgent = null;
838
+ foreach ($this->getUaHttpHeaders() as $altHeader) {
839
+ if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban)
840
+ $this->userAgent .= $this->httpHeaders[$altHeader] . " ";
841
+ }
842
+ }
843
+
844
+ if (!empty($this->userAgent)) {
845
+ return $this->userAgent = trim($this->userAgent);
846
+ }
847
+ }
848
+
849
+ if (count($this->getCfHeaders()) > 0) {
850
+ return $this->userAgent = 'Amazon CloudFront';
851
+ }
852
+ return $this->userAgent = null;
853
+ }
854
+
855
+ /**
856
+ * Retrieve the User-Agent.
857
+ *
858
+ * @return string|null The user agent if it's set.
859
+ */
860
+ public function getUserAgent()
861
+ {
862
+ return $this->userAgent;
863
+ }
864
+
865
+ /**
866
+ * Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or
867
+ * self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set.
868
+ *
869
+ * @deprecated since version 2.6.9
870
+ *
871
+ * @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default
872
+ * parameter is null which will default to self::DETECTION_TYPE_MOBILE.
873
+ */
874
+ public function setDetectionType($type = null)
875
+ {
876
+ if ($type === null) {
877
+ $type = self::DETECTION_TYPE_MOBILE;
878
+ }
879
+
880
+ if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) {
881
+ return;
882
+ }
883
+
884
+ $this->detectionType = $type;
885
+ }
886
+
887
+ public function getMatchingRegex()
888
+ {
889
+ return $this->matchingRegex;
890
+ }
891
+
892
+ public function getMatchesArray()
893
+ {
894
+ return $this->matchesArray;
895
+ }
896
+
897
+ /**
898
+ * Retrieve the list of known phone devices.
899
+ *
900
+ * @return array List of phone devices.
901
+ */
902
+ public static function getPhoneDevices()
903
+ {
904
+ return self::$phoneDevices;
905
+ }
906
+
907
+ /**
908
+ * Retrieve the list of known tablet devices.
909
+ *
910
+ * @return array List of tablet devices.
911
+ */
912
+ public static function getTabletDevices()
913
+ {
914
+ return self::$tabletDevices;
915
+ }
916
+
917
+ /**
918
+ * Alias for getBrowsers() method.
919
+ *
920
+ * @return array List of user agents.
921
+ */
922
+ public static function getUserAgents()
923
+ {
924
+ return self::getBrowsers();
925
+ }
926
+
927
+ /**
928
+ * Retrieve the list of known browsers. Specifically, the user agents.
929
+ *
930
+ * @return array List of browsers / user agents.
931
+ */
932
+ public static function getBrowsers()
933
+ {
934
+ return self::$browsers;
935
+ }
936
+
937
+ /**
938
+ * Retrieve the list of known utilities.
939
+ *
940
+ * @return array List of utilities.
941
+ */
942
+ public static function getUtilities()
943
+ {
944
+ return self::$utilities;
945
+ }
946
+
947
+ /**
948
+ * Method gets the mobile detection rules. This method is used for the magic methods $detect->is*().
949
+ *
950
+ * @deprecated since version 2.6.9
951
+ *
952
+ * @return array All the rules (but not extended).
953
+ */
954
+ public static function getMobileDetectionRules()
955
+ {
956
+ static $rules;
957
+
958
+ if (!$rules) {
959
+ $rules = array_merge(
960
+ self::$phoneDevices,
961
+ self::$tabletDevices,
962
+ self::$operatingSystems,
963
+ self::$browsers
964
+ );
965
+ }
966
+
967
+ return $rules;
968
+
969
+ }
970
+
971
+ /**
972
+ * Method gets the mobile detection rules + utilities.
973
+ * The reason this is separate is because utilities rules
974
+ * don't necessary imply mobile. This method is used inside
975
+ * the new $detect->is('stuff') method.
976
+ *
977
+ * @deprecated since version 2.6.9
978
+ *
979
+ * @return array All the rules + extended.
980
+ */
981
+ public function getMobileDetectionRulesExtended()
982
+ {
983
+ static $rules;
984
+
985
+ if (!$rules) {
986
+ // Merge all rules together.
987
+ $rules = array_merge(
988
+ self::$phoneDevices,
989
+ self::$tabletDevices,
990
+ self::$operatingSystems,
991
+ self::$browsers,
992
+ self::$utilities
993
+ );
994
+ }
995
+
996
+ return $rules;
997
+ }
998
+
999
+ /**
1000
+ * Retrieve the current set of rules.
1001
+ *
1002
+ * @deprecated since version 2.6.9
1003
+ *
1004
+ * @return array
1005
+ */
1006
+ public function getRules()
1007
+ {
1008
+ if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) {
1009
+ return self::getMobileDetectionRulesExtended();
1010
+ } else {
1011
+ return self::getMobileDetectionRules();
1012
+ }
1013
+ }
1014
+
1015
+ /**
1016
+ * Retrieve the list of mobile operating systems.
1017
+ *
1018
+ * @return array The list of mobile operating systems.
1019
+ */
1020
+ public static function getOperatingSystems()
1021
+ {
1022
+ return self::$operatingSystems;
1023
+ }
1024
+
1025
+ /**
1026
+ * Check the HTTP headers for signs of mobile.
1027
+ * This is the fastest mobile check possible; it's used
1028
+ * inside isMobile() method.
1029
+ *
1030
+ * @return bool
1031
+ */
1032
+ public function checkHttpHeadersForMobile()
1033
+ {
1034
+
1035
+ foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) {
1036
+ if (isset($this->httpHeaders[$mobileHeader])) {
1037
+ if (is_array($matchType['matches'])) {
1038
+ foreach ($matchType['matches'] as $_match) {
1039
+ if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) {
1040
+ return true;
1041
+ }
1042
+ }
1043
+
1044
+ return false;
1045
+ } else {
1046
+ return true;
1047
+ }
1048
+ }
1049
+ }
1050
+
1051
+ return false;
1052
+
1053
+ }
1054
+
1055
+ /**
1056
+ * Magic overloading method.
1057
+ *
1058
+ * @method boolean is[...]()
1059
+ * @param string $name
1060
+ * @param array $arguments
1061
+ * @return mixed
1062
+ * @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is'
1063
+ */
1064
+ public function __call($name, $arguments)
1065
+ {
1066
+ // make sure the name starts with 'is', otherwise
1067
+ if (substr($name, 0, 2) !== 'is') {
1068
+ throw new BadMethodCallException("No such method exists: $name");
1069
+ }
1070
+
1071
+ $this->setDetectionType(self::DETECTION_TYPE_MOBILE);
1072
+
1073
+ $key = substr($name, 2);
1074
+
1075
+ return $this->matchUAAgainstKey($key);
1076
+ }
1077
+
1078
+ /**
1079
+ * Find a detection rule that matches the current User-agent.
1080
+ *
1081
+ * @param null $userAgent deprecated
1082
+ * @return boolean
1083
+ */
1084
+ protected function matchDetectionRulesAgainstUA($userAgent = null)
1085
+ {
1086
+ // Begin general search.
1087
+ foreach ($this->getRules() as $_regex) {
1088
+ if (empty($_regex)) {
1089
+ continue;
1090
+ }
1091
+
1092
+ if ($this->match($_regex, $userAgent)) {
1093
+ return true;
1094
+ }
1095
+ }
1096
+
1097
+ return false;
1098
+ }
1099
+
1100
+ /**
1101
+ * Search for a certain key in the rules array.
1102
+ * If the key is found then try to match the corresponding
1103
+ * regex against the User-Agent.
1104
+ *
1105
+ * @param string $key
1106
+ *
1107
+ * @return boolean
1108
+ */
1109
+ protected function matchUAAgainstKey($key)
1110
+ {
1111
+ // Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc.
1112
+ $key = strtolower($key);
1113
+ if (false === isset($this->cache[$key])) {
1114
+
1115
+ // change the keys to lower case
1116
+ $_rules = array_change_key_case($this->getRules());
1117
+
1118
+ if (false === empty($_rules[$key])) {
1119
+ $this->cache[$key] = $this->match($_rules[$key]);
1120
+ }
1121
+
1122
+ if (false === isset($this->cache[$key])) {
1123
+ $this->cache[$key] = false;
1124
+ }
1125
+ }
1126
+
1127
+ return $this->cache[$key];
1128
+ }
1129
+
1130
+ /**
1131
+ * Check if the device is mobile.
1132
+ * Returns true if any type of mobile device detected, including special ones
1133
+ * @param null $userAgent deprecated
1134
+ * @param null $httpHeaders deprecated
1135
+ * @return bool
1136
+ */
1137
+ public function isMobile($userAgent = null, $httpHeaders = null)
1138
+ {
1139
+
1140
+ if ($httpHeaders) {
1141
+ $this->setHttpHeaders($httpHeaders);
1142
+ }
1143
+
1144
+ if ($userAgent) {
1145
+ $this->setUserAgent($userAgent);
1146
+ }
1147
+
1148
+ // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
1149
+ if ($this->getUserAgent() === 'Amazon CloudFront') {
1150
+ $cfHeaders = $this->getCfHeaders();
1151
+ if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') {
1152
+ return true;
1153
+ }
1154
+ }
1155
+
1156
+ $this->setDetectionType(self::DETECTION_TYPE_MOBILE);
1157
+
1158
+ if ($this->checkHttpHeadersForMobile()) {
1159
+ return true;
1160
+ } else {
1161
+ return $this->matchDetectionRulesAgainstUA();
1162
+ }
1163
+
1164
+ }
1165
+
1166
+ /**
1167
+ * Check if the device is a tablet.
1168
+ * Return true if any type of tablet device is detected.
1169
+ *
1170
+ * @param string $userAgent deprecated
1171
+ * @param array $httpHeaders deprecated
1172
+ * @return bool
1173
+ */
1174
+ public function isTablet($userAgent = null, $httpHeaders = null)
1175
+ {
1176
+ // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
1177
+ if ($this->getUserAgent() === 'Amazon CloudFront') {
1178
+ $cfHeaders = $this->getCfHeaders();
1179
+ if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') {
1180
+ return true;
1181
+ }
1182
+ }
1183
+
1184
+ $this->setDetectionType(self::DETECTION_TYPE_MOBILE);
1185
+
1186
+ foreach (self::$tabletDevices as $_regex) {
1187
+ if ($this->match($_regex, $userAgent)) {
1188
+ return true;
1189
+ }
1190
+ }
1191
+
1192
+ return false;
1193
+ }
1194
+
1195
+ /**
1196
+ * This method checks for a certain property in the
1197
+ * userAgent.
1198
+ * @todo: The httpHeaders part is not yet used.
1199
+ *
1200
+ * @param string $key
1201
+ * @param string $userAgent deprecated
1202
+ * @param string $httpHeaders deprecated
1203
+ * @return bool|int|null
1204
+ */
1205
+ public function is($key, $userAgent = null, $httpHeaders = null)
1206
+ {
1207
+ // Set the UA and HTTP headers only if needed (eg. batch mode).
1208
+ if ($httpHeaders) {
1209
+ $this->setHttpHeaders($httpHeaders);
1210
+ }
1211
+
1212
+ if ($userAgent) {
1213
+ $this->setUserAgent($userAgent);
1214
+ }
1215
+
1216
+ $this->setDetectionType(self::DETECTION_TYPE_EXTENDED);
1217
+
1218
+ return $this->matchUAAgainstKey($key);
1219
+ }
1220
+
1221
+ /**
1222
+ * Some detection rules are relative (not standard),
1223
+ * because of the diversity of devices, vendors and
1224
+ * their conventions in representing the User-Agent or
1225
+ * the HTTP headers.
1226
+ *
1227
+ * This method will be used to check custom regexes against
1228
+ * the User-Agent string.
1229
+ *
1230
+ * @param $regex
1231
+ * @param string $userAgent
1232
+ * @return bool
1233
+ *
1234
+ * @todo: search in the HTTP headers too.
1235
+ */
1236
+ public function match($regex, $userAgent = null)
1237
+ {
1238
+ $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches);
1239
+ // If positive match is found, store the results for debug.
1240
+ if ($match) {
1241
+ $this->matchingRegex = $regex;
1242
+ $this->matchesArray = $matches;
1243
+ }
1244
+
1245
+ return $match;
1246
+ }
1247
+
1248
+ /**
1249
+ * Get the properties array.
1250
+ *
1251
+ * @return array
1252
+ */
1253
+ public static function getProperties()
1254
+ {
1255
+ return self::$properties;
1256
+ }
1257
+
1258
+ /**
1259
+ * Prepare the version number.
1260
+ *
1261
+ * @todo Remove the error supression from str_replace() call.
1262
+ *
1263
+ * @param string $ver The string version, like "2.6.21.2152";
1264
+ *
1265
+ * @return float
1266
+ */
1267
+ public function prepareVersionNo($ver)
1268
+ {
1269
+ $ver = str_replace(array('_', ' ', '/'), '.', $ver);
1270
+ $arrVer = explode('.', $ver, 2);
1271
+
1272
+ if (isset($arrVer[1])) {
1273
+ $arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions.
1274
+ }
1275
+
1276
+ return (float) implode('.', $arrVer);
1277
+ }
1278
+
1279
+ /**
1280
+ * Check the version of the given property in the User-Agent.
1281
+ * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
1282
+ *
1283
+ * @param string $propertyName The name of the property. See self::getProperties() array
1284
+ * keys for all possible properties.
1285
+ * @param string $type Either self::VERSION_TYPE_STRING to get a string value or
1286
+ * self::VERSION_TYPE_FLOAT indicating a float value. This parameter
1287
+ * is optional and defaults to self::VERSION_TYPE_STRING. Passing an
1288
+ * invalid parameter will default to the this type as well.
1289
+ *
1290
+ * @return string|float The version of the property we are trying to extract.
1291
+ */
1292
+ public function version($propertyName, $type = self::VERSION_TYPE_STRING)
1293
+ {
1294
+ if (empty($propertyName)) {
1295
+ return false;
1296
+ }
1297
+
1298
+ // set the $type to the default if we don't recognize the type
1299
+ if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) {
1300
+ $type = self::VERSION_TYPE_STRING;
1301
+ }
1302
+
1303
+ $properties = self::getProperties();
1304
+
1305
+ // Check if the property exists in the properties array.
1306
+ if (true === isset($properties[$propertyName])) {
1307
+
1308
+ // Prepare the pattern to be matched.
1309
+ // Make sure we always deal with an array (string is converted).
1310
+ $properties[$propertyName] = (array) $properties[$propertyName];
1311
+
1312
+ foreach ($properties[$propertyName] as $propertyMatchString) {
1313
+
1314
+ $propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString);
1315
+
1316
+ // Identify and extract the version.
1317
+ preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match);
1318
+
1319
+ if (false === empty($match[1])) {
1320
+ $version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]);
1321
+
1322
+ return $version;
1323
+ }
1324
+
1325
+ }
1326
+
1327
+ }
1328
+
1329
+ return false;
1330
+ }
1331
+
1332
+ /**
1333
+ * Retrieve the mobile grading, using self::MOBILE_GRADE_* constants.
1334
+ *
1335
+ * @return string One of the self::MOBILE_GRADE_* constants.
1336
+ */
1337
+ public function mobileGrade()
1338
+ {
1339
+ $isMobile = $this->isMobile();
1340
+
1341
+ if (
1342
+ // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0)
1343
+ $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 ||
1344
+ $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 ||
1345
+ $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 ||
1346
+
1347
+ // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
1348
+ // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
1349
+ // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
1350
+ // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
1351
+ ( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) ||
1352
+
1353
+ // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8)
1354
+ $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 ||
1355
+
1356
+ // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10)
1357
+ $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 ||
1358
+ // Blackberry Playbook (1.0-2.0) - Tested on PlayBook
1359
+ $this->match('Playbook.*Tablet') ||
1360
+
1361
+ // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0)
1362
+ ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) ||
1363
+ // Palm WebOS 3.0 - Tested on HP TouchPad
1364
+ $this->match('hp.*TouchPad') ||
1365
+
1366
+ // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices
1367
+ ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) ||
1368
+
1369
+ // Chrome for Android - Tested on Android 4.0, 4.1 device
1370
+ ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) ||
1371
+
1372
+ // Skyfire 4.1 - Tested on Android 2.3 device
1373
+ ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) ||
1374
+
1375
+ // Opera Mobile 11.5-12: Tested on Android 2.3
1376
+ ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) ||
1377
+
1378
+ // Meego 1.2 - Tested on Nokia 950 and N9
1379
+ $this->is('MeeGoOS') ||
1380
+
1381
+ // Tizen (pre-release) - Tested on early hardware
1382
+ $this->is('Tizen') ||
1383
+
1384
+ // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
1385
+ // @todo: more tests here!
1386
+ $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 ||
1387
+
1388
+ // UC Browser - Tested on Android 2.3 device
1389
+ ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) ||
1390
+
1391
+ // Kindle 3 and Fire - Tested on the built-in WebKit browser for each
1392
+ ( $this->match('Kindle Fire') ||
1393
+ $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) ||
1394
+
1395
+ // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
1396
+ $this->is('AndroidOS') && $this->is('NookTablet') ||
1397
+
1398
+ // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7
1399
+ $this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile ||
1400
+
1401
+ // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7
1402
+ $this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile ||
1403
+
1404
+ // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7
1405
+ $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile ||
1406
+
1407
+ // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
1408
+ $this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile ||
1409
+
1410
+ // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
1411
+ $this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile
1412
+ ){
1413
+ return self::MOBILE_GRADE_A;
1414
+ }
1415
+
1416
+ if (
1417
+ $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||
1418
+ $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 ||
1419
+ $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 ||
1420
+
1421
+ // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
1422
+ $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||
1423
+
1424
+ //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
1425
+ ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 &&
1426
+ ($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) ||
1427
+
1428
+ // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
1429
+ $this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
1430
+
1431
+ // @todo: report this (tested on Nokia N71)
1432
+ $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS')
1433
+ ){
1434
+ return self::MOBILE_GRADE_B;
1435
+ }
1436
+
1437
+ if (
1438
+ // Blackberry 4.x - Tested on the Curve 8330
1439
+ $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 ||
1440
+ // Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
1441
+ $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 ||
1442
+
1443
+ // Tested on original iPhone (3.1), iPhone 3 (3.2)
1444
+ $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 ||
1445
+ $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 ||
1446
+ $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 ||
1447
+
1448
+ // Internet Explorer 7 and older - Tested on Windows XP
1449
+ $this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile
1450
+ ){
1451
+ return self::MOBILE_GRADE_C;
1452
+ }
1453
+
1454
+ // All older smartphone platforms and featurephones - Any device that doesn't support media queries
1455
+ // will receive the basic, C grade experience.
1456
+ return self::MOBILE_GRADE_C;
1457
+ }
1458
+ }
includes/global/common.php CHANGED
@@ -44,7 +44,7 @@ class Envira_Gallery_Common {
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
48
 
49
  }
50
 
@@ -244,9 +244,14 @@ class Envira_Gallery_Common {
244
  public function get_lightbox_themes() {
245
 
246
  $themes = array(
 
 
 
 
 
247
  array(
248
  'value' => 'base',
249
- 'name' => __( 'Base', 'envira-gallery' ),
250
  'file' => $this->base->file
251
  )
252
  );
@@ -624,7 +629,7 @@ class Envira_Gallery_Common {
624
  'thumbnails_position' => 'bottom',
625
 
626
  // Mobile
627
- 'mobile_columns' => 1,
628
  'mobile' => 1,
629
  'mobile_width' => 320,
630
  'mobile_height' => 240,
@@ -634,6 +639,8 @@ class Envira_Gallery_Common {
634
  'mobile_arrows' => 1,
635
  'mobile_toolbar' => 1,
636
  'mobile_thumbnails' => 1,
 
 
637
 
638
  // Misc
639
  'title' => '',
@@ -643,13 +650,11 @@ class Envira_Gallery_Common {
643
  );
644
 
645
  // For Lite, change some defaults
646
- if ( class_exists( 'Envira_Gallery_Lite' ) ) {
647
- $defaults['toolbar'] = 0;
648
- $defaults['thumbnails'] = 0;
649
- $defaults['mobile_touchwipe'] = 0;
650
- $defaults['mobile_toolbar'] = 0;
651
- $defaults['mobile_thumbnails'] = 0;
652
- }
653
 
654
  // Allow devs to filter the defaults.
655
  $defaults = apply_filters( 'envira_gallery_defaults', $defaults, $post_id );
@@ -820,8 +825,6 @@ class Envira_Gallery_Common {
820
  // We only want to resize Media Library images, so we can be sure they get deleted correctly when appropriate.
821
  $get_attachment = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid='%s'", $url ) );
822
 
823
- // print_r ($get_attachment); exit;
824
-
825
  // Load the WordPress image editor.
826
  $editor = wp_get_image_editor( $file_path );
827
 
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
+ $this->base = Envira_Gallery_Lite::get_instance();
48
 
49
  }
50
 
244
  public function get_lightbox_themes() {
245
 
246
  $themes = array(
247
+ // array(
248
+ // 'value' => 'base_dark',
249
+ // 'name' => __( 'Base (Dark)', 'envira-gallery' ),
250
+ // 'file' => $this->base->file
251
+ // ),
252
  array(
253
  'value' => 'base',
254
+ 'name' => __( 'Legacy', 'envira-gallery' ),
255
  'file' => $this->base->file
256
  )
257
  );
629
  'thumbnails_position' => 'bottom',
630
 
631
  // Mobile
632
+ // 'mobile_columns' => 1,
633
  'mobile' => 1,
634
  'mobile_width' => 320,
635
  'mobile_height' => 240,
639
  'mobile_arrows' => 1,
640
  'mobile_toolbar' => 1,
641
  'mobile_thumbnails' => 1,
642
+ 'mobile_thumbnails_width' => 75,
643
+ 'mobile_thumbnails_height' => 50,
644
 
645
  // Misc
646
  'title' => '',
650
  );
651
 
652
  // For Lite, change some defaults
653
+ $defaults['toolbar'] = 0;
654
+ $defaults['thumbnails'] = 0;
655
+ $defaults['mobile_touchwipe'] = 0;
656
+ $defaults['mobile_toolbar'] = 0;
657
+ $defaults['mobile_thumbnails'] = 0;
 
 
658
 
659
  // Allow devs to filter the defaults.
660
  $defaults = apply_filters( 'envira_gallery_defaults', $defaults, $post_id );
825
  // We only want to resize Media Library images, so we can be sure they get deleted correctly when appropriate.
826
  $get_attachment = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid='%s'", $url ) );
827
 
 
 
828
  // Load the WordPress image editor.
829
  $editor = wp_get_image_editor( $file_path );
830
 
includes/global/posttype.php CHANGED
@@ -44,7 +44,7 @@ class Envira_Gallery_Posttype {
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
48
 
49
  // Build the labels for the post type.
50
  $labels = array(
@@ -78,32 +78,6 @@ class Envira_Gallery_Posttype {
78
  'supports' => array( 'title' ),
79
  );
80
 
81
- // Define custom capaibilities if we're running Envira Gallery.
82
- if ( class_exists( 'Envira_Gallery' ) ) {
83
- $args['capabilities'] = array(
84
- // Meta caps
85
- 'edit_post' => 'edit_envira_gallery',
86
- 'read_post' => 'read_envira_gallery',
87
- 'delete_post' => 'delete_envira_gallery',
88
-
89
- // Primitive caps outside map_meta_cap()
90
- 'edit_posts' => 'edit_envira_galleries',
91
- 'edit_others_posts' => 'edit_other_envira_galleries',
92
- 'publish_posts' => 'publish_envira_galleries',
93
- 'read_private_posts' => 'read_private_envira_galleries',
94
-
95
- // Primitive caps used within map_meta_cap()
96
- 'read' => 'read',
97
- 'delete_posts' => 'delete_envira_galleries',
98
- 'delete_private_posts' => 'delete_private_envira_galleries',
99
- 'delete_published_posts'=> 'delete_published_envira_galleries',
100
- 'delete_others_posts' => 'delete_others_envira_galleries',
101
- 'edit_private_posts' => 'edit_private_envira_galleries',
102
- 'edit_published_posts' => 'edit_published_envira_galleries',
103
- 'edit_posts' => 'create_envira_galleries',
104
- );
105
- }
106
-
107
  // Filter arguments.
108
  $args = apply_filters( 'envira_gallery_post_type_args', $args );
109
 
44
  public function __construct() {
45
 
46
  // Load the base class object.
47
+ $this->base = Envira_Gallery_Lite::get_instance();
48
 
49
  // Build the labels for the post type.
50
  $labels = array(
78
  'supports' => array( 'title' ),
79
  );
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  // Filter arguments.
82
  $args = apply_filters( 'envira_gallery_post_type_args', $args );
83
 
includes/global/shortcode.php CHANGED
@@ -80,7 +80,7 @@ class Envira_Gallery_Shortcode {
80
  public function __construct() {
81
 
82
  // Load the base class object.
83
- $this->base = ( class_exists( 'Envira_Gallery' ) ? Envira_Gallery::get_instance() : Envira_Gallery_Lite::get_instance() );
84
 
85
  // Register main gallery style.
86
  wp_register_style( $this->base->plugin_slug . '-style', plugins_url( 'assets/css/envira.css', $this->base->file ), array(), $this->base->version );
@@ -346,15 +346,21 @@ class Envira_Gallery_Shortcode {
346
 
347
  // Caption
348
  // Lite doesn't support captions, so we fallback to the title.
349
- if ( class_exists( 'Envira_Gallery_Lite' ) ) {
350
- $caption = $item['title'];
 
 
 
 
 
 
 
 
351
  } else {
352
- if ( isset( $item['caption'] ) ) {
353
- $caption = do_shortcode( str_replace( "\n", '<br />', esc_attr( $item['caption'] ) ) );
354
- }
355
  }
356
 
357
- if ( ! empty( $item['link'] ) ) {
358
  $output .= '<a href="' . esc_url( $item['link'] ) . '" class="envira-gallery-' . sanitize_html_class( $data['id'] ) . ' envira-gallery-link" ' . $html5_attribute . '="enviragallery' . sanitize_html_class( $data['id'] ) . '" title="' . strip_tags( html_entity_decode( $item['title'] ) ) . '" data-envira-caption="' . $caption . '" data-envira-retina="' . ( isset( $item['lightbox_retina_image'] ) ? $item['lightbox_retina_image'] : '' ) . '" data-thumbnail="' . esc_url( $item['thumb'] ) . '"' . ( ( isset($item['link_new_window']) && $item['link_new_window'] == 1 ) ? ' target="_blank"' : '' ) . ' ' . apply_filters( 'envira_gallery_output_link_attr', '', $id, $item, $data, $i ) . ' itemprop="contentUrl">';
359
  }
360
 
@@ -370,7 +376,7 @@ class Envira_Gallery_Shortcode {
370
  $output .= $output_item;
371
  $output = apply_filters( 'envira_gallery_output_after_image', $output, $id, $item, $data, $i );
372
 
373
- if ( ! empty( $item['link'] ) ) {
374
  $output .= '</a>';
375
  }
376
 
@@ -830,7 +836,7 @@ class Envira_Gallery_Shortcode {
830
  ?>
831
  envira_gallery_options = {
832
  // All of these options are for Envira Lite with Fancybox 1 to try and match Fancybox 2.
833
- padding: 15,
834
  cyclic: true,
835
  titlePosition: '<?php echo $title_fb1; ?>',
836
  // End options for Envira Lite with Fancybox 1.
@@ -840,18 +846,8 @@ class Envira_Gallery_Shortcode {
840
  <?php if ( ! $this->get_config( 'keyboard', $data ) ) : ?>
841
  keys: 0,
842
  <?php endif; ?>
843
- <?php /* increase margin when there is a social bar vertical, default is 15 in fancybox.js */
844
-
845
- //print_r ($data); exit;
846
-
847
- if ( isset($data['config']['social_lightbox']) && $data['config']['social_lightbox'] == 1 &&
848
- ( null !== $data['config']['social_lightbox_orientation'] && $data['config']['social_lightbox_orientation'] == "vertical" ) ):
849
-
850
- ?>
851
- margin: 50,
852
- <?php endif; ?>
853
-
854
- arrows: <?php echo $this->get_config( 'arrows', $data ); ?>,
855
  aspectRatio: <?php echo $this->get_config( 'aspect', $data ); ?>,
856
  loop: <?php echo $this->get_config( 'loop', $data ); ?>,
857
  mouseWheel: <?php echo $this->get_config( 'mousewheel', $data ); ?>,
@@ -937,10 +933,15 @@ class Envira_Gallery_Shortcode {
937
  return $(current.element).data('thumbnail');
938
  }
939
  },
940
- position: '<?php echo $this->get_config( 'thumbnails_position', $data ); ?>'
 
 
 
 
 
941
  },
942
  <?php endif; ?>
943
- <?php if ( $this->get_config( 'toolbar', $data ) ) : ?>
944
  buttons: {
945
  tpl: '<?php echo $this->get_toolbar_template( $data ); ?>',
946
  position: '<?php echo $this->get_config( 'toolbar_position', $data ); ?>',
@@ -1176,9 +1177,18 @@ class Envira_Gallery_Shortcode {
1176
  });
1177
 
1178
  <?php
1179
- // Minify before outputting to improve page load time.
1180
- echo $this->minify( ob_get_clean() );
1181
- //echo ob_get_clean();
 
 
 
 
 
 
 
 
 
1182
  ?>
1183
  </script>
1184
  <?php
@@ -1200,7 +1210,12 @@ class Envira_Gallery_Shortcode {
1200
  continue;
1201
  }
1202
 
1203
- wp_enqueue_style( $this->base->plugin_slug . $theme . '-theme', plugins_url( 'themes/' . $theme . '/style.css', $data['file'] ), array( $this->base->plugin_slug . '-style' ) );
 
 
 
 
 
1204
  break;
1205
  }
1206
 
@@ -1221,7 +1236,12 @@ class Envira_Gallery_Shortcode {
1221
  continue;
1222
  }
1223
 
1224
- wp_enqueue_style( $this->base->plugin_slug . $theme . '-theme', plugins_url( 'themes/' . $theme . '/style.css', $data['file'] ), array( $this->base->plugin_slug . '-style' ) );
 
 
 
 
 
1225
  break;
1226
  }
1227
 
@@ -1375,7 +1395,7 @@ class Envira_Gallery_Shortcode {
1375
  // Detect if user is on a mobile device - if so, override $mobile flag which may be manually set
1376
  // by out of date addons or plugins
1377
  if ( $this->get_config( 'mobile', $data ) ) {
1378
- $mobile = wp_is_mobile();
1379
  }
1380
 
1381
  // Define variable
@@ -1614,38 +1634,6 @@ class Envira_Gallery_Shortcode {
1614
 
1615
  $instance = Envira_Gallery_Common::get_instance();
1616
 
1617
- // If we are on a mobile device, some config keys have mobile equivalents, which we need to check instead
1618
- if ( wp_is_mobile() ) {
1619
- if ( class_exists( 'Envira_Gallery' ) ) {
1620
- $mobile_keys = array(
1621
- 'columns' => 'mobile_columns',
1622
- 'lightbox_enabled' => 'mobile_lightbox',
1623
- 'arrows' => 'mobile_arrows',
1624
- 'toolbar' => 'mobile_toolbar',
1625
- 'thumbnails' => 'mobile_thumbnails',
1626
- );
1627
- $mobile_keys = apply_filters( 'envira_gallery_get_config_mobile_keys', $mobile_keys );
1628
-
1629
- // When on mobile, use used to blindly look at the mobile_social option to determine social sharing button output
1630
- // However, what we need to do is look to see if the settings are active on the addon first
1631
-
1632
- if ( array_key_exists( 'social', $mobile_keys ) || array_key_exists( 'social_lightbox', $mobile_keys ) ) {
1633
- if ( !$data['config']['social'] ) {
1634
- unset( $mobile_keys['social'] );
1635
- }
1636
- if ( !$data['config']['social_lightbox'] ) {
1637
- unset( $mobile_keys['social_lightbox'] );
1638
- }
1639
- }
1640
-
1641
- if ( array_key_exists( $key, $mobile_keys ) ) {
1642
- // Use the mobile array key to get the config value
1643
- $key = $mobile_keys[ $key ];
1644
- }
1645
- }
1646
-
1647
- }
1648
-
1649
  return isset( $data['config'][$key] ) ? $data['config'][$key] : $instance->get_config_default( $key );
1650
 
1651
  }
80
  public function __construct() {
81
 
82
  // Load the base class object.
83
+ $this->base = Envira_Gallery_Lite::get_instance();
84
 
85
  // Register main gallery style.
86
  wp_register_style( $this->base->plugin_slug . '-style', plugins_url( 'assets/css/envira.css', $this->base->file ), array(), $this->base->version );
346
 
347
  // Caption
348
  // Lite doesn't support captions, so we fallback to the title.
349
+ $caption = $item['title'];
350
+
351
+ // Determine if we create a link.
352
+ // If this is a mobile device and the user has disabled lightbox, there should not be a link
353
+ // "Turn off the lightbox then the image shouldn't be clicked"
354
+
355
+ if ( envira_mobile_detect()->isMobile() && !$this->get_config( 'lightbox_enabled', $data ) ) {
356
+ $create_link = false;
357
+ } else if ( ! empty( $item['link'] ) ) {
358
+ $create_link = true;
359
  } else {
360
+ $create_link = false;
 
 
361
  }
362
 
363
+ if ( $create_link ) {
364
  $output .= '<a href="' . esc_url( $item['link'] ) . '" class="envira-gallery-' . sanitize_html_class( $data['id'] ) . ' envira-gallery-link" ' . $html5_attribute . '="enviragallery' . sanitize_html_class( $data['id'] ) . '" title="' . strip_tags( html_entity_decode( $item['title'] ) ) . '" data-envira-caption="' . $caption . '" data-envira-retina="' . ( isset( $item['lightbox_retina_image'] ) ? $item['lightbox_retina_image'] : '' ) . '" data-thumbnail="' . esc_url( $item['thumb'] ) . '"' . ( ( isset($item['link_new_window']) && $item['link_new_window'] == 1 ) ? ' target="_blank"' : '' ) . ' ' . apply_filters( 'envira_gallery_output_link_attr', '', $id, $item, $data, $i ) . ' itemprop="contentUrl">';
365
  }
366
 
376
  $output .= $output_item;
377
  $output = apply_filters( 'envira_gallery_output_after_image', $output, $id, $item, $data, $i );
378
 
379
+ if ( $create_link ) {
380
  $output .= '</a>';
381
  }
382
 
836
  ?>
837
  envira_gallery_options = {
838
  // All of these options are for Envira Lite with Fancybox 1 to try and match Fancybox 2.
839
+ padding: <?php echo in_array( $this->get_config( 'lightbox_theme', $data ), array( 'base_dark' ) ) ? '4' : '15'; ?>,
840
  cyclic: true,
841
  titlePosition: '<?php echo $title_fb1; ?>',
842
  // End options for Envira Lite with Fancybox 1.
846
  <?php if ( ! $this->get_config( 'keyboard', $data ) ) : ?>
847
  keys: 0,
848
  <?php endif; ?>
849
+ margin: <?php echo apply_filters( 'envirabox_margin', 60, $data ); ?>,
850
+ arrows: <?php echo in_array( $this->get_config( 'lightbox_theme', $data ), array( 'base_dark' ) ) ? 'true' : $this->get_config( 'arrows', $data ); ?>,
 
 
 
 
 
 
 
 
 
 
851
  aspectRatio: <?php echo $this->get_config( 'aspect', $data ); ?>,
852
  loop: <?php echo $this->get_config( 'loop', $data ); ?>,
853
  mouseWheel: <?php echo $this->get_config( 'mousewheel', $data ); ?>,
933
  return $(current.element).data('thumbnail');
934
  }
935
  },
936
+ <?php if ( in_array( $this->get_config( 'lightbox_theme', $data ), array( 'base_dark' ) ) ) : ?>
937
+ dynamicMargin: true,
938
+ <?php endif; ?>
939
+ position: '<?php echo in_array( $this->get_config( 'lightbox_theme', $data ), array( 'base_dark' ) )
940
+ ? 'bottom'
941
+ : $this->get_config( 'thumbnails_position', $data ); ?>'
942
  },
943
  <?php endif; ?>
944
+ <?php if ( $this->get_config( 'toolbar', $data ) && ! in_array( $this->get_config( 'lightbox_theme', $data ), array( 'base_dark' ) ) ) : ?>
945
  buttons: {
946
  tpl: '<?php echo $this->get_toolbar_template( $data ); ?>',
947
  position: '<?php echo $this->get_config( 'toolbar_position', $data ); ?>',
1177
  });
1178
 
1179
  <?php
1180
+
1181
+ if ( defined('SCRIPT_DEBUG') && ! SCRIPT_DEBUG ){
1182
+
1183
+ // Minify before outputting to improve page load time.
1184
+ echo $this->minify( ob_get_clean() );
1185
+
1186
+ }else{
1187
+
1188
+ echo ob_get_clean();
1189
+
1190
+ }
1191
+
1192
  ?>
1193
  </script>
1194
  <?php
1210
  continue;
1211
  }
1212
 
1213
+ if ( file_exists( plugin_dir_path( $data['file'] ) . 'themes/' . $theme . '/style.css' ) ) {
1214
+ wp_enqueue_style( $this->base->plugin_slug . $theme . '-theme', plugins_url( 'themes/' . $theme . '/style.css', $data['file'] ), array( $this->base->plugin_slug . '-style' ) );
1215
+ }
1216
+ else {
1217
+ wp_enqueue_style( $this->base->plugin_slug . $theme . '-theme', plugins_url( 'themes/' . $theme . '/css/style.css', $data['file'] ), array( $this->base->plugin_slug . '-style' ) );
1218
+ }
1219
  break;
1220
  }
1221
 
1236
  continue;
1237
  }
1238
 
1239
+ if ( file_exists( plugin_dir_path( $data['file'] ) . 'themes/' . $theme . '/style.css' ) ) {
1240
+ wp_enqueue_style( $this->base->plugin_slug . $theme . '-theme', plugins_url( 'themes/' . $theme . '/style.css', $data['file'] ), array( $this->base->plugin_slug . '-style' ) );
1241
+ }
1242
+ else {
1243
+ wp_enqueue_style( $this->base->plugin_slug . $theme . '-theme', plugins_url( 'themes/' . $theme . '/css/style.css', $data['file'] ), array( $this->base->plugin_slug . '-style' ) );
1244
+ }
1245
  break;
1246
  }
1247
 
1395
  // Detect if user is on a mobile device - if so, override $mobile flag which may be manually set
1396
  // by out of date addons or plugins
1397
  if ( $this->get_config( 'mobile', $data ) ) {
1398
+ $mobile = envira_mobile_detect()->isMobile();
1399
  }
1400
 
1401
  // Define variable
1634
 
1635
  $instance = Envira_Gallery_Common::get_instance();
1636
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1637
  return isset( $data['config'][$key] ) ? $data['config'][$key] : $instance->get_config_default( $key );
1638
 
1639
  }
languages/envira-gallery-es_ES.mo CHANGED
File without changes
languages/envira-gallery-es_ES.po CHANGED
File without changes
readme.txt CHANGED
@@ -1,33 +1,33 @@
1
- === Responsive WordPress Gallery - Envira Gallery Lite ===
2
  Contributors: griffinjt, smub
3
- Tags: wordpress gallery, gallery, wordpress gallery plugin, gallery plugin, responsive, responsive gallery, image gallery, image gallery plugin, responsive gallery plugin, responsive image gallery, responsive image gallery plugin, custom post types, slideshow, responsive slideshow, slideshow plugin, responsive slideshow plugin, rotator, image rotator, responsive rotator, jquery gallery, javascript gallery, jquery rotator, javascript rotator, picture gallery, photo gallery, photo rotator, shortcode, template tag, custom post type, media uploader, ajax, wordpress galleries, responsive galleries, fullscreen, deeplinking, best wordpress gallery, best wordpress gallery plugin, best gallery plugin, best gallery, best responsive gallery, best responsive wordpress gallery, best wp gallery, portfolio, design portfolio, lightroom, adobe lightroom, masonry gallery, polaroid gallery
4
  Requires at least: 4.0
5
- Tested up to: 4.6.1
6
  Stable tag: trunk
7
  License: GNU General Public License v2.0 or later
8
 
9
- The best responsive WordPress gallery plugin. It's easy and powerful. Create beautiful galleries for your site in minutes, not hours!
10
 
11
  == Description ==
12
 
13
  = WordPress Gallery Plugin =
14
 
15
- We believe that you shouldn't have to hire a developer to create a WordPress gallery. That's why we built <a href="http://enviragallery.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend" title="Envira Gallery">Envira Gallery</a>, a WordPress gallery plugin that's EASY and POWERFUL.
16
 
17
- Envira allows you to create beautiful responsive photo and video galleries for your site in minutes, not hours!
18
 
19
- At Envira, user experience is our #1 priority, so your galleries will always look great on all devices (mobile, tablet, laptop, and desktop).
20
 
21
- Envira Gallery is highly optimized for web and server performance because we understand the importance of speed when it comes to SEO and conversion. We can honestly say that Envira Gallery is the fastest WordPress gallery plugin in the market.
22
 
23
  > <strong>Envira Gallery Pro</strong><br />
24
  > This plugin is the lite version of the popular Envira Gallery plugin that comes with all the gallery features you will ever need including albums, tags, social media integration, gallery templates, deeplinking, pagination, ecommerce, image proofing, and tons more. <a href="http://enviragallery.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend" title="Envira Gallery">Click here to purchase the best premium WordPress gallery plugin now!</a>
25
 
26
- Envira has been downloaded over 300,000 times. Here's why smart photographers, designers, and developers love Envira Gallery, and you will too!
27
 
28
  https://www.youtube.com/watch?v=4jHG3LOmV-c&w=532&rel=0
29
 
30
- = Drag & Drop Gallery Builder =
31
 
32
  We were tired with the bloated and buggy gallery plugins. That's why we built Envira Gallery to adapt to your workflow and allow you to create responsive WordPress galleries in minutes. By using our easy to use <a href="http://enviragallery.com/features/drag-drop-builder/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">drag and drop builder</a>, you can upload your photos, rearrange them, and basically create a gallery in 5 minutes or less.
33
 
@@ -67,18 +67,18 @@ See why one of the leading WordPress developers love Envira:
67
  = Full Envira Gallery Feature List =
68
 
69
  * Drag & Drop Gallery Builder
70
- * 100% Responsive - Mobile Friendly
71
  * Beautiful Gallery Templates for Customization
72
  * <a href="http://enviragallery.com/addons/albums-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Albums</a> - Easily organize your galleries, choose cover photos, and more.
73
  * <a href="http://enviragallery.com/addons/social-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Social Sharing</a> - Share your photos on Facebook, Twitter, Pinterest, and Google+
74
- * <a href="http://enviragallery.com/addons/videos-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Video Galleries</a> - Not just for photos! You can add YouTube, Vimeo, Wistia, and custom Videos in your gallery.
75
  * <a href="http://enviragallery.com/addons/watermarking-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Watermarking</a> - Protect your images from theft with watermarking.
76
  * <a href="http://enviragallery.com/addons/slideshow-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Slideshow</a> - Add beautiful slideshow with autoplay, manual controls, and more.
77
  * <a href="http://enviragallery.com/addons/deeplinking-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Deeplinking</a> - Make your gallery SEO friendly and easily link to individual images with deeplinking.
78
  * <a href="http://enviragallery.com/addons/pagination-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Pagination</a> - Split your large galleries into multiple pages to improve page speed, user experience, and pageviews.
79
  * <a href="http://enviragallery.com/addons/proofing-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Image Proofing</a> - We made client image proofing easy for your photography business.
80
  * <a href="http://enviragallery.com/addons/woocommerce-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">WooCommerce Integration</a> - Instantly display and sell your photos with the most popular eCommerce software on the web.
81
- * <a href="http://enviragallery.com/addons/tags-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Image Tags</a> - Finally you can organize your WordPress images with tags for easy search and display.
82
  * <a href="http://enviragallery.com/addons/password-protection-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Password Protection</a> - Prevent unauthorized access to your WordPress galleries.
83
  * <a href="http://enviragallery.com/addons/standalone-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Standalone Galleries</a> - Create independent galleries that are not tied to your posts or pages.
84
  * <a href="http://enviragallery.com/addons/exif-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">EXIF Meta Data</a> - Display your EXIF data including camera model, aperture, shutter speed, and more.
@@ -185,6 +185,11 @@ Also, I'm an <a href="https://thomasgriffin.io" rel="me" title="WordPress Develo
185
 
186
  == Changelog ==
187
 
 
 
 
 
 
188
  = 1.5.4 =
189
  * Fix: Error with lightbox script causing it not to load in some instances.
190
 
@@ -242,7 +247,7 @@ Also, I'm an <a href="https://thomasgriffin.io" rel="me" title="WordPress Develo
242
  * Fix: Image uploader on Gallery Add/Edit screen not displaying on some tablet and mobile devices
243
  * Fix: Checkmark icon wrongly displaying on modal close when editing images.
244
  * Fix: Display text in warning when Envira Lite and Envira Gallery are both activated.
245
- * Fix: Ensure that third party notification plugins dont remove the Envira Gallery logo and header from Enviras screens
246
  * Fix: Various resets for images and captions to prevent themes overriding default behaviour
247
  * Fix: Minified admin CSS for faster load times
248
  * Fix: When editing an image, store any checkbox values if checked, instead of assuming 1 or 0 for better Addon compatibility.
@@ -418,7 +423,7 @@ Also, I'm an <a href="https://thomasgriffin.io" rel="me" title="WordPress Develo
418
  * Fixed bug with Quicktags duplicating for image uploaded with the drag-and-drop uploader.
419
 
420
  = 1.0.7 =
421
- * Don’t crop images where the original and destination dimensions match.
422
  * Ensure to restrain thumbnail views.
423
 
424
  = 1.0.6.1 =
1
+ === Gallery by Envira - Responsive Photo Gallery for WordPress ===
2
  Contributors: griffinjt, smub
3
+ Tags: album, content gallery, fancy gallery, fullscreen gallery, gallery, gallery lightbox, gallery plugin, gallery slider, gallery slideshow, gallery widget, grid gallery, image gallery, masonry gallery, media gallery, mosaic gallery, photo album, photo gallery, polaroid gallery, portfolio gallery, post gallery, responsive gallery, thumbnail gallery, video gallery, wordpress gallery, wordpress gallery plugin, youtube gallery
4
  Requires at least: 4.0
5
+ Tested up to: 4.7
6
  Stable tag: trunk
7
  License: GNU General Public License v2.0 or later
8
 
9
+ The best WordPress gallery plugin. Drag & Drop photo gallery builder that helps you create beautiful image gallery with just a few clicks.
10
 
11
  == Description ==
12
 
13
  = WordPress Gallery Plugin =
14
 
15
+ Here at **Envira Gallery**, we believe that you shouldn't have to hire a developer to create a WordPress gallery. That's why we built <a href="http://enviragallery.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend" title="Envira Gallery">Envira Gallery</a>, a drag & drop **photo gallery plugin** that's both EASY and POWERFUL.
16
 
17
+ **Envira Gallery** allows you to create beautiful responsive photo gallery and video gallery for your WordPress site in minutes, not hours!
18
 
19
+ At Envira Gallery, user experience is our #1 priority. That's why we put in extra effort to ensure that Envira is the best responsive **photo gallery** for WordPress. This means that your galleries will always look great on all devices (mobile, tablet, laptop, and desktop).
20
 
21
+ Envira Gallery is highly optimized for web and server performance because we understand the importance of speed when it comes to SEO and conversion. We can honestly say that Envira Gallery is the **fastest WordPress gallery plugin** in the market.
22
 
23
  > <strong>Envira Gallery Pro</strong><br />
24
  > This plugin is the lite version of the popular Envira Gallery plugin that comes with all the gallery features you will ever need including albums, tags, social media integration, gallery templates, deeplinking, pagination, ecommerce, image proofing, and tons more. <a href="http://enviragallery.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend" title="Envira Gallery">Click here to purchase the best premium WordPress gallery plugin now!</a>
25
 
26
+ **Gallery by Envira** has been downloaded over 500,000 times. Here's why smart photographers, designers, and developers love Envira Gallery, and you will too!
27
 
28
  https://www.youtube.com/watch?v=4jHG3LOmV-c&w=532&rel=0
29
 
30
+ = Drag & Drop Photo Gallery Builder =
31
 
32
  We were tired with the bloated and buggy gallery plugins. That's why we built Envira Gallery to adapt to your workflow and allow you to create responsive WordPress galleries in minutes. By using our easy to use <a href="http://enviragallery.com/features/drag-drop-builder/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">drag and drop builder</a>, you can upload your photos, rearrange them, and basically create a gallery in 5 minutes or less.
33
 
67
  = Full Envira Gallery Feature List =
68
 
69
  * Drag & Drop Gallery Builder
70
+ * 100% Responsive Gallery - Mobile Friendly
71
  * Beautiful Gallery Templates for Customization
72
  * <a href="http://enviragallery.com/addons/albums-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Albums</a> - Easily organize your galleries, choose cover photos, and more.
73
  * <a href="http://enviragallery.com/addons/social-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Social Sharing</a> - Share your photos on Facebook, Twitter, Pinterest, and Google+
74
+ * <a href="http://enviragallery.com/addons/videos-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Video Galleries</a> - Not just for photos! You can add YouTube, Vimeo, Wistia, and other videos in your **video gallery**.
75
  * <a href="http://enviragallery.com/addons/watermarking-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Watermarking</a> - Protect your images from theft with watermarking.
76
  * <a href="http://enviragallery.com/addons/slideshow-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Slideshow</a> - Add beautiful slideshow with autoplay, manual controls, and more.
77
  * <a href="http://enviragallery.com/addons/deeplinking-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Deeplinking</a> - Make your gallery SEO friendly and easily link to individual images with deeplinking.
78
  * <a href="http://enviragallery.com/addons/pagination-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Pagination</a> - Split your large galleries into multiple pages to improve page speed, user experience, and pageviews.
79
  * <a href="http://enviragallery.com/addons/proofing-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Image Proofing</a> - We made client image proofing easy for your photography business.
80
  * <a href="http://enviragallery.com/addons/woocommerce-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">WooCommerce Integration</a> - Instantly display and sell your photos with the most popular eCommerce software on the web.
81
+ * <a href="http://enviragallery.com/addons/tags-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Image Tags</a> - Organize your WordPress photos with tags for easy search and display. You can use this to create a **filterable gallery**.
82
  * <a href="http://enviragallery.com/addons/password-protection-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Password Protection</a> - Prevent unauthorized access to your WordPress galleries.
83
  * <a href="http://enviragallery.com/addons/standalone-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Standalone Galleries</a> - Create independent galleries that are not tied to your posts or pages.
84
  * <a href="http://enviragallery.com/addons/exif-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">EXIF Meta Data</a> - Display your EXIF data including camera model, aperture, shutter speed, and more.
185
 
186
  == Changelog ==
187
 
188
+ = 1.5.5 =
189
+ * Added: Select Image sizes for Automatic Layout.
190
+ * Fix: Some servers limit how many images can be inserted at a time.
191
+ * Fix: Various minor bug fixes.
192
+
193
  = 1.5.4 =
194
  * Fix: Error with lightbox script causing it not to load in some instances.
195
 
247
  * Fix: Image uploader on Gallery Add/Edit screen not displaying on some tablet and mobile devices
248
  * Fix: Checkmark icon wrongly displaying on modal close when editing images.
249
  * Fix: Display text in warning when Envira Lite and Envira Gallery are both activated.
250
+ * Fix: Ensure that third party notification plugins don’t remove the Envira Gallery logo and header from Envira’s screens
251
  * Fix: Various resets for images and captions to prevent themes overriding default behaviour
252
  * Fix: Minified admin CSS for faster load times
253
  * Fix: When editing an image, store any checkbox values if checked, instead of assuming 1 or 0 for better Addon compatibility.
423
  * Fixed bug with Quicktags duplicating for image uploaded with the drag-and-drop uploader.
424
 
425
  = 1.0.7 =
426
+ * Don’t crop images where the original and destination dimensions match.
427
  * Ensure to restrain thumbnail views.
428
 
429
  = 1.0.6.1 =
themes/base_dark/css/style.css ADDED
@@ -0,0 +1 @@
 
1
+ .overlay-supersize.overlay-base_dark{background-image:none;background-color:#000;overflow:hidden;overflow-y:hidden}.overlay-supersize.overlay-base_dark .envirabox-wrap{top:40px}.overlay-supersize.overlay-base_dark .envirabox-wrap .envirabox-close{top:50px;right:10px}.envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav{position:fixed}.envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav.envirabox-prev:hover span{background-position:0 0}.envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav.envirabox-prev span{background-image:url(../images/left-nav.png);background-size:31px;background-position:0 -62px;left:0px;visibility:visible}.envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav.envirabox-next:hover span{background-position:0 0}.envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav.envirabox-next span{background-image:url(../images/right-nav.png);background-size:31px;background-position:0 -62px;right:0px;visibility:visible}.envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav span{width:31px;height:62px;margin-top:-31px}.envirabox-wrap .envirabox-theme-base_dark .envirabox-close{background-image:url(../images/close@2x.png);background-position:0 0px;cursor:pointer;background-size:30px 30px;top:-15px;right:-15px;width:30px;height:30px}.envirabox-wrap .envirabox-theme-base_dark .envirabox-close:hover{background-position:0 0}.envirabox-wrap .envirabox-title{position:fixed;top:0;left:0;right:0;width:100%;min-height:40px;padding:10px;box-sizing:border-box;background:#2d2d2f;color:#fff;margin:0;text-align:left;font-size:14px;z-index:988060 !important;visibility:visible}.envirabox-wrap .envirabox-title span.child{margin:0;padding:0;background:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.envirabox-wrap .envirabox-actions{position:fixed;top:9px;right:9px;z-index:988061}.envirabox-wrap .envirabox-actions .envira-download-button{display:inline-block;margin-left:9px}.envirabox-wrap .envirabox-actions .envira-download-button a{width:22px;height:22px;background-size:14px}.envirabox-wrap .envirabox-actions .envira-printing-button{display:inline-block;margin-left:9px}.envirabox-wrap .envirabox-actions .envira-printing-button a{width:22px;height:22px;background-size:14px}.envirabox-wrap .envirabox-actions .envira-fullscreen-button{display:inline-block;margin-left:9px;width:22px;height:22px;text-indent:-9999px;background-image:url(../images/fullscreen@2x.png);background-size:22px}.envirabox-wrap .envirabox-actions .envira-fullscreen-button a{display:block;width:22px;height:23px}.envirabox-wrap .envirabox-inner .envirabox-position-overlay{width:100%;text-align:center;bottom:-38px;top:inherit}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons{display:inline-block;float:none}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons.orientation-horizontal.outside{position:relative;bottom:0;min-width:inherit;max-width:inherit}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons.orientation-vertical.outside{position:relative;left:0;min-width:inherit;max-width:inherit}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons .envira-social-network{clear:none}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons .envira-social-network a.envira-social-button{margin:10px 5px 0;width:25px;height:25px;line-height:25px;background-size:151px 25px;background-image:url(../images/social@2x.png);background-color:transparent;border-radius:inherit;-webkit-border-radius:inherit;-moz-border-radius:inherit}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons div.facebook a{background-position:-63px 0px}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons div.twitter a{background-position:-31px 0px}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons div.pinterest a{background-position:-95px 0px}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons div.google a{background-position:0px 0px}.envirabox-wrap .envirabox-inner .envirabox-position-overlay .envira-social-buttons div.email a{background-position:-126px 0px}.envirabox-thumbs .envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav span{margin-top:-142px}.envirabox-skin.envirabox-theme-base_dark{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;padding:4px !important;background:#fff;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.envira-supersize .envirabox-skin.envirabox-theme-base_dark{-moz-border-radius:none;-webkit-border-radius:none;border-radius:none;padding:0 !important;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#envirabox-buttons{display:none}#envirabox-thumbs{background:#2d2d2f}#envirabox-thumbs ul li a{border:none}#envirabox-thumbs ul li{margin:36px 18px;border:3px solid #2d2d2f}#envirabox-thumbs ul li.active{border:3px solid #fff}#envirabox-thumbs.bottom{bottom:0}@media only screen and (max-height: 640px){.envirabox-thumbs .envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav span{margin-top:-102px}#envirabox-thumbs ul li a{max-width:100px;max-height:60px}#envirabox-thumbs ul li a img{max-width:100px;max-height:60px}#envirabox-thumbs ul li{margin:18px 10px}}@media only screen and (max-width: 459px){.envirabox-thumbs .envirabox-wrap .envirabox-theme-base_dark a.envirabox-nav span{margin-top:-102px}#envirabox-thumbs ul li a{max-width:100px;max-height:60px}#envirabox-thumbs ul li a img{max-width:100px;max-height:60px}#envirabox-thumbs ul li{margin:18px 10px}}
themes/base_dark/images/close@2x.png ADDED
Binary file
themes/base_dark/images/left-nav.png ADDED
Binary file
themes/base_dark/images/right-nav.png ADDED
Binary file
themes/base_dark/scss/style.scss ADDED
@@ -0,0 +1,400 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ Base (Dark) Theme Styles
3
+ ========================================================================== */
4
+
5
+ .overlay-supersize.overlay-base_dark {
6
+ background-image: none;
7
+ background-color: #000;
8
+ overflow:hidden;
9
+ overflow-y: hidden;
10
+
11
+ & .envirabox-wrap {
12
+ top: 40px;
13
+
14
+ & .envirabox-close {
15
+ top: 50px;
16
+ right: 10px;
17
+ }
18
+ }
19
+ }
20
+
21
+ .envirabox-wrap {
22
+
23
+ & .envirabox-theme-base_dark {
24
+ /**
25
+ * Navigation
26
+ */
27
+ a.envirabox-nav {
28
+ position:fixed;
29
+
30
+ /**
31
+ * Previous Navigation
32
+ */
33
+ &.envirabox-prev {
34
+
35
+ &:hover span {
36
+ background-position: 0 0;
37
+ }
38
+
39
+ span {
40
+ background-image: url(../images/left-nav.png);
41
+ background-size: 31px;
42
+ background-position: 0 -62px;
43
+ left: 0px;
44
+ visibility: visible;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Next Navigation
50
+ */
51
+ &.envirabox-next {
52
+
53
+ &:hover span {
54
+ background-position: 0 0;
55
+ }
56
+
57
+ span {
58
+ background-image: url(../images/right-nav.png);
59
+ background-size: 31px;
60
+ background-position: 0 -62px;
61
+ right: 0px;
62
+ visibility: visible;
63
+ }
64
+ }
65
+
66
+ & span {
67
+ width: 31px;
68
+ height: 62px;
69
+ margin-top: -31px;
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Close Button
75
+ */
76
+ & .envirabox-close {
77
+ background-image: url(../images/close@2x.png);
78
+ background-position: 0 0px;
79
+ cursor: pointer;
80
+ background-size: 30px 30px;
81
+ top: -15px;
82
+ right: -15px;
83
+ width: 30px;
84
+ height: 30px;
85
+
86
+ &:hover {
87
+ background-position: 0 0;
88
+ }
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Caption
94
+ */
95
+ & .envirabox-title {
96
+ position:fixed;
97
+ top:0;
98
+ left:0;
99
+ right:0;
100
+ width:100%;
101
+ min-height: 40px;
102
+ padding: 10px;
103
+ box-sizing: border-box;
104
+ background: #2d2d2f;
105
+ color: #fff;
106
+ margin: 0;
107
+ text-align: left;
108
+ font-size: 14px;
109
+ z-index: 988060 !important;
110
+ visibility: visible;
111
+
112
+ & span.child {
113
+ margin:0;
114
+ padding:0;
115
+ background: none;
116
+ -webkit-border-radius: 0;
117
+ -moz-border-radius: 0;
118
+ border-radius: 0;
119
+ text-shadow: none;
120
+ }
121
+
122
+ }
123
+
124
+ /**
125
+ * Actions
126
+ */
127
+ & .envirabox-actions {
128
+ position:fixed;
129
+ top:9px;
130
+ right:9px;
131
+ z-index: 988061;
132
+
133
+ & .envira-download-button {
134
+ display:inline-block;
135
+ margin-left: 9px;
136
+
137
+ & a {
138
+ width: 22px;
139
+ height: 22px;
140
+ background-size: 14px;
141
+ }
142
+ }
143
+
144
+ & .envira-printing-button {
145
+ display:inline-block;
146
+ margin-left: 9px;
147
+
148
+ & a {
149
+ width: 22px;
150
+ height: 22px;
151
+ background-size: 14px;
152
+ }
153
+ }
154
+
155
+ & .envira-fullscreen-button {
156
+ display:inline-block;
157
+ margin-left: 9px;
158
+ width: 22px;
159
+ height: 22px;
160
+ text-indent: -9999px;
161
+ background-image: url(../images/fullscreen@2x.png);
162
+ background-size: 22px;
163
+
164
+ & a {
165
+ display:block;
166
+ width: 22px;
167
+ height: 23px;
168
+ }
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Social icons
174
+ */
175
+ .envirabox-inner .envirabox-position-overlay {
176
+ width: 100%;
177
+ text-align: center;
178
+ bottom: -38px;
179
+ top: inherit;
180
+
181
+ .envira-social-buttons {
182
+ display: inline-block;
183
+ float: none;
184
+
185
+ &.orientation-horizontal.outside {
186
+ position: relative;
187
+ bottom: 0;
188
+ min-width: inherit;
189
+ max-width: inherit;
190
+ }
191
+
192
+ &.orientation-vertical.outside {
193
+ position: relative;
194
+ left: 0;
195
+ min-width: inherit;
196
+ max-width: inherit;
197
+ }
198
+
199
+ & .envira-social-network {
200
+ clear: none;
201
+
202
+ a.envira-social-button {
203
+ margin: 10px 5px 0;
204
+ width: 25px;
205
+ height: 25px;
206
+ line-height: 25px;
207
+ background-size: 151px 25px;
208
+ background-image: url(../images/social@2x.png);
209
+ background-color: transparent;
210
+ border-radius: inherit;
211
+ -webkit-border-radius: inherit;
212
+ -moz-border-radius: inherit;
213
+ }
214
+
215
+ }
216
+
217
+ /**
218
+ * Buttons for each Social Network
219
+ */
220
+ div.facebook {
221
+ a {
222
+ background-position: -63px 0px;
223
+ }
224
+ }
225
+ div.twitter {
226
+ a {
227
+ background-position: -31px 0px;
228
+ }
229
+ }
230
+ div.pinterest {
231
+ a {
232
+ background-position: -95px 0px;
233
+ }
234
+ }
235
+ div.google {
236
+ a {
237
+ background-position: 0px 0px;
238
+ }
239
+ }
240
+ div.email {
241
+ a {
242
+ background-position: -126px 0px;
243
+ }
244
+ }
245
+
246
+ }
247
+
248
+ }
249
+
250
+ }
251
+
252
+ .envirabox-thumbs .envirabox-wrap {
253
+
254
+ & .envirabox-theme-base_dark {
255
+ /**
256
+ * Navigation
257
+ */
258
+ a.envirabox-nav {
259
+
260
+ & span {
261
+ margin-top: -142px;
262
+ }
263
+
264
+ }
265
+
266
+ }
267
+
268
+ }
269
+
270
+ /**
271
+ * Lightbox
272
+ */
273
+ .envirabox-skin {
274
+
275
+ &.envirabox-theme-base_dark {
276
+ -moz-border-radius: 2px;
277
+ -webkit-border-radius: 2px;
278
+ border-radius: 2px;
279
+ padding: 4px !important;
280
+ background: #fff;
281
+ -webkit-box-shadow: none;
282
+ -moz-box-shadow: none;
283
+ box-shadow: none;
284
+ }
285
+
286
+ .envira-supersize & {
287
+ &.envirabox-theme-base_dark {
288
+ -moz-border-radius: none;
289
+ -webkit-border-radius: none;
290
+ border-radius: none;
291
+ padding: 0 !important;
292
+ -webkit-box-shadow: none;
293
+ -moz-box-shadow: none;
294
+ box-shadow: none;
295
+ }
296
+ }
297
+ }
298
+
299
+ #envirabox-buttons {
300
+ display:none;
301
+ }
302
+
303
+ #envirabox-thumbs {
304
+ background: #2d2d2f;
305
+
306
+ ul li a {
307
+ border: none;
308
+ }
309
+
310
+ ul li {
311
+ margin: 36px 18px;
312
+ border: 3px solid #2d2d2f;
313
+ }
314
+
315
+ ul li.active {
316
+ border: 3px solid #fff;
317
+ }
318
+
319
+ &.bottom {
320
+ bottom: 0;
321
+ }
322
+
323
+ }
324
+
325
+ /**
326
+ * Mobile Landscape (devices and browsers)
327
+ */
328
+ @media only screen and (max-height: 640px) {
329
+
330
+ .envirabox-thumbs .envirabox-wrap {
331
+
332
+ & .envirabox-theme-base_dark {
333
+ /**
334
+ * Navigation
335
+ */
336
+ a.envirabox-nav {
337
+
338
+ & span {
339
+ margin-top: -102px;
340
+ }
341
+ }
342
+ }
343
+ }
344
+
345
+ #envirabox-thumbs {
346
+
347
+ ul li a {
348
+ max-width: 100px;
349
+ max-height: 60px;
350
+
351
+ & img {
352
+ max-width: 100px;
353
+ max-height: 60px;
354
+ }
355
+ }
356
+
357
+ ul li {
358
+ margin: 18px 10px;
359
+ }
360
+
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Mobile Portrait (devices and browsers)
366
+ */
367
+ @media only screen and (max-width: 459px) {
368
+ .envirabox-thumbs .envirabox-wrap {
369
+
370
+ & .envirabox-theme-base_dark {
371
+ /**
372
+ * Navigation
373
+ */
374
+ a.envirabox-nav {
375
+
376
+ & span {
377
+ margin-top: -102px;
378
+ }
379
+ }
380
+ }
381
+ }
382
+
383
+ #envirabox-thumbs {
384
+
385
+ ul li a {
386
+ max-width: 100px;
387
+ max-height: 60px;
388
+
389
+ & img {
390
+ max-width: 100px;
391
+ max-height: 60px;
392
+ }
393
+ }
394
+
395
+ ul li {
396
+ margin: 18px 10px;
397
+ }
398
+
399
+ }
400
+ }