Version Description
- New : NextGen importer now includes shortcode replacement
- New : Masonry gallery supports captions below thumbnails
- New : Performance improvements for very large galleries (1000+ images)
- Fix : Bugs fixes for paging, FooBox and more
- Update to latest client side JS 1.0.18
Download this release
Release Info
Developer | bradvin |
Plugin | FooGallery – Image Gallery WordPress Plugin |
Version | 1.4.12 |
Comparing to | |
See all releases |
Code changes from version 1.4.8 to 1.4.12
- Gruntfile.js +212 -212
- LICENSE.txt +338 -338
- README.md +362 -362
- README.txt +385 -373
- changelog.txt +3 -3
- css/admin-foogallery.css +461 -461
- css/admin-page-foogallery-extensions.css +296 -296
- css/admin-page-foogallery-help.css +2 -2
- css/admin-page-foogallery-settings.css +2 -2
- css/admin-tinymce.css +113 -113
- css/foogallery-foovideo-overrides.css +95 -95
- extensions/albums/admin/class-columns.php +73 -73
- extensions/albums/admin/class-metaboxes.php +576 -576
- extensions/albums/album-default.php +81 -81
- extensions/albums/album-stack.php +67 -67
- extensions/albums/class-albums-extension.php +111 -111
- extensions/albums/class-foogallery-album.php +256 -256
- extensions/albums/class-posttypes.php +108 -108
- extensions/albums/css/admin-foogallery-album.css +379 -379
- extensions/albums/css/album-default.css +102 -101
- extensions/albums/css/album-stack.css +289 -289
- extensions/albums/functions.php +360 -360
- extensions/albums/js/admin-foogallery-album.js +147 -147
- extensions/albums/js/album-stack.js +862 -862
- extensions/albums/public/class-foogallery-album-template-loader.php +184 -184
- extensions/albums/public/class-rewrite-rules.php +16 -16
- extensions/albums/public/class-shortcodes.php +48 -48
- extensions/default-templates/class-default-templates-extension.php +13 -13
- extensions/default-templates/class-default-templates.php +52 -52
- extensions/default-templates/default/class-default-gallery-template.php +219 -202
- extensions/default-templates/default/gallery-default.php +18 -22
- extensions/default-templates/default/js/admin-gallery-default.js +88 -88
- extensions/default-templates/functions.php +22 -22
- extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php +297 -279
- extensions/default-templates/image-viewer/gallery-image-viewer.php +33 -42
- extensions/default-templates/image-viewer/js/admin-gallery-image-viewer.js +122 -122
- extensions/default-templates/justified/class-justified-gallery-template.php +269 -250
- extensions/default-templates/justified/gallery-justified.php +15 -21
- extensions/default-templates/masonry/class-masonry-gallery-template.php +330 -265
- extensions/default-templates/masonry/gallery-masonry.php +21 -25
- extensions/default-templates/masonry/js/admin-gallery-masonry.js +29 -29
- extensions/default-templates/shared/css/admin-foogallery.css +77 -77
- extensions/default-templates/shared/css/foogallery.css +2409 -2313
- extensions/default-templates/shared/css/foogallery.min.css +1 -1
- extensions/default-templates/shared/js/foogallery.js +0 -4318
Gruntfile.js
CHANGED
@@ -1,212 +1,212 @@
|
|
1 |
-
module.exports = function (grunt) {
|
2 |
-
|
3 |
-
require('load-grunt-tasks')(grunt);
|
4 |
-
|
5 |
-
// Project configuration.
|
6 |
-
grunt.initConfig({
|
7 |
-
pkg: grunt.file.readJSON('package.json'),
|
8 |
-
uglify: {
|
9 |
-
options: {
|
10 |
-
compress: {
|
11 |
-
global_defs: {
|
12 |
-
"EO_SCRIPT_DEBUG": false
|
13 |
-
},
|
14 |
-
dead_code: true
|
15 |
-
},
|
16 |
-
banner: '/*! <%= pkg.name %> <%= pkg.version %> <%= grunt.template.today("yyyy-mm-dd HH:MM") %> */\n'
|
17 |
-
},
|
18 |
-
build: {
|
19 |
-
files: [
|
20 |
-
{
|
21 |
-
expand: true, // Enable dynamic expansion.
|
22 |
-
src: ['extensions/default-templates/js/*.js', '!extensions/default-templates/js/*.min.js' ], // Actual pattern(s) to match.
|
23 |
-
ext: '.min.js' // Dest filepaths will have this extension.
|
24 |
-
}
|
25 |
-
]
|
26 |
-
}
|
27 |
-
},
|
28 |
-
jshint: {
|
29 |
-
options: {
|
30 |
-
reporter: require('jshint-stylish'),
|
31 |
-
globals: {
|
32 |
-
"EO_SCRIPT_DEBUG": false
|
33 |
-
},
|
34 |
-
'-W099': true, //Mixed spaces and tabs
|
35 |
-
'-W083': true, //TODO Fix functions within loop
|
36 |
-
'-W082': true, //Todo Function declarations should not be placed in blocks
|
37 |
-
'-W020': true //Read only - error when assigning EO_SCRIPT_DEBUG a value.
|
38 |
-
},
|
39 |
-
all: [ 'js/*.js', '!js/*.min.js' ]
|
40 |
-
},
|
41 |
-
|
42 |
-
compress: {
|
43 |
-
//Compress build/foogallery
|
44 |
-
main: {
|
45 |
-
options: {
|
46 |
-
mode: 'zip',
|
47 |
-
archive: './dist/foogallery.zip'
|
48 |
-
},
|
49 |
-
expand: true,
|
50 |
-
cwd: 'dist/foogallery/',
|
51 |
-
src: ['**/*'],
|
52 |
-
dest: 'foogallery/'
|
53 |
-
},
|
54 |
-
version: {
|
55 |
-
options: {
|
56 |
-
mode: 'zip',
|
57 |
-
archive: './dist/foogallery-<%= pkg.version %>.zip'
|
58 |
-
},
|
59 |
-
expand: true,
|
60 |
-
cwd: 'dist/foogallery/',
|
61 |
-
src: ['**/*'],
|
62 |
-
dest: 'foogallery/'
|
63 |
-
}
|
64 |
-
},
|
65 |
-
|
66 |
-
clean: {
|
67 |
-
//Clean up build folder
|
68 |
-
main: ['dist/foogallery']
|
69 |
-
},
|
70 |
-
|
71 |
-
copy: {
|
72 |
-
// Copy the plugin to a versioned release directory
|
73 |
-
main: {
|
74 |
-
src: [
|
75 |
-
'**',
|
76 |
-
'!node_modules/**',
|
77 |
-
'!dist/**',
|
78 |
-
'!.git/**',
|
79 |
-
'!vendor/**',
|
80 |
-
'!Gruntfile.js',
|
81 |
-
'!package.json',
|
82 |
-
'!.gitignore',
|
83 |
-
'!.gitmodules',
|
84 |
-
'!*~',
|
85 |
-
'!CONTRIBUTING.md'
|
86 |
-
],
|
87 |
-
dest: 'dist/foogallery/'
|
88 |
-
}
|
89 |
-
},
|
90 |
-
|
91 |
-
wp_readme_to_markdown: {
|
92 |
-
convert: {
|
93 |
-
files: {
|
94 |
-
'readme.md': 'readme.txt'
|
95 |
-
}
|
96 |
-
},
|
97 |
-
options : {
|
98 |
-
banner: 'https://s3.amazonaws.com/foogallery/banner-772x250.jpg',
|
99 |
-
afterBannerMarkdown: '[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fooplugins/foogallery/badges/quality-score.png?b=develop)](https://scrutinizer-ci.com/g/fooplugins/foogallery/?branch=develop)',
|
100 |
-
screenshots: {
|
101 |
-
enabled: true,
|
102 |
-
prefix: 'https://s3.amazonaws.com/foogallery/screenshot-',
|
103 |
-
suffix: '.jpg'
|
104 |
-
}
|
105 |
-
}
|
106 |
-
},
|
107 |
-
|
108 |
-
checkrepo: {
|
109 |
-
deploy: {
|
110 |
-
tag: {
|
111 |
-
eq: '<%= pkg.version %>' // Check if highest repo tag is equal to pkg.version
|
112 |
-
},
|
113 |
-
tagged: true, // Check if last repo commit (HEAD) is not tagged
|
114 |
-
clean: true // Check if the repo working directory is clean
|
115 |
-
}
|
116 |
-
},
|
117 |
-
|
118 |
-
watch: {
|
119 |
-
readme: {
|
120 |
-
files: ['readme.txt'],
|
121 |
-
tasks: ['wp_readme_to_markdown'],
|
122 |
-
options: {
|
123 |
-
spawn: false
|
124 |
-
}
|
125 |
-
},
|
126 |
-
scripts: {
|
127 |
-
files: ['js/*.js'],
|
128 |
-
tasks: ['newer:jshint', 'newer:uglify'],
|
129 |
-
options: {
|
130 |
-
spawn: false
|
131 |
-
}
|
132 |
-
}
|
133 |
-
},
|
134 |
-
|
135 |
-
wp_deploy: {
|
136 |
-
deploy: {
|
137 |
-
options: {
|
138 |
-
svn_user: 'bradvin',
|
139 |
-
plugin_slug: 'foogallery',
|
140 |
-
build_dir: 'dist/foogallery/'
|
141 |
-
}
|
142 |
-
}
|
143 |
-
},
|
144 |
-
|
145 |
-
po2mo: {
|
146 |
-
files: {
|
147 |
-
src: 'languages/*.po',
|
148 |
-
expand: true
|
149 |
-
}
|
150 |
-
},
|
151 |
-
|
152 |
-
pot: {
|
153 |
-
options: {
|
154 |
-
text_domain: 'foogallery',
|
155 |
-
dest: 'languages/',
|
156 |
-
keywords: ['__', '_e', 'esc_html__', 'esc_html_e', 'esc_attr__', 'esc_attr_e', 'esc_attr_x', 'esc_html_x', 'ngettext', '_n', '_ex', '_nx' ]
|
157 |
-
},
|
158 |
-
files: {
|
159 |
-
src: [
|
160 |
-
'**/*.php',
|
161 |
-
'!node_modules/**',
|
162 |
-
'!dist/**',
|
163 |
-
'!vendor/**',
|
164 |
-
'!*~'
|
165 |
-
],
|
166 |
-
expand: true
|
167 |
-
}
|
168 |
-
},
|
169 |
-
|
170 |
-
checktextdomain: {
|
171 |
-
options: {
|
172 |
-
text_domain: 'foogallery',
|
173 |
-
keywords: ['__:1,2d',
|
174 |
-
'_e:1,2d',
|
175 |
-
'_x:1,2c,3d',
|
176 |
-
'esc_html__:1,2d',
|
177 |
-
'esc_html_e:1,2d',
|
178 |
-
'esc_html_x:1,2c,3d',
|
179 |
-
'esc_attr__:1,2d',
|
180 |
-
'esc_attr_e:1,2d',
|
181 |
-
'esc_attr_x:1,2c,3d',
|
182 |
-
'_ex:1,2c,3d',
|
183 |
-
'_n:1,2,4d',
|
184 |
-
'_nx:1,2,4c,5d',
|
185 |
-
'_n_noop:1,2,3d',
|
186 |
-
'_nx_noop:1,2,3c,4d'
|
187 |
-
]
|
188 |
-
},
|
189 |
-
files: {
|
190 |
-
src: [
|
191 |
-
'**/*.php',
|
192 |
-
'!node_modules/**',
|
193 |
-
'!dist/**',
|
194 |
-
'!vendor/**',
|
195 |
-
'!*~',
|
196 |
-
'!includes/foopluginbase/**'
|
197 |
-
],
|
198 |
-
expand: true
|
199 |
-
}
|
200 |
-
}
|
201 |
-
|
202 |
-
});
|
203 |
-
|
204 |
-
grunt.registerTask('readme', [ 'wp_readme_to_markdown' ]);
|
205 |
-
|
206 |
-
grunt.registerTask('test', [ 'jshint' ]);
|
207 |
-
|
208 |
-
grunt.registerTask('build', [ 'test', 'pot', 'newer:po2mo', 'wp_readme_to_markdown', 'clean', 'copy' ]);
|
209 |
-
|
210 |
-
grunt.registerTask('deploy', [ 'checkbranch:master', 'checkrepo:deploy', 'build', 'wp_deploy', 'compress' ]);
|
211 |
-
|
212 |
-
};
|
1 |
+
module.exports = function (grunt) {
|
2 |
+
|
3 |
+
require('load-grunt-tasks')(grunt);
|
4 |
+
|
5 |
+
// Project configuration.
|
6 |
+
grunt.initConfig({
|
7 |
+
pkg: grunt.file.readJSON('package.json'),
|
8 |
+
uglify: {
|
9 |
+
options: {
|
10 |
+
compress: {
|
11 |
+
global_defs: {
|
12 |
+
"EO_SCRIPT_DEBUG": false
|
13 |
+
},
|
14 |
+
dead_code: true
|
15 |
+
},
|
16 |
+
banner: '/*! <%= pkg.name %> <%= pkg.version %> <%= grunt.template.today("yyyy-mm-dd HH:MM") %> */\n'
|
17 |
+
},
|
18 |
+
build: {
|
19 |
+
files: [
|
20 |
+
{
|
21 |
+
expand: true, // Enable dynamic expansion.
|
22 |
+
src: ['extensions/default-templates/js/*.js', '!extensions/default-templates/js/*.min.js' ], // Actual pattern(s) to match.
|
23 |
+
ext: '.min.js' // Dest filepaths will have this extension.
|
24 |
+
}
|
25 |
+
]
|
26 |
+
}
|
27 |
+
},
|
28 |
+
jshint: {
|
29 |
+
options: {
|
30 |
+
reporter: require('jshint-stylish'),
|
31 |
+
globals: {
|
32 |
+
"EO_SCRIPT_DEBUG": false
|
33 |
+
},
|
34 |
+
'-W099': true, //Mixed spaces and tabs
|
35 |
+
'-W083': true, //TODO Fix functions within loop
|
36 |
+
'-W082': true, //Todo Function declarations should not be placed in blocks
|
37 |
+
'-W020': true //Read only - error when assigning EO_SCRIPT_DEBUG a value.
|
38 |
+
},
|
39 |
+
all: [ 'js/*.js', '!js/*.min.js' ]
|
40 |
+
},
|
41 |
+
|
42 |
+
compress: {
|
43 |
+
//Compress build/foogallery
|
44 |
+
main: {
|
45 |
+
options: {
|
46 |
+
mode: 'zip',
|
47 |
+
archive: './dist/foogallery.zip'
|
48 |
+
},
|
49 |
+
expand: true,
|
50 |
+
cwd: 'dist/foogallery/',
|
51 |
+
src: ['**/*'],
|
52 |
+
dest: 'foogallery/'
|
53 |
+
},
|
54 |
+
version: {
|
55 |
+
options: {
|
56 |
+
mode: 'zip',
|
57 |
+
archive: './dist/foogallery-<%= pkg.version %>.zip'
|
58 |
+
},
|
59 |
+
expand: true,
|
60 |
+
cwd: 'dist/foogallery/',
|
61 |
+
src: ['**/*'],
|
62 |
+
dest: 'foogallery/'
|
63 |
+
}
|
64 |
+
},
|
65 |
+
|
66 |
+
clean: {
|
67 |
+
//Clean up build folder
|
68 |
+
main: ['dist/foogallery']
|
69 |
+
},
|
70 |
+
|
71 |
+
copy: {
|
72 |
+
// Copy the plugin to a versioned release directory
|
73 |
+
main: {
|
74 |
+
src: [
|
75 |
+
'**',
|
76 |
+
'!node_modules/**',
|
77 |
+
'!dist/**',
|
78 |
+
'!.git/**',
|
79 |
+
'!vendor/**',
|
80 |
+
'!Gruntfile.js',
|
81 |
+
'!package.json',
|
82 |
+
'!.gitignore',
|
83 |
+
'!.gitmodules',
|
84 |
+
'!*~',
|
85 |
+
'!CONTRIBUTING.md'
|
86 |
+
],
|
87 |
+
dest: 'dist/foogallery/'
|
88 |
+
}
|
89 |
+
},
|
90 |
+
|
91 |
+
wp_readme_to_markdown: {
|
92 |
+
convert: {
|
93 |
+
files: {
|
94 |
+
'readme.md': 'readme.txt'
|
95 |
+
}
|
96 |
+
},
|
97 |
+
options : {
|
98 |
+
banner: 'https://s3.amazonaws.com/foogallery/banner-772x250.jpg',
|
99 |
+
afterBannerMarkdown: '[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fooplugins/foogallery/badges/quality-score.png?b=develop)](https://scrutinizer-ci.com/g/fooplugins/foogallery/?branch=develop)',
|
100 |
+
screenshots: {
|
101 |
+
enabled: true,
|
102 |
+
prefix: 'https://s3.amazonaws.com/foogallery/screenshot-',
|
103 |
+
suffix: '.jpg'
|
104 |
+
}
|
105 |
+
}
|
106 |
+
},
|
107 |
+
|
108 |
+
checkrepo: {
|
109 |
+
deploy: {
|
110 |
+
tag: {
|
111 |
+
eq: '<%= pkg.version %>' // Check if highest repo tag is equal to pkg.version
|
112 |
+
},
|
113 |
+
tagged: true, // Check if last repo commit (HEAD) is not tagged
|
114 |
+
clean: true // Check if the repo working directory is clean
|
115 |
+
}
|
116 |
+
},
|
117 |
+
|
118 |
+
watch: {
|
119 |
+
readme: {
|
120 |
+
files: ['readme.txt'],
|
121 |
+
tasks: ['wp_readme_to_markdown'],
|
122 |
+
options: {
|
123 |
+
spawn: false
|
124 |
+
}
|
125 |
+
},
|
126 |
+
scripts: {
|
127 |
+
files: ['js/*.js'],
|
128 |
+
tasks: ['newer:jshint', 'newer:uglify'],
|
129 |
+
options: {
|
130 |
+
spawn: false
|
131 |
+
}
|
132 |
+
}
|
133 |
+
},
|
134 |
+
|
135 |
+
wp_deploy: {
|
136 |
+
deploy: {
|
137 |
+
options: {
|
138 |
+
svn_user: 'bradvin',
|
139 |
+
plugin_slug: 'foogallery',
|
140 |
+
build_dir: 'dist/foogallery/'
|
141 |
+
}
|
142 |
+
}
|
143 |
+
},
|
144 |
+
|
145 |
+
po2mo: {
|
146 |
+
files: {
|
147 |
+
src: 'languages/*.po',
|
148 |
+
expand: true
|
149 |
+
}
|
150 |
+
},
|
151 |
+
|
152 |
+
pot: {
|
153 |
+
options: {
|
154 |
+
text_domain: 'foogallery',
|
155 |
+
dest: 'languages/',
|
156 |
+
keywords: ['__', '_e', 'esc_html__', 'esc_html_e', 'esc_attr__', 'esc_attr_e', 'esc_attr_x', 'esc_html_x', 'ngettext', '_n', '_ex', '_nx' ]
|
157 |
+
},
|
158 |
+
files: {
|
159 |
+
src: [
|
160 |
+
'**/*.php',
|
161 |
+
'!node_modules/**',
|
162 |
+
'!dist/**',
|
163 |
+
'!vendor/**',
|
164 |
+
'!*~'
|
165 |
+
],
|
166 |
+
expand: true
|
167 |
+
}
|
168 |
+
},
|
169 |
+
|
170 |
+
checktextdomain: {
|
171 |
+
options: {
|
172 |
+
text_domain: 'foogallery',
|
173 |
+
keywords: ['__:1,2d',
|
174 |
+
'_e:1,2d',
|
175 |
+
'_x:1,2c,3d',
|
176 |
+
'esc_html__:1,2d',
|
177 |
+
'esc_html_e:1,2d',
|
178 |
+
'esc_html_x:1,2c,3d',
|
179 |
+
'esc_attr__:1,2d',
|
180 |
+
'esc_attr_e:1,2d',
|
181 |
+
'esc_attr_x:1,2c,3d',
|
182 |
+
'_ex:1,2c,3d',
|
183 |
+
'_n:1,2,4d',
|
184 |
+
'_nx:1,2,4c,5d',
|
185 |
+
'_n_noop:1,2,3d',
|
186 |
+
'_nx_noop:1,2,3c,4d'
|
187 |
+
]
|
188 |
+
},
|
189 |
+
files: {
|
190 |
+
src: [
|
191 |
+
'**/*.php',
|
192 |
+
'!node_modules/**',
|
193 |
+
'!dist/**',
|
194 |
+
'!vendor/**',
|
195 |
+
'!*~',
|
196 |
+
'!includes/foopluginbase/**'
|
197 |
+
],
|
198 |
+
expand: true
|
199 |
+
}
|
200 |
+
}
|
201 |
+
|
202 |
+
});
|
203 |
+
|
204 |
+
grunt.registerTask('readme', [ 'wp_readme_to_markdown' ]);
|
205 |
+
|
206 |
+
grunt.registerTask('test', [ 'jshint' ]);
|
207 |
+
|
208 |
+
grunt.registerTask('build', [ 'test', 'pot', 'newer:po2mo', 'wp_readme_to_markdown', 'clean', 'copy' ]);
|
209 |
+
|
210 |
+
grunt.registerTask('deploy', [ 'checkbranch:master', 'checkrepo:deploy', 'build', 'wp_deploy', 'compress' ]);
|
211 |
+
|
212 |
+
};
|
LICENSE.txt
CHANGED
@@ -1,339 +1,339 @@
|
|
1 |
-
GNU GENERAL PUBLIC LICENSE
|
2 |
-
Version 2, June 1991
|
3 |
-
|
4 |
-
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
5 |
-
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6 |
-
Everyone is permitted to copy and distribute verbatim copies
|
7 |
-
of this license document, but changing it is not allowed.
|
8 |
-
|
9 |
-
Preamble
|
10 |
-
|
11 |
-
The licenses for most software are designed to take away your
|
12 |
-
freedom to share and change it. By contrast, the GNU General Public
|
13 |
-
License is intended to guarantee your freedom to share and change free
|
14 |
-
software--to make sure the software is free for all its users. This
|
15 |
-
General Public License applies to most of the Free Software
|
16 |
-
Foundation's software and to any other program whose authors commit to
|
17 |
-
using it. (Some other Free Software Foundation software is covered by
|
18 |
-
the GNU Lesser General Public License instead.) You can apply it to
|
19 |
-
your programs, too.
|
20 |
-
|
21 |
-
When we speak of free software, we are referring to freedom, not
|
22 |
-
price. Our General Public Licenses are designed to make sure that you
|
23 |
-
have the freedom to distribute copies of free software (and charge for
|
24 |
-
this service if you wish), that you receive source code or can get it
|
25 |
-
if you want it, that you can change the software or use pieces of it
|
26 |
-
in new free programs; and that you know you can do these things.
|
27 |
-
|
28 |
-
To protect your rights, we need to make restrictions that forbid
|
29 |
-
anyone to deny you these rights or to ask you to surrender the rights.
|
30 |
-
These restrictions translate to certain responsibilities for you if you
|
31 |
-
distribute copies of the software, or if you modify it.
|
32 |
-
|
33 |
-
For example, if you distribute copies of such a program, whether
|
34 |
-
gratis or for a fee, you must give the recipients all the rights that
|
35 |
-
you have. You must make sure that they, too, receive or can get the
|
36 |
-
source code. And you must show them these terms so they know their
|
37 |
-
rights.
|
38 |
-
|
39 |
-
We protect your rights with two steps: (1) copyright the software, and
|
40 |
-
(2) offer you this license which gives you legal permission to copy,
|
41 |
-
distribute and/or modify the software.
|
42 |
-
|
43 |
-
Also, for each author's protection and ours, we want to make certain
|
44 |
-
that everyone understands that there is no warranty for this free
|
45 |
-
software. If the software is modified by someone else and passed on, we
|
46 |
-
want its recipients to know that what they have is not the original, so
|
47 |
-
that any problems introduced by others will not reflect on the original
|
48 |
-
authors' reputations.
|
49 |
-
|
50 |
-
Finally, any free program is threatened constantly by software
|
51 |
-
patents. We wish to avoid the danger that redistributors of a free
|
52 |
-
program will individually obtain patent licenses, in effect making the
|
53 |
-
program proprietary. To prevent this, we have made it clear that any
|
54 |
-
patent must be licensed for everyone's free use or not licensed at all.
|
55 |
-
|
56 |
-
The precise terms and conditions for copying, distribution and
|
57 |
-
modification follow.
|
58 |
-
|
59 |
-
GNU GENERAL PUBLIC LICENSE
|
60 |
-
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61 |
-
|
62 |
-
0. This License applies to any program or other work which contains
|
63 |
-
a notice placed by the copyright holder saying it may be distributed
|
64 |
-
under the terms of this General Public License. The "Program", below,
|
65 |
-
refers to any such program or work, and a "work based on the Program"
|
66 |
-
means either the Program or any derivative work under copyright law:
|
67 |
-
that is to say, a work containing the Program or a portion of it,
|
68 |
-
either verbatim or with modifications and/or translated into another
|
69 |
-
language. (Hereinafter, translation is included without limitation in
|
70 |
-
the term "modification".) Each licensee is addressed as "you".
|
71 |
-
|
72 |
-
Activities other than copying, distribution and modification are not
|
73 |
-
covered by this License; they are outside its scope. The act of
|
74 |
-
running the Program is not restricted, and the output from the Program
|
75 |
-
is covered only if its contents constitute a work based on the
|
76 |
-
Program (independent of having been made by running the Program).
|
77 |
-
Whether that is true depends on what the Program does.
|
78 |
-
|
79 |
-
1. You may copy and distribute verbatim copies of the Program's
|
80 |
-
source code as you receive it, in any medium, provided that you
|
81 |
-
conspicuously and appropriately publish on each copy an appropriate
|
82 |
-
copyright notice and disclaimer of warranty; keep intact all the
|
83 |
-
notices that refer to this License and to the absence of any warranty;
|
84 |
-
and give any other recipients of the Program a copy of this License
|
85 |
-
along with the Program.
|
86 |
-
|
87 |
-
You may charge a fee for the physical act of transferring a copy, and
|
88 |
-
you may at your option offer warranty protection in exchange for a fee.
|
89 |
-
|
90 |
-
2. You may modify your copy or copies of the Program or any portion
|
91 |
-
of it, thus forming a work based on the Program, and copy and
|
92 |
-
distribute such modifications or work under the terms of Section 1
|
93 |
-
above, provided that you also meet all of these conditions:
|
94 |
-
|
95 |
-
a) You must cause the modified files to carry prominent notices
|
96 |
-
stating that you changed the files and the date of any change.
|
97 |
-
|
98 |
-
b) You must cause any work that you distribute or publish, that in
|
99 |
-
whole or in part contains or is derived from the Program or any
|
100 |
-
part thereof, to be licensed as a whole at no charge to all third
|
101 |
-
parties under the terms of this License.
|
102 |
-
|
103 |
-
c) If the modified program normally reads commands interactively
|
104 |
-
when run, you must cause it, when started running for such
|
105 |
-
interactive use in the most ordinary way, to print or display an
|
106 |
-
announcement including an appropriate copyright notice and a
|
107 |
-
notice that there is no warranty (or else, saying that you provide
|
108 |
-
a warranty) and that users may redistribute the program under
|
109 |
-
these conditions, and telling the user how to view a copy of this
|
110 |
-
License. (Exception: if the Program itself is interactive but
|
111 |
-
does not normally print such an announcement, your work based on
|
112 |
-
the Program is not required to print an announcement.)
|
113 |
-
|
114 |
-
These requirements apply to the modified work as a whole. If
|
115 |
-
identifiable sections of that work are not derived from the Program,
|
116 |
-
and can be reasonably considered independent and separate works in
|
117 |
-
themselves, then this License, and its terms, do not apply to those
|
118 |
-
sections when you distribute them as separate works. But when you
|
119 |
-
distribute the same sections as part of a whole which is a work based
|
120 |
-
on the Program, the distribution of the whole must be on the terms of
|
121 |
-
this License, whose permissions for other licensees extend to the
|
122 |
-
entire whole, and thus to each and every part regardless of who wrote it.
|
123 |
-
|
124 |
-
Thus, it is not the intent of this section to claim rights or contest
|
125 |
-
your rights to work written entirely by you; rather, the intent is to
|
126 |
-
exercise the right to control the distribution of derivative or
|
127 |
-
collective works based on the Program.
|
128 |
-
|
129 |
-
In addition, mere aggregation of another work not based on the Program
|
130 |
-
with the Program (or with a work based on the Program) on a volume of
|
131 |
-
a storage or distribution medium does not bring the other work under
|
132 |
-
the scope of this License.
|
133 |
-
|
134 |
-
3. You may copy and distribute the Program (or a work based on it,
|
135 |
-
under Section 2) in object code or executable form under the terms of
|
136 |
-
Sections 1 and 2 above provided that you also do one of the following:
|
137 |
-
|
138 |
-
a) Accompany it with the complete corresponding machine-readable
|
139 |
-
source code, which must be distributed under the terms of Sections
|
140 |
-
1 and 2 above on a medium customarily used for software interchange; or,
|
141 |
-
|
142 |
-
b) Accompany it with a written offer, valid for at least three
|
143 |
-
years, to give any third party, for a charge no more than your
|
144 |
-
cost of physically performing source distribution, a complete
|
145 |
-
machine-readable copy of the corresponding source code, to be
|
146 |
-
distributed under the terms of Sections 1 and 2 above on a medium
|
147 |
-
customarily used for software interchange; or,
|
148 |
-
|
149 |
-
c) Accompany it with the information you received as to the offer
|
150 |
-
to distribute corresponding source code. (This alternative is
|
151 |
-
allowed only for noncommercial distribution and only if you
|
152 |
-
received the program in object code or executable form with such
|
153 |
-
an offer, in accord with Subsection b above.)
|
154 |
-
|
155 |
-
The source code for a work means the preferred form of the work for
|
156 |
-
making modifications to it. For an executable work, complete source
|
157 |
-
code means all the source code for all modules it contains, plus any
|
158 |
-
associated interface definition files, plus the scripts used to
|
159 |
-
control compilation and installation of the executable. However, as a
|
160 |
-
special exception, the source code distributed need not include
|
161 |
-
anything that is normally distributed (in either source or binary
|
162 |
-
form) with the major components (compiler, kernel, and so on) of the
|
163 |
-
operating system on which the executable runs, unless that component
|
164 |
-
itself accompanies the executable.
|
165 |
-
|
166 |
-
If distribution of executable or object code is made by offering
|
167 |
-
access to copy from a designated place, then offering equivalent
|
168 |
-
access to copy the source code from the same place counts as
|
169 |
-
distribution of the source code, even though third parties are not
|
170 |
-
compelled to copy the source along with the object code.
|
171 |
-
|
172 |
-
4. You may not copy, modify, sublicense, or distribute the Program
|
173 |
-
except as expressly provided under this License. Any attempt
|
174 |
-
otherwise to copy, modify, sublicense or distribute the Program is
|
175 |
-
void, and will automatically terminate your rights under this License.
|
176 |
-
However, parties who have received copies, or rights, from you under
|
177 |
-
this License will not have their licenses terminated so long as such
|
178 |
-
parties remain in full compliance.
|
179 |
-
|
180 |
-
5. You are not required to accept this License, since you have not
|
181 |
-
signed it. However, nothing else grants you permission to modify or
|
182 |
-
distribute the Program or its derivative works. These actions are
|
183 |
-
prohibited by law if you do not accept this License. Therefore, by
|
184 |
-
modifying or distributing the Program (or any work based on the
|
185 |
-
Program), you indicate your acceptance of this License to do so, and
|
186 |
-
all its terms and conditions for copying, distributing or modifying
|
187 |
-
the Program or works based on it.
|
188 |
-
|
189 |
-
6. Each time you redistribute the Program (or any work based on the
|
190 |
-
Program), the recipient automatically receives a license from the
|
191 |
-
original licensor to copy, distribute or modify the Program subject to
|
192 |
-
these terms and conditions. You may not impose any further
|
193 |
-
restrictions on the recipients' exercise of the rights granted herein.
|
194 |
-
You are not responsible for enforcing compliance by third parties to
|
195 |
-
this License.
|
196 |
-
|
197 |
-
7. If, as a consequence of a court judgment or allegation of patent
|
198 |
-
infringement or for any other reason (not limited to patent issues),
|
199 |
-
conditions are imposed on you (whether by court order, agreement or
|
200 |
-
otherwise) that contradict the conditions of this License, they do not
|
201 |
-
excuse you from the conditions of this License. If you cannot
|
202 |
-
distribute so as to satisfy simultaneously your obligations under this
|
203 |
-
License and any other pertinent obligations, then as a consequence you
|
204 |
-
may not distribute the Program at all. For example, if a patent
|
205 |
-
license would not permit royalty-free redistribution of the Program by
|
206 |
-
all those who receive copies directly or indirectly through you, then
|
207 |
-
the only way you could satisfy both it and this License would be to
|
208 |
-
refrain entirely from distribution of the Program.
|
209 |
-
|
210 |
-
If any portion of this section is held invalid or unenforceable under
|
211 |
-
any particular circumstance, the balance of the section is intended to
|
212 |
-
apply and the section as a whole is intended to apply in other
|
213 |
-
circumstances.
|
214 |
-
|
215 |
-
It is not the purpose of this section to induce you to infringe any
|
216 |
-
patents or other property right claims or to contest validity of any
|
217 |
-
such claims; this section has the sole purpose of protecting the
|
218 |
-
integrity of the free software distribution system, which is
|
219 |
-
implemented by public license practices. Many people have made
|
220 |
-
generous contributions to the wide range of software distributed
|
221 |
-
through that system in reliance on consistent application of that
|
222 |
-
system; it is up to the author/donor to decide if he or she is willing
|
223 |
-
to distribute software through any other system and a licensee cannot
|
224 |
-
impose that choice.
|
225 |
-
|
226 |
-
This section is intended to make thoroughly clear what is believed to
|
227 |
-
be a consequence of the rest of this License.
|
228 |
-
|
229 |
-
8. If the distribution and/or use of the Program is restricted in
|
230 |
-
certain countries either by patents or by copyrighted interfaces, the
|
231 |
-
original copyright holder who places the Program under this License
|
232 |
-
may add an explicit geographical distribution limitation excluding
|
233 |
-
those countries, so that distribution is permitted only in or among
|
234 |
-
countries not thus excluded. In such case, this License incorporates
|
235 |
-
the limitation as if written in the body of this License.
|
236 |
-
|
237 |
-
9. The Free Software Foundation may publish revised and/or new versions
|
238 |
-
of the General Public License from time to time. Such new versions will
|
239 |
-
be similar in spirit to the present version, but may differ in detail to
|
240 |
-
address new problems or concerns.
|
241 |
-
|
242 |
-
Each version is given a distinguishing version number. If the Program
|
243 |
-
specifies a version number of this License which applies to it and "any
|
244 |
-
later version", you have the option of following the terms and conditions
|
245 |
-
either of that version or of any later version published by the Free
|
246 |
-
Software Foundation. If the Program does not specify a version number of
|
247 |
-
this License, you may choose any version ever published by the Free Software
|
248 |
-
Foundation.
|
249 |
-
|
250 |
-
10. If you wish to incorporate parts of the Program into other free
|
251 |
-
programs whose distribution conditions are different, write to the author
|
252 |
-
to ask for permission. For software which is copyrighted by the Free
|
253 |
-
Software Foundation, write to the Free Software Foundation; we sometimes
|
254 |
-
make exceptions for this. Our decision will be guided by the two goals
|
255 |
-
of preserving the free status of all derivatives of our free software and
|
256 |
-
of promoting the sharing and reuse of software generally.
|
257 |
-
|
258 |
-
NO WARRANTY
|
259 |
-
|
260 |
-
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261 |
-
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
262 |
-
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
263 |
-
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
264 |
-
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
265 |
-
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
266 |
-
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
267 |
-
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
268 |
-
REPAIR OR CORRECTION.
|
269 |
-
|
270 |
-
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
271 |
-
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
272 |
-
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
273 |
-
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
274 |
-
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
275 |
-
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
276 |
-
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
277 |
-
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278 |
-
POSSIBILITY OF SUCH DAMAGES.
|
279 |
-
|
280 |
-
END OF TERMS AND CONDITIONS
|
281 |
-
|
282 |
-
How to Apply These Terms to Your New Programs
|
283 |
-
|
284 |
-
If you develop a new program, and you want it to be of the greatest
|
285 |
-
possible use to the public, the best way to achieve this is to make it
|
286 |
-
free software which everyone can redistribute and change under these terms.
|
287 |
-
|
288 |
-
To do so, attach the following notices to the program. It is safest
|
289 |
-
to attach them to the start of each source file to most effectively
|
290 |
-
convey the exclusion of warranty; and each file should have at least
|
291 |
-
the "copyright" line and a pointer to where the full notice is found.
|
292 |
-
|
293 |
-
<one line to give the program's name and a brief idea of what it does.>
|
294 |
-
Copyright (C) <year> <name of author>
|
295 |
-
|
296 |
-
This program is free software; you can redistribute it and/or modify
|
297 |
-
it under the terms of the GNU General Public License as published by
|
298 |
-
the Free Software Foundation; either version 2 of the License, or
|
299 |
-
(at your option) any later version.
|
300 |
-
|
301 |
-
This program is distributed in the hope that it will be useful,
|
302 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
303 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304 |
-
GNU General Public License for more details.
|
305 |
-
|
306 |
-
You should have received a copy of the GNU General Public License along
|
307 |
-
with this program; if not, write to the Free Software Foundation, Inc.,
|
308 |
-
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
309 |
-
|
310 |
-
Also add information on how to contact you by electronic and paper mail.
|
311 |
-
|
312 |
-
If the program is interactive, make it output a short notice like this
|
313 |
-
when it starts in an interactive mode:
|
314 |
-
|
315 |
-
Gnomovision version 69, Copyright (C) year name of author
|
316 |
-
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
317 |
-
This is free software, and you are welcome to redistribute it
|
318 |
-
under certain conditions; type `show c' for details.
|
319 |
-
|
320 |
-
The hypothetical commands `show w' and `show c' should show the appropriate
|
321 |
-
parts of the General Public License. Of course, the commands you use may
|
322 |
-
be called something other than `show w' and `show c'; they could even be
|
323 |
-
mouse-clicks or menu items--whatever suits your program.
|
324 |
-
|
325 |
-
You should also get your employer (if you work as a programmer) or your
|
326 |
-
school, if any, to sign a "copyright disclaimer" for the program, if
|
327 |
-
necessary. Here is a sample; alter the names:
|
328 |
-
|
329 |
-
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
330 |
-
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
331 |
-
|
332 |
-
<signature of Ty Coon>, 1 April 1989
|
333 |
-
Ty Coon, President of Vice
|
334 |
-
|
335 |
-
This General Public License does not permit incorporating your program into
|
336 |
-
proprietary programs. If your program is a subroutine library, you may
|
337 |
-
consider it more useful to permit linking proprietary applications with the
|
338 |
-
library. If this is what you want to do, use the GNU Lesser General
|
339 |
Public License instead of this License.
|
1 |
+
GNU GENERAL PUBLIC LICENSE
|
2 |
+
Version 2, June 1991
|
3 |
+
|
4 |
+
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
5 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6 |
+
Everyone is permitted to copy and distribute verbatim copies
|
7 |
+
of this license document, but changing it is not allowed.
|
8 |
+
|
9 |
+
Preamble
|
10 |
+
|
11 |
+
The licenses for most software are designed to take away your
|
12 |
+
freedom to share and change it. By contrast, the GNU General Public
|
13 |
+
License is intended to guarantee your freedom to share and change free
|
14 |
+
software--to make sure the software is free for all its users. This
|
15 |
+
General Public License applies to most of the Free Software
|
16 |
+
Foundation's software and to any other program whose authors commit to
|
17 |
+
using it. (Some other Free Software Foundation software is covered by
|
18 |
+
the GNU Lesser General Public License instead.) You can apply it to
|
19 |
+
your programs, too.
|
20 |
+
|
21 |
+
When we speak of free software, we are referring to freedom, not
|
22 |
+
price. Our General Public Licenses are designed to make sure that you
|
23 |
+
have the freedom to distribute copies of free software (and charge for
|
24 |
+
this service if you wish), that you receive source code or can get it
|
25 |
+
if you want it, that you can change the software or use pieces of it
|
26 |
+
in new free programs; and that you know you can do these things.
|
27 |
+
|
28 |
+
To protect your rights, we need to make restrictions that forbid
|
29 |
+
anyone to deny you these rights or to ask you to surrender the rights.
|
30 |
+
These restrictions translate to certain responsibilities for you if you
|
31 |
+
distribute copies of the software, or if you modify it.
|
32 |
+
|
33 |
+
For example, if you distribute copies of such a program, whether
|
34 |
+
gratis or for a fee, you must give the recipients all the rights that
|
35 |
+
you have. You must make sure that they, too, receive or can get the
|
36 |
+
source code. And you must show them these terms so they know their
|
37 |
+
rights.
|
38 |
+
|
39 |
+
We protect your rights with two steps: (1) copyright the software, and
|
40 |
+
(2) offer you this license which gives you legal permission to copy,
|
41 |
+
distribute and/or modify the software.
|
42 |
+
|
43 |
+
Also, for each author's protection and ours, we want to make certain
|
44 |
+
that everyone understands that there is no warranty for this free
|
45 |
+
software. If the software is modified by someone else and passed on, we
|
46 |
+
want its recipients to know that what they have is not the original, so
|
47 |
+
that any problems introduced by others will not reflect on the original
|
48 |
+
authors' reputations.
|
49 |
+
|
50 |
+
Finally, any free program is threatened constantly by software
|
51 |
+
patents. We wish to avoid the danger that redistributors of a free
|
52 |
+
program will individually obtain patent licenses, in effect making the
|
53 |
+
program proprietary. To prevent this, we have made it clear that any
|
54 |
+
patent must be licensed for everyone's free use or not licensed at all.
|
55 |
+
|
56 |
+
The precise terms and conditions for copying, distribution and
|
57 |
+
modification follow.
|
58 |
+
|
59 |
+
GNU GENERAL PUBLIC LICENSE
|
60 |
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61 |
+
|
62 |
+
0. This License applies to any program or other work which contains
|
63 |
+
a notice placed by the copyright holder saying it may be distributed
|
64 |
+
under the terms of this General Public License. The "Program", below,
|
65 |
+
refers to any such program or work, and a "work based on the Program"
|
66 |
+
means either the Program or any derivative work under copyright law:
|
67 |
+
that is to say, a work containing the Program or a portion of it,
|
68 |
+
either verbatim or with modifications and/or translated into another
|
69 |
+
language. (Hereinafter, translation is included without limitation in
|
70 |
+
the term "modification".) Each licensee is addressed as "you".
|
71 |
+
|
72 |
+
Activities other than copying, distribution and modification are not
|
73 |
+
covered by this License; they are outside its scope. The act of
|
74 |
+
running the Program is not restricted, and the output from the Program
|
75 |
+
is covered only if its contents constitute a work based on the
|
76 |
+
Program (independent of having been made by running the Program).
|
77 |
+
Whether that is true depends on what the Program does.
|
78 |
+
|
79 |
+
1. You may copy and distribute verbatim copies of the Program's
|
80 |
+
source code as you receive it, in any medium, provided that you
|
81 |
+
conspicuously and appropriately publish on each copy an appropriate
|
82 |
+
copyright notice and disclaimer of warranty; keep intact all the
|
83 |
+
notices that refer to this License and to the absence of any warranty;
|
84 |
+
and give any other recipients of the Program a copy of this License
|
85 |
+
along with the Program.
|
86 |
+
|
87 |
+
You may charge a fee for the physical act of transferring a copy, and
|
88 |
+
you may at your option offer warranty protection in exchange for a fee.
|
89 |
+
|
90 |
+
2. You may modify your copy or copies of the Program or any portion
|
91 |
+
of it, thus forming a work based on the Program, and copy and
|
92 |
+
distribute such modifications or work under the terms of Section 1
|
93 |
+
above, provided that you also meet all of these conditions:
|
94 |
+
|
95 |
+
a) You must cause the modified files to carry prominent notices
|
96 |
+
stating that you changed the files and the date of any change.
|
97 |
+
|
98 |
+
b) You must cause any work that you distribute or publish, that in
|
99 |
+
whole or in part contains or is derived from the Program or any
|
100 |
+
part thereof, to be licensed as a whole at no charge to all third
|
101 |
+
parties under the terms of this License.
|
102 |
+
|
103 |
+
c) If the modified program normally reads commands interactively
|
104 |
+
when run, you must cause it, when started running for such
|
105 |
+
interactive use in the most ordinary way, to print or display an
|
106 |
+
announcement including an appropriate copyright notice and a
|
107 |
+
notice that there is no warranty (or else, saying that you provide
|
108 |
+
a warranty) and that users may redistribute the program under
|
109 |
+
these conditions, and telling the user how to view a copy of this
|
110 |
+
License. (Exception: if the Program itself is interactive but
|
111 |
+
does not normally print such an announcement, your work based on
|
112 |
+
the Program is not required to print an announcement.)
|
113 |
+
|
114 |
+
These requirements apply to the modified work as a whole. If
|
115 |
+
identifiable sections of that work are not derived from the Program,
|
116 |
+
and can be reasonably considered independent and separate works in
|
117 |
+
themselves, then this License, and its terms, do not apply to those
|
118 |
+
sections when you distribute them as separate works. But when you
|
119 |
+
distribute the same sections as part of a whole which is a work based
|
120 |
+
on the Program, the distribution of the whole must be on the terms of
|
121 |
+
this License, whose permissions for other licensees extend to the
|
122 |
+
entire whole, and thus to each and every part regardless of who wrote it.
|
123 |
+
|
124 |
+
Thus, it is not the intent of this section to claim rights or contest
|
125 |
+
your rights to work written entirely by you; rather, the intent is to
|
126 |
+
exercise the right to control the distribution of derivative or
|
127 |
+
collective works based on the Program.
|
128 |
+
|
129 |
+
In addition, mere aggregation of another work not based on the Program
|
130 |
+
with the Program (or with a work based on the Program) on a volume of
|
131 |
+
a storage or distribution medium does not bring the other work under
|
132 |
+
the scope of this License.
|
133 |
+
|
134 |
+
3. You may copy and distribute the Program (or a work based on it,
|
135 |
+
under Section 2) in object code or executable form under the terms of
|
136 |
+
Sections 1 and 2 above provided that you also do one of the following:
|
137 |
+
|
138 |
+
a) Accompany it with the complete corresponding machine-readable
|
139 |
+
source code, which must be distributed under the terms of Sections
|
140 |
+
1 and 2 above on a medium customarily used for software interchange; or,
|
141 |
+
|
142 |
+
b) Accompany it with a written offer, valid for at least three
|
143 |
+
years, to give any third party, for a charge no more than your
|
144 |
+
cost of physically performing source distribution, a complete
|
145 |
+
machine-readable copy of the corresponding source code, to be
|
146 |
+
distributed under the terms of Sections 1 and 2 above on a medium
|
147 |
+
customarily used for software interchange; or,
|
148 |
+
|
149 |
+
c) Accompany it with the information you received as to the offer
|
150 |
+
to distribute corresponding source code. (This alternative is
|
151 |
+
allowed only for noncommercial distribution and only if you
|
152 |
+
received the program in object code or executable form with such
|
153 |
+
an offer, in accord with Subsection b above.)
|
154 |
+
|
155 |
+
The source code for a work means the preferred form of the work for
|
156 |
+
making modifications to it. For an executable work, complete source
|
157 |
+
code means all the source code for all modules it contains, plus any
|
158 |
+
associated interface definition files, plus the scripts used to
|
159 |
+
control compilation and installation of the executable. However, as a
|
160 |
+
special exception, the source code distributed need not include
|
161 |
+
anything that is normally distributed (in either source or binary
|
162 |
+
form) with the major components (compiler, kernel, and so on) of the
|
163 |
+
operating system on which the executable runs, unless that component
|
164 |
+
itself accompanies the executable.
|
165 |
+
|
166 |
+
If distribution of executable or object code is made by offering
|
167 |
+
access to copy from a designated place, then offering equivalent
|
168 |
+
access to copy the source code from the same place counts as
|
169 |
+
distribution of the source code, even though third parties are not
|
170 |
+
compelled to copy the source along with the object code.
|
171 |
+
|
172 |
+
4. You may not copy, modify, sublicense, or distribute the Program
|
173 |
+
except as expressly provided under this License. Any attempt
|
174 |
+
otherwise to copy, modify, sublicense or distribute the Program is
|
175 |
+
void, and will automatically terminate your rights under this License.
|
176 |
+
However, parties who have received copies, or rights, from you under
|
177 |
+
this License will not have their licenses terminated so long as such
|
178 |
+
parties remain in full compliance.
|
179 |
+
|
180 |
+
5. You are not required to accept this License, since you have not
|
181 |
+
signed it. However, nothing else grants you permission to modify or
|
182 |
+
distribute the Program or its derivative works. These actions are
|
183 |
+
prohibited by law if you do not accept this License. Therefore, by
|
184 |
+
modifying or distributing the Program (or any work based on the
|
185 |
+
Program), you indicate your acceptance of this License to do so, and
|
186 |
+
all its terms and conditions for copying, distributing or modifying
|
187 |
+
the Program or works based on it.
|
188 |
+
|
189 |
+
6. Each time you redistribute the Program (or any work based on the
|
190 |
+
Program), the recipient automatically receives a license from the
|
191 |
+
original licensor to copy, distribute or modify the Program subject to
|
192 |
+
these terms and conditions. You may not impose any further
|
193 |
+
restrictions on the recipients' exercise of the rights granted herein.
|
194 |
+
You are not responsible for enforcing compliance by third parties to
|
195 |
+
this License.
|
196 |
+
|
197 |
+
7. If, as a consequence of a court judgment or allegation of patent
|
198 |
+
infringement or for any other reason (not limited to patent issues),
|
199 |
+
conditions are imposed on you (whether by court order, agreement or
|
200 |
+
otherwise) that contradict the conditions of this License, they do not
|
201 |
+
excuse you from the conditions of this License. If you cannot
|
202 |
+
distribute so as to satisfy simultaneously your obligations under this
|
203 |
+
License and any other pertinent obligations, then as a consequence you
|
204 |
+
may not distribute the Program at all. For example, if a patent
|
205 |
+
license would not permit royalty-free redistribution of the Program by
|
206 |
+
all those who receive copies directly or indirectly through you, then
|
207 |
+
the only way you could satisfy both it and this License would be to
|
208 |
+
refrain entirely from distribution of the Program.
|
209 |
+
|
210 |
+
If any portion of this section is held invalid or unenforceable under
|
211 |
+
any particular circumstance, the balance of the section is intended to
|
212 |
+
apply and the section as a whole is intended to apply in other
|
213 |
+
circumstances.
|
214 |
+
|
215 |
+
It is not the purpose of this section to induce you to infringe any
|
216 |
+
patents or other property right claims or to contest validity of any
|
217 |
+
such claims; this section has the sole purpose of protecting the
|
218 |
+
integrity of the free software distribution system, which is
|
219 |
+
implemented by public license practices. Many people have made
|
220 |
+
generous contributions to the wide range of software distributed
|
221 |
+
through that system in reliance on consistent application of that
|
222 |
+
system; it is up to the author/donor to decide if he or she is willing
|
223 |
+
to distribute software through any other system and a licensee cannot
|
224 |
+
impose that choice.
|
225 |
+
|
226 |
+
This section is intended to make thoroughly clear what is believed to
|
227 |
+
be a consequence of the rest of this License.
|
228 |
+
|
229 |
+
8. If the distribution and/or use of the Program is restricted in
|
230 |
+
certain countries either by patents or by copyrighted interfaces, the
|
231 |
+
original copyright holder who places the Program under this License
|
232 |
+
may add an explicit geographical distribution limitation excluding
|
233 |
+
those countries, so that distribution is permitted only in or among
|
234 |
+
countries not thus excluded. In such case, this License incorporates
|
235 |
+
the limitation as if written in the body of this License.
|
236 |
+
|
237 |
+
9. The Free Software Foundation may publish revised and/or new versions
|
238 |
+
of the General Public License from time to time. Such new versions will
|
239 |
+
be similar in spirit to the present version, but may differ in detail to
|
240 |
+
address new problems or concerns.
|
241 |
+
|
242 |
+
Each version is given a distinguishing version number. If the Program
|
243 |
+
specifies a version number of this License which applies to it and "any
|
244 |
+
later version", you have the option of following the terms and conditions
|
245 |
+
either of that version or of any later version published by the Free
|
246 |
+
Software Foundation. If the Program does not specify a version number of
|
247 |
+
this License, you may choose any version ever published by the Free Software
|
248 |
+
Foundation.
|
249 |
+
|
250 |
+
10. If you wish to incorporate parts of the Program into other free
|
251 |
+
programs whose distribution conditions are different, write to the author
|
252 |
+
to ask for permission. For software which is copyrighted by the Free
|
253 |
+
Software Foundation, write to the Free Software Foundation; we sometimes
|
254 |
+
make exceptions for this. Our decision will be guided by the two goals
|
255 |
+
of preserving the free status of all derivatives of our free software and
|
256 |
+
of promoting the sharing and reuse of software generally.
|
257 |
+
|
258 |
+
NO WARRANTY
|
259 |
+
|
260 |
+
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261 |
+
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
262 |
+
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
263 |
+
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
264 |
+
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
265 |
+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
266 |
+
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
267 |
+
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
268 |
+
REPAIR OR CORRECTION.
|
269 |
+
|
270 |
+
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
271 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
272 |
+
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
273 |
+
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
274 |
+
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
275 |
+
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
276 |
+
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
277 |
+
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278 |
+
POSSIBILITY OF SUCH DAMAGES.
|
279 |
+
|
280 |
+
END OF TERMS AND CONDITIONS
|
281 |
+
|
282 |
+
How to Apply These Terms to Your New Programs
|
283 |
+
|
284 |
+
If you develop a new program, and you want it to be of the greatest
|
285 |
+
possible use to the public, the best way to achieve this is to make it
|
286 |
+
free software which everyone can redistribute and change under these terms.
|
287 |
+
|
288 |
+
To do so, attach the following notices to the program. It is safest
|
289 |
+
to attach them to the start of each source file to most effectively
|
290 |
+
convey the exclusion of warranty; and each file should have at least
|
291 |
+
the "copyright" line and a pointer to where the full notice is found.
|
292 |
+
|
293 |
+
<one line to give the program's name and a brief idea of what it does.>
|
294 |
+
Copyright (C) <year> <name of author>
|
295 |
+
|
296 |
+
This program is free software; you can redistribute it and/or modify
|
297 |
+
it under the terms of the GNU General Public License as published by
|
298 |
+
the Free Software Foundation; either version 2 of the License, or
|
299 |
+
(at your option) any later version.
|
300 |
+
|
301 |
+
This program is distributed in the hope that it will be useful,
|
302 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
303 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304 |
+
GNU General Public License for more details.
|
305 |
+
|
306 |
+
You should have received a copy of the GNU General Public License along
|
307 |
+
with this program; if not, write to the Free Software Foundation, Inc.,
|
308 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
309 |
+
|
310 |
+
Also add information on how to contact you by electronic and paper mail.
|
311 |
+
|
312 |
+
If the program is interactive, make it output a short notice like this
|
313 |
+
when it starts in an interactive mode:
|
314 |
+
|
315 |
+
Gnomovision version 69, Copyright (C) year name of author
|
316 |
+
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
317 |
+
This is free software, and you are welcome to redistribute it
|
318 |
+
under certain conditions; type `show c' for details.
|
319 |
+
|
320 |
+
The hypothetical commands `show w' and `show c' should show the appropriate
|
321 |
+
parts of the General Public License. Of course, the commands you use may
|
322 |
+
be called something other than `show w' and `show c'; they could even be
|
323 |
+
mouse-clicks or menu items--whatever suits your program.
|
324 |
+
|
325 |
+
You should also get your employer (if you work as a programmer) or your
|
326 |
+
school, if any, to sign a "copyright disclaimer" for the program, if
|
327 |
+
necessary. Here is a sample; alter the names:
|
328 |
+
|
329 |
+
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
330 |
+
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
331 |
+
|
332 |
+
<signature of Ty Coon>, 1 April 1989
|
333 |
+
Ty Coon, President of Vice
|
334 |
+
|
335 |
+
This General Public License does not permit incorporating your program into
|
336 |
+
proprietary programs. If your program is a subroutine library, you may
|
337 |
+
consider it more useful to permit linking proprietary applications with the
|
338 |
+
library. If this is what you want to do, use the GNU Lesser General
|
339 |
Public License instead of this License.
|
README.md
CHANGED
@@ -1,363 +1,363 @@
|
|
1 |
-
![Plugin Banner](https://s3.amazonaws.com/foogallery/banner-772x250.jpg)
|
2 |
-
|
3 |
-
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fooplugins/foogallery/badges/quality-score.png?b=develop)](https://scrutinizer-ci.com/g/fooplugins/foogallery/?branch=develop)
|
4 |
-
# FooGallery - Image Gallery WordPress Plugin #
|
5 |
-
**Contributors:** bradvin, steveush, fooplugins
|
6 |
-
|
7 |
-
**Donate link:** http://fooplugins.com
|
8 |
-
|
9 |
-
**Tags:** gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified image gallery, video gallery, photography, photographer, retina
|
10 |
-
|
11 |
-
**Requires at least:** 3.9
|
12 |
-
|
13 |
-
**Tested up to:** 4.8.3
|
14 |
-
|
15 |
-
**Stable tag:** trunk
|
16 |
-
|
17 |
-
**License:** GPLv2 or later
|
18 |
-
|
19 |
-
**License URI:** http://www.gnu.org/licenses/gpl-2.0.html
|
20 |
-
|
21 |
-
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use.
|
22 |
-
|
23 |
-
## Description ##
|
24 |
-
|
25 |
-
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use. Built to be highly configurable and extensible for developers or freelancers.
|
26 |
-
|
27 |
-
[View the Foo Gallery Homepage & DEMO](http://foo.gallery/)
|
28 |
-
|
29 |
-
**Major changes in 1.4.1!**
|
30 |
-
|
31 |
-
There have been major updates to the gallery templates in v1.4.1. If you have updated, please test your galleries.
|
32 |
-
|
33 |
-
**Retina Support**
|
34 |
-
|
35 |
-
Foo Gallery now comes with built-in support for higher quality thumbnails on retina-enabled displays. No more blurry thumbnails, just crisp thumbnails that look amazing on all devices.
|
36 |
-
|
37 |
-
**Video Support**
|
38 |
-
|
39 |
-
Foo Gallery now supports the creation of video galleries with the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)! Create galleries with both images and videos mixed!
|
40 |
-
|
41 |
-
**Albums Built In**
|
42 |
-
|
43 |
-
Albums are now built in as an extension. Simply head over to the extensions page and activate the albums extension. A new menu item will appear that allows you to add albums just as easily as galleries.
|
44 |
-
|
45 |
-
**Built For Developers**
|
46 |
-
|
47 |
-
Foo Gallery was designed to be the most developer-friendly gallery plugin available for WordPress. It was also built on top of a solid extension framework, which means different functionality is separated out into different areas in the codebase. It also means the core plugin is lightweight, but still allowing for the most flexibility.
|
48 |
-
|
49 |
-
**Features**
|
50 |
-
|
51 |
-
* Retina thumbnail support
|
52 |
-
* Add videos to galleries (via the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo))
|
53 |
-
* Albums built-in! (Activate the albums extension)
|
54 |
-
* Gallery custom post type
|
55 |
-
* Use built-in media library to manage images
|
56 |
-
* Drag n Drop reordering of images and galleries
|
57 |
-
* Built-in gallery templates
|
58 |
-
* Built-in support for FooBox
|
59 |
-
* Built-in Extensions Store
|
60 |
-
* Built on an extension framework
|
61 |
-
* Custom CSS for both galleries and albums
|
62 |
-
* Copy to clipboard shortcodes
|
63 |
-
* Visual shortcodes in rich text editor
|
64 |
-
* Gallery picker to insert shortcode
|
65 |
-
* Page usage metabox with one-click gallery page creation
|
66 |
-
* NextGen importer tool (albums and galleries)
|
67 |
-
* Multisite Support
|
68 |
-
* plus many, many more
|
69 |
-
|
70 |
-
**Gallery Demos**
|
71 |
-
|
72 |
-
* Responsive Image Gallery - [demo](http://foo.gallery/demos/responsive-image-gallery/)
|
73 |
-
* FooGrid Image Gallery - [light demo](http://foo.gallery/demos/foogrid-light/) - [dark demo](http://foo.gallery/demos/foogrid-dark/)
|
74 |
-
* Image Viewer Gallery - [light demo](http://foo.gallery/demos/image-viewer-gallery/) - [dark demo](http://foo.gallery/demos/image-viewer-gallery-dark/)
|
75 |
-
* Masonry Gallery - [demo](http://foo.gallery/demos/masonry-image-gallery/)
|
76 |
-
* Simple Portfolio - [demo](http://foo.gallery/demos/simple-portfolio/)
|
77 |
-
* Justified Gallery ([http://miromannino.github.io/Justified-Gallery](http://miromannino.github.io/Justified-Gallery/)) - [demo](http://foo.gallery/demos/justified-gallery/)
|
78 |
-
* Single Thumbnail Gallery - [demo](http://foo.gallery/demos/single-thumbnail-gallery/)
|
79 |
-
* Polaroid Gallery - [demo](http://foo.gallery/demos/polaroid-image-gallery/)
|
80 |
-
* Cube Gallery - [demo](http://foo.gallery/demos/cube-gallery/) - [Buy Now!](http://fooplugins.com/plugins/cube-gallery-template/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
81 |
-
* Mixed (Images + Videos) - [demo](http://foo.gallery/demos/mixed/)
|
82 |
-
|
83 |
-
**Caption Demos**
|
84 |
-
|
85 |
-
* Simple Hover Captions - [demo](http://foo.gallery/demos/captions-simple-hover/)
|
86 |
-
* Always Visible Captions - [demo](http://foo.gallery/demos/responsive-image-gallery-captions/)
|
87 |
-
* Drop Captions - [demo](http://foo.gallery/demos/captions-drop/)
|
88 |
-
* Fade Captions - [demo](http://foo.gallery/demos/captions-fade/)
|
89 |
-
* Push Captions - [demo](http://foo.gallery/demos/captions-push/)
|
90 |
-
|
91 |
-
**Album Demos**
|
92 |
-
|
93 |
-
* Responsive Album Layout - [demo](http://foo.gallery/demos/responsive-album-layout/)
|
94 |
-
* All-in-one Stack Album - [demo](http://foo.gallery/demos/all-in-one-stack-album/)
|
95 |
-
|
96 |
-
**Videos Demos**
|
97 |
-
|
98 |
-
* Vertical Video Slider - [demo](http://foo.gallery/demos/video-slider-vertical/) - [full-width demo](http://foo.gallery/demos/video-slider-vertical-full-width/)
|
99 |
-
* Horizontal Video Slider - [demo](http://foo.gallery/demos/video-slider-horizontal/) - [custom colors](http://foo.gallery/demos/video-slider-custom-theme/)
|
100 |
-
|
101 |
-
**Extensions**
|
102 |
-
|
103 |
-
* [FooVideo](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
104 |
-
* Albums (bundled)
|
105 |
-
* Default Gallery Templates (bundled)
|
106 |
-
* NextGen Gallery and Album Importer (bundled)
|
107 |
-
* [FooGrid Gallery](http://fooplugins.com/plugins/foogrid/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
108 |
-
* [Cube Gallery](http://fooplugins.com/plugins/cube-gallery-template/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
109 |
-
* [Custom Branding](http://fooplugins.com/plugins/foogallery-branding/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
110 |
-
* [FooBox PRO Lightbox](http://fooplugins.com/plugins/foobox/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
111 |
-
* [FooBox FREE Lightbox](http://wordpress.org/plugins/foobox-image-lightbox)
|
112 |
-
* [Owl Carousel Template](http://wordpress.org/plugins/foogallery-owl-carousel-template/)
|
113 |
-
* [ZOOM Template](http://wordpress.org/plugins/foogallery-zoom-template/)
|
114 |
-
* [Thirsty Affiliates](http://wordpress.org/plugins/thirstyaffiliates-for-foogallery-extension/)
|
115 |
-
* [Polaroid Template](https://github.com/fooplugins/foogallery-polaroid-template)
|
116 |
-
* [Use Media Menu](https://github.com/fooplugins/foogallery-media-menu)
|
117 |
-
* Build your own!!!
|
118 |
-
|
119 |
-
**Documentation**
|
120 |
-
|
121 |
-
* [FooGallery 101](http://docs.fooplugins.com/foogallery/foogallery-101/)
|
122 |
-
* [Developer 101](http://docs.fooplugins.com/foogallery/foogallery-developers-101/)
|
123 |
-
* [Actions and Filters](http://docs.fooplugins.com/foogallery/actions-filters/)
|
124 |
-
|
125 |
-
**Contribute**
|
126 |
-
|
127 |
-
FooGallery is hosted on [GitHub](https://github.com/fooplugins/foogallery). If you find a bug, please [create an issue](https://github.com/fooplugins/foogallery/issues).
|
128 |
-
|
129 |
-
## Installation ##
|
130 |
-
|
131 |
-
1. Upload `foogallery` folder to the `/wp-content/plugins/` directory
|
132 |
-
2. Activate the plugin through the 'Plugins' menu in WordPress
|
133 |
-
3. You will be redirected to the FooGallery Help page to get your started
|
134 |
-
|
135 |
-
## Frequently Asked Questions ##
|
136 |
-
|
137 |
-
### Why are my thumbnails so blurry? ###
|
138 |
-
|
139 |
-
Have you enabled retina support for your galleries? Displays with retina support can show better quality thumbnails when retina support is enabled. To enable retina support, edit the gallery and locate the Retina Support metabox.
|
140 |
-
|
141 |
-
### Can I add videos to my galleries? ###
|
142 |
-
|
143 |
-
Yes, you need to use the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
144 |
-
|
145 |
-
### How do I get albums working? ###
|
146 |
-
|
147 |
-
Simply go to the FooGallery extensions page and activate the Albums extension. If you do not see a button to activate the albums extension, reload the extensions list by clicking the reload button.
|
148 |
-
|
149 |
-
### Can I build an extension? ###
|
150 |
-
|
151 |
-
Hell, yes! Check out our [developer page](http://foo.gallery/developers/)
|
152 |
-
|
153 |
-
## Screenshots ##
|
154 |
-
|
155 |
-
[View screenshots](https://wordpress.org/plugins/foogallery/screenshots/)
|
156 |
-
|
157 |
-
## Upgrade Notice ##
|
158 |
-
|
159 |
-
Update now to support FooVideo and many other improvements!
|
160 |
-
|
161 |
-
## Changelog ##
|
162 |
-
|
163 |
-
### 1.4.5 ###
|
164 |
-
|
165 |
-
* Fix : Lazy loading - scrolling galleries in certain scenarios were not loading thumbs
|
166 |
-
* Fix : Galleries that were hidden on page load were not displaying correctly when shown
|
167 |
-
* Fix : Default gallery settings were not being applied to new galleries
|
168 |
-
* New : shortcode arguments applied to gallery for common fields
|
169 |
-
* New : HTML caching is disabled by default now!
|
170 |
-
* Updated to latest client side JS and CSS
|
171 |
-
|
172 |
-
### 1.4.4 ###
|
173 |
-
|
174 |
-
* Fix : upgrade was calling underfined function
|
175 |
-
|
176 |
-
### 1.4.3 ###
|
177 |
-
|
178 |
-
* Fix : Justify gallery template issues
|
179 |
-
* Fix : Masonry gallery template issues
|
180 |
-
* Fix : Caption description not hidden when supposed to
|
181 |
-
* Fix : Complete rework of thumbnail dimension logic!
|
182 |
-
* Fix : Redirection bug on activation
|
183 |
-
* Fix : Added checks for galleries causing PHP warnings
|
184 |
-
* New : Last Row setting in Justify gallery template
|
185 |
-
* New : Alignment setting in Simple Portfolio gallery template
|
186 |
-
* New : Added more checks after load to ensure gallery layout is correct
|
187 |
-
* Updated to Freemius SDK 1.2.2.10
|
188 |
-
* Updated to latest client side JS and CSS
|
189 |
-
|
190 |
-
### 1.3.28 ###
|
191 |
-
|
192 |
-
* Complete rewrite of the built-in gallery templates
|
193 |
-
* New : lazy loading
|
194 |
-
* New : simple pagination
|
195 |
-
* New : Live Previews when editing a gallery
|
196 |
-
* 260+ updates, changes and bug fixes
|
197 |
-
|
198 |
-
### 1.3.8 ###
|
199 |
-
|
200 |
-
* New : Built in support for FooBox, fixing a lot of issues where FooBox option is not available
|
201 |
-
* Fix : More reliable extension active status on extensions listing
|
202 |
-
* Fix : More obvious wording for 3rd party plugins when they are not installed
|
203 |
-
|
204 |
-
### 1.3.7 ###
|
205 |
-
|
206 |
-
* Fix : Activation redirect bug showing "Sorry, you are not allowed to access this page."
|
207 |
-
|
208 |
-
### 1.3.6 ###
|
209 |
-
|
210 |
-
* New : Freemius integration!
|
211 |
-
* New : Added support for the Responsive Lightbox by dFactory
|
212 |
-
* New : New custom class field for an attachment
|
213 |
-
* New : Added more system info for better debugging when there are server issues
|
214 |
-
* Fix : Visual editor FooGallery edit button
|
215 |
-
* Fix : Image Viewer hover effect none now works as expected
|
216 |
-
* Fix : Disable HTML caching for randomly ordered galleries
|
217 |
-
|
218 |
-
### 1.2.20 ###
|
219 |
-
|
220 |
-
* New : Force Use Original thumb setting on gallery edit page
|
221 |
-
* Fix : PHP warning from thumbnail class since 1.2.19
|
222 |
-
|
223 |
-
### 1.2.19 ###
|
224 |
-
|
225 |
-
* New : Gallery output caching! Saves database requests improving load time
|
226 |
-
* New : Gallery usage column in admin gallery listing
|
227 |
-
* New : Better support for animated gifs
|
228 |
-
* New : Hover icons retina support
|
229 |
-
* New : Uninstall button on settings
|
230 |
-
* New : Save thumb dimensions per attachment. (needed in future versions)
|
231 |
-
* Fix : Extensions refactor and many issues resolved
|
232 |
-
* Fix : Better retina support for all templates
|
233 |
-
* Fix : Colorize / Greyscale CSS filters
|
234 |
-
* Fix : Even better wpthumb compatibility
|
235 |
-
|
236 |
-
### 1.2.18 ###
|
237 |
-
|
238 |
-
* Fix : Handle no settings in retina metabox
|
239 |
-
|
240 |
-
### 1.2.17 ###
|
241 |
-
|
242 |
-
* New : Retina support - metabox per gallery and default settings
|
243 |
-
* New : Attachment datasources - backend changes for how images are used in a gallery. (This will allow for new external sources in the future)
|
244 |
-
* New : Caption color settings in Simple portfolio gallery template
|
245 |
-
* New : Updated to latest Justified Gallery
|
246 |
-
* Fix : Better wpthumb compatibility
|
247 |
-
|
248 |
-
### 1.2.16 ###
|
249 |
-
|
250 |
-
* Fix : Yoast SEO Sitemaps fatal error with deleted galleries
|
251 |
-
* Fix : Updating pages with deleted galleries throws php warnings
|
252 |
-
|
253 |
-
### 1.2.15 ###
|
254 |
-
|
255 |
-
* Fix : Album admin CSS issues in WP 4.6
|
256 |
-
* Fix : Masonry layout issues in WP 4.6
|
257 |
-
* Fix : Media attachment fields not updating
|
258 |
-
* Fix : Better support for IE10
|
259 |
-
* New : Thumbnail generation test admin notice and settings
|
260 |
-
|
261 |
-
### 1.2.13 ###
|
262 |
-
|
263 |
-
* Fix : Shortcode replacing content in visual editor
|
264 |
-
* Fix : Gallery hover effect of None being ignored
|
265 |
-
* New : ImageViewer language settings for 'Prev', 'Next' & 'of'
|
266 |
-
* New : Setting to use original thumbnails if available
|
267 |
-
|
268 |
-
### 1.2.12 ###
|
269 |
-
|
270 |
-
* Fix : Simple Portfolio missing captions fix
|
271 |
-
|
272 |
-
### 1.2.11 ###
|
273 |
-
|
274 |
-
* Fix : Simple Portfolio undefined function fix
|
275 |
-
|
276 |
-
### 1.2.10 ###
|
277 |
-
|
278 |
-
* New : support for multiple admin JS and CSS assets for gallery templates
|
279 |
-
* New : Added setting to choose Caption Description source
|
280 |
-
* New : Crop position can be chosen for attachments
|
281 |
-
* New : Albums gallery details modal for setting a gallery URL
|
282 |
-
* New : Better shortcode preview in editor
|
283 |
-
* New : Editor button now supported if multiple editors exist
|
284 |
-
* Fix : Better No-Link support for gallery templates
|
285 |
-
* Fix : Compatible with Unyson plugin
|
286 |
-
* Fix : Compatible with Advanced Custom Fields
|
287 |
-
* Fix : Simple Portfolio fixes and tweaks
|
288 |
-
* Fix : ImageViewer fixes and better browser compatibility
|
289 |
-
* Fix : Changed assets enqueue version to rather use extension version
|
290 |
-
* Fix : Album URL fix for permalinks with no trailing slashes
|
291 |
-
|
292 |
-
### 1.2.9 ###
|
293 |
-
* New : Added Image Viewer gallery template
|
294 |
-
* New : Caption support for default template
|
295 |
-
* New : Yoast SEO gallery image support!
|
296 |
-
* New : Responsive options for Masonry gallery
|
297 |
-
* New : change gallery URL slug for albums
|
298 |
-
* New : setting to turn off loading animation in default gallery
|
299 |
-
* New : French translation
|
300 |
-
* Fix : Support for WP 4.4
|
301 |
-
* Fix : All templates - moved all jQuery ready events to vanilla JS
|
302 |
-
* Fix : Many gallery template tweaks
|
303 |
-
* Fix : allow no default to be chosen in settings
|
304 |
-
|
305 |
-
### 1.2.8 ###
|
306 |
-
* Works now with Polylang translation plugin
|
307 |
-
* CSS Updates & enhancements to all gallery templates
|
308 |
-
* Password protected galleries now work as expected
|
309 |
-
* Ability to hide WYSIWYG editor button
|
310 |
-
* Updated WPThumb
|
311 |
-
* Multiple bug fixes and improvements
|
312 |
-
|
313 |
-
### 1.2.7 ###
|
314 |
-
* Bug fixes for 1.2.6 release
|
315 |
-
* Added 2 new settings to Justified Gallery template (maxRowHeight + Caption Source)
|
316 |
-
|
317 |
-
### 1.2.6 ###
|
318 |
-
* CSS load optimizations
|
319 |
-
* Updates and tweaks on all built-in gallery templates
|
320 |
-
* More robust extension loading
|
321 |
-
* More robust upgrades to FooBox PRO
|
322 |
-
* Improved copy-to-clipboard
|
323 |
-
* Added more hover effects
|
324 |
-
* Support for FooVideo
|
325 |
-
|
326 |
-
### 1.2.5 ###
|
327 |
-
* Fix for extensions being empty
|
328 |
-
* Added support for Multi-site
|
329 |
-
* Added esc_url to all places where url is rendered
|
330 |
-
* Updated to latest Justified Gallery v3.5.4
|
331 |
-
|
332 |
-
### 1.2.4 ###
|
333 |
-
* Many album template updates, enhancements and fixes
|
334 |
-
* Many gallery template tweaks and fixes
|
335 |
-
* Sort order settings for galleries and albums
|
336 |
-
* Added new Single Thumbnail Gallery template
|
337 |
-
|
338 |
-
### 1.2.1 ###
|
339 |
-
* Added setting to choose default gallery to copy settings from
|
340 |
-
* Fixed bug #45 - gallery fields not showing onload
|
341 |
-
* replaced minicolors with spectrum colorpicker
|
342 |
-
* Allow gallery fields to have a suffix
|
343 |
-
* Added function to render galleries "foogallery_render_gallery( $gallery_id )"
|
344 |
-
|
345 |
-
### 1.2.0 ###
|
346 |
-
* Added albums extension
|
347 |
-
* Added custom CSS metaboxes
|
348 |
-
* Updated Nextgen importer
|
349 |
-
* Fixed many bugs
|
350 |
-
|
351 |
-
### 1.1.8.2 ###
|
352 |
-
* Fixed "edit gallery" CSS with WP 4.0
|
353 |
-
|
354 |
-
### 1.1.8.1 ###
|
355 |
-
* Fixed "insert gallery" CSS with WP 4.0
|
356 |
-
|
357 |
-
### 1.1.8 ###
|
358 |
-
* Added 2 new gallery templates
|
359 |
-
* Added 10+ actions and filters for more customization
|
360 |
-
* Countless bug fixes and enhancements
|
361 |
-
|
362 |
-
### 1.1.7 ###
|
363 |
* first version!
|
1 |
+
![Plugin Banner](https://s3.amazonaws.com/foogallery/banner-772x250.jpg)
|
2 |
+
|
3 |
+
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fooplugins/foogallery/badges/quality-score.png?b=develop)](https://scrutinizer-ci.com/g/fooplugins/foogallery/?branch=develop)
|
4 |
+
# FooGallery - Image Gallery WordPress Plugin #
|
5 |
+
**Contributors:** bradvin, steveush, fooplugins
|
6 |
+
|
7 |
+
**Donate link:** http://fooplugins.com
|
8 |
+
|
9 |
+
**Tags:** gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified image gallery, video gallery, photography, photographer, retina
|
10 |
+
|
11 |
+
**Requires at least:** 3.9
|
12 |
+
|
13 |
+
**Tested up to:** 4.8.3
|
14 |
+
|
15 |
+
**Stable tag:** trunk
|
16 |
+
|
17 |
+
**License:** GPLv2 or later
|
18 |
+
|
19 |
+
**License URI:** http://www.gnu.org/licenses/gpl-2.0.html
|
20 |
+
|
21 |
+
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use.
|
22 |
+
|
23 |
+
## Description ##
|
24 |
+
|
25 |
+
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use. Built to be highly configurable and extensible for developers or freelancers.
|
26 |
+
|
27 |
+
[View the Foo Gallery Homepage & DEMO](http://foo.gallery/)
|
28 |
+
|
29 |
+
**Major changes in 1.4.1!**
|
30 |
+
|
31 |
+
There have been major updates to the gallery templates in v1.4.1. If you have updated, please test your galleries.
|
32 |
+
|
33 |
+
**Retina Support**
|
34 |
+
|
35 |
+
Foo Gallery now comes with built-in support for higher quality thumbnails on retina-enabled displays. No more blurry thumbnails, just crisp thumbnails that look amazing on all devices.
|
36 |
+
|
37 |
+
**Video Support**
|
38 |
+
|
39 |
+
Foo Gallery now supports the creation of video galleries with the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)! Create galleries with both images and videos mixed!
|
40 |
+
|
41 |
+
**Albums Built In**
|
42 |
+
|
43 |
+
Albums are now built in as an extension. Simply head over to the extensions page and activate the albums extension. A new menu item will appear that allows you to add albums just as easily as galleries.
|
44 |
+
|
45 |
+
**Built For Developers**
|
46 |
+
|
47 |
+
Foo Gallery was designed to be the most developer-friendly gallery plugin available for WordPress. It was also built on top of a solid extension framework, which means different functionality is separated out into different areas in the codebase. It also means the core plugin is lightweight, but still allowing for the most flexibility.
|
48 |
+
|
49 |
+
**Features**
|
50 |
+
|
51 |
+
* Retina thumbnail support
|
52 |
+
* Add videos to galleries (via the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo))
|
53 |
+
* Albums built-in! (Activate the albums extension)
|
54 |
+
* Gallery custom post type
|
55 |
+
* Use built-in media library to manage images
|
56 |
+
* Drag n Drop reordering of images and galleries
|
57 |
+
* Built-in gallery templates
|
58 |
+
* Built-in support for FooBox
|
59 |
+
* Built-in Extensions Store
|
60 |
+
* Built on an extension framework
|
61 |
+
* Custom CSS for both galleries and albums
|
62 |
+
* Copy to clipboard shortcodes
|
63 |
+
* Visual shortcodes in rich text editor
|
64 |
+
* Gallery picker to insert shortcode
|
65 |
+
* Page usage metabox with one-click gallery page creation
|
66 |
+
* NextGen importer tool (albums and galleries)
|
67 |
+
* Multisite Support
|
68 |
+
* plus many, many more
|
69 |
+
|
70 |
+
**Gallery Demos**
|
71 |
+
|
72 |
+
* Responsive Image Gallery - [demo](http://foo.gallery/demos/responsive-image-gallery/)
|
73 |
+
* FooGrid Image Gallery - [light demo](http://foo.gallery/demos/foogrid-light/) - [dark demo](http://foo.gallery/demos/foogrid-dark/)
|
74 |
+
* Image Viewer Gallery - [light demo](http://foo.gallery/demos/image-viewer-gallery/) - [dark demo](http://foo.gallery/demos/image-viewer-gallery-dark/)
|
75 |
+
* Masonry Gallery - [demo](http://foo.gallery/demos/masonry-image-gallery/)
|
76 |
+
* Simple Portfolio - [demo](http://foo.gallery/demos/simple-portfolio/)
|
77 |
+
* Justified Gallery ([http://miromannino.github.io/Justified-Gallery](http://miromannino.github.io/Justified-Gallery/)) - [demo](http://foo.gallery/demos/justified-gallery/)
|
78 |
+
* Single Thumbnail Gallery - [demo](http://foo.gallery/demos/single-thumbnail-gallery/)
|
79 |
+
* Polaroid Gallery - [demo](http://foo.gallery/demos/polaroid-image-gallery/)
|
80 |
+
* Cube Gallery - [demo](http://foo.gallery/demos/cube-gallery/) - [Buy Now!](http://fooplugins.com/plugins/cube-gallery-template/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
81 |
+
* Mixed (Images + Videos) - [demo](http://foo.gallery/demos/mixed/)
|
82 |
+
|
83 |
+
**Caption Demos**
|
84 |
+
|
85 |
+
* Simple Hover Captions - [demo](http://foo.gallery/demos/captions-simple-hover/)
|
86 |
+
* Always Visible Captions - [demo](http://foo.gallery/demos/responsive-image-gallery-captions/)
|
87 |
+
* Drop Captions - [demo](http://foo.gallery/demos/captions-drop/)
|
88 |
+
* Fade Captions - [demo](http://foo.gallery/demos/captions-fade/)
|
89 |
+
* Push Captions - [demo](http://foo.gallery/demos/captions-push/)
|
90 |
+
|
91 |
+
**Album Demos**
|
92 |
+
|
93 |
+
* Responsive Album Layout - [demo](http://foo.gallery/demos/responsive-album-layout/)
|
94 |
+
* All-in-one Stack Album - [demo](http://foo.gallery/demos/all-in-one-stack-album/)
|
95 |
+
|
96 |
+
**Videos Demos**
|
97 |
+
|
98 |
+
* Vertical Video Slider - [demo](http://foo.gallery/demos/video-slider-vertical/) - [full-width demo](http://foo.gallery/demos/video-slider-vertical-full-width/)
|
99 |
+
* Horizontal Video Slider - [demo](http://foo.gallery/demos/video-slider-horizontal/) - [custom colors](http://foo.gallery/demos/video-slider-custom-theme/)
|
100 |
+
|
101 |
+
**Extensions**
|
102 |
+
|
103 |
+
* [FooVideo](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
104 |
+
* Albums (bundled)
|
105 |
+
* Default Gallery Templates (bundled)
|
106 |
+
* NextGen Gallery and Album Importer (bundled)
|
107 |
+
* [FooGrid Gallery](http://fooplugins.com/plugins/foogrid/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
108 |
+
* [Cube Gallery](http://fooplugins.com/plugins/cube-gallery-template/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
109 |
+
* [Custom Branding](http://fooplugins.com/plugins/foogallery-branding/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
110 |
+
* [FooBox PRO Lightbox](http://fooplugins.com/plugins/foobox/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
111 |
+
* [FooBox FREE Lightbox](http://wordpress.org/plugins/foobox-image-lightbox)
|
112 |
+
* [Owl Carousel Template](http://wordpress.org/plugins/foogallery-owl-carousel-template/)
|
113 |
+
* [ZOOM Template](http://wordpress.org/plugins/foogallery-zoom-template/)
|
114 |
+
* [Thirsty Affiliates](http://wordpress.org/plugins/thirstyaffiliates-for-foogallery-extension/)
|
115 |
+
* [Polaroid Template](https://github.com/fooplugins/foogallery-polaroid-template)
|
116 |
+
* [Use Media Menu](https://github.com/fooplugins/foogallery-media-menu)
|
117 |
+
* Build your own!!!
|
118 |
+
|
119 |
+
**Documentation**
|
120 |
+
|
121 |
+
* [FooGallery 101](http://docs.fooplugins.com/foogallery/foogallery-101/)
|
122 |
+
* [Developer 101](http://docs.fooplugins.com/foogallery/foogallery-developers-101/)
|
123 |
+
* [Actions and Filters](http://docs.fooplugins.com/foogallery/actions-filters/)
|
124 |
+
|
125 |
+
**Contribute**
|
126 |
+
|
127 |
+
FooGallery is hosted on [GitHub](https://github.com/fooplugins/foogallery). If you find a bug, please [create an issue](https://github.com/fooplugins/foogallery/issues).
|
128 |
+
|
129 |
+
## Installation ##
|
130 |
+
|
131 |
+
1. Upload `foogallery` folder to the `/wp-content/plugins/` directory
|
132 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress
|
133 |
+
3. You will be redirected to the FooGallery Help page to get your started
|
134 |
+
|
135 |
+
## Frequently Asked Questions ##
|
136 |
+
|
137 |
+
### Why are my thumbnails so blurry? ###
|
138 |
+
|
139 |
+
Have you enabled retina support for your galleries? Displays with retina support can show better quality thumbnails when retina support is enabled. To enable retina support, edit the gallery and locate the Retina Support metabox.
|
140 |
+
|
141 |
+
### Can I add videos to my galleries? ###
|
142 |
+
|
143 |
+
Yes, you need to use the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
144 |
+
|
145 |
+
### How do I get albums working? ###
|
146 |
+
|
147 |
+
Simply go to the FooGallery extensions page and activate the Albums extension. If you do not see a button to activate the albums extension, reload the extensions list by clicking the reload button.
|
148 |
+
|
149 |
+
### Can I build an extension? ###
|
150 |
+
|
151 |
+
Hell, yes! Check out our [developer page](http://foo.gallery/developers/)
|
152 |
+
|
153 |
+
## Screenshots ##
|
154 |
+
|
155 |
+
[View screenshots](https://wordpress.org/plugins/foogallery/screenshots/)
|
156 |
+
|
157 |
+
## Upgrade Notice ##
|
158 |
+
|
159 |
+
Update now to support FooVideo and many other improvements!
|
160 |
+
|
161 |
+
## Changelog ##
|
162 |
+
|
163 |
+
### 1.4.5 ###
|
164 |
+
|
165 |
+
* Fix : Lazy loading - scrolling galleries in certain scenarios were not loading thumbs
|
166 |
+
* Fix : Galleries that were hidden on page load were not displaying correctly when shown
|
167 |
+
* Fix : Default gallery settings were not being applied to new galleries
|
168 |
+
* New : shortcode arguments applied to gallery for common fields
|
169 |
+
* New : HTML caching is disabled by default now!
|
170 |
+
* Updated to latest client side JS and CSS
|
171 |
+
|
172 |
+
### 1.4.4 ###
|
173 |
+
|
174 |
+
* Fix : upgrade was calling underfined function
|
175 |
+
|
176 |
+
### 1.4.3 ###
|
177 |
+
|
178 |
+
* Fix : Justify gallery template issues
|
179 |
+
* Fix : Masonry gallery template issues
|
180 |
+
* Fix : Caption description not hidden when supposed to
|
181 |
+
* Fix : Complete rework of thumbnail dimension logic!
|
182 |
+
* Fix : Redirection bug on activation
|
183 |
+
* Fix : Added checks for galleries causing PHP warnings
|
184 |
+
* New : Last Row setting in Justify gallery template
|
185 |
+
* New : Alignment setting in Simple Portfolio gallery template
|
186 |
+
* New : Added more checks after load to ensure gallery layout is correct
|
187 |
+
* Updated to Freemius SDK 1.2.2.10
|
188 |
+
* Updated to latest client side JS and CSS
|
189 |
+
|
190 |
+
### 1.3.28 ###
|
191 |
+
|
192 |
+
* Complete rewrite of the built-in gallery templates
|
193 |
+
* New : lazy loading
|
194 |
+
* New : simple pagination
|
195 |
+
* New : Live Previews when editing a gallery
|
196 |
+
* 260+ updates, changes and bug fixes
|
197 |
+
|
198 |
+
### 1.3.8 ###
|
199 |
+
|
200 |
+
* New : Built in support for FooBox, fixing a lot of issues where FooBox option is not available
|
201 |
+
* Fix : More reliable extension active status on extensions listing
|
202 |
+
* Fix : More obvious wording for 3rd party plugins when they are not installed
|
203 |
+
|
204 |
+
### 1.3.7 ###
|
205 |
+
|
206 |
+
* Fix : Activation redirect bug showing "Sorry, you are not allowed to access this page."
|
207 |
+
|
208 |
+
### 1.3.6 ###
|
209 |
+
|
210 |
+
* New : Freemius integration!
|
211 |
+
* New : Added support for the Responsive Lightbox by dFactory
|
212 |
+
* New : New custom class field for an attachment
|
213 |
+
* New : Added more system info for better debugging when there are server issues
|
214 |
+
* Fix : Visual editor FooGallery edit button
|
215 |
+
* Fix : Image Viewer hover effect none now works as expected
|
216 |
+
* Fix : Disable HTML caching for randomly ordered galleries
|
217 |
+
|
218 |
+
### 1.2.20 ###
|
219 |
+
|
220 |
+
* New : Force Use Original thumb setting on gallery edit page
|
221 |
+
* Fix : PHP warning from thumbnail class since 1.2.19
|
222 |
+
|
223 |
+
### 1.2.19 ###
|
224 |
+
|
225 |
+
* New : Gallery output caching! Saves database requests improving load time
|
226 |
+
* New : Gallery usage column in admin gallery listing
|
227 |
+
* New : Better support for animated gifs
|
228 |
+
* New : Hover icons retina support
|
229 |
+
* New : Uninstall button on settings
|
230 |
+
* New : Save thumb dimensions per attachment. (needed in future versions)
|
231 |
+
* Fix : Extensions refactor and many issues resolved
|
232 |
+
* Fix : Better retina support for all templates
|
233 |
+
* Fix : Colorize / Greyscale CSS filters
|
234 |
+
* Fix : Even better wpthumb compatibility
|
235 |
+
|
236 |
+
### 1.2.18 ###
|
237 |
+
|
238 |
+
* Fix : Handle no settings in retina metabox
|
239 |
+
|
240 |
+
### 1.2.17 ###
|
241 |
+
|
242 |
+
* New : Retina support - metabox per gallery and default settings
|
243 |
+
* New : Attachment datasources - backend changes for how images are used in a gallery. (This will allow for new external sources in the future)
|
244 |
+
* New : Caption color settings in Simple portfolio gallery template
|
245 |
+
* New : Updated to latest Justified Gallery
|
246 |
+
* Fix : Better wpthumb compatibility
|
247 |
+
|
248 |
+
### 1.2.16 ###
|
249 |
+
|
250 |
+
* Fix : Yoast SEO Sitemaps fatal error with deleted galleries
|
251 |
+
* Fix : Updating pages with deleted galleries throws php warnings
|
252 |
+
|
253 |
+
### 1.2.15 ###
|
254 |
+
|
255 |
+
* Fix : Album admin CSS issues in WP 4.6
|
256 |
+
* Fix : Masonry layout issues in WP 4.6
|
257 |
+
* Fix : Media attachment fields not updating
|
258 |
+
* Fix : Better support for IE10
|
259 |
+
* New : Thumbnail generation test admin notice and settings
|
260 |
+
|
261 |
+
### 1.2.13 ###
|
262 |
+
|
263 |
+
* Fix : Shortcode replacing content in visual editor
|
264 |
+
* Fix : Gallery hover effect of None being ignored
|
265 |
+
* New : ImageViewer language settings for 'Prev', 'Next' & 'of'
|
266 |
+
* New : Setting to use original thumbnails if available
|
267 |
+
|
268 |
+
### 1.2.12 ###
|
269 |
+
|
270 |
+
* Fix : Simple Portfolio missing captions fix
|
271 |
+
|
272 |
+
### 1.2.11 ###
|
273 |
+
|
274 |
+
* Fix : Simple Portfolio undefined function fix
|
275 |
+
|
276 |
+
### 1.2.10 ###
|
277 |
+
|
278 |
+
* New : support for multiple admin JS and CSS assets for gallery templates
|
279 |
+
* New : Added setting to choose Caption Description source
|
280 |
+
* New : Crop position can be chosen for attachments
|
281 |
+
* New : Albums gallery details modal for setting a gallery URL
|
282 |
+
* New : Better shortcode preview in editor
|
283 |
+
* New : Editor button now supported if multiple editors exist
|
284 |
+
* Fix : Better No-Link support for gallery templates
|
285 |
+
* Fix : Compatible with Unyson plugin
|
286 |
+
* Fix : Compatible with Advanced Custom Fields
|
287 |
+
* Fix : Simple Portfolio fixes and tweaks
|
288 |
+
* Fix : ImageViewer fixes and better browser compatibility
|
289 |
+
* Fix : Changed assets enqueue version to rather use extension version
|
290 |
+
* Fix : Album URL fix for permalinks with no trailing slashes
|
291 |
+
|
292 |
+
### 1.2.9 ###
|
293 |
+
* New : Added Image Viewer gallery template
|
294 |
+
* New : Caption support for default template
|
295 |
+
* New : Yoast SEO gallery image support!
|
296 |
+
* New : Responsive options for Masonry gallery
|
297 |
+
* New : change gallery URL slug for albums
|
298 |
+
* New : setting to turn off loading animation in default gallery
|
299 |
+
* New : French translation
|
300 |
+
* Fix : Support for WP 4.4
|
301 |
+
* Fix : All templates - moved all jQuery ready events to vanilla JS
|
302 |
+
* Fix : Many gallery template tweaks
|
303 |
+
* Fix : allow no default to be chosen in settings
|
304 |
+
|
305 |
+
### 1.2.8 ###
|
306 |
+
* Works now with Polylang translation plugin
|
307 |
+
* CSS Updates & enhancements to all gallery templates
|
308 |
+
* Password protected galleries now work as expected
|
309 |
+
* Ability to hide WYSIWYG editor button
|
310 |
+
* Updated WPThumb
|
311 |
+
* Multiple bug fixes and improvements
|
312 |
+
|
313 |
+
### 1.2.7 ###
|
314 |
+
* Bug fixes for 1.2.6 release
|
315 |
+
* Added 2 new settings to Justified Gallery template (maxRowHeight + Caption Source)
|
316 |
+
|
317 |
+
### 1.2.6 ###
|
318 |
+
* CSS load optimizations
|
319 |
+
* Updates and tweaks on all built-in gallery templates
|
320 |
+
* More robust extension loading
|
321 |
+
* More robust upgrades to FooBox PRO
|
322 |
+
* Improved copy-to-clipboard
|
323 |
+
* Added more hover effects
|
324 |
+
* Support for FooVideo
|
325 |
+
|
326 |
+
### 1.2.5 ###
|
327 |
+
* Fix for extensions being empty
|
328 |
+
* Added support for Multi-site
|
329 |
+
* Added esc_url to all places where url is rendered
|
330 |
+
* Updated to latest Justified Gallery v3.5.4
|
331 |
+
|
332 |
+
### 1.2.4 ###
|
333 |
+
* Many album template updates, enhancements and fixes
|
334 |
+
* Many gallery template tweaks and fixes
|
335 |
+
* Sort order settings for galleries and albums
|
336 |
+
* Added new Single Thumbnail Gallery template
|
337 |
+
|
338 |
+
### 1.2.1 ###
|
339 |
+
* Added setting to choose default gallery to copy settings from
|
340 |
+
* Fixed bug #45 - gallery fields not showing onload
|
341 |
+
* replaced minicolors with spectrum colorpicker
|
342 |
+
* Allow gallery fields to have a suffix
|
343 |
+
* Added function to render galleries "foogallery_render_gallery( $gallery_id )"
|
344 |
+
|
345 |
+
### 1.2.0 ###
|
346 |
+
* Added albums extension
|
347 |
+
* Added custom CSS metaboxes
|
348 |
+
* Updated Nextgen importer
|
349 |
+
* Fixed many bugs
|
350 |
+
|
351 |
+
### 1.1.8.2 ###
|
352 |
+
* Fixed "edit gallery" CSS with WP 4.0
|
353 |
+
|
354 |
+
### 1.1.8.1 ###
|
355 |
+
* Fixed "insert gallery" CSS with WP 4.0
|
356 |
+
|
357 |
+
### 1.1.8 ###
|
358 |
+
* Added 2 new gallery templates
|
359 |
+
* Added 10+ actions and filters for more customization
|
360 |
+
* Countless bug fixes and enhancements
|
361 |
+
|
362 |
+
### 1.1.7 ###
|
363 |
* first version!
|
README.txt
CHANGED
@@ -1,374 +1,386 @@
|
|
1 |
-
=== FooGallery - Image Gallery WordPress Plugin ===
|
2 |
-
Contributors: bradvin, steveush, fooplugins, freemius
|
3 |
-
Donate link: http://fooplugins.com
|
4 |
-
Tags: gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified image gallery, video gallery, photography, photographer, retina
|
5 |
-
Requires at least: 3.9
|
6 |
-
Tested up to: 4.9
|
7 |
-
Stable tag: trunk
|
8 |
-
License: GPLv2 or later
|
9 |
-
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
-
|
11 |
-
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use.
|
12 |
-
|
13 |
-
== Description ==
|
14 |
-
|
15 |
-
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use. Built to be highly configurable and extensible for developers or freelancers.
|
16 |
-
|
17 |
-
[View the Foo Gallery Homepage & DEMO](http://foo.gallery/)
|
18 |
-
|
19 |
-
**Major changes in 1.4.1!**
|
20 |
-
|
21 |
-
There have been major updates to the gallery templates in v1.4.1. If you have updated, please test your galleries.
|
22 |
-
|
23 |
-
**
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
**
|
28 |
-
|
29 |
-
Foo Gallery now
|
30 |
-
|
31 |
-
**
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
**Built
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
**
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
*
|
46 |
-
*
|
47 |
-
*
|
48 |
-
*
|
49 |
-
*
|
50 |
-
*
|
51 |
-
*
|
52 |
-
*
|
53 |
-
*
|
54 |
-
*
|
55 |
-
*
|
56 |
-
*
|
57 |
-
*
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
*
|
62 |
-
*
|
63 |
-
*
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
*
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
*
|
72 |
-
*
|
73 |
-
*
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
*
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
*
|
82 |
-
*
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
*
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
*
|
93 |
-
*
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
* [
|
98 |
-
*
|
99 |
-
*
|
100 |
-
*
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
* [
|
105 |
-
* [
|
106 |
-
*
|
107 |
-
|
108 |
-
**
|
109 |
-
|
110 |
-
FooGallery
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
==
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
= 1.4.
|
157 |
-
|
158 |
-
*
|
159 |
-
*
|
160 |
-
*
|
161 |
-
* Update to latest client side JS
|
162 |
-
|
163 |
-
= 1.4.
|
164 |
-
|
165 |
-
*
|
166 |
-
*
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
*
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
*
|
178 |
-
*
|
179 |
-
*
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
* Fix :
|
188 |
-
* Fix :
|
189 |
-
*
|
190 |
-
*
|
191 |
-
*
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
*
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
*
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
*
|
204 |
-
*
|
205 |
-
*
|
206 |
-
* New :
|
207 |
-
*
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
*
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
*
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
* New :
|
224 |
-
*
|
225 |
-
* Fix :
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
* New :
|
237 |
-
*
|
238 |
-
*
|
239 |
-
*
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
*
|
244 |
-
* Fix :
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
*
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
* New :
|
254 |
-
*
|
255 |
-
*
|
256 |
-
*
|
257 |
-
* Fix :
|
258 |
-
|
259 |
-
= 1.2.
|
260 |
-
|
261 |
-
* Fix :
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
*
|
267 |
-
*
|
268 |
-
*
|
269 |
-
* Fix : Better
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
* Fix :
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
* Fix :
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
* New :
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
*
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
* Fix :
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
*
|
302 |
-
|
303 |
-
|
304 |
-
* New :
|
305 |
-
* New :
|
306 |
-
* New :
|
307 |
-
*
|
308 |
-
*
|
309 |
-
*
|
310 |
-
*
|
311 |
-
* Fix :
|
312 |
-
* Fix :
|
313 |
-
* Fix :
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
*
|
318 |
-
*
|
319 |
-
*
|
320 |
-
*
|
321 |
-
*
|
322 |
-
*
|
323 |
-
|
324 |
-
|
325 |
-
*
|
326 |
-
*
|
327 |
-
|
328 |
-
= 1.2.
|
329 |
-
*
|
330 |
-
* Updates
|
331 |
-
*
|
332 |
-
*
|
333 |
-
*
|
334 |
-
*
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
*
|
339 |
-
|
340 |
-
|
341 |
-
*
|
342 |
-
|
343 |
-
|
344 |
-
*
|
345 |
-
*
|
346 |
-
*
|
347 |
-
*
|
348 |
-
|
349 |
-
= 1.2.
|
350 |
-
*
|
351 |
-
*
|
352 |
-
*
|
353 |
-
*
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
*
|
358 |
-
*
|
359 |
-
*
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
* Fixed
|
364 |
-
|
365 |
-
|
366 |
-
*
|
367 |
-
|
368 |
-
= 1.
|
369 |
-
* Added
|
370 |
-
* Added
|
371 |
-
*
|
372 |
-
|
373 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
374 |
* first version!
|
1 |
+
=== FooGallery - Image Gallery WordPress Plugin ===
|
2 |
+
Contributors: bradvin, steveush, fooplugins, freemius
|
3 |
+
Donate link: http://fooplugins.com
|
4 |
+
Tags: gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified image gallery, video gallery, photography, photographer, retina
|
5 |
+
Requires at least: 3.9
|
6 |
+
Tested up to: 4.9.1
|
7 |
+
Stable tag: trunk
|
8 |
+
License: GPLv2 or later
|
9 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
+
|
11 |
+
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use.
|
12 |
+
|
13 |
+
== Description ==
|
14 |
+
|
15 |
+
FooGallery is the best image gallery plugin for WordPress. Why? Stunning gallery layouts, responsive, retina-ready, lightning fast, easy to use. Built to be highly configurable and extensible for developers or freelancers.
|
16 |
+
|
17 |
+
[View the Foo Gallery Homepage & DEMO](http://foo.gallery/)
|
18 |
+
|
19 |
+
**Major changes in 1.4.1!**
|
20 |
+
|
21 |
+
There have been major updates to the gallery templates in v1.4.1. If you have updated, please test your galleries.
|
22 |
+
|
23 |
+
**PHP 7 Compatible**
|
24 |
+
|
25 |
+
FooGallery has been tried and tested on servers running PHP 7.
|
26 |
+
|
27 |
+
**Retina Support**
|
28 |
+
|
29 |
+
Foo Gallery now comes with built-in support for higher quality thumbnails on retina-enabled displays. No more blurry thumbnails, just crisp thumbnails that look amazing on all devices.
|
30 |
+
|
31 |
+
**Video Support**
|
32 |
+
|
33 |
+
Foo Gallery now supports the creation of video galleries with the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)! Create galleries with both images and videos mixed!
|
34 |
+
|
35 |
+
**Albums Built In**
|
36 |
+
|
37 |
+
Albums are now built in as an extension. Simply head over to the extensions page and activate the albums extension. A new menu item will appear that allows you to add albums just as easily as galleries.
|
38 |
+
|
39 |
+
**Built For Developers**
|
40 |
+
|
41 |
+
Foo Gallery was designed to be the most developer-friendly gallery plugin available for WordPress. It was also built on top of a solid extension framework, which means different functionality is separated out into different areas in the codebase. It also means the core plugin is lightweight, but still allowing for the most flexibility.
|
42 |
+
|
43 |
+
**Features**
|
44 |
+
|
45 |
+
* Lazy loading
|
46 |
+
* Simple Pagination (dots)
|
47 |
+
* Live previews in admin
|
48 |
+
* Retina thumbnail support
|
49 |
+
* Gallery Widget
|
50 |
+
* Add videos to galleries (via the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo))
|
51 |
+
* Albums built-in! (Activate the albums extension)
|
52 |
+
* Use built-in media library to manage images
|
53 |
+
* Drag n Drop reordering of images and galleries
|
54 |
+
* Beautiful gallery templates
|
55 |
+
* Custom CSS for both galleries and albums
|
56 |
+
* Copy to clipboard shortcodes
|
57 |
+
* Visual shortcodes in rich text editor
|
58 |
+
* Gallery picker to insert shortcodes
|
59 |
+
* Page usage metabox with one-click gallery page creation
|
60 |
+
* NextGen importer tool (albums and galleries and shortcodes)
|
61 |
+
* Multisite Support
|
62 |
+
* PHP 7 compatible
|
63 |
+
* plus many, many more
|
64 |
+
|
65 |
+
**PRO Features**
|
66 |
+
|
67 |
+
* Polaroid PRO Gallery Template
|
68 |
+
* Grid PRO Gallery Template
|
69 |
+
* Advanced Pagination
|
70 |
+
* Infinite Scroll
|
71 |
+
* Multiple Loaded Effects
|
72 |
+
* Multiple hover effects presets
|
73 |
+
* More on the way!
|
74 |
+
|
75 |
+
**Gallery Demos**
|
76 |
+
|
77 |
+
* Responsive Image Gallery - [demo](http://foo.gallery/demos/responsive-image-gallery/)
|
78 |
+
* Image Viewer Gallery - [light demo](http://foo.gallery/demos/image-viewer-gallery/) - [dark demo](http://foo.gallery/demos/image-viewer-gallery-dark/)
|
79 |
+
* Masonry Gallery - [demo](http://foo.gallery/demos/masonry-image-gallery/)
|
80 |
+
* Simple Portfolio - [demo](http://foo.gallery/demos/simple-portfolio/)
|
81 |
+
* Justified Gallery - [demo](http://foo.gallery/demos/justified-gallery/)
|
82 |
+
* Single Thumbnail Gallery - [demo](http://foo.gallery/demos/single-thumbnail-gallery/)
|
83 |
+
* Mixed (Images + Videos) - [demo](http://foo.gallery/demos/mixed/)
|
84 |
+
|
85 |
+
**Album Demos**
|
86 |
+
|
87 |
+
* Responsive Album Layout - [demo](http://foo.gallery/demos/responsive-album-layout/)
|
88 |
+
* All-in-one Stack Album - [demo](http://foo.gallery/demos/all-in-one-stack-album/)
|
89 |
+
|
90 |
+
**Videos Demos**
|
91 |
+
|
92 |
+
* Vertical Video Slider - [demo](http://foo.gallery/demos/video-slider-vertical/) - [full-width demo](http://foo.gallery/demos/video-slider-vertical-full-width/)
|
93 |
+
* Horizontal Video Slider - [demo](http://foo.gallery/demos/video-slider-horizontal/) - [custom colors](http://foo.gallery/demos/video-slider-custom-theme/)
|
94 |
+
|
95 |
+
**Extensions**
|
96 |
+
|
97 |
+
* [FooVideo](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
98 |
+
* Albums (bundled)
|
99 |
+
* Default Gallery Templates (bundled)
|
100 |
+
* NextGen Gallery and Album Importer (bundled)
|
101 |
+
* [Custom Branding](http://fooplugins.com/plugins/foogallery-branding/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
102 |
+
* [FooBox PRO Lightbox](http://fooplugins.com/plugins/foobox/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
103 |
+
* [FooBox FREE Lightbox](http://wordpress.org/plugins/foobox-image-lightbox)
|
104 |
+
* [ZOOM Template](http://wordpress.org/plugins/foogallery-zoom-template/)
|
105 |
+
* [Use Media Menu](https://github.com/fooplugins/foogallery-media-menu)
|
106 |
+
* Build your own!!!
|
107 |
+
|
108 |
+
**Documentation**
|
109 |
+
|
110 |
+
* [FooGallery 101](http://docs.fooplugins.com/foogallery/foogallery-101/)
|
111 |
+
* [Developer 101](http://docs.fooplugins.com/foogallery/foogallery-developers-101/)
|
112 |
+
* [Actions and Filters](http://docs.fooplugins.com/foogallery/actions-filters/)
|
113 |
+
|
114 |
+
**Contribute**
|
115 |
+
|
116 |
+
FooGallery is hosted on [GitHub](https://github.com/fooplugins/foogallery). If you find a bug, please [create an issue](https://github.com/fooplugins/foogallery/issues).
|
117 |
+
|
118 |
+
== Installation ==
|
119 |
+
|
120 |
+
1. Upload `foogallery` folder to the `/wp-content/plugins/` directory
|
121 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress
|
122 |
+
3. You will be redirected to the FooGallery Help page to get your started
|
123 |
+
|
124 |
+
== Frequently Asked Questions ==
|
125 |
+
|
126 |
+
= Why are my thumbnails so blurry? =
|
127 |
+
|
128 |
+
Have you enabled retina support for your galleries? Displays with retina support can show better quality thumbnails when retina support is enabled. To enable retina support, edit the gallery and locate the Retina Support metabox.
|
129 |
+
|
130 |
+
= Can I add videos to my galleries? =
|
131 |
+
|
132 |
+
Yes, you need to use the [FooVideo premium extension](http://fooplugins.com/plugins/foovideo/?utm_source=foogalleryplugin&utm_medium=foogallerylink&utm_campaign=foogallery_wprepo)
|
133 |
+
|
134 |
+
= How do I get albums working? =
|
135 |
+
|
136 |
+
Simply go to the FooGallery extensions page and activate the Albums extension. If you do not see a button to activate the albums extension, reload the extensions list by clicking the reload button.
|
137 |
+
|
138 |
+
= Can I build an extension? =
|
139 |
+
|
140 |
+
Hell, yes! Check out our [developer page](http://foo.gallery/developers/)
|
141 |
+
|
142 |
+
== Screenshots ==
|
143 |
+
|
144 |
+
1. Gallery Edit Page
|
145 |
+
2. Visual Shortcodes
|
146 |
+
3. Gallery Picker
|
147 |
+
4. Frontend example with default template
|
148 |
+
5. Album Edit Page
|
149 |
+
|
150 |
+
== Upgrade Notice ==
|
151 |
+
|
152 |
+
Update now to support FooVideo and many other improvements!
|
153 |
+
|
154 |
+
== Changelog ==
|
155 |
+
|
156 |
+
= 1.4.12 =
|
157 |
+
* New : NextGen importer now includes shortcode replacement
|
158 |
+
* New : Masonry gallery supports captions below thumbnails
|
159 |
+
* New : Performance improvements for very large galleries (1000+ images)
|
160 |
+
* Fix : Bugs fixes for paging, FooBox and more
|
161 |
+
* Update to latest client side JS 1.0.18
|
162 |
+
|
163 |
+
= 1.4.8 =
|
164 |
+
* New : added custom ready event setting for overcoming 3rd party jQuery exceptions
|
165 |
+
* New : added crop thumbnail option to 'Single Thumbnail' and 'Image Viewer' templates
|
166 |
+
* Update to latest client side JS
|
167 |
+
|
168 |
+
= 1.4.7 =
|
169 |
+
|
170 |
+
* Fix : conflicts with WP Rocket CDN features
|
171 |
+
* Fix : conflicts with themes or plugins deferring script loading
|
172 |
+
* New : Auto-loading of default templates
|
173 |
+
* Update to latest client side JS
|
174 |
+
|
175 |
+
= 1.4.6 =
|
176 |
+
|
177 |
+
* Fix : conflicts with other scripts or plugins using data-src attributes
|
178 |
+
* Fix : script moved back to use jQuery ready event, to avoid some conflicts
|
179 |
+
* New : Global setting to disable lazy loading for all galleries
|
180 |
+
* New : FooGallery Widget!
|
181 |
+
* New : Admin notice for Autoptomize users to delete cache on updates
|
182 |
+
* Update to latest client side JS
|
183 |
+
|
184 |
+
= 1.4.5 =
|
185 |
+
|
186 |
+
* Fix : Lazy loading - scrolling galleries in certain scenarios were not loading thumbs
|
187 |
+
* Fix : Galleries that were hidden on page load were not displaying correctly when shown
|
188 |
+
* Fix : Default gallery settings were not being applied to new galleries
|
189 |
+
* New : shortcode arguments applied to gallery for common fields
|
190 |
+
* New : HTML caching is disabled by default now!
|
191 |
+
* Updated to latest client side JS and CSS
|
192 |
+
|
193 |
+
= 1.4.4 =
|
194 |
+
|
195 |
+
* Fix : upgrade was calling underfined function
|
196 |
+
|
197 |
+
= 1.4.3 =
|
198 |
+
|
199 |
+
* Fix : Justify gallery template issues
|
200 |
+
* Fix : Masonry gallery template issues
|
201 |
+
* Fix : Caption description not hidden when supposed to
|
202 |
+
* Fix : Complete rework of thumbnail dimension logic!
|
203 |
+
* Fix : Redirection bug on activation
|
204 |
+
* Fix : Added checks for galleries causing PHP warnings
|
205 |
+
* Fix : Multisite warnings on activation
|
206 |
+
* New : Last Row setting in Justify gallery template
|
207 |
+
* New : Alignment setting in Simple Portfolio gallery template
|
208 |
+
* New : Added more checks after load to ensure gallery layout is correct
|
209 |
+
* New : Added lazy loading advanced setting
|
210 |
+
* Updated to Freemius SDK 1.2.2.10
|
211 |
+
* Updated to latest client side JS and CSS
|
212 |
+
|
213 |
+
= 1.3.28 =
|
214 |
+
|
215 |
+
* Complete rewrite of the built-in gallery templates
|
216 |
+
* New : lazy loading
|
217 |
+
* New : simple pagination
|
218 |
+
* New : Live Previews when editing a gallery
|
219 |
+
* 260+ updates, changes and bug fixes
|
220 |
+
|
221 |
+
= 1.3.8 =
|
222 |
+
|
223 |
+
* New : Built in support for FooBox, fixing a lot of issues where FooBox option is not available
|
224 |
+
* Fix : More reliable extension active status on extensions listing
|
225 |
+
* Fix : More obvious wording for 3rd party plugins when they are not installed
|
226 |
+
|
227 |
+
= 1.3.7 =
|
228 |
+
|
229 |
+
* Fix : Activation redirect bug showing "Sorry, you are not allowed to access this page."
|
230 |
+
|
231 |
+
= 1.3.6 =
|
232 |
+
|
233 |
+
* New : Freemius integration!
|
234 |
+
* New : Added support for the Responsive Lightbox by dFactory
|
235 |
+
* New : New custom class field for an attachment
|
236 |
+
* New : Added more system info for better debugging when there are server issues
|
237 |
+
* Fix : Visual editor FooGallery edit button
|
238 |
+
* Fix : Image Viewer hover effect none now works as expected
|
239 |
+
* Fix : Disable HTML caching for randomly ordered galleries
|
240 |
+
|
241 |
+
= 1.2.20 =
|
242 |
+
|
243 |
+
* New : Force Use Original thumb setting on gallery edit page
|
244 |
+
* Fix : PHP warning from thumbnail class since 1.2.19
|
245 |
+
|
246 |
+
= 1.2.19 =
|
247 |
+
|
248 |
+
* New : Gallery output caching! Saves database requests improving load time
|
249 |
+
* New : Gallery usage column in admin gallery listing
|
250 |
+
* New : Better support for animated gifs
|
251 |
+
* New : Hover icons retina support
|
252 |
+
* New : Uninstall button on settings
|
253 |
+
* New : Save thumb dimensions per attachment. (needed in future versions)
|
254 |
+
* Fix : Extensions refactor and many issues resolved
|
255 |
+
* Fix : Better retina support for all templates
|
256 |
+
* Fix : Colorize / Greyscale CSS filters
|
257 |
+
* Fix : Even better wpthumb compatibility
|
258 |
+
|
259 |
+
= 1.2.18 =
|
260 |
+
|
261 |
+
* Fix : Handle no settings in retina metabox
|
262 |
+
|
263 |
+
= 1.2.17 =
|
264 |
+
|
265 |
+
* New : Retina support - metabox per gallery and default settings
|
266 |
+
* New : Attachment datasources - backend changes for how images are used in a gallery. (This will allow for new external sources in the future)
|
267 |
+
* New : Caption color settings in Simple portfolio gallery template
|
268 |
+
* New : Updated to latest Justified Gallery
|
269 |
+
* Fix : Better wpthumb compatibility
|
270 |
+
|
271 |
+
= 1.2.16 =
|
272 |
+
|
273 |
+
* Fix : Yoast SEO Sitemaps fatal error with deleted galleries
|
274 |
+
* Fix : Updating pages with deleted galleries throws php warnings
|
275 |
+
|
276 |
+
= 1.2.15 =
|
277 |
+
|
278 |
+
* Fix : Album admin CSS issues in WP 4.6
|
279 |
+
* Fix : Masonry layout issues in WP 4.6
|
280 |
+
* Fix : Media attachment fields not updating
|
281 |
+
* Fix : Better support for IE10
|
282 |
+
* New : Thumbnail generation test admin notice and settings
|
283 |
+
|
284 |
+
= 1.2.13 =
|
285 |
+
|
286 |
+
* Fix : Shortcode replacing content in visual editor
|
287 |
+
* Fix : Gallery hover effect of None being ignored
|
288 |
+
* New : ImageViewer language settings for 'Prev', 'Next' & 'of'
|
289 |
+
* New : Setting to use original thumbnails if available
|
290 |
+
|
291 |
+
= 1.2.12 =
|
292 |
+
|
293 |
+
* Fix : Simple Portfolio missing captions fix
|
294 |
+
|
295 |
+
= 1.2.11 =
|
296 |
+
|
297 |
+
* Fix : Simple Portfolio undefined function fix
|
298 |
+
|
299 |
+
= 1.2.10 =
|
300 |
+
|
301 |
+
* New : support for multiple admin JS and CSS assets for gallery templates
|
302 |
+
* New : Added setting to choose Caption Description source
|
303 |
+
* New : Crop position can be chosen for attachments
|
304 |
+
* New : Albums gallery details modal for setting a gallery URL
|
305 |
+
* New : Better shortcode preview in editor
|
306 |
+
* New : Editor button now supported if multiple editors exist
|
307 |
+
* Fix : Better No-Link support for gallery templates
|
308 |
+
* Fix : Compatible with Unyson plugin
|
309 |
+
* Fix : Compatible with Advanced Custom Fields
|
310 |
+
* Fix : Simple Portfolio fixes and tweaks
|
311 |
+
* Fix : ImageViewer fixes and better browser compatibility
|
312 |
+
* Fix : Changed assets enqueue version to rather use extension version
|
313 |
+
* Fix : Album URL fix for permalinks with no trailing slashes
|
314 |
+
|
315 |
+
= 1.2.9 =
|
316 |
+
* New : Added Image Viewer gallery template
|
317 |
+
* New : Caption support for default template
|
318 |
+
* New : Yoast SEO gallery image support!
|
319 |
+
* New : Responsive options for Masonry gallery
|
320 |
+
* New : change gallery URL slug for albums
|
321 |
+
* New : setting to turn off loading animation in default gallery
|
322 |
+
* New : French translation
|
323 |
+
* Fix : Support for WP 4.4
|
324 |
+
* Fix : All templates - moved all jQuery ready events to vanilla JS
|
325 |
+
* Fix : Many gallery template tweaks
|
326 |
+
* Fix : allow no default to be chosen in settings
|
327 |
+
|
328 |
+
= 1.2.8 =
|
329 |
+
* Works now with Polylang translation plugin
|
330 |
+
* CSS Updates & enhancements to all gallery templates
|
331 |
+
* Password protected galleries now work as expected
|
332 |
+
* Ability to hide WYSIWYG editor button
|
333 |
+
* Updated WPThumb
|
334 |
+
* Multiple bug fixes and improvements
|
335 |
+
|
336 |
+
= 1.2.7 =
|
337 |
+
* Bug fixes for 1.2.6 release
|
338 |
+
* Added 2 new settings to Justified Gallery template (maxRowHeight + Caption Source)
|
339 |
+
|
340 |
+
= 1.2.6 =
|
341 |
+
* CSS load optimizations
|
342 |
+
* Updates and tweaks on all built-in gallery templates
|
343 |
+
* More robust extension loading
|
344 |
+
* More robust upgrades to FooBox PRO
|
345 |
+
* Improved copy-to-clipboard
|
346 |
+
* Added more hover effects
|
347 |
+
* Support for FooVideo
|
348 |
+
|
349 |
+
= 1.2.5 =
|
350 |
+
* Fix for extensions being empty
|
351 |
+
* Added support for Multi-site
|
352 |
+
* Added esc_url to all places where url is rendered
|
353 |
+
* Updated to latest Justified Gallery v3.5.4
|
354 |
+
|
355 |
+
= 1.2.4 =
|
356 |
+
* Many album template updates, enhancements and fixes
|
357 |
+
* Many gallery template tweaks and fixes
|
358 |
+
* Sort order settings for galleries and albums
|
359 |
+
* Added new Single Thumbnail Gallery template
|
360 |
+
|
361 |
+
= 1.2.1 =
|
362 |
+
* Added setting to choose default gallery to copy settings from
|
363 |
+
* Fixed bug #45 - gallery fields not showing onload
|
364 |
+
* replaced minicolors with spectrum colorpicker
|
365 |
+
* Allow gallery fields to have a suffix
|
366 |
+
* Added function to render galleries "foogallery_render_gallery( $gallery_id )"
|
367 |
+
|
368 |
+
= 1.2.0 =
|
369 |
+
* Added albums extension
|
370 |
+
* Added custom CSS metaboxes
|
371 |
+
* Updated Nextgen importer
|
372 |
+
* Fixed many bugs
|
373 |
+
|
374 |
+
= 1.1.8.2 =
|
375 |
+
* Fixed "edit gallery" CSS with WP 4.0
|
376 |
+
|
377 |
+
= 1.1.8.1 =
|
378 |
+
* Fixed "insert gallery" CSS with WP 4.0
|
379 |
+
|
380 |
+
= 1.1.8 =
|
381 |
+
* Added 2 new gallery templates
|
382 |
+
* Added 10+ actions and filters for more customization
|
383 |
+
* Countless bug fixes and enhancements
|
384 |
+
|
385 |
+
= 1.1.7 =
|
386 |
* first version!
|
changelog.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
FooGallery Changelog
|
2 |
-
====================
|
3 |
-
|
4 |
See changelog in readme.txt
|
1 |
+
FooGallery Changelog
|
2 |
+
====================
|
3 |
+
|
4 |
See changelog in readme.txt
|
css/admin-foogallery.css
CHANGED
@@ -1,462 +1,462 @@
|
|
1 |
-
.foogallery-attachments-list .add-attachment {
|
2 |
-
background: #ddd;
|
3 |
-
box-shadow: 0 0 0 1px #ccc;
|
4 |
-
width: 150px;
|
5 |
-
position: relative;
|
6 |
-
float: left;
|
7 |
-
padding: 0;
|
8 |
-
color: #464646;
|
9 |
-
list-style: none;
|
10 |
-
text-align: center;
|
11 |
-
-webkit-user-select: none;
|
12 |
-
-moz-user-select: none;
|
13 |
-
-ms-user-select: none;
|
14 |
-
-o-user-select: none;
|
15 |
-
user-select: none;
|
16 |
-
}
|
17 |
-
|
18 |
-
.foogallery-attachments-list .add-attachment a {
|
19 |
-
display: table-cell;
|
20 |
-
vertical-align: middle;
|
21 |
-
height: 150px;
|
22 |
-
text-align: center;
|
23 |
-
width: 150px;
|
24 |
-
height: 150px;
|
25 |
-
color:#666;
|
26 |
-
font-weight: bold;
|
27 |
-
text-decoration: none;
|
28 |
-
}
|
29 |
-
|
30 |
-
.foogallery-attachments-list .add-attachment a:hover {
|
31 |
-
color:#444;
|
32 |
-
}
|
33 |
-
|
34 |
-
.foogallery-attachments-list .add-attachment a div.dashicons {
|
35 |
-
font-size:50px;
|
36 |
-
width: 50px;
|
37 |
-
height: 50px;
|
38 |
-
}
|
39 |
-
|
40 |
-
.foogallery-attachments-list .add-attachment a span {
|
41 |
-
display: block;
|
42 |
-
}
|
43 |
-
|
44 |
-
|
45 |
-
.foogallery-attachments-list .attachment-preview,
|
46 |
-
.foogallery-attachments-list .attachment-preview .thumbnail {
|
47 |
-
width: 150px;
|
48 |
-
height: 150px;
|
49 |
-
cursor:move;
|
50 |
-
}
|
51 |
-
|
52 |
-
.foogallery-attachments-list .attachment {
|
53 |
-
border: transparent 1px solid;
|
54 |
-
box-shadow: none !important;
|
55 |
-
width: auto !important;
|
56 |
-
padding: 0 !important;
|
57 |
-
}
|
58 |
-
|
59 |
-
.foogallery-attachments-list .attachment.placeholder {
|
60 |
-
width: 150px !important;
|
61 |
-
height: 150px;
|
62 |
-
border: #1e8cbe 1px dashed;
|
63 |
-
background: #eee;
|
64 |
-
}
|
65 |
-
|
66 |
-
.foogallery-attachments-list li {
|
67 |
-
margin: 0px 10px 10px 0px !important;
|
68 |
-
}
|
69 |
-
|
70 |
-
.foogallery-attachments-list .attachment.ui-sortable-helper {
|
71 |
-
opacity: 0.5;
|
72 |
-
}
|
73 |
-
|
74 |
-
.foogallery-attachments-list .attachment.ui-sortable-helper:hover .close {
|
75 |
-
display: none;
|
76 |
-
}
|
77 |
-
|
78 |
-
.foogallery-attachments-list input.describe {
|
79 |
-
margin:0;
|
80 |
-
width: 150px;
|
81 |
-
font-size: 12px;
|
82 |
-
}
|
83 |
-
|
84 |
-
.foogallery-attachments-list .attachment .attachment-preview a {
|
85 |
-
display: none;
|
86 |
-
position: absolute;
|
87 |
-
padding: 0;
|
88 |
-
font-size: 20px;
|
89 |
-
line-height: 20px;
|
90 |
-
text-align: center;
|
91 |
-
text-decoration: none;
|
92 |
-
background-color: #444;
|
93 |
-
border-top-right-radius: 50%;
|
94 |
-
border-top-left-radius: 50%;
|
95 |
-
border-bottom-right-radius: 50%;
|
96 |
-
border-bottom-left-radius: 50%;
|
97 |
-
}
|
98 |
-
|
99 |
-
.foogallery-attachments-list .attachment .attachment-preview:hover a {
|
100 |
-
display: block;
|
101 |
-
}
|
102 |
-
|
103 |
-
.foogallery-attachments-list .attachment .attachment-preview a span {
|
104 |
-
color:#fff;
|
105 |
-
}
|
106 |
-
|
107 |
-
.foogallery-attachments-list .attachment .attachment-preview a:hover span {
|
108 |
-
color:#ddd;
|
109 |
-
}
|
110 |
-
|
111 |
-
.foogallery-attachments-list .attachment .attachment-preview a.remove {
|
112 |
-
top: 5px;
|
113 |
-
right: 5px;
|
114 |
-
}
|
115 |
-
|
116 |
-
.foogallery-attachments-list .attachment .attachment-preview a.info {
|
117 |
-
top: 5px;
|
118 |
-
left: 5px;
|
119 |
-
}
|
120 |
-
|
121 |
-
.spacer {
|
122 |
-
display: inline-block;
|
123 |
-
width:30px;
|
124 |
-
}
|
125 |
-
|
126 |
-
.foogallery_template_field td {
|
127 |
-
padding-bottom: 20px;
|
128 |
-
}
|
129 |
-
|
130 |
-
.foogallery_template_field th {
|
131 |
-
vertical-align: top;
|
132 |
-
text-align: left;
|
133 |
-
padding-top: 0.3em;
|
134 |
-
padding-right: 10px;
|
135 |
-
}
|
136 |
-
|
137 |
-
.foogallery_template_field textarea {
|
138 |
-
min-width: 500px;
|
139 |
-
min-height: 100px;
|
140 |
-
}
|
141 |
-
|
142 |
-
.foogallery_template_field.foogallery_template_field_type-help {
|
143 |
-
border-bottom: none;
|
144 |
-
}
|
145 |
-
|
146 |
-
.foogallery_template_field.foogallery_template_field_type-help td {
|
147 |
-
padding-bottom: 0;
|
148 |
-
}
|
149 |
-
|
150 |
-
.foogallery_template_field.foogallery_template_field_type-icon td {
|
151 |
-
padding-bottom: 0;
|
152 |
-
}
|
153 |
-
|
154 |
-
.foogallery_metabox_field-icon label {
|
155 |
-
display:inline-block;
|
156 |
-
margin-right:10px;
|
157 |
-
border:solid 3px transparent;
|
158 |
-
background:#aaa;
|
159 |
-
border-radius: 3px;
|
160 |
-
-moz-border-radius: 3px;
|
161 |
-
-webkit-border-radius: 3px;
|
162 |
-
padding:5px;
|
163 |
-
line-height: 0;
|
164 |
-
margin-bottom: 10px;
|
165 |
-
}
|
166 |
-
|
167 |
-
.foogallery_metabox_field-icon input:checked + label {
|
168 |
-
border:solid 3px #444;
|
169 |
-
background: #888;
|
170 |
-
}
|
171 |
-
|
172 |
-
.foogallery_metabox_field-icon label:hover {
|
173 |
-
border:solid 3px #444;
|
174 |
-
}
|
175 |
-
|
176 |
-
.foogallery_template_field.foogallery_template_field_type-htmlicon td {
|
177 |
-
padding-bottom: 0;
|
178 |
-
}
|
179 |
-
|
180 |
-
.foogallery_metabox_field-htmlicon label {
|
181 |
-
display:inline-block;
|
182 |
-
margin-right:10px;
|
183 |
-
border:solid 3px transparent;
|
184 |
-
background:#aaa;
|
185 |
-
border-radius: 3px;
|
186 |
-
-moz-border-radius: 3px;
|
187 |
-
-webkit-border-radius: 3px;
|
188 |
-
padding:5px;
|
189 |
-
line-height: 0;
|
190 |
-
margin-bottom: 10px;
|
191 |
-
}
|
192 |
-
|
193 |
-
.foogallery_metabox_field-htmlicon input:checked + label {
|
194 |
-
border:solid 3px #444;
|
195 |
-
background: #888;
|
196 |
-
}
|
197 |
-
|
198 |
-
.foogallery_metabox_field-htmlicon label:hover {
|
199 |
-
border:solid 3px #444;
|
200 |
-
}
|
201 |
-
|
202 |
-
.foogallery_metabox_field-thumb_size label {
|
203 |
-
vertical-align: baseline;
|
204 |
-
}
|
205 |
-
|
206 |
-
.foogallery_metabox_field-thumb_size input[type="number"] {
|
207 |
-
margin-right: 10px;
|
208 |
-
margin-left: 10px;
|
209 |
-
}
|
210 |
-
|
211 |
-
.foogallery_template_field_type-text input.small-text {
|
212 |
-
width: 65px;
|
213 |
-
height: 28px;
|
214 |
-
line-height: 1;
|
215 |
-
}
|
216 |
-
|
217 |
-
#foogallery_pages ul li:hover .row-actions { visibility: visible; }
|
218 |
-
|
219 |
-
.foogallery-shortcode {
|
220 |
-
text-align: center;
|
221 |
-
}
|
222 |
-
|
223 |
-
.foogallery-shortcode input {
|
224 |
-
cursor: pointer;
|
225 |
-
text-align: center;
|
226 |
-
padding: 10px;
|
227 |
-
font-family: "courier new", courier;
|
228 |
-
border: none;
|
229 |
-
box-shadow: none;
|
230 |
-
background: #efefef;
|
231 |
-
}
|
232 |
-
|
233 |
-
.wp-list-table .foogallery-shortcode {
|
234 |
-
cursor: pointer;
|
235 |
-
font-size: 1em;
|
236 |
-
border: none;
|
237 |
-
box-shadow: none;
|
238 |
-
background: #efefef;
|
239 |
-
font-family: "courier new", courier;
|
240 |
-
}
|
241 |
-
|
242 |
-
.foogallery-shortcode-message {
|
243 |
-
font-style: italic;
|
244 |
-
color: #2EA2CC !important;
|
245 |
-
}
|
246 |
-
|
247 |
-
.foogallery-help {
|
248 |
-
position: relative;
|
249 |
-
display: block;
|
250 |
-
line-height: 19px;
|
251 |
-
padding: 11px 10px 11px 40px;
|
252 |
-
font-size: 14px;
|
253 |
-
text-align: left;
|
254 |
-
margin: 5px 0 0 2px;
|
255 |
-
background-color: #F4F4FF;
|
256 |
-
border-left: 4px solid #1e8cbe;
|
257 |
-
-webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
258 |
-
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
259 |
-
}
|
260 |
-
|
261 |
-
.foogallery-help:before {
|
262 |
-
content: "\f223";
|
263 |
-
font: 400 30px/1 dashicons !important;
|
264 |
-
speak: none;
|
265 |
-
color: #1e8cbe;
|
266 |
-
display: inline-block;
|
267 |
-
-webkit-font-smoothing: antialiased;
|
268 |
-
-moz-osx-font-smoothing: grayscale;
|
269 |
-
vertical-align: bottom;
|
270 |
-
position: absolute;
|
271 |
-
left: 5px;
|
272 |
-
margin-top: -15px;
|
273 |
-
top: 50%;
|
274 |
-
height: 1em;
|
275 |
-
}
|
276 |
-
|
277 |
-
#post-body.columns-2 #postbox-container-1 .foogallery-help {
|
278 |
-
padding-left: 11px;
|
279 |
-
margin-left: 5px;
|
280 |
-
}
|
281 |
-
|
282 |
-
#post-body.columns-2 #postbox-container-1 .foogallery-help:before {
|
283 |
-
content: '';
|
284 |
-
}
|
285 |
-
|
286 |
-
/** <gallery settings styling overrides> **/
|
287 |
-
|
288 |
-
.foogallery-metabox-settings {
|
289 |
-
width: 100%;
|
290 |
-
border-collapse: collapse;
|
291 |
-
}
|
292 |
-
|
293 |
-
.foogallery-metabox-settings th {
|
294 |
-
font-weight: normal;
|
295 |
-
padding: 10px;
|
296 |
-
width: 180px;
|
297 |
-
}
|
298 |
-
|
299 |
-
.foogallery-metabox-settings tr {
|
300 |
-
border-bottom: solid 1px #EEE;
|
301 |
-
}
|
302 |
-
|
303 |
-
.foogallery-metabox-settings td {
|
304 |
-
padding: 10px;
|
305 |
-
}
|
306 |
-
|
307 |
-
.foogallery_metabox_field-radio > input,
|
308 |
-
.foogallery_metabox_field-radio > label {
|
309 |
-
margin-bottom: 10px;
|
310 |
-
display: inline-block;
|
311 |
-
}
|
312 |
-
|
313 |
-
.foogallery_metabox_field-radio input[type="checkbox"],
|
314 |
-
.foogallery_metabox_field-radio input[type="radio"] {
|
315 |
-
margin: 0 0 10px 0;
|
316 |
-
}
|
317 |
-
|
318 |
-
.foogallery_metabox_field-select select {
|
319 |
-
min-width: 250px;
|
320 |
-
}
|
321 |
-
|
322 |
-
.foogallery-thumbsize-crop {
|
323 |
-
margin-top: 10px;
|
324 |
-
}
|
325 |
-
|
326 |
-
.foogallery_metabox_field-checkboxlist > input,
|
327 |
-
.foogallery_metabox_field-checkboxlist > label {
|
328 |
-
margin-bottom: 10px;
|
329 |
-
display: inline-block;
|
330 |
-
}
|
331 |
-
|
332 |
-
.foogallery_metabox_field-checkboxlist input[type="checkbox"] {
|
333 |
-
margin: 0 0 10px 0;
|
334 |
-
}
|
335 |
-
|
336 |
-
/** </gallery settings styling overrides> **/
|
337 |
-
|
338 |
-
.foogallery_metabox_custom_css {
|
339 |
-
width: 100%;
|
340 |
-
height: 10em;
|
341 |
-
}
|
342 |
-
|
343 |
-
.foo-nav-tabs a:focus {
|
344 |
-
box-shadow: none;
|
345 |
-
outline: 0;
|
346 |
-
}
|
347 |
-
|
348 |
-
.foogallery-thumbnail-preview {
|
349 |
-
display: inline-block;
|
350 |
-
}
|
351 |
-
|
352 |
-
#foogallery_apply_retina_support_container {
|
353 |
-
margin-top: 5px;
|
354 |
-
}
|
355 |
-
|
356 |
-
.widefat th.column-icon {
|
357 |
-
width: 60px;
|
358 |
-
}
|
359 |
-
|
360 |
-
#foogallery_settings .inside {
|
361 |
-
margin: 0;
|
362 |
-
padding: 0;
|
363 |
-
}
|
364 |
-
/** Balloon.css **/
|
365 |
-
button[data-balloon]{overflow:visible}[data-balloon]{position:relative}[data-balloon]:after,[data-balloon]:before{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-khtml-opacity:0;-moz-opacity:0;opacity:0;pointer-events:none;-webkit-transition:all .18s ease-out .18s;transition:all .18s ease-out .18s;bottom:100%;left:50%;position:absolute;z-index:10;-webkit-transform:translate(-50%,10px);-ms-transform:translate(-50%,10px);transform:translate(-50%,10px);-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top}[data-balloon]:after{background:rgba(17,17,17,.9);border-radius:4px;color:#fff;content:attr(data-balloon);font-size:12px;padding:.5em 1em;white-space:nowrap;margin-bottom:11px}[data-balloon]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%280%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:6px;width:18px;content:"";margin-bottom:5px}[data-balloon]:hover:after,[data-balloon]:hover:before,[data-balloon][data-balloon-visible]:after,[data-balloon][data-balloon-visible]:before{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;pointer-events:auto;-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);transform:translate(-50%,0)}[data-balloon].font-awesome:after{font-family:FontAwesome}[data-balloon][data-balloon-break]:after{white-space:pre}[data-balloon-pos=down]:after,[data-balloon-pos=down]:before{bottom:auto;left:50%;top:100%;-webkit-transform:translate(-50%,-10px);-ms-transform:translate(-50%,-10px);transform:translate(-50%,-10px)}[data-balloon-pos=down]:after{margin-top:11px}[data-balloon-pos=down]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%28180%2018%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:6px;width:18px;margin-top:5px;margin-bottom:0}[data-balloon-pos=down]:hover:after,[data-balloon-pos=down]:hover:before,[data-balloon-pos=down][data-balloon-visible]:after,[data-balloon-pos=down][data-balloon-visible]:before{-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);transform:translate(-50%,0)}[data-balloon-pos=left]:after,[data-balloon-pos=left]:before{bottom:auto;left:auto;right:100%;top:50%;-webkit-transform:translate(10px,-50%);-ms-transform:translate(10px,-50%);transform:translate(10px,-50%)}[data-balloon-pos=left]:after{margin-right:11px}[data-balloon-pos=left]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%28-90%2018%2018%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:18px;width:6px;margin-right:5px;margin-bottom:0}[data-balloon-pos=left]:hover:after,[data-balloon-pos=left]:hover:before,[data-balloon-pos=left][data-balloon-visible]:after,[data-balloon-pos=left][data-balloon-visible]:before{-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}[data-balloon-pos=right]:after,[data-balloon-pos=right]:before{bottom:auto;left:100%;top:50%;-webkit-transform:translate(-10px,-50%);-ms-transform:translate(-10px,-50%);transform:translate(-10px,-50%)}[data-balloon-pos=right]:after{margin-left:11px}[data-balloon-pos=right]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%2890%206%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:18px;width:6px;margin-bottom:0;margin-left:5px}[data-balloon-pos=right]:hover:after,[data-balloon-pos=right]:hover:before,[data-balloon-pos=right][data-balloon-visible]:after,[data-balloon-pos=right][data-balloon-visible]:before{-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}[data-balloon-length]:after{white-space:normal}[data-balloon-length=small]:after{width:80px}[data-balloon-length=medium]:after{width:150px}[data-balloon-length=large]:after{width:260px}[data-balloon-length=xlarge]:after{width:90vw}@media screen and (min-width:768px){[data-balloon-length=xlarge]:after{width:380px}}[data-balloon-length=fit]:after{width:100%}
|
366 |
-
|
367 |
-
/** Balloon.css overrides **/
|
368 |
-
[data-balloon]:after,
|
369 |
-
[data-balloon]:before {
|
370 |
-
text-align: center;
|
371 |
-
line-height: 1.2em;
|
372 |
-
}
|
373 |
-
|
374 |
-
.foogallery-items-view-switch-container.hidden {
|
375 |
-
display: none;
|
376 |
-
}
|
377 |
-
|
378 |
-
.foogallery-items-view-switch-container {
|
379 |
-
display: inline-block;
|
380 |
-
margin-left: 10px;
|
381 |
-
}
|
382 |
-
|
383 |
-
.foogallery-items-view-switch {
|
384 |
-
vertical-align: middle;
|
385 |
-
display: inline-block;
|
386 |
-
}
|
387 |
-
|
388 |
-
.foogallery-items-view-switch a {
|
389 |
-
padding: 4px 10px;
|
390 |
-
line-height: 12px;
|
391 |
-
border: 1px solid #ccc;
|
392 |
-
float: left;
|
393 |
-
display: inline-block;
|
394 |
-
text-decoration: none;
|
395 |
-
margin-right: 10px;
|
396 |
-
border-radius: 4px;
|
397 |
-
text-align: center;
|
398 |
-
white-space: nowrap;
|
399 |
-
vertical-align: middle;
|
400 |
-
-ms-touch-action: manipulation;
|
401 |
-
touch-action: manipulation;
|
402 |
-
cursor: pointer;
|
403 |
-
-webkit-user-select: none;
|
404 |
-
-moz-user-select: none;
|
405 |
-
-ms-user-select: none;
|
406 |
-
user-select: none;
|
407 |
-
background: #f7f7f7;
|
408 |
-
color: #555;
|
409 |
-
}
|
410 |
-
|
411 |
-
.foogallery-items-view-switch a:first-child:not(:last-child) {
|
412 |
-
border-top-right-radius: 0;
|
413 |
-
border-bottom-right-radius: 0;
|
414 |
-
}
|
415 |
-
|
416 |
-
.foogallery-items-view-switch a:last-child:not(:first-child) {
|
417 |
-
border-top-left-radius: 0;
|
418 |
-
border-bottom-left-radius: 0;
|
419 |
-
}
|
420 |
-
|
421 |
-
.foogallery-items-view-switch a:first-child {
|
422 |
-
margin-right: 0;
|
423 |
-
}
|
424 |
-
|
425 |
-
.foogallery-items-view-switch a.current {
|
426 |
-
background: #0085ba;
|
427 |
-
color: #fff;
|
428 |
-
}
|
429 |
-
|
430 |
-
.foogallery-items-view-switch a+a {
|
431 |
-
margin-left: -1px;
|
432 |
-
}
|
433 |
-
|
434 |
-
.foogallery_preview_container {
|
435 |
-
position: relative;
|
436 |
-
padding: 10px;
|
437 |
-
}
|
438 |
-
|
439 |
-
.foogallery_preview_container.loading:after {
|
440 |
-
content: '';
|
441 |
-
position: absolute;
|
442 |
-
top: 0;
|
443 |
-
left: 0;
|
444 |
-
right: 0;
|
445 |
-
bottom: 0;
|
446 |
-
background: #fff;
|
447 |
-
opacity: 0.8;
|
448 |
-
z-index: 159900;
|
449 |
-
}
|
450 |
-
|
451 |
-
.fs-submenu-item.foogallery {
|
452 |
-
font-size: 13px;
|
453 |
-
line-height: 1.2;
|
454 |
-
}
|
455 |
-
|
456 |
-
.foogallery_template_field_type-thumb_size_no_crop input.small-text+label {
|
457 |
-
margin-left: 10px;
|
458 |
-
}
|
459 |
-
|
460 |
-
.foogallery_template_field_type-thumb_size_no_crop label+input {
|
461 |
-
margin-left: 5px;
|
462 |
}
|
1 |
+
.foogallery-attachments-list .add-attachment {
|
2 |
+
background: #ddd;
|
3 |
+
box-shadow: 0 0 0 1px #ccc;
|
4 |
+
width: 150px;
|
5 |
+
position: relative;
|
6 |
+
float: left;
|
7 |
+
padding: 0;
|
8 |
+
color: #464646;
|
9 |
+
list-style: none;
|
10 |
+
text-align: center;
|
11 |
+
-webkit-user-select: none;
|
12 |
+
-moz-user-select: none;
|
13 |
+
-ms-user-select: none;
|
14 |
+
-o-user-select: none;
|
15 |
+
user-select: none;
|
16 |
+
}
|
17 |
+
|
18 |
+
.foogallery-attachments-list .add-attachment a {
|
19 |
+
display: table-cell;
|
20 |
+
vertical-align: middle;
|
21 |
+
height: 150px;
|
22 |
+
text-align: center;
|
23 |
+
width: 150px;
|
24 |
+
height: 150px;
|
25 |
+
color:#666;
|
26 |
+
font-weight: bold;
|
27 |
+
text-decoration: none;
|
28 |
+
}
|
29 |
+
|
30 |
+
.foogallery-attachments-list .add-attachment a:hover {
|
31 |
+
color:#444;
|
32 |
+
}
|
33 |
+
|
34 |
+
.foogallery-attachments-list .add-attachment a div.dashicons {
|
35 |
+
font-size:50px;
|
36 |
+
width: 50px;
|
37 |
+
height: 50px;
|
38 |
+
}
|
39 |
+
|
40 |
+
.foogallery-attachments-list .add-attachment a span {
|
41 |
+
display: block;
|
42 |
+
}
|
43 |
+
|
44 |
+
|
45 |
+
.foogallery-attachments-list .attachment-preview,
|
46 |
+
.foogallery-attachments-list .attachment-preview .thumbnail {
|
47 |
+
width: 150px;
|
48 |
+
height: 150px;
|
49 |
+
cursor:move;
|
50 |
+
}
|
51 |
+
|
52 |
+
.foogallery-attachments-list .attachment {
|
53 |
+
border: transparent 1px solid;
|
54 |
+
box-shadow: none !important;
|
55 |
+
width: auto !important;
|
56 |
+
padding: 0 !important;
|
57 |
+
}
|
58 |
+
|
59 |
+
.foogallery-attachments-list .attachment.placeholder {
|
60 |
+
width: 150px !important;
|
61 |
+
height: 150px;
|
62 |
+
border: #1e8cbe 1px dashed;
|
63 |
+
background: #eee;
|
64 |
+
}
|
65 |
+
|
66 |
+
.foogallery-attachments-list li {
|
67 |
+
margin: 0px 10px 10px 0px !important;
|
68 |
+
}
|
69 |
+
|
70 |
+
.foogallery-attachments-list .attachment.ui-sortable-helper {
|
71 |
+
opacity: 0.5;
|
72 |
+
}
|
73 |
+
|
74 |
+
.foogallery-attachments-list .attachment.ui-sortable-helper:hover .close {
|
75 |
+
display: none;
|
76 |
+
}
|
77 |
+
|
78 |
+
.foogallery-attachments-list input.describe {
|
79 |
+
margin:0;
|
80 |
+
width: 150px;
|
81 |
+
font-size: 12px;
|
82 |
+
}
|
83 |
+
|
84 |
+
.foogallery-attachments-list .attachment .attachment-preview a {
|
85 |
+
display: none;
|
86 |
+
position: absolute;
|
87 |
+
padding: 0;
|
88 |
+
font-size: 20px;
|
89 |
+
line-height: 20px;
|
90 |
+
text-align: center;
|
91 |
+
text-decoration: none;
|
92 |
+
background-color: #444;
|
93 |
+
border-top-right-radius: 50%;
|
94 |
+
border-top-left-radius: 50%;
|
95 |
+
border-bottom-right-radius: 50%;
|
96 |
+
border-bottom-left-radius: 50%;
|
97 |
+
}
|
98 |
+
|
99 |
+
.foogallery-attachments-list .attachment .attachment-preview:hover a {
|
100 |
+
display: block;
|
101 |
+
}
|
102 |
+
|
103 |
+
.foogallery-attachments-list .attachment .attachment-preview a span {
|
104 |
+
color:#fff;
|
105 |
+
}
|
106 |
+
|
107 |
+
.foogallery-attachments-list .attachment .attachment-preview a:hover span {
|
108 |
+
color:#ddd;
|
109 |
+
}
|
110 |
+
|
111 |
+
.foogallery-attachments-list .attachment .attachment-preview a.remove {
|
112 |
+
top: 5px;
|
113 |
+
right: 5px;
|
114 |
+
}
|
115 |
+
|
116 |
+
.foogallery-attachments-list .attachment .attachment-preview a.info {
|
117 |
+
top: 5px;
|
118 |
+
left: 5px;
|
119 |
+
}
|
120 |
+
|
121 |
+
.spacer {
|
122 |
+
display: inline-block;
|
123 |
+
width:30px;
|
124 |
+
}
|
125 |
+
|
126 |
+
.foogallery_template_field td {
|
127 |
+
padding-bottom: 20px;
|
128 |
+
}
|
129 |
+
|
130 |
+
.foogallery_template_field th {
|
131 |
+
vertical-align: top;
|
132 |
+
text-align: left;
|
133 |
+
padding-top: 0.3em;
|
134 |
+
padding-right: 10px;
|
135 |
+
}
|
136 |
+
|
137 |
+
.foogallery_template_field textarea {
|
138 |
+
min-width: 500px;
|
139 |
+
min-height: 100px;
|
140 |
+
}
|
141 |
+
|
142 |
+
.foogallery_template_field.foogallery_template_field_type-help {
|
143 |
+
border-bottom: none;
|
144 |
+
}
|
145 |
+
|
146 |
+
.foogallery_template_field.foogallery_template_field_type-help td {
|
147 |
+
padding-bottom: 0;
|
148 |
+
}
|
149 |
+
|
150 |
+
.foogallery_template_field.foogallery_template_field_type-icon td {
|
151 |
+
padding-bottom: 0;
|
152 |
+
}
|
153 |
+
|
154 |
+
.foogallery_metabox_field-icon label {
|
155 |
+
display:inline-block;
|
156 |
+
margin-right:10px;
|
157 |
+
border:solid 3px transparent;
|
158 |
+
background:#aaa;
|
159 |
+
border-radius: 3px;
|
160 |
+
-moz-border-radius: 3px;
|
161 |
+
-webkit-border-radius: 3px;
|
162 |
+
padding:5px;
|
163 |
+
line-height: 0;
|
164 |
+
margin-bottom: 10px;
|
165 |
+
}
|
166 |
+
|
167 |
+
.foogallery_metabox_field-icon input:checked + label {
|
168 |
+
border:solid 3px #444;
|
169 |
+
background: #888;
|
170 |
+
}
|
171 |
+
|
172 |
+
.foogallery_metabox_field-icon label:hover {
|
173 |
+
border:solid 3px #444;
|
174 |
+
}
|
175 |
+
|
176 |
+
.foogallery_template_field.foogallery_template_field_type-htmlicon td {
|
177 |
+
padding-bottom: 0;
|
178 |
+
}
|
179 |
+
|
180 |
+
.foogallery_metabox_field-htmlicon label {
|
181 |
+
display:inline-block;
|
182 |
+
margin-right:10px;
|
183 |
+
border:solid 3px transparent;
|
184 |
+
background:#aaa;
|
185 |
+
border-radius: 3px;
|
186 |
+
-moz-border-radius: 3px;
|
187 |
+
-webkit-border-radius: 3px;
|
188 |
+
padding:5px;
|
189 |
+
line-height: 0;
|
190 |
+
margin-bottom: 10px;
|
191 |
+
}
|
192 |
+
|
193 |
+
.foogallery_metabox_field-htmlicon input:checked + label {
|
194 |
+
border:solid 3px #444;
|
195 |
+
background: #888;
|
196 |
+
}
|
197 |
+
|
198 |
+
.foogallery_metabox_field-htmlicon label:hover {
|
199 |
+
border:solid 3px #444;
|
200 |
+
}
|
201 |
+
|
202 |
+
.foogallery_metabox_field-thumb_size label {
|
203 |
+
vertical-align: baseline;
|
204 |
+
}
|
205 |
+
|
206 |
+
.foogallery_metabox_field-thumb_size input[type="number"] {
|
207 |
+
margin-right: 10px;
|
208 |
+
margin-left: 10px;
|
209 |
+
}
|
210 |
+
|
211 |
+
.foogallery_template_field_type-text input.small-text {
|
212 |
+
width: 65px;
|
213 |
+
height: 28px;
|
214 |
+
line-height: 1;
|
215 |
+
}
|
216 |
+
|
217 |
+
#foogallery_pages ul li:hover .row-actions { visibility: visible; }
|
218 |
+
|
219 |
+
.foogallery-shortcode {
|
220 |
+
text-align: center;
|
221 |
+
}
|
222 |
+
|
223 |
+
.foogallery-shortcode input {
|
224 |
+
cursor: pointer;
|
225 |
+
text-align: center;
|
226 |
+
padding: 10px;
|
227 |
+
font-family: "courier new", courier;
|
228 |
+
border: none;
|
229 |
+
box-shadow: none;
|
230 |
+
background: #efefef;
|
231 |
+
}
|
232 |
+
|
233 |
+
.wp-list-table .foogallery-shortcode {
|
234 |
+
cursor: pointer;
|
235 |
+
font-size: 1em;
|
236 |
+
border: none;
|
237 |
+
box-shadow: none;
|
238 |
+
background: #efefef;
|
239 |
+
font-family: "courier new", courier;
|
240 |
+
}
|
241 |
+
|
242 |
+
.foogallery-shortcode-message {
|
243 |
+
font-style: italic;
|
244 |
+
color: #2EA2CC !important;
|
245 |
+
}
|
246 |
+
|
247 |
+
.foogallery-help {
|
248 |
+
position: relative;
|
249 |
+
display: block;
|
250 |
+
line-height: 19px;
|
251 |
+
padding: 11px 10px 11px 40px;
|
252 |
+
font-size: 14px;
|
253 |
+
text-align: left;
|
254 |
+
margin: 5px 0 0 2px;
|
255 |
+
background-color: #F4F4FF;
|
256 |
+
border-left: 4px solid #1e8cbe;
|
257 |
+
-webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
258 |
+
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
259 |
+
}
|
260 |
+
|
261 |
+
.foogallery-help:before {
|
262 |
+
content: "\f223";
|
263 |
+
font: 400 30px/1 dashicons !important;
|
264 |
+
speak: none;
|
265 |
+
color: #1e8cbe;
|
266 |
+
display: inline-block;
|
267 |
+
-webkit-font-smoothing: antialiased;
|
268 |
+
-moz-osx-font-smoothing: grayscale;
|
269 |
+
vertical-align: bottom;
|
270 |
+
position: absolute;
|
271 |
+
left: 5px;
|
272 |
+
margin-top: -15px;
|
273 |
+
top: 50%;
|
274 |
+
height: 1em;
|
275 |
+
}
|
276 |
+
|
277 |
+
#post-body.columns-2 #postbox-container-1 .foogallery-help {
|
278 |
+
padding-left: 11px;
|
279 |
+
margin-left: 5px;
|
280 |
+
}
|
281 |
+
|
282 |
+
#post-body.columns-2 #postbox-container-1 .foogallery-help:before {
|
283 |
+
content: '';
|
284 |
+
}
|
285 |
+
|
286 |
+
/** <gallery settings styling overrides> **/
|
287 |
+
|
288 |
+
.foogallery-metabox-settings {
|
289 |
+
width: 100%;
|
290 |
+
border-collapse: collapse;
|
291 |
+
}
|
292 |
+
|
293 |
+
.foogallery-metabox-settings th {
|
294 |
+
font-weight: normal;
|
295 |
+
padding: 10px;
|
296 |
+
width: 180px;
|
297 |
+
}
|
298 |
+
|
299 |
+
.foogallery-metabox-settings tr {
|
300 |
+
border-bottom: solid 1px #EEE;
|
301 |
+
}
|
302 |
+
|
303 |
+
.foogallery-metabox-settings td {
|
304 |
+
padding: 10px;
|
305 |
+
}
|
306 |
+
|
307 |
+
.foogallery_metabox_field-radio > input,
|
308 |
+
.foogallery_metabox_field-radio > label {
|
309 |
+
margin-bottom: 10px;
|
310 |
+
display: inline-block;
|
311 |
+
}
|
312 |
+
|
313 |
+
.foogallery_metabox_field-radio input[type="checkbox"],
|
314 |
+
.foogallery_metabox_field-radio input[type="radio"] {
|
315 |
+
margin: 0 0 10px 0;
|
316 |
+
}
|
317 |
+
|
318 |
+
.foogallery_metabox_field-select select {
|
319 |
+
min-width: 250px;
|
320 |
+
}
|
321 |
+
|
322 |
+
.foogallery-thumbsize-crop {
|
323 |
+
margin-top: 10px;
|
324 |
+
}
|
325 |
+
|
326 |
+
.foogallery_metabox_field-checkboxlist > input,
|
327 |
+
.foogallery_metabox_field-checkboxlist > label {
|
328 |
+
margin-bottom: 10px;
|
329 |
+
display: inline-block;
|
330 |
+
}
|
331 |
+
|
332 |
+
.foogallery_metabox_field-checkboxlist input[type="checkbox"] {
|
333 |
+
margin: 0 0 10px 0;
|
334 |
+
}
|
335 |
+
|
336 |
+
/** </gallery settings styling overrides> **/
|
337 |
+
|
338 |
+
.foogallery_metabox_custom_css {
|
339 |
+
width: 100%;
|
340 |
+
height: 10em;
|
341 |
+
}
|
342 |
+
|
343 |
+
.foo-nav-tabs a:focus {
|
344 |
+
box-shadow: none;
|
345 |
+
outline: 0;
|
346 |
+
}
|
347 |
+
|
348 |
+
.foogallery-thumbnail-preview {
|
349 |
+
display: inline-block;
|
350 |
+
}
|
351 |
+
|
352 |
+
#foogallery_apply_retina_support_container {
|
353 |
+
margin-top: 5px;
|
354 |
+
}
|
355 |
+
|
356 |
+
.widefat th.column-icon {
|
357 |
+
width: 60px;
|
358 |
+
}
|
359 |
+
|
360 |
+
#foogallery_settings .inside {
|
361 |
+
margin: 0;
|
362 |
+
padding: 0;
|
363 |
+
}
|
364 |
+
/** Balloon.css **/
|
365 |
+
button[data-balloon]{overflow:visible}[data-balloon]{position:relative}[data-balloon]:after,[data-balloon]:before{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-khtml-opacity:0;-moz-opacity:0;opacity:0;pointer-events:none;-webkit-transition:all .18s ease-out .18s;transition:all .18s ease-out .18s;bottom:100%;left:50%;position:absolute;z-index:10;-webkit-transform:translate(-50%,10px);-ms-transform:translate(-50%,10px);transform:translate(-50%,10px);-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top}[data-balloon]:after{background:rgba(17,17,17,.9);border-radius:4px;color:#fff;content:attr(data-balloon);font-size:12px;padding:.5em 1em;white-space:nowrap;margin-bottom:11px}[data-balloon]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%280%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:6px;width:18px;content:"";margin-bottom:5px}[data-balloon]:hover:after,[data-balloon]:hover:before,[data-balloon][data-balloon-visible]:after,[data-balloon][data-balloon-visible]:before{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;pointer-events:auto;-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);transform:translate(-50%,0)}[data-balloon].font-awesome:after{font-family:FontAwesome}[data-balloon][data-balloon-break]:after{white-space:pre}[data-balloon-pos=down]:after,[data-balloon-pos=down]:before{bottom:auto;left:50%;top:100%;-webkit-transform:translate(-50%,-10px);-ms-transform:translate(-50%,-10px);transform:translate(-50%,-10px)}[data-balloon-pos=down]:after{margin-top:11px}[data-balloon-pos=down]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%28180%2018%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:6px;width:18px;margin-top:5px;margin-bottom:0}[data-balloon-pos=down]:hover:after,[data-balloon-pos=down]:hover:before,[data-balloon-pos=down][data-balloon-visible]:after,[data-balloon-pos=down][data-balloon-visible]:before{-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);transform:translate(-50%,0)}[data-balloon-pos=left]:after,[data-balloon-pos=left]:before{bottom:auto;left:auto;right:100%;top:50%;-webkit-transform:translate(10px,-50%);-ms-transform:translate(10px,-50%);transform:translate(10px,-50%)}[data-balloon-pos=left]:after{margin-right:11px}[data-balloon-pos=left]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%28-90%2018%2018%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:18px;width:6px;margin-right:5px;margin-bottom:0}[data-balloon-pos=left]:hover:after,[data-balloon-pos=left]:hover:before,[data-balloon-pos=left][data-balloon-visible]:after,[data-balloon-pos=left][data-balloon-visible]:before{-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}[data-balloon-pos=right]:after,[data-balloon-pos=right]:before{bottom:auto;left:100%;top:50%;-webkit-transform:translate(-10px,-50%);-ms-transform:translate(-10px,-50%);transform:translate(-10px,-50%)}[data-balloon-pos=right]:after{margin-left:11px}[data-balloon-pos=right]:before{background:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%2890%206%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat;background-size:100% auto;height:18px;width:6px;margin-bottom:0;margin-left:5px}[data-balloon-pos=right]:hover:after,[data-balloon-pos=right]:hover:before,[data-balloon-pos=right][data-balloon-visible]:after,[data-balloon-pos=right][data-balloon-visible]:before{-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}[data-balloon-length]:after{white-space:normal}[data-balloon-length=small]:after{width:80px}[data-balloon-length=medium]:after{width:150px}[data-balloon-length=large]:after{width:260px}[data-balloon-length=xlarge]:after{width:90vw}@media screen and (min-width:768px){[data-balloon-length=xlarge]:after{width:380px}}[data-balloon-length=fit]:after{width:100%}
|
366 |
+
|
367 |
+
/** Balloon.css overrides **/
|
368 |
+
[data-balloon]:after,
|
369 |
+
[data-balloon]:before {
|
370 |
+
text-align: center;
|
371 |
+
line-height: 1.2em;
|
372 |
+
}
|
373 |
+
|
374 |
+
.foogallery-items-view-switch-container.hidden {
|
375 |
+
display: none;
|
376 |
+
}
|
377 |
+
|
378 |
+
.foogallery-items-view-switch-container {
|
379 |
+
display: inline-block;
|
380 |
+
margin-left: 10px;
|
381 |
+
}
|
382 |
+
|
383 |
+
.foogallery-items-view-switch {
|
384 |
+
vertical-align: middle;
|
385 |
+
display: inline-block;
|
386 |
+
}
|
387 |
+
|
388 |
+
.foogallery-items-view-switch a {
|
389 |
+
padding: 4px 10px;
|
390 |
+
line-height: 12px;
|
391 |
+
border: 1px solid #ccc;
|
392 |
+
float: left;
|
393 |
+
display: inline-block;
|
394 |
+
text-decoration: none;
|
395 |
+
margin-right: 10px;
|
396 |
+
border-radius: 4px;
|
397 |
+
text-align: center;
|
398 |
+
white-space: nowrap;
|
399 |
+
vertical-align: middle;
|
400 |
+
-ms-touch-action: manipulation;
|
401 |
+
touch-action: manipulation;
|
402 |
+
cursor: pointer;
|
403 |
+
-webkit-user-select: none;
|
404 |
+
-moz-user-select: none;
|
405 |
+
-ms-user-select: none;
|
406 |
+
user-select: none;
|
407 |
+
background: #f7f7f7;
|
408 |
+
color: #555;
|
409 |
+
}
|
410 |
+
|
411 |
+
.foogallery-items-view-switch a:first-child:not(:last-child) {
|
412 |
+
border-top-right-radius: 0;
|
413 |
+
border-bottom-right-radius: 0;
|
414 |
+
}
|
415 |
+
|
416 |
+
.foogallery-items-view-switch a:last-child:not(:first-child) {
|
417 |
+
border-top-left-radius: 0;
|
418 |
+
border-bottom-left-radius: 0;
|
419 |
+
}
|
420 |
+
|
421 |
+
.foogallery-items-view-switch a:first-child {
|
422 |
+
margin-right: 0;
|
423 |
+
}
|
424 |
+
|
425 |
+
.foogallery-items-view-switch a.current {
|
426 |
+
background: #0085ba;
|
427 |
+
color: #fff;
|
428 |
+
}
|
429 |
+
|
430 |
+
.foogallery-items-view-switch a+a {
|
431 |
+
margin-left: -1px;
|
432 |
+
}
|
433 |
+
|
434 |
+
.foogallery_preview_container {
|
435 |
+
position: relative;
|
436 |
+
padding: 10px;
|
437 |
+
}
|
438 |
+
|
439 |
+
.foogallery_preview_container.loading:after {
|
440 |
+
content: '';
|
441 |
+
position: absolute;
|
442 |
+
top: 0;
|
443 |
+
left: 0;
|
444 |
+
right: 0;
|
445 |
+
bottom: 0;
|
446 |
+
background: #fff;
|
447 |
+
opacity: 0.8;
|
448 |
+
z-index: 159900;
|
449 |
+
}
|
450 |
+
|
451 |
+
.fs-submenu-item.foogallery {
|
452 |
+
font-size: 13px;
|
453 |
+
line-height: 1.2;
|
454 |
+
}
|
455 |
+
|
456 |
+
.foogallery_template_field_type-thumb_size_no_crop input.small-text+label {
|
457 |
+
margin-left: 10px;
|
458 |
+
}
|
459 |
+
|
460 |
+
.foogallery_template_field_type-thumb_size_no_crop label+input {
|
461 |
+
margin-left: 5px;
|
462 |
}
|
css/admin-page-foogallery-extensions.css
CHANGED
@@ -1,297 +1,297 @@
|
|
1 |
-
.extensions-wrap {
|
2 |
-
margin-left: 0;
|
3 |
-
width: 98%;
|
4 |
-
max-width: 98%;
|
5 |
-
}
|
6 |
-
|
7 |
-
.foogallery-extension-browser .extension-controls {
|
8 |
-
margin-bottom: 10px;
|
9 |
-
}
|
10 |
-
|
11 |
-
.foogallery-extension-browser .extension-controls .subsubsub {
|
12 |
-
margin:0;
|
13 |
-
}
|
14 |
-
|
15 |
-
.extension-search-box {
|
16 |
-
display: inline-block;
|
17 |
-
margin-left: 20px;
|
18 |
-
float: left;
|
19 |
-
}
|
20 |
-
|
21 |
-
.extension-search-box #extensions-search-input {
|
22 |
-
position: relative;
|
23 |
-
top: -4px;
|
24 |
-
margin: 0;
|
25 |
-
width: 280px;
|
26 |
-
font-size: 16px;
|
27 |
-
font-weight: 300;
|
28 |
-
line-height: 1.4em;
|
29 |
-
}
|
30 |
-
|
31 |
-
.extension-reload {
|
32 |
-
float: left;
|
33 |
-
display: inline-block;
|
34 |
-
margin-left: 20px;
|
35 |
-
vertical-align: middle;
|
36 |
-
}
|
37 |
-
|
38 |
-
.extension-reload .button {
|
39 |
-
vertical-align: middle;
|
40 |
-
}
|
41 |
-
|
42 |
-
.extension-reload span.dashicons {
|
43 |
-
vertical-align: middle;
|
44 |
-
font-size: 18px;
|
45 |
-
}
|
46 |
-
|
47 |
-
.extension-reload .button.disabled span.dashicons {
|
48 |
-
-webkit-animation: rotation 2s infinite linear;
|
49 |
-
animation: rotation 2s infinite linear;
|
50 |
-
}
|
51 |
-
|
52 |
-
div.foogallery-message-success {
|
53 |
-
border-left: 4px solid #7ad03a;
|
54 |
-
padding: 1px 12px;
|
55 |
-
background-color: #fff;
|
56 |
-
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
57 |
-
box-shadow: 0 1px 1px 0 rgba(0,0,0,.1)
|
58 |
-
}
|
59 |
-
|
60 |
-
div.foogallery-message-error {
|
61 |
-
border-left: 4px solid #dd3d36;
|
62 |
-
background: #fff;
|
63 |
-
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
64 |
-
box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
65 |
-
padding: 1px 12px
|
66 |
-
}
|
67 |
-
|
68 |
-
.spinner {
|
69 |
-
position: absolute;
|
70 |
-
margin-top: 15px;
|
71 |
-
}
|
72 |
-
|
73 |
-
.foogallery-extension-browser {
|
74 |
-
margin-top: 10px;
|
75 |
-
width: 100%;
|
76 |
-
position: relative;
|
77 |
-
}
|
78 |
-
|
79 |
-
.foogallery-extension-browser * {
|
80 |
-
box-sizing: border-box;
|
81 |
-
}
|
82 |
-
|
83 |
-
.foogallery-extension-browser .extensions .extension {
|
84 |
-
float: left;
|
85 |
-
margin: 0 20px 20px 0;
|
86 |
-
position: relative;
|
87 |
-
width: 400px;
|
88 |
-
height: 300px;
|
89 |
-
border: 1px solid #DEDEDE;
|
90 |
-
-webkit-box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1);
|
91 |
-
box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1);
|
92 |
-
-webkit-box-sizing: border-box;
|
93 |
-
-moz-box-sizing: border-box;
|
94 |
-
box-sizing: border-box;
|
95 |
-
background: #fff;
|
96 |
-
}
|
97 |
-
|
98 |
-
.foogallery-extension-browser .extensions .extension h3 {
|
99 |
-
position: absolute;
|
100 |
-
bottom: 0;
|
101 |
-
width: 100%;
|
102 |
-
font-size: 15px;
|
103 |
-
font-weight: bold;
|
104 |
-
height: 50px;
|
105 |
-
line-height: 50px;
|
106 |
-
margin: 0;
|
107 |
-
padding-left: 15px;
|
108 |
-
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1);
|
109 |
-
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1);
|
110 |
-
overflow: hidden;
|
111 |
-
white-space: nowrap;
|
112 |
-
text-overflow: ellipsis;
|
113 |
-
background: #000;
|
114 |
-
opacity: 0.9;
|
115 |
-
color:#fff;
|
116 |
-
}
|
117 |
-
|
118 |
-
.foogallery-extension-browser .extensions .extension h3 .new {
|
119 |
-
background: #D54E21;
|
120 |
-
background: rgba(213, 78, 33, 0.95);
|
121 |
-
-webkit-border-radius: 3px;
|
122 |
-
border-radius: 3px;
|
123 |
-
padding:2px 5px;
|
124 |
-
color:#fff;
|
125 |
-
font-size: 10px;
|
126 |
-
margin-left: 5px;
|
127 |
-
margin-bottom: 3px;
|
128 |
-
}
|
129 |
-
|
130 |
-
.foogallery-extension-browser .extensions .extension h3 .tag {
|
131 |
-
background: #888;
|
132 |
-
-webkit-border-radius: 3px;
|
133 |
-
border-radius: 3px;
|
134 |
-
padding:2px 5px;
|
135 |
-
color:#000;
|
136 |
-
font-size: 9px;
|
137 |
-
margin-left: 5px;
|
138 |
-
vertical-align:top;
|
139 |
-
}
|
140 |
-
|
141 |
-
.foogallery-extension-browser .extensions .extension h3 .tag.functionality {
|
142 |
-
background: #8a5cc9;
|
143 |
-
}
|
144 |
-
|
145 |
-
.foogallery-extension-browser .extensions .extension h3 .tag.premium {
|
146 |
-
background: #080;
|
147 |
-
}
|
148 |
-
|
149 |
-
.foogallery-extension-browser .extensions .extension h3 .tag.lightbox {
|
150 |
-
background: #ff7f00;
|
151 |
-
}
|
152 |
-
|
153 |
-
.foogallery-extension-browser .extensions .extension h3 .tag.template {
|
154 |
-
background: #369;
|
155 |
-
}
|
156 |
-
|
157 |
-
.foogallery-extension-browser .extensions .extension h3 .tag.new {
|
158 |
-
background: #F00;
|
159 |
-
}
|
160 |
-
|
161 |
-
.foogallery-extension-browser .extensions .extension .screenshot {
|
162 |
-
height: 100%;
|
163 |
-
position: absolute;
|
164 |
-
left: 0;
|
165 |
-
top: 0;
|
166 |
-
width: 100%;
|
167 |
-
-webkit-transform: translateZ(0);
|
168 |
-
-webkit-transition: opacity .2s ease-in-out;
|
169 |
-
transition: opacity .2s ease-in-out;
|
170 |
-
}
|
171 |
-
|
172 |
-
.foogallery-extension-browser .extensions .extension:hover .screenshot {
|
173 |
-
opacity: .4;
|
174 |
-
}
|
175 |
-
|
176 |
-
.foogallery-extension-browser .extensions .extension .extension-actions {
|
177 |
-
-webkit-transition: opacity .1s ease-in-out;
|
178 |
-
transition: opacity .1s ease-in-out;
|
179 |
-
position: absolute;
|
180 |
-
bottom: 0;
|
181 |
-
right: 0;
|
182 |
-
height: 50px;
|
183 |
-
padding: 9px 10px 0;
|
184 |
-
}
|
185 |
-
|
186 |
-
.foogallery-extension-browser .extensions .extension .extension-details {
|
187 |
-
-ms-filter: "alpha(Opacity=0)";
|
188 |
-
opacity: 0;
|
189 |
-
position: absolute;
|
190 |
-
top: 25%;
|
191 |
-
right: 20%;
|
192 |
-
left: 20%;
|
193 |
-
background: #222;
|
194 |
-
background: rgba(0, 0, 0, 0.7);
|
195 |
-
color: #FFF;
|
196 |
-
font-size: 15px;
|
197 |
-
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);
|
198 |
-
-webkit-font-smoothing: antialiased;
|
199 |
-
font-weight: 600;
|
200 |
-
padding: 15px 12px;
|
201 |
-
text-align: center;
|
202 |
-
-webkit-border-radius: 3px;
|
203 |
-
border-radius: 3px;
|
204 |
-
-webkit-transition: opacity .1s ease-in-out;
|
205 |
-
transition: opacity .1s ease-in-out;
|
206 |
-
}
|
207 |
-
|
208 |
-
.foogallery-extension-browser .extensions .extension:hover .extension-details {
|
209 |
-
-ms-filter: "alpha(Opacity=1)";
|
210 |
-
opacity: 1;
|
211 |
-
}
|
212 |
-
|
213 |
-
.foogallery-extension-browser .extensions .extension .banner {
|
214 |
-
background: #888;
|
215 |
-
color: #FFF;
|
216 |
-
display: block;
|
217 |
-
font-size: 13px;
|
218 |
-
font-weight: 400;
|
219 |
-
height: 48px;
|
220 |
-
line-height: 48px;
|
221 |
-
padding: 0 10px 0 40px;
|
222 |
-
position: absolute;
|
223 |
-
top: 0;
|
224 |
-
right: 0;
|
225 |
-
left: 0;
|
226 |
-
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
227 |
-
overflow: hidden;
|
228 |
-
}
|
229 |
-
|
230 |
-
.foogallery-extension-browser .extensions .extension .banner:empty {
|
231 |
-
display: none;
|
232 |
-
}
|
233 |
-
|
234 |
-
.foogallery-extension-browser .extensions .extension .banner:before {
|
235 |
-
display: inline-block;
|
236 |
-
font: 400 30px/1 dashicons;
|
237 |
-
top: 10px;
|
238 |
-
left: 10px;
|
239 |
-
position: absolute;
|
240 |
-
speak: none;
|
241 |
-
-webkit-font-smoothing: antialiased;
|
242 |
-
}
|
243 |
-
|
244 |
-
.foogallery-extension-browser .extensions .extension.activated .banner {
|
245 |
-
background: #080;
|
246 |
-
}
|
247 |
-
|
248 |
-
.foogallery-extension-browser .extensions .extension.activated .banner:before {
|
249 |
-
content: "\f147";
|
250 |
-
}
|
251 |
-
|
252 |
-
.foogallery-extension-browser .extensions .extension.has_error .banner {
|
253 |
-
background: #800;
|
254 |
-
}
|
255 |
-
|
256 |
-
.foogallery-extension-browser .extensions .extension.has_error .banner:before {
|
257 |
-
content: "\f158";
|
258 |
-
}
|
259 |
-
|
260 |
-
.foogallery-extension-browser .extensions .extension.updating .banner {
|
261 |
-
background: #888;
|
262 |
-
}
|
263 |
-
|
264 |
-
.foogallery-extension-browser .extensions .extension.updating .banner:before {
|
265 |
-
content: "\f463";
|
266 |
-
-webkit-animation: rotation 2s infinite linear;
|
267 |
-
animation: rotation 2s infinite linear;
|
268 |
-
}
|
269 |
-
|
270 |
-
.foogallery-extension-browser .extensions .extension .activate,
|
271 |
-
.foogallery-extension-browser .extensions .extension .deactivate {
|
272 |
-
display: none;
|
273 |
-
}
|
274 |
-
|
275 |
-
.foogallery-extension-browser .extensions .extension.downloaded .activate {
|
276 |
-
display: block;
|
277 |
-
}
|
278 |
-
|
279 |
-
.foogallery-extension-browser .extensions .extension.downloaded .download {
|
280 |
-
display: none;
|
281 |
-
}
|
282 |
-
|
283 |
-
.foogallery-extension-browser .extensions .extension.activated .activate {
|
284 |
-
display: none;
|
285 |
-
}
|
286 |
-
|
287 |
-
.foogallery-extension-browser .extensions .extension.activated .deactivate {
|
288 |
-
display: block;
|
289 |
-
}
|
290 |
-
|
291 |
-
.foogallery-extension-browser .extensions .extension.activated .updating {
|
292 |
-
display: block;
|
293 |
-
}
|
294 |
-
|
295 |
-
.foogallery-extension-browser .extension-page {
|
296 |
-
display: none;
|
297 |
}
|
1 |
+
.extensions-wrap {
|
2 |
+
margin-left: 0;
|
3 |
+
width: 98%;
|
4 |
+
max-width: 98%;
|
5 |
+
}
|
6 |
+
|
7 |
+
.foogallery-extension-browser .extension-controls {
|
8 |
+
margin-bottom: 10px;
|
9 |
+
}
|
10 |
+
|
11 |
+
.foogallery-extension-browser .extension-controls .subsubsub {
|
12 |
+
margin:0;
|
13 |
+
}
|
14 |
+
|
15 |
+
.extension-search-box {
|
16 |
+
display: inline-block;
|
17 |
+
margin-left: 20px;
|
18 |
+
float: left;
|
19 |
+
}
|
20 |
+
|
21 |
+
.extension-search-box #extensions-search-input {
|
22 |
+
position: relative;
|
23 |
+
top: -4px;
|
24 |
+
margin: 0;
|
25 |
+
width: 280px;
|
26 |
+
font-size: 16px;
|
27 |
+
font-weight: 300;
|
28 |
+
line-height: 1.4em;
|
29 |
+
}
|
30 |
+
|
31 |
+
.extension-reload {
|
32 |
+
float: left;
|
33 |
+
display: inline-block;
|
34 |
+
margin-left: 20px;
|
35 |
+
vertical-align: middle;
|
36 |
+
}
|
37 |
+
|
38 |
+
.extension-reload .button {
|
39 |
+
vertical-align: middle;
|
40 |
+
}
|
41 |
+
|
42 |
+
.extension-reload span.dashicons {
|
43 |
+
vertical-align: middle;
|
44 |
+
font-size: 18px;
|
45 |
+
}
|
46 |
+
|
47 |
+
.extension-reload .button.disabled span.dashicons {
|
48 |
+
-webkit-animation: rotation 2s infinite linear;
|
49 |
+
animation: rotation 2s infinite linear;
|
50 |
+
}
|
51 |
+
|
52 |
+
div.foogallery-message-success {
|
53 |
+
border-left: 4px solid #7ad03a;
|
54 |
+
padding: 1px 12px;
|
55 |
+
background-color: #fff;
|
56 |
+
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
57 |
+
box-shadow: 0 1px 1px 0 rgba(0,0,0,.1)
|
58 |
+
}
|
59 |
+
|
60 |
+
div.foogallery-message-error {
|
61 |
+
border-left: 4px solid #dd3d36;
|
62 |
+
background: #fff;
|
63 |
+
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
64 |
+
box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
65 |
+
padding: 1px 12px
|
66 |
+
}
|
67 |
+
|
68 |
+
.spinner {
|
69 |
+
position: absolute;
|
70 |
+
margin-top: 15px;
|
71 |
+
}
|
72 |
+
|
73 |
+
.foogallery-extension-browser {
|
74 |
+
margin-top: 10px;
|
75 |
+
width: 100%;
|
76 |
+
position: relative;
|
77 |
+
}
|
78 |
+
|
79 |
+
.foogallery-extension-browser * {
|
80 |
+
box-sizing: border-box;
|
81 |
+
}
|
82 |
+
|
83 |
+
.foogallery-extension-browser .extensions .extension {
|
84 |
+
float: left;
|
85 |
+
margin: 0 20px 20px 0;
|
86 |
+
position: relative;
|
87 |
+
width: 400px;
|
88 |
+
height: 300px;
|
89 |
+
border: 1px solid #DEDEDE;
|
90 |
+
-webkit-box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1);
|
91 |
+
box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1);
|
92 |
+
-webkit-box-sizing: border-box;
|
93 |
+
-moz-box-sizing: border-box;
|
94 |
+
box-sizing: border-box;
|
95 |
+
background: #fff;
|
96 |
+
}
|
97 |
+
|
98 |
+
.foogallery-extension-browser .extensions .extension h3 {
|
99 |
+
position: absolute;
|
100 |
+
bottom: 0;
|
101 |
+
width: 100%;
|
102 |
+
font-size: 15px;
|
103 |
+
font-weight: bold;
|
104 |
+
height: 50px;
|
105 |
+
line-height: 50px;
|
106 |
+
margin: 0;
|
107 |
+
padding-left: 15px;
|
108 |
+
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1);
|
109 |
+
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1);
|
110 |
+
overflow: hidden;
|
111 |
+
white-space: nowrap;
|
112 |
+
text-overflow: ellipsis;
|
113 |
+
background: #000;
|
114 |
+
opacity: 0.9;
|
115 |
+
color:#fff;
|
116 |
+
}
|
117 |
+
|
118 |
+
.foogallery-extension-browser .extensions .extension h3 .new {
|
119 |
+
background: #D54E21;
|
120 |
+
background: rgba(213, 78, 33, 0.95);
|
121 |
+
-webkit-border-radius: 3px;
|
122 |
+
border-radius: 3px;
|
123 |
+
padding:2px 5px;
|
124 |
+
color:#fff;
|
125 |
+
font-size: 10px;
|
126 |
+
margin-left: 5px;
|
127 |
+
margin-bottom: 3px;
|
128 |
+
}
|
129 |
+
|
130 |
+
.foogallery-extension-browser .extensions .extension h3 .tag {
|
131 |
+
background: #888;
|
132 |
+
-webkit-border-radius: 3px;
|
133 |
+
border-radius: 3px;
|
134 |
+
padding:2px 5px;
|
135 |
+
color:#000;
|
136 |
+
font-size: 9px;
|
137 |
+
margin-left: 5px;
|
138 |
+
vertical-align:top;
|
139 |
+
}
|
140 |
+
|
141 |
+
.foogallery-extension-browser .extensions .extension h3 .tag.functionality {
|
142 |
+
background: #8a5cc9;
|
143 |
+
}
|
144 |
+
|
145 |
+
.foogallery-extension-browser .extensions .extension h3 .tag.premium {
|
146 |
+
background: #080;
|
147 |
+
}
|
148 |
+
|
149 |
+
.foogallery-extension-browser .extensions .extension h3 .tag.lightbox {
|
150 |
+
background: #ff7f00;
|
151 |
+
}
|
152 |
+
|
153 |
+
.foogallery-extension-browser .extensions .extension h3 .tag.template {
|
154 |
+
background: #369;
|
155 |
+
}
|
156 |
+
|
157 |
+
.foogallery-extension-browser .extensions .extension h3 .tag.new {
|
158 |
+
background: #F00;
|
159 |
+
}
|
160 |
+
|
161 |
+
.foogallery-extension-browser .extensions .extension .screenshot {
|
162 |
+
height: 100%;
|
163 |
+
position: absolute;
|
164 |
+
left: 0;
|
165 |
+
top: 0;
|
166 |
+
width: 100%;
|
167 |
+
-webkit-transform: translateZ(0);
|
168 |
+
-webkit-transition: opacity .2s ease-in-out;
|
169 |
+
transition: opacity .2s ease-in-out;
|
170 |
+
}
|
171 |
+
|
172 |
+
.foogallery-extension-browser .extensions .extension:hover .screenshot {
|
173 |
+
opacity: .4;
|
174 |
+
}
|
175 |
+
|
176 |
+
.foogallery-extension-browser .extensions .extension .extension-actions {
|
177 |
+
-webkit-transition: opacity .1s ease-in-out;
|
178 |
+
transition: opacity .1s ease-in-out;
|
179 |
+
position: absolute;
|
180 |
+
bottom: 0;
|
181 |
+
right: 0;
|
182 |
+
height: 50px;
|
183 |
+
padding: 9px 10px 0;
|
184 |
+
}
|
185 |
+
|
186 |
+
.foogallery-extension-browser .extensions .extension .extension-details {
|
187 |
+
-ms-filter: "alpha(Opacity=0)";
|
188 |
+
opacity: 0;
|
189 |
+
position: absolute;
|
190 |
+
top: 25%;
|
191 |
+
right: 20%;
|
192 |
+
left: 20%;
|
193 |
+
background: #222;
|
194 |
+
background: rgba(0, 0, 0, 0.7);
|
195 |
+
color: #FFF;
|
196 |
+
font-size: 15px;
|
197 |
+
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);
|
198 |
+
-webkit-font-smoothing: antialiased;
|
199 |
+
font-weight: 600;
|
200 |
+
padding: 15px 12px;
|
201 |
+
text-align: center;
|
202 |
+
-webkit-border-radius: 3px;
|
203 |
+
border-radius: 3px;
|
204 |
+
-webkit-transition: opacity .1s ease-in-out;
|
205 |
+
transition: opacity .1s ease-in-out;
|
206 |
+
}
|
207 |
+
|
208 |
+
.foogallery-extension-browser .extensions .extension:hover .extension-details {
|
209 |
+
-ms-filter: "alpha(Opacity=1)";
|
210 |
+
opacity: 1;
|
211 |
+
}
|
212 |
+
|
213 |
+
.foogallery-extension-browser .extensions .extension .banner {
|
214 |
+
background: #888;
|
215 |
+
color: #FFF;
|
216 |
+
display: block;
|
217 |
+
font-size: 13px;
|
218 |
+
font-weight: 400;
|
219 |
+
height: 48px;
|
220 |
+
line-height: 48px;
|
221 |
+
padding: 0 10px 0 40px;
|
222 |
+
position: absolute;
|
223 |
+
top: 0;
|
224 |
+
right: 0;
|
225 |
+
left: 0;
|
226 |
+
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
227 |
+
overflow: hidden;
|
228 |
+
}
|
229 |
+
|
230 |
+
.foogallery-extension-browser .extensions .extension .banner:empty {
|
231 |
+
display: none;
|
232 |
+
}
|
233 |
+
|
234 |
+
.foogallery-extension-browser .extensions .extension .banner:before {
|
235 |
+
display: inline-block;
|
236 |
+
font: 400 30px/1 dashicons;
|
237 |
+
top: 10px;
|
238 |
+
left: 10px;
|
239 |
+
position: absolute;
|
240 |
+
speak: none;
|
241 |
+
-webkit-font-smoothing: antialiased;
|
242 |
+
}
|
243 |
+
|
244 |
+
.foogallery-extension-browser .extensions .extension.activated .banner {
|
245 |
+
background: #080;
|
246 |
+
}
|
247 |
+
|
248 |
+
.foogallery-extension-browser .extensions .extension.activated .banner:before {
|
249 |
+
content: "\f147";
|
250 |
+
}
|
251 |
+
|
252 |
+
.foogallery-extension-browser .extensions .extension.has_error .banner {
|
253 |
+
background: #800;
|
254 |
+
}
|
255 |
+
|
256 |
+
.foogallery-extension-browser .extensions .extension.has_error .banner:before {
|
257 |
+
content: "\f158";
|
258 |
+
}
|
259 |
+
|
260 |
+
.foogallery-extension-browser .extensions .extension.updating .banner {
|
261 |
+
background: #888;
|
262 |
+
}
|
263 |
+
|
264 |
+
.foogallery-extension-browser .extensions .extension.updating .banner:before {
|
265 |
+
content: "\f463";
|
266 |
+
-webkit-animation: rotation 2s infinite linear;
|
267 |
+
animation: rotation 2s infinite linear;
|
268 |
+
}
|
269 |
+
|
270 |
+
.foogallery-extension-browser .extensions .extension .activate,
|
271 |
+
.foogallery-extension-browser .extensions .extension .deactivate {
|
272 |
+
display: none;
|
273 |
+
}
|
274 |
+
|
275 |
+
.foogallery-extension-browser .extensions .extension.downloaded .activate {
|
276 |
+
display: block;
|
277 |
+
}
|
278 |
+
|
279 |
+
.foogallery-extension-browser .extensions .extension.downloaded .download {
|
280 |
+
display: none;
|
281 |
+
}
|
282 |
+
|
283 |
+
.foogallery-extension-browser .extensions .extension.activated .activate {
|
284 |
+
display: none;
|
285 |
+
}
|
286 |
+
|
287 |
+
.foogallery-extension-browser .extensions .extension.activated .deactivate {
|
288 |
+
display: block;
|
289 |
+
}
|
290 |
+
|
291 |
+
.foogallery-extension-browser .extensions .extension.activated .updating {
|
292 |
+
display: block;
|
293 |
+
}
|
294 |
+
|
295 |
+
.foogallery-extension-browser .extension-page {
|
296 |
+
display: none;
|
297 |
}
|
css/admin-page-foogallery-help.css
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
.foogallery_page_foogallery-help .fs-notice {
|
2 |
-
margin-right: 200px !important;
|
3 |
}
|
1 |
+
.foogallery_page_foogallery-help .fs-notice {
|
2 |
+
margin-right: 200px !important;
|
3 |
}
|
css/admin-page-foogallery-settings.css
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
#foogallery-settings-main div+br {
|
2 |
-
display: none;
|
3 |
}
|
1 |
+
#foogallery-settings-main div+br {
|
2 |
+
display: none;
|
3 |
}
|
css/admin-tinymce.css
CHANGED
@@ -1,114 +1,114 @@
|
|
1 |
-
.mce-content-body div.foogallery-tinymce-view {
|
2 |
-
background-color: rgba(0, 0, 0, 0.1);
|
3 |
-
position: relative;
|
4 |
-
margin-bottom: 16px;
|
5 |
-
border: 1px solid rgba(0, 0, 0, 0);
|
6 |
-
width: 99.99%;
|
7 |
-
clear: both;
|
8 |
-
height: 250px;
|
9 |
-
text-align: center;
|
10 |
-
}
|
11 |
-
|
12 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-toolbar {
|
13 |
-
display: none;
|
14 |
-
position: absolute;
|
15 |
-
top: 0;
|
16 |
-
left: 0;
|
17 |
-
z-index: 100;
|
18 |
-
}
|
19 |
-
|
20 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-toolbar .dashicons {
|
21 |
-
margin-top: 7px;
|
22 |
-
margin-left: 7px;
|
23 |
-
padding: 2px;
|
24 |
-
width: 30px;
|
25 |
-
height: 30px;
|
26 |
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
27 |
-
background-color: #000;
|
28 |
-
background-color: rgba(0, 0, 0, 0.9);
|
29 |
-
cursor: pointer;
|
30 |
-
color: #FFF;
|
31 |
-
font-size: 30px;
|
32 |
-
}
|
33 |
-
|
34 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-toolbar .dashicons:hover {
|
35 |
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
|
36 |
-
background-color: #000;
|
37 |
-
color: #2EA2CC;
|
38 |
-
}
|
39 |
-
|
40 |
-
.mce-content-body div.foogallery-tinymce-view.foogallery-tinymce-selected {
|
41 |
-
border-color: rgba(0, 0, 0, 0.3);
|
42 |
-
}
|
43 |
-
|
44 |
-
.mce-content-body div.foogallery-tinymce-view.foogallery-tinymce-selected .foogallery-tinymce-toolbar {
|
45 |
-
display: block;
|
46 |
-
}
|
47 |
-
|
48 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-pile {
|
49 |
-
position: absolute;
|
50 |
-
z-index: 10;
|
51 |
-
left: 50%;
|
52 |
-
top: 50%;
|
53 |
-
margin-left: -83px;
|
54 |
-
margin-top: -95px;
|
55 |
-
}
|
56 |
-
|
57 |
-
/* Image styles */
|
58 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-pile .foogallery-pile-inner { max-width: 100%; height: auto; vertical-align: bottom; border: 8px solid #fff;
|
59 |
-
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
60 |
-
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
61 |
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
62 |
-
overflow: hidden;
|
63 |
-
background: #CCC;
|
64 |
-
}
|
65 |
-
|
66 |
-
/* Stacks creted by the use of generated content */
|
67 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-pile:before, .foogallery-pile:after { content: ""; width: 100%; height: 100%; position: absolute; border: 8px solid #fff; left: 0;
|
68 |
-
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
69 |
-
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
70 |
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
71 |
-
-webkit-box-sizing: border-box;
|
72 |
-
-moz-box-sizing: border-box;
|
73 |
-
box-sizing: border-box;
|
74 |
-
}
|
75 |
-
/* 1st element in stack (behind image) */
|
76 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-pile:before {
|
77 |
-
top: 0;
|
78 |
-
z-index: -10;
|
79 |
-
-webkit-transform: rotate(-3deg);
|
80 |
-
-moz-transform: rotate(-3deg);
|
81 |
-
transform: rotate(-3deg);
|
82 |
-
}
|
83 |
-
/* 2nd element in stack (behind image) */
|
84 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-pile:after {
|
85 |
-
top: 1px;
|
86 |
-
z-index: -20;
|
87 |
-
-webkit-transform: rotate(4deg);
|
88 |
-
-moz-transform: rotate(4deg);
|
89 |
-
transform: rotate(4deg);
|
90 |
-
}
|
91 |
-
|
92 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-pile-inner img {
|
93 |
-
max-width: 150px;
|
94 |
-
}
|
95 |
-
|
96 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-title {
|
97 |
-
font-family: "Open Sans", sans-serif;
|
98 |
-
font-size: 1.2em;
|
99 |
-
color: #666;
|
100 |
-
position: absolute;
|
101 |
-
bottom: 1em;
|
102 |
-
width: 100%;
|
103 |
-
left: 0;
|
104 |
-
}
|
105 |
-
|
106 |
-
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-count {
|
107 |
-
font-family: "Open Sans", sans-serif;
|
108 |
-
font-size: 0.7em;
|
109 |
-
color: #888;
|
110 |
-
position: absolute;
|
111 |
-
bottom: 0.5em;
|
112 |
-
width: 100%;
|
113 |
-
left: 0;
|
114 |
}
|
1 |
+
.mce-content-body div.foogallery-tinymce-view {
|
2 |
+
background-color: rgba(0, 0, 0, 0.1);
|
3 |
+
position: relative;
|
4 |
+
margin-bottom: 16px;
|
5 |
+
border: 1px solid rgba(0, 0, 0, 0);
|
6 |
+
width: 99.99%;
|
7 |
+
clear: both;
|
8 |
+
height: 250px;
|
9 |
+
text-align: center;
|
10 |
+
}
|
11 |
+
|
12 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-toolbar {
|
13 |
+
display: none;
|
14 |
+
position: absolute;
|
15 |
+
top: 0;
|
16 |
+
left: 0;
|
17 |
+
z-index: 100;
|
18 |
+
}
|
19 |
+
|
20 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-toolbar .dashicons {
|
21 |
+
margin-top: 7px;
|
22 |
+
margin-left: 7px;
|
23 |
+
padding: 2px;
|
24 |
+
width: 30px;
|
25 |
+
height: 30px;
|
26 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
27 |
+
background-color: #000;
|
28 |
+
background-color: rgba(0, 0, 0, 0.9);
|
29 |
+
cursor: pointer;
|
30 |
+
color: #FFF;
|
31 |
+
font-size: 30px;
|
32 |
+
}
|
33 |
+
|
34 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-toolbar .dashicons:hover {
|
35 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
|
36 |
+
background-color: #000;
|
37 |
+
color: #2EA2CC;
|
38 |
+
}
|
39 |
+
|
40 |
+
.mce-content-body div.foogallery-tinymce-view.foogallery-tinymce-selected {
|
41 |
+
border-color: rgba(0, 0, 0, 0.3);
|
42 |
+
}
|
43 |
+
|
44 |
+
.mce-content-body div.foogallery-tinymce-view.foogallery-tinymce-selected .foogallery-tinymce-toolbar {
|
45 |
+
display: block;
|
46 |
+
}
|
47 |
+
|
48 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-pile {
|
49 |
+
position: absolute;
|
50 |
+
z-index: 10;
|
51 |
+
left: 50%;
|
52 |
+
top: 50%;
|
53 |
+
margin-left: -83px;
|
54 |
+
margin-top: -95px;
|
55 |
+
}
|
56 |
+
|
57 |
+
/* Image styles */
|
58 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-pile .foogallery-pile-inner { max-width: 100%; height: auto; vertical-align: bottom; border: 8px solid #fff;
|
59 |
+
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
60 |
+
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
61 |
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
62 |
+
overflow: hidden;
|
63 |
+
background: #CCC;
|
64 |
+
}
|
65 |
+
|
66 |
+
/* Stacks creted by the use of generated content */
|
67 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-pile:before, .foogallery-pile:after { content: ""; width: 100%; height: 100%; position: absolute; border: 8px solid #fff; left: 0;
|
68 |
+
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
69 |
+
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
70 |
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
71 |
+
-webkit-box-sizing: border-box;
|
72 |
+
-moz-box-sizing: border-box;
|
73 |
+
box-sizing: border-box;
|
74 |
+
}
|
75 |
+
/* 1st element in stack (behind image) */
|
76 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-pile:before {
|
77 |
+
top: 0;
|
78 |
+
z-index: -10;
|
79 |
+
-webkit-transform: rotate(-3deg);
|
80 |
+
-moz-transform: rotate(-3deg);
|
81 |
+
transform: rotate(-3deg);
|
82 |
+
}
|
83 |
+
/* 2nd element in stack (behind image) */
|
84 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-pile:after {
|
85 |
+
top: 1px;
|
86 |
+
z-index: -20;
|
87 |
+
-webkit-transform: rotate(4deg);
|
88 |
+
-moz-transform: rotate(4deg);
|
89 |
+
transform: rotate(4deg);
|
90 |
+
}
|
91 |
+
|
92 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-pile-inner img {
|
93 |
+
max-width: 150px;
|
94 |
+
}
|
95 |
+
|
96 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-title {
|
97 |
+
font-family: "Open Sans", sans-serif;
|
98 |
+
font-size: 1.2em;
|
99 |
+
color: #666;
|
100 |
+
position: absolute;
|
101 |
+
bottom: 1em;
|
102 |
+
width: 100%;
|
103 |
+
left: 0;
|
104 |
+
}
|
105 |
+
|
106 |
+
.mce-content-body div.foogallery-tinymce-view .foogallery-tinymce-count {
|
107 |
+
font-family: "Open Sans", sans-serif;
|
108 |
+
font-size: 0.7em;
|
109 |
+
color: #888;
|
110 |
+
position: absolute;
|
111 |
+
bottom: 0.5em;
|
112 |
+
width: 100%;
|
113 |
+
left: 0;
|
114 |
}
|
css/foogallery-foovideo-overrides.css
CHANGED
@@ -1,96 +1,96 @@
|
|
1 |
-
/* sticky video icon states */
|
2 |
-
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-thumb,
|
3 |
-
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-thumb,
|
4 |
-
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-thumb,
|
5 |
-
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-thumb,
|
6 |
-
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-thumb {
|
7 |
-
transform: translateY(0) translateX(0) translateZ(0);
|
8 |
-
}
|
9 |
-
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-item-inner:hover .fg-thumb,
|
10 |
-
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-item-inner:hover .fg-thumb,
|
11 |
-
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-item-inner:hover .fg-thumb,
|
12 |
-
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-item-inner:hover .fg-thumb,
|
13 |
-
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-item-inner:hover .fg-thumb {
|
14 |
-
transform: translateY(0) translateX(0) translateZ(0);
|
15 |
-
}
|
16 |
-
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-thumb:before,
|
17 |
-
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-thumb:before,
|
18 |
-
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-thumb:before,
|
19 |
-
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-thumb:before,
|
20 |
-
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-thumb:before {
|
21 |
-
content: '';
|
22 |
-
display: block;
|
23 |
-
top: 0;
|
24 |
-
left: 0;
|
25 |
-
bottom: 0;
|
26 |
-
right: 0;
|
27 |
-
visibility: visible;
|
28 |
-
opacity: 1;
|
29 |
-
background-color: rgba(0,0,0,0);
|
30 |
-
transition-timing-function: ease;
|
31 |
-
transition-duration: 300ms;
|
32 |
-
transition-property: opacity,visibility,background-color;
|
33 |
-
transform: translateY(0) translateX(0) translateZ(0);
|
34 |
-
z-index: 8;
|
35 |
-
}
|
36 |
-
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-item-inner:hover .fg-thumb:before,
|
37 |
-
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-item-inner:hover .fg-thumb:before,
|
38 |
-
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-item-inner:hover .fg-thumb:before,
|
39 |
-
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-item-inner:hover .fg-thumb:before,
|
40 |
-
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-item-inner:hover .fg-thumb:before {
|
41 |
-
background-color: rgba(0,0,0,0.5);
|
42 |
-
}
|
43 |
-
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before,
|
44 |
-
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before,
|
45 |
-
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before,
|
46 |
-
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before,
|
47 |
-
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
48 |
-
display: none;
|
49 |
-
}
|
50 |
-
|
51 |
-
/* The icons */
|
52 |
-
.foogallery-container.video-icon-default .fg-video .fg-thumb:before,
|
53 |
-
.foogallery-container.video-icon-1 .fg-video .fg-thumb:before,
|
54 |
-
.foogallery-container.video-icon-2 .fg-video .fg-thumb:before,
|
55 |
-
.foogallery-container.video-icon-3 .fg-video .fg-thumb:before,
|
56 |
-
.foogallery-container.video-icon-4 .fg-video .fg-thumb:before,
|
57 |
-
.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before,
|
58 |
-
.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before,
|
59 |
-
.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before,
|
60 |
-
.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before,
|
61 |
-
.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
62 |
-
background-size: 60px 60px;
|
63 |
-
}
|
64 |
-
.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before,
|
65 |
-
.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before,
|
66 |
-
.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before,
|
67 |
-
.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before,
|
68 |
-
.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
69 |
-
width: 60px;
|
70 |
-
height: 60px;
|
71 |
-
}
|
72 |
-
|
73 |
-
.foogallery-container.video-icon-default .fg-video .fg-thumb:before,
|
74 |
-
.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before {
|
75 |
-
background-image: url('data:image/png;base64,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')!important;
|
76 |
-
}
|
77 |
-
|
78 |
-
.foogallery-container.video-icon-1 .fg-video .fg-thumb:before,
|
79 |
-
.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before {
|
80 |
-
background-image: url('data:image/png;base64,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')!important;
|
81 |
-
}
|
82 |
-
|
83 |
-
.foogallery-container.video-icon-2 .fg-video .fg-thumb:before,
|
84 |
-
.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before {
|
85 |
-
background-image: url('data:image/png;base64,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')!important;
|
86 |
-
}
|
87 |
-
|
88 |
-
.foogallery-container.video-icon-3 .fg-video .fg-thumb:before,
|
89 |
-
.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before {
|
90 |
-
background-image: url('data:image/png;base64,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')!important;
|
91 |
-
}
|
92 |
-
|
93 |
-
.foogallery-container.video-icon-4 .fg-video .fg-thumb:before,
|
94 |
-
.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
95 |
-
background-image: url(data:image/png;base64,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)!important;
|
96 |
}
|
1 |
+
/* sticky video icon states */
|
2 |
+
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-thumb,
|
3 |
+
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-thumb,
|
4 |
+
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-thumb,
|
5 |
+
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-thumb,
|
6 |
+
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-thumb {
|
7 |
+
transform: translateY(0) translateX(0) translateZ(0);
|
8 |
+
}
|
9 |
+
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-item-inner:hover .fg-thumb,
|
10 |
+
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-item-inner:hover .fg-thumb,
|
11 |
+
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-item-inner:hover .fg-thumb,
|
12 |
+
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-item-inner:hover .fg-thumb,
|
13 |
+
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-item-inner:hover .fg-thumb {
|
14 |
+
transform: translateY(0) translateX(0) translateZ(0);
|
15 |
+
}
|
16 |
+
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-thumb:before,
|
17 |
+
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-thumb:before,
|
18 |
+
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-thumb:before,
|
19 |
+
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-thumb:before,
|
20 |
+
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-thumb:before {
|
21 |
+
content: '';
|
22 |
+
display: block;
|
23 |
+
top: 0;
|
24 |
+
left: 0;
|
25 |
+
bottom: 0;
|
26 |
+
right: 0;
|
27 |
+
visibility: visible;
|
28 |
+
opacity: 1;
|
29 |
+
background-color: rgba(0,0,0,0);
|
30 |
+
transition-timing-function: ease;
|
31 |
+
transition-duration: 300ms;
|
32 |
+
transition-property: opacity,visibility,background-color;
|
33 |
+
transform: translateY(0) translateX(0) translateZ(0);
|
34 |
+
z-index: 8;
|
35 |
+
}
|
36 |
+
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-item-inner:hover .fg-thumb:before,
|
37 |
+
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-item-inner:hover .fg-thumb:before,
|
38 |
+
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-item-inner:hover .fg-thumb:before,
|
39 |
+
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-item-inner:hover .fg-thumb:before,
|
40 |
+
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-item-inner:hover .fg-thumb:before {
|
41 |
+
background-color: rgba(0,0,0,0.5);
|
42 |
+
}
|
43 |
+
.video-icon-sticky.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before,
|
44 |
+
.video-icon-sticky.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before,
|
45 |
+
.video-icon-sticky.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before,
|
46 |
+
.video-icon-sticky.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before,
|
47 |
+
.video-icon-sticky.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
48 |
+
display: none;
|
49 |
+
}
|
50 |
+
|
51 |
+
/* The icons */
|
52 |
+
.foogallery-container.video-icon-default .fg-video .fg-thumb:before,
|
53 |
+
.foogallery-container.video-icon-1 .fg-video .fg-thumb:before,
|
54 |
+
.foogallery-container.video-icon-2 .fg-video .fg-thumb:before,
|
55 |
+
.foogallery-container.video-icon-3 .fg-video .fg-thumb:before,
|
56 |
+
.foogallery-container.video-icon-4 .fg-video .fg-thumb:before,
|
57 |
+
.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before,
|
58 |
+
.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before,
|
59 |
+
.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before,
|
60 |
+
.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before,
|
61 |
+
.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
62 |
+
background-size: 60px 60px;
|
63 |
+
}
|
64 |
+
.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before,
|
65 |
+
.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before,
|
66 |
+
.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before,
|
67 |
+
.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before,
|
68 |
+
.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
69 |
+
width: 60px;
|
70 |
+
height: 60px;
|
71 |
+
}
|
72 |
+
|
73 |
+
.foogallery-container.video-icon-default .fg-video .fg-thumb:before,
|
74 |
+
.foogallery-container.video-icon-default .fg-video .fg-caption-inner:before {
|
75 |
+
background-image: url('data:image/png;base64,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')!important;
|
76 |
+
}
|
77 |
+
|
78 |
+
.foogallery-container.video-icon-1 .fg-video .fg-thumb:before,
|
79 |
+
.foogallery-container.video-icon-1 .fg-video .fg-caption-inner:before {
|
80 |
+
background-image: url('data:image/png;base64,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')!important;
|
81 |
+
}
|
82 |
+
|
83 |
+
.foogallery-container.video-icon-2 .fg-video .fg-thumb:before,
|
84 |
+
.foogallery-container.video-icon-2 .fg-video .fg-caption-inner:before {
|
85 |
+
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAACAtJREFUeNrcW1uMHEcVrZ6ZnUlEEITwkvgBgvAHCuGDh5CjdE933Xurqnfej15iyzaPALIXJ5gkBDs4xnYU5BiUjyWKhIjyESELFCHCwwFkEQkElqJABAIpHybJB0osCxMwjsHZpPjo7pmanp7d2d2eWe+21OpR393uuvfcuqcepxnnDuPcyXPuWJw7uei0OHcKI2zxvZXY8iNs1ipsuYStsIQtvvbaF98sRNdi9A+l6A9mojMX3TNthRG2fMIWP7OYYistY8ul2KyErRCdZtstwxb7lePcKTAjIqUUZwsjnF0qEGsJUrLRSduoIMW2qxK2IRBZAoVko/NjOrQa9LJANi0r05CNbT2HrSg6k0RvLchay6C3HLK9FGdrTNW1IpuGgmkbF1nL6IJpz4xtFjP66ZWAbHENyBaWQjYOIIvK9rgFKllxZ6bQZ0cVKBPZcbKlaCK8FmStJZC1Vohsfg3IlpZANr43kpaWQ29SyI5DPSvpsyNpadx+uQoutaNG24bNTtqMhtnL9cvcCvpssu0DtDRGGtuGzS5y7jDu2dHwzWYcyuE1rAvRPY9xbjMAYBxcxnmZAXDGudO7cuA9W3i1+9f4Of3fUXttK2qPtVSfTQZpDFqyC/2XulEDXQZIDKB8tZD+mwHxOiRxvV9p3cA5OhxrEkVlG4raF1C2bkdRuVf4wWEU9W+hbD1IsrWAov4wqc4Citp3SHWOk6x/U6jWQRT1O1HU9qBsbucgGh5UbiYhP06i+gFAfLfn4Vs97pUAeCEMphMGajA4o2oRMwfdSWfDBwg1A+TfiKTaJNtfQaotoGz9mFT3tyRbfxb+3BlSnXOkggvkB4ukAp1+dlN+d1Nsw38v/OANUsGrpDrnUXZfRNn6K6nOaZKtkyRb30VRO4Cish1E5ROIeB2EWVVISf+CSUuGs2G0kKpdUsEzpILXRzeouw7nqCAFmlTwPIrafgB+dZT+A3SbRksMoMxI1vetn0NrDwjK5gmPl61EQev14V4EPM9myq9+WMzO/W9jOtt3GqiyE8A261SeJZwtKYWsWp+7G2VHb3SHOTZO246dA+hlcM5cYShy7uQBbEay9tjGTef+ibJz1vXK7wwpLByMJGjJzgMgI9V9aqM7Gzl8aetNN78vKsIDtBQPF/Ouq0oou89tBodJBa8D0scih9NoyWYcvPeQ6v4j65fvP3BUHz76wPQLF/pO5GPJRDjs1OCwar39QeEHmVbonZ+e14uLi1prrX/91G/0th1fnB49UWUuQtiKq7RlDjiQ6KasC9aeL31Vm8dLL53V++74+nQcFpW9BsL5xGzJZiQqftYO756/SyePy5cv6++feFzL2bmJOi1U8xBAuTeENmmpxLnDUFQ/NQ2H4+OZPzyrd31mfoIIVxfMVZ0kLTEkf36aDmut9fl/vqKPHV+YFDU9wrnX26Fg5kyCg8tItvZl/dLlHI6PJ544qSv1bRkj3Hjc2G6ZGaIlQP/QtBE2jzN/e0Hvve3uDN/f+QkAsGjBwhqkJV5mIBpH1tNhrbW+ePGifiCTFA80ysavIlBTaAlchqJx/3o7rLXW58+/ov3qLRk43DoVLQj0FvF680XgDhOqed96O3zp0n/1Qw8/ks37ZfsX4fpYuHY3SEvgMlLNA+tVtLTW+vkXXtR7b/9alkXrZ+GaV7itygbXf20GNHvXeiH885OndLOzSws/y4B3ToSro/bMEC0BuEz67VunjfC/L1zQ993/4GTWvmTt0WgsPUBLBc6dIoDDSKht00T4j8/+Se+ev1MLP5jQwKP57agPl5K0ZHFuMxQ1nJbDP/jhjybmaH9dq3bvkrMlQPpk1i8eni29rA/cc3QqU8RKrbmHyB09W0JSW0gFl7J86a7Pzvec/f3pp/Ut2z8/tUUA6bcaiG6PjcydhyLnDgPEt4c7Cdm++NDhY/rY8YUJp/BwSrue50UpXTCXeGJaynGAN5Hq/mWTrGm9gaRujBwuDs+WuDPDgTOUrVObYZmWVPAfQLreoKXCAC1FBYyRbH5vczjcPsu5+zZz+JyYLTmlcF+p+uXN4XD3l8bUMGdW6Zy5GO+B2CL8uX9t9K0WFLWaMTVMo6W4eJWZbbs1EJ1Xp1tVM3X2SF+J0JNkDNFSTzdh21sZB+EK1XmSVOfv4Yb0qI3rK2Jf+DWSnXPCnzutZhuf41C2omI1oCxK0FJfLQMQ7xW7jIN4C5DaguR7KBs7UNQOgmw9hKL+U1Ld35FqP0cqeJlU9wKp7mujVQCrOhdJBRdJBedQts+Q6j5NsvkkyeajKNtHkPzdKBoEKD/Cgb8DSVoAsfRhQIhTTO4tjRCC2PlBUYkTilcifQUgMg7uNUDyWgB4v+vhhwDFVpIVjjTbRPJ3kKzfijS7D2XzDqTZgygaB4WsHUFR/QaK+j1Is/tRNm9Dmt2DoroTRaUDKBSK6lZA/CiQei+SeJfHy9cAkhXrTELNiW1oPGxmCF3SpFKptDSmUNOO0j+cZw4GJlV9YzQsRe0zLExJOR3Wf19fA70S6WOafHjVoq8xbDMJW3GKotYhWlqpULO0hLNXgtg81cZS0BtbqJkh6tMStVpJycNKhJrrjexqRK0DtDSJPrtSZCcpah2YLa2lz06jX+YyEJun0lJuJULNMaT4kwzSqmlpPRs9Topn8enPVUn5cG4Vn8hkUbyy7LO5Jb5z6mWsmdKWkSKWUe0KRlAKic/fVmOzEp/NFYwtW8voRsvZZlKeOcrW+xzw/wMAILDvruEbvv8AAAAASUVORK5CYII=')!important;
|
86 |
+
}
|
87 |
+
|
88 |
+
.foogallery-container.video-icon-3 .fg-video .fg-thumb:before,
|
89 |
+
.foogallery-container.video-icon-3 .fg-video .fg-caption-inner:before {
|
90 |
+
background-image: url('data:image/png;base64,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')!important;
|
91 |
+
}
|
92 |
+
|
93 |
+
.foogallery-container.video-icon-4 .fg-video .fg-thumb:before,
|
94 |
+
.foogallery-container.video-icon-4 .fg-video .fg-caption-inner:before {
|
95 |
+
background-image: url(data:image/png;base64,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)!important;
|
96 |
}
|
extensions/albums/admin/class-columns.php
CHANGED
@@ -1,73 +1,73 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* FooGallery Admin Columns class
|
4 |
-
*/
|
5 |
-
|
6 |
-
if ( ! class_exists( 'FooGallery_Albums_Admin_Columns' ) ) {
|
7 |
-
|
8 |
-
class FooGallery_Albums_Admin_Columns {
|
9 |
-
|
10 |
-
private $include_clipboard_script = false;
|
11 |
-
|
12 |
-
function __construct() {
|
13 |
-
add_filter( 'manage_edit-' . FOOGALLERY_CPT_ALBUM . '_columns', array( $this, 'album_custom_columns' ) );
|
14 |
-
add_action( 'manage_posts_custom_column', array( $this, 'album_custom_column_content' ) );
|
15 |
-
add_action( 'admin_footer', array( $this, 'include_clipboard_script' ) );
|
16 |
-
}
|
17 |
-
|
18 |
-
function album_custom_columns( $columns ) {
|
19 |
-
$columns[FOOGALLERY_CPT_ALBUM . '_template'] = __( 'Template', 'foogallery' );
|
20 |
-
$columns[FOOGALLERY_CPT_ALBUM . '_galleries'] = __( 'Galleries', 'foogallery' );
|
21 |
-
$columns[FOOGALLERY_CPT_ALBUM . '_shortcode'] = __( 'Shortcode', 'foogallery' );
|
22 |
-
|
23 |
-
return $columns;
|
24 |
-
}
|
25 |
-
|
26 |
-
function album_custom_column_content( $column ) {
|
27 |
-
global $post;
|
28 |
-
|
29 |
-
switch ( $column ) {
|
30 |
-
case FOOGALLERY_CPT_ALBUM . '_template':
|
31 |
-
$album = FooGalleryAlbum::get( $post );
|
32 |
-
$template = $album->album_template_details();
|
33 |
-
if ( false !== $template ) {
|
34 |
-
echo $template['name'];
|
35 |
-
}
|
36 |
-
break;
|
37 |
-
case FOOGALLERY_CPT_ALBUM . '_galleries':
|
38 |
-
$album = FooGalleryAlbum::get( $post );
|
39 |
-
echo $album->gallery_count();
|
40 |
-
break;
|
41 |
-
case FOOGALLERY_CPT_ALBUM . '_shortcode':
|
42 |
-
$album = FooGalleryAlbum::get( $post );
|
43 |
-
$shortcode = $album->shortcode();
|
44 |
-
echo '<input type="text" readonly="readonly" size="' . strlen( $shortcode ) . '" value="' . esc_attr( $shortcode ) . '" class="foogallery-shortcode" />';
|
45 |
-
$this->include_clipboard_script = true;
|
46 |
-
break;
|
47 |
-
}
|
48 |
-
}
|
49 |
-
|
50 |
-
function include_clipboard_script() {
|
51 |
-
if ( $this->include_clipboard_script ) { ?>
|
52 |
-
<script>
|
53 |
-
jQuery(function($) {
|
54 |
-
$('.foogallery-shortcode').click( function () {
|
55 |
-
try {
|
56 |
-
//select the contents
|
57 |
-
this.select();
|
58 |
-
//copy the selection
|
59 |
-
document.execCommand('copy');
|
60 |
-
//show the copied message
|
61 |
-
$('.foogallery-shortcode-message').remove();
|
62 |
-
$(this).after('<p class="foogallery-shortcode-message"><?php _e( 'Shortcode copied to clipboard :)','foogallery' ); ?></p>');
|
63 |
-
} catch(err) {
|
64 |
-
console.log('Oops, unable to copy!');
|
65 |
-
}
|
66 |
-
});
|
67 |
-
});
|
68 |
-
</script>
|
69 |
-
<?php
|
70 |
-
}
|
71 |
-
}
|
72 |
-
}
|
73 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* FooGallery Admin Columns class
|
4 |
+
*/
|
5 |
+
|
6 |
+
if ( ! class_exists( 'FooGallery_Albums_Admin_Columns' ) ) {
|
7 |
+
|
8 |
+
class FooGallery_Albums_Admin_Columns {
|
9 |
+
|
10 |
+
private $include_clipboard_script = false;
|
11 |
+
|
12 |
+
function __construct() {
|
13 |
+
add_filter( 'manage_edit-' . FOOGALLERY_CPT_ALBUM . '_columns', array( $this, 'album_custom_columns' ) );
|
14 |
+
add_action( 'manage_posts_custom_column', array( $this, 'album_custom_column_content' ) );
|
15 |
+
add_action( 'admin_footer', array( $this, 'include_clipboard_script' ) );
|
16 |
+
}
|
17 |
+
|
18 |
+
function album_custom_columns( $columns ) {
|
19 |
+
$columns[FOOGALLERY_CPT_ALBUM . '_template'] = __( 'Template', 'foogallery' );
|
20 |
+
$columns[FOOGALLERY_CPT_ALBUM . '_galleries'] = __( 'Galleries', 'foogallery' );
|
21 |
+
$columns[FOOGALLERY_CPT_ALBUM . '_shortcode'] = __( 'Shortcode', 'foogallery' );
|
22 |
+
|
23 |
+
return $columns;
|
24 |
+
}
|
25 |
+
|
26 |
+
function album_custom_column_content( $column ) {
|
27 |
+
global $post;
|
28 |
+
|
29 |
+
switch ( $column ) {
|
30 |
+
case FOOGALLERY_CPT_ALBUM . '_template':
|
31 |
+
$album = FooGalleryAlbum::get( $post );
|
32 |
+
$template = $album->album_template_details();
|
33 |
+
if ( false !== $template ) {
|
34 |
+
echo $template['name'];
|
35 |
+
}
|
36 |
+
break;
|
37 |
+
case FOOGALLERY_CPT_ALBUM . '_galleries':
|
38 |
+
$album = FooGalleryAlbum::get( $post );
|
39 |
+
echo $album->gallery_count();
|
40 |
+
break;
|
41 |
+
case FOOGALLERY_CPT_ALBUM . '_shortcode':
|
42 |
+
$album = FooGalleryAlbum::get( $post );
|
43 |
+
$shortcode = $album->shortcode();
|
44 |
+
echo '<input type="text" readonly="readonly" size="' . strlen( $shortcode ) . '" value="' . esc_attr( $shortcode ) . '" class="foogallery-shortcode" />';
|
45 |
+
$this->include_clipboard_script = true;
|
46 |
+
break;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
function include_clipboard_script() {
|
51 |
+
if ( $this->include_clipboard_script ) { ?>
|
52 |
+
<script>
|
53 |
+
jQuery(function($) {
|
54 |
+
$('.foogallery-shortcode').click( function () {
|
55 |
+
try {
|
56 |
+
//select the contents
|
57 |
+
this.select();
|
58 |
+
//copy the selection
|
59 |
+
document.execCommand('copy');
|
60 |
+
//show the copied message
|
61 |
+
$('.foogallery-shortcode-message').remove();
|
62 |
+
$(this).after('<p class="foogallery-shortcode-message"><?php _e( 'Shortcode copied to clipboard :)','foogallery' ); ?></p>');
|
63 |
+
} catch(err) {
|
64 |
+
console.log('Oops, unable to copy!');
|
65 |
+
}
|
66 |
+
});
|
67 |
+
});
|
68 |
+
</script>
|
69 |
+
<?php
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
extensions/albums/admin/class-metaboxes.php
CHANGED
@@ -1,576 +1,576 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* FooGallery Admin Album MetaBoxes class
|
5 |
-
*/
|
6 |
-
|
7 |
-
if ( ! class_exists( 'FooGallery_Admin_Album_MetaBoxes' ) ) {
|
8 |
-
|
9 |
-
class FooGallery_Admin_Album_MetaBoxes {
|
10 |
-
|
11 |
-
private $_album;
|
12 |
-
|
13 |
-
public function __construct() {
|
14 |
-
//add our foogallery metaboxes
|
15 |
-
add_action( 'add_meta_boxes_' . FOOGALLERY_CPT_ALBUM, array( $this, 'add_meta_boxes' ) );
|
16 |
-
|
17 |
-
//save extra post data for a gallery
|
18 |
-
add_action( 'save_post', array( $this, 'save_album' ) );
|
19 |
-
|
20 |
-
//whitelist metaboxes for our album posttype
|
21 |
-
add_filter( 'foogallery-album_metabox_sanity', array( $this, 'whitelist_metaboxes' ) );
|
22 |
-
|
23 |
-
//add scripts used by metaboxes
|
24 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'include_required_scripts' ) );
|
25 |
-
|
26 |
-
// Ajax call for getting gallery details
|
27 |
-
add_action( 'wp_ajax_foogallery_get_gallery_details', array( $this, 'ajax_get_gallery_details' ) );
|
28 |
-
|
29 |
-
// Ajax call for saving gallery details
|
30 |
-
add_action( 'wp_ajax_foogallery_save_gallery_details', array( $this, 'ajax_save_gallery_details' ) );
|
31 |
-
|
32 |
-
// Save details for the gallery
|
33 |
-
add_action( 'foogallery_album_gallery_details_save', array( $this, 'gallery_details_save' ), 10, 3 );
|
34 |
-
}
|
35 |
-
|
36 |
-
public function whitelist_metaboxes() {
|
37 |
-
return array(
|
38 |
-
FOOGALLERY_CPT_GALLERY => array(
|
39 |
-
'whitelist' => apply_filters( 'foogallery_metabox_sanity_foogallery-album',
|
40 |
-
array(
|
41 |
-
'submitdiv',
|
42 |
-
'slugdiv',
|
43 |
-
'postimagediv',
|
44 |
-
'foogalleryalbum_galleries',
|
45 |
-
'foogalleryalbum_shortcode'
|
46 |
-
)
|
47 |
-
),
|
48 |
-
'contexts' => array( 'normal', 'advanced', 'side', ),
|
49 |
-
'priorities' => array( 'high', 'core', 'default', 'low', ),
|
50 |
-
)
|
51 |
-
);
|
52 |
-
}
|
53 |
-
|
54 |
-
public function add_meta_boxes( $post ) {
|
55 |
-
add_meta_box(
|
56 |
-
'foogalleryalbum_galleries',
|
57 |
-
__( 'Galleries - click a gallery to add it to your album.', 'foogallery' ),
|
58 |
-
array( $this, 'render_gallery_metabox' ),
|
59 |
-
FOOGALLERY_CPT_ALBUM,
|
60 |
-
'normal',
|
61 |
-
'high'
|
62 |
-
);
|
63 |
-
|
64 |
-
add_meta_box(
|
65 |
-
'foogalleryalbum_settings',
|
66 |
-
__( 'Settings', 'foogallery' ),
|
67 |
-
array( $this, 'render_settings_metabox' ),
|
68 |
-
FOOGALLERY_CPT_ALBUM,
|
69 |
-
'normal',
|
70 |
-
'high'
|
71 |
-
);
|
72 |
-
|
73 |
-
add_meta_box(
|
74 |
-
'foogalleryalbum_customcss',
|
75 |
-
__( 'Custom CSS', 'foogallery' ),
|
76 |
-
array( $this, 'render_customcss_metabox' ),
|
77 |
-
FOOGALLERY_CPT_ALBUM,
|
78 |
-
'normal',
|
79 |
-
'low'
|
80 |
-
);
|
81 |
-
|
82 |
-
add_meta_box(
|
83 |
-
'foogalleryalbum_shortcode',
|
84 |
-
__( 'Album Shortcode', 'foogallery' ),
|
85 |
-
array( $this, 'render_shortcode_metabox' ),
|
86 |
-
FOOGALLERY_CPT_ALBUM,
|
87 |
-
'side',
|
88 |
-
'default'
|
89 |
-
);
|
90 |
-
|
91 |
-
add_meta_box(
|
92 |
-
'foogalleryalbum_sorting',
|
93 |
-
__( 'Album Sorting', 'foogallery' ),
|
94 |
-
array( $this, 'render_sorting_metabox' ),
|
95 |
-
FOOGALLERY_CPT_ALBUM,
|
96 |
-
'side',
|
97 |
-
'default'
|
98 |
-
);
|
99 |
-
}
|
100 |
-
|
101 |
-
public function get_album( $post ) {
|
102 |
-
if ( ! isset( $this->_album ) ) {
|
103 |
-
$this->_album = FooGalleryAlbum::get( $post );
|
104 |
-
}
|
105 |
-
|
106 |
-
return $this->_album;
|
107 |
-
}
|
108 |
-
|
109 |
-
public function save_album( $post_id ) {
|
110 |
-
// check autosave
|
111 |
-
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
112 |
-
return $post_id;
|
113 |
-
}
|
114 |
-
|
115 |
-
// verify nonce
|
116 |
-
if ( array_key_exists( FOOGALLERY_CPT_ALBUM . '_nonce', $_POST ) &&
|
117 |
-
wp_verify_nonce( $_POST[ FOOGALLERY_CPT_ALBUM . '_nonce' ], plugin_basename( FOOGALLERY_FILE ) )
|
118 |
-
) {
|
119 |
-
//if we get here, we are dealing with the Album custom post type
|
120 |
-
|
121 |
-
$galleries = apply_filters( 'foogallery_save_album_galleries', explode( ',', $_POST[ FOOGALLERY_ALBUM_META_GALLERIES ] ) );
|
122 |
-
update_post_meta( $post_id, FOOGALLERY_ALBUM_META_GALLERIES, $galleries );
|
123 |
-
|
124 |
-
update_post_meta( $post_id, FOOGALLERY_ALBUM_META_TEMPLATE, $_POST[FOOGALLERY_ALBUM_META_TEMPLATE] );
|
125 |
-
|
126 |
-
update_post_meta( $post_id, FOOGALLERY_ALBUM_META_SORT, $_POST[FOOGALLERY_ALBUM_META_SORT] );
|
127 |
-
|
128 |
-
$settings = isset($_POST['_foogallery_settings']) ?
|
129 |
-
$_POST['_foogallery_settings'] : array();
|
130 |
-
|
131 |
-
$settings = apply_filters( 'foogallery_save_album_settings', $settings );
|
132 |
-
|
133 |
-
update_post_meta( $post_id, FOOGALLERY_META_SETTINGS_OLD, $settings );
|
134 |
-
|
135 |
-
$custom_css = isset($_POST[FOOGALLERY_META_CUSTOM_CSS]) ?
|
136 |
-
$_POST[FOOGALLERY_META_CUSTOM_CSS] : '';
|
137 |
-
|
138 |
-
if ( empty( $custom_css ) ) {
|
139 |
-
delete_post_meta( $post_id, FOOGALLERY_META_CUSTOM_CSS );
|
140 |
-
} else {
|
141 |
-
update_post_meta( $post_id, FOOGALLERY_META_CUSTOM_CSS, $custom_css );
|
142 |
-
}
|
143 |
-
|
144 |
-
do_action( 'foogallery_after_save_album', $post_id, $_POST );
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
public function get_ordered_galleries( $album ) {
|
149 |
-
|
150 |
-
//get all other galleries
|
151 |
-
$galleries = foogallery_get_all_galleries( $album->gallery_ids );
|
152 |
-
|
153 |
-
$album_galleries = $album->galleries();
|
154 |
-
|
155 |
-
return array_merge( $album_galleries, $galleries );
|
156 |
-
}
|
157 |
-
|
158 |
-
public function render_gallery_metabox( $post ) {
|
159 |
-
$album = $this->get_album( $post );
|
160 |
-
|
161 |
-
$galleries = $this->get_ordered_galleries( $album );
|
162 |
-
|
163 |
-
wp_enqueue_style( 'media-views' );
|
164 |
-
|
165 |
-
?>
|
166 |
-
<input type="hidden" name="<?php echo FOOGALLERY_CPT_ALBUM; ?>_nonce"
|
167 |
-
id="<?php echo FOOGALLERY_CPT_ALBUM; ?>_nonce"
|
168 |
-
value="<?php echo wp_create_nonce( plugin_basename( FOOGALLERY_FILE ) ); ?>"/>
|
169 |
-
<input type="hidden" name='foogallery_album_galleries' id="foogallery_album_galleries"
|
170 |
-
value="<?php echo $album->gallery_id_csv(); ?>"/>
|
171 |
-
<div>
|
172 |
-
<?php if ( !$album->has_galleries() ) { ?>
|
173 |
-
<div class="foogallery-album-error">
|
174 |
-
<?php _e( 'There are no galleries selected for your album yet! Click any gallery to add it to your album.', 'foogallery' ); ?>
|
175 |
-
</div>
|
176 |
-
<?php } ?>
|
177 |
-
|
178 |
-
<div class="foogallery-album-info-modal media-modal">
|
179 |
-
<div class="media-modal-content">
|
180 |
-
<div class="media-frame mode-select">
|
181 |
-
<div class="media-frame-title">
|
182 |
-
<h1><?php _e('Edit Gallery Details', 'foogallery'); ?></h1>
|
183 |
-
<span class="spinner is-active"></span>
|
184 |
-
</div>
|
185 |
-
<div class="modal-content">
|
186 |
-
<?php wp_nonce_field( 'foogallery_album_gallery_details', 'foogallery_album_gallery_details_nonce', false ); ?>
|
187 |
-
<div class="gallery-details" data-loading="<?php _e( 'Loading details for ', 'foogallery' ); ?>"></div>
|
188 |
-
</div>
|
189 |
-
</div>
|
190 |
-
<div class="media-frame-toolbar">
|
191 |
-
<div class="media-toolbar">
|
192 |
-
<div class="media-toolbar-secondary"></div>
|
193 |
-
<div class="media-toolbar-primary search-form">
|
194 |
-
<button type="button" class="button media-button button-primary button-large media-button-select gallery-details-save"><?php _e('Save Gallery Details', 'foogallery'); ?></button>
|
195 |
-
<span class="spinner"></span>
|
196 |
-
</div>
|
197 |
-
</div>
|
198 |
-
</div>
|
199 |
-
</div>
|
200 |
-
<button type="button" class="button-link media-modal-close">
|
201 |
-
<span class="media-modal-icon"><span class="screen-reader-text"><?php _e('Close media panel', 'foogallery'); ?></span></span>
|
202 |
-
</button>
|
203 |
-
|
204 |
-
</div>
|
205 |
-
<div class="foogallery-album-info-modal-backdrop media-modal-backdrop"></div>
|
206 |
-
|
207 |
-
|
208 |
-
<ul class="foogallery-album-gallery-list">
|
209 |
-
<?php
|
210 |
-
foreach ( $galleries as $gallery ) {
|
211 |
-
$img_src = foogallery_find_featured_attachment_thumbnail_src( $gallery );
|
212 |
-
$images = $gallery->image_count();
|
213 |
-
$selected = $album->includes_gallery( $gallery->ID ) ? ' selected' : '';
|
214 |
-
$title = $gallery->safe_name();
|
215 |
-
?>
|
216 |
-
<li class="foogallery-pile">
|
217 |
-
<div class="foogallery-gallery-select attachment-preview landscape<?php echo $selected; ?>" data-foogallery-id="<?php echo $gallery->ID; ?>">
|
218 |
-
<div class="thumbnail" style="display: table;">
|
219 |
-
<div style="display: table-cell; vertical-align: middle; text-align: center;">
|
220 |
-
<img src="<?php echo $img_src; ?>"/>
|
221 |
-
<h3><?php echo $title; ?>
|
222 |
-
<span><?php echo $images; ?></span>
|
223 |
-
</h3>
|
224 |
-
</div>
|
225 |
-
</div>
|
226 |
-
<a class="info foogallery-album-info" href="#"
|
227 |
-
title="<?php _e( 'Edit Album Info', 'foogallery' ); ?>"
|
228 |
-
data-gallery-title="<?php echo $title; ?>"
|
229 |
-
data-gallery-id="<?php echo $gallery->ID; ?>"><span class="dashicons dashicons-info"></span></a>
|
230 |
-
</div>
|
231 |
-
</li>
|
232 |
-
<?php } ?>
|
233 |
-
</ul>
|
234 |
-
<div style="clear: both;"></div>
|
235 |
-
</div>
|
236 |
-
<?php
|
237 |
-
}
|
238 |
-
|
239 |
-
public function render_shortcode_metabox( $post ) {
|
240 |
-
$album = $this->get_album( $post );
|
241 |
-
$shortcode = $album->shortcode();
|
242 |
-
?>
|
243 |
-
<p class="foogallery-shortcode">
|
244 |
-
<input type="text" id="foogallery-copy-shortcode" size="<?php echo strlen( $shortcode ); ?>" value="<?php echo htmlspecialchars( $shortcode ); ?>" readonly="readonly" />
|
245 |
-
</p>
|
246 |
-
<p>
|
247 |
-
<?php _e( 'Paste the above shortcode into a post or page to show the album.', 'foogallery' ); ?>
|
248 |
-
</p>
|
249 |
-
<script>
|
250 |
-
jQuery(function($) {
|
251 |
-
var shortcodeInput = document.querySelector('#foogallery-copy-shortcode');
|
252 |
-
shortcodeInput.addEventListener('click', function () {
|
253 |
-
try {
|
254 |
-
// select the contents
|
255 |
-
shortcodeInput.select();
|
256 |
-
//copy the selection
|
257 |
-
document.execCommand('copy');
|
258 |
-
//show the copied message
|
259 |
-
$('.foogallery-shortcode-message').remove();
|
260 |
-
$(shortcodeInput).after('<p class="foogallery-shortcode-message"><?php _e( 'Shortcode copied to clipboard :)','foogallery' ); ?></p>');
|
261 |
-
} catch(err) {
|
262 |
-
console.log('Oops, unable to copy!');
|
263 |
-
}
|
264 |
-
}, false);
|
265 |
-
});
|
266 |
-
</script>
|
267 |
-
<?php
|
268 |
-
}
|
269 |
-
|
270 |
-
public function render_sorting_metabox( $post ) {
|
271 |
-
$album = $this->get_album( $post );
|
272 |
-
$sorting_options = foogallery_sorting_options(); ?>
|
273 |
-
<p>
|
274 |
-
<?php _e('Change the way galleries are sorted within your album. By default, they are sorted in the order you see them.', 'foogallery'); ?>
|
275 |
-
</p>
|
276 |
-
<?php
|
277 |
-
foreach ( $sorting_options as $sorting_key => $sorting_label ) { ?>
|
278 |
-
<p>
|
279 |
-
<input type="radio" value="<?php echo $sorting_key; ?>" <?php checked( $sorting_key === $album->sorting ); ?> id="FooGallerySettings_AlbumSort_<?php echo $sorting_key; ?>" name="<?php echo FOOGALLERY_ALBUM_META_SORT; ?>" />
|
280 |
-
<label for="FooGallerySettings_AlbumSort_<?php echo $sorting_key; ?>"><?php echo $sorting_label; ?></label>
|
281 |
-
</p><?php
|
282 |
-
}
|
283 |
-
}
|
284 |
-
|
285 |
-
public function render_settings_metabox( $post ) {
|
286 |
-
$album = $this->get_album( $post );
|
287 |
-
$available_templates = foogallery_album_templates();
|
288 |
-
$album_template = foogallery_default_album_template();
|
289 |
-
if ( ! empty($album->album_template) ) {
|
290 |
-
$album_template = $album->album_template;
|
291 |
-
}
|
292 |
-
if ( false === $album_template ) {
|
293 |
-
$album_template = $available_templates[0]['slug'];
|
294 |
-
}
|
295 |
-
$hide_help = 'on' == foogallery_get_setting( 'hide_gallery_template_help' );
|
296 |
-
?>
|
297 |
-
<table class="foogallery-album-metabox-settings">
|
298 |
-
<tbody>
|
299 |
-
<tr class="foogallery_template_field foogallery_template_field_selector">
|
300 |
-
<th>
|
301 |
-
<label for="FooGallerySettings_AlbumTemplate"><?php _e( 'Album Template', 'foogallery' ); ?></label>
|
302 |
-
</th>
|
303 |
-
<td>
|
304 |
-
<select id="FooGallerySettings_AlbumTemplate" name="<?php echo FOOGALLERY_ALBUM_META_TEMPLATE; ?>">
|
305 |
-
<?php
|
306 |
-
foreach ( $available_templates as $template ) {
|
307 |
-
$selected = ($album_template === $template['slug']) ? 'selected' : '';
|
308 |
-
echo "<option {$selected} value=\"{$template['slug']}\">{$template['name']}</option>";
|
309 |
-
}
|
310 |
-
?>
|
311 |
-
</select>
|
312 |
-
<br />
|
313 |
-
<small><?php _e( 'The album template that will be used when the album is output to the frontend.', 'foogallery' ); ?></small>
|
314 |
-
</td>
|
315 |
-
</tr>
|
316 |
-
<?php
|
317 |
-
foreach ( $available_templates as $template ) {
|
318 |
-
$field_visibility = ($album_template !== $template['slug']) ? 'style="display:none"' : '';
|
319 |
-
$section = '';
|
320 |
-
$fields = isset( $template['fields'] ) ? $template['fields'] : array();
|
321 |
-
foreach ( $fields as $field ) {
|
322 |
-
//allow for the field to be altered by extensions.
|
323 |
-
$field = apply_filters( 'foogallery_alter_gallery_template_field', $field, $album );
|
324 |
-
|
325 |
-
$class ="foogallery_template_field foogallery_template_field-{$template['slug']} foogallery_template_field-{$template['slug']}-{$field['id']}";
|
326 |
-
|
327 |
-
if ( isset($field['section']) && $field['section'] !== $section ) {
|
328 |
-
$section = $field['section'];
|
329 |
-
?>
|
330 |
-
<tr class="<?php echo $class; ?>" <?php echo $field_visibility; ?>>
|
331 |
-
<td colspan="2"><h4><?php echo $section; ?></h4></td>
|
332 |
-
</tr>
|
333 |
-
<?php }
|
334 |
-
if (isset($field['type']) && 'help' == $field['type'] && $hide_help) {
|
335 |
-
continue; //skip help if the 'hide help' setting is turned on
|
336 |
-
}
|
337 |
-
?>
|
338 |
-
<tr class="<?php echo $class; ?>" <?php echo $field_visibility; ?>>
|
339 |
-
<?php if ( isset($field['type']) && 'help' == $field['type'] ) { ?>
|
340 |
-
<td colspan="2">
|
341 |
-
<div class="foogallery-help">
|
342 |
-
<?php echo $field['desc']; ?>
|
343 |
-
</div>
|
344 |
-
</td>
|
345 |
-
<?php } else { ?>
|
346 |
-
<th>
|
347 |
-
<label for="FooGallerySettings_<?php echo $template['slug'] . '_' . $field['id']; ?>"><?php echo $field['title']; ?></label>
|
348 |
-
</th>
|
349 |
-
<td>
|
350 |
-
<?php do_action( 'foogallery_render_gallery_template_field', $field, $album, $template ); ?>
|
351 |
-
</td>
|
352 |
-
<?php } ?>
|
353 |
-
</tr>
|
354 |
-
<?php
|
355 |
-
}
|
356 |
-
}
|
357 |
-
?>
|
358 |
-
</tbody>
|
359 |
-
</table>
|
360 |
-
<?php
|
361 |
-
}
|
362 |
-
|
363 |
-
public function render_customcss_metabox( $post ) {
|
364 |
-
$album = $this->get_album( $post );
|
365 |
-
$custom_css = $album->custom_css;
|
366 |
-
$example = '<code>#foogallery-album-' . $post->ID . ' { }</code>';
|
367 |
-
?>
|
368 |
-
<p>
|
369 |
-
<?php printf( __( 'Add any custom CSS to target this specific album. For example %s', 'foogallery' ), $example ); ?>
|
370 |
-
</p>
|
371 |
-
<table id="table_styling" class="form-table">
|
372 |
-
<tbody>
|
373 |
-
<tr>
|
374 |
-
<td>
|
375 |
-
<textarea class="foogallery_metabox_custom_css" name="<?php echo FOOGALLERY_META_CUSTOM_CSS; ?>" type="text"><?php echo $custom_css; ?></textarea>
|
376 |
-
</td>
|
377 |
-
</tr>
|
378 |
-
</tbody>
|
379 |
-
</table>
|
380 |
-
<?php
|
381 |
-
}
|
382 |
-
|
383 |
-
public function include_required_scripts() {
|
384 |
-
if ( FOOGALLERY_CPT_ALBUM === foo_current_screen_post_type() ) {
|
385 |
-
//include album selection script
|
386 |
-
$url = FOOGALLERY_ALBUM_URL . 'js/admin-foogallery-album.js';
|
387 |
-
wp_enqueue_script( 'admin-foogallery-album', $url, array( 'jquery', 'jquery-ui-core','jquery-ui-sortable' ), FOOGALLERY_VERSION );
|
388 |
-
|
389 |
-
//include album selection css
|
390 |
-
$url = FOOGALLERY_ALBUM_URL . 'css/admin-foogallery-album.css';
|
391 |
-
wp_enqueue_style( 'admin-foogallery-album', $url, array(), FOOGALLERY_VERSION );
|
392 |
-
|
393 |
-
//spectrum needed for the colorpicker field
|
394 |
-
$url = FOOGALLERY_URL . 'lib/spectrum/spectrum.js';
|
395 |
-
wp_enqueue_script( 'foogallery-spectrum', $url, array('jquery'), FOOGALLERY_VERSION );
|
396 |
-
$url = FOOGALLERY_URL . 'lib/spectrum/spectrum.css';
|
397 |
-
wp_enqueue_style( 'foogallery-spectrum', $url, array(), FOOGALLERY_VERSION );
|
398 |
-
}
|
399 |
-
}
|
400 |
-
|
401 |
-
public function ajax_get_gallery_details() {
|
402 |
-
if ( check_admin_referer( 'foogallery_album_gallery_details' ) ) {
|
403 |
-
$foogallery_id = $_POST['foogallery_id'];
|
404 |
-
$gallery = FooGallery::get_by_id( $foogallery_id );
|
405 |
-
|
406 |
-
if ( false !== $gallery ) {
|
407 |
-
$fields = $this->get_gallery_detail_fields( $gallery ); ?>
|
408 |
-
<form name="foogallery_gallery_details">
|
409 |
-
<input type="hidden" name="foogallery_id" id="foogallery_id" value="<?php echo $foogallery_id; ?>" />
|
410 |
-
<table class="gallery-detail-fields">
|
411 |
-
<tbody>
|
412 |
-
<?php foreach ( $fields as $field => $values ) {
|
413 |
-
$value = get_post_meta( $gallery->ID, $field, true );
|
414 |
-
$input_id = 'foogallery-gallery-detail-fields-' . $field;
|
415 |
-
switch ( $values['input'] ) {
|
416 |
-
case 'text':
|
417 |
-
$values['html'] = '<input type="text" id="' . $input_id . '" name="' . $field . '" value="' . $value . '" />';
|
418 |
-
break;
|
419 |
-
|
420 |
-
case 'textarea':
|
421 |
-
$values['html'] = '<textarea id="' . $input_id . '" name="' . $field . '">' . $value . '</textarea>';
|
422 |
-
break;
|
423 |
-
|
424 |
-
case 'select':
|
425 |
-
$html = '<select id="' . $input_id . '" name="' . $field . '">';
|
426 |
-
|
427 |
-
// If options array is passed
|
428 |
-
if ( isset( $values['options'] ) ) {
|
429 |
-
// Browse and add the options
|
430 |
-
foreach ( $values['options'] as $k => $v ) {
|
431 |
-
// Set the option selected or not
|
432 |
-
if ( $value == $k )
|
433 |
-
$selected = ' selected="selected"';
|
434 |
-
else
|
435 |
-
$selected = '';
|
436 |
-
|
437 |
-
$html .= '<option' . $selected . ' value="' . $k . '">' . $v . '</option>';
|
438 |
-
}
|
439 |
-
}
|
440 |
-
|
441 |
-
$html .= '</select>';
|
442 |
-
|
443 |
-
// Set the html content
|
444 |
-
$values['html'] = $html;
|
445 |
-
|
446 |
-
break;
|
447 |
-
|
448 |
-
case 'checkbox':
|
449 |
-
// Set the checkbox checked or not
|
450 |
-
if ( $value == 'on' )
|
451 |
-
$checked = ' checked="checked"';
|
452 |
-
else
|
453 |
-
$checked = '';
|
454 |
-
|
455 |
-
$html = '<input' . $checked . ' type="checkbox" name="' . $field . ']" id="' . $input_id . '" />';
|
456 |
-
|
457 |
-
$values['html'] = $html;
|
458 |
-
|
459 |
-
break;
|
460 |
-
|
461 |
-
case 'radio':
|
462 |
-
$html = '';
|
463 |
-
|
464 |
-
if ( ! empty( $values['options'] ) ) {
|
465 |
-
$i = 0;
|
466 |
-
|
467 |
-
foreach ( $values['options'] as $k => $v ) {
|
468 |
-
if ( $value == $k )
|
469 |
-
$checked = ' checked="checked"';
|
470 |
-
else
|
471 |
-
$checked = '';
|
472 |
-
|
473 |
-
$html .= '<input' . $checked . ' value="' . $k . '" type="radio" name="' . $field . ']" id="' . sanitize_key( $field . '_' . $i ) . '" /> <label for="' . sanitize_key( $field . '_' . $i ) . '">' . $v . '</label><br />';
|
474 |
-
$i++;
|
475 |
-
}
|
476 |
-
}
|
477 |
-
|
478 |
-
$values['html'] = $html;
|
479 |
-
|
480 |
-
break;
|
481 |
-
} ?>
|
482 |
-
<tr class="foogallery-gallery-detail-fields-<?php echo $field; ?>">
|
483 |
-
<th scope="row" class="label">
|
484 |
-
<label for="foogallery-gallery-detail-fields-<?php echo $field; ?>"><?php echo $values['label']; ?></label>
|
485 |
-
</th>
|
486 |
-
<td>
|
487 |
-
<?php echo $values['html']; ?>
|
488 |
-
<?php if ( !empty( $values['help'] ) ) { ?><p class="help"><?php echo $values['help']; ?></p><?php } ?>
|
489 |
-
</td>
|
490 |
-
</tr>
|
491 |
-
<?php } ?>
|
492 |
-
</tbody>
|
493 |
-
</table>
|
494 |
-
</form><?php
|
495 |
-
} else {
|
496 |
-
echo '<h2>' . __( 'Invalid Gallery!', 'foogallery' ) . '</h2>';
|
497 |
-
}
|
498 |
-
}
|
499 |
-
die();
|
500 |
-
}
|
501 |
-
|
502 |
-
public function ajax_save_gallery_details() {
|
503 |
-
if ( check_admin_referer( 'foogallery_album_gallery_details' ) ) {
|
504 |
-
$foogallery_id = $_POST['foogallery_id'];
|
505 |
-
$gallery = FooGallery::get_by_id( $foogallery_id );
|
506 |
-
if ( false !== $gallery ) {
|
507 |
-
$fields = $this->get_gallery_detail_fields( $gallery );
|
508 |
-
|
509 |
-
foreach ( $fields as $field => $values ) {
|
510 |
-
//for every field, save some info
|
511 |
-
do_action( 'foogallery_album_gallery_details_save', $field, $values, $gallery );
|
512 |
-
}
|
513 |
-
}
|
514 |
-
}
|
515 |
-
}
|
516 |
-
|
517 |
-
public function gallery_details_save($field, $field_args, $gallery) {
|
518 |
-
if ( 'custom_url' === $field || 'custom_target' === $field ) {
|
519 |
-
$value = $_POST[$field];
|
520 |
-
update_post_meta( $gallery->ID, $field, $value );
|
521 |
-
}
|
522 |
-
}
|
523 |
-
|
524 |
-
/**
|
525 |
-
* Get the fields that we want to edit for a gallery from the album management page
|
526 |
-
* @param $gallery FooGallery
|
527 |
-
*
|
528 |
-
* @return mixed|void
|
529 |
-
*/
|
530 |
-
public function get_gallery_detail_fields($gallery) {
|
531 |
-
|
532 |
-
$target_options = apply_filters( 'foogallery_gallery_detail_fields_custom_target_options', array(
|
533 |
-
'default' => __( 'Default', 'foogallery' ),
|
534 |
-
'_blank' => __( 'New tab (_blank)', 'foogallery' ),
|
535 |
-
'_self' => __( 'Same tab (_self)', 'foogallery' )
|
536 |
-
) );
|
537 |
-
|
538 |
-
$edit_url = get_edit_post_link( $gallery->ID );
|
539 |
-
|
540 |
-
$fields = array(
|
541 |
-
'gallery_title' => array(
|
542 |
-
'label' => __( 'Gallery Title', 'foogallery' ),
|
543 |
-
'input' => 'html',
|
544 |
-
'html' => '<strong>' . $gallery->safe_name() . ' <a href="' . $edit_url . '" target="_blank">' . __( 'Edit Gallery', 'foogallery' ) . '</a></strong>',
|
545 |
-
),
|
546 |
-
|
547 |
-
'gallery_template' => array(
|
548 |
-
'label' => __( 'Gallery Template', 'foogallery' ),
|
549 |
-
'input' => 'html',
|
550 |
-
'html' => '<strong>' . $gallery->gallery_template_name() . '</strong>',
|
551 |
-
),
|
552 |
-
|
553 |
-
'gallery_media' => array(
|
554 |
-
'label' => __( 'Media', 'foogallery' ),
|
555 |
-
'input' => 'html',
|
556 |
-
'html' => '<strong>' . $gallery->image_count() . '</strong>'
|
557 |
-
),
|
558 |
-
|
559 |
-
'custom_url' => array(
|
560 |
-
'label' => __( 'Custom URL', 'foogallery' ),
|
561 |
-
'input' => 'text',
|
562 |
-
'help' => __( 'Point your gallery to a custom URL', 'foogallery' )
|
563 |
-
),
|
564 |
-
|
565 |
-
'custom_target' => array(
|
566 |
-
'label' => __( 'Custom Target', 'foogallery' ),
|
567 |
-
'input' => 'select',
|
568 |
-
'help' => __( 'Set a custom target for your gallery', 'foogallery' ),
|
569 |
-
'options' => $target_options
|
570 |
-
)
|
571 |
-
);
|
572 |
-
|
573 |
-
return apply_filters( 'foogallery_gallery_detail_fields', $fields );
|
574 |
-
}
|
575 |
-
}
|
576 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* FooGallery Admin Album MetaBoxes class
|
5 |
+
*/
|
6 |
+
|
7 |
+
if ( ! class_exists( 'FooGallery_Admin_Album_MetaBoxes' ) ) {
|
8 |
+
|
9 |
+
class FooGallery_Admin_Album_MetaBoxes {
|
10 |
+
|
11 |
+
private $_album;
|
12 |
+
|
13 |
+
public function __construct() {
|
14 |
+
//add our foogallery metaboxes
|
15 |
+
add_action( 'add_meta_boxes_' . FOOGALLERY_CPT_ALBUM, array( $this, 'add_meta_boxes' ) );
|
16 |
+
|
17 |
+
//save extra post data for a gallery
|
18 |
+
add_action( 'save_post', array( $this, 'save_album' ) );
|
19 |
+
|
20 |
+
//whitelist metaboxes for our album posttype
|
21 |
+
add_filter( 'foogallery-album_metabox_sanity', array( $this, 'whitelist_metaboxes' ) );
|
22 |
+
|
23 |
+
//add scripts used by metaboxes
|
24 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'include_required_scripts' ) );
|
25 |
+
|
26 |
+
// Ajax call for getting gallery details
|
27 |
+
add_action( 'wp_ajax_foogallery_get_gallery_details', array( $this, 'ajax_get_gallery_details' ) );
|
28 |
+
|
29 |
+
// Ajax call for saving gallery details
|
30 |
+
add_action( 'wp_ajax_foogallery_save_gallery_details', array( $this, 'ajax_save_gallery_details' ) );
|
31 |
+
|
32 |
+
// Save details for the gallery
|
33 |
+
add_action( 'foogallery_album_gallery_details_save', array( $this, 'gallery_details_save' ), 10, 3 );
|
34 |
+
}
|
35 |
+
|
36 |
+
public function whitelist_metaboxes() {
|
37 |
+
return array(
|
38 |
+
FOOGALLERY_CPT_GALLERY => array(
|
39 |
+
'whitelist' => apply_filters( 'foogallery_metabox_sanity_foogallery-album',
|
40 |
+
array(
|
41 |
+
'submitdiv',
|
42 |
+
'slugdiv',
|
43 |
+
'postimagediv',
|
44 |
+
'foogalleryalbum_galleries',
|
45 |
+
'foogalleryalbum_shortcode'
|
46 |
+
)
|
47 |
+
),
|
48 |
+
'contexts' => array( 'normal', 'advanced', 'side', ),
|
49 |
+
'priorities' => array( 'high', 'core', 'default', 'low', ),
|
50 |
+
)
|
51 |
+
);
|
52 |
+
}
|
53 |
+
|
54 |
+
public function add_meta_boxes( $post ) {
|
55 |
+
add_meta_box(
|
56 |
+
'foogalleryalbum_galleries',
|
57 |
+
__( 'Galleries - click a gallery to add it to your album.', 'foogallery' ),
|
58 |
+
array( $this, 'render_gallery_metabox' ),
|
59 |
+
FOOGALLERY_CPT_ALBUM,
|
60 |
+
'normal',
|
61 |
+
'high'
|
62 |
+
);
|
63 |
+
|
64 |
+
add_meta_box(
|
65 |
+
'foogalleryalbum_settings',
|
66 |
+
__( 'Settings', 'foogallery' ),
|
67 |
+
array( $this, 'render_settings_metabox' ),
|
68 |
+
FOOGALLERY_CPT_ALBUM,
|
69 |
+
'normal',
|
70 |
+
'high'
|
71 |
+
);
|
72 |
+
|
73 |
+
add_meta_box(
|
74 |
+
'foogalleryalbum_customcss',
|
75 |
+
__( 'Custom CSS', 'foogallery' ),
|
76 |
+
array( $this, 'render_customcss_metabox' ),
|
77 |
+
FOOGALLERY_CPT_ALBUM,
|
78 |
+
'normal',
|
79 |
+
'low'
|
80 |
+
);
|
81 |
+
|
82 |
+
add_meta_box(
|
83 |
+
'foogalleryalbum_shortcode',
|
84 |
+
__( 'Album Shortcode', 'foogallery' ),
|
85 |
+
array( $this, 'render_shortcode_metabox' ),
|
86 |
+
FOOGALLERY_CPT_ALBUM,
|
87 |
+
'side',
|
88 |
+
'default'
|
89 |
+
);
|
90 |
+
|
91 |
+
add_meta_box(
|
92 |
+
'foogalleryalbum_sorting',
|
93 |
+
__( 'Album Sorting', 'foogallery' ),
|
94 |
+
array( $this, 'render_sorting_metabox' ),
|
95 |
+
FOOGALLERY_CPT_ALBUM,
|
96 |
+
'side',
|
97 |
+
'default'
|
98 |
+
);
|
99 |
+
}
|
100 |
+
|
101 |
+
public function get_album( $post ) {
|
102 |
+
if ( ! isset( $this->_album ) ) {
|
103 |
+
$this->_album = FooGalleryAlbum::get( $post );
|
104 |
+
}
|
105 |
+
|
106 |
+
return $this->_album;
|
107 |
+
}
|
108 |
+
|
109 |
+
public function save_album( $post_id ) {
|
110 |
+
// check autosave
|
111 |
+
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
112 |
+
return $post_id;
|
113 |
+
}
|
114 |
+
|
115 |
+
// verify nonce
|
116 |
+
if ( array_key_exists( FOOGALLERY_CPT_ALBUM . '_nonce', $_POST ) &&
|
117 |
+
wp_verify_nonce( $_POST[ FOOGALLERY_CPT_ALBUM . '_nonce' ], plugin_basename( FOOGALLERY_FILE ) )
|
118 |
+
) {
|
119 |
+
//if we get here, we are dealing with the Album custom post type
|
120 |
+
|
121 |
+
$galleries = apply_filters( 'foogallery_save_album_galleries', explode( ',', $_POST[ FOOGALLERY_ALBUM_META_GALLERIES ] ) );
|
122 |
+
update_post_meta( $post_id, FOOGALLERY_ALBUM_META_GALLERIES, $galleries );
|
123 |
+
|
124 |
+
update_post_meta( $post_id, FOOGALLERY_ALBUM_META_TEMPLATE, $_POST[FOOGALLERY_ALBUM_META_TEMPLATE] );
|
125 |
+
|
126 |
+
update_post_meta( $post_id, FOOGALLERY_ALBUM_META_SORT, $_POST[FOOGALLERY_ALBUM_META_SORT] );
|
127 |
+
|
128 |
+
$settings = isset($_POST['_foogallery_settings']) ?
|
129 |
+
$_POST['_foogallery_settings'] : array();
|
130 |
+
|
131 |
+
$settings = apply_filters( 'foogallery_save_album_settings', $settings );
|
132 |
+
|
133 |
+
update_post_meta( $post_id, FOOGALLERY_META_SETTINGS_OLD, $settings );
|
134 |
+
|
135 |
+
$custom_css = isset($_POST[FOOGALLERY_META_CUSTOM_CSS]) ?
|
136 |
+
$_POST[FOOGALLERY_META_CUSTOM_CSS] : '';
|
137 |
+
|
138 |
+
if ( empty( $custom_css ) ) {
|
139 |
+
delete_post_meta( $post_id, FOOGALLERY_META_CUSTOM_CSS );
|
140 |
+
} else {
|
141 |
+
update_post_meta( $post_id, FOOGALLERY_META_CUSTOM_CSS, $custom_css );
|
142 |
+
}
|
143 |
+
|
144 |
+
do_action( 'foogallery_after_save_album', $post_id, $_POST );
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
public function get_ordered_galleries( $album ) {
|
149 |
+
|
150 |
+
//get all other galleries
|
151 |
+
$galleries = foogallery_get_all_galleries( $album->gallery_ids );
|
152 |
+
|
153 |
+
$album_galleries = $album->galleries();
|
154 |
+
|
155 |
+
return array_merge( $album_galleries, $galleries );
|
156 |
+
}
|
157 |
+
|
158 |
+
public function render_gallery_metabox( $post ) {
|
159 |
+
$album = $this->get_album( $post );
|
160 |
+
|
161 |
+
$galleries = $this->get_ordered_galleries( $album );
|
162 |
+
|
163 |
+
wp_enqueue_style( 'media-views' );
|
164 |
+
|
165 |
+
?>
|
166 |
+
<input type="hidden" name="<?php echo FOOGALLERY_CPT_ALBUM; ?>_nonce"
|
167 |
+
id="<?php echo FOOGALLERY_CPT_ALBUM; ?>_nonce"
|
168 |
+
value="<?php echo wp_create_nonce( plugin_basename( FOOGALLERY_FILE ) ); ?>"/>
|
169 |
+
<input type="hidden" name='foogallery_album_galleries' id="foogallery_album_galleries"
|
170 |
+
value="<?php echo $album->gallery_id_csv(); ?>"/>
|
171 |
+
<div>
|
172 |
+
<?php if ( !$album->has_galleries() ) { ?>
|
173 |
+
<div class="foogallery-album-error">
|
174 |
+
<?php _e( 'There are no galleries selected for your album yet! Click any gallery to add it to your album.', 'foogallery' ); ?>
|
175 |
+
</div>
|
176 |
+
<?php } ?>
|
177 |
+
|
178 |
+
<div class="foogallery-album-info-modal media-modal">
|
179 |
+
<div class="media-modal-content">
|
180 |
+
<div class="media-frame mode-select">
|
181 |
+
<div class="media-frame-title">
|
182 |
+
<h1><?php _e('Edit Gallery Details', 'foogallery'); ?></h1>
|
183 |
+
<span class="spinner is-active"></span>
|
184 |
+
</div>
|
185 |
+
<div class="modal-content">
|
186 |
+
<?php wp_nonce_field( 'foogallery_album_gallery_details', 'foogallery_album_gallery_details_nonce', false ); ?>
|
187 |
+
<div class="gallery-details" data-loading="<?php _e( 'Loading details for ', 'foogallery' ); ?>"></div>
|
188 |
+
</div>
|
189 |
+
</div>
|
190 |
+
<div class="media-frame-toolbar">
|
191 |
+
<div class="media-toolbar">
|
192 |
+
<div class="media-toolbar-secondary"></div>
|
193 |
+
<div class="media-toolbar-primary search-form">
|
194 |
+
<button type="button" class="button media-button button-primary button-large media-button-select gallery-details-save"><?php _e('Save Gallery Details', 'foogallery'); ?></button>
|
195 |
+
<span class="spinner"></span>
|
196 |
+
</div>
|
197 |
+
</div>
|
198 |
+
</div>
|
199 |
+
</div>
|
200 |
+
<button type="button" class="button-link media-modal-close">
|
201 |
+
<span class="media-modal-icon"><span class="screen-reader-text"><?php _e('Close media panel', 'foogallery'); ?></span></span>
|
202 |
+
</button>
|
203 |
+
|
204 |
+
</div>
|
205 |
+
<div class="foogallery-album-info-modal-backdrop media-modal-backdrop"></div>
|
206 |
+
|
207 |
+
|
208 |
+
<ul class="foogallery-album-gallery-list">
|
209 |
+
<?php
|
210 |
+
foreach ( $galleries as $gallery ) {
|
211 |
+
$img_src = foogallery_find_featured_attachment_thumbnail_src( $gallery );
|
212 |
+
$images = $gallery->image_count();
|
213 |
+
$selected = $album->includes_gallery( $gallery->ID ) ? ' selected' : '';
|
214 |
+
$title = $gallery->safe_name();
|
215 |
+
?>
|
216 |
+
<li class="foogallery-pile">
|
217 |
+
<div class="foogallery-gallery-select attachment-preview landscape<?php echo $selected; ?>" data-foogallery-id="<?php echo $gallery->ID; ?>">
|
218 |
+
<div class="thumbnail" style="display: table;">
|
219 |
+
<div style="display: table-cell; vertical-align: middle; text-align: center;">
|
220 |
+
<img src="<?php echo $img_src; ?>"/>
|
221 |
+
<h3><?php echo $title; ?>
|
222 |
+
<span><?php echo $images; ?></span>
|
223 |
+
</h3>
|
224 |
+
</div>
|
225 |
+
</div>
|
226 |
+
<a class="info foogallery-album-info" href="#"
|
227 |
+
title="<?php _e( 'Edit Album Info', 'foogallery' ); ?>"
|
228 |
+
data-gallery-title="<?php echo $title; ?>"
|
229 |
+
data-gallery-id="<?php echo $gallery->ID; ?>"><span class="dashicons dashicons-info"></span></a>
|
230 |
+
</div>
|
231 |
+
</li>
|
232 |
+
<?php } ?>
|
233 |
+
</ul>
|
234 |
+
<div style="clear: both;"></div>
|
235 |
+
</div>
|
236 |
+
<?php
|
237 |
+
}
|
238 |
+
|
239 |
+
public function render_shortcode_metabox( $post ) {
|
240 |
+
$album = $this->get_album( $post );
|
241 |
+
$shortcode = $album->shortcode();
|
242 |
+
?>
|
243 |
+
<p class="foogallery-shortcode">
|
244 |
+
<input type="text" id="foogallery-copy-shortcode" size="<?php echo strlen( $shortcode ); ?>" value="<?php echo htmlspecialchars( $shortcode ); ?>" readonly="readonly" />
|
245 |
+
</p>
|
246 |
+
<p>
|
247 |
+
<?php _e( 'Paste the above shortcode into a post or page to show the album.', 'foogallery' ); ?>
|
248 |
+
</p>
|
249 |
+
<script>
|
250 |
+
jQuery(function($) {
|
251 |
+
var shortcodeInput = document.querySelector('#foogallery-copy-shortcode');
|
252 |
+
shortcodeInput.addEventListener('click', function () {
|
253 |
+
try {
|
254 |
+
// select the contents
|
255 |
+
shortcodeInput.select();
|
256 |
+
//copy the selection
|
257 |
+
document.execCommand('copy');
|
258 |
+
//show the copied message
|
259 |
+
$('.foogallery-shortcode-message').remove();
|
260 |
+
$(shortcodeInput).after('<p class="foogallery-shortcode-message"><?php _e( 'Shortcode copied to clipboard :)','foogallery' ); ?></p>');
|
261 |
+
} catch(err) {
|
262 |
+
console.log('Oops, unable to copy!');
|
263 |
+
}
|
264 |
+
}, false);
|
265 |
+
});
|
266 |
+
</script>
|
267 |
+
<?php
|
268 |
+
}
|
269 |
+
|
270 |
+
public function render_sorting_metabox( $post ) {
|
271 |
+
$album = $this->get_album( $post );
|
272 |
+
$sorting_options = foogallery_sorting_options(); ?>
|
273 |
+
<p>
|
274 |
+
<?php _e('Change the way galleries are sorted within your album. By default, they are sorted in the order you see them.', 'foogallery'); ?>
|
275 |
+
</p>
|
276 |
+
<?php
|
277 |
+
foreach ( $sorting_options as $sorting_key => $sorting_label ) { ?>
|
278 |
+
<p>
|
279 |
+
<input type="radio" value="<?php echo $sorting_key; ?>" <?php checked( $sorting_key === $album->sorting ); ?> id="FooGallerySettings_AlbumSort_<?php echo $sorting_key; ?>" name="<?php echo FOOGALLERY_ALBUM_META_SORT; ?>" />
|
280 |
+
<label for="FooGallerySettings_AlbumSort_<?php echo $sorting_key; ?>"><?php echo $sorting_label; ?></label>
|
281 |
+
</p><?php
|
282 |
+
}
|
283 |
+
}
|
284 |
+
|
285 |
+
public function render_settings_metabox( $post ) {
|
286 |
+
$album = $this->get_album( $post );
|
287 |
+
$available_templates = foogallery_album_templates();
|
288 |
+
$album_template = foogallery_default_album_template();
|
289 |
+
if ( ! empty($album->album_template) ) {
|
290 |
+
$album_template = $album->album_template;
|
291 |
+
}
|
292 |
+
if ( false === $album_template ) {
|
293 |
+
$album_template = $available_templates[0]['slug'];
|
294 |
+
}
|
295 |
+
$hide_help = 'on' == foogallery_get_setting( 'hide_gallery_template_help' );
|
296 |
+
?>
|
297 |
+
<table class="foogallery-album-metabox-settings">
|
298 |
+
<tbody>
|
299 |
+
<tr class="foogallery_template_field foogallery_template_field_selector">
|
300 |
+
<th>
|
301 |
+
<label for="FooGallerySettings_AlbumTemplate"><?php _e( 'Album Template', 'foogallery' ); ?></label>
|
302 |
+
</th>
|
303 |
+
<td>
|
304 |
+
<select id="FooGallerySettings_AlbumTemplate" name="<?php echo FOOGALLERY_ALBUM_META_TEMPLATE; ?>">
|
305 |
+
<?php
|
306 |
+
foreach ( $available_templates as $template ) {
|
307 |
+
$selected = ($album_template === $template['slug']) ? 'selected' : '';
|
308 |
+
echo "<option {$selected} value=\"{$template['slug']}\">{$template['name']}</option>";
|
309 |
+
}
|
310 |
+
?>
|
311 |
+
</select>
|
312 |
+
<br />
|
313 |
+
<small><?php _e( 'The album template that will be used when the album is output to the frontend.', 'foogallery' ); ?></small>
|
314 |
+
</td>
|
315 |
+
</tr>
|
316 |
+
<?php
|
317 |
+
foreach ( $available_templates as $template ) {
|
318 |
+
$field_visibility = ($album_template !== $template['slug']) ? 'style="display:none"' : '';
|
319 |
+
$section = '';
|
320 |
+
$fields = isset( $template['fields'] ) ? $template['fields'] : array();
|
321 |
+
foreach ( $fields as $field ) {
|
322 |
+
//allow for the field to be altered by extensions.
|
323 |
+
$field = apply_filters( 'foogallery_alter_gallery_template_field', $field, $album );
|
324 |
+
|
325 |
+
$class ="foogallery_template_field foogallery_template_field-{$template['slug']} foogallery_template_field-{$template['slug']}-{$field['id']}";
|
326 |
+
|
327 |
+
if ( isset($field['section']) && $field['section'] !== $section ) {
|
328 |
+
$section = $field['section'];
|
329 |
+
?>
|
330 |
+
<tr class="<?php echo $class; ?>" <?php echo $field_visibility; ?>>
|
331 |
+
<td colspan="2"><h4><?php echo $section; ?></h4></td>
|
332 |
+
</tr>
|
333 |
+
<?php }
|
334 |
+
if (isset($field['type']) && 'help' == $field['type'] && $hide_help) {
|
335 |
+
continue; //skip help if the 'hide help' setting is turned on
|
336 |
+
}
|
337 |
+
?>
|
338 |
+
<tr class="<?php echo $class; ?>" <?php echo $field_visibility; ?>>
|
339 |
+
<?php if ( isset($field['type']) && 'help' == $field['type'] ) { ?>
|
340 |
+
<td colspan="2">
|
341 |
+
<div class="foogallery-help">
|
342 |
+
<?php echo $field['desc']; ?>
|
343 |
+
</div>
|
344 |
+
</td>
|
345 |
+
<?php } else { ?>
|
346 |
+
<th>
|
347 |
+
<label for="FooGallerySettings_<?php echo $template['slug'] . '_' . $field['id']; ?>"><?php echo $field['title']; ?></label>
|
348 |
+
</th>
|
349 |
+
<td>
|
350 |
+
<?php do_action( 'foogallery_render_gallery_template_field', $field, $album, $template ); ?>
|
351 |
+
</td>
|
352 |
+
<?php } ?>
|
353 |
+
</tr>
|
354 |
+
<?php
|
355 |
+
}
|
356 |
+
}
|
357 |
+
?>
|
358 |
+
</tbody>
|
359 |
+
</table>
|
360 |
+
<?php
|
361 |
+
}
|
362 |
+
|
363 |
+
public function render_customcss_metabox( $post ) {
|
364 |
+
$album = $this->get_album( $post );
|
365 |
+
$custom_css = $album->custom_css;
|
366 |
+
$example = '<code>#foogallery-album-' . $post->ID . ' { }</code>';
|
367 |
+
?>
|
368 |
+
<p>
|
369 |
+
<?php printf( __( 'Add any custom CSS to target this specific album. For example %s', 'foogallery' ), $example ); ?>
|
370 |
+
</p>
|
371 |
+
<table id="table_styling" class="form-table">
|
372 |
+
<tbody>
|
373 |
+
<tr>
|
374 |
+
<td>
|
375 |
+
<textarea class="foogallery_metabox_custom_css" name="<?php echo FOOGALLERY_META_CUSTOM_CSS; ?>" type="text"><?php echo $custom_css; ?></textarea>
|
376 |
+
</td>
|
377 |
+
</tr>
|
378 |
+
</tbody>
|
379 |
+
</table>
|
380 |
+
<?php
|
381 |
+
}
|
382 |
+
|
383 |
+
public function include_required_scripts() {
|
384 |
+
if ( FOOGALLERY_CPT_ALBUM === foo_current_screen_post_type() ) {
|
385 |
+
//include album selection script
|
386 |
+
$url = FOOGALLERY_ALBUM_URL . 'js/admin-foogallery-album.js';
|
387 |
+
wp_enqueue_script( 'admin-foogallery-album', $url, array( 'jquery', 'jquery-ui-core','jquery-ui-sortable' ), FOOGALLERY_VERSION );
|
388 |
+
|
389 |
+
//include album selection css
|
390 |
+
$url = FOOGALLERY_ALBUM_URL . 'css/admin-foogallery-album.css';
|
391 |
+
wp_enqueue_style( 'admin-foogallery-album', $url, array(), FOOGALLERY_VERSION );
|
392 |
+
|
393 |
+
//spectrum needed for the colorpicker field
|
394 |
+
$url = FOOGALLERY_URL . 'lib/spectrum/spectrum.js';
|
395 |
+
wp_enqueue_script( 'foogallery-spectrum', $url, array('jquery'), FOOGALLERY_VERSION );
|
396 |
+
$url = FOOGALLERY_URL . 'lib/spectrum/spectrum.css';
|
397 |
+
wp_enqueue_style( 'foogallery-spectrum', $url, array(), FOOGALLERY_VERSION );
|
398 |
+
}
|
399 |
+
}
|
400 |
+
|
401 |
+
public function ajax_get_gallery_details() {
|
402 |
+
if ( check_admin_referer( 'foogallery_album_gallery_details' ) ) {
|
403 |
+
$foogallery_id = $_POST['foogallery_id'];
|
404 |
+
$gallery = FooGallery::get_by_id( $foogallery_id );
|
405 |
+
|
406 |
+
if ( false !== $gallery ) {
|
407 |
+
$fields = $this->get_gallery_detail_fields( $gallery ); ?>
|
408 |
+
<form name="foogallery_gallery_details">
|
409 |
+
<input type="hidden" name="foogallery_id" id="foogallery_id" value="<?php echo $foogallery_id; ?>" />
|
410 |
+
<table class="gallery-detail-fields">
|
411 |
+
<tbody>
|
412 |
+
<?php foreach ( $fields as $field => $values ) {
|
413 |
+
$value = get_post_meta( $gallery->ID, $field, true );
|
414 |
+
$input_id = 'foogallery-gallery-detail-fields-' . $field;
|
415 |
+
switch ( $values['input'] ) {
|
416 |
+
case 'text':
|
417 |
+
$values['html'] = '<input type="text" id="' . $input_id . '" name="' . $field . '" value="' . $value . '" />';
|
418 |
+
break;
|
419 |
+
|
420 |
+
case 'textarea':
|
421 |
+
$values['html'] = '<textarea id="' . $input_id . '" name="' . $field . '">' . $value . '</textarea>';
|
422 |
+
break;
|
423 |
+
|
424 |
+
case 'select':
|
425 |
+
$html = '<select id="' . $input_id . '" name="' . $field . '">';
|
426 |
+
|
427 |
+
// If options array is passed
|
428 |
+
if ( isset( $values['options'] ) ) {
|
429 |
+
// Browse and add the options
|
430 |
+
foreach ( $values['options'] as $k => $v ) {
|
431 |
+
// Set the option selected or not
|
432 |
+
if ( $value == $k )
|
433 |
+
$selected = ' selected="selected"';
|
434 |
+
else
|
435 |
+
$selected = '';
|
436 |
+
|
437 |
+
$html .= '<option' . $selected . ' value="' . $k . '">' . $v . '</option>';
|
438 |
+
}
|
439 |
+
}
|
440 |
+
|
441 |
+
$html .= '</select>';
|
442 |
+
|
443 |
+
// Set the html content
|
444 |
+
$values['html'] = $html;
|
445 |
+
|
446 |
+
break;
|
447 |
+
|
448 |
+
case 'checkbox':
|
449 |
+
// Set the checkbox checked or not
|
450 |
+
if ( $value == 'on' )
|
451 |
+
$checked = ' checked="checked"';
|
452 |
+
else
|
453 |
+
$checked = '';
|
454 |
+
|
455 |
+
$html = '<input' . $checked . ' type="checkbox" name="' . $field . ']" id="' . $input_id . '" />';
|
456 |
+
|
457 |
+
$values['html'] = $html;
|
458 |
+
|
459 |
+
break;
|
460 |
+
|
461 |
+
case 'radio':
|
462 |
+
$html = '';
|
463 |
+
|
464 |
+
if ( ! empty( $values['options'] ) ) {
|
465 |
+
$i = 0;
|
466 |
+
|
467 |
+
foreach ( $values['options'] as $k => $v ) {
|
468 |
+
if ( $value == $k )
|
469 |
+
$checked = ' checked="checked"';
|
470 |
+
else
|
471 |
+
$checked = '';
|
472 |
+
|
473 |
+
$html .= '<input' . $checked . ' value="' . $k . '" type="radio" name="' . $field . ']" id="' . sanitize_key( $field . '_' . $i ) . '" /> <label for="' . sanitize_key( $field . '_' . $i ) . '">' . $v . '</label><br />';
|
474 |
+
$i++;
|
475 |
+
}
|
476 |
+
}
|
477 |
+
|
478 |
+
$values['html'] = $html;
|
479 |
+
|
480 |
+
break;
|
481 |
+
} ?>
|
482 |
+
<tr class="foogallery-gallery-detail-fields-<?php echo $field; ?>">
|
483 |
+
<th scope="row" class="label">
|
484 |
+
<label for="foogallery-gallery-detail-fields-<?php echo $field; ?>"><?php echo $values['label']; ?></label>
|
485 |
+
</th>
|
486 |
+
<td>
|
487 |
+
<?php echo $values['html']; ?>
|
488 |
+
<?php if ( !empty( $values['help'] ) ) { ?><p class="help"><?php echo $values['help']; ?></p><?php } ?>
|
489 |
+
</td>
|
490 |
+
</tr>
|
491 |
+
<?php } ?>
|
492 |
+
</tbody>
|
493 |
+
</table>
|
494 |
+
</form><?php
|
495 |
+
} else {
|
496 |
+
echo '<h2>' . __( 'Invalid Gallery!', 'foogallery' ) . '</h2>';
|
497 |
+
}
|
498 |
+
}
|
499 |
+
die();
|
500 |
+
}
|
501 |
+
|
502 |
+
public function ajax_save_gallery_details() {
|
503 |
+
if ( check_admin_referer( 'foogallery_album_gallery_details' ) ) {
|
504 |
+
$foogallery_id = $_POST['foogallery_id'];
|
505 |
+
$gallery = FooGallery::get_by_id( $foogallery_id );
|
506 |
+
if ( false !== $gallery ) {
|
507 |
+
$fields = $this->get_gallery_detail_fields( $gallery );
|
508 |
+
|
509 |
+
foreach ( $fields as $field => $values ) {
|
510 |
+
//for every field, save some info
|
511 |
+
do_action( 'foogallery_album_gallery_details_save', $field, $values, $gallery );
|
512 |
+
}
|
513 |
+
}
|
514 |
+
}
|
515 |
+
}
|
516 |
+
|
517 |
+
public function gallery_details_save($field, $field_args, $gallery) {
|
518 |
+
if ( 'custom_url' === $field || 'custom_target' === $field ) {
|
519 |
+
$value = $_POST[$field];
|
520 |
+
update_post_meta( $gallery->ID, $field, $value );
|
521 |
+
}
|
522 |
+
}
|
523 |
+
|
524 |
+
/**
|
525 |
+
* Get the fields that we want to edit for a gallery from the album management page
|
526 |
+
* @param $gallery FooGallery
|
527 |
+
*
|
528 |
+
* @return mixed|void
|
529 |
+
*/
|
530 |
+
public function get_gallery_detail_fields($gallery) {
|
531 |
+
|
532 |
+
$target_options = apply_filters( 'foogallery_gallery_detail_fields_custom_target_options', array(
|
533 |
+
'default' => __( 'Default', 'foogallery' ),
|
534 |
+
'_blank' => __( 'New tab (_blank)', 'foogallery' ),
|
535 |
+
'_self' => __( 'Same tab (_self)', 'foogallery' )
|
536 |
+
) );
|
537 |
+
|
538 |
+
$edit_url = get_edit_post_link( $gallery->ID );
|
539 |
+
|
540 |
+
$fields = array(
|
541 |
+
'gallery_title' => array(
|
542 |
+
'label' => __( 'Gallery Title', 'foogallery' ),
|
543 |
+
'input' => 'html',
|
544 |
+
'html' => '<strong>' . $gallery->safe_name() . ' <a href="' . $edit_url . '" target="_blank">' . __( 'Edit Gallery', 'foogallery' ) . '</a></strong>',
|
545 |
+
),
|
546 |
+
|
547 |
+
'gallery_template' => array(
|
548 |
+
'label' => __( 'Gallery Template', 'foogallery' ),
|
549 |
+
'input' => 'html',
|
550 |
+
'html' => '<strong>' . $gallery->gallery_template_name() . '</strong>',
|
551 |
+
),
|
552 |
+
|
553 |
+
'gallery_media' => array(
|
554 |
+
'label' => __( 'Media', 'foogallery' ),
|
555 |
+
'input' => 'html',
|
556 |
+
'html' => '<strong>' . $gallery->image_count() . '</strong>'
|
557 |
+
),
|
558 |
+
|
559 |
+
'custom_url' => array(
|
560 |
+
'label' => __( 'Custom URL', 'foogallery' ),
|
561 |
+
'input' => 'text',
|
562 |
+
'help' => __( 'Point your gallery to a custom URL', 'foogallery' )
|
563 |
+
),
|
564 |
+
|
565 |
+
'custom_target' => array(
|
566 |
+
'label' => __( 'Custom Target', 'foogallery' ),
|
567 |
+
'input' => 'select',
|
568 |
+
'help' => __( 'Set a custom target for your gallery', 'foogallery' ),
|
569 |
+
'options' => $target_options
|
570 |
+
)
|
571 |
+
);
|
572 |
+
|
573 |
+
return apply_filters( 'foogallery_gallery_detail_fields', $fields );
|
574 |
+
}
|
575 |
+
}
|
576 |
+
}
|
extensions/albums/album-default.php
CHANGED
@@ -1,81 +1,81 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery default responsive album template
|
4 |
-
*/
|
5 |
-
global $current_foogallery_album;
|
6 |
-
global $current_foogallery_album_arguments;
|
7 |
-
$gallery = foogallery_album_get_current_gallery();
|
8 |
-
$alignment = foogallery_album_template_setting( 'alignment', 'alignment-left' );
|
9 |
-
$foogallery = false;
|
10 |
-
|
11 |
-
if ( !empty( $gallery ) ) {
|
12 |
-
$foogallery = FooGallery::get_by_slug( $gallery );
|
13 |
-
|
14 |
-
//check to see if the gallery belongs to the album
|
15 |
-
if ( !$current_foogallery_album->includes_gallery( $foogallery->ID ) ) {
|
16 |
-
$foogallery = false;
|
17 |
-
}
|
18 |
-
}
|
19 |
-
|
20 |
-
if ( false !== $foogallery ) {
|
21 |
-
$album_url = foogallery_album_remove_gallery_from_link();
|
22 |
-
echo '<div id="' . $current_foogallery_album->slug . '" class="foogallery-album-header">';
|
23 |
-
echo '<p><a href="' . esc_url( $album_url ) . '">' . foogallery_get_setting( 'language_back_to_album_text', __( '« back to album', 'foogallery' ) ) . '</a></p>';
|
24 |
-
echo '<h2>' . $foogallery->name . '</h2>';
|
25 |
-
echo apply_filters('foogallery_album_default_gallery_content', '', $foogallery);
|
26 |
-
echo '</div>';
|
27 |
-
echo do_shortcode('[foogallery id="' . $foogallery->ID . '"]');
|
28 |
-
} else {
|
29 |
-
$title_bg = foogallery_album_template_setting( 'title_bg', '#ffffff' );
|
30 |
-
$title_font_color = foogallery_album_template_setting( 'title_font_color', '#000000' );
|
31 |
-
$args = foogallery_album_template_setting( 'thumbnail_dimensions', array() );
|
32 |
-
if ( !empty( $title_bg ) || !empty( $title_font_color ) ) {
|
33 |
-
echo '<style type="text/css">';
|
34 |
-
if ( !empty( $title_bg ) ) {
|
35 |
-
echo '.foogallery-album-gallery-list .foogallery-pile h3 { background: ' . $title_bg . ' !important; }';
|
36 |
-
}
|
37 |
-
if ( !empty( $title_font_color ) ) {
|
38 |
-
echo '.foogallery-album-gallery-list .foogallery-pile h3 { color: ' . $title_font_color . ' !important; }';
|
39 |
-
}
|
40 |
-
echo '</style>';
|
41 |
-
}
|
42 |
-
?>
|
43 |
-
<div id="foogallery-album-<?php echo $current_foogallery_album->ID; ?>">
|
44 |
-
<ul class="foogallery-album-gallery-list <?php echo $alignment; ?>">
|
45 |
-
<?php
|
46 |
-
foreach ( $current_foogallery_album->galleries() as $gallery ) {
|
47 |
-
if (!empty($gallery->attachment_ids)) {
|
48 |
-
$attachment = $gallery->featured_attachment();
|
49 |
-
|
50 |
-
if ( false === $attachment ) continue;
|
51 |
-
|
52 |
-
$img_html = $attachment->html_img( $args );
|
53 |
-
$images = $gallery->image_count();
|
54 |
-
$gallery_link = foogallery_album_build_gallery_link( $current_foogallery_album, $gallery );
|
55 |
-
$gallery_link_target = foogallery_album_build_gallery_link_target( $current_foogallery_album, $gallery );
|
56 |
-
?>
|
57 |
-
<li>
|
58 |
-
<div class="foogallery-pile">
|
59 |
-
<div class="foogallery-pile-inner">
|
60 |
-
<a href="<?php echo esc_url( $gallery_link ); ?>" target="<?php echo $gallery_link_target; ?>">
|
61 |
-
<?php echo $img_html; ?>
|
62 |
-
<?php
|
63 |
-
|
64 |
-
$title = empty( $gallery->name ) ?
|
65 |
-
sprintf( __( '%s #%s', 'foogallery' ), foogallery_plugin_name(), $gallery->ID ) :
|
66 |
-
$gallery->name;
|
67 |
-
|
68 |
-
?>
|
69 |
-
<h3><?php echo $title; ?>
|
70 |
-
<span><?php echo $images; ?></span>
|
71 |
-
</h3>
|
72 |
-
</a>
|
73 |
-
</div>
|
74 |
-
</div>
|
75 |
-
</li>
|
76 |
-
<?php } ?>
|
77 |
-
<?php } ?>
|
78 |
-
</ul>
|
79 |
-
<div style="clear: both;"></div>
|
80 |
-
</div>
|
81 |
-
<?php }
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery default responsive album template
|
4 |
+
*/
|
5 |
+
global $current_foogallery_album;
|
6 |
+
global $current_foogallery_album_arguments;
|
7 |
+
$gallery = foogallery_album_get_current_gallery();
|
8 |
+
$alignment = foogallery_album_template_setting( 'alignment', 'alignment-left' );
|
9 |
+
$foogallery = false;
|
10 |
+
|
11 |
+
if ( !empty( $gallery ) ) {
|
12 |
+
$foogallery = FooGallery::get_by_slug( $gallery );
|
13 |
+
|
14 |
+
//check to see if the gallery belongs to the album
|
15 |
+
if ( !$current_foogallery_album->includes_gallery( $foogallery->ID ) ) {
|
16 |
+
$foogallery = false;
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
if ( false !== $foogallery ) {
|
21 |
+
$album_url = foogallery_album_remove_gallery_from_link();
|
22 |
+
echo '<div id="' . $current_foogallery_album->slug . '" class="foogallery-album-header">';
|
23 |
+
echo '<p><a href="' . esc_url( $album_url ) . '">' . foogallery_get_setting( 'language_back_to_album_text', __( '« back to album', 'foogallery' ) ) . '</a></p>';
|
24 |
+
echo '<h2>' . $foogallery->name . '</h2>';
|
25 |
+
echo apply_filters('foogallery_album_default_gallery_content', '', $foogallery);
|
26 |
+
echo '</div>';
|
27 |
+
echo do_shortcode('[foogallery id="' . $foogallery->ID . '"]');
|
28 |
+
} else {
|
29 |
+
$title_bg = foogallery_album_template_setting( 'title_bg', '#ffffff' );
|
30 |
+
$title_font_color = foogallery_album_template_setting( 'title_font_color', '#000000' );
|
31 |
+
$args = foogallery_album_template_setting( 'thumbnail_dimensions', array() );
|
32 |
+
if ( !empty( $title_bg ) || !empty( $title_font_color ) ) {
|
33 |
+
echo '<style type="text/css">';
|
34 |
+
if ( !empty( $title_bg ) ) {
|
35 |
+
echo '.foogallery-album-gallery-list .foogallery-pile h3 { background: ' . $title_bg . ' !important; }';
|
36 |
+
}
|
37 |
+
if ( !empty( $title_font_color ) ) {
|
38 |
+
echo '.foogallery-album-gallery-list .foogallery-pile h3 { color: ' . $title_font_color . ' !important; }';
|
39 |
+
}
|
40 |
+
echo '</style>';
|
41 |
+
}
|
42 |
+
?>
|
43 |
+
<div id="foogallery-album-<?php echo $current_foogallery_album->ID; ?>">
|
44 |
+
<ul class="foogallery-album-gallery-list <?php echo $alignment; ?>">
|
45 |
+
<?php
|
46 |
+
foreach ( $current_foogallery_album->galleries() as $gallery ) {
|
47 |
+
if (!empty($gallery->attachment_ids)) {
|
48 |
+
$attachment = $gallery->featured_attachment();
|
49 |
+
|
50 |
+
if ( false === $attachment ) continue;
|
51 |
+
|
52 |
+
$img_html = $attachment->html_img( $args );
|
53 |
+
$images = $gallery->image_count();
|
54 |
+
$gallery_link = foogallery_album_build_gallery_link( $current_foogallery_album, $gallery );
|
55 |
+
$gallery_link_target = foogallery_album_build_gallery_link_target( $current_foogallery_album, $gallery );
|
56 |
+
?>
|
57 |
+
<li>
|
58 |
+
<div class="foogallery-pile">
|
59 |
+
<div class="foogallery-pile-inner">
|
60 |
+
<a href="<?php echo esc_url( $gallery_link ); ?>" target="<?php echo $gallery_link_target; ?>">
|
61 |
+
<?php echo $img_html; ?>
|
62 |
+
<?php
|
63 |
+
|
64 |
+
$title = empty( $gallery->name ) ?
|
65 |
+
sprintf( __( '%s #%s', 'foogallery' ), foogallery_plugin_name(), $gallery->ID ) :
|
66 |
+
$gallery->name;
|
67 |
+
|
68 |
+
?>
|
69 |
+
<h3><?php echo $title; ?>
|
70 |
+
<span><?php echo $images; ?></span>
|
71 |
+
</h3>
|
72 |
+
</a>
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
+
</li>
|
76 |
+
<?php } ?>
|
77 |
+
<?php } ?>
|
78 |
+
</ul>
|
79 |
+
<div style="clear: both;"></div>
|
80 |
+
</div>
|
81 |
+
<?php }
|
extensions/albums/album-stack.php
CHANGED
@@ -1,67 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery All-In-One Stack Album template
|
4 |
-
*/
|
5 |
-
global $current_foogallery_album;
|
6 |
-
global $current_foogallery_album_arguments;
|
7 |
-
$args = foogallery_album_template_setting( 'thumbnail_dimensions', array() );
|
8 |
-
$lightbox = foogallery_album_template_setting( 'lightbox', 'unknown' );
|
9 |
-
$random_angle = foogallery_album_template_setting( 'random_angle', 'false' );
|
10 |
-
$gutter = foogallery_album_template_setting( 'gutter', '40' );
|
11 |
-
$delay = foogallery_album_template_setting( 'delay', '0' );
|
12 |
-
$pile_angles = foogallery_album_template_setting( 'pile_angles', '2' );
|
13 |
-
?>
|
14 |
-
<div id="foogallery-album-<?php echo $current_foogallery_album->ID; ?>" class="foogallery-container foogallery-stack-album">
|
15 |
-
<div class="topbar">
|
16 |
-
<span id="foogallery-stack-album-back-<?php echo $current_foogallery_album->ID; ?>" class="back">←</span>
|
17 |
-
<h2><?php echo $current_foogallery_album->name; ?></h2><h3 id="foogallery-stack-album-gallery-<?php echo $current_foogallery_album->ID; ?>"></h3>
|
18 |
-
</div>
|
19 |
-
<ul id="foogallery-stack-album-<?php echo $current_foogallery_album->ID; ?>" class="tp-grid">
|
20 |
-
<?php
|
21 |
-
foreach ( $current_foogallery_album->galleries() as $gallery ) {
|
22 |
-
foreach ( $gallery->attachments() as $attachment ) {
|
23 |
-
echo '<li data-pile="'. esc_attr($gallery->name) . '">';
|
24 |
-
$args['link_attributes']['rel'] = 'gallery[' . $gallery->ID . ']';
|
25 |
-
$args['link_attributes']['class'] = apply_filters( 'foogallery_album_stack_link_class_name', $lightbox );
|
26 |
-
echo $attachment->html( $args, false, false );
|
27 |
-
if ( $attachment->caption ) {
|
28 |
-
echo '<span class="tp-info"><span>' . wp_filter_nohtml_kses( $attachment->caption ) . '</span></span>';
|
29 |
-
}
|
30 |
-
echo $attachment->html_img( $args );
|
31 |
-
echo '</a>';
|
32 |
-
echo '</li>';
|
33 |
-
}
|
34 |
-
}
|
35 |
-
?>
|
36 |
-
</ul>
|
37 |
-
</div>
|
38 |
-
<script type="text/javascript">
|
39 |
-
jQuery(function($) {
|
40 |
-
|
41 |
-
var $grid = $( '#foogallery-stack-album-<?php echo $current_foogallery_album->ID; ?>' ),
|
42 |
-
$name = $( '#foogallery-stack-album-gallery-<?php echo $current_foogallery_album->ID; ?>' ),
|
43 |
-
$close = $( '#foogallery-stack-album-back-<?php echo $current_foogallery_album->ID; ?>' ),
|
44 |
-
$loader = $( '<div class="loader"><i></i><i></i><i></i><i></i><i></i><i></i></div>' ).insertBefore( $grid ),
|
45 |
-
stapel = $grid.stapel( {
|
46 |
-
delay : <?php echo $delay; ?>,
|
47 |
-
randomAngle : <?php echo $random_angle; ?>,
|
48 |
-
gutter : <?php echo $gutter; ?>,
|
49 |
-
pileAngles : <?php echo $pile_angles; ?>,
|
50 |
-
onLoad : function() {
|
51 |
-
$loader.remove();
|
52 |
-
},
|
53 |
-
onBeforeOpen : function( pileName ) {
|
54 |
-
$name.html( pileName );
|
55 |
-
},
|
56 |
-
onAfterOpen : function( pileName ) {
|
57 |
-
$close.show();
|
58 |
-
}
|
59 |
-
} );
|
60 |
-
|
61 |
-
$close.on( 'click', function() {
|
62 |
-
$close.hide();
|
63 |
-
$name.empty();
|
64 |
-
stapel.closePile();
|
65 |
-
} );
|
66 |
-
} );
|
67 |
-
</script>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery All-In-One Stack Album template
|
4 |
+
*/
|
5 |
+
global $current_foogallery_album;
|
6 |
+
global $current_foogallery_album_arguments;
|
7 |
+
$args = foogallery_album_template_setting( 'thumbnail_dimensions', array() );
|
8 |
+
$lightbox = foogallery_album_template_setting( 'lightbox', 'unknown' );
|
9 |
+
$random_angle = foogallery_album_template_setting( 'random_angle', 'false' );
|
10 |
+
$gutter = foogallery_album_template_setting( 'gutter', '40' );
|
11 |
+
$delay = foogallery_album_template_setting( 'delay', '0' );
|
12 |
+
$pile_angles = foogallery_album_template_setting( 'pile_angles', '2' );
|
13 |
+
?>
|
14 |
+
<div id="foogallery-album-<?php echo $current_foogallery_album->ID; ?>" class="foogallery-container foogallery-stack-album">
|
15 |
+
<div class="topbar">
|
16 |
+
<span id="foogallery-stack-album-back-<?php echo $current_foogallery_album->ID; ?>" class="back">←</span>
|
17 |
+
<h2><?php echo $current_foogallery_album->name; ?></h2><h3 id="foogallery-stack-album-gallery-<?php echo $current_foogallery_album->ID; ?>"></h3>
|
18 |
+
</div>
|
19 |
+
<ul id="foogallery-stack-album-<?php echo $current_foogallery_album->ID; ?>" class="tp-grid">
|
20 |
+
<?php
|
21 |
+
foreach ( $current_foogallery_album->galleries() as $gallery ) {
|
22 |
+
foreach ( $gallery->attachments() as $attachment ) {
|
23 |
+
echo '<li data-pile="'. esc_attr($gallery->name) . '">';
|
24 |
+
$args['link_attributes']['rel'] = 'gallery[' . $gallery->ID . ']';
|
25 |
+
$args['link_attributes']['class'] = apply_filters( 'foogallery_album_stack_link_class_name', $lightbox );
|
26 |
+
echo $attachment->html( $args, false, false );
|
27 |
+
if ( $attachment->caption ) {
|
28 |
+
echo '<span class="tp-info"><span>' . wp_filter_nohtml_kses( $attachment->caption ) . '</span></span>';
|
29 |
+
}
|
30 |
+
echo $attachment->html_img( $args );
|
31 |
+
echo '</a>';
|
32 |
+
echo '</li>';
|
33 |
+
}
|
34 |
+
}
|
35 |
+
?>
|
36 |
+
</ul>
|
37 |
+
</div>
|
38 |
+
<script type="text/javascript">
|
39 |
+
jQuery(function($) {
|
40 |
+
|
41 |
+
var $grid = $( '#foogallery-stack-album-<?php echo $current_foogallery_album->ID; ?>' ),
|
42 |
+
$name = $( '#foogallery-stack-album-gallery-<?php echo $current_foogallery_album->ID; ?>' ),
|
43 |
+
$close = $( '#foogallery-stack-album-back-<?php echo $current_foogallery_album->ID; ?>' ),
|
44 |
+
$loader = $( '<div class="loader"><i></i><i></i><i></i><i></i><i></i><i></i></div>' ).insertBefore( $grid ),
|
45 |
+
stapel = $grid.stapel( {
|
46 |
+
delay : <?php echo $delay; ?>,
|
47 |
+
randomAngle : <?php echo $random_angle; ?>,
|
48 |
+
gutter : <?php echo $gutter; ?>,
|
49 |
+
pileAngles : <?php echo $pile_angles; ?>,
|
50 |
+
onLoad : function() {
|
51 |
+
$loader.remove();
|
52 |
+
},
|
53 |
+
onBeforeOpen : function( pileName ) {
|
54 |
+
$name.html( pileName );
|
55 |
+
},
|
56 |
+
onAfterOpen : function( pileName ) {
|
57 |
+
$close.show();
|
58 |
+
}
|
59 |
+
} );
|
60 |
+
|
61 |
+
$close.on( 'click', function() {
|
62 |
+
$close.hide();
|
63 |
+
$name.empty();
|
64 |
+
stapel.closePile();
|
65 |
+
} );
|
66 |
+
} );
|
67 |
+
</script>
|
extensions/albums/class-albums-extension.php
CHANGED
@@ -1,111 +1,111 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! class_exists( 'FooGallery_Albums_Extension' ) ) {
|
3 |
-
|
4 |
-
define( 'FOOGALLERY_ALBUM_PATH', plugin_dir_path( __FILE__ ) );
|
5 |
-
define( 'FOOGALLERY_ALBUM_URL', plugin_dir_url( __FILE__ ) );
|
6 |
-
define( 'FOOGALLERY_CPT_ALBUM', 'foogallery-album' );
|
7 |
-
define( 'FOOGALLERY_ALBUM_META_GALLERIES', 'foogallery_album_galleries' );
|
8 |
-
define( 'FOOGALLERY_ALBUM_META_TEMPLATE', 'foogallery_album_template' );
|
9 |
-
define( 'FOOGALLERY_ALBUM_META_SORT', 'foogallery_album_sort' );
|
10 |
-
|
11 |
-
class FooGallery_Albums_Extension {
|
12 |
-
|
13 |
-
function __construct() {
|
14 |
-
$this->includes();
|
15 |
-
|
16 |
-
new FooGallery_Album_Rewrite_Rules();
|
17 |
-
new FooGallery_Albums_PostTypes();
|
18 |
-
|
19 |
-
if ( is_admin() ) {
|
20 |
-
new FooGallery_Albums_Admin_Columns();
|
21 |
-
new FooGallery_Admin_Album_MetaBoxes();
|
22 |
-
|
23 |
-
//add language settings
|
24 |
-
add_filter( 'foogallery_admin_settings_override', array( $this, 'include_album_language_settings' ) );
|
25 |
-
|
26 |
-
//add some global settings for albums
|
27 |
-
add_filter( 'foogallery_admin_settings_override', array($this, 'add_album_settings' ) );
|
28 |
-
|
29 |
-
add_action( 'foogallery_uninstall', array($this, 'uninstall' ) );
|
30 |
-
|
31 |
-
} else {
|
32 |
-
|
33 |
-
new FooGallery_Album_Template_Loader();
|
34 |
-
new FooGallery_Album_Shortcodes();
|
35 |
-
}
|
36 |
-
add_filter( 'foogallery_album_templates_files', array( $this, 'register_myself' ) );
|
37 |
-
add_filter( 'foogallery_defaults', array( $this, 'apply_album_defaults' ) );
|
38 |
-
add_action( 'foogallery_extension_activated-albums', array( $this, 'flush_rewrite_rules' ) );
|
39 |
-
add_filter( 'foogallery_alter_album_template_field', array( $this, 'alter_gallery_template_field' ), 10, 2 );
|
40 |
-
}
|
41 |
-
|
42 |
-
function includes() {
|
43 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'functions.php' );
|
44 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'class-posttypes.php' );
|
45 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'class-foogallery-album.php' );
|
46 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'public/class-rewrite-rules.php' );
|
47 |
-
|
48 |
-
if ( is_admin() ) {
|
49 |
-
//only admin
|
50 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'admin/class-metaboxes.php' );
|
51 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'admin/class-columns.php' );
|
52 |
-
} else {
|
53 |
-
//only front-end
|
54 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'public/class-shortcodes.php' );
|
55 |
-
|
56 |
-
//load Template \ Loader files
|
57 |
-
require_once( FOOGALLERY_ALBUM_PATH . 'public/class-foogallery-album-template-loader.php' );
|
58 |
-
}
|
59 |
-
}
|
60 |
-
|
61 |
-
function apply_album_defaults( $defaults ) {
|
62 |
-
$defaults['album_template'] = 'default';
|
63 |
-
|
64 |
-
return $defaults;
|
65 |
-
}
|
66 |
-
|
67 |
-
function register_myself( $extensions ) {
|
68 |
-
$extensions[] = __FILE__;
|
69 |
-
return $extensions;
|
70 |
-
}
|
71 |
-
|
72 |
-
function flush_rewrite_rules() {
|
73 |
-
$rewrite = new FooGallery_Album_Rewrite_Rules();
|
74 |
-
$rewrite->add_gallery_endpoint();
|
75 |
-
|
76 |
-
flush_rewrite_rules();
|
77 |
-
}
|
78 |
-
|
79 |
-
function include_album_language_settings( $settings ) {
|
80 |
-
$settings['settings'][] = array(
|
81 |
-
'id' => 'language_back_to_album_text',
|
82 |
-
'title' => __( 'Back To Album Text', 'foogallery' ),
|
83 |
-
'type' => 'text',
|
84 |
-
'default' => __( '« back to album', 'foogallery' ),
|
85 |
-
'tab' => 'language'
|
86 |
-
);
|
87 |
-
|
88 |
-
return $settings;
|
89 |
-
}
|
90 |
-
|
91 |
-
function add_album_settings( $settings ) {
|
92 |
-
|
93 |
-
$settings['tabs']['albums'] = __( 'Albums', 'foogallery' );
|
94 |
-
|
95 |
-
$settings['settings'][] = array(
|
96 |
-
'id' => 'album_gallery_slug',
|
97 |
-
'title' => __( 'Gallery Slug', 'foogallery' ),
|
98 |
-
'type' => 'text',
|
99 |
-
'default' => 'gallery',
|
100 |
-
'desc' => __( 'The slug that is used when generating gallery URL\'s for albums. PLEASE NOTE : if you change this value, you might need to save your Permalinks again.', 'foogallery' ),
|
101 |
-
'tab' => 'albums'
|
102 |
-
);
|
103 |
-
|
104 |
-
return $settings;
|
105 |
-
}
|
106 |
-
|
107 |
-
function uninstall() {
|
108 |
-
foogallery_album_uninstall();
|
109 |
-
}
|
110 |
-
}
|
111 |
-
}
|
1 |
+
<?php
|
2 |
+
if ( ! class_exists( 'FooGallery_Albums_Extension' ) ) {
|
3 |
+
|
4 |
+
define( 'FOOGALLERY_ALBUM_PATH', plugin_dir_path( __FILE__ ) );
|
5 |
+
define( 'FOOGALLERY_ALBUM_URL', plugin_dir_url( __FILE__ ) );
|
6 |
+
define( 'FOOGALLERY_CPT_ALBUM', 'foogallery-album' );
|
7 |
+
define( 'FOOGALLERY_ALBUM_META_GALLERIES', 'foogallery_album_galleries' );
|
8 |
+
define( 'FOOGALLERY_ALBUM_META_TEMPLATE', 'foogallery_album_template' );
|
9 |
+
define( 'FOOGALLERY_ALBUM_META_SORT', 'foogallery_album_sort' );
|
10 |
+
|
11 |
+
class FooGallery_Albums_Extension {
|
12 |
+
|
13 |
+
function __construct() {
|
14 |
+
$this->includes();
|
15 |
+
|
16 |
+
new FooGallery_Album_Rewrite_Rules();
|
17 |
+
new FooGallery_Albums_PostTypes();
|
18 |
+
|
19 |
+
if ( is_admin() ) {
|
20 |
+
new FooGallery_Albums_Admin_Columns();
|
21 |
+
new FooGallery_Admin_Album_MetaBoxes();
|
22 |
+
|
23 |
+
//add language settings
|
24 |
+
add_filter( 'foogallery_admin_settings_override', array( $this, 'include_album_language_settings' ) );
|
25 |
+
|
26 |
+
//add some global settings for albums
|
27 |
+
add_filter( 'foogallery_admin_settings_override', array($this, 'add_album_settings' ) );
|
28 |
+
|
29 |
+
add_action( 'foogallery_uninstall', array($this, 'uninstall' ) );
|
30 |
+
|
31 |
+
} else {
|
32 |
+
|
33 |
+
new FooGallery_Album_Template_Loader();
|
34 |
+
new FooGallery_Album_Shortcodes();
|
35 |
+
}
|
36 |
+
add_filter( 'foogallery_album_templates_files', array( $this, 'register_myself' ) );
|
37 |
+
add_filter( 'foogallery_defaults', array( $this, 'apply_album_defaults' ) );
|
38 |
+
add_action( 'foogallery_extension_activated-albums', array( $this, 'flush_rewrite_rules' ) );
|
39 |
+
add_filter( 'foogallery_alter_album_template_field', array( $this, 'alter_gallery_template_field' ), 10, 2 );
|
40 |
+
}
|
41 |
+
|
42 |
+
function includes() {
|
43 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'functions.php' );
|
44 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'class-posttypes.php' );
|
45 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'class-foogallery-album.php' );
|
46 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'public/class-rewrite-rules.php' );
|
47 |
+
|
48 |
+
if ( is_admin() ) {
|
49 |
+
//only admin
|
50 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'admin/class-metaboxes.php' );
|
51 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'admin/class-columns.php' );
|
52 |
+
} else {
|
53 |
+
//only front-end
|
54 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'public/class-shortcodes.php' );
|
55 |
+
|
56 |
+
//load Template \ Loader files
|
57 |
+
require_once( FOOGALLERY_ALBUM_PATH . 'public/class-foogallery-album-template-loader.php' );
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
function apply_album_defaults( $defaults ) {
|
62 |
+
$defaults['album_template'] = 'default';
|
63 |
+
|
64 |
+
return $defaults;
|
65 |
+
}
|
66 |
+
|
67 |
+
function register_myself( $extensions ) {
|
68 |
+
$extensions[] = __FILE__;
|
69 |
+
return $extensions;
|
70 |
+
}
|
71 |
+
|
72 |
+
function flush_rewrite_rules() {
|
73 |
+
$rewrite = new FooGallery_Album_Rewrite_Rules();
|
74 |
+
$rewrite->add_gallery_endpoint();
|
75 |
+
|
76 |
+
flush_rewrite_rules();
|
77 |
+
}
|
78 |
+
|
79 |
+
function include_album_language_settings( $settings ) {
|
80 |
+
$settings['settings'][] = array(
|
81 |
+
'id' => 'language_back_to_album_text',
|
82 |
+
'title' => __( 'Back To Album Text', 'foogallery' ),
|
83 |
+
'type' => 'text',
|
84 |
+
'default' => __( '« back to album', 'foogallery' ),
|
85 |
+
'tab' => 'language'
|
86 |
+
);
|
87 |
+
|
88 |
+
return $settings;
|
89 |
+
}
|
90 |
+
|
91 |
+
function add_album_settings( $settings ) {
|
92 |
+
|
93 |
+
$settings['tabs']['albums'] = __( 'Albums', 'foogallery' );
|
94 |
+
|
95 |
+
$settings['settings'][] = array(
|
96 |
+
'id' => 'album_gallery_slug',
|
97 |
+
'title' => __( 'Gallery Slug', 'foogallery' ),
|
98 |
+
'type' => 'text',
|
99 |
+
'default' => 'gallery',
|
100 |
+
'desc' => __( 'The slug that is used when generating gallery URL\'s for albums. PLEASE NOTE : if you change this value, you might need to save your Permalinks again.', 'foogallery' ),
|
101 |
+
'tab' => 'albums'
|
102 |
+
);
|
103 |
+
|
104 |
+
return $settings;
|
105 |
+
}
|
106 |
+
|
107 |
+
function uninstall() {
|
108 |
+
foogallery_album_uninstall();
|
109 |
+
}
|
110 |
+
}
|
111 |
+
}
|
extensions/albums/class-foogallery-album.php
CHANGED
@@ -1,256 +1,256 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class FooGalleryAlbum
|
5 |
-
*
|
6 |
-
* An easy to use wrapper class for a FooGallery Album post
|
7 |
-
*/
|
8 |
-
class FooGalleryAlbum extends stdClass {
|
9 |
-
|
10 |
-
/**
|
11 |
-
* private constructor
|
12 |
-
*
|
13 |
-
* @param null $post
|
14 |
-
*/
|
15 |
-
private function __construct( $post = null ) {
|
16 |
-
$this->set_defaults();
|
17 |
-
|
18 |
-
if ( $post !== null ) {
|
19 |
-
$this->load( $post );
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Sets the default when a new album is instantiated
|
25 |
-
*/
|
26 |
-
private function set_defaults() {
|
27 |
-
$this->_post = null;
|
28 |
-
$this->ID = 0;
|
29 |
-
$this->gallery_ids = array();
|
30 |
-
$this->_galleries = false;
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* private gallery load function
|
35 |
-
* @param $post
|
36 |
-
*/
|
37 |
-
private function load( $post ) {
|
38 |
-
$this->_post = $post;
|
39 |
-
$this->ID = $post->ID;
|
40 |
-
$this->slug = $post->post_name;
|
41 |
-
$this->name = $post->post_title;
|
42 |
-
$this->author = $post->post_author;
|
43 |
-
$this->post_status = $post->post_status;
|
44 |
-
$album_meta = get_post_meta( $this->ID, FOOGALLERY_ALBUM_META_GALLERIES, true );
|
45 |
-
$this->gallery_ids = is_array( $album_meta ) ? array_filter( $album_meta ) : array();
|
46 |
-
$this->album_template = get_post_meta( $post->ID, FOOGALLERY_ALBUM_META_TEMPLATE, true );
|
47 |
-
$this->settings = get_post_meta( $post->ID, FOOGALLERY_META_SETTINGS_OLD, true );
|
48 |
-
$this->custom_css = get_post_meta( $post->ID, FOOGALLERY_META_CUSTOM_CSS, true );
|
49 |
-
$this->sorting = get_post_meta( $post->ID, FOOGALLERY_ALBUM_META_SORT, true );
|
50 |
-
do_action( 'foogallery_foogallery-album_instance_after_load', $this, $post );
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* private function to load a album by an id
|
55 |
-
* @param $post_id
|
56 |
-
*/
|
57 |
-
private function load_by_id( $post_id ) {
|
58 |
-
$post = get_post( $post_id );
|
59 |
-
if ( $post ) {
|
60 |
-
$this->load( $post );
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
/**
|
65 |
-
* private function to load a album by the slug.
|
66 |
-
* Will be used when loading album shortcodes
|
67 |
-
* @param $slug
|
68 |
-
*/
|
69 |
-
private function load_by_slug( $slug ) {
|
70 |
-
if ( ! empty( $slug ) ) {
|
71 |
-
$args = array(
|
72 |
-
'name' => $slug,
|
73 |
-
'numberposts' => 1,
|
74 |
-
'post_type' => FOOGALLERY_CPT_ALBUM,
|
75 |
-
);
|
76 |
-
|
77 |
-
$albums = get_posts( $args );
|
78 |
-
|
79 |
-
if ( $albums ) {
|
80 |
-
$this->load( $albums[0] );
|
81 |
-
}
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Static function to load a Album instance by passing in a post object
|
87 |
-
* @static
|
88 |
-
*
|
89 |
-
* @param $post
|
90 |
-
*
|
91 |
-
* @return FooGalleryAlbum
|
92 |
-
*/
|
93 |
-
public static function get( $post ) {
|
94 |
-
return new self( $post );
|
95 |
-
}
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Static function to load an Album instance by post id
|
99 |
-
*
|
100 |
-
* @param $post_id
|
101 |
-
*
|
102 |
-
* @return FooGalleryAlbum
|
103 |
-
*/
|
104 |
-
public static function get_by_id( $post_id ) {
|
105 |
-
$album = new self();
|
106 |
-
$album->load_by_id( $post_id );
|
107 |
-
if ( ! $album->does_exist() ) {
|
108 |
-
return false;
|
109 |
-
}
|
110 |
-
return $album;
|
111 |
-
}
|
112 |
-
|
113 |
-
/**
|
114 |
-
* Static function to load a album instance by passing in a album slug
|
115 |
-
*
|
116 |
-
* @param string $slug
|
117 |
-
*
|
118 |
-
* @return FooGalleryAlbum
|
119 |
-
*/
|
120 |
-
public static function get_by_slug( $slug ) {
|
121 |
-
$album = new self();
|
122 |
-
$album->load_by_slug( $slug );
|
123 |
-
if ( ! $album->does_exist() ) {
|
124 |
-
return false;
|
125 |
-
}
|
126 |
-
return $album;
|
127 |
-
}
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Checks if the album has galleries
|
131 |
-
* @return bool
|
132 |
-
*/
|
133 |
-
public function has_galleries() {
|
134 |
-
return sizeof( $this->gallery_ids ) > 0;
|
135 |
-
}
|
136 |
-
|
137 |
-
/**
|
138 |
-
* Checks if the album exists
|
139 |
-
* @return bool
|
140 |
-
*/
|
141 |
-
public function does_exist() {
|
142 |
-
return $this->ID > 0;
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Returns true if the album is published
|
147 |
-
* @return bool
|
148 |
-
*/
|
149 |
-
public function is_published() {
|
150 |
-
return $this->post_status === 'publish';
|
151 |
-
}
|
152 |
-
|
153 |
-
/**
|
154 |
-
* Get a comma separated list of gallery ids
|
155 |
-
* @return string
|
156 |
-
*/
|
157 |
-
public function gallery_id_csv() {
|
158 |
-
if ( is_array( $this->gallery_ids ) ) {
|
159 |
-
return implode( ',', $this->gallery_ids );
|
160 |
-
}
|
161 |
-
|
162 |
-
return '';
|
163 |
-
}
|
164 |
-
|
165 |
-
/**
|
166 |
-
* Lazy load the attachments for the gallery
|
167 |
-
*
|
168 |
-
* @return array
|
169 |
-
*/
|
170 |
-
public function galleries() {
|
171 |
-
//lazy load the attachments for performance
|
172 |
-
if ( $this->_galleries === false ) {
|
173 |
-
$this->_galleries = array();
|
174 |
-
|
175 |
-
if ( ! empty( $this->gallery_ids ) ) {
|
176 |
-
|
177 |
-
$gallery_query_args = apply_filters( 'foogallery_album_gallery_get_posts_args', array(
|
178 |
-
'post_type' => FOOGALLERY_CPT_GALLERY,
|
179 |
-
'posts_per_page' => -1,
|
180 |
-
'post__in' => $this->gallery_ids,
|
181 |
-
'orderby' => foogallery_sorting_get_posts_orderby_arg( $this->sorting ),
|
182 |
-
'order' => foogallery_sorting_get_posts_order_arg( $this->sorting )
|
183 |
-
) );
|
184 |
-
|
185 |
-
$galleries = get_posts( $gallery_query_args );
|
186 |
-
|
187 |
-
$this->_galleries = array_map( array( 'FooGallery', 'get' ), $galleries );
|
188 |
-
}
|
189 |
-
}
|
190 |
-
|
191 |
-
return $this->_galleries;
|
192 |
-
}
|
193 |
-
|
194 |
-
function includes_gallery( $gallery_id ) {
|
195 |
-
if ( $this->has_galleries() ) {
|
196 |
-
return in_array( $gallery_id, $this->gallery_ids );
|
197 |
-
}
|
198 |
-
return false;
|
199 |
-
}
|
200 |
-
|
201 |
-
public function gallery_count() {
|
202 |
-
$count = sizeof( $this->gallery_ids );
|
203 |
-
switch ( $count ) {
|
204 |
-
case 0:
|
205 |
-
return __( 'No galleries', 'foogallery' );
|
206 |
-
case 1:
|
207 |
-
return __( '1 gallery', 'foogallery' );
|
208 |
-
default:
|
209 |
-
return sprintf( __( '%s galleries', 'foogallery' ), $count );
|
210 |
-
}
|
211 |
-
}
|
212 |
-
|
213 |
-
/**
|
214 |
-
* Output the shortcode for the gallery
|
215 |
-
*
|
216 |
-
* @return string
|
217 |
-
*/
|
218 |
-
public function shortcode() {
|
219 |
-
return foogallery_build_album_shortcode( $this->ID );
|
220 |
-
}
|
221 |
-
|
222 |
-
function get_meta( $key, $default ) {
|
223 |
-
if ( ! is_array( $this->settings ) ) {
|
224 |
-
return $default;
|
225 |
-
}
|
226 |
-
|
227 |
-
$value = array_key_exists( $key, $this->settings ) ? $this->settings[ $key ] : null;
|
228 |
-
|
229 |
-
if ( $value === null ) {
|
230 |
-
return $default;
|
231 |
-
}
|
232 |
-
|
233 |
-
return $value;
|
234 |
-
}
|
235 |
-
|
236 |
-
function is_checked( $key, $default = false ) {
|
237 |
-
if ( ! is_array( $this->settings ) ) {
|
238 |
-
return $default;
|
239 |
-
}
|
240 |
-
|
241 |
-
return array_key_exists( $key, $this->settings );
|
242 |
-
}
|
243 |
-
|
244 |
-
public function album_template_details() {
|
245 |
-
if ( ! empty( $this->album_template ) ) {
|
246 |
-
|
247 |
-
foreach ( foogallery_album_templates() as $template ) {
|
248 |
-
if ( $this->album_template == $template['slug'] ) {
|
249 |
-
return $template;
|
250 |
-
}
|
251 |
-
}
|
252 |
-
}
|
253 |
-
|
254 |
-
return false;
|
255 |
-
}
|
256 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class FooGalleryAlbum
|
5 |
+
*
|
6 |
+
* An easy to use wrapper class for a FooGallery Album post
|
7 |
+
*/
|
8 |
+
class FooGalleryAlbum extends stdClass {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* private constructor
|
12 |
+
*
|
13 |
+
* @param null $post
|
14 |
+
*/
|
15 |
+
private function __construct( $post = null ) {
|
16 |
+
$this->set_defaults();
|
17 |
+
|
18 |
+
if ( $post !== null ) {
|
19 |
+
$this->load( $post );
|
20 |
+
}
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Sets the default when a new album is instantiated
|
25 |
+
*/
|
26 |
+
private function set_defaults() {
|
27 |
+
$this->_post = null;
|
28 |
+
$this->ID = 0;
|
29 |
+
$this->gallery_ids = array();
|
30 |
+
$this->_galleries = false;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* private gallery load function
|
35 |
+
* @param $post
|
36 |
+
*/
|
37 |
+
private function load( $post ) {
|
38 |
+
$this->_post = $post;
|
39 |
+
$this->ID = $post->ID;
|
40 |
+
$this->slug = $post->post_name;
|
41 |
+
$this->name = $post->post_title;
|
42 |
+
$this->author = $post->post_author;
|
43 |
+
$this->post_status = $post->post_status;
|
44 |
+
$album_meta = get_post_meta( $this->ID, FOOGALLERY_ALBUM_META_GALLERIES, true );
|
45 |
+
$this->gallery_ids = is_array( $album_meta ) ? array_filter( $album_meta ) : array();
|
46 |
+
$this->album_template = get_post_meta( $post->ID, FOOGALLERY_ALBUM_META_TEMPLATE, true );
|
47 |
+
$this->settings = get_post_meta( $post->ID, FOOGALLERY_META_SETTINGS_OLD, true );
|
48 |
+
$this->custom_css = get_post_meta( $post->ID, FOOGALLERY_META_CUSTOM_CSS, true );
|
49 |
+
$this->sorting = get_post_meta( $post->ID, FOOGALLERY_ALBUM_META_SORT, true );
|
50 |
+
do_action( 'foogallery_foogallery-album_instance_after_load', $this, $post );
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* private function to load a album by an id
|
55 |
+
* @param $post_id
|
56 |
+
*/
|
57 |
+
private function load_by_id( $post_id ) {
|
58 |
+
$post = get_post( $post_id );
|
59 |
+
if ( $post ) {
|
60 |
+
$this->load( $post );
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* private function to load a album by the slug.
|
66 |
+
* Will be used when loading album shortcodes
|
67 |
+
* @param $slug
|
68 |
+
*/
|
69 |
+
private function load_by_slug( $slug ) {
|
70 |
+
if ( ! empty( $slug ) ) {
|
71 |
+
$args = array(
|
72 |
+
'name' => $slug,
|
73 |
+
'numberposts' => 1,
|
74 |
+
'post_type' => FOOGALLERY_CPT_ALBUM,
|
75 |
+
);
|
76 |
+
|
77 |
+
$albums = get_posts( $args );
|
78 |
+
|
79 |
+
if ( $albums ) {
|
80 |
+
$this->load( $albums[0] );
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Static function to load a Album instance by passing in a post object
|
87 |
+
* @static
|
88 |
+
*
|
89 |
+
* @param $post
|
90 |
+
*
|
91 |
+
* @return FooGalleryAlbum
|
92 |
+
*/
|
93 |
+
public static function get( $post ) {
|
94 |
+
return new self( $post );
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Static function to load an Album instance by post id
|
99 |
+
*
|
100 |
+
* @param $post_id
|
101 |
+
*
|
102 |
+
* @return FooGalleryAlbum
|
103 |
+
*/
|
104 |
+
public static function get_by_id( $post_id ) {
|
105 |
+
$album = new self();
|
106 |
+
$album->load_by_id( $post_id );
|
107 |
+
if ( ! $album->does_exist() ) {
|
108 |
+
return false;
|
109 |
+
}
|
110 |
+
return $album;
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Static function to load a album instance by passing in a album slug
|
115 |
+
*
|
116 |
+
* @param string $slug
|
117 |
+
*
|
118 |
+
* @return FooGalleryAlbum
|
119 |
+
*/
|
120 |
+
public static function get_by_slug( $slug ) {
|
121 |
+
$album = new self();
|
122 |
+
$album->load_by_slug( $slug );
|
123 |
+
if ( ! $album->does_exist() ) {
|
124 |
+
return false;
|
125 |
+
}
|
126 |
+
return $album;
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Checks if the album has galleries
|
131 |
+
* @return bool
|
132 |
+
*/
|
133 |
+
public function has_galleries() {
|
134 |
+
return sizeof( $this->gallery_ids ) > 0;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Checks if the album exists
|
139 |
+
* @return bool
|
140 |
+
*/
|
141 |
+
public function does_exist() {
|
142 |
+
return $this->ID > 0;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Returns true if the album is published
|
147 |
+
* @return bool
|
148 |
+
*/
|
149 |
+
public function is_published() {
|
150 |
+
return $this->post_status === 'publish';
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Get a comma separated list of gallery ids
|
155 |
+
* @return string
|
156 |
+
*/
|
157 |
+
public function gallery_id_csv() {
|
158 |
+
if ( is_array( $this->gallery_ids ) ) {
|
159 |
+
return implode( ',', $this->gallery_ids );
|
160 |
+
}
|
161 |
+
|
162 |
+
return '';
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Lazy load the attachments for the gallery
|
167 |
+
*
|
168 |
+
* @return array
|
169 |
+
*/
|
170 |
+
public function galleries() {
|
171 |
+
//lazy load the attachments for performance
|
172 |
+
if ( $this->_galleries === false ) {
|
173 |
+
$this->_galleries = array();
|
174 |
+
|
175 |
+
if ( ! empty( $this->gallery_ids ) ) {
|
176 |
+
|
177 |
+
$gallery_query_args = apply_filters( 'foogallery_album_gallery_get_posts_args', array(
|
178 |
+
'post_type' => FOOGALLERY_CPT_GALLERY,
|
179 |
+
'posts_per_page' => -1,
|
180 |
+
'post__in' => $this->gallery_ids,
|
181 |
+
'orderby' => foogallery_sorting_get_posts_orderby_arg( $this->sorting ),
|
182 |
+
'order' => foogallery_sorting_get_posts_order_arg( $this->sorting )
|
183 |
+
) );
|
184 |
+
|
185 |
+
$galleries = get_posts( $gallery_query_args );
|
186 |
+
|
187 |
+
$this->_galleries = array_map( array( 'FooGallery', 'get' ), $galleries );
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
return $this->_galleries;
|
192 |
+
}
|
193 |
+
|
194 |
+
function includes_gallery( $gallery_id ) {
|
195 |
+
if ( $this->has_galleries() ) {
|
196 |
+
return in_array( $gallery_id, $this->gallery_ids );
|
197 |
+
}
|
198 |
+
return false;
|
199 |
+
}
|
200 |
+
|
201 |
+
public function gallery_count() {
|
202 |
+
$count = sizeof( $this->gallery_ids );
|
203 |
+
switch ( $count ) {
|
204 |
+
case 0:
|
205 |
+
return __( 'No galleries', 'foogallery' );
|
206 |
+
case 1:
|
207 |
+
return __( '1 gallery', 'foogallery' );
|
208 |
+
default:
|
209 |
+
return sprintf( __( '%s galleries', 'foogallery' ), $count );
|
210 |
+
}
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Output the shortcode for the gallery
|
215 |
+
*
|
216 |
+
* @return string
|
217 |
+
*/
|
218 |
+
public function shortcode() {
|
219 |
+
return foogallery_build_album_shortcode( $this->ID );
|
220 |
+
}
|
221 |
+
|
222 |
+
function get_meta( $key, $default ) {
|
223 |
+
if ( ! is_array( $this->settings ) ) {
|
224 |
+
return $default;
|
225 |
+
}
|
226 |
+
|
227 |
+
$value = array_key_exists( $key, $this->settings ) ? $this->settings[ $key ] : null;
|
228 |
+
|
229 |
+
if ( $value === null ) {
|
230 |
+
return $default;
|
231 |
+
}
|
232 |
+
|
233 |
+
return $value;
|
234 |
+
}
|
235 |
+
|
236 |
+
function is_checked( $key, $default = false ) {
|
237 |
+
if ( ! is_array( $this->settings ) ) {
|
238 |
+
return $default;
|
239 |
+
}
|
240 |
+
|
241 |
+
return array_key_exists( $key, $this->settings );
|
242 |
+
}
|
243 |
+
|
244 |
+
public function album_template_details() {
|
245 |
+
if ( ! empty( $this->album_template ) ) {
|
246 |
+
|
247 |
+
foreach ( foogallery_album_templates() as $template ) {
|
248 |
+
if ( $this->album_template == $template['slug'] ) {
|
249 |
+
return $template;
|
250 |
+
}
|
251 |
+
}
|
252 |
+
}
|
253 |
+
|
254 |
+
return false;
|
255 |
+
}
|
256 |
+
}
|
extensions/albums/class-posttypes.php
CHANGED
@@ -1,108 +1,108 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* FooGallery Album Custom Post Types
|
4 |
-
*/
|
5 |
-
|
6 |
-
if ( ! class_exists( 'FooGallery_Albums_PostTypes' ) ) {
|
7 |
-
|
8 |
-
class FooGallery_Albums_PostTypes {
|
9 |
-
|
10 |
-
function __construct() {
|
11 |
-
//register the post types
|
12 |
-
add_action( 'init', array( $this, 'register_posttype' ) );
|
13 |
-
|
14 |
-
//update post type messages
|
15 |
-
add_filter( 'post_updated_messages', array( $this, 'update_messages' ) );
|
16 |
-
|
17 |
-
//update post bulk messages
|
18 |
-
add_filter( 'bulk_post_updated_messages', array( $this, 'update_bulk_messages' ), 10, 2 );
|
19 |
-
}
|
20 |
-
|
21 |
-
function register_posttype() {
|
22 |
-
//allow extensions to override the album post type
|
23 |
-
$args = apply_filters( 'foogallery_album_posttype_register_args',
|
24 |
-
array(
|
25 |
-
'labels' => array(
|
26 |
-
'name' => __( 'Albums', 'foogallery' ),
|
27 |
-
'singular_name' => __( 'Album', 'foogallery' ),
|
28 |
-
'add_new' => __( 'Add Album', 'foogallery' ),
|
29 |
-
'add_new_item' => __( 'Add New Album', 'foogallery' ),
|
30 |
-
'edit_item' => __( 'Edit Album', 'foogallery' ),
|
31 |
-
'new_item' => __( 'New Album', 'foogallery' ),
|
32 |
-
'view_item' => __( 'View Album', 'foogallery' ),
|
33 |
-
'search_items' => __( 'Search Albums', 'foogallery' ),
|
34 |
-
'not_found' => __( 'No Albums found', 'foogallery' ),
|
35 |
-
'not_found_in_trash' => __( 'No Albums found in Trash', 'foogallery' ),
|
36 |
-
'menu_name' => __( 'Albums', 'foogallery' ),
|
37 |
-
'all_items' => __( 'Albums', 'foogallery' )
|
38 |
-
),
|
39 |
-
'hierarchical' => false,
|
40 |
-
'public' => false,
|
41 |
-
'rewrite' => false,
|
42 |
-
'show_ui' => true,
|
43 |
-
'show_in_menu' => foogallery_admin_menu_parent_slug(),
|
44 |
-
'supports' => array( 'title' ),
|
45 |
-
)
|
46 |
-
);
|
47 |
-
|
48 |
-
register_post_type( FOOGALLERY_CPT_ALBUM, $args );
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Customize the update messages for a album
|
53 |
-
*
|
54 |
-
* @global object $post The current post object.
|
55 |
-
*
|
56 |
-
* @param array $messages Array of default post updated messages.
|
57 |
-
*
|
58 |
-
* @return array $messages Amended array of post updated messages.
|
59 |
-
*/
|
60 |
-
public function update_messages( $messages ) {
|
61 |
-
|
62 |
-
global $post;
|
63 |
-
|
64 |
-
// Add our album messages
|
65 |
-
$messages[FOOGALLERY_CPT_ALBUM] = apply_filters( 'foogallery_album_posttype_update_messages',
|
66 |
-
array(
|
67 |
-
0 => '',
|
68 |
-
1 => __( 'Album updated.', 'foogallery' ),
|
69 |
-
2 => __( 'Album custom field updated.', 'foogallery' ),
|
70 |
-
3 => __( 'Album custom field deleted.', 'foogallery' ),
|
71 |
-
4 => __( 'Album updated.', 'foogallery' ),
|
72 |
-
5 => isset($_GET['revision']) ? sprintf( __( 'Album restored to revision from %s.', 'foogallery' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
|
73 |
-
6 => __( 'Album published.', 'foogallery' ),
|
74 |
-
7 => __( 'Album saved.', 'foogallery' ),
|
75 |
-
8 => __( 'Album submitted.', 'foogallery' ),
|
76 |
-
9 => sprintf( __( 'Album scheduled for: <strong>%1$s</strong>.', 'foogallery' ), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ) ),
|
77 |
-
10 => __( 'Album draft updated.', 'foogallery' )
|
78 |
-
)
|
79 |
-
);
|
80 |
-
|
81 |
-
return $messages;
|
82 |
-
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Customize the bulk update messages for a album
|
87 |
-
*
|
88 |
-
* @param array $bulk_messages Array of default bulk updated messages.
|
89 |
-
* @param array $bulk_counts Array containing count of posts involved in the action.
|
90 |
-
*
|
91 |
-
* @return array mixed Amended array of bulk updated messages.
|
92 |
-
*/
|
93 |
-
function update_bulk_messages( $bulk_messages, $bulk_counts ) {
|
94 |
-
|
95 |
-
$bulk_messages[FOOGALLERY_CPT_ALBUM] = apply_filters( 'foogallery_album_posttype_bulk_update_messages',
|
96 |
-
array(
|
97 |
-
'updated' => _n( '%s Album updated.', '%s Albums updated.', $bulk_counts['updated'], 'foogallery' ),
|
98 |
-
'locked' => _n( '%s Album not updated, somebody is editing it.', '%s Albums not updated, somebody is editing them.', $bulk_counts['locked'], 'foogallery' ),
|
99 |
-
'deleted' => _n( '%s Album permanently deleted.', '%s Albums permanently deleted.', $bulk_counts['deleted'], 'foogallery' ),
|
100 |
-
'trashed' => _n( '%s Album moved to the Trash.', '%s Albums moved to the Trash.', $bulk_counts['trashed'], 'foogallery' ),
|
101 |
-
'untrashed' => _n( '%s Album restored from the Trash.', '%s Albums restored from the Trash.', $bulk_counts['untrashed'], 'foogallery' ),
|
102 |
-
)
|
103 |
-
);
|
104 |
-
|
105 |
-
return $bulk_messages;
|
106 |
-
}
|
107 |
-
}
|
108 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* FooGallery Album Custom Post Types
|
4 |
+
*/
|
5 |
+
|
6 |
+
if ( ! class_exists( 'FooGallery_Albums_PostTypes' ) ) {
|
7 |
+
|
8 |
+
class FooGallery_Albums_PostTypes {
|
9 |
+
|
10 |
+
function __construct() {
|
11 |
+
//register the post types
|
12 |
+
add_action( 'init', array( $this, 'register_posttype' ) );
|
13 |
+
|
14 |
+
//update post type messages
|
15 |
+
add_filter( 'post_updated_messages', array( $this, 'update_messages' ) );
|
16 |
+
|
17 |
+
//update post bulk messages
|
18 |
+
add_filter( 'bulk_post_updated_messages', array( $this, 'update_bulk_messages' ), 10, 2 );
|
19 |
+
}
|
20 |
+
|
21 |
+
function register_posttype() {
|
22 |
+
//allow extensions to override the album post type
|
23 |
+
$args = apply_filters( 'foogallery_album_posttype_register_args',
|
24 |
+
array(
|
25 |
+
'labels' => array(
|
26 |
+
'name' => __( 'Albums', 'foogallery' ),
|
27 |
+
'singular_name' => __( 'Album', 'foogallery' ),
|
28 |
+
'add_new' => __( 'Add Album', 'foogallery' ),
|
29 |
+
'add_new_item' => __( 'Add New Album', 'foogallery' ),
|
30 |
+
'edit_item' => __( 'Edit Album', 'foogallery' ),
|
31 |
+
'new_item' => __( 'New Album', 'foogallery' ),
|
32 |
+
'view_item' => __( 'View Album', 'foogallery' ),
|
33 |
+
'search_items' => __( 'Search Albums', 'foogallery' ),
|
34 |
+
'not_found' => __( 'No Albums found', 'foogallery' ),
|
35 |
+
'not_found_in_trash' => __( 'No Albums found in Trash', 'foogallery' ),
|
36 |
+
'menu_name' => __( 'Albums', 'foogallery' ),
|
37 |
+
'all_items' => __( 'Albums', 'foogallery' )
|
38 |
+
),
|
39 |
+
'hierarchical' => false,
|
40 |
+
'public' => false,
|
41 |
+
'rewrite' => false,
|
42 |
+
'show_ui' => true,
|
43 |
+
'show_in_menu' => foogallery_admin_menu_parent_slug(),
|
44 |
+
'supports' => array( 'title' ),
|
45 |
+
)
|
46 |
+
);
|
47 |
+
|
48 |
+
register_post_type( FOOGALLERY_CPT_ALBUM, $args );
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Customize the update messages for a album
|
53 |
+
*
|
54 |
+
* @global object $post The current post object.
|
55 |
+
*
|
56 |
+
* @param array $messages Array of default post updated messages.
|
57 |
+
*
|
58 |
+
* @return array $messages Amended array of post updated messages.
|
59 |
+
*/
|
60 |
+
public function update_messages( $messages ) {
|
61 |
+
|
62 |
+
global $post;
|
63 |
+
|
64 |
+
// Add our album messages
|
65 |
+
$messages[FOOGALLERY_CPT_ALBUM] = apply_filters( 'foogallery_album_posttype_update_messages',
|
66 |
+
array(
|
67 |
+
0 => '',
|
68 |
+
1 => __( 'Album updated.', 'foogallery' ),
|
69 |
+
2 => __( 'Album custom field updated.', 'foogallery' ),
|
70 |
+
3 => __( 'Album custom field deleted.', 'foogallery' ),
|
71 |
+
4 => __( 'Album updated.', 'foogallery' ),
|
72 |
+
5 => isset($_GET['revision']) ? sprintf( __( 'Album restored to revision from %s.', 'foogallery' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
|
73 |
+
6 => __( 'Album published.', 'foogallery' ),
|
74 |
+
7 => __( 'Album saved.', 'foogallery' ),
|
75 |
+
8 => __( 'Album submitted.', 'foogallery' ),
|
76 |
+
9 => sprintf( __( 'Album scheduled for: <strong>%1$s</strong>.', 'foogallery' ), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ) ),
|
77 |
+
10 => __( 'Album draft updated.', 'foogallery' )
|
78 |
+
)
|
79 |
+
);
|
80 |
+
|
81 |
+
return $messages;
|
82 |
+
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Customize the bulk update messages for a album
|
87 |
+
*
|
88 |
+
* @param array $bulk_messages Array of default bulk updated messages.
|
89 |
+
* @param array $bulk_counts Array containing count of posts involved in the action.
|
90 |
+
*
|
91 |
+
* @return array mixed Amended array of bulk updated messages.
|
92 |
+
*/
|
93 |
+
function update_bulk_messages( $bulk_messages, $bulk_counts ) {
|
94 |
+
|
95 |
+
$bulk_messages[FOOGALLERY_CPT_ALBUM] = apply_filters( 'foogallery_album_posttype_bulk_update_messages',
|
96 |
+
array(
|
97 |
+
'updated' => _n( '%s Album updated.', '%s Albums updated.', $bulk_counts['updated'], 'foogallery' ),
|
98 |
+
'locked' => _n( '%s Album not updated, somebody is editing it.', '%s Albums not updated, somebody is editing them.', $bulk_counts['locked'], 'foogallery' ),
|
99 |
+
'deleted' => _n( '%s Album permanently deleted.', '%s Albums permanently deleted.', $bulk_counts['deleted'], 'foogallery' ),
|
100 |
+
'trashed' => _n( '%s Album moved to the Trash.', '%s Albums moved to the Trash.', $bulk_counts['trashed'], 'foogallery' ),
|
101 |
+
'untrashed' => _n( '%s Album restored from the Trash.', '%s Albums restored from the Trash.', $bulk_counts['untrashed'], 'foogallery' ),
|
102 |
+
)
|
103 |
+
);
|
104 |
+
|
105 |
+
return $bulk_messages;
|
106 |
+
}
|
107 |
+
}
|
108 |
+
}
|
extensions/albums/css/admin-foogallery-album.css
CHANGED
@@ -1,380 +1,380 @@
|
|
1 |
-
.foogallery-pile {
|
2 |
-
position: relative;
|
3 |
-
z-index: 10;
|
4 |
-
float: left;
|
5 |
-
margin: 10px 15px 15px 10px !important;
|
6 |
-
}
|
7 |
-
/* Image styles */
|
8 |
-
.foogallery-pile .foogallery-gallery-select {
|
9 |
-
max-width: 100%;
|
10 |
-
vertical-align: bottom;
|
11 |
-
border: 8px solid #fff;
|
12 |
-
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
13 |
-
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
14 |
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
15 |
-
overflow: hidden;
|
16 |
-
}
|
17 |
-
|
18 |
-
/* Stacks creted by the use of generated content */
|
19 |
-
.foogallery-pile:before, .foogallery-pile:after {
|
20 |
-
content: "";
|
21 |
-
width: 100%;
|
22 |
-
height: 100%;
|
23 |
-
position: absolute;
|
24 |
-
border: 8px solid #fff;
|
25 |
-
left: 0;
|
26 |
-
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
27 |
-
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
28 |
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
29 |
-
-webkit-box-sizing: border-box;
|
30 |
-
-moz-box-sizing: border-box;
|
31 |
-
box-sizing: border-box;
|
32 |
-
}
|
33 |
-
/* 1st element in stack (behind image) */
|
34 |
-
.foogallery-pile:before {
|
35 |
-
top: -3px; z-index: -10;
|
36 |
-
-webkit-transform: rotate(2deg);
|
37 |
-
-moz-transform: rotate(2deg);
|
38 |
-
transform: rotate(2deg);
|
39 |
-
}
|
40 |
-
/* 2nd element in stack (behind image) */
|
41 |
-
.foogallery-pile:after {
|
42 |
-
top: -2px; z-index: -20;
|
43 |
-
-webkit-transform: rotate(-2deg);
|
44 |
-
-moz-transform: rotate(-2deg);
|
45 |
-
transform: rotate(-2deg);
|
46 |
-
}
|
47 |
-
|
48 |
-
.foogallery-pile img {
|
49 |
-
height: 100%;
|
50 |
-
}
|
51 |
-
|
52 |
-
.foogallery-pile h3 {
|
53 |
-
background: #fff;
|
54 |
-
position: absolute;
|
55 |
-
display: block;
|
56 |
-
bottom: 0px;
|
57 |
-
padding: 5px;
|
58 |
-
width: 100%;
|
59 |
-
box-sizing: border-box;
|
60 |
-
margin: 0;
|
61 |
-
opacity: 0.8;
|
62 |
-
}
|
63 |
-
|
64 |
-
.foogallery-pile h3 span {
|
65 |
-
display: block;
|
66 |
-
font-size: 0.6em;
|
67 |
-
}
|
68 |
-
|
69 |
-
.foogallery-gallery-select.selected {
|
70 |
-
border-color: #1E8CBE;
|
71 |
-
}
|
72 |
-
|
73 |
-
.foogallery-gallery-select.selected::before {
|
74 |
-
content: "\f147" !important;
|
75 |
-
display: inline-block !important;
|
76 |
-
font: normal 60px/70px 'dashicons';
|
77 |
-
position: absolute;
|
78 |
-
color: #FFF;
|
79 |
-
top: 40%;
|
80 |
-
left: 50%;
|
81 |
-
margin-left: -30px;
|
82 |
-
margin-top: -30px;
|
83 |
-
-webkit-font-smoothing: antialiased;
|
84 |
-
background: #1E8CBE;
|
85 |
-
border-radius: 50%;
|
86 |
-
width: 60px;
|
87 |
-
height: 60px;
|
88 |
-
z-index: 4;
|
89 |
-
padding-top:0 !important;
|
90 |
-
}
|
91 |
-
|
92 |
-
.attachment-preview {
|
93 |
-
position: relative;
|
94 |
-
width: 150px;
|
95 |
-
height: 150px;
|
96 |
-
-webkit-box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
|
97 |
-
box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
|
98 |
-
background: #EEE;
|
99 |
-
cursor: pointer;
|
100 |
-
}
|
101 |
-
|
102 |
-
.foogallery-shortcode {
|
103 |
-
text-align: center;
|
104 |
-
}
|
105 |
-
|
106 |
-
.foogallery-shortcode input {
|
107 |
-
cursor: pointer;
|
108 |
-
text-align: center;
|
109 |
-
padding: 10px;
|
110 |
-
font-family: "courier new", courier;
|
111 |
-
border: none;
|
112 |
-
box-shadow: none;
|
113 |
-
background: #efefef;
|
114 |
-
}
|
115 |
-
|
116 |
-
.wp-list-table .foogallery-shortcode {
|
117 |
-
cursor: pointer;
|
118 |
-
font-size: 1em;
|
119 |
-
border: none;
|
120 |
-
box-shadow: none;
|
121 |
-
background: #efefef;
|
122 |
-
font-family: "courier new", courier;
|
123 |
-
}
|
124 |
-
|
125 |
-
.foogallery-shortcode-message {
|
126 |
-
font-style: italic;
|
127 |
-
color: #2EA2CC !important;
|
128 |
-
}
|
129 |
-
|
130 |
-
.foogallery-album-gallery-list .attachment.placeholder {
|
131 |
-
position: relative;
|
132 |
-
z-index: 10;
|
133 |
-
float: left;
|
134 |
-
margin: 10px 15px 15px 10px !important;
|
135 |
-
width: 164px;
|
136 |
-
height: 164px;
|
137 |
-
border: #1e8cbe 1px dashed;
|
138 |
-
background: #eee;
|
139 |
-
}
|
140 |
-
|
141 |
-
.foogallery-album-gallery-list .foogallery-pile.ui-sortable-helper {
|
142 |
-
opacity: 0.5;
|
143 |
-
}
|
144 |
-
|
145 |
-
.foogallery-album-gallery-list .foogallery-pile.ui-sortable-helper:hover .close {
|
146 |
-
display: none;
|
147 |
-
}
|
148 |
-
|
149 |
-
.foogallery-album-gallery-list .attachment-preview:before {
|
150 |
-
padding-top:0 !important;
|
151 |
-
}
|
152 |
-
|
153 |
-
.foogallery_template_field td {
|
154 |
-
padding-bottom: 20px;
|
155 |
-
}
|
156 |
-
|
157 |
-
.foogallery_template_field th {
|
158 |
-
vertical-align: top;
|
159 |
-
text-align: left;
|
160 |
-
padding-top: 0.3em;
|
161 |
-
padding-right: 10px;
|
162 |
-
}
|
163 |
-
|
164 |
-
.foogallery_metabox_field-icon label {
|
165 |
-
display:inline-block;
|
166 |
-
margin-right:10px;
|
167 |
-
border:solid 3px transparent;
|
168 |
-
background:#aaa;
|
169 |
-
border-radius: 3px;
|
170 |
-
-moz-border-radius: 3px;
|
171 |
-
-webkit-border-radius: 3px;
|
172 |
-
padding:5px;
|
173 |
-
line-height: 0;
|
174 |
-
}
|
175 |
-
|
176 |
-
.foogallery_metabox_field-icon input:checked + label {
|
177 |
-
border:solid 3px #444;
|
178 |
-
background: #888;
|
179 |
-
}
|
180 |
-
|
181 |
-
.foogallery_metabox_field-icon label:hover {
|
182 |
-
border:solid 3px #444;
|
183 |
-
}
|
184 |
-
|
185 |
-
.foogallery_metabox_field-thumb_size label {
|
186 |
-
vertical-align: baseline;
|
187 |
-
}
|
188 |
-
|
189 |
-
.foogallery_metabox_field-thumb_size input[type="number"] {
|
190 |
-
margin-right: 10px;
|
191 |
-
}
|
192 |
-
|
193 |
-
.foogallery_template_field h4 {
|
194 |
-
font-size: 1.2em;
|
195 |
-
border-bottom: solid 1px #EEE;
|
196 |
-
padding-bottom: 5px;
|
197 |
-
margin: 0;
|
198 |
-
}
|
199 |
-
|
200 |
-
.foogallery_metabox_field-number input[type="number"] {
|
201 |
-
width: 10em;
|
202 |
-
}
|
203 |
-
|
204 |
-
.foogallery_metabox_custom_css {
|
205 |
-
width: 100%;
|
206 |
-
height: 10em;
|
207 |
-
}
|
208 |
-
|
209 |
-
.foogallery_metabox_field-radio > input, .foogallery_metabox_field-radio > label {
|
210 |
-
margin-bottom: 10px;
|
211 |
-
display: inline-block;
|
212 |
-
}
|
213 |
-
|
214 |
-
.foogallery_template_field th {
|
215 |
-
width: 180px;
|
216 |
-
}
|
217 |
-
|
218 |
-
.foogallery-help {
|
219 |
-
position: relative;
|
220 |
-
display: block;
|
221 |
-
line-height: 19px;
|
222 |
-
padding: 11px 15px 11px 40px;
|
223 |
-
font-size: 14px;
|
224 |
-
text-align: left;
|
225 |
-
margin: 5px 0 20px 2px;
|
226 |
-
background-color: #F4F4FF;
|
227 |
-
border-left: 4px solid #1e8cbe;
|
228 |
-
-webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
229 |
-
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
230 |
-
}
|
231 |
-
|
232 |
-
.foogallery-help:before {
|
233 |
-
content: "\f223";
|
234 |
-
font: 400 30px/1 dashicons !important;
|
235 |
-
speak: none;
|
236 |
-
color: #1e8cbe;
|
237 |
-
display: inline-block;
|
238 |
-
-webkit-font-smoothing: antialiased;
|
239 |
-
-moz-osx-font-smoothing: grayscale;
|
240 |
-
vertical-align: bottom;
|
241 |
-
position: absolute;
|
242 |
-
left: 5px;
|
243 |
-
height: 100%;
|
244 |
-
margin-top: -15px;
|
245 |
-
top: 50%;
|
246 |
-
}
|
247 |
-
|
248 |
-
.foogallery-album-error {
|
249 |
-
padding: 11px 15px;
|
250 |
-
font-size: 14px;
|
251 |
-
text-align: left;
|
252 |
-
border-left: 4px solid #dc3232;
|
253 |
-
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
254 |
-
box-shadow: 1px 1px 1px 1px rgba(0,0,0,.1);
|
255 |
-
}
|
256 |
-
|
257 |
-
.foogallery-album-gallery-list .attachment-preview a.info {
|
258 |
-
display: none;
|
259 |
-
position: absolute;
|
260 |
-
padding: 0;
|
261 |
-
font-size: 20px;
|
262 |
-
line-height: 20px;
|
263 |
-
text-align: center;
|
264 |
-
text-decoration: none;
|
265 |
-
background-color: #444;
|
266 |
-
border-top-right-radius: 50%;
|
267 |
-
border-top-left-radius: 50%;
|
268 |
-
border-bottom-right-radius: 50%;
|
269 |
-
border-bottom-left-radius: 50%;
|
270 |
-
color: #fff;
|
271 |
-
top: 5px;
|
272 |
-
left: 5px;
|
273 |
-
}
|
274 |
-
|
275 |
-
.foogallery-album-gallery-list .attachment-preview:hover a.info {
|
276 |
-
display: block;
|
277 |
-
}
|
278 |
-
|
279 |
-
.foogallery-album-info-modal {
|
280 |
-
display: none;
|
281 |
-
top: 20%;
|
282 |
-
bottom: 20%;
|
283 |
-
left: 30%;
|
284 |
-
right: 30%;
|
285 |
-
}
|
286 |
-
|
287 |
-
.foogallery-album-info-modal .media-frame-title {
|
288 |
-
left:0;
|
289 |
-
}
|
290 |
-
|
291 |
-
.foogallery-album-info-modal .media-frame-title h1 {
|
292 |
-
float: left;
|
293 |
-
}
|
294 |
-
|
295 |
-
.foogallery-album-info-modal .media-frame-title .spinner {
|
296 |
-
float:left;
|
297 |
-
margin: 15px 0;
|
298 |
-
}
|
299 |
-
|
300 |
-
.foogallery-album-info-modal .close {
|
301 |
-
position: absolute;
|
302 |
-
top: 20px;
|
303 |
-
right: 20px;
|
304 |
-
cursor: pointer;
|
305 |
-
font-size: 20px;
|
306 |
-
}
|
307 |
-
|
308 |
-
.foogallery-album-info-modal .modal-content {
|
309 |
-
position: absolute;
|
310 |
-
top: 50px;
|
311 |
-
left: 0;
|
312 |
-
right: 0;
|
313 |
-
bottom: 61px;
|
314 |
-
height: auto;
|
315 |
-
width: auto;
|
316 |
-
margin: 0;
|
317 |
-
overflow: auto;
|
318 |
-
background: #fff;
|
319 |
-
border-top: 1px solid #ddd;
|
320 |
-
border-bottom: 1px solid #ddd;
|
321 |
-
padding: 20px;
|
322 |
-
min-width: 400px;
|
323 |
-
}
|
324 |
-
|
325 |
-
.foogallery-album-info-modal .gallery-details,
|
326 |
-
.foogallery-album-info-modal .gallery-details table {
|
327 |
-
width: 100%;
|
328 |
-
}
|
329 |
-
|
330 |
-
.foogallery-album-info-modal .gallery-details th {
|
331 |
-
vertical-align: top;
|
332 |
-
}
|
333 |
-
|
334 |
-
.foogallery-album-info-modal .gallery-details th label {
|
335 |
-
box-sizing: border-box;
|
336 |
-
float: right;
|
337 |
-
padding: 6px 0px;
|
338 |
-
margin-right: 20px;
|
339 |
-
font-weight: normal;
|
340 |
-
}
|
341 |
-
|
342 |
-
.foogallery-album-info-modal .gallery-details td input,
|
343 |
-
.foogallery-album-info-modal .gallery-details td textarea,
|
344 |
-
.foogallery-album-info-modal .gallery-details td select {
|
345 |
-
width: 100%;
|
346 |
-
}
|
347 |
-
|
348 |
-
.foogallery-album-info-modal .gallery-details td select {
|
349 |
-
line-height: inherit;
|
350 |
-
padding: 6px 8px;
|
351 |
-
height: inherit;
|
352 |
-
}
|
353 |
-
|
354 |
-
.foogallery-album-info-modal .gallery-details td .help {
|
355 |
-
margin-top: 0;
|
356 |
-
font-size: 0.8em;
|
357 |
-
}
|
358 |
-
|
359 |
-
.foogallery-album-info-modal .media-toolbar .spinner {
|
360 |
-
margin-top: 20px;
|
361 |
-
margin-right: 0;
|
362 |
-
}
|
363 |
-
|
364 |
-
.foogallery-album-info-modal .media-frame-toolbar {
|
365 |
-
left: 0;
|
366 |
-
}
|
367 |
-
|
368 |
-
.foogallery-album-info-modal .media-frame-toolbar .media-toolbar-secondary {
|
369 |
-
line-height: 60px;
|
370 |
-
font-weight: bold;
|
371 |
-
}
|
372 |
-
|
373 |
-
.foogallery-album-info-modal-backdrop {
|
374 |
-
display: none;
|
375 |
-
}
|
376 |
-
|
377 |
-
.spacer {
|
378 |
-
display: inline-block;
|
379 |
-
width:30px;
|
380 |
}
|
1 |
+
.foogallery-pile {
|
2 |
+
position: relative;
|
3 |
+
z-index: 10;
|
4 |
+
float: left;
|
5 |
+
margin: 10px 15px 15px 10px !important;
|
6 |
+
}
|
7 |
+
/* Image styles */
|
8 |
+
.foogallery-pile .foogallery-gallery-select {
|
9 |
+
max-width: 100%;
|
10 |
+
vertical-align: bottom;
|
11 |
+
border: 8px solid #fff;
|
12 |
+
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
13 |
+
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
14 |
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
15 |
+
overflow: hidden;
|
16 |
+
}
|
17 |
+
|
18 |
+
/* Stacks creted by the use of generated content */
|
19 |
+
.foogallery-pile:before, .foogallery-pile:after {
|
20 |
+
content: "";
|
21 |
+
width: 100%;
|
22 |
+
height: 100%;
|
23 |
+
position: absolute;
|
24 |
+
border: 8px solid #fff;
|
25 |
+
left: 0;
|
26 |
+
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
27 |
+
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
28 |
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
29 |
+
-webkit-box-sizing: border-box;
|
30 |
+
-moz-box-sizing: border-box;
|
31 |
+
box-sizing: border-box;
|
32 |
+
}
|
33 |
+
/* 1st element in stack (behind image) */
|
34 |
+
.foogallery-pile:before {
|
35 |
+
top: -3px; z-index: -10;
|
36 |
+
-webkit-transform: rotate(2deg);
|
37 |
+
-moz-transform: rotate(2deg);
|
38 |
+
transform: rotate(2deg);
|
39 |
+
}
|
40 |
+
/* 2nd element in stack (behind image) */
|
41 |
+
.foogallery-pile:after {
|
42 |
+
top: -2px; z-index: -20;
|
43 |
+
-webkit-transform: rotate(-2deg);
|
44 |
+
-moz-transform: rotate(-2deg);
|
45 |
+
transform: rotate(-2deg);
|
46 |
+
}
|
47 |
+
|
48 |
+
.foogallery-pile img {
|
49 |
+
height: 100%;
|
50 |
+
}
|
51 |
+
|
52 |
+
.foogallery-pile h3 {
|
53 |
+
background: #fff;
|
54 |
+
position: absolute;
|
55 |
+
display: block;
|
56 |
+
bottom: 0px;
|
57 |
+
padding: 5px;
|
58 |
+
width: 100%;
|
59 |
+
box-sizing: border-box;
|
60 |
+
margin: 0;
|
61 |
+
opacity: 0.8;
|
62 |
+
}
|
63 |
+
|
64 |
+
.foogallery-pile h3 span {
|
65 |
+
display: block;
|
66 |
+
font-size: 0.6em;
|
67 |
+
}
|
68 |
+
|
69 |
+
.foogallery-gallery-select.selected {
|
70 |
+
border-color: #1E8CBE;
|
71 |
+
}
|
72 |
+
|
73 |
+
.foogallery-gallery-select.selected::before {
|
74 |
+
content: "\f147" !important;
|
75 |
+
display: inline-block !important;
|
76 |
+
font: normal 60px/70px 'dashicons';
|
77 |
+
position: absolute;
|
78 |
+
color: #FFF;
|
79 |
+
top: 40%;
|
80 |
+
left: 50%;
|
81 |
+
margin-left: -30px;
|
82 |
+
margin-top: -30px;
|
83 |
+
-webkit-font-smoothing: antialiased;
|
84 |
+
background: #1E8CBE;
|
85 |
+
border-radius: 50%;
|
86 |
+
width: 60px;
|
87 |
+
height: 60px;
|
88 |
+
z-index: 4;
|
89 |
+
padding-top:0 !important;
|
90 |
+
}
|
91 |
+
|
92 |
+
.attachment-preview {
|
93 |
+
position: relative;
|
94 |
+
width: 150px;
|
95 |
+
height: 150px;
|
96 |
+
-webkit-box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
|
97 |
+
box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
|
98 |
+
background: #EEE;
|
99 |
+
cursor: pointer;
|
100 |
+
}
|
101 |
+
|
102 |
+
.foogallery-shortcode {
|
103 |
+
text-align: center;
|
104 |
+
}
|
105 |
+
|
106 |
+
.foogallery-shortcode input {
|
107 |
+
cursor: pointer;
|
108 |
+
text-align: center;
|
109 |
+
padding: 10px;
|
110 |
+
font-family: "courier new", courier;
|
111 |
+
border: none;
|
112 |
+
box-shadow: none;
|
113 |
+
background: #efefef;
|
114 |
+
}
|
115 |
+
|
116 |
+
.wp-list-table .foogallery-shortcode {
|
117 |
+
cursor: pointer;
|
118 |
+
font-size: 1em;
|
119 |
+
border: none;
|
120 |
+
box-shadow: none;
|
121 |
+
background: #efefef;
|
122 |
+
font-family: "courier new", courier;
|
123 |
+
}
|
124 |
+
|
125 |
+
.foogallery-shortcode-message {
|
126 |
+
font-style: italic;
|
127 |
+
color: #2EA2CC !important;
|
128 |
+
}
|
129 |
+
|
130 |
+
.foogallery-album-gallery-list .attachment.placeholder {
|
131 |
+
position: relative;
|
132 |
+
z-index: 10;
|
133 |
+
float: left;
|
134 |
+
margin: 10px 15px 15px 10px !important;
|
135 |
+
width: 164px;
|
136 |
+
height: 164px;
|
137 |
+
border: #1e8cbe 1px dashed;
|
138 |
+
background: #eee;
|
139 |
+
}
|
140 |
+
|
141 |
+
.foogallery-album-gallery-list .foogallery-pile.ui-sortable-helper {
|
142 |
+
opacity: 0.5;
|
143 |
+
}
|
144 |
+
|
145 |
+
.foogallery-album-gallery-list .foogallery-pile.ui-sortable-helper:hover .close {
|
146 |
+
display: none;
|
147 |
+
}
|
148 |
+
|
149 |
+
.foogallery-album-gallery-list .attachment-preview:before {
|
150 |
+
padding-top:0 !important;
|
151 |
+
}
|
152 |
+
|
153 |
+
.foogallery_template_field td {
|
154 |
+
padding-bottom: 20px;
|
155 |
+
}
|
156 |
+
|
157 |
+
.foogallery_template_field th {
|
158 |
+
vertical-align: top;
|
159 |
+
text-align: left;
|
160 |
+
padding-top: 0.3em;
|
161 |
+
padding-right: 10px;
|
162 |
+
}
|
163 |
+
|
164 |
+
.foogallery_metabox_field-icon label {
|
165 |
+
display:inline-block;
|
166 |
+
margin-right:10px;
|
167 |
+
border:solid 3px transparent;
|
168 |
+
background:#aaa;
|
169 |
+
border-radius: 3px;
|
170 |
+
-moz-border-radius: 3px;
|
171 |
+
-webkit-border-radius: 3px;
|
172 |
+
padding:5px;
|
173 |
+
line-height: 0;
|
174 |
+
}
|
175 |
+
|
176 |
+
.foogallery_metabox_field-icon input:checked + label {
|
177 |
+
border:solid 3px #444;
|
178 |
+
background: #888;
|
179 |
+
}
|
180 |
+
|
181 |
+
.foogallery_metabox_field-icon label:hover {
|
182 |
+
border:solid 3px #444;
|
183 |
+
}
|
184 |
+
|
185 |
+
.foogallery_metabox_field-thumb_size label {
|
186 |
+
vertical-align: baseline;
|
187 |
+
}
|
188 |
+
|
189 |
+
.foogallery_metabox_field-thumb_size input[type="number"] {
|
190 |
+
margin-right: 10px;
|
191 |
+
}
|
192 |
+
|
193 |
+
.foogallery_template_field h4 {
|
194 |
+
font-size: 1.2em;
|
195 |
+
border-bottom: solid 1px #EEE;
|
196 |
+
padding-bottom: 5px;
|
197 |
+
margin: 0;
|
198 |
+
}
|
199 |
+
|
200 |
+
.foogallery_metabox_field-number input[type="number"] {
|
201 |
+
width: 10em;
|
202 |
+
}
|
203 |
+
|
204 |
+
.foogallery_metabox_custom_css {
|
205 |
+
width: 100%;
|
206 |
+
height: 10em;
|
207 |
+
}
|
208 |
+
|
209 |
+
.foogallery_metabox_field-radio > input, .foogallery_metabox_field-radio > label {
|
210 |
+
margin-bottom: 10px;
|
211 |
+
display: inline-block;
|
212 |
+
}
|
213 |
+
|
214 |
+
.foogallery_template_field th {
|
215 |
+
width: 180px;
|
216 |
+
}
|
217 |
+
|
218 |
+
.foogallery-help {
|
219 |
+
position: relative;
|
220 |
+
display: block;
|
221 |
+
line-height: 19px;
|
222 |
+
padding: 11px 15px 11px 40px;
|
223 |
+
font-size: 14px;
|
224 |
+
text-align: left;
|
225 |
+
margin: 5px 0 20px 2px;
|
226 |
+
background-color: #F4F4FF;
|
227 |
+
border-left: 4px solid #1e8cbe;
|
228 |
+
-webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
229 |
+
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
|
230 |
+
}
|
231 |
+
|
232 |
+
.foogallery-help:before {
|
233 |
+
content: "\f223";
|
234 |
+
font: 400 30px/1 dashicons !important;
|
235 |
+
speak: none;
|
236 |
+
color: #1e8cbe;
|
237 |
+
display: inline-block;
|
238 |
+
-webkit-font-smoothing: antialiased;
|
239 |
+
-moz-osx-font-smoothing: grayscale;
|
240 |
+
vertical-align: bottom;
|
241 |
+
position: absolute;
|
242 |
+
left: 5px;
|
243 |
+
height: 100%;
|
244 |
+
margin-top: -15px;
|
245 |
+
top: 50%;
|
246 |
+
}
|
247 |
+
|
248 |
+
.foogallery-album-error {
|
249 |
+
padding: 11px 15px;
|
250 |
+
font-size: 14px;
|
251 |
+
text-align: left;
|
252 |
+
border-left: 4px solid #dc3232;
|
253 |
+
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
254 |
+
box-shadow: 1px 1px 1px 1px rgba(0,0,0,.1);
|
255 |
+
}
|
256 |
+
|
257 |
+
.foogallery-album-gallery-list .attachment-preview a.info {
|
258 |
+
display: none;
|
259 |
+
position: absolute;
|
260 |
+
padding: 0;
|
261 |
+
font-size: 20px;
|
262 |
+
line-height: 20px;
|
263 |
+
text-align: center;
|
264 |
+
text-decoration: none;
|
265 |
+
background-color: #444;
|
266 |
+
border-top-right-radius: 50%;
|
267 |
+
border-top-left-radius: 50%;
|
268 |
+
border-bottom-right-radius: 50%;
|
269 |
+
border-bottom-left-radius: 50%;
|
270 |
+
color: #fff;
|
271 |
+
top: 5px;
|
272 |
+
left: 5px;
|
273 |
+
}
|
274 |
+
|
275 |
+
.foogallery-album-gallery-list .attachment-preview:hover a.info {
|
276 |
+
display: block;
|
277 |
+
}
|
278 |
+
|
279 |
+
.foogallery-album-info-modal {
|
280 |
+
display: none;
|
281 |
+
top: 20%;
|
282 |
+
bottom: 20%;
|
283 |
+
left: 30%;
|
284 |
+
right: 30%;
|
285 |
+
}
|
286 |
+
|
287 |
+
.foogallery-album-info-modal .media-frame-title {
|
288 |
+
left:0;
|
289 |
+
}
|
290 |
+
|
291 |
+
.foogallery-album-info-modal .media-frame-title h1 {
|
292 |
+
float: left;
|
293 |
+
}
|
294 |
+
|
295 |
+
.foogallery-album-info-modal .media-frame-title .spinner {
|
296 |
+
float:left;
|
297 |
+
margin: 15px 0;
|
298 |
+
}
|
299 |
+
|
300 |
+
.foogallery-album-info-modal .close {
|
301 |
+
position: absolute;
|
302 |
+
top: 20px;
|
303 |
+
right: 20px;
|
304 |
+
cursor: pointer;
|
305 |
+
font-size: 20px;
|
306 |
+
}
|
307 |
+
|
308 |
+
.foogallery-album-info-modal .modal-content {
|
309 |
+
position: absolute;
|
310 |
+
top: 50px;
|
311 |
+
left: 0;
|
312 |
+
right: 0;
|
313 |
+
bottom: 61px;
|
314 |
+
height: auto;
|
315 |
+
width: auto;
|
316 |
+
margin: 0;
|
317 |
+
overflow: auto;
|
318 |
+
background: #fff;
|
319 |
+
border-top: 1px solid #ddd;
|
320 |
+
border-bottom: 1px solid #ddd;
|
321 |
+
padding: 20px;
|
322 |
+
min-width: 400px;
|
323 |
+
}
|
324 |
+
|
325 |
+
.foogallery-album-info-modal .gallery-details,
|
326 |
+
.foogallery-album-info-modal .gallery-details table {
|
327 |
+
width: 100%;
|
328 |
+
}
|
329 |
+
|
330 |
+
.foogallery-album-info-modal .gallery-details th {
|
331 |
+
vertical-align: top;
|
332 |
+
}
|
333 |
+
|
334 |
+
.foogallery-album-info-modal .gallery-details th label {
|
335 |
+
box-sizing: border-box;
|
336 |
+
float: right;
|
337 |
+
padding: 6px 0px;
|
338 |
+
margin-right: 20px;
|
339 |
+
font-weight: normal;
|
340 |
+
}
|
341 |
+
|
342 |
+
.foogallery-album-info-modal .gallery-details td input,
|
343 |
+
.foogallery-album-info-modal .gallery-details td textarea,
|
344 |
+
.foogallery-album-info-modal .gallery-details td select {
|
345 |
+
width: 100%;
|
346 |
+
}
|
347 |
+
|
348 |
+
.foogallery-album-info-modal .gallery-details td select {
|
349 |
+
line-height: inherit;
|
350 |
+
padding: 6px 8px;
|
351 |
+
height: inherit;
|
352 |
+
}
|
353 |
+
|
354 |
+
.foogallery-album-info-modal .gallery-details td .help {
|
355 |
+
margin-top: 0;
|
356 |
+
font-size: 0.8em;
|
357 |
+
}
|
358 |
+
|
359 |
+
.foogallery-album-info-modal .media-toolbar .spinner {
|
360 |
+
margin-top: 20px;
|
361 |
+
margin-right: 0;
|
362 |
+
}
|
363 |
+
|
364 |
+
.foogallery-album-info-modal .media-frame-toolbar {
|
365 |
+
left: 0;
|
366 |
+
}
|
367 |
+
|
368 |
+
.foogallery-album-info-modal .media-frame-toolbar .media-toolbar-secondary {
|
369 |
+
line-height: 60px;
|
370 |
+
font-weight: bold;
|
371 |
+
}
|
372 |
+
|
373 |
+
.foogallery-album-info-modal-backdrop {
|
374 |
+
display: none;
|
375 |
+
}
|
376 |
+
|
377 |
+
.spacer {
|
378 |
+
display: inline-block;
|
379 |
+
width:30px;
|
380 |
}
|
extensions/albums/css/album-default.css
CHANGED
@@ -1,102 +1,103 @@
|
|
1 |
-
.foogallery-album-gallery-list {
|
2 |
-
list-style: none !important;
|
3 |
-
padding: 0 !important;
|
4 |
-
}
|
5 |
-
|
6 |
-
.foogallery-album-gallery-list li {
|
7 |
-
list-style-type: none !important;
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
.foogallery-album-gallery-list .foogallery-pile:
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
-
|
28 |
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
29 |
-
|
30 |
-
-
|
31 |
-
box-sizing: border-box;
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
-
|
37 |
-
-
|
38 |
-
transform: rotate(2deg);
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
-
|
44 |
-
-
|
45 |
-
transform: rotate(-2deg);
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
-
|
52 |
-
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
.foogallery-album-gallery-list .foogallery-pile a
|
101 |
-
|
|
|
102 |
}
|
1 |
+
.foogallery-album-gallery-list {
|
2 |
+
list-style: none !important;
|
3 |
+
padding: 0 !important;
|
4 |
+
}
|
5 |
+
|
6 |
+
.foogallery-album-gallery-list li {
|
7 |
+
list-style-type: none !important;
|
8 |
+
display: inline-block;
|
9 |
+
}
|
10 |
+
|
11 |
+
.foogallery-album-gallery-list .foogallery-pile {
|
12 |
+
position: relative;
|
13 |
+
z-index: 10;
|
14 |
+
float: left;
|
15 |
+
margin: 10px 15px 15px 10px !important;
|
16 |
+
}
|
17 |
+
|
18 |
+
/* Stacks created by the use of generated content */
|
19 |
+
.foogallery-album-gallery-list .foogallery-pile:before,
|
20 |
+
.foogallery-album-gallery-list .foogallery-pile:after {
|
21 |
+
content: "";
|
22 |
+
width: 100%;
|
23 |
+
height: 100%;
|
24 |
+
position: absolute;
|
25 |
+
border: 8px solid #fff;
|
26 |
+
left: 0;
|
27 |
+
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
28 |
+
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
29 |
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
30 |
+
-webkit-box-sizing: border-box;
|
31 |
+
-moz-box-sizing: border-box;
|
32 |
+
box-sizing: border-box;
|
33 |
+
}
|
34 |
+
/* 1st element in stack (behind image) */
|
35 |
+
.foogallery-album-gallery-list .foogallery-pile:before {
|
36 |
+
top: -3px; z-index: -10;
|
37 |
+
-webkit-transform: rotate(2deg);
|
38 |
+
-moz-transform: rotate(2deg);
|
39 |
+
transform: rotate(2deg);
|
40 |
+
}
|
41 |
+
/* 2nd element in stack (behind image) */
|
42 |
+
.foogallery-album-gallery-list .foogallery-pile:after {
|
43 |
+
top: -2px; z-index: -20;
|
44 |
+
-webkit-transform: rotate(-2deg);
|
45 |
+
-moz-transform: rotate(-2deg);
|
46 |
+
transform: rotate(-2deg);
|
47 |
+
}
|
48 |
+
|
49 |
+
.foogallery-album-gallery-list .foogallery-pile .foogallery-pile-inner {
|
50 |
+
border: 8px solid #fff;
|
51 |
+
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
52 |
+
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
53 |
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
54 |
+
overflow: hidden;
|
55 |
+
line-height: 0;
|
56 |
+
}
|
57 |
+
|
58 |
+
.foogallery-album-gallery-list .foogallery-pile .foogallery-pile-inner a {
|
59 |
+
display: inline-block;
|
60 |
+
}
|
61 |
+
|
62 |
+
.foogallery-album-gallery-list .foogallery-pile img {
|
63 |
+
}
|
64 |
+
|
65 |
+
.foogallery-album-gallery-list .foogallery-pile h3 {
|
66 |
+
background: #FFF;
|
67 |
+
position: absolute;
|
68 |
+
display: block;
|
69 |
+
bottom: 0px;
|
70 |
+
padding: 5px 5px 0 5px;
|
71 |
+
width: 100%;
|
72 |
+
box-sizing: border-box;
|
73 |
+
margin: 0;
|
74 |
+
opacity: 0.6;
|
75 |
+
line-height: 1em;
|
76 |
+
}
|
77 |
+
|
78 |
+
.foogallery-album-gallery-list .foogallery-pile h3 span {
|
79 |
+
display: block;
|
80 |
+
font-size: 0.6em;
|
81 |
+
}
|
82 |
+
|
83 |
+
.foogallery-album-gallery-list .foogallery-pile a {
|
84 |
+
position: relative;
|
85 |
+
}
|
86 |
+
|
87 |
+
.foogallery-album-gallery-list.alignment-left {
|
88 |
+
text-align: left;
|
89 |
+
}
|
90 |
+
|
91 |
+
.foogallery-album-gallery-list.alignment-center {
|
92 |
+
text-align: center;
|
93 |
+
}
|
94 |
+
|
95 |
+
.foogallery-album-gallery-list.alignment-right {
|
96 |
+
text-align: right;
|
97 |
+
}
|
98 |
+
|
99 |
+
/* force no borders */
|
100 |
+
.foogallery-album-gallery-list .foogallery-pile a,
|
101 |
+
.foogallery-album-gallery-list .foogallery-pile a:hover {
|
102 |
+
border: none !important;
|
103 |
}
|
extensions/albums/css/album-stack.css
CHANGED
@@ -1,290 +1,290 @@
|
|
1 |
-
.tp-grid {
|
2 |
-
list-style-type: none;
|
3 |
-
position: relative;
|
4 |
-
display: block;
|
5 |
-
}
|
6 |
-
|
7 |
-
.tp-grid li {
|
8 |
-
position: absolute;
|
9 |
-
cursor: pointer;
|
10 |
-
border: 10px solid #fff;
|
11 |
-
box-shadow: 0 2px 3px rgba(0,0,0,0.2);
|
12 |
-
display: none;
|
13 |
-
overflow: hidden;
|
14 |
-
-webkit-backface-visibility: hidden;
|
15 |
-
-moz-backface-visibility: hidden;
|
16 |
-
-o-backface-visibility: hidden;
|
17 |
-
-ms-backface-visibility: hidden;
|
18 |
-
backface-visibility: hidden;
|
19 |
-
}
|
20 |
-
|
21 |
-
.no-js .tp-grid li {
|
22 |
-
position: relative;
|
23 |
-
display: inline-block;
|
24 |
-
}
|
25 |
-
|
26 |
-
.tp-grid li a {
|
27 |
-
display: block;
|
28 |
-
outline: none;
|
29 |
-
}
|
30 |
-
|
31 |
-
.tp-grid li img {
|
32 |
-
display: block;
|
33 |
-
border: none;
|
34 |
-
}
|
35 |
-
|
36 |
-
.tp-info,
|
37 |
-
.tp-title {
|
38 |
-
position: absolute;
|
39 |
-
background: #fff;
|
40 |
-
line-height: 20px;
|
41 |
-
color: #333;
|
42 |
-
top: 40%;
|
43 |
-
width: 75%;
|
44 |
-
padding: 10px;
|
45 |
-
font-weight: 700;
|
46 |
-
text-align: right;
|
47 |
-
left: -100%;
|
48 |
-
box-shadow:
|
49 |
-
1px 1px 1px rgba(0,0,0,0.1),
|
50 |
-
5px 0 5px -3px rgba(0,0,0,0.4),
|
51 |
-
inset 0 0 5px rgba(0,0,0,0.04);
|
52 |
-
}
|
53 |
-
|
54 |
-
.tp-title-cover {
|
55 |
-
position: absolute;
|
56 |
-
top: 0;
|
57 |
-
bottom: 0;
|
58 |
-
left: 0;
|
59 |
-
right: 0;
|
60 |
-
}
|
61 |
-
|
62 |
-
.tp-open .tp-title-cover {
|
63 |
-
display: none;
|
64 |
-
}
|
65 |
-
|
66 |
-
.touch .tp-info {
|
67 |
-
left: 0px;
|
68 |
-
}
|
69 |
-
|
70 |
-
.no-touch .tp-info {
|
71 |
-
-webkit-transition: all 0.3s ease-in-out;
|
72 |
-
-moz-transition: all 0.3s ease-in-out;
|
73 |
-
-o-transition: all 0.3s ease-in-out;
|
74 |
-
-ms-transition: all 0.3s ease-in-out;
|
75 |
-
transition: all 0.3s ease-in-out;
|
76 |
-
}
|
77 |
-
|
78 |
-
.no-touch .tp-grid li:hover .tp-info {
|
79 |
-
-webkit-transition-delay: 150ms;
|
80 |
-
-moz-transition-delay: 150ms;
|
81 |
-
-o-transition-delay: 150ms;
|
82 |
-
-ms-transition-delay: 150ms;
|
83 |
-
transition-delay: 150ms;
|
84 |
-
}
|
85 |
-
|
86 |
-
.no-touch .tp-open li:hover .tp-info {
|
87 |
-
left: 0px;
|
88 |
-
}
|
89 |
-
|
90 |
-
.tp-title {
|
91 |
-
padding: 10px 35px 10px 10px;
|
92 |
-
left: 0px;
|
93 |
-
}
|
94 |
-
|
95 |
-
.tp-title span:nth-child(2){
|
96 |
-
color: #aaa;
|
97 |
-
padding: 0 5px;
|
98 |
-
background: #F7F7F7;
|
99 |
-
right: 0px;
|
100 |
-
height: 100%;
|
101 |
-
line-height: 40px;
|
102 |
-
top: 0px;
|
103 |
-
position: absolute;
|
104 |
-
display: block;
|
105 |
-
}
|
106 |
-
|
107 |
-
.foogallery-stack-album * {
|
108 |
-
box-sizing: border-box;
|
109 |
-
}
|
110 |
-
|
111 |
-
.foogallery-stack-album .topbar {
|
112 |
-
position: relative;
|
113 |
-
padding: 10px 0;
|
114 |
-
margin: 0 0 20px;
|
115 |
-
box-shadow: 0 1px 0 #aaa, 0 -1px 0 #aaa;
|
116 |
-
}
|
117 |
-
|
118 |
-
.foogallery-stack-album .back {
|
119 |
-
width: 40px;
|
120 |
-
height: 40px;
|
121 |
-
position: absolute;
|
122 |
-
left: 50%;
|
123 |
-
top: 50%;
|
124 |
-
margin: -20px 0 0 -20px;
|
125 |
-
border-radius: 50%;
|
126 |
-
text-align: center;
|
127 |
-
line-height: 38px;
|
128 |
-
color: #999;
|
129 |
-
background: #ddd;
|
130 |
-
background: rgba(200,200,200,0.5);
|
131 |
-
cursor: pointer;
|
132 |
-
display: none;
|
133 |
-
-webkit-touch-callout: none;
|
134 |
-
-webkit-user-select: none;
|
135 |
-
-khtml-user-select: none;
|
136 |
-
-moz-user-select: none;
|
137 |
-
-ms-user-select: none;
|
138 |
-
user-select: none;
|
139 |
-
}
|
140 |
-
|
141 |
-
.no-touch .foogallery-stack-album .back:hover {
|
142 |
-
background: #666;
|
143 |
-
background: rgba(100,100,100,0.5);
|
144 |
-
color: #fff;
|
145 |
-
}
|
146 |
-
|
147 |
-
.foogallery-stack-album .topbar h2,
|
148 |
-
.foogallery-stack-album .topbar h3 {
|
149 |
-
display: inline-block;
|
150 |
-
width: 49%;
|
151 |
-
margin: 0;
|
152 |
-
}
|
153 |
-
|
154 |
-
.foogallery-stack-album .topbar h2 {
|
155 |
-
padding-right: 20px;
|
156 |
-
}
|
157 |
-
|
158 |
-
.foogallery-stack-album .topbar h3 {
|
159 |
-
text-align: right;
|
160 |
-
padding-left: 20px;
|
161 |
-
}
|
162 |
-
|
163 |
-
/* Loader */
|
164 |
-
|
165 |
-
.foogallery-stack-album .loader {
|
166 |
-
left: 50%;
|
167 |
-
position: absolute;
|
168 |
-
margin-left: -120px;
|
169 |
-
}
|
170 |
-
|
171 |
-
.foogallery-stack-album .loader i {
|
172 |
-
display: inline-block;
|
173 |
-
width: 40px;
|
174 |
-
height: 40px;
|
175 |
-
-webkit-animation: loading 1s linear infinite forwards;
|
176 |
-
-moz-animation: loading 1s linear infinite forwards;
|
177 |
-
-o-animation: loading 1s linear infinite forwards;
|
178 |
-
-ms-animation: loading 1s linear infinite forwards;
|
179 |
-
animation: loading 1s linear infinite forwards;
|
180 |
-
}
|
181 |
-
|
182 |
-
.foogallery-stack-album .loader i:nth-child(2){
|
183 |
-
-webkit-animation-delay: 0.1s;
|
184 |
-
-moz-animation-delay: 0.1s;
|
185 |
-
-o-animation-delay: 0.1s;
|
186 |
-
-ms-animation-delay: 0.1s;
|
187 |
-
animation-delay: 0.1s;
|
188 |
-
}
|
189 |
-
|
190 |
-
.foogallery-stack-album .loader i:nth-child(3){
|
191 |
-
-webkit-animation-delay: 0.2s;
|
192 |
-
-moz-animation-delay: 0.2s;
|
193 |
-
-o-animation-delay: 0.2s;
|
194 |
-
-ms-animation-delay: 0.2s;
|
195 |
-
animation-delay: 0.2s;
|
196 |
-
}
|
197 |
-
|
198 |
-
.foogallery-stack-album .loader i:nth-child(4){
|
199 |
-
-webkit-animation-delay: 0.3s;
|
200 |
-
-moz-animation-delay: 0.3s;
|
201 |
-
-o-animation-delay: 0.3s;
|
202 |
-
-ms-animation-delay: 0.3s;
|
203 |
-
animation-delay: 0.3s;
|
204 |
-
}
|
205 |
-
|
206 |
-
.foogallery-stack-album .loader i:nth-child(5){
|
207 |
-
-webkit-animation-delay: 0.4s;
|
208 |
-
-moz-animation-delay: 0.4s;
|
209 |
-
-o-animation-delay: 0.4s;
|
210 |
-
-ms-animation-delay: 0.4s;
|
211 |
-
animation-delay: 0.4s;
|
212 |
-
}
|
213 |
-
|
214 |
-
.foogallery-stack-album .loader i:nth-child(6){
|
215 |
-
-webkit-animation-delay: 0.5s;
|
216 |
-
-moz-animation-delay: 0.5s;
|
217 |
-
-o-animation-delay: 0.5s;
|
218 |
-
-ms-animation-delay: 0.5s;
|
219 |
-
animation-delay: 0.5s;
|
220 |
-
}
|
221 |
-
|
222 |
-
@-webkit-keyframes loading{
|
223 |
-
0%{
|
224 |
-
opacity: 0;
|
225 |
-
background-color: rgba(255,255,255,0.9);
|
226 |
-
}
|
227 |
-
|
228 |
-
100%{
|
229 |
-
opacity: 1;
|
230 |
-
-webkit-transform: scale(0.25) rotate(75deg);
|
231 |
-
background-color: rgba(155,155,155,0.9);
|
232 |
-
}
|
233 |
-
}
|
234 |
-
|
235 |
-
@-moz-keyframes loading{
|
236 |
-
0%{
|
237 |
-
opacity: 0;
|
238 |
-
background-color: rgba(255,255,255,0.9);
|
239 |
-
}
|
240 |
-
|
241 |
-
100%{
|
242 |
-
opacity: 1;
|
243 |
-
-moz-transform: scale(0.25) rotate(75deg);
|
244 |
-
background-color: rgba(155,155,155,0.9);
|
245 |
-
}
|
246 |
-
}
|
247 |
-
|
248 |
-
@-o-keyframes loading{
|
249 |
-
0%{
|
250 |
-
opacity: 0;
|
251 |
-
background-color: rgba(255,255,255,0.9);
|
252 |
-
}
|
253 |
-
|
254 |
-
100%{
|
255 |
-
opacity: 1;
|
256 |
-
-o-transform: scale(0.25) rotate(75deg);
|
257 |
-
background-color: rgba(155,155,155,0.9);
|
258 |
-
}
|
259 |
-
}
|
260 |
-
|
261 |
-
@-ms-keyframes loading{
|
262 |
-
0%{
|
263 |
-
opacity: 0;
|
264 |
-
background-color: rgba(255,255,255,0.9);
|
265 |
-
}
|
266 |
-
|
267 |
-
100%{
|
268 |
-
opacity: 1;
|
269 |
-
-ms-transform: scale(0.25) rotate(75deg);
|
270 |
-
background-color: rgba(155,155,155,0.9);
|
271 |
-
}
|
272 |
-
}
|
273 |
-
|
274 |
-
@keyframes loading{
|
275 |
-
0%{
|
276 |
-
opacity: 0;
|
277 |
-
background-color: rgba(255,255,255,0.9);
|
278 |
-
}
|
279 |
-
|
280 |
-
100%{
|
281 |
-
opacity: 1;
|
282 |
-
transform: scale(0.25) rotate(75deg);
|
283 |
-
background-color: rgba(155,155,155,0.9);
|
284 |
-
}
|
285 |
-
}
|
286 |
-
|
287 |
-
@media screen and (max-width: 680px){
|
288 |
-
.foogallery-stack-album .topbar h2, .foogallery-stack-album .topbar h3 { text-align: left; padding: 0; display: block;}
|
289 |
-
.foogallery-stack-album .back { left: auto; right: 0px; margin-left: 0px;}
|
290 |
}
|
1 |
+
.tp-grid {
|
2 |
+
list-style-type: none;
|
3 |
+
position: relative;
|
4 |
+
display: block;
|
5 |
+
}
|
6 |
+
|
7 |
+
.tp-grid li {
|
8 |
+
position: absolute;
|
9 |
+
cursor: pointer;
|
10 |
+
border: 10px solid #fff;
|
11 |
+
box-shadow: 0 2px 3px rgba(0,0,0,0.2);
|
12 |
+
display: none;
|
13 |
+
overflow: hidden;
|
14 |
+
-webkit-backface-visibility: hidden;
|
15 |
+
-moz-backface-visibility: hidden;
|
16 |
+
-o-backface-visibility: hidden;
|
17 |
+
-ms-backface-visibility: hidden;
|
18 |
+
backface-visibility: hidden;
|
19 |
+
}
|
20 |
+
|
21 |
+
.no-js .tp-grid li {
|
22 |
+
position: relative;
|
23 |
+
display: inline-block;
|
24 |
+
}
|
25 |
+
|
26 |
+
.tp-grid li a {
|
27 |
+
display: block;
|
28 |
+
outline: none;
|
29 |
+
}
|
30 |
+
|
31 |
+
.tp-grid li img {
|
32 |
+
display: block;
|
33 |
+
border: none;
|
34 |
+
}
|
35 |
+
|
36 |
+
.tp-info,
|
37 |
+
.tp-title {
|
38 |
+
position: absolute;
|
39 |
+
background: #fff;
|
40 |
+
line-height: 20px;
|
41 |
+
color: #333;
|
42 |
+
top: 40%;
|
43 |
+
width: 75%;
|
44 |
+
padding: 10px;
|
45 |
+
font-weight: 700;
|
46 |
+
text-align: right;
|
47 |
+
left: -100%;
|
48 |
+
box-shadow:
|
49 |
+
1px 1px 1px rgba(0,0,0,0.1),
|
50 |
+
5px 0 5px -3px rgba(0,0,0,0.4),
|
51 |
+
inset 0 0 5px rgba(0,0,0,0.04);
|
52 |
+
}
|
53 |
+
|
54 |
+
.tp-title-cover {
|
55 |
+
position: absolute;
|
56 |
+
top: 0;
|
57 |
+
bottom: 0;
|
58 |
+
left: 0;
|
59 |
+
right: 0;
|
60 |
+
}
|
61 |
+
|
62 |
+
.tp-open .tp-title-cover {
|
63 |
+
display: none;
|
64 |
+
}
|
65 |
+
|
66 |
+
.touch .tp-info {
|
67 |
+
left: 0px;
|
68 |
+
}
|
69 |
+
|
70 |
+
.no-touch .tp-info {
|
71 |
+
-webkit-transition: all 0.3s ease-in-out;
|
72 |
+
-moz-transition: all 0.3s ease-in-out;
|
73 |
+
-o-transition: all 0.3s ease-in-out;
|
74 |
+
-ms-transition: all 0.3s ease-in-out;
|
75 |
+
transition: all 0.3s ease-in-out;
|
76 |
+
}
|
77 |
+
|
78 |
+
.no-touch .tp-grid li:hover .tp-info {
|
79 |
+
-webkit-transition-delay: 150ms;
|
80 |
+
-moz-transition-delay: 150ms;
|
81 |
+
-o-transition-delay: 150ms;
|
82 |
+
-ms-transition-delay: 150ms;
|
83 |
+
transition-delay: 150ms;
|
84 |
+
}
|
85 |
+
|
86 |
+
.no-touch .tp-open li:hover .tp-info {
|
87 |
+
left: 0px;
|
88 |
+
}
|
89 |
+
|
90 |
+
.tp-title {
|
91 |
+
padding: 10px 35px 10px 10px;
|
92 |
+
left: 0px;
|
93 |
+
}
|
94 |
+
|
95 |
+
.tp-title span:nth-child(2){
|
96 |
+
color: #aaa;
|
97 |
+
padding: 0 5px;
|
98 |
+
background: #F7F7F7;
|
99 |
+
right: 0px;
|
100 |
+
height: 100%;
|
101 |
+
line-height: 40px;
|
102 |
+
top: 0px;
|
103 |
+
position: absolute;
|
104 |
+
display: block;
|
105 |
+
}
|
106 |
+
|
107 |
+
.foogallery-stack-album * {
|
108 |
+
box-sizing: border-box;
|
109 |
+
}
|
110 |
+
|
111 |
+
.foogallery-stack-album .topbar {
|
112 |
+
position: relative;
|
113 |
+
padding: 10px 0;
|
114 |
+
margin: 0 0 20px;
|
115 |
+
box-shadow: 0 1px 0 #aaa, 0 -1px 0 #aaa;
|
116 |
+
}
|
117 |
+
|
118 |
+
.foogallery-stack-album .back {
|
119 |
+
width: 40px;
|
120 |
+
height: 40px;
|
121 |
+
position: absolute;
|
122 |
+
left: 50%;
|
123 |
+
top: 50%;
|
124 |
+
margin: -20px 0 0 -20px;
|
125 |
+
border-radius: 50%;
|
126 |
+
text-align: center;
|
127 |
+
line-height: 38px;
|
128 |
+
color: #999;
|
129 |
+
background: #ddd;
|
130 |
+
background: rgba(200,200,200,0.5);
|
131 |
+
cursor: pointer;
|
132 |
+
display: none;
|
133 |
+
-webkit-touch-callout: none;
|
134 |
+
-webkit-user-select: none;
|
135 |
+
-khtml-user-select: none;
|
136 |
+
-moz-user-select: none;
|
137 |
+
-ms-user-select: none;
|
138 |
+
user-select: none;
|
139 |
+
}
|
140 |
+
|
141 |
+
.no-touch .foogallery-stack-album .back:hover {
|
142 |
+
background: #666;
|
143 |
+
background: rgba(100,100,100,0.5);
|
144 |
+
color: #fff;
|
145 |
+
}
|
146 |
+
|
147 |
+
.foogallery-stack-album .topbar h2,
|
148 |
+
.foogallery-stack-album .topbar h3 {
|
149 |
+
display: inline-block;
|
150 |
+
width: 49%;
|
151 |
+
margin: 0;
|
152 |
+
}
|
153 |
+
|
154 |
+
.foogallery-stack-album .topbar h2 {
|
155 |
+
padding-right: 20px;
|
156 |
+
}
|
157 |
+
|
158 |
+
.foogallery-stack-album .topbar h3 {
|
159 |
+
text-align: right;
|
160 |
+
padding-left: 20px;
|
161 |
+
}
|
162 |
+
|
163 |
+
/* Loader */
|
164 |
+
|
165 |
+
.foogallery-stack-album .loader {
|
166 |
+
left: 50%;
|
167 |
+
position: absolute;
|
168 |
+
margin-left: -120px;
|
169 |
+
}
|
170 |
+
|
171 |
+
.foogallery-stack-album .loader i {
|
172 |
+
display: inline-block;
|
173 |
+
width: 40px;
|
174 |
+
height: 40px;
|
175 |
+
-webkit-animation: loading 1s linear infinite forwards;
|
176 |
+
-moz-animation: loading 1s linear infinite forwards;
|
177 |
+
-o-animation: loading 1s linear infinite forwards;
|
178 |
+
-ms-animation: loading 1s linear infinite forwards;
|
179 |
+
animation: loading 1s linear infinite forwards;
|
180 |
+
}
|
181 |
+
|
182 |
+
.foogallery-stack-album .loader i:nth-child(2){
|
183 |
+
-webkit-animation-delay: 0.1s;
|
184 |
+
-moz-animation-delay: 0.1s;
|
185 |
+
-o-animation-delay: 0.1s;
|
186 |
+
-ms-animation-delay: 0.1s;
|
187 |
+
animation-delay: 0.1s;
|
188 |
+
}
|
189 |
+
|
190 |
+
.foogallery-stack-album .loader i:nth-child(3){
|
191 |
+
-webkit-animation-delay: 0.2s;
|
192 |
+
-moz-animation-delay: 0.2s;
|
193 |
+
-o-animation-delay: 0.2s;
|
194 |
+
-ms-animation-delay: 0.2s;
|
195 |
+
animation-delay: 0.2s;
|
196 |
+
}
|
197 |
+
|
198 |
+
.foogallery-stack-album .loader i:nth-child(4){
|
199 |
+
-webkit-animation-delay: 0.3s;
|
200 |
+
-moz-animation-delay: 0.3s;
|
201 |
+
-o-animation-delay: 0.3s;
|
202 |
+
-ms-animation-delay: 0.3s;
|
203 |
+
animation-delay: 0.3s;
|
204 |
+
}
|
205 |
+
|
206 |
+
.foogallery-stack-album .loader i:nth-child(5){
|
207 |
+
-webkit-animation-delay: 0.4s;
|
208 |
+
-moz-animation-delay: 0.4s;
|
209 |
+
-o-animation-delay: 0.4s;
|
210 |
+
-ms-animation-delay: 0.4s;
|
211 |
+
animation-delay: 0.4s;
|
212 |
+
}
|
213 |
+
|
214 |
+
.foogallery-stack-album .loader i:nth-child(6){
|
215 |
+
-webkit-animation-delay: 0.5s;
|
216 |
+
-moz-animation-delay: 0.5s;
|
217 |
+
-o-animation-delay: 0.5s;
|
218 |
+
-ms-animation-delay: 0.5s;
|
219 |
+
animation-delay: 0.5s;
|
220 |
+
}
|
221 |
+
|
222 |
+
@-webkit-keyframes loading{
|
223 |
+
0%{
|
224 |
+
opacity: 0;
|
225 |
+
background-color: rgba(255,255,255,0.9);
|
226 |
+
}
|
227 |
+
|
228 |
+
100%{
|
229 |
+
opacity: 1;
|
230 |
+
-webkit-transform: scale(0.25) rotate(75deg);
|
231 |
+
background-color: rgba(155,155,155,0.9);
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
@-moz-keyframes loading{
|
236 |
+
0%{
|
237 |
+
opacity: 0;
|
238 |
+
background-color: rgba(255,255,255,0.9);
|
239 |
+
}
|
240 |
+
|
241 |
+
100%{
|
242 |
+
opacity: 1;
|
243 |
+
-moz-transform: scale(0.25) rotate(75deg);
|
244 |
+
background-color: rgba(155,155,155,0.9);
|
245 |
+
}
|
246 |
+
}
|
247 |
+
|
248 |
+
@-o-keyframes loading{
|
249 |
+
0%{
|
250 |
+
opacity: 0;
|
251 |
+
background-color: rgba(255,255,255,0.9);
|
252 |
+
}
|
253 |
+
|
254 |
+
100%{
|
255 |
+
opacity: 1;
|
256 |
+
-o-transform: scale(0.25) rotate(75deg);
|
257 |
+
background-color: rgba(155,155,155,0.9);
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
@-ms-keyframes loading{
|
262 |
+
0%{
|
263 |
+
opacity: 0;
|
264 |
+
background-color: rgba(255,255,255,0.9);
|
265 |
+
}
|
266 |
+
|
267 |
+
100%{
|
268 |
+
opacity: 1;
|
269 |
+
-ms-transform: scale(0.25) rotate(75deg);
|
270 |
+
background-color: rgba(155,155,155,0.9);
|
271 |
+
}
|
272 |
+
}
|
273 |
+
|
274 |
+
@keyframes loading{
|
275 |
+
0%{
|
276 |
+
opacity: 0;
|
277 |
+
background-color: rgba(255,255,255,0.9);
|
278 |
+
}
|
279 |
+
|
280 |
+
100%{
|
281 |
+
opacity: 1;
|
282 |
+
transform: scale(0.25) rotate(75deg);
|
283 |
+
background-color: rgba(155,155,155,0.9);
|
284 |
+
}
|
285 |
+
}
|
286 |
+
|
287 |
+
@media screen and (max-width: 680px){
|
288 |
+
.foogallery-stack-album .topbar h2, .foogallery-stack-album .topbar h3 { text-align: left; padding: 0; display: block;}
|
289 |
+
.foogallery-stack-album .back { left: auto; right: 0px; margin-left: 0px;}
|
290 |
}
|
extensions/albums/functions.php
CHANGED
@@ -1,361 +1,361 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Builds up a FooGallery album shortcode
|
5 |
-
*
|
6 |
-
* @param $album_id
|
7 |
-
*
|
8 |
-
* @return string
|
9 |
-
*/
|
10 |
-
function foogallery_build_album_shortcode( $album_id ) {
|
11 |
-
return '[' . foogallery_album_shortcode_tag() . ' id="' . $album_id . '"]';
|
12 |
-
}
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Returns the album shortcode tag
|
16 |
-
*
|
17 |
-
* @return string
|
18 |
-
*/
|
19 |
-
function foogallery_album_shortcode_tag() {
|
20 |
-
return apply_filters( 'foogallery_album_shortcode_tag', FOOGALLERY_CPT_ALBUM );
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Return all the album templates used within FooGallery
|
25 |
-
*
|
26 |
-
* @return array
|
27 |
-
*/
|
28 |
-
function foogallery_album_templates() {
|
29 |
-
$album_templates[] = array(
|
30 |
-
'slug' => 'default',
|
31 |
-
'name' => __( 'Responsive Album Layout', 'foogallery' ),
|
32 |
-
'fields' => array(
|
33 |
-
array(
|
34 |
-
'id' => 'thumbnail_dimensions',
|
35 |
-
'title' => __( 'Thumbnail Size', 'foogallery' ),
|
36 |
-
'desc' => __( 'Choose the size of your gallery thumbnails.', 'foogallery' ),
|
37 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
38 |
-
'type' => 'thumb_size',
|
39 |
-
'default' => array(
|
40 |
-
'width' => get_option( 'thumbnail_size_w' ),
|
41 |
-
'height' => get_option( 'thumbnail_size_h' ),
|
42 |
-
'crop' => true,
|
43 |
-
),
|
44 |
-
),
|
45 |
-
array(
|
46 |
-
'id' => 'title_bg',
|
47 |
-
'title' => __( 'Title Background Color', 'foogallery' ),
|
48 |
-
'desc' => __( 'The color of the title that overlays the album thumbnails', 'foogallery' ),
|
49 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
50 |
-
'type' => 'colorpicker',
|
51 |
-
'default' => '#fff'
|
52 |
-
),
|
53 |
-
array(
|
54 |
-
'id' => 'title_font_color',
|
55 |
-
'title' => __( 'Title Text Color', 'foogallery' ),
|
56 |
-
'desc' => __( 'The color of the title text that overlays the album thumbnails', 'foogallery' ),
|
57 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
58 |
-
'type' => 'colorpicker',
|
59 |
-
'default' => '#000000'
|
60 |
-
),
|
61 |
-
array(
|
62 |
-
'id' => 'alignment',
|
63 |
-
'title' => __( 'Alignment', 'foogallery' ),
|
64 |
-
'desc' => __( 'The horizontal alignment of the gallery thumbnails inside the album.', 'foogallery' ),
|
65 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
66 |
-
'default' => 'alignment-left',
|
67 |
-
'type' => 'select',
|
68 |
-
'choices' => array(
|
69 |
-
'alignment-left' => __( 'Left', 'foogallery' ),
|
70 |
-
'alignment-center' => __( 'Center', 'foogallery' ),
|
71 |
-
'alignment-right' => __( 'Right', 'foogallery' ),
|
72 |
-
)
|
73 |
-
),
|
74 |
-
array(
|
75 |
-
'id' => 'gallery_link',
|
76 |
-
'title' => __( 'Gallery Link', 'foogallery' ),
|
77 |
-
'section' => __( 'URL Settings', 'foogallery' ),
|
78 |
-
'default' => '',
|
79 |
-
'type' => 'radio',
|
80 |
-
'spacer' => '<span class="spacer"></span>',
|
81 |
-
'choices' => array(
|
82 |
-
'' => __('Default', 'foogallery'),
|
83 |
-
'custom_url' => __('Custom URL', 'foogallery')
|
84 |
-
),
|
85 |
-
'desc' => __( 'You can choose to link each gallery to the default embedded gallery, or you can choose to link to the gallery custom URL (if set).', 'foogallery' ),
|
86 |
-
),
|
87 |
-
array(
|
88 |
-
'id' => 'gallery_link_format',
|
89 |
-
'title' => __( 'Gallery Link Format', 'foogallery' ),
|
90 |
-
'desc' => __( 'The format of the URL for each individual gallery in the album.', 'foogallery' ),
|
91 |
-
'section' => __( 'URL Settings', 'foogallery' ),
|
92 |
-
'type' => 'radio',
|
93 |
-
'choices' => array(
|
94 |
-
'default' => __('Pretty, e.g. ', 'foogallery') . '<code>/page-with-album/' . foogallery_album_gallery_url_slug() . '/some-gallery</code>',
|
95 |
-
'querystring' => __('Querystring e.g. ', 'foogallery') . '<code>/page-with-album?' . foogallery_album_gallery_url_slug() . '=some-gallery</code>'
|
96 |
-
),
|
97 |
-
'default' => foogallery_determine_best_link_format_default()
|
98 |
-
),
|
99 |
-
array(
|
100 |
-
'id' => 'url_help',
|
101 |
-
'title' => __( 'Please Note', 'foogallery' ),
|
102 |
-
'section' => __( 'URL Settings', 'foogallery' ),
|
103 |
-
'type' => 'help',
|
104 |
-
'help' => true,
|
105 |
-
'desc' => __( 'If you are getting 404\'s when clicking on the album galleries, then change to the querystring format. To force your rewrite rules to flush, simply deactivate and activate the albums extension again.', 'foogallery' ),
|
106 |
-
),
|
107 |
-
array(
|
108 |
-
'id' => 'album_hash',
|
109 |
-
'title' => __( 'Remember Scroll Position', 'foogallery' ),
|
110 |
-
'desc' => __( 'When a gallery is loaded in your album, the page is refreshed which means the scroll position will be lost .', 'foogallery' ),
|
111 |
-
'section' => __( 'URL Settings', 'foogallery' ),
|
112 |
-
'type' => 'radio',
|
113 |
-
'choices' => array(
|
114 |
-
'none' => __('Don\'t Remember', 'foogallery'),
|
115 |
-
'remember' => __('Remember Scroll Position', 'foogallery')
|
116 |
-
),
|
117 |
-
'default' => 'none'
|
118 |
-
)
|
119 |
-
)
|
120 |
-
);
|
121 |
-
|
122 |
-
$album_templates[] = array(
|
123 |
-
'slug' => 'stack',
|
124 |
-
'name' => __( 'All-In-One Stack Album', 'foogallery' ),
|
125 |
-
'fields' => array(
|
126 |
-
array(
|
127 |
-
'id' => 'lightbox',
|
128 |
-
'title' => __( 'Lightbox', 'foogallery' ),
|
129 |
-
'desc' => __( 'Choose which lightbox you want to use to display images.', 'foogallery' ),
|
130 |
-
'type' => 'lightbox',
|
131 |
-
),
|
132 |
-
|
133 |
-
array(
|
134 |
-
'id' => 'thumbnail_dimensions',
|
135 |
-
'title' => __( 'Thumbnail Size', 'foogallery' ),
|
136 |
-
'desc' => __( 'Choose the size of your image stack thumbnails.', 'foogallery' ),
|
137 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
138 |
-
'type' => 'thumb_size',
|
139 |
-
'default' => array(
|
140 |
-
'width' => get_option( 'thumbnail_size_w' ),
|
141 |
-
'height' => get_option( 'thumbnail_size_h' ),
|
142 |
-
'crop' => true,
|
143 |
-
),
|
144 |
-
),
|
145 |
-
|
146 |
-
array(
|
147 |
-
'id' => 'random_angle',
|
148 |
-
'title' => __( 'Thumbnail Rotation', 'foogallery' ),
|
149 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
150 |
-
'desc' => __( 'Choose how thumbnails in each gallery are shown when clicking an image stack.', 'foogallery' ),
|
151 |
-
'type' => 'radio',
|
152 |
-
'default' => 'false',
|
153 |
-
'choices' => array(
|
154 |
-
'false' => __( 'Normal', 'foogallery' ),
|
155 |
-
'true' => __( 'Random Angles', 'foogallery' )
|
156 |
-
)
|
157 |
-
),
|
158 |
-
|
159 |
-
array(
|
160 |
-
'id' => 'gutter',
|
161 |
-
'title' => __( 'Thumbnail Gutter', 'foogallery' ),
|
162 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
163 |
-
'desc' => __( 'The spacing between each image stack.', 'foogallery' ),
|
164 |
-
'type' => 'number',
|
165 |
-
'default' => 50
|
166 |
-
),
|
167 |
-
|
168 |
-
array(
|
169 |
-
'id' => 'delay',
|
170 |
-
'title' => __( 'Expand Delay', 'foogallery' ),
|
171 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
172 |
-
'desc' => __( 'The delay between expanding each image on a image stack.', 'foogallery' ),
|
173 |
-
'type' => 'number',
|
174 |
-
'default' => 0
|
175 |
-
),
|
176 |
-
|
177 |
-
array(
|
178 |
-
'id' => 'pile_angles',
|
179 |
-
'title' => __( 'Image Stack Angles', 'foogallery' ),
|
180 |
-
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
181 |
-
'desc' => __( 'The angle of the images behind the thumbnail in each image stack.', 'foogallery' ),
|
182 |
-
'type' => 'radio',
|
183 |
-
'default' => '1',
|
184 |
-
'choices' => array(
|
185 |
-
'1' => __( 'Low', 'foogallery' ),
|
186 |
-
'2' => __( 'Normal', 'foogallery' ),
|
187 |
-
'3' => __( 'More Than Normal', 'foogallery' ),
|
188 |
-
'5' => __( 'High', 'foogallery' ),
|
189 |
-
)
|
190 |
-
)
|
191 |
-
)
|
192 |
-
);
|
193 |
-
|
194 |
-
return apply_filters( 'foogallery_album_templates', $album_templates );
|
195 |
-
}
|
196 |
-
|
197 |
-
function foogallery_determine_best_link_format_default() {
|
198 |
-
global $wp_rewrite;
|
199 |
-
if ( '' === $wp_rewrite->permalink_structure ) {
|
200 |
-
//we are using ?page_id
|
201 |
-
return 'querystring';
|
202 |
-
}
|
203 |
-
|
204 |
-
//we are using permalinks
|
205 |
-
return 'default';
|
206 |
-
}
|
207 |
-
|
208 |
-
/**
|
209 |
-
* Returns the default album template
|
210 |
-
*
|
211 |
-
* @return string
|
212 |
-
*/
|
213 |
-
function foogallery_default_album_template() {
|
214 |
-
return foogallery_get_setting( 'album_template' );
|
215 |
-
}
|
216 |
-
|
217 |
-
/**
|
218 |
-
* Returns the gallery link url for an album
|
219 |
-
*
|
220 |
-
* @param $album FooGalleryAlbum
|
221 |
-
* @param $gallery FooGallery
|
222 |
-
*
|
223 |
-
* @return string
|
224 |
-
*/
|
225 |
-
function foogallery_album_build_gallery_link( $album, $gallery ) {
|
226 |
-
//first check if we want to use custom URL's
|
227 |
-
$gallery_link = $album->get_meta( 'default_gallery_link', '' );
|
228 |
-
|
229 |
-
if ( 'custom_url' === $gallery_link ) {
|
230 |
-
//check if the gallery has a custom url, and if so, then use it
|
231 |
-
$url = get_post_meta( $gallery->ID, 'custom_url', true );
|
232 |
-
}
|
233 |
-
|
234 |
-
if ( empty( $url ) ) {
|
235 |
-
$slug = foogallery_album_gallery_url_slug();
|
236 |
-
$format = $album->get_meta( 'default_gallery_link_format', 'default' );
|
237 |
-
|
238 |
-
if ( 'default' === $format && 'default' === foogallery_determine_best_link_format_default() ) {
|
239 |
-
$url = untrailingslashit( trailingslashit( get_permalink() ) . $slug . '/' . $gallery->slug );
|
240 |
-
} else {
|
241 |
-
$url = add_query_arg( $slug, $gallery->slug );
|
242 |
-
}
|
243 |
-
|
244 |
-
$use_hash = $album->get_meta( 'default_album_hash', 'remember' );
|
245 |
-
|
246 |
-
if ( 'remember' === $use_hash ) {
|
247 |
-
//add the album hash if required
|
248 |
-
$url .= '#' . $album->slug;
|
249 |
-
}
|
250 |
-
}
|
251 |
-
|
252 |
-
return apply_filters( 'foogallery_album_build_gallery_link', $url );
|
253 |
-
}
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Returns the gallery slug used when generating gallery URL's
|
257 |
-
*
|
258 |
-
* @return string
|
259 |
-
*/
|
260 |
-
function foogallery_album_gallery_url_slug() {
|
261 |
-
$slug = foogallery_get_setting( 'album_gallery_slug', 'gallery' );
|
262 |
-
return apply_filters( 'foogallery_album_gallery_url_slug', $slug );
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Returns the gallery link target for an album
|
267 |
-
*
|
268 |
-
* @param $album FooGalleryAlbum
|
269 |
-
* @param $gallery FooGallery
|
270 |
-
*
|
271 |
-
* @return string
|
272 |
-
*/
|
273 |
-
function foogallery_album_build_gallery_link_target( $album, $gallery ) {
|
274 |
-
//first check if we want to use custom URL's
|
275 |
-
$gallery_link = $album->get_meta( 'default_gallery_link', '' );
|
276 |
-
|
277 |
-
if ( 'custom_url' === $gallery_link ) {
|
278 |
-
//check if the gallery has a custom target, and if so, then use it
|
279 |
-
$target = get_post_meta( $gallery->ID, 'custom_target', true );
|
280 |
-
}
|
281 |
-
|
282 |
-
if ( empty( $target ) ) {
|
283 |
-
$target = '_self';
|
284 |
-
}
|
285 |
-
|
286 |
-
return apply_filters( 'foogallery_album_build_gallery_link_target', $target );
|
287 |
-
}
|
288 |
-
|
289 |
-
function foogallery_album_get_current_gallery() {
|
290 |
-
$slug = foogallery_album_gallery_url_slug();
|
291 |
-
|
292 |
-
$gallery = get_query_var( $slug );
|
293 |
-
|
294 |
-
if ( empty( $gallery ) ) {
|
295 |
-
$gallery = safe_get_from_request( $slug );
|
296 |
-
}
|
297 |
-
|
298 |
-
return apply_filters( 'foogallery_album_get_current_gallery', $gallery );
|
299 |
-
}
|
300 |
-
|
301 |
-
function foogallery_album_remove_gallery_from_link() {
|
302 |
-
$gallery = foogallery_album_get_current_gallery();
|
303 |
-
$slug = foogallery_album_gallery_url_slug();
|
304 |
-
|
305 |
-
$url = untrailingslashit( remove_query_arg( $slug ) );
|
306 |
-
|
307 |
-
return str_replace( $slug . '/' . $gallery, '', $url);
|
308 |
-
}
|
309 |
-
|
310 |
-
/**
|
311 |
-
* Get a foogallery album template setting for the current foogallery that is being output to the frontend
|
312 |
-
* @param string $key
|
313 |
-
* @param string $default
|
314 |
-
*
|
315 |
-
* @return bool
|
316 |
-
*/
|
317 |
-
function foogallery_album_template_setting( $key, $default = '' ) {
|
318 |
-
global $current_foogallery_album;
|
319 |
-
global $current_foogallery_album_arguments;
|
320 |
-
global $current_foogallery_album_template;
|
321 |
-
|
322 |
-
$settings_key = "{$current_foogallery_album_template}_{$key}";
|
323 |
-
|
324 |
-
if ( $current_foogallery_album_arguments && array_key_exists( $key, $current_foogallery_album_arguments ) ) {
|
325 |
-
//try to get the value from the arguments
|
326 |
-
$value = $current_foogallery_album_arguments[ $key ];
|
327 |
-
|
328 |
-
} else if ( $current_foogallery_album->settings && array_key_exists( $settings_key, $current_foogallery_album->settings ) ) {
|
329 |
-
//then get the value out of the saved gallery settings
|
330 |
-
$value = $current_foogallery_album->settings[ $settings_key ];
|
331 |
-
} else {
|
332 |
-
//otherwise set it to the default
|
333 |
-
$value = $default;
|
334 |
-
}
|
335 |
-
|
336 |
-
$value = apply_filters( 'foogallery_album_template_setting-' . $key, $value );
|
337 |
-
|
338 |
-
return $value;
|
339 |
-
}
|
340 |
-
|
341 |
-
/**
|
342 |
-
* uninstall all albums and setting for albums
|
343 |
-
*/
|
344 |
-
function foogallery_album_uninstall() {
|
345 |
-
if ( !current_user_can( 'install_plugins' ) ) exit;
|
346 |
-
|
347 |
-
//delete all albums posts
|
348 |
-
global $wpdb;
|
349 |
-
$query = "SELECT p.ID FROM {$wpdb->posts} AS p WHERE p.post_type IN (%s)";
|
350 |
-
$gallery_post_ids = $wpdb->get_col( $wpdb->prepare( $query, FOOGALLERY_CPT_ALBUM ) );
|
351 |
-
|
352 |
-
if ( !empty( $gallery_post_ids ) ) {
|
353 |
-
$deleted = 0;
|
354 |
-
foreach ( $gallery_post_ids as $post_id ) {
|
355 |
-
$del = wp_delete_post( $post_id );
|
356 |
-
if ( false !== $del ) {
|
357 |
-
++$deleted;
|
358 |
-
}
|
359 |
-
}
|
360 |
-
}
|
361 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Builds up a FooGallery album shortcode
|
5 |
+
*
|
6 |
+
* @param $album_id
|
7 |
+
*
|
8 |
+
* @return string
|
9 |
+
*/
|
10 |
+
function foogallery_build_album_shortcode( $album_id ) {
|
11 |
+
return '[' . foogallery_album_shortcode_tag() . ' id="' . $album_id . '"]';
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Returns the album shortcode tag
|
16 |
+
*
|
17 |
+
* @return string
|
18 |
+
*/
|
19 |
+
function foogallery_album_shortcode_tag() {
|
20 |
+
return apply_filters( 'foogallery_album_shortcode_tag', FOOGALLERY_CPT_ALBUM );
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Return all the album templates used within FooGallery
|
25 |
+
*
|
26 |
+
* @return array
|
27 |
+
*/
|
28 |
+
function foogallery_album_templates() {
|
29 |
+
$album_templates[] = array(
|
30 |
+
'slug' => 'default',
|
31 |
+
'name' => __( 'Responsive Album Layout', 'foogallery' ),
|
32 |
+
'fields' => array(
|
33 |
+
array(
|
34 |
+
'id' => 'thumbnail_dimensions',
|
35 |
+
'title' => __( 'Thumbnail Size', 'foogallery' ),
|
36 |
+
'desc' => __( 'Choose the size of your gallery thumbnails.', 'foogallery' ),
|
37 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
38 |
+
'type' => 'thumb_size',
|
39 |
+
'default' => array(
|
40 |
+
'width' => get_option( 'thumbnail_size_w' ),
|
41 |
+
'height' => get_option( 'thumbnail_size_h' ),
|
42 |
+
'crop' => true,
|
43 |
+
),
|
44 |
+
),
|
45 |
+
array(
|
46 |
+
'id' => 'title_bg',
|
47 |
+
'title' => __( 'Title Background Color', 'foogallery' ),
|
48 |
+
'desc' => __( 'The color of the title that overlays the album thumbnails', 'foogallery' ),
|
49 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
50 |
+
'type' => 'colorpicker',
|
51 |
+
'default' => '#fff'
|
52 |
+
),
|
53 |
+
array(
|
54 |
+
'id' => 'title_font_color',
|
55 |
+
'title' => __( 'Title Text Color', 'foogallery' ),
|
56 |
+
'desc' => __( 'The color of the title text that overlays the album thumbnails', 'foogallery' ),
|
57 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
58 |
+
'type' => 'colorpicker',
|
59 |
+
'default' => '#000000'
|
60 |
+
),
|
61 |
+
array(
|
62 |
+
'id' => 'alignment',
|
63 |
+
'title' => __( 'Alignment', 'foogallery' ),
|
64 |
+
'desc' => __( 'The horizontal alignment of the gallery thumbnails inside the album.', 'foogallery' ),
|
65 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
66 |
+
'default' => 'alignment-left',
|
67 |
+
'type' => 'select',
|
68 |
+
'choices' => array(
|
69 |
+
'alignment-left' => __( 'Left', 'foogallery' ),
|
70 |
+
'alignment-center' => __( 'Center', 'foogallery' ),
|
71 |
+
'alignment-right' => __( 'Right', 'foogallery' ),
|
72 |
+
)
|
73 |
+
),
|
74 |
+
array(
|
75 |
+
'id' => 'gallery_link',
|
76 |
+
'title' => __( 'Gallery Link', 'foogallery' ),
|
77 |
+
'section' => __( 'URL Settings', 'foogallery' ),
|
78 |
+
'default' => '',
|
79 |
+
'type' => 'radio',
|
80 |
+
'spacer' => '<span class="spacer"></span>',
|
81 |
+
'choices' => array(
|
82 |
+
'' => __('Default', 'foogallery'),
|
83 |
+
'custom_url' => __('Custom URL', 'foogallery')
|
84 |
+
),
|
85 |
+
'desc' => __( 'You can choose to link each gallery to the default embedded gallery, or you can choose to link to the gallery custom URL (if set).', 'foogallery' ),
|
86 |
+
),
|
87 |
+
array(
|
88 |
+
'id' => 'gallery_link_format',
|
89 |
+
'title' => __( 'Gallery Link Format', 'foogallery' ),
|
90 |
+
'desc' => __( 'The format of the URL for each individual gallery in the album.', 'foogallery' ),
|
91 |
+
'section' => __( 'URL Settings', 'foogallery' ),
|
92 |
+
'type' => 'radio',
|
93 |
+
'choices' => array(
|
94 |
+
'default' => __('Pretty, e.g. ', 'foogallery') . '<code>/page-with-album/' . foogallery_album_gallery_url_slug() . '/some-gallery</code>',
|
95 |
+
'querystring' => __('Querystring e.g. ', 'foogallery') . '<code>/page-with-album?' . foogallery_album_gallery_url_slug() . '=some-gallery</code>'
|
96 |
+
),
|
97 |
+
'default' => foogallery_determine_best_link_format_default()
|
98 |
+
),
|
99 |
+
array(
|
100 |
+
'id' => 'url_help',
|
101 |
+
'title' => __( 'Please Note', 'foogallery' ),
|
102 |
+
'section' => __( 'URL Settings', 'foogallery' ),
|
103 |
+
'type' => 'help',
|
104 |
+
'help' => true,
|
105 |
+
'desc' => __( 'If you are getting 404\'s when clicking on the album galleries, then change to the querystring format. To force your rewrite rules to flush, simply deactivate and activate the albums extension again.', 'foogallery' ),
|
106 |
+
),
|
107 |
+
array(
|
108 |
+
'id' => 'album_hash',
|
109 |
+
'title' => __( 'Remember Scroll Position', 'foogallery' ),
|
110 |
+
'desc' => __( 'When a gallery is loaded in your album, the page is refreshed which means the scroll position will be lost .', 'foogallery' ),
|
111 |
+
'section' => __( 'URL Settings', 'foogallery' ),
|
112 |
+
'type' => 'radio',
|
113 |
+
'choices' => array(
|
114 |
+
'none' => __('Don\'t Remember', 'foogallery'),
|
115 |
+
'remember' => __('Remember Scroll Position', 'foogallery')
|
116 |
+
),
|
117 |
+
'default' => 'none'
|
118 |
+
)
|
119 |
+
)
|
120 |
+
);
|
121 |
+
|
122 |
+
$album_templates[] = array(
|
123 |
+
'slug' => 'stack',
|
124 |
+
'name' => __( 'All-In-One Stack Album', 'foogallery' ),
|
125 |
+
'fields' => array(
|
126 |
+
array(
|
127 |
+
'id' => 'lightbox',
|
128 |
+
'title' => __( 'Lightbox', 'foogallery' ),
|
129 |
+
'desc' => __( 'Choose which lightbox you want to use to display images.', 'foogallery' ),
|
130 |
+
'type' => 'lightbox',
|
131 |
+
),
|
132 |
+
|
133 |
+
array(
|
134 |
+
'id' => 'thumbnail_dimensions',
|
135 |
+
'title' => __( 'Thumbnail Size', 'foogallery' ),
|
136 |
+
'desc' => __( 'Choose the size of your image stack thumbnails.', 'foogallery' ),
|
137 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
138 |
+
'type' => 'thumb_size',
|
139 |
+
'default' => array(
|
140 |
+
'width' => get_option( 'thumbnail_size_w' ),
|
141 |
+
'height' => get_option( 'thumbnail_size_h' ),
|
142 |
+
'crop' => true,
|
143 |
+
),
|
144 |
+
),
|
145 |
+
|
146 |
+
array(
|
147 |
+
'id' => 'random_angle',
|
148 |
+
'title' => __( 'Thumbnail Rotation', 'foogallery' ),
|
149 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
150 |
+
'desc' => __( 'Choose how thumbnails in each gallery are shown when clicking an image stack.', 'foogallery' ),
|
151 |
+
'type' => 'radio',
|
152 |
+
'default' => 'false',
|
153 |
+
'choices' => array(
|
154 |
+
'false' => __( 'Normal', 'foogallery' ),
|
155 |
+
'true' => __( 'Random Angles', 'foogallery' )
|
156 |
+
)
|
157 |
+
),
|
158 |
+
|
159 |
+
array(
|
160 |
+
'id' => 'gutter',
|
161 |
+
'title' => __( 'Thumbnail Gutter', 'foogallery' ),
|
162 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
163 |
+
'desc' => __( 'The spacing between each image stack.', 'foogallery' ),
|
164 |
+
'type' => 'number',
|
165 |
+
'default' => 50
|
166 |
+
),
|
167 |
+
|
168 |
+
array(
|
169 |
+
'id' => 'delay',
|
170 |
+
'title' => __( 'Expand Delay', 'foogallery' ),
|
171 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
172 |
+
'desc' => __( 'The delay between expanding each image on a image stack.', 'foogallery' ),
|
173 |
+
'type' => 'number',
|
174 |
+
'default' => 0
|
175 |
+
),
|
176 |
+
|
177 |
+
array(
|
178 |
+
'id' => 'pile_angles',
|
179 |
+
'title' => __( 'Image Stack Angles', 'foogallery' ),
|
180 |
+
'section' => __( 'Thumbnail Settings', 'foogallery' ),
|
181 |
+
'desc' => __( 'The angle of the images behind the thumbnail in each image stack.', 'foogallery' ),
|
182 |
+
'type' => 'radio',
|
183 |
+
'default' => '1',
|
184 |
+
'choices' => array(
|
185 |
+
'1' => __( 'Low', 'foogallery' ),
|
186 |
+
'2' => __( 'Normal', 'foogallery' ),
|
187 |
+
'3' => __( 'More Than Normal', 'foogallery' ),
|
188 |
+
'5' => __( 'High', 'foogallery' ),
|
189 |
+
)
|
190 |
+
)
|
191 |
+
)
|
192 |
+
);
|
193 |
+
|
194 |
+
return apply_filters( 'foogallery_album_templates', $album_templates );
|
195 |
+
}
|
196 |
+
|
197 |
+
function foogallery_determine_best_link_format_default() {
|
198 |
+
global $wp_rewrite;
|
199 |
+
if ( '' === $wp_rewrite->permalink_structure ) {
|
200 |
+
//we are using ?page_id
|
201 |
+
return 'querystring';
|
202 |
+
}
|
203 |
+
|
204 |
+
//we are using permalinks
|
205 |
+
return 'default';
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Returns the default album template
|
210 |
+
*
|
211 |
+
* @return string
|
212 |
+
*/
|
213 |
+
function foogallery_default_album_template() {
|
214 |
+
return foogallery_get_setting( 'album_template' );
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Returns the gallery link url for an album
|
219 |
+
*
|
220 |
+
* @param $album FooGalleryAlbum
|
221 |
+
* @param $gallery FooGallery
|
222 |
+
*
|
223 |
+
* @return string
|
224 |
+
*/
|
225 |
+
function foogallery_album_build_gallery_link( $album, $gallery ) {
|
226 |
+
//first check if we want to use custom URL's
|
227 |
+
$gallery_link = $album->get_meta( 'default_gallery_link', '' );
|
228 |
+
|
229 |
+
if ( 'custom_url' === $gallery_link ) {
|
230 |
+
//check if the gallery has a custom url, and if so, then use it
|
231 |
+
$url = get_post_meta( $gallery->ID, 'custom_url', true );
|
232 |
+
}
|
233 |
+
|
234 |
+
if ( empty( $url ) ) {
|
235 |
+
$slug = foogallery_album_gallery_url_slug();
|
236 |
+
$format = $album->get_meta( 'default_gallery_link_format', 'default' );
|
237 |
+
|
238 |
+
if ( 'default' === $format && 'default' === foogallery_determine_best_link_format_default() ) {
|
239 |
+
$url = untrailingslashit( trailingslashit( get_permalink() ) . $slug . '/' . $gallery->slug );
|
240 |
+
} else {
|
241 |
+
$url = add_query_arg( $slug, $gallery->slug );
|
242 |
+
}
|
243 |
+
|
244 |
+
$use_hash = $album->get_meta( 'default_album_hash', 'remember' );
|
245 |
+
|
246 |
+
if ( 'remember' === $use_hash ) {
|
247 |
+
//add the album hash if required
|
248 |
+
$url .= '#' . $album->slug;
|
249 |
+
}
|
250 |
+
}
|
251 |
+
|
252 |
+
return apply_filters( 'foogallery_album_build_gallery_link', $url );
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Returns the gallery slug used when generating gallery URL's
|
257 |
+
*
|
258 |
+
* @return string
|
259 |
+
*/
|
260 |
+
function foogallery_album_gallery_url_slug() {
|
261 |
+
$slug = foogallery_get_setting( 'album_gallery_slug', 'gallery' );
|
262 |
+
return apply_filters( 'foogallery_album_gallery_url_slug', $slug );
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Returns the gallery link target for an album
|
267 |
+
*
|
268 |
+
* @param $album FooGalleryAlbum
|
269 |
+
* @param $gallery FooGallery
|
270 |
+
*
|
271 |
+
* @return string
|
272 |
+
*/
|
273 |
+
function foogallery_album_build_gallery_link_target( $album, $gallery ) {
|
274 |
+
//first check if we want to use custom URL's
|
275 |
+
$gallery_link = $album->get_meta( 'default_gallery_link', '' );
|
276 |
+
|
277 |
+
if ( 'custom_url' === $gallery_link ) {
|
278 |
+
//check if the gallery has a custom target, and if so, then use it
|
279 |
+
$target = get_post_meta( $gallery->ID, 'custom_target', true );
|
280 |
+
}
|
281 |
+
|
282 |
+
if ( empty( $target ) ) {
|
283 |
+
$target = '_self';
|
284 |
+
}
|
285 |
+
|
286 |
+
return apply_filters( 'foogallery_album_build_gallery_link_target', $target );
|
287 |
+
}
|
288 |
+
|
289 |
+
function foogallery_album_get_current_gallery() {
|
290 |
+
$slug = foogallery_album_gallery_url_slug();
|
291 |
+
|
292 |
+
$gallery = get_query_var( $slug );
|
293 |
+
|
294 |
+
if ( empty( $gallery ) ) {
|
295 |
+
$gallery = safe_get_from_request( $slug );
|
296 |
+
}
|
297 |
+
|
298 |
+
return apply_filters( 'foogallery_album_get_current_gallery', $gallery );
|
299 |
+
}
|
300 |
+
|
301 |
+
function foogallery_album_remove_gallery_from_link() {
|
302 |
+
$gallery = foogallery_album_get_current_gallery();
|
303 |
+
$slug = foogallery_album_gallery_url_slug();
|
304 |
+
|
305 |
+
$url = untrailingslashit( remove_query_arg( $slug ) );
|
306 |
+
|
307 |
+
return str_replace( $slug . '/' . $gallery, '', $url);
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Get a foogallery album template setting for the current foogallery that is being output to the frontend
|
312 |
+
* @param string $key
|
313 |
+
* @param string $default
|
314 |
+
*
|
315 |
+
* @return bool
|
316 |
+
*/
|
317 |
+
function foogallery_album_template_setting( $key, $default = '' ) {
|
318 |
+
global $current_foogallery_album;
|
319 |
+
global $current_foogallery_album_arguments;
|
320 |
+
global $current_foogallery_album_template;
|
321 |
+
|
322 |
+
$settings_key = "{$current_foogallery_album_template}_{$key}";
|
323 |
+
|
324 |
+
if ( $current_foogallery_album_arguments && array_key_exists( $key, $current_foogallery_album_arguments ) ) {
|
325 |
+
//try to get the value from the arguments
|
326 |
+
$value = $current_foogallery_album_arguments[ $key ];
|
327 |
+
|
328 |
+
} else if ( $current_foogallery_album->settings && array_key_exists( $settings_key, $current_foogallery_album->settings ) ) {
|
329 |
+
//then get the value out of the saved gallery settings
|
330 |
+
$value = $current_foogallery_album->settings[ $settings_key ];
|
331 |
+
} else {
|
332 |
+
//otherwise set it to the default
|
333 |
+
$value = $default;
|
334 |
+
}
|
335 |
+
|
336 |
+
$value = apply_filters( 'foogallery_album_template_setting-' . $key, $value );
|
337 |
+
|
338 |
+
return $value;
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* uninstall all albums and setting for albums
|
343 |
+
*/
|
344 |
+
function foogallery_album_uninstall() {
|
345 |
+
if ( !current_user_can( 'install_plugins' ) ) exit;
|
346 |
+
|
347 |
+
//delete all albums posts
|
348 |
+
global $wpdb;
|
349 |
+
$query = "SELECT p.ID FROM {$wpdb->posts} AS p WHERE p.post_type IN (%s)";
|
350 |
+
$gallery_post_ids = $wpdb->get_col( $wpdb->prepare( $query, FOOGALLERY_CPT_ALBUM ) );
|
351 |
+
|
352 |
+
if ( !empty( $gallery_post_ids ) ) {
|
353 |
+
$deleted = 0;
|
354 |
+
foreach ( $gallery_post_ids as $post_id ) {
|
355 |
+
$del = wp_delete_post( $post_id );
|
356 |
+
if ( false !== $del ) {
|
357 |
+
++$deleted;
|
358 |
+
}
|
359 |
+
}
|
360 |
+
}
|
361 |
}
|
extensions/albums/js/admin-foogallery-album.js
CHANGED
@@ -1,148 +1,148 @@
|
|
1 |
-
(function(FOOGALLERYALBUM, $, undefined) {
|
2 |
-
|
3 |
-
FOOGALLERYALBUM.bindElements = function() {
|
4 |
-
$('.foogallery-album-gallery-list')
|
5 |
-
.on('click', '.foogallery-gallery-select', function(e) {
|
6 |
-
$(this).toggleClass('selected');
|
7 |
-
FOOGALLERYALBUM.changeSelection();
|
8 |
-
})
|
9 |
-
.sortable({
|
10 |
-
items: 'li',
|
11 |
-
distance: 10,
|
12 |
-
placeholder: 'attachment placeholder',
|
13 |
-
stop : function() {
|
14 |
-
FOOGALLERYALBUM.changeSelection();
|
15 |
-
}
|
16 |
-
});
|
17 |
-
|
18 |
-
//init any colorpickers
|
19 |
-
$('.colorpicker').spectrum({
|
20 |
-
preferredFormat: "rgb",
|
21 |
-
showInput: true,
|
22 |
-
clickoutFiresChange: true
|
23 |
-
});
|
24 |
-
|
25 |
-
$('.foogallery-album-info-modal').prependTo('body');
|
26 |
-
};
|
27 |
-
|
28 |
-
FOOGALLERYALBUM.changeSelection = function() {
|
29 |
-
var ids = '',
|
30 |
-
none = true;
|
31 |
-
$('.foogallery-gallery-select.selected').each(function() {
|
32 |
-
ids += $(this).data('foogallery-id') + ',';
|
33 |
-
none = false;
|
34 |
-
});
|
35 |
-
|
36 |
-
if (!none) {
|
37 |
-
ids = ids.substring(0, ids.length - 1);
|
38 |
-
}
|
39 |
-
//build up the list of ids
|
40 |
-
$('#foogallery_album_galleries').val(ids);
|
41 |
-
};
|
42 |
-
|
43 |
-
FOOGALLERYALBUM.initSettings = function() {
|
44 |
-
$('#FooGallerySettings_AlbumTemplate').change(function() {
|
45 |
-
var $this = $(this),
|
46 |
-
selectedTemplate = $this.val();
|
47 |
-
|
48 |
-
//hide all template fields
|
49 |
-
$('.foogallery-album-metabox-settings .foogallery_template_field').not('.foogallery_template_field_selector').hide();
|
50 |
-
|
51 |
-
//show all fields for the selected template only
|
52 |
-
$('.foogallery-album-metabox-settings .foogallery_template_field-' + selectedTemplate).show();
|
53 |
-
|
54 |
-
//trigger a change so custom template js can do something
|
55 |
-
FOOGALLERYALBUM.triggerTemplateChangedEvent();
|
56 |
-
});
|
57 |
-
|
58 |
-
//trigger this onload too!
|
59 |
-
FOOGALLERYALBUM.triggerTemplateChangedEvent();
|
60 |
-
};
|
61 |
-
|
62 |
-
FOOGALLERYALBUM.triggerTemplateChangedEvent = function() {
|
63 |
-
var selectedTemplate = $('#FooGallerySettings_AlbumTemplate').val();
|
64 |
-
$('body').trigger('foogallery-album-template-changed-' + selectedTemplate );
|
65 |
-
};
|
66 |
-
|
67 |
-
FOOGALLERYALBUM.initAlbumInfoButtons = function() {
|
68 |
-
$('.foogallery-album-gallery-list .attachment-preview').on('click', 'a.info', function(e) {
|
69 |
-
|
70 |
-
e.preventDefault();
|
71 |
-
|
72 |
-
e.stopPropagation();
|
73 |
-
|
74 |
-
var $this = $(this),
|
75 |
-
$modal = $('.foogallery-album-info-modal'),
|
76 |
-
$spinner = $modal.find('.media-frame-title .spinner'),
|
77 |
-
$nonce = $modal.find('#foogallery_album_gallery_details_nonce'),
|
78 |
-
$details = $modal.find('.gallery-details'),
|
79 |
-
data = 'action=foogallery_get_gallery_details' +
|
80 |
-
'&foogallery_id=' + $this.data('gallery-id') +
|
81 |
-
'&_wpnonce=' + $nonce.val() +
|
82 |
-
'&_wp_http_referer=' + encodeURIComponent($('input[name="_wp_http_referer"]').val());
|
83 |
-
|
84 |
-
$details.html( $details.data('loading') + $this.data('gallery-title') + '...' );
|
85 |
-
$spinner.addClass('is-active');
|
86 |
-
|
87 |
-
$.ajax({
|
88 |
-
type: "POST",
|
89 |
-
url: ajaxurl,
|
90 |
-
data: data,
|
91 |
-
success: function(data) {
|
92 |
-
$details.html(data);
|
93 |
-
},
|
94 |
-
complete: function() {
|
95 |
-
$spinner.removeClass('is-active');
|
96 |
-
}
|
97 |
-
});
|
98 |
-
|
99 |
-
$modal.show();
|
100 |
-
$('.media-modal-backdrop').show();
|
101 |
-
});
|
102 |
-
|
103 |
-
$('.foogallery-album-info-modal .gallery-details-save').on('click', function(e) {
|
104 |
-
e.preventDefault();
|
105 |
-
|
106 |
-
var $this = $(this),
|
107 |
-
$modal = $('.foogallery-album-info-modal'),
|
108 |
-
$spinner = $modal.find('.media-frame-toolbar .spinner'),
|
109 |
-
$nonce = $modal.find('#foogallery_album_gallery_details_nonce'),
|
110 |
-
$form = $modal.find('form[name="foogallery_gallery_details"]'),
|
111 |
-
data = 'action=foogallery_save_gallery_details' +
|
112 |
-
'&_wpnonce=' + $nonce.val() +
|
113 |
-
'&_wp_http_referer=' + encodeURIComponent($('input[name="_wp_http_referer"]').val()) +
|
114 |
-
'& ' + $form.serialize();
|
115 |
-
|
116 |
-
$this.attr('disabled', 'disabled');
|
117 |
-
$spinner.addClass('is-active');
|
118 |
-
|
119 |
-
$.ajax({
|
120 |
-
type: "POST",
|
121 |
-
url: ajaxurl,
|
122 |
-
data: data,
|
123 |
-
success: function() {
|
124 |
-
$('.foogallery-album-info-modal').hide();
|
125 |
-
$('.media-modal-backdrop').hide();
|
126 |
-
},
|
127 |
-
complete: function() {
|
128 |
-
$spinner.removeClass('is-active');
|
129 |
-
$this.removeAttr('disabled');
|
130 |
-
}
|
131 |
-
});
|
132 |
-
});
|
133 |
-
|
134 |
-
$('.foogallery-album-info-modal .media-modal-close').on('click', function() {
|
135 |
-
$('.foogallery-album-info-modal').hide();
|
136 |
-
$('.media-modal-backdrop').hide();
|
137 |
-
});
|
138 |
-
};
|
139 |
-
|
140 |
-
$(function() { //wait for ready
|
141 |
-
FOOGALLERYALBUM.bindElements();
|
142 |
-
|
143 |
-
FOOGALLERYALBUM.initSettings();
|
144 |
-
|
145 |
-
FOOGALLERYALBUM.initAlbumInfoButtons();
|
146 |
-
});
|
147 |
-
|
148 |
}(window.FOOGALLERYALBUM = window.FOOGALLERYALBUM || {}, jQuery));
|
1 |
+
(function(FOOGALLERYALBUM, $, undefined) {
|
2 |
+
|
3 |
+
FOOGALLERYALBUM.bindElements = function() {
|
4 |
+
$('.foogallery-album-gallery-list')
|
5 |
+
.on('click', '.foogallery-gallery-select', function(e) {
|
6 |
+
$(this).toggleClass('selected');
|
7 |
+
FOOGALLERYALBUM.changeSelection();
|
8 |
+
})
|
9 |
+
.sortable({
|
10 |
+
items: 'li',
|
11 |
+
distance: 10,
|
12 |
+
placeholder: 'attachment placeholder',
|
13 |
+
stop : function() {
|
14 |
+
FOOGALLERYALBUM.changeSelection();
|
15 |
+
}
|
16 |
+
});
|
17 |
+
|
18 |
+
//init any colorpickers
|
19 |
+
$('.colorpicker').spectrum({
|
20 |
+
preferredFormat: "rgb",
|
21 |
+
showInput: true,
|
22 |
+
clickoutFiresChange: true
|
23 |
+
});
|
24 |
+
|
25 |
+
$('.foogallery-album-info-modal').prependTo('body');
|
26 |
+
};
|
27 |
+
|
28 |
+
FOOGALLERYALBUM.changeSelection = function() {
|
29 |
+
var ids = '',
|
30 |
+
none = true;
|
31 |
+
$('.foogallery-gallery-select.selected').each(function() {
|
32 |
+
ids += $(this).data('foogallery-id') + ',';
|
33 |
+
none = false;
|
34 |
+
});
|
35 |
+
|
36 |
+
if (!none) {
|
37 |
+
ids = ids.substring(0, ids.length - 1);
|
38 |
+
}
|
39 |
+
//build up the list of ids
|
40 |
+
$('#foogallery_album_galleries').val(ids);
|
41 |
+
};
|
42 |
+
|
43 |
+
FOOGALLERYALBUM.initSettings = function() {
|
44 |
+
$('#FooGallerySettings_AlbumTemplate').change(function() {
|
45 |
+
var $this = $(this),
|
46 |
+
selectedTemplate = $this.val();
|
47 |
+
|
48 |
+
//hide all template fields
|
49 |
+
$('.foogallery-album-metabox-settings .foogallery_template_field').not('.foogallery_template_field_selector').hide();
|
50 |
+
|
51 |
+
//show all fields for the selected template only
|
52 |
+
$('.foogallery-album-metabox-settings .foogallery_template_field-' + selectedTemplate).show();
|
53 |
+
|
54 |
+
//trigger a change so custom template js can do something
|
55 |
+
FOOGALLERYALBUM.triggerTemplateChangedEvent();
|
56 |
+
});
|
57 |
+
|
58 |
+
//trigger this onload too!
|
59 |
+
FOOGALLERYALBUM.triggerTemplateChangedEvent();
|
60 |
+
};
|
61 |
+
|
62 |
+
FOOGALLERYALBUM.triggerTemplateChangedEvent = function() {
|
63 |
+
var selectedTemplate = $('#FooGallerySettings_AlbumTemplate').val();
|
64 |
+
$('body').trigger('foogallery-album-template-changed-' + selectedTemplate );
|
65 |
+
};
|
66 |
+
|
67 |
+
FOOGALLERYALBUM.initAlbumInfoButtons = function() {
|
68 |
+
$('.foogallery-album-gallery-list .attachment-preview').on('click', 'a.info', function(e) {
|
69 |
+
|
70 |
+
e.preventDefault();
|
71 |
+
|
72 |
+
e.stopPropagation();
|
73 |
+
|
74 |
+
var $this = $(this),
|
75 |
+
$modal = $('.foogallery-album-info-modal'),
|
76 |
+
$spinner = $modal.find('.media-frame-title .spinner'),
|
77 |
+
$nonce = $modal.find('#foogallery_album_gallery_details_nonce'),
|
78 |
+
$details = $modal.find('.gallery-details'),
|
79 |
+
data = 'action=foogallery_get_gallery_details' +
|
80 |
+
'&foogallery_id=' + $this.data('gallery-id') +
|
81 |
+
'&_wpnonce=' + $nonce.val() +
|
82 |
+
'&_wp_http_referer=' + encodeURIComponent($('input[name="_wp_http_referer"]').val());
|
83 |
+
|
84 |
+
$details.html( $details.data('loading') + $this.data('gallery-title') + '...' );
|
85 |
+
$spinner.addClass('is-active');
|
86 |
+
|
87 |
+
$.ajax({
|
88 |
+
type: "POST",
|
89 |
+
url: ajaxurl,
|
90 |
+
data: data,
|
91 |
+
success: function(data) {
|
92 |
+
$details.html(data);
|
93 |
+
},
|
94 |
+
complete: function() {
|
95 |
+
$spinner.removeClass('is-active');
|
96 |
+
}
|
97 |
+
});
|
98 |
+
|
99 |
+
$modal.show();
|
100 |
+
$('.media-modal-backdrop').show();
|
101 |
+
});
|
102 |
+
|
103 |
+
$('.foogallery-album-info-modal .gallery-details-save').on('click', function(e) {
|
104 |
+
e.preventDefault();
|
105 |
+
|
106 |
+
var $this = $(this),
|
107 |
+
$modal = $('.foogallery-album-info-modal'),
|
108 |
+
$spinner = $modal.find('.media-frame-toolbar .spinner'),
|
109 |
+
$nonce = $modal.find('#foogallery_album_gallery_details_nonce'),
|
110 |
+
$form = $modal.find('form[name="foogallery_gallery_details"]'),
|
111 |
+
data = 'action=foogallery_save_gallery_details' +
|
112 |
+
'&_wpnonce=' + $nonce.val() +
|
113 |
+
'&_wp_http_referer=' + encodeURIComponent($('input[name="_wp_http_referer"]').val()) +
|
114 |
+
'& ' + $form.serialize();
|
115 |
+
|
116 |
+
$this.attr('disabled', 'disabled');
|
117 |
+
$spinner.addClass('is-active');
|
118 |
+
|
119 |
+
$.ajax({
|
120 |
+
type: "POST",
|
121 |
+
url: ajaxurl,
|
122 |
+
data: data,
|
123 |
+
success: function() {
|
124 |
+
$('.foogallery-album-info-modal').hide();
|
125 |
+
$('.media-modal-backdrop').hide();
|
126 |
+
},
|
127 |
+
complete: function() {
|
128 |
+
$spinner.removeClass('is-active');
|
129 |
+
$this.removeAttr('disabled');
|
130 |
+
}
|
131 |
+
});
|
132 |
+
});
|
133 |
+
|
134 |
+
$('.foogallery-album-info-modal .media-modal-close').on('click', function() {
|
135 |
+
$('.foogallery-album-info-modal').hide();
|
136 |
+
$('.media-modal-backdrop').hide();
|
137 |
+
});
|
138 |
+
};
|
139 |
+
|
140 |
+
$(function() { //wait for ready
|
141 |
+
FOOGALLERYALBUM.bindElements();
|
142 |
+
|
143 |
+
FOOGALLERYALBUM.initSettings();
|
144 |
+
|
145 |
+
FOOGALLERYALBUM.initAlbumInfoButtons();
|
146 |
+
});
|
147 |
+
|
148 |
}(window.FOOGALLERYALBUM = window.FOOGALLERYALBUM || {}, jQuery));
|
extensions/albums/js/album-stack.js
CHANGED
@@ -1,863 +1,863 @@
|
|
1 |
-
/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
|
2 |
-
* Build: http://modernizr.com/download/#-csstransitions-prefixed-testprop-testallprops-domprefixes
|
3 |
-
*/
|
4 |
-
if (!window.FooGalleryStackAlbumModernizr) {
|
5 |
-
window.FooGalleryStackAlbumModernizr=function(a,b,c){function w(a){i.cssText=a}function x(a,b){return w(prefixes.join(a+";")+(b||""))}function y(a,b){return typeof a===b}function z(a,b){return!!~(""+a).indexOf(b)}function A(a,b){for(var d in a){var e=a[d];if(!z(e,"-")&&i[e]!==c)return b=="pfx"?e:!0}return!1}function B(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:y(f,"function")?f.bind(d||b):f}return!1}function C(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+m.join(d+" ")+d).split(" ");return y(b,"string")||y(b,"undefined")?A(e,b):(e=(a+" "+n.join(d+" ")+d).split(" "),B(e,b,c))}var d="2.8.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j,k={}.toString,l="Webkit Moz O ms",m=l.split(" "),n=l.toLowerCase().split(" "),o={},p={},q={},r=[],s=r.slice,t,u={}.hasOwnProperty,v;!y(u,"undefined")&&!y(u.call,"undefined")?v=function(a,b){return u.call(a,b)}:v=function(a,b){return b in a&&y(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=s.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(s.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(s.call(arguments)))};return e}),o.csstransitions=function(){return C("transition")};for(var D in o)v(o,D)&&(t=D.toLowerCase(),e[t]=o[D](),r.push((e[t]?"":"no-")+t));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)v(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},w(""),h=j=null,e._version=d,e._domPrefixes=n,e._cssomPrefixes=m,e.testProp=function(a){return A([a])},e.testAllProps=C,e.prefixed=function(a,b,c){return b?C(a,b,c):C(a,"pfx")},e}(this,this.document);
|
6 |
-
}
|
7 |
-
|
8 |
-
/**
|
9 |
-
* jquery.stapel.js v1.0.0
|
10 |
-
* http://www.codrops.com
|
11 |
-
*
|
12 |
-
* Licensed under the MIT license.
|
13 |
-
* http://www.opensource.org/licenses/mit-license.php
|
14 |
-
*
|
15 |
-
* Copyright 2012, Codrops
|
16 |
-
* http://www.codrops.com
|
17 |
-
*/
|
18 |
-
;( function( $, window, undefined ) {
|
19 |
-
|
20 |
-
'use strict';
|
21 |
-
|
22 |
-
/*
|
23 |
-
* debouncedresize: special jQuery event that happens once after a window resize
|
24 |
-
*
|
25 |
-
* latest version and complete README available on Github:
|
26 |
-
* https://github.com/louisremi/jquery-smartresize/blob/master/jquery.debouncedresize.js
|
27 |
-
*
|
28 |
-
* Copyright 2011 @louis_remi
|
29 |
-
* Licensed under the MIT license.
|
30 |
-
*/
|
31 |
-
var $event = $.event,
|
32 |
-
$special,
|
33 |
-
resizeTimeout;
|
34 |
-
|
35 |
-
$special = $event.special.debouncedresize = {
|
36 |
-
setup: function() {
|
37 |
-
$( this ).on( "resize", $special.handler );
|
38 |
-
},
|
39 |
-
teardown: function() {
|
40 |
-
$( this ).off( "resize", $special.handler );
|
41 |
-
},
|
42 |
-
handler: function( event, execAsap ) {
|
43 |
-
// Save the context
|
44 |
-
var context = this,
|
45 |
-
args = arguments,
|
46 |
-
dispatch = function() {
|
47 |
-
// set correct event type
|
48 |
-
event.type = "debouncedresize";
|
49 |
-
$event.dispatch.apply( context, args );
|
50 |
-
};
|
51 |
-
|
52 |
-
if ( resizeTimeout ) {
|
53 |
-
clearTimeout( resizeTimeout );
|
54 |
-
}
|
55 |
-
|
56 |
-
execAsap ?
|
57 |
-
dispatch() :
|
58 |
-
resizeTimeout = setTimeout( dispatch, $special.threshold );
|
59 |
-
},
|
60 |
-
threshold: 150
|
61 |
-
};
|
62 |
-
|
63 |
-
// ======================= imagesLoaded Plugin ===============================
|
64 |
-
// https://github.com/desandro/imagesloaded
|
65 |
-
|
66 |
-
// $('#my-container').imagesLoaded(myFunction)
|
67 |
-
// execute a callback when all images have loaded.
|
68 |
-
// needed because .load() doesn't work on cached images
|
69 |
-
|
70 |
-
// callback function gets image collection as argument
|
71 |
-
// this is the container
|
72 |
-
|
73 |
-
// original: mit license. paul irish. 2010.
|
74 |
-
// contributors: Oren Solomianik, David DeSandro, Yiannis Chatzikonstantinou
|
75 |
-
|
76 |
-
// blank image data-uri bypasses webkit log warning (thx doug jones)
|
77 |
-
var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
|
78 |
-
|
79 |
-
$.fn.imagesLoaded = function( callback ) {
|
80 |
-
var $this = this,
|
81 |
-
deferred = $.isFunction($.Deferred) ? $.Deferred() : 0,
|
82 |
-
hasNotify = $.isFunction(deferred.notify),
|
83 |
-
$images = $this.find('img').add( $this.filter('img') ),
|
84 |
-
loaded = [],
|
85 |
-
proper = [],
|
86 |
-
broken = [];
|
87 |
-
|
88 |
-
// Register deferred callbacks
|
89 |
-
if ($.isPlainObject(callback)) {
|
90 |
-
$.each(callback, function (key, value) {
|
91 |
-
if (key === 'callback') {
|
92 |
-
callback = value;
|
93 |
-
} else if (deferred) {
|
94 |
-
deferred[key](value);
|
95 |
-
}
|
96 |
-
});
|
97 |
-
}
|
98 |
-
|
99 |
-
function doneLoading() {
|
100 |
-
var $proper = $(proper),
|
101 |
-
$broken = $(broken);
|
102 |
-
|
103 |
-
if ( deferred ) {
|
104 |
-
if ( broken.length ) {
|
105 |
-
deferred.reject( $images, $proper, $broken );
|
106 |
-
} else {
|
107 |
-
deferred.resolve( $images );
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
if ( $.isFunction( callback ) ) {
|
112 |
-
callback.call( $this, $images, $proper, $broken );
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
function imgLoaded( img, isBroken ) {
|
117 |
-
// don't proceed if BLANK image, or image is already loaded
|
118 |
-
if ( img.src === BLANK || $.inArray( img, loaded ) !== -1 ) {
|
119 |
-
return;
|
120 |
-
}
|
121 |
-
|
122 |
-
// store element in loaded images array
|
123 |
-
loaded.push( img );
|
124 |
-
|
125 |
-
// keep track of broken and properly loaded images
|
126 |
-
if ( isBroken ) {
|
127 |
-
broken.push( img );
|
128 |
-
} else {
|
129 |
-
proper.push( img );
|
130 |
-
}
|
131 |
-
|
132 |
-
// cache image and its state for future calls
|
133 |
-
$.data( img, 'imagesLoaded', { isBroken: isBroken, src: img.src } );
|
134 |
-
|
135 |
-
// trigger deferred progress method if present
|
136 |
-
if ( hasNotify ) {
|
137 |
-
deferred.notifyWith( $(img), [ isBroken, $images, $(proper), $(broken) ] );
|
138 |
-
}
|
139 |
-
|
140 |
-
// call doneLoading and clean listeners if all images are loaded
|
141 |
-
if ( $images.length === loaded.length ){
|
142 |
-
setTimeout( doneLoading );
|
143 |
-
$images.unbind( '.imagesLoaded' );
|
144 |
-
}
|
145 |
-
}
|
146 |
-
|
147 |
-
// if no images, trigger immediately
|
148 |
-
if ( !$images.length ) {
|
149 |
-
doneLoading();
|
150 |
-
} else {
|
151 |
-
$images.bind( 'load.imagesLoaded error.imagesLoaded', function( event ){
|
152 |
-
// trigger imgLoaded
|
153 |
-
imgLoaded( event.target, event.type === 'error' );
|
154 |
-
}).each( function( i, el ) {
|
155 |
-
var src = el.src;
|
156 |
-
|
157 |
-
// find out if this image has been already checked for status
|
158 |
-
// if it was, and src has not changed, call imgLoaded on it
|
159 |
-
var cached = $.data( el, 'imagesLoaded' );
|
160 |
-
if ( cached && cached.src === src ) {
|
161 |
-
imgLoaded( el, cached.isBroken );
|
162 |
-
return;
|
163 |
-
}
|
164 |
-
|
165 |
-
// if complete is true and browser supports natural sizes, try
|
166 |
-
// to check for image status manually
|
167 |
-
if ( el.complete && el.naturalWidth !== undefined ) {
|
168 |
-
imgLoaded( el, el.naturalWidth === 0 || el.naturalHeight === 0 );
|
169 |
-
return;
|
170 |
-
}
|
171 |
-
|
172 |
-
// cached images don't fire load sometimes, so we reset src, but only when
|
173 |
-
// dealing with IE, or image is complete (loaded) and failed manual check
|
174 |
-
// webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
|
175 |
-
if ( el.readyState || el.complete ) {
|
176 |
-
el.src = BLANK;
|
177 |
-
el.src = src;
|
178 |
-
}
|
179 |
-
});
|
180 |
-
}
|
181 |
-
|
182 |
-
return deferred ? deferred.promise( $this ) : $this;
|
183 |
-
};
|
184 |
-
|
185 |
-
// global
|
186 |
-
var $window = $( window ),
|
187 |
-
FooGalleryStackAlbumModernizr = window.FooGalleryStackAlbumModernizr;
|
188 |
-
|
189 |
-
$.Stapel = function( options, element ) {
|
190 |
-
|
191 |
-
this.el = $( element );
|
192 |
-
this._init( options );
|
193 |
-
|
194 |
-
};
|
195 |
-
|
196 |
-
// the options
|
197 |
-
$.Stapel.defaults = {
|
198 |
-
// space between the items
|
199 |
-
gutter : 40,
|
200 |
-
// the rotations degree for the 2nd and 3rd item
|
201 |
-
// (to give a more realistic pile effect)
|
202 |
-
pileAngles : 2,
|
203 |
-
// animation settings for the clicked pile's items
|
204 |
-
pileAnimation : {
|
205 |
-
openSpeed : 400,
|
206 |
-
openEasing : 'ease-in-out', // try this :) 'cubic-bezier(.47,1.34,.9,1.03)',
|
207 |
-
closeSpeed : 400,
|
208 |
-
closeEasing : 'ease-in-out'
|
209 |
-
},
|
210 |
-
// animation settings for the other piles
|
211 |
-
otherPileAnimation : {
|
212 |
-
openSpeed : 400,
|
213 |
-
openEasing : 'ease-in-out',
|
214 |
-
closeSpeed : 350,
|
215 |
-
closeEasing : 'ease-in-out'
|
216 |
-
},
|
217 |
-
// delay for each item of the pile
|
218 |
-
delay : 0,
|
219 |
-
// random rotation for the items once opened
|
220 |
-
randomAngle : false,
|
221 |
-
onLoad : function() { return false; },
|
222 |
-
onBeforeOpen : function( pileName ) { return false; },
|
223 |
-
onAfterOpen : function( pileName, totalItems ) { return false; },
|
224 |
-
onBeforeClose : function( pileName ) { return false; },
|
225 |
-
onAfterClose : function( pileName, totalItems ) { return false; }
|
226 |
-
};
|
227 |
-
|
228 |
-
$.Stapel.prototype = {
|
229 |
-
|
230 |
-
_init : function( options ) {
|
231 |
-
|
232 |
-
// options
|
233 |
-
this.options = $.extend( true, {}, $.Stapel.defaults, options );
|
234 |
-
|
235 |
-
// cache some elements
|
236 |
-
this._config();
|
237 |
-
|
238 |
-
// preload images
|
239 |
-
var self = this;
|
240 |
-
this.el.imagesLoaded( function() {
|
241 |
-
self.options.onLoad();
|
242 |
-
self._layout();
|
243 |
-
self._initEvents();
|
244 |
-
if (typeof FOOBOX != 'undefined') {
|
245 |
-
FOOBOX.init();
|
246 |
-
}
|
247 |
-
} );
|
248 |
-
|
249 |
-
},
|
250 |
-
_config : function() {
|
251 |
-
|
252 |
-
// css transitions support
|
253 |
-
this.support = FooGalleryStackAlbumModernizr.csstransitions;
|
254 |
-
|
255 |
-
var transEndEventNames = {
|
256 |
-
'WebkitTransition' : 'webkitTransitionEnd',
|
257 |
-
'MozTransition' : 'transitionend',
|
258 |
-
'OTransition' : 'oTransitionEnd',
|
259 |
-
'msTransition' : 'MSTransitionEnd',
|
260 |
-
'transition' : 'transitionend'
|
261 |
-
},
|
262 |
-
transformNames = {
|
263 |
-
'WebkitTransform' : '-webkit-transform',
|
264 |
-
'MozTransform' : '-moz-transform',
|
265 |
-
'OTransform' : '-o-transform',
|
266 |
-
'msTransform' : '-ms-transform',
|
267 |
-
'transform' : 'transform'
|
268 |
-
};
|
269 |
-
|
270 |
-
if( this.support ) {
|
271 |
-
|
272 |
-
this.transEndEventName = transEndEventNames[ FooGalleryStackAlbumModernizr.prefixed( 'transition' ) ] + '.cbpFWSlider';
|
273 |
-
this.transformName = transformNames[ FooGalleryStackAlbumModernizr.prefixed( 'transform' ) ];
|
274 |
-
|
275 |
-
}
|
276 |
-
|
277 |
-
// true if one pile is opened
|
278 |
-
this.spread = false;
|
279 |
-
|
280 |
-
// the li's
|
281 |
-
this.items = this.el.children( 'li' ).hide();
|
282 |
-
|
283 |
-
// close pile
|
284 |
-
this.close = $( '#tp-close' );
|
285 |
-
|
286 |
-
},
|
287 |
-
_getSize : function() {
|
288 |
-
|
289 |
-
this.elWidth = this.el.outerWidth( true );
|
290 |
-
|
291 |
-
},
|
292 |
-
_initEvents : function() {
|
293 |
-
|
294 |
-
var self = this;
|
295 |
-
$window.on( 'debouncedresize.stapel', function() { self._resize(); } );
|
296 |
-
this.items.on( 'click.stapel', function() {
|
297 |
-
|
298 |
-
var $item = $( this );
|
299 |
-
|
300 |
-
if( !self.spread && $item.data( 'isPile' ) ) {
|
301 |
-
|
302 |
-
self.spread = true;
|
303 |
-
self.pileName = $item.data( 'pileName' );
|
304 |
-
self.options.onBeforeOpen( self.pileName );
|
305 |
-
self._openPile();
|
306 |
-
|
307 |
-
return false;
|
308 |
-
|
309 |
-
}
|
310 |
-
|
311 |
-
} );
|
312 |
-
|
313 |
-
},
|
314 |
-
_layout : function() {
|
315 |
-
|
316 |
-
/*
|
317 |
-
piles() : save the items info in a object with the following structure:
|
318 |
-
|
319 |
-
this.piles = {
|
320 |
-
|
321 |
-
pileName : {
|
322 |
-
|
323 |
-
// elements of this pile (note that an element can be also in a different pile)
|
324 |
-
// for each element, the finalPosition is the position of the element when the pile is opened
|
325 |
-
elements : [
|
326 |
-
{ el : HTMLELEMENT, finalPosition : { left : LEFT, top : TOP } },
|
327 |
-
{},
|
328 |
-
{},
|
329 |
-
...
|
330 |
-
],
|
331 |
-
// this is the position of the pile (all elements of the pile) when the pile is closed
|
332 |
-
position : { left : LEFT, top : TOP },
|
333 |
-
index : INDEX
|
334 |
-
},
|
335 |
-
|
336 |
-
// more piles
|
337 |
-
...
|
338 |
-
|
339 |
-
}
|
340 |
-
*/
|
341 |
-
this._piles();
|
342 |
-
|
343 |
-
// items width & height
|
344 |
-
// assuming here that all items have the same width and height
|
345 |
-
this.itemSize = { width : this.items.outerWidth( true ) , height : this.items.outerHeight( true ) };
|
346 |
-
|
347 |
-
// remove original elements
|
348 |
-
this.items.remove();
|
349 |
-
|
350 |
-
// applies some initial style for the items
|
351 |
-
this._setInitialStyle();
|
352 |
-
|
353 |
-
this.el.css( 'min-width', this.itemSize.width + this.options.gutter );
|
354 |
-
|
355 |
-
// gets the current ul size (needed for the calculation of each item's position)
|
356 |
-
this._getSize();
|
357 |
-
|
358 |
-
// calculate and set each Pile's elements position based on the current ul width
|
359 |
-
// this function will also be called on window resize
|
360 |
-
this._setItemsPosition();
|
361 |
-
|
362 |
-
// new items
|
363 |
-
this.items = this.el.children( 'li' ).show();
|
364 |
-
// total items
|
365 |
-
this.itemsCount = this.items.length;
|
366 |
-
|
367 |
-
},
|
368 |
-
_piles : function() {
|
369 |
-
|
370 |
-
var piles = {};
|
371 |
-
this.pilesArr = [];
|
372 |
-
var pile, self = this, idx = 0;
|
373 |
-
this.items.each( function() {
|
374 |
-
|
375 |
-
var $item = $( this ),
|
376 |
-
itemPile = $item.attr( 'data-pile' ) || 'nopile-' + $item.index(),
|
377 |
-
attr = itemPile.split( ',' );
|
378 |
-
|
379 |
-
for( var i = 0, total = attr.length; i < total; ++i ) {
|
380 |
-
|
381 |
-
var pileName = $.trim( attr[i] );
|
382 |
-
pile = piles[ pileName ];
|
383 |
-
|
384 |
-
if( !pile ) {
|
385 |
-
|
386 |
-
pile = piles[ pileName ] = {
|
387 |
-
name : pileName,
|
388 |
-
elements : [],
|
389 |
-
position : { left : 0, top : 0 },
|
390 |
-
index : idx
|
391 |
-
};
|
392 |
-
|
393 |
-
self.pilesArr.push(pile);
|
394 |
-
|
395 |
-
++idx;
|
396 |
-
|
397 |
-
}
|
398 |
-
|
399 |
-
var clone = $item.clone().get(0);
|
400 |
-
pile.elements.push( { el : clone, finalPosition : { left : 0, top : 0 } } );
|
401 |
-
var $clone = $(clone);
|
402 |
-
$clone.appendTo(self.el);
|
403 |
-
}
|
404 |
-
|
405 |
-
} );
|
406 |
-
|
407 |
-
},
|
408 |
-
_setInitialStyle : function() {
|
409 |
-
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
410 |
-
|
411 |
-
var p = this.pilesArr[j];
|
412 |
-
|
413 |
-
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
414 |
-
|
415 |
-
var $el = $( p.elements[i].el ),
|
416 |
-
styleCSS = { transform : 'rotate(0deg)' };
|
417 |
-
|
418 |
-
this._applyInitialTransition( $el );
|
419 |
-
|
420 |
-
if( i === len - 2 ) {
|
421 |
-
styleCSS = { transform : 'rotate(' + this.options.pileAngles + 'deg)' };
|
422 |
-
}
|
423 |
-
else if( i === len - 3 ) {
|
424 |
-
styleCSS = { transform : 'rotate(-' + this.options.pileAngles + 'deg)' };
|
425 |
-
}
|
426 |
-
else if( i !== len - 1 ) {
|
427 |
-
var extraStyle = { visibility : 'hidden' };
|
428 |
-
$el.css( extraStyle ).data( 'extraStyle', extraStyle );
|
429 |
-
}
|
430 |
-
else if( p.name.substr( 0, 6 ) !== 'nopile' ) {
|
431 |
-
$el.data( 'front', true ).append( '<div class="tp-title-cover"><div class="tp-title"><span>' + p.name + '</span><span>' + len + '</span></div></div>' );
|
432 |
-
}
|
433 |
-
|
434 |
-
$el.css( styleCSS ).data( {
|
435 |
-
initialStyle : styleCSS,
|
436 |
-
pileName : p.name,
|
437 |
-
pileCount : len,
|
438 |
-
shadow : $el.css( 'box-shadow' ),
|
439 |
-
isPile : p.name.substr( 0, 6 ) === 'nopile' ? false : true
|
440 |
-
} );
|
441 |
-
|
442 |
-
}
|
443 |
-
|
444 |
-
}
|
445 |
-
|
446 |
-
},
|
447 |
-
_applyInitialTransition : function( $el ) {
|
448 |
-
|
449 |
-
if( this.support ) {
|
450 |
-
$el.css( 'transition', 'left 400ms ease-in-out, top 400ms ease-in-out' );
|
451 |
-
}
|
452 |
-
|
453 |
-
},
|
454 |
-
_setItemsPosition : function() {
|
455 |
-
|
456 |
-
var accumL = 0, accumT = 0,
|
457 |
-
l, t, ml = 0,
|
458 |
-
lastItemTop = 0;
|
459 |
-
|
460 |
-
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
461 |
-
|
462 |
-
var p = this.pilesArr[j],
|
463 |
-
|
464 |
-
//for( var pile in this.piles ) {
|
465 |
-
//
|
466 |
-
// var p = this.piles[pile],
|
467 |
-
stepW = this.itemSize.width + this.options.gutter,
|
468 |
-
|
469 |
-
accumIL = 0, accumIT = 0, il, it;
|
470 |
-
|
471 |
-
if( accumL + stepW <= this.elWidth ) {
|
472 |
-
|
473 |
-
l = accumL;
|
474 |
-
t = accumT;
|
475 |
-
accumL += stepW;
|
476 |
-
|
477 |
-
}
|
478 |
-
else {
|
479 |
-
|
480 |
-
if( ml === 0 ) {
|
481 |
-
ml = Math.ceil( ( this.elWidth - accumL + this.options.gutter ) / 2 );
|
482 |
-
}
|
483 |
-
|
484 |
-
accumT += this.itemSize.height + this.options.gutter;
|
485 |
-
l = 0;
|
486 |
-
t = accumT;
|
487 |
-
accumL = stepW;
|
488 |
-
|
489 |
-
}
|
490 |
-
|
491 |
-
p.position.left = l;
|
492 |
-
p.position.top = t;
|
493 |
-
|
494 |
-
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
495 |
-
|
496 |
-
var elem = p.elements[i],
|
497 |
-
fp = elem.finalPosition;
|
498 |
-
|
499 |
-
if( accumIL + stepW <= this.elWidth ) {
|
500 |
-
|
501 |
-
il = accumIL;
|
502 |
-
it = accumIT;
|
503 |
-
accumIL += stepW;
|
504 |
-
|
505 |
-
}
|
506 |
-
else {
|
507 |
-
|
508 |
-
accumIT += this.itemSize.height + this.options.gutter;
|
509 |
-
il = 0;
|
510 |
-
it = accumIT;
|
511 |
-
accumIL = stepW;
|
512 |
-
|
513 |
-
}
|
514 |
-
|
515 |
-
fp.left = il;
|
516 |
-
fp.top = it;
|
517 |
-
|
518 |
-
var $el = $( elem.el );
|
519 |
-
|
520 |
-
if(p.name !== this.pileName ) {
|
521 |
-
|
522 |
-
$el.css( { left : p.position.left, top : p.position.top } );
|
523 |
-
|
524 |
-
}
|
525 |
-
else {
|
526 |
-
|
527 |
-
lastItemTop = elem.finalPosition.top;
|
528 |
-
$el.css( { left : elem.finalPosition.left, top : lastItemTop } );
|
529 |
-
|
530 |
-
}
|
531 |
-
|
532 |
-
}
|
533 |
-
|
534 |
-
}
|
535 |
-
|
536 |
-
if( ml === 0 ) {
|
537 |
-
ml = Math.ceil( ( this.elWidth - accumL + this.options.gutter ) / 2 );
|
538 |
-
}
|
539 |
-
|
540 |
-
// the position of the items will influence the final margin left value and height for the ul
|
541 |
-
// center the ul
|
542 |
-
lastItemTop = this.spread ? lastItemTop : accumT;
|
543 |
-
this.el.css( {
|
544 |
-
marginLeft : ml,
|
545 |
-
height : lastItemTop + this.itemSize.height
|
546 |
-
} );
|
547 |
-
|
548 |
-
},
|
549 |
-
_openPile : function() {
|
550 |
-
|
551 |
-
if( !this.spread ) {
|
552 |
-
return false;
|
553 |
-
}
|
554 |
-
|
555 |
-
// final style
|
556 |
-
var fs;
|
557 |
-
|
558 |
-
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
559 |
-
|
560 |
-
var p = this.pilesArr[j],
|
561 |
-
|
562 |
-
//for( var pile in this.piles ) {
|
563 |
-
//
|
564 |
-
// var p = this.piles[ pile ],
|
565 |
-
|
566 |
-
cnt = 0;
|
567 |
-
|
568 |
-
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
569 |
-
|
570 |
-
var elem = p.elements[i],
|
571 |
-
$item = $( elem.el ),
|
572 |
-
$img = $item.find( 'img' ),
|
573 |
-
styleCSS = p.name === this.pileName ? {
|
574 |
-
zIndex : 9999,
|
575 |
-
visibility : 'visible',
|
576 |
-
transition : this.support ? 'left ' + this.options.pileAnimation.openSpeed + 'ms ' + ( ( len - i - 1 ) * this.options.delay ) + 'ms ' + this.options.pileAnimation.openEasing + ', top ' + this.options.pileAnimation.openSpeed + 'ms ' + ( ( len - i - 1 ) * this.options.delay ) + 'ms ' + this.options.pileAnimation.openEasing + ', ' + this.transformName + ' ' + this.options.pileAnimation.openSpeed + 'ms ' + ( ( len - i - 1 ) * this.options.delay ) + 'ms ' + this.options.pileAnimation.openEasing : 'none'
|
577 |
-
} : {
|
578 |
-
zIndex : 1,
|
579 |
-
transition : this.support ? 'opacity ' + this.options.otherPileAnimation.closeSpeed + 'ms ' + this.options.otherPileAnimation.closeEasing : 'none'
|
580 |
-
};
|
581 |
-
|
582 |
-
if( p.name === this.pileName ) {
|
583 |
-
|
584 |
-
if( $item.data( 'front' ) ) {
|
585 |
-
$item.find( 'div.tp-title' ).hide();
|
586 |
-
}
|
587 |
-
|
588 |
-
if( i < len - 1 ) {
|
589 |
-
$img.css( 'visibility', 'visible' );
|
590 |
-
}
|
591 |
-
|
592 |
-
fs = elem.finalPosition;
|
593 |
-
fs.transform = this.options.randomAngle && i !== p.index ? 'rotate(' + Math.floor( Math.random() * ( 5 + 5 + 1 ) - 5 ) + 'deg)' : 'none';
|
594 |
-
|
595 |
-
if( !this.support ) {
|
596 |
-
$item.css( 'transform', 'none' );
|
597 |
-
}
|
598 |
-
|
599 |
-
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
600 |
-
if( i < len - 3 ) {
|
601 |
-
$item.css( 'box-shadow', 'none' );
|
602 |
-
}
|
603 |
-
|
604 |
-
}
|
605 |
-
else if( i < len - 1 ) {
|
606 |
-
$img.css( 'visibility', 'hidden' );
|
607 |
-
}
|
608 |
-
|
609 |
-
$item.css( styleCSS );
|
610 |
-
|
611 |
-
var self = this;
|
612 |
-
|
613 |
-
p.name === this.pileName ?
|
614 |
-
this._applyTransition( $item, fs, this.options.pileAnimation.openSpeed, function( evt ) {
|
615 |
-
|
616 |
-
var target = this.target || this.nodeName;
|
617 |
-
if( target !== 'LI' ) {
|
618 |
-
return;
|
619 |
-
}
|
620 |
-
|
621 |
-
var $el = $( this );
|
622 |
-
|
623 |
-
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
624 |
-
$el.css( 'box-shadow', $el.data( 'shadow' ) );
|
625 |
-
|
626 |
-
if( self.support ) {
|
627 |
-
$el.off( self.transEndEventName );
|
628 |
-
}
|
629 |
-
|
630 |
-
++cnt;
|
631 |
-
|
632 |
-
if( cnt === $el.data( 'pileCount' ) ) {
|
633 |
-
|
634 |
-
$( document ).one( 'mousemove.stapel', function() {
|
635 |
-
self.el.addClass( 'tp-open' );
|
636 |
-
} );
|
637 |
-
self.options.onAfterOpen( self.pileName, cnt );
|
638 |
-
|
639 |
-
}
|
640 |
-
|
641 |
-
} ) :
|
642 |
-
this._applyTransition( $item, { opacity : 0 }, this.options.otherPileAnimation.closeSpeed );
|
643 |
-
|
644 |
-
}
|
645 |
-
|
646 |
-
}
|
647 |
-
|
648 |
-
this.el.css( 'height', fs.top + this.itemSize.height );
|
649 |
-
|
650 |
-
},
|
651 |
-
_closePile : function() {
|
652 |
-
|
653 |
-
var self = this;
|
654 |
-
|
655 |
-
// close..
|
656 |
-
if( this.spread ) {
|
657 |
-
|
658 |
-
this.spread = false;
|
659 |
-
|
660 |
-
this.options.onBeforeClose( this.pileName );
|
661 |
-
|
662 |
-
this.el.removeClass( 'tp-open' );
|
663 |
-
|
664 |
-
// final style
|
665 |
-
var fs;
|
666 |
-
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
667 |
-
|
668 |
-
var p = this.pilesArr[j],
|
669 |
-
|
670 |
-
//for( var pile in this.piles ) {
|
671 |
-
//
|
672 |
-
// var p = this.piles[ pile ],
|
673 |
-
|
674 |
-
cnt = 0;
|
675 |
-
|
676 |
-
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
677 |
-
|
678 |
-
var $item = $( p.elements[i].el ),
|
679 |
-
styleCSS = p.name === this.pileName ? {
|
680 |
-
transition : this.support ? 'left ' + this.options.pileAnimation.closeSpeed + 'ms ' + this.options.pileAnimation.closeEasing + ', top ' + this.options.pileAnimation.closeSpeed + 'ms ' + this.options.pileAnimation.closeEasing + ', ' + this.transformName + ' ' + this.options.pileAnimation.closeSpeed + 'ms ' + this.options.pileAnimation.closeEasing : 'none'
|
681 |
-
} : {
|
682 |
-
transition : this.support ? 'opacity ' + this.options.otherPileAnimation.openSpeed + 'ms ' + this.options.otherPileAnimation.openEasing : 'none'
|
683 |
-
};
|
684 |
-
|
685 |
-
$item.css( styleCSS );
|
686 |
-
|
687 |
-
fs = p.position;
|
688 |
-
|
689 |
-
if(p.name === this.pileName ) {
|
690 |
-
|
691 |
-
$.extend( fs, $item.data( 'initialStyle' ) );
|
692 |
-
|
693 |
-
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
694 |
-
if( i < len - 3 ) {
|
695 |
-
$item.css( 'box-shadow', 'none' );
|
696 |
-
}
|
697 |
-
|
698 |
-
}
|
699 |
-
|
700 |
-
p.name === this.pileName ? this._applyTransition( $item, fs, this.options.pileAnimation.closeSpeed, function( evt ) {
|
701 |
-
|
702 |
-
var target = this.target || this.nodeName;
|
703 |
-
if( target !== 'LI' ) {
|
704 |
-
return;
|
705 |
-
}
|
706 |
-
|
707 |
-
var $el = $( this ), extraStyle = $el.data( 'extraStyle' );
|
708 |
-
|
709 |
-
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
710 |
-
$el.css( 'box-shadow', $el.data( 'shadow' ) );
|
711 |
-
|
712 |
-
if( self.support ) {
|
713 |
-
$el.off( self.transEndEventName );
|
714 |
-
self._applyInitialTransition( $el );
|
715 |
-
}
|
716 |
-
else {
|
717 |
-
$el.css( $el.data( 'initialStyle' ) );
|
718 |
-
}
|
719 |
-
|
720 |
-
if( extraStyle ) {
|
721 |
-
$el.css( extraStyle );
|
722 |
-
}
|
723 |
-
|
724 |
-
++cnt;
|
725 |
-
|
726 |
-
if( $el.data( 'front' ) ) {
|
727 |
-
$el.find( 'div.tp-title' ).show();
|
728 |
-
}
|
729 |
-
|
730 |
-
if( cnt === $el.data( 'pileCount' ) ) {
|
731 |
-
self.options.onAfterClose( $el.data( 'pileName' ), cnt );
|
732 |
-
}
|
733 |
-
|
734 |
-
} ) : this._applyTransition( $item, { opacity : 1 }, this.options.otherPileAnimation.openSpeed, function( evt ) {
|
735 |
-
|
736 |
-
var target = this.target || this.nodeName;
|
737 |
-
if( target !== 'LI' ) {
|
738 |
-
return;
|
739 |
-
}
|
740 |
-
|
741 |
-
var $el = $( this );
|
742 |
-
|
743 |
-
if( $el.index() < len - 1 ) {
|
744 |
-
$el.find( 'img' ).css( 'visibility', 'visible' );
|
745 |
-
}
|
746 |
-
|
747 |
-
if( self.support ) {
|
748 |
-
$el.off( self.transEndEventName );
|
749 |
-
self._applyInitialTransition( $el );
|
750 |
-
}
|
751 |
-
|
752 |
-
} );
|
753 |
-
|
754 |
-
}
|
755 |
-
|
756 |
-
}
|
757 |
-
|
758 |
-
// reset pile name
|
759 |
-
this.pileName = '';
|
760 |
-
|
761 |
-
// update ul height
|
762 |
-
this.el.css( 'height', fs.top + this.itemSize.height );
|
763 |
-
|
764 |
-
}
|
765 |
-
|
766 |
-
return false;
|
767 |
-
|
768 |
-
},
|
769 |
-
_resize : function() {
|
770 |
-
|
771 |
-
// get ul size again
|
772 |
-
this._getSize();
|
773 |
-
// reset items positions
|
774 |
-
this._setItemsPosition();
|
775 |
-
|
776 |
-
},
|
777 |
-
_applyTransition : function( el, styleCSS, speed, fncomplete ) {
|
778 |
-
|
779 |
-
$.fn.applyStyle = this.support ? $.fn.css : $.fn.animate;
|
780 |
-
|
781 |
-
if( fncomplete && this.support ) {
|
782 |
-
|
783 |
-
el.on( this.transEndEventName, fncomplete );
|
784 |
-
|
785 |
-
}
|
786 |
-
|
787 |
-
fncomplete = fncomplete || function() { return false; };
|
788 |
-
|
789 |
-
el.stop().applyStyle( styleCSS, $.extend( true, [], { duration : speed + 'ms', complete : fncomplete } ) );
|
790 |
-
|
791 |
-
},
|
792 |
-
closePile : function() {
|
793 |
-
|
794 |
-
this._closePile();
|
795 |
-
|
796 |
-
}
|
797 |
-
|
798 |
-
};
|
799 |
-
|
800 |
-
var logError = function( message ) {
|
801 |
-
|
802 |
-
if ( window.console ) {
|
803 |
-
|
804 |
-
window.console.error( message );
|
805 |
-
|
806 |
-
}
|
807 |
-
|
808 |
-
};
|
809 |
-
|
810 |
-
$.fn.stapel = function( options ) {
|
811 |
-
|
812 |
-
var instance = $.data( this, 'stapel' );
|
813 |
-
|
814 |
-
if ( typeof options === 'string' ) {
|
815 |
-
|
816 |
-
var args = Array.prototype.slice.call( arguments, 1 );
|
817 |
-
|
818 |
-
this.each(function() {
|
819 |
-
|
820 |
-
if ( !instance ) {
|
821 |
-
|
822 |
-
logError( "cannot call methods on stapel prior to initialization; " +
|
823 |
-
"attempted to call method '" + options + "'" );
|
824 |
-
return;
|
825 |
-
|
826 |
-
}
|
827 |
-
|
828 |
-
if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
|
829 |
-
|
830 |
-
logError( "no such method '" + options + "' for stapel instance" );
|
831 |
-
return;
|
832 |
-
|
833 |
-
}
|
834 |
-
|
835 |
-
instance[ options ].apply( instance, args );
|
836 |
-
|
837 |
-
});
|
838 |
-
|
839 |
-
}
|
840 |
-
else {
|
841 |
-
|
842 |
-
this.each(function() {
|
843 |
-
|
844 |
-
if ( instance ) {
|
845 |
-
|
846 |
-
instance._init();
|
847 |
-
|
848 |
-
}
|
849 |
-
else {
|
850 |
-
|
851 |
-
instance = $.data( this, 'stapel', new $.Stapel( options, this ) );
|
852 |
-
|
853 |
-
}
|
854 |
-
|
855 |
-
});
|
856 |
-
|
857 |
-
}
|
858 |
-
|
859 |
-
return instance;
|
860 |
-
|
861 |
-
};
|
862 |
-
|
863 |
} )( jQuery, window );
|
1 |
+
/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
|
2 |
+
* Build: http://modernizr.com/download/#-csstransitions-prefixed-testprop-testallprops-domprefixes
|
3 |
+
*/
|
4 |
+
if (!window.FooGalleryStackAlbumModernizr) {
|
5 |
+
window.FooGalleryStackAlbumModernizr=function(a,b,c){function w(a){i.cssText=a}function x(a,b){return w(prefixes.join(a+";")+(b||""))}function y(a,b){return typeof a===b}function z(a,b){return!!~(""+a).indexOf(b)}function A(a,b){for(var d in a){var e=a[d];if(!z(e,"-")&&i[e]!==c)return b=="pfx"?e:!0}return!1}function B(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:y(f,"function")?f.bind(d||b):f}return!1}function C(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+m.join(d+" ")+d).split(" ");return y(b,"string")||y(b,"undefined")?A(e,b):(e=(a+" "+n.join(d+" ")+d).split(" "),B(e,b,c))}var d="2.8.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j,k={}.toString,l="Webkit Moz O ms",m=l.split(" "),n=l.toLowerCase().split(" "),o={},p={},q={},r=[],s=r.slice,t,u={}.hasOwnProperty,v;!y(u,"undefined")&&!y(u.call,"undefined")?v=function(a,b){return u.call(a,b)}:v=function(a,b){return b in a&&y(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=s.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(s.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(s.call(arguments)))};return e}),o.csstransitions=function(){return C("transition")};for(var D in o)v(o,D)&&(t=D.toLowerCase(),e[t]=o[D](),r.push((e[t]?"":"no-")+t));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)v(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},w(""),h=j=null,e._version=d,e._domPrefixes=n,e._cssomPrefixes=m,e.testProp=function(a){return A([a])},e.testAllProps=C,e.prefixed=function(a,b,c){return b?C(a,b,c):C(a,"pfx")},e}(this,this.document);
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* jquery.stapel.js v1.0.0
|
10 |
+
* http://www.codrops.com
|
11 |
+
*
|
12 |
+
* Licensed under the MIT license.
|
13 |
+
* http://www.opensource.org/licenses/mit-license.php
|
14 |
+
*
|
15 |
+
* Copyright 2012, Codrops
|
16 |
+
* http://www.codrops.com
|
17 |
+
*/
|
18 |
+
;( function( $, window, undefined ) {
|
19 |
+
|
20 |
+
'use strict';
|
21 |
+
|
22 |
+
/*
|
23 |
+
* debouncedresize: special jQuery event that happens once after a window resize
|
24 |
+
*
|
25 |
+
* latest version and complete README available on Github:
|
26 |
+
* https://github.com/louisremi/jquery-smartresize/blob/master/jquery.debouncedresize.js
|
27 |
+
*
|
28 |
+
* Copyright 2011 @louis_remi
|
29 |
+
* Licensed under the MIT license.
|
30 |
+
*/
|
31 |
+
var $event = $.event,
|
32 |
+
$special,
|
33 |
+
resizeTimeout;
|
34 |
+
|
35 |
+
$special = $event.special.debouncedresize = {
|
36 |
+
setup: function() {
|
37 |
+
$( this ).on( "resize", $special.handler );
|
38 |
+
},
|
39 |
+
teardown: function() {
|
40 |
+
$( this ).off( "resize", $special.handler );
|
41 |
+
},
|
42 |
+
handler: function( event, execAsap ) {
|
43 |
+
// Save the context
|
44 |
+
var context = this,
|
45 |
+
args = arguments,
|
46 |
+
dispatch = function() {
|
47 |
+
// set correct event type
|
48 |
+
event.type = "debouncedresize";
|
49 |
+
$event.dispatch.apply( context, args );
|
50 |
+
};
|
51 |
+
|
52 |
+
if ( resizeTimeout ) {
|
53 |
+
clearTimeout( resizeTimeout );
|
54 |
+
}
|
55 |
+
|
56 |
+
execAsap ?
|
57 |
+
dispatch() :
|
58 |
+
resizeTimeout = setTimeout( dispatch, $special.threshold );
|
59 |
+
},
|
60 |
+
threshold: 150
|
61 |
+
};
|
62 |
+
|
63 |
+
// ======================= imagesLoaded Plugin ===============================
|
64 |
+
// https://github.com/desandro/imagesloaded
|
65 |
+
|
66 |
+
// $('#my-container').imagesLoaded(myFunction)
|
67 |
+
// execute a callback when all images have loaded.
|
68 |
+
// needed because .load() doesn't work on cached images
|
69 |
+
|
70 |
+
// callback function gets image collection as argument
|
71 |
+
// this is the container
|
72 |
+
|
73 |
+
// original: mit license. paul irish. 2010.
|
74 |
+
// contributors: Oren Solomianik, David DeSandro, Yiannis Chatzikonstantinou
|
75 |
+
|
76 |
+
// blank image data-uri bypasses webkit log warning (thx doug jones)
|
77 |
+
var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
|
78 |
+
|
79 |
+
$.fn.imagesLoaded = function( callback ) {
|
80 |
+
var $this = this,
|
81 |
+
deferred = $.isFunction($.Deferred) ? $.Deferred() : 0,
|
82 |
+
hasNotify = $.isFunction(deferred.notify),
|
83 |
+
$images = $this.find('img').add( $this.filter('img') ),
|
84 |
+
loaded = [],
|
85 |
+
proper = [],
|
86 |
+
broken = [];
|
87 |
+
|
88 |
+
// Register deferred callbacks
|
89 |
+
if ($.isPlainObject(callback)) {
|
90 |
+
$.each(callback, function (key, value) {
|
91 |
+
if (key === 'callback') {
|
92 |
+
callback = value;
|
93 |
+
} else if (deferred) {
|
94 |
+
deferred[key](value);
|
95 |
+
}
|
96 |
+
});
|
97 |
+
}
|
98 |
+
|
99 |
+
function doneLoading() {
|
100 |
+
var $proper = $(proper),
|
101 |
+
$broken = $(broken);
|
102 |
+
|
103 |
+
if ( deferred ) {
|
104 |
+
if ( broken.length ) {
|
105 |
+
deferred.reject( $images, $proper, $broken );
|
106 |
+
} else {
|
107 |
+
deferred.resolve( $images );
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
if ( $.isFunction( callback ) ) {
|
112 |
+
callback.call( $this, $images, $proper, $broken );
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
function imgLoaded( img, isBroken ) {
|
117 |
+
// don't proceed if BLANK image, or image is already loaded
|
118 |
+
if ( img.src === BLANK || $.inArray( img, loaded ) !== -1 ) {
|
119 |
+
return;
|
120 |
+
}
|
121 |
+
|
122 |
+
// store element in loaded images array
|
123 |
+
loaded.push( img );
|
124 |
+
|
125 |
+
// keep track of broken and properly loaded images
|
126 |
+
if ( isBroken ) {
|
127 |
+
broken.push( img );
|
128 |
+
} else {
|
129 |
+
proper.push( img );
|
130 |
+
}
|
131 |
+
|
132 |
+
// cache image and its state for future calls
|
133 |
+
$.data( img, 'imagesLoaded', { isBroken: isBroken, src: img.src } );
|
134 |
+
|
135 |
+
// trigger deferred progress method if present
|
136 |
+
if ( hasNotify ) {
|
137 |
+
deferred.notifyWith( $(img), [ isBroken, $images, $(proper), $(broken) ] );
|
138 |
+
}
|
139 |
+
|
140 |
+
// call doneLoading and clean listeners if all images are loaded
|
141 |
+
if ( $images.length === loaded.length ){
|
142 |
+
setTimeout( doneLoading );
|
143 |
+
$images.unbind( '.imagesLoaded' );
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
// if no images, trigger immediately
|
148 |
+
if ( !$images.length ) {
|
149 |
+
doneLoading();
|
150 |
+
} else {
|
151 |
+
$images.bind( 'load.imagesLoaded error.imagesLoaded', function( event ){
|
152 |
+
// trigger imgLoaded
|
153 |
+
imgLoaded( event.target, event.type === 'error' );
|
154 |
+
}).each( function( i, el ) {
|
155 |
+
var src = el.src;
|
156 |
+
|
157 |
+
// find out if this image has been already checked for status
|
158 |
+
// if it was, and src has not changed, call imgLoaded on it
|
159 |
+
var cached = $.data( el, 'imagesLoaded' );
|
160 |
+
if ( cached && cached.src === src ) {
|
161 |
+
imgLoaded( el, cached.isBroken );
|
162 |
+
return;
|
163 |
+
}
|
164 |
+
|
165 |
+
// if complete is true and browser supports natural sizes, try
|
166 |
+
// to check for image status manually
|
167 |
+
if ( el.complete && el.naturalWidth !== undefined ) {
|
168 |
+
imgLoaded( el, el.naturalWidth === 0 || el.naturalHeight === 0 );
|
169 |
+
return;
|
170 |
+
}
|
171 |
+
|
172 |
+
// cached images don't fire load sometimes, so we reset src, but only when
|
173 |
+
// dealing with IE, or image is complete (loaded) and failed manual check
|
174 |
+
// webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
|
175 |
+
if ( el.readyState || el.complete ) {
|
176 |
+
el.src = BLANK;
|
177 |
+
el.src = src;
|
178 |
+
}
|
179 |
+
});
|
180 |
+
}
|
181 |
+
|
182 |
+
return deferred ? deferred.promise( $this ) : $this;
|
183 |
+
};
|
184 |
+
|
185 |
+
// global
|
186 |
+
var $window = $( window ),
|
187 |
+
FooGalleryStackAlbumModernizr = window.FooGalleryStackAlbumModernizr;
|
188 |
+
|
189 |
+
$.Stapel = function( options, element ) {
|
190 |
+
|
191 |
+
this.el = $( element );
|
192 |
+
this._init( options );
|
193 |
+
|
194 |
+
};
|
195 |
+
|
196 |
+
// the options
|
197 |
+
$.Stapel.defaults = {
|
198 |
+
// space between the items
|
199 |
+
gutter : 40,
|
200 |
+
// the rotations degree for the 2nd and 3rd item
|
201 |
+
// (to give a more realistic pile effect)
|
202 |
+
pileAngles : 2,
|
203 |
+
// animation settings for the clicked pile's items
|
204 |
+
pileAnimation : {
|
205 |
+
openSpeed : 400,
|
206 |
+
openEasing : 'ease-in-out', // try this :) 'cubic-bezier(.47,1.34,.9,1.03)',
|
207 |
+
closeSpeed : 400,
|
208 |
+
closeEasing : 'ease-in-out'
|
209 |
+
},
|
210 |
+
// animation settings for the other piles
|
211 |
+
otherPileAnimation : {
|
212 |
+
openSpeed : 400,
|
213 |
+
openEasing : 'ease-in-out',
|
214 |
+
closeSpeed : 350,
|
215 |
+
closeEasing : 'ease-in-out'
|
216 |
+
},
|
217 |
+
// delay for each item of the pile
|
218 |
+
delay : 0,
|
219 |
+
// random rotation for the items once opened
|
220 |
+
randomAngle : false,
|
221 |
+
onLoad : function() { return false; },
|
222 |
+
onBeforeOpen : function( pileName ) { return false; },
|
223 |
+
onAfterOpen : function( pileName, totalItems ) { return false; },
|
224 |
+
onBeforeClose : function( pileName ) { return false; },
|
225 |
+
onAfterClose : function( pileName, totalItems ) { return false; }
|
226 |
+
};
|
227 |
+
|
228 |
+
$.Stapel.prototype = {
|
229 |
+
|
230 |
+
_init : function( options ) {
|
231 |
+
|
232 |
+
// options
|
233 |
+
this.options = $.extend( true, {}, $.Stapel.defaults, options );
|
234 |
+
|
235 |
+
// cache some elements
|
236 |
+
this._config();
|
237 |
+
|
238 |
+
// preload images
|
239 |
+
var self = this;
|
240 |
+
this.el.imagesLoaded( function() {
|
241 |
+
self.options.onLoad();
|
242 |
+
self._layout();
|
243 |
+
self._initEvents();
|
244 |
+
if (typeof FOOBOX != 'undefined') {
|
245 |
+
FOOBOX.init();
|
246 |
+
}
|
247 |
+
} );
|
248 |
+
|
249 |
+
},
|
250 |
+
_config : function() {
|
251 |
+
|
252 |
+
// css transitions support
|
253 |
+
this.support = FooGalleryStackAlbumModernizr.csstransitions;
|
254 |
+
|
255 |
+
var transEndEventNames = {
|
256 |
+
'WebkitTransition' : 'webkitTransitionEnd',
|
257 |
+
'MozTransition' : 'transitionend',
|
258 |
+
'OTransition' : 'oTransitionEnd',
|
259 |
+
'msTransition' : 'MSTransitionEnd',
|
260 |
+
'transition' : 'transitionend'
|
261 |
+
},
|
262 |
+
transformNames = {
|
263 |
+
'WebkitTransform' : '-webkit-transform',
|
264 |
+
'MozTransform' : '-moz-transform',
|
265 |
+
'OTransform' : '-o-transform',
|
266 |
+
'msTransform' : '-ms-transform',
|
267 |
+
'transform' : 'transform'
|
268 |
+
};
|
269 |
+
|
270 |
+
if( this.support ) {
|
271 |
+
|
272 |
+
this.transEndEventName = transEndEventNames[ FooGalleryStackAlbumModernizr.prefixed( 'transition' ) ] + '.cbpFWSlider';
|
273 |
+
this.transformName = transformNames[ FooGalleryStackAlbumModernizr.prefixed( 'transform' ) ];
|
274 |
+
|
275 |
+
}
|
276 |
+
|
277 |
+
// true if one pile is opened
|
278 |
+
this.spread = false;
|
279 |
+
|
280 |
+
// the li's
|
281 |
+
this.items = this.el.children( 'li' ).hide();
|
282 |
+
|
283 |
+
// close pile
|
284 |
+
this.close = $( '#tp-close' );
|
285 |
+
|
286 |
+
},
|
287 |
+
_getSize : function() {
|
288 |
+
|
289 |
+
this.elWidth = this.el.outerWidth( true );
|
290 |
+
|
291 |
+
},
|
292 |
+
_initEvents : function() {
|
293 |
+
|
294 |
+
var self = this;
|
295 |
+
$window.on( 'debouncedresize.stapel', function() { self._resize(); } );
|
296 |
+
this.items.on( 'click.stapel', function() {
|
297 |
+
|
298 |
+
var $item = $( this );
|
299 |
+
|
300 |
+
if( !self.spread && $item.data( 'isPile' ) ) {
|
301 |
+
|
302 |
+
self.spread = true;
|
303 |
+
self.pileName = $item.data( 'pileName' );
|
304 |
+
self.options.onBeforeOpen( self.pileName );
|
305 |
+
self._openPile();
|
306 |
+
|
307 |
+
return false;
|
308 |
+
|
309 |
+
}
|
310 |
+
|
311 |
+
} );
|
312 |
+
|
313 |
+
},
|
314 |
+
_layout : function() {
|
315 |
+
|
316 |
+
/*
|
317 |
+
piles() : save the items info in a object with the following structure:
|
318 |
+
|
319 |
+
this.piles = {
|
320 |
+
|
321 |
+
pileName : {
|
322 |
+
|
323 |
+
// elements of this pile (note that an element can be also in a different pile)
|
324 |
+
// for each element, the finalPosition is the position of the element when the pile is opened
|
325 |
+
elements : [
|
326 |
+
{ el : HTMLELEMENT, finalPosition : { left : LEFT, top : TOP } },
|
327 |
+
{},
|
328 |
+
{},
|
329 |
+
...
|
330 |
+
],
|
331 |
+
// this is the position of the pile (all elements of the pile) when the pile is closed
|
332 |
+
position : { left : LEFT, top : TOP },
|
333 |
+
index : INDEX
|
334 |
+
},
|
335 |
+
|
336 |
+
// more piles
|
337 |
+
...
|
338 |
+
|
339 |
+
}
|
340 |
+
*/
|
341 |
+
this._piles();
|
342 |
+
|
343 |
+
// items width & height
|
344 |
+
// assuming here that all items have the same width and height
|
345 |
+
this.itemSize = { width : this.items.outerWidth( true ) , height : this.items.outerHeight( true ) };
|
346 |
+
|
347 |
+
// remove original elements
|
348 |
+
this.items.remove();
|
349 |
+
|
350 |
+
// applies some initial style for the items
|
351 |
+
this._setInitialStyle();
|
352 |
+
|
353 |
+
this.el.css( 'min-width', this.itemSize.width + this.options.gutter );
|
354 |
+
|
355 |
+
// gets the current ul size (needed for the calculation of each item's position)
|
356 |
+
this._getSize();
|
357 |
+
|
358 |
+
// calculate and set each Pile's elements position based on the current ul width
|
359 |
+
// this function will also be called on window resize
|
360 |
+
this._setItemsPosition();
|
361 |
+
|
362 |
+
// new items
|
363 |
+
this.items = this.el.children( 'li' ).show();
|
364 |
+
// total items
|
365 |
+
this.itemsCount = this.items.length;
|
366 |
+
|
367 |
+
},
|
368 |
+
_piles : function() {
|
369 |
+
|
370 |
+
var piles = {};
|
371 |
+
this.pilesArr = [];
|
372 |
+
var pile, self = this, idx = 0;
|
373 |
+
this.items.each( function() {
|
374 |
+
|
375 |
+
var $item = $( this ),
|
376 |
+
itemPile = $item.attr( 'data-pile' ) || 'nopile-' + $item.index(),
|
377 |
+
attr = itemPile.split( ',' );
|
378 |
+
|
379 |
+
for( var i = 0, total = attr.length; i < total; ++i ) {
|
380 |
+
|
381 |
+
var pileName = $.trim( attr[i] );
|
382 |
+
pile = piles[ pileName ];
|
383 |
+
|
384 |
+
if( !pile ) {
|
385 |
+
|
386 |
+
pile = piles[ pileName ] = {
|
387 |
+
name : pileName,
|
388 |
+
elements : [],
|
389 |
+
position : { left : 0, top : 0 },
|
390 |
+
index : idx
|
391 |
+
};
|
392 |
+
|
393 |
+
self.pilesArr.push(pile);
|
394 |
+
|
395 |
+
++idx;
|
396 |
+
|
397 |
+
}
|
398 |
+
|
399 |
+
var clone = $item.clone().get(0);
|
400 |
+
pile.elements.push( { el : clone, finalPosition : { left : 0, top : 0 } } );
|
401 |
+
var $clone = $(clone);
|
402 |
+
$clone.appendTo(self.el);
|
403 |
+
}
|
404 |
+
|
405 |
+
} );
|
406 |
+
|
407 |
+
},
|
408 |
+
_setInitialStyle : function() {
|
409 |
+
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
410 |
+
|
411 |
+
var p = this.pilesArr[j];
|
412 |
+
|
413 |
+
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
414 |
+
|
415 |
+
var $el = $( p.elements[i].el ),
|
416 |
+
styleCSS = { transform : 'rotate(0deg)' };
|
417 |
+
|
418 |
+
this._applyInitialTransition( $el );
|
419 |
+
|
420 |
+
if( i === len - 2 ) {
|
421 |
+
styleCSS = { transform : 'rotate(' + this.options.pileAngles + 'deg)' };
|
422 |
+
}
|
423 |
+
else if( i === len - 3 ) {
|
424 |
+
styleCSS = { transform : 'rotate(-' + this.options.pileAngles + 'deg)' };
|
425 |
+
}
|
426 |
+
else if( i !== len - 1 ) {
|
427 |
+
var extraStyle = { visibility : 'hidden' };
|
428 |
+
$el.css( extraStyle ).data( 'extraStyle', extraStyle );
|
429 |
+
}
|
430 |
+
else if( p.name.substr( 0, 6 ) !== 'nopile' ) {
|
431 |
+
$el.data( 'front', true ).append( '<div class="tp-title-cover"><div class="tp-title"><span>' + p.name + '</span><span>' + len + '</span></div></div>' );
|
432 |
+
}
|
433 |
+
|
434 |
+
$el.css( styleCSS ).data( {
|
435 |
+
initialStyle : styleCSS,
|
436 |
+
pileName : p.name,
|
437 |
+
pileCount : len,
|
438 |
+
shadow : $el.css( 'box-shadow' ),
|
439 |
+
isPile : p.name.substr( 0, 6 ) === 'nopile' ? false : true
|
440 |
+
} );
|
441 |
+
|
442 |
+
}
|
443 |
+
|
444 |
+
}
|
445 |
+
|
446 |
+
},
|
447 |
+
_applyInitialTransition : function( $el ) {
|
448 |
+
|
449 |
+
if( this.support ) {
|
450 |
+
$el.css( 'transition', 'left 400ms ease-in-out, top 400ms ease-in-out' );
|
451 |
+
}
|
452 |
+
|
453 |
+
},
|
454 |
+
_setItemsPosition : function() {
|
455 |
+
|
456 |
+
var accumL = 0, accumT = 0,
|
457 |
+
l, t, ml = 0,
|
458 |
+
lastItemTop = 0;
|
459 |
+
|
460 |
+
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
461 |
+
|
462 |
+
var p = this.pilesArr[j],
|
463 |
+
|
464 |
+
//for( var pile in this.piles ) {
|
465 |
+
//
|
466 |
+
// var p = this.piles[pile],
|
467 |
+
stepW = this.itemSize.width + this.options.gutter,
|
468 |
+
|
469 |
+
accumIL = 0, accumIT = 0, il, it;
|
470 |
+
|
471 |
+
if( accumL + stepW <= this.elWidth ) {
|
472 |
+
|
473 |
+
l = accumL;
|
474 |
+
t = accumT;
|
475 |
+
accumL += stepW;
|
476 |
+
|
477 |
+
}
|
478 |
+
else {
|
479 |
+
|
480 |
+
if( ml === 0 ) {
|
481 |
+
ml = Math.ceil( ( this.elWidth - accumL + this.options.gutter ) / 2 );
|
482 |
+
}
|
483 |
+
|
484 |
+
accumT += this.itemSize.height + this.options.gutter;
|
485 |
+
l = 0;
|
486 |
+
t = accumT;
|
487 |
+
accumL = stepW;
|
488 |
+
|
489 |
+
}
|
490 |
+
|
491 |
+
p.position.left = l;
|
492 |
+
p.position.top = t;
|
493 |
+
|
494 |
+
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
495 |
+
|
496 |
+
var elem = p.elements[i],
|
497 |
+
fp = elem.finalPosition;
|
498 |
+
|
499 |
+
if( accumIL + stepW <= this.elWidth ) {
|
500 |
+
|
501 |
+
il = accumIL;
|
502 |
+
it = accumIT;
|
503 |
+
accumIL += stepW;
|
504 |
+
|
505 |
+
}
|
506 |
+
else {
|
507 |
+
|
508 |
+
accumIT += this.itemSize.height + this.options.gutter;
|
509 |
+
il = 0;
|
510 |
+
it = accumIT;
|
511 |
+
accumIL = stepW;
|
512 |
+
|
513 |
+
}
|
514 |
+
|
515 |
+
fp.left = il;
|
516 |
+
fp.top = it;
|
517 |
+
|
518 |
+
var $el = $( elem.el );
|
519 |
+
|
520 |
+
if(p.name !== this.pileName ) {
|
521 |
+
|
522 |
+
$el.css( { left : p.position.left, top : p.position.top } );
|
523 |
+
|
524 |
+
}
|
525 |
+
else {
|
526 |
+
|
527 |
+
lastItemTop = elem.finalPosition.top;
|
528 |
+
$el.css( { left : elem.finalPosition.left, top : lastItemTop } );
|
529 |
+
|
530 |
+
}
|
531 |
+
|
532 |
+
}
|
533 |
+
|
534 |
+
}
|
535 |
+
|
536 |
+
if( ml === 0 ) {
|
537 |
+
ml = Math.ceil( ( this.elWidth - accumL + this.options.gutter ) / 2 );
|
538 |
+
}
|
539 |
+
|
540 |
+
// the position of the items will influence the final margin left value and height for the ul
|
541 |
+
// center the ul
|
542 |
+
lastItemTop = this.spread ? lastItemTop : accumT;
|
543 |
+
this.el.css( {
|
544 |
+
marginLeft : ml,
|
545 |
+
height : lastItemTop + this.itemSize.height
|
546 |
+
} );
|
547 |
+
|
548 |
+
},
|
549 |
+
_openPile : function() {
|
550 |
+
|
551 |
+
if( !this.spread ) {
|
552 |
+
return false;
|
553 |
+
}
|
554 |
+
|
555 |
+
// final style
|
556 |
+
var fs;
|
557 |
+
|
558 |
+
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
559 |
+
|
560 |
+
var p = this.pilesArr[j],
|
561 |
+
|
562 |
+
//for( var pile in this.piles ) {
|
563 |
+
//
|
564 |
+
// var p = this.piles[ pile ],
|
565 |
+
|
566 |
+
cnt = 0;
|
567 |
+
|
568 |
+
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
569 |
+
|
570 |
+
var elem = p.elements[i],
|
571 |
+
$item = $( elem.el ),
|
572 |
+
$img = $item.find( 'img' ),
|
573 |
+
styleCSS = p.name === this.pileName ? {
|
574 |
+
zIndex : 9999,
|
575 |
+
visibility : 'visible',
|
576 |
+
transition : this.support ? 'left ' + this.options.pileAnimation.openSpeed + 'ms ' + ( ( len - i - 1 ) * this.options.delay ) + 'ms ' + this.options.pileAnimation.openEasing + ', top ' + this.options.pileAnimation.openSpeed + 'ms ' + ( ( len - i - 1 ) * this.options.delay ) + 'ms ' + this.options.pileAnimation.openEasing + ', ' + this.transformName + ' ' + this.options.pileAnimation.openSpeed + 'ms ' + ( ( len - i - 1 ) * this.options.delay ) + 'ms ' + this.options.pileAnimation.openEasing : 'none'
|
577 |
+
} : {
|
578 |
+
zIndex : 1,
|
579 |
+
transition : this.support ? 'opacity ' + this.options.otherPileAnimation.closeSpeed + 'ms ' + this.options.otherPileAnimation.closeEasing : 'none'
|
580 |
+
};
|
581 |
+
|
582 |
+
if( p.name === this.pileName ) {
|
583 |
+
|
584 |
+
if( $item.data( 'front' ) ) {
|
585 |
+
$item.find( 'div.tp-title' ).hide();
|
586 |
+
}
|
587 |
+
|
588 |
+
if( i < len - 1 ) {
|
589 |
+
$img.css( 'visibility', 'visible' );
|
590 |
+
}
|
591 |
+
|
592 |
+
fs = elem.finalPosition;
|
593 |
+
fs.transform = this.options.randomAngle && i !== p.index ? 'rotate(' + Math.floor( Math.random() * ( 5 + 5 + 1 ) - 5 ) + 'deg)' : 'none';
|
594 |
+
|
595 |
+
if( !this.support ) {
|
596 |
+
$item.css( 'transform', 'none' );
|
597 |
+
}
|
598 |
+
|
599 |
+
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
600 |
+
if( i < len - 3 ) {
|
601 |
+
$item.css( 'box-shadow', 'none' );
|
602 |
+
}
|
603 |
+
|
604 |
+
}
|
605 |
+
else if( i < len - 1 ) {
|
606 |
+
$img.css( 'visibility', 'hidden' );
|
607 |
+
}
|
608 |
+
|
609 |
+
$item.css( styleCSS );
|
610 |
+
|
611 |
+
var self = this;
|
612 |
+
|
613 |
+
p.name === this.pileName ?
|
614 |
+
this._applyTransition( $item, fs, this.options.pileAnimation.openSpeed, function( evt ) {
|
615 |
+
|
616 |
+
var target = this.target || this.nodeName;
|
617 |
+
if( target !== 'LI' ) {
|
618 |
+
return;
|
619 |
+
}
|
620 |
+
|
621 |
+
var $el = $( this );
|
622 |
+
|
623 |
+
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
624 |
+
$el.css( 'box-shadow', $el.data( 'shadow' ) );
|
625 |
+
|
626 |
+
if( self.support ) {
|
627 |
+
$el.off( self.transEndEventName );
|
628 |
+
}
|
629 |
+
|
630 |
+
++cnt;
|
631 |
+
|
632 |
+
if( cnt === $el.data( 'pileCount' ) ) {
|
633 |
+
|
634 |
+
$( document ).one( 'mousemove.stapel', function() {
|
635 |
+
self.el.addClass( 'tp-open' );
|
636 |
+
} );
|
637 |
+
self.options.onAfterOpen( self.pileName, cnt );
|
638 |
+
|
639 |
+
}
|
640 |
+
|
641 |
+
} ) :
|
642 |
+
this._applyTransition( $item, { opacity : 0 }, this.options.otherPileAnimation.closeSpeed );
|
643 |
+
|
644 |
+
}
|
645 |
+
|
646 |
+
}
|
647 |
+
|
648 |
+
this.el.css( 'height', fs.top + this.itemSize.height );
|
649 |
+
|
650 |
+
},
|
651 |
+
_closePile : function() {
|
652 |
+
|
653 |
+
var self = this;
|
654 |
+
|
655 |
+
// close..
|
656 |
+
if( this.spread ) {
|
657 |
+
|
658 |
+
this.spread = false;
|
659 |
+
|
660 |
+
this.options.onBeforeClose( this.pileName );
|
661 |
+
|
662 |
+
this.el.removeClass( 'tp-open' );
|
663 |
+
|
664 |
+
// final style
|
665 |
+
var fs;
|
666 |
+
for (var j =0, pile_len = this.pilesArr.length; j < pile_len; j++){
|
667 |
+
|
668 |
+
var p = this.pilesArr[j],
|
669 |
+
|
670 |
+
//for( var pile in this.piles ) {
|
671 |
+
//
|
672 |
+
// var p = this.piles[ pile ],
|
673 |
+
|
674 |
+
cnt = 0;
|
675 |
+
|
676 |
+
for( var i = 0, len = p.elements.length; i < len; ++i ) {
|
677 |
+
|
678 |
+
var $item = $( p.elements[i].el ),
|
679 |
+
styleCSS = p.name === this.pileName ? {
|
680 |
+
transition : this.support ? 'left ' + this.options.pileAnimation.closeSpeed + 'ms ' + this.options.pileAnimation.closeEasing + ', top ' + this.options.pileAnimation.closeSpeed + 'ms ' + this.options.pileAnimation.closeEasing + ', ' + this.transformName + ' ' + this.options.pileAnimation.closeSpeed + 'ms ' + this.options.pileAnimation.closeEasing : 'none'
|
681 |
+
} : {
|
682 |
+
transition : this.support ? 'opacity ' + this.options.otherPileAnimation.openSpeed + 'ms ' + this.options.otherPileAnimation.openEasing : 'none'
|
683 |
+
};
|
684 |
+
|
685 |
+
$item.css( styleCSS );
|
686 |
+
|
687 |
+
fs = p.position;
|
688 |
+
|
689 |
+
if(p.name === this.pileName ) {
|
690 |
+
|
691 |
+
$.extend( fs, $item.data( 'initialStyle' ) );
|
692 |
+
|
693 |
+
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
694 |
+
if( i < len - 3 ) {
|
695 |
+
$item.css( 'box-shadow', 'none' );
|
696 |
+
}
|
697 |
+
|
698 |
+
}
|
699 |
+
|
700 |
+
p.name === this.pileName ? this._applyTransition( $item, fs, this.options.pileAnimation.closeSpeed, function( evt ) {
|
701 |
+
|
702 |
+
var target = this.target || this.nodeName;
|
703 |
+
if( target !== 'LI' ) {
|
704 |
+
return;
|
705 |
+
}
|
706 |
+
|
707 |
+
var $el = $( this ), extraStyle = $el.data( 'extraStyle' );
|
708 |
+
|
709 |
+
// hack: remove box-shadow while animating to prevent the shadow stack effect
|
710 |
+
$el.css( 'box-shadow', $el.data( 'shadow' ) );
|
711 |
+
|
712 |
+
if( self.support ) {
|
713 |
+
$el.off( self.transEndEventName );
|
714 |
+
self._applyInitialTransition( $el );
|
715 |
+
}
|
716 |
+
else {
|
717 |
+
$el.css( $el.data( 'initialStyle' ) );
|
718 |
+
}
|
719 |
+
|
720 |
+
if( extraStyle ) {
|
721 |
+
$el.css( extraStyle );
|
722 |
+
}
|
723 |
+
|
724 |
+
++cnt;
|
725 |
+
|
726 |
+
if( $el.data( 'front' ) ) {
|
727 |
+
$el.find( 'div.tp-title' ).show();
|
728 |
+
}
|
729 |
+
|
730 |
+
if( cnt === $el.data( 'pileCount' ) ) {
|
731 |
+
self.options.onAfterClose( $el.data( 'pileName' ), cnt );
|
732 |
+
}
|
733 |
+
|
734 |
+
} ) : this._applyTransition( $item, { opacity : 1 }, this.options.otherPileAnimation.openSpeed, function( evt ) {
|
735 |
+
|
736 |
+
var target = this.target || this.nodeName;
|
737 |
+
if( target !== 'LI' ) {
|
738 |
+
return;
|
739 |
+
}
|
740 |
+
|
741 |
+
var $el = $( this );
|
742 |
+
|
743 |
+
if( $el.index() < len - 1 ) {
|
744 |
+
$el.find( 'img' ).css( 'visibility', 'visible' );
|
745 |
+
}
|
746 |
+
|
747 |
+
if( self.support ) {
|
748 |
+
$el.off( self.transEndEventName );
|
749 |
+
self._applyInitialTransition( $el );
|
750 |
+
}
|
751 |
+
|
752 |
+
} );
|
753 |
+
|
754 |
+
}
|
755 |
+
|
756 |
+
}
|
757 |
+
|
758 |
+
// reset pile name
|
759 |
+
this.pileName = '';
|
760 |
+
|
761 |
+
// update ul height
|
762 |
+
this.el.css( 'height', fs.top + this.itemSize.height );
|
763 |
+
|
764 |
+
}
|
765 |
+
|
766 |
+
return false;
|
767 |
+
|
768 |
+
},
|
769 |
+
_resize : function() {
|
770 |
+
|
771 |
+
// get ul size again
|
772 |
+
this._getSize();
|
773 |
+
// reset items positions
|
774 |
+
this._setItemsPosition();
|
775 |
+
|
776 |
+
},
|
777 |
+
_applyTransition : function( el, styleCSS, speed, fncomplete ) {
|
778 |
+
|
779 |
+
$.fn.applyStyle = this.support ? $.fn.css : $.fn.animate;
|
780 |
+
|
781 |
+
if( fncomplete && this.support ) {
|
782 |
+
|
783 |
+
el.on( this.transEndEventName, fncomplete );
|
784 |
+
|
785 |
+
}
|
786 |
+
|
787 |
+
fncomplete = fncomplete || function() { return false; };
|
788 |
+
|
789 |
+
el.stop().applyStyle( styleCSS, $.extend( true, [], { duration : speed + 'ms', complete : fncomplete } ) );
|
790 |
+
|
791 |
+
},
|
792 |
+
closePile : function() {
|
793 |
+
|
794 |
+
this._closePile();
|
795 |
+
|
796 |
+
}
|
797 |
+
|
798 |
+
};
|
799 |
+
|
800 |
+
var logError = function( message ) {
|
801 |
+
|
802 |
+
if ( window.console ) {
|
803 |
+
|
804 |
+
window.console.error( message );
|
805 |
+
|
806 |
+
}
|
807 |
+
|
808 |
+
};
|
809 |
+
|
810 |
+
$.fn.stapel = function( options ) {
|
811 |
+
|
812 |
+
var instance = $.data( this, 'stapel' );
|
813 |
+
|
814 |
+
if ( typeof options === 'string' ) {
|
815 |
+
|
816 |
+
var args = Array.prototype.slice.call( arguments, 1 );
|
817 |
+
|
818 |
+
this.each(function() {
|
819 |
+
|
820 |
+
if ( !instance ) {
|
821 |
+
|
822 |
+
logError( "cannot call methods on stapel prior to initialization; " +
|
823 |
+
"attempted to call method '" + options + "'" );
|
824 |
+
return;
|
825 |
+
|
826 |
+
}
|
827 |
+
|
828 |
+
if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
|
829 |
+
|
830 |
+
logError( "no such method '" + options + "' for stapel instance" );
|
831 |
+
return;
|
832 |
+
|
833 |
+
}
|
834 |
+
|
835 |
+
instance[ options ].apply( instance, args );
|
836 |
+
|
837 |
+
});
|
838 |
+
|
839 |
+
}
|
840 |
+
else {
|
841 |
+
|
842 |
+
this.each(function() {
|
843 |
+
|
844 |
+
if ( instance ) {
|
845 |
+
|
846 |
+
instance._init();
|
847 |
+
|
848 |
+
}
|
849 |
+
else {
|
850 |
+
|
851 |
+
instance = $.data( this, 'stapel', new $.Stapel( options, this ) );
|
852 |
+
|
853 |
+
}
|
854 |
+
|
855 |
+
});
|
856 |
+
|
857 |
+
}
|
858 |
+
|
859 |
+
return instance;
|
860 |
+
|
861 |
+
};
|
862 |
+
|
863 |
} )( jQuery, window );
|
extensions/albums/public/class-foogallery-album-template-loader.php
CHANGED
@@ -1,184 +1,184 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Template loader for FooGallery Albums
|
5 |
-
*
|
6 |
-
* @package FooGallery
|
7 |
-
* @author Brad vincent
|
8 |
-
*/
|
9 |
-
class FooGallery_Album_Template_Loader {
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Locates and renders the album based on the template
|
13 |
-
* Will look in the following locations
|
14 |
-
* wp-content/themes/{child-theme}/foogallery/album-{template}.php
|
15 |
-
* wp-content/themes/{theme}/foogallery/album-{template}.php
|
16 |
-
* wp-content/plugins/foogallery/templates/album-{template}.php
|
17 |
-
*
|
18 |
-
* @param $args array Arguments passed in from the shortcode
|
19 |
-
*/
|
20 |
-
public function render_template( $args ) {
|
21 |
-
//do some work before we locate the template
|
22 |
-
global $current_foogallery_album;
|
23 |
-
global $current_foogallery_album_arguments;
|
24 |
-
global $current_foogallery_album_template;
|
25 |
-
|
26 |
-
//set the arguments
|
27 |
-
$current_foogallery_album_arguments = $args;
|
28 |
-
|
29 |
-
//load our album
|
30 |
-
$current_foogallery_album = $this->find_album( $args );
|
31 |
-
|
32 |
-
if ( false === $current_foogallery_album ) {
|
33 |
-
_e( 'Could not load the album!', 'foogallery' );
|
34 |
-
return;
|
35 |
-
}
|
36 |
-
|
37 |
-
//find the gallery template we will use to render the gallery
|
38 |
-
$current_foogallery_album_template = $this->get_arg( $args, 'template', $current_foogallery_album->album_template );
|
39 |
-
|
40 |
-
//set a default if we have no gallery template
|
41 |
-
if ( empty($current_foogallery_album_template) ) {
|
42 |
-
$current_foogallery_album_template = foogallery_get_default( 'album_template' );
|
43 |
-
}
|
44 |
-
|
45 |
-
//if we still have not default, then use the first one we can find
|
46 |
-
if ( empty($current_foogallery_album_template) ) {
|
47 |
-
$available_templates = foogallery_album_templates();
|
48 |
-
$current_foogallery_album_template = $available_templates[0]['slug'];
|
49 |
-
}
|
50 |
-
|
51 |
-
//check if we have any galleries
|
52 |
-
if ( ! $current_foogallery_album->has_galleries() ) {
|
53 |
-
//no galleries!
|
54 |
-
do_action( "foogallery_album_template_no_galleries-($current_foogallery_album_template)", $current_foogallery_album );
|
55 |
-
} else {
|
56 |
-
|
57 |
-
//create locator instance
|
58 |
-
$instance_name = FOOGALLERY_SLUG . '_album_templates';
|
59 |
-
$loader = new Foo_Plugin_File_Locator_v1( $instance_name, FOOGALLERY_FILE, 'templates', FOOGALLERY_SLUG );
|
60 |
-
|
61 |
-
//allow extensions to very easily add pickup locations for their files
|
62 |
-
$this->add_extension_pickup_locations( $loader, apply_filters( $instance_name . '_files', array() ) );
|
63 |
-
|
64 |
-
if ( false !== ($template_location = $loader->locate_file( "album-{$current_foogallery_album_template}.php" )) ) {
|
65 |
-
|
66 |
-
//we have found a template!
|
67 |
-
do_action( 'foogallery_located_album_template', $current_foogallery_album );
|
68 |
-
do_action( "foogallery_located_album_template-{$current_foogallery_album_template}", $current_foogallery_album );
|
69 |
-
|
70 |
-
//try to include some JS
|
71 |
-
if ( false !== ($js_location = $loader->locate_file( "album-{$current_foogallery_album_template}.js" )) ) {
|
72 |
-
wp_enqueue_script( "foogallery-album-template-{$current_foogallery_album_template}", $js_location['url'] );
|
73 |
-
}
|
74 |
-
|
75 |
-
//try to include some CSS
|
76 |
-
if ( false !== ($css_location = $loader->locate_file( "album-{$current_foogallery_album_template}.css" )) ) {
|
77 |
-
wp_enqueue_style( "foogallery-album-template-{$current_foogallery_album_template}", $css_location['url'] );
|
78 |
-
}
|
79 |
-
|
80 |
-
//finally include the actual php template!
|
81 |
-
if ( $template_location ) {
|
82 |
-
load_template( $template_location['path'], false );
|
83 |
-
}
|
84 |
-
|
85 |
-
//we have loaded all files, now let extensions do some stuff
|
86 |
-
do_action( "foogallery_loaded_album_template", $current_foogallery_album );
|
87 |
-
do_action( "foogallery_loaded_album_template-($current_foogallery_album_template)", $current_foogallery_album );
|
88 |
-
|
89 |
-
} else {
|
90 |
-
//we could not find a template!
|
91 |
-
_e( 'No album template found!', 'foogallery' );
|
92 |
-
}
|
93 |
-
}
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Add pickup locations to the loader to make it easier for extensions
|
98 |
-
*
|
99 |
-
* @param $loader Foo_Plugin_File_Locator_v1
|
100 |
-
* @param $extension_files array
|
101 |
-
*/
|
102 |
-
function add_extension_pickup_locations( $loader, $extension_files ) {
|
103 |
-
if ( count( $extension_files ) > 0 ) {
|
104 |
-
$position = 120;
|
105 |
-
foreach ( $extension_files as $file ) {
|
106 |
-
|
107 |
-
//add pickup location for php template
|
108 |
-
$loader->add_location( $position, array(
|
109 |
-
'path' => trailingslashit( plugin_dir_path( $file ) ),
|
110 |
-
'url' => trailingslashit( plugin_dir_url( $file ) )
|
111 |
-
) );
|
112 |
-
|
113 |
-
$position++;
|
114 |
-
|
115 |
-
//add pickup location for extensions js folder
|
116 |
-
$loader->add_location( $position, array(
|
117 |
-
'path' => trailingslashit( plugin_dir_path( $file ) . 'js' ),
|
118 |
-
'url' => trailingslashit( plugin_dir_url( $file ) . 'js' )
|
119 |
-
) );
|
120 |
-
|
121 |
-
$position++;
|
122 |
-
|
123 |
-
//add pickup location for extension css folder
|
124 |
-
$loader->add_location( $position, array(
|
125 |
-
'path' => trailingslashit( plugin_dir_path( $file ) . 'css' ),
|
126 |
-
'url' => trailingslashit( plugin_dir_url( $file ) . 'css' )
|
127 |
-
) );
|
128 |
-
|
129 |
-
$position++;
|
130 |
-
|
131 |
-
}
|
132 |
-
}
|
133 |
-
}
|
134 |
-
|
135 |
-
/**
|
136 |
-
* load the gallery based on either the id or slug, passed in via arguments
|
137 |
-
*
|
138 |
-
* @param $args array Arguments passed in from the shortcode
|
139 |
-
*
|
140 |
-
* @return bool|FooGallery The gallery object we want to render
|
141 |
-
*/
|
142 |
-
function find_album( $args ) {
|
143 |
-
|
144 |
-
$id = intval( $this->get_arg( $args, 'id' ), 0 );
|
145 |
-
|
146 |
-
if ( $id > 0 ) {
|
147 |
-
|
148 |
-
//load album by ID
|
149 |
-
return FooGalleryAlbum::get_by_id( $id );
|
150 |
-
|
151 |
-
} else {
|
152 |
-
|
153 |
-
//take into account the cases where id is passed in via the 'album' attribute
|
154 |
-
$album = $this->get_arg( 'album', 0 );
|
155 |
-
|
156 |
-
if ( intval( $album ) > 0 ) {
|
157 |
-
//we have an id, so load
|
158 |
-
return FooGalleryAlbum::get_by_id( intval( $album ) );
|
159 |
-
}
|
160 |
-
|
161 |
-
//we are dealing with a slug
|
162 |
-
return FooGalleryAlbum::get_by_slug( $album );
|
163 |
-
}
|
164 |
-
}
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Helper to get an argument value from an array arguments
|
168 |
-
*
|
169 |
-
* @param $args Array the array of arguments to search
|
170 |
-
* @param $key string the key of the argument you are looking for
|
171 |
-
* @param $default string a default value if the argument is not found
|
172 |
-
*
|
173 |
-
* @return string
|
174 |
-
*/
|
175 |
-
function get_arg( $args, $key, $default = '' ) {
|
176 |
-
if ( empty($args)
|
177 |
-
|| !is_array( $args )
|
178 |
-
|| !array_key_exists( $key, $args ) ) {
|
179 |
-
return $default;
|
180 |
-
}
|
181 |
-
|
182 |
-
return $args[ $key ];
|
183 |
-
}
|
184 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Template loader for FooGallery Albums
|
5 |
+
*
|
6 |
+
* @package FooGallery
|
7 |
+
* @author Brad vincent
|
8 |
+
*/
|
9 |
+
class FooGallery_Album_Template_Loader {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Locates and renders the album based on the template
|
13 |
+
* Will look in the following locations
|
14 |
+
* wp-content/themes/{child-theme}/foogallery/album-{template}.php
|
15 |
+
* wp-content/themes/{theme}/foogallery/album-{template}.php
|
16 |
+
* wp-content/plugins/foogallery/templates/album-{template}.php
|
17 |
+
*
|
18 |
+
* @param $args array Arguments passed in from the shortcode
|
19 |
+
*/
|
20 |
+
public function render_template( $args ) {
|
21 |
+
//do some work before we locate the template
|
22 |
+
global $current_foogallery_album;
|
23 |
+
global $current_foogallery_album_arguments;
|
24 |
+
global $current_foogallery_album_template;
|
25 |
+
|
26 |
+
//set the arguments
|
27 |
+
$current_foogallery_album_arguments = $args;
|
28 |
+
|
29 |
+
//load our album
|
30 |
+
$current_foogallery_album = $this->find_album( $args );
|
31 |
+
|
32 |
+
if ( false === $current_foogallery_album ) {
|
33 |
+
_e( 'Could not load the album!', 'foogallery' );
|
34 |
+
return;
|
35 |
+
}
|
36 |
+
|
37 |
+
//find the gallery template we will use to render the gallery
|
38 |
+
$current_foogallery_album_template = $this->get_arg( $args, 'template', $current_foogallery_album->album_template );
|
39 |
+
|
40 |
+
//set a default if we have no gallery template
|
41 |
+
if ( empty($current_foogallery_album_template) ) {
|
42 |
+
$current_foogallery_album_template = foogallery_get_default( 'album_template' );
|
43 |
+
}
|
44 |
+
|
45 |
+
//if we still have not default, then use the first one we can find
|
46 |
+
if ( empty($current_foogallery_album_template) ) {
|
47 |
+
$available_templates = foogallery_album_templates();
|
48 |
+
$current_foogallery_album_template = $available_templates[0]['slug'];
|
49 |
+
}
|
50 |
+
|
51 |
+
//check if we have any galleries
|
52 |
+
if ( ! $current_foogallery_album->has_galleries() ) {
|
53 |
+
//no galleries!
|
54 |
+
do_action( "foogallery_album_template_no_galleries-($current_foogallery_album_template)", $current_foogallery_album );
|
55 |
+
} else {
|
56 |
+
|
57 |
+
//create locator instance
|
58 |
+
$instance_name = FOOGALLERY_SLUG . '_album_templates';
|
59 |
+
$loader = new Foo_Plugin_File_Locator_v1( $instance_name, FOOGALLERY_FILE, 'templates', FOOGALLERY_SLUG );
|
60 |
+
|
61 |
+
//allow extensions to very easily add pickup locations for their files
|
62 |
+
$this->add_extension_pickup_locations( $loader, apply_filters( $instance_name . '_files', array() ) );
|
63 |
+
|
64 |
+
if ( false !== ($template_location = $loader->locate_file( "album-{$current_foogallery_album_template}.php" )) ) {
|
65 |
+
|
66 |
+
//we have found a template!
|
67 |
+
do_action( 'foogallery_located_album_template', $current_foogallery_album );
|
68 |
+
do_action( "foogallery_located_album_template-{$current_foogallery_album_template}", $current_foogallery_album );
|
69 |
+
|
70 |
+
//try to include some JS
|
71 |
+
if ( false !== ($js_location = $loader->locate_file( "album-{$current_foogallery_album_template}.js" )) ) {
|
72 |
+
wp_enqueue_script( "foogallery-album-template-{$current_foogallery_album_template}", $js_location['url'] );
|
73 |
+
}
|
74 |
+
|
75 |
+
//try to include some CSS
|
76 |
+
if ( false !== ($css_location = $loader->locate_file( "album-{$current_foogallery_album_template}.css" )) ) {
|
77 |
+
wp_enqueue_style( "foogallery-album-template-{$current_foogallery_album_template}", $css_location['url'] );
|
78 |
+
}
|
79 |
+
|
80 |
+
//finally include the actual php template!
|
81 |
+
if ( $template_location ) {
|
82 |
+
load_template( $template_location['path'], false );
|
83 |
+
}
|
84 |
+
|
85 |
+
//we have loaded all files, now let extensions do some stuff
|
86 |
+
do_action( "foogallery_loaded_album_template", $current_foogallery_album );
|
87 |
+
do_action( "foogallery_loaded_album_template-($current_foogallery_album_template)", $current_foogallery_album );
|
88 |
+
|
89 |
+
} else {
|
90 |
+
//we could not find a template!
|
91 |
+
_e( 'No album template found!', 'foogallery' );
|
92 |
+
}
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Add pickup locations to the loader to make it easier for extensions
|
98 |
+
*
|
99 |
+
* @param $loader Foo_Plugin_File_Locator_v1
|
100 |
+
* @param $extension_files array
|
101 |
+
*/
|
102 |
+
function add_extension_pickup_locations( $loader, $extension_files ) {
|
103 |
+
if ( count( $extension_files ) > 0 ) {
|
104 |
+
$position = 120;
|
105 |
+
foreach ( $extension_files as $file ) {
|
106 |
+
|
107 |
+
//add pickup location for php template
|
108 |
+
$loader->add_location( $position, array(
|
109 |
+
'path' => trailingslashit( plugin_dir_path( $file ) ),
|
110 |
+
'url' => trailingslashit( plugin_dir_url( $file ) )
|
111 |
+
) );
|
112 |
+
|
113 |
+
$position++;
|
114 |
+
|
115 |
+
//add pickup location for extensions js folder
|
116 |
+
$loader->add_location( $position, array(
|
117 |
+
'path' => trailingslashit( plugin_dir_path( $file ) . 'js' ),
|
118 |
+
'url' => trailingslashit( plugin_dir_url( $file ) . 'js' )
|
119 |
+
) );
|
120 |
+
|
121 |
+
$position++;
|
122 |
+
|
123 |
+
//add pickup location for extension css folder
|
124 |
+
$loader->add_location( $position, array(
|
125 |
+
'path' => trailingslashit( plugin_dir_path( $file ) . 'css' ),
|
126 |
+
'url' => trailingslashit( plugin_dir_url( $file ) . 'css' )
|
127 |
+
) );
|
128 |
+
|
129 |
+
$position++;
|
130 |
+
|
131 |
+
}
|
132 |
+
}
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* load the gallery based on either the id or slug, passed in via arguments
|
137 |
+
*
|
138 |
+
* @param $args array Arguments passed in from the shortcode
|
139 |
+
*
|
140 |
+
* @return bool|FooGallery The gallery object we want to render
|
141 |
+
*/
|
142 |
+
function find_album( $args ) {
|
143 |
+
|
144 |
+
$id = intval( $this->get_arg( $args, 'id' ), 0 );
|
145 |
+
|
146 |
+
if ( $id > 0 ) {
|
147 |
+
|
148 |
+
//load album by ID
|
149 |
+
return FooGalleryAlbum::get_by_id( $id );
|
150 |
+
|
151 |
+
} else {
|
152 |
+
|
153 |
+
//take into account the cases where id is passed in via the 'album' attribute
|
154 |
+
$album = $this->get_arg( 'album', 0 );
|
155 |
+
|
156 |
+
if ( intval( $album ) > 0 ) {
|
157 |
+
//we have an id, so load
|
158 |
+
return FooGalleryAlbum::get_by_id( intval( $album ) );
|
159 |
+
}
|
160 |
+
|
161 |
+
//we are dealing with a slug
|
162 |
+
return FooGalleryAlbum::get_by_slug( $album );
|
163 |
+
}
|
164 |
+
}
|
165 |
+
|
166 |
+
/**
|
167 |
+
* Helper to get an argument value from an array arguments
|
168 |
+
*
|
169 |
+
* @param $args Array the array of arguments to search
|
170 |
+
* @param $key string the key of the argument you are looking for
|
171 |
+
* @param $default string a default value if the argument is not found
|
172 |
+
*
|
173 |
+
* @return string
|
174 |
+
*/
|
175 |
+
function get_arg( $args, $key, $default = '' ) {
|
176 |
+
if ( empty($args)
|
177 |
+
|| !is_array( $args )
|
178 |
+
|| !array_key_exists( $key, $args ) ) {
|
179 |
+
return $default;
|
180 |
+
}
|
181 |
+
|
182 |
+
return $args[ $key ];
|
183 |
+
}
|
184 |
+
}
|
extensions/albums/public/class-rewrite-rules.php
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery Album Rewrite Rules
|
4 |
-
*/
|
5 |
-
if (!class_exists('FooGallery_Album_Rewrite_Rules')) {
|
6 |
-
|
7 |
-
class FooGallery_Album_Rewrite_Rules {
|
8 |
-
|
9 |
-
function __construct() {
|
10 |
-
add_action( 'init', array( $this, 'add_gallery_endpoint' ) );
|
11 |
-
}
|
12 |
-
|
13 |
-
function add_gallery_endpoint() {
|
14 |
-
add_rewrite_endpoint( foogallery_album_gallery_url_slug(), EP_ALL );
|
15 |
-
}
|
16 |
-
}
|
17 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery Album Rewrite Rules
|
4 |
+
*/
|
5 |
+
if (!class_exists('FooGallery_Album_Rewrite_Rules')) {
|
6 |
+
|
7 |
+
class FooGallery_Album_Rewrite_Rules {
|
8 |
+
|
9 |
+
function __construct() {
|
10 |
+
add_action( 'init', array( $this, 'add_gallery_endpoint' ) );
|
11 |
+
}
|
12 |
+
|
13 |
+
function add_gallery_endpoint() {
|
14 |
+
add_rewrite_endpoint( foogallery_album_gallery_url_slug(), EP_ALL );
|
15 |
+
}
|
16 |
+
}
|
17 |
}
|
extensions/albums/public/class-shortcodes.php
CHANGED
@@ -1,48 +1,48 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* FooGallery Album Shortcode
|
4 |
-
*/
|
5 |
-
|
6 |
-
if ( ! class_exists( 'FooGallery_Album_Shortcodes' ) ) {
|
7 |
-
|
8 |
-
class FooGallery_Album_Shortcodes {
|
9 |
-
|
10 |
-
function __construct() {
|
11 |
-
add_action( 'init', array( $this, 'init_shortcode' ) );
|
12 |
-
add_action( 'foogallery_loaded_album_template', array( $this, 'render_custom_css' ) );
|
13 |
-
}
|
14 |
-
|
15 |
-
function init_shortcode() {
|
16 |
-
add_shortcode( foogallery_album_shortcode_tag(), array( $this, 'render_foogallery_album_shortcode' ) );
|
17 |
-
}
|
18 |
-
|
19 |
-
function render_foogallery_album_shortcode( $atts ) {
|
20 |
-
|
21 |
-
$args = wp_parse_args( $atts, array(
|
22 |
-
'id' => 0,
|
23 |
-
'album' => '',
|
24 |
-
) );
|
25 |
-
|
26 |
-
$args = apply_filters( 'foogallery-album_shortcode_atts', $args );
|
27 |
-
|
28 |
-
//create new instance of template engine
|
29 |
-
$engine = new FooGallery_Album_Template_Loader();
|
30 |
-
|
31 |
-
ob_start();
|
32 |
-
|
33 |
-
$engine->render_template( $args );
|
34 |
-
|
35 |
-
$output_string = ob_get_contents();
|
36 |
-
ob_end_clean();
|
37 |
-
return $output_string;
|
38 |
-
}
|
39 |
-
|
40 |
-
function render_custom_css( $foogallery_album ) {
|
41 |
-
if ( !empty( $foogallery_album->custom_css ) ) {
|
42 |
-
echo '<style type="text/css">';
|
43 |
-
echo $foogallery_album->custom_css;
|
44 |
-
echo '</style>';
|
45 |
-
}
|
46 |
-
}
|
47 |
-
}
|
48 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* FooGallery Album Shortcode
|
4 |
+
*/
|
5 |
+
|
6 |
+
if ( ! class_exists( 'FooGallery_Album_Shortcodes' ) ) {
|
7 |
+
|
8 |
+
class FooGallery_Album_Shortcodes {
|
9 |
+
|
10 |
+
function __construct() {
|
11 |
+
add_action( 'init', array( $this, 'init_shortcode' ) );
|
12 |
+
add_action( 'foogallery_loaded_album_template', array( $this, 'render_custom_css' ) );
|
13 |
+
}
|
14 |
+
|
15 |
+
function init_shortcode() {
|
16 |
+
add_shortcode( foogallery_album_shortcode_tag(), array( $this, 'render_foogallery_album_shortcode' ) );
|
17 |
+
}
|
18 |
+
|
19 |
+
function render_foogallery_album_shortcode( $atts ) {
|
20 |
+
|
21 |
+
$args = wp_parse_args( $atts, array(
|
22 |
+
'id' => 0,
|
23 |
+
'album' => '',
|
24 |
+
) );
|
25 |
+
|
26 |
+
$args = apply_filters( 'foogallery-album_shortcode_atts', $args );
|
27 |
+
|
28 |
+
//create new instance of template engine
|
29 |
+
$engine = new FooGallery_Album_Template_Loader();
|
30 |
+
|
31 |
+
ob_start();
|
32 |
+
|
33 |
+
$engine->render_template( $args );
|
34 |
+
|
35 |
+
$output_string = ob_get_contents();
|
36 |
+
ob_end_clean();
|
37 |
+
return $output_string;
|
38 |
+
}
|
39 |
+
|
40 |
+
function render_custom_css( $foogallery_album ) {
|
41 |
+
if ( !empty( $foogallery_album->custom_css ) ) {
|
42 |
+
echo '<style type="text/css">';
|
43 |
+
echo $foogallery_album->custom_css;
|
44 |
+
echo '</style>';
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
extensions/default-templates/class-default-templates-extension.php
CHANGED
@@ -1,13 +1,13 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Legacy Default Extensions Class for previous versions where the default templates were an extension.
|
4 |
-
* The class is now empty and has no logic. It is purely here so that existing installs do not break
|
5 |
-
*/
|
6 |
-
|
7 |
-
if ( ! class_exists( 'FooGallery_Default_Templates_Extension' ) ) {
|
8 |
-
|
9 |
-
class FooGallery_Default_Templates_Extension {
|
10 |
-
function __construct() {
|
11 |
-
}
|
12 |
-
}
|
13 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Legacy Default Extensions Class for previous versions where the default templates were an extension.
|
4 |
+
* The class is now empty and has no logic. It is purely here so that existing installs do not break
|
5 |
+
*/
|
6 |
+
|
7 |
+
if ( ! class_exists( 'FooGallery_Default_Templates_Extension' ) ) {
|
8 |
+
|
9 |
+
class FooGallery_Default_Templates_Extension {
|
10 |
+
function __construct() {
|
11 |
+
}
|
12 |
+
}
|
13 |
+
}
|
extensions/default-templates/class-default-templates.php
CHANGED
@@ -1,52 +1,52 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class to include and init default templates.
|
4 |
-
* The templates are no longer an extension and are built in and included by default
|
5 |
-
*/
|
6 |
-
|
7 |
-
if ( ! class_exists( 'FooGallery_Default_Templates' ) ) {
|
8 |
-
|
9 |
-
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_URL', plugin_dir_url( __FILE__ ) );
|
10 |
-
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH', plugin_dir_path( __FILE__ ) );
|
11 |
-
|
12 |
-
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_URL . 'shared/' );
|
13 |
-
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_PATH', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'shared/' );
|
14 |
-
|
15 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'functions.php' );
|
16 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'default/class-default-gallery-template.php' );
|
17 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'image-viewer/class-image-viewer-gallery-template.php' );
|
18 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'justified/class-justified-gallery-template.php' );
|
19 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'masonry/class-masonry-gallery-template.php' );
|
20 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'simple-portfolio/class-simple-portfolio-gallery-template.php' );
|
21 |
-
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'thumbnail/class-thumbnail-gallery-template.php' );
|
22 |
-
|
23 |
-
class FooGallery_Default_Templates {
|
24 |
-
|
25 |
-
function __construct() {
|
26 |
-
new FooGallery_Default_Gallery_Template();
|
27 |
-
new FooGallery_Image_Viewer_Gallery_Template();
|
28 |
-
new FooGallery_Justified_Gallery_Template();
|
29 |
-
new FooGallery_Masonry_Gallery_Template();
|
30 |
-
new FooGallery_Simple_Portfolio_Gallery_Template();
|
31 |
-
new FooGallery_Thumbnail_Gallery_Template();
|
32 |
-
|
33 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
|
34 |
-
}
|
35 |
-
|
36 |
-
/***
|
37 |
-
* Enqueue the assets needed by the default templates
|
38 |
-
* @param $hook_suffix
|
39 |
-
*/
|
40 |
-
function enqueue_assets( $hook_suffix ){
|
41 |
-
if( in_array( $hook_suffix, array( 'post.php', 'post-new.php' ) ) ) {
|
42 |
-
$screen = get_current_screen();
|
43 |
-
|
44 |
-
if ( is_object( $screen ) && FOOGALLERY_CPT_GALLERY == $screen->post_type ){
|
45 |
-
|
46 |
-
// Register, enqueue scripts and styles here
|
47 |
-
wp_enqueue_style( 'foogallery-core-admin-settings', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL . 'css/admin-foogallery.css', array(), FOOGALLERY_VERSION );
|
48 |
-
}
|
49 |
-
}
|
50 |
-
}
|
51 |
-
}
|
52 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class to include and init default templates.
|
4 |
+
* The templates are no longer an extension and are built in and included by default
|
5 |
+
*/
|
6 |
+
|
7 |
+
if ( ! class_exists( 'FooGallery_Default_Templates' ) ) {
|
8 |
+
|
9 |
+
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_URL', plugin_dir_url( __FILE__ ) );
|
10 |
+
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH', plugin_dir_path( __FILE__ ) );
|
11 |
+
|
12 |
+
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_URL . 'shared/' );
|
13 |
+
define( 'FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_PATH', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'shared/' );
|
14 |
+
|
15 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'functions.php' );
|
16 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'default/class-default-gallery-template.php' );
|
17 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'image-viewer/class-image-viewer-gallery-template.php' );
|
18 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'justified/class-justified-gallery-template.php' );
|
19 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'masonry/class-masonry-gallery-template.php' );
|
20 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'simple-portfolio/class-simple-portfolio-gallery-template.php' );
|
21 |
+
require_once( FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_PATH . 'thumbnail/class-thumbnail-gallery-template.php' );
|
22 |
+
|
23 |
+
class FooGallery_Default_Templates {
|
24 |
+
|
25 |
+
function __construct() {
|
26 |
+
new FooGallery_Default_Gallery_Template();
|
27 |
+
new FooGallery_Image_Viewer_Gallery_Template();
|
28 |
+
new FooGallery_Justified_Gallery_Template();
|
29 |
+
new FooGallery_Masonry_Gallery_Template();
|
30 |
+
new FooGallery_Simple_Portfolio_Gallery_Template();
|
31 |
+
new FooGallery_Thumbnail_Gallery_Template();
|
32 |
+
|
33 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
|
34 |
+
}
|
35 |
+
|
36 |
+
/***
|
37 |
+
* Enqueue the assets needed by the default templates
|
38 |
+
* @param $hook_suffix
|
39 |
+
*/
|
40 |
+
function enqueue_assets( $hook_suffix ){
|
41 |
+
if( in_array( $hook_suffix, array( 'post.php', 'post-new.php' ) ) ) {
|
42 |
+
$screen = get_current_screen();
|
43 |
+
|
44 |
+
if ( is_object( $screen ) && FOOGALLERY_CPT_GALLERY == $screen->post_type ){
|
45 |
+
|
46 |
+
// Register, enqueue scripts and styles here
|
47 |
+
wp_enqueue_style( 'foogallery-core-admin-settings', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL . 'css/admin-foogallery.css', array(), FOOGALLERY_VERSION );
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
extensions/default-templates/default/class-default-gallery-template.php
CHANGED
@@ -1,203 +1,220 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
4 |
-
|
5 |
-
define('FOOGALLERY_DEFAULT_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
-
|
7 |
-
class FooGallery_Default_Gallery_Template {
|
8 |
-
/**
|
9 |
-
* Wire up everything we need to run the extension
|
10 |
-
*/
|
11 |
-
function __construct() {
|
12 |
-
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
-
|
14 |
-
add_action( 'foogallery_located_template-default', array( $this, 'enqueue_dependencies' ) );
|
15 |
-
|
16 |
-
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
17 |
-
|
18 |
-
//build up any preview arguments
|
19 |
-
add_filter( 'foogallery_preview_arguments-default', array( $this, 'preview_arguments' ), 10, 2 );
|
20 |
-
|
21 |
-
//build up the thumb dimensions from some arguments
|
22 |
-
add_filter( 'foogallery_calculate_thumbnail_dimensions-default', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
23 |
-
|
24 |
-
//build up the thumb dimensions on save
|
25 |
-
add_filter( 'foogallery_template_thumbnail_dimensions-default', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
*
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
*
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
'
|
51 |
-
'
|
52 |
-
'
|
53 |
-
'
|
54 |
-
'
|
55 |
-
'
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
'
|
61 |
-
'
|
62 |
-
'
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
'
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
'
|
76 |
-
'
|
77 |
-
'
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
'
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
'
|
95 |
-
'
|
96 |
-
'
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
'
|
108 |
-
'
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
'fg-gutter-
|
114 |
-
'fg-gutter-
|
115 |
-
'fg-gutter-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
'
|
128 |
-
'
|
129 |
-
|
130 |
-
'
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
*
|
160 |
-
* @
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
*
|
172 |
-
*
|
173 |
-
* @
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
*
|
191 |
-
*
|
192 |
-
* @
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( !class_exists( 'FooGallery_Default_Gallery_Template' ) ) {
|
4 |
+
|
5 |
+
define('FOOGALLERY_DEFAULT_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
+
|
7 |
+
class FooGallery_Default_Gallery_Template {
|
8 |
+
/**
|
9 |
+
* Wire up everything we need to run the extension
|
10 |
+
*/
|
11 |
+
function __construct() {
|
12 |
+
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
+
|
14 |
+
add_action( 'foogallery_located_template-default', array( $this, 'enqueue_dependencies' ) );
|
15 |
+
|
16 |
+
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
17 |
+
|
18 |
+
//build up any preview arguments
|
19 |
+
add_filter( 'foogallery_preview_arguments-default', array( $this, 'preview_arguments' ), 10, 2 );
|
20 |
+
|
21 |
+
//build up the thumb dimensions from some arguments
|
22 |
+
add_filter( 'foogallery_calculate_thumbnail_dimensions-default', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
23 |
+
|
24 |
+
//build up the thumb dimensions on save
|
25 |
+
add_filter( 'foogallery_template_thumbnail_dimensions-default', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
26 |
+
|
27 |
+
//build up the arguments needed for rendering this template
|
28 |
+
add_filter( 'foogallery_gallery_template_arguments-default', array( $this, 'build_gallery_template_arguments' ) );
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Register myself so that all associated JS and CSS files can be found and automatically included
|
33 |
+
* @param $extensions
|
34 |
+
*
|
35 |
+
* @return array
|
36 |
+
*/
|
37 |
+
function register_myself( $extensions ) {
|
38 |
+
$extensions[] = __FILE__;
|
39 |
+
return $extensions;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Add our gallery template to the list of templates available for every gallery
|
44 |
+
* @param $gallery_templates
|
45 |
+
*
|
46 |
+
* @return array
|
47 |
+
*/
|
48 |
+
function add_template( $gallery_templates ) {
|
49 |
+
$gallery_templates[] = array(
|
50 |
+
'slug' => 'default',
|
51 |
+
'name' => __( 'Responsive Image Gallery', 'foogallery' ),
|
52 |
+
'preview_support' => true,
|
53 |
+
'common_fields_support' => true,
|
54 |
+
'paging_support' => true,
|
55 |
+
'lazyload_support' => true,
|
56 |
+
'mandatory_classes' => 'fg-default',
|
57 |
+
'thumbnail_dimensions' => true,
|
58 |
+
'fields' => array(
|
59 |
+
array(
|
60 |
+
'id' => 'thumbnail_dimensions',
|
61 |
+
'title' => __( 'Thumbnail Size', 'foogallery' ),
|
62 |
+
'desc' => __( 'Choose the size of your thumbnails.', 'foogallery' ),
|
63 |
+
'section' => __( 'General', 'foogallery' ),
|
64 |
+
'type' => 'thumb_size_no_crop',
|
65 |
+
'default' => array(
|
66 |
+
'width' => get_option( 'thumbnail_size_w' ),
|
67 |
+
'height' => get_option( 'thumbnail_size_h' ),
|
68 |
+
),
|
69 |
+
'row_data'=> array(
|
70 |
+
'data-foogallery-change-selector' => 'input',
|
71 |
+
'data-foogallery-preview' => 'shortcode'
|
72 |
+
)
|
73 |
+
),
|
74 |
+
array(
|
75 |
+
'id' => 'thumbnail_link',
|
76 |
+
'title' => __( 'Link To', 'foogallery' ),
|
77 |
+
'section' => __( 'General', 'foogallery' ),
|
78 |
+
'default' => 'image',
|
79 |
+
'type' => 'thumb_link',
|
80 |
+
'desc' => __( 'You can choose to link each thumbnail to the full size image, the image\'s attachment page, a custom URL, or you can choose to not link to anything.', 'foogallery' ),
|
81 |
+
),
|
82 |
+
array(
|
83 |
+
'id' => 'lightbox',
|
84 |
+
'title' => __( 'Lightbox', 'foogallery' ),
|
85 |
+
'desc' => __( 'Choose which lightbox you want to use. The lightbox will generally only work if you set the thumbnail link to "Full Size Image".', 'foogallery' ),
|
86 |
+
'section' => __( 'General', 'foogallery' ),
|
87 |
+
'type' => 'lightbox',
|
88 |
+
'default' => 'none',
|
89 |
+
'row_data'=> array(
|
90 |
+
'data-foogallery-change-selector' => 'select'
|
91 |
+
)
|
92 |
+
),
|
93 |
+
array(
|
94 |
+
'id' => 'lightbox_foobox_help',
|
95 |
+
'title' => __( 'FooBox Help', 'foogallery' ),
|
96 |
+
'desc' => __( 'The FooBox lightbox is a separate plugin.', 'foogallery' ),
|
97 |
+
'section' => __( 'General', 'foogallery' ),
|
98 |
+
'type' => 'help',
|
99 |
+
'row_data'=> array(
|
100 |
+
'data-foogallery-hidden' => true,
|
101 |
+
'data-foogallery-show-when-field' => 'lightbox',
|
102 |
+
'data-foogallery-show-when-field-value' => 'foobox'
|
103 |
+
)
|
104 |
+
),
|
105 |
+
array(
|
106 |
+
'id' => 'spacing',
|
107 |
+
'title' => __( 'Spacing', 'foogallery' ),
|
108 |
+
'desc' => __( 'The spacing or gap between thumbnails in the gallery.', 'foogallery' ),
|
109 |
+
'section' => __( 'General', 'foogallery' ),
|
110 |
+
'type' => 'select',
|
111 |
+
'default' => 'fg-gutter-10',
|
112 |
+
'choices' => array(
|
113 |
+
'fg-gutter-0' => __( 'none', 'foogallery' ),
|
114 |
+
'fg-gutter-5' => __( '5 pixels', 'foogallery' ),
|
115 |
+
'fg-gutter-10' => __( '10 pixels', 'foogallery' ),
|
116 |
+
'fg-gutter-15' => __( '15 pixels', 'foogallery' ),
|
117 |
+
'fg-gutter-20' => __( '20 pixels', 'foogallery' ),
|
118 |
+
'fg-gutter-25' => __( '25 pixels', 'foogallery' ),
|
119 |
+
),
|
120 |
+
'row_data'=> array(
|
121 |
+
'data-foogallery-change-selector' => 'select',
|
122 |
+
'data-foogallery-preview' => 'class'
|
123 |
+
)
|
124 |
+
),
|
125 |
+
array(
|
126 |
+
'id' => 'alignment',
|
127 |
+
'title' => __( 'Alignment', 'foogallery' ),
|
128 |
+
'desc' => __( 'The horizontal alignment of the thumbnails inside the gallery.', 'foogallery' ),
|
129 |
+
'section' => __( 'General', 'foogallery' ),
|
130 |
+
'default' => 'fg-center',
|
131 |
+
'type' => 'radio',
|
132 |
+
'spacer' => '<span class="spacer"></span>',
|
133 |
+
'choices' => array(
|
134 |
+
'fg-left' => __( 'Left', 'foogallery' ),
|
135 |
+
'fg-center' => __( 'Center', 'foogallery' ),
|
136 |
+
'fg-right' => __( 'Right', 'foogallery' ),
|
137 |
+
),
|
138 |
+
'row_data'=> array(
|
139 |
+
'data-foogallery-change-selector' => 'input:radio',
|
140 |
+
'data-foogallery-preview' => 'class'
|
141 |
+
)
|
142 |
+
)
|
143 |
+
)
|
144 |
+
);
|
145 |
+
|
146 |
+
return $gallery_templates;
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Enqueue scripts that the default gallery template relies on
|
151 |
+
*/
|
152 |
+
function enqueue_dependencies( $gallery ) {
|
153 |
+
//enqueue core files
|
154 |
+
foogallery_enqueue_core_gallery_template_style();
|
155 |
+
foogallery_enqueue_core_gallery_template_script();
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Build up a arguments used in the preview of the gallery
|
160 |
+
* @param $args
|
161 |
+
* @param $post_data
|
162 |
+
*
|
163 |
+
* @return mixed
|
164 |
+
*/
|
165 |
+
function preview_arguments( $args, $post_data ) {
|
166 |
+
$args['thumbnail_dimensions'] = $post_data[FOOGALLERY_META_SETTINGS]['default_thumbnail_dimensions'];
|
167 |
+
return $args;
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Builds thumb dimensions from arguments
|
172 |
+
*
|
173 |
+
* @param array $dimensions
|
174 |
+
* @param array $arguments
|
175 |
+
*
|
176 |
+
* @return mixed
|
177 |
+
*/
|
178 |
+
function build_thumbnail_dimensions_from_arguments( $dimensions, $arguments ) {
|
179 |
+
if ( array_key_exists( 'thumbnail_dimensions', $arguments) ) {
|
180 |
+
return array(
|
181 |
+
'height' => intval($arguments['thumbnail_dimensions']['height']),
|
182 |
+
'width' => intval($arguments['thumbnail_dimensions']['width']),
|
183 |
+
'crop' => '1'
|
184 |
+
);
|
185 |
+
}
|
186 |
+
return null;
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Get the thumb dimensions arguments saved for the gallery for this gallery template
|
191 |
+
*
|
192 |
+
* @param array $dimensions
|
193 |
+
* @param FooGallery $foogallery
|
194 |
+
*
|
195 |
+
* @return mixed
|
196 |
+
*/
|
197 |
+
function get_thumbnail_dimensions( $dimensions, $foogallery ) {
|
198 |
+
$dimensions = $foogallery->get_meta( 'default_thumbnail_dimensions', array(
|
199 |
+
'width' => get_option( 'thumbnail_size_w' ),
|
200 |
+
'height' => get_option( 'thumbnail_size_h' )
|
201 |
+
) );
|
202 |
+
$dimensions['crop'] = true;
|
203 |
+
return $dimensions;
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Build up the arguments needed for rendering this gallery template
|
208 |
+
*
|
209 |
+
* @param $args
|
210 |
+
* @return array
|
211 |
+
*/
|
212 |
+
function build_gallery_template_arguments( $args ) {
|
213 |
+
$args = foogallery_gallery_template_setting( 'thumbnail_dimensions', array() );
|
214 |
+
$args['crop'] = '1'; //we now force thumbs to be cropped
|
215 |
+
$args['link'] = foogallery_gallery_template_setting( 'thumbnail_link', 'image' );
|
216 |
+
|
217 |
+
return $args;
|
218 |
+
}
|
219 |
+
}
|
220 |
}
|
extensions/default-templates/default/gallery-default.php
CHANGED
@@ -1,22 +1,18 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery default responsive gallery template
|
4 |
-
*/
|
5 |
-
global $current_foogallery;
|
6 |
-
|
7 |
-
|
8 |
-
$
|
9 |
-
$
|
10 |
-
|
11 |
-
$
|
12 |
-
$
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
<?php foreach ( $current_foogallery->attachments() as $attachment ) {
|
20 |
-
echo foogallery_attachment_html( $attachment, $args );
|
21 |
-
} ?>
|
22 |
-
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery default responsive gallery template
|
4 |
+
*/
|
5 |
+
global $current_foogallery;
|
6 |
+
|
7 |
+
$lightbox = foogallery_gallery_template_setting( 'lightbox', 'unknown' );
|
8 |
+
$spacing = foogallery_gallery_template_setting( 'spacing', 'spacing-width-10' );
|
9 |
+
$alignment = foogallery_gallery_template_setting( 'alignment', 'fg-center' );
|
10 |
+
|
11 |
+
$foogallery_default_classes = foogallery_build_class_attribute_safe( $current_foogallery, 'foogallery-lightbox-' . $lightbox, $spacing, $alignment );
|
12 |
+
$foogallery_default_attributes = foogallery_build_container_attributes_safe( $current_foogallery, array( 'class' => $foogallery_default_classes ) );
|
13 |
+
|
14 |
+
?><div <?php echo $foogallery_default_attributes; ?>>
|
15 |
+
<?php foreach ( foogallery_current_gallery_attachments_for_rendering() as $attachment ) {
|
16 |
+
echo foogallery_attachment_html( $attachment );
|
17 |
+
} ?>
|
18 |
+
</div>
|
|
|
|
|
|
|
|
extensions/default-templates/default/js/admin-gallery-default.js
CHANGED
@@ -1,89 +1,89 @@
|
|
1 |
-
(function (FOOGALLERY_DEF_TEMPLATE, $, undefined) {
|
2 |
-
|
3 |
-
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses = function() {
|
4 |
-
|
5 |
-
var $previewImage = $('.foogallery-default-preview'),
|
6 |
-
border_style = $('input[name="foogallery_settings[default_border-style]"]:checked').val(),
|
7 |
-
hover_effect = $('input[name="foogallery_settings[default_hover-effect]"]:checked').val(),
|
8 |
-
hover_effect_type = $('input[name="foogallery_settings[default_hover-effect-type]"]:checked').val(),
|
9 |
-
caption_effect_type = $('input[name="foogallery_settings[default_caption-hover-effect]"]:checked').val(),
|
10 |
-
classNames = 'foogallery-default-preview foogallery-container foogallery-default ' + border_style + ' ' + hover_effect_type;
|
11 |
-
|
12 |
-
var $hoverEffectrow = $('.gallery_template_field-default-hover-effect'),
|
13 |
-
$captionHoverRow = $('.gallery_template_field-default-caption-hover-effect'),
|
14 |
-
$captionContentRow = $('.gallery_template_field-default-caption-content');
|
15 |
-
|
16 |
-
if ( hover_effect_type === '' ) {
|
17 |
-
//icon hover effect type
|
18 |
-
$hoverEffectrow.show();
|
19 |
-
$captionHoverRow.hide();
|
20 |
-
$captionContentRow.hide();
|
21 |
-
classNames += ' ' + hover_effect;
|
22 |
-
} else if ( hover_effect_type === 'hover-effect-caption' ) {
|
23 |
-
//caption hover effect type
|
24 |
-
$hoverEffectrow.hide();
|
25 |
-
$captionHoverRow.show();
|
26 |
-
$captionContentRow.show();
|
27 |
-
classNames += ' ' + caption_effect_type;
|
28 |
-
} else {
|
29 |
-
//no hover effect type
|
30 |
-
$hoverEffectrow.hide();
|
31 |
-
$captionHoverRow.hide();
|
32 |
-
$captionContentRow.hide();
|
33 |
-
}
|
34 |
-
|
35 |
-
$previewImage.attr('class' , classNames);
|
36 |
-
};
|
37 |
-
|
38 |
-
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent = function(){
|
39 |
-
var $previewImage = $('.foogallery-default-preview'),
|
40 |
-
$caption = $previewImage.find('.foogallery-caption'),
|
41 |
-
$title = $previewImage.find('.foogallery-caption-title'),
|
42 |
-
$desc = $previewImage.find('.foogallery-caption-desc'),
|
43 |
-
caption_content = $('input[name="foogallery_settings[default_caption-content]"]:checked').val();
|
44 |
-
|
45 |
-
$caption.add($title).add($desc).show();
|
46 |
-
switch(caption_content){
|
47 |
-
case 'title':
|
48 |
-
$desc.hide();
|
49 |
-
break;
|
50 |
-
case 'desc':
|
51 |
-
$title.hide();
|
52 |
-
break;
|
53 |
-
case 'none':
|
54 |
-
$caption.hide();
|
55 |
-
break;
|
56 |
-
}
|
57 |
-
};
|
58 |
-
|
59 |
-
FOOGALLERY_DEF_TEMPLATE.adminReady = function () {
|
60 |
-
$('body').on('foogallery-gallery-template-changed-default', function() {
|
61 |
-
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses();
|
62 |
-
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
|
63 |
-
});
|
64 |
-
|
65 |
-
$('input[name="foogallery_settings[default_border-style]"], ' +
|
66 |
-
'input[name="foogallery_settings[default_hover-effect]"], ' +
|
67 |
-
'input[name="foogallery_settings[default_hover-effect-type]"], ' +
|
68 |
-
'input[name="foogallery_settings[default_caption-hover-effect]"]').change(function() {
|
69 |
-
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses();
|
70 |
-
});
|
71 |
-
|
72 |
-
$('input[name="foogallery_settings[default_caption-content]"]').change(function() {
|
73 |
-
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
|
74 |
-
});
|
75 |
-
|
76 |
-
$('.foogallery-thumbnail-preview').click(function(e) {
|
77 |
-
e.preventDefault();
|
78 |
-
});
|
79 |
-
|
80 |
-
//run when the page load for the first time too!
|
81 |
-
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses();
|
82 |
-
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
|
83 |
-
};
|
84 |
-
|
85 |
-
}(window.FOOGALLERY_DEF_TEMPLATE = window.FOOGALLERY_DEF_TEMPLATE || {}, jQuery));
|
86 |
-
|
87 |
-
jQuery(function () {
|
88 |
-
FOOGALLERY_DEF_TEMPLATE.adminReady();
|
89 |
});
|
1 |
+
(function (FOOGALLERY_DEF_TEMPLATE, $, undefined) {
|
2 |
+
|
3 |
+
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses = function() {
|
4 |
+
|
5 |
+
var $previewImage = $('.foogallery-default-preview'),
|
6 |
+
border_style = $('input[name="foogallery_settings[default_border-style]"]:checked').val(),
|
7 |
+
hover_effect = $('input[name="foogallery_settings[default_hover-effect]"]:checked').val(),
|
8 |
+
hover_effect_type = $('input[name="foogallery_settings[default_hover-effect-type]"]:checked').val(),
|
9 |
+
caption_effect_type = $('input[name="foogallery_settings[default_caption-hover-effect]"]:checked').val(),
|
10 |
+
classNames = 'foogallery-default-preview foogallery-container foogallery-default ' + border_style + ' ' + hover_effect_type;
|
11 |
+
|
12 |
+
var $hoverEffectrow = $('.gallery_template_field-default-hover-effect'),
|
13 |
+
$captionHoverRow = $('.gallery_template_field-default-caption-hover-effect'),
|
14 |
+
$captionContentRow = $('.gallery_template_field-default-caption-content');
|
15 |
+
|
16 |
+
if ( hover_effect_type === '' ) {
|
17 |
+
//icon hover effect type
|
18 |
+
$hoverEffectrow.show();
|
19 |
+
$captionHoverRow.hide();
|
20 |
+
$captionContentRow.hide();
|
21 |
+
classNames += ' ' + hover_effect;
|
22 |
+
} else if ( hover_effect_type === 'hover-effect-caption' ) {
|
23 |
+
//caption hover effect type
|
24 |
+
$hoverEffectrow.hide();
|
25 |
+
$captionHoverRow.show();
|
26 |
+
$captionContentRow.show();
|
27 |
+
classNames += ' ' + caption_effect_type;
|
28 |
+
} else {
|
29 |
+
//no hover effect type
|
30 |
+
$hoverEffectrow.hide();
|
31 |
+
$captionHoverRow.hide();
|
32 |
+
$captionContentRow.hide();
|
33 |
+
}
|
34 |
+
|
35 |
+
$previewImage.attr('class' , classNames);
|
36 |
+
};
|
37 |
+
|
38 |
+
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent = function(){
|
39 |
+
var $previewImage = $('.foogallery-default-preview'),
|
40 |
+
$caption = $previewImage.find('.foogallery-caption'),
|
41 |
+
$title = $previewImage.find('.foogallery-caption-title'),
|
42 |
+
$desc = $previewImage.find('.foogallery-caption-desc'),
|
43 |
+
caption_content = $('input[name="foogallery_settings[default_caption-content]"]:checked').val();
|
44 |
+
|
45 |
+
$caption.add($title).add($desc).show();
|
46 |
+
switch(caption_content){
|
47 |
+
case 'title':
|
48 |
+
$desc.hide();
|
49 |
+
break;
|
50 |
+
case 'desc':
|
51 |
+
$title.hide();
|
52 |
+
break;
|
53 |
+
case 'none':
|
54 |
+
$caption.hide();
|
55 |
+
break;
|
56 |
+
}
|
57 |
+
};
|
58 |
+
|
59 |
+
FOOGALLERY_DEF_TEMPLATE.adminReady = function () {
|
60 |
+
$('body').on('foogallery-gallery-template-changed-default', function() {
|
61 |
+
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses();
|
62 |
+
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
|
63 |
+
});
|
64 |
+
|
65 |
+
$('input[name="foogallery_settings[default_border-style]"], ' +
|
66 |
+
'input[name="foogallery_settings[default_hover-effect]"], ' +
|
67 |
+
'input[name="foogallery_settings[default_hover-effect-type]"], ' +
|
68 |
+
'input[name="foogallery_settings[default_caption-hover-effect]"]').change(function() {
|
69 |
+
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses();
|
70 |
+
});
|
71 |
+
|
72 |
+
$('input[name="foogallery_settings[default_caption-content]"]').change(function() {
|
73 |
+
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
|
74 |
+
});
|
75 |
+
|
76 |
+
$('.foogallery-thumbnail-preview').click(function(e) {
|
77 |
+
e.preventDefault();
|
78 |
+
});
|
79 |
+
|
80 |
+
//run when the page load for the first time too!
|
81 |
+
FOOGALLERY_DEF_TEMPLATE.setPreviewClasses();
|
82 |
+
FOOGALLERY_DEF_TEMPLATE.showHideCaptionContent();
|
83 |
+
};
|
84 |
+
|
85 |
+
}(window.FOOGALLERY_DEF_TEMPLATE = window.FOOGALLERY_DEF_TEMPLATE || {}, jQuery));
|
86 |
+
|
87 |
+
jQuery(function () {
|
88 |
+
FOOGALLERY_DEF_TEMPLATE.adminReady();
|
89 |
});
|
extensions/default-templates/functions.php
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery default extensions common functions
|
4 |
-
*/
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Enqueue the core FooGallery stylesheet used by all default templates
|
8 |
-
*/
|
9 |
-
function foogallery_enqueue_core_gallery_template_style() {
|
10 |
-
$filename = foogallery_get_setting( 'enable_debugging', false ) ? '' : '.min';
|
11 |
-
$css = apply_filters( 'foogallery_core_gallery_style', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL . 'css/foogallery' . $filename . '.css' );
|
12 |
-
foogallery_enqueue_style( 'foogallery-core', $css, array(), FOOGALLERY_VERSION );
|
13 |
-
}
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Enqueue the core FooGallery script used by all default templates
|
17 |
-
*/
|
18 |
-
function foogallery_enqueue_core_gallery_template_script() {
|
19 |
-
$filename = foogallery_get_setting( 'enable_debugging', false ) ? '' : '.min';
|
20 |
-
$js = apply_filters( 'foogallery_core_gallery_script', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL . 'js/foogallery' . $filename . '.js' );
|
21 |
-
wp_enqueue_script( 'foogallery-core', $js, array('jquery'), FOOGALLERY_VERSION );
|
22 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery default extensions common functions
|
4 |
+
*/
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Enqueue the core FooGallery stylesheet used by all default templates
|
8 |
+
*/
|
9 |
+
function foogallery_enqueue_core_gallery_template_style() {
|
10 |
+
$filename = foogallery_get_setting( 'enable_debugging', false ) ? '' : '.min';
|
11 |
+
$css = apply_filters( 'foogallery_core_gallery_style', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL . 'css/foogallery' . $filename . '.css' );
|
12 |
+
foogallery_enqueue_style( 'foogallery-core', $css, array(), FOOGALLERY_VERSION );
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Enqueue the core FooGallery script used by all default templates
|
17 |
+
*/
|
18 |
+
function foogallery_enqueue_core_gallery_template_script() {
|
19 |
+
$filename = foogallery_get_setting( 'enable_debugging', false ) ? '' : '.min';
|
20 |
+
$js = apply_filters( 'foogallery_core_gallery_script', FOOGALLERY_DEFAULT_TEMPLATES_EXTENSION_SHARED_URL . 'js/foogallery' . $filename . '.js' );
|
21 |
+
wp_enqueue_script( 'foogallery-core', $js, array('jquery'), FOOGALLERY_VERSION );
|
22 |
+
}
|
extensions/default-templates/image-viewer/class-image-viewer-gallery-template.php
CHANGED
@@ -1,280 +1,298 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if ( !class_exists( 'FooGallery_Image_Viewer_Gallery_Template' ) ) {
|
4 |
-
|
5 |
-
define('FOOGALLERY_IMAGE_VIEWER_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
-
|
7 |
-
class FooGallery_Image_Viewer_Gallery_Template {
|
8 |
-
/**
|
9 |
-
* Wire up everything we need to run the extension
|
10 |
-
*/
|
11 |
-
function __construct() {
|
12 |
-
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
-
|
14 |
-
//add extra fields to the templates
|
15 |
-
add_filter( 'foogallery_override_gallery_template_fields-image-viewer', array( $this, 'add_common_thumbnail_fields' ), 10, 2 );
|
16 |
-
|
17 |
-
add_action( 'foogallery_located_template-image-viewer', array( $this, 'enqueue_dependencies' ) );
|
18 |
-
|
19 |
-
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
20 |
-
|
21 |
-
add_filter( 'foogallery_template_thumbnail_dimensions-image-viewer', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
22 |
-
|
23 |
-
//override specific settings when saving the gallery
|
24 |
-
add_filter( 'foogallery_save_gallery_settings-image-viewer', array( $this, 'override_settings'), 10, 3 );
|
25 |
-
|
26 |
-
//build up any preview arguments
|
27 |
-
add_filter( 'foogallery_preview_arguments-image-viewer', array( $this, 'preview_arguments' ), 10, 2 );
|
28 |
-
|
29 |
-
//build up the thumb dimensions from some arguments
|
30 |
-
add_filter( 'foogallery_calculate_thumbnail_dimensions-image-viewer', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
31 |
-
|
32 |
-
//alter the crop value if needed
|
33 |
-
add_filter( 'foogallery_render_gallery_template_field_value', array( $this, 'alter_field_value'), 10, 4 );
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
*
|
52 |
-
* @
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
*
|
63 |
-
* @
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
'
|
71 |
-
'
|
72 |
-
'
|
73 |
-
'
|
74 |
-
'
|
75 |
-
'
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
'
|
80 |
-
'
|
81 |
-
'
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
'
|
87 |
-
'
|
88 |
-
'
|
89 |
-
'
|
90 |
-
|
91 |
-
|
92 |
-
'
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
'
|
103 |
-
'
|
104 |
-
'
|
105 |
-
'
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
'
|
111 |
-
'
|
112 |
-
'
|
113 |
-
'
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
'
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
'fg-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
'
|
137 |
-
|
138 |
-
'
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
'
|
144 |
-
'
|
145 |
-
'
|
146 |
-
'
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
'
|
155 |
-
'
|
156 |
-
'
|
157 |
-
'
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
'
|
166 |
-
'
|
167 |
-
'
|
168 |
-
'
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
*
|
183 |
-
*
|
184 |
-
* @
|
185 |
-
*
|
186 |
-
* @
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
*
|
213 |
-
*
|
214 |
-
*
|
215 |
-
* @
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
*
|
233 |
-
*
|
234 |
-
* @param $
|
235 |
-
*
|
236 |
-
* @
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
*
|
250 |
-
*
|
251 |
-
* @
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
$args['
|
257 |
-
$args['text-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
*
|
265 |
-
*
|
266 |
-
*
|
267 |
-
* @
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
'
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( !class_exists( 'FooGallery_Image_Viewer_Gallery_Template' ) ) {
|
4 |
+
|
5 |
+
define('FOOGALLERY_IMAGE_VIEWER_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
+
|
7 |
+
class FooGallery_Image_Viewer_Gallery_Template {
|
8 |
+
/**
|
9 |
+
* Wire up everything we need to run the extension
|
10 |
+
*/
|
11 |
+
function __construct() {
|
12 |
+
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
+
|
14 |
+
//add extra fields to the templates
|
15 |
+
add_filter( 'foogallery_override_gallery_template_fields-image-viewer', array( $this, 'add_common_thumbnail_fields' ), 10, 2 );
|
16 |
+
|
17 |
+
add_action( 'foogallery_located_template-image-viewer', array( $this, 'enqueue_dependencies' ) );
|
18 |
+
|
19 |
+
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
20 |
+
|
21 |
+
add_filter( 'foogallery_template_thumbnail_dimensions-image-viewer', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
22 |
+
|
23 |
+
//override specific settings when saving the gallery
|
24 |
+
add_filter( 'foogallery_save_gallery_settings-image-viewer', array( $this, 'override_settings'), 10, 3 );
|
25 |
+
|
26 |
+
//build up any preview arguments
|
27 |
+
add_filter( 'foogallery_preview_arguments-image-viewer', array( $this, 'preview_arguments' ), 10, 2 );
|
28 |
+
|
29 |
+
//build up the thumb dimensions from some arguments
|
30 |
+
add_filter( 'foogallery_calculate_thumbnail_dimensions-image-viewer', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
31 |
+
|
32 |
+
//alter the crop value if needed
|
33 |
+
add_filter( 'foogallery_render_gallery_template_field_value', array( $this, 'alter_field_value'), 10, 4 );
|
34 |
+
|
35 |
+
//build up the arguments needed for rendering this template
|
36 |
+
add_filter( 'foogallery_gallery_template_arguments-image-viewer', array( $this, 'build_gallery_template_arguments' ) );
|
37 |
+
}
|
38 |
+
|
39 |
+
function alter_field_value( $value, $field, $gallery, $template ) {
|
40 |
+
//only do something if we are dealing with the thumbnail_dimensions field in this template
|
41 |
+
if ( 'image-viewer' === $template['slug'] && 'thumbnail_size' === $field['id'] ) {
|
42 |
+
if ( !array_key_exists( 'crop', $value ) ) {
|
43 |
+
$value['crop'] = true;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
return $value;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Register myself so that all associated JS and CSS files can be found and automatically included
|
52 |
+
* @param $extensions
|
53 |
+
*
|
54 |
+
* @return array
|
55 |
+
*/
|
56 |
+
function register_myself( $extensions ) {
|
57 |
+
$extensions[] = __FILE__;
|
58 |
+
return $extensions;
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Add our gallery template to the list of templates available for every gallery
|
63 |
+
* @param $gallery_templates
|
64 |
+
*
|
65 |
+
* @return array
|
66 |
+
*/
|
67 |
+
function add_template( $gallery_templates ) {
|
68 |
+
|
69 |
+
$gallery_templates[] = array(
|
70 |
+
'slug' => 'image-viewer',
|
71 |
+
'name' => __( 'Image Viewer', 'foogallery' ),
|
72 |
+
'preview_support' => true,
|
73 |
+
'common_fields_support' => true,
|
74 |
+
'lazyload_support' => true,
|
75 |
+
'mandatory_classes' => 'fg-image-viewer',
|
76 |
+
'thumbnail_dimensions' => true,
|
77 |
+
'fields' => array(
|
78 |
+
array(
|
79 |
+
'id' => 'thumbnail-help',
|
80 |
+
'title' => __( 'Thumbnail Help', 'foogallery' ),
|
81 |
+
'desc' => __( 'It is recommended to crop your thumbnails, so that your gallery remains a constant size. If you do not crop, then the size of the gallery could potentially change for each thumbnail.', 'foogallery' ),
|
82 |
+
'section' => __( 'General', 'foogallery' ),
|
83 |
+
'type' => 'help'
|
84 |
+
),
|
85 |
+
array(
|
86 |
+
'id' => 'thumbnail_size',
|
87 |
+
'title' => __( 'Thumb Size', 'foogallery' ),
|
88 |
+
'section' => __( 'General', 'foogallery' ),
|
89 |
+
'desc' => __( 'Choose the size of your thumbnails', 'foogallery' ),
|
90 |
+
'type' => 'thumb_size',
|
91 |
+
'default' => array(
|
92 |
+
'width' => 640,
|
93 |
+
'height' => 360,
|
94 |
+
'crop' => true
|
95 |
+
),
|
96 |
+
'row_data'=> array(
|
97 |
+
'data-foogallery-change-selector' => 'input',
|
98 |
+
'data-foogallery-preview' => 'shortcode'
|
99 |
+
)
|
100 |
+
),
|
101 |
+
array(
|
102 |
+
'id' => 'thumbnail_link',
|
103 |
+
'title' => __( 'Thumb Link', 'foogallery' ),
|
104 |
+
'section' => __( 'General', 'foogallery' ),
|
105 |
+
'default' => 'image' ,
|
106 |
+
'type' => 'thumb_link',
|
107 |
+
'desc' => __( 'You can choose to either link each thumbnail to the full size image or to the image\'s attachment page', 'foogallery')
|
108 |
+
),
|
109 |
+
array(
|
110 |
+
'id' => 'lightbox',
|
111 |
+
'title' => __( 'Lightbox', 'foogallery' ),
|
112 |
+
'section' => __( 'General', 'foogallery' ),
|
113 |
+
'desc' => __( 'Choose which lightbox you want to use in the gallery', 'foogallery' ),
|
114 |
+
'default' => 'none',
|
115 |
+
'type' => 'lightbox'
|
116 |
+
),
|
117 |
+
array(
|
118 |
+
'id' => 'alignment',
|
119 |
+
'title' => __( 'Alignment', 'foogallery' ),
|
120 |
+
'section' => __( 'General', 'foogallery' ),
|
121 |
+
'desc' => __( 'The horizontal alignment of the thumbnails inside the gallery', 'foogallery' ),
|
122 |
+
'default' => 'fg-center',
|
123 |
+
'type' => 'radio',
|
124 |
+
'spacer' => '<span class="spacer"></span>',
|
125 |
+
'choices' => array(
|
126 |
+
'fg-left' => __( 'Left', 'foogallery' ),
|
127 |
+
'fg-center' => __( 'Center', 'foogallery' ),
|
128 |
+
'fg-right' => __( 'Right', 'foogallery' ),
|
129 |
+
),
|
130 |
+
'row_data'=> array(
|
131 |
+
'data-foogallery-change-selector' => 'input:radio',
|
132 |
+
'data-foogallery-preview' => 'class'
|
133 |
+
)
|
134 |
+
),
|
135 |
+
array(
|
136 |
+
'id' => 'language-help',
|
137 |
+
'title' => __( 'Language Help', 'foogallery' ),
|
138 |
+
'desc' => __( 'This gallery template shows the below items of text. Change them to suit your preference or language.', 'foogallery' ),
|
139 |
+
'section' => __( 'General', 'foogallery' ),
|
140 |
+
'type' => 'help'
|
141 |
+
),
|
142 |
+
array(
|
143 |
+
'id' => 'text-prev',
|
144 |
+
'title' => __( '"Prev" Text', 'foogallery' ),
|
145 |
+
'section' => __( 'General', 'foogallery' ),
|
146 |
+
'type' => 'text',
|
147 |
+
'default' => __('Prev', 'foogallery'),
|
148 |
+
'row_data'=> array(
|
149 |
+
'data-foogallery-change-selector' => 'input',
|
150 |
+
'data-foogallery-preview' => 'shortcode'
|
151 |
+
)
|
152 |
+
),
|
153 |
+
array(
|
154 |
+
'id' => 'text-of',
|
155 |
+
'title' => __( '"of" Text', 'foogallery' ),
|
156 |
+
'section' => __( 'General', 'foogallery' ),
|
157 |
+
'type' => 'text',
|
158 |
+
'default' => __('of', 'foogallery'),
|
159 |
+
'row_data'=> array(
|
160 |
+
'data-foogallery-change-selector' => 'input',
|
161 |
+
'data-foogallery-preview' => 'shortcode'
|
162 |
+
)
|
163 |
+
),
|
164 |
+
array(
|
165 |
+
'id' => 'text-next',
|
166 |
+
'title' => __( '"Next" Text', 'foogallery' ),
|
167 |
+
'section' => __( 'General', 'foogallery' ),
|
168 |
+
'type' => 'text',
|
169 |
+
'default' => __('Next', 'foogallery'),
|
170 |
+
'row_data'=> array(
|
171 |
+
'data-foogallery-change-selector' => 'input',
|
172 |
+
'data-foogallery-preview' => 'shortcode'
|
173 |
+
)
|
174 |
+
)
|
175 |
+
)
|
176 |
+
);
|
177 |
+
|
178 |
+
return $gallery_templates;
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Add thumbnail fields to the gallery template
|
183 |
+
*
|
184 |
+
* @uses "foogallery_override_gallery_template_fields"
|
185 |
+
* @param $fields
|
186 |
+
* @param $template
|
187 |
+
*
|
188 |
+
* @return array
|
189 |
+
*/
|
190 |
+
function add_common_thumbnail_fields( $fields, $template ) {
|
191 |
+
|
192 |
+
//update specific fields
|
193 |
+
foreach ($fields as &$field) {
|
194 |
+
if ( 'rounded_corners' === $field['id'] ) {
|
195 |
+
unset( $field['choices']['fg-round-full'] );
|
196 |
+
}
|
197 |
+
}
|
198 |
+
|
199 |
+
return $fields;
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Enqueue scripts that the default gallery template relies on
|
204 |
+
*/
|
205 |
+
function enqueue_dependencies( $gallery ) {
|
206 |
+
//enqueue core files
|
207 |
+
foogallery_enqueue_core_gallery_template_style();
|
208 |
+
foogallery_enqueue_core_gallery_template_script();
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Get the thumb dimensions arguments saved for the gallery for this gallery template
|
213 |
+
*
|
214 |
+
* @param array $dimensions
|
215 |
+
* @param FooGallery $foogallery
|
216 |
+
*
|
217 |
+
* @return mixed
|
218 |
+
*/
|
219 |
+
function get_thumbnail_dimensions( $dimensions, $foogallery ) {
|
220 |
+
$dimensions = $foogallery->get_meta( 'image-viewer_thumbnail_size', array(
|
221 |
+
'width' => 640,
|
222 |
+
'height' => 360,
|
223 |
+
'crop' => true
|
224 |
+
) );
|
225 |
+
if ( !array_key_exists( 'crop', $dimensions ) ) {
|
226 |
+
$dimensions['crop'] = true;
|
227 |
+
}
|
228 |
+
return $dimensions;
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Override specific settings so that the gallery template will always work
|
233 |
+
*
|
234 |
+
* @param $settings
|
235 |
+
* @param $post_id
|
236 |
+
* @param $form_data
|
237 |
+
*
|
238 |
+
* @return mixed
|
239 |
+
*/
|
240 |
+
function override_settings($settings, $post_id, $form_data) {
|
241 |
+
if ( 'fg-round-full' === $settings['image-viewer_rounded_corners'] ) {
|
242 |
+
$settings['image-viewer_rounded_corners'] = 'fg-round-large';
|
243 |
+
}
|
244 |
+
|
245 |
+
return $settings;
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* Build up a arguments used in the preview of the gallery
|
250 |
+
* @param $args
|
251 |
+
* @param $post_data
|
252 |
+
*
|
253 |
+
* @return mixed
|
254 |
+
*/
|
255 |
+
function preview_arguments( $args, $post_data ) {
|
256 |
+
$args['thumbnail_size'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_thumbnail_size'];
|
257 |
+
$args['text-prev'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_text-prev'];
|
258 |
+
$args['text-of'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_text-of'];
|
259 |
+
$args['text-next'] = $post_data[FOOGALLERY_META_SETTINGS]['image-viewer_text-next'];
|
260 |
+
return $args;
|
261 |
+
}
|
262 |
+
|
263 |
+
/**
|
264 |
+
* Builds thumb dimensions from arguments
|
265 |
+
*
|
266 |
+
* @param array $dimensions
|
267 |
+
* @param array $arguments
|
268 |
+
*
|
269 |
+
* @return mixed
|
270 |
+
*/
|
271 |
+
function build_thumbnail_dimensions_from_arguments( $dimensions, $arguments ) {
|
272 |
+
if ( array_key_exists( 'thumbnail_size', $arguments) ) {
|
273 |
+
return array(
|
274 |
+
'height' => intval($arguments['thumbnail_size']['height']),
|
275 |
+
'width' => intval($arguments['thumbnail_size']['width']),
|
276 |
+
'crop' => $arguments['thumbnail_size']['crop']
|
277 |
+
);
|
278 |
+
}
|
279 |
+
return null;
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Build up the arguments needed for rendering this gallery template
|
284 |
+
*
|
285 |
+
* @param $args
|
286 |
+
* @return array
|
287 |
+
*/
|
288 |
+
function build_gallery_template_arguments( $args ) {
|
289 |
+
$args = foogallery_gallery_template_setting( 'thumbnail_size', 'thumbnail' );
|
290 |
+
if ( !array_key_exists( 'crop', $args ) ) {
|
291 |
+
$args['crop'] = '1'; //we now force thumbs to be cropped by default
|
292 |
+
}
|
293 |
+
$args['link'] = foogallery_gallery_template_setting( 'thumbnail_link', 'image' );
|
294 |
+
|
295 |
+
return $args;
|
296 |
+
}
|
297 |
+
}
|
298 |
}
|
extensions/default-templates/image-viewer/gallery-image-viewer.php
CHANGED
@@ -1,43 +1,34 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery Image Viewer gallery template
|
4 |
-
* This is the template that is run when a FooGallery shortcode is rendered to the frontend
|
5 |
-
*/
|
6 |
-
//the current FooGallery that is currently being rendered to the frontend
|
7 |
-
global $current_foogallery;
|
8 |
-
//the current shortcode args
|
9 |
-
global $current_foogallery_arguments;
|
10 |
-
//get our thumbnail sizing args
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
$
|
17 |
-
$
|
18 |
-
|
19 |
-
$
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
?><
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
echo foogallery_attachment_html( $attachment, $args );
|
35 |
-
} ?>
|
36 |
-
</div>
|
37 |
-
<div class="fiv-ctrls">
|
38 |
-
<div class="fiv-prev"><span><?php echo $text_prev; ?></span></div>
|
39 |
-
<label class="fiv-count"><span class="fiv-count-current">1</span><?php echo $text_of; ?><span class="fiv-count-total"><?php echo count($attachments) ?></span></label>
|
40 |
-
<div class="fiv-next"><span><?php echo $text_next; ?></span></div>
|
41 |
-
</div>
|
42 |
-
</div>
|
43 |
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery Image Viewer gallery template
|
4 |
+
* This is the template that is run when a FooGallery shortcode is rendered to the frontend
|
5 |
+
*/
|
6 |
+
//the current FooGallery that is currently being rendered to the frontend
|
7 |
+
global $current_foogallery;
|
8 |
+
//the current shortcode args
|
9 |
+
global $current_foogallery_arguments;
|
10 |
+
//get our thumbnail sizing args
|
11 |
+
|
12 |
+
//get which lightbox we want to use
|
13 |
+
$lightbox = foogallery_gallery_template_setting( 'lightbox', 'unknown' );
|
14 |
+
$alignment = foogallery_gallery_template_setting( 'alignment', 'fg-center' );
|
15 |
+
$text_prev = foogallery_gallery_template_setting( 'text-prev', __('Prev', 'foogallery') );
|
16 |
+
$text_of = foogallery_gallery_template_setting( 'text-of', __('of', 'foogallery') );
|
17 |
+
$text_next = foogallery_gallery_template_setting( 'text-next', __('Next', 'foogallery') );
|
18 |
+
$link = foogallery_gallery_template_setting( 'thumbnail_link', 'image' );
|
19 |
+
$foogallery_imageviewer_classes = foogallery_build_class_attribute_safe( $current_foogallery, 'foogallery-link-' . $link, 'foogallery-lightbox-' . $lightbox, $alignment );
|
20 |
+
$foogallery_imageviewer_attributes = foogallery_build_container_attributes_safe( $current_foogallery, array( 'class' => $foogallery_imageviewer_classes ) );
|
21 |
+
?><div <?php echo $foogallery_imageviewer_attributes; ?>>
|
22 |
+
<div class="fiv-inner">
|
23 |
+
<div class="fiv-inner-container">
|
24 |
+
<?php foreach ( foogallery_current_gallery_attachments_for_rendering() as $attachment ) {
|
25 |
+
echo foogallery_attachment_html( $attachment );
|
26 |
+
} ?>
|
27 |
+
</div>
|
28 |
+
<div class="fiv-ctrls">
|
29 |
+
<div class="fiv-prev"><span><?php echo $text_prev; ?></span></div>
|
30 |
+
<label class="fiv-count"><span class="fiv-count-current">1</span><?php echo $text_of; ?><span class="fiv-count-total"><?php echo $current_foogallery->attachment_count(); ?></span></label>
|
31 |
+
<div class="fiv-next"><span><?php echo $text_next; ?></span></div>
|
32 |
+
</div>
|
33 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
</div>
|
extensions/default-templates/image-viewer/js/admin-gallery-image-viewer.js
CHANGED
@@ -1,123 +1,123 @@
|
|
1 |
-
//Use this file to inject custom javascript behaviour into the foogallery edit page
|
2 |
-
//For an example usage, check out wp-content/foogallery/extensions/default-templates/js/admin-gallery-default.js
|
3 |
-
|
4 |
-
(function (IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION, $, undefined) {
|
5 |
-
|
6 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.setPreviewClasses = function() {
|
7 |
-
var $previewImage = $('.foogallery-image-viewer-preview'),
|
8 |
-
theme = $('input[name="foogallery_settings[image-viewer_theme]"]:checked').val(),
|
9 |
-
hover_effect = $('input[name="foogallery_settings[image-viewer_hover-effect]"]:checked').val(),
|
10 |
-
hover_effect_type = $('input[name="foogallery_settings[image-viewer_hover-effect-type]"]:checked').val();
|
11 |
-
|
12 |
-
var $styles = $('#image-preview-custom-styles');
|
13 |
-
if (theme === 'fiv-custom'){
|
14 |
-
var bg_color = $('input[name="foogallery_settings[image-viewer_theme_custom_bgcolor]"]').val(),
|
15 |
-
text_color = $('input[name="foogallery_settings[image-viewer_theme_custom_textcolor]"]').val(),
|
16 |
-
border_color = $('input[name="foogallery_settings[image-viewer_theme_custom_bordercolor]"]').val(),
|
17 |
-
hover_color = $('input[name="foogallery_settings[image-viewer_theme_custom_hovercolor]"]').val();
|
18 |
-
|
19 |
-
var css = '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner,';
|
20 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-prev,';
|
21 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-next {';
|
22 |
-
css += 'background-color: '+bg_color+';';
|
23 |
-
css += 'color: '+text_color+';';
|
24 |
-
css += '}';
|
25 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner,';
|
26 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-inner-container,';
|
27 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-prev,';
|
28 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-next {';
|
29 |
-
css += 'border-color: '+border_color+';';
|
30 |
-
css += '}';
|
31 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-prev:hover,';
|
32 |
-
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-next:hover {';
|
33 |
-
css += 'background-color: '+hover_color+';';
|
34 |
-
css += '}';
|
35 |
-
$styles.remove();
|
36 |
-
$('head').append('<style id="image-preview-custom-styles">'+css+'</style>');
|
37 |
-
} else {
|
38 |
-
$styles.remove();
|
39 |
-
}
|
40 |
-
|
41 |
-
$previewImage.attr('class' ,'foogallery-image-viewer-preview foogallery-container foogallery-image-viewer ' + theme);
|
42 |
-
if (hover_effect_type !== 'hover-effect-none'){
|
43 |
-
$previewImage.addClass(hover_effect_type + ' ' + hover_effect);
|
44 |
-
}
|
45 |
-
|
46 |
-
var $hoverEffectrow = $('.gallery_template_field-image-viewer-hover-effect');
|
47 |
-
if ( hover_effect_type === '' ) {
|
48 |
-
$hoverEffectrow.show();
|
49 |
-
} else {
|
50 |
-
$hoverEffectrow.hide();
|
51 |
-
}
|
52 |
-
};
|
53 |
-
|
54 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows = function(){
|
55 |
-
var $theme_rows = $('.gallery_template_field-image-viewer-theme_custom_bgcolor')
|
56 |
-
.add('.gallery_template_field-image-viewer-theme_custom_textcolor')
|
57 |
-
.add('.gallery_template_field-image-viewer-theme_custom_hovercolor')
|
58 |
-
.add('.gallery_template_field-image-viewer-theme_custom_bordercolor');
|
59 |
-
|
60 |
-
if ( $('input[name="foogallery_settings[image-viewer_theme]"]:checked').val() === 'fiv-custom' ) {
|
61 |
-
$theme_rows.show();
|
62 |
-
} else {
|
63 |
-
$theme_rows.hide();
|
64 |
-
}
|
65 |
-
};
|
66 |
-
|
67 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideCaptionContent = function(){
|
68 |
-
var $previewImage = $('.foogallery-image-viewer-preview'),
|
69 |
-
$caption = $previewImage.find('.foogallery-caption'),
|
70 |
-
$title = $previewImage.find('.foogallery-caption-title'),
|
71 |
-
$desc = $previewImage.find('.foogallery-caption-desc'),
|
72 |
-
caption_content = $('input[name="foogallery_settings[image-viewer_caption-content]"]:checked').val();
|
73 |
-
|
74 |
-
$caption.add($title).add($desc).show();
|
75 |
-
switch(caption_content){
|
76 |
-
case 'title':
|
77 |
-
$desc.hide();
|
78 |
-
break;
|
79 |
-
case 'desc':
|
80 |
-
$title.hide();
|
81 |
-
break;
|
82 |
-
case 'none':
|
83 |
-
$caption.hide();
|
84 |
-
break;
|
85 |
-
}
|
86 |
-
};
|
87 |
-
|
88 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.adminReady = function () {
|
89 |
-
$('body').on('foogallery-gallery-template-changed-image-viewer', function() {
|
90 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.setPreviewClasses();
|
91 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows();
|
92 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideCaptionContent();
|
93 |
-
});
|
94 |
-
|
95 |
-
var ps = 'input[name="foogallery_settings[image-viewer_hover-effect]"], ' +
|
96 |
-
'input[name="foogallery_settings[image-viewer_hover-effect-type]"], ' +
|
97 |
-
'input[name="foogallery_settings[image-viewer_theme]"], ' +
|
98 |
-
'input[name="foogallery_settings[image-viewer_theme_custom_bgcolor]"], ' +
|
99 |
-
'input[name="foogallery_settings[image-viewer_theme_custom_textcolor]"], ' +
|
100 |
-
'input[name="foogallery_settings[image-viewer_theme_custom_bordercolor]"], ' +
|
101 |
-
'input[name="foogallery_settings[image-viewer_theme_custom_hovercolor]"]';
|
102 |
-
$(ps).change(function() {
|
103 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.setPreviewClasses();
|
104 |
-
});
|
105 |
-
|
106 |
-
$('input[name="foogallery_settings[image-viewer_caption-content]"]').change(function() {
|
107 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideCaptionContent();
|
108 |
-
});
|
109 |
-
|
110 |
-
$('input[name="foogallery_settings[image-viewer_theme]"]').change(function() {
|
111 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows();
|
112 |
-
});
|
113 |
-
|
114 |
-
$('.foogallery-image-viewer-preview').click(function(e) {
|
115 |
-
e.preventDefault();
|
116 |
-
});
|
117 |
-
};
|
118 |
-
|
119 |
-
}(window.IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION = window.IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION || {}, jQuery));
|
120 |
-
|
121 |
-
jQuery(function () {
|
122 |
-
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.adminReady();
|
123 |
});
|
1 |
+
//Use this file to inject custom javascript behaviour into the foogallery edit page
|
2 |
+
//For an example usage, check out wp-content/foogallery/extensions/default-templates/js/admin-gallery-default.js
|
3 |
+
|
4 |
+
(function (IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION, $, undefined) {
|
5 |
+
|
6 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.setPreviewClasses = function() {
|
7 |
+
var $previewImage = $('.foogallery-image-viewer-preview'),
|
8 |
+
theme = $('input[name="foogallery_settings[image-viewer_theme]"]:checked').val(),
|
9 |
+
hover_effect = $('input[name="foogallery_settings[image-viewer_hover-effect]"]:checked').val(),
|
10 |
+
hover_effect_type = $('input[name="foogallery_settings[image-viewer_hover-effect-type]"]:checked').val();
|
11 |
+
|
12 |
+
var $styles = $('#image-preview-custom-styles');
|
13 |
+
if (theme === 'fiv-custom'){
|
14 |
+
var bg_color = $('input[name="foogallery_settings[image-viewer_theme_custom_bgcolor]"]').val(),
|
15 |
+
text_color = $('input[name="foogallery_settings[image-viewer_theme_custom_textcolor]"]').val(),
|
16 |
+
border_color = $('input[name="foogallery_settings[image-viewer_theme_custom_bordercolor]"]').val(),
|
17 |
+
hover_color = $('input[name="foogallery_settings[image-viewer_theme_custom_hovercolor]"]').val();
|
18 |
+
|
19 |
+
var css = '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner,';
|
20 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-prev,';
|
21 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-next {';
|
22 |
+
css += 'background-color: '+bg_color+';';
|
23 |
+
css += 'color: '+text_color+';';
|
24 |
+
css += '}';
|
25 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner,';
|
26 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-inner-container,';
|
27 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-prev,';
|
28 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-next {';
|
29 |
+
css += 'border-color: '+border_color+';';
|
30 |
+
css += '}';
|
31 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-prev:hover,';
|
32 |
+
css += '.foogallery-image-viewer-preview.fiv-custom > .fiv-inner > .fiv-ctrls > .fiv-next:hover {';
|
33 |
+
css += 'background-color: '+hover_color+';';
|
34 |
+
css += '}';
|
35 |
+
$styles.remove();
|
36 |
+
$('head').append('<style id="image-preview-custom-styles">'+css+'</style>');
|
37 |
+
} else {
|
38 |
+
$styles.remove();
|
39 |
+
}
|
40 |
+
|
41 |
+
$previewImage.attr('class' ,'foogallery-image-viewer-preview foogallery-container foogallery-image-viewer ' + theme);
|
42 |
+
if (hover_effect_type !== 'hover-effect-none'){
|
43 |
+
$previewImage.addClass(hover_effect_type + ' ' + hover_effect);
|
44 |
+
}
|
45 |
+
|
46 |
+
var $hoverEffectrow = $('.gallery_template_field-image-viewer-hover-effect');
|
47 |
+
if ( hover_effect_type === '' ) {
|
48 |
+
$hoverEffectrow.show();
|
49 |
+
} else {
|
50 |
+
$hoverEffectrow.hide();
|
51 |
+
}
|
52 |
+
};
|
53 |
+
|
54 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows = function(){
|
55 |
+
var $theme_rows = $('.gallery_template_field-image-viewer-theme_custom_bgcolor')
|
56 |
+
.add('.gallery_template_field-image-viewer-theme_custom_textcolor')
|
57 |
+
.add('.gallery_template_field-image-viewer-theme_custom_hovercolor')
|
58 |
+
.add('.gallery_template_field-image-viewer-theme_custom_bordercolor');
|
59 |
+
|
60 |
+
if ( $('input[name="foogallery_settings[image-viewer_theme]"]:checked').val() === 'fiv-custom' ) {
|
61 |
+
$theme_rows.show();
|
62 |
+
} else {
|
63 |
+
$theme_rows.hide();
|
64 |
+
}
|
65 |
+
};
|
66 |
+
|
67 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideCaptionContent = function(){
|
68 |
+
var $previewImage = $('.foogallery-image-viewer-preview'),
|
69 |
+
$caption = $previewImage.find('.foogallery-caption'),
|
70 |
+
$title = $previewImage.find('.foogallery-caption-title'),
|
71 |
+
$desc = $previewImage.find('.foogallery-caption-desc'),
|
72 |
+
caption_content = $('input[name="foogallery_settings[image-viewer_caption-content]"]:checked').val();
|
73 |
+
|
74 |
+
$caption.add($title).add($desc).show();
|
75 |
+
switch(caption_content){
|
76 |
+
case 'title':
|
77 |
+
$desc.hide();
|
78 |
+
break;
|
79 |
+
case 'desc':
|
80 |
+
$title.hide();
|
81 |
+
break;
|
82 |
+
case 'none':
|
83 |
+
$caption.hide();
|
84 |
+
break;
|
85 |
+
}
|
86 |
+
};
|
87 |
+
|
88 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.adminReady = function () {
|
89 |
+
$('body').on('foogallery-gallery-template-changed-image-viewer', function() {
|
90 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.setPreviewClasses();
|
91 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows();
|
92 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideCaptionContent();
|
93 |
+
});
|
94 |
+
|
95 |
+
var ps = 'input[name="foogallery_settings[image-viewer_hover-effect]"], ' +
|
96 |
+
'input[name="foogallery_settings[image-viewer_hover-effect-type]"], ' +
|
97 |
+
'input[name="foogallery_settings[image-viewer_theme]"], ' +
|
98 |
+
'input[name="foogallery_settings[image-viewer_theme_custom_bgcolor]"], ' +
|
99 |
+
'input[name="foogallery_settings[image-viewer_theme_custom_textcolor]"], ' +
|
100 |
+
'input[name="foogallery_settings[image-viewer_theme_custom_bordercolor]"], ' +
|
101 |
+
'input[name="foogallery_settings[image-viewer_theme_custom_hovercolor]"]';
|
102 |
+
$(ps).change(function() {
|
103 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.setPreviewClasses();
|
104 |
+
});
|
105 |
+
|
106 |
+
$('input[name="foogallery_settings[image-viewer_caption-content]"]').change(function() {
|
107 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideCaptionContent();
|
108 |
+
});
|
109 |
+
|
110 |
+
$('input[name="foogallery_settings[image-viewer_theme]"]').change(function() {
|
111 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.showHideRows();
|
112 |
+
});
|
113 |
+
|
114 |
+
$('.foogallery-image-viewer-preview').click(function(e) {
|
115 |
+
e.preventDefault();
|
116 |
+
});
|
117 |
+
};
|
118 |
+
|
119 |
+
}(window.IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION = window.IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION || {}, jQuery));
|
120 |
+
|
121 |
+
jQuery(function () {
|
122 |
+
IMAGE_VIEWER_TEMPLATE_FOOGALLERY_EXTENSION.adminReady();
|
123 |
});
|
extensions/default-templates/justified/class-justified-gallery-template.php
CHANGED
@@ -1,251 +1,270 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
4 |
-
|
5 |
-
define('FOOGALLERY_JUSTIFIED_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
-
|
7 |
-
class FooGallery_Justified_Gallery_Template {
|
8 |
-
/**
|
9 |
-
* Wire up everything we need to run the extension
|
10 |
-
*/
|
11 |
-
function __construct() {
|
12 |
-
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
-
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
14 |
-
add_filter( 'foogallery_template_thumbnail_dimensions-justified', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
15 |
-
|
16 |
-
add_action( 'foogallery_located_template-justified', array( $this, 'enqueue_dependencies' ) );
|
17 |
-
|
18 |
-
//add the data options needed for justified
|
19 |
-
add_filter( 'foogallery_build_container_data_options-justified', array( $this, 'add_justified_options' ), 10, 3 );
|
20 |
-
|
21 |
-
//build up any preview arguments
|
22 |
-
add_filter( 'foogallery_preview_arguments-justified', array( $this, 'preview_arguments' ), 10, 2 );
|
23 |
-
|
24 |
-
//build up the thumb dimensions from some arguments
|
25 |
-
add_filter( 'foogallery_calculate_thumbnail_dimensions-justified', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
*
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
*
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
'
|
52 |
-
'
|
53 |
-
'
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
'
|
61 |
-
'
|
62 |
-
'
|
63 |
-
'
|
64 |
-
'
|
65 |
-
'
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
'
|
76 |
-
'
|
77 |
-
'
|
78 |
-
'
|
79 |
-
'
|
80 |
-
'
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
'
|
92 |
-
'
|
93 |
-
'
|
94 |
-
'
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
'
|
107 |
-
'
|
108 |
-
|
109 |
-
'
|
110 |
-
'
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
'
|
122 |
-
'
|
123 |
-
'
|
124 |
-
|
125 |
-
|
126 |
-
'
|
127 |
-
|
128 |
-
|
129 |
-
'
|
130 |
-
'
|
131 |
-
'
|
132 |
-
|
133 |
-
|
134 |
-
'
|
135 |
-
|
136 |
-
|
137 |
-
'
|
138 |
-
'
|
139 |
-
'
|
140 |
-
'
|
141 |
-
'
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
'
|
146 |
-
'
|
147 |
-
'
|
148 |
-
|
149 |
-
|
150 |
-
'
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
*
|
166 |
-
*
|
167 |
-
* @
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
*
|
192 |
-
*
|
193 |
-
* @param $
|
194 |
-
*
|
195 |
-
*
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
$
|
208 |
-
$
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
*
|
220 |
-
* @
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
$args['
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
*
|
236 |
-
*
|
237 |
-
* @
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( !class_exists( 'FooGallery_Justified_Gallery_Template' ) ) {
|
4 |
+
|
5 |
+
define('FOOGALLERY_JUSTIFIED_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
+
|
7 |
+
class FooGallery_Justified_Gallery_Template {
|
8 |
+
/**
|
9 |
+
* Wire up everything we need to run the extension
|
10 |
+
*/
|
11 |
+
function __construct() {
|
12 |
+
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
+
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
14 |
+
add_filter( 'foogallery_template_thumbnail_dimensions-justified', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
15 |
+
|
16 |
+
add_action( 'foogallery_located_template-justified', array( $this, 'enqueue_dependencies' ) );
|
17 |
+
|
18 |
+
//add the data options needed for justified
|
19 |
+
add_filter( 'foogallery_build_container_data_options-justified', array( $this, 'add_justified_options' ), 10, 3 );
|
20 |
+
|
21 |
+
//build up any preview arguments
|
22 |
+
add_filter( 'foogallery_preview_arguments-justified', array( $this, 'preview_arguments' ), 10, 2 );
|
23 |
+
|
24 |
+
//build up the thumb dimensions from some arguments
|
25 |
+
add_filter( 'foogallery_calculate_thumbnail_dimensions-justified', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
26 |
+
|
27 |
+
//build up the arguments needed for rendering this template
|
28 |
+
add_filter( 'foogallery_gallery_template_arguments-justified', array( $this, 'build_gallery_template_arguments' ) );
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Register myself so that all associated JS and CSS files can be found and automatically included
|
33 |
+
* @param $extensions
|
34 |
+
*
|
35 |
+
* @return array
|
36 |
+
*/
|
37 |
+
function register_myself( $extensions ) {
|
38 |
+
$extensions[] = __FILE__;
|
39 |
+
return $extensions;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Add our gallery template to the list of templates available for every gallery
|
44 |
+
* @param $gallery_templates
|
45 |
+
*
|
46 |
+
* @return array
|
47 |
+
*/
|
48 |
+
function add_template( $gallery_templates ) {
|
49 |
+
$gallery_templates[] = array(
|
50 |
+
'slug' => 'justified',
|
51 |
+
'name' => __( 'Justified Gallery', 'foogallery' ),
|
52 |
+
'preview_support' => true,
|
53 |
+
'common_fields_support' => true,
|
54 |
+
'lazyload_support' => true,
|
55 |
+
'paging_support' => true,
|
56 |
+
'mandatory_classes' => 'fg-justified',
|
57 |
+
'thumbnail_dimensions' => true,
|
58 |
+
'fields' => array(
|
59 |
+
array(
|
60 |
+
'id' => 'thumb_height',
|
61 |
+
'title' => __( 'Thumb Height', 'foogallery' ),
|
62 |
+
'desc' => __( 'Choose the height of your thumbnails. Thumbnails will be generated on the fly and cached once generated', 'foogallery' ),
|
63 |
+
'section' => __( 'General', 'foogallery' ),
|
64 |
+
'type' => 'number',
|
65 |
+
'class' => 'small-text',
|
66 |
+
'default' => 250,
|
67 |
+
'step' => '10',
|
68 |
+
'min' => '0',
|
69 |
+
'row_data'=> array(
|
70 |
+
'data-foogallery-preview' => 'shortcode',
|
71 |
+
'data-foogallery-change-selector' => 'input',
|
72 |
+
)
|
73 |
+
),
|
74 |
+
array(
|
75 |
+
'id' => 'row_height',
|
76 |
+
'title' => __( 'Row Height', 'foogallery' ),
|
77 |
+
'desc' => __( 'The preferred height of your gallery rows. This can be different from the thumbnail height', 'foogallery' ),
|
78 |
+
'section' => __( 'General', 'foogallery' ),
|
79 |
+
'type' => 'number',
|
80 |
+
'class' => 'small-text',
|
81 |
+
'default' => 150,
|
82 |
+
'step' => '10',
|
83 |
+
'min' => '0',
|
84 |
+
'row_data'=> array(
|
85 |
+
'data-foogallery-change-selector' => 'input',
|
86 |
+
'data-foogallery-value-selector' => 'input',
|
87 |
+
'data-foogallery-preview' => 'shortcode',
|
88 |
+
)
|
89 |
+
),
|
90 |
+
array(
|
91 |
+
'id' => 'max_row_height',
|
92 |
+
'title' => __( 'Max Row Height', 'foogallery' ),
|
93 |
+
'desc' => __( 'A number (e.g 200) which specifies the maximum row height in pixels. A negative value for no limits. Alternatively, use a percentage (e.g. 200% which means that the row height cannot exceed 2 * rowHeight)', 'foogallery' ),
|
94 |
+
'section' => __( 'General', 'foogallery' ),
|
95 |
+
'type' => 'text',
|
96 |
+
'class' => 'small-text',
|
97 |
+
'default' => '200%',
|
98 |
+
'row_data'=> array(
|
99 |
+
'data-foogallery-change-selector' => 'input',
|
100 |
+
'data-foogallery-value-selector' => 'input',
|
101 |
+
'data-foogallery-preview' => 'shortcode',
|
102 |
+
)
|
103 |
+
),
|
104 |
+
array(
|
105 |
+
'id' => 'margins',
|
106 |
+
'title' => __( 'Margins', 'foogallery' ),
|
107 |
+
'desc' => __( 'The spacing between your thumbnails.', 'foogallery' ),
|
108 |
+
'section' => __( 'General', 'foogallery' ),
|
109 |
+
'type' => 'number',
|
110 |
+
'class' => 'small-text',
|
111 |
+
'default' => 1,
|
112 |
+
'step' => '1',
|
113 |
+
'min' => '0',
|
114 |
+
'row_data'=> array(
|
115 |
+
'data-foogallery-change-selector' => 'input',
|
116 |
+
'data-foogallery-value-selector' => 'input',
|
117 |
+
'data-foogallery-preview' => 'shortcode',
|
118 |
+
)
|
119 |
+
),
|
120 |
+
array(
|
121 |
+
'id' => 'thumbnail_link',
|
122 |
+
'title' => __( 'Thumbnail Link', 'foogallery' ),
|
123 |
+
'section' => __( 'General', 'foogallery' ),
|
124 |
+
'default' => 'image' ,
|
125 |
+
'type' => 'thumb_link',
|
126 |
+
'desc' => __( 'You can choose to link each thumbnail to the full size image, or to the image\'s attachment page, or you can choose to not link to anything.', 'foogallery' ),
|
127 |
+
),
|
128 |
+
array(
|
129 |
+
'id' => 'lightbox',
|
130 |
+
'title' => __( 'Lightbox', 'foogallery' ),
|
131 |
+
'desc' => __( 'Choose which lightbox you want to display images with. The lightbox will only work if you set the thumbnail link to "Full Size Image".', 'foogallery' ),
|
132 |
+
'section' => __( 'General', 'foogallery' ),
|
133 |
+
'default' => 'none',
|
134 |
+
'type' => 'lightbox',
|
135 |
+
),
|
136 |
+
array(
|
137 |
+
'id' => 'lastrow',
|
138 |
+
'title' => __( 'Last Row', 'foogallery' ),
|
139 |
+
'desc' => __( 'What should be done with the last row in the gallery?', 'foogallery' ),
|
140 |
+
'section' => __( 'General', 'foogallery' ),
|
141 |
+
'type' => 'radio',
|
142 |
+
'spacer' => '<span class="spacer"></span>',
|
143 |
+
'default' => 'center',
|
144 |
+
'choices' => array(
|
145 |
+
'hide' => __( 'Hide', 'foogallery' ),
|
146 |
+
'justify' => __( 'Justify', 'foogallery' ),
|
147 |
+
'nojustify' => __( 'No Justify', 'foogallery' ),
|
148 |
+
'right' => __( 'Right', 'foogallery' ),
|
149 |
+
'center' => __( 'Center', 'foogallery' ),
|
150 |
+
'left' => __( 'Left', 'foogallery' ),
|
151 |
+
),
|
152 |
+
'row_data'=> array(
|
153 |
+
'data-foogallery-change-selector' => 'input:radio',
|
154 |
+
'data-foogallery-value-selector' => 'input:checked',
|
155 |
+
'data-foogallery-preview' => 'shortcode',
|
156 |
+
)
|
157 |
+
),
|
158 |
+
),
|
159 |
+
);
|
160 |
+
|
161 |
+
return $gallery_templates;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Get the thumb dimensions arguments saved for the gallery for this gallery template
|
166 |
+
*
|
167 |
+
* @param array $dimensions
|
168 |
+
* @param FooGallery $foogallery
|
169 |
+
*
|
170 |
+
* @return mixed
|
171 |
+
*/
|
172 |
+
function get_thumbnail_dimensions( $dimensions, $foogallery ) {
|
173 |
+
$height = $foogallery->get_meta( 'justified_thumb_height', false );
|
174 |
+
return array(
|
175 |
+
'height' => intval( $height ),
|
176 |
+
'width' => 0,
|
177 |
+
'crop' => false
|
178 |
+
);
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Enqueue scripts that the default gallery template relies on
|
183 |
+
*/
|
184 |
+
function enqueue_dependencies( $gallery ) {
|
185 |
+
//enqueue core files
|
186 |
+
foogallery_enqueue_core_gallery_template_style();
|
187 |
+
foogallery_enqueue_core_gallery_template_script();
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Add the required justified options if needed
|
192 |
+
*
|
193 |
+
* @param $options
|
194 |
+
* @param $gallery FooGallery
|
195 |
+
*
|
196 |
+
* @param $attributes array
|
197 |
+
*
|
198 |
+
* @return array
|
199 |
+
*/
|
200 |
+
function add_justified_options($options, $gallery, $attributes) {
|
201 |
+
|
202 |
+
$row_height = foogallery_gallery_template_setting( 'row_height', '150' );
|
203 |
+
$max_row_height = foogallery_gallery_template_setting( 'max_row_height', '200%' );
|
204 |
+
if ( strpos( $max_row_height, '%' ) === false ) {
|
205 |
+
$max_row_height = intval( $max_row_height );
|
206 |
+
}
|
207 |
+
$margins = foogallery_gallery_template_setting( 'margins', '1' );
|
208 |
+
$lastRow = foogallery_gallery_template_setting( 'lastrow', 'center' );
|
209 |
+
|
210 |
+
$options['template']['rowHeight'] = intval($row_height);
|
211 |
+
$options['template']['maxRowHeight'] = $max_row_height;
|
212 |
+
$options['template']['margins'] = intval($margins);
|
213 |
+
$options['template']['lastRow'] = $lastRow;
|
214 |
+
|
215 |
+
return $options;
|
216 |
+
}
|
217 |
+
|
218 |
+
/**
|
219 |
+
* Build up a arguments used in the preview of the gallery
|
220 |
+
* @param $args
|
221 |
+
* @param $post_data
|
222 |
+
*
|
223 |
+
* @return mixed
|
224 |
+
*/
|
225 |
+
function preview_arguments( $args, $post_data ) {
|
226 |
+
$args['thumbnail_height'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_thumb_height'];
|
227 |
+
$args['row_height'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_row_height'];
|
228 |
+
$args['max_row_height'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_max_row_height'];
|
229 |
+
$args['margins'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_margins'];
|
230 |
+
$args['lastrow'] = $post_data[FOOGALLERY_META_SETTINGS]['justified_lastrow'];
|
231 |
+
return $args;
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Builds thumb dimensions from arguments
|
236 |
+
*
|
237 |
+
* @param array $dimensions
|
238 |
+
* @param array $arguments
|
239 |
+
*
|
240 |
+
* @return mixed
|
241 |
+
*/
|
242 |
+
function build_thumbnail_dimensions_from_arguments( $dimensions, $arguments ) {
|
243 |
+
if ( array_key_exists( 'thumbnail_height', $arguments) ) {
|
244 |
+
return array(
|
245 |
+
'height' => intval($arguments['thumbnail_height']),
|
246 |
+
'width' => 0,
|
247 |
+
'crop' => false
|
248 |
+
);
|
249 |
+
}
|
250 |
+
|
251 |
+
return null;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Build up the arguments needed for rendering this gallery template
|
256 |
+
*
|
257 |
+
* @param $args
|
258 |
+
* @return array
|
259 |
+
*/
|
260 |
+
function build_gallery_template_arguments( $args ) {
|
261 |
+
$height = foogallery_gallery_template_setting( 'thumb_height', '250' );
|
262 |
+
$args = array(
|
263 |
+
'height' => $height,
|
264 |
+
'link' => foogallery_gallery_template_setting( 'thumbnail_link', 'image' )
|
265 |
+
);
|
266 |
+
|
267 |
+
return $args;
|
268 |
+
}
|
269 |
+
}
|
270 |
}
|
extensions/default-templates/justified/gallery-justified.php
CHANGED
@@ -1,21 +1,15 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery Justified gallery template
|
4 |
-
*/
|
5 |
-
global $current_foogallery;
|
6 |
-
global $current_foogallery_arguments;
|
7 |
-
$
|
8 |
-
$
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
?>
|
17 |
-
<div <?php echo $foogallery_justified_attributes; ?>>
|
18 |
-
<?php foreach ( $current_foogallery->attachments() as $attachment ) {
|
19 |
-
echo foogallery_attachment_html( $attachment, $args );
|
20 |
-
} ?>
|
21 |
-
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery Justified gallery template
|
4 |
+
*/
|
5 |
+
global $current_foogallery;
|
6 |
+
global $current_foogallery_arguments;
|
7 |
+
$lightbox = foogallery_gallery_template_setting( 'lightbox', 'unknown' );
|
8 |
+
$foogallery_justified_classes = foogallery_build_class_attribute_safe( $current_foogallery, 'foogallery-lightbox-' . $lightbox );
|
9 |
+
$foogallery_justified_attributes = foogallery_build_container_attributes_safe( $current_foogallery, array( 'class' => $foogallery_justified_classes) );
|
10 |
+
?>
|
11 |
+
<div <?php echo $foogallery_justified_attributes; ?>>
|
12 |
+
<?php foreach ( foogallery_current_gallery_attachments_for_rendering() as $attachment ) {
|
13 |
+
echo foogallery_attachment_html( $attachment );
|
14 |
+
} ?>
|
15 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
extensions/default-templates/masonry/class-masonry-gallery-template.php
CHANGED
@@ -1,266 +1,331 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
4 |
-
|
5 |
-
define('FOOGALLERY_MASONRY_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
-
|
7 |
-
class FooGallery_Masonry_Gallery_Template {
|
8 |
-
/**
|
9 |
-
* Wire up everything we need to run the extension
|
10 |
-
*/
|
11 |
-
function __construct() {
|
12 |
-
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
-
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
14 |
-
|
15 |
-
add_action( 'foogallery_enqueue_preview_dependencies', array( $this, 'enqueue_preview_dependencies' ) );
|
16 |
-
|
17 |
-
add_filter( 'foogallery_located_template-masonry', array( $this, 'enqueue_dependencies' ) );
|
18 |
-
|
19 |
-
add_filter( 'foogallery_template_thumbnail_dimensions-masonry', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
20 |
-
|
21 |
-
//add the data options needed for masonry
|
22 |
-
add_filter( 'foogallery_build_container_data_options-masonry', array( $this, 'add_masonry_options' ), 10, 3 );
|
23 |
-
|
24 |
-
//build up any preview arguments
|
25 |
-
add_filter( 'foogallery_preview_arguments-masonry', array( $this, 'preview_arguments' ), 10, 2 );
|
26 |
-
|
27 |
-
//build up the thumb dimensions from some arguments
|
28 |
-
add_filter( 'foogallery_calculate_thumbnail_dimensions-masonry', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
*
|
44 |
-
* @
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
'
|
76 |
-
'
|
77 |
-
'
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
),
|
87 |
-
'
|
88 |
-
'
|
89 |
-
|
90 |
-
'
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
'
|
97 |
-
'
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
'
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
'
|
125 |
-
'
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
'
|
130 |
-
'
|
131 |
-
'
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
'
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
'
|
166 |
-
'
|
167 |
-
'default' => '
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
266 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( !class_exists( 'FooGallery_Masonry_Gallery_Template' ) ) {
|
4 |
+
|
5 |
+
define('FOOGALLERY_MASONRY_GALLERY_TEMPLATE_URL', plugin_dir_url( __FILE__ ));
|
6 |
+
|
7 |
+
class FooGallery_Masonry_Gallery_Template {
|
8 |
+
/**
|
9 |
+
* Wire up everything we need to run the extension
|
10 |
+
*/
|
11 |
+
function __construct() {
|
12 |
+
add_filter( 'foogallery_gallery_templates', array( $this, 'add_template' ) );
|
13 |
+
add_filter( 'foogallery_gallery_templates_files', array( $this, 'register_myself' ) );
|
14 |
+
|
15 |
+
add_action( 'foogallery_enqueue_preview_dependencies', array( $this, 'enqueue_preview_dependencies' ) );
|
16 |
+
|
17 |
+
add_filter( 'foogallery_located_template-masonry', array( $this, 'enqueue_dependencies' ) );
|
18 |
+
|
19 |
+
add_filter( 'foogallery_template_thumbnail_dimensions-masonry', array( $this, 'get_thumbnail_dimensions' ), 10, 2 );
|
20 |
+
|
21 |
+
//add the data options needed for masonry
|
22 |
+
add_filter( 'foogallery_build_container_data_options-masonry', array( $this, 'add_masonry_options' ), 10, 3 );
|
23 |
+
|
24 |
+
//build up any preview arguments
|
25 |
+
add_filter( 'foogallery_preview_arguments-masonry', array( $this, 'preview_arguments' ), 10, 2 );
|
26 |
+
|
27 |
+
//build up the thumb dimensions from some arguments
|
28 |
+
add_filter( 'foogallery_calculate_thumbnail_dimensions-masonry', array( $this, 'build_thumbnail_dimensions_from_arguments' ), 10, 2 );
|
29 |
+
|
30 |
+
//build up the arguments needed for rendering this template
|
31 |
+
add_filter( 'foogallery_gallery_template_arguments-masonry', array( $this, 'build_gallery_template_arguments' ) );
|
32 |
+
|
33 |
+
//add extra fields to the templates
|
34 |
+
add_filter( 'foogallery_override_gallery_template_fields-masonry', array( $this, 'add_masonry_fields' ), 10, 2 );
|
35 |
+
|
36 |
+
//remove the captions if the captions are below thumbs
|
37 |
+
add_filter( 'foogallery_build_attachment_html_caption', array( $this, 'remove_captions' ), 10, 3 );
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Register myself so that all associated JS and CSS files can be found and automatically included
|
42 |
+
* @param $extensions
|
43 |
+
*
|
44 |
+
* @return array
|
45 |
+
*/
|
46 |
+
function register_myself( $extensions ) {
|
47 |
+
$extensions[] = __FILE__;
|
48 |
+
return $extensions;
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Add our gallery template to the list of templates available for every gallery
|
53 |
+
* @param $gallery_templates
|
54 |
+
*
|
55 |
+
* @return array
|
56 |
+
*/
|
57 |
+
function add_template( $gallery_templates ) {
|
58 |
+
$gallery_templates[] = array(
|
59 |
+
'slug' => 'masonry',
|
60 |
+
'name' => __( 'Masonry Image Gallery', 'foogallery' ),
|
61 |
+
'preview_support' => true,
|
62 |
+
'common_fields_support' => true,
|
63 |
+
'lazyload_support' => true,
|
64 |
+
'paging_support' => true,
|
65 |
+
'mandatory_classes' => 'fg-masonry',
|
66 |
+
'thumbnail_dimensions' => true,
|
67 |
+
'fields' => array(
|
68 |
+
array(
|
69 |
+
'id' => 'thumbnail_width',
|
70 |
+
'title' => __( 'Thumb Width', 'foogallery' ),
|
71 |
+
'desc' => __( 'Choose the width of your thumbnails. Thumbnails will be generated on the fly and cached once generated', 'foogallery' ),
|
72 |
+
'section' => __( 'General', 'foogallery' ),
|
73 |
+
'type' => 'number',
|
74 |
+
'class' => 'small-text',
|
75 |
+
'default' => 150,
|
76 |
+
'step' => '1',
|
77 |
+
'min' => '0',
|
78 |
+
'row_data'=> array(
|
79 |
+
'data-foogallery-change-selector' => 'input',
|
80 |
+
'data-foogallery-preview' => 'shortcode'
|
81 |
+
)
|
82 |
+
),
|
83 |
+
array(
|
84 |
+
'id' => 'layout',
|
85 |
+
'title' => __( 'Masonry Layout', 'foogallery' ),
|
86 |
+
'desc' => __( 'Choose a fixed width thumb layout, or responsive columns.', 'foogallery' ),
|
87 |
+
'section' => __( 'General', 'foogallery' ),
|
88 |
+
'type' => 'radio',
|
89 |
+
'choices' => array(
|
90 |
+
'fixed' => __( 'Fixed Width', 'foogallery' ),
|
91 |
+
'col2' => __( '2 Columns', 'foogallery' ),
|
92 |
+
'col3' => __( '3 Columns', 'foogallery' ),
|
93 |
+
'col4' => __( '4 Columns', 'foogallery' ),
|
94 |
+
'col5' => __( '5 Columns', 'foogallery' )
|
95 |
+
),
|
96 |
+
'default' => 'fixed',
|
97 |
+
'row_data'=> array(
|
98 |
+
'data-foogallery-change-selector' => 'input:radio',
|
99 |
+
'data-foogallery-value-selector' => 'input:checked',
|
100 |
+
'data-foogallery-preview' => 'shortcode'
|
101 |
+
)
|
102 |
+
),
|
103 |
+
array(
|
104 |
+
'id' => 'gutter_width',
|
105 |
+
'title' => __( 'Gutter Width', 'foogallery' ),
|
106 |
+
'desc' => __( 'The spacing between your thumbnails. Only applicable when using a fixed layout!', 'foogallery' ),
|
107 |
+
'section' => __( 'General', 'foogallery' ),
|
108 |
+
'type' => 'number',
|
109 |
+
'class' => 'small-text',
|
110 |
+
'default' => 10,
|
111 |
+
'step' => '1',
|
112 |
+
'min' => '0',
|
113 |
+
'row_data'=> array(
|
114 |
+
'data-foogallery-hidden' => true,
|
115 |
+
'data-foogallery-change-selector' => 'input',
|
116 |
+
'data-foogallery-value-selector' => 'input',
|
117 |
+
'data-foogallery-show-when-field' => 'layout',
|
118 |
+
'data-foogallery-show-when-field-value' => 'fixed',
|
119 |
+
'data-foogallery-preview' => 'shortcode',
|
120 |
+
)
|
121 |
+
),
|
122 |
+
array(
|
123 |
+
'id' => 'gutter_percent',
|
124 |
+
'title' => __( 'Gutter Size', 'foogallery' ),
|
125 |
+
'desc' => __( 'Choose a gutter size when using responsive columns.', 'foogallery' ),
|
126 |
+
'section' => __( 'General', 'foogallery' ),
|
127 |
+
'type' => 'radio',
|
128 |
+
'choices' => array(
|
129 |
+
'fg-gutter-none' => __( 'No Gutter', 'foogallery' ),
|
130 |
+
'' => __( 'Normal Size Gutter', 'foogallery' ),
|
131 |
+
'fg-gutter-large' => __( 'Larger Gutter', 'foogallery' )
|
132 |
+
),
|
133 |
+
'default' => '',
|
134 |
+
'row_data'=> array(
|
135 |
+
'data-foogallery-hidden' => true,
|
136 |
+
'data-foogallery-change-selector' => 'input:radio',
|
137 |
+
'data-foogallery-value-selector' => 'input:checked',
|
138 |
+
'data-foogallery-show-when-field' => 'layout',
|
139 |
+
'data-foogallery-show-when-field-operator' => '!==',
|
140 |
+
'data-foogallery-show-when-field-value' => 'fixed',
|
141 |
+
'data-foogallery-preview' => 'class'
|
142 |
+
)
|
143 |
+
),
|
144 |
+
array(
|
145 |
+
'id' => 'alignment',
|
146 |
+
'title' => __( 'Alignment', 'foogallery' ),
|
147 |
+
'desc' => __( 'You can choose to center align your images or leave them at the default (left). Only applicable when using a fixed layout!', 'foogallery' ),
|
148 |
+
'section' => __( 'General', 'foogallery' ),
|
149 |
+
'type' => 'radio',
|
150 |
+
'spacer' => '<span class="spacer"></span>',
|
151 |
+
'choices' => array(
|
152 |
+
'' => __( 'Left', 'foogallery' ),
|
153 |
+
'fg-center' => __( 'Center', 'foogallery' )
|
154 |
+
),
|
155 |
+
'default' => 'fg-center',
|
156 |
+
'row_data'=> array(
|
157 |
+
'data-foogallery-hidden' => true,
|
158 |
+
'data-foogallery-show-when-field' => 'layout',
|
159 |
+
'data-foogallery-show-when-field-value' => 'fixed',
|
160 |
+
'data-foogallery-change-selector' => 'input:radio',
|
161 |
+
'data-foogallery-preview' => 'class'
|
162 |
+
)
|
163 |
+
),
|
164 |
+
array(
|
165 |
+
'id' => 'thumbnail_link',
|
166 |
+
'title' => __( 'Thumb Link', 'foogallery' ),
|
167 |
+
'default' => 'image' ,
|
168 |
+
'type' => 'thumb_link',
|
169 |
+
'desc' => __( 'You can choose to link each thumbnail to the full size image, or to the image\'s attachment page, or you can choose to not link to anything', 'foogallery' ),
|
170 |
+
),
|
171 |
+
array(
|
172 |
+
'id' => 'lightbox',
|
173 |
+
'title' => __( 'Lightbox', 'foogallery' ),
|
174 |
+
'desc' => __( 'Choose which lightbox you want to display images with. The lightbox will only work if you set the thumbnail link to "Full Size Image"', 'foogallery' ),
|
175 |
+
'type' => 'lightbox',
|
176 |
+
'default' => 'none',
|
177 |
+
),
|
178 |
+
),
|
179 |
+
);
|
180 |
+
|
181 |
+
|
182 |
+
return $gallery_templates;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Enqueue scripts that the masonry gallery template relies on
|
187 |
+
*/
|
188 |
+
function enqueue_preview_dependencies() {
|
189 |
+
wp_enqueue_script( 'masonry' );
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Enqueue scripts that the masonry gallery template relies on
|
194 |
+
*/
|
195 |
+
function enqueue_dependencies() {
|
196 |
+
wp_enqueue_script( 'masonry' );
|
197 |
+
|
198 |
+
//enqueue core files
|
199 |
+
foogallery_enqueue_core_gallery_template_style();
|
200 |
+
foogallery_enqueue_core_gallery_template_script();
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Get the thumb dimensions arguments saved for the gallery for this gallery template
|
205 |
+
*
|
206 |
+
* @param array $dimensions
|
207 |
+
* @param FooGallery $foogallery
|
208 |
+
*
|
209 |
+
* @return mixed
|
210 |
+
*/
|
211 |
+
function get_thumbnail_dimensions( $dimensions, $foogallery ) {
|
212 |
+
$width = $foogallery->get_meta( 'masonry_thumbnail_width', false );
|
213 |
+
return array(
|
214 |
+
'height' => 0,
|
215 |
+
'width' => intval( $width ),
|
216 |
+
'crop' => false
|
217 |
+
);
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Add the required masonry options if needed
|
222 |
+
*
|
223 |
+
* @param $options
|
224 |
+
* @param $gallery FooGallery
|
225 |
+
*
|
226 |
+
* @param $attributes array
|
227 |
+
*
|
228 |
+
* @return array
|
229 |
+
*/
|
230 |
+
function add_masonry_options($options, $gallery, $attributes) {
|
231 |
+
$layout = foogallery_gallery_template_setting( 'layout', 'fixed' );
|
232 |
+
$options['template']['layout'] = $layout;
|
233 |
+
if ( 'fixed' === $layout ) {
|
234 |
+
$width = foogallery_gallery_template_setting( 'thumbnail_width', '150' );
|
235 |
+
$gutter_width = foogallery_gallery_template_setting( 'gutter_width', '10' );
|
236 |
+
$options['template']['columnWidth'] = intval($width);
|
237 |
+
$options['template']['gutter'] = intval($gutter_width);
|
238 |
+
}
|
239 |
+
return $options;
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Build up a arguments used in the preview of the gallery
|
244 |
+
* @param $args
|
245 |
+
* @param $post_data
|
246 |
+
*
|
247 |
+
* @return mixed
|
248 |
+
*/
|
249 |
+
function preview_arguments( $args, $post_data ) {
|
250 |
+
$args['thumbnail_width'] = $post_data[FOOGALLERY_META_SETTINGS]['masonry_thumbnail_width'];
|
251 |
+
$args['layout'] = $post_data[FOOGALLERY_META_SETTINGS]['masonry_layout'];
|
252 |
+
$args['gutter_width'] = $post_data[FOOGALLERY_META_SETTINGS]['masonry_gutter_width'];
|
253 |
+
return $args;
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Builds thumb dimensions from arguments
|
258 |
+
*
|
259 |
+
* @param array $dimensions
|
260 |
+
* @param array $arguments
|
261 |
+
*
|
262 |
+
* @return mixed
|
263 |
+
*/
|
264 |
+
function build_thumbnail_dimensions_from_arguments( $dimensions, $arguments ) {
|
265 |
+
if ( array_key_exists( 'thumbnail_width', $arguments) ) {
|
266 |
+
return array(
|
267 |
+
'height' => 0,
|
268 |
+
'width' => intval($arguments['thumbnail_width']),
|
269 |
+
'crop' => false
|
270 |
+
);
|
271 |
+
}
|
272 |
+
return null;
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Build up the arguments needed for rendering this gallery template
|
277 |
+
*
|
278 |
+
* @param $args
|
279 |
+
* @return array
|
280 |
+
*/
|
281 |
+
function build_gallery_template_arguments( $args ) {
|
282 |
+
$args = array(
|
283 |
+
'width' => foogallery_gallery_template_setting( 'thumbnail_width', '150' ),
|
284 |
+
'link' => foogallery_gallery_template_setting( 'thumbnail_link', 'image' ),
|
285 |
+
'crop' => false
|
286 |
+
);
|
287 |
+
|
288 |
+
return $args;
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Add masonry-specific fields to the gallery template
|
293 |
+
*
|
294 |
+
* @uses "foogallery_override_gallery_template_fields"
|
295 |
+
* @param $fields
|
296 |
+
* @param $template
|
297 |
+
*
|
298 |
+
* @return array
|
299 |
+
*/
|
300 |
+
function add_masonry_fields( $fields, $template ) {
|
301 |
+
//update specific fields
|
302 |
+
foreach ($fields as &$field) {
|
303 |
+
if ( 'hover_effect_caption_visibility' === $field['id'] ) {
|
304 |
+
$field['choices']['fg-captions-bottom'] = __( 'Below Thumbnail', 'foogallery' );
|
305 |
+
}
|
306 |
+
}
|
307 |
+
|
308 |
+
return $fields;
|
309 |
+
}
|
310 |
+
|
311 |
+
function remove_captions( $captions, $foogallery_attachment, $args ) {
|
312 |
+
global $current_foogallery_template;
|
313 |
+
|
314 |
+
//check if masonry
|
315 |
+
if ( 'masonry' === $current_foogallery_template ) {
|
316 |
+
|
317 |
+
$hover_effect_caption_visibility = foogallery_gallery_template_setting( 'hover_effect_caption_visibility', 'fg-caption-hover' );
|
318 |
+
|
319 |
+
//check if captions are set to show below the thumbs
|
320 |
+
if ( 'fg-captions-bottom' === $hover_effect_caption_visibility ) {
|
321 |
+
//if we have no captions then do not output captions at all
|
322 |
+
if ( !array_key_exists( 'title', $captions ) && !array_key_exists( 'desc', $captions ) ) {
|
323 |
+
$captions = false;
|
324 |
+
}
|
325 |
+
}
|
326 |
+
}
|
327 |
+
|
328 |
+
return $captions;
|
329 |
+
}
|
330 |
+
}
|
331 |
}
|
extensions/default-templates/masonry/gallery-masonry.php
CHANGED
@@ -1,26 +1,22 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* FooGallery masonry gallery template
|
4 |
-
*/
|
5 |
-
global $current_foogallery;
|
6 |
-
global $current_foogallery_arguments;
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
$
|
14 |
-
|
15 |
-
$
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
?>
|
22 |
-
<div <?php echo $foogallery_masonry_attributes; ?>>
|
23 |
-
<?php foreach ( $current_foogallery->attachments() as $attachment ) {
|
24 |
-
echo foogallery_attachment_html( $attachment, $args );
|
25 |
-
} ?>
|
26 |
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FooGallery masonry gallery template
|
4 |
+
*/
|
5 |
+
global $current_foogallery;
|
6 |
+
global $current_foogallery_arguments;
|
7 |
+
|
8 |
+
$lightbox = foogallery_gallery_template_setting( 'lightbox', 'unknown' );
|
9 |
+
$alignment = foogallery_gallery_template_setting( 'alignment', 'fg-center' );
|
10 |
+
$layout = foogallery_gallery_template_setting( 'layout', 'fixed' );
|
11 |
+
$gutter_percent = '';
|
12 |
+
if ( 'fixed' !== $layout ) {
|
13 |
+
$gutter_percent = foogallery_gallery_template_setting( 'gutter_percent', '' );
|
14 |
+
}
|
15 |
+
$foogallery_masonry_classes = foogallery_build_class_attribute_safe( $current_foogallery, 'foogallery-lightbox-' . $lightbox, $alignment, $gutter_percent );
|
16 |
+
$foogallery_masonry_attributes = foogallery_build_container_attributes_safe( $current_foogallery, array( 'class' => $foogallery_masonry_classes) );
|
17 |
+
?>
|
18 |
+
<div <?php echo $foogallery_masonry_attributes; ?>>
|
19 |
+
<?php foreach ( foogallery_current_gallery_attachments_for_rendering() as $attachment ) {
|
20 |
+
echo foogallery_attachment_html( $attachment );
|
21 |
+
} ?>
|
|
|
|
|
|
|
|
|
22 |
</div>
|
extensions/default-templates/masonry/js/admin-gallery-masonry.js
CHANGED
@@ -1,30 +1,30 @@
|
|
1 |
-
(function (FOOGALLERY_MASONRY_TEMPLATE, $, undefined) {
|
2 |
-
|
3 |
-
FOOGALLERY_MASONRY_TEMPLATE.showHideControls = function() {
|
4 |
-
|
5 |
-
var layout = $('input[name="foogallery_settings[masonry_layout]"]:checked').val();
|
6 |
-
|
7 |
-
if ( layout === 'fixed' ) {
|
8 |
-
$('.gallery_template_field-masonry-gutter_width, .gallery_template_field-masonry-center_align').show();
|
9 |
-
$('.gallery_template_field-masonry-gutter_percent').hide();
|
10 |
-
} else {
|
11 |
-
$('.gallery_template_field-masonry-gutter_width, .gallery_template_field-masonry-center_align').hide();
|
12 |
-
$('.gallery_template_field-masonry-gutter_percent').show();
|
13 |
-
}
|
14 |
-
};
|
15 |
-
|
16 |
-
FOOGALLERY_MASONRY_TEMPLATE.adminReady = function () {
|
17 |
-
$('body').on('foogallery-gallery-template-changed-masonry', function() {
|
18 |
-
FOOGALLERY_MASONRY_TEMPLATE.showHideControls();
|
19 |
-
});
|
20 |
-
|
21 |
-
$('input[name="foogallery_settings[masonry_layout]"]').change(function() {
|
22 |
-
FOOGALLERY_MASONRY_TEMPLATE.showHideControls();
|
23 |
-
});
|
24 |
-
};
|
25 |
-
|
26 |
-
}(window.FOOGALLERY_MASONRY_TEMPLATE = window.FOOGALLERY_MASONRY_TEMPLATE || {}, jQuery));
|
27 |
-
|
28 |
-
jQuery(function () {
|
29 |
-
FOOGALLERY_MASONRY_TEMPLATE.adminReady();
|
30 |
});
|
1 |
+
(function (FOOGALLERY_MASONRY_TEMPLATE, $, undefined) {
|
2 |
+
|
3 |
+
FOOGALLERY_MASONRY_TEMPLATE.showHideControls = function() {
|
4 |
+
|
5 |
+
var layout = $('input[name="foogallery_settings[masonry_layout]"]:checked').val();
|
6 |
+
|
7 |
+
if ( layout === 'fixed' ) {
|
8 |
+
$('.gallery_template_field-masonry-gutter_width, .gallery_template_field-masonry-center_align').show();
|
9 |
+
$('.gallery_template_field-masonry-gutter_percent').hide();
|
10 |
+
} else {
|
11 |
+
$('.gallery_template_field-masonry-gutter_width, .gallery_template_field-masonry-center_align').hide();
|
12 |
+
$('.gallery_template_field-masonry-gutter_percent').show();
|
13 |
+
}
|
14 |
+
};
|
15 |
+
|
16 |
+
FOOGALLERY_MASONRY_TEMPLATE.adminReady = function () {
|
17 |
+
$('body').on('foogallery-gallery-template-changed-masonry', function() {
|
18 |
+
FOOGALLERY_MASONRY_TEMPLATE.showHideControls();
|
19 |
+
});
|
20 |
+
|
21 |
+
$('input[name="foogallery_settings[masonry_layout]"]').change(function() {
|
22 |
+
FOOGALLERY_MASONRY_TEMPLATE.showHideControls();
|
23 |
+
});
|
24 |
+
};
|
25 |
+
|
26 |
+
}(window.FOOGALLERY_MASONRY_TEMPLATE = window.FOOGALLERY_MASONRY_TEMPLATE || {}, jQuery));
|
27 |
+
|
28 |
+
jQuery(function () {
|
29 |
+
FOOGALLERY_MASONRY_TEMPLATE.adminReady();
|
30 |
});
|
extensions/default-templates/shared/css/admin-foogallery.css
CHANGED
@@ -1,78 +1,78 @@
|
|
1 |
-
.foogallery-setting-caption_icon,
|
2 |
-
.foogallery-setting-loading_icon {
|
3 |
-
content: "";
|
4 |
-
display: inline-block;
|
5 |
-
position: relative;
|
6 |
-
width: 40px;
|
7 |
-
height: 40px;
|
8 |
-
margin: 0;
|
9 |
-
background: transparent no-repeat center center;
|
10 |
-
background-size: 40px 40px;
|
11 |
-
vertical-align: middle;
|
12 |
-
}
|
13 |
-
.foogallery-setting-caption_icon.fg-hover-zoom {
|
14 |
-
background-image: url('../img/zoom.png');
|
15 |
-
}
|
16 |
-
.foogallery-setting-caption_icon.fg-hover-zoom2 {
|
17 |
-
background-image: url('../img/zoom2.png');
|
18 |
-
}
|
19 |
-
.foogallery-setting-caption_icon.fg-hover-zoom3 {
|
20 |
-
background-image: url('../img/zoom3.png');
|
21 |
-
}
|
22 |
-
.foogallery-setting-caption_icon.fg-hover-plus {
|
23 |
-
background-image: url('../img/plus.png');
|
24 |
-
}
|
25 |
-
.foogallery-setting-caption_icon.fg-hover-circle-plus {
|
26 |
-
background-image: url('../img/circle-plus.png');
|
27 |
-
}
|
28 |
-
.foogallery-setting-caption_icon.fg-hover-eye {
|
29 |
-
background-image: url('../img/eye.png');
|
30 |
-
}
|
31 |
-
.foogallery-setting-caption_icon.fg-hover-external {
|
32 |
-
background-image: url('../img/external.png');
|
33 |
-
}
|
34 |
-
|
35 |
-
.foogallery_template_field_type-htmlicon.foogallery_template_field_id-loading_icon td label {
|
36 |
-
background-color: #eee;
|
37 |
-
}
|
38 |
-
|
39 |
-
.foogallery_template_field_type-htmlicon.foogallery_template_field_id-loading_icon td input:checked + label {
|
40 |
-
background-color: #eee;
|
41 |
-
}
|
42 |
-
|
43 |
-
.foogallery-setting-loading_icon .fg-loader {
|
44 |
-
position: absolute;
|
45 |
-
top: 50%;
|
46 |
-
left: 50%;
|
47 |
-
transform: translateX(-50%) translateY(-50%);
|
48 |
-
width: 1em;
|
49 |
-
height: 1em;
|
50 |
-
font-size: 5px;
|
51 |
-
}
|
52 |
-
|
53 |
-
.foogallery-setting-loading_icon.fg-loading-bars .fg-loader {
|
54 |
-
font-size: 4px;
|
55 |
-
width: 1em;
|
56 |
-
height: 4em;
|
57 |
-
}
|
58 |
-
|
59 |
-
.foogallery-setting-loading_icon.fg-loading-partial .fg-loader {
|
60 |
-
font-size: 4px;
|
61 |
-
width: 10em;
|
62 |
-
height: 10em;
|
63 |
-
}
|
64 |
-
|
65 |
-
.foogallery-setting-loading_icon.fg-loading-pulse .fg-loader {
|
66 |
-
font-size: 4px;
|
67 |
-
width: 2.5em;
|
68 |
-
height: 2.5em;
|
69 |
-
transform: translateX(-50%) translateY(-150%);
|
70 |
-
}
|
71 |
-
|
72 |
-
.foogallery-setting-loading_icon.fg-loading-trail .fg-loader {
|
73 |
-
font-size: 20px;
|
74 |
-
}
|
75 |
-
|
76 |
-
.fg-item-inner {
|
77 |
-
margin: 0;
|
78 |
}
|
1 |
+
.foogallery-setting-caption_icon,
|
2 |
+
.foogallery-setting-loading_icon {
|
3 |
+
content: "";
|
4 |
+
display: inline-block;
|
5 |
+
position: relative;
|
6 |
+
width: 40px;
|
7 |
+
height: 40px;
|
8 |
+
margin: 0;
|
9 |
+
background: transparent no-repeat center center;
|
10 |
+
background-size: 40px 40px;
|
11 |
+
vertical-align: middle;
|
12 |
+
}
|
13 |
+
.foogallery-setting-caption_icon.fg-hover-zoom {
|
14 |
+
background-image: url('../img/zoom.png');
|
15 |
+
}
|
16 |
+
.foogallery-setting-caption_icon.fg-hover-zoom2 {
|
17 |
+
background-image: url('../img/zoom2.png');
|
18 |
+
}
|
19 |
+
.foogallery-setting-caption_icon.fg-hover-zoom3 {
|
20 |
+
background-image: url('../img/zoom3.png');
|
21 |
+
}
|
22 |
+
.foogallery-setting-caption_icon.fg-hover-plus {
|
23 |
+
background-image: url('../img/plus.png');
|
24 |
+
}
|
25 |
+
.foogallery-setting-caption_icon.fg-hover-circle-plus {
|
26 |
+
background-image: url('../img/circle-plus.png');
|
27 |
+
}
|
28 |
+
.foogallery-setting-caption_icon.fg-hover-eye {
|
29 |
+
background-image: url('../img/eye.png');
|
30 |
+
}
|
31 |
+
.foogallery-setting-caption_icon.fg-hover-external {
|
32 |
+
background-image: url('../img/external.png');
|
33 |
+
}
|
34 |
+
|
35 |
+
.foogallery_template_field_type-htmlicon.foogallery_template_field_id-loading_icon td label {
|
36 |
+
background-color: #eee;
|
37 |
+
}
|
38 |
+
|
39 |
+
.foogallery_template_field_type-htmlicon.foogallery_template_field_id-loading_icon td input:checked + label {
|
40 |
+
background-color: #eee;
|
41 |
+
}
|
42 |
+
|
43 |
+
.foogallery-setting-loading_icon .fg-loader {
|
44 |
+
position: absolute;
|
45 |
+
top: 50%;
|
46 |
+
left: 50%;
|
47 |
+
transform: translateX(-50%) translateY(-50%);
|
48 |
+
width: 1em;
|
49 |
+
height: 1em;
|
50 |
+
font-size: 5px;
|
51 |
+
}
|
52 |
+
|
53 |
+
.foogallery-setting-loading_icon.fg-loading-bars .fg-loader {
|
54 |
+
font-size: 4px;
|
55 |
+
width: 1em;
|
56 |
+
height: 4em;
|
57 |
+
}
|
58 |
+
|
59 |
+
.foogallery-setting-loading_icon.fg-loading-partial .fg-loader {
|
60 |
+
font-size: 4px;
|
61 |
+
width: 10em;
|
62 |
+
height: 10em;
|
63 |
+
}
|
64 |
+
|
65 |
+
.foogallery-setting-loading_icon.fg-loading-pulse .fg-loader {
|
66 |
+
font-size: 4px;
|
67 |
+
width: 2.5em;
|
68 |
+
height: 2.5em;
|
69 |
+
transform: translateX(-50%) translateY(-150%);
|
70 |
+
}
|
71 |
+
|
72 |
+
.foogallery-setting-loading_icon.fg-loading-trail .fg-loader {
|
73 |
+
font-size: 20px;
|
74 |
+
}
|
75 |
+
|
76 |
+
.fg-item-inner {
|
77 |
+
margin: 0;
|
78 |
}
|
extensions/default-templates/shared/css/foogallery.css
CHANGED
@@ -1,2314 +1,2410 @@
|
|
1 |
-
.foogallery, .foogallery * {
|
2 |
-
box-sizing: border-box;
|
3 |
-
}
|
4 |
-
.foogallery {
|
5 |
-
display: block;
|
6 |
-
z-index: 1;
|
7 |
-
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
8 |
-
position: relative;
|
9 |
-
line-height: 0;
|
10 |
-
font-size: 0;
|
11 |
-
width: 100%;
|
12 |
-
max-width: 100%;
|
13 |
-
}
|
14 |
-
.foogallery .fg-item {
|
15 |
-
display: inline-block;
|
16 |
-
position: relative;
|
17 |
-
background-color: transparent;
|
18 |
-
z-index: 2;
|
19 |
-
-webkit-user-select: none;
|
20 |
-
-moz-user-select: none;
|
21 |
-
-ms-user-select: none;
|
22 |
-
user-select: none;
|
23 |
-
}
|
24 |
-
.foogallery .fg-item-inner {
|
25 |
-
display: block;
|
26 |
-
position: relative;
|
27 |
-
visibility: hidden;
|
28 |
-
overflow: hidden;
|
29 |
-
opacity: 0;
|
30 |
-
z-index: 3;
|
31 |
-
margin: 0;
|
32 |
-
border: solid 0 transparent;
|
33 |
-
}
|
34 |
-
|
35 |
-
.foogallery .fg-item.fg-loading,
|
36 |
-
.foogallery .fg-item.fg-error {
|
37 |
-
background: no-repeat center;
|
38 |
-
}
|
39 |
-
|
40 |
-
.foogallery .fg-item.fg-error {
|
41 |
-
background-image: url('../img/image.png');
|
42 |
-
}
|
43 |
-
|
44 |
-
/* @2x Images (Pixel Ratio of 1.25+) */
|
45 |
-
@media only screen and (-o-min-device-pixel-ratio: 5/4),
|
46 |
-
only screen and (-webkit-min-device-pixel-ratio: 1.25),
|
47 |
-
only screen and (min-device-pixel-ratio: 1.25),
|
48 |
-
only screen and (min-resolution: 1.25dppx) {
|
49 |
-
.foogallery .fg-item.fg-error {
|
50 |
-
background-image: url('../img/image@2x.png');
|
51 |
-
}
|
52 |
-
}
|
53 |
-
|
54 |
-
/* @3x Images (Pixel Ratio of 2.25+) */
|
55 |
-
@media only screen and (-o-min-device-pixel-ratio: 9/4),
|
56 |
-
only screen and (-webkit-min-device-pixel-ratio: 2.25),
|
57 |
-
only screen and (min-device-pixel-ratio: 2.25),
|
58 |
-
only screen and (min-resolution: 2.25dppx) {
|
59 |
-
.foogallery .fg-item.fg-error {
|
60 |
-
background-image: url('../img/image@3x.png');
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
.foogallery .fg-item.fg-loaded {
|
65 |
-
z-index: 4;
|
66 |
-
}
|
67 |
-
.foogallery .fg-loaded .fg-item-inner {
|
68 |
-
visibility: visible;
|
69 |
-
opacity: 1;
|
70 |
-
z-index: 5;
|
71 |
-
}
|
72 |
-
.foogallery .fg-error .fg-item-inner {
|
73 |
-
pointer-events: none;
|
74 |
-
cursor: default;
|
75 |
-
}
|
76 |
-
.foogallery .fg-thumb {
|
77 |
-
display: block;
|
78 |
-
position: relative;
|
79 |
-
border: none;
|
80 |
-
outline: 0;
|
81 |
-
text-decoration: none;
|
82 |
-
z-index: 4;
|
83 |
-
}
|
84 |
-
.foogallery .fg-image {
|
85 |
-
display: block;
|
86 |
-
position: relative;
|
87 |
-
border: none;
|
88 |
-
outline: 0;
|
89 |
-
text-decoration: none;
|
90 |
-
z-index: 5;
|
91 |
-
max-width: none;
|
92 |
-
height: auto;
|
93 |
-
margin: 0;
|
94 |
-
}
|
95 |
-
.foogallery .fg-loaded .fg-thumb {
|
96 |
-
z-index: 6;
|
97 |
-
}
|
98 |
-
.foogallery .fg-loaded .fg-image {
|
99 |
-
z-index: 7;
|
100 |
-
}
|
101 |
-
|
102 |
-
|
103 |
-
/* Item Style */
|
104 |
-
.foogallery.fg-light .fg-item-inner {
|
105 |
-
background-color: #FFF;
|
106 |
-
color: #333;
|
107 |
-
border-color: #FFF;
|
108 |
-
}
|
109 |
-
.foogallery.fg-dark .fg-item-inner {
|
110 |
-
background-color: #333;
|
111 |
-
color: #FFF;
|
112 |
-
border-color: #333;
|
113 |
-
}
|
114 |
-
/* Idle / Loading / Error Style */
|
115 |
-
.foogallery.fg-light .fg-item.fg-idle,
|
116 |
-
.foogallery.fg-light .fg-item.fg-loading,
|
117 |
-
.foogallery.fg-light .fg-item.fg-error {
|
118 |
-
background-color: #eee;
|
119 |
-
box-shadow: inset 0 0 0 1px #ddd;
|
120 |
-
}
|
121 |
-
.foogallery.fg-dark .fg-item.fg-idle,
|
122 |
-
.foogallery.fg-dark .fg-item.fg-loading,
|
123 |
-
.foogallery.fg-dark .fg-item.fg-error {
|
124 |
-
background-color: #444;
|
125 |
-
box-shadow: inset 0 0 0 1px #333;
|
126 |
-
}
|
127 |
-
/* Border Size */
|
128 |
-
.foogallery.fg-border-thin .fg-item-inner {
|
129 |
-
border-width: 4px;
|
130 |
-
}
|
131 |
-
.foogallery.fg-border-medium .fg-item-inner {
|
132 |
-
border-width: 10px;
|
133 |
-
}
|
134 |
-
.foogallery.fg-border-thick .fg-item-inner {
|
135 |
-
border-width: 16px;
|
136 |
-
}
|
137 |
-
/* Drop Shadows */
|
138 |
-
.foogallery.fg-light.fg-shadow-outline .fg-item-inner {
|
139 |
-
box-shadow: 0 0 0 1px #ddd;
|
140 |
-
}
|
141 |
-
.foogallery.fg-dark.fg-shadow-outline .fg-item-inner {
|
142 |
-
box-shadow: 0 0 0 1px #222;
|
143 |
-
}
|
144 |
-
.foogallery.fg-light.fg-shadow-small .fg-item-inner,
|
145 |
-
.foogallery.fg-dark.fg-shadow-small .fg-item-inner {
|
146 |
-
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.5);
|
147 |
-
}
|
148 |
-
.foogallery.fg-light.fg-shadow-medium .fg-item-inner,
|
149 |
-
.foogallery.fg-dark.fg-shadow-medium .fg-item-inner {
|
150 |
-
box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.5);
|
151 |
-
}
|
152 |
-
.foogallery.fg-light.fg-shadow-large .fg-item-inner,
|
153 |
-
.foogallery.fg-dark.fg-shadow-large .fg-item-inner {
|
154 |
-
box-shadow: 0 1px 16px 0 rgba(0, 0, 0, 0.5);
|
155 |
-
}
|
156 |
-
/* Inset Shadows */
|
157 |
-
.foogallery.fg-shadow-inset-small .fg-thumb:after,
|
158 |
-
.foogallery.fg-shadow-inset-medium .fg-thumb:after,
|
159 |
-
.foogallery.fg-shadow-inset-large .fg-thumb:after {
|
160 |
-
display: block;
|
161 |
-
content: "";
|
162 |
-
position: absolute;
|
163 |
-
top: 0;
|
164 |
-
left: 0;
|
165 |
-
right: 0;
|
166 |
-
bottom: 0;
|
167 |
-
z-index: 7;
|
168 |
-
}
|
169 |
-
.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after,
|
170 |
-
.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after {
|
171 |
-
box-shadow: inset 0 1px 4px 0 rgba(0,0,0,0.3);
|
172 |
-
}
|
173 |
-
.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after,
|
174 |
-
.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after {
|
175 |
-
box-shadow: inset 0 1px 10px 0 rgba(0,0,0,0.3);
|
176 |
-
}
|
177 |
-
.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after,
|
178 |
-
.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after {
|
179 |
-
box-shadow: inset 0 1px 16px 0 rgba(0,0,0,0.3);
|
180 |
-
}
|
181 |
-
|
182 |
-
.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after,
|
183 |
-
.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,
|
184 |
-
.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after {
|
185 |
-
border-radius: 50%;
|
186 |
-
}
|
187 |
-
/* Rounded Corners */
|
188 |
-
.foogallery.fg-round-small .fg-item,
|
189 |
-
.foogallery.fg-round-small .fg-item-inner {
|
190 |
-
border-radius: 5px;
|
191 |
-
}
|
192 |
-
.foogallery.fg-round-medium .fg-item,
|
193 |
-
.foogallery.fg-round-medium .fg-item-inner {
|
194 |
-
border-radius: 10px;
|
195 |
-
}
|
196 |
-
.foogallery.fg-round-large .fg-item,
|
197 |
-
.foogallery.fg-round-large .fg-item-inner {
|
198 |
-
border-radius: 15px;
|
199 |
-
}
|
200 |
-
.foogallery.fg-round-full .fg-item,
|
201 |
-
.foogallery.fg-round-full .fg-item-inner {
|
202 |
-
border-radius: 50%;
|
203 |
-
}
|
204 |
-
/* Loader Styles */
|
205 |
-
.foogallery .fg-loader {
|
206 |
-
position: absolute;
|
207 |
-
top: 50%;
|
208 |
-
left: 50%;
|
209 |
-
transform: translateX(-50%) translateY(-50%);
|
210 |
-
width: 1em;
|
211 |
-
height: 1em;
|
212 |
-
font-size: 5px;
|
213 |
-
visibility: hidden;
|
214 |
-
opacity: 0;
|
215 |
-
}
|
216 |
-
|
217 |
-
.foogallery .fg-loading .fg-loader {
|
218 |
-
visibility: visible;
|
219 |
-
opacity: 1;
|
220 |
-
}
|
221 |
-
.fg-loading-default .fg-loader {
|
222 |
-
border-radius: 50%;
|
223 |
-
text-indent: -9999em;
|
224 |
-
-webkit-animation: loading-default 1.1s infinite ease;
|
225 |
-
animation: loading-default 1.1s infinite ease;
|
226 |
-
}
|
227 |
-
|
228 |
-
@-webkit-keyframes loading-default {
|
229 |
-
0%,
|
230 |
-
100% {
|
231 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 1),
|
232 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
233 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
234 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
235 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
236 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
237 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.5),
|
238 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7);
|
239 |
-
}
|
240 |
-
12.5% {
|
241 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.7),
|
242 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 1), 2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
243 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
244 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
245 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
246 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
247 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5);
|
248 |
-
}
|
249 |
-
25% {
|
250 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.5),
|
251 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7),
|
252 |
-
2.5em 0 0 0 rgba(130, 130, 130, 1), 1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
253 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
254 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
255 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
256 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
257 |
-
}
|
258 |
-
37.5% {
|
259 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
260 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5),
|
261 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.7),
|
262 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 1), 0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
263 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
264 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
265 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
266 |
-
}
|
267 |
-
50% {
|
268 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
269 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
270 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.5),
|
271 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.7),
|
272 |
-
0 2.5em 0 0 rgba(130, 130, 130, 1), -1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
273 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
274 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
275 |
-
}
|
276 |
-
62.5% {
|
277 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
278 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
279 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
280 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.5),
|
281 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.7),
|
282 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 1), -2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
283 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
284 |
-
}
|
285 |
-
75% {
|
286 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
287 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
288 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
289 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
290 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.5),
|
291 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.7),
|
292 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 1), -1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
293 |
-
}
|
294 |
-
87.5% {
|
295 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
296 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
297 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
298 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
299 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
300 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.5),
|
301 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.7),
|
302 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 1);
|
303 |
-
}
|
304 |
-
}
|
305 |
-
|
306 |
-
@keyframes loading-default {
|
307 |
-
0%,
|
308 |
-
100% {
|
309 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 1),
|
310 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
311 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
312 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
313 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
314 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
315 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.5),
|
316 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7);
|
317 |
-
}
|
318 |
-
12.5% {
|
319 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.7),
|
320 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 1), 2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
321 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
322 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
323 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
324 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
325 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5);
|
326 |
-
}
|
327 |
-
25% {
|
328 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.5),
|
329 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7),
|
330 |
-
2.5em 0 0 0 rgba(130, 130, 130, 1), 1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
331 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
332 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
333 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
334 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
335 |
-
}
|
336 |
-
37.5% {
|
337 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
338 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5),
|
339 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.7),
|
340 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 1), 0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
341 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
342 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
343 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
344 |
-
}
|
345 |
-
50% {
|
346 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
347 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
348 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.5),
|
349 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.7),
|
350 |
-
0 2.5em 0 0 rgba(130, 130, 130, 1), -1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
351 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
352 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
353 |
-
}
|
354 |
-
62.5% {
|
355 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
356 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
357 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
358 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.5),
|
359 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.7),
|
360 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 1), -2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
361 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
362 |
-
}
|
363 |
-
75% {
|
364 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
365 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
366 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
367 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
368 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.5),
|
369 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.7),
|
370 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 1), -1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
371 |
-
}
|
372 |
-
87.5% {
|
373 |
-
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
374 |
-
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
375 |
-
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
376 |
-
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
377 |
-
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
378 |
-
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.5),
|
379 |
-
-2.6em 0 0 0 rgba(130, 130, 130, 0.7),
|
380 |
-
-1.8em -1.8em 0 0 rgba(130, 130, 130, 1);
|
381 |
-
}
|
382 |
-
}
|
383 |
-
.fg-loading-bars .fg-loader,
|
384 |
-
.fg-loading-bars .fg-loader:before,
|
385 |
-
.fg-loading-bars .fg-loader:after {
|
386 |
-
background: rgba(130, 130, 130, 1);
|
387 |
-
-webkit-animation: loading-bars 1s infinite ease-in-out;
|
388 |
-
animation: loading-bars 1s infinite ease-in-out;
|
389 |
-
width: 1em;
|
390 |
-
height: 4em;
|
391 |
-
}
|
392 |
-
.fg-loading-bars .fg-loader {
|
393 |
-
color: rgba(130, 130, 130, 1);
|
394 |
-
text-indent: -9999em;
|
395 |
-
font-size: 4px;
|
396 |
-
-webkit-animation-delay: -0.16s;
|
397 |
-
animation-delay: -0.16s;
|
398 |
-
}
|
399 |
-
.fg-loading-bars .fg-loader:before,
|
400 |
-
.fg-loading-bars .fg-loader:after {
|
401 |
-
position: absolute;
|
402 |
-
top: 0;
|
403 |
-
content: '';
|
404 |
-
}
|
405 |
-
.fg-loading-bars .fg-loader:before {
|
406 |
-
left: -1.5em;
|
407 |
-
-webkit-animation-delay: -0.32s;
|
408 |
-
animation-delay: -0.32s;
|
409 |
-
}
|
410 |
-
.fg-loading-bars .fg-loader:after {
|
411 |
-
left: 1.5em;
|
412 |
-
}
|
413 |
-
@-webkit-keyframes loading-bars {
|
414 |
-
0%,
|
415 |
-
80%,
|
416 |
-
100% {
|
417 |
-
box-shadow: 0 0;
|
418 |
-
height: 4em;
|
419 |
-
}
|
420 |
-
40% {
|
421 |
-
box-shadow: 0 -2em;
|
422 |
-
height: 5em;
|
423 |
-
}
|
424 |
-
}
|
425 |
-
@keyframes loading-bars {
|
426 |
-
0%,
|
427 |
-
80%,
|
428 |
-
100% {
|
429 |
-
box-shadow: 0 0;
|
430 |
-
height: 4em;
|
431 |
-
}
|
432 |
-
40% {
|
433 |
-
box-shadow: 0 -2em;
|
434 |
-
height: 5em;
|
435 |
-
}
|
436 |
-
}
|
437 |
-
.fg-loading-trail .fg-loader {
|
438 |
-
color: #828282;
|
439 |
-
font-size: 20px;
|
440 |
-
text-indent: -9999em;
|
441 |
-
overflow: hidden;
|
442 |
-
border-radius: 50%;
|
443 |
-
-webkit-animation: loading-trail-1 1.7s infinite ease, loading-trail-2 1.7s infinite ease;
|
444 |
-
animation: loading-trail-1 1.7s infinite ease, loading-trail-2 1.7s infinite ease;
|
445 |
-
}
|
446 |
-
@-webkit-keyframes loading-trail-1 {
|
447 |
-
0% {
|
448 |
-
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
449 |
-
}
|
450 |
-
5%,
|
451 |
-
95% {
|
452 |
-
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
453 |
-
}
|
454 |
-
10%,
|
455 |
-
59% {
|
456 |
-
box-shadow: 0 -0.83em 0 -0.4em, -0.087em -0.825em 0 -0.42em, -0.173em -0.812em 0 -0.44em, -0.256em -0.789em 0 -0.46em, -0.297em -0.775em 0 -0.477em;
|
457 |
-
}
|
458 |
-
20% {
|
459 |
-
box-shadow: 0 -0.83em 0 -0.4em, -0.338em -0.758em 0 -0.42em, -0.555em -0.617em 0 -0.44em, -0.671em -0.488em 0 -0.46em, -0.749em -0.34em 0 -0.477em;
|
460 |
-
}
|
461 |
-
38% {
|
462 |
-
box-shadow: 0 -0.83em 0 -0.4em, -0.377em -0.74em 0 -0.42em, -0.645em -0.522em 0 -0.44em, -0.775em -0.297em 0 -0.46em, -0.82em -0.09em 0 -0.477em;
|
463 |
-
}
|
464 |
-
100% {
|
465 |
-
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
466 |
-
}
|
467 |
-
}
|
468 |
-
@keyframes loading-trail-1 {
|
469 |
-
0% {
|
470 |
-
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
471 |
-
}
|
472 |
-
5%,
|
473 |
-
95% {
|
474 |
-
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
475 |
-
}
|
476 |
-
10%,
|
477 |
-
59% {
|
478 |
-
box-shadow: 0 -0.83em 0 -0.4em, -0.087em -0.825em 0 -0.42em, -0.173em -0.812em 0 -0.44em, -0.256em -0.789em 0 -0.46em, -0.297em -0.775em 0 -0.477em;
|
479 |
-
}
|
480 |
-
20% {
|
481 |
-
box-shadow: 0 -0.83em 0 -0.4em, -0.338em -0.758em 0 -0.42em, -0.555em -0.617em 0 -0.44em, -0.671em -0.488em 0 -0.46em, -0.749em -0.34em 0 -0.477em;
|
482 |
-
}
|
483 |
-
38% {
|
484 |
-
box-shadow: 0 -0.83em 0 -0.4em, -0.377em -0.74em 0 -0.42em, -0.645em -0.522em 0 -0.44em, -0.775em -0.297em 0 -0.46em, -0.82em -0.09em 0 -0.477em;
|
485 |
-
}
|
486 |
-
100% {
|
487 |
-
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
488 |
-
}
|
489 |
-
}
|
490 |
-
@-webkit-keyframes loading-trail-2 {
|
491 |
-
0% {
|
492 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
493 |
-
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
494 |
-
}
|
495 |
-
100% {
|
496 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
497 |
-
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
498 |
-
}
|
499 |
-
}
|
500 |
-
@keyframes loading-trail-2 {
|
501 |
-
0% {
|
502 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
503 |
-
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
504 |
-
}
|
505 |
-
100% {
|
506 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
507 |
-
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
508 |
-
}
|
509 |
-
}
|
510 |
-
.fg-loading-pulse .fg-loader,
|
511 |
-
.fg-loading-pulse .fg-loader:before,
|
512 |
-
.fg-loading-pulse .fg-loader:after {
|
513 |
-
border-radius: 50%;
|
514 |
-
width: 2.5em;
|
515 |
-
height: 2.5em;
|
516 |
-
-webkit-animation-fill-mode: both;
|
517 |
-
animation-fill-mode: both;
|
518 |
-
-webkit-animation: loading-pulse 1.8s infinite ease-in-out;
|
519 |
-
animation: loading-pulse 1.8s infinite ease-in-out;
|
520 |
-
}
|
521 |
-
.fg-loading-pulse .fg-loader {
|
522 |
-
color: #828282;
|
523 |
-
font-size: 4px;
|
524 |
-
text-indent: -9999em;
|
525 |
-
transform: translateX(-50%) translateY(-150%);
|
526 |
-
-webkit-animation-delay: -0.16s;
|
527 |
-
animation-delay: -0.16s;
|
528 |
-
}
|
529 |
-
.fg-loading-pulse .fg-loader:before,
|
530 |
-
.fg-loading-pulse .fg-loader:after {
|
531 |
-
content: '';
|
532 |
-
position: absolute;
|
533 |
-
top: 0;
|
534 |
-
}
|
535 |
-
.fg-loading-pulse .fg-loader:before {
|
536 |
-
left: -3.5em;
|
537 |
-
-webkit-animation-delay: -0.32s;
|
538 |
-
animation-delay: -0.32s;
|
539 |
-
}
|
540 |
-
.fg-loading-pulse .fg-loader:after {
|
541 |
-
left: 3.5em;
|
542 |
-
}
|
543 |
-
@-webkit-keyframes loading-pulse {
|
544 |
-
0%,
|
545 |
-
80%,
|
546 |
-
100% {
|
547 |
-
box-shadow: 0 2.5em 0 -1.3em;
|
548 |
-
}
|
549 |
-
40% {
|
550 |
-
box-shadow: 0 2.5em 0 0;
|
551 |
-
}
|
552 |
-
}
|
553 |
-
@keyframes loading-pulse {
|
554 |
-
0%,
|
555 |
-
80%,
|
556 |
-
100% {
|
557 |
-
box-shadow: 0 2.5em 0 -1.3em;
|
558 |
-
}
|
559 |
-
40% {
|
560 |
-
box-shadow: 0 2.5em 0 0;
|
561 |
-
}
|
562 |
-
}
|
563 |
-
.fg-loading-dots .fg-loader {
|
564 |
-
color: #828282;
|
565 |
-
font-size: 5px;
|
566 |
-
border-radius: 50%;
|
567 |
-
text-indent: -9999em;
|
568 |
-
-webkit-animation: loading-dots 1.3s infinite linear;
|
569 |
-
animation: loading-dots 1.3s infinite linear;
|
570 |
-
}
|
571 |
-
@-webkit-keyframes loading-dots {
|
572 |
-
0%,
|
573 |
-
100% {
|
574 |
-
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
|
575 |
-
}
|
576 |
-
12.5% {
|
577 |
-
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
578 |
-
}
|
579 |
-
25% {
|
580 |
-
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
581 |
-
}
|
582 |
-
37.5% {
|
583 |
-
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
584 |
-
}
|
585 |
-
50% {
|
586 |
-
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
587 |
-
}
|
588 |
-
62.5% {
|
589 |
-
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
|
590 |
-
}
|
591 |
-
75% {
|
592 |
-
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
|
593 |
-
}
|
594 |
-
87.5% {
|
595 |
-
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
|
596 |
-
}
|
597 |
-
}
|
598 |
-
@keyframes loading-dots {
|
599 |
-
0%,
|
600 |
-
100% {
|
601 |
-
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
|
602 |
-
}
|
603 |
-
12.5% {
|
604 |
-
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
605 |
-
}
|
606 |
-
25% {
|
607 |
-
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
608 |
-
}
|
609 |
-
37.5% {
|
610 |
-
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
611 |
-
}
|
612 |
-
50% {
|
613 |
-
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
614 |
-
}
|
615 |
-
62.5% {
|
616 |
-
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
|
617 |
-
}
|
618 |
-
75% {
|
619 |
-
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
|
620 |
-
}
|
621 |
-
87.5% {
|
622 |
-
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
|
623 |
-
}
|
624 |
-
}
|
625 |
-
.fg-loading-partial .fg-loader,
|
626 |
-
.fg-loading-partial .fg-loader:after {
|
627 |
-
border-radius: 50%;
|
628 |
-
width: 10em;
|
629 |
-
height: 10em;
|
630 |
-
}
|
631 |
-
.fg-loading-partial .fg-loader {
|
632 |
-
font-size: 4px;
|
633 |
-
text-indent: -9999em;
|
634 |
-
border-top: 1.1em solid rgba(130,130,130, 0.2);
|
635 |
-
border-right: 1.1em solid rgba(130,130,130, 0.2);
|
636 |
-
border-bottom: 1.1em solid rgba(130,130,130, 0.2);
|
637 |
-
border-left: 1.1em solid #828282;
|
638 |
-
-webkit-animation: loading-partial 1.1s infinite linear;
|
639 |
-
animation: loading-partial 1.1s infinite linear;
|
640 |
-
}
|
641 |
-
@-webkit-keyframes loading-partial {
|
642 |
-
0% {
|
643 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
644 |
-
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
645 |
-
}
|
646 |
-
100% {
|
647 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
648 |
-
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
649 |
-
}
|
650 |
-
}
|
651 |
-
@keyframes loading-partial {
|
652 |
-
0% {
|
653 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
654 |
-
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
655 |
-
}
|
656 |
-
100% {
|
657 |
-
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
658 |
-
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
659 |
-
}
|
660 |
-
}
|
661 |
-
/* Loaded Effects */
|
662 |
-
.foogallery.fg-loaded-fade-in .fg-item,
|
663 |
-
.foogallery.fg-loaded-slide-up .fg-item,
|
664 |
-
.foogallery.fg-loaded-slide-down .fg-item,
|
665 |
-
.foogallery.fg-loaded-slide-left .fg-item,
|
666 |
-
.foogallery.fg-loaded-slide-right .fg-item,
|
667 |
-
.foogallery.fg-loaded-scale-up .fg-item,
|
668 |
-
.foogallery.fg-loaded-swing-down .fg-item,
|
669 |
-
.foogallery.fg-loaded-drop .fg-item,
|
670 |
-
.foogallery.fg-loaded-fly .fg-item,
|
671 |
-
.foogallery.fg-loaded-flip .fg-item {
|
672 |
-
transition-timing-function: ease;
|
673 |
-
transition-duration: 650ms;
|
674 |
-
transition-property: background-color, transform;
|
675 |
-
}
|
676 |
-
.foogallery.fg-loaded-fade-in .fg-item-inner,
|
677 |
-
.foogallery.fg-loaded-slide-up .fg-item-inner,
|
678 |
-
.foogallery.fg-loaded-slide-down .fg-item-inner,
|
679 |
-
.foogallery.fg-loaded-slide-left .fg-item-inner,
|
680 |
-
.foogallery.fg-loaded-slide-right .fg-item-inner,
|
681 |
-
.foogallery.fg-loaded-scale-up .fg-item-inner,
|
682 |
-
.foogallery.fg-loaded-swing-down .fg-item-inner,
|
683 |
-
.foogallery.fg-loaded-drop .fg-item-inner,
|
684 |
-
.foogallery.fg-loaded-fly .fg-item-inner,
|
685 |
-
.foogallery.fg-loaded-flip .fg-item-inner {
|
686 |
-
transition-timing-function: ease;
|
687 |
-
transition-duration: 650ms;
|
688 |
-
}
|
689 |
-
/* Only apply the perspective once loaded otherwise transitions could take place behind other items*/
|
690 |
-
.foogallery.fg-loaded-swing-down .fg-item.fg-loaded,
|
691 |
-
.foogallery.fg-loaded-drop .fg-item.fg-loaded,
|
692 |
-
.foogallery.fg-loaded-fly .fg-item.fg-loaded,
|
693 |
-
.foogallery.fg-loaded-flip .fg-item.fg-loaded {
|
694 |
-
perspective: 1300px;
|
695 |
-
}
|
696 |
-
/* Fade In */
|
697 |
-
.foogallery.fg-loaded-fade-in .fg-item-inner {
|
698 |
-
transition-property: visibility, opacity;
|
699 |
-
}
|
700 |
-
/* Caption Styles */
|
701 |
-
.foogallery .fg-caption {
|
702 |
-
visibility: hidden;
|
703 |
-
opacity: 0;
|
704 |
-
background-color: rgba(0,0,0,0.6);
|
705 |
-
color: #fff;
|
706 |
-
position: absolute;
|
707 |
-
z-index: 8;
|
708 |
-
width: 100%;
|
709 |
-
max-height: 100%;
|
710 |
-
overflow: hidden;
|
711 |
-
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
712 |
-
font-size: 13px;
|
713 |
-
font-weight: 400;
|
714 |
-
line-height: 1.3;
|
715 |
-
border: none;
|
716 |
-
text-align: center;
|
717 |
-
cursor: pointer;
|
718 |
-
}
|
719 |
-
.foogallery .fg-caption a {
|
720 |
-
text-decoration: none;
|
721 |
-
color: #fff;
|
722 |
-
border-bottom: 1px solid #FFF;
|
723 |
-
}
|
724 |
-
.foogallery .fg-caption a:hover {
|
725 |
-
border-bottom: none;
|
726 |
-
}
|
727 |
-
|
728 |
-
.foogallery .fg-caption-title {
|
729 |
-
white-space: nowrap;
|
730 |
-
overflow: hidden;
|
731 |
-
text-overflow: ellipsis;
|
732 |
-
font-size: 16px;
|
733 |
-
font-weight: 400;
|
734 |
-
padding: 5px;
|
735 |
-
}
|
736 |
-
.foogallery .fg-caption-desc {
|
737 |
-
padding: 5px;
|
738 |
-
}
|
739 |
-
.foogallery .fg-caption-title+.fg-caption-desc {
|
740 |
-
padding-top: 0;
|
741 |
-
}
|
742 |
-
|
743 |
-
/* Always */
|
744 |
-
.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before {
|
745 |
-
display: none;
|
746 |
-
}
|
747 |
-
.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption {
|
748 |
-
left: 0;
|
749 |
-
bottom: 0;
|
750 |
-
transition-timing-function: ease;
|
751 |
-
transition-duration: 300ms;
|
752 |
-
transition-property: visibility, opacity;
|
753 |
-
visibility: visible;
|
754 |
-
opacity: 1;
|
755 |
-
text-align: left;
|
756 |
-
}
|
757 |
-
|
758 |
-
/* On Hover */
|
759 |
-
.foogallery.fg-caption-hover .fg-caption .fg-caption-inner {
|
760 |
-
width: 100%;
|
761 |
-
max-height: 100%;
|
762 |
-
position: absolute;
|
763 |
-
top: 50%;
|
764 |
-
left: 0;
|
765 |
-
transform: translateY(-50%);
|
766 |
-
}
|
767 |
-
.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-thumb:before {
|
768 |
-
display: none;
|
769 |
-
}
|
770 |
-
/* Icon & Overlay */
|
771 |
-
.foogallery.fg-hover-zoom .fg-thumb:before,
|
772 |
-
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
773 |
-
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
774 |
-
.foogallery.fg-hover-plus .fg-thumb:before,
|
775 |
-
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
776 |
-
.foogallery.fg-hover-eye .fg-thumb:before,
|
777 |
-
.foogallery.fg-hover-external .fg-thumb:before,
|
778 |
-
.foogallery.fg-hover-tint .fg-thumb:before {
|
779 |
-
content: "";
|
780 |
-
display: block;
|
781 |
-
position: absolute;
|
782 |
-
visibility: hidden;
|
783 |
-
opacity: 0;
|
784 |
-
top: 0;
|
785 |
-
bottom: 0;
|
786 |
-
left: 0;
|
787 |
-
right: 0;
|
788 |
-
z-index: 8;
|
789 |
-
background: rgba(0,0,0,0.5) no-repeat center center;
|
790 |
-
background-size: 32px 32px;
|
791 |
-
}
|
792 |
-
|
793 |
-
.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-thumb:before,
|
794 |
-
.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-thumb:before,
|
795 |
-
.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-thumb:before,
|
796 |
-
.foogallery.fg-hover-plus .fg-item-inner:hover .fg-thumb:before,
|
797 |
-
.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-thumb:before,
|
798 |
-
.foogallery.fg-hover-eye .fg-item-inner:hover .fg-thumb:before,
|
799 |
-
.foogallery.fg-hover-external .fg-item-inner:hover .fg-thumb:before,
|
800 |
-
.foogallery.fg-hover-tint .fg-item-inner:hover .fg-thumb:before,
|
801 |
-
.foogallery.fg-hover-zoom .fg-thumb:focus:before,
|
802 |
-
.foogallery.fg-hover-zoom2 .fg-thumb:focus:before,
|
803 |
-
.foogallery.fg-hover-zoom3 .fg-thumb:focus:before,
|
804 |
-
.foogallery.fg-hover-plus .fg-thumb:focus:before,
|
805 |
-
.foogallery.fg-hover-circle-plus .fg-thumb:focus:before,
|
806 |
-
.foogallery.fg-hover-eye .fg-thumb:focus:before,
|
807 |
-
.foogallery.fg-hover-external .fg-thumb:focus:before,
|
808 |
-
.foogallery.fg-hover-tint .fg-thumb:focus:before {
|
809 |
-
visibility: visible;
|
810 |
-
opacity: 1;
|
811 |
-
}
|
812 |
-
|
813 |
-
/* Support captions showing the icon */
|
814 |
-
.foogallery.fg-hover-zoom .fg-caption-inner:before,
|
815 |
-
.foogallery.fg-hover-zoom2 .fg-caption-inner:before,
|
816 |
-
.foogallery.fg-hover-zoom3 .fg-caption-inner:before,
|
817 |
-
.foogallery.fg-hover-plus .fg-caption-inner:before,
|
818 |
-
.foogallery.fg-hover-circle-plus .fg-caption-inner:before,
|
819 |
-
.foogallery.fg-hover-eye .fg-caption-inner:before,
|
820 |
-
.foogallery.fg-hover-external .fg-caption-inner:before,
|
821 |
-
.foogallery.fg-hover-tint .fg-caption-inner:before {
|
822 |
-
content: "";
|
823 |
-
display: inline-block;
|
824 |
-
position: relative;
|
825 |
-
width: 32px;
|
826 |
-
height: 32px;
|
827 |
-
margin: 10px 0 5px 0;
|
828 |
-
background: transparent no-repeat center center;
|
829 |
-
background-size: 32px 32px;
|
830 |
-
vertical-align: middle;
|
831 |
-
}
|
832 |
-
|
833 |
-
|
834 |
-
.foogallery.fg-hover-zoom .fg-thumb:before,
|
835 |
-
.foogallery.fg-hover-zoom .fg-caption-inner:before {
|
836 |
-
background-image: url('../img/zoom.png');
|
837 |
-
}
|
838 |
-
|
839 |
-
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
840 |
-
.foogallery.fg-hover-zoom2 .fg-caption-inner:before {
|
841 |
-
background-image: url('../img/zoom2.png');
|
842 |
-
}
|
843 |
-
|
844 |
-
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
845 |
-
.foogallery.fg-hover-zoom3 .fg-caption-inner:before {
|
846 |
-
background-image: url('../img/zoom3.png');
|
847 |
-
}
|
848 |
-
|
849 |
-
.foogallery.fg-hover-plus .fg-thumb:before,
|
850 |
-
.foogallery.fg-hover-plus .fg-caption-inner:before {
|
851 |
-
background-image: url('../img/plus.png');
|
852 |
-
}
|
853 |
-
|
854 |
-
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
855 |
-
.foogallery.fg-hover-circle-plus .fg-caption-inner:before {
|
856 |
-
background-image: url('../img/circle-plus.png');
|
857 |
-
}
|
858 |
-
|
859 |
-
.foogallery.fg-hover-eye .fg-thumb:before,
|
860 |
-
.foogallery.fg-hover-eye .fg-caption-inner:before {
|
861 |
-
background-image: url('../img/eye.png');
|
862 |
-
}
|
863 |
-
|
864 |
-
.foogallery.fg-hover-external .fg-thumb:before,
|
865 |
-
.foogallery.fg-hover-external .fg-caption-inner:before {
|
866 |
-
background-image: url('../img/external.png');
|
867 |
-
}
|
868 |
-
|
869 |
-
/* @2x Images (Pixel Ratio of 1.25+) */
|
870 |
-
@media only screen and (-o-min-device-pixel-ratio: 5/4),
|
871 |
-
only screen and (-webkit-min-device-pixel-ratio: 1.25),
|
872 |
-
only screen and (min-device-pixel-ratio: 1.25),
|
873 |
-
only screen and (min-resolution: 1.25dppx) {
|
874 |
-
|
875 |
-
.foogallery.fg-hover-zoom .fg-thumb:before,
|
876 |
-
.foogallery.fg-hover-zoom .fg-caption-inner:before {
|
877 |
-
background-image: url('../img/zoom@2x.png');
|
878 |
-
}
|
879 |
-
|
880 |
-
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
881 |
-
.foogallery.fg-hover-zoom2 .fg-caption-inner:before {
|
882 |
-
background-image: url('../img/zoom2@2x.png');
|
883 |
-
}
|
884 |
-
|
885 |
-
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
886 |
-
.foogallery.fg-hover-zoom3 .fg-caption-inner:before {
|
887 |
-
background-image: url('../img/zoom3@2x.png');
|
888 |
-
}
|
889 |
-
|
890 |
-
.foogallery.fg-hover-plus .fg-thumb:before,
|
891 |
-
.foogallery.fg-hover-plus .fg-caption-inner:before {
|
892 |
-
background-image: url('../img/plus@2x.png');
|
893 |
-
}
|
894 |
-
|
895 |
-
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
896 |
-
.foogallery.fg-hover-circle-plus .fg-caption-inner:before {
|
897 |
-
background-image: url('../img/circle-plus@2x.png');
|
898 |
-
}
|
899 |
-
|
900 |
-
.foogallery.fg-hover-eye .fg-thumb:before,
|
901 |
-
.foogallery.fg-hover-eye .fg-caption-inner:before {
|
902 |
-
background-image: url('../img/eye@2x.png');
|
903 |
-
}
|
904 |
-
|
905 |
-
.foogallery.fg-hover-external .fg-thumb:before,
|
906 |
-
.foogallery.fg-hover-external .fg-caption-inner:before {
|
907 |
-
background-image: url('../img/external@2x.png');
|
908 |
-
}
|
909 |
-
|
910 |
-
}
|
911 |
-
|
912 |
-
/* @3x Images (Pixel Ratio of 2.25+) */
|
913 |
-
@media only screen and (-o-min-device-pixel-ratio: 9/4),
|
914 |
-
only screen and (-webkit-min-device-pixel-ratio: 2.25),
|
915 |
-
only screen and (min-device-pixel-ratio: 2.25),
|
916 |
-
only screen and (min-resolution: 2.25dppx) {
|
917 |
-
|
918 |
-
.foogallery.fg-hover-zoom .fg-thumb:before,
|
919 |
-
.foogallery.fg-hover-zoom .fg-caption-inner:before {
|
920 |
-
background-image: url('../img/zoom@3x.png');
|
921 |
-
}
|
922 |
-
|
923 |
-
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
924 |
-
.foogallery.fg-hover-zoom2 .fg-caption-inner:before {
|
925 |
-
background-image: url('../img/zoom2@3x.png');
|
926 |
-
}
|
927 |
-
|
928 |
-
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
929 |
-
.foogallery.fg-hover-zoom3 .fg-caption-inner:before {
|
930 |
-
background-image: url('../img/zoom3@3x.png');
|
931 |
-
}
|
932 |
-
|
933 |
-
.foogallery.fg-hover-plus .fg-thumb:before,
|
934 |
-
.foogallery.fg-hover-plus .fg-caption-inner:before {
|
935 |
-
background-image: url('../img/plus@3x.png');
|
936 |
-
}
|
937 |
-
|
938 |
-
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
939 |
-
.foogallery.fg-hover-circle-plus .fg-caption-inner:before {
|
940 |
-
background-image: url('../img/circle-plus@3x.png');
|
941 |
-
}
|
942 |
-
|
943 |
-
.foogallery.fg-hover-eye .fg-thumb:before,
|
944 |
-
.foogallery.fg-hover-eye .fg-caption-inner:before {
|
945 |
-
background-image: url('../img/eye@3x.png');
|
946 |
-
}
|
947 |
-
|
948 |
-
.foogallery.fg-hover-external .fg-thumb:before,
|
949 |
-
.foogallery.fg-hover-external .fg-caption-inner:before {
|
950 |
-
background-image: url('../img/external@3x.png');
|
951 |
-
}
|
952 |
-
|
953 |
-
}
|
954 |
-
/* Transitions */
|
955 |
-
.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,
|
956 |
-
.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,
|
957 |
-
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,
|
958 |
-
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,
|
959 |
-
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,
|
960 |
-
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,
|
961 |
-
.foogallery.fg-caption-hover.fg-hover-push .fg-caption,
|
962 |
-
.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,
|
963 |
-
.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,
|
964 |
-
.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,
|
965 |
-
.foogallery.fg-hover-instant .fg-thumb:before,
|
966 |
-
.foogallery.fg-hover-fade .fg-thumb:before,
|
967 |
-
.foogallery.fg-hover-slide-up .fg-thumb:before,
|
968 |
-
.foogallery.fg-hover-slide-down .fg-thumb:before,
|
969 |
-
.foogallery.fg-hover-slide-left .fg-thumb:before,
|
970 |
-
.foogallery.fg-hover-slide-right .fg-thumb:before,
|
971 |
-
.foogallery.fg-hover-push .fg-thumb,
|
972 |
-
.foogallery.fg-hover-colorize .fg-thumb:before,
|
973 |
-
.foogallery.fg-hover-grayscale .fg-thumb:before,
|
974 |
-
.foogallery.fg-hover-scale .fg-item,
|
975 |
-
.foogallery.fg-hover-scale .fg-thumb:before,
|
976 |
-
.foogallery.fg-hover-colorize .fg-image,
|
977 |
-
.foogallery.fg-hover-grayscale .fg-image {
|
978 |
-
transition-timing-function: ease;
|
979 |
-
transition-duration: 300ms;
|
980 |
-
}
|
981 |
-
/* Colorize */
|
982 |
-
.foogallery.fg-hover-colorize .fg-image {
|
983 |
-
/* Firefox 10+, Firefox on Android */
|
984 |
-
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");
|
985 |
-
/* IE 6-9 */
|
986 |
-
filter: gray;
|
987 |
-
/* Chrome 19+, Safari 6+, Safari 6+ iOS */
|
988 |
-
-webkit-filter: grayscale(100%);
|
989 |
-
-webkit-transition-property: -webkit-filter;
|
990 |
-
transition-property: filter;
|
991 |
-
}
|
992 |
-
.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image {
|
993 |
-
-webkit-filter: none;
|
994 |
-
filter: none;
|
995 |
-
}
|
996 |
-
.foogallery.fg-hover-colorize .fg-thumb:before,
|
997 |
-
.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption {
|
998 |
-
display: block;
|
999 |
-
left: 0;
|
1000 |
-
top: 0;
|
1001 |
-
bottom: 0;
|
1002 |
-
transition-property: visibility, opacity;
|
1003 |
-
}
|
1004 |
-
.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-thumb:before,
|
1005 |
-
.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption {
|
1006 |
-
visibility: visible;
|
1007 |
-
opacity: 1;
|
1008 |
-
}
|
1009 |
-
/* Fade */
|
1010 |
-
.foogallery.fg-hover-fade .fg-loaded .fg-thumb:before,
|
1011 |
-
.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption {
|
1012 |
-
display: block;
|
1013 |
-
left: 0;
|
1014 |
-
top: 0;
|
1015 |
-
bottom: 0;
|
1016 |
-
transition-property: visibility, opacity;
|
1017 |
-
}
|
1018 |
-
.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1019 |
-
.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption {
|
1020 |
-
visibility: visible;
|
1021 |
-
opacity: 1;
|
1022 |
-
}
|
1023 |
-
/* Grayscale */
|
1024 |
-
.foogallery.fg-hover-grayscale .fg-image {
|
1025 |
-
-webkit-filter: none;
|
1026 |
-
filter: none;
|
1027 |
-
-webkit-transition-property: -webkit-filter;
|
1028 |
-
transition-property: filter;
|
1029 |
-
}
|
1030 |
-
.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image {
|
1031 |
-
/* For Webkit browsers */
|
1032 |
-
-webkit-filter: grayscale(1);
|
1033 |
-
-webkit-filter: grayscale(100%);
|
1034 |
-
/* Standard */
|
1035 |
-
filter: grayscale(100%);
|
1036 |
-
/* For IE 6 - 9 */
|
1037 |
-
filter: gray;
|
1038 |
-
opacity: 1;
|
1039 |
-
}
|
1040 |
-
.foogallery.fg-hover-grayscale .fg-thumb:before,
|
1041 |
-
.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption {
|
1042 |
-
display: block;
|
1043 |
-
left: 0;
|
1044 |
-
top: 0;
|
1045 |
-
bottom: 0;
|
1046 |
-
transition-property: visibility, opacity;
|
1047 |
-
}
|
1048 |
-
.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-thumb:before,
|
1049 |
-
.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption {
|
1050 |
-
visibility: visible;
|
1051 |
-
opacity: 1;
|
1052 |
-
}
|
1053 |
-
/* Instant */
|
1054 |
-
.foogallery.fg-hover-instant .fg-loaded .fg-thumb:before,
|
1055 |
-
.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption {
|
1056 |
-
display: block;
|
1057 |
-
left: 0;
|
1058 |
-
top: 0;
|
1059 |
-
bottom: 0;
|
1060 |
-
transition-property: none;
|
1061 |
-
}
|
1062 |
-
.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1063 |
-
.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption {
|
1064 |
-
visibility: visible;
|
1065 |
-
opacity: 1;
|
1066 |
-
}
|
1067 |
-
/* Push */
|
1068 |
-
.foogallery.fg-hover-push .fg-loaded .fg-thumb:before,
|
1069 |
-
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption {
|
1070 |
-
display: block;
|
1071 |
-
left: 0;
|
1072 |
-
top: 0;
|
1073 |
-
bottom: 0;
|
1074 |
-
transform: translateX(100%);
|
1075 |
-
visibility: visible;
|
1076 |
-
opacity: 1;
|
1077 |
-
}
|
1078 |
-
.foogallery.fg-hover-push .fg-loaded .fg-thumb,
|
1079 |
-
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption {
|
1080 |
-
transition-property: transform;
|
1081 |
-
}
|
1082 |
-
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption {
|
1083 |
-
transform: translateY(0);
|
1084 |
-
}
|
1085 |
-
.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,
|
1086 |
-
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb {
|
1087 |
-
transform: translateX(-100%);
|
1088 |
-
}
|
1089 |
-
/* Scale */
|
1090 |
-
.foogallery.fg-hover-scale .fg-item {
|
1091 |
-
transition-property: transform;
|
1092 |
-
z-index: 4;
|
1093 |
-
}
|
1094 |
-
|
1095 |
-
.foogallery.fg-hover-scale .fg-item:hover {
|
1096 |
-
transform: scale(1.048);
|
1097 |
-
z-index: 10;
|
1098 |
-
}
|
1099 |
-
.foogallery.fg-hover-scale .fg-thumb:before,
|
1100 |
-
.foogallery.fg-caption-hover.fg-hover-scale .fg-caption {
|
1101 |
-
display: block;
|
1102 |
-
left: 0;
|
1103 |
-
top: 0;
|
1104 |
-
bottom: 0;
|
1105 |
-
transition-property: visibility, opacity;
|
1106 |
-
}
|
1107 |
-
.foogallery.fg-hover-scale .fg-item-inner:hover .fg-thumb:before,
|
1108 |
-
.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption {
|
1109 |
-
visibility: visible;
|
1110 |
-
opacity: 1;
|
1111 |
-
}
|
1112 |
-
/* Slide */
|
1113 |
-
.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before,
|
1114 |
-
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,
|
1115 |
-
.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,
|
1116 |
-
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,
|
1117 |
-
.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,
|
1118 |
-
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,
|
1119 |
-
.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,
|
1120 |
-
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption {
|
1121 |
-
display: block;
|
1122 |
-
left: 0;
|
1123 |
-
top: 0;
|
1124 |
-
bottom: 0;
|
1125 |
-
transition-property: transform;
|
1126 |
-
visibility: visible;
|
1127 |
-
opacity: 1;
|
1128 |
-
}
|
1129 |
-
.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1130 |
-
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,
|
1131 |
-
.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1132 |
-
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,
|
1133 |
-
.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1134 |
-
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,
|
1135 |
-
.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1136 |
-
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption {
|
1137 |
-
transform: translateY(0) translateX(0);
|
1138 |
-
}
|
1139 |
-
|
1140 |
-
|
1141 |
-
/* Slide Up */
|
1142 |
-
.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before,
|
1143 |
-
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption {
|
1144 |
-
transform: translateY(100%);
|
1145 |
-
}
|
1146 |
-
|
1147 |
-
/* Slide Down */
|
1148 |
-
.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,
|
1149 |
-
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption {
|
1150 |
-
transform: translateY(-100%);
|
1151 |
-
}
|
1152 |
-
|
1153 |
-
/* Slide Left */
|
1154 |
-
.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,
|
1155 |
-
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption {
|
1156 |
-
transform: translateX(100%);
|
1157 |
-
}
|
1158 |
-
|
1159 |
-
/* Slide Right */
|
1160 |
-
.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,
|
1161 |
-
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption {
|
1162 |
-
transform: translateX(-100%);
|
1163 |
-
}
|
1164 |
-
.fg-paging-container, .fg-paging-container *, .fg-paging-container *:before, .fg-paging-container *:after {
|
1165 |
-
-webkit-box-sizing: border-box;
|
1166 |
-
-moz-box-sizing: border-box;
|
1167 |
-
box-sizing: border-box;
|
1168 |
-
}
|
1169 |
-
.fg-paging-container {
|
1170 |
-
display: block;
|
1171 |
-
padding: 15px;
|
1172 |
-
text-align: center;
|
1173 |
-
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
1174 |
-
-webkit-user-select: none;
|
1175 |
-
-moz-user-select: none;
|
1176 |
-
-ms-user-select: none;
|
1177 |
-
user-select: none;
|
1178 |
-
}
|
1179 |
-
/* Utility */
|
1180 |
-
.fg-sr-only {
|
1181 |
-
position: absolute;
|
1182 |
-
width: 1px;
|
1183 |
-
height: 1px;
|
1184 |
-
padding: 0;
|
1185 |
-
margin: -1px;
|
1186 |
-
overflow: hidden;
|
1187 |
-
clip: rect(0,0,0,0);
|
1188 |
-
border: 0;
|
1189 |
-
}
|
1190 |
-
.fg-paging-container .fg-dots,
|
1191 |
-
.fg-paging-container .fg-dot-item {
|
1192 |
-
display: inline-block;
|
1193 |
-
margin: 0;
|
1194 |
-
padding: 0;
|
1195 |
-
outline: none;
|
1196 |
-
list-style: none;
|
1197 |
-
}
|
1198 |
-
.fg-paging-container .fg-dot-item .fg-dot-link {
|
1199 |
-
display: inline-block;
|
1200 |
-
margin: 3px;
|
1201 |
-
font-weight: 400;
|
1202 |
-
line-height: 1.42857143;
|
1203 |
-
text-align: center;
|
1204 |
-
white-space: nowrap;
|
1205 |
-
vertical-align: middle;
|
1206 |
-
cursor: pointer;
|
1207 |
-
user-select: none;
|
1208 |
-
background-image: none;
|
1209 |
-
text-decoration: none;
|
1210 |
-
border: 1px solid transparent;
|
1211 |
-
position: relative;
|
1212 |
-
border-radius: 50%;
|
1213 |
-
padding: 0;
|
1214 |
-
font-size: 0;
|
1215 |
-
outline: none;
|
1216 |
-
color: transparent;
|
1217 |
-
box-shadow: none;
|
1218 |
-
}
|
1219 |
-
.fg-paging-container .fg-dot-item .fg-dot-link:before {
|
1220 |
-
content: "";
|
1221 |
-
background-color: transparent;
|
1222 |
-
border: 1px solid transparent;
|
1223 |
-
display: block;
|
1224 |
-
border-radius: 50%;
|
1225 |
-
width: 9px;
|
1226 |
-
height: 9px;
|
1227 |
-
padding: 0;
|
1228 |
-
margin: 2px;
|
1229 |
-
}
|
1230 |
-
.fg-paging-container .fg-dot-item .fg-dot-link:active,
|
1231 |
-
.fg-paging-container .fg-dot-item .fg-dot-link:hover,
|
1232 |
-
.fg-paging-container .fg-dot-item .fg-dot-link:focus {
|
1233 |
-
text-decoration: none;
|
1234 |
-
box-shadow: none;
|
1235 |
-
outline: none;
|
1236 |
-
}
|
1237 |
-
.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,
|
1238 |
-
.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link {
|
1239 |
-
cursor: not-allowed;
|
1240 |
-
pointer-events: none;
|
1241 |
-
}
|
1242 |
-
.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link {
|
1243 |
-
cursor: not-allowed;
|
1244 |
-
pointer-events: none;
|
1245 |
-
outline: none;
|
1246 |
-
}
|
1247 |
-
|
1248 |
-
/* Light - Dots */
|
1249 |
-
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,
|
1250 |
-
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before {
|
1251 |
-
transition-timing-function: ease-out;
|
1252 |
-
transition-duration: 0.3s;
|
1253 |
-
transition-property: color, border-color, background-color;
|
1254 |
-
}
|
1255 |
-
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link {
|
1256 |
-
background-color: #eee;
|
1257 |
-
border-color: #9e9e9e;
|
1258 |
-
}
|
1259 |
-
.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link {
|
1260 |
-
border-color: #8a8a8a;
|
1261 |
-
}
|
1262 |
-
.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before,
|
1263 |
-
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,
|
1264 |
-
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before {
|
1265 |
-
background-color: #666;
|
1266 |
-
border-color: #8a8a8a;
|
1267 |
-
}
|
1268 |
-
.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,
|
1269 |
-
.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover,
|
1270 |
-
.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus {
|
1271 |
-
background-color: #eee;
|
1272 |
-
border-color: #9e9e9e;
|
1273 |
-
opacity: 0.5;
|
1274 |
-
}
|
1275 |
-
|
1276 |
-
/* Dark - Dots */
|
1277 |
-
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,
|
1278 |
-
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before {
|
1279 |
-
transition-timing-function: ease-out;
|
1280 |
-
transition-duration: 0.3s;
|
1281 |
-
transition-property: color, border-color, background-color;
|
1282 |
-
}
|
1283 |
-
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link {
|
1284 |
-
background-color: #666;
|
1285 |
-
border-color: #333;
|
1286 |
-
}
|
1287 |
-
.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link {
|
1288 |
-
border-color: #444;
|
1289 |
-
}
|
1290 |
-
.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before,
|
1291 |
-
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,
|
1292 |
-
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before {
|
1293 |
-
background-color: #333;
|
1294 |
-
border-color: #444;
|
1295 |
-
}
|
1296 |
-
.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,
|
1297 |
-
.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover,
|
1298 |
-
.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus {
|
1299 |
-
background-color: #666;
|
1300 |
-
border-color: #333;
|
1301 |
-
opacity: 0.5;
|
1302 |
-
}
|
1303 |
-
/* Base styles */
|
1304 |
-
.fg-default:after {
|
1305 |
-
content: '';
|
1306 |
-
display: block;
|
1307 |
-
clear: both;
|
1308 |
-
}
|
1309 |
-
|
1310 |
-
.fg-default .fg-item,
|
1311 |
-
.fg-default .fg-item-inner,
|
1312 |
-
.fg-default .fg-thumb {
|
1313 |
-
display: inline-block;
|
1314 |
-
vertical-align: top;
|
1315 |
-
max-width: 100%;
|
1316 |
-
}
|
1317 |
-
|
1318 |
-
.fg-default .fg-image {
|
1319 |
-
border-radius: 0;
|
1320 |
-
display: block;
|
1321 |
-
max-width: 100%;
|
1322 |
-
height: auto;
|
1323 |
-
margin: 0;
|
1324 |
-
padding: 0;
|
1325 |
-
}
|
1326 |
-
|
1327 |
-
/* Horizontal alignment */
|
1328 |
-
.fg-default .fg-image {
|
1329 |
-
vertical-align: top;
|
1330 |
-
}
|
1331 |
-
|
1332 |
-
.fg-default.fg-left {
|
1333 |
-
text-align: left;
|
1334 |
-
}
|
1335 |
-
|
1336 |
-
.fg-default.fg-center {
|
1337 |
-
text-align: center;
|
1338 |
-
}
|
1339 |
-
|
1340 |
-
.fg-default.fg-right {
|
1341 |
-
text-align: right;
|
1342 |
-
}
|
1343 |
-
|
1344 |
-
/* Gutter widths */
|
1345 |
-
.fg-default.fg-gutter-5 {
|
1346 |
-
padding-left: 5px;
|
1347 |
-
margin-bottom: -5px;
|
1348 |
-
}
|
1349 |
-
.fg-default.fg-gutter-5 .fg-item {
|
1350 |
-
margin-right: 5px;
|
1351 |
-
margin-bottom: 5px;
|
1352 |
-
}
|
1353 |
-
|
1354 |
-
.fg-default.fg-gutter-10 {
|
1355 |
-
padding-left: 10px;
|
1356 |
-
margin-bottom: -10px;
|
1357 |
-
}
|
1358 |
-
.fg-default.fg-gutter-10 .fg-item {
|
1359 |
-
margin-right: 10px;
|
1360 |
-
margin-bottom: 10px;
|
1361 |
-
}
|
1362 |
-
|
1363 |
-
.fg-default.fg-gutter-15 {
|
1364 |
-
padding-left: 15px;
|
1365 |
-
margin-bottom: -15px;
|
1366 |
-
}
|
1367 |
-
.fg-default.fg-gutter-15 .fg-item {
|
1368 |
-
margin-right: 15px;
|
1369 |
-
margin-bottom: 15px;
|
1370 |
-
}
|
1371 |
-
|
1372 |
-
.fg-default.fg-gutter-20 {
|
1373 |
-
padding-left: 20px;
|
1374 |
-
margin-bottom: -20px;
|
1375 |
-
}
|
1376 |
-
.fg-default.fg-gutter-20 .fg-item {
|
1377 |
-
margin-right: 20px;
|
1378 |
-
margin-bottom: 20px;
|
1379 |
-
}
|
1380 |
-
|
1381 |
-
.fg-default.fg-gutter-25 {
|
1382 |
-
padding-left: 25px;
|
1383 |
-
margin-bottom: -25px;
|
1384 |
-
}
|
1385 |
-
.fg-default.fg-gutter-25 .fg-item {
|
1386 |
-
margin-right: 25px;
|
1387 |
-
margin-bottom: 25px;
|
1388 |
-
}
|
1389 |
-
/* Base styles */
|
1390 |
-
.fg-masonry * {
|
1391 |
-
-webkit-box-sizing: border-box;
|
1392 |
-
-moz-box-sizing: border-box;
|
1393 |
-
box-sizing: border-box;
|
1394 |
-
}
|
1395 |
-
.foogallery.fg-masonry.fg-center {
|
1396 |
-
margin: 0 auto;
|
1397 |
-
}
|
1398 |
-
.fg-masonry .fg-thumb {
|
1399 |
-
display: block;
|
1400 |
-
}
|
1401 |
-
.fg-masonry.fg-masonry-fixed .fg-thumb {
|
1402 |
-
display: inline-block;
|
1403 |
-
}
|
1404 |
-
.fg-masonry.fg-masonry-fixed .fg-image {
|
1405 |
-
max-width: 100%;
|
1406 |
-
}
|
1407 |
-
|
1408 |
-
.fg-masonry .fg-column-width {
|
1409 |
-
display: inline-block;
|
1410 |
-
visibility: hidden;
|
1411 |
-
height: 0;
|
1412 |
-
border: solid 0 transparent;
|
1413 |
-
}
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
|
1418 |
-
|
1419 |
-
|
1420 |
-
|
1421 |
-
|
1422 |
-
|
1423 |
-
|
1424 |
-
|
1425 |
-
height:
|
1426 |
-
|
1427 |
-
}
|
1428 |
-
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
}
|
1433 |
-
|
1434 |
-
|
1435 |
-
/* 2 column layout -
|
1436 |
-
.fg-masonry.fg-masonry-2col .fg-item { margin-bottom:
|
1437 |
-
.fg-masonry.fg-masonry-2col .fg-column-width { width:
|
1438 |
-
.fg-masonry.fg-masonry-2col .fg-gutter-width { width:
|
1439 |
-
|
1440 |
-
/* 2 column layout -
|
1441 |
-
.fg-masonry.fg-masonry-2col.fg-gutter-
|
1442 |
-
.fg-masonry.fg-masonry-2col.fg-gutter-
|
1443 |
-
.fg-masonry.fg-masonry-2col.fg-gutter-
|
1444 |
-
|
1445 |
-
/*
|
1446 |
-
|
1447 |
-
.fg-masonry.fg-masonry-
|
1448 |
-
.fg-masonry.fg-masonry-
|
1449 |
-
|
1450 |
-
|
1451 |
-
/* 3 column layout -
|
1452 |
-
.fg-masonry.fg-masonry-3col .fg-item { margin-bottom:
|
1453 |
-
.fg-masonry.fg-masonry-3col .fg-column-width { width:
|
1454 |
-
.fg-masonry.fg-masonry-3col .fg-gutter-width { width:
|
1455 |
-
|
1456 |
-
/* 3 column layout -
|
1457 |
-
.fg-masonry.fg-masonry-3col.fg-gutter-
|
1458 |
-
.fg-masonry.fg-masonry-3col.fg-gutter-
|
1459 |
-
.fg-masonry.fg-masonry-3col.fg-gutter-
|
1460 |
-
|
1461 |
-
/*
|
1462 |
-
|
1463 |
-
.fg-masonry.fg-masonry-
|
1464 |
-
.fg-masonry.fg-masonry-
|
1465 |
-
|
1466 |
-
|
1467 |
-
/* 4 column layout -
|
1468 |
-
.fg-masonry.fg-masonry-4col .fg-item { margin-bottom:
|
1469 |
-
.fg-masonry.fg-masonry-4col .fg-column-width { width:
|
1470 |
-
.fg-masonry.fg-masonry-4col .fg-gutter-width { width:
|
1471 |
-
|
1472 |
-
/* 4 column layout -
|
1473 |
-
.fg-masonry.fg-masonry-4col.fg-gutter-
|
1474 |
-
.fg-masonry.fg-masonry-4col.fg-gutter-
|
1475 |
-
.fg-masonry.fg-masonry-4col.fg-gutter-
|
1476 |
-
|
1477 |
-
/*
|
1478 |
-
|
1479 |
-
.fg-masonry.fg-masonry-
|
1480 |
-
.fg-masonry.fg-masonry-
|
1481 |
-
|
1482 |
-
|
1483 |
-
/* 5 column layout -
|
1484 |
-
.fg-masonry.fg-masonry-5col .fg-item { margin-bottom:
|
1485 |
-
.fg-masonry.fg-masonry-5col .fg-column-width { width:
|
1486 |
-
.fg-masonry.fg-masonry-5col .fg-gutter-width { width:
|
1487 |
-
|
1488 |
-
/* 5 column layout -
|
1489 |
-
.fg-masonry.fg-masonry-5col.fg-gutter-
|
1490 |
-
.fg-masonry.fg-masonry-5col.fg-gutter-
|
1491 |
-
.fg-masonry.fg-masonry-5col.fg-gutter-
|
1492 |
-
|
1493 |
-
/*
|
1494 |
-
|
1495 |
-
|
1496 |
-
.fg-masonry.fg-masonry-5col
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
.fg-masonry.fg-masonry-
|
1502 |
-
|
1503 |
-
|
1504 |
-
.fg-masonry.fg-masonry-
|
1505 |
-
.fg-masonry.fg-masonry-
|
1506 |
-
.fg-masonry.fg-masonry-
|
1507 |
-
|
1508 |
-
|
1509 |
-
.fg-masonry.fg-masonry-
|
1510 |
-
|
1511 |
-
|
1512 |
-
.fg-masonry.fg-masonry-
|
1513 |
-
.fg-masonry.fg-masonry-
|
1514 |
-
.fg-masonry.fg-masonry-
|
1515 |
-
|
1516 |
-
|
1517 |
-
.fg-masonry.fg-masonry-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
.fg-masonry.fg-masonry-
|
1530 |
-
.fg-masonry.fg-masonry-
|
1531 |
-
.fg-masonry.fg-masonry-
|
1532 |
-
.fg-masonry.fg-masonry-
|
1533 |
-
|
1534 |
-
|
1535 |
-
.fg-masonry.fg-masonry-5col
|
1536 |
-
.fg-masonry.fg-masonry-4col
|
1537 |
-
.fg-masonry.fg-masonry-3col
|
1538 |
-
|
1539 |
-
|
1540 |
-
.fg-masonry.fg-masonry-
|
1541 |
-
.fg-masonry.fg-masonry-
|
1542 |
-
.fg-masonry.fg-masonry-
|
1543 |
-
.fg-masonry.fg-masonry-
|
1544 |
-
|
1545 |
-
|
1546 |
-
.fg-masonry.fg-masonry-5col.fg-gutter-
|
1547 |
-
.fg-masonry.fg-masonry-4col.fg-gutter-
|
1548 |
-
.fg-masonry.fg-masonry-3col.fg-gutter-
|
1549 |
-
|
1550 |
-
|
1551 |
-
.fg-masonry.fg-masonry-
|
1552 |
-
.fg-masonry.fg-masonry-
|
1553 |
-
.fg-masonry.fg-masonry-
|
1554 |
-
.fg-masonry.fg-masonry-
|
1555 |
-
|
1556 |
-
|
1557 |
-
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
|
1562 |
-
|
1563 |
-
|
1564 |
-
|
1565 |
-
.fg-masonry.fg-masonry-
|
1566 |
-
.fg-masonry.fg-masonry-
|
1567 |
-
.fg-masonry.fg-masonry-
|
1568 |
-
.fg-masonry.fg-masonry-
|
1569 |
-
.fg-masonry.fg-masonry-
|
1570 |
-
.fg-masonry.fg-masonry-
|
1571 |
-
.fg-masonry.fg-masonry-
|
1572 |
-
|
1573 |
-
|
1574 |
-
.fg-masonry.fg-masonry-
|
1575 |
-
.fg-masonry.fg-masonry-
|
1576 |
-
.fg-masonry.fg-masonry-
|
1577 |
-
|
1578 |
-
|
1579 |
-
.fg-masonry.fg-masonry-
|
1580 |
-
.fg-masonry.fg-masonry-
|
1581 |
-
.fg-masonry.fg-masonry-
|
1582 |
-
.fg-masonry.fg-masonry-
|
1583 |
-
.fg-masonry.fg-masonry-
|
1584 |
-
.fg-masonry.fg-masonry-
|
1585 |
-
.fg-masonry.fg-masonry-
|
1586 |
-
|
1587 |
-
|
1588 |
-
.fg-masonry.fg-masonry-
|
1589 |
-
.fg-masonry.fg-masonry-
|
1590 |
-
.fg-masonry.fg-masonry-
|
1591 |
-
|
1592 |
-
|
1593 |
-
.fg-masonry.fg-masonry-
|
1594 |
-
.fg-masonry.fg-masonry-
|
1595 |
-
.fg-masonry.fg-masonry-
|
1596 |
-
.fg-masonry.fg-masonry-
|
1597 |
-
.fg-masonry.fg-masonry-
|
1598 |
-
.fg-masonry.fg-masonry-
|
1599 |
-
.fg-masonry.fg-masonry-
|
1600 |
-
|
1601 |
-
|
1602 |
-
|
1603 |
-
|
1604 |
-
|
1605 |
-
}
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
|
1611 |
-
|
1612 |
-
|
1613 |
-
|
1614 |
-
.foogallery.fg-
|
1615 |
-
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
|
1620 |
-
|
1621 |
-
|
1622 |
-
|
1623 |
-
|
1624 |
-
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
1630 |
-
|
1631 |
-
|
1632 |
-
|
1633 |
-
|
1634 |
-
|
1635 |
-
|
1636 |
-
|
1637 |
-
|
1638 |
-
|
1639 |
-
|
1640 |
-
|
1641 |
-
|
1642 |
-
|
1643 |
-
|
1644 |
-
|
1645 |
-
|
1646 |
-
|
1647 |
-
|
1648 |
-
|
1649 |
-
|
1650 |
-
}
|
1651 |
-
.fg-
|
1652 |
-
|
1653 |
-
|
1654 |
-
|
1655 |
-
|
1656 |
-
|
1657 |
-
.fg-
|
1658 |
-
|
1659 |
-
|
1660 |
-
|
1661 |
-
|
1662 |
-
|
1663 |
-
|
1664 |
-
|
1665 |
-
}
|
1666 |
-
.fg-
|
1667 |
-
|
1668 |
-
|
1669 |
-
|
1670 |
-
|
1671 |
-
|
1672 |
-
|
1673 |
-
|
1674 |
-
|
1675 |
-
.fg-
|
1676 |
-
|
1677 |
-
|
1678 |
-
|
1679 |
-
|
1680 |
-
|
1681 |
-
|
1682 |
-
|
1683 |
-
|
1684 |
-
|
1685 |
-
|
1686 |
-
|
1687 |
-
|
1688 |
-
|
1689 |
-
|
1690 |
-
|
1691 |
-
border:
|
1692 |
-
|
1693 |
-
|
1694 |
-
|
1695 |
-
|
1696 |
-
|
1697 |
-
|
1698 |
-
|
1699 |
-
|
1700 |
-
|
1701 |
-
|
1702 |
-
|
1703 |
-
|
1704 |
-
.
|
1705 |
-
|
1706 |
-
|
1707 |
-
|
1708 |
-
|
1709 |
-
|
1710 |
-
|
1711 |
-
|
1712 |
-
|
1713 |
-
|
1714 |
-
|
1715 |
-
|
1716 |
-
|
1717 |
-
|
1718 |
-
|
1719 |
-
|
1720 |
-
|
1721 |
-
|
1722 |
-
|
1723 |
-
|
1724 |
-
|
1725 |
-
|
1726 |
-
}
|
1727 |
-
.
|
1728 |
-
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
|
1733 |
-
width:
|
1734 |
-
height:
|
1735 |
-
|
1736 |
-
|
1737 |
-
|
1738 |
-
|
1739 |
-
|
1740 |
-
|
1741 |
-
|
1742 |
-
|
1743 |
-
|
1744 |
-
|
1745 |
-
|
1746 |
-
|
1747 |
-
|
1748 |
-
|
1749 |
-
|
1750 |
-
|
1751 |
-
|
1752 |
-
|
1753 |
-
.fg-simple_portfolio
|
1754 |
-
|
1755 |
-
|
1756 |
-
|
1757 |
-
|
1758 |
-
|
1759 |
-
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
1763 |
-
|
1764 |
-
|
1765 |
-
|
1766 |
-
|
1767 |
-
|
1768 |
-
}
|
1769 |
-
.fg-simple_portfolio
|
1770 |
-
.fg-simple_portfolio
|
1771 |
-
|
1772 |
-
|
1773 |
-
|
1774 |
-
|
1775 |
-
|
1776 |
-
}
|
1777 |
-
.fg-simple_portfolio
|
1778 |
-
|
1779 |
-
|
1780 |
-
|
1781 |
-
|
1782 |
-
|
1783 |
-
|
1784 |
-
|
1785 |
-
|
1786 |
-
|
1787 |
-
|
1788 |
-
|
1789 |
-
|
1790 |
-
|
1791 |
-
|
1792 |
-
|
1793 |
-
|
1794 |
-
|
1795 |
-
|
1796 |
-
|
1797 |
-
|
1798 |
-
|
1799 |
-
|
1800 |
-
.fg-simple_portfolio.fg-
|
1801 |
-
|
1802 |
-
|
1803 |
-
|
1804 |
-
|
1805 |
-
|
1806 |
-
|
1807 |
-
|
1808 |
-
|
1809 |
-
|
1810 |
-
|
1811 |
-
|
1812 |
-
|
1813 |
-
|
1814 |
-
|
1815 |
-
|
1816 |
-
|
1817 |
-
|
1818 |
-
|
1819 |
-
.foogallery.fg-
|
1820 |
-
|
1821 |
-
|
1822 |
-
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
-
|
1827 |
-
|
1828 |
-
|
1829 |
-
|
1830 |
-
|
1831 |
-
|
1832 |
-
|
1833 |
-
|
1834 |
-
|
1835 |
-
|
1836 |
-
|
1837 |
-
|
1838 |
-
|
1839 |
-
|
1840 |
-
}
|
1841 |
-
|
1842 |
-
|
1843 |
-
|
1844 |
-
|
1845 |
-
|
1846 |
-
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
|
1851 |
-
}
|
1852 |
-
|
1853 |
-
.
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
1859 |
-
|
1860 |
-
}
|
1861 |
-
.
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
|
1866 |
-
.
|
1867 |
-
|
1868 |
-
|
1869 |
-
|
1870 |
-
.
|
1871 |
-
color: #FFF;
|
1872 |
-
}
|
1873 |
-
|
1874 |
-
|
1875 |
-
|
1876 |
-
|
1877 |
-
border-
|
1878 |
-
|
1879 |
-
|
1880 |
-
.
|
1881 |
-
|
1882 |
-
|
1883 |
-
|
1884 |
-
|
1885 |
-
|
1886 |
-
|
1887 |
-
|
1888 |
-
|
1889 |
-
|
1890 |
-
|
1891 |
-
|
1892 |
-
|
1893 |
-
|
1894 |
-
|
1895 |
-
|
1896 |
-
|
1897 |
-
|
1898 |
-
|
1899 |
-
|
1900 |
-
|
1901 |
-
|
1902 |
-
|
1903 |
-
|
1904 |
-
|
1905 |
-
.fg-
|
1906 |
-
|
1907 |
-
|
1908 |
-
|
1909 |
-
|
1910 |
-
|
1911 |
-
|
1912 |
-
|
1913 |
-
|
1914 |
-
|
1915 |
-
|
1916 |
-
|
1917 |
-
|
1918 |
-
|
1919 |
-
|
1920 |
-
|
1921 |
-
|
1922 |
-
|
1923 |
-
|
1924 |
-
|
1925 |
-
|
1926 |
-
|
1927 |
-
|
1928 |
-
|
1929 |
-
|
1930 |
-
|
1931 |
-
|
1932 |
-
|
1933 |
-
|
1934 |
-
|
1935 |
-
|
1936 |
-
|
1937 |
-
|
1938 |
-
.fg-
|
1939 |
-
|
1940 |
-
|
1941 |
-
|
1942 |
-
|
1943 |
-
|
1944 |
-
|
1945 |
-
|
1946 |
-
|
1947 |
-
}
|
1948 |
-
|
1949 |
-
.fg-
|
1950 |
-
|
1951 |
-
|
1952 |
-
|
1953 |
-
|
1954 |
-
|
1955 |
-
text-
|
1956 |
-
|
1957 |
-
|
1958 |
-
|
1959 |
-
|
1960 |
-
|
1961 |
-
|
1962 |
-
|
1963 |
-
|
1964 |
-
|
1965 |
-
|
1966 |
-
|
1967 |
-
|
1968 |
-
|
1969 |
-
|
1970 |
-
|
1971 |
-
|
1972 |
-
border-style: solid;
|
1973 |
-
|
1974 |
-
|
1975 |
-
|
1976 |
-
|
1977 |
-
|
1978 |
-
|
1979 |
-
|
1980 |
-
|
1981 |
-
|
1982 |
-
|
1983 |
-
|
1984 |
-
}
|
1985 |
-
.fg-
|
1986 |
-
|
1987 |
-
|
1988 |
-
|
1989 |
-
-
|
1990 |
-
|
1991 |
-
|
1992 |
-
border:
|
1993 |
-
|
1994 |
-
|
1995 |
-
|
1996 |
-
|
1997 |
-
|
1998 |
-
|
1999 |
-
|
2000 |
-
|
2001 |
-
|
2002 |
-
|
2003 |
-
|
2004 |
-
|
2005 |
-
|
2006 |
-
|
2007 |
-
|
2008 |
-
|
2009 |
-
|
2010 |
-
|
2011 |
-
|
2012 |
-
|
2013 |
-
|
2014 |
-
|
2015 |
-
|
2016 |
-
|
2017 |
-
|
2018 |
-
|
2019 |
-
|
2020 |
-
|
2021 |
-
|
2022 |
-
|
2023 |
-
|
2024 |
-
|
2025 |
-
|
2026 |
-
|
2027 |
-
|
2028 |
-
|
2029 |
-
|
2030 |
-
|
2031 |
-
|
2032 |
-
|
2033 |
-
|
2034 |
-
.fg-image-viewer .fiv-inner .fiv-
|
2035 |
-
|
2036 |
-
|
2037 |
-
|
2038 |
-
|
2039 |
-
|
2040 |
-
|
2041 |
-
|
2042 |
-
|
2043 |
-
|
2044 |
-
|
2045 |
-
|
2046 |
-
|
2047 |
-
|
2048 |
-
|
2049 |
-
|
2050 |
-
|
2051 |
-
|
2052 |
-
|
2053 |
-
|
2054 |
-
|
2055 |
-
|
2056 |
-
|
2057 |
-
|
2058 |
-
|
2059 |
-
|
2060 |
-
|
2061 |
-
|
2062 |
-
|
2063 |
-
|
2064 |
-
|
2065 |
-
|
2066 |
-
|
2067 |
-
|
2068 |
-
|
2069 |
-
|
2070 |
-
|
2071 |
-
|
2072 |
-
|
2073 |
-
|
2074 |
-
|
2075 |
-
|
2076 |
-
|
2077 |
-
|
2078 |
-
|
2079 |
-
|
2080 |
-
|
2081 |
-
|
2082 |
-
|
2083 |
-
|
2084 |
-
|
2085 |
-
|
2086 |
-
|
2087 |
-
|
2088 |
-
|
2089 |
-
|
2090 |
-
|
2091 |
-
|
2092 |
-
|
2093 |
-
|
2094 |
-
|
2095 |
-
|
2096 |
-
|
2097 |
-
|
2098 |
-
|
2099 |
-
|
2100 |
-
|
2101 |
-
|
2102 |
-
|
2103 |
-
|
2104 |
-
|
2105 |
-
|
2106 |
-
|
2107 |
-
.fg-image-viewer
|
2108 |
-
|
2109 |
-
|
2110 |
-
|
2111 |
-
.fg-image-viewer.
|
2112 |
-
|
2113 |
-
|
2114 |
-
|
2115 |
-
|
2116 |
-
|
2117 |
-
.fg-image-viewer.
|
2118 |
-
.fg-image-viewer.
|
2119 |
-
|
2120 |
-
|
2121 |
-
.fg-image-viewer
|
2122 |
-
|
2123 |
-
|
2124 |
-
|
2125 |
-
|
2126 |
-
|
2127 |
-
.fg-image-viewer
|
2128 |
-
|
2129 |
-
}
|
2130 |
-
.fg-image-viewer.
|
2131 |
-
|
2132 |
-
|
2133 |
-
|
2134 |
-
|
2135 |
-
|
2136 |
-
|
2137 |
-
|
2138 |
-
|
2139 |
-
|
2140 |
-
|
2141 |
-
|
2142 |
-
|
2143 |
-
|
2144 |
-
|
2145 |
-
|
2146 |
-
|
2147 |
-
|
2148 |
-
|
2149 |
-
|
2150 |
-
|
2151 |
-
|
2152 |
-
|
2153 |
-
|
2154 |
-
|
2155 |
-
|
2156 |
-
|
2157 |
-
|
2158 |
-
|
2159 |
-
|
2160 |
-
/*
|
2161 |
-
|
2162 |
-
|
2163 |
-
|
2164 |
-
|
2165 |
-
|
2166 |
-
|
2167 |
-
|
2168 |
-
|
2169 |
-
|
2170 |
-
|
2171 |
-
|
2172 |
-
|
2173 |
-
|
2174 |
-
|
2175 |
-
|
2176 |
-
|
2177 |
-
|
2178 |
-
|
2179 |
-
|
2180 |
-
|
2181 |
-
|
2182 |
-
|
2183 |
-
.foogallery.fg-image-viewer.fg-
|
2184 |
-
|
2185 |
-
|
2186 |
-
.foogallery.fg-image-viewer.fg-
|
2187 |
-
|
2188 |
-
|
2189 |
-
|
2190 |
-
|
2191 |
-
|
2192 |
-
|
2193 |
-
|
2194 |
-
|
2195 |
-
|
2196 |
-
.
|
2197 |
-
.
|
2198 |
-
|
2199 |
-
|
2200 |
-
|
2201 |
-
|
2202 |
-
|
2203 |
-
|
2204 |
-
|
2205 |
-
|
2206 |
-
|
2207 |
-
.
|
2208 |
-
.
|
2209 |
-
|
2210 |
-
}
|
2211 |
-
|
2212 |
-
|
2213 |
-
.
|
2214 |
-
.
|
2215 |
-
.
|
2216 |
-
.
|
2217 |
-
.
|
2218 |
-
|
2219 |
-
|
2220 |
-
|
2221 |
-
|
2222 |
-
.
|
2223 |
-
.
|
2224 |
-
|
2225 |
-
|
2226 |
-
|
2227 |
-
.
|
2228 |
-
|
2229 |
-
|
2230 |
-
|
2231 |
-
|
2232 |
-
.foogallery.fg-image-viewer.fg-
|
2233 |
-
.foogallery.fg-image-viewer.fg-
|
2234 |
-
|
2235 |
-
|
2236 |
-
|
2237 |
-
.foogallery.fg-image-viewer
|
2238 |
-
.foogallery.fg-image-viewer.fg-border-thin.
|
2239 |
-
|
2240 |
-
|
2241 |
-
|
2242 |
-
|
2243 |
-
|
2244 |
-
|
2245 |
-
.foogallery.fg-image-viewer.fg-border-
|
2246 |
-
.foogallery.fg-image-viewer.fg-border-
|
2247 |
-
border-
|
2248 |
-
}
|
2249 |
-
|
2250 |
-
.foogallery.fg-image-viewer.fg-border-
|
2251 |
-
.foogallery.fg-image-viewer.fg-border-
|
2252 |
-
.foogallery.fg-image-viewer.fg-border-thick
|
2253 |
-
|
2254 |
-
|
2255 |
-
|
2256 |
-
|
2257 |
-
.foogallery.fg-image-viewer.fg-round-
|
2258 |
-
.foogallery.fg-image-viewer.fg-round-
|
2259 |
-
.foogallery.fg-image-viewer.fg-round-
|
2260 |
-
border-radius:
|
2261 |
-
}
|
2262 |
-
|
2263 |
-
|
2264 |
-
|
2265 |
-
|
2266 |
-
|
2267 |
-
.foogallery.fg-image-viewer.fg-
|
2268 |
-
.foogallery.fg-image-viewer.fg-
|
2269 |
-
|
2270 |
-
|
2271 |
-
|
2272 |
-
|
2273 |
-
|
2274 |
-
|
2275 |
-
.foogallery.fg-image-viewer.fg-
|
2276 |
-
|
2277 |
-
|
2278 |
-
.foogallery.fg-image-viewer.fg-
|
2279 |
-
|
2280 |
-
|
2281 |
-
.foogallery.fg-image-viewer.fg-
|
2282 |
-
.foogallery.fg-image-viewer.fg-
|
2283 |
-
|
2284 |
-
|
2285 |
-
|
2286 |
-
|
2287 |
-
|
2288 |
-
|
2289 |
-
.foogallery.fg-image-viewer.fg-
|
2290 |
-
|
2291 |
-
|
2292 |
-
|
2293 |
-
.foogallery.fg-
|
2294 |
-
|
2295 |
-
|
2296 |
-
}
|
2297 |
-
.foogallery.fg-
|
2298 |
-
|
2299 |
-
|
2300 |
-
|
2301 |
-
|
2302 |
-
|
2303 |
-
|
2304 |
-
.foogallery.fg-
|
2305 |
-
|
2306 |
-
|
2307 |
-
|
2308 |
-
|
2309 |
-
.foogallery.fg-
|
2310 |
-
|
2311 |
-
|
2312 |
-
.foogallery.fg-
|
2313 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2314 |
}
|
1 |
+
.foogallery, .foogallery * {
|
2 |
+
box-sizing: border-box;
|
3 |
+
}
|
4 |
+
.foogallery {
|
5 |
+
display: block;
|
6 |
+
z-index: 1;
|
7 |
+
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
8 |
+
position: relative;
|
9 |
+
line-height: 0;
|
10 |
+
font-size: 0;
|
11 |
+
width: 100%;
|
12 |
+
max-width: 100%;
|
13 |
+
}
|
14 |
+
.foogallery .fg-item {
|
15 |
+
display: inline-block;
|
16 |
+
position: relative;
|
17 |
+
background-color: transparent;
|
18 |
+
z-index: 2;
|
19 |
+
-webkit-user-select: none;
|
20 |
+
-moz-user-select: none;
|
21 |
+
-ms-user-select: none;
|
22 |
+
user-select: none;
|
23 |
+
}
|
24 |
+
.foogallery .fg-item-inner {
|
25 |
+
display: block;
|
26 |
+
position: relative;
|
27 |
+
visibility: hidden;
|
28 |
+
overflow: hidden;
|
29 |
+
opacity: 0;
|
30 |
+
z-index: 3;
|
31 |
+
margin: 0;
|
32 |
+
border: solid 0 transparent;
|
33 |
+
}
|
34 |
+
|
35 |
+
.foogallery .fg-item.fg-loading,
|
36 |
+
.foogallery .fg-item.fg-error {
|
37 |
+
background: no-repeat center;
|
38 |
+
}
|
39 |
+
|
40 |
+
.foogallery .fg-item.fg-error {
|
41 |
+
background-image: url('../img/image.png');
|
42 |
+
}
|
43 |
+
|
44 |
+
/* @2x Images (Pixel Ratio of 1.25+) */
|
45 |
+
@media only screen and (-o-min-device-pixel-ratio: 5/4),
|
46 |
+
only screen and (-webkit-min-device-pixel-ratio: 1.25),
|
47 |
+
only screen and (min-device-pixel-ratio: 1.25),
|
48 |
+
only screen and (min-resolution: 1.25dppx) {
|
49 |
+
.foogallery .fg-item.fg-error {
|
50 |
+
background-image: url('../img/image@2x.png');
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
/* @3x Images (Pixel Ratio of 2.25+) */
|
55 |
+
@media only screen and (-o-min-device-pixel-ratio: 9/4),
|
56 |
+
only screen and (-webkit-min-device-pixel-ratio: 2.25),
|
57 |
+
only screen and (min-device-pixel-ratio: 2.25),
|
58 |
+
only screen and (min-resolution: 2.25dppx) {
|
59 |
+
.foogallery .fg-item.fg-error {
|
60 |
+
background-image: url('../img/image@3x.png');
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
.foogallery .fg-item.fg-loaded {
|
65 |
+
z-index: 4;
|
66 |
+
}
|
67 |
+
.foogallery .fg-loaded .fg-item-inner {
|
68 |
+
visibility: visible;
|
69 |
+
opacity: 1;
|
70 |
+
z-index: 5;
|
71 |
+
}
|
72 |
+
.foogallery .fg-error .fg-item-inner {
|
73 |
+
pointer-events: none;
|
74 |
+
cursor: default;
|
75 |
+
}
|
76 |
+
.foogallery .fg-thumb {
|
77 |
+
display: block;
|
78 |
+
position: relative;
|
79 |
+
border: none;
|
80 |
+
outline: 0;
|
81 |
+
text-decoration: none;
|
82 |
+
z-index: 4;
|
83 |
+
}
|
84 |
+
.foogallery .fg-image {
|
85 |
+
display: block;
|
86 |
+
position: relative;
|
87 |
+
border: none;
|
88 |
+
outline: 0;
|
89 |
+
text-decoration: none;
|
90 |
+
z-index: 5;
|
91 |
+
max-width: none;
|
92 |
+
height: auto;
|
93 |
+
margin: 0;
|
94 |
+
}
|
95 |
+
.foogallery .fg-loaded .fg-thumb {
|
96 |
+
z-index: 6;
|
97 |
+
}
|
98 |
+
.foogallery .fg-loaded .fg-image {
|
99 |
+
z-index: 7;
|
100 |
+
}
|
101 |
+
|
102 |
+
|
103 |
+
/* Item Style */
|
104 |
+
.foogallery.fg-light .fg-item-inner {
|
105 |
+
background-color: #FFF;
|
106 |
+
color: #333;
|
107 |
+
border-color: #FFF;
|
108 |
+
}
|
109 |
+
.foogallery.fg-dark .fg-item-inner {
|
110 |
+
background-color: #333;
|
111 |
+
color: #FFF;
|
112 |
+
border-color: #333;
|
113 |
+
}
|
114 |
+
/* Idle / Loading / Error Style */
|
115 |
+
.foogallery.fg-light .fg-item.fg-idle,
|
116 |
+
.foogallery.fg-light .fg-item.fg-loading,
|
117 |
+
.foogallery.fg-light .fg-item.fg-error {
|
118 |
+
background-color: #eee;
|
119 |
+
box-shadow: inset 0 0 0 1px #ddd;
|
120 |
+
}
|
121 |
+
.foogallery.fg-dark .fg-item.fg-idle,
|
122 |
+
.foogallery.fg-dark .fg-item.fg-loading,
|
123 |
+
.foogallery.fg-dark .fg-item.fg-error {
|
124 |
+
background-color: #444;
|
125 |
+
box-shadow: inset 0 0 0 1px #333;
|
126 |
+
}
|
127 |
+
/* Border Size */
|
128 |
+
.foogallery.fg-border-thin .fg-item-inner {
|
129 |
+
border-width: 4px;
|
130 |
+
}
|
131 |
+
.foogallery.fg-border-medium .fg-item-inner {
|
132 |
+
border-width: 10px;
|
133 |
+
}
|
134 |
+
.foogallery.fg-border-thick .fg-item-inner {
|
135 |
+
border-width: 16px;
|
136 |
+
}
|
137 |
+
/* Drop Shadows */
|
138 |
+
.foogallery.fg-light.fg-shadow-outline .fg-item-inner {
|
139 |
+
box-shadow: 0 0 0 1px #ddd;
|
140 |
+
}
|
141 |
+
.foogallery.fg-dark.fg-shadow-outline .fg-item-inner {
|
142 |
+
box-shadow: 0 0 0 1px #222;
|
143 |
+
}
|
144 |
+
.foogallery.fg-light.fg-shadow-small .fg-item-inner,
|
145 |
+
.foogallery.fg-dark.fg-shadow-small .fg-item-inner {
|
146 |
+
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.5);
|
147 |
+
}
|
148 |
+
.foogallery.fg-light.fg-shadow-medium .fg-item-inner,
|
149 |
+
.foogallery.fg-dark.fg-shadow-medium .fg-item-inner {
|
150 |
+
box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.5);
|
151 |
+
}
|
152 |
+
.foogallery.fg-light.fg-shadow-large .fg-item-inner,
|
153 |
+
.foogallery.fg-dark.fg-shadow-large .fg-item-inner {
|
154 |
+
box-shadow: 0 1px 16px 0 rgba(0, 0, 0, 0.5);
|
155 |
+
}
|
156 |
+
/* Inset Shadows */
|
157 |
+
.foogallery.fg-shadow-inset-small .fg-thumb:after,
|
158 |
+
.foogallery.fg-shadow-inset-medium .fg-thumb:after,
|
159 |
+
.foogallery.fg-shadow-inset-large .fg-thumb:after {
|
160 |
+
display: block;
|
161 |
+
content: "";
|
162 |
+
position: absolute;
|
163 |
+
top: 0;
|
164 |
+
left: 0;
|
165 |
+
right: 0;
|
166 |
+
bottom: 0;
|
167 |
+
z-index: 7;
|
168 |
+
}
|
169 |
+
.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after,
|
170 |
+
.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after {
|
171 |
+
box-shadow: inset 0 1px 4px 0 rgba(0,0,0,0.3);
|
172 |
+
}
|
173 |
+
.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after,
|
174 |
+
.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after {
|
175 |
+
box-shadow: inset 0 1px 10px 0 rgba(0,0,0,0.3);
|
176 |
+
}
|
177 |
+
.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after,
|
178 |
+
.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after {
|
179 |
+
box-shadow: inset 0 1px 16px 0 rgba(0,0,0,0.3);
|
180 |
+
}
|
181 |
+
|
182 |
+
.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after,
|
183 |
+
.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,
|
184 |
+
.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after {
|
185 |
+
border-radius: 50%;
|
186 |
+
}
|
187 |
+
/* Rounded Corners */
|
188 |
+
.foogallery.fg-round-small .fg-item,
|
189 |
+
.foogallery.fg-round-small .fg-item-inner {
|
190 |
+
border-radius: 5px;
|
191 |
+
}
|
192 |
+
.foogallery.fg-round-medium .fg-item,
|
193 |
+
.foogallery.fg-round-medium .fg-item-inner {
|
194 |
+
border-radius: 10px;
|
195 |
+
}
|
196 |
+
.foogallery.fg-round-large .fg-item,
|
197 |
+
.foogallery.fg-round-large .fg-item-inner {
|
198 |
+
border-radius: 15px;
|
199 |
+
}
|
200 |
+
.foogallery.fg-round-full .fg-item,
|
201 |
+
.foogallery.fg-round-full .fg-item-inner {
|
202 |
+
border-radius: 50%;
|
203 |
+
}
|
204 |
+
/* Loader Styles */
|
205 |
+
.foogallery .fg-loader {
|
206 |
+
position: absolute;
|
207 |
+
top: 50%;
|
208 |
+
left: 50%;
|
209 |
+
transform: translateX(-50%) translateY(-50%);
|
210 |
+
width: 1em;
|
211 |
+
height: 1em;
|
212 |
+
font-size: 5px;
|
213 |
+
visibility: hidden;
|
214 |
+
opacity: 0;
|
215 |
+
}
|
216 |
+
|
217 |
+
.foogallery .fg-loading .fg-loader {
|
218 |
+
visibility: visible;
|
219 |
+
opacity: 1;
|
220 |
+
}
|
221 |
+
.fg-loading-default .fg-loader {
|
222 |
+
border-radius: 50%;
|
223 |
+
text-indent: -9999em;
|
224 |
+
-webkit-animation: loading-default 1.1s infinite ease;
|
225 |
+
animation: loading-default 1.1s infinite ease;
|
226 |
+
}
|
227 |
+
|
228 |
+
@-webkit-keyframes loading-default {
|
229 |
+
0%,
|
230 |
+
100% {
|
231 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 1),
|
232 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
233 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
234 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
235 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
236 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
237 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.5),
|
238 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7);
|
239 |
+
}
|
240 |
+
12.5% {
|
241 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.7),
|
242 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 1), 2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
243 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
244 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
245 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
246 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
247 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5);
|
248 |
+
}
|
249 |
+
25% {
|
250 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.5),
|
251 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7),
|
252 |
+
2.5em 0 0 0 rgba(130, 130, 130, 1), 1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
253 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
254 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
255 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
256 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
257 |
+
}
|
258 |
+
37.5% {
|
259 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
260 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5),
|
261 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.7),
|
262 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 1), 0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
263 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
264 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
265 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
266 |
+
}
|
267 |
+
50% {
|
268 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
269 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
270 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.5),
|
271 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.7),
|
272 |
+
0 2.5em 0 0 rgba(130, 130, 130, 1), -1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
273 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
274 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
275 |
+
}
|
276 |
+
62.5% {
|
277 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
278 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
279 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
280 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.5),
|
281 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.7),
|
282 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 1), -2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
283 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
284 |
+
}
|
285 |
+
75% {
|
286 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
287 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
288 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
289 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
290 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.5),
|
291 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.7),
|
292 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 1), -1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
293 |
+
}
|
294 |
+
87.5% {
|
295 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
296 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
297 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
298 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
299 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
300 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.5),
|
301 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.7),
|
302 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 1);
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
@keyframes loading-default {
|
307 |
+
0%,
|
308 |
+
100% {
|
309 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 1),
|
310 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
311 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
312 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
313 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
314 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
315 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.5),
|
316 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7);
|
317 |
+
}
|
318 |
+
12.5% {
|
319 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.7),
|
320 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 1), 2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
321 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
322 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
323 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
324 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
325 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5);
|
326 |
+
}
|
327 |
+
25% {
|
328 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.5),
|
329 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.7),
|
330 |
+
2.5em 0 0 0 rgba(130, 130, 130, 1), 1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
331 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
332 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
333 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
334 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
335 |
+
}
|
336 |
+
37.5% {
|
337 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
338 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.5),
|
339 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.7),
|
340 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 1), 0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
341 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
342 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
343 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
344 |
+
}
|
345 |
+
50% {
|
346 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
347 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
348 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.5),
|
349 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.7),
|
350 |
+
0 2.5em 0 0 rgba(130, 130, 130, 1), -1.8em 1.8em 0 0 rgba(130, 130, 130, 0.2),
|
351 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
352 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
353 |
+
}
|
354 |
+
62.5% {
|
355 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
356 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
357 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
358 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.5),
|
359 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.7),
|
360 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 1), -2.6em 0 0 0 rgba(130, 130, 130, 0.2),
|
361 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
362 |
+
}
|
363 |
+
75% {
|
364 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
365 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
366 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
367 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
368 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.5),
|
369 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.7),
|
370 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 1), -1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2);
|
371 |
+
}
|
372 |
+
87.5% {
|
373 |
+
box-shadow: 0 -2.6em 0 0 rgba(130, 130, 130, 0.2),
|
374 |
+
1.8em -1.8em 0 0 rgba(130, 130, 130, 0.2),
|
375 |
+
2.5em 0 0 0 rgba(130, 130, 130, 0.2),
|
376 |
+
1.75em 1.75em 0 0 rgba(130, 130, 130, 0.2),
|
377 |
+
0 2.5em 0 0 rgba(130, 130, 130, 0.2),
|
378 |
+
-1.8em 1.8em 0 0 rgba(130, 130, 130, 0.5),
|
379 |
+
-2.6em 0 0 0 rgba(130, 130, 130, 0.7),
|
380 |
+
-1.8em -1.8em 0 0 rgba(130, 130, 130, 1);
|
381 |
+
}
|
382 |
+
}
|
383 |
+
.fg-loading-bars .fg-loader,
|
384 |
+
.fg-loading-bars .fg-loader:before,
|
385 |
+
.fg-loading-bars .fg-loader:after {
|
386 |
+
background: rgba(130, 130, 130, 1);
|
387 |
+
-webkit-animation: loading-bars 1s infinite ease-in-out;
|
388 |
+
animation: loading-bars 1s infinite ease-in-out;
|
389 |
+
width: 1em;
|
390 |
+
height: 4em;
|
391 |
+
}
|
392 |
+
.fg-loading-bars .fg-loader {
|
393 |
+
color: rgba(130, 130, 130, 1);
|
394 |
+
text-indent: -9999em;
|
395 |
+
font-size: 4px;
|
396 |
+
-webkit-animation-delay: -0.16s;
|
397 |
+
animation-delay: -0.16s;
|
398 |
+
}
|
399 |
+
.fg-loading-bars .fg-loader:before,
|
400 |
+
.fg-loading-bars .fg-loader:after {
|
401 |
+
position: absolute;
|
402 |
+
top: 0;
|
403 |
+
content: '';
|
404 |
+
}
|
405 |
+
.fg-loading-bars .fg-loader:before {
|
406 |
+
left: -1.5em;
|
407 |
+
-webkit-animation-delay: -0.32s;
|
408 |
+
animation-delay: -0.32s;
|
409 |
+
}
|
410 |
+
.fg-loading-bars .fg-loader:after {
|
411 |
+
left: 1.5em;
|
412 |
+
}
|
413 |
+
@-webkit-keyframes loading-bars {
|
414 |
+
0%,
|
415 |
+
80%,
|
416 |
+
100% {
|
417 |
+
box-shadow: 0 0;
|
418 |
+
height: 4em;
|
419 |
+
}
|
420 |
+
40% {
|
421 |
+
box-shadow: 0 -2em;
|
422 |
+
height: 5em;
|
423 |
+
}
|
424 |
+
}
|
425 |
+
@keyframes loading-bars {
|
426 |
+
0%,
|
427 |
+
80%,
|
428 |
+
100% {
|
429 |
+
box-shadow: 0 0;
|
430 |
+
height: 4em;
|
431 |
+
}
|
432 |
+
40% {
|
433 |
+
box-shadow: 0 -2em;
|
434 |
+
height: 5em;
|
435 |
+
}
|
436 |
+
}
|
437 |
+
.fg-loading-trail .fg-loader {
|
438 |
+
color: #828282;
|
439 |
+
font-size: 20px;
|
440 |
+
text-indent: -9999em;
|
441 |
+
overflow: hidden;
|
442 |
+
border-radius: 50%;
|
443 |
+
-webkit-animation: loading-trail-1 1.7s infinite ease, loading-trail-2 1.7s infinite ease;
|
444 |
+
animation: loading-trail-1 1.7s infinite ease, loading-trail-2 1.7s infinite ease;
|
445 |
+
}
|
446 |
+
@-webkit-keyframes loading-trail-1 {
|
447 |
+
0% {
|
448 |
+
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
449 |
+
}
|
450 |
+
5%,
|
451 |
+
95% {
|
452 |
+
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
453 |
+
}
|
454 |
+
10%,
|
455 |
+
59% {
|
456 |
+
box-shadow: 0 -0.83em 0 -0.4em, -0.087em -0.825em 0 -0.42em, -0.173em -0.812em 0 -0.44em, -0.256em -0.789em 0 -0.46em, -0.297em -0.775em 0 -0.477em;
|
457 |
+
}
|
458 |
+
20% {
|
459 |
+
box-shadow: 0 -0.83em 0 -0.4em, -0.338em -0.758em 0 -0.42em, -0.555em -0.617em 0 -0.44em, -0.671em -0.488em 0 -0.46em, -0.749em -0.34em 0 -0.477em;
|
460 |
+
}
|
461 |
+
38% {
|
462 |
+
box-shadow: 0 -0.83em 0 -0.4em, -0.377em -0.74em 0 -0.42em, -0.645em -0.522em 0 -0.44em, -0.775em -0.297em 0 -0.46em, -0.82em -0.09em 0 -0.477em;
|
463 |
+
}
|
464 |
+
100% {
|
465 |
+
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
466 |
+
}
|
467 |
+
}
|
468 |
+
@keyframes loading-trail-1 {
|
469 |
+
0% {
|
470 |
+
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
471 |
+
}
|
472 |
+
5%,
|
473 |
+
95% {
|
474 |
+
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
475 |
+
}
|
476 |
+
10%,
|
477 |
+
59% {
|
478 |
+
box-shadow: 0 -0.83em 0 -0.4em, -0.087em -0.825em 0 -0.42em, -0.173em -0.812em 0 -0.44em, -0.256em -0.789em 0 -0.46em, -0.297em -0.775em 0 -0.477em;
|
479 |
+
}
|
480 |
+
20% {
|
481 |
+
box-shadow: 0 -0.83em 0 -0.4em, -0.338em -0.758em 0 -0.42em, -0.555em -0.617em 0 -0.44em, -0.671em -0.488em 0 -0.46em, -0.749em -0.34em 0 -0.477em;
|
482 |
+
}
|
483 |
+
38% {
|
484 |
+
box-shadow: 0 -0.83em 0 -0.4em, -0.377em -0.74em 0 -0.42em, -0.645em -0.522em 0 -0.44em, -0.775em -0.297em 0 -0.46em, -0.82em -0.09em 0 -0.477em;
|
485 |
+
}
|
486 |
+
100% {
|
487 |
+
box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em;
|
488 |
+
}
|
489 |
+
}
|
490 |
+
@-webkit-keyframes loading-trail-2 {
|
491 |
+
0% {
|
492 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
493 |
+
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
494 |
+
}
|
495 |
+
100% {
|
496 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
497 |
+
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
498 |
+
}
|
499 |
+
}
|
500 |
+
@keyframes loading-trail-2 {
|
501 |
+
0% {
|
502 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
503 |
+
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
504 |
+
}
|
505 |
+
100% {
|
506 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
507 |
+
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
508 |
+
}
|
509 |
+
}
|
510 |
+
.fg-loading-pulse .fg-loader,
|
511 |
+
.fg-loading-pulse .fg-loader:before,
|
512 |
+
.fg-loading-pulse .fg-loader:after {
|
513 |
+
border-radius: 50%;
|
514 |
+
width: 2.5em;
|
515 |
+
height: 2.5em;
|
516 |
+
-webkit-animation-fill-mode: both;
|
517 |
+
animation-fill-mode: both;
|
518 |
+
-webkit-animation: loading-pulse 1.8s infinite ease-in-out;
|
519 |
+
animation: loading-pulse 1.8s infinite ease-in-out;
|
520 |
+
}
|
521 |
+
.fg-loading-pulse .fg-loader {
|
522 |
+
color: #828282;
|
523 |
+
font-size: 4px;
|
524 |
+
text-indent: -9999em;
|
525 |
+
transform: translateX(-50%) translateY(-150%);
|
526 |
+
-webkit-animation-delay: -0.16s;
|
527 |
+
animation-delay: -0.16s;
|
528 |
+
}
|
529 |
+
.fg-loading-pulse .fg-loader:before,
|
530 |
+
.fg-loading-pulse .fg-loader:after {
|
531 |
+
content: '';
|
532 |
+
position: absolute;
|
533 |
+
top: 0;
|
534 |
+
}
|
535 |
+
.fg-loading-pulse .fg-loader:before {
|
536 |
+
left: -3.5em;
|
537 |
+
-webkit-animation-delay: -0.32s;
|
538 |
+
animation-delay: -0.32s;
|
539 |
+
}
|
540 |
+
.fg-loading-pulse .fg-loader:after {
|
541 |
+
left: 3.5em;
|
542 |
+
}
|
543 |
+
@-webkit-keyframes loading-pulse {
|
544 |
+
0%,
|
545 |
+
80%,
|
546 |
+
100% {
|
547 |
+
box-shadow: 0 2.5em 0 -1.3em;
|
548 |
+
}
|
549 |
+
40% {
|
550 |
+
box-shadow: 0 2.5em 0 0;
|
551 |
+
}
|
552 |
+
}
|
553 |
+
@keyframes loading-pulse {
|
554 |
+
0%,
|
555 |
+
80%,
|
556 |
+
100% {
|
557 |
+
box-shadow: 0 2.5em 0 -1.3em;
|
558 |
+
}
|
559 |
+
40% {
|
560 |
+
box-shadow: 0 2.5em 0 0;
|
561 |
+
}
|
562 |
+
}
|
563 |
+
.fg-loading-dots .fg-loader {
|
564 |
+
color: #828282;
|
565 |
+
font-size: 5px;
|
566 |
+
border-radius: 50%;
|
567 |
+
text-indent: -9999em;
|
568 |
+
-webkit-animation: loading-dots 1.3s infinite linear;
|
569 |
+
animation: loading-dots 1.3s infinite linear;
|
570 |
+
}
|
571 |
+
@-webkit-keyframes loading-dots {
|
572 |
+
0%,
|
573 |
+
100% {
|
574 |
+
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
|
575 |
+
}
|
576 |
+
12.5% {
|
577 |
+
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
578 |
+
}
|
579 |
+
25% {
|
580 |
+
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
581 |
+
}
|
582 |
+
37.5% {
|
583 |
+
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
584 |
+
}
|
585 |
+
50% {
|
586 |
+
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
587 |
+
}
|
588 |
+
62.5% {
|
589 |
+
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
|
590 |
+
}
|
591 |
+
75% {
|
592 |
+
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
|
593 |
+
}
|
594 |
+
87.5% {
|
595 |
+
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
|
596 |
+
}
|
597 |
+
}
|
598 |
+
@keyframes loading-dots {
|
599 |
+
0%,
|
600 |
+
100% {
|
601 |
+
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
|
602 |
+
}
|
603 |
+
12.5% {
|
604 |
+
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
605 |
+
}
|
606 |
+
25% {
|
607 |
+
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
608 |
+
}
|
609 |
+
37.5% {
|
610 |
+
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
611 |
+
}
|
612 |
+
50% {
|
613 |
+
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
614 |
+
}
|
615 |
+
62.5% {
|
616 |
+
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
|
617 |
+
}
|
618 |
+
75% {
|
619 |
+
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
|
620 |
+
}
|
621 |
+
87.5% {
|
622 |
+
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
|
623 |
+
}
|
624 |
+
}
|
625 |
+
.fg-loading-partial .fg-loader,
|
626 |
+
.fg-loading-partial .fg-loader:after {
|
627 |
+
border-radius: 50%;
|
628 |
+
width: 10em;
|
629 |
+
height: 10em;
|
630 |
+
}
|
631 |
+
.fg-loading-partial .fg-loader {
|
632 |
+
font-size: 4px;
|
633 |
+
text-indent: -9999em;
|
634 |
+
border-top: 1.1em solid rgba(130,130,130, 0.2);
|
635 |
+
border-right: 1.1em solid rgba(130,130,130, 0.2);
|
636 |
+
border-bottom: 1.1em solid rgba(130,130,130, 0.2);
|
637 |
+
border-left: 1.1em solid #828282;
|
638 |
+
-webkit-animation: loading-partial 1.1s infinite linear;
|
639 |
+
animation: loading-partial 1.1s infinite linear;
|
640 |
+
}
|
641 |
+
@-webkit-keyframes loading-partial {
|
642 |
+
0% {
|
643 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
644 |
+
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
645 |
+
}
|
646 |
+
100% {
|
647 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
648 |
+
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
649 |
+
}
|
650 |
+
}
|
651 |
+
@keyframes loading-partial {
|
652 |
+
0% {
|
653 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
654 |
+
transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
655 |
+
}
|
656 |
+
100% {
|
657 |
+
-webkit-transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
658 |
+
transform: translateX(-50%) translateY(-50%) rotate(360deg);
|
659 |
+
}
|
660 |
+
}
|
661 |
+
/* Loaded Effects */
|
662 |
+
.foogallery.fg-loaded-fade-in .fg-item,
|
663 |
+
.foogallery.fg-loaded-slide-up .fg-item,
|
664 |
+
.foogallery.fg-loaded-slide-down .fg-item,
|
665 |
+
.foogallery.fg-loaded-slide-left .fg-item,
|
666 |
+
.foogallery.fg-loaded-slide-right .fg-item,
|
667 |
+
.foogallery.fg-loaded-scale-up .fg-item,
|
668 |
+
.foogallery.fg-loaded-swing-down .fg-item,
|
669 |
+
.foogallery.fg-loaded-drop .fg-item,
|
670 |
+
.foogallery.fg-loaded-fly .fg-item,
|
671 |
+
.foogallery.fg-loaded-flip .fg-item {
|
672 |
+
transition-timing-function: ease;
|
673 |
+
transition-duration: 650ms;
|
674 |
+
transition-property: background-color, transform;
|
675 |
+
}
|
676 |
+
.foogallery.fg-loaded-fade-in .fg-item-inner,
|
677 |
+
.foogallery.fg-loaded-slide-up .fg-item-inner,
|
678 |
+
.foogallery.fg-loaded-slide-down .fg-item-inner,
|
679 |
+
.foogallery.fg-loaded-slide-left .fg-item-inner,
|
680 |
+
.foogallery.fg-loaded-slide-right .fg-item-inner,
|
681 |
+
.foogallery.fg-loaded-scale-up .fg-item-inner,
|
682 |
+
.foogallery.fg-loaded-swing-down .fg-item-inner,
|
683 |
+
.foogallery.fg-loaded-drop .fg-item-inner,
|
684 |
+
.foogallery.fg-loaded-fly .fg-item-inner,
|
685 |
+
.foogallery.fg-loaded-flip .fg-item-inner {
|
686 |
+
transition-timing-function: ease;
|
687 |
+
transition-duration: 650ms;
|
688 |
+
}
|
689 |
+
/* Only apply the perspective once loaded otherwise transitions could take place behind other items*/
|
690 |
+
.foogallery.fg-loaded-swing-down .fg-item.fg-loaded,
|
691 |
+
.foogallery.fg-loaded-drop .fg-item.fg-loaded,
|
692 |
+
.foogallery.fg-loaded-fly .fg-item.fg-loaded,
|
693 |
+
.foogallery.fg-loaded-flip .fg-item.fg-loaded {
|
694 |
+
perspective: 1300px;
|
695 |
+
}
|
696 |
+
/* Fade In */
|
697 |
+
.foogallery.fg-loaded-fade-in .fg-item-inner {
|
698 |
+
transition-property: visibility, opacity;
|
699 |
+
}
|
700 |
+
/* Caption Styles */
|
701 |
+
.foogallery .fg-caption {
|
702 |
+
visibility: hidden;
|
703 |
+
opacity: 0;
|
704 |
+
background-color: rgba(0,0,0,0.6);
|
705 |
+
color: #fff;
|
706 |
+
position: absolute;
|
707 |
+
z-index: 8;
|
708 |
+
width: 100%;
|
709 |
+
max-height: 100%;
|
710 |
+
overflow: hidden;
|
711 |
+
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
712 |
+
font-size: 13px;
|
713 |
+
font-weight: 400;
|
714 |
+
line-height: 1.3;
|
715 |
+
border: none;
|
716 |
+
text-align: center;
|
717 |
+
cursor: pointer;
|
718 |
+
}
|
719 |
+
.foogallery .fg-caption a {
|
720 |
+
text-decoration: none;
|
721 |
+
color: #fff;
|
722 |
+
border-bottom: 1px solid #FFF;
|
723 |
+
}
|
724 |
+
.foogallery .fg-caption a:hover {
|
725 |
+
border-bottom: none;
|
726 |
+
}
|
727 |
+
|
728 |
+
.foogallery .fg-caption-title {
|
729 |
+
white-space: nowrap;
|
730 |
+
overflow: hidden;
|
731 |
+
text-overflow: ellipsis;
|
732 |
+
font-size: 16px;
|
733 |
+
font-weight: 400;
|
734 |
+
padding: 5px;
|
735 |
+
}
|
736 |
+
.foogallery .fg-caption-desc {
|
737 |
+
padding: 5px;
|
738 |
+
}
|
739 |
+
.foogallery .fg-caption-title+.fg-caption-desc {
|
740 |
+
padding-top: 0;
|
741 |
+
}
|
742 |
+
|
743 |
+
/* Always */
|
744 |
+
.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before {
|
745 |
+
display: none;
|
746 |
+
}
|
747 |
+
.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption {
|
748 |
+
left: 0;
|
749 |
+
bottom: 0;
|
750 |
+
transition-timing-function: ease;
|
751 |
+
transition-duration: 300ms;
|
752 |
+
transition-property: visibility, opacity;
|
753 |
+
visibility: visible;
|
754 |
+
opacity: 1;
|
755 |
+
text-align: left;
|
756 |
+
}
|
757 |
+
|
758 |
+
/* On Hover */
|
759 |
+
.foogallery.fg-caption-hover .fg-caption .fg-caption-inner {
|
760 |
+
width: 100%;
|
761 |
+
max-height: 100%;
|
762 |
+
position: absolute;
|
763 |
+
top: 50%;
|
764 |
+
left: 0;
|
765 |
+
transform: translateY(-50%);
|
766 |
+
}
|
767 |
+
.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-thumb:before {
|
768 |
+
display: none;
|
769 |
+
}
|
770 |
+
/* Icon & Overlay */
|
771 |
+
.foogallery.fg-hover-zoom .fg-thumb:before,
|
772 |
+
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
773 |
+
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
774 |
+
.foogallery.fg-hover-plus .fg-thumb:before,
|
775 |
+
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
776 |
+
.foogallery.fg-hover-eye .fg-thumb:before,
|
777 |
+
.foogallery.fg-hover-external .fg-thumb:before,
|
778 |
+
.foogallery.fg-hover-tint .fg-thumb:before {
|
779 |
+
content: "";
|
780 |
+
display: block;
|
781 |
+
position: absolute;
|
782 |
+
visibility: hidden;
|
783 |
+
opacity: 0;
|
784 |
+
top: 0;
|
785 |
+
bottom: 0;
|
786 |
+
left: 0;
|
787 |
+
right: 0;
|
788 |
+
z-index: 8;
|
789 |
+
background: rgba(0,0,0,0.5) no-repeat center center;
|
790 |
+
background-size: 32px 32px;
|
791 |
+
}
|
792 |
+
|
793 |
+
.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-thumb:before,
|
794 |
+
.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-thumb:before,
|
795 |
+
.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-thumb:before,
|
796 |
+
.foogallery.fg-hover-plus .fg-item-inner:hover .fg-thumb:before,
|
797 |
+
.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-thumb:before,
|
798 |
+
.foogallery.fg-hover-eye .fg-item-inner:hover .fg-thumb:before,
|
799 |
+
.foogallery.fg-hover-external .fg-item-inner:hover .fg-thumb:before,
|
800 |
+
.foogallery.fg-hover-tint .fg-item-inner:hover .fg-thumb:before,
|
801 |
+
.foogallery.fg-hover-zoom .fg-thumb:focus:before,
|
802 |
+
.foogallery.fg-hover-zoom2 .fg-thumb:focus:before,
|
803 |
+
.foogallery.fg-hover-zoom3 .fg-thumb:focus:before,
|
804 |
+
.foogallery.fg-hover-plus .fg-thumb:focus:before,
|
805 |
+
.foogallery.fg-hover-circle-plus .fg-thumb:focus:before,
|
806 |
+
.foogallery.fg-hover-eye .fg-thumb:focus:before,
|
807 |
+
.foogallery.fg-hover-external .fg-thumb:focus:before,
|
808 |
+
.foogallery.fg-hover-tint .fg-thumb:focus:before {
|
809 |
+
visibility: visible;
|
810 |
+
opacity: 1;
|
811 |
+
}
|
812 |
+
|
813 |
+
/* Support captions showing the icon */
|
814 |
+
.foogallery.fg-hover-zoom .fg-caption-inner:before,
|
815 |
+
.foogallery.fg-hover-zoom2 .fg-caption-inner:before,
|
816 |
+
.foogallery.fg-hover-zoom3 .fg-caption-inner:before,
|
817 |
+
.foogallery.fg-hover-plus .fg-caption-inner:before,
|
818 |
+
.foogallery.fg-hover-circle-plus .fg-caption-inner:before,
|
819 |
+
.foogallery.fg-hover-eye .fg-caption-inner:before,
|
820 |
+
.foogallery.fg-hover-external .fg-caption-inner:before,
|
821 |
+
.foogallery.fg-hover-tint .fg-caption-inner:before {
|
822 |
+
content: "";
|
823 |
+
display: inline-block;
|
824 |
+
position: relative;
|
825 |
+
width: 32px;
|
826 |
+
height: 32px;
|
827 |
+
margin: 10px 0 5px 0;
|
828 |
+
background: transparent no-repeat center center;
|
829 |
+
background-size: 32px 32px;
|
830 |
+
vertical-align: middle;
|
831 |
+
}
|
832 |
+
|
833 |
+
|
834 |
+
.foogallery.fg-hover-zoom .fg-thumb:before,
|
835 |
+
.foogallery.fg-hover-zoom .fg-caption-inner:before {
|
836 |
+
background-image: url('../img/zoom.png');
|
837 |
+
}
|
838 |
+
|
839 |
+
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
840 |
+
.foogallery.fg-hover-zoom2 .fg-caption-inner:before {
|
841 |
+
background-image: url('../img/zoom2.png');
|
842 |
+
}
|
843 |
+
|
844 |
+
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
845 |
+
.foogallery.fg-hover-zoom3 .fg-caption-inner:before {
|
846 |
+
background-image: url('../img/zoom3.png');
|
847 |
+
}
|
848 |
+
|
849 |
+
.foogallery.fg-hover-plus .fg-thumb:before,
|
850 |
+
.foogallery.fg-hover-plus .fg-caption-inner:before {
|
851 |
+
background-image: url('../img/plus.png');
|
852 |
+
}
|
853 |
+
|
854 |
+
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
855 |
+
.foogallery.fg-hover-circle-plus .fg-caption-inner:before {
|
856 |
+
background-image: url('../img/circle-plus.png');
|
857 |
+
}
|
858 |
+
|
859 |
+
.foogallery.fg-hover-eye .fg-thumb:before,
|
860 |
+
.foogallery.fg-hover-eye .fg-caption-inner:before {
|
861 |
+
background-image: url('../img/eye.png');
|
862 |
+
}
|
863 |
+
|
864 |
+
.foogallery.fg-hover-external .fg-thumb:before,
|
865 |
+
.foogallery.fg-hover-external .fg-caption-inner:before {
|
866 |
+
background-image: url('../img/external.png');
|
867 |
+
}
|
868 |
+
|
869 |
+
/* @2x Images (Pixel Ratio of 1.25+) */
|
870 |
+
@media only screen and (-o-min-device-pixel-ratio: 5/4),
|
871 |
+
only screen and (-webkit-min-device-pixel-ratio: 1.25),
|
872 |
+
only screen and (min-device-pixel-ratio: 1.25),
|
873 |
+
only screen and (min-resolution: 1.25dppx) {
|
874 |
+
|
875 |
+
.foogallery.fg-hover-zoom .fg-thumb:before,
|
876 |
+
.foogallery.fg-hover-zoom .fg-caption-inner:before {
|
877 |
+
background-image: url('../img/zoom@2x.png');
|
878 |
+
}
|
879 |
+
|
880 |
+
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
881 |
+
.foogallery.fg-hover-zoom2 .fg-caption-inner:before {
|
882 |
+
background-image: url('../img/zoom2@2x.png');
|
883 |
+
}
|
884 |
+
|
885 |
+
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
886 |
+
.foogallery.fg-hover-zoom3 .fg-caption-inner:before {
|
887 |
+
background-image: url('../img/zoom3@2x.png');
|
888 |
+
}
|
889 |
+
|
890 |
+
.foogallery.fg-hover-plus .fg-thumb:before,
|
891 |
+
.foogallery.fg-hover-plus .fg-caption-inner:before {
|
892 |
+
background-image: url('../img/plus@2x.png');
|
893 |
+
}
|
894 |
+
|
895 |
+
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
896 |
+
.foogallery.fg-hover-circle-plus .fg-caption-inner:before {
|
897 |
+
background-image: url('../img/circle-plus@2x.png');
|
898 |
+
}
|
899 |
+
|
900 |
+
.foogallery.fg-hover-eye .fg-thumb:before,
|
901 |
+
.foogallery.fg-hover-eye .fg-caption-inner:before {
|
902 |
+
background-image: url('../img/eye@2x.png');
|
903 |
+
}
|
904 |
+
|
905 |
+
.foogallery.fg-hover-external .fg-thumb:before,
|
906 |
+
.foogallery.fg-hover-external .fg-caption-inner:before {
|
907 |
+
background-image: url('../img/external@2x.png');
|
908 |
+
}
|
909 |
+
|
910 |
+
}
|
911 |
+
|
912 |
+
/* @3x Images (Pixel Ratio of 2.25+) */
|
913 |
+
@media only screen and (-o-min-device-pixel-ratio: 9/4),
|
914 |
+
only screen and (-webkit-min-device-pixel-ratio: 2.25),
|
915 |
+
only screen and (min-device-pixel-ratio: 2.25),
|
916 |
+
only screen and (min-resolution: 2.25dppx) {
|
917 |
+
|
918 |
+
.foogallery.fg-hover-zoom .fg-thumb:before,
|
919 |
+
.foogallery.fg-hover-zoom .fg-caption-inner:before {
|
920 |
+
background-image: url('../img/zoom@3x.png');
|
921 |
+
}
|
922 |
+
|
923 |
+
.foogallery.fg-hover-zoom2 .fg-thumb:before,
|
924 |
+
.foogallery.fg-hover-zoom2 .fg-caption-inner:before {
|
925 |
+
background-image: url('../img/zoom2@3x.png');
|
926 |
+
}
|
927 |
+
|
928 |
+
.foogallery.fg-hover-zoom3 .fg-thumb:before,
|
929 |
+
.foogallery.fg-hover-zoom3 .fg-caption-inner:before {
|
930 |
+
background-image: url('../img/zoom3@3x.png');
|
931 |
+
}
|
932 |
+
|
933 |
+
.foogallery.fg-hover-plus .fg-thumb:before,
|
934 |
+
.foogallery.fg-hover-plus .fg-caption-inner:before {
|
935 |
+
background-image: url('../img/plus@3x.png');
|
936 |
+
}
|
937 |
+
|
938 |
+
.foogallery.fg-hover-circle-plus .fg-thumb:before,
|
939 |
+
.foogallery.fg-hover-circle-plus .fg-caption-inner:before {
|
940 |
+
background-image: url('../img/circle-plus@3x.png');
|
941 |
+
}
|
942 |
+
|
943 |
+
.foogallery.fg-hover-eye .fg-thumb:before,
|
944 |
+
.foogallery.fg-hover-eye .fg-caption-inner:before {
|
945 |
+
background-image: url('../img/eye@3x.png');
|
946 |
+
}
|
947 |
+
|
948 |
+
.foogallery.fg-hover-external .fg-thumb:before,
|
949 |
+
.foogallery.fg-hover-external .fg-caption-inner:before {
|
950 |
+
background-image: url('../img/external@3x.png');
|
951 |
+
}
|
952 |
+
|
953 |
+
}
|
954 |
+
/* Transitions */
|
955 |
+
.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,
|
956 |
+
.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,
|
957 |
+
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,
|
958 |
+
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,
|
959 |
+
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,
|
960 |
+
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,
|
961 |
+
.foogallery.fg-caption-hover.fg-hover-push .fg-caption,
|
962 |
+
.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,
|
963 |
+
.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,
|
964 |
+
.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,
|
965 |
+
.foogallery.fg-hover-instant .fg-thumb:before,
|
966 |
+
.foogallery.fg-hover-fade .fg-thumb:before,
|
967 |
+
.foogallery.fg-hover-slide-up .fg-thumb:before,
|
968 |
+
.foogallery.fg-hover-slide-down .fg-thumb:before,
|
969 |
+
.foogallery.fg-hover-slide-left .fg-thumb:before,
|
970 |
+
.foogallery.fg-hover-slide-right .fg-thumb:before,
|
971 |
+
.foogallery.fg-hover-push .fg-thumb,
|
972 |
+
.foogallery.fg-hover-colorize .fg-thumb:before,
|
973 |
+
.foogallery.fg-hover-grayscale .fg-thumb:before,
|
974 |
+
.foogallery.fg-hover-scale .fg-item,
|
975 |
+
.foogallery.fg-hover-scale .fg-thumb:before,
|
976 |
+
.foogallery.fg-hover-colorize .fg-image,
|
977 |
+
.foogallery.fg-hover-grayscale .fg-image {
|
978 |
+
transition-timing-function: ease;
|
979 |
+
transition-duration: 300ms;
|
980 |
+
}
|
981 |
+
/* Colorize */
|
982 |
+
.foogallery.fg-hover-colorize .fg-image {
|
983 |
+
/* Firefox 10+, Firefox on Android */
|
984 |
+
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");
|
985 |
+
/* IE 6-9 */
|
986 |
+
filter: gray;
|
987 |
+
/* Chrome 19+, Safari 6+, Safari 6+ iOS */
|
988 |
+
-webkit-filter: grayscale(100%);
|
989 |
+
-webkit-transition-property: -webkit-filter;
|
990 |
+
transition-property: filter;
|
991 |
+
}
|
992 |
+
.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image {
|
993 |
+
-webkit-filter: none;
|
994 |
+
filter: none;
|
995 |
+
}
|
996 |
+
.foogallery.fg-hover-colorize .fg-thumb:before,
|
997 |
+
.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption {
|
998 |
+
display: block;
|
999 |
+
left: 0;
|
1000 |
+
top: 0;
|
1001 |
+
bottom: 0;
|
1002 |
+
transition-property: visibility, opacity;
|
1003 |
+
}
|
1004 |
+
.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-thumb:before,
|
1005 |
+
.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption {
|
1006 |
+
visibility: visible;
|
1007 |
+
opacity: 1;
|
1008 |
+
}
|
1009 |
+
/* Fade */
|
1010 |
+
.foogallery.fg-hover-fade .fg-loaded .fg-thumb:before,
|
1011 |
+
.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption {
|
1012 |
+
display: block;
|
1013 |
+
left: 0;
|
1014 |
+
top: 0;
|
1015 |
+
bottom: 0;
|
1016 |
+
transition-property: visibility, opacity;
|
1017 |
+
}
|
1018 |
+
.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1019 |
+
.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption {
|
1020 |
+
visibility: visible;
|
1021 |
+
opacity: 1;
|
1022 |
+
}
|
1023 |
+
/* Grayscale */
|
1024 |
+
.foogallery.fg-hover-grayscale .fg-image {
|
1025 |
+
-webkit-filter: none;
|
1026 |
+
filter: none;
|
1027 |
+
-webkit-transition-property: -webkit-filter;
|
1028 |
+
transition-property: filter;
|
1029 |
+
}
|
1030 |
+
.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image {
|
1031 |
+
/* For Webkit browsers */
|
1032 |
+
-webkit-filter: grayscale(1);
|
1033 |
+
-webkit-filter: grayscale(100%);
|
1034 |
+
/* Standard */
|
1035 |
+
filter: grayscale(100%);
|
1036 |
+
/* For IE 6 - 9 */
|
1037 |
+
filter: gray;
|
1038 |
+
opacity: 1;
|
1039 |
+
}
|
1040 |
+
.foogallery.fg-hover-grayscale .fg-thumb:before,
|
1041 |
+
.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption {
|
1042 |
+
display: block;
|
1043 |
+
left: 0;
|
1044 |
+
top: 0;
|
1045 |
+
bottom: 0;
|
1046 |
+
transition-property: visibility, opacity;
|
1047 |
+
}
|
1048 |
+
.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-thumb:before,
|
1049 |
+
.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption {
|
1050 |
+
visibility: visible;
|
1051 |
+
opacity: 1;
|
1052 |
+
}
|
1053 |
+
/* Instant */
|
1054 |
+
.foogallery.fg-hover-instant .fg-loaded .fg-thumb:before,
|
1055 |
+
.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption {
|
1056 |
+
display: block;
|
1057 |
+
left: 0;
|
1058 |
+
top: 0;
|
1059 |
+
bottom: 0;
|
1060 |
+
transition-property: none;
|
1061 |
+
}
|
1062 |
+
.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1063 |
+
.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption {
|
1064 |
+
visibility: visible;
|
1065 |
+
opacity: 1;
|
1066 |
+
}
|
1067 |
+
/* Push */
|
1068 |
+
.foogallery.fg-hover-push .fg-loaded .fg-thumb:before,
|
1069 |
+
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption {
|
1070 |
+
display: block;
|
1071 |
+
left: 0;
|
1072 |
+
top: 0;
|
1073 |
+
bottom: 0;
|
1074 |
+
transform: translateX(100%);
|
1075 |
+
visibility: visible;
|
1076 |
+
opacity: 1;
|
1077 |
+
}
|
1078 |
+
.foogallery.fg-hover-push .fg-loaded .fg-thumb,
|
1079 |
+
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption {
|
1080 |
+
transition-property: transform;
|
1081 |
+
}
|
1082 |
+
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption {
|
1083 |
+
transform: translateY(0);
|
1084 |
+
}
|
1085 |
+
.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,
|
1086 |
+
.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb {
|
1087 |
+
transform: translateX(-100%);
|
1088 |
+
}
|
1089 |
+
/* Scale */
|
1090 |
+
.foogallery.fg-hover-scale .fg-item {
|
1091 |
+
transition-property: transform;
|
1092 |
+
z-index: 4;
|
1093 |
+
}
|
1094 |
+
|
1095 |
+
.foogallery.fg-hover-scale .fg-item:hover {
|
1096 |
+
transform: scale(1.048);
|
1097 |
+
z-index: 10;
|
1098 |
+
}
|
1099 |
+
.foogallery.fg-hover-scale .fg-thumb:before,
|
1100 |
+
.foogallery.fg-caption-hover.fg-hover-scale .fg-caption {
|
1101 |
+
display: block;
|
1102 |
+
left: 0;
|
1103 |
+
top: 0;
|
1104 |
+
bottom: 0;
|
1105 |
+
transition-property: visibility, opacity;
|
1106 |
+
}
|
1107 |
+
.foogallery.fg-hover-scale .fg-item-inner:hover .fg-thumb:before,
|
1108 |
+
.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption {
|
1109 |
+
visibility: visible;
|
1110 |
+
opacity: 1;
|
1111 |
+
}
|
1112 |
+
/* Slide */
|
1113 |
+
.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before,
|
1114 |
+
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,
|
1115 |
+
.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,
|
1116 |
+
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,
|
1117 |
+
.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,
|
1118 |
+
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,
|
1119 |
+
.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,
|
1120 |
+
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption {
|
1121 |
+
display: block;
|
1122 |
+
left: 0;
|
1123 |
+
top: 0;
|
1124 |
+
bottom: 0;
|
1125 |
+
transition-property: transform;
|
1126 |
+
visibility: visible;
|
1127 |
+
opacity: 1;
|
1128 |
+
}
|
1129 |
+
.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1130 |
+
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,
|
1131 |
+
.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1132 |
+
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,
|
1133 |
+
.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1134 |
+
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,
|
1135 |
+
.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-thumb:before,
|
1136 |
+
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption {
|
1137 |
+
transform: translateY(0) translateX(0);
|
1138 |
+
}
|
1139 |
+
|
1140 |
+
|
1141 |
+
/* Slide Up */
|
1142 |
+
.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before,
|
1143 |
+
.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption {
|
1144 |
+
transform: translateY(100%);
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
/* Slide Down */
|
1148 |
+
.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,
|
1149 |
+
.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption {
|
1150 |
+
transform: translateY(-100%);
|
1151 |
+
}
|
1152 |
+
|
1153 |
+
/* Slide Left */
|
1154 |
+
.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,
|
1155 |
+
.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption {
|
1156 |
+
transform: translateX(100%);
|
1157 |
+
}
|
1158 |
+
|
1159 |
+
/* Slide Right */
|
1160 |
+
.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,
|
1161 |
+
.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption {
|
1162 |
+
transform: translateX(-100%);
|
1163 |
+
}
|
1164 |
+
.fg-paging-container, .fg-paging-container *, .fg-paging-container *:before, .fg-paging-container *:after {
|
1165 |
+
-webkit-box-sizing: border-box;
|
1166 |
+
-moz-box-sizing: border-box;
|
1167 |
+
box-sizing: border-box;
|
1168 |
+
}
|
1169 |
+
.fg-paging-container {
|
1170 |
+
display: block;
|
1171 |
+
padding: 15px;
|
1172 |
+
text-align: center;
|
1173 |
+
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
1174 |
+
-webkit-user-select: none;
|
1175 |
+
-moz-user-select: none;
|
1176 |
+
-ms-user-select: none;
|
1177 |
+
user-select: none;
|
1178 |
+
}
|
1179 |
+
/* Utility */
|
1180 |
+
.fg-sr-only {
|
1181 |
+
position: absolute;
|
1182 |
+
width: 1px;
|
1183 |
+
height: 1px;
|
1184 |
+
padding: 0;
|
1185 |
+
margin: -1px;
|
1186 |
+
overflow: hidden;
|
1187 |
+
clip: rect(0,0,0,0);
|
1188 |
+
border: 0;
|
1189 |
+
}
|
1190 |
+
.fg-paging-container .fg-dots,
|
1191 |
+
.fg-paging-container .fg-dot-item {
|
1192 |
+
display: inline-block;
|
1193 |
+
margin: 0;
|
1194 |
+
padding: 0;
|
1195 |
+
outline: none;
|
1196 |
+
list-style: none;
|
1197 |
+
}
|
1198 |
+
.fg-paging-container .fg-dot-item .fg-dot-link {
|
1199 |
+
display: inline-block;
|
1200 |
+
margin: 3px;
|
1201 |
+
font-weight: 400;
|
1202 |
+
line-height: 1.42857143;
|
1203 |
+
text-align: center;
|
1204 |
+
white-space: nowrap;
|
1205 |
+
vertical-align: middle;
|
1206 |
+
cursor: pointer;
|
1207 |
+
user-select: none;
|
1208 |
+
background-image: none;
|
1209 |
+
text-decoration: none;
|
1210 |
+
border: 1px solid transparent;
|
1211 |
+
position: relative;
|
1212 |
+
border-radius: 50%;
|
1213 |
+
padding: 0;
|
1214 |
+
font-size: 0;
|
1215 |
+
outline: none;
|
1216 |
+
color: transparent;
|
1217 |
+
box-shadow: none;
|
1218 |
+
}
|
1219 |
+
.fg-paging-container .fg-dot-item .fg-dot-link:before {
|
1220 |
+
content: "";
|
1221 |
+
background-color: transparent;
|
1222 |
+
border: 1px solid transparent;
|
1223 |
+
display: block;
|
1224 |
+
border-radius: 50%;
|
1225 |
+
width: 9px;
|
1226 |
+
height: 9px;
|
1227 |
+
padding: 0;
|
1228 |
+
margin: 2px;
|
1229 |
+
}
|
1230 |
+
.fg-paging-container .fg-dot-item .fg-dot-link:active,
|
1231 |
+
.fg-paging-container .fg-dot-item .fg-dot-link:hover,
|
1232 |
+
.fg-paging-container .fg-dot-item .fg-dot-link:focus {
|
1233 |
+
text-decoration: none;
|
1234 |
+
box-shadow: none;
|
1235 |
+
outline: none;
|
1236 |
+
}
|
1237 |
+
.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,
|
1238 |
+
.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link {
|
1239 |
+
cursor: not-allowed;
|
1240 |
+
pointer-events: none;
|
1241 |
+
}
|
1242 |
+
.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link {
|
1243 |
+
cursor: not-allowed;
|
1244 |
+
pointer-events: none;
|
1245 |
+
outline: none;
|
1246 |
+
}
|
1247 |
+
|
1248 |
+
/* Light - Dots */
|
1249 |
+
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,
|
1250 |
+
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before {
|
1251 |
+
transition-timing-function: ease-out;
|
1252 |
+
transition-duration: 0.3s;
|
1253 |
+
transition-property: color, border-color, background-color;
|
1254 |
+
}
|
1255 |
+
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link {
|
1256 |
+
background-color: #eee;
|
1257 |
+
border-color: #9e9e9e;
|
1258 |
+
}
|
1259 |
+
.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link {
|
1260 |
+
border-color: #8a8a8a;
|
1261 |
+
}
|
1262 |
+
.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before,
|
1263 |
+
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,
|
1264 |
+
.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before {
|
1265 |
+
background-color: #666;
|
1266 |
+
border-color: #8a8a8a;
|
1267 |
+
}
|
1268 |
+
.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,
|
1269 |
+
.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover,
|
1270 |
+
.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus {
|
1271 |
+
background-color: #eee;
|
1272 |
+
border-color: #9e9e9e;
|
1273 |
+
opacity: 0.5;
|
1274 |
+
}
|
1275 |
+
|
1276 |
+
/* Dark - Dots */
|
1277 |
+
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,
|
1278 |
+
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before {
|
1279 |
+
transition-timing-function: ease-out;
|
1280 |
+
transition-duration: 0.3s;
|
1281 |
+
transition-property: color, border-color, background-color;
|
1282 |
+
}
|
1283 |
+
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link {
|
1284 |
+
background-color: #666;
|
1285 |
+
border-color: #333;
|
1286 |
+
}
|
1287 |
+
.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link {
|
1288 |
+
border-color: #444;
|
1289 |
+
}
|
1290 |
+
.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before,
|
1291 |
+
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,
|
1292 |
+
.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before {
|
1293 |
+
background-color: #333;
|
1294 |
+
border-color: #444;
|
1295 |
+
}
|
1296 |
+
.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,
|
1297 |
+
.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover,
|
1298 |
+
.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus {
|
1299 |
+
background-color: #666;
|
1300 |
+
border-color: #333;
|
1301 |
+
opacity: 0.5;
|
1302 |
+
}
|
1303 |
+
/* Base styles */
|
1304 |
+
.fg-default:after {
|
1305 |
+
content: '';
|
1306 |
+
display: block;
|
1307 |
+
clear: both;
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
.fg-default .fg-item,
|
1311 |
+
.fg-default .fg-item-inner,
|
1312 |
+
.fg-default .fg-thumb {
|
1313 |
+
display: inline-block;
|
1314 |
+
vertical-align: top;
|
1315 |
+
max-width: 100%;
|
1316 |
+
}
|
1317 |
+
|
1318 |
+
.fg-default .fg-image {
|
1319 |
+
border-radius: 0;
|
1320 |
+
display: block;
|
1321 |
+
max-width: 100%;
|
1322 |
+
height: auto;
|
1323 |
+
margin: 0;
|
1324 |
+
padding: 0;
|
1325 |
+
}
|
1326 |
+
|
1327 |
+
/* Horizontal alignment */
|
1328 |
+
.fg-default .fg-image {
|
1329 |
+
vertical-align: top;
|
1330 |
+
}
|
1331 |
+
|
1332 |
+
.fg-default.fg-left {
|
1333 |
+
text-align: left;
|
1334 |
+
}
|
1335 |
+
|
1336 |
+
.fg-default.fg-center {
|
1337 |
+
text-align: center;
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
.fg-default.fg-right {
|
1341 |
+
text-align: right;
|
1342 |
+
}
|
1343 |
+
|
1344 |
+
/* Gutter widths */
|
1345 |
+
.fg-default.fg-gutter-5 {
|
1346 |
+
padding-left: 5px;
|
1347 |
+
margin-bottom: -5px;
|
1348 |
+
}
|
1349 |
+
.fg-default.fg-gutter-5 .fg-item {
|
1350 |
+
margin-right: 5px;
|
1351 |
+
margin-bottom: 5px;
|
1352 |
+
}
|
1353 |
+
|
1354 |
+
.fg-default.fg-gutter-10 {
|
1355 |
+
padding-left: 10px;
|
1356 |
+
margin-bottom: -10px;
|
1357 |
+
}
|
1358 |
+
.fg-default.fg-gutter-10 .fg-item {
|
1359 |
+
margin-right: 10px;
|
1360 |
+
margin-bottom: 10px;
|
1361 |
+
}
|
1362 |
+
|
1363 |
+
.fg-default.fg-gutter-15 {
|
1364 |
+
padding-left: 15px;
|
1365 |
+
margin-bottom: -15px;
|
1366 |
+
}
|
1367 |
+
.fg-default.fg-gutter-15 .fg-item {
|
1368 |
+
margin-right: 15px;
|
1369 |
+
margin-bottom: 15px;
|
1370 |
+
}
|
1371 |
+
|
1372 |
+
.fg-default.fg-gutter-20 {
|
1373 |
+
padding-left: 20px;
|
1374 |
+
margin-bottom: -20px;
|
1375 |
+
}
|
1376 |
+
.fg-default.fg-gutter-20 .fg-item {
|
1377 |
+
margin-right: 20px;
|
1378 |
+
margin-bottom: 20px;
|
1379 |
+
}
|
1380 |
+
|
1381 |
+
.fg-default.fg-gutter-25 {
|
1382 |
+
padding-left: 25px;
|
1383 |
+
margin-bottom: -25px;
|
1384 |
+
}
|
1385 |
+
.fg-default.fg-gutter-25 .fg-item {
|
1386 |
+
margin-right: 25px;
|
1387 |
+
margin-bottom: 25px;
|
1388 |
+
}
|
1389 |
+
/* Base styles */
|
1390 |
+
.fg-masonry * {
|
1391 |
+
-webkit-box-sizing: border-box;
|
1392 |
+
-moz-box-sizing: border-box;
|
1393 |
+
box-sizing: border-box;
|
1394 |
+
}
|
1395 |
+
.foogallery.fg-masonry.fg-center {
|
1396 |
+
margin: 0 auto;
|
1397 |
+
}
|
1398 |
+
.fg-masonry .fg-thumb {
|
1399 |
+
display: block;
|
1400 |
+
}
|
1401 |
+
.fg-masonry.fg-masonry-fixed .fg-thumb {
|
1402 |
+
display: inline-block;
|
1403 |
+
}
|
1404 |
+
.fg-masonry.fg-masonry-fixed .fg-image {
|
1405 |
+
max-width: 100%;
|
1406 |
+
}
|
1407 |
+
|
1408 |
+
.fg-masonry .fg-column-width {
|
1409 |
+
display: inline-block;
|
1410 |
+
visibility: hidden;
|
1411 |
+
height: 0;
|
1412 |
+
border: solid 0 transparent;
|
1413 |
+
}
|
1414 |
+
|
1415 |
+
.fg-masonry.fg-masonry-5col .fg-image,
|
1416 |
+
.fg-masonry.fg-masonry-4col .fg-image,
|
1417 |
+
.fg-masonry.fg-masonry-3col .fg-image,
|
1418 |
+
.fg-masonry.fg-masonry-2col .fg-image {
|
1419 |
+
width: 100%;
|
1420 |
+
height: auto;
|
1421 |
+
max-width: 100%;
|
1422 |
+
}
|
1423 |
+
|
1424 |
+
.fg-masonry .fg-item {
|
1425 |
+
line-height: 0;
|
1426 |
+
font-size: 0;
|
1427 |
+
}
|
1428 |
+
|
1429 |
+
/* 2 column layouts */
|
1430 |
+
/* 2 column layout - normal gutter */
|
1431 |
+
.fg-masonry.fg-masonry-2col .fg-item { margin-bottom: 1%; width: 49%; }
|
1432 |
+
.fg-masonry.fg-masonry-2col .fg-column-width { width: 49%; }
|
1433 |
+
.fg-masonry.fg-masonry-2col .fg-gutter-width { width: 1%; }
|
1434 |
+
|
1435 |
+
/* 2 column layout - no gutter */
|
1436 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item { margin-bottom: 0; width: 50%; }
|
1437 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width { width: 50%; }
|
1438 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1439 |
+
|
1440 |
+
/* 2 column layout - large gutter */
|
1441 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 47%; }
|
1442 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width { width: 47%; }
|
1443 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width { width: 3%; }
|
1444 |
+
|
1445 |
+
/* 3 column layouts */
|
1446 |
+
/* 3 column layout - normal gutter */
|
1447 |
+
.fg-masonry.fg-masonry-3col .fg-item { margin-bottom: 1%; width: 32%; }
|
1448 |
+
.fg-masonry.fg-masonry-3col .fg-column-width { width: 32%; }
|
1449 |
+
.fg-masonry.fg-masonry-3col .fg-gutter-width { width: 1%; }
|
1450 |
+
|
1451 |
+
/* 3 column layout - no gutter */
|
1452 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item { margin-bottom: 0; width: 33%; }
|
1453 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width { width: 33%; }
|
1454 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1455 |
+
|
1456 |
+
/* 3 column layout - large gutter */
|
1457 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 30%; }
|
1458 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width { width: 30%; }
|
1459 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width { width: 3%; }
|
1460 |
+
|
1461 |
+
/* 4 column layouts */
|
1462 |
+
/* 4 column layout - normal gutter */
|
1463 |
+
.fg-masonry.fg-masonry-4col .fg-item { margin-bottom: 1%; width: 24%; }
|
1464 |
+
.fg-masonry.fg-masonry-4col .fg-column-width { width: 24%; }
|
1465 |
+
.fg-masonry.fg-masonry-4col .fg-gutter-width { width: 1%; }
|
1466 |
+
|
1467 |
+
/* 4 column layout - no gutter */
|
1468 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item { margin-bottom: 0; width: 25%; }
|
1469 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width { width: 25%; }
|
1470 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1471 |
+
|
1472 |
+
/* 4 column layout - large gutter */
|
1473 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 22%; }
|
1474 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width { width: 22%; }
|
1475 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width { width: 3%; }
|
1476 |
+
|
1477 |
+
/* 5 column layouts */
|
1478 |
+
/* 5 column layout - normal gutter */
|
1479 |
+
.fg-masonry.fg-masonry-5col .fg-item { margin-bottom: 1%; width: 19%; }
|
1480 |
+
.fg-masonry.fg-masonry-5col .fg-column-width { width: 19%; }
|
1481 |
+
.fg-masonry.fg-masonry-5col .fg-gutter-width { width: 1%; }
|
1482 |
+
|
1483 |
+
/* 5 column layout - no gutter */
|
1484 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item { margin-bottom: 0; width: 20%; }
|
1485 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width { width: 20%; }
|
1486 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1487 |
+
|
1488 |
+
/* 5 column layout - large gutter */
|
1489 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 17%; }
|
1490 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width { width: 17%; }
|
1491 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width { width: 3%; }
|
1492 |
+
|
1493 |
+
/* Force 3 column layout < 720px */
|
1494 |
+
@media screen and (max-width: 720px) {
|
1495 |
+
/* default gutter */
|
1496 |
+
.fg-masonry.fg-masonry-5col .fg-item,
|
1497 |
+
.fg-masonry.fg-masonry-4col .fg-item { margin-bottom: 1%; width: 32%; }
|
1498 |
+
.fg-masonry.fg-masonry-5col .fg-column-width,
|
1499 |
+
.fg-masonry.fg-masonry-4col .fg-column-width { width: 32%; }
|
1500 |
+
.fg-masonry.fg-masonry-5col .fg-gutter-width,
|
1501 |
+
.fg-masonry.fg-masonry-4col .fg-gutter-width { width: 1%; }
|
1502 |
+
|
1503 |
+
/* no gutter */
|
1504 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item,
|
1505 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item { margin-bottom: 0; width: 33%; }
|
1506 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width,
|
1507 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width { width: 33%; }
|
1508 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width,
|
1509 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1510 |
+
|
1511 |
+
/* large gutter */
|
1512 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item,
|
1513 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 30%; }
|
1514 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width,
|
1515 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width { width: 30%; }
|
1516 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width,
|
1517 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width { width: 3%; }
|
1518 |
+
|
1519 |
+
}
|
1520 |
+
|
1521 |
+
/* Force 2 column layout < 480px */
|
1522 |
+
@media screen and (max-width: 480px) {
|
1523 |
+
/* default gutter */
|
1524 |
+
.fg-masonry.fg-masonry-5col .fg-item,
|
1525 |
+
.fg-masonry.fg-masonry-4col .fg-item,
|
1526 |
+
.fg-masonry.fg-masonry-3col .fg-item { margin-bottom: 1%; width: 49%; }
|
1527 |
+
.fg-masonry.fg-masonry-5col .fg-column-width,
|
1528 |
+
.fg-masonry.fg-masonry-4col .fg-column-width,
|
1529 |
+
.fg-masonry.fg-masonry-3col .fg-column-width { width: 49%; }
|
1530 |
+
.fg-masonry.fg-masonry-5col .fg-gutter-width,
|
1531 |
+
.fg-masonry.fg-masonry-4col .fg-gutter-width,
|
1532 |
+
.fg-masonry.fg-masonry-3col .fg-gutter-width { width: 1%; }
|
1533 |
+
|
1534 |
+
/* no gutter */
|
1535 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item,
|
1536 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,
|
1537 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item { margin-bottom: 0; width: 50%; }
|
1538 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width,
|
1539 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,
|
1540 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width { width: 50%; }
|
1541 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width,
|
1542 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,
|
1543 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1544 |
+
|
1545 |
+
/* large gutter */
|
1546 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item,
|
1547 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,
|
1548 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 47%; }
|
1549 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width,
|
1550 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,
|
1551 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width { width: 47%; }
|
1552 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width,
|
1553 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,
|
1554 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width { width: 3%; }
|
1555 |
+
}
|
1556 |
+
|
1557 |
+
/* Force 1 column layout < 320px */
|
1558 |
+
@media screen and (max-width: 320px) {
|
1559 |
+
/* default gutter */
|
1560 |
+
.fg-masonry.fg-masonry-5col .fg-item,
|
1561 |
+
.fg-masonry.fg-masonry-4col .fg-item,
|
1562 |
+
.fg-masonry.fg-masonry-3col .fg-item,
|
1563 |
+
.fg-masonry.fg-masonry-2col .fg-item { margin-bottom: 1%; width: 100%; }
|
1564 |
+
.fg-masonry.fg-masonry-5col .fg-column-width,
|
1565 |
+
.fg-masonry.fg-masonry-4col .fg-column-width,
|
1566 |
+
.fg-masonry.fg-masonry-3col .fg-column-width,
|
1567 |
+
.fg-masonry.fg-masonry-2col .fg-column-width { width: 100%; }
|
1568 |
+
.fg-masonry.fg-masonry-5col .fg-gutter-width,
|
1569 |
+
.fg-masonry.fg-masonry-4col .fg-gutter-width,
|
1570 |
+
.fg-masonry.fg-masonry-3col .fg-gutter-width,
|
1571 |
+
.fg-masonry.fg-masonry-2col .fg-gutter-width { width: 0; }
|
1572 |
+
|
1573 |
+
/* no gutter */
|
1574 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item,
|
1575 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,
|
1576 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,
|
1577 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item { margin-bottom: 0; width: 100%; }
|
1578 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width,
|
1579 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,
|
1580 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,
|
1581 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width { width: 100%; }
|
1582 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width,
|
1583 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,
|
1584 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,
|
1585 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width { width: 0; }
|
1586 |
+
|
1587 |
+
/* large gutter */
|
1588 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item,
|
1589 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,
|
1590 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,
|
1591 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item { margin-bottom: 3%; width: 100%; }
|
1592 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width,
|
1593 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,
|
1594 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,
|
1595 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width { width: 100%; }
|
1596 |
+
.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width,
|
1597 |
+
.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,
|
1598 |
+
.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,
|
1599 |
+
.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width { width: 0; }
|
1600 |
+
}
|
1601 |
+
|
1602 |
+
/* Border Styles - We must apply width changing border styles to the fg-column-width element so that the plugin can correctly determine the item widths. */
|
1603 |
+
.foogallery.fg-border-thin .fg-column-width {
|
1604 |
+
border-width: 5px;
|
1605 |
+
}
|
1606 |
+
.foogallery.fg-border-medium .fg-column-width {
|
1607 |
+
border-width: 10px;
|
1608 |
+
}
|
1609 |
+
.foogallery.fg-border-thick .fg-column-width {
|
1610 |
+
border-width: 15px;
|
1611 |
+
}
|
1612 |
+
|
1613 |
+
/* Captions Bottom */
|
1614 |
+
.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption {
|
1615 |
+
visibility: visible;
|
1616 |
+
opacity: 1;
|
1617 |
+
font-size: 13px;
|
1618 |
+
position: relative;
|
1619 |
+
display: block;
|
1620 |
+
top: auto;
|
1621 |
+
bottom: auto;
|
1622 |
+
left: auto;
|
1623 |
+
right: auto;
|
1624 |
+
width: auto;
|
1625 |
+
height: auto;
|
1626 |
+
text-transform: none;
|
1627 |
+
transform: none;
|
1628 |
+
transition: none;
|
1629 |
+
background-color: transparent;
|
1630 |
+
border-style: solid;
|
1631 |
+
border-color: transparent;
|
1632 |
+
}
|
1633 |
+
.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner:hover .fg-caption {
|
1634 |
+
transform: none;
|
1635 |
+
transition: none;
|
1636 |
+
}
|
1637 |
+
.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner {
|
1638 |
+
display: block;
|
1639 |
+
position: relative;
|
1640 |
+
max-height: none;
|
1641 |
+
top: auto;
|
1642 |
+
bottom: auto;
|
1643 |
+
left: auto;
|
1644 |
+
right: auto;
|
1645 |
+
width: auto;
|
1646 |
+
height: auto;
|
1647 |
+
border: none;
|
1648 |
+
transform: none;
|
1649 |
+
transition: none;
|
1650 |
+
}
|
1651 |
+
.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner:before {
|
1652 |
+
display: none;
|
1653 |
+
}
|
1654 |
+
.foogallery.fg-masonry.fg-captions-bottom.fg-caption-hover .fg-item-inner .fg-thumb:before {
|
1655 |
+
display: block;
|
1656 |
+
}
|
1657 |
+
.foogallery.fg-masonry.fg-captions-bottom.fg-caption-always .fg-item-inner:hover .fg-caption {
|
1658 |
+
visibility: visible;
|
1659 |
+
opacity: 1;
|
1660 |
+
}
|
1661 |
+
|
1662 |
+
.fg-masonry.fg-captions-bottom .fg-caption-title,
|
1663 |
+
.fg-masonry.fg-captions-bottom .fg-caption-desc {
|
1664 |
+
text-align: left;
|
1665 |
+
}
|
1666 |
+
.fg-masonry.fg-captions-bottom.fg-light .fg-caption,
|
1667 |
+
.fg-masonry.fg-captions-bottom.fg-dark .fg-caption {
|
1668 |
+
color: #828282;
|
1669 |
+
}
|
1670 |
+
.fg-masonry.fg-captions-bottom.fg-light .fg-caption a,
|
1671 |
+
.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a {
|
1672 |
+
color: #828282;
|
1673 |
+
border-bottom: 1px solid #828282;
|
1674 |
+
}
|
1675 |
+
.fg-masonry.fg-captions-bottom.fg-light .fg-caption a:hover,
|
1676 |
+
.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a:hover {
|
1677 |
+
border-bottom: none;
|
1678 |
+
}
|
1679 |
+
.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title,
|
1680 |
+
.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a {
|
1681 |
+
color: #222;
|
1682 |
+
}
|
1683 |
+
.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title,
|
1684 |
+
.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a {
|
1685 |
+
color: #FFF;
|
1686 |
+
}
|
1687 |
+
.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a {
|
1688 |
+
border-bottom: 1px solid #222;
|
1689 |
+
}
|
1690 |
+
.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a {
|
1691 |
+
border-bottom: 1px solid #FFF;
|
1692 |
+
}
|
1693 |
+
|
1694 |
+
/* Handle Border Sizing for Captions Below */
|
1695 |
+
.fg-masonry.fg-captions-bottom .fg-caption {
|
1696 |
+
border-width: 10px;
|
1697 |
+
}
|
1698 |
+
.fg-masonry.fg-captions-bottom .fg-caption-title+.fg-caption-desc {
|
1699 |
+
margin-top: 5px;
|
1700 |
+
}
|
1701 |
+
.fg-masonry.fg-captions-bottom.fg-border-thin .fg-caption {
|
1702 |
+
border-width: 10px 5px 5px 5px;
|
1703 |
+
}
|
1704 |
+
.fg-masonry.fg-captions-bottom.fg-border-medium .fg-caption {
|
1705 |
+
border-width: 10px 0 0 0;
|
1706 |
+
}
|
1707 |
+
.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption {
|
1708 |
+
border-width: 15px 0 0 0;
|
1709 |
+
}
|
1710 |
+
.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc {
|
1711 |
+
margin-top: 10px;
|
1712 |
+
}
|
1713 |
+
/* Base Styles */
|
1714 |
+
.fg-justified {
|
1715 |
+
box-sizing: border-box;
|
1716 |
+
position: relative;
|
1717 |
+
}
|
1718 |
+
.foogallery.fg-justified .fg-item,
|
1719 |
+
.foogallery.fg-justified .fg-item-inner,
|
1720 |
+
.foogallery.fg-justified .fg-thumb,
|
1721 |
+
.foogallery.fg-justified .fg-image {
|
1722 |
+
box-sizing: border-box;
|
1723 |
+
display: block;
|
1724 |
+
margin: 0;
|
1725 |
+
padding: 0;
|
1726 |
+
}
|
1727 |
+
.fg-justified .fg-item {
|
1728 |
+
visibility: visible;
|
1729 |
+
position: absolute;
|
1730 |
+
}
|
1731 |
+
.fg-justified .fg-item-inner {
|
1732 |
+
position: relative;
|
1733 |
+
width: 100%;
|
1734 |
+
height: 100%;
|
1735 |
+
}
|
1736 |
+
.fg-justified .fg-thumb {
|
1737 |
+
position: relative;
|
1738 |
+
overflow: hidden;
|
1739 |
+
}
|
1740 |
+
.fg-justified .fg-image {
|
1741 |
+
z-index: 1;
|
1742 |
+
}
|
1743 |
+
.fg-justified .fg-item.fg-positioned .fg-thumb {
|
1744 |
+
width: 100%;
|
1745 |
+
height: 100%;
|
1746 |
+
}
|
1747 |
+
.fg-justified .fg-item.fg-positioned .fg-image {
|
1748 |
+
width: 100%;
|
1749 |
+
height: auto;
|
1750 |
+
min-height: 100%;
|
1751 |
+
}
|
1752 |
+
/* Base Styles */
|
1753 |
+
.fg-simple_portfolio {
|
1754 |
+
box-sizing: border-box;
|
1755 |
+
position: relative;
|
1756 |
+
font-size: 16px;
|
1757 |
+
margin: 0 auto;
|
1758 |
+
padding: 0;
|
1759 |
+
/* The foogallery-portfolio container must have a width set and it is recommended to make the min-width the same as the item width. */
|
1760 |
+
width: 100%;
|
1761 |
+
}
|
1762 |
+
.fg-simple_portfolio .fg-item {
|
1763 |
+
position: absolute;
|
1764 |
+
display: inline-block;
|
1765 |
+
margin: 0;
|
1766 |
+
padding: 0;
|
1767 |
+
outline: none;
|
1768 |
+
}
|
1769 |
+
.fg-simple_portfolio .fg-item-inner,
|
1770 |
+
.fg-simple_portfolio .fg-thumb,
|
1771 |
+
.fg-simple_portfolio .fg-image {
|
1772 |
+
display: block;
|
1773 |
+
margin: 0;
|
1774 |
+
padding: 0;
|
1775 |
+
outline: none;
|
1776 |
+
}
|
1777 |
+
.fg-simple_portfolio .fg-item-inner {
|
1778 |
+
position: relative;
|
1779 |
+
width: 100%;
|
1780 |
+
height: 100%;
|
1781 |
+
}
|
1782 |
+
.fg-simple_portfolio .fg-thumb {
|
1783 |
+
box-sizing: border-box;
|
1784 |
+
display: block;
|
1785 |
+
margin: 0;
|
1786 |
+
padding: 0;
|
1787 |
+
border: none;
|
1788 |
+
outline: none;
|
1789 |
+
position: relative;
|
1790 |
+
overflow: hidden;
|
1791 |
+
}
|
1792 |
+
.fg-simple_portfolio .fg-item.fg-positioned .fg-image {
|
1793 |
+
width: 100%;
|
1794 |
+
height: auto;
|
1795 |
+
}
|
1796 |
+
.fg-simple_portfolio .fg-image {
|
1797 |
+
z-index: 1;
|
1798 |
+
}
|
1799 |
+
|
1800 |
+
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption {
|
1801 |
+
visibility: visible;
|
1802 |
+
opacity: 1;
|
1803 |
+
font-size: 13px;
|
1804 |
+
position: relative;
|
1805 |
+
display: block;
|
1806 |
+
top: auto;
|
1807 |
+
bottom: auto;
|
1808 |
+
left: auto;
|
1809 |
+
right: auto;
|
1810 |
+
width: auto;
|
1811 |
+
height: auto;
|
1812 |
+
text-transform: none;
|
1813 |
+
transform: none;
|
1814 |
+
transition: none;
|
1815 |
+
background-color: transparent;
|
1816 |
+
border-style: solid;
|
1817 |
+
border-color: transparent;
|
1818 |
+
}
|
1819 |
+
.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption {
|
1820 |
+
transform: none;
|
1821 |
+
transition: none;
|
1822 |
+
}
|
1823 |
+
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner {
|
1824 |
+
display: block;
|
1825 |
+
top: auto;
|
1826 |
+
bottom: auto;
|
1827 |
+
left: auto;
|
1828 |
+
right: auto;
|
1829 |
+
width: auto;
|
1830 |
+
height: auto;
|
1831 |
+
border: none;
|
1832 |
+
transform: none;
|
1833 |
+
transition: none;
|
1834 |
+
}
|
1835 |
+
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before {
|
1836 |
+
display: none;
|
1837 |
+
}
|
1838 |
+
.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before {
|
1839 |
+
display: block;
|
1840 |
+
}
|
1841 |
+
.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption {
|
1842 |
+
visibility: visible;
|
1843 |
+
opacity: 1;
|
1844 |
+
}
|
1845 |
+
|
1846 |
+
.fg-simple_portfolio .fg-caption-title {
|
1847 |
+
text-align: left;
|
1848 |
+
}
|
1849 |
+
.fg-simple_portfolio .fg-caption-desc {
|
1850 |
+
text-align: justify;
|
1851 |
+
}
|
1852 |
+
.fg-simple_portfolio.fg-light .fg-caption,
|
1853 |
+
.fg-simple_portfolio.fg-dark .fg-caption {
|
1854 |
+
color: #828282;
|
1855 |
+
}
|
1856 |
+
.fg-simple_portfolio.fg-light .fg-caption a,
|
1857 |
+
.fg-simple_portfolio.fg-dark .fg-caption a {
|
1858 |
+
color: #828282;
|
1859 |
+
border-bottom: 1px solid #828282;
|
1860 |
+
}
|
1861 |
+
.fg-simple_portfolio.fg-light .fg-caption a:hover,
|
1862 |
+
.fg-simple_portfolio.fg-dark .fg-caption a:hover {
|
1863 |
+
border-bottom: none;
|
1864 |
+
}
|
1865 |
+
.fg-simple_portfolio.fg-light .fg-caption-title,
|
1866 |
+
.fg-simple_portfolio.fg-light .fg-caption-title a {
|
1867 |
+
color: #222;
|
1868 |
+
}
|
1869 |
+
.fg-simple_portfolio.fg-dark .fg-caption-title,
|
1870 |
+
.fg-simple_portfolio.fg-dark .fg-caption-title a {
|
1871 |
+
color: #FFF;
|
1872 |
+
}
|
1873 |
+
.fg-simple_portfolio.fg-light .fg-caption-title a {
|
1874 |
+
border-bottom: 1px solid #222;
|
1875 |
+
}
|
1876 |
+
.fg-simple_portfolio.fg-dark .fg-caption-title a {
|
1877 |
+
border-bottom: 1px solid #FFF;
|
1878 |
+
}
|
1879 |
+
|
1880 |
+
.fg-simple_portfolio.fg-captions-top .fg-item.fg-positioned .fg-thumb {
|
1881 |
+
position: absolute;
|
1882 |
+
bottom: 0;
|
1883 |
+
left: 0;
|
1884 |
+
}
|
1885 |
+
|
1886 |
+
/* Handle Border Sizing */
|
1887 |
+
.fg-simple_portfolio .fg-caption {
|
1888 |
+
border-width: 10px;
|
1889 |
+
}
|
1890 |
+
.fg-simple_portfolio .fg-caption-title+.fg-caption-desc {
|
1891 |
+
margin-top: 5px;
|
1892 |
+
}
|
1893 |
+
.fg-simple_portfolio.fg-border-thin .fg-caption {
|
1894 |
+
border-width: 10px 5px 5px 5px;
|
1895 |
+
}
|
1896 |
+
.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption {
|
1897 |
+
border-width: 5px 5px 10px 5px;
|
1898 |
+
}
|
1899 |
+
.fg-simple_portfolio.fg-border-medium .fg-caption {
|
1900 |
+
border-width: 10px 0 0 0;
|
1901 |
+
}
|
1902 |
+
.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption {
|
1903 |
+
border-width: 0 0 10px 0;
|
1904 |
+
}
|
1905 |
+
.fg-simple_portfolio.fg-border-thick .fg-caption {
|
1906 |
+
border-width: 15px 0 0 0;
|
1907 |
+
}
|
1908 |
+
.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption {
|
1909 |
+
border-width: 0 0 15px 0;
|
1910 |
+
}
|
1911 |
+
.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc {
|
1912 |
+
margin-top: 10px;
|
1913 |
+
}
|
1914 |
+
/* Polaroid */
|
1915 |
+
.foogallery.fg-preset.fg-polaroid .fg-item {
|
1916 |
+
-webkit-backface-visibility: hidden;
|
1917 |
+
backface-visibility: hidden;
|
1918 |
+
-webkit-transition: -webkit-transform 0.35s, background-color 0.65s;
|
1919 |
+
transition: transform 0.35s, background-color 0.65s;
|
1920 |
+
}
|
1921 |
+
.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1) {
|
1922 |
+
-webkit-transform: rotate(3deg);
|
1923 |
+
transform: rotate(3deg);
|
1924 |
+
}
|
1925 |
+
.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n) {
|
1926 |
+
-webkit-transform: rotate(-3deg);
|
1927 |
+
transform: rotate(-3deg);
|
1928 |
+
}
|
1929 |
+
.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n) {
|
1930 |
+
-webkit-transform: rotate(1deg);
|
1931 |
+
transform: rotate(1deg);
|
1932 |
+
}
|
1933 |
+
.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n) {
|
1934 |
+
-webkit-transform: rotate(-2deg);
|
1935 |
+
transform: rotate(-2deg);
|
1936 |
+
}
|
1937 |
+
|
1938 |
+
.foogallery.fg-preset.fg-polaroid .fg-item:hover {
|
1939 |
+
-webkit-transform: rotate(0);
|
1940 |
+
transform: rotate(0);
|
1941 |
+
}
|
1942 |
+
|
1943 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption {
|
1944 |
+
position: relative;
|
1945 |
+
width: auto;
|
1946 |
+
font-family: "Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
|
1947 |
+
}
|
1948 |
+
|
1949 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption-inner,
|
1950 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption-title {
|
1951 |
+
position: relative;
|
1952 |
+
width: auto;
|
1953 |
+
}
|
1954 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption-title {
|
1955 |
+
text-align: center;
|
1956 |
+
}
|
1957 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption-desc {
|
1958 |
+
display: none;
|
1959 |
+
}
|
1960 |
+
|
1961 |
+
/* Themes */
|
1962 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption-title,
|
1963 |
+
.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title {
|
1964 |
+
color: #333;
|
1965 |
+
}
|
1966 |
+
.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title {
|
1967 |
+
color: #FFF;
|
1968 |
+
}
|
1969 |
+
|
1970 |
+
/* Handle Border Sizing */
|
1971 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption {
|
1972 |
+
border-style: solid;
|
1973 |
+
border-color: transparent;
|
1974 |
+
border-width: 10px;
|
1975 |
+
}
|
1976 |
+
.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc {
|
1977 |
+
margin-top: 5px;
|
1978 |
+
}
|
1979 |
+
.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption {
|
1980 |
+
border-width: 10px 5px 5px 5px;
|
1981 |
+
}
|
1982 |
+
.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption {
|
1983 |
+
border-width: 5px 5px 10px 5px;
|
1984 |
+
}
|
1985 |
+
.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption {
|
1986 |
+
border-width: 10px 0 0 0;
|
1987 |
+
}
|
1988 |
+
.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption {
|
1989 |
+
border-width: 0 0 10px 0;
|
1990 |
+
}
|
1991 |
+
.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption {
|
1992 |
+
border-width: 15px 0 0 0;
|
1993 |
+
}
|
1994 |
+
.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption {
|
1995 |
+
border-width: 0 0 15px 0;
|
1996 |
+
}
|
1997 |
+
.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc {
|
1998 |
+
margin-top: 10px;
|
1999 |
+
}
|
2000 |
+
/* Base styles */
|
2001 |
+
.fg-image-viewer {
|
2002 |
+
display: block;
|
2003 |
+
font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
|
2004 |
+
}
|
2005 |
+
.fg-image-viewer.fg-left {
|
2006 |
+
text-align: left;
|
2007 |
+
}
|
2008 |
+
|
2009 |
+
.fg-image-viewer.fg-center {
|
2010 |
+
text-align: center;
|
2011 |
+
}
|
2012 |
+
.fg-image-viewer.fg-right {
|
2013 |
+
text-align: right;
|
2014 |
+
}
|
2015 |
+
|
2016 |
+
.fiv-inner {
|
2017 |
+
position: relative;
|
2018 |
+
display: inline-block;
|
2019 |
+
max-width: 100%;
|
2020 |
+
overflow: hidden;
|
2021 |
+
z-index: 6;
|
2022 |
+
}
|
2023 |
+
.fiv-inner .fiv-inner-container {
|
2024 |
+
position: relative;
|
2025 |
+
overflow: hidden;
|
2026 |
+
max-width: 100%;
|
2027 |
+
border-style: solid;
|
2028 |
+
border-width: 0;
|
2029 |
+
border-bottom-width: 4px;
|
2030 |
+
z-index: 5;
|
2031 |
+
}
|
2032 |
+
.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,
|
2033 |
+
.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,
|
2034 |
+
.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,
|
2035 |
+
.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited {
|
2036 |
+
position: relative;
|
2037 |
+
display: block;
|
2038 |
+
border: none;
|
2039 |
+
outline: none;
|
2040 |
+
text-decoration: none;
|
2041 |
+
box-shadow: none;
|
2042 |
+
max-width: 100%;
|
2043 |
+
}
|
2044 |
+
|
2045 |
+
.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item {
|
2046 |
+
position: relative;
|
2047 |
+
visibility: visible;
|
2048 |
+
opacity: 1;
|
2049 |
+
border: none;
|
2050 |
+
outline: none;
|
2051 |
+
text-decoration: none;
|
2052 |
+
box-shadow: none;
|
2053 |
+
max-width: 100%;
|
2054 |
+
}
|
2055 |
+
.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img {
|
2056 |
+
display: block;
|
2057 |
+
max-width: 100%;
|
2058 |
+
height: auto;
|
2059 |
+
border: none;
|
2060 |
+
outline: none;
|
2061 |
+
text-decoration: none;
|
2062 |
+
}
|
2063 |
+
|
2064 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls {
|
2065 |
+
display: block;
|
2066 |
+
text-align: center;
|
2067 |
+
font-size: 14px;
|
2068 |
+
border-style: solid;
|
2069 |
+
line-height: 34px;
|
2070 |
+
}
|
2071 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls:after {
|
2072 |
+
content: '';
|
2073 |
+
display: block;
|
2074 |
+
clear: both;
|
2075 |
+
}
|
2076 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count {
|
2077 |
+
display: inline-block;
|
2078 |
+
font-weight: normal;
|
2079 |
+
margin: 0;
|
2080 |
+
}
|
2081 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev,
|
2082 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next {
|
2083 |
+
cursor: pointer;
|
2084 |
+
-webkit-user-select: none;
|
2085 |
+
-moz-user-select: none;
|
2086 |
+
-ms-user-select: none;
|
2087 |
+
user-select: none;
|
2088 |
+
border: none;
|
2089 |
+
min-width: 80px;
|
2090 |
+
position: relative;
|
2091 |
+
overflow: hidden;
|
2092 |
+
transition: background-color .3s;
|
2093 |
+
}
|
2094 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before,
|
2095 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before {
|
2096 |
+
display: block;
|
2097 |
+
position: absolute;
|
2098 |
+
font-size: 24px;
|
2099 |
+
line-height: 30px;
|
2100 |
+
top:0;
|
2101 |
+
left:0;
|
2102 |
+
width: 100%;
|
2103 |
+
transform: translateY(0);
|
2104 |
+
transition: transform .3s;
|
2105 |
+
}
|
2106 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before,
|
2107 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before {
|
2108 |
+
transform: translateY(-100%);
|
2109 |
+
}
|
2110 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span,
|
2111 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span {
|
2112 |
+
display: block;
|
2113 |
+
width: 100%;
|
2114 |
+
transform: translateY(100%);
|
2115 |
+
transition: transform .3s;
|
2116 |
+
}
|
2117 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span,
|
2118 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span {
|
2119 |
+
transform: translateY(0);
|
2120 |
+
}
|
2121 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev {
|
2122 |
+
float: left;
|
2123 |
+
}
|
2124 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before {
|
2125 |
+
content: '\2190';
|
2126 |
+
}
|
2127 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next {
|
2128 |
+
float: right;
|
2129 |
+
}
|
2130 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before {
|
2131 |
+
content: '\2192';
|
2132 |
+
}
|
2133 |
+
.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span {
|
2134 |
+
margin: 0 4px;
|
2135 |
+
}
|
2136 |
+
|
2137 |
+
/*!* Theme - Default (Light) *!*/
|
2138 |
+
/*.fg-image-viewer .fiv-inner,*/
|
2139 |
+
/*.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev,*/
|
2140 |
+
/*.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next {*/
|
2141 |
+
/*background-color: #FFFFFF;*/
|
2142 |
+
/*color: #1b1b1b;*/
|
2143 |
+
/*}*/
|
2144 |
+
/*.fg-image-viewer .fiv-inner,*/
|
2145 |
+
/*.fg-image-viewer .fiv-inner .fiv-inner-container,*/
|
2146 |
+
/*.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev,*/
|
2147 |
+
/*.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next {*/
|
2148 |
+
/*border-color: #e6e6e6;*/
|
2149 |
+
/*}*/
|
2150 |
+
/*.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover,*/
|
2151 |
+
/*.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover {*/
|
2152 |
+
/*background-color: #F2F2F2;*/
|
2153 |
+
/*}*/
|
2154 |
+
|
2155 |
+
/*!* Theme - Dark *!*/
|
2156 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner,*/
|
2157 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-ctrls .fiv-prev,*/
|
2158 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-ctrls .fiv-next {*/
|
2159 |
+
/*background-color: #151515;*/
|
2160 |
+
/*color: #FFFFFF;*/
|
2161 |
+
/*}*/
|
2162 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner,*/
|
2163 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-inner-container,*/
|
2164 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-ctrls .fiv-prev,*/
|
2165 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-ctrls .fiv-next {*/
|
2166 |
+
/*border-color: #2E2E2E;*/
|
2167 |
+
/*}*/
|
2168 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-ctrls .fiv-prev:hover,*/
|
2169 |
+
/*.fg-image-viewer.fiv-dark .fiv-inner .fiv-ctrls .fiv-next:hover {*/
|
2170 |
+
/*background-color: #000000;*/
|
2171 |
+
/*}*/
|
2172 |
+
|
2173 |
+
/* Captions */
|
2174 |
+
|
2175 |
+
.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption {
|
2176 |
+
padding: 0;
|
2177 |
+
border: none;
|
2178 |
+
background: #000; /* Old browsers */
|
2179 |
+
background: -moz-linear-gradient(left, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.8) 60%, rgba(0,0,0,0) 100%); /* FF3.6-15 */
|
2180 |
+
background: -webkit-linear-gradient(left, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.8) 60%,rgba(0,0,0,0) 100%); /* Chrome10-25,Safari5.1-6 */
|
2181 |
+
background: linear-gradient(to right, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.8) 60%,rgba(0,0,0,0) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
|
2182 |
+
}
|
2183 |
+
.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title {
|
2184 |
+
padding: 10px 10px 10px 10px;
|
2185 |
+
}
|
2186 |
+
.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc {
|
2187 |
+
padding: 10px 10px 10px 10px;
|
2188 |
+
}
|
2189 |
+
.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc {
|
2190 |
+
padding: 0 10px 10px 10px;
|
2191 |
+
}
|
2192 |
+
|
2193 |
+
/* Theme - Default (Light) */
|
2194 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,
|
2195 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container,
|
2196 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,
|
2197 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,
|
2198 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next {
|
2199 |
+
background-color: #FFF;
|
2200 |
+
color: #333;
|
2201 |
+
border-color: #FFF;
|
2202 |
+
}
|
2203 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover,
|
2204 |
+
.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover {
|
2205 |
+
background-color: #F2F2F2;
|
2206 |
+
}
|
2207 |
+
.fg-image-viewer.fg-light .fiv-prev,
|
2208 |
+
.fg-image-viewer.fg-light .fiv-next {
|
2209 |
+
box-shadow: inset 0 0 0 1px #ddd;
|
2210 |
+
}
|
2211 |
+
|
2212 |
+
/* Theme - Dark */
|
2213 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,
|
2214 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container,
|
2215 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,
|
2216 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,
|
2217 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next {
|
2218 |
+
background-color: #333;
|
2219 |
+
color: #FFF;
|
2220 |
+
border-color: #333;
|
2221 |
+
}
|
2222 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover,
|
2223 |
+
.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover {
|
2224 |
+
background-color: #444;
|
2225 |
+
}
|
2226 |
+
.fg-image-viewer.fg-dark .fiv-prev,
|
2227 |
+
.fg-image-viewer.fg-dark .fiv-next {
|
2228 |
+
box-shadow: inset 0 0 0 1px #222;
|
2229 |
+
}
|
2230 |
+
|
2231 |
+
/* Border Size */
|
2232 |
+
.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner,
|
2233 |
+
.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,
|
2234 |
+
.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner {
|
2235 |
+
border-width: 0;
|
2236 |
+
}
|
2237 |
+
.foogallery.fg-image-viewer .fiv-ctrls,
|
2238 |
+
.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container {
|
2239 |
+
border-width: 4px;
|
2240 |
+
}
|
2241 |
+
.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,
|
2242 |
+
.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container {
|
2243 |
+
border-width: 10px;
|
2244 |
+
}
|
2245 |
+
.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,
|
2246 |
+
.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container {
|
2247 |
+
border-width: 16px;
|
2248 |
+
}
|
2249 |
+
.foogallery.fg-image-viewer .fiv-ctrls,
|
2250 |
+
.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls,
|
2251 |
+
.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,
|
2252 |
+
.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls {
|
2253 |
+
border-top-width: 1px;
|
2254 |
+
}
|
2255 |
+
|
2256 |
+
/* Rounded Corners */
|
2257 |
+
.foogallery.fg-image-viewer.fg-round-small .fg-item,
|
2258 |
+
.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,
|
2259 |
+
.foogallery.fg-image-viewer.fg-round-small .fiv-inner {
|
2260 |
+
border-radius: 5px;
|
2261 |
+
}
|
2262 |
+
.foogallery.fg-image-viewer.fg-round-small .fg-item,
|
2263 |
+
.foogallery.fg-image-viewer.fg-round-small .fg-item-inner {
|
2264 |
+
border-bottom-left-radius: 0;
|
2265 |
+
border-bottom-right-radius: 0;
|
2266 |
+
}
|
2267 |
+
.foogallery.fg-image-viewer.fg-round-small .fiv-prev,
|
2268 |
+
.foogallery.fg-image-viewer.fg-round-small .fiv-next {
|
2269 |
+
border-radius: 3px;
|
2270 |
+
}
|
2271 |
+
|
2272 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,
|
2273 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,
|
2274 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev,
|
2275 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,
|
2276 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,
|
2277 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,
|
2278 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,
|
2279 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,
|
2280 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,
|
2281 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,
|
2282 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,
|
2283 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next {
|
2284 |
+
border-radius: 3px;
|
2285 |
+
}
|
2286 |
+
|
2287 |
+
.foogallery.fg-image-viewer.fg-round-medium .fg-item,
|
2288 |
+
.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,
|
2289 |
+
.foogallery.fg-image-viewer.fg-round-medium .fiv-inner {
|
2290 |
+
border-radius: 10px;
|
2291 |
+
}
|
2292 |
+
.foogallery.fg-image-viewer.fg-round-medium .fg-item,
|
2293 |
+
.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner {
|
2294 |
+
border-bottom-left-radius: 0;
|
2295 |
+
border-bottom-right-radius: 0;
|
2296 |
+
}
|
2297 |
+
.foogallery.fg-image-viewer.fg-round-medium .fiv-prev,
|
2298 |
+
.foogallery.fg-image-viewer.fg-round-medium .fiv-next {
|
2299 |
+
border-radius: 5px;
|
2300 |
+
}
|
2301 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,
|
2302 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,
|
2303 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev,
|
2304 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next {
|
2305 |
+
border-radius: 5px;
|
2306 |
+
}
|
2307 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,
|
2308 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,
|
2309 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,
|
2310 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,
|
2311 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,
|
2312 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,
|
2313 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev,
|
2314 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next {
|
2315 |
+
border-radius: 3px;
|
2316 |
+
}
|
2317 |
+
|
2318 |
+
.foogallery.fg-image-viewer.fg-round-large .fg-item,
|
2319 |
+
.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,
|
2320 |
+
.foogallery.fg-image-viewer.fg-round-large .fiv-inner {
|
2321 |
+
border-radius: 15px;
|
2322 |
+
}
|
2323 |
+
.foogallery.fg-image-viewer.fg-round-large .fg-item,
|
2324 |
+
.foogallery.fg-image-viewer.fg-round-large .fg-item-inner {
|
2325 |
+
border-bottom-left-radius: 0;
|
2326 |
+
border-bottom-right-radius: 0;
|
2327 |
+
}
|
2328 |
+
.foogallery.fg-image-viewer.fg-round-large .fiv-prev,
|
2329 |
+
.foogallery.fg-image-viewer.fg-round-large .fiv-next {
|
2330 |
+
border-radius: 11px;
|
2331 |
+
}
|
2332 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,
|
2333 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,
|
2334 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev,
|
2335 |
+
.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next {
|
2336 |
+
border-radius: 11px;
|
2337 |
+
}
|
2338 |
+
|
2339 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,
|
2340 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,
|
2341 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev,
|
2342 |
+
.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next {
|
2343 |
+
border-radius: 5px;
|
2344 |
+
}
|
2345 |
+
|
2346 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,
|
2347 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,
|
2348 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev,
|
2349 |
+
.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next {
|
2350 |
+
border-radius: 3px;
|
2351 |
+
}
|
2352 |
+
|
2353 |
+
.foogallery.fg-image-viewer.fg-round-full .fiv-inner,
|
2354 |
+
.foogallery.fg-image-viewer.fg-round-full .fiv-prev,
|
2355 |
+
.foogallery.fg-image-viewer.fg-round-full .fiv-next {
|
2356 |
+
border-radius: 50%;
|
2357 |
+
}
|
2358 |
+
|
2359 |
+
/* Drop Shadows */
|
2360 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,
|
2361 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,
|
2362 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner,
|
2363 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,
|
2364 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,
|
2365 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,
|
2366 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,
|
2367 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner {
|
2368 |
+
box-shadow: none;
|
2369 |
+
}
|
2370 |
+
|
2371 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner {
|
2372 |
+
box-shadow: 0 0 0 1px #ddd;
|
2373 |
+
}
|
2374 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner {
|
2375 |
+
box-shadow: 0 0 0 1px #222;
|
2376 |
+
}
|
2377 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner,
|
2378 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner {
|
2379 |
+
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.5);
|
2380 |
+
}
|
2381 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner,
|
2382 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner {
|
2383 |
+
box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.5);
|
2384 |
+
}
|
2385 |
+
.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner,
|
2386 |
+
.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner {
|
2387 |
+
box-shadow: 0 1px 16px 0 rgba(0, 0, 0, 0.5);
|
2388 |
+
}
|
2389 |
+
.foogallery.fg-thumbnail,
|
2390 |
+
.foogallery.fg-thumbnail.fg-center {
|
2391 |
+
text-align: center;
|
2392 |
+
}
|
2393 |
+
.foogallery.fg-thumbnail.fg-left {
|
2394 |
+
float: left;
|
2395 |
+
}
|
2396 |
+
.foogallery.fg-thumbnail.fg-right {
|
2397 |
+
float: right;
|
2398 |
+
}
|
2399 |
+
|
2400 |
+
.foogallery.fg-thumbnail .fg-item {
|
2401 |
+
display: inline-block;
|
2402 |
+
vertical-align: top;
|
2403 |
+
max-width: 100%;
|
2404 |
+
}
|
2405 |
+
.foogallery.fg-thumbnail .fg-image {
|
2406 |
+
max-width: 100%;
|
2407 |
+
}
|
2408 |
+
.foogallery.fg-thumbnail .fg-st-hidden {
|
2409 |
+
display: none;
|
2410 |
}
|
extensions/default-templates/shared/css/foogallery.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.foogallery,.foogallery *{box-sizing:border-box}.foogallery{display:block;z-index:1;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;position:relative;line-height:0;font-size:0;width:100%;max-width:100%}.foogallery .fg-item{display:inline-block;position:relative;background-color:transparent;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.foogallery .fg-item-inner{display:block;position:relative;visibility:hidden;overflow:hidden;opacity:0;z-index:3;margin:0;border:solid 0 transparent}.foogallery .fg-item.fg-error,.foogallery .fg-item.fg-loading{background:no-repeat center}.foogallery .fg-item.fg-error{background-image:url(../img/image.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@3x.png)}}.foogallery .fg-item.fg-loaded{z-index:4}.foogallery .fg-loaded .fg-item-inner{visibility:visible;opacity:1;z-index:5}.foogallery .fg-error .fg-item-inner{pointer-events:none;cursor:default}.foogallery .fg-thumb{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:4}.foogallery .fg-image{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:5;max-width:none;height:auto;margin:0}.foogallery .fg-loaded .fg-thumb{z-index:6}.foogallery .fg-loaded .fg-image{z-index:7}.foogallery.fg-light .fg-item-inner{background-color:#fff;color:#333;border-color:#fff}.foogallery.fg-dark .fg-item-inner{background-color:#333;color:#fff;border-color:#333}.foogallery.fg-light .fg-item.fg-error,.foogallery.fg-light .fg-item.fg-idle,.foogallery.fg-light .fg-item.fg-loading{background-color:#eee;box-shadow:inset 0 0 0 1px #ddd}.foogallery.fg-dark .fg-item.fg-error,.foogallery.fg-dark .fg-item.fg-idle,.foogallery.fg-dark .fg-item.fg-loading{background-color:#444;box-shadow:inset 0 0 0 1px #333}.foogallery.fg-border-thin .fg-item-inner{border-width:4px}.foogallery.fg-border-medium .fg-item-inner{border-width:10px}.foogallery.fg-border-thick .fg-item-inner{border-width:16px}.foogallery.fg-light.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-dark.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-light.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-light.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-light.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-shadow-inset-small .fg-thumb:after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:7}.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%}.foogallery.fg-round-small .fg-item,.foogallery.fg-round-small .fg-item-inner{border-radius:5px}.foogallery.fg-round-medium .fg-item,.foogallery.fg-round-medium .fg-item-inner{border-radius:10px}.foogallery.fg-round-large .fg-item,.foogallery.fg-round-large .fg-item-inner{border-radius:15px}.foogallery.fg-round-full .fg-item,.foogallery.fg-round-full .fg-item-inner{border-radius:50%}.foogallery .fg-loader{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:1em;height:1em;font-size:5px;visibility:hidden;opacity:0}.foogallery .fg-loading .fg-loader{visibility:visible;opacity:1}.fg-loading-default .fg-loader{border-radius:50%;text-indent:-9999em;-webkit-animation:loading-default 1.1s infinite ease;animation:loading-default 1.1s infinite ease}@-webkit-keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}@keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}.fg-loading-bars .fg-loader,.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{background:rgba(130,130,130,1);-webkit-animation:loading-bars 1s infinite ease-in-out;animation:loading-bars 1s infinite ease-in-out;width:1em;height:4em}.fg-loading-bars .fg-loader{color:rgba(130,130,130,1);text-indent:-9999em;font-size:4px;-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{position:absolute;top:0;content:''}.fg-loading-bars .fg-loader:before{left:-1.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-bars .fg-loader:after{left:1.5em}@-webkit-keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}@keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}.fg-loading-trail .fg-loader{color:#828282;font-size:20px;text-indent:-9999em;overflow:hidden;border-radius:50%;-webkit-animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease;animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease}@-webkit-keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@-webkit-keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.fg-loading-pulse .fg-loader,.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{border-radius:50%;width:2.5em;height:2.5em;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation:loading-pulse 1.8s infinite ease-in-out;animation:loading-pulse 1.8s infinite ease-in-out}.fg-loading-pulse .fg-loader{color:#828282;font-size:4px;text-indent:-9999em;transform:translateX(-50%) translateY(-150%);-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{content:'';position:absolute;top:0}.fg-loading-pulse .fg-loader:before{left:-3.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-pulse .fg-loader:after{left:3.5em}@-webkit-keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}.fg-loading-dots .fg-loader{color:#828282;font-size:5px;border-radius:50%;text-indent:-9999em;-webkit-animation:loading-dots 1.3s infinite linear;animation:loading-dots 1.3s infinite linear}@-webkit-keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}.fg-loading-partial .fg-loader,.fg-loading-partial .fg-loader:after{border-radius:50%;width:10em;height:10em}.fg-loading-partial .fg-loader{font-size:4px;text-indent:-9999em;border-top:1.1em solid rgba(130,130,130,.2);border-right:1.1em solid rgba(130,130,130,.2);border-bottom:1.1em solid rgba(130,130,130,.2);border-left:1.1em solid #828282;-webkit-animation:loading-partial 1.1s infinite linear;animation:loading-partial 1.1s infinite linear}@-webkit-keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.foogallery.fg-loaded-drop .fg-item,.foogallery.fg-loaded-fade-in .fg-item,.foogallery.fg-loaded-flip .fg-item,.foogallery.fg-loaded-fly .fg-item,.foogallery.fg-loaded-scale-up .fg-item,.foogallery.fg-loaded-slide-down .fg-item,.foogallery.fg-loaded-slide-left .fg-item,.foogallery.fg-loaded-slide-right .fg-item,.foogallery.fg-loaded-slide-up .fg-item,.foogallery.fg-loaded-swing-down .fg-item{transition-timing-function:ease;transition-duration:650ms;transition-property:background-color,transform}.foogallery.fg-loaded-drop .fg-item-inner,.foogallery.fg-loaded-fade-in .fg-item-inner,.foogallery.fg-loaded-flip .fg-item-inner,.foogallery.fg-loaded-fly .fg-item-inner,.foogallery.fg-loaded-scale-up .fg-item-inner,.foogallery.fg-loaded-slide-down .fg-item-inner,.foogallery.fg-loaded-slide-left .fg-item-inner,.foogallery.fg-loaded-slide-right .fg-item-inner,.foogallery.fg-loaded-slide-up .fg-item-inner,.foogallery.fg-loaded-swing-down .fg-item-inner{transition-timing-function:ease;transition-duration:650ms}.foogallery.fg-loaded-drop .fg-item.fg-loaded,.foogallery.fg-loaded-flip .fg-item.fg-loaded,.foogallery.fg-loaded-fly .fg-item.fg-loaded,.foogallery.fg-loaded-swing-down .fg-item.fg-loaded{perspective:1300px}.foogallery.fg-loaded-fade-in .fg-item-inner{transition-property:visibility,opacity}.foogallery .fg-caption{visibility:hidden;opacity:0;background-color:rgba(0,0,0,.6);color:#fff;position:absolute;z-index:8;width:100%;max-height:100%;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3;border:none;text-align:center;cursor:pointer}.foogallery .fg-caption a{text-decoration:none;color:#fff;border-bottom:1px solid #fff}.foogallery .fg-caption a:hover{border-bottom:none}.foogallery .fg-caption-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:400;padding:5px}.foogallery .fg-caption-desc{padding:5px}.foogallery .fg-caption-title+.fg-caption-desc{padding-top:0}.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before{display:none}.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption{left:0;bottom:0;transition-timing-function:ease;transition-duration:.3s;transition-property:visibility,opacity;visibility:visible;opacity:1;text-align:left}.foogallery.fg-caption-hover .fg-caption .fg-caption-inner{width:100%;max-height:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-thumb:before{display:none}.foogallery.fg-hover-circle-plus .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{content:"";display:block;position:absolute;visibility:hidden;opacity:0;top:0;bottom:0;left:0;right:0;z-index:8;background:rgba(0,0,0,.5) no-repeat center center;background-size:32px 32px}.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-circle-plus .fg-thumb:focus:before,.foogallery.fg-hover-external .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:focus:before,.foogallery.fg-hover-eye .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:focus:before,.foogallery.fg-hover-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:focus:before,.foogallery.fg-hover-tint .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:focus:before,.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:focus:before,.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:focus:before,.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:focus:before{visibility:visible;opacity:1}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-tint .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-caption-inner:before{content:"";display:inline-block;position:relative;width:32px;height:32px;margin:10px 0 5px 0;background:transparent no-repeat center center;background-size:32px 32px;vertical-align:middle}.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@2x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@2x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@2x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@2x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@2x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@2x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@3x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@3x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@3x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@3x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@3x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@3x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@3x.png)}}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,.foogallery.fg-caption-hover.fg-hover-push .fg-caption,.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,.foogallery.fg-hover-colorize .fg-image,.foogallery.fg-hover-colorize .fg-thumb:before,.foogallery.fg-hover-fade .fg-thumb:before,.foogallery.fg-hover-grayscale .fg-image,.foogallery.fg-hover-grayscale .fg-thumb:before,.foogallery.fg-hover-instant .fg-thumb:before,.foogallery.fg-hover-push .fg-thumb,.foogallery.fg-hover-scale .fg-item,.foogallery.fg-hover-scale .fg-thumb:before,.foogallery.fg-hover-slide-down .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-thumb:before{transition-timing-function:ease;transition-duration:.3s}.foogallery.fg-hover-colorize .fg-image{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image{-webkit-filter:none;filter:none}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-hover-colorize .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-hover-grayscale .fg-image{-webkit-filter:none;filter:none;-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);filter:gray;opacity:1}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-hover-grayscale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:none}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transform:translateX(100%);visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb{transition-property:transform}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption{transform:translateY(0)}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb{transform:translateX(-100%)}.foogallery.fg-hover-scale .fg-item{transition-property:transform;z-index:4}.foogallery.fg-hover-scale .fg-item:hover{transform:scale(1.048);z-index:10}.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-hover-scale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-scale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:transform;visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-thumb:before{transform:translateY(0) translateX(0)}.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{transform:translateY(100%)}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before{transform:translateY(-100%)}.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before{transform:translateX(100%)}.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before{transform:translateX(-100%)}.fg-paging-container,.fg-paging-container *,.fg-paging-container :after,.fg-paging-container :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fg-paging-container{display:block;padding:15px;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.fg-paging-container .fg-dot-item,.fg-paging-container .fg-dots{display:inline-block;margin:0;padding:0;outline:0;list-style:none}.fg-paging-container .fg-dot-item .fg-dot-link{display:inline-block;margin:3px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;background-image:none;text-decoration:none;border:1px solid transparent;position:relative;border-radius:50%;padding:0;font-size:0;outline:0;color:transparent;box-shadow:none}.fg-paging-container .fg-dot-item .fg-dot-link:before{content:"";background-color:transparent;border:1px solid transparent;display:block;border-radius:50%;width:9px;height:9px;padding:0;margin:2px}.fg-paging-container .fg-dot-item .fg-dot-link:active,.fg-paging-container .fg-dot-item .fg-dot-link:focus,.fg-paging-container .fg-dot-item .fg-dot-link:hover{text-decoration:none;box-shadow:none;outline:0}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link{cursor:not-allowed;pointer-events:none}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link{cursor:not-allowed;pointer-events:none;outline:0}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link{background-color:#eee;border-color:#9e9e9e}.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link{border-color:#8a8a8a}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#666;border-color:#8a8a8a}.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#eee;border-color:#9e9e9e;opacity:.5}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link{background-color:#666;border-color:#333}.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link{border-color:#444}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#333;border-color:#444}.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#666;border-color:#333;opacity:.5}.fg-default:after{content:'';display:block;clear:both}.fg-default .fg-item,.fg-default .fg-item-inner,.fg-default .fg-thumb{display:inline-block;vertical-align:top;max-width:100%}.fg-default .fg-image{border-radius:0;display:block;max-width:100%;height:auto;margin:0;padding:0}.fg-default .fg-image{vertical-align:top}.fg-default.fg-left{text-align:left}.fg-default.fg-center{text-align:center}.fg-default.fg-right{text-align:right}.fg-default.fg-gutter-5{padding-left:5px;margin-bottom:-5px}.fg-default.fg-gutter-5 .fg-item{margin-right:5px;margin-bottom:5px}.fg-default.fg-gutter-10{padding-left:10px;margin-bottom:-10px}.fg-default.fg-gutter-10 .fg-item{margin-right:10px;margin-bottom:10px}.fg-default.fg-gutter-15{padding-left:15px;margin-bottom:-15px}.fg-default.fg-gutter-15 .fg-item{margin-right:15px;margin-bottom:15px}.fg-default.fg-gutter-20{padding-left:20px;margin-bottom:-20px}.fg-default.fg-gutter-20 .fg-item{margin-right:20px;margin-bottom:20px}.fg-default.fg-gutter-25{padding-left:25px;margin-bottom:-25px}.fg-default.fg-gutter-25 .fg-item{margin-right:25px;margin-bottom:25px}.fg-masonry *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.foogallery.fg-masonry.fg-center{margin:0 auto}.fg-masonry .fg-thumb{display:block}.fg-masonry.fg-masonry-fixed .fg-thumb{display:inline-block}.fg-masonry.fg-masonry-fixed .fg-image{max-width:100%}.fg-masonry .fg-column-width{display:inline-block;visibility:hidden;height:0;border:solid 0 transparent}.fg-masonry.fg-masonry-fixed .fg-column-width{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fg-masonry.fg-masonry-2col .fg-image,.fg-masonry.fg-masonry-3col .fg-image,.fg-masonry.fg-masonry-4col .fg-image,.fg-masonry.fg-masonry-5col .fg-image{width:100%;height:auto;max-width:100%}.fg-masonry .fg-item{line-height:0;font-size:0}.fg-masonry.fg-masonry-2col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-2col .fg-column-width{width:49%}.fg-masonry.fg-masonry-2col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-3col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-3col .fg-column-width{width:32%}.fg-masonry.fg-masonry-3col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-4col .fg-item{margin-bottom:1%;width:24%}.fg-masonry.fg-masonry-4col .fg-column-width{width:24%}.fg-masonry.fg-masonry-4col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item{margin-bottom:0;width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width{width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item{margin-bottom:3%;width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width{width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:19%}.fg-masonry.fg-masonry-5col .fg-column-width{width:19%}.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}@media screen and (max-width:720px){.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:32%}.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:480px){.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:49%}.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:320px){.fg-masonry.fg-masonry-2col .fg-item,.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:100%}.fg-masonry.fg-masonry-2col .fg-column-width,.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col .fg-gutter-width,.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:0}}.foogallery.fg-border-thin .fg-column-width{border-width:5px}.foogallery.fg-border-medium .fg-column-width{border-width:10px}.foogallery.fg-border-thick .fg-column-width{border-width:15px}.fg-justified{box-sizing:border-box;position:relative}.foogallery.fg-justified .fg-image,.foogallery.fg-justified .fg-item,.foogallery.fg-justified .fg-item-inner,.foogallery.fg-justified .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0}.fg-justified .fg-item{visibility:visible;position:absolute}.fg-justified .fg-item-inner{position:relative;width:100%;height:100%}.fg-justified .fg-thumb{position:relative;overflow:hidden}.fg-justified .fg-image{z-index:1}.fg-justified .fg-item.fg-positioned .fg-thumb{width:100%;height:100%}.fg-justified .fg-item.fg-positioned .fg-image{width:100%;height:auto;min-height:100%}.fg-simple_portfolio{box-sizing:border-box;position:relative;font-size:16px;margin:0 auto;padding:0;width:100%}.fg-simple_portfolio .fg-item{position:absolute;display:inline-block;margin:0;padding:0;outline:0}.fg-simple_portfolio .fg-image,.fg-simple_portfolio .fg-item-inner,.fg-simple_portfolio .fg-thumb{display:block;margin:0;padding:0;outline:0}.fg-simple_portfolio .fg-item-inner{position:relative;width:100%;height:100%}.fg-simple_portfolio .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0;border:none;outline:0;position:relative;overflow:hidden}.fg-simple_portfolio .fg-item.fg-positioned .fg-image{width:100%;height:auto}.fg-simple_portfolio .fg-image{z-index:1}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner{display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-simple_portfolio .fg-caption-title{text-align:left}.fg-simple_portfolio .fg-caption-desc{text-align:justify}.fg-simple_portfolio.fg-dark .fg-caption,.fg-simple_portfolio.fg-light .fg-caption{color:#828282}.fg-simple_portfolio.fg-dark .fg-caption a,.fg-simple_portfolio.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-simple_portfolio.fg-dark .fg-caption a:hover,.fg-simple_portfolio.fg-light .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-light .fg-caption-title,.fg-simple_portfolio.fg-light .fg-caption-title a{color:#222}.fg-simple_portfolio.fg-dark .fg-caption-title,.fg-simple_portfolio.fg-dark .fg-caption-title a{color:#fff}.fg-simple_portfolio.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-simple_portfolio.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-simple_portfolio.fg-captions-top .fg-item.fg-positioned .fg-thumb{position:absolute;bottom:0;left:0}.fg-simple_portfolio .fg-caption{border-width:10px}.fg-simple_portfolio .fg-caption-title+.fg-caption-desc{margin-top:5px}.fg-simple_portfolio.fg-border-thin .fg-caption{border-width:10px 5px 5px 5px}.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption{border-width:5px 5px 10px 5px}.fg-simple_portfolio.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.fg-simple_portfolio.fg-border-thick .fg-caption{border-width:15px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 15px 0}.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.foogallery.fg-preset.fg-polaroid .fg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .35s,background-color .65s;transition:transform .35s,background-color .65s}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1){-webkit-transform:rotate(3deg);transform:rotate(3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n){-webkit-transform:rotate(-3deg);transform:rotate(-3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n){-webkit-transform:rotate(1deg);transform:rotate(1deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n){-webkit-transform:rotate(-2deg);transform:rotate(-2deg)}.foogallery.fg-preset.fg-polaroid .fg-item:hover{-webkit-transform:rotate(0);transform:rotate(0)}.foogallery.fg-preset.fg-polaroid .fg-caption{position:relative;width:auto;font-family:"Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.foogallery.fg-preset.fg-polaroid .fg-caption-inner,.foogallery.fg-preset.fg-polaroid .fg-caption-title{position:relative;width:auto}.foogallery.fg-preset.fg-polaroid .fg-caption-title{text-align:center}.foogallery.fg-preset.fg-polaroid .fg-caption-desc{display:none}.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title,.foogallery.fg-preset.fg-polaroid .fg-caption-title{color:#333}.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title{color:#fff}.foogallery.fg-preset.fg-polaroid .fg-caption{border-style:solid;border-color:transparent;border-width:10px}.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc{margin-top:5px}.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption{border-width:10px 5px 5px 5px}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption{border-width:5px 5px 10px 5px}.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption{border-width:10px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption{border-width:15px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 15px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-image-viewer{display:block;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif}.fg-image-viewer.fg-left{text-align:left}.fg-image-viewer.fg-center{text-align:center}.fg-image-viewer.fg-right{text-align:right}.fiv-inner{position:relative;display:inline-block;max-width:100%;overflow:hidden;z-index:6}.fiv-inner .fiv-inner-container{position:relative;overflow:hidden;max-width:100%;border-style:solid;border-width:0;border-bottom-width:4px;z-index:5}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited{position:relative;display:block;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item{position:relative;visibility:visible;opacity:1;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img{display:block;max-width:100%;height:auto;border:none;outline:0;text-decoration:none}.fg-image-viewer .fiv-inner .fiv-ctrls{display:block;text-align:center;font-size:14px;border-style:solid;line-height:34px}.fg-image-viewer .fiv-inner .fiv-ctrls:after{content:'';display:block;clear:both}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count{display:inline-block;font-weight:400;margin:0}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;min-width:80px;position:relative;overflow:hidden;transition:background-color .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{display:block;position:absolute;font-size:24px;line-height:30px;top:0;left:0;width:100%;transform:translateY(0);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before{transform:translateY(-100%)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span{display:block;width:100%;transform:translateY(100%);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span{transform:translateY(0)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{float:left}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{content:'\2190'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next{float:right}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before{content:'\2192'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span{margin:0 4px}/*!* Theme - Default (Light) *!*//*!* Theme - Dark *!*/.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption{padding:0;border:none;background:#000;background:-moz-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:-webkit-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(to right,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%)}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc{padding:0 10px 10px 10px}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container{background-color:#fff;color:#333;border-color:#fff}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#f2f2f2}.fg-image-viewer.fg-light .fiv-next,.fg-image-viewer.fg-light .fiv-prev{box-shadow:inset 0 0 0 1px #ddd}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container{background-color:#333;color:#fff;border-color:#333}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#444}.fg-image-viewer.fg-dark .fiv-next,.fg-image-viewer.fg-dark .fiv-prev{box-shadow:inset 0 0 0 1px #222}.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner{border-width:0}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container{border-width:4px}.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container{border-width:10px}.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container{border-width:16px}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls{border-top-width:1px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-round-small .fiv-inner{border-radius:5px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-round-medium .fiv-inner{border-radius:10px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-round-large .fiv-inner{border-radius:15px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-full .fiv-inner,.foogallery.fg-image-viewer.fg-round-full .fiv-next,.foogallery.fg-image-viewer.fg-round-full .fiv-prev{border-radius:50%}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner{box-shadow:none}.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-thumbnail,.foogallery.fg-thumbnail.fg-center{text-align:center}.foogallery.fg-thumbnail.fg-left{float:left}.foogallery.fg-thumbnail.fg-right{float:right}.foogallery.fg-thumbnail .fg-item{display:inline-block;vertical-align:top;max-width:100%}.foogallery.fg-thumbnail .fg-image{max-width:100%}.foogallery.fg-thumbnail .fg-st-hidden{display:none}
|
1 |
+
.foogallery,.foogallery *{box-sizing:border-box}.foogallery{display:block;z-index:1;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;position:relative;line-height:0;font-size:0;width:100%;max-width:100%}.foogallery .fg-item{display:inline-block;position:relative;background-color:transparent;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.foogallery .fg-item-inner{display:block;position:relative;visibility:hidden;overflow:hidden;opacity:0;z-index:3;margin:0;border:solid 0 transparent}.foogallery .fg-item.fg-error,.foogallery .fg-item.fg-loading{background:no-repeat center}.foogallery .fg-item.fg-error{background-image:url(../img/image.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@3x.png)}}.foogallery .fg-item.fg-loaded{z-index:4}.foogallery .fg-loaded .fg-item-inner{visibility:visible;opacity:1;z-index:5}.foogallery .fg-error .fg-item-inner{pointer-events:none;cursor:default}.foogallery .fg-thumb{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:4}.foogallery .fg-image{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:5;max-width:none;height:auto;margin:0}.foogallery .fg-loaded .fg-thumb{z-index:6}.foogallery .fg-loaded .fg-image{z-index:7}.foogallery.fg-light .fg-item-inner{background-color:#fff;color:#333;border-color:#fff}.foogallery.fg-dark .fg-item-inner{background-color:#333;color:#fff;border-color:#333}.foogallery.fg-light .fg-item.fg-error,.foogallery.fg-light .fg-item.fg-idle,.foogallery.fg-light .fg-item.fg-loading{background-color:#eee;box-shadow:inset 0 0 0 1px #ddd}.foogallery.fg-dark .fg-item.fg-error,.foogallery.fg-dark .fg-item.fg-idle,.foogallery.fg-dark .fg-item.fg-loading{background-color:#444;box-shadow:inset 0 0 0 1px #333}.foogallery.fg-border-thin .fg-item-inner{border-width:4px}.foogallery.fg-border-medium .fg-item-inner{border-width:10px}.foogallery.fg-border-thick .fg-item-inner{border-width:16px}.foogallery.fg-light.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-dark.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-light.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-light.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-light.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-shadow-inset-small .fg-thumb:after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:7}.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%}.foogallery.fg-round-small .fg-item,.foogallery.fg-round-small .fg-item-inner{border-radius:5px}.foogallery.fg-round-medium .fg-item,.foogallery.fg-round-medium .fg-item-inner{border-radius:10px}.foogallery.fg-round-large .fg-item,.foogallery.fg-round-large .fg-item-inner{border-radius:15px}.foogallery.fg-round-full .fg-item,.foogallery.fg-round-full .fg-item-inner{border-radius:50%}.foogallery .fg-loader{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:1em;height:1em;font-size:5px;visibility:hidden;opacity:0}.foogallery .fg-loading .fg-loader{visibility:visible;opacity:1}.fg-loading-default .fg-loader{border-radius:50%;text-indent:-9999em;-webkit-animation:loading-default 1.1s infinite ease;animation:loading-default 1.1s infinite ease}@-webkit-keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}@keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}.fg-loading-bars .fg-loader,.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{background:rgba(130,130,130,1);-webkit-animation:loading-bars 1s infinite ease-in-out;animation:loading-bars 1s infinite ease-in-out;width:1em;height:4em}.fg-loading-bars .fg-loader{color:rgba(130,130,130,1);text-indent:-9999em;font-size:4px;-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{position:absolute;top:0;content:''}.fg-loading-bars .fg-loader:before{left:-1.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-bars .fg-loader:after{left:1.5em}@-webkit-keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}@keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}.fg-loading-trail .fg-loader{color:#828282;font-size:20px;text-indent:-9999em;overflow:hidden;border-radius:50%;-webkit-animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease;animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease}@-webkit-keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@-webkit-keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.fg-loading-pulse .fg-loader,.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{border-radius:50%;width:2.5em;height:2.5em;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation:loading-pulse 1.8s infinite ease-in-out;animation:loading-pulse 1.8s infinite ease-in-out}.fg-loading-pulse .fg-loader{color:#828282;font-size:4px;text-indent:-9999em;transform:translateX(-50%) translateY(-150%);-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{content:'';position:absolute;top:0}.fg-loading-pulse .fg-loader:before{left:-3.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-pulse .fg-loader:after{left:3.5em}@-webkit-keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}.fg-loading-dots .fg-loader{color:#828282;font-size:5px;border-radius:50%;text-indent:-9999em;-webkit-animation:loading-dots 1.3s infinite linear;animation:loading-dots 1.3s infinite linear}@-webkit-keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}.fg-loading-partial .fg-loader,.fg-loading-partial .fg-loader:after{border-radius:50%;width:10em;height:10em}.fg-loading-partial .fg-loader{font-size:4px;text-indent:-9999em;border-top:1.1em solid rgba(130,130,130,.2);border-right:1.1em solid rgba(130,130,130,.2);border-bottom:1.1em solid rgba(130,130,130,.2);border-left:1.1em solid #828282;-webkit-animation:loading-partial 1.1s infinite linear;animation:loading-partial 1.1s infinite linear}@-webkit-keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.foogallery.fg-loaded-drop .fg-item,.foogallery.fg-loaded-fade-in .fg-item,.foogallery.fg-loaded-flip .fg-item,.foogallery.fg-loaded-fly .fg-item,.foogallery.fg-loaded-scale-up .fg-item,.foogallery.fg-loaded-slide-down .fg-item,.foogallery.fg-loaded-slide-left .fg-item,.foogallery.fg-loaded-slide-right .fg-item,.foogallery.fg-loaded-slide-up .fg-item,.foogallery.fg-loaded-swing-down .fg-item{transition-timing-function:ease;transition-duration:650ms;transition-property:background-color,transform}.foogallery.fg-loaded-drop .fg-item-inner,.foogallery.fg-loaded-fade-in .fg-item-inner,.foogallery.fg-loaded-flip .fg-item-inner,.foogallery.fg-loaded-fly .fg-item-inner,.foogallery.fg-loaded-scale-up .fg-item-inner,.foogallery.fg-loaded-slide-down .fg-item-inner,.foogallery.fg-loaded-slide-left .fg-item-inner,.foogallery.fg-loaded-slide-right .fg-item-inner,.foogallery.fg-loaded-slide-up .fg-item-inner,.foogallery.fg-loaded-swing-down .fg-item-inner{transition-timing-function:ease;transition-duration:650ms}.foogallery.fg-loaded-drop .fg-item.fg-loaded,.foogallery.fg-loaded-flip .fg-item.fg-loaded,.foogallery.fg-loaded-fly .fg-item.fg-loaded,.foogallery.fg-loaded-swing-down .fg-item.fg-loaded{perspective:1300px}.foogallery.fg-loaded-fade-in .fg-item-inner{transition-property:visibility,opacity}.foogallery .fg-caption{visibility:hidden;opacity:0;background-color:rgba(0,0,0,.6);color:#fff;position:absolute;z-index:8;width:100%;max-height:100%;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3;border:none;text-align:center;cursor:pointer}.foogallery .fg-caption a{text-decoration:none;color:#fff;border-bottom:1px solid #fff}.foogallery .fg-caption a:hover{border-bottom:none}.foogallery .fg-caption-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:400;padding:5px}.foogallery .fg-caption-desc{padding:5px}.foogallery .fg-caption-title+.fg-caption-desc{padding-top:0}.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before{display:none}.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption{left:0;bottom:0;transition-timing-function:ease;transition-duration:.3s;transition-property:visibility,opacity;visibility:visible;opacity:1;text-align:left}.foogallery.fg-caption-hover .fg-caption .fg-caption-inner{width:100%;max-height:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-thumb:before{display:none}.foogallery.fg-hover-circle-plus .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{content:"";display:block;position:absolute;visibility:hidden;opacity:0;top:0;bottom:0;left:0;right:0;z-index:8;background:rgba(0,0,0,.5) no-repeat center center;background-size:32px 32px}.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-circle-plus .fg-thumb:focus:before,.foogallery.fg-hover-external .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:focus:before,.foogallery.fg-hover-eye .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:focus:before,.foogallery.fg-hover-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:focus:before,.foogallery.fg-hover-tint .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:focus:before,.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:focus:before,.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:focus:before,.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:focus:before{visibility:visible;opacity:1}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-tint .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-caption-inner:before{content:"";display:inline-block;position:relative;width:32px;height:32px;margin:10px 0 5px 0;background:transparent no-repeat center center;background-size:32px 32px;vertical-align:middle}.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@2x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@2x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@2x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@2x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@2x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@2x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@3x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@3x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@3x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@3x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@3x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@3x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@3x.png)}}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,.foogallery.fg-caption-hover.fg-hover-push .fg-caption,.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,.foogallery.fg-hover-colorize .fg-image,.foogallery.fg-hover-colorize .fg-thumb:before,.foogallery.fg-hover-fade .fg-thumb:before,.foogallery.fg-hover-grayscale .fg-image,.foogallery.fg-hover-grayscale .fg-thumb:before,.foogallery.fg-hover-instant .fg-thumb:before,.foogallery.fg-hover-push .fg-thumb,.foogallery.fg-hover-scale .fg-item,.foogallery.fg-hover-scale .fg-thumb:before,.foogallery.fg-hover-slide-down .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-thumb:before{transition-timing-function:ease;transition-duration:.3s}.foogallery.fg-hover-colorize .fg-image{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image{-webkit-filter:none;filter:none}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-hover-colorize .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-hover-grayscale .fg-image{-webkit-filter:none;filter:none;-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);filter:gray;opacity:1}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-hover-grayscale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:none}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transform:translateX(100%);visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb{transition-property:transform}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption{transform:translateY(0)}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb{transform:translateX(-100%)}.foogallery.fg-hover-scale .fg-item{transition-property:transform;z-index:4}.foogallery.fg-hover-scale .fg-item:hover{transform:scale(1.048);z-index:10}.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-hover-scale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity}.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-scale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:transform;visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-thumb:before{transform:translateY(0) translateX(0)}.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{transform:translateY(100%)}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before{transform:translateY(-100%)}.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before{transform:translateX(100%)}.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before{transform:translateX(-100%)}.fg-paging-container,.fg-paging-container *,.fg-paging-container :after,.fg-paging-container :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fg-paging-container{display:block;padding:15px;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.fg-paging-container .fg-dot-item,.fg-paging-container .fg-dots{display:inline-block;margin:0;padding:0;outline:0;list-style:none}.fg-paging-container .fg-dot-item .fg-dot-link{display:inline-block;margin:3px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;background-image:none;text-decoration:none;border:1px solid transparent;position:relative;border-radius:50%;padding:0;font-size:0;outline:0;color:transparent;box-shadow:none}.fg-paging-container .fg-dot-item .fg-dot-link:before{content:"";background-color:transparent;border:1px solid transparent;display:block;border-radius:50%;width:9px;height:9px;padding:0;margin:2px}.fg-paging-container .fg-dot-item .fg-dot-link:active,.fg-paging-container .fg-dot-item .fg-dot-link:focus,.fg-paging-container .fg-dot-item .fg-dot-link:hover{text-decoration:none;box-shadow:none;outline:0}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link{cursor:not-allowed;pointer-events:none}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link{cursor:not-allowed;pointer-events:none;outline:0}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link{background-color:#eee;border-color:#9e9e9e}.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link{border-color:#8a8a8a}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#666;border-color:#8a8a8a}.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#eee;border-color:#9e9e9e;opacity:.5}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link{background-color:#666;border-color:#333}.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link{border-color:#444}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#333;border-color:#444}.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#666;border-color:#333;opacity:.5}.fg-default:after{content:'';display:block;clear:both}.fg-default .fg-item,.fg-default .fg-item-inner,.fg-default .fg-thumb{display:inline-block;vertical-align:top;max-width:100%}.fg-default .fg-image{border-radius:0;display:block;max-width:100%;height:auto;margin:0;padding:0}.fg-default .fg-image{vertical-align:top}.fg-default.fg-left{text-align:left}.fg-default.fg-center{text-align:center}.fg-default.fg-right{text-align:right}.fg-default.fg-gutter-5{padding-left:5px;margin-bottom:-5px}.fg-default.fg-gutter-5 .fg-item{margin-right:5px;margin-bottom:5px}.fg-default.fg-gutter-10{padding-left:10px;margin-bottom:-10px}.fg-default.fg-gutter-10 .fg-item{margin-right:10px;margin-bottom:10px}.fg-default.fg-gutter-15{padding-left:15px;margin-bottom:-15px}.fg-default.fg-gutter-15 .fg-item{margin-right:15px;margin-bottom:15px}.fg-default.fg-gutter-20{padding-left:20px;margin-bottom:-20px}.fg-default.fg-gutter-20 .fg-item{margin-right:20px;margin-bottom:20px}.fg-default.fg-gutter-25{padding-left:25px;margin-bottom:-25px}.fg-default.fg-gutter-25 .fg-item{margin-right:25px;margin-bottom:25px}.fg-masonry *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.foogallery.fg-masonry.fg-center{margin:0 auto}.fg-masonry .fg-thumb{display:block}.fg-masonry.fg-masonry-fixed .fg-thumb{display:inline-block}.fg-masonry.fg-masonry-fixed .fg-image{max-width:100%}.fg-masonry .fg-column-width{display:inline-block;visibility:hidden;height:0;border:solid 0 transparent}.fg-masonry.fg-masonry-2col .fg-image,.fg-masonry.fg-masonry-3col .fg-image,.fg-masonry.fg-masonry-4col .fg-image,.fg-masonry.fg-masonry-5col .fg-image{width:100%;height:auto;max-width:100%}.fg-masonry .fg-item{line-height:0;font-size:0}.fg-masonry.fg-masonry-2col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-2col .fg-column-width{width:49%}.fg-masonry.fg-masonry-2col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-3col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-3col .fg-column-width{width:32%}.fg-masonry.fg-masonry-3col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-4col .fg-item{margin-bottom:1%;width:24%}.fg-masonry.fg-masonry-4col .fg-column-width{width:24%}.fg-masonry.fg-masonry-4col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item{margin-bottom:0;width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width{width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item{margin-bottom:3%;width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width{width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:19%}.fg-masonry.fg-masonry-5col .fg-column-width{width:19%}.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}@media screen and (max-width:720px){.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:32%}.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:480px){.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:49%}.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:320px){.fg-masonry.fg-masonry-2col .fg-item,.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:100%}.fg-masonry.fg-masonry-2col .fg-column-width,.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col .fg-gutter-width,.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:0}}.foogallery.fg-border-thin .fg-column-width{border-width:5px}.foogallery.fg-border-medium .fg-column-width{border-width:10px}.foogallery.fg-border-thick .fg-column-width{border-width:15px}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner{display:block;position:relative;max-height:none;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-masonry.fg-captions-bottom .fg-caption-desc,.fg-masonry.fg-captions-bottom .fg-caption-title{text-align:left}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption,.fg-masonry.fg-captions-bottom.fg-light .fg-caption{color:#828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a:hover,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{color:#222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{color:#fff}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-masonry.fg-captions-bottom .fg-caption{border-width:10px}.fg-masonry.fg-captions-bottom .fg-caption-title+.fg-caption-desc{margin-top:5px}.fg-masonry.fg-captions-bottom.fg-border-thin .fg-caption{border-width:10px 5px 5px 5px}.fg-masonry.fg-captions-bottom.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption{border-width:15px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-justified{box-sizing:border-box;position:relative}.foogallery.fg-justified .fg-image,.foogallery.fg-justified .fg-item,.foogallery.fg-justified .fg-item-inner,.foogallery.fg-justified .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0}.fg-justified .fg-item{visibility:visible;position:absolute}.fg-justified .fg-item-inner{position:relative;width:100%;height:100%}.fg-justified .fg-thumb{position:relative;overflow:hidden}.fg-justified .fg-image{z-index:1}.fg-justified .fg-item.fg-positioned .fg-thumb{width:100%;height:100%}.fg-justified .fg-item.fg-positioned .fg-image{width:100%;height:auto;min-height:100%}.fg-simple_portfolio{box-sizing:border-box;position:relative;font-size:16px;margin:0 auto;padding:0;width:100%}.fg-simple_portfolio .fg-item{position:absolute;display:inline-block;margin:0;padding:0;outline:0}.fg-simple_portfolio .fg-image,.fg-simple_portfolio .fg-item-inner,.fg-simple_portfolio .fg-thumb{display:block;margin:0;padding:0;outline:0}.fg-simple_portfolio .fg-item-inner{position:relative;width:100%;height:100%}.fg-simple_portfolio .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0;border:none;outline:0;position:relative;overflow:hidden}.fg-simple_portfolio .fg-item.fg-positioned .fg-image{width:100%;height:auto}.fg-simple_portfolio .fg-image{z-index:1}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner{display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-simple_portfolio .fg-caption-title{text-align:left}.fg-simple_portfolio .fg-caption-desc{text-align:justify}.fg-simple_portfolio.fg-dark .fg-caption,.fg-simple_portfolio.fg-light .fg-caption{color:#828282}.fg-simple_portfolio.fg-dark .fg-caption a,.fg-simple_portfolio.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-simple_portfolio.fg-dark .fg-caption a:hover,.fg-simple_portfolio.fg-light .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-light .fg-caption-title,.fg-simple_portfolio.fg-light .fg-caption-title a{color:#222}.fg-simple_portfolio.fg-dark .fg-caption-title,.fg-simple_portfolio.fg-dark .fg-caption-title a{color:#fff}.fg-simple_portfolio.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-simple_portfolio.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-simple_portfolio.fg-captions-top .fg-item.fg-positioned .fg-thumb{position:absolute;bottom:0;left:0}.fg-simple_portfolio .fg-caption{border-width:10px}.fg-simple_portfolio .fg-caption-title+.fg-caption-desc{margin-top:5px}.fg-simple_portfolio.fg-border-thin .fg-caption{border-width:10px 5px 5px 5px}.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption{border-width:5px 5px 10px 5px}.fg-simple_portfolio.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.fg-simple_portfolio.fg-border-thick .fg-caption{border-width:15px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 15px 0}.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.foogallery.fg-preset.fg-polaroid .fg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .35s,background-color .65s;transition:transform .35s,background-color .65s}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1){-webkit-transform:rotate(3deg);transform:rotate(3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n){-webkit-transform:rotate(-3deg);transform:rotate(-3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n){-webkit-transform:rotate(1deg);transform:rotate(1deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n){-webkit-transform:rotate(-2deg);transform:rotate(-2deg)}.foogallery.fg-preset.fg-polaroid .fg-item:hover{-webkit-transform:rotate(0);transform:rotate(0)}.foogallery.fg-preset.fg-polaroid .fg-caption{position:relative;width:auto;font-family:"Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.foogallery.fg-preset.fg-polaroid .fg-caption-inner,.foogallery.fg-preset.fg-polaroid .fg-caption-title{position:relative;width:auto}.foogallery.fg-preset.fg-polaroid .fg-caption-title{text-align:center}.foogallery.fg-preset.fg-polaroid .fg-caption-desc{display:none}.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title,.foogallery.fg-preset.fg-polaroid .fg-caption-title{color:#333}.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title{color:#fff}.foogallery.fg-preset.fg-polaroid .fg-caption{border-style:solid;border-color:transparent;border-width:10px}.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc{margin-top:5px}.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption{border-width:10px 5px 5px 5px}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption{border-width:5px 5px 10px 5px}.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption{border-width:10px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption{border-width:15px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 15px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-image-viewer{display:block;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif}.fg-image-viewer.fg-left{text-align:left}.fg-image-viewer.fg-center{text-align:center}.fg-image-viewer.fg-right{text-align:right}.fiv-inner{position:relative;display:inline-block;max-width:100%;overflow:hidden;z-index:6}.fiv-inner .fiv-inner-container{position:relative;overflow:hidden;max-width:100%;border-style:solid;border-width:0;border-bottom-width:4px;z-index:5}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited{position:relative;display:block;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item{position:relative;visibility:visible;opacity:1;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img{display:block;max-width:100%;height:auto;border:none;outline:0;text-decoration:none}.fg-image-viewer .fiv-inner .fiv-ctrls{display:block;text-align:center;font-size:14px;border-style:solid;line-height:34px}.fg-image-viewer .fiv-inner .fiv-ctrls:after{content:'';display:block;clear:both}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count{display:inline-block;font-weight:400;margin:0}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;min-width:80px;position:relative;overflow:hidden;transition:background-color .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{display:block;position:absolute;font-size:24px;line-height:30px;top:0;left:0;width:100%;transform:translateY(0);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before{transform:translateY(-100%)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span{display:block;width:100%;transform:translateY(100%);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span{transform:translateY(0)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{float:left}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{content:'\2190'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next{float:right}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before{content:'\2192'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span{margin:0 4px}/*!* Theme - Default (Light) *!*//*!* Theme - Dark *!*/.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption{padding:0;border:none;background:#000;background:-moz-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:-webkit-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(to right,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%)}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc{padding:0 10px 10px 10px}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container{background-color:#fff;color:#333;border-color:#fff}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#f2f2f2}.fg-image-viewer.fg-light .fiv-next,.fg-image-viewer.fg-light .fiv-prev{box-shadow:inset 0 0 0 1px #ddd}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container{background-color:#333;color:#fff;border-color:#333}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#444}.fg-image-viewer.fg-dark .fiv-next,.fg-image-viewer.fg-dark .fiv-prev{box-shadow:inset 0 0 0 1px #222}.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner{border-width:0}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container{border-width:4px}.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container{border-width:10px}.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container{border-width:16px}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls{border-top-width:1px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-round-small .fiv-inner{border-radius:5px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-round-medium .fiv-inner{border-radius:10px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-round-large .fiv-inner{border-radius:15px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-full .fiv-inner,.foogallery.fg-image-viewer.fg-round-full .fiv-next,.foogallery.fg-image-viewer.fg-round-full .fiv-prev{border-radius:50%}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner{box-shadow:none}.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-thumbnail,.foogallery.fg-thumbnail.fg-center{text-align:center}.foogallery.fg-thumbnail.fg-left{float:left}.foogallery.fg-thumbnail.fg-right{float:right}.foogallery.fg-thumbnail .fg-item{display:inline-block;vertical-align:top;max-width:100%}.foogallery.fg-thumbnail .fg-image{max-width:100%}.foogallery.fg-thumbnail .fg-st-hidden{display:none}
|
extensions/default-templates/shared/js/foogallery.js
CHANGED
@@ -1,7613 +1,7647 @@
|
|
1 |
-
(function($, _){
|
2 |
-
|
3 |
-
/**
|
4 |
-
* @summary A reference to the jQuery object the plugin is registered with.
|
5 |
-
* @memberof FooGallery
|
6 |
-
* @name $
|
7 |
-
* @type {jQuery}
|
8 |
-
* @description This is used internally for all jQuery operations to help work around issues where multiple jQuery libraries have been included in a single page.
|
9 |
-
* @example {@caption The following shows the issue when multiple jQuery's are included in a single page.}{@lang xml}
|
10 |
-
* <script src="jquery-1.12.4.js"></script>
|
11 |
-
* <script src="foogallery.js"></script>
|
12 |
-
* <script src="jquery-2.2.4.js"></script>
|
13 |
-
* <script>
|
14 |
-
* jQuery(function($){
|
15 |
-
* $(".selector").foogallery(); // => This would throw a TypeError: $(...).foogallery is not a function
|
16 |
-
* });
|
17 |
-
* </script>
|
18 |
-
* @example {@caption The reason the above throws an error is that the `$.fn.foogallery` function is registered to the first instance of jQuery in the page however the instance used to create the ready callback and actually try to execute `$(...).foogallery()` is the second. To resolve this issue ideally you would remove the second instance of jQuery however you can use the `FooGallery.$` member to ensure you are always working with the instance of jQuery the plugin was registered with.}{@lang xml}
|
19 |
-
* <script src="jquery-1.12.4.js"></script>
|
20 |
-
* <script src="foogallery.js"></script>
|
21 |
-
* <script src="jquery-2.2.4.js"></script>
|
22 |
-
* <script>
|
23 |
-
* FooGallery.$(function($){
|
24 |
-
* $(".selector").foogallery(); // => It works!
|
25 |
-
* });
|
26 |
-
* </script>
|
27 |
-
*/
|
28 |
-
_.$ = $;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* @summary The jQuery plugin namespace.
|
32 |
-
* @external "jQuery.fn"
|
33 |
-
* @see {@link http://learn.jquery.com/plugins/basic-plugin-creation/|How to Create a Basic Plugin | jQuery Learning Center}
|
34 |
-
*/
|
35 |
-
})(
|
36 |
-
// dependencies
|
37 |
-
jQuery,
|
38 |
-
/**
|
39 |
-
* @summary The core namespace for the plugin containing all its code.
|
40 |
-
* @namespace FooGallery
|
41 |
-
* @description This plugin houses all it's code within a single `FooGallery` global variable to prevent polluting the global namespace and to make accessing its various members simpler.
|
42 |
-
* @example {@caption As this namespace is registered as a global on the `window` object, it can be accessed using the `window.` prefix.}
|
43 |
-
* var fg = window.FooGallery;
|
44 |
-
* @example {@caption Or without it.}
|
45 |
-
* var fg = FooGallery;
|
46 |
-
* @example {@caption When using this namespace I would recommend aliasing it to a short variable name such as `fg` or as used internally `_`.}
|
47 |
-
* // alias the FooGallery namespace
|
48 |
-
* var _ = FooGallery;
|
49 |
-
* @example {@caption This is not required but lets us write less code and allows the alias to be minified by compressors like UglifyJS. How you choose to alias the namespace is up to you. You can use the simple `var` method as seen above or supply the namespace as a parameter when creating a new scope as seen below.}
|
50 |
-
* // create a new scope to work in passing the namespace as a parameter
|
51 |
-
* (function(_){
|
52 |
-
*
|
53 |
-
* // use `_.` to access members and methods
|
54 |
-
*
|
55 |
-
* })(FooGallery);
|
56 |
-
*/
|
57 |
-
window.FooGallery = window.FooGallery || {}
|
58 |
-
);
|
59 |
-
/*!
|
60 |
-
* FooGallery.utils - Contains common utility methods and classes used in our plugins.
|
61 |
-
* @version 0.0.5
|
62 |
-
* @link https://github.com/steveush/foo-utils#readme
|
63 |
-
* @copyright Steve Usher 2017
|
64 |
-
* @license Released under the GPL-3.0 license.
|
65 |
-
*/
|
66 |
-
/**
|
67 |
-
* @file This creates the global FooGallery.utils namespace ensuring it only registers itself if the namespace doesn't already exist or if the current version is lower than this one.
|
68 |
-
*/
|
69 |
-
(function ($) {
|
70 |
-
|
71 |
-
if (!$){
|
72 |
-
console.warn('jQuery must be included in the page prior to the FooGallery.utils library.');
|
73 |
-
return;
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
* @summary This namespace contains common utility methods and code shared between our plugins.
|
78 |
-
* @namespace FooGallery.utils
|
79 |
-
* @description This namespace relies on jQuery being included in the page prior to it being loaded.
|
80 |
-
*/
|
81 |
-
var utils = {
|
82 |
-
/**
|
83 |
-
* @summary A reference to the jQuery object the library is registered with.
|
84 |
-
* @memberof FooGallery.utils
|
85 |
-
* @name $
|
86 |
-
* @type {jQuery}
|
87 |
-
* @description This is used internally for all jQuery operations to help work around issues where multiple jQuery libraries have been included in a single page.
|
88 |
-
* @example {@caption The following shows the issue when multiple jQuery's are included in a single page.}{@lang html}
|
89 |
-
* <script src="jquery-1.12.4.js"></script>
|
90 |
-
* <script src="my-plugin.js"></script>
|
91 |
-
* <script src="jquery-2.2.4.js"></script>
|
92 |
-
* <script>
|
93 |
-
* jQuery(function($){
|
94 |
-
* $(".selector").myPlugin(); // => This would throw a TypeError: $(...).myPlugin is not a function
|
95 |
-
* });
|
96 |
-
* </script>
|
97 |
-
* @example {@caption The reason the above throws an error is that the `$.fn.myPlugin` function is registered to the first instance of jQuery in the page however the instance used to create the ready callback and actually try to execute `$(...).myPlugin()` is the second. To resolve this issue ideally you would remove the second instance of jQuery however you can use the `FooGallery.utils.$` member to ensure you are always working with the instance of jQuery the library was registered with.}{@lang html}
|
98 |
-
* <script src="jquery-1.12.4.js"></script>
|
99 |
-
* <script src="my-plugin.js"></script>
|
100 |
-
* <script src="jquery-2.2.4.js"></script>
|
101 |
-
* <script>
|
102 |
-
* FooGallery.utils.$(function($){
|
103 |
-
* $(".selector").myPlugin(); // => It works!
|
104 |
-
* });
|
105 |
-
* </script>
|
106 |
-
*/
|
107 |
-
$: $,
|
108 |
-
/**
|
109 |
-
* @summary The version of this library.
|
110 |
-
* @memberof FooGallery.utils
|
111 |
-
* @name version
|
112 |
-
* @type {string}
|
113 |
-
*/
|
114 |
-
version: '0.0.5',
|
115 |
-
};
|
116 |
-
|
117 |
-
/**
|
118 |
-
* @summary Compares two version numbers.
|
119 |
-
* @memberof FooGallery.utils
|
120 |
-
* @function versionCompare
|
121 |
-
* @param {string} version1 - The first version to use in the comparison.
|
122 |
-
* @param {string} version2 - The second version to compare to the first.
|
123 |
-
* @returns {number} `0` if the version are equal.
|
124 |
-
* `-1` if `version1` is less than `version2`.
|
125 |
-
* `1` if `version1` is greater than `version2`.
|
126 |
-
* `NaN` if either of the supplied versions do not conform to MAJOR.MINOR.PATCH format.
|
127 |
-
* @description This method will compare two version numbers that conform to the basic MAJOR.MINOR.PATCH format returning the result as a simple number. This method will handle short version string comparisons e.g. `1.0` versus `1.0.1`.
|
128 |
-
* @example {@caption The following shows the results of comparing various version strings.}
|
129 |
-
* console.log( FooGallery.utils.versionCompare( "0", "0" ) ); // => 0
|
130 |
-
* console.log( FooGallery.utils.versionCompare( "0.0", "0" ) ); // => 0
|
131 |
-
* console.log( FooGallery.utils.versionCompare( "0.0", "0.0.0" ) ); // => 0
|
132 |
-
* console.log( FooGallery.utils.versionCompare( "0.1", "0.0.0" ) ); // => 1
|
133 |
-
* console.log( FooGallery.utils.versionCompare( "0.1", "0.0.1" ) ); // => 1
|
134 |
-
* console.log( FooGallery.utils.versionCompare( "1", "0.1" ) ); // => 1
|
135 |
-
* console.log( FooGallery.utils.versionCompare( "1.10", "1.9" ) ); // => 1
|
136 |
-
* console.log( FooGallery.utils.versionCompare( "1.9", "1.10" ) ); // => -1
|
137 |
-
* console.log( FooGallery.utils.versionCompare( "1", "1.1" ) ); // => -1
|
138 |
-
* console.log( FooGallery.utils.versionCompare( "1.0.9", "1.1" ) ); // => -1
|
139 |
-
* @example {@caption If either of the supplied version strings does not match the MAJOR.MINOR.PATCH format then `NaN` is returned.}
|
140 |
-
* console.log( FooGallery.utils.versionCompare( "not-a-version", "1.1" ) ); // => NaN
|
141 |
-
* console.log( FooGallery.utils.versionCompare( "1.1", "not-a-version" ) ); // => NaN
|
142 |
-
* console.log( FooGallery.utils.versionCompare( "not-a-version", "not-a-version" ) ); // => NaN
|
143 |
-
*/
|
144 |
-
utils.versionCompare = function(version1, version2){
|
145 |
-
// if either of the versions do not match the expected format return NaN
|
146 |
-
if (!(/[\d.]/.test(version1) && /[\d.]/.test(version2))) return NaN;
|
147 |
-
|
148 |
-
/**
|
149 |
-
* @summary Splits and parses the given version string into a numeric array.
|
150 |
-
* @param {string} version - The version string to split and parse.
|
151 |
-
* @returns {Array.<number>}
|
152 |
-
* @ignore
|
153 |
-
*/
|
154 |
-
function split(version){
|
155 |
-
var res = version.split('.');
|
156 |
-
for(var i = 0, len = res.length; i < len; i++){
|
157 |
-
res[i] = parseInt(res[i]);
|
158 |
-
if (isNaN(res[i])) res[i] = 0;
|
159 |
-
}
|
160 |
-
return res;
|
161 |
-
}
|
162 |
-
|
163 |
-
// get the base numeric arrays for each version
|
164 |
-
var v1parts = split(version1),
|
165 |
-
v2parts = split(version2);
|
166 |
-
|
167 |
-
// ensure both arrays are the same length by padding the shorter with 0
|
168 |
-
while (v1parts.length < v2parts.length) v1parts.push(0);
|
169 |
-
while (v2parts.length < v1parts.length) v2parts.push(0);
|
170 |
-
|
171 |
-
// perform the actual comparison
|
172 |
-
for (var i = 0; i < v1parts.length; ++i) {
|
173 |
-
if (v2parts.length == i) return 1;
|
174 |
-
if (v1parts[i] == v2parts[i]) continue;
|
175 |
-
if (v1parts[i] > v2parts[i]) return 1;
|
176 |
-
else return -1;
|
177 |
-
}
|
178 |
-
if (v1parts.length != v2parts.length) return -1;
|
179 |
-
return 0;
|
180 |
-
};
|
181 |
-
|
182 |
-
function __exists(){
|
183 |
-
try {
|
184 |
-
return !!window.FooGallery.utils; // does the namespace already exist?
|
185 |
-
} catch(err) {
|
186 |
-
return false;
|
187 |
-
}
|
188 |
-
}
|
189 |
-
|
190 |
-
if (__exists()){
|
191 |
-
// if it already exists always log a warning as there may be version conflicts as the following code always ensures the latest version is loaded
|
192 |
-
if (utils.versionCompare(utils.version, window.FooGallery.utils.version) > 0){
|
193 |
-
// if it exists but it's an old version replace it
|
194 |
-
console.warn("An older version of FooGallery.utils (" + window.FooGallery.utils.version + ") already exists in the page, version " + utils.version + " will override it.");
|
195 |
-
window.FooGallery.utils = utils;
|
196 |
-
} else {
|
197 |
-
// otherwise its a newer version so do nothing
|
198 |
-
console.warn("A newer version of FooGallery.utils (" + window.FooGallery.utils.version + ") already exists in the page, version " + utils.version + " will not register itself.");
|
199 |
-
}
|
200 |
-
} else {
|
201 |
-
// if it doesn't exist register it
|
202 |
-
window.FooGallery.utils = utils;
|
203 |
-
}
|
204 |
-
|
205 |
-
// at this point there will always be a FooGallery.utils namespace registered to the global scope.
|
206 |
-
|
207 |
-
})(jQuery);
|
208 |
-
(function ($, _){
|
209 |
-
// only register methods if this version is the current version
|
210 |
-
if (_.version !== '0.0.5') return;
|
211 |
-
|
212 |
-
/**
|
213 |
-
* @summary Contains common type checking utility methods.
|
214 |
-
* @memberof FooGallery.utils
|
215 |
-
* @namespace is
|
216 |
-
*/
|
217 |
-
_.is = {};
|
218 |
-
|
219 |
-
/**
|
220 |
-
* @summary Checks if the `value` is an array.
|
221 |
-
* @memberof FooGallery.utils.is
|
222 |
-
* @function array
|
223 |
-
* @param {*} value - The value to check.
|
224 |
-
* @returns {boolean} `true` if the supplied `value` is an array.
|
225 |
-
* @example {@run true}
|
226 |
-
* // alias the FooGallery.utils.is namespace
|
227 |
-
* var _is = FooGallery.utils.is;
|
228 |
-
*
|
229 |
-
* console.log( _is.array( [] ) ); // => true
|
230 |
-
* console.log( _is.array( null ) ); // => false
|
231 |
-
* console.log( _is.array( 123 ) ); // => false
|
232 |
-
* console.log( _is.array( "" ) ); // => false
|
233 |
-
*/
|
234 |
-
_.is.array = function (value) {
|
235 |
-
return '[object Array]' === Object.prototype.toString.call(value);
|
236 |
-
};
|
237 |
-
|
238 |
-
/**
|
239 |
-
* @summary Checks if the `value` is a boolean.
|
240 |
-
* @memberof FooGallery.utils.is
|
241 |
-
* @function boolean
|
242 |
-
* @param {*} value - The value to check.
|
243 |
-
* @returns {boolean} `true` if the supplied `value` is a boolean.
|
244 |
-
* @example {@run true}
|
245 |
-
* // alias the FooGallery.utils.is namespace
|
246 |
-
* var _is = FooGallery.utils.is;
|
247 |
-
*
|
248 |
-
* console.log( _is.boolean( true ) ); // => true
|
249 |
-
* console.log( _is.boolean( false ) ); // => true
|
250 |
-
* console.log( _is.boolean( "true" ) ); // => false
|
251 |
-
* console.log( _is.boolean( "false" ) ); // => false
|
252 |
-
* console.log( _is.boolean( 1 ) ); // => false
|
253 |
-
* console.log( _is.boolean( 0 ) ); // => false
|
254 |
-
*/
|
255 |
-
_.is.boolean = function (value) {
|
256 |
-
return '[object Boolean]' === Object.prototype.toString.call(value);
|
257 |
-
};
|
258 |
-
|
259 |
-
/**
|
260 |
-
* @summary Checks if the `value` is an element.
|
261 |
-
* @memberof FooGallery.utils.is
|
262 |
-
* @function element
|
263 |
-
* @param {*} value - The value to check.
|
264 |
-
* @returns {boolean} `true` if the supplied `value` is an element.
|
265 |
-
* @example {@run true}
|
266 |
-
* // alias the FooGallery.utils.is namespace
|
267 |
-
* var _is = FooGallery.utils.is,
|
268 |
-
* // create an element to test
|
269 |
-
* el = document.createElement("span");
|
270 |
-
*
|
271 |
-
* console.log( _is.element( el ) ); // => true
|
272 |
-
* console.log( _is.element( $(el) ) ); // => false
|
273 |
-
* console.log( _is.element( null ) ); // => false
|
274 |
-
* console.log( _is.element( {} ) ); // => false
|
275 |
-
*/
|
276 |
-
_.is.element = function (value) {
|
277 |
-
return typeof HTMLElement === 'object'
|
278 |
-
? value instanceof HTMLElement
|
279 |
-
: !!value && typeof value === 'object' && value !== null && value.nodeType === 1 && typeof value.nodeName === 'string';
|
280 |
-
};
|
281 |
-
|
282 |
-
/**
|
283 |
-
* @summary Checks if the `value` is empty.
|
284 |
-
* @memberof FooGallery.utils.is
|
285 |
-
* @function empty
|
286 |
-
* @param {*} value - The value to check.
|
287 |
-
* @returns {boolean} `true` if the supplied `value` is empty.
|
288 |
-
* @description The following values are considered to be empty by this method:
|
289 |
-
*
|
290 |
-
* <ul><!--
|
291 |
-
* --><li>`""` - An empty string</li><!--
|
292 |
-
* --><li>`0` - 0 as an integer</li><!--
|
293 |
-
* --><li>`0.0` - 0 as a float</li><!--
|
294 |
-
* --><li>`[]` - An empty array</li><!--
|
295 |
-
* --><li>`{}` - An empty object</li><!--
|
296 |
-
* --><li>`$()` - An empty jQuery object</li><!--
|
297 |
-
* --><li>`false`</li><!--
|
298 |
-
* --><li>`null`</li><!--
|
299 |
-
* --><li>`undefined`</li><!--
|
300 |
-
* --></ul>
|
301 |
-
* @example {@run true}
|
302 |
-
* // alias the FooGallery.utils.is namespace
|
303 |
-
* var _is = FooGallery.utils.is;
|
304 |
-
*
|
305 |
-
* console.log( _is.empty( undefined ) ); // => true
|
306 |
-
* console.log( _is.empty( null ) ); // => true
|
307 |
-
* console.log( _is.empty( 0 ) ); // => true
|
308 |
-
* console.log( _is.empty( 0.0 ) ); // => true
|
309 |
-
* console.log( _is.empty( "" ) ); // => true
|
310 |
-
* console.log( _is.empty( [] ) ); // => true
|
311 |
-
* console.log( _is.empty( {} ) ); // => true
|
312 |
-
* console.log( _is.empty( 1 ) ); // => false
|
313 |
-
* console.log( _is.empty( 0.1 ) ); // => false
|
314 |
-
* console.log( _is.empty( "one" ) ); // => false
|
315 |
-
* console.log( _is.empty( ["one"] ) ); // => false
|
316 |
-
* console.log( _is.empty( { "name": "My Object" } ) ); // => false
|
317 |
-
*/
|
318 |
-
_.is.empty = function(value){
|
319 |
-
if (_.is.undef(value) || value === null) return true;
|
320 |
-
if (_.is.number(value) && value == 0) return true;
|
321 |
-
if (_.is.boolean(value) && value === false) return true;
|
322 |
-
if (_.is.string(value) && value.length === 0) return true;
|
323 |
-
if (_.is.array(value) && value.length === 0) return true;
|
324 |
-
if (_.is.jq(value) && value.length === 0) return true;
|
325 |
-
if (_.is.hash(value)){
|
326 |
-
for(var prop in value) {
|
327 |
-
if(value.hasOwnProperty(prop))
|
328 |
-
return false;
|
329 |
-
}
|
330 |
-
return true;
|
331 |
-
}
|
332 |
-
return false;
|
333 |
-
};
|
334 |
-
|
335 |
-
/**
|
336 |
-
* @summary Checks if the `value` is an error.
|
337 |
-
* @memberof FooGallery.utils.is
|
338 |
-
* @function error
|
339 |
-
* @param {*} value - The value to check.
|
340 |
-
* @returns {boolean} `true` if the supplied `value` is an error.
|
341 |
-
* @example {@run true}
|
342 |
-
* // alias the FooGallery.utils.is namespace
|
343 |
-
* var _is = FooGallery.utils.is,
|
344 |
-
* // create some errors to test
|
345 |
-
* err1 = new Error("err1"),
|
346 |
-
* err2 = new SyntaxError("err2");
|
347 |
-
*
|
348 |
-
* console.log( _is.error( err1 ) ); // => true
|
349 |
-
* console.log( _is.error( err2 ) ); // => true
|
350 |
-
* console.log( _is.error( null ) ); // => false
|
351 |
-
* console.log( _is.error( 123 ) ); // => false
|
352 |
-
* console.log( _is.error( "" ) ); // => false
|
353 |
-
* console.log( _is.error( {} ) ); // => false
|
354 |
-
* console.log( _is.error( [] ) ); // => false
|
355 |
-
*/
|
356 |
-
_.is.error = function (value) {
|
357 |
-
return '[object Error]' === Object.prototype.toString.call(value);
|
358 |
-
};
|
359 |
-
|
360 |
-
/**
|
361 |
-
* @summary Checks if the `value` is a function.
|
362 |
-
* @memberof FooGallery.utils.is
|
363 |
-
* @function fn
|
364 |
-
* @param {*} value - The value to check.
|
365 |
-
* @returns {boolean} `true` if the supplied `value` is a function.
|
366 |
-
* @example {@run true}
|
367 |
-
* // alias the FooGallery.utils.is namespace
|
368 |
-
* var _is = FooGallery.utils.is,
|
369 |
-
* // create a function to test
|
370 |
-
* func = function(){};
|
371 |
-
*
|
372 |
-
* console.log( _is.fn( func ) ); // => true
|
373 |
-
* console.log( _is.fn( null ) ); // => false
|
374 |
-
* console.log( _is.fn( 123 ) ); // => false
|
375 |
-
* console.log( _is.fn( "" ) ); // => false
|
376 |
-
*/
|
377 |
-
_.is.fn = function (value) {
|
378 |
-
return value === window.alert || '[object Function]' === Object.prototype.toString.call(value);
|
379 |
-
};
|
380 |
-
|
381 |
-
/**
|
382 |
-
* @summary Checks if the `value` is a hash.
|
383 |
-
* @memberof FooGallery.utils.is
|
384 |
-
* @function hash
|
385 |
-
* @param {*} value - The value to check.
|
386 |
-
* @returns {boolean} `true` if the supplied `value` is a hash.
|
387 |
-
* @example {@run true}
|
388 |
-
* // alias the FooGallery.utils.is namespace
|
389 |
-
* var _is = FooGallery.utils.is;
|
390 |
-
*
|
391 |
-
* console.log( _is.hash( {"some": "prop"} ) ); // => true
|
392 |
-
* console.log( _is.hash( {} ) ); // => true
|
393 |
-
* console.log( _is.hash( window ) ); // => false
|
394 |
-
* console.log( _is.hash( document ) ); // => false
|
395 |
-
* console.log( _is.hash( "" ) ); // => false
|
396 |
-
* console.log( _is.hash( 123 ) ); // => false
|
397 |
-
*/
|
398 |
-
_.is.hash = function (value) {
|
399 |
-
return _.is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval;
|
400 |
-
};
|
401 |
-
|
402 |
-
/**
|
403 |
-
* @summary Checks if the `value` is a jQuery object.
|
404 |
-
* @memberof FooGallery.utils.is
|
405 |
-
* @function jq
|
406 |
-
* @param {*} value - The value to check.
|
407 |
-
* @returns {boolean} `true` if the supplied `value` is a jQuery object.
|
408 |
-
* @example {@run true}
|
409 |
-
* // alias the FooGallery.utils.is namespace
|
410 |
-
* var _is = FooGallery.utils.is,
|
411 |
-
* // create an element to test
|
412 |
-
* el = document.createElement("span");
|
413 |
-
*
|
414 |
-
* console.log( _is.jq( $(el) ) ); // => true
|
415 |
-
* console.log( _is.jq( $() ) ); // => true
|
416 |
-
* console.log( _is.jq( el ) ); // => false
|
417 |
-
* console.log( _is.jq( {} ) ); // => false
|
418 |
-
* console.log( _is.jq( null ) ); // => false
|
419 |
-
* console.log( _is.jq( 123 ) ); // => false
|
420 |
-
* console.log( _is.jq( "" ) ); // => false
|
421 |
-
*/
|
422 |
-
_.is.jq = function(value){
|
423 |
-
return !_.is.undef($) && value instanceof $;
|
424 |
-
};
|
425 |
-
|
426 |
-
/**
|
427 |
-
* @summary Checks if the `value` is a number.
|
428 |
-
* @memberof FooGallery.utils.is
|
429 |
-
* @function number
|
430 |
-
* @param {*} value - The value to check.
|
431 |
-
* @returns {boolean}
|
432 |
-
* @example {@run true}
|
433 |
-
* // alias the FooGallery.utils.is namespace
|
434 |
-
* var _is = FooGallery.utils.is;
|
435 |
-
*
|
436 |
-
* console.log( _is.number( 123 ) ); // => true
|
437 |
-
* console.log( _is.number( undefined ) ); // => false
|
438 |
-
* console.log( _is.number( null ) ); // => false
|
439 |
-
* console.log( _is.number( "" ) ); // => false
|
440 |
-
*/
|
441 |
-
_.is.number = function (value) {
|
442 |
-
return '[object Number]' === Object.prototype.toString.call(value) && !isNaN(value);
|
443 |
-
};
|
444 |
-
|
445 |
-
/**
|
446 |
-
* @summary Checks if the `value` is an object.
|
447 |
-
* @memberof FooGallery.utils.is
|
448 |
-
* @function object
|
449 |
-
* @param {*} value - The value to check.
|
450 |
-
* @returns {boolean} `true` if the supplied `value` is an object.
|
451 |
-
* @example {@run true}
|
452 |
-
* // alias the FooGallery.utils.is namespace
|
453 |
-
* var _is = FooGallery.utils.is;
|
454 |
-
*
|
455 |
-
* console.log( _is.object( {"some": "prop"} ) ); // => true
|
456 |
-
* console.log( _is.object( {} ) ); // => true
|
457 |
-
* console.log( _is.object( window ) ); // => true
|
458 |
-
* console.log( _is.object( document ) ); // => true
|
459 |
-
* console.log( _is.object( undefined ) ); // => false
|
460 |
-
* console.log( _is.object( null ) ); // => false
|
461 |
-
* console.log( _is.object( "" ) ); // => false
|
462 |
-
* console.log( _is.object( 123 ) ); // => false
|
463 |
-
*/
|
464 |
-
_.is.object = function (value) {
|
465 |
-
return '[object Object]' === Object.prototype.toString.call(value) && !_.is.undef(value) && value !== null;
|
466 |
-
};
|
467 |
-
|
468 |
-
/**
|
469 |
-
* @summary Checks if the `value` is a promise.
|
470 |
-
* @memberof FooGallery.utils.is
|
471 |
-
* @function promise
|
472 |
-
* @param {*} value - The object to check.
|
473 |
-
* @returns {boolean} `true` if the supplied `value` is an object.
|
474 |
-
* @description This is a simple check to determine if an object is a jQuery promise object. It simply checks the object has a `then` and `promise` function defined.
|
475 |
-
*
|
476 |
-
* The promise object is created as an object literal inside of `jQuery.Deferred`, it has no prototype, nor any other truly unique properties that could be used to distinguish it.
|
477 |
-
*
|
478 |
-
* This method should be a little more accurate than the internal jQuery one that simply checks for a `promise` function.
|
479 |
-
* @example {@run true}
|
480 |
-
* // alias the FooGallery.utils.is namespace
|
481 |
-
* var _is = FooGallery.utils.is;
|
482 |
-
*
|
483 |
-
* console.log( _is.promise( $.Deferred() ) ); // => true
|
484 |
-
* console.log( _is.promise( {} ) ); // => false
|
485 |
-
* console.log( _is.promise( undefined ) ); // => false
|
486 |
-
* console.log( _is.promise( null ) ); // => false
|
487 |
-
* console.log( _is.promise( "" ) ); // => false
|
488 |
-
* console.log( _is.promise( 123 ) ); // => false
|
489 |
-
*/
|
490 |
-
_.is.promise = function(value){
|
491 |
-
return _.is.object(value) && _.is.fn(value.then) && _.is.fn(value.promise);
|
492 |
-
};
|
493 |
-
|
494 |
-
/**
|
495 |
-
* @summary Checks if the `value` is a valid CSS length.
|
496 |
-
* @memberof FooGallery.utils.is
|
497 |
-
* @function size
|
498 |
-
* @param {*} value - The value to check.
|
499 |
-
* @returns {boolean} `true` if the `value` is a number or CSS length.
|
500 |
-
* @example {@run true}
|
501 |
-
* // alias the FooGallery.utils.is namespace
|
502 |
-
* var _is = FooGallery.utils.is;
|
503 |
-
*
|
504 |
-
* console.log( _is.size( 80 ) ); // => true
|
505 |
-
* console.log( _is.size( "80px" ) ); // => true
|
506 |
-
* console.log( _is.size( "80em" ) ); // => true
|
507 |
-
* console.log( _is.size( "80%" ) ); // => true
|
508 |
-
* console.log( _is.size( {} ) ); // => false
|
509 |
-
* console.log( _is.size( undefined ) ); // => false
|
510 |
-
* console.log( _is.size( null ) ); // => false
|
511 |
-
* console.log( _is.size( "" ) ); // => false
|
512 |
-
* @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/length|<length> - CSS | MDN} for more information on CSS length values.
|
513 |
-
*/
|
514 |
-
_.is.size = function(value){
|
515 |
-
if (!(_.is.string(value) && !_.is.empty(value)) && !_.is.number(value)) return false;
|
516 |
-
return /^(auto|none|(?:[\d\.]*)+?(?:%|px|mm|q|cm|in|pt|pc|em|ex|ch|rem|vh|vw|vmin|vmax)?)$/.test(value);
|
517 |
-
};
|
518 |
-
|
519 |
-
/**
|
520 |
-
* @summary Checks if the `value` is a string.
|
521 |
-
* @memberof FooGallery.utils.is
|
522 |
-
* @function string
|
523 |
-
* @param {*} value - The value to check.
|
524 |
-
* @returns {boolean} `true` if the `value` is a string.
|
525 |
-
* @example {@run true}
|
526 |
-
* // alias the FooGallery.utils.is namespace
|
527 |
-
* var _is = FooGallery.utils.is;
|
528 |
-
*
|
529 |
-
* console.log( _is.string( "" ) ); // => true
|
530 |
-
* console.log( _is.string( undefined ) ); // => false
|
531 |
-
* console.log( _is.string( null ) ); // => false
|
532 |
-
* console.log( _is.string( 123 ) ); // => false
|
533 |
-
*/
|
534 |
-
_.is.string = function (value) {
|
535 |
-
return '[object String]' === Object.prototype.toString.call(value);
|
536 |
-
};
|
537 |
-
|
538 |
-
/**
|
539 |
-
* @summary Checks if the `value` is `undefined`.
|
540 |
-
* @memberof FooGallery.utils.is
|
541 |
-
* @function undef
|
542 |
-
* @param {*} value - The value to check is undefined.
|
543 |
-
* @returns {boolean} `true` if the supplied `value` is `undefined`.
|
544 |
-
* @example {@run true}
|
545 |
-
* // alias the FooGallery.utils.is namespace
|
546 |
-
* var _is = FooGallery.utils.is;
|
547 |
-
*
|
548 |
-
* console.log( _is.undef( undefined ) ); // => true
|
549 |
-
* console.log( _is.undef( null ) ); // => false
|
550 |
-
* console.log( _is.undef( 123 ) ); // => false
|
551 |
-
* console.log( _is.undef( "" ) ); // => false
|
552 |
-
*/
|
553 |
-
_.is.undef = function (value) {
|
554 |
-
return typeof value === 'undefined';
|
555 |
-
};
|
556 |
-
|
557 |
-
})(
|
558 |
-
// dependencies
|
559 |
-
FooGallery.utils.$,
|
560 |
-
FooGallery.utils
|
561 |
-
);
|
562 |
-
(function($, _, _is){
|
563 |
-
// only register methods if this version is the current version
|
564 |
-
if (_.version !== '0.0.5') return;
|
565 |
-
|
566 |
-
/**
|
567 |
-
* @memberof FooGallery.utils
|
568 |
-
* @namespace fn
|
569 |
-
* @summary Contains common function utility methods.
|
570 |
-
*/
|
571 |
-
_.fn = {};
|
572 |
-
|
573 |
-
var fnStr = Function.prototype.toString;
|
574 |
-
|
575 |
-
/**
|
576 |
-
* @summary The regular expression to test if a function uses the `this._super` method applied by the {@link FooGallery.utils.fn.add} method.
|
577 |
-
* @memberof FooGallery.utils.fn
|
578 |
-
* @name CONTAINS_SUPER
|
579 |
-
* @type {RegExp}
|
580 |
-
* @default /\b_super\b/
|
581 |
-
* @readonly
|
582 |
-
* @description When the script is first loaded into the page this performs a quick check to see if the browser supports function decompilation. If it does the regular expression is set to match the expected `_super`, however if function decompilation is not supported, the regular expression is set to match anything effectively making the test always return `true`.
|
583 |
-
* @example {@run true}
|
584 |
-
* // alias the FooGallery.utils.fn namespace
|
585 |
-
* var _fn = FooGallery.utils.fn;
|
586 |
-
*
|
587 |
-
* // create some functions to test
|
588 |
-
* function testFn1(){}
|
589 |
-
* function testFn2(){
|
590 |
-
* this._super();
|
591 |
-
* }
|
592 |
-
*
|
593 |
-
* console.log( _fn.CONTAINS_SUPER.test( testFn1 ) ); // => false
|
594 |
-
* console.log( _fn.CONTAINS_SUPER.test( testFn2 ) ); // => true
|
595 |
-
*
|
596 |
-
* // NOTE: in browsers that don't support functional decompilation both tests will return `true`
|
597 |
-
*/
|
598 |
-
_.fn.CONTAINS_SUPER = /xyz/.test(fnStr.call(function(){
|
599 |
-
//noinspection JSUnresolvedVariable,BadExpressionStatementJS
|
600 |
-
xyz;
|
601 |
-
})) ? /\b_super\b/ : /.*/;
|
602 |
-
|
603 |
-
/**
|
604 |
-
* @summary Adds or overrides the given method `name` on the `proto` using the supplied `fn`.
|
605 |
-
* @memberof FooGallery.utils.fn
|
606 |
-
* @function addOrOverride
|
607 |
-
* @param {Object} proto - The prototype to add the method to.
|
608 |
-
* @param {string} name - The name of the method to add, if this already exists the original will be exposed within the scope of the supplied `fn` as `this._super`.
|
609 |
-
* @param {function} fn - The function to add to the prototype, if this is overriding an existing method you can use `this._super` to access the original within its' scope.
|
610 |
-
* @description If the new method overrides a pre-existing one, this function will expose the overridden method as `this._super` within the new methods scope.
|
611 |
-
*
|
612 |
-
* This replaces having to write out the following to override a method and call its original:
|
613 |
-
*
|
614 |
-
* ```javascript
|
615 |
-
* var original = MyClass.prototype.someMethod;
|
616 |
-
* MyClass.prototype.someMethod = function(arg1, arg2){
|
617 |
-
* // execute the original
|
618 |
-
* original.call(this, arg1, arg2);
|
619 |
-
* };
|
620 |
-
* ```
|
621 |
-
*
|
622 |
-
* With the following:
|
623 |
-
*
|
624 |
-
* ```javascript
|
625 |
-
* FooGallery.utils.fn.addOrOverride( MyClass.prototype, "someMethod", function(arg1, arg2){
|
626 |
-
* // execute the original
|
627 |
-
* this._super(arg1, arg2);
|
628 |
-
* });
|
629 |
-
* ```
|
630 |
-
*
|
631 |
-
* This method is used by the {@link FooGallery.utils.Class} to implement the inheritance of individual methods.
|
632 |
-
* @example {@run true}
|
633 |
-
* // alias the FooGallery.utils.fn namespace
|
634 |
-
* var _fn = FooGallery.utils.fn;
|
635 |
-
*
|
636 |
-
* var proto = {
|
637 |
-
* write: function( message ){
|
638 |
-
* console.log( "Original#write: " + message );
|
639 |
-
* }
|
640 |
-
* };
|
641 |
-
*
|
642 |
-
* proto.write( "My message" ); // => "Original#write: My message"
|
643 |
-
*
|
644 |
-
* _fn.addOrOverride( proto, "write", function( message ){
|
645 |
-
* message = "Override#write: " + message;
|
646 |
-
* this._super( message );
|
647 |
-
* } );
|
648 |
-
*
|
649 |
-
* proto.write( "My message" ); // => "Original#write: Override#write: My message"
|
650 |
-
*/
|
651 |
-
_.fn.addOrOverride = function(proto, name, fn){
|
652 |
-
if (!_is.object(proto) || !_is.string(name) || _is.empty(name) || !_is.fn(fn)) return;
|
653 |
-
var _super = proto[name],
|
654 |
-
wrap = _is.fn(_super) && _.fn.CONTAINS_SUPER.test(fnStr.call(fn));
|
655 |
-
// only wrap the function if it overrides a method and makes use of `_super` within it's body.
|
656 |
-
proto[name] = wrap ?
|
657 |
-
(function (_super, fn) {
|
658 |
-
// create a new wrapped that exposes the original method as `_super`
|
659 |
-
return function () {
|
660 |
-
var tmp = this._super;
|
661 |
-
this._super = _super;
|
662 |
-
var ret = fn.apply(this, arguments);
|
663 |
-
this._super = tmp;
|
664 |
-
return ret;
|
665 |
-
};
|
666 |
-
})(_super, fn) : fn;
|
667 |
-
};
|
668 |
-
|
669 |
-
/**
|
670 |
-
* @summary Use the `Function.prototype.apply` method on a class constructor using the `new` keyword.
|
671 |
-
* @memberof FooGallery.utils.fn
|
672 |
-
* @function apply
|
673 |
-
* @param {Object} klass - The class to create.
|
674 |
-
* @param {Array} [args=[]] - The arguments to pass to the constructor.
|
675 |
-
* @returns {function} The new instance of the `klass` created with the supplied `args`.
|
676 |
-
* @description When using the default `Function.prototype.apply` you can't use it on class constructors requiring the `new` keyword, this method allows us to do that.
|
677 |
-
* @example {@run true}
|
678 |
-
* // alias the FooGallery.utils.fn namespace
|
679 |
-
* var _fn = FooGallery.utils.fn;
|
680 |
-
*
|
681 |
-
* // create a class to test with
|
682 |
-
* function Test( name, value ){
|
683 |
-
* if ( !( this instanceof Test )){
|
684 |
-
* console.log( "Test instantiated without the `new` keyword." );
|
685 |
-
* return;
|
686 |
-
* }
|
687 |
-
* console.log( "Test: name = " + name + ", value = " + value );
|
688 |
-
* }
|
689 |
-
*
|
690 |
-
* Test.apply( Test, ["My name", "My value"] ); // => "Test instantiated without the `new` keyword."
|
691 |
-
* _fn.apply( Test, ["My name", "My value"] ); // => "Test: name = My name, value = My value"
|
692 |
-
*/
|
693 |
-
_.fn.apply = function(klass, args){
|
694 |
-
args = _is.array(args) ? args : [];
|
695 |
-
function Class() {
|
696 |
-
return klass.apply(this, args);
|
697 |
-
}
|
698 |
-
Class.prototype = klass.prototype;
|
699 |
-
//noinspection JSValidateTypes
|
700 |
-
return new Class();
|
701 |
-
};
|
702 |
-
|
703 |
-
/**
|
704 |
-
* @summary Converts the default `arguments` object into a proper array.
|
705 |
-
* @memberof FooGallery.utils.fn
|
706 |
-
* @function arg2arr
|
707 |
-
* @param {Arguments} args - The arguments object to create an array from.
|
708 |
-
* @returns {Array}
|
709 |
-
* @description This method is simply a replacement for calling `Array.prototype.slice.call()` to create an array from an `arguments` object.
|
710 |
-
* @example {@run true}
|
711 |
-
* // alias the FooGallery.utils.fn namespace
|
712 |
-
* var _fn = FooGallery.utils.fn;
|
713 |
-
*
|
714 |
-
* function callMe(){
|
715 |
-
* var args = _fn.arg2arr(arguments);
|
716 |
-
* console.log( arguments instanceof Array ); // => false
|
717 |
-
* console.log( args instanceof Array ); // => true
|
718 |
-
* console.log( args ); // => [ "arg1", "arg2" ]
|
719 |
-
* }
|
720 |
-
*
|
721 |
-
* callMe("arg1", "arg2");
|
722 |
-
*/
|
723 |
-
_.fn.arg2arr = function(args){
|
724 |
-
return Array.prototype.slice.call(args);
|
725 |
-
};
|
726 |
-
|
727 |
-
/**
|
728 |
-
* @summary Checks the given `value` and ensures a function is returned.
|
729 |
-
* @memberof FooGallery.utils.fn
|
730 |
-
* @function check
|
731 |
-
* @param {?Object} thisArg=window - The `this` keyword within the returned function, if the supplied value is not an object this defaults to the `window`.
|
732 |
-
* @param {*} value - The value to check, if not a function or the name of one then the `def` value is automatically returned.
|
733 |
-
* @param {function} [def=jQuery.noop] - A default function to use if the `value` is not resolved to a function.
|
734 |
-
* @param {Object} [ctx=window] - If the `value` is a string this is supplied to the {@link FooGallery.utils.fn.fetch} method as the content to retrieve the function from.
|
735 |
-
* @returns {function} A function that ensures the correct context is applied when executed.
|
736 |
-
* @description This function is primarily used to check the value of a callback option that could be supplied as either a function or a string.
|
737 |
-
*
|
738 |
-
* When just the function name is supplied this method uses the {@link FooGallery.utils.fn.fetch} method to resolve and wrap it to ensure when it's called the correct context is applied.
|
739 |
-
*
|
740 |
-
* Being able to resolve a function from a name allows callbacks to be easily set even through data attributes as you can just supply the full function name as a string and then use this method to retrieve the actual function.
|
741 |
-
* @example {@run true}
|
742 |
-
* // alias the FooGallery.utils.fn namespace
|
743 |
-
* var _fn = FooGallery.utils.fn;
|
744 |
-
*
|
745 |
-
* // a simple `api` with a `sendMessage` function
|
746 |
-
* window.api = {
|
747 |
-
* sendMessage: function(){
|
748 |
-
* this.write( "window.api.sendMessage" );
|
749 |
-
* },
|
750 |
-
* child: {
|
751 |
-
* api: {
|
752 |
-
* sendMessage: function(){
|
753 |
-
* this.write( "window.api.child.api.sendMessage" );
|
754 |
-
* }
|
755 |
-
* }
|
756 |
-
* }
|
757 |
-
* };
|
758 |
-
*
|
759 |
-
* // a default function to use in case the check fails
|
760 |
-
* var def = function(){
|
761 |
-
* this.write( "default" );
|
762 |
-
* };
|
763 |
-
*
|
764 |
-
* // an object to use as the `this` object within the scope of the checked functions
|
765 |
-
* var thisArg = {
|
766 |
-
* write: function( message ){
|
767 |
-
* console.log( message );
|
768 |
-
* }
|
769 |
-
* };
|
770 |
-
*
|
771 |
-
* // check the value and return a wrapped function ensuring the correct context.
|
772 |
-
* var fn = _fn.check( thisArg, null, def );
|
773 |
-
* fn(); // => "default"
|
774 |
-
*
|
775 |
-
* fn = _fn.check( thisArg, "api.doesNotExist", def );
|
776 |
-
* fn(); // => "default"
|
777 |
-
*
|
778 |
-
* fn = _fn.check( thisArg, api.sendMessage, def );
|
779 |
-
* fn(); // => "window.api.sendMessage"
|
780 |
-
*
|
781 |
-
* fn = _fn.check( thisArg, "api.sendMessage", def );
|
782 |
-
* fn(); // => "window.api.sendMessage"
|
783 |
-
*
|
784 |
-
* fn = _fn.check( thisArg, "api.sendMessage", def, window.api.child );
|
785 |
-
* fn(); // => "window.api.child.api.sendMessage"
|
786 |
-
*/
|
787 |
-
_.fn.check = function(thisArg, value, def, ctx){
|
788 |
-
def = _is.fn(def) ? def : $.noop;
|
789 |
-
thisArg = _is.object(thisArg) ? thisArg : window;
|
790 |
-
function wrap(fn){
|
791 |
-
return function(){
|
792 |
-
return fn.apply(thisArg, arguments);
|
793 |
-
};
|
794 |
-
}
|
795 |
-
value = _is.string(value) ? _.fn.fetch(value, ctx) : value;
|
796 |
-
return _is.fn(value) ? wrap(value) : wrap(def);
|
797 |
-
};
|
798 |
-
|
799 |
-
/**
|
800 |
-
* @summary Fetches a function given its `name`.
|
801 |
-
* @memberof FooGallery.utils.fn
|
802 |
-
* @function fetch
|
803 |
-
* @param {string} name - The name of the function to fetch. This can be a `.` notated name.
|
804 |
-
* @param {Object} [ctx=window] - The context to retrieve the function from, defaults to the `window` object.
|
805 |
-
* @returns {?function} `null` if a function with the given name is not found within the context.
|
806 |
-
* @example {@run true}
|
807 |
-
* // alias the FooGallery.utils.fn namespace
|
808 |
-
* var _fn = FooGallery.utils.fn;
|
809 |
-
*
|
810 |
-
* // create a dummy `api` with a `sendMessage` function to test
|
811 |
-
* window.api = {
|
812 |
-
* sendMessage: function( message ){
|
813 |
-
* console.log( "api.sendMessage: " + message );
|
814 |
-
* }
|
815 |
-
* };
|
816 |
-
*
|
817 |
-
* // the below shows 3 different ways to fetch the `sendMessage` function
|
818 |
-
* var send1 = _fn.fetch( "api.sendMessage" );
|
819 |
-
* var send2 = _fn.fetch( "api.sendMessage", window );
|
820 |
-
* var send3 = _fn.fetch( "sendMessage", window.api );
|
821 |
-
*
|
822 |
-
* // all the retrieved methods should be the same
|
823 |
-
* console.log( send1 === send2 && send2 === send3 ); // => true
|
824 |
-
*
|
825 |
-
* // check if the function was found
|
826 |
-
* if ( send1 != null ){
|
827 |
-
* send1( "My message" ); // => "api.sendMessage: My message"
|
828 |
-
* }
|
829 |
-
*/
|
830 |
-
_.fn.fetch = function(name, ctx){
|
831 |
-
if (!_is.string(name) || _is.empty(name)) return null;
|
832 |
-
ctx = _is.object(ctx) ? ctx : window;
|
833 |
-
$.each(name.split('.'), function(i, part){
|
834 |
-
if (ctx[part]) ctx = ctx[part];
|
835 |
-
else return false;
|
836 |
-
});
|
837 |
-
return _is.fn(ctx) ? ctx : null;
|
838 |
-
};
|
839 |
-
|
840 |
-
/**
|
841 |
-
* @summary Enqueues methods using the given `name` from all supplied `objects` and executes each in order with the given arguments.
|
842 |
-
* @memberof FooGallery.utils.fn
|
843 |
-
* @function enqueue
|
844 |
-
* @param {Array.<Object>} objects - The objects to call the method on.
|
845 |
-
* @param {string} name - The name of the method to execute.
|
846 |
-
* @param {*} [arg1] - The first argument to call the method with.
|
847 |
-
* @param {...*} [argN] - Any additional arguments for the method.
|
848 |
-
* @returns {Promise} If `resolved` the first argument supplied to any success callbacks is an array of all returned value(s). These values are encapsulated within their own array as if the method returned a promise it could be resolved with more than one argument.
|
849 |
-
*
|
850 |
-
* If `rejected` any fail callbacks are supplied the arguments the promise was rejected with plus an additional one appended by this method, an array of all objects that have already had their methods run. This allows you to perform rollback operations if required after a failure. The last object in this array would contain the method that raised the error.
|
851 |
-
* @description This method allows an array of `objects` that implement a common set of methods to be executed in a supplied order. Each method in the queue is only executed after the successful completion of the previous. Success is evaluated as the method did not throw an error and if it returned a promise it was resolved.
|
852 |
-
*
|
853 |
-
* An example of this being used within the plugin is the loading and execution of methods on the various components. Using this method ensures components are loaded and have their methods executed in a static order regardless of when they were registered with the plugin or if the method is async. This way if `ComponentB`'s `preinit` relies on properties set in `ComponentA`'s `preinit` method you can register `ComponentB` with a lower priority than `ComponentA` and you can be assured `ComponentA`'s `preinit` completed successfully before `ComponentB`'s `preinit` is called event if it performs an async operation.
|
854 |
-
* @example {@caption Shows a basic example of how you can use this method.}{@run true}
|
855 |
-
* // alias the FooGallery.utils.fn namespace
|
856 |
-
* var _fn = FooGallery.utils.fn;
|
857 |
-
*
|
858 |
-
* // create some dummy objects that implement the same members or methods.
|
859 |
-
* var obj1 = {
|
860 |
-
* "name": "obj1",
|
861 |
-
* "appendName": function(str){
|
862 |
-
* console.log( "Executing obj1.appendName..." );
|
863 |
-
* return str + this.name;
|
864 |
-
* }
|
865 |
-
* };
|
866 |
-
*
|
867 |
-
* // this objects `appendName` method returns a promise
|
868 |
-
* var obj2 = {
|
869 |
-
* "name": "obj2",
|
870 |
-
* "appendName": function(str){
|
871 |
-
* console.log( "Executing obj2.appendName..." );
|
872 |
-
* var self = this;
|
873 |
-
* return $.Deferred(function(def){
|
874 |
-
* // use a setTimeout to delay execution
|
875 |
-
* setTimeout(function(){
|
876 |
-
* def.resolve(str + self.name);
|
877 |
-
* }, 300);
|
878 |
-
* });
|
879 |
-
* }
|
880 |
-
* };
|
881 |
-
*
|
882 |
-
* // this objects `appendName` method is only executed once obj2's promise is resolved
|
883 |
-
* var obj3 = {
|
884 |
-
* "name": "obj3",
|
885 |
-
* "appendName": function(str){
|
886 |
-
* console.log( "Executing obj3.appendName..." );
|
887 |
-
* return str + this.name;
|
888 |
-
* }
|
889 |
-
* };
|
890 |
-
*
|
891 |
-
* _fn.enqueue( [obj1, obj2, obj3], "appendName", "modified_by:" ).then(function(results){
|
892 |
-
* console.log( results ); // => [ [ "modified_by:obj1" ], [ "modified_by:obj2" ], [ "modified_by:obj3" ] ]
|
893 |
-
* });
|
894 |
-
* @example {@caption If an error is thrown by one of the called methods or it returns a promise that is rejected, execution is halted and any fail callbacks are executed. The last argument is an array of objects that have had their methods run, the last object within this array is the one that raised the error.}{@run true}
|
895 |
-
* // alias the FooGallery.utils.fn namespace
|
896 |
-
* var _fn = FooGallery.utils.fn;
|
897 |
-
*
|
898 |
-
* // create some dummy objects that implement the same members or methods.
|
899 |
-
* var obj1 = {
|
900 |
-
* "name": "obj1",
|
901 |
-
* "last": null,
|
902 |
-
* "appendName": function(str){
|
903 |
-
* console.log( "Executing obj1.appendName..." );
|
904 |
-
* return this.last = str + this.name;
|
905 |
-
* },
|
906 |
-
* "rollback": function(){
|
907 |
-
* console.log( "Executing obj1.rollback..." );
|
908 |
-
* this.last = null;
|
909 |
-
* }
|
910 |
-
* };
|
911 |
-
*
|
912 |
-
* // this objects `appendName` method throws an error
|
913 |
-
* var obj2 = {
|
914 |
-
* "name": "obj2",
|
915 |
-
* "last": null,
|
916 |
-
* "appendName": function(str){
|
917 |
-
* console.log( "Executing obj2.appendName..." );
|
918 |
-
* //throw new Error("Oops, something broke.");
|
919 |
-
* var self = this;
|
920 |
-
* return $.Deferred(function(def){
|
921 |
-
* // use a setTimeout to delay execution
|
922 |
-
* setTimeout(function(){
|
923 |
-
* self.last = str + self.name;
|
924 |
-
* def.reject(Error("Oops, something broke."));
|
925 |
-
* }, 300);
|
926 |
-
* });
|
927 |
-
* },
|
928 |
-
* "rollback": function(){
|
929 |
-
* console.log( "Executing obj2.rollback..." );
|
930 |
-
* this.last = null;
|
931 |
-
* }
|
932 |
-
* };
|
933 |
-
*
|
934 |
-
* // this objects `appendName` and `rollback` methods are never executed
|
935 |
-
* var obj3 = {
|
936 |
-
* "name": "obj3",
|
937 |
-
* "last": null,
|
938 |
-
* "appendName": function(str){
|
939 |
-
* console.log( "Executing obj3.appendName..." );
|
940 |
-
* return this.last = str + this.name;
|
941 |
-
* },
|
942 |
-
* "rollback": function(){
|
943 |
-
* console.log( "Executing obj3.rollback..." );
|
944 |
-
* this.last = null;
|
945 |
-
* }
|
946 |
-
* };
|
947 |
-
*
|
948 |
-
* _fn.enqueue( [obj1, obj2, obj3], "appendName", "modified_by:" ).fail(function(err, run){
|
949 |
-
* console.log( err.message ); // => "Oops, something broke."
|
950 |
-
* console.log( run ); // => [ {"name":"obj1","last":"modified_by:obj1"}, {"name":"obj2","last":"modified_by:obj2"} ]
|
951 |
-
* var guilty = run[run.length - 1];
|
952 |
-
* console.log( "Error thrown by: " + guilty.name ); // => "obj2"
|
953 |
-
* run.reverse(); // reverse execution when rolling back to avoid dependency issues
|
954 |
-
* return _fn.enqueue( run, "rollback" ).then(function(){
|
955 |
-
* console.log( "Error handled and rollback performed." );
|
956 |
-
* console.log( run ); // => [ {"name":"obj1","last":null}, {"name":"obj2","last":null} ]
|
957 |
-
* });
|
958 |
-
* });
|
959 |
-
*/
|
960 |
-
_.fn.enqueue = function(objects, name, arg1, argN){
|
961 |
-
var args = _.fn.arg2arr(arguments), // get an array of all supplied arguments
|
962 |
-
def = $.Deferred(), // the main deferred object for the function
|
963 |
-
queue = $.Deferred(), // the deferred object to use as an queue
|
964 |
-
promise = queue.promise(), // used to register component methods for execution
|
965 |
-
results = [], // stores the results of each method to be returned by the main deferred
|
966 |
-
run = [], // stores each object once its' method has been run
|
967 |
-
first = true; // whether or not this is the first resolve callback
|
968 |
-
|
969 |
-
// take the objects and name parameters out of the args array
|
970 |
-
objects = args.shift();
|
971 |
-
name = args.shift();
|
972 |
-
|
973 |
-
// safely execute a function, catch any errors and reject the deferred if required.
|
974 |
-
function safe(obj, method){
|
975 |
-
try {
|
976 |
-
run.push(obj);
|
977 |
-
return method.apply(obj, args);
|
978 |
-
} catch(err) {
|
979 |
-
def.reject(err, run);
|
980 |
-
return def;
|
981 |
-
}
|
982 |
-
}
|
983 |
-
|
984 |
-
// loop through all the supplied objects
|
985 |
-
$.each(objects, function(i, obj){
|
986 |
-
// if the obj has a function with the supplied name
|
987 |
-
if (_is.fn(obj[name])){
|
988 |
-
// then register the method in the callback queue
|
989 |
-
promise = promise.then(function(){
|
990 |
-
// only register the result if this is not the first resolve callback, the first is triggered by this function kicking off the queue
|
991 |
-
if (!first){
|
992 |
-
var resolveArgs = _.fn.arg2arr(arguments);
|
993 |
-
results.push(resolveArgs);
|
994 |
-
}
|
995 |
-
first = false;
|
996 |
-
// execute the method and return it's result, if the result is a promise
|
997 |
-
// the next method will only be executed once it's resolved
|
998 |
-
return safe(obj, obj[name]);
|
999 |
-
});
|
1000 |
-
}
|
1001 |
-
});
|
1002 |
-
|
1003 |
-
// add one last callback to catch the final result
|
1004 |
-
promise.then(function(){
|
1005 |
-
// only register the result if this is not the first resolve callback
|
1006 |
-
if (!first){
|
1007 |
-
var resolveArgs = _.fn.arg2arr(arguments);
|
1008 |
-
results.push(resolveArgs);
|
1009 |
-
}
|
1010 |
-
first = false;
|
1011 |
-
// resolve the main deferred with the array of all the method results
|
1012 |
-
def.resolve(results);
|
1013 |
-
});
|
1014 |
-
|
1015 |
-
// hook into failures and ensure the run array is appended to the args
|
1016 |
-
promise.fail(function(){
|
1017 |
-
var rejectArgs = _.fn.arg2arr(arguments);
|
1018 |
-
rejectArgs.push(run);
|
1019 |
-
def.reject.apply(def, rejectArgs);
|
1020 |
-
});
|
1021 |
-
|
1022 |
-
// kick off the queue
|
1023 |
-
queue.resolve();
|
1024 |
-
|
1025 |
-
return def.promise();
|
1026 |
-
};
|
1027 |
-
|
1028 |
-
/**
|
1029 |
-
* @summary Waits for the outcome of all promises regardless of failure and resolves supplying the results of just those that succeeded.
|
1030 |
-
* @memberof FooGallery.utils.fn
|
1031 |
-
* @function when
|
1032 |
-
* @param {Promise[]} promises - The array of promises to wait for.
|
1033 |
-
* @returns {Promise}
|
1034 |
-
*/
|
1035 |
-
_.fn.when = function(promises){
|
1036 |
-
if (!_is.array(promises) || _is.empty(promises)) return $.when();
|
1037 |
-
var d = $.Deferred(), results = [], remaining = promises.length;
|
1038 |
-
for(var i = 0; i < promises.length; i++){
|
1039 |
-
promises[i].then(function(res){
|
1040 |
-
results.push(res); // on success, add to results
|
1041 |
-
}).always(function(){
|
1042 |
-
remaining--; // always mark as finished
|
1043 |
-
if(!remaining) d.resolve(results);
|
1044 |
-
})
|
1045 |
-
}
|
1046 |
-
return d.promise(); // return a promise on the remaining values
|
1047 |
-
};
|
1048 |
-
|
1049 |
-
/**
|
1050 |
-
* @summary Return a promise rejected using the supplied args.
|
1051 |
-
* @memberof FooGallery.utils.fn
|
1052 |
-
* @function rejectWith
|
1053 |
-
* @param {*} [arg1] - The first argument to reject the promise with.
|
1054 |
-
* @param {...*} [argN] - Any additional arguments to reject the promise with.
|
1055 |
-
* @returns {Promise}
|
1056 |
-
*/
|
1057 |
-
_.fn.rejectWith = function(arg1, argN){
|
1058 |
-
var def = $.Deferred(), args = _.fn.arg2arr(arguments);
|
1059 |
-
return def.reject.apply(def, args).promise();
|
1060 |
-
};
|
1061 |
-
|
1062 |
-
/**
|
1063 |
-
* @summary Return a promise resolved using the supplied args.
|
1064 |
-
* @memberof FooGallery.utils.fn
|
1065 |
-
* @function resolveWith
|
1066 |
-
* @param {*} [arg1] - The first argument to resolve the promise with.
|
1067 |
-
* @param {...*} [argN] - Any additional arguments to resolve the promise with.
|
1068 |
-
* @returns {Promise}
|
1069 |
-
*/
|
1070 |
-
_.fn.resolveWith = function(arg1, argN){
|
1071 |
-
var def = $.Deferred(), args = _.fn.arg2arr(arguments);
|
1072 |
-
return def.resolve.apply(def, args).promise();
|
1073 |
-
};
|
1074 |
-
|
1075 |
-
/**
|
1076 |
-
* @summary A resolved promise object.
|
1077 |
-
* @memberof FooGallery.utils.fn
|
1078 |
-
* @name resolved
|
1079 |
-
* @type {Promise}
|
1080 |
-
*/
|
1081 |
-
_.fn.resolved = $.Deferred().resolve().promise();
|
1082 |
-
|
1083 |
-
/**
|
1084 |
-
* @summary A rejected promise object.
|
1085 |
-
* @memberof FooGallery.utils.fn
|
1086 |
-
* @name resolved
|
1087 |
-
* @type {Promise}
|
1088 |
-
*/
|
1089 |
-
_.fn.rejected = $.Deferred().reject().promise();
|
1090 |
-
|
1091 |
-
})(
|
1092 |
-
// dependencies
|
1093 |
-
FooGallery.utils.$,
|
1094 |
-
FooGallery.utils,
|
1095 |
-
FooGallery.utils.is
|
1096 |
-
);
|
1097 |
-
(function(_, _is){
|
1098 |
-
// only register methods if this version is the current version
|
1099 |
-
if (_.version !== '0.0.5') return;
|
1100 |
-
|
1101 |
-
/**
|
1102 |
-
* @summary Contains common url utility methods.
|
1103 |
-
* @memberof FooGallery.utils
|
1104 |
-
* @namespace url
|
1105 |
-
*/
|
1106 |
-
_.url = {};
|
1107 |
-
|
1108 |
-
// used for parsing a url into it's parts.
|
1109 |
-
var _a = document.createElement('a');
|
1110 |
-
|
1111 |
-
/**
|
1112 |
-
* @summary Parses the supplied url into an object containing it's component parts.
|
1113 |
-
* @memberof FooGallery.utils.url
|
1114 |
-
* @function parts
|
1115 |
-
* @param {string} url - The url to parse.
|
1116 |
-
* @returns {FooGallery.utils.url~Parts}
|
1117 |
-
* @example {@run true}
|
1118 |
-
* // alias the FooGallery.utils.url namespace
|
1119 |
-
* var _url = FooGallery.utils.url;
|
1120 |
-
*
|
1121 |
-
* console.log( _url.parts( "http://example.com/path/?param=true#something" ) ); // => {"hash":"#something", ...}
|
1122 |
-
*/
|
1123 |
-
_.url.parts = function(url){
|
1124 |
-
_a.href = url;
|
1125 |
-
return {
|
1126 |
-
hash: _a.hash, host: _a.host, hostname: _a.hostname, href: _a.href,
|
1127 |
-
origin: _a.origin, pathname: _a.pathname, port: _a.port,
|
1128 |
-
protocol: _a.protocol, search: _a.search
|
1129 |
-
};
|
1130 |
-
};
|
1131 |
-
|
1132 |
-
/**
|
1133 |
-
* @summary Given a <code>url</code> that could be relative or full this ensures a full url is returned.
|
1134 |
-
* @memberof FooGallery.utils.url
|
1135 |
-
* @function full
|
1136 |
-
* @param {string} url - The url to ensure is full.
|
1137 |
-
* @returns {?string} `null` if the given `path` is not a string or empty.
|
1138 |
-
* @description Given a full url this will simply return it however if given a relative url this will create a full url using the current location to fill in the blanks.
|
1139 |
-
* @example {@run true}
|
1140 |
-
* // alias the FooGallery.utils.url namespace
|
1141 |
-
* var _url = FooGallery.utils.url;
|
1142 |
-
*
|
1143 |
-
* console.log( _url.full( "http://example.com/path/" ) ); // => "http://example.com/path/"
|
1144 |
-
* console.log( _url.full( "/path/" ) ); // => "{protocol}//{host}/path/"
|
1145 |
-
* console.log( _url.full( "path/" ) ); // => "{protocol}//{host}/{pathname}/path/"
|
1146 |
-
* console.log( _url.full( "../path/" ) ); // => "{protocol}//{host}/{calculated pathname}/path/"
|
1147 |
-
* console.log( _url.full() ); // => null
|
1148 |
-
* console.log( _url.full( 123 ) ); // => null
|
1149 |
-
*/
|
1150 |
-
_.url.full = function(url){
|
1151 |
-
if (!_is.string(url) || _is.empty(url)) return null;
|
1152 |
-
_a.href = url;
|
1153 |
-
return _a.href;
|
1154 |
-
};
|
1155 |
-
|
1156 |
-
/**
|
1157 |
-
* @summary Gets or sets a parameter in the given <code>search</code> string.
|
1158 |
-
* @memberof FooGallery.utils.url
|
1159 |
-
* @function param
|
1160 |
-
* @param {string} search - The search string to use (usually `location.search`).
|
1161 |
-
* @param {string} key - The key of the parameter.
|
1162 |
-
* @param {string} [value] - The value to set for the parameter. If not provided the current value for the `key` is returned.
|
1163 |
-
* @returns {?string} The value of the `key` in the given `search` string if no `value` is supplied or `null` if the `key` does not exist.
|
1164 |
-
* @returns {string} A modified `search` string if a `value` is supplied.
|
1165 |
-
* @example <caption>Shows how to retrieve a parameter value from a search string.</caption>{@run true}
|
1166 |
-
* // alias the FooGallery.utils.url namespace
|
1167 |
-
* var _url = FooGallery.utils.url,
|
1168 |
-
* // create a search string to test
|
1169 |
-
* search = "?wmode=opaque&autoplay=1";
|
1170 |
-
*
|
1171 |
-
* console.log( _url.param( search, "wmode" ) ); // => "opaque"
|
1172 |
-
* console.log( _url.param( search, "autoplay" ) ); // => "1"
|
1173 |
-
* console.log( _url.param( search, "nonexistent" ) ); // => null
|
1174 |
-
* @example <caption>Shows how to set a parameter value in the given search string.</caption>{@run true}
|
1175 |
-
* // alias the FooGallery.utils.url namespace
|
1176 |
-
* var _url = FooGallery.utils.url,
|
1177 |
-
* // create a search string to test
|
1178 |
-
* search = "?wmode=opaque&autoplay=1";
|
1179 |
-
*
|
1180 |
-
* console.log( _url.param( search, "wmode", "window" ) ); // => "?wmode=window&autoplay=1"
|
1181 |
-
* console.log( _url.param( search, "autoplay", "0" ) ); // => "?wmode=opaque&autoplay=0"
|
1182 |
-
* console.log( _url.param( search, "v", "2" ) ); // => "?wmode=opaque&autoplay=1&v=2"
|
1183 |
-
*/
|
1184 |
-
_.url.param = function(search, key, value){
|
1185 |
-
if (!_is.string(search) || _is.empty(search) || !_is.string(key) || _is.empty(key)) return search;
|
1186 |
-
var regex, match, result, param;
|
1187 |
-
if (_is.undef(value)){
|
1188 |
-
regex = new RegExp('[?|&]' + key + '=([^&;]+?)(&|#|;|$)'); // regex to match the key and it's value but only capture the value
|
1189 |
-
match = regex.exec(search) || [,""]; // match the param otherwise return an empty string match
|
1190 |
-
result = match[1].replace(/\+/g, '%20'); // replace any + character's with spaces
|
1191 |
-
return _is.string(result) && !_is.empty(result) ? decodeURIComponent(result) : null; // decode the result otherwise return null
|
1192 |
-
}
|
1193 |
-
if (value === "" || value === null){
|
1194 |
-
regex = new RegExp('^([^#]*\?)(([^#]*)&)?' + key + '(\=[^&#]*)?(&|#|$)');
|
1195 |
-
result = search.replace(regex, '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4');
|
1196 |
-
} else {
|
1197 |
-
regex = new RegExp('([?&])' + key + '[^&]*'); // regex to match the key and it's current value but only capture the preceding ? or & char
|
1198 |
-
param = key + '=' + encodeURIComponent(value);
|
1199 |
-
result = search.replace(regex, '$1' + param); // replace any existing instance of the key with the new value
|
1200 |
-
// If nothing was replaced, then add the new param to the end
|
1201 |
-
if (result === search && !regex.test(result)) { // if no replacement occurred and the parameter is not currently in the result then add it
|
1202 |
-
result += '&' + param;
|
1203 |
-
}
|
1204 |
-
}
|
1205 |
-
return result;
|
1206 |
-
};
|
1207 |
-
|
1208 |
-
//######################
|
1209 |
-
//## Type Definitions ##
|
1210 |
-
//######################
|
1211 |
-
|
1212 |
-
/**
|
1213 |
-
* @summary A plain JavaScript object returned by the {@link FooGallery.utils.url.parts} method.
|
1214 |
-
* @typedef {Object} FooGallery.utils.url~Parts
|
1215 |
-
* @property {string} hash - A string containing a `#` followed by the fragment identifier of the URL.
|
1216 |
-
* @property {string} host - A string containing the host, that is the hostname, a `:`, and the port of the URL.
|
1217 |
-
* @property {string} hostname - A string containing the domain of the URL.
|
1218 |
-
* @property {string} href - A string containing the entire URL.
|
1219 |
-
* @property {string} origin - A string containing the canonical form of the origin of the specific location.
|
1220 |
-
* @property {string} pathname - A string containing an initial `/` followed by the path of the URL.
|
1221 |
-
* @property {string} port - A string containing the port number of the URL.
|
1222 |
-
* @property {string} protocol - A string containing the protocol scheme of the URL, including the final `:`.
|
1223 |
-
* @property {string} search - A string containing a `?` followed by the parameters of the URL. Also known as "querystring".
|
1224 |
-
* @see {@link FooGallery.utils.url.parts} for example usage.
|
1225 |
-
*/
|
1226 |
-
|
1227 |
-
})(
|
1228 |
-
// dependencies
|
1229 |
-
FooGallery.utils,
|
1230 |
-
FooGallery.utils.is
|
1231 |
-
);
|
1232 |
-
(function (_, _is, _fn) {
|
1233 |
-
// only register methods if this version is the current version
|
1234 |
-
if (_.version !== '0.0.5') return;
|
1235 |
-
|
1236 |
-
/**
|
1237 |
-
* @summary Contains common string utility methods.
|
1238 |
-
* @memberof FooGallery.utils
|
1239 |
-
* @namespace str
|
1240 |
-
*/
|
1241 |
-
_.str = {};
|
1242 |
-
|
1243 |
-
/**
|
1244 |
-
* @summary Converts the given `target` to camel case.
|
1245 |
-
* @memberof FooGallery.utils.str
|
1246 |
-
* @function camel
|
1247 |
-
* @param {string} target - The string to camel case.
|
1248 |
-
* @returns {string}
|
1249 |
-
* @example {@run true}
|
1250 |
-
* // alias the FooGallery.utils.str namespace
|
1251 |
-
* var _str = FooGallery.utils.str;
|
1252 |
-
*
|
1253 |
-
* console.log( _str.camel( "max-width" ) ); // => "maxWidth"
|
1254 |
-
* console.log( _str.camel( "max--width" ) ); // => "maxWidth"
|
1255 |
-
* console.log( _str.camel( "max Width" ) ); // => "maxWidth"
|
1256 |
-
* console.log( _str.camel( "Max_width" ) ); // => "maxWidth"
|
1257 |
-
* console.log( _str.camel( "MaxWidth" ) ); // => "maxWidth"
|
1258 |
-
* console.log( _str.camel( "Abbreviations like CSS are left intact" ) ); // => "abbreviationsLikeCSSAreLeftIntact"
|
1259 |
-
*/
|
1260 |
-
_.str.camel = function (target) {
|
1261 |
-
if (_is.empty(target)) return target;
|
1262 |
-
if (target.toUpperCase() === target) return target.toLowerCase();
|
1263 |
-
return target.replace(/^([A-Z])|[-\s_]+(\w)/g, function (match, p1, p2) {
|
1264 |
-
if (_is.string(p2)) return p2.toUpperCase();
|
1265 |
-
return p1.toLowerCase();
|
1266 |
-
});
|
1267 |
-
};
|
1268 |
-
|
1269 |
-
/**
|
1270 |
-
* @summary Checks if the `target` contains the given `substr`.
|
1271 |
-
* @memberof FooGallery.utils.str
|
1272 |
-
* @function contains
|
1273 |
-
* @param {string} target - The string to check.
|
1274 |
-
* @param {string} substr - The string to check for.
|
1275 |
-
* @param {boolean} [ignoreCase=false] - Whether or not to ignore casing when performing the check.
|
1276 |
-
* @returns {boolean} `true` if the `target` contains the given `substr`.
|
1277 |
-
* @example {@run true}
|
1278 |
-
* // alias the FooGallery.utils.str namespace
|
1279 |
-
* var _str = FooGallery.utils.str,
|
1280 |
-
* // create a string to test
|
1281 |
-
* target = "To be, or not to be, that is the question.";
|
1282 |
-
*
|
1283 |
-
* console.log( _str.contains( target, "To be" ) ); // => true
|
1284 |
-
* console.log( _str.contains( target, "question" ) ); // => true
|
1285 |
-
* console.log( _str.contains( target, "no" ) ); // => true
|
1286 |
-
* console.log( _str.contains( target, "nonexistent" ) ); // => false
|
1287 |
-
* console.log( _str.contains( target, "TO BE" ) ); // => false
|
1288 |
-
* console.log( _str.contains( target, "TO BE", true ) ); // => true
|
1289 |
-
*/
|
1290 |
-
_.str.contains = function (target, substr, ignoreCase) {
|
1291 |
-
if (!_is.string(target) || _is.empty(target) || !_is.string(substr) || _is.empty(substr)) return false;
|
1292 |
-
return substr.length <= target.length
|
1293 |
-
&& (!!ignoreCase ? target.toUpperCase().indexOf(substr.toUpperCase()) : target.indexOf(substr)) !== -1;
|
1294 |
-
};
|
1295 |
-
|
1296 |
-
/**
|
1297 |
-
* @summary Checks if the `target` contains the given `word`.
|
1298 |
-
* @memberof FooGallery.utils.str
|
1299 |
-
* @function containsWord
|
1300 |
-
* @param {string} target - The string to check.
|
1301 |
-
* @param {string} word - The word to check for.
|
1302 |
-
* @param {boolean} [ignoreCase=false] - Whether or not to ignore casing when performing the check.
|
1303 |
-
* @returns {boolean} `true` if the `target` contains the given `word`.
|
1304 |
-
* @description This method differs from {@link FooGallery.utils.str.contains} in that it searches for whole words by splitting the `target` string on word boundaries (`\b`) and then comparing the individual parts.
|
1305 |
-
* @example {@run true}
|
1306 |
-
* // alias the FooGallery.utils.str namespace
|
1307 |
-
* var _str = FooGallery.utils.str,
|
1308 |
-
* // create a string to test
|
1309 |
-
* target = "To be, or not to be, that is the question.";
|
1310 |
-
*
|
1311 |
-
* console.log( _str.containsWord( target, "question" ) ); // => true
|
1312 |
-
* console.log( _str.containsWord( target, "no" ) ); // => false
|
1313 |
-
* console.log( _str.containsWord( target, "NOT" ) ); // => false
|
1314 |
-
* console.log( _str.containsWord( target, "NOT", true ) ); // => true
|
1315 |
-
* console.log( _str.containsWord( target, "nonexistent" ) ); // => false
|
1316 |
-
*/
|
1317 |
-
_.str.containsWord = function(target, word, ignoreCase){
|
1318 |
-
if (!_is.string(target) || _is.empty(target) || !_is.string(word) || _is.empty(word) || target.length < word.length)
|
1319 |
-
return false;
|
1320 |
-
var parts = target.split(/\W/);
|
1321 |
-
for (var i = 0, len = parts.length; i < len; i++){
|
1322 |
-
if (ignoreCase ? parts[i].toUpperCase() == word.toUpperCase() : parts[i] == word) return true;
|
1323 |
-
}
|
1324 |
-
return false;
|
1325 |
-
};
|
1326 |
-
|
1327 |
-
/**
|
1328 |
-
* @summary Checks if the `target` ends with the given `substr`.
|
1329 |
-
* @memberof FooGallery.utils.str
|
1330 |
-
* @function endsWith
|
1331 |
-
* @param {string} target - The string to check.
|
1332 |
-
* @param {string} substr - The substr to check for.
|
1333 |
-
* @returns {boolean} `true` if the `target` ends with the given `substr`.
|
1334 |
-
* @example {@run true}
|
1335 |
-
* // alias the FooGallery.utils.str namespace
|
1336 |
-
* var _str = FooGallery.utils.str;
|
1337 |
-
*
|
1338 |
-
* console.log( _str.endsWith( "something", "g" ) ); // => true
|
1339 |
-
* console.log( _str.endsWith( "something", "ing" ) ); // => true
|
1340 |
-
* console.log( _str.endsWith( "something", "no" ) ); // => false
|
1341 |
-
*/
|
1342 |
-
_.str.endsWith = function (target, substr) {
|
1343 |
-
if (!_is.string(target) || _is.empty(target) || !_is.string(substr) || _is.empty(substr)) return target == substr;
|
1344 |
-
return target.slice(target.length - substr.length) == substr;
|
1345 |
-
};
|
1346 |
-
|
1347 |
-
/**
|
1348 |
-
* @summary Escapes the `target` for use in a regular expression.
|
1349 |
-
* @memberof FooGallery.utils.str
|
1350 |
-
* @function escapeRegExp
|
1351 |
-
* @param {string} target - The string to escape.
|
1352 |
-
* @returns {string}
|
1353 |
-
* @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions|Regular Expressions: Using Special Characters - JavaScript | MDN}
|
1354 |
-
*/
|
1355 |
-
_.str.escapeRegExp = function(target){
|
1356 |
-
if (_is.empty(target)) return target;
|
1357 |
-
return target.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
1358 |
-
};
|
1359 |
-
|
1360 |
-
/**
|
1361 |
-
* @summary Generates a 32 bit FNV-1a hash from the given `target`.
|
1362 |
-
* @memberof FooGallery.utils.str
|
1363 |
-
* @function fnv1a
|
1364 |
-
* @param {string} target - The string to generate a hash from.
|
1365 |
-
* @returns {?number} `null` if the `target` is not a string or empty otherwise a 32 bit FNV-1a hash.
|
1366 |
-
* @example {@run true}
|
1367 |
-
* // alias the FooGallery.utils.str namespace
|
1368 |
-
* var _str = FooGallery.utils.str;
|
1369 |
-
*
|
1370 |
-
* console.log( _str.fnv1a( "Some string to generate a hash for." ) ); // => 207568994
|
1371 |
-
* console.log( _str.fnv1a( "Some string to generate a hash for" ) ); // => 1350435704
|
1372 |
-
* @see {@link https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function|Fowler–Noll–Vo hash function}
|
1373 |
-
*/
|
1374 |
-
_.str.fnv1a = function(target){
|
1375 |
-
if (!_is.string(target) || _is.empty(target)) return null;
|
1376 |
-
var i, l, hval = 0x811c9dc5;
|
1377 |
-
for (i = 0, l = target.length; i < l; i++) {
|
1378 |
-
hval ^= target.charCodeAt(i);
|
1379 |
-
hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);
|
1380 |
-
}
|
1381 |
-
return hval >>> 0;
|
1382 |
-
};
|
1383 |
-
|
1384 |
-
/**
|
1385 |
-
* @summary Returns the remainder of the `target` split on the first index of the given `substr`.
|
1386 |
-
* @memberof FooGallery.utils.str
|
1387 |
-
* @function from
|
1388 |
-
* @param {string} target - The string to split.
|
1389 |
-
* @param {string} substr - The substring to split on.
|
1390 |
-
* @returns {?string} `null` if the given `substr` does not exist within the `target`.
|
1391 |
-
* @example {@run true}
|
1392 |
-
* // alias the FooGallery.utils.str namespace
|
1393 |
-
* var _str = FooGallery.utils.str,
|
1394 |
-
* // create a string to test
|
1395 |
-
* target = "To be, or not to be, that is the question.";
|
1396 |
-
*
|
1397 |
-
* console.log( _str.from( target, "no" ) ); // => "t to be, that is the question."
|
1398 |
-
* console.log( _str.from( target, "that" ) ); // => " is the question."
|
1399 |
-
* console.log( _str.from( target, "question" ) ); // => "."
|
1400 |
-
* console.log( _str.from( target, "nonexistent" ) ); // => null
|
1401 |
-
*/
|
1402 |
-
_.str.from = function (target, substr) {
|
1403 |
-
if (!_is.string(target) || _is.empty(target) || !_is.string(substr) || _is.empty(substr)) return null;
|
1404 |
-
return _.str.contains(target, substr) ? target.substring(target.indexOf(substr) + substr.length) : null;
|
1405 |
-
};
|
1406 |
-
|
1407 |
-
/**
|
1408 |
-
* @summary Joins any number of strings using the given `separator`.
|
1409 |
-
* @memberof FooGallery.utils.str
|
1410 |
-
* @function join
|
1411 |
-
* @param {string} separator - The separator to use to join the strings.
|
1412 |
-
* @param {string} part - The first string to join.
|
1413 |
-
* @param {...string} [partN] - Any number of additional strings to join.
|
1414 |
-
* @returns {?string}
|
1415 |
-
* @description This method differs from using the standard `Array.prototype.join` function to join strings in that it ignores empty parts and checks to see if each starts with the supplied `separator`. If the part starts with the `separator` it is removed before appending it to the final result.
|
1416 |
-
* @example {@run true}
|
1417 |
-
* // alias the FooGallery.utils.str namespace
|
1418 |
-
* var _str = FooGallery.utils.str;
|
1419 |
-
*
|
1420 |
-
* console.log( _str.join( "_", "all", "in", "one" ) ); // => "all_in_one"
|
1421 |
-
* console.log( _str.join( "_", "all", "_in", "one" ) ); // => "all_in_one"
|
1422 |
-
* console.log( _str.join( "/", "http://", "/example.com/", "/path/to/image.png" ) ); // => "http://example.com/path/to/image.png"
|
1423 |
-
* console.log( _str.join( "/", "http://", "/example.com", "/path/to/image.png" ) ); // => "http://example.com/path/to/image.png"
|
1424 |
-
* console.log( _str.join( "/", "http://", "example.com", "path/to/image.png" ) ); // => "http://example.com/path/to/image.png"
|
1425 |
-
*/
|
1426 |
-
_.str.join = function(separator, part, partN){
|
1427 |
-
if (!_is.string(separator) || !_is.string(part)) return null;
|
1428 |
-
var parts = _fn.arg2arr(arguments);
|
1429 |
-
separator = parts.shift();
|
1430 |
-
var i, l, result = parts.shift();
|
1431 |
-
for (i = 0, l = parts.length; i < l; i++){
|
1432 |
-
part = parts[i];
|
1433 |
-
if (_is.empty(part)) continue;
|
1434 |
-
if (_.str.endsWith(result, separator)){
|
1435 |
-
result = result.slice(0, result.length-separator.length);
|
1436 |
-
}
|
1437 |
-
if (_.str.startsWith(part, separator)){
|
1438 |
-
part = part.slice(separator.length);
|
1439 |
-
}
|
1440 |
-
result += separator + part;
|
1441 |
-
}
|
1442 |
-
return result;
|
1443 |
-
};
|
1444 |
-
|
1445 |
-
/**
|
1446 |
-
* @summary Checks if the `target` starts with the given `substr`.
|
1447 |
-
* @memberof FooGallery.utils.str
|
1448 |
-
* @function startsWith
|
1449 |
-
* @param {string} target - The string to check.
|
1450 |
-
* @param {string} substr - The substr to check for.
|
1451 |
-
* @returns {boolean} `true` if the `target` starts with the given `substr`.
|
1452 |
-
* @example {@run true}
|
1453 |
-
* // alias the FooGallery.utils.str namespace
|
1454 |
-
* var _str = FooGallery.utils.str;
|
1455 |
-
*
|
1456 |
-
* console.log( _str.startsWith( "something", "s" ) ); // => true
|
1457 |
-
* console.log( _str.startsWith( "something", "some" ) ); // => true
|
1458 |
-
* console.log( _str.startsWith( "something", "no" ) ); // => false
|
1459 |
-
*/
|
1460 |
-
_.str.startsWith = function (target, substr) {
|
1461 |
-
if (_is.empty(target) || _is.empty(substr)) return false;
|
1462 |
-
return target.slice(0, substr.length) == substr;
|
1463 |
-
};
|
1464 |
-
|
1465 |
-
/**
|
1466 |
-
* @summary Returns the first part of the `target` split on the first index of the given `substr`.
|
1467 |
-
* @memberof FooGallery.utils.str
|
1468 |
-
* @function until
|
1469 |
-
* @param {string} target - The string to split.
|
1470 |
-
* @param {string} substr - The substring to split on.
|
1471 |
-
* @returns {string} The `target` if the `substr` does not exist.
|
1472 |
-
* @example {@run true}
|
1473 |
-
* // alias the FooGallery.utils.str namespace
|
1474 |
-
* var _str = FooGallery.utils.str,
|
1475 |
-
* // create a string to test
|
1476 |
-
* target = "To be, or not to be, that is the question.";
|
1477 |
-
*
|
1478 |
-
* console.log( _str.until( target, "no" ) ); // => "To be, or "
|
1479 |
-
* console.log( _str.until( target, "that" ) ); // => "To be, or not to be, "
|
1480 |
-
* console.log( _str.until( target, "question" ) ); // => "To be, or not to be, that is the "
|
1481 |
-
* console.log( _str.until( target, "nonexistent" ) ); // => "To be, or not to be, that is the question."
|
1482 |
-
*/
|
1483 |
-
_.str.until = function (target, substr) {
|
1484 |
-
if (_is.empty(target) || _is.empty(substr)) return target;
|
1485 |
-
return _.str.contains(target, substr) ? target.substring(0, target.indexOf(substr)) : target;
|
1486 |
-
};
|
1487 |
-
|
1488 |
-
/**
|
1489 |
-
* @summary A basic string formatter that can use both index and name based placeholders but handles only string or number replacements.
|
1490 |
-
* @memberof FooGallery.utils.str
|
1491 |
-
* @function format
|
1492 |
-
* @param {string} target - The format string containing any placeholders to replace.
|
1493 |
-
* @param {string|number|Object|Array} arg1 - The first value to format the target with. If an object is supplied it's properties are used to match named placeholders. If an array, string or number is supplied it's values are used to match any index placeholders.
|
1494 |
-
* @param {...(string|number)} [argN] - Any number of additional strings or numbers to format the target with.
|
1495 |
-
* @returns {string} The string formatted with the supplied arguments.
|
1496 |
-
* @description This method allows you to supply the replacements as an object when using named placeholders or as an array or additional arguments when using index placeholders.
|
1497 |
-
*
|
1498 |
-
* This does not perform a simultaneous replacement of placeholders, which is why it's referred to as a basic formatter. This means replacements that contain placeholders within there value could end up being replaced themselves as seen in the last example.
|
1499 |
-
* @example {@caption The following shows how to use index placeholders.}{@run true}
|
1500 |
-
* // alias the FooGallery.utils.str namespace
|
1501 |
-
* var _str = FooGallery.utils.str,
|
1502 |
-
* // create a format string using index placeholders
|
1503 |
-
* format = "Hello, {0}, are you feeling {1}?";
|
1504 |
-
*
|
1505 |
-
* console.log( _str.format( format, "Steve", "OK" ) ); // => "Hello, Steve, are you feeling OK?"
|
1506 |
-
* // or
|
1507 |
-
* console.log( _str.format( format, [ "Steve", "OK" ] ) ); // => "Hello, Steve, are you feeling OK?"
|
1508 |
-
* @example {@caption While the above works perfectly fine the downside is that the placeholders provide no clues as to what should be supplied as a replacement value, this is were supplying an object and using named placeholders steps in.}{@run true}
|
1509 |
-
* // alias the FooGallery.utils.str namespace
|
1510 |
-
* var _str = FooGallery.utils.str,
|
1511 |
-
* // create a format string using named placeholders
|
1512 |
-
* format = "Hello, {name}, are you feeling {adjective}?";
|
1513 |
-
*
|
1514 |
-
* console.log( _str.format( format, {name: "Steve", adjective: "OK"} ) ); // => "Hello, Steve, are you feeling OK?"
|
1515 |
-
* @example {@caption The following demonstrates the issue with not performing a simultaneous replacement of placeholders.}{@run true}
|
1516 |
-
* // alias the FooGallery.utils.str namespace
|
1517 |
-
* var _str = FooGallery.utils.str;
|
1518 |
-
*
|
1519 |
-
* console.log( _str.format("{0}{1}", "{1}", "{0}") ); // => "{0}{0}"
|
1520 |
-
*
|
1521 |
-
* // If the replacement happened simultaneously the result would be "{1}{0}" but this method executes
|
1522 |
-
* // replacements synchronously as seen below:
|
1523 |
-
*
|
1524 |
-
* // "{0}{1}".replace( "{0}", "{1}" )
|
1525 |
-
* // => "{1}{1}".replace( "{1}", "{0}" )
|
1526 |
-
* // => "{0}{0}"
|
1527 |
-
*/
|
1528 |
-
_.str.format = function (target, arg1, argN){
|
1529 |
-
var args = _fn.arg2arr(arguments);
|
1530 |
-
target = args.shift(); // remove the target from the args
|
1531 |
-
if (_is.empty(target) || _is.empty(args)) return target;
|
1532 |
-
if (args.length === 1 && (_is.array(args[0]) || _is.object(args[0]))){
|
1533 |
-
args = args[0];
|
1534 |
-
}
|
1535 |
-
for (var arg in args){
|
1536 |
-
target = target.replace(new RegExp("\\{" + arg + "\\}", "gi"), args[arg]);
|
1537 |
-
}
|
1538 |
-
return target;
|
1539 |
-
};
|
1540 |
-
|
1541 |
-
})(
|
1542 |
-
// dependencies
|
1543 |
-
FooGallery.utils,
|
1544 |
-
FooGallery.utils.is,
|
1545 |
-
FooGallery.utils.fn
|
1546 |
-
);
|
1547 |
-
(function($, _, _is, _fn, _str){
|
1548 |
-
// only register methods if this version is the current version
|
1549 |
-
if (_.version !== '0.0.5') return;
|
1550 |
-
|
1551 |
-
/**
|
1552 |
-
* @summary Contains common object utility methods.
|
1553 |
-
* @memberof FooGallery.utils
|
1554 |
-
* @namespace obj
|
1555 |
-
*/
|
1556 |
-
_.obj = {};
|
1557 |
-
|
1558 |
-
// used by the obj.create method
|
1559 |
-
var Obj = function () {};
|
1560 |
-
/**
|
1561 |
-
* @summary Creates a new object with the specified prototype.
|
1562 |
-
* @memberof FooGallery.utils.obj
|
1563 |
-
* @function create
|
1564 |
-
* @param {object} proto - The object which should be the prototype of the newly-created object.
|
1565 |
-
* @returns {object} A new object with the specified prototype.
|
1566 |
-
* @description This is a basic implementation of the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create|Object.create} method.
|
1567 |
-
*/
|
1568 |
-
_.obj.create = function (proto) {
|
1569 |
-
if (!_is.object(proto))
|
1570 |
-
throw TypeError('Argument must be an object');
|
1571 |
-
Obj.prototype = proto;
|
1572 |
-
var result = new Obj();
|
1573 |
-
Obj.prototype = null;
|
1574 |
-
return result;
|
1575 |
-
};
|
1576 |
-
|
1577 |
-
/**
|
1578 |
-
* @summary Merge the contents of two or more objects together into the first `target` object.
|
1579 |
-
* @memberof FooGallery.utils.obj
|
1580 |
-
* @function extend
|
1581 |
-
* @param {Object} target - The object to merge properties into.
|
1582 |
-
* @param {Object} object - An object containing properties to merge.
|
1583 |
-
* @param {...Object} [objectN] - Additional objects containing properties to merge.
|
1584 |
-
* @returns {Object} The `target` merged with the contents from any additional objects.
|
1585 |
-
* @description This does not merge arrays by index as jQuery does, it treats them as a single property and replaces the array with a shallow copy of the new one.
|
1586 |
-
*
|
1587 |
-
* This method makes use of the {@link FooGallery.utils.obj.merge} method internally.
|
1588 |
-
* @example {@run true}
|
1589 |
-
* // alias the FooGallery.utils.obj namespace
|
1590 |
-
* var _obj = FooGallery.utils.obj,
|
1591 |
-
* // create some objects to merge
|
1592 |
-
* defaults = {"name": "My Object", "enabled": false, "arr": [1,2,3]},
|
1593 |
-
* options = {"enabled": true, "something": 123, "arr": [4,5,6]};
|
1594 |
-
*
|
1595 |
-
* // merge the two objects into a new third one without modifying either of the originals
|
1596 |
-
* var settings = _obj.extend( {}, defaults, options );
|
1597 |
-
*
|
1598 |
-
* console.log( settings ); // => {"name": "My Object", "enabled": true, "arr": [4,5,6], "something": 123}
|
1599 |
-
* console.log( defaults ); // => {"name": "My Object", "enabled": true, "arr": [1,2,3]}
|
1600 |
-
* console.log( options ); // => {"enabled": true, "arr": [4,5,6], "something": 123}
|
1601 |
-
*/
|
1602 |
-
_.obj.extend = function(target, object, objectN){
|
1603 |
-
target = _is.object(target) ? target : {};
|
1604 |
-
var objects = _fn.arg2arr(arguments);
|
1605 |
-
objects.shift();
|
1606 |
-
$.each(objects, function(i, object){
|
1607 |
-
_.obj.merge(target, object);
|
1608 |
-
});
|
1609 |
-
return target;
|
1610 |
-
};
|
1611 |
-
|
1612 |
-
/**
|
1613 |
-
* @summary Merge the contents of two objects together into the first `target` object.
|
1614 |
-
* @memberof FooGallery.utils.obj
|
1615 |
-
* @function merge
|
1616 |
-
* @param {Object} target - The object to merge properties into.
|
1617 |
-
* @param {Object} object - The object containing properties to merge.
|
1618 |
-
* @returns {Object} The `target` merged with the contents from the `object`.
|
1619 |
-
* @description This does not merge arrays by index as jQuery does, it treats them as a single property and replaces the array with a shallow copy of the new one.
|
1620 |
-
*
|
1621 |
-
* This method is used internally by the {@link FooGallery.utils.obj.extend} method.
|
1622 |
-
* @example {@run true}
|
1623 |
-
* // alias the FooGallery.utils.obj namespace
|
1624 |
-
* var _obj = FooGallery.utils.obj,
|
1625 |
-
* // create some objects to merge
|
1626 |
-
* target = {"name": "My Object", "enabled": false, "arr": [1,2,3]},
|
1627 |
-
* object = {"enabled": true, "something": 123, "arr": [4,5,6]};
|
1628 |
-
*
|
1629 |
-
* console.log( _obj.merge( target, object ) ); // => {"name": "My Object", "enabled": true, "arr": [4,5,6], "something": 123}
|
1630 |
-
*/
|
1631 |
-
_.obj.merge = function(target, object){
|
1632 |
-
target = _is.object(target) ? target : {};
|
1633 |
-
object = _is.object(object) ? object : {};
|
1634 |
-
for (var prop in object) {
|
1635 |
-
if (object.hasOwnProperty(prop)) {
|
1636 |
-
if (_is.object(object[prop])) {
|
1637 |
-
target[prop] = _is.object(target[prop]) ? target[prop] : {};
|
1638 |
-
_.obj.merge(target[prop], object[prop]);
|
1639 |
-
} else if (_is.array(object[prop])) {
|
1640 |
-
target[prop] = object[prop].slice();
|
1641 |
-
} else {
|
1642 |
-
target[prop] = object[prop];
|
1643 |
-
}
|
1644 |
-
}
|
1645 |
-
}
|
1646 |
-
return target;
|
1647 |
-
};
|
1648 |
-
|
1649 |
-
/**
|
1650 |
-
* @summary Merge the validated properties of the `object` into the `target` using the optional `mappings`.
|
1651 |
-
* @memberof FooGallery.utils.obj
|
1652 |
-
* @function mergeValid
|
1653 |
-
* @param {Object} target - The object to merge properties into.
|
1654 |
-
* @param {FooGallery.utils.obj~Validators} validators - An object containing validators for the `target` object properties.
|
1655 |
-
* @param {Object} object - The object containing properties to merge.
|
1656 |
-
* @param {FooGallery.utils.obj~Mappings} [mappings] - An object containing property name mappings.
|
1657 |
-
* @returns {Object} The modified `target` object containing any valid properties from the supplied `object`.
|
1658 |
-
* @example {@caption Shows the basic usage for this method and shows how invalid properties or those with no corresponding validator are ignored.}{@run true}
|
1659 |
-
* // alias the FooGallery.utils.obj and FooGallery.utils.is namespaces
|
1660 |
-
* var _obj = FooGallery.utils.obj,
|
1661 |
-
* _is = FooGallery.utils.is;
|
1662 |
-
*
|
1663 |
-
* //create the target object and it's validators
|
1664 |
-
* var target = {"name":"John","location":"unknown"},
|
1665 |
-
* validators = {"name":_is.string,"location":_is.string};
|
1666 |
-
*
|
1667 |
-
* // create the object to merge into the target
|
1668 |
-
* var object = {
|
1669 |
-
* "name": 1234, // invalid
|
1670 |
-
* "location": "Liverpool", // updated
|
1671 |
-
* "notMerged": true // ignored
|
1672 |
-
* };
|
1673 |
-
*
|
1674 |
-
* // merge the object into the target, invalid properties or those with no corresponding validator are ignored.
|
1675 |
-
* console.log( _obj.mergeValid( target, validators, object ) ); // => { "name": "John", "location": "Liverpool" }
|
1676 |
-
* @example {@caption Shows how to supply a mappings object for this method.}{@run true}
|
1677 |
-
* // alias the FooGallery.utils.obj and FooGallery.utils.is namespaces
|
1678 |
-
* var _obj = FooGallery.utils.obj,
|
1679 |
-
* _is = FooGallery.utils.is;
|
1680 |
-
*
|
1681 |
-
* //create the target object and it's validators
|
1682 |
-
* var target = {"name":"John","location":"unknown"},
|
1683 |
-
* validators = {"name":_is.string,"location":_is.string};
|
1684 |
-
*
|
1685 |
-
* // create the object to merge into the target
|
1686 |
-
* var object = {
|
1687 |
-
* "name": { // ignored
|
1688 |
-
* "proper": "Christopher", // mapped to name if short is invalid
|
1689 |
-
* "short": "Chris" // map to name
|
1690 |
-
* },
|
1691 |
-
* "city": "London" // map to location
|
1692 |
-
* };
|
1693 |
-
*
|
1694 |
-
* // create the mapping object
|
1695 |
-
* var mappings = {
|
1696 |
-
* "name": [ "name.short", "name.proper" ], // try use the short name and fallback to the proper
|
1697 |
-
* "location": "city"
|
1698 |
-
* };
|
1699 |
-
*
|
1700 |
-
* // merge the object into the target using the mappings, invalid properties or those with no corresponding validator are ignored.
|
1701 |
-
* console.log( _obj.mergeValid( target, validators, object, mappings ) ); // => { "name": "Chris", "location": "London" }
|
1702 |
-
*/
|
1703 |
-
_.obj.mergeValid = function(target, validators, object, mappings){
|
1704 |
-
if (!_is.hash(object) || !_is.hash(validators)) return target;
|
1705 |
-
validators = _is.hash(validators) ? validators : {};
|
1706 |
-
mappings = _is.hash(mappings) ? mappings : {};
|
1707 |
-
var prop, maps, value;
|
1708 |
-
for (prop in validators){
|
1709 |
-
if (!validators.hasOwnProperty(prop) || !_is.fn(validators[prop])) continue;
|
1710 |
-
maps = _is.array(mappings[prop]) ? mappings[prop] : (_is.string(mappings[prop]) ? [mappings[prop]] : [prop]);
|
1711 |
-
$.each(maps, function(i, map){
|
1712 |
-
value = _.obj.prop(object, map);
|
1713 |
-
if (_is.undef(value)) return; // continue
|
1714 |
-
if (validators[prop](value)){
|
1715 |
-
_.obj.prop(target, prop, value);
|
1716 |
-
return false; // break
|
1717 |
-
}
|
1718 |
-
});
|
1719 |
-
}
|
1720 |
-
return target;
|
1721 |
-
};
|
1722 |
-
|
1723 |
-
/**
|
1724 |
-
* @summary Get or set a property value given its `name`.
|
1725 |
-
* @memberof FooGallery.utils.obj
|
1726 |
-
* @function prop
|
1727 |
-
* @param {Object} object - The object to inspect for the property.
|
1728 |
-
* @param {string} name - The name of the property to fetch. This can be a `.` notated name.
|
1729 |
-
* @param {*} [value] - If supplied this is the value to set for the property.
|
1730 |
-
* @returns {*} The value for the `name` property, if it does not exist then `undefined`.
|
1731 |
-
* @returns {undefined} If a `value` is supplied this method returns nothing.
|
1732 |
-
* @example {@caption Shows how to get a property value from an object.}{@run true}
|
1733 |
-
* // alias the FooGallery.utils.obj namespace
|
1734 |
-
* var _obj = FooGallery.utils.obj,
|
1735 |
-
* // create an object to test
|
1736 |
-
* object = {
|
1737 |
-
* "name": "My Object",
|
1738 |
-
* "some": {
|
1739 |
-
* "thing": 123
|
1740 |
-
* }
|
1741 |
-
* };
|
1742 |
-
*
|
1743 |
-
* console.log( _obj.prop( object, "name" ) ); // => "My Object"
|
1744 |
-
* console.log( _obj.prop( object, "some.thing" ) ); // => 123
|
1745 |
-
* @example {@caption Shows how to set a property value for an object.}{@run true}
|
1746 |
-
* // alias the FooGallery.utils.obj namespace
|
1747 |
-
* var _obj = FooGallery.utils.obj,
|
1748 |
-
* // create an object to test
|
1749 |
-
* object = {
|
1750 |
-
* "name": "My Object",
|
1751 |
-
* "some": {
|
1752 |
-
* "thing": 123
|
1753 |
-
* }
|
1754 |
-
* };
|
1755 |
-
*
|
1756 |
-
* _obj.prop( object, "name", "My Updated Object" );
|
1757 |
-
* _obj.prop( object, "some.thing", 987 );
|
1758 |
-
*
|
1759 |
-
* console.log( object ); // => { "name": "My Updated Object", "some": { "thing": 987 } }
|
1760 |
-
*/
|
1761 |
-
_.obj.prop = function(object, name, value){
|
1762 |
-
if (!_is.object(object) || _is.empty(name)) return;
|
1763 |
-
var parts, last;
|
1764 |
-
if (_is.undef(value)){
|
1765 |
-
if (_str.contains(name, '.')){
|
1766 |
-
parts = name.split('.');
|
1767 |
-
last = parts.length - 1;
|
1768 |
-
$.each(parts, function(i, part){
|
1769 |
-
if (i === last){
|
1770 |
-
value = object[part];
|
1771 |
-
} else if (_is.hash(object[part])) {
|
1772 |
-
object = object[part];
|
1773 |
-
} else {
|
1774 |
-
// exit early
|
1775 |
-
return false;
|
1776 |
-
}
|
1777 |
-
});
|
1778 |
-
} else if (!_is.undef(object[name])){
|
1779 |
-
value = object[name];
|
1780 |
-
}
|
1781 |
-
return value;
|
1782 |
-
}
|
1783 |
-
if (_str.contains(name, '.')){
|
1784 |
-
parts = name.split('.');
|
1785 |
-
last = parts.length - 1;
|
1786 |
-
$.each(parts, function(i, part){
|
1787 |
-
if (i === last){
|
1788 |
-
object[part] = value;
|
1789 |
-
} else {
|
1790 |
-
object = _is.hash(object[part]) ? object[part] : (object[part] = {});
|
1791 |
-
}
|
1792 |
-
});
|
1793 |
-
} else if (!_is.undef(object[name])){
|
1794 |
-
object[name] = value;
|
1795 |
-
}
|
1796 |
-
};
|
1797 |
-
|
1798 |
-
//######################
|
1799 |
-
//## Type Definitions ##
|
1800 |
-
//######################
|
1801 |
-
|
1802 |
-
/**
|
1803 |
-
* @summary An object used by the {@link FooGallery.utils.obj.mergeValid|mergeValid} method to map new values onto the `target` object.
|
1804 |
-
* @typedef {Object.<string,string>|Object.<string,Array.<string>>} FooGallery.utils.obj~Mappings
|
1805 |
-
* @description The mappings object is a single level object. If you want to map a property from/to a child object on either the source or target objects you must supply the name using `.` notation as seen in the below example with the `"name.first"` to `"Name.Short"` mapping.
|
1806 |
-
* @example {@caption The basic structure of a mappings object is the below.}
|
1807 |
-
* {
|
1808 |
-
* "TargetName": "SourceName", // for top level properties
|
1809 |
-
* "Child.TargetName": "Child.SourceName" // for child properties
|
1810 |
-
* }
|
1811 |
-
* @example {@caption Given the following target object.}
|
1812 |
-
* var target = {
|
1813 |
-
* "name": {
|
1814 |
-
* "first": "",
|
1815 |
-
* "last": null
|
1816 |
-
* },
|
1817 |
-
* "age": 0
|
1818 |
-
* };
|
1819 |
-
* @example {@caption And the following object to merge.}
|
1820 |
-
* var object = {
|
1821 |
-
* "Name": {
|
1822 |
-
* "Full": "Christopher",
|
1823 |
-
* "Short": "Chris"
|
1824 |
-
* },
|
1825 |
-
* "Age": 32
|
1826 |
-
* };
|
1827 |
-
* @example {@caption The mappings object would look like the below.}
|
1828 |
-
* var mappings = {
|
1829 |
-
* "name.first": "Name.Short",
|
1830 |
-
* "age": "Age"
|
1831 |
-
* };
|
1832 |
-
* @example {@caption If you want the `"name.first"` property to try to use the `"Name.Short"` value but fallback to `"Name.Proper"` you can specify the mapping value as an array.}
|
1833 |
-
* var mappings = {
|
1834 |
-
* "name.first": [ "Name.Short", "Name.Proper" ],
|
1835 |
-
* "age": "Age"
|
1836 |
-
* };
|
1837 |
-
*/
|
1838 |
-
|
1839 |
-
/**
|
1840 |
-
* @summary An object used by the {@link FooGallery.utils.obj.mergeValid|mergeValid} method to validate properties.
|
1841 |
-
* @typedef {Object.<string,function(*):boolean>} FooGallery.utils.obj~Validators
|
1842 |
-
* @description The validators object is a single level object. If you want to validate a property of a child object you must supply the name using `.` notation as seen in the below example with the `"name.first"` and `"name.last"` properties.
|
1843 |
-
*
|
1844 |
-
* Any function that accepts a value to test as the first argument and returns a boolean can be used as a validator. This means the majority of the {@link FooGallery.utils.is} methods can be used directly. If the property supports multiple types just provide your own function as seen with `"name.last"` in the below example.
|
1845 |
-
* @example {@caption The basic structure of a validators object is the below.}
|
1846 |
-
* {
|
1847 |
-
* "PropName": function(*):boolean, // for top level properties
|
1848 |
-
* "Child.PropName": function(*):boolean // for child properties
|
1849 |
-
* }
|
1850 |
-
* @example {@caption Given the following target object.}
|
1851 |
-
* var target = {
|
1852 |
-
* "name": {
|
1853 |
-
* "first": "", // must be a string
|
1854 |
-
* "last": null // must be a string or null
|
1855 |
-
* },
|
1856 |
-
* "age": 0 // must be a number
|
1857 |
-
* };
|
1858 |
-
* @example {@caption The validators object could be created as seen below.}
|
1859 |
-
* // alias the FooGallery.utils.is namespace
|
1860 |
-
* var _is = FooGallery.utils.is;
|
1861 |
-
*
|
1862 |
-
* var validators = {
|
1863 |
-
* "name.first": _is.string,
|
1864 |
-
* "name.last": function(value){
|
1865 |
-
* return _is.string(value) || value === null;
|
1866 |
-
* },
|
1867 |
-
* "age": _is.number
|
1868 |
-
* };
|
1869 |
-
*/
|
1870 |
-
|
1871 |
-
})(
|
1872 |
-
// dependencies
|
1873 |
-
FooGallery.utils.$,
|
1874 |
-
FooGallery.utils,
|
1875 |
-
FooGallery.utils.is,
|
1876 |
-
FooGallery.utils.fn,
|
1877 |
-
FooGallery.utils.str
|
1878 |
-
);
|
1879 |
-
(function($, _, _is){
|
1880 |
-
// only register methods if this version is the current version
|
1881 |
-
if (_.version !== '0.0.5') return;
|
1882 |
-
|
1883 |
-
// any methods that have dependencies but don't fall into a specific subset or namespace can be added here
|
1884 |
-
|
1885 |
-
/**
|
1886 |
-
* @summary The callback for the {@link FooGallery.utils.ready} method.
|
1887 |
-
* @callback FooGallery.utils~readyCallback
|
1888 |
-
* @param {jQuery} $ - The instance of jQuery the plugin was registered with.
|
1889 |
-
* @this window
|
1890 |
-
* @see Take a look at the {@link FooGallery.utils.ready} method for example usage.
|
1891 |
-
*/
|
1892 |
-
|
1893 |
-
/**
|
1894 |
-
* @summary Waits for the DOM to be accessible and then executes the supplied callback.
|
1895 |
-
* @memberof FooGallery.utils
|
1896 |
-
* @function ready
|
1897 |
-
* @param {FooGallery.utils~readyCallback} callback - The function to execute once the DOM is accessible.
|
1898 |
-
* @example {@caption This method can be used as a replacement for the jQuery ready callback to avoid an error in another script stopping our scripts from running.}
|
1899 |
-
* FooGallery.utils.ready(function($){
|
1900 |
-
* // do something
|
1901 |
-
* });
|
1902 |
-
*/
|
1903 |
-
_.ready = function (callback) {
|
1904 |
-
function onready(){
|
1905 |
-
try { callback.call(window, _.$); }
|
1906 |
-
catch(err) { console.error(err); }
|
1907 |
-
}
|
1908 |
-
if (Function('/*@cc_on return true@*/')() ? document.readyState === "complete" : document.readyState !== "loading") onready();
|
1909 |
-
else document.addEventListener('DOMContentLoaded', onready, false);
|
1910 |
-
};
|
1911 |
-
|
1912 |
-
// A variable to hold the last number used to generate an ID in the current page.
|
1913 |
-
var uniqueId = 0;
|
1914 |
-
|
1915 |
-
/**
|
1916 |
-
* @summary Generate and apply a unique id for the given `$element`.
|
1917 |
-
* @memberof FooGallery.utils
|
1918 |
-
* @function uniqueId
|
1919 |
-
* @param {jQuery} $element - The jQuery element object to retrieve an id from or generate an id for.
|
1920 |
-
* @param {string} [prefix="uid-"] - A prefix to append to the start of any generated ids.
|
1921 |
-
* @returns {string} Either the `$element`'s existing id or a generated one that has been applied to it.
|
1922 |
-
* @example {@run true}
|
1923 |
-
* // alias the FooGallery.utils namespace
|
1924 |
-
* var _ = FooGallery.utils;
|
1925 |
-
*
|
1926 |
-
* // create some elements to test
|
1927 |
-
* var $hasId = $("<span/>", {id: "exists"});
|
1928 |
-
* var $generatedId = $("<span/>");
|
1929 |
-
* var $generatedPrefixedId = $("<span/>");
|
1930 |
-
*
|
1931 |
-
* console.log( _.uniqueId( $hasId ) ); // => "exists"
|
1932 |
-
* console.log( $hasId.attr( "id" ) ); // => "exists"
|
1933 |
-
* console.log( _.uniqueId( $generatedId ) ); // => "uid-1"
|
1934 |
-
* console.log( $generatedId.attr( "id" ) ); // => "uid-1"
|
1935 |
-
* console.log( _.uniqueId( $generatedPrefixedId, "plugin-" ) ); // => "plugin-2"
|
1936 |
-
* console.log( $generatedPrefixedId.attr( "id" ) ); // => "plugin-2"
|
1937 |
-
*/
|
1938 |
-
_.uniqueId = function($element, prefix){
|
1939 |
-
var id = $element.attr('id');
|
1940 |
-
if (_is.empty(id)){
|
1941 |
-
prefix = _is.string(prefix) && !_is.empty(prefix) ? prefix : "uid-";
|
1942 |
-
id = prefix + (++uniqueId);
|
1943 |
-
$element.attr('id', id).data('__uniqueId__', true);
|
1944 |
-
}
|
1945 |
-
return id;
|
1946 |
-
};
|
1947 |
-
|
1948 |
-
/**
|
1949 |
-
* @summary Remove the id from the given `$element` if it was set using the {@link FooGallery.utils.uniqueId|uniqueId} method.
|
1950 |
-
* @memberof FooGallery.utils
|
1951 |
-
* @function removeUniqueId
|
1952 |
-
* @param {jQuery} $element - The jQuery element object to remove a generated id from.
|
1953 |
-
* @example {@run true}
|
1954 |
-
* // alias the FooGallery.utils namespace
|
1955 |
-
* var _ = FooGallery.utils;
|
1956 |
-
*
|
1957 |
-
* // create some elements to test
|
1958 |
-
* var $hasId = $("<span/>", {id: "exists"});
|
1959 |
-
* var $generatedId = $("<span/>");
|
1960 |
-
* var $generatedPrefixedId = $("<span/>");
|
1961 |
-
*
|
1962 |
-
* console.log( _.uniqueId( $hasId ) ); // => "exists"
|
1963 |
-
* console.log( _.uniqueId( $generatedId ) ); // => "uid-1"
|
1964 |
-
* console.log( _.uniqueId( $generatedPrefixedId, "plugin-" ) ); // => "plugin-2"
|
1965 |
-
*/
|
1966 |
-
_.removeUniqueId = function($element){
|
1967 |
-
if ($element.data('__uniqueId__')){
|
1968 |
-
$element.removeAttr('id').removeData('__uniqueId__');
|
1969 |
-
}
|
1970 |
-
};
|
1971 |
-
|
1972 |
-
})(
|
1973 |
-
// dependencies
|
1974 |
-
FooGallery.utils.$,
|
1975 |
-
FooGallery.utils,
|
1976 |
-
FooGallery.utils.is
|
1977 |
-
);
|
1978 |
-
(function($, _, _is){
|
1979 |
-
// only register methods if this version is the current version
|
1980 |
-
if (_.version !== '0.0.5') return;
|
1981 |
-
|
1982 |
-
/**
|
1983 |
-
* @summary Contains common utility methods and members for the CSS transition property.
|
1984 |
-
* @memberof FooGallery.utils
|
1985 |
-
* @namespace transition
|
1986 |
-
*/
|
1987 |
-
_.transition = {};
|
1988 |
-
|
1989 |
-
// create a test element to check for the existence of the various transition properties
|
1990 |
-
var testElement = document.createElement('div');
|
1991 |
-
|
1992 |
-
/**
|
1993 |
-
* @summary Whether or not transitions are supported by the current browser.
|
1994 |
-
* @memberof FooGallery.utils.transition
|
1995 |
-
* @name supported
|
1996 |
-
* @type {boolean}
|
1997 |
-
*/
|
1998 |
-
_.transition.supported = (
|
1999 |
-
/**
|
2000 |
-
* @ignore
|
2001 |
-
* @summary Performs a one time test to see if transitions are supported
|
2002 |
-
* @param {Element} el - An element to test with.
|
2003 |
-
* @returns {boolean} `true` if transitions are supported.
|
2004 |
-
*/
|
2005 |
-
function(el){
|
2006 |
-
var style = el.style;
|
2007 |
-
return _is.string(style['transition'])
|
2008 |
-
|| _is.string(style['WebkitTransition'])
|
2009 |
-
|| _is.string(style['MozTransition'])
|
2010 |
-
|| _is.string(style['msTransition'])
|
2011 |
-
|| _is.string(style['OTransition']);
|
2012 |
-
}
|
2013 |
-
)(testElement);
|
2014 |
-
|
2015 |
-
/**
|
2016 |
-
* @summary The `transitionend` event name for the current browser.
|
2017 |
-
* @memberof FooGallery.utils.transition
|
2018 |
-
* @name end
|
2019 |
-
* @type {string}
|
2020 |
-
* @description Depending on the browser this returns one of the following values:
|
2021 |
-
*
|
2022 |
-
* <ul><!--
|
2023 |
-
* --><li>`"transitionend"`</li><!--
|
2024 |
-
* --><li>`"webkitTransitionEnd"`</li><!--
|
2025 |
-
* --><li>`"msTransitionEnd"`</li><!--
|
2026 |
-
* --><li>`"oTransitionEnd"`</li><!--
|
2027 |
-
* --><li>`null` - If the browser doesn't support transitions</li><!--
|
2028 |
-
* --></ul>
|
2029 |
-
*/
|
2030 |
-
_.transition.end = (
|
2031 |
-
/**
|
2032 |
-
* @ignore
|
2033 |
-
* @summary Performs a one time test to determine which `transitionend` event to use for the current browser.
|
2034 |
-
* @param {Element} el - An element to test with.
|
2035 |
-
* @returns {?string} The correct `transitionend` event for the current browser, `null` if the browser doesn't support transitions.
|
2036 |
-
*/
|
2037 |
-
function(el){
|
2038 |
-
var style = el.style;
|
2039 |
-
if (_is.string(style['transition'])) return 'transitionend';
|
2040 |
-
if (_is.string(style['WebkitTransition'])) return 'webkitTransitionEnd';
|
2041 |
-
if (_is.string(style['MozTransition'])) return 'transitionend';
|
2042 |
-
if (_is.string(style['msTransition'])) return 'msTransitionEnd';
|
2043 |
-
if (_is.string(style['OTransition'])) return 'oTransitionEnd';
|
2044 |
-
return null;
|
2045 |
-
}
|
2046 |
-
)(testElement);
|
2047 |
-
|
2048 |
-
/**
|
2049 |
-
* @summary Gets the `transition-duration` value for the supplied jQuery element.
|
2050 |
-
* @memberof FooGallery.utils.transition
|
2051 |
-
* @function duration
|
2052 |
-
* @param {jQuery} $element - The jQuery element to retrieve the duration from.
|
2053 |
-
* @param {number} [def=0] - The default value to return if no duration is set.
|
2054 |
-
* @returns {number} The value of the `transition-duration` property converted to a millisecond value.
|
2055 |
-
*/
|
2056 |
-
_.transition.duration = function($element, def){
|
2057 |
-
def = _is.number(def) ? def : 0;
|
2058 |
-
if (!_is.jq($element)) return def;
|
2059 |
-
// we can use jQuery.css() method to retrieve the value cross browser
|
2060 |
-
var duration = $element.css('transition-duration');
|
2061 |
-
if (/^([\d\.]*)+?(ms|s)$/i.test(duration)){
|
2062 |
-
// if we have a valid time value
|
2063 |
-
var match = duration.match(/^([\d\.]*)+?(ms|s)$/i),
|
2064 |
-
value = parseFloat(match[1]),
|
2065 |
-
unit = match[2].toLowerCase();
|
2066 |
-
if (unit === 's'){
|
2067 |
-
// convert seconds to milliseconds
|
2068 |
-
value = value * 1000;
|
2069 |
-
}
|
2070 |
-
return value;
|
2071 |
-
}
|
2072 |
-
return def;
|
2073 |
-
};
|
2074 |
-
|
2075 |
-
/**
|
2076 |
-
* @summary Start a transition by toggling the supplied `className` on the `$element`.
|
2077 |
-
* @memberof FooGallery.utils.transition
|
2078 |
-
* @function start
|
2079 |
-
* @param {jQuery} $element - The jQuery element to start the transition on.
|
2080 |
-
* @param {string} className - One or more class names (separated by spaces) to be toggled that starts the transition.
|
2081 |
-
* @param {boolean} [state] - A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.
|
2082 |
-
* @param {number} [timeout] - The maximum time, in milliseconds, to wait for the `transitionend` event to be raised. If not provided this will be automatically set to the elements `transition-duration` property plus an extra 50 milliseconds.
|
2083 |
-
* @returns {Promise}
|
2084 |
-
* @description This method lets us use CSS transitions by toggling a class and using the `transitionend` event to perform additional actions once the transition has completed across all browsers. In browsers that do not support transitions this method would behave the same as if just calling jQuery's `.toggleClass` method.
|
2085 |
-
*
|
2086 |
-
* The last parameter `timeout` is used to create a timer that behaves as a safety net in case the `transitionend` event is never raised and ensures the deferred returned by this method is resolved or rejected within a specified time.
|
2087 |
-
* @see {@link https://developer.mozilla.org/en/docs/Web/CSS/transition-duration|transition-duration - CSS | MDN} for more information on the `transition-duration` CSS property.
|
2088 |
-
*/
|
2089 |
-
_.transition.start = function($element, className, state, timeout){
|
2090 |
-
var deferred = $.Deferred();
|
2091 |
-
|
2092 |
-
$element = $element.first();
|
2093 |
-
|
2094 |
-
if (_.transition.supported){
|
2095 |
-
var safety = $element.data('transition_safety');
|
2096 |
-
if (_is.hash(safety) && _is.number(safety.timer)){
|
2097 |
-
clearTimeout(safety.timer);
|
2098 |
-
$element.removeData('transition_safety').off(_.transition.end + '.utils');
|
2099 |
-
safety.deferred.reject();
|
2100 |
-
}
|
2101 |
-
timeout = _is.number(timeout) ? timeout : _.transition.duration($element) + 50;
|
2102 |
-
safety = {
|
2103 |
-
deferred: deferred,
|
2104 |
-
timer: setTimeout(function(){
|
2105 |
-
// This is the safety net in case a transition fails for some reason and the transitionend event is never raised.
|
2106 |
-
// This will remove the bound event and resolve the deferred
|
2107 |
-
$element.removeData('transition_safety').off(_.transition.end + '.utils');
|
2108 |
-
deferred.resolve();
|
2109 |
-
}, timeout)
|
2110 |
-
};
|
2111 |
-
$element.data('transition_safety', safety);
|
2112 |
-
|
2113 |
-
$element.on(_.transition.end + '.utils', function(e){
|
2114 |
-
if ($element.is(e.target)){
|
2115 |
-
clearTimeout(safety.timer);
|
2116 |
-
$element.removeData('transition_safety').off(_.transition.end + '.utils');
|
2117 |
-
deferred.resolve();
|
2118 |
-
}
|
2119 |
-
});
|
2120 |
-
}
|
2121 |
-
|
2122 |
-
setTimeout(function(){
|
2123 |
-
// This is executed inside of a 20ms timeout to allow the binding of the event handler above to actually happen before the class is toggled
|
2124 |
-
$element.toggleClass(className, state);
|
2125 |
-
if (!_.transition.supported){
|
2126 |
-
// If the browser doesn't support transitions then just resolve the deferred
|
2127 |
-
deferred.resolve();
|
2128 |
-
}
|
2129 |
-
}, 20);
|
2130 |
-
|
2131 |
-
return deferred.promise();
|
2132 |
-
};
|
2133 |
-
|
2134 |
-
})(
|
2135 |
-
// dependencies
|
2136 |
-
FooGallery.utils.$,
|
2137 |
-
FooGallery.utils,
|
2138 |
-
FooGallery.utils.is
|
2139 |
-
);
|
2140 |
-
(function ($, _, _is, _obj, _fn) {
|
2141 |
-
// only register methods if this version is the current version
|
2142 |
-
if (_.version !== '0.0.5') return;
|
2143 |
-
|
2144 |
-
/**
|
2145 |
-
* @summary A base class providing some helper methods for prototypal inheritance.
|
2146 |
-
* @memberof FooGallery.utils
|
2147 |
-
* @constructs Class
|
2148 |
-
* @description This is a base class for making prototypal inheritance simpler to work with. It provides an easy way to inherit from another class and exposes a `_super` method within the scope of any overriding methods that allows a simple way to execute the overridden function.
|
2149 |
-
*
|
2150 |
-
* Have a look at the {@link FooGallery.utils.Class.extend|extend} and {@link FooGallery.utils.Class.override|override} method examples to see some basic usage.
|
2151 |
-
* @example {@caption When using this base class the actual construction of a class is performed by the `construct` method.}
|
2152 |
-
* var MyClass = FooGallery.utils.Class.extend({
|
2153 |
-
* construct: function(arg1, arg2){
|
2154 |
-
* // handle the construction logic here
|
2155 |
-
* }
|
2156 |
-
* });
|
2157 |
-
*
|
2158 |
-
* // use the class
|
2159 |
-
* var myClass = new MyClass( "arg1:value", "arg2:value" );
|
2160 |
-
*/
|
2161 |
-
_.Class = function(){};
|
2162 |
-
|
2163 |
-
/**
|
2164 |
-
* @ignore
|
2165 |
-
* @summary The original function when within the scope of an overriding method.
|
2166 |
-
* @memberof FooGallery.utils.Class#
|
2167 |
-
* @name _super
|
2168 |
-
* @type {?function}
|
2169 |
-
* @description This is only available within the scope of an overriding method if it was created using the {@link FooGallery.utils.Class.extend|extend}, {@link FooGallery.utils.Class.override|override} or {@link FooGallery.utils.fn.addOrOverride} methods.
|
2170 |
-
* @see {@link FooGallery.utils.fn.addOrOverride} to see an example of how this property is used.
|
2171 |
-
*/
|
2172 |
-
|
2173 |
-
/**
|
2174 |
-
* @summary Creates a new class that inherits from this one which in turn allows itself to be extended.
|
2175 |
-
* @memberof FooGallery.utils.Class
|
2176 |
-
* @function extend
|
2177 |
-
* @param {Object} [definition] - An object containing any methods to implement/override.
|
2178 |
-
* @returns {function} A new class that inherits from the base class.
|
2179 |
-
* @description Every class created using this method has both the {@link FooGallery.utils.Class.extend|extend} and {@link FooGallery.utils.Class.override|override} static methods added to it to allow it to be extended.
|
2180 |
-
* @example {@caption The below shows an example of how to implement inheritance using this method.}{@run true}
|
2181 |
-
* // create a base Person class
|
2182 |
-
* var Person = FooGallery.utils.Class.extend({
|
2183 |
-
* construct: function(isDancing){
|
2184 |
-
* this.dancing = isDancing;
|
2185 |
-
* },
|
2186 |
-
* dance: function(){
|
2187 |
-
* return this.dancing;
|
2188 |
-
* }
|
2189 |
-
* });
|
2190 |
-
*
|
2191 |
-
* var Ninja = Person.extend({
|
2192 |
-
* construct: function(){
|
2193 |
-
* // Call the inherited version of construct()
|
2194 |
-
* this._super( false );
|
2195 |
-
* },
|
2196 |
-
* dance: function(){
|
2197 |
-
* // Call the inherited version of dance()
|
2198 |
-
* return this._super();
|
2199 |
-
* },
|
2200 |
-
* swingSword: function(){
|
2201 |
-
* return true;
|
2202 |
-
* }
|
2203 |
-
* });
|
2204 |
-
*
|
2205 |
-
* var p = new Person(true);
|
2206 |
-
* console.log( p.dance() ); // => true
|
2207 |
-
*
|
2208 |
-
* var n = new Ninja();
|
2209 |
-
* console.log( n.dance() ); // => false
|
2210 |
-
* console.log( n.swingSword() ); // => true
|
2211 |
-
* console.log(
|
2212 |
-
* p instanceof Person && p.constructor === Person && p instanceof FooGallery.utils.Class
|
2213 |
-
* && n instanceof Ninja && n.constructor === Ninja && n instanceof Person && n instanceof FooGallery.utils.Class
|
2214 |
-
* ); // => true
|
2215 |
-
*/
|
2216 |
-
_.Class.extend = function(definition){
|
2217 |
-
definition = _is.hash(definition) ? definition : {};
|
2218 |
-
var proto = _obj.create(this.prototype); // create a new prototype to work with so we don't modify the original
|
2219 |
-
// iterate over all properties in the supplied definition and update the prototype
|
2220 |
-
for (var name in definition) {
|
2221 |
-
if (!definition.hasOwnProperty(name)) continue;
|
2222 |
-
_fn.addOrOverride(proto, name, definition[name]);
|
2223 |
-
}
|
2224 |
-
// if no construct method is defined add a default one that does nothing
|
2225 |
-
proto.construct = _is.fn(proto.construct) ? proto.construct : function(){};
|
2226 |
-
|
2227 |
-
// create the new class using the prototype made above
|
2228 |
-
function Class() {
|
2229 |
-
if (!_is.fn(this.construct))
|
2230 |
-
throw new SyntaxError('FooGallery.utils.Class objects must be constructed with the "new" keyword.');
|
2231 |
-
this.construct.apply(this, arguments);
|
2232 |
-
}
|
2233 |
-
Class.prototype = proto;
|
2234 |
-
//noinspection JSUnresolvedVariable
|
2235 |
-
Class.prototype.constructor = _is.fn(proto.__ctor__) ? proto.__ctor__ : Class;
|
2236 |
-
Class.extend = _.Class.extend;
|
2237 |
-
Class.override = _.Class.override;
|
2238 |
-
return Class;
|
2239 |
-
};
|
2240 |
-
|
2241 |
-
/**
|
2242 |
-
* @summary Overrides a single method on this class.
|
2243 |
-
* @memberof FooGallery.utils.Class
|
2244 |
-
* @function override
|
2245 |
-
* @param {string} name - The name of the function to override.
|
2246 |
-
* @param {function} fn - The new function to override with, the `_super` method will be made available within this function.
|
2247 |
-
* @description This is a helper method for overriding a single function of a {@link FooGallery.utils.Class} or one of its child classes. This uses the {@link FooGallery.utils.fn.addOrOverride} method internally and simply provides the correct prototype.
|
2248 |
-
* @example {@caption The below example wraps the `Person.prototype.dance` method with a new one that inverts the result. Note the override applies even to instances of the class that are already created.}{@run true}
|
2249 |
-
* var Person = FooGallery.utils.Class.extend({
|
2250 |
-
* construct: function(isDancing){
|
2251 |
-
* this.dancing = isDancing;
|
2252 |
-
* },
|
2253 |
-
* dance: function(){
|
2254 |
-
* return this.dancing;
|
2255 |
-
* }
|
2256 |
-
* });
|
2257 |
-
*
|
2258 |
-
* var p = new Person(true);
|
2259 |
-
* console.log( p.dance() ); // => true
|
2260 |
-
*
|
2261 |
-
* Person.override("dance", function(){
|
2262 |
-
* // Call the original version of dance()
|
2263 |
-
* return !this._super();
|
2264 |
-
* });
|
2265 |
-
*
|
2266 |
-
* console.log( p.dance() ); // => false
|
2267 |
-
*/
|
2268 |
-
_.Class.override = function(name, fn){
|
2269 |
-
_fn.addOrOverride(this.prototype, name, fn);
|
2270 |
-
};
|
2271 |
-
|
2272 |
-
})(
|
2273 |
-
// dependencies
|
2274 |
-
FooGallery.utils.$,
|
2275 |
-
FooGallery.utils,
|
2276 |
-
FooGallery.utils.is,
|
2277 |
-
FooGallery.utils.obj,
|
2278 |
-
FooGallery.utils.fn
|
2279 |
-
);
|
2280 |
-
(function($, _, _is){
|
2281 |
-
// only register methods if this version is the current version
|
2282 |
-
if (_.version !== '0.0.5') return;
|
2283 |
-
|
2284 |
-
_.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds */{
|
2285 |
-
/**
|
2286 |
-
* @summary A simple bounding rectangle class.
|
2287 |
-
* @memberof FooGallery.utils
|
2288 |
-
* @constructs Bounds
|
2289 |
-
* @augments FooGallery.utils.Class
|
2290 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
2291 |
-
* @borrows FooGallery.utils.Class.override as override
|
2292 |
-
*/
|
2293 |
-
construct: function(){
|
2294 |
-
var self = this;
|
2295 |
-
self.top = 0;
|
2296 |
-
self.right = 0;
|
2297 |
-
self.bottom = 0;
|
2298 |
-
self.left = 0;
|
2299 |
-
self.width = 0;
|
2300 |
-
self.height = 0;
|
2301 |
-
},
|
2302 |
-
/**
|
2303 |
-
* @summary Inflate the bounds by the specified amount.
|
2304 |
-
* @memberof FooGallery.utils.Bounds#
|
2305 |
-
* @function inflate
|
2306 |
-
* @param {number} amount - A positive number will expand the bounds while a negative one will shrink it.
|
2307 |
-
* @returns {FooGallery.utils.Bounds}
|
2308 |
-
*/
|
2309 |
-
inflate: function(amount){
|
2310 |
-
var self = this;
|
2311 |
-
if (_is.number(amount)){
|
2312 |
-
self.top -= amount;
|
2313 |
-
self.right += amount;
|
2314 |
-
self.bottom += amount;
|
2315 |
-
self.left -= amount;
|
2316 |
-
self.width += amount * 2;
|
2317 |
-
self.height += amount * 2;
|
2318 |
-
}
|
2319 |
-
return self;
|
2320 |
-
},
|
2321 |
-
/**
|
2322 |
-
* @summary Checks if the supplied bounds object intersects with this one.
|
2323 |
-
* @memberof FooGallery.utils.Bounds#
|
2324 |
-
* @function intersects
|
2325 |
-
* @param {FooGallery.utils.Bounds} bounds - The bounds to check.
|
2326 |
-
* @returns {boolean}
|
2327 |
-
*/
|
2328 |
-
intersects: function(bounds){
|
2329 |
-
var self = this;
|
2330 |
-
return self.left <= bounds.right && bounds.left <= self.right && self.top <= bounds.bottom && bounds.top <= self.bottom;
|
2331 |
-
}
|
2332 |
-
});
|
2333 |
-
|
2334 |
-
var __$window;
|
2335 |
-
/**
|
2336 |
-
* @summary Gets the bounding rectangle of the current viewport.
|
2337 |
-
* @memberof FooGallery.utils
|
2338 |
-
* @function getViewportBounds
|
2339 |
-
* @param {number} [inflate] - An amount to inflate the bounds by. A positive number will expand the bounds outside of the visible viewport while a negative one would shrink it.
|
2340 |
-
* @returns {FooGallery.utils.Bounds}
|
2341 |
-
*/
|
2342 |
-
_.getViewportBounds = function(inflate){
|
2343 |
-
if (!__$window) __$window = $(window);
|
2344 |
-
var bounds = new _.Bounds();
|
2345 |
-
bounds.top = __$window.scrollTop();
|
2346 |
-
bounds.left = __$window.scrollLeft();
|
2347 |
-
bounds.width = __$window.width();
|
2348 |
-
bounds.height = __$window.height();
|
2349 |
-
bounds.right = bounds.left + bounds.width;
|
2350 |
-
bounds.bottom = bounds.top + bounds.height;
|
2351 |
-
bounds.inflate(inflate);
|
2352 |
-
return bounds;
|
2353 |
-
};
|
2354 |
-
|
2355 |
-
/**
|
2356 |
-
* @summary Get the bounding rectangle for the supplied element.
|
2357 |
-
* @memberof FooGallery.utils
|
2358 |
-
* @function getElementBounds
|
2359 |
-
* @param {(jQuery|HTMLElement|string)} element - The jQuery wrapper around the element, the element itself, or a CSS selector to retrieve the element with.
|
2360 |
-
* @returns {FooGallery.utils.Bounds}
|
2361 |
-
*/
|
2362 |
-
_.getElementBounds = function(element){
|
2363 |
-
if (!_is.jq(element)) element = $(element);
|
2364 |
-
var bounds = new _.Bounds();
|
2365 |
-
if (element.length !== 0){
|
2366 |
-
var offset = element.offset();
|
2367 |
-
bounds.top = offset.top;
|
2368 |
-
bounds.left = offset.left;
|
2369 |
-
bounds.width = element.width();
|
2370 |
-
bounds.height = element.height();
|
2371 |
-
}
|
2372 |
-
bounds.right = bounds.left + bounds.width;
|
2373 |
-
bounds.bottom = bounds.top + bounds.height;
|
2374 |
-
return bounds;
|
2375 |
-
};
|
2376 |
-
|
2377 |
-
})(
|
2378 |
-
FooGallery.utils.$,
|
2379 |
-
FooGallery.utils,
|
2380 |
-
FooGallery.utils.is
|
2381 |
-
);
|
2382 |
-
(function($, _, _is, _fn){
|
2383 |
-
// only register methods if this version is the current version
|
2384 |
-
if (_.version !== '0.0.5') return;
|
2385 |
-
|
2386 |
-
_.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory */{
|
2387 |
-
/**
|
2388 |
-
* @summary A factory for classes allowing them to be registered and created using a friendly name.
|
2389 |
-
* @memberof FooGallery.utils
|
2390 |
-
* @constructs Factory
|
2391 |
-
* @description This class allows other classes to register themselves for use at a later time. Depending on how you intend to use the registered classes you can also specify a load and execution order through the `priority` parameter of the {@link FooGallery.utils.Factory#register|register} method.
|
2392 |
-
* @augments FooGallery.utils.Class
|
2393 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
2394 |
-
* @borrows FooGallery.utils.Class.override as override
|
2395 |
-
*/
|
2396 |
-
construct: function(){
|
2397 |
-
/**
|
2398 |
-
* @summary An object containing all registered classes.
|
2399 |
-
* @memberof FooGallery.utils.Factory#
|
2400 |
-
* @name registered
|
2401 |
-
* @type {Object.<string, Object>}
|
2402 |
-
* @readonly
|
2403 |
-
* @example {@caption The following shows the structure of this object. The `<name>` placeholders would be the name the class was registered with.}
|
2404 |
-
* {
|
2405 |
-
* "<name>": {
|
2406 |
-
* "name": <string>,
|
2407 |
-
* "klass": <function>,
|
2408 |
-
* "priority": <number>
|
2409 |
-
* },
|
2410 |
-
* "<name>": {
|
2411 |
-
* "name": <string>,
|
2412 |
-
* "klass": <function>,
|
2413 |
-
* "priority": <number>
|
2414 |
-
* },
|
2415 |
-
* ...
|
2416 |
-
* }
|
2417 |
-
*/
|
2418 |
-
this.registered = {};
|
2419 |
-
},
|
2420 |
-
/**
|
2421 |
-
* @summary Checks if the factory contains a class registered using the supplied `name`.
|
2422 |
-
* @memberof FooGallery.utils.Factory#
|
2423 |
-
* @function contains
|
2424 |
-
* @param {string} name - The name of the class to check.
|
2425 |
-
* @returns {boolean}
|
2426 |
-
* @example {@run true}
|
2427 |
-
* // create a new instance of the factory, this is usually exposed by the class that will be using the factory.
|
2428 |
-
* var factory = new FooGallery.utils.Factory();
|
2429 |
-
*
|
2430 |
-
* // create a class to register
|
2431 |
-
* function Test(){}
|
2432 |
-
*
|
2433 |
-
* // register the class with the factory with the default priority
|
2434 |
-
* factory.register( "test", Test );
|
2435 |
-
*
|
2436 |
-
* // test if the class was registered
|
2437 |
-
* console.log( factory.contains( "test" ) ); // => true
|
2438 |
-
*/
|
2439 |
-
contains: function(name){
|
2440 |
-
return !_is.undef(this.registered[name]);
|
2441 |
-
},
|
2442 |
-
/**
|
2443 |
-
* @summary Creates new instances of all registered classes using there registered priority and the supplied arguments.
|
2444 |
-
* @memberof FooGallery.utils.Factory#
|
2445 |
-
* @function load
|
2446 |
-
* @param {Object.<string, function>} overrides - An object containing classes to override any matching registered classes with, if no overrides are required you can pass `false` or `null`.
|
2447 |
-
* @param {*} arg1 - The first argument to supply when creating new instances of all registered classes.
|
2448 |
-
* @param {...*} [argN] - Any number of additional arguments to supply when creating new instances of all registered classes.
|
2449 |
-
* @returns {Array.<Object>} An array containing new instances of all registered classes.
|
2450 |
-
* @description The class indexes within the result array are determined by the `priority` they were registered with, the higher the `priority` the lower the index.
|
2451 |
-
*
|
2452 |
-
* This method is designed to be used when all registered classes share a common interface or base type and constructor arguments.
|
2453 |
-
* @example {@caption The following loads all registered classes into an array ordered by there priority.}{@run true}
|
2454 |
-
* // create a new instance of the factory, this is usually exposed by the class that will be using the factory.
|
2455 |
-
* var factory = new FooGallery.utils.Factory();
|
2456 |
-
*
|
2457 |
-
* // create a base Extension class
|
2458 |
-
* var Extension = FooGallery.utils.Class.extend({
|
2459 |
-
* construct: function( type, options ){
|
2460 |
-
* this.type = type;
|
2461 |
-
* this.options = options;
|
2462 |
-
* },
|
2463 |
-
* getType: function(){
|
2464 |
-
* return this.type;
|
2465 |
-
* }
|
2466 |
-
* });
|
2467 |
-
*
|
2468 |
-
* // create various item, this would usually be in another file
|
2469 |
-
* var MyExtension1 = Extension.extend({
|
2470 |
-
* construct: function(options){
|
2471 |
-
* this._super( "my-extension-1", options );
|
2472 |
-
* }
|
2473 |
-
* });
|
2474 |
-
* factory.register( "my-extension-1", MyExtension1, 0 );
|
2475 |
-
*
|
2476 |
-
* // create various item, this would usually be in another file
|
2477 |
-
* var MyExtension2 = Extension.extend({
|
2478 |
-
* construct: function(options){
|
2479 |
-
* this._super( "my-extension-2", options );
|
2480 |
-
* }
|
2481 |
-
* });
|
2482 |
-
* factory.register( "my-extension-2", MyExtension2, 1 );
|
2483 |
-
*
|
2484 |
-
* // load all registered classes according to there priority passing the options to all constructors
|
2485 |
-
* var loaded = factory.load( null, {"something": true} );
|
2486 |
-
*
|
2487 |
-
* // only two classes should be loaded
|
2488 |
-
* console.log( loaded.length ); // => 2
|
2489 |
-
*
|
2490 |
-
* // the MyExtension2 class is loaded first due to it's priority being higher than the MyExtension1 class.
|
2491 |
-
* console.log( loaded[0] instanceof MyExtension2 && loaded[0] instanceof Extension ); // => true
|
2492 |
-
* console.log( loaded[1] instanceof MyExtension1 && loaded[1] instanceof Extension ); // => true
|
2493 |
-
*
|
2494 |
-
* // do something with the loaded classes
|
2495 |
-
* @example {@caption The following loads all registered classes into an array ordered by there priority but uses the overrides parameter to swap out one of them for a custom implementation.}{@run true}
|
2496 |
-
* // create a new instance of the factory, this is usually exposed by the class that will be using the factory.
|
2497 |
-
* var factory = new FooGallery.utils.Factory();
|
2498 |
-
*
|
2499 |
-
* // create a base Extension class
|
2500 |
-
* var Extension = FooGallery.utils.Class.extend({
|
2501 |
-
* construct: function( type, options ){
|
2502 |
-
* this.type = type;
|
2503 |
-
* this.options = options;
|
2504 |
-
* },
|
2505 |
-
* getType: function(){
|
2506 |
-
* return this.type;
|
2507 |
-
* }
|
2508 |
-
* });
|
2509 |
-
*
|
2510 |
-
* // create a new extension, this would usually be in another file
|
2511 |
-
* var MyExtension1 = Extension.extend({
|
2512 |
-
* construct: function(options){
|
2513 |
-
* this._super( "my-extension-1", options );
|
2514 |
-
* }
|
2515 |
-
* });
|
2516 |
-
* factory.register( "my-extension-1", MyExtension1, 0 );
|
2517 |
-
*
|
2518 |
-
* // create a new extension, this would usually be in another file
|
2519 |
-
* var MyExtension2 = Extension.extend({
|
2520 |
-
* construct: function(options){
|
2521 |
-
* this._super( "my-extension-2", options );
|
2522 |
-
* }
|
2523 |
-
* });
|
2524 |
-
* factory.register( "my-extension-2", MyExtension2, 1 );
|
2525 |
-
*
|
2526 |
-
* // create a custom extension that is not registered but overrides the default "my-extension-1"
|
2527 |
-
* var UpdatedMyExtension1 = MyExtension1.extend({
|
2528 |
-
* construct: function(options){
|
2529 |
-
* this._super( options );
|
2530 |
-
* // do something different to the original MyExtension1 class
|
2531 |
-
* }
|
2532 |
-
* });
|
2533 |
-
*
|
2534 |
-
* // load all registered classes but swaps out the registered "my-extension-1" for the supplied override.
|
2535 |
-
* var loaded = factory.load( {"my-extension-1": UpdatedMyExtension1}, {"something": true} );
|
2536 |
-
*
|
2537 |
-
* // only two classes should be loaded
|
2538 |
-
* console.log( loaded.length ); // => 2
|
2539 |
-
*
|
2540 |
-
* // the MyExtension2 class is loaded first due to it's priority being higher than the UpdatedMyExtension1 class which inherited a priority of 0.
|
2541 |
-
* console.log( loaded[0] instanceof MyExtension2 && loaded[0] instanceof Extension ); // => true
|
2542 |
-
* console.log( loaded[1] instanceof UpdatedMyExtension1 && loaded[1] instanceof MyExtension1 && loaded[1] instanceof Extension ); // => true
|
2543 |
-
*
|
2544 |
-
* // do something with the loaded classes
|
2545 |
-
*/
|
2546 |
-
load: function(overrides, arg1, argN){
|
2547 |
-
var self = this,
|
2548 |
-
args = _fn.arg2arr(arguments),
|
2549 |
-
reg = [],
|
2550 |
-
loaded = [],
|
2551 |
-
name, klass;
|
2552 |
-
|
2553 |
-
overrides = args.shift() || {};
|
2554 |
-
for (name in self.registered){
|
2555 |
-
if (!self.registered.hasOwnProperty(name)) continue;
|
2556 |
-
var component = self.registered[name];
|
2557 |
-
if (overrides.hasOwnProperty(name)){
|
2558 |
-
klass = overrides[name];
|
2559 |
-
if (_is.string(klass)) klass = _fn.fetch(overrides[name]);
|
2560 |
-
if (_is.fn(klass)){
|
2561 |
-
component = {name: name, klass: klass, priority: self.registered[name].priority};
|
2562 |
-
}
|
2563 |
-
}
|
2564 |
-
reg.push(component);
|
2565 |
-
}
|
2566 |
-
|
2567 |
-
for (name in overrides){
|
2568 |
-
if (!overrides.hasOwnProperty(name) || self.registered.hasOwnProperty(name)) continue;
|
2569 |
-
klass = overrides[name];
|
2570 |
-
if (_is.string(klass)) klass = _fn.fetch(overrides[name]);
|
2571 |
-
if (_is.fn(klass)){
|
2572 |
-
reg.push({name: name, klass: klass, priority: 0});
|
2573 |
-
}
|
2574 |
-
}
|
2575 |
-
|
2576 |
-
reg.sort(function(a, b){ return b.priority - a.priority; });
|
2577 |
-
$.each(reg, function(i, r){
|
2578 |
-
if (_is.fn(r.klass)){
|
2579 |
-
loaded.push(_fn.apply(r.klass, args));
|
2580 |
-
}
|
2581 |
-
});
|
2582 |
-
return loaded;
|
2583 |
-
},
|
2584 |
-
/**
|
2585 |
-
* @summary Create a new instance of a class registered with the supplied `name` and arguments.
|
2586 |
-
* @memberof FooGallery.utils.Factory#
|
2587 |
-
* @function make
|
2588 |
-
* @param {string} name - The name of the class to create.
|
2589 |
-
* @param {*} arg1 - The first argument to supply to the new instance.
|
2590 |
-
* @param {...*} [argN] - Any number of additional arguments to supply to the new instance.
|
2591 |
-
* @returns {Object}
|
2592 |
-
* @example {@caption The following shows how to create a new instance of a registered class.}{@run true}
|
2593 |
-
* // create a new instance of the factory, this is usually done by the class that will be using it.
|
2594 |
-
* var factory = new FooGallery.utils.Factory();
|
2595 |
-
*
|
2596 |
-
* // create a Logger class to register, this would usually be in another file
|
2597 |
-
* var Logger = FooGallery.utils.Class.extend({
|
2598 |
-
* write: function( message ){
|
2599 |
-
* console.log( "Logger#write: " + message );
|
2600 |
-
* }
|
2601 |
-
* });
|
2602 |
-
*
|
2603 |
-
* factory.register( "logger", Logger );
|
2604 |
-
*
|
2605 |
-
* // create a new instances of the class registered as "logger"
|
2606 |
-
* var logger = factory.make( "logger" );
|
2607 |
-
* logger.write( "My message" ); // => "Logger#write: My message"
|
2608 |
-
*/
|
2609 |
-
make: function(name, arg1, argN){
|
2610 |
-
var self = this, args = _fn.arg2arr(arguments), reg;
|
2611 |
-
name = args.shift();
|
2612 |
-
reg = self.registered[name];
|
2613 |
-
if (_is.hash(reg) && _is.fn(reg.klass)){
|
2614 |
-
return _fn.apply(reg.klass, args);
|
2615 |
-
}
|
2616 |
-
return null;
|
2617 |
-
},
|
2618 |
-
/**
|
2619 |
-
* @summary Gets an array of all registered names.
|
2620 |
-
* @memberof FooGallery.utils.Factory#
|
2621 |
-
* @function names
|
2622 |
-
* @param {boolean} [prioritize=false] - Whether or not to order the names by the priority they were registered with.
|
2623 |
-
* @returns {Array.<string>}
|
2624 |
-
* @example {@run true}
|
2625 |
-
* // create a new instance of the factory, this is usually exposed by the class that will be using the factory.
|
2626 |
-
* var factory = new FooGallery.utils.Factory();
|
2627 |
-
*
|
2628 |
-
* // create some classes to register
|
2629 |
-
* function Test1(){}
|
2630 |
-
* function Test2(){}
|
2631 |
-
*
|
2632 |
-
* // register the classes with the factory with the default priority
|
2633 |
-
* factory.register( "test-1", Test1 );
|
2634 |
-
* factory.register( "test-2", Test2, 1 );
|
2635 |
-
*
|
2636 |
-
* // log all registered names
|
2637 |
-
* console.log( factory.names() ); // => ["test-1","test-2"]
|
2638 |
-
* console.log( factory.names( true ) ); // => ["test-2","test-1"] ~ "test-2" appears before "test-1" as it was registered with a higher priority
|
2639 |
-
*/
|
2640 |
-
names: function( prioritize ){
|
2641 |
-
prioritize = _is.boolean(prioritize) ? prioritize : false;
|
2642 |
-
var names = [], name;
|
2643 |
-
if (prioritize){
|
2644 |
-
var reg = [];
|
2645 |
-
for (name in this.registered){
|
2646 |
-
if (!this.registered.hasOwnProperty(name)) continue;
|
2647 |
-
reg.push(this.registered[name]);
|
2648 |
-
}
|
2649 |
-
reg.sort(function(a, b){ return b.priority - a.priority; });
|
2650 |
-
$.each(reg, function(i, r){
|
2651 |
-
names.push(r.name);
|
2652 |
-
});
|
2653 |
-
} else {
|
2654 |
-
for (name in this.registered){
|
2655 |
-
if (!this.registered.hasOwnProperty(name)) continue;
|
2656 |
-
names.push(name);
|
2657 |
-
}
|
2658 |
-
}
|
2659 |
-
return names;
|
2660 |
-
},
|
2661 |
-
/**
|
2662 |
-
* @summary Registers a `klass` constructor with the factory using the given `name`.
|
2663 |
-
* @memberof FooGallery.utils.Factory#
|
2664 |
-
* @function register
|
2665 |
-
* @param {string} name - The friendly name of the class.
|
2666 |
-
* @param {function} klass - The class constructor to register.
|
2667 |
-
* @param {number} [priority=0] - This determines the index for the class when using either the {@link FooGallery.utils.Factory#load|load} or {@link FooGallery.utils.Factory#names|names} methods, a higher value equals a lower index.
|
2668 |
-
* @returns {boolean} `true` if the `klass` was successfully registered.
|
2669 |
-
* @description Once a class is registered you can use either the {@link FooGallery.utils.Factory#load|load} or {@link FooGallery.utils.Factory#make|make} methods to create new instances depending on your use case.
|
2670 |
-
* @example {@run true}
|
2671 |
-
* // create a new instance of the factory, this is usually exposed by the class that will be using the factory.
|
2672 |
-
* var factory = new FooGallery.utils.Factory();
|
2673 |
-
*
|
2674 |
-
* // create a class to register
|
2675 |
-
* function Test(){}
|
2676 |
-
*
|
2677 |
-
* // register the class with the factory with the default priority
|
2678 |
-
* var succeeded = factory.register( "test", Test );
|
2679 |
-
*
|
2680 |
-
* console.log( succeeded ); // => true
|
2681 |
-
* console.log( factory.registered.hasOwnProperty( "test" ) ); // => true
|
2682 |
-
* console.log( factory.registered[ "test" ].name === "test" ); // => true
|
2683 |
-
* console.log( factory.registered[ "test" ].klass === Test ); // => true
|
2684 |
-
* console.log( factory.registered[ "test" ].priority === 0 ); // => true
|
2685 |
-
*/
|
2686 |
-
register: function(name, klass, priority){
|
2687 |
-
if (!_is.string(name) || _is.empty(name) || !_is.fn(klass)) return false;
|
2688 |
-
priority = _is.number(priority) ? priority : 0;
|
2689 |
-
var current = this.registered[name];
|
2690 |
-
this.registered[name] = {
|
2691 |
-
name: name,
|
2692 |
-
klass: klass,
|
2693 |
-
priority: !_is.undef(current) ? current.priority : priority
|
2694 |
-
};
|
2695 |
-
return true;
|
2696 |
-
}
|
2697 |
-
});
|
2698 |
-
|
2699 |
-
})(
|
2700 |
-
// dependencies
|
2701 |
-
FooGallery.utils.$,
|
2702 |
-
FooGallery.utils,
|
2703 |
-
FooGallery.utils.is,
|
2704 |
-
FooGallery.utils.fn
|
2705 |
-
);
|
2706 |
-
(function(_, _fn, _str){
|
2707 |
-
// only register methods if this version is the current version
|
2708 |
-
if (_.version !== '0.0.5') return;
|
2709 |
-
|
2710 |
-
_.Debugger = _.Class.extend(/** @lends FooGallery.utils.Debugger */{
|
2711 |
-
/**
|
2712 |
-
* @summary A debug utility class that can be enabled across sessions using the given `key` by storing its state in `localStorage`.
|
2713 |
-
* @memberof FooGallery.utils
|
2714 |
-
* @constructs Debugger
|
2715 |
-
* @param {string} key - The key to use to store the debug state in `localStorage`.
|
2716 |
-
* @description This class allows you to write additional debug info to the console within your code which by default is not actually output. You can then enable the debugger and it will start to output the results to the console.
|
2717 |
-
*
|
2718 |
-
* This most useful feature of this is the ability to store the debug state across page sessions by using `localStorage`. This allows you enable the debugger and then refresh the page to view any debugger output that occurs on page load.
|
2719 |
-
*/
|
2720 |
-
construct: function(key){
|
2721 |
-
/**
|
2722 |
-
* @summary The key used to store the debug state in `localStorage`.
|
2723 |
-
* @memberof FooGallery.utils.Debugger#
|
2724 |
-
* @name key
|
2725 |
-
* @type {string}
|
2726 |
-
*/
|
2727 |
-
this.key = key;
|
2728 |
-
/**
|
2729 |
-
* @summary Whether or not the debugger is currently enabled.
|
2730 |
-
* @memberof FooGallery.utils.Debugger#
|
2731 |
-
* @name enabled
|
2732 |
-
* @type {boolean}
|
2733 |
-
* @readonly
|
2734 |
-
* @description The value for this property is synced with the current state stored in `localStorage` and should never set from outside of this class.
|
2735 |
-
*/
|
2736 |
-
this.enabled = !!localStorage.getItem(this.key);
|
2737 |
-
},
|
2738 |
-
/**
|
2739 |
-
* @summary Enable the debugger causing additional info to be logged to the console.
|
2740 |
-
* @memberof FooGallery.utils.Debugger#
|
2741 |
-
* @function enable
|
2742 |
-
* @example
|
2743 |
-
* var d = new FooGallery.utils.Debugger( "FOO_DEBUG" );
|
2744 |
-
* d.log( "Never logged" );
|
2745 |
-
* d.enabled();
|
2746 |
-
* d.log( "I am logged!" );
|
2747 |
-
*/
|
2748 |
-
enable: function(){
|
2749 |
-
this.enabled = true;
|
2750 |
-
localStorage.setItem(this.key, this.enabled);
|
2751 |
-
},
|
2752 |
-
/**
|
2753 |
-
* @summary Disable the debugger stopping additional info being logged to the console.
|
2754 |
-
* @memberof FooGallery.utils.Debugger#
|
2755 |
-
* @function disable
|
2756 |
-
* @example
|
2757 |
-
* var d = new FooGallery.utils.Debugger( "FOO_DEBUG" );
|
2758 |
-
* d.log( "Never logged" );
|
2759 |
-
* d.enabled();
|
2760 |
-
* d.log( "I am logged!" );
|
2761 |
-
* d.disable();
|
2762 |
-
* d.log( "Never logged" );
|
2763 |
-
*/
|
2764 |
-
disable: function(){
|
2765 |
-
this.enabled = false;
|
2766 |
-
localStorage.removeItem(this.key);
|
2767 |
-
},
|
2768 |
-
/**
|
2769 |
-
* @summary Logs the supplied message and additional arguments to the console when enabled.
|
2770 |
-
* @memberof FooGallery.utils.Debugger#
|
2771 |
-
* @function log
|
2772 |
-
* @param {string} message - The message to log to the console.
|
2773 |
-
* @param {*} [argN] - Any number of additional arguments to supply after the message.
|
2774 |
-
* @description This method basically wraps the `console.log` method and simply checks the enabled state of the debugger before passing along any supplied arguments.
|
2775 |
-
*/
|
2776 |
-
log: function(message, argN){
|
2777 |
-
if (!this.enabled) return;
|
2778 |
-
console.log.apply(console, _fn.arg2arr(arguments));
|
2779 |
-
},
|
2780 |
-
/**
|
2781 |
-
* @summary Logs the formatted message and additional arguments to the console when enabled.
|
2782 |
-
* @memberof FooGallery.utils.Debugger#
|
2783 |
-
* @function logf
|
2784 |
-
* @param {string} message - The message containing named `replacements` to log to the console.
|
2785 |
-
* @param {Object.<string, *>} replacements - An object containing key value pairs used to perform a named format on the `message`.
|
2786 |
-
* @param {*} [argN] - Any number of additional arguments to supply after the message.
|
2787 |
-
* @see {@link FooGallery.utils.str.format} for more information on supplying the replacements object.
|
2788 |
-
*/
|
2789 |
-
logf: function(message, replacements, argN){
|
2790 |
-
if (!this.enabled) return;
|
2791 |
-
var args = _fn.arg2arr(arguments);
|
2792 |
-
message = args.shift();
|
2793 |
-
replacements = args.shift();
|
2794 |
-
args.unshift(_str.format(message, replacements));
|
2795 |
-
this.log.apply(this, args);
|
2796 |
-
}
|
2797 |
-
});
|
2798 |
-
|
2799 |
-
})(
|
2800 |
-
// dependencies
|
2801 |
-
FooGallery.utils,
|
2802 |
-
FooGallery.utils.fn,
|
2803 |
-
FooGallery.utils.str
|
2804 |
-
);
|
2805 |
-
(function($, _, _is){
|
2806 |
-
// only register methods if this version is the current version
|
2807 |
-
if (_.version !== '0.0.5') return;
|
2808 |
-
|
2809 |
-
_.Throttle = _.Class.extend(/** @lends FooGallery.utils.Throttle */{
|
2810 |
-
/**
|
2811 |
-
* @summary A timer to throttle the execution of code.
|
2812 |
-
* @memberof FooGallery.utils
|
2813 |
-
* @constructs
|
2814 |
-
* @param {number} [idle=0] - The idle time, in milliseconds, that must pass before executing the callback supplied to the {@link FooGallery.utils.Throttle#limit|limit} method.
|
2815 |
-
* @augments FooGallery.utils.Class
|
2816 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
2817 |
-
* @borrows FooGallery.utils.Class.override as override
|
2818 |
-
* @description This class is basically a wrapper around the {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout|window.setTimeout} and {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout|window.clearTimeout} functions. It was created to help throttle the execution of code in event handlers that could be called multiple times per second such as the window resize event. It is meant to limit the execution of expensive code until the specified idle time has lapsed.
|
2819 |
-
*
|
2820 |
-
* Take a look at the examples for the {@link FooGallery.utils.Throttle#limit|limit} and {@link FooGallery.utils.Throttle#clear|clear} methods for basic usage.
|
2821 |
-
* @example <caption>The below shows how you can use this class to prevent expensive code being executed with every call to your window resize handler. If you run this example resize your browser to see when the messages are logged.</caption>{@run true}
|
2822 |
-
* var throttle = new FooGallery.utils.Throttle( 50 );
|
2823 |
-
*
|
2824 |
-
* $(window).on("resize", function(){
|
2825 |
-
*
|
2826 |
-
* throttle.limit(function(){
|
2827 |
-
* console.log( "Only called when resizing has stopped for at least 50 milliseconds." );
|
2828 |
-
* });
|
2829 |
-
*
|
2830 |
-
* });
|
2831 |
-
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout|WindowTimers.setTimeout() - Web APIs | MDN}
|
2832 |
-
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout|WindowTimers.clearTimeout() - Web APIs | MDN}
|
2833 |
-
*/
|
2834 |
-
construct: function(idle){
|
2835 |
-
/**
|
2836 |
-
* @summary The id from the last call to {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout|window.setTimeout}.
|
2837 |
-
* @type {?number}
|
2838 |
-
* @readonly
|
2839 |
-
* @default null
|
2840 |
-
*/
|
2841 |
-
this.id = null;
|
2842 |
-
/**
|
2843 |
-
* @summary Whether or not there is an active timer.
|
2844 |
-
* @type {boolean}
|
2845 |
-
* @readonly
|
2846 |
-
* @default false
|
2847 |
-
*/
|
2848 |
-
this.active = false;
|
2849 |
-
/**
|
2850 |
-
* @summary The idle time, in milliseconds, the timer should wait before executing the callback supplied to the {@link FooGallery.utils.Throttle#limit|limit} method.
|
2851 |
-
* @type {number}
|
2852 |
-
* @readonly
|
2853 |
-
* @default 0
|
2854 |
-
*/
|
2855 |
-
this.idle = _is.number(idle) ? idle : 0;
|
2856 |
-
},
|
2857 |
-
/**
|
2858 |
-
* @summary Starts a new timer clearing any previously set and executes the <code>callback</code> once it expires.
|
2859 |
-
* @instance
|
2860 |
-
* @param {function} callback - The function to call once the timer expires.
|
2861 |
-
* @example <caption>In the below example the <code>callback</code> function will only be executed once despite the repeated calls to the {@link FooGallery.utils.Throttle#limit|limit} method as each call resets the idle timer.</caption>{@run true}
|
2862 |
-
* // create a new throttle
|
2863 |
-
* var throttle = new FooGallery.utils.Throttle( 50 );
|
2864 |
-
*
|
2865 |
-
* // this `for` loop represents something like the window resize event that could call your handler multiple times a second
|
2866 |
-
* for (var i = 0, max = 5; i < max; i++){
|
2867 |
-
*
|
2868 |
-
* throttle.limit( function(){
|
2869 |
-
* console.log( "Only called once, after the idle timer lapses" );
|
2870 |
-
* } );
|
2871 |
-
*
|
2872 |
-
* }
|
2873 |
-
*/
|
2874 |
-
limit: function(callback){
|
2875 |
-
if (!_is.fn(callback)) return;
|
2876 |
-
this.clear();
|
2877 |
-
var self = this;
|
2878 |
-
this.active = true;
|
2879 |
-
this.id = setTimeout(function(){
|
2880 |
-
self.active = false;
|
2881 |
-
self.id = null;
|
2882 |
-
callback();
|
2883 |
-
}, this.idle);
|
2884 |
-
},
|
2885 |
-
/**
|
2886 |
-
* @summary Clear any previously set timer and prevent the execution of its' callback.
|
2887 |
-
* @instance
|
2888 |
-
* @example <caption>The below shows how to cancel an active throttle and prevent the execution of it's callback.</caption>{@run true}
|
2889 |
-
* // create a new throttle
|
2890 |
-
* var throttle = new FooGallery.utils.Throttle( 50 );
|
2891 |
-
*
|
2892 |
-
* // this `for` loop represents something like the window resize event that could call your handler multiple times a second
|
2893 |
-
* for (var i = 0, max = 5; i < max; i++){
|
2894 |
-
*
|
2895 |
-
* throttle.limit( function(){
|
2896 |
-
* console.log( "I'm never called" );
|
2897 |
-
* } );
|
2898 |
-
*
|
2899 |
-
* }
|
2900 |
-
*
|
2901 |
-
* // cancel the current throttle timer
|
2902 |
-
* throttle.clear();
|
2903 |
-
*/
|
2904 |
-
clear: function(){
|
2905 |
-
if (_is.number(this.id)){
|
2906 |
-
clearTimeout(this.id);
|
2907 |
-
this.active = false;
|
2908 |
-
this.id = null;
|
2909 |
-
}
|
2910 |
-
}
|
2911 |
-
});
|
2912 |
-
|
2913 |
-
})(
|
2914 |
-
// dependencies
|
2915 |
-
FooGallery.utils.$,
|
2916 |
-
FooGallery.utils,
|
2917 |
-
FooGallery.utils.is
|
2918 |
-
);
|
2919 |
-
(function($, _, _utils, _is, _fn){
|
2920 |
-
|
2921 |
-
_.debug = new _utils.Debugger("__FooGallery__");
|
2922 |
-
|
2923 |
-
/**
|
2924 |
-
* @summary Simple utility method to convert space delimited strings of CSS class names into a CSS selector.
|
2925 |
-
* @memberof FooGallery.utils
|
2926 |
-
* @function selectify
|
2927 |
-
* @param {(string|string[]|object)} classes - A single space delimited string of CSS class names to convert or an array of them with each item being included in the selector using the OR (`,`) syntax as a separator. If an object is supplied the result will be an object with the same property names but the values converted to selectors.
|
2928 |
-
* @returns {(object|string)}
|
2929 |
-
*/
|
2930 |
-
_utils.selectify = function(classes){
|
2931 |
-
if (_is.hash(classes)){
|
2932 |
-
var result = {}, selector;
|
2933 |
-
for (var name in classes){
|
2934 |
-
if (!classes.hasOwnProperty(name)) continue;
|
2935 |
-
if (selector = _utils.selectify(classes[name])){
|
2936 |
-
result[name] = selector;
|
2937 |
-
}
|
2938 |
-
}
|
2939 |
-
return result;
|
2940 |
-
}
|
2941 |
-
if (_is.string(classes) || _is.array(classes)){
|
2942 |
-
if (_is.string(classes)) classes = [classes];
|
2943 |
-
return $.map(classes, function(str){
|
2944 |
-
return _is.string(str) ? "." + str.split(/\s/g).join(".") : null;
|
2945 |
-
}).join(",");
|
2946 |
-
}
|
2947 |
-
return null;
|
2948 |
-
};
|
2949 |
-
|
2950 |
-
/**
|
2951 |
-
* @summary The url of an empty 1x1 pixel image used as the default value for the `placeholder` and `error` {@link FooGallery.defaults|options}.
|
2952 |
-
* @memberof FooGallery
|
2953 |
-
* @name emptyImage
|
2954 |
-
* @type {string}
|
2955 |
-
* @default "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
|
2956 |
-
*/
|
2957 |
-
_.emptyImage = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
|
2958 |
-
|
2959 |
-
/**
|
2960 |
-
* @summary The name to use when getting or setting an instance of a {@link FooGallery.Template|template} on an element using jQuery's `.data()` method.
|
2961 |
-
* @memberof FooGallery
|
2962 |
-
* @name dataTemplate
|
2963 |
-
* @type {string}
|
2964 |
-
* @default "__FooGallery__"
|
2965 |
-
*/
|
2966 |
-
_.dataTemplate = "__FooGallery__";
|
2967 |
-
|
2968 |
-
/**
|
2969 |
-
* @summary The name to use when getting or setting an instance of a {@link FooGallery.Item|item} on an element using jQuery's `.data()` method.
|
2970 |
-
* @memberof FooGallery
|
2971 |
-
* @name dataItem
|
2972 |
-
* @type {string}
|
2973 |
-
* @default "__FooGalleryItem__"
|
2974 |
-
*/
|
2975 |
-
_.dataItem = "__FooGalleryItem__";
|
2976 |
-
|
2977 |
-
_.init = function(options, element){
|
2978 |
-
return _.template.make(options, element).initialize();
|
2979 |
-
};
|
2980 |
-
|
2981 |
-
_.initAll = function(options){
|
2982 |
-
return _fn.when($(".foogallery").map(function(i, element){
|
2983 |
-
return _.init(options, element);
|
2984 |
-
}).get());
|
2985 |
-
};
|
2986 |
-
|
2987 |
-
_.parseSrc = function(src, srcWidth, srcHeight, srcset, renderWidth, renderHeight){
|
2988 |
-
if (!_is.string(src)) return null;
|
2989 |
-
// if there is no srcset just return the src
|
2990 |
-
if (!_is.string(srcset)) return src;
|
2991 |
-
|
2992 |
-
// parse the srcset into objects containing the url, width, height and pixel density for each supplied source
|
2993 |
-
var list = $.map(srcset.replace(/(\s[\d.]+[whx]),/g, '$1 @,@ ').split(' @,@ '), function (val) {
|
2994 |
-
return {
|
2995 |
-
url: /^\s*(\S*)/.exec(val)[1],
|
2996 |
-
w: parseFloat((/\S\s+(\d+)w/.exec(val) || [0, Infinity])[1]),
|
2997 |
-
h: parseFloat((/\S\s+(\d+)h/.exec(val) || [0, Infinity])[1]),
|
2998 |
-
x: parseFloat((/\S\s+([\d.]+)x/.exec(val) || [0, 1])[1])
|
2999 |
-
};
|
3000 |
-
});
|
3001 |
-
|
3002 |
-
// if there is no items parsed from the srcset then just return the src
|
3003 |
-
if (!list.length) return src;
|
3004 |
-
|
3005 |
-
// add the current src into the mix by inspecting the first parsed item to figure out how to handle it
|
3006 |
-
list.unshift({
|
3007 |
-
url: src,
|
3008 |
-
w: list[0].w !== Infinity && list[0].h === Infinity ? srcWidth : Infinity,
|
3009 |
-
h: list[0].h !== Infinity && list[0].w === Infinity ? srcHeight : Infinity,
|
3010 |
-
x: 1
|
3011 |
-
});
|
3012 |
-
|
3013 |
-
// get the current viewport info and use it to determine the correct src to load
|
3014 |
-
var dpr = window.devicePixelRatio || 1,
|
3015 |
-
area = {w: renderWidth * dpr, h: renderHeight * dpr, x: dpr},
|
3016 |
-
property;
|
3017 |
-
|
3018 |
-
// first check each of the viewport properties against the max values of the same properties in our src array
|
3019 |
-
// only src's with a property greater than the viewport or equal to the max are kept
|
3020 |
-
for (property in area) {
|
3021 |
-
if (!area.hasOwnProperty(property)) continue;
|
3022 |
-
list = $.grep(list, (function (prop, limit) {
|
3023 |
-
return function (item) {
|
3024 |
-
return item[prop] >= area[prop] || item[prop] === limit;
|
3025 |
-
};
|
3026 |
-
})(property, Math.max.apply(null, $.map(list, function (item) {
|
3027 |
-
return item[property];
|
3028 |
-
}))));
|
3029 |
-
}
|
3030 |
-
|
3031 |
-
// next reduce our src array by comparing the viewport properties against the minimum values of the same properties of each src
|
3032 |
-
// only src's with a property equal to the minimum are kept
|
3033 |
-
for (property in area) {
|
3034 |
-
if (!area.hasOwnProperty(property)) continue;
|
3035 |
-
list = $.grep(list, (function (prop, limit) {
|
3036 |
-
return function (item) {
|
3037 |
-
return item[prop] === limit;
|
3038 |
-
};
|
3039 |
-
})(property, Math.min.apply(null, $.map(list, function (item) {
|
3040 |
-
return item[property];
|
3041 |
-
}))));
|
3042 |
-
}
|
3043 |
-
|
3044 |
-
// return the first url as it is the best match for the current viewport
|
3045 |
-
return list[0].url;
|
3046 |
-
};
|
3047 |
-
|
3048 |
-
/**
|
3049 |
-
* @summary Expose FooGallery as a jQuery plugin.
|
3050 |
-
* @memberof external:"jQuery.fn"#
|
3051 |
-
* @function foogallery
|
3052 |
-
* @param {(object|string)} [options] - The options to supply to FooGallery or one of the supported method names.
|
3053 |
-
* @param {external:"jQuery.fn"~readyCallback} [ready] - A callback executed once each template initialized is ready.
|
3054 |
-
* @returns {jQuery}
|
3055 |
-
* @example {@caption The below shows using this method in its simplest form, initializing a template on pre-existing elements.}{@lang html}
|
3056 |
-
* <!-- The container element for the template -->
|
3057 |
-
* <div id="gallery-1" class="foogallery">
|
3058 |
-
* <!-- A single item -->
|
3059 |
-
* <div class="fg-item" data-id="[item.id]">
|
3060 |
-
* <div class="fg-item-inner">
|
3061 |
-
* <a class="fg-thumb" href="[item.href]">
|
3062 |
-
* <img class="fg-image" width="[item.width]" height="[item.height]"
|
3063 |
-
* title="[item.title]" alt="[item.description]"
|
3064 |
-
* data-src="[item.src]"
|
3065 |
-
* data-srcset="[item.srcset]" />
|
3066 |
-
* <!-- Optional caption markup -->
|
3067 |
-
* <div class="fg-caption">
|
3068 |
-
* <div class="fg-caption-inner">
|
3069 |
-
* <div class="fg-caption-title">[item.title]</div>
|
3070 |
-
* <div class="fg-caption-desc">[item.description]</div>
|
3071 |
-
* </div>
|
3072 |
-
* </div>
|
3073 |
-
* </a>
|
3074 |
-
* </div>
|
3075 |
-
* </div>
|
3076 |
-
* <!-- Any number of additional items -->
|
3077 |
-
* </div>
|
3078 |
-
* <script>
|
3079 |
-
* jQuery(function($){
|
3080 |
-
* $("#gallery-1").foogallery();
|
3081 |
-
* });
|
3082 |
-
* </script>
|
3083 |
-
* @example {@caption Options can be supplied directly to the `.foogallery()` method or by supplying them using the `data-foogallery` attribute. If supplied using the attribute the value must follow [valid JSON syntax](http://en.wikipedia.org/wiki/JSON#Data_types.2C_syntax_and_example) including quoted property names. If the same option is supplied in both locations as it is below, the value from the attribute overrides the value supplied to the method, in this case `lazy` would be `true`.}{@lang html}
|
3084 |
-
* <!-- Supplying the options using the attribute -->
|
3085 |
-
* <div id="gallery-1" class="foogallery fg-responsive" data-foogallery='{"lazy": true}'>
|
3086 |
-
* <!-- Items -->
|
3087 |
-
* </div>
|
3088 |
-
* <script>
|
3089 |
-
* jQuery(function($){
|
3090 |
-
* // Supply the options directly to the method
|
3091 |
-
* $("#gallery-1").foogallery({
|
3092 |
-
* lazy: false
|
3093 |
-
* });
|
3094 |
-
* });
|
3095 |
-
* </script>
|
3096 |
-
*/
|
3097 |
-
$.fn.foogallery = function(options, ready){
|
3098 |
-
return this.filter(".foogallery").each(function(i, element){
|
3099 |
-
if (_is.string(options)){
|
3100 |
-
var template = $.data(element, _.dataTemplate);
|
3101 |
-
if (template instanceof _.Template){
|
3102 |
-
switch (options){
|
3103 |
-
case "layout":
|
3104 |
-
template.layout();
|
3105 |
-
return;
|
3106 |
-
case "destroy":
|
3107 |
-
template.destroy();
|
3108 |
-
return;
|
3109 |
-
}
|
3110 |
-
}
|
3111 |
-
} else {
|
3112 |
-
_.template.make(options, element).initialize().then(function(template){
|
3113 |
-
if (_is.fn(ready)){
|
3114 |
-
ready(template);
|
3115 |
-
}
|
3116 |
-
});
|
3117 |
-
}
|
3118 |
-
});
|
3119 |
-
};
|
3120 |
-
|
3121 |
-
/**
|
3122 |
-
* @summary If supplied this method is executed after each template is initialized.
|
3123 |
-
* @callback external:"jQuery.fn"~readyCallback
|
3124 |
-
* @param {FooGallery.Template} template - The template that was initialized.
|
3125 |
-
* @example {@caption The below shows an example of supplying this callback to the `.foogallery()` method.}
|
3126 |
-
* jQuery(".foogallery").foogallery({
|
3127 |
-
* // Options here
|
3128 |
-
* }, function(template){
|
3129 |
-
* // Called after each template is initialized on the matched elements
|
3130 |
-
* });
|
3131 |
-
*/
|
3132 |
-
|
3133 |
-
})(
|
3134 |
-
FooGallery.$,
|
3135 |
-
FooGallery,
|
3136 |
-
FooGallery.utils,
|
3137 |
-
FooGallery.utils.is,
|
3138 |
-
FooGallery.utils.fn
|
3139 |
-
);
|
3140 |
-
(function($, _, _utils, _is, _fn, _obj){
|
3141 |
-
|
3142 |
-
_.TemplateFactory = _utils.Factory.extend(/** @lends FooGallery.TemplateFactory */{
|
3143 |
-
/**
|
3144 |
-
* @summary A factory for galleries allowing them to be easily registered and created.
|
3145 |
-
* @memberof FooGallery
|
3146 |
-
* @constructs TemplateFactory
|
3147 |
-
* @description The plugin makes use of an instance of this class exposed as {@link FooGallery.template}.
|
3148 |
-
* @augments FooGallery.utils.Factory
|
3149 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
3150 |
-
* @borrows FooGallery.utils.Class.override as override
|
3151 |
-
*/
|
3152 |
-
construct: function(){
|
3153 |
-
/**
|
3154 |
-
* @summary An object containing all registered galleries.
|
3155 |
-
* @memberof FooGallery.TemplateFactory#
|
3156 |
-
* @name registered
|
3157 |
-
* @type {Object.<string, Object>}
|
3158 |
-
* @readonly
|
3159 |
-
* @example {@caption The following shows the structure of this object. The `<name>` placeholders would be the name the class was registered with.}
|
3160 |
-
* {
|
3161 |
-
* "<name>": {
|
3162 |
-
* "name": <string>,
|
3163 |
-
* "klass": <function>,
|
3164 |
-
* "test": <function>,
|
3165 |
-
* "priority": <number>
|
3166 |
-
* },
|
3167 |
-
* "<name>": {
|
3168 |
-
* "name": <string>,
|
3169 |
-
* "klass": <function>,
|
3170 |
-
* "test": <function>,
|
3171 |
-
* "priority": <number>
|
3172 |
-
* },
|
3173 |
-
* ...
|
3174 |
-
* }
|
3175 |
-
*/
|
3176 |
-
this.registered = {};
|
3177 |
-
},
|
3178 |
-
/**
|
3179 |
-
* @summary Registers a template constructor with the factory using the given `name` and `test` function.
|
3180 |
-
* @memberof FooGallery.TemplateFactory#
|
3181 |
-
* @function register
|
3182 |
-
* @param {string} name - The friendly name of the class.
|
3183 |
-
* @param {FooGallery.Template} template - The template constructor to register.
|
3184 |
-
* @param {object} options - The default options for the template.
|
3185 |
-
* @param {object} [classes={}] - The CSS classes for the template.
|
3186 |
-
* @param {object} [il8n={}] - The il8n strings for the template.
|
3187 |
-
* @param {number} [priority=0] - This determines the index for the class when using either the {@link FooGallery.TemplateFactory#load|load} or {@link FooGallery.TemplateFactory#names|names} methods, a higher value equals a lower index.
|
3188 |
-
* @returns {boolean} `true` if the `klass` was successfully registered.
|
3189 |
-
*/
|
3190 |
-
register: function(name, template, options, classes, il8n, priority){
|
3191 |
-
var self = this, result = self._super(name, template, priority);
|
3192 |
-
if (result){
|
3193 |
-
var reg = self.registered;
|
3194 |
-
reg[name].opt = _is.hash(options) ? options : {};
|
3195 |
-
reg[name].cls = _is.hash(classes) ? classes : {};
|
3196 |
-
reg[name].il8n = _is.hash(il8n) ? il8n : {};
|
3197 |
-
}
|
3198 |
-
return result;
|
3199 |
-
},
|
3200 |
-
/**
|
3201 |
-
* @summary Create a new instance of a registered template from the supplied `element` and `options`.
|
3202 |
-
* @memberof FooGallery.TemplateFactory#
|
3203 |
-
* @function make
|
3204 |
-
* @param {(object|FooGallery~Options)} [options] - The options for the template. If not supplied this will fall back to using the {@link FooGallery.defaults|defaults}.
|
3205 |
-
* @param {(jQuery|HTMLElement|string)} [element] - The jQuery object, HTMLElement or selector of the template element to create. If not supplied the {@link FooGallery~Options#type|type} options' value is used.
|
3206 |
-
* @returns {FooGallery.Template}
|
3207 |
-
*/
|
3208 |
-
make: function(options, element){
|
3209 |
-
element = _is.jq(element) ? element : $(element);
|
3210 |
-
options = _obj.merge(options, element.data("foogallery"));
|
3211 |
-
var self = this, type = self.type(options, element);
|
3212 |
-
if (!self.contains(type)) return null;
|
3213 |
-
options = self.options(type, options);
|
3214 |
-
return self._super(type, options, element);
|
3215 |
-
},
|
3216 |
-
type: function(options, element){
|
3217 |
-
element = _is.jq(element) ? element : $(element);
|
3218 |
-
var self = this, type = _is.hash(options) && _is.hash(options) && _is.string(options.type) && self.contains(options.type) ? options.type : "core";
|
3219 |
-
if (type === "core" && element.length > 0){
|
3220 |
-
var reg = self.registered, names = self.names(true);
|
3221 |
-
for (var i = 0, l = names.length; i < l; i++) {
|
3222 |
-
if (!reg.hasOwnProperty(names[i])) continue;
|
3223 |
-
var name = names[i], cls = reg[name].cls;
|
3224 |
-
if (!_is.string(cls.container)) continue;
|
3225 |
-
var selector = _utils.selectify(cls.container);
|
3226 |
-
if (element.is(selector)) {
|
3227 |
-
type = names[i];
|
3228 |
-
break;
|
3229 |
-
}
|
3230 |
-
}
|
3231 |
-
}
|
3232 |
-
return type;
|
3233 |
-
},
|
3234 |
-
configure: function(name, options, classes, il8n){
|
3235 |
-
var self = this;
|
3236 |
-
if (self.contains(name)){
|
3237 |
-
var reg = self.registered;
|
3238 |
-
_obj.extend(reg[name].opt, options);
|
3239 |
-
_obj.extend(reg[name].cls, classes);
|
3240 |
-
_obj.extend(reg[name].il8n, il8n);
|
3241 |
-
}
|
3242 |
-
},
|
3243 |
-
options: function(name, options){
|
3244 |
-
options = _is.hash(options) ? options : {};
|
3245 |
-
var self = this, reg = self.registered,
|
3246 |
-
def = reg["core"].opt,
|
3247 |
-
cls = reg["core"].cls,
|
3248 |
-
il8n = reg["core"].il8n;
|
3249 |
-
|
3250 |
-
options = _.paging.merge(options);
|
3251 |
-
if (name !== "core" && self.contains(name)){
|
3252 |
-
options = _obj.extend({}, def, reg[name].opt, options);
|
3253 |
-
options.cls = _obj.extend({}, cls, reg[name].cls, options.cls);
|
3254 |
-
options.il8n = _obj.extend({}, il8n, reg[name].il8n, options.il8n);
|
3255 |
-
} else {
|
3256 |
-
options = _obj.extend({}, def, options);
|
3257 |
-
options.cls = _obj.extend({}, cls, options.cls);
|
3258 |
-
options.il8n = _obj.extend({}, il8n, options.il8n);
|
3259 |
-
}
|
3260 |
-
return options;
|
3261 |
-
}
|
3262 |
-
});
|
3263 |
-
|
3264 |
-
/**
|
3265 |
-
* @summary The factory used to register and create the various template types of FooGallery.
|
3266 |
-
* @memberof FooGallery
|
3267 |
-
* @name template
|
3268 |
-
* @type {FooGallery.TemplateFactory}
|
3269 |
-
*/
|
3270 |
-
_.template = new _.TemplateFactory();
|
3271 |
-
|
3272 |
-
})(
|
3273 |
-
FooGallery.$,
|
3274 |
-
FooGallery,
|
3275 |
-
FooGallery.utils,
|
3276 |
-
FooGallery.utils.is,
|
3277 |
-
FooGallery.utils.fn,
|
3278 |
-
FooGallery.utils.obj
|
3279 |
-
);
|
3280 |
-
(function(_, _utils, _is, _fn, _obj){
|
3281 |
-
|
3282 |
-
_.PagingFactory = _utils.Factory.extend(/** @lends FooGallery.PagingFactory */{
|
3283 |
-
/**
|
3284 |
-
* @summary A factory for paging types allowing them to be easily registered and created.
|
3285 |
-
* @memberof FooGallery
|
3286 |
-
* @constructs PagingFactory
|
3287 |
-
* @description The plugin makes use of an instance of this class exposed as {@link FooGallery.paging}.
|
3288 |
-
* @augments FooGallery.Factory
|
3289 |
-
* @borrows FooGallery.Factory.extend as extend
|
3290 |
-
* @borrows FooGallery.Factory.override as override
|
3291 |
-
*/
|
3292 |
-
construct: function(){
|
3293 |
-
/**
|
3294 |
-
* @summary An object containing all registered paging types.
|
3295 |
-
* @memberof FooGallery.PagingFactory#
|
3296 |
-
* @name registered
|
3297 |
-
* @type {Object.<string, Object>}
|
3298 |
-
* @readonly
|
3299 |
-
* @example {@caption The following shows the structure of this object. The `<name>` placeholders would be the name the class was registered with.}
|
3300 |
-
* {
|
3301 |
-
* "<name>": {
|
3302 |
-
* "name": <string>,
|
3303 |
-
* "klass": <function>,
|
3304 |
-
* "ctrl": <function>,
|
3305 |
-
* "priority": <number>
|
3306 |
-
* },
|
3307 |
-
* "<name>": {
|
3308 |
-
* "name": <string>,
|
3309 |
-
* "klass": <function>,
|
3310 |
-
* "ctrl": <function>,
|
3311 |
-
* "priority": <number>
|
3312 |
-
* },
|
3313 |
-
* ...
|
3314 |
-
* }
|
3315 |
-
*/
|
3316 |
-
this.registered = {};
|
3317 |
-
},
|
3318 |
-
/**
|
3319 |
-
* @summary Registers a paging `type` constructor with the factory using the given `name` and `test` function.
|
3320 |
-
* @memberof FooGallery.PagingFactory#
|
3321 |
-
* @function register
|
3322 |
-
* @param {string} name - The friendly name of the class.
|
3323 |
-
* @param {FooGallery.Paging} type - The paging type constructor to register.
|
3324 |
-
* @param {FooGallery.PagingControl} [ctrl] - An optional control to register for the paging type.
|
3325 |
-
* @param {object} [options={}] - The default options for the paging type.
|
3326 |
-
* @param {object} [classes={}] - The CSS classes for the paging type.
|
3327 |
-
* @param {object} [il8n={}] - The il8n strings for the paging type.
|
3328 |
-
* @param {number} [priority=0] - This determines the index for the class when using either the {@link FooGallery.PagingFactory#load|load} or {@link FooGallery.PagingFactory#names|names} methods, a higher value equals a lower index.
|
3329 |
-
* @returns {boolean} `true` if the `klass` was successfully registered.
|
3330 |
-
*/
|
3331 |
-
register: function(name, type, ctrl, options, classes, il8n, priority){
|
3332 |
-
var self = this, result = self._super(name, type, priority);
|
3333 |
-
if (result){
|
3334 |
-
var reg = self.registered;
|
3335 |
-
reg[name].ctrl = _is.fn(ctrl) ? ctrl : null;
|
3336 |
-
reg[name].opt = _is.hash(options) ? options : {};
|
3337 |
-
reg[name].cls = _is.hash(classes) ? classes : {};
|
3338 |
-
reg[name].il8n = _is.hash(il8n) ? il8n : {};
|
3339 |
-
}
|
3340 |
-
return result;
|
3341 |
-
},
|
3342 |
-
// /**
|
3343 |
-
// * @summary Create a new instance of a registered paging type for the supplied `template`.
|
3344 |
-
// * @memberof FooGallery.PagingFactory#
|
3345 |
-
// * @function make
|
3346 |
-
// * @param {FooGallery.Template} template - The template creating the new instance.
|
3347 |
-
// * @returns {FooGallery.Paging}
|
3348 |
-
// */
|
3349 |
-
// make: function(template){
|
3350 |
-
// var self = this, paging, type;
|
3351 |
-
// if (!(template instanceof _.Template) || !_is.hash(paging = template.opt.paging) || !self.contains(type = paging.type) || type === "default") return null;
|
3352 |
-
// var reg = self.registered;
|
3353 |
-
// template.opt.paging = _obj.extend({}, reg["default"].opt, reg[type].opt, template.opt.paging);
|
3354 |
-
// template.cls.paging = _obj.extend({}, reg["default"].cls, reg[type].cls, template.cls.paging);
|
3355 |
-
// template.il8n.paging = _obj.extend({}, reg["default"].il8n, reg[type].il8n, template.il8n.paging);
|
3356 |
-
// template.sel.paging = _utils.selectify(template.cls.paging);
|
3357 |
-
// return self._super(type, template);
|
3358 |
-
// },
|
3359 |
-
type: function(options){
|
3360 |
-
var self = this, opt;
|
3361 |
-
return _is.hash(options) && _is.hash(opt = options.paging) && _is.string(opt.type) && self.contains(opt.type) ? opt.type : null;
|
3362 |
-
},
|
3363 |
-
merge: function(options){
|
3364 |
-
options = _is.hash(options) ? options : {};
|
3365 |
-
var self = this, type = self.type(options),
|
3366 |
-
reg = self.registered,
|
3367 |
-
def = reg["default"].opt,
|
3368 |
-
def_cls = reg["default"].cls,
|
3369 |
-
def_il8n = reg["default"].il8n,
|
3370 |
-
opt = _is.hash(options.paging) ? options.paging : {},
|
3371 |
-
cls = _is.hash(options.cls) && _is.hash(options.cls.paging) ? options.cls.paging : {},
|
3372 |
-
il8n = _is.hash(options.il8n) && _is.hash(options.il8n.paging) ? options.il8n.paging : {};
|
3373 |
-
|
3374 |
-
if (type !== "default" && self.contains(type)){
|
3375 |
-
options.paging = _obj.extend({}, def, reg[type].opt, opt, {type: type});
|
3376 |
-
options.cls = _obj.extend({}, {paging: def_cls}, {paging: reg[type].cls}, {paging: cls});
|
3377 |
-
options.il8n = _obj.extend({}, {paging: def_il8n}, {paging: reg[type].il8n}, {paging: il8n});
|
3378 |
-
} else {
|
3379 |
-
options.paging = _obj.extend({}, def, opt, {type: type});
|
3380 |
-
options.cls = _obj.extend({}, {paging: def_cls}, {paging: cls});
|
3381 |
-
options.il8n = _obj.extend({}, {paging: def_il8n}, {paging: il8n});
|
3382 |
-
}
|
3383 |
-
return options;
|
3384 |
-
},
|
3385 |
-
configure: function(name, options, classes, il8n){
|
3386 |
-
var self = this;
|
3387 |
-
if (self.contains(name)){
|
3388 |
-
var reg = self.registered;
|
3389 |
-
_obj.extend(reg[name].opt, options);
|
3390 |
-
_obj.extend(reg[name].cls, classes);
|
3391 |
-
_obj.extend(reg[name].il8n, il8n);
|
3392 |
-
}
|
3393 |
-
},
|
3394 |
-
options: function(name, options){
|
3395 |
-
options = _is.hash(options) ? options : {};
|
3396 |
-
var self = this,
|
3397 |
-
reg = self.registered,
|
3398 |
-
def = reg["default"].opt,
|
3399 |
-
def_cls = reg["default"].cls,
|
3400 |
-
def_il8n = reg["default"].il8n,
|
3401 |
-
opt = _is.hash(options.paging) ? options.paging : {},
|
3402 |
-
cls = _is.hash(options.cls) && _is.hash(options.cls.paging) ? options.cls.paging : {},
|
3403 |
-
il8n = _is.hash(options.il8n) && _is.hash(options.il8n.paging) ? options.il8n.paging : {};
|
3404 |
-
|
3405 |
-
if (name !== "default" && self.contains(name)){
|
3406 |
-
options.paging = _obj.extend({}, def, reg[name].opt, opt, {type: name});
|
3407 |
-
options.cls = _obj.extend({}, {paging: def_cls}, {paging: reg[name].cls}, {paging: cls});
|
3408 |
-
options.il8n = _obj.extend({}, {paging: def_il8n}, {paging: reg[name].il8n}, {paging: il8n});
|
3409 |
-
} else {
|
3410 |
-
options.paging = _obj.extend({}, def, opt, {type: name});
|
3411 |
-
options.cls = _obj.extend({}, {paging: def_cls}, {paging: cls});
|
3412 |
-
options.il8n = _obj.extend({}, {paging: def_il8n}, {paging: il8n});
|
3413 |
-
}
|
3414 |
-
return options;
|
3415 |
-
},
|
3416 |
-
/**
|
3417 |
-
* @summary Checks if the factory contains a control registered using the supplied `name`.
|
3418 |
-
* @memberof FooGallery.PagingFactory#
|
3419 |
-
* @function hasCtrl
|
3420 |
-
* @param {string} name - The friendly name of the class.
|
3421 |
-
* @returns {boolean}
|
3422 |
-
*/
|
3423 |
-
hasCtrl: function(name){
|
3424 |
-
var self = this, reg = self.registered[name];
|
3425 |
-
return _is.hash(reg) && _is.fn(reg.ctrl);
|
3426 |
-
},
|
3427 |
-
/**
|
3428 |
-
* @summary Create a new instance of a control class registered with the supplied `name` and arguments.
|
3429 |
-
* @memberof FooGallery.PagingFactory#
|
3430 |
-
* @function makeCtrl
|
3431 |
-
* @param {string} name - The friendly name of the class.
|
3432 |
-
* @param {FooGallery.Template} template - The template creating the control.
|
3433 |
-
* @param {FooGallery.Paging} parent - The parent paging class creating the control.
|
3434 |
-
* @param {string} position - The position the control will be displayed at.
|
3435 |
-
* @returns {?FooGallery.PagingControl}
|
3436 |
-
*/
|
3437 |
-
makeCtrl: function(name, template, parent, position){
|
3438 |
-
var self = this, reg = self.registered[name];
|
3439 |
-
if (_is.hash(reg) && _is.fn(reg.ctrl)){
|
3440 |
-
return new reg.ctrl(template, parent, position);
|
3441 |
-
}
|
3442 |
-
return null;
|
3443 |
-
}
|
3444 |
-
});
|
3445 |
-
|
3446 |
-
/**
|
3447 |
-
* @summary The factory used to register and create the various paging types of FooGallery.
|
3448 |
-
* @memberof FooGallery
|
3449 |
-
* @name paging
|
3450 |
-
* @type {FooGallery.PagingFactory}
|
3451 |
-
*/
|
3452 |
-
_.paging = new _.PagingFactory();
|
3453 |
-
|
3454 |
-
})(
|
3455 |
-
FooGallery,
|
3456 |
-
FooGallery.utils,
|
3457 |
-
FooGallery.utils.is,
|
3458 |
-
FooGallery.utils.fn,
|
3459 |
-
FooGallery.utils.obj
|
3460 |
-
);
|
3461 |
-
(function($, _, _utils, _is, _fn, _str){
|
3462 |
-
|
3463 |
-
_.Template = _utils.Class.extend(/** @lends FooGallery.Template */{
|
3464 |
-
/**
|
3465 |
-
* @summary The primary class for FooGallery, this controls the flow of the plugin across all templates.
|
3466 |
-
* @memberof FooGallery
|
3467 |
-
* @constructs Template
|
3468 |
-
* @param {FooGallery~Options} [options] - The options for the template.
|
3469 |
-
* @param {jQuery} [element] - The jQuery object of the templates' container element. If not supplied one will be created within the `parent` element supplied to the {@link FooGallery.Template#initialize|initialize} method.
|
3470 |
-
* @augments FooGallery.utils.Class
|
3471 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
3472 |
-
* @borrows FooGallery.utils.Class.override as override
|
3473 |
-
*/
|
3474 |
-
construct: function(options, element){
|
3475 |
-
var self = this;
|
3476 |
-
/**
|
3477 |
-
* @summary The jQuery object for the template container.
|
3478 |
-
* @memberof FooGallery.Template#
|
3479 |
-
* @name $el
|
3480 |
-
* @type {jQuery}
|
3481 |
-
*/
|
3482 |
-
self.$el = _is.jq(element) ? element : $(element);
|
3483 |
-
/**
|
3484 |
-
* @summary The options for the template.
|
3485 |
-
* @memberof FooGallery.Template#
|
3486 |
-
* @name opt
|
3487 |
-
* @type {FooGallery~Options}
|
3488 |
-
*/
|
3489 |
-
self.opt = options;
|
3490 |
-
/**
|
3491 |
-
* @summary Any custom options for the template.
|
3492 |
-
* @memberof FooGallery.Template#
|
3493 |
-
* @name template
|
3494 |
-
* @type {object}
|
3495 |
-
*/
|
3496 |
-
self.template = options.template;
|
3497 |
-
/**
|
3498 |
-
* @summary The ID for the template.
|
3499 |
-
* @memberof FooGallery.Template#
|
3500 |
-
* @name id
|
3501 |
-
* @type {string}
|
3502 |
-
*/
|
3503 |
-
self.id = self.$el.prop("id") || options.id;
|
3504 |
-
/**
|
3505 |
-
* @summary Whether or not the template created its' own container element.
|
3506 |
-
* @memberof FooGallery.Template#
|
3507 |
-
* @name createdSelf
|
3508 |
-
* @type {boolean}
|
3509 |
-
*/
|
3510 |
-
self.createdSelf = false;
|
3511 |
-
/**
|
3512 |
-
* @summary The CSS classes for the template.
|
3513 |
-
* @memberof FooGallery.Template#
|
3514 |
-
* @name cls
|
3515 |
-
* @type {FooGallery~CSSClasses}
|
3516 |
-
*/
|
3517 |
-
self.cls = options.cls;
|
3518 |
-
/**
|
3519 |
-
* @summary The il8n strings for the template.
|
3520 |
-
* @memberof FooGallery.Template#
|
3521 |
-
* @name il8n
|
3522 |
-
* @type {FooGallery~il8n}
|
3523 |
-
*/
|
3524 |
-
self.il8n = options.il8n;
|
3525 |
-
/**
|
3526 |
-
* @summary The CSS selectors for the template.
|
3527 |
-
* @memberof FooGallery.Template#
|
3528 |
-
* @name sel
|
3529 |
-
* @type {FooGallery~CSSSelectors}
|
3530 |
-
*/
|
3531 |
-
self.sel = _utils.selectify(self.cls);
|
3532 |
-
/**
|
3533 |
-
* @summary The item manager for the template.
|
3534 |
-
* @memberof FooGallery.Template#
|
3535 |
-
* @name items
|
3536 |
-
* @type {FooGallery.Items}
|
3537 |
-
*/
|
3538 |
-
self.items = _.components.make("items", self);
|
3539 |
-
/**
|
3540 |
-
* @summary The page manager for the template.
|
3541 |
-
* @memberof FooGallery.Template#
|
3542 |
-
* @name pages
|
3543 |
-
* @type {?FooGallery.Paging}
|
3544 |
-
*/
|
3545 |
-
self.pages = _.paging.make(options.paging.type, self);
|
3546 |
-
/**
|
3547 |
-
* @summary The state manager for the template.
|
3548 |
-
* @memberof FooGallery.Template#
|
3549 |
-
* @name state
|
3550 |
-
* @type {FooGallery.State}
|
3551 |
-
*/
|
3552 |
-
self.state = _.components.make("state", self);
|
3553 |
-
/**
|
3554 |
-
* @summary The promise object returned by the {@link FooGallery.Template#initialize|initialize} method.
|
3555 |
-
* @memberof FooGallery.Template#
|
3556 |
-
* @name _initialize
|
3557 |
-
* @type {?Promise}
|
3558 |
-
* @private
|
3559 |
-
*/
|
3560 |
-
self._initialize = null;
|
3561 |
-
self.initializing = false;
|
3562 |
-
self.initialized = false;
|
3563 |
-
self.destroying = false;
|
3564 |
-
self.destroyed = false;
|
3565 |
-
},
|
3566 |
-
|
3567 |
-
// ################
|
3568 |
-
// ## Initialize ##
|
3569 |
-
// ################
|
3570 |
-
|
3571 |
-
/**
|
3572 |
-
* @summary Initialize the template.
|
3573 |
-
* @memberof FooGallery.Template#
|
3574 |
-
* @function initialize
|
3575 |
-
* @param {(jQuery|HTMLElement|string)} [parent] - If no element was supplied to the constructor you must supply a parent element for the template to append itself to. This can be a jQuery object, HTMLElement or a CSS selector.
|
3576 |
-
* @returns {Promise.<FooGallery.Template>}
|
3577 |
-
* @description Once resolved all options, objects and elements required by the template have been parsed or created and the initial load is complete.
|
3578 |
-
* @fires FooGallery.Template~"pre-init.foogallery"
|
3579 |
-
* @fires FooGallery.Template~"init.foogallery"
|
3580 |
-
* @fires FooGallery.Template~"post-init.foogallery"
|
3581 |
-
* @fires FooGallery.Template~"ready.foogallery"
|
3582 |
-
*/
|
3583 |
-
initialize: function(parent){
|
3584 |
-
var self = this;
|
3585 |
-
if (_is.promise(self._initialize)) return self._initialize;
|
3586 |
-
parent = _is.jq(parent) ? parent : $(parent);
|
3587 |
-
return self._initialize = $.Deferred(function(def){
|
3588 |
-
self.initializing = true;
|
3589 |
-
if (parent.length === 0 && self.$el.parent().length === 0){
|
3590 |
-
def.reject("A parent element is required.");
|
3591 |
-
return;
|
3592 |
-
}
|
3593 |
-
if (self.$el.length === 0){
|
3594 |
-
self.$el = self.create();
|
3595 |
-
self.createdSelf = true;
|
3596 |
-
}
|
3597 |
-
if (parent.length > 0){
|
3598 |
-
self.$el.appendTo(parent);
|
3599 |
-
}
|
3600 |
-
var queue = $.Deferred(), promise = queue.promise(), existing;
|
3601 |
-
if (self.$el.length > 0 && (existing = self.$el.data(_.dataTemplate)) instanceof _.Template){
|
3602 |
-
promise = promise.then(function(){
|
3603 |
-
return existing.destroy().then(function(){
|
3604 |
-
self.$el.data(_.dataTemplate, self);
|
3605 |
-
});
|
3606 |
-
});
|
3607 |
-
} else {
|
3608 |
-
self.$el.data(_.dataTemplate, self);
|
3609 |
-
}
|
3610 |
-
promise.then(function(){
|
3611 |
-
if (self.destroying) return _fn.rejectWith("destroy in progress");
|
3612 |
-
// at this point we have our container element free of pre-existing instances so let's bind any event listeners supplied by the .on option
|
3613 |
-
if (!_is.empty(self.opt.on)){
|
3614 |
-
self.$el.on(self.opt.on);
|
3615 |
-
}
|
3616 |
-
|
3617 |
-
/**
|
3618 |
-
* @summary Raised before the template is fully initialized.
|
3619 |
-
* @event FooGallery.Template~"pre-init.foogallery"
|
3620 |
-
* @type {jQuery.Event}
|
3621 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3622 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3623 |
-
* @returns {Promise} Resolved once the pre-initialization work is complete, rejected if an error occurs or execution is prevented.
|
3624 |
-
* @description At this point in the initialization chain the {@link FooGallery.Template#opt|opt} property has not undergone any additional parsing and is just the result of the {@link FooGallery.defaults|default options} being extended with any user supplied ones.
|
3625 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3626 |
-
* $(".foogallery").foogallery({
|
3627 |
-
* on: {
|
3628 |
-
* "pre-init.foogallery": function(event, template){
|
3629 |
-
* // do something
|
3630 |
-
* }
|
3631 |
-
* }
|
3632 |
-
* });
|
3633 |
-
* @example {@caption Calling the `preventDefault` method on the `event` object will prevent the template being initialized.}
|
3634 |
-
* $(".foogallery").foogallery({
|
3635 |
-
* on: {
|
3636 |
-
* "pre-init.foogallery": function(event, template){
|
3637 |
-
* if ("some condition"){
|
3638 |
-
* // stop the template being initialized
|
3639 |
-
* event.preventDefault();
|
3640 |
-
* }
|
3641 |
-
* }
|
3642 |
-
* }
|
3643 |
-
* });
|
3644 |
-
*/
|
3645 |
-
var e = self.raise("pre-init");
|
3646 |
-
if (e.isDefaultPrevented()) return _fn.rejectWith("pre-init default prevented");
|
3647 |
-
}).then(function(){
|
3648 |
-
if (self.destroying) return _fn.rejectWith("destroy in progress");
|
3649 |
-
// checks the delay option and if it is greater than 0 waits for that amount of time before continuing
|
3650 |
-
if (self.opt.delay <= 0) return _fn.resolved;
|
3651 |
-
return $.Deferred(function(wait){
|
3652 |
-
self._delay = setTimeout(function () {
|
3653 |
-
self._delay = null;
|
3654 |
-
wait.resolve();
|
3655 |
-
}, self.opt.delay);
|
3656 |
-
}).promise();
|
3657 |
-
}).then(function(){
|
3658 |
-
if (self.destroying) return _fn.rejectWith("destroy in progress");
|
3659 |
-
/**
|
3660 |
-
* @summary Raised before the template is initialized but after any pre-initialization work is complete.
|
3661 |
-
* @event FooGallery.Template~"init.foogallery"
|
3662 |
-
* @type {jQuery.Event}
|
3663 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3664 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3665 |
-
* @returns {Promise} Resolved once the initialization work is complete, rejected if an error occurs or execution is prevented.
|
3666 |
-
* @description At this point in the initialization chain all additional option parsing has been completed but the base components such as the items or state are not yet initialized.
|
3667 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3668 |
-
* $(".foogallery").foogallery({
|
3669 |
-
* on: {
|
3670 |
-
* "init.foogallery": function(event, template){
|
3671 |
-
* // do something
|
3672 |
-
* }
|
3673 |
-
* }
|
3674 |
-
* });
|
3675 |
-
* @example {@caption Calling the `preventDefault` method on the `event` object will prevent the template being initialized.}
|
3676 |
-
* $(".foogallery").foogallery({
|
3677 |
-
* on: {
|
3678 |
-
* "init.foogallery": function(event, template){
|
3679 |
-
* if ("some condition"){
|
3680 |
-
* // stop the template being initialized
|
3681 |
-
* event.preventDefault();
|
3682 |
-
* }
|
3683 |
-
* }
|
3684 |
-
* }
|
3685 |
-
* });
|
3686 |
-
* @example {@caption You can also prevent the default logic and replace it with your own by calling the `preventDefault` method on the `event` object and returning a promise.}
|
3687 |
-
* $(".foogallery").foogallery({
|
3688 |
-
* on: {
|
3689 |
-
* "init.foogallery": function(event, template){
|
3690 |
-
* // stop the default logic
|
3691 |
-
* event.preventDefault();
|
3692 |
-
* // you can execute the default logic by calling the handler directly yourself
|
3693 |
-
* // var promise = template.onInit();
|
3694 |
-
* // replace the default logic with your own
|
3695 |
-
* return Promise;
|
3696 |
-
* }
|
3697 |
-
* }
|
3698 |
-
* });
|
3699 |
-
*/
|
3700 |
-
var e = self.raise("init");
|
3701 |
-
if (e.isDefaultPrevented()) return _fn.rejectWith("init default prevented");
|
3702 |
-
return self.items.fetch();
|
3703 |
-
}).then(function(){
|
3704 |
-
if (self.destroying) return _fn.rejectWith("destroy in progress");
|
3705 |
-
/**
|
3706 |
-
* @summary Raised after the template is initialized but before any post-initialization work is complete.
|
3707 |
-
* @event FooGallery.Template~"post-init.foogallery"
|
3708 |
-
* @type {jQuery.Event}
|
3709 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3710 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3711 |
-
* @returns {Promise} Resolved once the post-initialization work is complete, rejected if an error occurs or execution is prevented.
|
3712 |
-
* @description At this point in the initialization chain all options, objects and elements required by the template have been parsed or created however the initial state has not been set yet and no items have been loaded.
|
3713 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3714 |
-
* $(".foogallery").foogallery({
|
3715 |
-
* on: {
|
3716 |
-
* "post-init.foogallery": function(event, template){
|
3717 |
-
* // do something
|
3718 |
-
* }
|
3719 |
-
* }
|
3720 |
-
* });
|
3721 |
-
* @example {@caption Calling the `preventDefault` method on the `event` object will prevent the template being initialized.}
|
3722 |
-
* $(".foogallery").foogallery({
|
3723 |
-
* on: {
|
3724 |
-
* "post-init.foogallery": function(event, template){
|
3725 |
-
* if ("some condition"){
|
3726 |
-
* // stop the template being initialized
|
3727 |
-
* event.preventDefault();
|
3728 |
-
* }
|
3729 |
-
* }
|
3730 |
-
* }
|
3731 |
-
* });
|
3732 |
-
* @example {@caption You can also prevent the default logic and replace it with your own by calling the `preventDefault` method on the `event` object and returning a promise.}
|
3733 |
-
* $(".foogallery").foogallery({
|
3734 |
-
* on: {
|
3735 |
-
* "post-init.foogallery": function(event, template){
|
3736 |
-
* // stop the default logic
|
3737 |
-
* event.preventDefault();
|
3738 |
-
* // you can execute the default logic by calling the handler directly yourself
|
3739 |
-
* // var promise = template.onPostInit();
|
3740 |
-
* // replace the default logic with your own
|
3741 |
-
* return Promise;
|
3742 |
-
* }
|
3743 |
-
* }
|
3744 |
-
* });
|
3745 |
-
*/
|
3746 |
-
var e = self.raise("post-init");
|
3747 |
-
if (e.isDefaultPrevented()) return _fn.rejectWith("post-init default prevented");
|
3748 |
-
var state = self.state.parse();
|
3749 |
-
self.state.set(_is.empty(state) ? self.state.initial() : state);
|
3750 |
-
$(window).on("scroll.foogallery", {self: self}, self.throttle(self.onWindowScroll, self.opt.throttle))
|
3751 |
-
.on("popstate.foogallery", {self: self}, self.onWindowPopState);
|
3752 |
-
}).then(function(){
|
3753 |
-
if (self.destroying) return _fn.rejectWith("destroy in progress");
|
3754 |
-
/**
|
3755 |
-
* @summary Raised after the template is fully initialized but before the first load occurs.
|
3756 |
-
* @event FooGallery.Template~"first-load.foogallery"
|
3757 |
-
* @type {jQuery.Event}
|
3758 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3759 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3760 |
-
* @description This event is raised after all post-initialization work such as setting the initial state is performed but before the first load of items takes place.
|
3761 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3762 |
-
* $(".foogallery").foogallery({
|
3763 |
-
* on: {
|
3764 |
-
* "first-load.foogallery": function(event, template){
|
3765 |
-
* // do something
|
3766 |
-
* }
|
3767 |
-
* }
|
3768 |
-
* });
|
3769 |
-
*/
|
3770 |
-
self.raise("first-load");
|
3771 |
-
return self.loadAvailable();
|
3772 |
-
}).then(function(){
|
3773 |
-
if (self.destroying) return _fn.rejectWith("destroy in progress");
|
3774 |
-
self.initializing = false;
|
3775 |
-
self.initialized = true;
|
3776 |
-
|
3777 |
-
// performed purely to re-check if any items need to be loaded after content has possibly shifted
|
3778 |
-
self._check(200);
|
3779 |
-
self._check(500);
|
3780 |
-
self._check(1000);
|
3781 |
-
self._check(2000);
|
3782 |
-
self._check(5000);
|
3783 |
-
|
3784 |
-
/**
|
3785 |
-
* @summary Raised after the template is fully initialized and is ready to be interacted with.
|
3786 |
-
* @event FooGallery.Template~"ready.foogallery"
|
3787 |
-
* @type {jQuery.Event}
|
3788 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3789 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3790 |
-
* @description This event is raised after all post-initialization work such as setting the initial state and performing the first load are completed.
|
3791 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3792 |
-
* $(".foogallery").foogallery({
|
3793 |
-
* on: {
|
3794 |
-
* "ready.foogallery": function(event, template){
|
3795 |
-
* // do something
|
3796 |
-
* }
|
3797 |
-
* }
|
3798 |
-
* });
|
3799 |
-
*/
|
3800 |
-
self.raise("ready");
|
3801 |
-
def.resolve(self);
|
3802 |
-
}).fail(function(err){
|
3803 |
-
def.reject(err);
|
3804 |
-
});
|
3805 |
-
queue.resolve();
|
3806 |
-
}).promise().fail(function(err){
|
3807 |
-
console.log("initialize failed", self, err);
|
3808 |
-
self.destroy();
|
3809 |
-
});
|
3810 |
-
},
|
3811 |
-
/**
|
3812 |
-
* @summary Create a new container element for the template returning the jQuery object.
|
3813 |
-
* @memberof FooGallery.Template#
|
3814 |
-
* @function create
|
3815 |
-
* @returns {jQuery} A jQuery object to use as the container for the template.
|
3816 |
-
* @description This method is called from within the {@link FooGallery.Template#initialize|initialize} method only if a container element is required.
|
3817 |
-
* @example {@caption The below shows an example of what the returned jQuery objects' outer HTML would look like.}{@lang html}
|
3818 |
-
* <div id="{options.id}" class="{options.cls.container} {options.classes}">
|
3819 |
-
* </div>
|
3820 |
-
*/
|
3821 |
-
create: function(){
|
3822 |
-
var self = this;
|
3823 |
-
return $("<div/>", {"id": self.id, "class": self.cls.container}).addClass(self.opt.classes);
|
3824 |
-
},
|
3825 |
-
|
3826 |
-
// #############
|
3827 |
-
// ## Destroy ##
|
3828 |
-
// #############
|
3829 |
-
|
3830 |
-
/**
|
3831 |
-
* @summary Destroy the template.
|
3832 |
-
* @memberof FooGallery.Template#
|
3833 |
-
* @function destroy
|
3834 |
-
* @returns {Promise}
|
3835 |
-
* @description Once this method is called it can not be stopped and the template will be destroyed.
|
3836 |
-
* @fires FooGallery.Template~"destroy.foogallery"
|
3837 |
-
*/
|
3838 |
-
destroy: function(){
|
3839 |
-
var self = this;
|
3840 |
-
if (self.destroyed) return _fn.resolved;
|
3841 |
-
self.destroying = true;
|
3842 |
-
return $.Deferred(function(def){
|
3843 |
-
if (self.initializing && _is.promise(self._initialize)){
|
3844 |
-
self._initialize.always(function(){
|
3845 |
-
self.destroying = false;
|
3846 |
-
self._destroy();
|
3847 |
-
def.resolve();
|
3848 |
-
});
|
3849 |
-
} else {
|
3850 |
-
self.destroying = false;
|
3851 |
-
self._destroy();
|
3852 |
-
def.resolve();
|
3853 |
-
}
|
3854 |
-
}).promise();
|
3855 |
-
},
|
3856 |
-
/**
|
3857 |
-
* @summary Destroy the template.
|
3858 |
-
* @memberof FooGallery.Template#
|
3859 |
-
* @function _destroy
|
3860 |
-
* @private
|
3861 |
-
*/
|
3862 |
-
_destroy: function(){
|
3863 |
-
var self = this;
|
3864 |
-
if (self.destroyed) return;
|
3865 |
-
/**
|
3866 |
-
* @summary Raised before the template is destroyed.
|
3867 |
-
* @event FooGallery.Template~"destroy.foogallery"
|
3868 |
-
* @type {jQuery.Event}
|
3869 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3870 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3871 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3872 |
-
* $(".foogallery").foogallery({
|
3873 |
-
* on: {
|
3874 |
-
* "destroy.foogallery": function(event, template){
|
3875 |
-
* // do something
|
3876 |
-
* }
|
3877 |
-
* }
|
3878 |
-
* });
|
3879 |
-
*/
|
3880 |
-
self.raise("destroy");
|
3881 |
-
$(window).off("popstate.foogallery", self.onWindowPopState)
|
3882 |
-
.off("scroll.foogallery");
|
3883 |
-
self.state.destroy();
|
3884 |
-
if (self.pages) self.pages.destroy();
|
3885 |
-
self.items.destroy();
|
3886 |
-
if (!_is.empty(self.opt.on)){
|
3887 |
-
self.$el.off(self.opt.on);
|
3888 |
-
}
|
3889 |
-
/**
|
3890 |
-
* @summary Raised after the template has been destroyed.
|
3891 |
-
* @event FooGallery.Template~"destroyed.foogallery"
|
3892 |
-
* @type {jQuery.Event}
|
3893 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3894 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3895 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3896 |
-
* $(".foogallery").foogallery({
|
3897 |
-
* on: {
|
3898 |
-
* "destroyed.foogallery": function(event, template){
|
3899 |
-
* // do something
|
3900 |
-
* }
|
3901 |
-
* }
|
3902 |
-
* });
|
3903 |
-
*/
|
3904 |
-
self.raise("destroyed");
|
3905 |
-
self.$el.removeData(_.dataTemplate);
|
3906 |
-
if (self.createdSelf){
|
3907 |
-
self.$el.remove();
|
3908 |
-
}
|
3909 |
-
self.$el = self.state = self.items = self.pages = null;
|
3910 |
-
self.destroyed = true;
|
3911 |
-
self.initializing = false;
|
3912 |
-
self.initialized = false;
|
3913 |
-
},
|
3914 |
-
|
3915 |
-
// ################
|
3916 |
-
// ## Load Items ##
|
3917 |
-
// ################
|
3918 |
-
|
3919 |
-
/**
|
3920 |
-
* @summary Check if any available items need to be loaded and loads them.
|
3921 |
-
* @memberof FooGallery.Template#
|
3922 |
-
* @function loadAvailable
|
3923 |
-
* @returns {Promise<FooGallery.Item[]>} Resolves with an array of {@link FooGallery.Item|items} as the first argument. If no items are loaded this array is empty.
|
3924 |
-
*/
|
3925 |
-
loadAvailable: function(){
|
3926 |
-
var self = this, items;
|
3927 |
-
if (self.pages){
|
3928 |
-
items = self.pages.available();
|
3929 |
-
} else {
|
3930 |
-
items = self.items.available();
|
3931 |
-
}
|
3932 |
-
return self.items.load(items);
|
3933 |
-
},
|
3934 |
-
|
3935 |
-
/**
|
3936 |
-
* @summary Check if any available items need to be loaded and loads them.
|
3937 |
-
* @memberof FooGallery.Template#
|
3938 |
-
* @function _check
|
3939 |
-
* @private
|
3940 |
-
*/
|
3941 |
-
_check: function(delay){
|
3942 |
-
delay = _is.number(delay) ? delay : 0;
|
3943 |
-
var self = this;
|
3944 |
-
setTimeout(function(){
|
3945 |
-
if (self.initialized && (!self.destroying || !self.destroyed)){
|
3946 |
-
self.loadAvailable();
|
3947 |
-
}
|
3948 |
-
}, delay);
|
3949 |
-
},
|
3950 |
-
|
3951 |
-
// #############
|
3952 |
-
// ## Utility ##
|
3953 |
-
// #############
|
3954 |
-
|
3955 |
-
/**
|
3956 |
-
* @summary Raises the supplied `eventName` on the template {@link FooGallery.Template#$el|element}.
|
3957 |
-
* @memberof FooGallery.Template#
|
3958 |
-
* @function raise
|
3959 |
-
* @param {string} eventName - The name of the event to raise.
|
3960 |
-
* @param {Array} [args] - An additional arguments to supply to the listeners for the event.
|
3961 |
-
* @returns {?jQuery.Event} The jQuery.Event object or null if no `eventName` was supplied.
|
3962 |
-
* @description This method also executes any listeners set on the template object itself. These listeners are not bound to the element but are executed after the event is raised but before any default logic is executed. The names of these listeners use the following convention; prefix the `eventName` with `"on-"` and then camel-case the result. e.g. `"pre-init"` becomes `onPreInit`.
|
3963 |
-
* @example {@caption The following displays a listener for the `"pre-init.foogallery"` event in a sub-classed template.}
|
3964 |
-
* FooGallery.MyTemplate = FooGallery.Template.extend({
|
3965 |
-
* onPreInit: function(event, template){
|
3966 |
-
* // do something
|
3967 |
-
* }
|
3968 |
-
* });
|
3969 |
-
*/
|
3970 |
-
raise: function (eventName, args) {
|
3971 |
-
if (!_is.string(eventName) || _is.empty(eventName)) return null;
|
3972 |
-
args = _is.array(args) ? args : [];
|
3973 |
-
var self = this,
|
3974 |
-
name = eventName.split(".")[0],
|
3975 |
-
listener = _str.camel("on-" + name),
|
3976 |
-
event = $.Event(name + ".foogallery");
|
3977 |
-
args.unshift(self); // add self
|
3978 |
-
self.$el.trigger(event, args);
|
3979 |
-
_.debug.logf("{id}|{name}:", {id: self.id, name: name}, args);
|
3980 |
-
if (_is.fn(self[listener])){
|
3981 |
-
args.unshift(event); // add event
|
3982 |
-
self[listener].apply(self.$el.get(0), args);
|
3983 |
-
}
|
3984 |
-
return event;
|
3985 |
-
},
|
3986 |
-
|
3987 |
-
layout: function(){
|
3988 |
-
var self = this;
|
3989 |
-
if (self._initialize === null) return;
|
3990 |
-
/**
|
3991 |
-
* @summary Raised when the templates' {@link FooGallery.Template#layout|layout} method is called.
|
3992 |
-
* @event FooGallery.Template~"layout.foogallery"
|
3993 |
-
* @type {jQuery.Event}
|
3994 |
-
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
|
3995 |
-
* @param {FooGallery.Template} template - The template raising the event.
|
3996 |
-
* @description This allows templates to perform layout if required for example when visibility changes.
|
3997 |
-
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
|
3998 |
-
* $(".foogallery").foogallery({
|
3999 |
-
* on: {
|
4000 |
-
* "layout.foogallery": function(event, template){
|
4001 |
-
* // do something
|
4002 |
-
* }
|
4003 |
-
* }
|
4004 |
-
* });
|
4005 |
-
*/
|
4006 |
-
self.raise("layout");
|
4007 |
-
},
|
4008 |
-
|
4009 |
-
/**
|
4010 |
-
* @summary Throttles the supplied function to only execute once every N milliseconds.
|
4011 |
-
* @memberof FooGallery.Template#
|
4012 |
-
* @function throttle
|
4013 |
-
* @param {Function} fn - The function to throttle.
|
4014 |
-
* @param {number} wait - The number of milliseconds to wait before allowing execution.
|
4015 |
-
* @returns {Function}
|
4016 |
-
*/
|
4017 |
-
throttle: function(fn, wait){
|
4018 |
-
var time = Date.now();
|
4019 |
-
return function() {
|
4020 |
-
if ((time + wait - Date.now()) < 0) {
|
4021 |
-
var args = _fn.arg2arr(arguments);
|
4022 |
-
fn.apply(this, args);
|
4023 |
-
time = Date.now();
|
4024 |
-
}
|
4025 |
-
}
|
4026 |
-
},
|
4027 |
-
|
4028 |
-
// ###############
|
4029 |
-
// ## Listeners ##
|
4030 |
-
// ###############
|
4031 |
-
|
4032 |
-
/**
|
4033 |
-
* @summary Listens for the windows popstate event and performs any actions required by the template.
|
4034 |
-
* @memberof FooGallery.Template#
|
4035 |
-
* @function onWindowPopState
|
4036 |
-
* @param {jQuery.Event} e - The jQuery.Event object for the event.
|
4037 |
-
* @private
|
4038 |
-
*/
|
4039 |
-
onWindowPopState: function(e){
|
4040 |
-
var self = e.data.self, state = e.originalEvent.state;
|
4041 |
-
if (!_is.empty(state) && state.id === self.id){
|
4042 |
-
self.state.set(state);
|
4043 |
-
self.loadAvailable();
|
4044 |
-
}
|
4045 |
-
},
|
4046 |
-
/**
|
4047 |
-
* @summary Listens for the windows scroll event and performs any checks required by the template.
|
4048 |
-
* @memberof FooGallery.Template#
|
4049 |
-
* @function onWindowScroll
|
4050 |
-
* @param {jQuery.Event} e - The jQuery.Event object for the event.
|
4051 |
-
* @private
|
4052 |
-
*/
|
4053 |
-
onWindowScroll: function(e){
|
4054 |
-
var self = e.data.self;
|
4055 |
-
self.loadAvailable();
|
4056 |
-
}
|
4057 |
-
});
|
4058 |
-
|
4059 |
-
_.template.register("core", _.Template, {
|
4060 |
-
id: null,
|
4061 |
-
type: "core",
|
4062 |
-
classes: "",
|
4063 |
-
on: {},
|
4064 |
-
lazy: true,
|
4065 |
-
viewport: 200,
|
4066 |
-
items: [],
|
4067 |
-
delay: 100,
|
4068 |
-
throttle: 50,
|
4069 |
-
timeout: 60000,
|
4070 |
-
srcset: "data-srcset",
|
4071 |
-
src: "data-src",
|
4072 |
-
template: {}
|
4073 |
-
}, {
|
4074 |
-
container: "foogallery"
|
4075 |
-
}, {
|
4076 |
-
|
4077 |
-
}, -100);
|
4078 |
-
|
4079 |
-
/**
|
4080 |
-
* @summary An object containing all the core template options.
|
4081 |
-
* @typedef {object} FooGallery.Template~Options
|
4082 |
-
* @property {?string} [id=null] - The id for the template. This is only required if creating a template without a pre-existing container element that has an `id` attribute.
|
4083 |
-
* @property {string} [type="core"] - The type of template to load. If no container element exists to parse the type from this must be supplied so the correct type of template is loaded.
|
4084 |
-
* @property {string} [classes=""] - A space delimited string of any additional CSS classes to append to the container element of the template.
|
4085 |
-
* @property {object} [on={}] - An object containing any template events to bind to.
|
4086 |
-
* @property {boolean} [lazy=true] - Whether or not to enable lazy loading of images.
|
4087 |
-
* @property {number} [viewport=200] - The number of pixels to inflate the viewport by when checking to lazy load items.
|
4088 |
-
* @property {(FooGallery.Item~Options[]|FooGallery.Item[]| string)} [items=[]] - An array of items to load when required. A url can be provided and the items will be fetched using an ajax call, the response should be a properly formatted JSON array of {@link FooGallery.Item~Options|item} object.
|
4089 |
-
* @property {number} [delay=100] - The number of milliseconds to delay the initialization of a template.
|
4090 |
-
* @property {number} [throttle=50] - The number of milliseconds to wait once scrolling has stopped before performing any work.
|
4091 |
-
* @property {number} [timeout=60000] - The number of milliseconds to wait before forcing a timeout when loading items.
|
4092 |
-
* @property {string} [src="data-src"] - The name of the attribute to retrieve an images src url from.
|
4093 |
-
* @property {string} [srcset="data-srcset"] - The name of the attribute to retrieve an images srcset url from.
|
4094 |
-
* @property {object} [template={}] - An object containing any additional custom options for the template.
|
4095 |
-
* @property {FooGallery.Template~CSSClasses} [cls] - An object containing all CSS classes for the template.
|
4096 |
-
* @property {FooGallery.Template~CSSSelectors} [sel] - An object containing all CSS selectors for the template.
|
4097 |
-
* @property {FooGallery.Template~il8n} [il8n] - An object containing all il8n strings for the template.
|
4098 |
-
* @property {FooGallery.Item~Options} [item] - An object containing the default values for all items.
|
4099 |
-
* @property {FooGallery.State~Options} [state] - An object containing the state options for the template.
|
4100 |
-
* @property {FooGallery.Paging~Options} [paging] - An object containing the default paging options for the template.
|
4101 |
-
*/
|
4102 |
-
|
4103 |
-
/**
|
4104 |
-
* @summary An object containing all CSS classes for the core template.
|
4105 |
-
* @typedef {object} FooGallery.Template~CSSClasses
|
4106 |
-
* @property {string} [container="foogallery"] - The base CSS class names to apply to the container element.
|
4107 |
-
* @property {FooGallery.Item~CSSClasses} [item] - A simple object containing the CSS classes used by an item.
|
4108 |
-
*/
|
4109 |
-
|
4110 |
-
/**
|
4111 |
-
* @summary An object containing all il8n strings for the core template.
|
4112 |
-
* @typedef {object} FooGallery.Template~il8n
|
4113 |
-
*/
|
4114 |
-
|
4115 |
-
/**
|
4116 |
-
* @summary An object containing all CSS selectors for the core template.
|
4117 |
-
* @typedef {object} FooGallery.Template~CSSSelectors
|
4118 |
-
* @property {string} [container=".foogallery"] - The selector for the base CSS class names for the container element.
|
4119 |
-
* @property {FooGallery.Item~CSSSelectors} [item] - An object containing the CSS selectors for an item.
|
4120 |
-
* @description This object is automatically generated from a {@link FooGallery.Template~CSSClasses|classes} object and its properties mirror those except the space delimited string of class names is converted into a CSS selector.
|
4121 |
-
*/
|
4122 |
-
|
4123 |
-
})(
|
4124 |
-
FooGallery.$,
|
4125 |
-
FooGallery,
|
4126 |
-
FooGallery.utils,
|
4127 |
-
FooGallery.utils.is,
|
4128 |
-
FooGallery.utils.fn,
|
4129 |
-
FooGallery.utils.str
|
4130 |
-
);
|
4131 |
-
|
4132 |
-
|
4133 |
-
(function(_, _utils){
|
4134 |
-
|
4135 |
-
_.Component = _utils.Class.extend(/** @lend FooGallery.Component */{
|
4136 |
-
/**
|
4137 |
-
* @summary The base class for all child components of a {@link FooGallery.Template|template}.
|
4138 |
-
* @memberof FooGallery
|
4139 |
-
* @constructs Component
|
4140 |
-
* @param {FooGallery.Template} template - The template creating the component.
|
4141 |
-
* @augments FooGallery.utils.Class
|
4142 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
4143 |
-
* @borrows FooGallery.utils.Class.override as override
|
4144 |
-
*/
|
4145 |
-
construct: function(template){
|
4146 |
-
/**
|
4147 |
-
* @summary The template that created this component.
|
4148 |
-
* @memberof FooGallery.Component#
|
4149 |
-
* @name tmpl
|
4150 |
-
* @type {FooGallery.Template}
|
4151 |
-
*/
|
4152 |
-
this.tmpl = template;
|
4153 |
-
},
|
4154 |
-
/**
|
4155 |
-
* @summary Destroy the component making it ready for garbage collection.
|
4156 |
-
* @memberof FooGallery.Component#
|
4157 |
-
* @function destroy
|
4158 |
-
*/
|
4159 |
-
destroy: function(){
|
4160 |
-
this.tmpl = null;
|
4161 |
-
}
|
4162 |
-
});
|
4163 |
-
|
4164 |
-
/**
|
4165 |
-
* @summary A factory for registering and creating basic gallery components.
|
4166 |
-
* @memberof FooGallery
|
4167 |
-
* @name components
|
4168 |
-
* @type {FooGallery.utils.Factory}
|
4169 |
-
*/
|
4170 |
-
_.components = new _utils.Factory();
|
4171 |
-
|
4172 |
-
})(
|
4173 |
-
FooGallery,
|
4174 |
-
FooGallery.utils
|
4175 |
-
);
|
4176 |
-
(function($, _, _is, _str){
|
4177 |
-
|
4178 |
-
_.State = _.Component.extend(/** @lends FooGallery.State */{
|
4179 |
-
/**
|
4180 |
-
* @summary This class manages all the getting and setting of its' parent templates' state.
|
4181 |
-
* @memberof FooGallery
|
4182 |
-
* @constructs State
|
4183 |
-
* @param {FooGallery.Template} template - The template to manage the state for.
|
4184 |
-
* @augments FooGallery.Component
|
4185 |
-
* @borrows FooGallery.utils.Class.extend as extend
|
4186 |
-
* @borrows FooGallery.utils.Class.override as override
|
4187 |
-
*/
|
4188 |
-
construct: function(template){
|
4189 |
-
var self = this;
|
4190 |
-
/**
|
4191 |
-
* @ignore
|
4192 |
-
* @memberof FooGallery.State#
|
4193 |
-
* @function _super
|
4194 |
-
*/
|
4195 |
-
self._super(template);
|
4196 |
-
/**
|
4197 |
-
* @summary Whether or not the history API is enabled in the current browser.
|
4198 |
-
* @memberof FooGallery.State#
|
4199 |
-
* @name apiEnabled
|
4200 |
-
* @type {boolean}
|
4201 |
-
* @readonly
|
4202 |
-
*/
|
4203 |
-
self.apiEnabled = !!window.history && !!history.replaceState;
|
4204 |
-
/**
|
4205 |
-
* @summary The state specific options for the template.
|
4206 |
-
* @memberof FooGallery.State#
|
4207 |
-
* @name opt
|
4208 |
-
* @type {FooGallery.State~Options}
|
4209 |
-
*/
|
4210 |
-
self.opt = self.tmpl.opt.state;
|
4211 |
-
/**
|
4212 |
-
* @summary Whether or not the component is enabled.
|
4213 |
-
* @memberof FooGallery.State#
|
4214 |
-
* @name enabled
|
4215 |
-
* @type {boolean}
|
4216 |
-
*/
|
4217 |
-
self.enabled = self.opt.enabled;
|
4218 |
-
/**
|
4219 |
-
* @summary Which method of the history API to use by default when updating the state.
|
4220 |
-
* @memberof FooGallery.State#
|
4221 |
-
* @name pushOrReplace
|
4222 |
-
* @type {string}
|
4223 |
-
* @default "replace"
|
4224 |
-
*/
|
4225 |
-
self.pushOrReplace = self.isPushOrReplace(self.opt.pushOrReplace) ? self.opt.pushOrReplace : "replace";
|
4226 |
-
|
4227 |
-
var id = _str.escapeRegExp(self.tmpl.id),
|
4228 |
-
values = _str.escapeRegExp(self.opt.values),
|
4229 |
-
pair = _str.escapeRegExp(self.opt.pair);
|
4230 |
-
/**
|
4231 |
-
* @summary An object containing regular expressions used to test and parse a hash value into a state object.
|
4232 |
-
* @memberof FooGallery.State#
|
4233 |
-
* @name regex
|
4234 |
-
* @type {{exists: RegExp, values: RegExp}}
|
4235 |
-
* @readonly
|
4236 |
-
* @description The regular expressions contained within this object are specific to this template and are created using the template {@link FooGallery.Template#id|id} and the delimiters from the {@link FooGallery.State#opt|options}.
|
4237 |
-
*/
|
4238 |
-
self.regex = {
|
4239 |
-
exists: new RegExp("^#"+id+"\\"+values+".+?"),
|
4240 |
-
values: new RegExp("(\\w+)"+pair+"([^"+values+"]+)", "g")
|
4241 |
-
};
|
4242 |
-
},
|
4243 |
-
/**
|
4244 |
-
* @summary Destroy the component clearing any current state from the url and preparing it for garbage collection.
|
4245 |
-
* @memberof FooGallery.State#
|
4246 |
-
* @function destroy
|
4247 |
-
*/
|
4248 |
-
destroy: function(){
|
4249 |
-
var self = this;
|
4250 |
-
self.clear();
|
4251 |
-
self.opt = self.regex = {};
|
4252 |
-
self._super();
|
4253 |
-
},
|
4254 |
-
/**
|
4255 |
-
* @summary Check if the supplied value is `"push"` or `"replace"`.
|
4256 |
-
* @memberof FooGallery.State#
|
4257 |
-
* @function isPushOrReplace
|
4258 |
-
* @param {*} value - The value to check.
|
4259 |
-
* @returns {boolean}
|
4260 |
-
*/
|
4261 |
-
isPushOrReplace: function(value){
|
4262 |
-
return $.inArray(value, ["push","replace"]) !== -1;
|
4263 |
-
},
|
4264 |
-
/**
|
4265 |
-
* @summary Check if the current url contains state for this template.
|
4266 |
-
* @memberof FooGallery.State#
|
4267 |
-
* @function exists
|
4268 |
-
* @returns {boolean}
|
4269 |
-
*/
|
4270 |
-
exists: function(){
|
4271 |
-
return this.regex.exists.test(location.hash) && this.regex.values.test(location.hash);
|
4272 |
-
},
|
4273 |
-
/**
|
4274 |
-
* @summary Parse the current url returning an object containing all values for the template.
|
4275 |
-
* @memberof FooGallery.State#
|
4276 |
-
* @function parse
|
4277 |
-
* @returns {object}
|
4278 |
-
* @description This method always returns an object, if successful the object contains properties otherwise it is just a plain empty object. For this method to be successful the current template {@link FooGallery.Template#id|id} must match the one from the url.
|
4279 |
-
*/
|
4280 |
-
parse: function(){
|
4281 |
-
var self = this, state = {};
|
4282 |
-
if (self.exists()){
|
4283 |
-
if (self.enabled){
|
4284 |
-
state.id = self.tmpl.id;
|
4285 |
-
var pairs = location.hash.match(self.regex.values);
|
4286 |
-
$.each(pairs, function(i, pair){
|
4287 |
-
var parts = pair.split(self.opt.pair);
|
4288 |
-
if (parts.length === 2){
|
4289 |
-
state[parts[0]] = parts[1].indexOf(self.opt.array) === -1
|
4290 |
-
? decodeURIComponent(parts[1])
|
4291 |
-
: $.map(parts[1].split(self.opt.array), function(part){ return decodeURIComponent(part); });
|
4292 |
-
if (_is.string(state[parts[0]]) && !isNaN(state[parts[0]])){
|
4293 |
-
state[parts[0]] = parseInt(state[parts[0]]);
|
4294 |
-
}
|
4295 |
-
}
|
4296 |
-
});
|
4297 |
-
} else {
|
4298 |
-
// if we're here it means there is a hash on the url but the option is disabled so remove it
|
4299 |
-
if (self.apiEnabled){
|
4300 |
-
history.replaceState(null, "", location.pathname + location.search);
|
4301 |
-
} else {
|
4302 |
-
location.hash = "#";
|
4303 |
-
}
|
4304 |
-
}
|
4305 |
-
}
|
4306 |
-
return state;
|
4307 |
-
},
|
4308 |
-
/**
|
4309 |
-
* @summary Converts the supplied state object into a string value to use as a hash.
|
4310 |
-
* @memberof FooGallery.State#
|
4311 |
-
* @function hashify
|
4312 |
-
* @param {object} state - The object to hashify.
|
4313 |
-
* @returns {string}
|
4314 |
-
*/
|
4315 |
-
hashify: function(state){
|
4316 |
-
var self = this;
|
4317 |
-
if (_is.hash(state)){
|
4318 |
-
var hash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|