├── .editorconfig
├── .gitignore
├── 10.jpg
├── 13.jpg
├── 14.jpg
├── 9.jpg
├── README.md
├── app
├── .editorconfig
├── .gitattributes
├── .jscsrc
├── .jshintrc
├── .travis.yml
├── app.html
├── app.js
├── background.js
├── config.json
├── env.js
├── hello_world
│ ├── hello_universe.js
│ ├── hello_universe.spec.js
│ ├── hello_world.js
│ └── hello_world.spec.js
├── images
│ └── drag_and_drop.png
├── lightgallery
│ ├── css
│ │ ├── lg-fb-comment-box.css
│ │ ├── lg-fb-comment-box.css.map
│ │ ├── lg-transitions.css
│ │ ├── lg-transitions.css.map
│ │ ├── lightgallery.css
│ │ └── lightgallery.css.map
│ ├── fonts
│ │ ├── lg.eot
│ │ ├── lg.svg
│ │ ├── lg.ttf
│ │ └── lg.woff
│ ├── img
│ │ ├── lg-default.png
│ │ ├── loading.gif
│ │ ├── video-play.png
│ │ ├── vimeo-play.png
│ │ └── youtube-play.png
│ ├── js
│ │ ├── .jshintrc
│ │ ├── lg-autoplay.js
│ │ ├── lg-pager.js
│ │ ├── lg-thumbnail.js
│ │ ├── lg-video.js
│ │ ├── lg-zoom.js
│ │ ├── lightgallery.js
│ │ └── mousewheel.js
│ └── sass
│ │ ├── lg-animations.scss
│ │ ├── lg-autoplay.scss
│ │ ├── lg-fb-comment-box.scss
│ │ ├── lg-fonts.scss
│ │ ├── lg-fullscreen.scss
│ │ ├── lg-mixins.scss
│ │ ├── lg-pager.scss
│ │ ├── lg-theme-default.scss
│ │ ├── lg-thumbnail.scss
│ │ ├── lg-transitions.scss
│ │ ├── lg-variables.scss
│ │ ├── lg-video.scss
│ │ ├── lg-zoom.scss
│ │ ├── lightgallery.scss
│ │ └── prepros.cfg
├── package.json
├── spec.html
├── stylesheets
│ └── main.less
└── vendor
│ ├── electron_boilerplate
│ ├── context_menu.js
│ ├── dev_helper.js
│ ├── external_links.js
│ └── window_state.js
│ └── jasmine
│ ├── boot.js
│ ├── jasmine-html.js
│ ├── jasmine.css
│ └── jasmine.js
├── config
├── env_development.json
├── env_production.json
└── env_test.json
├── gulpfile.js
├── lg-desktop.sublime-project
├── lg-desktop.sublime-workspace
├── package.json
├── resources
├── icon.png
├── linux
│ ├── DEBIAN
│ │ └── control
│ └── app.desktop
├── osx
│ ├── Info.plist
│ ├── appdmg.json
│ ├── dmg-background.png
│ ├── dmg-background@2x.png
│ ├── dmg-icon.icns
│ ├── helper_apps
│ │ ├── Info EH.plist
│ │ ├── Info NP.plist
│ │ └── Info.plist
│ └── icon.icns
└── windows
│ ├── icon.ico
│ ├── installer.nsi
│ ├── setup-banner.bmp
│ └── setup-icon.ico
└── tasks
├── build.js
├── generate_specs_import.js
├── release.js
├── release_linux.js
├── release_osx.js
├── release_windows.js
├── start.js
└── utils.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 4
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [*.json]
13 | indent_size = 2
14 |
15 | [*.md]
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | *.log
3 | .DS_Store
4 | Thumbs.db
5 |
6 | /app/spec.js
7 | /build/
8 | /releases/
9 | /tmp/
10 |
--------------------------------------------------------------------------------
/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/10.jpg
--------------------------------------------------------------------------------
/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/13.jpg
--------------------------------------------------------------------------------
/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/14.jpg
--------------------------------------------------------------------------------
/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/9.jpg
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # lightGallery
2 | A modern, electron and nodejs based image viewer for Mac, Windows and Linux.
3 | 
4 |
5 | Main features
6 | ---
7 |
8 | * Built with Electron.
9 | * LightGallery uses HTML, CSS, and JavaScript with Chromium and Node.js to build the app.
10 | * Cross-platform.
11 | * LightGallery works across operating systems. You can use it on OS X, Windows, or Linux.
12 | * 20+ Animations
13 | * LightGallery comes with numerous number of beautiful in-built animations.
14 | * Animated thumbnails
15 | * You also have the option to enable animated thumbnails from the settings.
16 | * Zoom & Fullscreen
17 | * You can double-click on the image to see its actual size. Zoom-in and zoom-out controls can be used for changing the zoom values of the image.
18 | * Mouse Drag & keyboard Navigations
19 | * LightGallery allows users to navigate between slides via mouse drag and keyboard arrows.
20 | * Pagers
21 | * Auto slideshow
22 | * Support various kind of image formats (jpg, png, gif, webp).
23 | * Highly customizable
24 | * And many more.
25 |
26 | ##### Watch :star: this repository. More features are coming
27 |
28 | Settings
29 | ---
30 |
31 |
32 | | Name | Default | Description |
33 | | ------------- |:-------------:| -----|
34 | |mode|`'lg-slide'`|Type of transition between images. lightGallery comes with lots of transition effects such as `'lg-slide'`, `'lg-fade'`, `'lg-zoom-in'`, `'lg-zoom-in-big'`, `'lg-zoom-out'`, `'lg-zoom-out-big'`, `'lg-zoom-out-in'`, `'lg-zoom-in-out'`, `'lg-soft-zoom'`, `'lg-scale-up'`, `'lg-slide-circular'`, `'lg-slide-circular-vertical'`, `'lg-slide-vertical'`, `'lg-slide-vertical-growth'`, `'lg-slide-skew-only'`, `'lg-slide-skew-only-rev'`, `'lg-slide-skew-only-y'`, `'lg-slide-skew-only-y-rev'`, `'lg-slide-skew'`, `'lg-slide-skew-rev'`, `'lg-slide-skew-cross'`, `'lg-slide-skew-cross-rev'`, `'lg-slide-skew-ver'`, `'lg-slide-skew-ver-rev'`, `'lg-slide-skew-ver-cross'`, `'lg-slide-skew-ver-cross-rev'`, `'lg-lollipop'`, `'lg-lollipop-rev'`, `'lg-rotate'`, `'lg-rotate-rev'`, `'lg-tube'`|
35 | |cssEasing|`'ease'`|Type of easing to be used for animations|
36 | |speed|`600`|Transition duration (in ms).|
37 | |hideBarsDelay|`6000`|Delay for hiding gallery controls in ms|
38 | |useLeft|`false`|force lightgallery to use css left property instead of transform.|
39 | |closable|`true`|allows clicks on dimmer to close gallery.|
40 | |loop|`true`|If `false`, will disable the ability to loop back to the beginning of the gallery when on the last element.|
41 | |keyPress|`true`|Enable keyboard navigation|
42 | |controls|`true`|If `false`, prev/next buttons will not be displayed.|
43 | |slideEndAnimatoin|`true`|Enable slideEnd animation|
44 | |hideControlOnEnd|`false`|If `true`, prev/next button will be hidden on first/last image.|
45 | |mousewheel|`true`|Change slide on mousewheel|
46 | |preload|`1`|Number of preload slides. will exicute only after the current slide is fully loaded. ex:// you clicked on 4th image and if preload = 1 then 3rd slide and 5th slide will be loaded in the background after the 4th slide is fully loaded.. if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded|
47 | |showAfterLoad|`true`|Show Content once it is fully loaded|
48 | |counter|`true`|Whether to show total number of images and index number of currently displayed image.|
49 | |swipeThreshold|`50`|By setting the swipeThreshold (in px) you can set how far the user must swipe for the next/prev image.|
50 | |enableDrag|`true`|Enables desktop mouse drag support|
51 | |thumbnail|`true`|Enable thumbnails for the gallery|
52 | |animateThumb|`true`|Enable thumbnail animation.|
53 | |currentPagerPosition |`'middle'`|Position of selected thumbnail. `'left'` or `'middle'` or `'right'`|
54 | |thumbWidth|`100`|Width of each thumbnails.|
55 | |thumbContHeight|`100`|Height of the thumbnail container including padding and border|
56 | |thumbMargin|`5`|Spacing between each thumbnails|
57 | |toogleThumb|true|Whether to display thumbnail toggle button.|
58 | |enableThumbDrag|`true`|Enables desktop mouse drag support for thumbnails.|
59 | |swipeThreshold|`50`|By setting the swipeThreshold (in px) you can set how far the user must swipe for the next/prev slide.|
60 | |autoplay|`true`|Enable gallery autoplay|
61 | |pause|`5000`|The time (in ms) between each auto transition.|
62 | |progressBar |`true`|Enable autoplay progress bar|
63 | |fourceAutoplay|`false`|If `false` autoplay will be stopped after first user action|
64 | |autoplayControls|`true`|Show/hide autoplay controls.|
65 | |pager|`true`|Enable/Disable pager|
66 | |zoom|`true`|Enable/Disable zoom option|
67 | |scale|`1`|Value of zoom should be incremented/decremented|
68 |
69 |
70 |
71 | Development
72 | ---
73 | #### Project's folders
74 |
75 | - `app` - code of your application goes here.
76 | - `config` - place for you to declare environment specific stuff.
77 | - `build` - in this folder lands built, runnable application.
78 | - `releases` - ready for distribution installers will land here.
79 | - `resources` - resources for particular operating system.
80 | - `tasks` - build and development environment scripts.
81 |
82 |
83 | #### Installation
84 |
85 | ```
86 | npm install
87 | ```
88 | It will also download Electron runtime, and install dependencies for second `package.json` file inside `app` folder.
89 |
90 | #### Starting the app
91 |
92 | ```
93 | npm start
94 | ```
95 |
96 |
97 |
98 |
99 | Making a release
100 | ----
101 |
102 | To make ready for distribution installer use command:
103 | ```
104 | npm run release
105 | ```
106 | It will start the packaging process for the operating system you are running this command on. The file which is ready for distribution will be outputted to `releases` directory.
107 |
108 | You can create Windows installer only when running on Windows, the same is true for Linux and OSX. So to generate all three installers you need all three operating systems.
109 |
110 |
111 | Other Projects
112 | ----
113 |
114 | ##### [LightGallery for web](https://github.com/sachinchoolur/lightGallery)
115 | > A customizable, modular, responsive, lightbox gallery plugin.
116 |
117 | ##### [jQuery lightslider](https://github.com/sachinchoolur/lightslider)
118 | > lightSlider is a lightweight responsive Content slider with carousel thumbnails navigation.
119 |
120 | ##### [Angular flash](https://github.com/sachinchoolur/angular-flash)
121 | > A simple lightweight flash message module for angularjs
122 |
123 | ##### [ngclipboard](https://github.com/sachinchoolur/ngclipboard)
124 | > An angularjs directive to copy text to clipboard without using flash
125 |
126 | ##### [Angular trix](http://sachinchoolur.github.io/angular-trix/)
127 | > A rich WYSIWYG text editor directive for angularjs.
128 |
129 | ##### [ladda-angular](https://github.com/sachinchoolur/ladda-angular)
130 | > Ladda button directive for angularjs
131 |
132 | ##### [Teamwave](http://www.teamwave.com/?kid=676V2)
133 | > Integrated Suite of Business Applications.. (Not an open source project but free for the first 1,000 Companies!)
134 |
135 | Follow me on twitter [@sachinchoolur](https://twitter.com/sachinchoolur) for the latest news, updates about this project.
136 |
137 | Special thanks to [Jakub Szwacz](https://github.com/szwacz) for electron boilerplate
138 |
139 | ### License
140 |
141 | MIT License
142 |
--------------------------------------------------------------------------------
/app/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 |
10 | # Change these settings to your own preference
11 | indent_style = space
12 | indent_size = 4
13 |
14 | # We recommend you to keep these unchanged
15 | end_of_line = lf
16 | charset = utf-8
17 | trim_trailing_whitespace = true
18 | insert_final_newline = true
19 |
20 | [*.md]
21 | trim_trailing_whitespace = false
22 |
--------------------------------------------------------------------------------
/app/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
--------------------------------------------------------------------------------
/app/.jscsrc:
--------------------------------------------------------------------------------
1 | {
2 | "preset": "airbnb",
3 | "validateIndentation": 4,
4 | "disallowTrailingComma": true,
5 | "requireTrailingComma": false,
6 | "excludeFiles": ["node_modules/**", "bower_components/**"]
7 | }
8 |
--------------------------------------------------------------------------------
/app/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "node": true,
3 | "browser": true,
4 | "esnext": true,
5 | "bitwise": true,
6 | "camelcase": false,
7 | "curly": true,
8 | "eqeqeq": true,
9 | "immed": true,
10 | "indent": 2,
11 | "latedef": true,
12 | "newcap": true,
13 | "noarg": true,
14 | "quotmark": "single",
15 | "undef": true,
16 | "unused": true,
17 | "strict": true,
18 | "trailing": true,
19 | "smarttabs": true,
20 | "globals": {
21 | "angular": true,
22 | "jQuery": true,
23 | "$": true,
24 | "swal": true,
25 | "sweetAlert": true,
26 | "alert" : true,
27 | "API_URL": true,
28 | "MEDIA_URL": true,
29 | "SOCKET_URL": true,
30 | "PM_URL": true,
31 | "HRM_URL": true,
32 | "ROOT_URL": true,
33 | "CRM_URL": true,
34 | "moment" : true,
35 | "confirm" : true,
36 | "NOTIFY_URL": true,
37 | "io": true
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '0.10'
4 | before_script:
5 | - 'npm install -g bower grunt-cli'
6 | - 'bower install'
7 |
--------------------------------------------------------------------------------
/app/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | lightGallery
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |

31 |
Drag and drop images here
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/app.js:
--------------------------------------------------------------------------------
1 | import { remote, ipcRenderer } from 'electron';
2 | import fs from 'fs';
3 | import path from 'path';
4 |
5 | // Lightgallery components
6 | import { lightGallery } from './lightGallery/js/lightgallery.js';
7 | import { Thumbnail } from './lightGallery/js/lg-thumbnail.js';
8 | import { Zoom } from './lightGallery/js/lg-zoom.js';
9 | import { Autoplay } from './lightGallery/js/lg-autoplay.js';
10 | import { Pager } from './lightGallery/js/lg-pager.js';
11 | import { mousewheel } from './lightGallery/js/mousewheel.js';
12 |
13 | import env from './env';
14 |
15 | var app = remote.app;
16 | var lg;
17 |
18 | // Lightgallery default settings
19 | // Write to config file only once
20 | var defaults = {
21 |
22 | mode: 'lg-slide',
23 |
24 | // Ex : 'ease'
25 | cssEasing: 'ease',
26 |
27 | //'for jquery animation'
28 | easing: 'linear',
29 | speed: 600,
30 | height: '100%',
31 | width: '100%',
32 | addClass: '',
33 | startClass: 'lg-start-zoom',
34 | backdropDuration: 0,
35 | hideBarsDelay: 6000,
36 |
37 | useLeft: false,
38 |
39 | closable: false,
40 | loop: true,
41 | escKey: false,
42 | keyPress: true,
43 | controls: true,
44 | slideEndAnimatoin: true,
45 | hideControlOnEnd: false,
46 | mousewheel: true,
47 |
48 | // .lg-item || '.lg-sub-html'
49 | appendSubHtmlTo: '.lg-sub-html',
50 |
51 | /**
52 | * @desc number of preload slides
53 | * will exicute only after the current slide is fully loaded.
54 | *
55 | * @ex you clicked on 4th image and if preload = 1 then 3rd slide and 5th
56 | * slide will be loaded in the background after the 4th slide is fully loaded..
57 | * if preload is 2 then 2nd 3rd 5th 6th slides will be preloaded.. ... ...
58 | *
59 | */
60 | preload: 1,
61 | showAfterLoad: true,
62 | selector: '',
63 | selectWithin: '',
64 | nextHtml: '',
65 | prevHtml: '',
66 |
67 | // 0, 1
68 | index: false,
69 |
70 | iframeMaxWidth: '100%',
71 |
72 | download: false,
73 | counter: true,
74 | appendCounterTo: '.lg-toolbar',
75 |
76 | swipeThreshold: 50,
77 | enableSwipe: true,
78 | enableDrag: true,
79 |
80 | dynamic: true,
81 | dynamicEl: [],
82 | galleryId: 1,
83 | scale: 1,
84 | zoom: true,
85 | enableZoomAfter: 300,
86 | autoplay: false,
87 | pause: 5000,
88 | progressBar: true,
89 | fourceAutoplay: false,
90 | autoplayControls: true,
91 | appendAutoplayControlsTo: '.lg-toolbar',
92 | pager: false,
93 | thumbnail: true,
94 |
95 | animateThumb: true,
96 | currentPagerPosition: 'middle',
97 |
98 | thumbWidth: 100,
99 | thumbContHeight: 100,
100 | thumbMargin: 5,
101 |
102 | exThumbImage: false,
103 | showThumbByDefault: true,
104 | toogleThumb: true,
105 | pullCaptionUp: true,
106 |
107 | enableThumbDrag: true,
108 | enableThumbSwipe: true,
109 | swipeThreshold: 50,
110 |
111 | loadYoutubeThumbnail: true,
112 | youtubeThumbSize: 1,
113 |
114 | loadVimeoThumbnail: true,
115 | vimeoThumbSize: 'thumbnail_small',
116 |
117 | loadDailymotionThumbnail: true
118 | };
119 |
120 | // Write settings to config file
121 | fs.readFile(app.getPath('userData') + '/lg-config.json', function(err, data) {
122 | if (err) {
123 | fs.writeFile(app.getPath('userData') + '/lg-config.json', JSON.stringify(defaults), function(err) {
124 | if (err) throw err;
125 | });
126 | } else {
127 | defaults = JSON.parse(data);
128 | }
129 | });
130 |
131 | var el = [];
132 |
133 | /**
134 | * @desc Create dynamic elements and initiate lightgallery
135 | * @param {string} dir - the directory from where lightgallery is opened
136 | * @param {string} file - filename from path; only used for development for opening image in the gallery
137 | * */
138 | var loadFiles = function(dir, file) {
139 | fs.readdir(dir, function(err, files) {
140 | var _images = [];
141 | if (files && files.length) {
142 | for (var i = 0; i < files.length; i++) {
143 | if (path.extname(files[i]).toLowerCase() === '.jpg' || path.extname(files[i]).toLowerCase() === '.png' || path.extname(files[i]).toLowerCase() === '.gif' || path.extname(files[i]).toLowerCase() === '.webp') {
144 | el.push({
145 | src: dir + '\\' + files[i],
146 | thumb: './lightgallery/img/lg-default.png'
147 | });
148 | _images.push(files[i]);
149 | }
150 | };
151 | };
152 |
153 | var _index = file ? _images.indexOf(file) : 0;
154 | if (env.name !== 'production') {
155 | _index = 0;
156 | }
157 |
158 | if ($.isArray(el) && el.length) {
159 |
160 | if ($('.lightgallery').data('lightGallery')) {
161 | $('.lightgallery').data('lightGallery').destroy(true);
162 | }
163 |
164 | setTimeout(function() {
165 | $('.lightgallery').lightGallery($.extend({}, defaults, {
166 | dynamicEl: el,
167 | index: _index
168 | }));
169 | }, 100);
170 | };
171 | });
172 | };
173 |
174 | var getFiles = function(files) {
175 | el = [];
176 | if (files && files.length) {
177 | for (var i = 0; i < files.length; i++) {
178 | if (path.extname(files[i].path || files[i]).toLowerCase() === '.jpg' || path.extname(files[i].path || files[i]).toLowerCase() === '.png' || path.extname(files[i].path || files[i]).toLowerCase() === '.gif' || path.extname(files[i].path || files[i]).toLowerCase() === '.webp') {
179 | el.push({
180 | src: files[i].path || files[i],
181 | thumb: './lightgallery/img/lg-default.png'
182 | });
183 | }
184 | };
185 | };
186 |
187 | if ($.isArray(el) && el.length) {
188 | if ($('.lightgallery').data('lightGallery')) {
189 | $('.lightgallery').data('lightGallery').destroy(true);
190 | }
191 |
192 | setTimeout(function() {
193 | $('.lightgallery').lightGallery($.extend({}, defaults, {
194 | dynamicEl: el,
195 | index: 0
196 | }));
197 | }, 100);
198 | };
199 | };
200 |
201 | /**
202 | * @desc reload lightgallery when user changes the settings
203 | */
204 | var reload = function() {
205 |
206 | // Store the current index
207 | var _index = $('.lightgallery').data('lightGallery').index;
208 |
209 | // Destroy the gallery
210 | $('.lightgallery').data('lightGallery').destroy(true);
211 |
212 | // Read settings from config file and rebuild lightgallery
213 | fs.readFile(app.getPath('userData') + '/lg-config.json', function(err, data) {
214 | if (err) throw err;
215 | defaults = JSON.parse(data);
216 |
217 | setTimeout(function() {
218 | $('.lightgallery').lightGallery($.extend({}, defaults, {
219 | dynamicEl: el,
220 | index: _index
221 | }));
222 | }, 100);
223 | });
224 | };
225 |
226 | document.addEventListener('dragover', function(event) {
227 | event.preventDefault();
228 | $('body').addClass('lg-drag-over');
229 | return false;
230 | }, false);
231 |
232 | document.addEventListener('drop', function(event) {
233 | event.preventDefault();
234 | getFiles(event.dataTransfer.files);
235 | $('body').removeClass('lg-drag-over');
236 | return false;
237 | }, false);
238 |
239 | document.addEventListener('dragleave', function(event) {
240 | event.preventDefault();
241 | $('body').removeClass('lg-drag-over');
242 | return false;
243 | }, false);
244 |
245 | document.addEventListener('dragexit', function(event) {
246 | event.preventDefault();
247 | $('body').removeClass('lg-drag-over');
248 | return false;
249 | }, false);
250 |
251 | // Listen opened events from main process
252 | ipcRenderer.on('opened', function(event, arg) {
253 | if (arg) {
254 | var dir = path.parse(arg).dir;
255 | var _file = path.basename(arg);
256 | loadFiles(dir, _file);
257 | }
258 | });
259 |
260 | ipcRenderer.on('openDirectory', function(event, directory) {
261 | if (directory && directory.length) {
262 | loadFiles(directory[0]);
263 | }
264 | });
265 |
266 | ipcRenderer.on('openedFiles', function(event, arg) {
267 | if (arg && arg.length) {
268 | getFiles(arg);
269 | }
270 | });
271 |
272 | // Listen opened events from main process and reload gallery
273 | ipcRenderer.on('refresh', function(event, arg) {
274 | reload();
275 | });
276 |
--------------------------------------------------------------------------------
/app/config.json:
--------------------------------------------------------------------------------
1 | {"mode":"lg-zoom-in","cssEasing":"cubic-bezier(0.250, 0.100, 0.250, 1.000)","easing":"linear","speed":500,"height":"100%","width":"100%","addClass":"","startClass":"lg-start-zoom","backdropDuration":0,"hideBarsDelay":4000,"useLeft":false,"closable":false,"loop":false,"escKey":false,"keyPress":true,"controls":true,"slideEndAnimatoin":true,"hideControlOnEnd":false,"mousewheel":true,"appendSubHtmlTo":".lg-sub-html","preload":1,"showAfterLoad":true,"selector":"","selectWithin":"","nextHtml":"","prevHtml":"","index":false,"iframeMaxWidth":"100%","download":false,"counter":false,"appendCounterTo":".lg-toolbar","swipeThreshold":50,"enableSwipe":true,"enableDrag":true,"dynamic":true,"dynamicEl":[],"galleryId":1,"thumbnail":true,"animateThumb":true,"currentPagerPosition":"middle","thumbWidth":100,"thumbContHeight":100,"thumbMargin":5,"exThumbImage":false,"showThumbByDefault":true,"toogleThumb":true,"pullCaptionUp":true,"enableThumbDrag":true,"enableThumbSwipe":true,"loadYoutubeThumbnail":true,"youtubeThumbSize":1,"loadVimeoThumbnail":true,"vimeoThumbSize":"thumbnail_small","loadDailymotionThumbnail":true,"scale":1,"zoom":true,"enableZoomAfter":300,"autoplay":false,"pause":4500,"progressBar":true,"fourceAutoplay":true,"autoplayControls":true,"appendAutoplayControlsTo":".lg-toolbar","pager":false}
--------------------------------------------------------------------------------
/app/env.js:
--------------------------------------------------------------------------------
1 | // Simple module exposes environment variables to rest of the code.
2 |
3 | import jetpack from 'fs-jetpack';
4 |
5 | var app;
6 | if (process.type === 'renderer') {
7 | app = require('electron').remote.app;
8 | } else {
9 | app = require('electron').app;
10 | }
11 |
12 | var appDir = jetpack.cwd(app.getAppPath());
13 |
14 | var manifest = appDir.read('package.json', 'json');
15 |
16 | export default manifest.env;
17 |
--------------------------------------------------------------------------------
/app/hello_world/hello_universe.js:
--------------------------------------------------------------------------------
1 | var greet = function () {
2 | return 'Hello Universe!';
3 | };
4 |
5 | export default greet;
6 |
--------------------------------------------------------------------------------
/app/hello_world/hello_universe.spec.js:
--------------------------------------------------------------------------------
1 | // Default imports test
2 | import greet from './hello_universe';
3 |
4 | describe("hello universe", function () {
5 |
6 | it("greets better than hello world", function () {
7 | expect(greet()).toBe('Hello Universe!');
8 | });
9 |
10 | });
11 |
--------------------------------------------------------------------------------
/app/hello_world/hello_world.js:
--------------------------------------------------------------------------------
1 | export var greet = function () {
2 | return 'Hello World!';
3 | };
4 |
5 | export var bye = function () {
6 | return 'See ya!';
7 | };
8 |
--------------------------------------------------------------------------------
/app/hello_world/hello_world.spec.js:
--------------------------------------------------------------------------------
1 | // Named imports test
2 | import { greet, bye } from './hello_world';
3 |
4 | describe("hello world", function () {
5 |
6 | it("greets", function () {
7 | expect(greet()).toBe('Hello World!');
8 | });
9 |
10 | it("says goodbye", function () {
11 | expect(bye()).toBe('See ya!');
12 | });
13 |
14 | });
15 |
--------------------------------------------------------------------------------
/app/images/drag_and_drop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/images/drag_and_drop.png
--------------------------------------------------------------------------------
/app/lightgallery/css/lg-fb-comment-box.css:
--------------------------------------------------------------------------------
1 | .lg-outer.fb-comments .lg-img-wrap {
2 | padding-right: 400px !important; }
3 | .lg-outer.fb-comments .fb-comments {
4 | height: 100%;
5 | overflow-y: auto;
6 | position: absolute;
7 | right: 0;
8 | top: 0;
9 | width: 420px;
10 | z-index: 99999;
11 | background: #fff url("../img/loading.gif") no-repeat scroll center center; }
12 | .lg-outer.fb-comments .fb-comments.fb_iframe_widget {
13 | background-image: none; }
14 | .lg-outer.fb-comments .fb-comments.fb_iframe_widget.fb_iframe_widget_loader {
15 | background: #fff url("../img/loading.gif") no-repeat scroll center center; }
16 | .lg-outer.fb-comments .lg-toolbar {
17 | right: 420px;
18 | width: auto; }
19 | .lg-outer.fb-comments .lg-actions .lg-next {
20 | right: 420px; }
21 | .lg-outer.fb-comments .lg-item {
22 | background-image: none; }
23 | .lg-outer.fb-comments .lg-item.lg-complete .lg-img-wrap {
24 | background-image: none; }
25 | .lg-outer.fb-comments .lg-img-wrap {
26 | background: url(../img/loading.gif) no-repeat scroll center center transparent; }
27 | .lg-outer.fb-comments .lg-sub-html {
28 | padding: 0;
29 | position: static; }
30 |
31 | /*# sourceMappingURL=lg-fb-comment-box.css.map */
32 |
--------------------------------------------------------------------------------
/app/lightgallery/css/lg-fb-comment-box.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "AAGI,kCAAa;EACT,aAAa,EAAE,gBAAgB;AAEnC,kCAAa;EACT,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,6DAA6D;EACzE,mDAAmB;IACf,gBAAgB,EAAE,IAAI;IACtB,2EAAyB;MACrB,UAAU,EAAE,6DAA6D;AAIrF,iCAAY;EACR,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,IAAI;AAEf,0CAAqB;EACjB,KAAK,EAAE,KAAK;AAEhB,8BAAS;EACL,gBAAgB,EAAE,IAAI;EAElB,uDAAY;IACR,gBAAgB,EAAE,IAAI;AAIlC,kCAAa;EACT,UAAU,EAAE,kEAAkE;AAGlF,kCAAa;EACT,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,MAAM",
4 | "sources": ["../sass/lg-fb-comment-box.scss"],
5 | "names": [],
6 | "file": "lg-fb-comment-box.css"
7 | }
8 |
--------------------------------------------------------------------------------
/app/lightgallery/css/lg-transitions.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "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",
4 | "sources": ["../sass/lg-transitions.scss","../sass/lg-mixins.scss"],
5 | "names": [],
6 | "file": "lg-transitions.css"
7 | }
8 |
--------------------------------------------------------------------------------
/app/lightgallery/css/lightgallery.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "AACA,UAMC;EALG,WAAW,EAAE,IAAI;EACjB,GAAG,EAAE,6BAA6B;EAClC,GAAG,EAAE,gNAAgN;EACrN,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;AAItB,QAAS;EACL,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,MAAM;EACnB,YAAY,EAAE,MAAM;EACpB,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,CAAC;EACd,uCAAuC;EACvC,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;;AClBlC,0CAAmB;EACf,gBAAgB,ECaN,mBAAW;EDZrB,aAAa,ECFG,GAAG;EDGnB,KAAK,ECiCW,IAAc;EDhC9B,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,KAAK;EACjB,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,OAAO,ECgCG,IAAI;ED9Bd,4DAAW;IACP,cAAc,EAAE,IAAI;IACpB,OAAO,EAAE,GAAG;EAGhB,sDAAQ;IACJ,KAAK,ECkBa,IAAoB;ADd9C,oBAAS;EACL,KAAK,EAAE,IAAI;EAEX,2BAAS;IACL,OAAO,EAAE,OAAO;AAIxB,oBAAS;EACL,IAAI,EAAE,IAAI;EAEV,0BAAQ;IACJ,OAAO,EAAE,OAAO;;AEuBxB,+BAEC;EFnBD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,KAAK;EAGf,IAAK;IACD,IAAI,EAAE,CAAC;AEYX,4BAEC;EFvBD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,KAAK;EAGf,IAAK;IACD,IAAI,EAAE,CAAC;AEgBX,2BAEC;EF3BD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,KAAK;EAGf,IAAK;IACD,IAAI,EAAE,CAAC;AEoBX,uBAEC;EF/BD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,KAAK;EAGf,IAAK;IACD,IAAI,EAAE,CAAC;AEQX,8BAEC;EFJD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,IAAI;EAGd,IAAK;IACD,IAAI,EAAE,CAAC;AEHX,2BAEC;EFRD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,IAAI;EAGd,IAAK;IACD,IAAI,EAAE,CAAC;AECX,0BAEC;EFZD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,IAAI;EAGd,IAAK;IACD,IAAI,EAAE,CAAC;AEKX,sBAEC;EFhBD,EAAG;IACC,IAAI,EAAE,CAAC;EAGX,GAAI;IACA,IAAI,EAAE,IAAI;EAGd,IAAK;IACD,IAAI,EAAE,CAAC;AAOP,iCAAW;EEvDf,iBAAiB,EFwDU,iBAAiB;EEvD5C,YAAY,EFuDe,iBAAiB;EEtD5C,SAAS,EFsDkB,iBAAiB;EACpC,QAAQ,EAAE,QAAQ;AAKtB,gCAAW;EE9Df,iBAAiB,EF+DU,gBAAgB;EE9D3C,YAAY,EF8De,gBAAgB;EE7D3C,SAAS,EF6DkB,gBAAgB;EACnC,QAAQ,EAAE,QAAQ;;AAM9B,WAAY;EACR,OAAO,EC5CM,IAAI;ED6CjB,IAAI,EAAE,CAAC;EACP,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,gBAAgB,EC9FJ,mBAAmB;EDgG/B,oBAAS;IACL,KAAK,EC5DW,IAAc;ID6D9B,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,IAAI;IACX,eAAe,EAAE,eAAe;IAChC,OAAO,EAAE,WAAW;IAEpB,0BAAQ;MACJ,KAAK,ECxEa,IAAoB;ED6E1C,2BAAQ;IACJ,OAAO,EAAE,OAAO;EAKpB,8BAAQ;IACJ,OAAO,EAAE,OAAO;;AAM5B,YAAa;EACT,gBAAgB,ECjGH,mBAAmB;EDkGhC,MAAM,EAAE,CAAC;EACT,KAAK,EClGW,IAAI;EDmGpB,SAAS,EAAE,IAAI;EACf,IAAI,EAAE,CAAC;EACP,OAAO,EAAE,SAAS;EAClB,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,CAAC;EACR,UAAU,EAAE,MAAM;EAClB,OAAO,EC5FM,IAAI;ED8FjB,eAAG;IACC,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;EAGrB,cAAE;IACE,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,OAAO;;AAKvB,WAAY;EACR,KAAK,ECrHe,IAAc;EDsHlC,OAAO,EAAE,YAAY;EACrB,SAAS,EChJU,IAAI;EDiJvB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,MAAM;;AAI1B,+BAAgC;EAC5B,OAAO,EAAE,CAAC;EEiIV,kBAAkB,EAnBH,oGAAsD;EAoBrE,eAAe,EApBA,iGAAsD;EAqBrE,aAAa,EArBE,+FAAsD;EAsBrE,UAAU,EAAE,4FAAO;;AF/HnB,uBAAS;EACL,OAAO,EAAE,CAAC;EEVd,iBAAiB,EAAE,wBAAuB;EAC1C,SAAS,EAAE,wBAAuB;AFalC,uBAAS;EACL,OAAO,EAAE,CAAC;EEfd,iBAAiB,EAAE,uBAAuB;EAC1C,SAAS,EAAE,uBAAuB;AFkBlC,0BAAY;EACR,OAAO,EAAE,CAAC;EEpBd,iBAAiB,EAAE,wBAAuB;EAC1C,SAAS,EAAE,wBAAuB;;AF4B1B,0DAAU;EExBlB,iBAAiB,EAAE,sBAAmB;EACtC,SAAS,EAAE,sBAAmB;EFyBlB,OAAO,EAAE,CAAC;EEsGtB,kBAAkB,EAnBH,yDAAsD;EAoBrE,eAAe,EApBA,sDAAsD;EAqBrE,aAAa,EArBE,oDAAsD;EAsBrE,UAAU,EAAE,iDAAO;EA7FnB,wBAAwB,EFVc,OAAO;EEW7C,qBAAqB,EFXiB,OAAO;EEY7C,oBAAoB,EFZkB,OAAO;EEa7C,gBAAgB,EFbsB,OAAO;AAGjC,+EAAU;EE/BtB,iBAAiB,EAAE,gBAAmB;EACtC,SAAS,EAAE,gBAAmB;EFgCd,OAAO,EAAE,CAAC;;AGtM1B,yBAAgB;EACZ,gBAAgB,EFsCV,OAAO;EErCb,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,OAAO,EF0CI,IAAI;EEzCf,UAAU,EAAE,KAAK;ED0JrB,iBAAiB,EAAE,uBAAuB;EAC1C,SAAS,EAAE,uBAAuB;EAoIlC,kBAAkB,EAnBH,sDAAsD;EAoBrE,eAAe,EApBA,mDAAsD;EAqBrE,aAAa,EArBE,iDAAsD;EAsBrE,UAAU,EAAE,8CAAO;EC7RX,gDAAe;ID6SvB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,IAAI;EC3SJ,oDAAe;ID+SvB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,QAAQ;EC9SR,+CAAU;IDqNlB,2BAA2B,EAAE,aAAoB;IACjD,mBAAmB,EAAE,aAAoB;AChNrC,uCAAgB;EDmIpB,iBAAiB,EAAE,qBAAuB;EAC1C,SAAS,EAAE,qBAAuB;AC/HlC,mBAAU;EACN,OAAO,EAAE,MAAM;EACf,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;AAGvB,wBAAe;EACX,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,OAAO;EACf,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,GAAG;EAClB,aAAa,EAAE,GAAG;EAClB,0BAA2B;IAT/B,wBAAe;MDoLf,kBAAkB,EAAE,uBAAW;MAC/B,aAAa,EAAE,uBAAW;MAC1B,UAAU,EAAE,uBAAW;ECzKnB,+DAAkB;IACd,YAAY,EF7BI,OAAmB;EEgCvC,4BAAI;IACA,KAAK,EAAE,IAAI;AAKf,+BAAS;EACL,cAAc,EAAE,KAAK;AAKzB,gCAAS;EACL,cAAc,EAAE,CAAC;AAIrB,yCAAa;EDkJjB,kBAAkB,EAAE,iBAAW;EAC/B,aAAa,EAAE,iBAAW;EAC1B,UAAU,EAAE,iBAAW;AChJf,uDAAa;EACT,MAAM,EAAE,KAAK;AAKzB,0BAAiB;EACb,gBAAgB,EFjDH,OAAO;EEkDpB,aAAa,EAAE,WAAiD;EAChE,KAAK,EFlDW,IAAc;EEmD9B,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;EAClB,GAAG,EAAE,KAAK;EACV,KAAK,EAAE,IAAI;EAEX,gCAAQ;IACJ,OAAO,EAAE,OAAO;EAGpB,gCAAQ;IACJ,KAAK,EFlEa,IAAoB;;AGtC9C,wBAAe;EACX,OAAO,EAAE,YAAY;EACrB,cAAc,EAAE,MAAM;EACtB,SAAS,EAAE,MAAM;EACjB,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;AAGlB,mBAAU;EACN,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,CAAC;EACT,cAAc,EAAE,MAAM;EACtB,QAAQ,EAAE,MAAM;EAChB,QAAQ,EAAE,QAAQ;EAElB,8BAAW;IACP,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,eAAe;EAG3B,kCAAe;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;IACR,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,OAAO,EHgBC,IAAI;IGfZ,MAAM,EAAE,OAAO;AAKnB,sCAAc;EACV,UAAU,EAAE,6DAA6D;AAGzE,4CAAc;EACV,UAAU,EAAE,iEAAiE;AAOrF,sCAAc;EACV,UAAU,EAAE,6DAA6D;EACzE,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,KAAK;EAClB,UAAU,EAAE,KAAK;EACjB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG;AAGZ,4CAAc;EACV,OAAO,EAAE,CAAC;AAOlB,wCAAc;EACV,UAAU,EAAE,+DAA+D;AAG3E,8CAAc;EACV,UAAU,EAAE,mEAAmE;AAK3F,0BAAiB;EACb,KAAK,EAAE,eAAe;EACtB,MAAM,EAAE,eAAe;EACvB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;AAIP,wCAAiB;EACb,UAAU,EAAE,MAAM;AAIlB,4GAA2B;EACvB,OAAO,EAAE,IAAI;AAGjB,yDAAiB;EACb,UAAU,EAAE,OAAO;;AClGnC,gBAAiB;EACb,gBAAgB,EJwBC,IAAI;EIvBrB,MAAM,EJyBe,GAAG;EIxBxB,IAAI,EAAE,CAAC;EACP,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,OAAO,EJqCU,IAAI;EIpCrB,OAAO,EAAE,CAAC;EH8RV,kBAAkB,EAnBH,qBAAsD;EAoBrE,eAAe,EApBA,qBAAsD;EAqBrE,aAAa,EArBE,qBAAsD;EAsBrE,UAAU,EAAE,qBAAO;EG9RnB,6BAAa;IACT,gBAAgB,EJcI,OAAmB;IIbvC,MAAM,EJcW,GAAG;IIbpB,KAAK,EAAE,CAAC;EAIR,sCAAa;IACT,KAAK,EAAE,IAAI;EAInB,kCAAoB;IAChB,OAAO,EAAE,CAAC;;AAKd,yBAAQ;EAIJ,OAAO,EAAE,OAAO;EAHhB,2CAAoB;IAChB,OAAO,EAAE,OAAO;;AC3BhB,+JAAwB;EJyOhC,2BAA2B,EAAE,EAAoB;EACjD,mBAAmB,EAAE,EAAoB;AIlOrC,uDAAa;EJ0RjB,kBAAkB,EAnBH,8BAAsD;EAoBrE,eAAe,EApBA,2BAAsD;EAqBrE,aAAa,EArBE,yBAAsD;EAsBrE,UAAU,EAAE,sBAAO;EAxInB,iBAAiB,EAAE,oBAAuB;EAC1C,SAAS,EAAE,oBAAuB;EAhFlC,2BAA2B,EInEU,MAAM;EJoE3C,wBAAwB,EIpEa,MAAM;EJqE3C,mBAAmB,EIrEkB,MAAM;AAGvC,oDAAU;EJoJd,iBAAiB,EAAE,gBAAmB;EACtC,SAAS,EAAE,gBAAmB;EA+H9B,kBAAkB,EAnBH,wDAAsD;EAoBrE,eAAe,EApBA,qDAAsD;EAqBrE,aAAa,EArBE,mDAAsD;EAsBrE,UAAU,EAAE,gDAAO;EA7FnB,wBAAwB,EItLU,GAAG;EJuLrC,qBAAqB,EIvLa,GAAG;EJwLrC,oBAAoB,EIxLc,GAAG;EJyLrC,gBAAgB,EIzLkB,GAAG;EJ4DrC,2BAA2B,EI3DU,MAAM;EJ4D3C,wBAAwB,EI5Da,MAAM;EJ6D3C,mBAAmB,EI7DkB,MAAM;;AAQ3C,iBAAQ;EACJ,OAAO,EAAE,OAAO;;AAIxB,YAAa;EACT,OAAO,EAAE,GAAG;EACZ,cAAc,EAAE,IAAI;EAEpB,kBAAQ;IACJ,OAAO,EAAE,OAAO;EAGpB,uBAAa;IACT,OAAO,EAAE,CAAC;IACV,cAAc,EAAE,IAAI;;AC7CxB,yBAAgB;EACZ,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,CAAC;EACP,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,CAAC;EACR,UAAU,EAAE,MAAM;EAClB,OAAO,EN0CA,IAAI;EMzCX,MAAM,EAAE,IAAI;EAGR,uDAAe;IACX,QAAQ,EAAE,OAAO;AAK7B,wBAAe;EACX,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;EAChB,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,GAAG;EACnB,MAAM,EAAE,KAAK;EAGT,mDAAqB;IACjB,OAAO,EAAE,CAAC;ILsItB,iBAAiB,EAAE,oBAAuB;IAC1C,SAAS,EAAE,oBAAuB;EKjI1B,kDAAU;IACN,UAAU,EAAE,qBAAqB;AAK7C,8BAAqB;EACjB,gBAAgB,EAAE,IAAI;EACtB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,CAAC;EACP,aAAa,EAAE,IAAI;EACnB,WAAW,EAAE,KAAK;EAClB,OAAO,EAAE,CAAC;EACV,OAAO,EAAE,GAAG;EACZ,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,GAAG;ELmPtB,kBAAkB,EAnBH,sDAAsD;EAoBrE,eAAe,EApBA,mDAAsD;EAqBrE,aAAa,EArBE,iDAAsD;EAsBrE,UAAU,EAAE,8CAAO;EAxInB,iBAAiB,EAAE,sBAAuB;EAC1C,SAAS,EAAE,sBAAuB;EK3G9B,kCAAI;IACA,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;AAIpB,mBAAU;EACN,gBAAgB,EAAE,wBAAwB;EAC1C,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,wCAAwC;EACpD,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,IAAI;EL2JhB,kBAAkB,EAAE,uBAAW;EAC/B,aAAa,EAAE,uBAAW;EAC1B,UAAU,EAAE,uBAAW;EK3JnB,KAAK,EAAE,IAAI;EAEX,oDAAiB;IACb,UAAU,EAAE,qBAAqB;AAIzC,mBAAU;EACN,WAAW,EAAE,sBAAsB;EACnC,YAAY,EAAE,sBAAsB;EACpC,UAAU,EAAE,WAAW;EACvB,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,GAAG;EACT,WAAW,EAAE,IAAI;EACjB,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,MAAM;EACtB,KAAK,EAAE,CAAC;;ACrFZ,oBAAQ;EACJ,OAAO,EAAE,OAAO;EAEhB,sCAAoB;IAChB,OAAO,EAAE,OAAO;;ACQ5B,MAAO;EACH,KAAK,EAAE,CAAC;;AAGZ,2BAA4B;EACxB,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;EACX,WAAW,EAAE,CAAC;;AAGlB,YAAa;EACT,KAAK,EAAE,IAAI;;AAIf,SAAU;EACN,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,OAAO,ERSI,IAAI;EQRf,OAAO,EAAE,CAAC;EP0LV,kBAAkB,EAAE,qBAAW;EAC/B,aAAa,EAAE,qBAAW;EAC1B,UAAU,EAAE,qBAAW;EOxLvB,WAAE;IP4DF,kBAAkB,EO3DM,UAAU;IP4DlC,eAAe,EO5DS,UAAU;IP6DlC,UAAU,EO7Dc,UAAU;EAGlC,oBAAa;IACT,OAAO,EAAE,CAAC;EAMN,yHAA+C;IP2LvD,2BAA2B,EAAE,kBAAoB;IACjD,mBAAmB,EAAE,kBAAoB;IAIzC,kCAAkC,EO9Lc,kBAAkB;IP+LlE,0BAA0B,EO/LsB,kBAAkB;EAQ1D,6JAA+C;IPiLvD,2BAA2B,EAAE,aAAoB;IACjD,mBAAmB,EAAE,aAAoB;IOhL7B,OAAO,EAAE,CAAC;EAOlB,+BAAc;IPoPlB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,IAAI;EOlPR,mCAAc;IPsPlB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,QAAQ;EOtPhB,aAAI;IACA,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;EAGpB,mBAAU;IACN,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,WAAW,EAAE,MAAM;EAGvB,kBAAS;IACL,UAAU,EAAE,kEAAkE;IAC9E,OAAO,EAAE,eAAe;EAGxB,iGAA2C;IACvC,OAAO,EAAE,uBAAuB;EAIpC,4BAAW;IACP,OAAO,EAAE,uBAAuB;EAIxC,0CAAuB;IACnB,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IAEZ,wDAAS;MACL,OAAO,EAAE,EAAE;MACX,OAAO,EAAE,YAAY;MACrB,MAAM,EAAE,GAAG;MACX,KAAK,EAAE,GAAG;MACV,YAAY,EAAE,IAAI;EAI1B,sBAAa;IACT,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,KAAK;EAId,8BAAc;IACV,gBAAgB,EAAE,IAAI;EAG1B,6BAAa;IACT,OAAO,ER9FL,IAAI;EQkGd,mBAAU;IACN,OAAO,EAAE,YAAY;IACrB,cAAc,EAAE,MAAM;IACtB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,eAAe;EAKnB,sGAA2B;IACvB,OAAO,EAAE,CAAC;IP4DtB,kBAAkB,EAAE,qBAAW;IAC/B,aAAa,EAAE,qBAAW;IAC1B,UAAU,EAAE,qBAAW;EOzDX,8HAA2B;IACvB,OAAO,EAAE,CAAC;EAO1B,wBAAe;IACX,OAAO,EAAE,IAAI;;AAGrB,YAAY;EACR,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;EACT,OAAO,ERpIO,IAAI;EQqIlB,gBAAgB,EAAE,IAAI;EACtB,OAAO,EAAE,CAAC;EPmCV,kBAAkB,EAAE,qBAAW;EAC/B,aAAa,EAAE,qBAAW;EAC1B,UAAU,EAAE,qBAAW;EOnCvB,eAAI;IACA,OAAO,ER7LI,CAAC;;AQsMZ,0GAA4C;EPgGhD,kBAAkB,EAnBH,0BAAsD;EAoBrE,eAAe,EApBA,0BAAsD;EAqBrE,aAAa,EArBE,0BAAsD;EAsBrE,UAAU,EAAE,0BAAO;AO7Ff,6BAAS;EP1Hb,2BAA2B,EO2HU,MAAM;EP1H3C,wBAAwB,EO0Ha,MAAM;EPzH3C,mBAAmB,EOyHkB,MAAM;AAKvC,6BAAS;EPhIb,2BAA2B,EOiIU,MAAM;EPhI3C,wBAAwB,EOgIa,MAAM;EP/H3C,mBAAmB,EO+HkB,MAAM;AAMvC,yBAAS;EACL,OAAO,EAAE,CAAC;EAEV,oCAAa;IACT,OAAO,EAAE,CAAC;EAId,sHAA+C;IPqEvD,kBAAkB,EAnBH,oBAAsD;IAoBrE,eAAe,EApBA,oBAAsD;IAqBrE,aAAa,EArBE,oBAAsD;IAsBrE,UAAU,EAAE,oBAAO;AOhEX,sCAAS;EACL,OAAO,EAAE,CAAC;EAEV,oDAAgB;IP3E5B,iBAAiB,EAAE,wBAAuB;IAC1C,SAAS,EAAE,wBAAuB;EO8EtB,oDAAgB;IP/E5B,iBAAiB,EAAE,uBAAuB;IAC1C,SAAS,EAAE,uBAAuB;EOkFtB,iDAAa;IPnFzB,iBAAiB,EAAE,oBAAuB;IAC1C,SAAS,EAAE,oBAAuB;IOoFlB,OAAO,EAAE,CAAC;EAId,6JAA+C;IP4C3D,kBAAkB,EAnBH,yEAAsD;IAoBrE,eAAe,EApBA,sEAAsD;IAqBrE,aAAa,EArBE,oEAAsD;IAsBrE,UAAU,EAAE,iEAAO;AOxCX,sCAAS;EACL,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EAEP,oDAAgB;IACZ,IAAI,EAAE,KAAK;EAGf,oDAAgB;IACZ,IAAI,EAAE,IAAI;EAGd,iDAAa;IACT,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;EAId,6JAA+C;IPkB3D,kBAAkB,EAnBH,4DAAsD;IAoBrE,eAAe,EApBA,4DAAsD;IAqBrE,aAAa,EArBE,4DAAsD;IAsBrE,UAAU,EAAE,4DAAO",
4 | "sources": ["file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-fonts.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-theme-default.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-variables.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-mixins.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-thumbnail.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-video.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-autoplay.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-zoom.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-pager.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lg-fullscreen.scss","file:///C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/sass/lightgallery.scss"],
5 | "names": [],
6 | "file": "lightgallery.css"
7 | }
8 |
--------------------------------------------------------------------------------
/app/lightgallery/fonts/lg.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/fonts/lg.eot
--------------------------------------------------------------------------------
/app/lightgallery/fonts/lg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/lightgallery/fonts/lg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/fonts/lg.ttf
--------------------------------------------------------------------------------
/app/lightgallery/fonts/lg.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/fonts/lg.woff
--------------------------------------------------------------------------------
/app/lightgallery/img/lg-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/img/lg-default.png
--------------------------------------------------------------------------------
/app/lightgallery/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/img/loading.gif
--------------------------------------------------------------------------------
/app/lightgallery/img/video-play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/img/video-play.png
--------------------------------------------------------------------------------
/app/lightgallery/img/vimeo-play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/img/vimeo-play.png
--------------------------------------------------------------------------------
/app/lightgallery/img/youtube-play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/app/lightgallery/img/youtube-play.png
--------------------------------------------------------------------------------
/app/lightgallery/js/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "curly": true,
3 | "eqeqeq": true,
4 | "immed": true,
5 | "latedef": true,
6 | "newcap": true,
7 | "noarg": true,
8 | "sub": true,
9 | "undef": true,
10 | "unused": true,
11 | "boss": true,
12 | "eqnull": true,
13 | "browser": true,
14 | "predef": [
15 | "jQuery",
16 | "console",
17 | "$f",
18 | "picturefill",
19 | "videojs"
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/app/lightgallery/js/lg-autoplay.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Autoplay Plugin
3 | * @version 1.2.0
4 | * @author Sachin N - @sachinchoolur
5 | * @license MIT License (MIT)
6 | */
7 |
8 | (function($, window, document, undefined) {
9 |
10 | 'use strict';
11 |
12 | var defaults = {
13 | autoplay: false,
14 | pause: 5000,
15 | progressBar: true,
16 | fourceAutoplay: false,
17 | autoplayControls: true,
18 | appendAutoplayControlsTo: '.lg-toolbar'
19 | };
20 |
21 | /**
22 | * Creates the autoplay plugin.
23 | * @param {object} element - lightGallery element
24 | */
25 | var Autoplay = function(element) {
26 |
27 | this.core = $(element).data('lightGallery');
28 |
29 | this.$el = $(element);
30 |
31 | // Exicute only if items are above 1
32 | if (this.core.$items.length < 2) {
33 | return false;
34 | }
35 |
36 | this.core.s = $.extend({}, defaults, this.core.s);
37 | this.interval = false;
38 |
39 | // Identify if slide happened from autoplay
40 | this.fromAuto = true;
41 |
42 | // Identify if autoplay canceled from touch/drag
43 | this.canceledOnTouch = false;
44 |
45 | // save fourceautoplay value
46 | this.fourceAutoplayTemp = this.core.s.fourceAutoplay;
47 |
48 | // do not allow progress bar if browser does not support css3 transitions
49 | if (!this.core.doCss()) {
50 | this.core.s.progressBar = false;
51 | }
52 |
53 | this.init();
54 |
55 | return this;
56 | };
57 |
58 | Autoplay.prototype.init = function() {
59 | var _this = this;
60 |
61 | // append autoplay controls
62 | if (_this.core.s.autoplayControls) {
63 | _this.controls();
64 | }
65 |
66 | // Create progress bar
67 | if (_this.core.s.progressBar) {
68 | _this.core.$outer.find('.lg').append('');
69 | }
70 |
71 | // set progress
72 | _this.progress();
73 |
74 | // Start autoplay
75 | if (_this.core.s.autoplay) {
76 | _this.startlAuto();
77 | }
78 |
79 | // cancel interval on touchstart and dragstart
80 | _this.$el.on('onDragstart.lg.tm touchstart.lg.tm', function() {
81 | if (_this.interval) {
82 | _this.cancelAuto();
83 | _this.canceledOnTouch = true;
84 | }
85 | });
86 |
87 | // restore autoplay if autoplay canceled from touchstart / dragstart
88 | _this.$el.on('onDragend.lg.tm touchend.lg.tm onSlideClick.lg.tm', function() {
89 | if (!_this.interval && _this.canceledOnTouch) {
90 | _this.startlAuto();
91 | _this.canceledOnTouch = false;
92 | }
93 | });
94 |
95 | };
96 |
97 | Autoplay.prototype.progress = function() {
98 |
99 | var _this = this;
100 | var _$progressBar;
101 | var _$progress;
102 |
103 | _this.$el.on('onBeforeSlide.lg.tm', function() {
104 |
105 | // start progress bar animation
106 | if (_this.core.s.progressBar && _this.fromAuto) {
107 | _$progressBar = _this.core.$outer.find('.lg-progress-bar');
108 | _$progress = _this.core.$outer.find('.lg-progress');
109 | if (_this.interval) {
110 | _$progress.removeAttr('style');
111 | _$progressBar.removeClass('lg-start');
112 | setTimeout(function() {
113 | _$progress.css('transition', 'width ' + (_this.core.s.speed + _this.core.s.pause) + 'ms ease 0s');
114 | _$progressBar.addClass('lg-start');
115 | }, 20);
116 | }
117 | }
118 |
119 | // Remove setinterval if slide is trigered manualy and fourceautoplay is false
120 | if (!_this.fromAuto && !_this.core.s.fourceAutoplay) {
121 | _this.cancelAuto();
122 | }
123 |
124 | _this.fromAuto = false;
125 |
126 | });
127 | };
128 |
129 | // Manage autoplay via play/stop buttons
130 | Autoplay.prototype.controls = function() {
131 | var _this = this;
132 | var _html = '';
133 |
134 | // Append autoplay controls
135 | $(this.core.s.appendAutoplayControlsTo).append(_html);
136 |
137 | _this.core.$outer.find('.lg-autoplay-button').on('click.lg', function() {
138 | if ($(_this.core.$outer).hasClass('lg-show-autoplay')) {
139 | _this.cancelAuto();
140 | _this.core.s.fourceAutoplay = false;
141 | } else {
142 | if (!_this.interval) {
143 | _this.startlAuto();
144 | _this.core.s.fourceAutoplay = _this.fourceAutoplayTemp;
145 | }
146 | }
147 | });
148 | };
149 |
150 | // Autostart gallery
151 | Autoplay.prototype.startlAuto = function() {
152 | var _this = this;
153 |
154 | _this.core.$outer.find('.lg-progress').css('transition', 'width ' + (_this.core.s.speed + _this.core.s.pause) + 'ms ease 0s');
155 | _this.core.$outer.addClass('lg-show-autoplay');
156 | _this.core.$outer.find('.lg-progress-bar').addClass('lg-start');
157 |
158 | _this.interval = setInterval(function() {
159 | if (_this.core.index + 1 < _this.core.$items.length) {
160 | _this.core.index = _this.core.index;
161 | } else {
162 | _this.core.index = -1;
163 | }
164 |
165 | _this.core.index++;
166 | _this.fromAuto = true;
167 | _this.core.slide(_this.core.index, false, false);
168 | }, _this.core.s.speed + _this.core.s.pause);
169 | };
170 |
171 | // cancel Autostart
172 | Autoplay.prototype.cancelAuto = function() {
173 | clearInterval(this.interval);
174 | this.interval = false;
175 | this.core.$outer.find('.lg-progress').removeAttr('style');
176 | this.core.$outer.removeClass('lg-show-autoplay');
177 | this.core.$outer.find('.lg-progress-bar').removeClass('lg-start');
178 | };
179 |
180 | Autoplay.prototype.destroy = function() {
181 |
182 | this.cancelAuto();
183 | this.core.$outer.find('.lg-progress-bar').remove();
184 | };
185 |
186 | $.fn.lightGallery.modules.autoplay = Autoplay;
187 |
188 | })(jQuery, window, document);
189 |
--------------------------------------------------------------------------------
/app/lightgallery/js/lg-pager.js:
--------------------------------------------------------------------------------
1 | (function($, window, document, undefined) {
2 |
3 | 'use strict';
4 |
5 | var defaults = {
6 | pager: false
7 | };
8 |
9 | var Pager = function(element) {
10 |
11 | this.core = $(element).data('lightGallery');
12 |
13 | this.$el = $(element);
14 | this.core.s = $.extend({}, defaults, this.core.s);
15 | if (this.core.s.pager && this.core.$items.length > 1) {
16 | this.init();
17 | }
18 |
19 | return this;
20 | };
21 |
22 | Pager.prototype.getPager = function(file, index) {
23 | var _this = this;
24 | var _canvas = document.createElement('canvas');
25 | var _img = new Image();
26 | _img.src = file;
27 | _img.onload = function() {
28 | _canvas.width = Number(100);
29 | _canvas.height = Number(100);
30 | if (_canvas.getContext) {
31 | var _cntxt = _canvas.getContext('2d');
32 | _cntxt.drawImage(_img, 0, 0, _canvas.width, _canvas.height);
33 | var _dataURL = _canvas.toDataURL();
34 | _this.core.$outer.find('.lg-pager-cont').eq(index).find('img').attr('src', _dataURL);
35 | }
36 | };
37 | };
38 |
39 | Pager.prototype.init = function() {
40 | var _this = this;
41 | var pagerList = '';
42 | var $pagerCont;
43 | var $pagerOuter;
44 | var timeout;
45 |
46 | _this.core.$outer.find('.lg').append('');
47 |
48 | if (_this.core.s.dynamic) {
49 | for (var i = 0; i < _this.core.s.dynamicEl.length; i++) {
50 | pagerList += '';
51 | }
52 | } else {
53 | _this.core.$items.each(function() {
54 |
55 | if (!_this.core.s.exThumbImage) {
56 | pagerList += '';
57 | } else {
58 | pagerList += '';
59 | }
60 |
61 | });
62 | }
63 |
64 | $pagerOuter = _this.core.$outer.find('.lg-pager-outer');
65 |
66 | $pagerOuter.html(pagerList);
67 |
68 | $pagerCont = _this.core.$outer.find('.lg-pager-cont');
69 | $pagerCont.on('click.lg touchend.lg', function() {
70 | var _$this = $(this);
71 | _this.core.index = _$this.index();
72 | _this.core.slide(_this.core.index, false, false);
73 | });
74 |
75 | $pagerOuter.on('mouseover.lg', function() {
76 | clearTimeout(timeout);
77 | $pagerOuter.addClass('lg-pager-hover');
78 | });
79 |
80 | $pagerOuter.on('mouseout.lg', function() {
81 | timeout = setTimeout(function() {
82 | $pagerOuter.removeClass('lg-pager-hover');
83 | });
84 | });
85 |
86 | _this.core.$el.on('onBeforeSlide.lg.tm', function(e, prevIndex, index) {
87 | $pagerCont.removeClass('lg-pager-active');
88 | $pagerCont.eq(index).addClass('lg-pager-active');
89 | });
90 |
91 |
92 | _this.core.$outer.find('.lg-pager-cont').each(function(index) {
93 | _this.getPager(_this.core.s.dynamicEl[index].src, index);
94 | });
95 |
96 | };
97 |
98 | Pager.prototype.destroy = function() {
99 |
100 | };
101 |
102 | $.fn.lightGallery.modules.pager = Pager;
103 |
104 | })(jQuery, window, document);
105 |
--------------------------------------------------------------------------------
/app/lightgallery/js/lg-video.js:
--------------------------------------------------------------------------------
1 | (function($, window, document, undefined) {
2 |
3 | 'use strict';
4 |
5 | var defaults = {
6 | videoMaxWidth: '855px',
7 | youtubePlayerParams: false,
8 | vimeoPlayerParams: false,
9 | dailymotionPlayerParams: false,
10 | videojs: false
11 | };
12 |
13 | var Video = function(element) {
14 |
15 | this.core = $(element).data('lightGallery');
16 |
17 | this.$el = $(element);
18 | this.core.s = $.extend({}, defaults, this.core.s);
19 | this.videoLoaded = false;
20 |
21 | this.init();
22 |
23 | return this;
24 | };
25 |
26 | Video.prototype.init = function() {
27 | var _this = this;
28 |
29 | // Event triggered when video url found without poster
30 | _this.core.$el.on('hasVideo.lg.tm', function(event, index, src, html) {
31 | _this.core.$slide.eq(index).find('.lg-video').append(_this.loadVideo(src, 'lg-object', true, index, html));
32 | if (html) {
33 | if (_this.core.s.videojs) {
34 | try {
35 | videojs(_this.core.$slide.eq(index).find('.lg-html5').get(0), {}, function() {
36 | if (!_this.videoLoaded) {
37 | this.play();
38 | }
39 | });
40 | } catch (e) {
41 | console.error('Make sure you have included videojs');
42 | }
43 | } else {
44 | _this.core.$slide.eq(index).find('.lg-html5').get(0).play();
45 | }
46 | }
47 | });
48 |
49 | // Set max width for video
50 | _this.core.$el.on('onAferAppendSlide.lg.tm', function(event, index) {
51 | _this.core.$slide.eq(index).find('.lg-video-cont').css('max-width', _this.core.s.videoMaxWidth);
52 | _this.videoLoaded = true;
53 | });
54 |
55 | var loadOnClick = function($el) {
56 | // check slide has poster
57 | if ($el.find('.lg-object').hasClass('lg-has-poster') && $el.find('.lg-object').is(':visible')) {
58 |
59 | // chack already video element present
60 | if (!$el.hasClass('lg-has-video')) {
61 |
62 | $el.addClass('lg-video-palying lg-has-video');
63 |
64 | var _src;
65 | var _html;
66 | var _loadVideo = function(_src, _html) {
67 |
68 | $el.find('.lg-video').append(_this.loadVideo(_src, '', false, _this.core.index, _html));
69 |
70 | if (_html) {
71 | if (_this.core.s.videojs) {
72 | try {
73 | videojs(_this.core.$slide.eq(_this.core.index).find('.lg-html5').get(0), {}, function() {
74 | this.play();
75 | });
76 | } catch (e) {
77 | console.error('Make sure you have included videojs');
78 | }
79 | } else {
80 | _this.core.$slide.eq(_this.core.index).find('.lg-html5').get(0).play();
81 | }
82 | }
83 |
84 | };
85 |
86 | if (_this.core.s.dynamic) {
87 |
88 | _src = _this.core.s.dynamicEl[_this.core.index].src;
89 | _html = _this.core.s.dynamicEl[_this.core.index].html;
90 |
91 | _loadVideo(_src, _html);
92 |
93 | } else {
94 |
95 | _src = _this.core.$items.eq(_this.core.index).attr('href') || _this.core.$items.eq(_this.core.index).attr('data-src');
96 | _html = _this.core.$items.eq(_this.core.index).attr('data-html');
97 |
98 | _loadVideo(_src, _html);
99 |
100 | }
101 |
102 | var $tempImg = $el.find('.lg-object');
103 | $el.find('.lg-video').append($tempImg);
104 |
105 | // @todo loading icon for html5 videos also
106 | // for showing the loading indicator while loading video
107 | if (!$el.find('.lg-video-object').hasClass('lg-html5')) {
108 | $el.removeClass('lg-complete');
109 | $el.find('.lg-video-object').on('load.lg error.lg', function() {
110 | $el.addClass('lg-complete');
111 | });
112 | }
113 |
114 | } else {
115 |
116 | var youtubePlayer = $el.find('.lg-youtube').get(0);
117 | var vimeoPlayer = $el.find('.lg-vimeo').get(0);
118 | var dailymotionPlayer = $el.find('.lg-dailymotion').get(0);
119 | var html5Player = $el.find('.lg-html5').get(0);
120 | if (youtubePlayer) {
121 | youtubePlayer.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
122 | } else if (vimeoPlayer) {
123 | try {
124 | $f(vimeoPlayer).api('play');
125 | } catch (e) {
126 | console.error('Make sure you have included froogaloop2 js');
127 | }
128 | } else if (dailymotionPlayer) {
129 | dailymotionPlayer.contentWindow.postMessage('play', '*');
130 |
131 | } else if (html5Player) {
132 | if (_this.core.s.videojs) {
133 | try {
134 | videojs(html5Player).play();
135 | } catch (e) {
136 | console.error('Make sure you have included videojs');
137 | }
138 | } else {
139 | html5Player.play();
140 | }
141 | }
142 |
143 | $el.addClass('lg-video-palying');
144 |
145 | }
146 | }
147 | };
148 |
149 | if (_this.core.doCss() && _this.core.$items.length > 1 && ((_this.core.s.enableSwipe && _this.core.isTouch) || (_this.core.s.enableDrag && !_this.core.isTouch))) {
150 | _this.core.$el.on('onSlideClick.lg.tm', function() {
151 | var $el = _this.core.$slide.eq(_this.core.index);
152 | loadOnClick($el);
153 | });
154 | } else {
155 |
156 | // For IE 9 and bellow
157 | _this.core.$slide.on('click.lg', function() {
158 | loadOnClick($(this));
159 | });
160 | }
161 |
162 | _this.core.$el.on('onBeforeSlide.lg.tm', function(event, prevIndex) {
163 |
164 | var $videoSlide = _this.core.$slide.eq(prevIndex);
165 | var youtubePlayer = $videoSlide.find('.lg-youtube').get(0);
166 | var vimeoPlayer = $videoSlide.find('.lg-vimeo').get(0);
167 | var dailymotionPlayer = $videoSlide.find('.lg-dailymotion').get(0);
168 | var html5Player = $videoSlide.find('.lg-html5').get(0);
169 | if (youtubePlayer) {
170 | youtubePlayer.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
171 | } else if (vimeoPlayer) {
172 | try {
173 | $f(vimeoPlayer).api('pause');
174 | } catch (e) {
175 | console.error('Make sure you have included froogaloop2 js');
176 | }
177 | } else if (dailymotionPlayer) {
178 | dailymotionPlayer.contentWindow.postMessage('pause', '*');
179 |
180 | } else if (html5Player) {
181 | if (_this.core.s.videojs) {
182 | try {
183 | videojs(html5Player).pause();
184 | } catch (e) {
185 | console.error('Make sure you have included videojs');
186 | }
187 | } else {
188 | html5Player.pause();
189 | }
190 | }
191 |
192 | //$videoSlide.addClass('lg-complete');
193 |
194 | });
195 |
196 | _this.core.$el.on('onAfterSlide.lg.tm', function(event, prevIndex) {
197 | _this.core.$slide.eq(prevIndex).removeClass('lg-video-palying');
198 | });
199 | };
200 |
201 | Video.prototype.loadVideo = function(src, addClass, noposter, index, html) {
202 | var video = '';
203 | var autoplay = 1;
204 | var a = '';
205 | var isVideo = this.core.isVideo(src, index) || {};
206 |
207 | // Enable autoplay for first video if poster doesn't exist
208 | if (noposter) {
209 | if (this.videoLoaded) {
210 | autoplay = 0;
211 | } else {
212 | autoplay = 1;
213 | }
214 | }
215 |
216 | if (isVideo.youtube) {
217 |
218 | a = '?wmode=opaque&autoplay=' + autoplay + '&enablejsapi=1';
219 | if (this.core.s.youtubePlayerParams) {
220 | a = a + '&' + $.param(this.core.s.youtubePlayerParams);
221 | }
222 |
223 | video = '';
224 |
225 | } else if (isVideo.vimeo) {
226 |
227 | a = '?autoplay=' + autoplay + '&api=1';
228 | if (this.core.s.vimeoPlayerParams) {
229 | a = a + '&' + $.param(this.core.s.vimeoPlayerParams);
230 | }
231 |
232 | video = '';
233 |
234 | } else if (isVideo.dailymotion) {
235 |
236 | a = '?wmode=opaque&autoplay=' + autoplay + '&api=postMessage';
237 | if (this.core.s.dailymotionPlayerParams) {
238 | a = a + '&' + $.param(this.core.s.dailymotionPlayerParams);
239 | }
240 |
241 | video = '';
242 |
243 | } else if (isVideo.html5) {
244 | var fL = html.substring(0, 1);
245 | if (fL === '.' || fL === '#') {
246 | html = $(html).html();
247 | }
248 |
249 | video = html;
250 | }
251 |
252 | return video;
253 | };
254 |
255 | Video.prototype.destroy = function() {
256 | this.videoLoaded = false;
257 | };
258 |
259 | $.fn.lightGallery.modules.video = Video;
260 |
261 | })(jQuery, window, document);
262 |
--------------------------------------------------------------------------------
/app/lightgallery/js/lg-zoom.js:
--------------------------------------------------------------------------------
1 | /*! lightgallery - v1.2.9 - 2015-12-18
2 | * http://sachinchoolur.github.io/lightGallery/
3 | * Copyright (c) 2015 Sachin N; Licensed Apache 2.0 */
4 | /**
5 | * Zoom Plugin
6 | * @version 1.2.0
7 | * @author Sachin N - @sachinchoolur
8 | * @license MIT License (MIT)
9 | */
10 | (function($, window, document, undefined) {
11 |
12 | 'use strict';
13 |
14 | var defaults = {
15 | scale: 1,
16 | zoom: true,
17 | enableZoomAfter: 300
18 | };
19 |
20 | var Zoom = function(element) {
21 |
22 | this.core = $(element).data('lightGallery');
23 |
24 | this.core.s = $.extend({}, defaults, this.core.s);
25 |
26 | if (this.core.s.zoom && this.core.doCss()) {
27 | this.init();
28 |
29 | // Store the zoomable timeout value just to clear it while closing
30 | this.zoomabletimeout = false;
31 |
32 | // Set the initial value center
33 | this.pageX = $(window).width() / 2;
34 | this.pageY = ($(window).height() / 2) + $(window).scrollTop();
35 | }
36 |
37 | return this;
38 | };
39 |
40 | Zoom.prototype.init = function() {
41 |
42 | var _this = this;
43 | var zoomIcons = '';
44 |
45 | this.core.$outer.find('.lg-toolbar').append(zoomIcons);
46 |
47 | // Add zoomable class
48 | _this.core.$el.on('onSlideItemLoad.lg.tm.zoom', function(event, index, delay) {
49 |
50 | // delay will be 0 except first time
51 | var _speed = _this.core.s.enableZoomAfter + delay;
52 |
53 | // set _speed value 0 if gallery opened from direct url and if it is first slide
54 | if ($('body').hasClass('lg-from-hash') && delay) {
55 |
56 | // will execute only once
57 | _speed = 0;
58 | } else {
59 |
60 | // Remove lg-from-hash to enable starting animation.
61 | $('body').removeClass('lg-from-hash');
62 | }
63 | _this.zoomabletimeout = setTimeout(function() {
64 | _this.core.$slide.eq(index).addClass('lg-zoomable');
65 | }, _speed + 1200);
66 | });
67 |
68 | var scale = 1;
69 | /**
70 | * @desc Image zoom
71 | * Translate the wrap and scale the image to get better user experience
72 | *
73 | * @param {String} scaleVal - Zoom decrement/increment value
74 | */
75 | var zoom = function(scaleVal) {
76 |
77 | var $image = _this.core.$outer.find('.lg-current .lg-image');
78 | var _x;
79 | var _y;
80 |
81 | // Find offset manually to avoid issue after zoom
82 | var offsetX = ($(window).width() - $image.width()) / 2;
83 | var offsetY = (($(window).height() - $image.height()) / 2) + $(window).scrollTop();
84 |
85 | _x = _this.pageX - offsetX;
86 | _y = _this.pageY - offsetY;
87 |
88 | var x = (scaleVal - 1) * (_x);
89 | var y = (scaleVal - 1) * (_y);
90 |
91 | $image.css('transform', 'scale3d(' + scaleVal + ', ' + scaleVal + ', 1)').attr('data-scale', scaleVal);
92 |
93 | $image.parent().css('transform', 'translate3d(-' + x + 'px, -' + y + 'px, 0)').attr('data-x', x).attr('data-y', y);
94 | };
95 |
96 | var callScale = function() {
97 | if (scale > 1) {
98 | _this.core.$outer.addClass('lg-zoomed');
99 | } else {
100 | _this.resetZoom();
101 | }
102 |
103 | if (scale < 1) {
104 | scale = 1;
105 | }
106 |
107 | zoom(scale);
108 | };
109 |
110 | // event triggered after appending slide content
111 | _this.core.$el.on('onAferAppendSlide.lg.tm.zoom', function(event, index) {
112 |
113 | // Get the current element
114 | var $image = _this.core.$slide.eq(index).find('.lg-image');
115 |
116 | $image.dblclick(function(event) {
117 | if (_this.core.$outer.find('.lg-current').hasClass('lg-zoomable')) {
118 | var w = $image.width();
119 | var nw;
120 | if (_this.core.s.dynamic) {
121 | nw = _this.core.s.dynamicEl[index].width || $image[0].naturalWidth || w;
122 | } else {
123 | nw = _this.core.$items.eq(index).attr('data-width') || $image[0].naturalWidth || w;
124 | }
125 |
126 | var _scale;
127 |
128 | if (_this.core.$outer.hasClass('lg-zoomed')) {
129 | scale = 1;
130 | } else {
131 | if (nw > w) {
132 | _scale = nw / w;
133 | scale = _scale || 2;
134 | }
135 | }
136 |
137 | _this.pageX = event.pageX;
138 | _this.pageY = event.pageY;
139 | callScale();
140 | setTimeout(function() {
141 | _this.core.$outer.removeClass('lg-grabbing').addClass('lg-grab');
142 | }, 10);
143 | }
144 | });
145 |
146 | });
147 |
148 | // Update zoom on resize and orientationchange
149 | $(window).on('resize.lg.zoom scroll.lg.zoom orientationchange.lg.zoom', function() {
150 | _this.pageX = $(window).width() / 2;
151 | _this.pageY = ($(window).height() / 2) + $(window).scrollTop();
152 | zoom(scale);
153 | });
154 |
155 | $('#lg-zoom-out').on('click.lg', function() {
156 | if (_this.core.$outer.find('.lg-current').hasClass('lg-zoomable')) {
157 | if (_this.core.$outer.find('.lg-current .lg-image').length) {
158 | scale -= _this.core.s.scale;
159 | callScale();
160 | }
161 | }
162 | });
163 |
164 | $('#lg-zoom-in').on('click.lg', function() {
165 | if (_this.core.$outer.find('.lg-current').hasClass('lg-zoomable')) {
166 | if (_this.core.$outer.find('.lg-current .lg-image').length) {
167 | scale += _this.core.s.scale;
168 | callScale();
169 | }
170 | }
171 | });
172 |
173 | // Reset zoom on slide change
174 | _this.core.$el.on('onBeforeSlide.lg.tm', function() {
175 | _this.resetZoom();
176 | });
177 |
178 | // Drag option after zoom
179 | if (!_this.core.isTouch) {
180 | _this.zoomDrag();
181 | }
182 |
183 | if (_this.core.isTouch) {
184 | _this.zoomSwipe();
185 | }
186 |
187 | };
188 |
189 | // Reset zoom effect
190 | Zoom.prototype.resetZoom = function() {
191 | this.core.$outer.removeClass('lg-zoomed');
192 | this.core.$slide.find('.lg-img-wrap').removeAttr('style data-x data-y');
193 | this.core.$slide.find('.lg-image').removeAttr('style data-scale');
194 |
195 | // Reset pagx pagy values to center
196 | this.pageX = $(window).width() / 2;
197 | this.pageY = ($(window).height() / 2) + $(window).scrollTop();
198 | };
199 |
200 | Zoom.prototype.zoomSwipe = function() {
201 | var _this = this;
202 | var startCoords = {};
203 | var endCoords = {};
204 | var isMoved = false;
205 |
206 | // Allow x direction drag
207 | var allowX = false;
208 |
209 | // Allow Y direction drag
210 | var allowY = false;
211 |
212 | _this.core.$slide.on('touchstart.lg', function(e) {
213 |
214 | if (_this.core.$outer.hasClass('lg-zoomed')) {
215 | var $image = _this.core.$slide.eq(_this.core.index).find('.lg-object');
216 |
217 | allowY = $image.outerHeight() * $image.attr('data-scale') > _this.core.$outer.find('.lg').height();
218 | allowX = $image.outerWidth() * $image.attr('data-scale') > _this.core.$outer.find('.lg').width();
219 | if ((allowX || allowY)) {
220 | e.preventDefault();
221 | startCoords = {
222 | x: e.originalEvent.targetTouches[0].pageX,
223 | y: e.originalEvent.targetTouches[0].pageY
224 | };
225 | }
226 | }
227 |
228 | });
229 |
230 | _this.core.$slide.on('touchmove.lg', function(e) {
231 |
232 | if (_this.core.$outer.hasClass('lg-zoomed')) {
233 |
234 | var _$el = _this.core.$slide.eq(_this.core.index).find('.lg-img-wrap');
235 | var distanceX;
236 | var distanceY;
237 |
238 | e.preventDefault();
239 | isMoved = true;
240 |
241 | endCoords = {
242 | x: e.originalEvent.targetTouches[0].pageX,
243 | y: e.originalEvent.targetTouches[0].pageY
244 | };
245 |
246 | // reset opacity and transition duration
247 | _this.core.$outer.addClass('lg-zoom-dragging');
248 |
249 | if (allowY) {
250 | distanceY = (-Math.abs(_$el.attr('data-y'))) + (endCoords.y - startCoords.y);
251 | } else {
252 | distanceY = -Math.abs(_$el.attr('data-y'));
253 | }
254 |
255 | if (allowX) {
256 | distanceX = (-Math.abs(_$el.attr('data-x'))) + (endCoords.x - startCoords.x);
257 | } else {
258 | distanceX = -Math.abs(_$el.attr('data-x'));
259 | }
260 |
261 | _$el.css('transform', 'translate3d(' + distanceX + 'px, ' + distanceY + 'px, 0)');
262 |
263 | }
264 |
265 | });
266 |
267 | _this.core.$slide.on('touchend.lg', function() {
268 | if (_this.core.$outer.hasClass('lg-zoomed')) {
269 | if (isMoved) {
270 | isMoved = false;
271 | _this.core.$outer.removeClass('lg-zoom-dragging');
272 | _this.touchendZoom(startCoords, endCoords, allowX, allowY);
273 |
274 | }
275 | }
276 | });
277 |
278 | };
279 |
280 | Zoom.prototype.zoomDrag = function() {
281 |
282 | var _this = this;
283 | var startCoords = {};
284 | var endCoords = {};
285 | var isDraging = false;
286 | var isMoved = false;
287 |
288 | // Allow x direction drag
289 | var allowX = false;
290 |
291 | // Allow Y direction drag
292 | var allowY = false;
293 |
294 | _this.core.$slide.on('mousedown.lg.zoom', function(e) {
295 |
296 | // execute only on .lg-object
297 | var $image = _this.core.$slide.eq(_this.core.index).find('.lg-object');
298 |
299 | allowY = $image.outerHeight() * $image.attr('data-scale') > _this.core.$outer.find('.lg').height();
300 | allowX = $image.outerWidth() * $image.attr('data-scale') > _this.core.$outer.find('.lg').width();
301 |
302 | if (_this.core.$outer.hasClass('lg-zoomed')) {
303 | if ($(e.target).hasClass('lg-object') && (allowX || allowY)) {
304 | e.preventDefault();
305 | startCoords = {
306 | x: e.pageX,
307 | y: e.pageY
308 | };
309 |
310 | isDraging = true;
311 |
312 | // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723
313 | _this.core.$outer.scrollLeft += 1;
314 | _this.core.$outer.scrollLeft -= 1;
315 |
316 | _this.core.$outer.removeClass('lg-grab').addClass('lg-grabbing');
317 | }
318 | }
319 | });
320 |
321 | $(window).on('mousemove.lg.zoom', function(e) {
322 | if (isDraging) {
323 | var _$el = _this.core.$slide.eq(_this.core.index).find('.lg-img-wrap');
324 | var distanceX;
325 | var distanceY;
326 |
327 | isMoved = true;
328 | endCoords = {
329 | x: e.pageX,
330 | y: e.pageY
331 | };
332 |
333 | // reset opacity and transition duration
334 | _this.core.$outer.addClass('lg-zoom-dragging');
335 |
336 | if (allowY) {
337 | distanceY = (-Math.abs(_$el.attr('data-y'))) + (endCoords.y - startCoords.y);
338 | } else {
339 | distanceY = -Math.abs(_$el.attr('data-y'));
340 | }
341 |
342 | if (allowX) {
343 | distanceX = (-Math.abs(_$el.attr('data-x'))) + (endCoords.x - startCoords.x);
344 | } else {
345 | distanceX = -Math.abs(_$el.attr('data-x'));
346 | }
347 |
348 | _$el.css('transform', 'translate3d(' + distanceX + 'px, ' + distanceY + 'px, 0)');
349 | }
350 | });
351 |
352 | $(window).on('mouseup.lg.zoom', function(e) {
353 |
354 | if (isDraging) {
355 | isDraging = false;
356 | _this.core.$outer.removeClass('lg-zoom-dragging');
357 |
358 | // Fix for chrome mouse move on click
359 | if (isMoved && ((startCoords.x !== endCoords.x) || (startCoords.y !== endCoords.y))) {
360 | endCoords = {
361 | x: e.pageX,
362 | y: e.pageY
363 | };
364 | _this.touchendZoom(startCoords, endCoords, allowX, allowY);
365 |
366 | }
367 |
368 | isMoved = false;
369 | }
370 |
371 | _this.core.$outer.removeClass('lg-grabbing').addClass('lg-grab');
372 |
373 | });
374 | };
375 |
376 | Zoom.prototype.touchendZoom = function(startCoords, endCoords, allowX, allowY) {
377 |
378 | var _this = this;
379 | var _$el = _this.core.$slide.eq(_this.core.index).find('.lg-img-wrap');
380 | var $image = _this.core.$slide.eq(_this.core.index).find('.lg-object');
381 | var distanceX = (-Math.abs(_$el.attr('data-x'))) + (endCoords.x - startCoords.x);
382 | var distanceY = (-Math.abs(_$el.attr('data-y'))) + (endCoords.y - startCoords.y);
383 | var minY = (_this.core.$outer.find('.lg').height() - $image.outerHeight()) / 2;
384 | var maxY = Math.abs(($image.outerHeight() * Math.abs($image.attr('data-scale'))) - _this.core.$outer.find('.lg').height() + minY);
385 | var minX = (_this.core.$outer.find('.lg').width() - $image.outerWidth()) / 2;
386 | var maxX = Math.abs(($image.outerWidth() * Math.abs($image.attr('data-scale'))) - _this.core.$outer.find('.lg').width() + minX);
387 |
388 | if (allowY) {
389 | if (distanceY <= -maxY) {
390 | distanceY = -maxY;
391 | } else if (distanceY >= -minY) {
392 | distanceY = -minY;
393 | }
394 | }
395 |
396 | if (allowX) {
397 | if (distanceX <= -maxX) {
398 | distanceX = -maxX;
399 | } else if (distanceX >= -minX) {
400 | distanceX = -minX;
401 | }
402 | }
403 |
404 | if (allowY) {
405 | _$el.attr('data-y', Math.abs(distanceY));
406 | } else {
407 | distanceY = -Math.abs(_$el.attr('data-y'));
408 | }
409 |
410 | if (allowX) {
411 | _$el.attr('data-x', Math.abs(distanceX));
412 | } else {
413 | distanceX = -Math.abs(_$el.attr('data-x'));
414 | }
415 |
416 | _$el.css('transform', 'translate3d(' + distanceX + 'px, ' + distanceY + 'px, 0)');
417 | };
418 |
419 | Zoom.prototype.destroy = function() {
420 |
421 | var _this = this;
422 |
423 | // Unbind all events added by lightGallery zoom plugin
424 | _this.core.$el.off('.lg.zoom');
425 | $(window).off('.lg.zoom');
426 | _this.core.$slide.off('.lg.zoom');
427 | _this.core.$el.off('.lg.tm.zoom');
428 | _this.resetZoom();
429 | clearTimeout(_this.zoomabletimeout);
430 | _this.zoomabletimeout = false;
431 | };
432 |
433 | $.fn.lightGallery.modules.zoom = Zoom;
434 |
435 | })(jQuery, window, document);
--------------------------------------------------------------------------------
/app/lightgallery/js/mousewheel.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery Mousewheel 3.1.13
3 | *
4 | * Copyright 2015 jQuery Foundation and other contributors
5 | * Released under the MIT license.
6 | * http://jquery.org/license
7 | */
8 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})});
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-autoplay.scss:
--------------------------------------------------------------------------------
1 | .lg-progress-bar {
2 | background-color: $lg-progress-bar-bg;
3 | height: $lg-progress-bar-height;
4 | left: 0;
5 | position: absolute;
6 | top: 0;
7 | width: 100%;
8 | z-index: $zindex-progressbar;
9 | opacity: 0;
10 | @include transitionCustom(opacity 0.08s ease 0s);
11 |
12 | .lg-progress {
13 | background-color: $lg-progress-bar-active-bg;
14 | height: $lg-progress-bar-height;
15 | width: 0;
16 | }
17 |
18 | &.lg-start {
19 | .lg-progress {
20 | width: 100%;
21 | }
22 | }
23 |
24 | .lg-show-autoplay & {
25 | opacity: 1;
26 | }
27 | }
28 |
29 | .lg-autoplay-button {
30 | &:after {
31 | .lg-show-autoplay & {
32 | content: "\e01a";
33 | }
34 | content: "\e01d";
35 | }
36 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-fb-comment-box.scss:
--------------------------------------------------------------------------------
1 | @import "lg-variables";
2 | @import "lg-mixins";
3 | .lg-outer.fb-comments{
4 | .lg-img-wrap {
5 | padding-right: 400px !important;
6 | }
7 | .fb-comments {
8 | height: 100%;
9 | overflow-y: auto;
10 | position: absolute;
11 | right: 0;
12 | top: 0;
13 | width: 420px;
14 | z-index: 99999;
15 | background: #fff url("../img/loading.gif") no-repeat scroll center center;
16 | &.fb_iframe_widget {
17 | background-image: none;
18 | &.fb_iframe_widget_loader{
19 | background: #fff url("../img/loading.gif") no-repeat scroll center center;
20 | }
21 | }
22 | }
23 | .lg-toolbar {
24 | right: 420px;
25 | width: auto;
26 | }
27 | .lg-actions .lg-next {
28 | right: 420px;
29 | }
30 | .lg-item {
31 | background-image: none;
32 | &.lg-complete{
33 | .lg-img-wrap{
34 | background-image: none;
35 | }
36 | }
37 | }
38 | .lg-img-wrap {
39 | background: url(../img/loading.gif) no-repeat scroll center center transparent;
40 | }
41 |
42 | .lg-sub-html {
43 | padding: 0;
44 | position: static;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-fonts.scss:
--------------------------------------------------------------------------------
1 | // font icons support
2 | @font-face {
3 | font-family: 'lg';
4 | src: url("../fonts/lg.eot?n1z373");
5 | src: url("../fonts/lg.eot?#iefixn1z373") format("embedded-opentype"), url("../fonts/lg.woff?n1z373") format("woff"), url("../fonts/lg.ttf?n1z373") format("truetype"), url("../fonts/lg.svg?n1z373#lg") format("svg");
6 | font-weight: normal;
7 | font-style: normal;
8 | }
9 |
10 |
11 | .lg-icon {
12 | font-family: 'lg';
13 | speak: none;
14 | font-style: normal;
15 | font-weight: normal;
16 | font-variant: normal;
17 | text-transform: none;
18 | line-height: 1;
19 | /* Better Font Rendering =========== */
20 | -webkit-font-smoothing: antialiased;
21 | -moz-osx-font-smoothing: grayscale;
22 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-fullscreen.scss:
--------------------------------------------------------------------------------
1 | .lg-fullscreen {
2 | &:after {
3 | content: "\e20c";
4 |
5 | .lg-fullscreen-on & {
6 | content: "\e20d";
7 | }
8 | }
9 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-mixins.scss:
--------------------------------------------------------------------------------
1 | // Vendor Prefixes
2 | //
3 | // All vendor mixins are deprecated as of v3.2.0 due to the introduction of
4 | // Autoprefixer in our Gruntfile. They will be removed in v4.
5 |
6 | // - Animations
7 | // - Backface visibility
8 | // - Box shadow
9 | // - Box sizing
10 | // - Content columns
11 | // - Hyphens
12 | // - Placeholder text
13 | // - Transformations
14 | // - Transitions
15 | // - User Select
16 | // - cursor grab
17 |
18 | // Animations
19 | @mixin animation($animation) {
20 | -webkit-animation: $animation;
21 | -o-animation: $animation;
22 | animation: $animation;
23 | }
24 |
25 | @mixin animation-name($name) {
26 | -webkit-animation-name: $name;
27 | animation-name: $name;
28 | }
29 |
30 | @mixin animation-duration($duration) {
31 | -webkit-animation-duration: $duration;
32 | animation-duration: $duration;
33 | }
34 |
35 | @mixin animation-timing-function($timing-function) {
36 | -webkit-animation-timing-function: $timing-function;
37 | animation-timing-function: $timing-function;
38 | }
39 |
40 | @mixin animation-delay($delay) {
41 | -webkit-animation-delay: $delay;
42 | animation-delay: $delay;
43 | }
44 |
45 | @mixin animation-iteration-count($iteration-count) {
46 | -webkit-animation-iteration-count: $iteration-count;
47 | animation-iteration-count: $iteration-count;
48 | }
49 |
50 | @mixin animation-direction($direction) {
51 | -webkit-animation-direction: $direction;
52 | animation-direction: $direction;
53 | }
54 |
55 | @mixin animation-fill-mode($fill-mode) {
56 | -webkit-animation-fill-mode: $fill-mode;
57 | animation-fill-mode: $fill-mode;
58 | }
59 |
60 | @mixin keyframes($name) {
61 | @-webkit-keyframes #{$name} {
62 | @content;
63 | }
64 |
65 | @-moz-keyframes #{$name} {
66 | @content;
67 | }
68 |
69 | @-ms-keyframes #{$name} {
70 | @content;
71 | }
72 |
73 | @keyframes #{$name} {
74 | @content;
75 | }
76 | }
77 |
78 | // Backface visibility
79 | // Prevent browsers from flickering when using CSS 3D transforms.
80 | // Default value is `visible`, but can be changed to `hidden`
81 |
82 | @mixin backface-visibility($visibility) {
83 | -webkit-backface-visibility: $visibility;
84 | -moz-backface-visibility: $visibility;
85 | backface-visibility: $visibility;
86 | }
87 |
88 | // Drop shadows
89 | //
90 | // Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
91 | // supported browsers that have box shadow capabilities now support it.
92 |
93 | @mixin box-shadow($shadow...) {
94 | -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
95 | box-shadow: $shadow;
96 | }
97 |
98 | // Box sizing
99 | @mixin box-sizing($boxmodel) {
100 | -webkit-box-sizing: $boxmodel;
101 | -moz-box-sizing: $boxmodel;
102 | box-sizing: $boxmodel;
103 | }
104 |
105 | // CSS3 Content Columns
106 | @mixin content-columns($column-count, $column-gap: $grid-gutter-width) {
107 | -webkit-column-count: $column-count;
108 | -moz-column-count: $column-count;
109 | column-count: $column-count;
110 | -webkit-column-gap: $column-gap;
111 | -moz-column-gap: $column-gap;
112 | column-gap: $column-gap;
113 | }
114 |
115 | // Optional hyphenation
116 | @mixin hyphens($mode: auto) {
117 | word-wrap: break-word;
118 | -webkit-hyphens: $mode;
119 | -moz-hyphens: $mode;
120 | -ms-hyphens: $mode; // IE10+
121 | -o-hyphens: $mode;
122 | hyphens: $mode;
123 | }
124 |
125 | // Transformations
126 | @mixin scale($ratio...) {
127 | -webkit-transform: scale($ratio);
128 | -ms-transform: scale($ratio); // IE9 only
129 | -o-transform: scale($ratio);
130 | transform: scale($ratio);
131 | }
132 |
133 | @mixin scaleX($ratio) {
134 | -webkit-transform: scaleX($ratio);
135 | -ms-transform: scaleX($ratio); // IE9 only
136 | -o-transform: scaleX($ratio);
137 | transform: scaleX($ratio);
138 | }
139 |
140 | @mixin scaleY($ratio) {
141 | -webkit-transform: scaleY($ratio);
142 | -ms-transform: scaleY($ratio); // IE9 only
143 | -o-transform: scaleY($ratio);
144 | transform: scaleY($ratio);
145 | }
146 |
147 | @mixin skew($x, $y) {
148 | -webkit-transform: skewX($x) skewY($y);
149 | -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
150 | -o-transform: skewX($x) skewY($y);
151 | transform: skewX($x) skewY($y);
152 | }
153 |
154 | @mixin translate($x, $y) {
155 | -webkit-transform: translate($x, $y);
156 | -ms-transform: translate($x, $y); // IE9 only
157 | -o-transform: translate($x, $y);
158 | transform: translate($x, $y);
159 | }
160 |
161 | @mixin translate3d($x, $y, $z) {
162 | -webkit-transform: translate3d($x, $y, $z);
163 | transform: translate3d($x, $y, $z);
164 | }
165 |
166 | @mixin scale3d($x, $y, $z) {
167 | -webkit-transform: scale3d($x, $y, $z);
168 | transform: scale3d($x, $y, $z);
169 | }
170 |
171 | @mixin rotate($degrees) {
172 | -webkit-transform: rotate($degrees);
173 | -ms-transform: rotate($degrees); // IE9 only
174 | -o-transform: rotate($degrees);
175 | transform: rotate($degrees);
176 | }
177 |
178 | @mixin rotateX($degrees) {
179 | -webkit-transform: rotateX($degrees);
180 | -ms-transform: rotateX($degrees); // IE9 only
181 | -o-transform: rotateX($degrees);
182 | transform: rotateX($degrees);
183 | }
184 |
185 | @mixin rotateY($degrees) {
186 | -webkit-transform: rotateY($degrees);
187 | -ms-transform: rotateY($degrees); // IE9 only
188 | -o-transform: rotateY($degrees);
189 | transform: rotateY($degrees);
190 | }
191 |
192 | @mixin perspective($perspective) {
193 | -webkit-perspective: $perspective;
194 | -moz-perspective: $perspective;
195 | perspective: $perspective;
196 | }
197 |
198 | @mixin perspective-origin($perspective) {
199 | -webkit-perspective-origin: $perspective;
200 | -moz-perspective-origin: $perspective;
201 | perspective-origin: $perspective;
202 | }
203 |
204 | @mixin transform-origin($origin) {
205 | -webkit-transform-origin: $origin;
206 | -moz-transform-origin: $origin;
207 | -ms-transform-origin: $origin; // IE9 only
208 | transform-origin: $origin;
209 | }
210 |
211 | @mixin transform($transforms) {
212 | -moz-transform: $transforms;
213 | -o-transform: $transforms;
214 | -ms-transform: $transforms;
215 | -webkit-transform: $transforms;
216 | transform: $transforms;
217 | }
218 |
219 | // Transitions
220 |
221 | @mixin transition($transition...) {
222 | -webkit-transition: $transition;
223 | -o-transition: $transition;
224 | transition: $transition;
225 | }
226 |
227 | @mixin transition-property($transition-property...) {
228 | -webkit-transition-property: $transition-property;
229 | transition-property: $transition-property;
230 | }
231 |
232 | @mixin transition-delay($transition-delay) {
233 | -webkit-transition-delay: $transition-delay;
234 | transition-delay: $transition-delay;
235 | }
236 |
237 | @mixin transition-duration($transition-duration...) {
238 | -webkit-transition-duration: $transition-duration;
239 | transition-duration: $transition-duration;
240 | }
241 |
242 | @mixin transition-timing-function($timing-function) {
243 | -webkit-transition-timing-function: $timing-function;
244 | transition-timing-function: $timing-function;
245 | }
246 |
247 | @mixin transition-transform($transition...) {
248 | -webkit-transition: -webkit-transform $transition;
249 | -moz-transition: -moz-transform $transition;
250 | -o-transition: -o-transform $transition;
251 | transition: transform $transition;
252 | }
253 |
254 | // transition custom
255 |
256 | @function prefix($property, $prefixes: webkit moz o ms) {
257 | $vendor-prefixed-properties: transform background-clip background-size;
258 | $result: ();
259 |
260 | @each $prefix in $prefixes {
261 | @if index($vendor-prefixed-properties, $property) {
262 | $property: -#{$prefix}-#{$property};
263 | }
264 | $result: append($result, $property);
265 | }
266 | @return $result;
267 | }
268 |
269 | @function trans-prefix($transition, $prefix: moz) {
270 | $prefixed: ();
271 |
272 | @each $trans in $transition {
273 | $prop-name: nth($trans, 1);
274 | $vendor-prop-name: prefix($prop-name, $prefix);
275 | $prop-vals: nth($trans, 2);
276 | $prefixed: append($prefixed, $vendor-prop-name $prop-vals, comma);
277 | }
278 | @return $prefixed;
279 | }
280 |
281 | @mixin transitionCustom($values...) {
282 | $transitions: ();
283 |
284 | @each $declaration in $values {
285 | $prop: nth($declaration, 1);
286 | $prop-opts: ();
287 | $length: length($declaration);
288 |
289 | @for $i from 2 through $length {
290 | $prop-opts: append($prop-opts, nth($declaration, $i));
291 | }
292 | $trans: $prop, $prop-opts;
293 | $transitions: append($transitions, $trans, comma);
294 | }
295 | -webkit-transition: trans-prefix($transitions, webkit);
296 | -moz-transition: trans-prefix($transitions, moz);
297 | -o-transition: trans-prefix($transitions, o);
298 | transition: $values;
299 | }
300 |
301 | // User select
302 | // For selecting text on the page
303 |
304 | @mixin user-select($select) {
305 | -webkit-user-select: $select;
306 | -moz-user-select: $select;
307 | -ms-user-select: $select; // IE10+
308 | user-select: $select;
309 | }
310 |
311 | // mouse grab
312 |
313 | @mixin grab-cursor {
314 | cursor: -webkit-grab;
315 | cursor: -moz-grab;
316 | cursor: -o-grab;
317 | cursor: -ms-grab;
318 | cursor: grab;
319 | }
320 |
321 | @mixin grabbing-cursor {
322 | cursor: move;
323 | cursor: -webkit-grabbing;
324 | cursor: -moz-grabbing;
325 | cursor: -o-grabbing;
326 | cursor: -ms-grabbing;
327 | cursor: grabbing;
328 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-pager.scss:
--------------------------------------------------------------------------------
1 | .lg-outer {
2 | .lg-pager-outer {
3 | bottom: 60px;
4 | left: 0;
5 | position: absolute;
6 | right: 0;
7 | text-align: center;
8 | z-index: $zindex-pager;
9 | height: 10px;
10 |
11 | &.lg-pager-hover {
12 | .lg-pager-cont {
13 | overflow: visible;
14 | }
15 | }
16 | }
17 |
18 | .lg-pager-cont {
19 | cursor: pointer;
20 | display: inline-block;
21 | overflow: hidden;
22 | position: relative;
23 | vertical-align: top;
24 | margin: 0 5px;
25 |
26 | &:hover {
27 | .lg-pager-thumb-cont {
28 | opacity: 1;
29 | @include translate3d(0, 0, 0);
30 | }
31 | }
32 |
33 | &.lg-pager-active {
34 | .lg-pager {
35 | box-shadow: 0 0 0 2px white inset;
36 | }
37 | }
38 | }
39 |
40 | .lg-pager-thumb-cont {
41 | background-color: #fff;
42 | color: #FFF;
43 | bottom: 100%;
44 | height: 83px;
45 | left: 0;
46 | margin-bottom: 20px;
47 | margin-left: -60px;
48 | opacity: 0;
49 | padding: 5px;
50 | position: absolute;
51 | width: 120px;
52 | border-radius: 3px;
53 | @include transitionCustom(opacity 0.15s ease 0s, transform 0.15s ease 0s);
54 | @include translate3d(0, 5px, 0);
55 |
56 | img {
57 | width: 100%;
58 | height: 100%;
59 | }
60 | }
61 |
62 | .lg-pager {
63 | background-color: rgba(255, 255, 255, 0.5);
64 | border-radius: 50%;
65 | box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.7) inset;
66 | display: block;
67 | height: 12px;
68 | @include transition(box-shadow 0.3s ease 0s);
69 | width: 12px;
70 |
71 | &:hover, &:focus {
72 | box-shadow: 0 0 0 8px white inset;
73 | }
74 | }
75 |
76 | .lg-caret {
77 | border-left: 10px solid transparent;
78 | border-right: 10px solid transparent;
79 | border-top: 10px dashed;
80 | bottom: -10px;
81 | display: inline-block;
82 | height: 0;
83 | left: 50%;
84 | margin-left: -5px;
85 | position: absolute;
86 | vertical-align: middle;
87 | width: 0;
88 | }
89 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-theme-default.scss:
--------------------------------------------------------------------------------
1 | // default theme
2 | .lg-actions {
3 | .lg-next, .lg-prev {
4 | background-color: $lg-next-prev-bg;
5 | border-radius: $lg-border-radius-base;
6 | color: $lg-next-prev-color;
7 | cursor: pointer;
8 | display: block;
9 | font-size: 22px;
10 | margin-top: -10px;
11 | padding: 8px 10px 9px;
12 | position: absolute;
13 | top: 50%;
14 | z-index: $zindex-controls;
15 |
16 | &.disabled {
17 | pointer-events: none;
18 | opacity: 0.5;
19 | }
20 |
21 | &:hover {
22 | color: $lg-next-prev-hover-color;
23 | }
24 | }
25 |
26 | .lg-next {
27 | right: 20px;
28 |
29 | &:before {
30 | content: "\e095";
31 | }
32 | }
33 |
34 | .lg-prev {
35 | left: 20px;
36 |
37 | &:after {
38 | content: "\e094";
39 | }
40 | }
41 | }
42 |
43 | @include keyframes(lg-right-end) {
44 | 0% {
45 | left: 0;
46 | }
47 |
48 | 50% {
49 | left: -30px;
50 | }
51 |
52 | 100% {
53 | left: 0;
54 | }
55 | }
56 |
57 |
58 | @include keyframes(lg-left-end) {
59 | 0% {
60 | left: 0;
61 | }
62 |
63 | 50% {
64 | left: 30px;
65 | }
66 |
67 | 100% {
68 | left: 0;
69 | }
70 | }
71 |
72 |
73 | .lg-outer {
74 | &.lg-right-end {
75 | .lg-object {
76 | @include animation(lg-right-end 0.3s);
77 | position: relative;
78 | }
79 | }
80 |
81 | &.lg-left-end {
82 | .lg-object {
83 | @include animation(lg-left-end 0.3s);
84 | position: relative;
85 | }
86 | }
87 | }
88 |
89 | // lg toolbar
90 | .lg-toolbar {
91 | z-index: $zindex-toolbar;
92 | left: 0;
93 | position: absolute;
94 | top: 0;
95 | width: 100%;
96 | background-color: $lg-toolbar-bg;
97 |
98 | .lg-icon {
99 | color: $lg-toolbar-icon-color;
100 | cursor: pointer;
101 | float: right;
102 | font-size: 24px;
103 | height: 47px;
104 | line-height: 27px;
105 | padding: 10px 0;
106 | text-align: center;
107 | width: 50px;
108 | text-decoration: none !important;
109 | outline: medium none;
110 |
111 | &:hover {
112 | color: $lg-toolbar-icon-hover-color;
113 | }
114 | }
115 |
116 | .lg-close {
117 | &:after {
118 | content: "\e070";
119 | }
120 | }
121 |
122 | .lg-download {
123 | &:after {
124 | content: "\e0f2";
125 | }
126 | }
127 | }
128 |
129 | // lightGallery title
130 | .lg-sub-html {
131 | background-color: $lg-sub-html-bg;
132 | bottom: 0;
133 | color: $lg-sub-html-color;
134 | font-size: 16px;
135 | left: 0;
136 | padding: 10px 40px;
137 | position: fixed;
138 | right: 0;
139 | text-align: center;
140 | z-index: $zindex-subhtml;
141 |
142 | h4 {
143 | margin: 0;
144 | font-size: 13px;
145 | font-weight: bold;
146 | }
147 |
148 | p {
149 | font-size: 12px;
150 | margin: 5px 0 0;
151 | }
152 | }
153 |
154 | // lg image counter
155 | #lg-counter {
156 | color: $lg-icon-color;
157 | display: inline-block;
158 | font-size: $lg-counter-font-size;
159 | padding-left: 20px;
160 | padding-top: 12px;
161 | vertical-align: middle;
162 | }
163 |
164 | // for idle state
165 | .lg-toolbar, .lg-prev, .lg-next {
166 | opacity: 1;
167 | @include transitionCustom(transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s);
168 | }
169 |
170 | .lg-hide-items {
171 | .lg-prev {
172 | opacity: 0;
173 | @include translate3d(-10px, 0, 0);
174 | }
175 |
176 | .lg-next {
177 | opacity: 0;
178 | @include translate3d(10px, 0, 0);
179 | }
180 |
181 | .lg-toolbar {
182 | opacity: 0;
183 | @include translate3d(0, -10px, 0);
184 | }
185 | }
186 |
187 | // Starting effect
188 | body:not(.lg-from-hash){
189 | .lg-outer {
190 | &.lg-start-zoom{
191 | .lg-object{
192 | @include scale3d(0.5, 0.5, 0.5);
193 | opacity: 0;
194 | @include transitionCustom(transform 250ms ease 0s, opacity 250ms !important);
195 | @include transform-origin(50% 50%);
196 | }
197 | .lg-item.lg-complete{
198 | .lg-object{
199 | @include scale3d(1, 1, 1);
200 | opacity: 1;
201 | }
202 | }
203 | }
204 | }
205 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-thumbnail.scss:
--------------------------------------------------------------------------------
1 | .lg-outer {
2 | .lg-thumb-outer {
3 | background-color: $lg-thumb-bg;
4 | bottom: 0;
5 | position: absolute;
6 | width: 100%;
7 | z-index: $zindex-thumbnail;
8 | max-height: 350px;
9 | @include translate3d(0, 100%, 0);
10 | @include transitionCustom(transform 0.25s cubic-bezier(0, 0, 0.25, 1) 0s);
11 |
12 | &.lg-grab {
13 | .lg-thumb-item {
14 | @include grab-cursor;
15 | }
16 | }
17 |
18 | &.lg-grabbing {
19 | .lg-thumb-item {
20 | @include grabbing-cursor;
21 | }
22 | }
23 |
24 | &.lg-dragging {
25 | .lg-thumb {
26 | @include transition-duration(0s !important);
27 | }
28 | }
29 | }
30 | &.lg-thumb-open{
31 | .lg-thumb-outer {
32 | @include translate3d(0, 0%, 0);
33 | }
34 | }
35 |
36 | .lg-thumb {
37 | padding: 10px 0;
38 | height: 100%;
39 | margin-bottom: -5px;
40 | }
41 |
42 | .lg-thumb-item {
43 | border-radius: 5px;
44 | cursor: pointer;
45 | float: left;
46 | overflow: hidden;
47 | height: 100%;
48 | border: 2px solid #FFF;
49 | border-radius: 4px;
50 | margin-bottom: 5px;
51 | @media (min-width: 1025px) {
52 | @include transition(border-color 0.25s ease);
53 | }
54 |
55 | &.active, &:hover {
56 | border-color: $lg-theme-highlight;
57 | }
58 |
59 | img {
60 | width: 100%;
61 | }
62 | }
63 |
64 | &.lg-has-thumb {
65 | .lg-item {
66 | padding-bottom: 120px;
67 | }
68 | }
69 |
70 | &.lg-can-toggle {
71 | .lg-item {
72 | padding-bottom: 0;
73 | }
74 | }
75 | &.lg-pull-caption-up{
76 | .lg-sub-html {
77 | @include transition(bottom 0.25s ease);
78 | }
79 | &.lg-thumb-open{
80 | .lg-sub-html {
81 | bottom: 100px;
82 | }
83 | }
84 | }
85 |
86 | .lg-toogle-thumb {
87 | background-color: $lg-thumb-toggle-bg;
88 | border-radius: $lg-border-radius-base $lg-border-radius-base 0 0;
89 | color: $lg-thumb-toggle-color;
90 | cursor: pointer;
91 | font-size: 24px;
92 | height: 39px;
93 | line-height: 27px;
94 | padding: 5px 0;
95 | position: absolute;
96 | right: 20px;
97 | text-align: center;
98 | top: -39px;
99 | width: 50px;
100 |
101 | &:after {
102 | content: "\e1ff";
103 | }
104 |
105 | &:hover {
106 | color: $lg-thumb-toggle-hover-color;
107 | }
108 | }
109 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-variables.scss:
--------------------------------------------------------------------------------
1 | $backdrop-opacity: 1;
2 | $lg-toolbar-bg: rgba(0, 0, 0, 0.45);
3 | $lg-border-radius-base: 2px;
4 | $lg-theme-highlight: rgb(169, 7, 7);
5 | $lg-theme: #0D0A0A;
6 |
7 | // basic icon colours
8 | $lg-icon-bg: rgba(0, 0, 0, 0.45);
9 | $lg-icon-color: #999;
10 | $lg-icon-hover-color: #FFF;
11 |
12 | // counter
13 | $lg-counter-color: #e6e6e6;
14 | $lg-counter-font-size: 16px;
15 |
16 | // Next prev icons
17 | $lg-next-prev-bg: $lg-icon-bg;
18 | $lg-next-prev-color: $lg-icon-color;
19 | $lg-next-prev-hover-color: $lg-icon-hover-color;
20 |
21 | // toolbar icons
22 | $lg-toolbar-icon-color: $lg-icon-color;
23 | $lg-toolbar-icon-hover-color: $lg-icon-hover-color;
24 |
25 | // autoplay progress bar
26 | $lg-progress-bar-bg: #333;
27 | $lg-progress-bar-active-bg: $lg-theme-highlight;
28 | $lg-progress-bar-height: 5px;
29 |
30 | // Zoom plugin
31 | $zoom-transition-duration: 0.3s;
32 |
33 | // Sub html - titile
34 | $lg-sub-html-bg: rgba(0, 0, 0, 0.45);
35 | $lg-sub-html-color: #EEE;
36 |
37 | // thumbnail toggle button
38 | $lg-thumb-toggle-bg: #0D0A0A;
39 | $lg-thumb-toggle-color: $lg-icon-color;
40 | $lg-thumb-toggle-hover-color: $lg-icon-hover-color;
41 | $lg-thumb-bg: #0D0A0A;
42 |
43 | // z-index
44 | $zindex-outer: 1050;
45 | $zindex-progressbar: 1080;
46 | $zindex-controls: 1080;
47 | $zindex-toolbar: 1080;
48 | $zindex-subhtml: 1080;
49 | $zindex-thumbnail: 1080;
50 | $zindex-pager: 1080;
51 | $zindex-playbutton: 1080;
52 | $zindex-item: 1060;
53 | $zindex-backdrop: 1040;
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-video.scss:
--------------------------------------------------------------------------------
1 | .lg-outer {
2 | .lg-video-cont {
3 | display: inline-block;
4 | vertical-align: middle;
5 | max-width: 1140px;
6 | max-height: 100%;
7 | width: 100%;
8 | padding: 0 5px;
9 | }
10 |
11 | .lg-video {
12 | width: 100%;
13 | height: 0;
14 | padding-bottom: 56.25%;
15 | overflow: hidden;
16 | position: relative;
17 |
18 | .lg-object {
19 | display: inline-block;
20 | position: absolute;
21 | top: 0;
22 | left: 0;
23 | width: 100% !important;
24 | height: 100% !important;
25 | }
26 |
27 | .lg-video-play {
28 | width: 84px;
29 | height: 59px;
30 | position: absolute;
31 | left: 50%;
32 | top: 50%;
33 | margin-left: -42px;
34 | margin-top: -30px;
35 | z-index: $zindex-playbutton;
36 | cursor: pointer;
37 | }
38 | }
39 |
40 | .lg-has-vimeo{
41 | .lg-video-play{
42 | background: url("../img/vimeo-play.png") no-repeat scroll 0 0 transparent;
43 | }
44 | &:hover{
45 | .lg-video-play{
46 | background: url("../img/vimeo-play.png") no-repeat scroll 0 -58px transparent;
47 | }
48 |
49 | }
50 | }
51 |
52 | .lg-has-html5{
53 | .lg-video-play{
54 | background: transparent url("../img/video-play.png") no-repeat scroll 0 0;
55 | height: 64px;
56 | margin-left: -32px;
57 | margin-top: -32px;
58 | width: 64px;
59 | opacity: 0.8;
60 | }
61 | &:hover{
62 | .lg-video-play{
63 | opacity: 1
64 | }
65 |
66 | }
67 | }
68 |
69 | .lg-has-youtube{
70 | .lg-video-play{
71 | background: url("../img/youtube-play.png") no-repeat scroll 0 0 transparent;
72 | }
73 | &:hover{
74 | .lg-video-play{
75 | background: url("../img/youtube-play.png") no-repeat scroll 0 -60px transparent;
76 | }
77 |
78 | }
79 | }
80 | .lg-video-object {
81 | width: 100% !important;
82 | height: 100% !important;
83 | position: absolute;
84 | top: 0;
85 | left: 0;
86 | }
87 |
88 | .lg-has-video {
89 | .lg-video-object {
90 | visibility: hidden;
91 | }
92 |
93 | &.lg-video-palying {
94 | .lg-object, .lg-video-play {
95 | display: none;
96 | }
97 |
98 | .lg-video-object {
99 | visibility: visible;
100 | }
101 | }
102 | }
103 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lg-zoom.scss:
--------------------------------------------------------------------------------
1 | .lg-outer {
2 | // reset transition duration
3 | &.lg-css3.lg-zoom-dragging {
4 | .lg-item.lg-complete.lg-zoomable {
5 | .lg-img-wrap, .lg-image {
6 | @include transition-duration(0s);
7 | }
8 | }
9 | }
10 |
11 | .lg-item.lg-complete.lg-zoomable{
12 |
13 | .lg-img-wrap {
14 | @include transitionCustom(transform $zoom-transition-duration ease 0s);
15 | @include translate3d(0, 0, 0);
16 | @include backface-visibility(hidden);
17 | }
18 |
19 | .lg-image {
20 | // Translate required for zoom
21 | @include scale3d(1, 1, 1);
22 | @include transitionCustom(transform $zoom-transition-duration ease 0s, opacity 0.15s !important);
23 | @include transform-origin(0 0);
24 | @include backface-visibility(hidden);
25 | }
26 | }
27 |
28 | }
29 |
30 | // zoom buttons
31 | #lg-zoom-in {
32 | &:after {
33 | content: "\e311";
34 | }
35 | }
36 |
37 | #lg-zoom-out {
38 | opacity: 0.5;
39 | pointer-events: none;
40 |
41 | &:after {
42 | content: "\e312";
43 | }
44 |
45 | .lg-zoomed & {
46 | opacity: 1;
47 | pointer-events: auto;
48 | }
49 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/lightgallery.scss:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "lg-variables";
3 | @import "lg-mixins";
4 | @import "lg-fonts";
5 | @import "lg-theme-default";
6 | @import "lg-thumbnail";
7 | @import "lg-video";
8 | @import "lg-autoplay";
9 | @import "lg-zoom";
10 | @import "lg-pager";
11 | @import "lg-fullscreen";
12 |
13 | // Clearfix
14 | .group {
15 | *zoom: 1;
16 | }
17 |
18 | .group:before, .group:after {
19 | display: table;
20 | content: "";
21 | line-height: 0;
22 | }
23 |
24 | .group:after {
25 | clear: both;
26 | }
27 |
28 | // lightgallery core
29 | .lg-outer {
30 | width: 100%;
31 | height: 100%;
32 | position: fixed;
33 | top: 0;
34 | left: 0;
35 | z-index: $zindex-outer;
36 | opacity: 0;
37 | // For start/end transition
38 | @include transition(opacity 0.15s ease 0s);
39 |
40 | * {
41 | @include box-sizing(border-box);
42 | }
43 |
44 | &.lg-visible {
45 | opacity: 1;
46 | }
47 |
48 | // Set transition speed and timing function
49 | &.lg-css3 {
50 | .lg-item {
51 | &.lg-prev-slide, &.lg-next-slide, &.lg-current {
52 | @include transition-duration(inherit !important);
53 | @include transition-timing-function(inherit !important);
54 | }
55 | }
56 | }
57 |
58 | // Remove transition while dragging
59 | &.lg-css3.lg-dragging {
60 | .lg-item {
61 | &.lg-prev-slide, &.lg-next-slide, &.lg-current {
62 | @include transition-duration(0s !important);
63 | opacity: 1;
64 | }
65 | }
66 | }
67 |
68 | // Set cursor grab while dragging
69 | &.lg-grab {
70 | img.lg-object {
71 | @include grab-cursor;
72 | }
73 | }
74 |
75 | &.lg-grabbing {
76 | img.lg-object {
77 | @include grabbing-cursor;
78 | }
79 | }
80 |
81 | .lg {
82 | height: 100%;
83 | width: 100%;
84 | position: relative;
85 | overflow: hidden;
86 | margin-left: auto;
87 | margin-right: auto;
88 | max-width: 100%;
89 | max-height: 100%;
90 | }
91 |
92 | .lg-inner {
93 | width: 100%;
94 | height: 100%;
95 | position: absolute;
96 | left: 0;
97 | top: 0;
98 | white-space: nowrap;
99 | }
100 |
101 | .lg-item {
102 | background: url(../img/loading.gif) no-repeat scroll center center transparent;
103 | display: none !important;
104 | }
105 | &.lg-css3{
106 | .lg-prev-slide, .lg-current, .lg-next-slide{
107 | display: inline-block !important;
108 | }
109 | }
110 | &.lg-css{
111 | .lg-current{
112 | display: inline-block !important;
113 | }
114 | }
115 |
116 | .lg-item, .lg-img-wrap {
117 | display: inline-block;
118 | text-align: center;
119 | position: absolute;
120 | width: 100%;
121 | height: 100%;
122 |
123 | &:before {
124 | content: "";
125 | display: inline-block;
126 | height: 50%;
127 | width: 1px;
128 | margin-right: -1px;
129 | }
130 | }
131 |
132 | .lg-img-wrap {
133 | top: 0;
134 | bottom: 0;
135 | left: 0;
136 | right: 0;
137 | padding: 0 5px;
138 | }
139 |
140 | .lg-item {
141 | &.lg-complete {
142 | background-image: none;
143 | }
144 |
145 | &.lg-current {
146 | z-index: $zindex-item;
147 | }
148 | }
149 |
150 | .lg-image {
151 | display: inline-block;
152 | vertical-align: middle;
153 | max-width: 100%;
154 | max-height: 100%;
155 | width: auto !important;
156 | height: auto !important;
157 | }
158 |
159 | &.lg-show-after-load {
160 | .lg-item {
161 | .lg-object, .lg-video-play {
162 | opacity: 0;
163 | @include transition(opacity 0.15s ease 0s);
164 | }
165 |
166 | &.lg-complete {
167 | .lg-object, .lg-video-play {
168 | opacity: 1;
169 | }
170 | }
171 | }
172 | }
173 |
174 | // Hide title div if empty
175 | .lg-empty-html {
176 | display: none;
177 | }
178 | }
179 | .lg-backdrop{
180 | position: fixed;
181 | top: 0;
182 | left: 0;
183 | right: 0;
184 | bottom: 0;
185 | z-index: $zindex-backdrop;
186 | background-color: #000;
187 | opacity: 0;
188 | @include transition(opacity 0.15s ease 0s);
189 | &.in{
190 | opacity: $backdrop-opacity;
191 | }
192 | }
193 |
194 | // Default slide animations. Should be placed at the bottom of the animation css
195 | .lg-css3 {
196 |
197 | // Remove all transition effects
198 | &.lg-no-trans {
199 | .lg-prev-slide, .lg-next-slide, .lg-current {
200 | @include transitionCustom(none 0s ease 0s !important);
201 | }
202 | }
203 |
204 | &.lg-use-css3 {
205 | .lg-item {
206 | @include backface-visibility(hidden);
207 | }
208 | }
209 |
210 | &.lg-use-left {
211 | .lg-item {
212 | @include backface-visibility(hidden);
213 | }
214 | }
215 |
216 | // Fade mode
217 | &.lg-fade {
218 | .lg-item {
219 | opacity: 0;
220 |
221 | &.lg-current {
222 | opacity: 1;
223 | }
224 |
225 | // transition timing property and duration will be over written from javascript
226 | &.lg-prev-slide, &.lg-next-slide, &.lg-current {
227 | @include transitionCustom(opacity 0.1s ease 0s);
228 | }
229 | }
230 | }
231 |
232 | &.lg-slide {
233 | &.lg-use-css3 {
234 | .lg-item {
235 | opacity: 0;
236 |
237 | &.lg-prev-slide {
238 | @include translate3d(-100%, 0, 0);
239 | }
240 |
241 | &.lg-next-slide {
242 | @include translate3d(100%, 0, 0);
243 | }
244 |
245 | &.lg-current {
246 | @include translate3d(0, 0, 0);
247 | opacity: 1;
248 | }
249 |
250 | // transition timing property and duration will be over written from javascript
251 | &.lg-prev-slide, &.lg-next-slide, &.lg-current {
252 | @include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
253 | }
254 | }
255 | }
256 |
257 | &.lg-use-left {
258 | .lg-item {
259 | opacity: 0;
260 | position: absolute;
261 | left: 0;
262 |
263 | &.lg-prev-slide {
264 | left: -100%;
265 | }
266 |
267 | &.lg-next-slide {
268 | left: 100%;
269 | }
270 |
271 | &.lg-current {
272 | left: 0;
273 | opacity: 1;
274 | }
275 |
276 | // transition timing property and duration will be over written from javascript
277 | &.lg-prev-slide, &.lg-next-slide, &.lg-current {
278 | @include transitionCustom(left 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
279 | }
280 | }
281 | }
282 | }
283 | }
--------------------------------------------------------------------------------
/app/lightgallery/sass/prepros.cfg:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "About This File": "This is Prepros config file, https://prepros.io . Please do not edit this file, doing so can crash Prepros."
4 | },
5 | {
6 | "data": {
7 | "id": "",
8 | "cfgVersion": 2,
9 | "name": "lightgallery-desktop",
10 | "path": "",
11 | "files": {
12 | "8ff90eb8": {
13 | "id": "8ff90eb8",
14 | "path": "lg-animations.scss",
15 | "output": "lg-animations.css",
16 | "name": "lg-animations.scss",
17 | "category": "CSS",
18 | "autoCompile": true,
19 | "autoprefixer": false,
20 | "sourceMaps": false,
21 | "libSass": true,
22 | "compass": false,
23 | "fullCompass": false,
24 | "outputStyle": "expanded",
25 | "customOutput": false,
26 | "imported": false,
27 | "parents": [],
28 | "type": "sass"
29 | },
30 | "26f18653": {
31 | "id": "26f18653",
32 | "path": "lg-autoplay.scss",
33 | "output": "lg-autoplay.css",
34 | "name": "lg-autoplay.scss",
35 | "category": "CSS",
36 | "autoCompile": false,
37 | "autoprefixer": false,
38 | "sourceMaps": false,
39 | "libSass": true,
40 | "compass": false,
41 | "fullCompass": false,
42 | "outputStyle": "expanded",
43 | "customOutput": false,
44 | "imported": true,
45 | "parents": [
46 | "f80b85a1"
47 | ],
48 | "type": "sass"
49 | },
50 | "94edd1e7": {
51 | "id": "94edd1e7",
52 | "path": "lg-fb-comment-box.scss",
53 | "output": "lg-fb-comment-box.css",
54 | "name": "lg-fb-comment-box.scss",
55 | "category": "CSS",
56 | "autoCompile": true,
57 | "autoprefixer": false,
58 | "sourceMaps": false,
59 | "libSass": true,
60 | "compass": false,
61 | "fullCompass": false,
62 | "outputStyle": "expanded",
63 | "customOutput": false,
64 | "imported": false,
65 | "parents": [],
66 | "type": "sass"
67 | },
68 | "fb5b0eff": {
69 | "id": "fb5b0eff",
70 | "path": "lg-fonts.scss",
71 | "output": "lg-fonts.css",
72 | "name": "lg-fonts.scss",
73 | "category": "CSS",
74 | "autoCompile": false,
75 | "autoprefixer": false,
76 | "sourceMaps": false,
77 | "libSass": true,
78 | "compass": false,
79 | "fullCompass": false,
80 | "outputStyle": "expanded",
81 | "customOutput": false,
82 | "imported": true,
83 | "parents": [
84 | "f80b85a1"
85 | ],
86 | "type": "sass"
87 | },
88 | "9e150360": {
89 | "id": "9e150360",
90 | "path": "lg-fullscreen.scss",
91 | "output": "lg-fullscreen.css",
92 | "name": "lg-fullscreen.scss",
93 | "category": "CSS",
94 | "autoCompile": false,
95 | "autoprefixer": false,
96 | "sourceMaps": false,
97 | "libSass": true,
98 | "compass": false,
99 | "fullCompass": false,
100 | "outputStyle": "expanded",
101 | "customOutput": false,
102 | "imported": true,
103 | "parents": [
104 | "f80b85a1"
105 | ],
106 | "type": "sass"
107 | },
108 | "11b5aed8": {
109 | "id": "11b5aed8",
110 | "path": "lg-mixins.scss",
111 | "output": "lg-mixins.css",
112 | "name": "lg-mixins.scss",
113 | "category": "CSS",
114 | "autoCompile": false,
115 | "autoprefixer": false,
116 | "sourceMaps": false,
117 | "libSass": true,
118 | "compass": false,
119 | "fullCompass": false,
120 | "outputStyle": "expanded",
121 | "customOutput": false,
122 | "imported": true,
123 | "parents": [
124 | "94edd1e7",
125 | "6018a35b",
126 | "f80b85a1"
127 | ],
128 | "type": "sass"
129 | },
130 | "06548c3d": {
131 | "id": "06548c3d",
132 | "path": "lg-pager.scss",
133 | "output": "lg-pager.css",
134 | "name": "lg-pager.scss",
135 | "category": "CSS",
136 | "autoCompile": false,
137 | "autoprefixer": false,
138 | "sourceMaps": false,
139 | "libSass": true,
140 | "compass": false,
141 | "fullCompass": false,
142 | "outputStyle": "expanded",
143 | "customOutput": false,
144 | "imported": true,
145 | "parents": [
146 | "f80b85a1"
147 | ],
148 | "type": "sass"
149 | },
150 | "7dbddfad": {
151 | "id": "7dbddfad",
152 | "path": "lg-theme-default.scss",
153 | "output": "lg-theme-default.css",
154 | "name": "lg-theme-default.scss",
155 | "category": "CSS",
156 | "autoCompile": false,
157 | "autoprefixer": false,
158 | "sourceMaps": false,
159 | "libSass": true,
160 | "compass": false,
161 | "fullCompass": false,
162 | "outputStyle": "expanded",
163 | "customOutput": false,
164 | "imported": true,
165 | "parents": [
166 | "f80b85a1"
167 | ],
168 | "type": "sass"
169 | },
170 | "ccc7c5d4": {
171 | "id": "ccc7c5d4",
172 | "path": "lg-thumbnail.scss",
173 | "output": "lg-thumbnail.css",
174 | "name": "lg-thumbnail.scss",
175 | "category": "CSS",
176 | "autoCompile": false,
177 | "autoprefixer": false,
178 | "sourceMaps": false,
179 | "libSass": true,
180 | "compass": false,
181 | "fullCompass": false,
182 | "outputStyle": "expanded",
183 | "customOutput": false,
184 | "imported": true,
185 | "parents": [
186 | "f80b85a1"
187 | ],
188 | "type": "sass"
189 | },
190 | "6018a35b": {
191 | "id": "6018a35b",
192 | "path": "lg-transitions.scss",
193 | "output": "lg-transitions.css",
194 | "name": "lg-transitions.scss",
195 | "category": "CSS",
196 | "autoCompile": true,
197 | "autoprefixer": false,
198 | "sourceMaps": false,
199 | "libSass": true,
200 | "compass": false,
201 | "fullCompass": false,
202 | "outputStyle": "expanded",
203 | "customOutput": false,
204 | "imported": false,
205 | "parents": [],
206 | "type": "sass"
207 | },
208 | "36a5e0f7": {
209 | "id": "36a5e0f7",
210 | "path": "lg-variables.scss",
211 | "output": "lg-variables.css",
212 | "name": "lg-variables.scss",
213 | "category": "CSS",
214 | "autoCompile": false,
215 | "autoprefixer": false,
216 | "sourceMaps": false,
217 | "libSass": true,
218 | "compass": false,
219 | "fullCompass": false,
220 | "outputStyle": "expanded",
221 | "customOutput": false,
222 | "imported": true,
223 | "parents": [
224 | "94edd1e7",
225 | "6018a35b",
226 | "f80b85a1"
227 | ],
228 | "type": "sass"
229 | },
230 | "70ef8df4": {
231 | "id": "70ef8df4",
232 | "path": "lg-video.scss",
233 | "output": "lg-video.css",
234 | "name": "lg-video.scss",
235 | "category": "CSS",
236 | "autoCompile": false,
237 | "autoprefixer": false,
238 | "sourceMaps": false,
239 | "libSass": true,
240 | "compass": false,
241 | "fullCompass": false,
242 | "outputStyle": "expanded",
243 | "customOutput": false,
244 | "imported": true,
245 | "parents": [
246 | "f80b85a1"
247 | ],
248 | "type": "sass"
249 | },
250 | "0690cbf9": {
251 | "id": "0690cbf9",
252 | "path": "lg-zoom.scss",
253 | "output": "lg-zoom.css",
254 | "name": "lg-zoom.scss",
255 | "category": "CSS",
256 | "autoCompile": false,
257 | "autoprefixer": false,
258 | "sourceMaps": false,
259 | "libSass": true,
260 | "compass": false,
261 | "fullCompass": false,
262 | "outputStyle": "expanded",
263 | "customOutput": false,
264 | "imported": true,
265 | "parents": [
266 | "f80b85a1"
267 | ],
268 | "type": "sass"
269 | },
270 | "f80b85a1": {
271 | "id": "f80b85a1",
272 | "path": "lightgallery.scss",
273 | "output": "C:/wamp/www/lg-desktop/lightgallery-desktop/app/lightgallery/css/lightgallery.css",
274 | "name": "lightgallery.scss",
275 | "category": "CSS",
276 | "autoCompile": true,
277 | "autoprefixer": false,
278 | "sourceMaps": true,
279 | "libSass": false,
280 | "compass": true,
281 | "fullCompass": false,
282 | "outputStyle": "nested",
283 | "customOutput": true,
284 | "imported": false,
285 | "parents": [],
286 | "type": "sass"
287 | }
288 | },
289 | "deploymentHistory": {},
290 | "config": {
291 | "watch": "",
292 | "liveRefresh": true,
293 | "useCustomServer": false,
294 | "port": 0,
295 | "useCustomPort": false,
296 | "customServerUrl": "",
297 | "watchedFileExtensions": "less, sass, scss, styl, md, markdown, coffee, js, jade, haml, slim, ls, html,htm, css, rb, php, asp, aspx, cfm, chm, cms, do, erb, jsp, mhtml, mspx, pl, py, shtml, cshtml, cs,vb, vbs, tpl, ctp, kit, png, jpg, jpeg",
298 | "excludePatterns": "Prepros Build, node_modules, .git, .idea, .sass-cache, .hg, .svn, .cache, config.rb, prepros.cfg, .DS_Store, bower_components",
299 | "autoprefixerBrowsers": "last 4 versions",
300 | "liveRefreshDelay": 0,
301 | "disableImportAutoCompile": true,
302 | "browserFlow": {
303 | "enabled": false,
304 | "mouseSync": true,
305 | "scrollSync": true,
306 | "keyboardSync": true,
307 | "animateCss": true
308 | },
309 | "deployment": {
310 | "ftpHost": "",
311 | "ftpPort": "21",
312 | "ftpUsePrivateKey": false,
313 | "ftpPrivateKey": "",
314 | "ftpRemotePath": "",
315 | "ftpUserName": "",
316 | "ftpPassword": "",
317 | "ftpType": "FTP",
318 | "ftpSecure": false,
319 | "ftpUploadOnModify": false,
320 | "ftpRefreshAfterUpload": false,
321 | "ignorePreprocessableFiles": true,
322 | "copyPath": "Prepros Build",
323 | "excludePatterns": ".map, Prepros Build, config.rb, prepros.cfg, node_modules, .git, .idea, .sass-cache, .hg, .svn, .cache, .DS_Store, bower_components"
324 | },
325 | "css": {
326 | "path": "css/",
327 | "outputType": "REPLACE_SEGMENT",
328 | "segmentToReplace": "less, sass, stylus, scss, styl",
329 | "segmentToReplaceWith": "css",
330 | "preprocessableFilesDirs": "less/\nsass/\nstylus/\nscss/\nstyl/\n"
331 | },
332 | "minCss": {
333 | "path": "",
334 | "outputType": "RELATIVE_FILEDIR",
335 | "segmentToReplace": "",
336 | "segmentToReplaceWith": "",
337 | "types": "",
338 | "preprocessableFilesDirs": "",
339 | "filePrefix": "-dist"
340 | },
341 | "html": {
342 | "segmentToReplace": "jade, haml, slim, markdown, md, kit",
343 | "segmentToReplaceWith": "html",
344 | "path": "html/",
345 | "extension": ".html",
346 | "outputType": "REPLACE_SEGMENT",
347 | "preprocessableFilesDirs": "jade/\nhaml/\nslim/\nmarkdown/\nmd/\nkit"
348 | },
349 | "js": {
350 | "segmentToReplace": "coffee, coffeescript, coffeescripts, ls, livescript, livescripts",
351 | "segmentToReplaceWith": "html",
352 | "extension": ".html",
353 | "outputType": "REPLACE_SEGMENT",
354 | "preprocessableFilesDirs": "coffee/\ncoffeescript/\ncoffeescripts/\nls/\nlivescript/\nlivescripts",
355 | "path": "js/"
356 | },
357 | "minJs": {
358 | "path": "",
359 | "outputType": "RELATIVE_FILEDIR",
360 | "segmentToReplace": "",
361 | "segmentToReplaceWith": "",
362 | "types": "",
363 | "preprocessableFilesDirs": "",
364 | "filePrefix": "-dist"
365 | },
366 | "compilers": {
367 | "less": {
368 | "autoCompile": true,
369 | "autoprefixer": false,
370 | "compress": false,
371 | "sourceMaps": false
372 | },
373 | "sass": {
374 | "autoCompile": true,
375 | "autoprefixer": false,
376 | "sourceMaps": false,
377 | "libSass": true,
378 | "compass": false,
379 | "fullCompass": false,
380 | "outputStyle": "expanded"
381 | },
382 | "stylus": {
383 | "autoCompile": true,
384 | "sourceMaps": false,
385 | "autoprefixer": false,
386 | "nib": false,
387 | "compress": false
388 | },
389 | "markdown": {
390 | "autoCompile": true,
391 | "sanitize": false,
392 | "gfm": true,
393 | "wrapWithHtml": false
394 | },
395 | "coffee": {
396 | "autoCompile": true,
397 | "bare": false,
398 | "uglify": false,
399 | "mangle": true,
400 | "iced": false,
401 | "sourceMaps": false
402 | },
403 | "livescript": {
404 | "autoCompile": true,
405 | "bare": false,
406 | "uglify": false,
407 | "mangle": true
408 | },
409 | "javascript": {
410 | "autoCompile": false,
411 | "uglify": true,
412 | "mangle": true,
413 | "babel": false,
414 | "sourceMaps": false
415 | },
416 | "jade": {
417 | "autoCompile": true,
418 | "pretty": true
419 | },
420 | "haml": {
421 | "autoCompile": true,
422 | "pretty": true,
423 | "doubleQuotes": false
424 | },
425 | "kit": {
426 | "autoCompile": true,
427 | "minifyHtml": false
428 | },
429 | "slim": {
430 | "autoCompile": true,
431 | "pretty": true,
432 | "indent": "default"
433 | },
434 | "css": {
435 | "autoCompile": false,
436 | "sourceMaps": false,
437 | "compress": true,
438 | "cssnext": false,
439 | "autoprefixer": false
440 | },
441 | "uglify": {
442 | "compress": {
443 | "sequences": true,
444 | "properties": true,
445 | "dead_code": true,
446 | "drop_debugger": true,
447 | "unsafe": false,
448 | "unsafe_comps": false,
449 | "conditionals": true,
450 | "comparisons": true,
451 | "evaluate": true,
452 | "booleans": true,
453 | "loops": true,
454 | "unused": true,
455 | "hoist_funs": true,
456 | "keep_fargs": false,
457 | "hoist_vars": false,
458 | "if_return": true,
459 | "join_vars": true,
460 | "cascade": true,
461 | "side_effects": true,
462 | "pure_getters": false,
463 | "negate_iife": true,
464 | "screw_ie8": false,
465 | "drop_console": false,
466 | "angular": false,
467 | "warnings": true,
468 | "pure_funcs": null,
469 | "global_defs": null
470 | },
471 | "output": {
472 | "quote_keys": false,
473 | "space_colon": true,
474 | "ascii_only": false,
475 | "unescape_regexps": false,
476 | "inline_script": false,
477 | "beautify": false,
478 | "bracketize": false,
479 | "semicolons": true,
480 | "comments": false,
481 | "preserve_line": false,
482 | "screw_ie8": false,
483 | "preamble": null
484 | }
485 | }
486 | }
487 | }
488 | }
489 | }
490 | ]
--------------------------------------------------------------------------------
/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lightgallery",
3 | "productName": "Lightgallery",
4 | "identifier": "lightgallery-desktop",
5 | "description": "A modern, electron and nodejs based image viewer for Mac, Windows and Linux.",
6 | "version": "0.1.1",
7 | "author": "Sachin N ",
8 | "main": "background.js",
9 | "dependencies": {
10 | "configstore": "^1.4.0",
11 | "fs-jetpack": "^0.7.0",
12 | "jquery": "^2.1.4"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/spec.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Jasmine Spec Runner
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/stylesheets/main.less:
--------------------------------------------------------------------------------
1 | html, body {
2 | width: 100%;
3 | height: 100%;
4 | margin: 0;
5 | padding: 0;
6 | background-color: black;
7 | }
8 |
9 | body {
10 | display: flex;
11 | justify-content: center;
12 | align-items: center;
13 | font-family: sans-serif;
14 | -webkit-transition: background-color 0.2s ease;
15 | transition: background-color 0.2s ease;
16 | .lg-drag-drop {
17 | top: 50%;
18 | font-size: 18px;
19 | left: 0;
20 | margin-top: -70px;
21 | text-align: center;
22 | position: absolute;
23 | color: #BBB7B7;
24 | right: 0;
25 | img{
26 | opacity: 0.7;
27 | width: 80px;
28 | }
29 | p{
30 | margin-bottom: 0;
31 | margin-top: 8px;
32 | }
33 | }
34 | &.lg-on{
35 | .lg-drag-drop {
36 | display: none;
37 | }
38 | }
39 | &.lg-drag-over{
40 | background-color: #454648;
41 | }
42 | }
43 |
44 | .lg-close{
45 | display: none;
46 | }
--------------------------------------------------------------------------------
/app/vendor/electron_boilerplate/context_menu.js:
--------------------------------------------------------------------------------
1 | // This gives you default context menu (cut, copy, paste)
2 | // in all input fields and textareas across your app.
3 |
4 | (function () {
5 | 'use strict';
6 |
7 | var remote = require('electron').remote;
8 | var Menu = remote.Menu;
9 | var MenuItem = remote.MenuItem;
10 |
11 | var cut = new MenuItem({
12 | label: "Cut",
13 | click: function () {
14 | document.execCommand("cut");
15 | }
16 | });
17 |
18 | var copy = new MenuItem({
19 | label: "Copy",
20 | click: function () {
21 | document.execCommand("copy");
22 | }
23 | });
24 |
25 | var paste = new MenuItem({
26 | label: "Paste",
27 | click: function () {
28 | document.execCommand("paste");
29 | }
30 | });
31 |
32 | var textMenu = new Menu();
33 | textMenu.append(cut);
34 | textMenu.append(copy);
35 | textMenu.append(paste);
36 |
37 | document.addEventListener('contextmenu', function(e) {
38 |
39 | switch (e.target.nodeName) {
40 | case 'TEXTAREA':
41 | case 'INPUT':
42 | e.preventDefault();
43 | textMenu.popup(remote.getCurrentWindow());
44 | break;
45 | }
46 |
47 | }, false);
48 |
49 | }());
50 |
--------------------------------------------------------------------------------
/app/vendor/electron_boilerplate/dev_helper.js:
--------------------------------------------------------------------------------
1 | import { app, Menu, BrowserWindow } from 'electron';
2 |
3 | var setDevMenu = function () {
4 | var devMenu = Menu.buildFromTemplate([{
5 | label: 'Development',
6 | submenu: [{
7 | label: 'check',
8 | accelerator: 'CmdOrCtrl+R',
9 | type: 'checkbox',
10 | checked: true,
11 | click: function () {
12 | BrowserWindow.getFocusedWindow().webContents.reloadIgnoringCache();
13 | }
14 | },{
15 | label: 'Toggle DevTools',
16 | accelerator: 'Alt+CmdOrCtrl+I',
17 | click: function () {
18 | BrowserWindow.getFocusedWindow().toggleDevTools();
19 | }
20 | },{
21 | label: 'Quit',
22 | accelerator: 'CmdOrCtrl+Q',
23 | click: function () {
24 | app.quit();
25 | }
26 | }]
27 | }]);
28 | Menu.setApplicationMenu(devMenu);
29 | };
30 |
31 | export default {
32 | setDevMenu: setDevMenu,
33 | }
34 |
--------------------------------------------------------------------------------
/app/vendor/electron_boilerplate/external_links.js:
--------------------------------------------------------------------------------
1 | // Convenient way for opening links in external browser, not in the app.
2 | // Useful especially if you have a lot of links to deal with.
3 | //
4 | // Usage:
5 | //
6 | // Every link with class ".js-external-link" will be opened in external browser.
7 | // google
8 | //
9 | // The same behaviour for many links can be achieved by adding
10 | // this class to any parent tag of an anchor tag.
11 | //
12 | // google
13 | // bing
14 | //
15 |
16 | (function () {
17 | 'use strict';
18 |
19 | var shell = require('electron').shell;
20 |
21 | var supportExternalLinks = function (e) {
22 | var href;
23 | var isExternal = false;
24 |
25 | var checkDomElement = function (element) {
26 | if (element.nodeName === 'A') {
27 | href = element.getAttribute('href');
28 | }
29 | if (element.classList.contains('js-external-link')) {
30 | isExternal = true;
31 | }
32 | if (href && isExternal) {
33 | shell.openExternal(href);
34 | e.preventDefault();
35 | } else if (element.parentElement) {
36 | checkDomElement(element.parentElement);
37 | }
38 | }
39 |
40 | checkDomElement(e.target);
41 | }
42 |
43 | document.addEventListener('click', supportExternalLinks, false);
44 | }());
45 |
--------------------------------------------------------------------------------
/app/vendor/electron_boilerplate/window_state.js:
--------------------------------------------------------------------------------
1 | // Simple module to help you remember the size and position of windows.
2 | // Can be used for more than one window, just construct many
3 | // instances of it and give each different name.
4 |
5 | import { app } from 'electron';
6 | import jetpack from 'fs-jetpack';
7 |
8 | export default function (name, defaults) {
9 |
10 | var userDataDir = jetpack.cwd(app.getPath('userData'));
11 | var stateStoreFile = 'window-state-' + name +'.json';
12 |
13 | var state = userDataDir.read(stateStoreFile, 'json') || {
14 | width: defaults.width,
15 | height: defaults.height
16 | };
17 |
18 | var saveState = function (win) {
19 | if (!win.isMaximized() && !win.isMinimized()) {
20 | var position = win.getPosition();
21 | var size = win.getSize();
22 | state.x = position[0];
23 | state.y = position[1];
24 | state.width = size[0];
25 | state.height = size[1];
26 | }
27 | state.isMaximized = win.isMaximized();
28 | userDataDir.write(stateStoreFile, state, { atomic: true });
29 | };
30 |
31 | return {
32 | get x() { return state.x; },
33 | get y() { return state.y; },
34 | get width() { return state.width; },
35 | get height() { return state.height; },
36 | get isMaximized() { return state.isMaximized; },
37 | saveState: saveState
38 | };
39 | }
40 |
--------------------------------------------------------------------------------
/app/vendor/jasmine/boot.js:
--------------------------------------------------------------------------------
1 | /**
2 | Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project.
3 |
4 | If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms.
5 |
6 | The location of `boot.js` can be specified and/or overridden in `jasmine.yml`.
7 |
8 | [jasmine-gem]: http://github.com/pivotal/jasmine-gem
9 | */
10 |
11 | (function() {
12 |
13 | /**
14 | * ## Require & Instantiate
15 | *
16 | * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
17 | */
18 | window.jasmine = jasmineRequire.core(jasmineRequire);
19 |
20 | /**
21 | * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.
22 | */
23 | jasmineRequire.html(jasmine);
24 |
25 | /**
26 | * Create the Jasmine environment. This is used to run all specs in a project.
27 | */
28 | var env = jasmine.getEnv();
29 |
30 | /**
31 | * ## The Global Interface
32 | *
33 | * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged.
34 | */
35 | var jasmineInterface = jasmineRequire.interface(jasmine, env);
36 |
37 | /**
38 | * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`.
39 | */
40 | if (typeof window == "undefined" && typeof exports == "object") {
41 | extend(exports, jasmineInterface);
42 | } else {
43 | extend(window, jasmineInterface);
44 | }
45 |
46 | /**
47 | * ## Runner Parameters
48 | *
49 | * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface.
50 | */
51 |
52 | var queryString = new jasmine.QueryString({
53 | getWindowLocation: function() { return window.location; }
54 | });
55 |
56 | var catchingExceptions = queryString.getParam("catch");
57 | env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
58 |
59 | /**
60 | * ## Reporters
61 | * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any).
62 | */
63 | var htmlReporter = new jasmine.HtmlReporter({
64 | env: env,
65 | onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
66 | addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
67 | getContainer: function() { return document.body; },
68 | createElement: function() { return document.createElement.apply(document, arguments); },
69 | createTextNode: function() { return document.createTextNode.apply(document, arguments); },
70 | timer: new jasmine.Timer()
71 | });
72 |
73 | /**
74 | * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript.
75 | */
76 | env.addReporter(jasmineInterface.jsApiReporter);
77 | env.addReporter(htmlReporter);
78 |
79 | /**
80 | * Filter which specs will be run by matching the start of the full name against the `spec` query param.
81 | */
82 | var specFilter = new jasmine.HtmlSpecFilter({
83 | filterString: function() { return queryString.getParam("spec"); }
84 | });
85 |
86 | env.specFilter = function(spec) {
87 | return specFilter.matches(spec.getFullName());
88 | };
89 |
90 | /**
91 | * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack.
92 | */
93 | window.setTimeout = window.setTimeout;
94 | window.setInterval = window.setInterval;
95 | window.clearTimeout = window.clearTimeout;
96 | window.clearInterval = window.clearInterval;
97 |
98 | /**
99 | * ## Execution
100 | *
101 | * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.
102 | */
103 | var currentWindowOnload = window.onload;
104 |
105 | window.onload = function() {
106 | if (currentWindowOnload) {
107 | currentWindowOnload();
108 | }
109 | htmlReporter.initialize();
110 | env.execute();
111 | };
112 |
113 | /**
114 | * Helper function for readability above.
115 | */
116 | function extend(destination, source) {
117 | for (var property in source) destination[property] = source[property];
118 | return destination;
119 | }
120 |
121 | }());
122 |
--------------------------------------------------------------------------------
/app/vendor/jasmine/jasmine-html.js:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2008-2015 Pivotal Labs
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining
5 | a copy of this software and associated documentation files (the
6 | "Software"), to deal in the Software without restriction, including
7 | without limitation the rights to use, copy, modify, merge, publish,
8 | distribute, sublicense, and/or sell copies of the Software, and to
9 | permit persons to whom the Software is furnished to do so, subject to
10 | the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | jasmineRequire.html = function(j$) {
24 | j$.ResultsNode = jasmineRequire.ResultsNode();
25 | j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
26 | j$.QueryString = jasmineRequire.QueryString();
27 | j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
28 | };
29 |
30 | jasmineRequire.HtmlReporter = function(j$) {
31 |
32 | var noopTimer = {
33 | start: function() {},
34 | elapsed: function() { return 0; }
35 | };
36 |
37 | function HtmlReporter(options) {
38 | var env = options.env || {},
39 | getContainer = options.getContainer,
40 | createElement = options.createElement,
41 | createTextNode = options.createTextNode,
42 | onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
43 | addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,
44 | timer = options.timer || noopTimer,
45 | results = [],
46 | specsExecuted = 0,
47 | failureCount = 0,
48 | pendingSpecCount = 0,
49 | htmlReporterMain,
50 | symbols,
51 | failedSuites = [];
52 |
53 | this.initialize = function() {
54 | clearPrior();
55 | htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'},
56 | createDom('div', {className: 'banner'},
57 | createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}),
58 | createDom('span', {className: 'version'}, j$.version)
59 | ),
60 | createDom('ul', {className: 'symbol-summary'}),
61 | createDom('div', {className: 'alert'}),
62 | createDom('div', {className: 'results'},
63 | createDom('div', {className: 'failures'})
64 | )
65 | );
66 | getContainer().appendChild(htmlReporterMain);
67 |
68 | symbols = find('.symbol-summary');
69 | };
70 |
71 | var totalSpecsDefined;
72 | this.jasmineStarted = function(options) {
73 | totalSpecsDefined = options.totalSpecsDefined || 0;
74 | timer.start();
75 | };
76 |
77 | var summary = createDom('div', {className: 'summary'});
78 |
79 | var topResults = new j$.ResultsNode({}, '', null),
80 | currentParent = topResults;
81 |
82 | this.suiteStarted = function(result) {
83 | currentParent.addChild(result, 'suite');
84 | currentParent = currentParent.last();
85 | };
86 |
87 | this.suiteDone = function(result) {
88 | if (result.status == 'failed') {
89 | failedSuites.push(result);
90 | }
91 |
92 | if (currentParent == topResults) {
93 | return;
94 | }
95 |
96 | currentParent = currentParent.parent;
97 | };
98 |
99 | this.specStarted = function(result) {
100 | currentParent.addChild(result, 'spec');
101 | };
102 |
103 | var failures = [];
104 | this.specDone = function(result) {
105 | if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') {
106 | console.error('Spec \'' + result.fullName + '\' has no expectations.');
107 | }
108 |
109 | if (result.status != 'disabled') {
110 | specsExecuted++;
111 | }
112 |
113 | symbols.appendChild(createDom('li', {
114 | className: noExpectations(result) ? 'empty' : result.status,
115 | id: 'spec_' + result.id,
116 | title: result.fullName
117 | }
118 | ));
119 |
120 | if (result.status == 'failed') {
121 | failureCount++;
122 |
123 | var failure =
124 | createDom('div', {className: 'spec-detail failed'},
125 | createDom('div', {className: 'description'},
126 | createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName)
127 | ),
128 | createDom('div', {className: 'messages'})
129 | );
130 | var messages = failure.childNodes[1];
131 |
132 | for (var i = 0; i < result.failedExpectations.length; i++) {
133 | var expectation = result.failedExpectations[i];
134 | messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message));
135 | messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack));
136 | }
137 |
138 | failures.push(failure);
139 | }
140 |
141 | if (result.status == 'pending') {
142 | pendingSpecCount++;
143 | }
144 | };
145 |
146 | this.jasmineDone = function() {
147 | var banner = find('.banner');
148 | banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));
149 |
150 | var alert = find('.alert');
151 |
152 | alert.appendChild(createDom('span', { className: 'exceptions' },
153 | createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'),
154 | createDom('input', {
155 | className: 'raise',
156 | id: 'raise-exceptions',
157 | type: 'checkbox'
158 | })
159 | ));
160 | var checkbox = find('#raise-exceptions');
161 |
162 | checkbox.checked = !env.catchingExceptions();
163 | checkbox.onclick = onRaiseExceptionsClick;
164 |
165 | if (specsExecuted < totalSpecsDefined) {
166 | var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';
167 | alert.appendChild(
168 | createDom('span', {className: 'bar skipped'},
169 | createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage)
170 | )
171 | );
172 | }
173 | var statusBarMessage = '';
174 | var statusBarClassName = 'bar ';
175 |
176 | if (totalSpecsDefined > 0) {
177 | statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount);
178 | if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); }
179 | statusBarClassName += (failureCount > 0) ? 'failed' : 'passed';
180 | } else {
181 | statusBarClassName += 'skipped';
182 | statusBarMessage += 'No specs found';
183 | }
184 |
185 | alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage));
186 |
187 | for(i = 0; i < failedSuites.length; i++) {
188 | var failedSuite = failedSuites[i];
189 | for(var j = 0; j < failedSuite.failedExpectations.length; j++) {
190 | var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message;
191 | var errorBarClassName = 'bar errored';
192 | alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage));
193 | }
194 | }
195 |
196 | var results = find('.results');
197 | results.appendChild(summary);
198 |
199 | summaryList(topResults, summary);
200 |
201 | function summaryList(resultsTree, domParent) {
202 | var specListNode;
203 | for (var i = 0; i < resultsTree.children.length; i++) {
204 | var resultNode = resultsTree.children[i];
205 | if (resultNode.type == 'suite') {
206 | var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id},
207 | createDom('li', {className: 'suite-detail'},
208 | createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)
209 | )
210 | );
211 |
212 | summaryList(resultNode, suiteListNode);
213 | domParent.appendChild(suiteListNode);
214 | }
215 | if (resultNode.type == 'spec') {
216 | if (domParent.getAttribute('class') != 'specs') {
217 | specListNode = createDom('ul', {className: 'specs'});
218 | domParent.appendChild(specListNode);
219 | }
220 | var specDescription = resultNode.result.description;
221 | if(noExpectations(resultNode.result)) {
222 | specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;
223 | }
224 | if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') {
225 | specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason;
226 | }
227 | specListNode.appendChild(
228 | createDom('li', {
229 | className: resultNode.result.status,
230 | id: 'spec-' + resultNode.result.id
231 | },
232 | createDom('a', {href: specHref(resultNode.result)}, specDescription)
233 | )
234 | );
235 | }
236 | }
237 | }
238 |
239 | if (failures.length) {
240 | alert.appendChild(
241 | createDom('span', {className: 'menu bar spec-list'},
242 | createDom('span', {}, 'Spec List | '),
243 | createDom('a', {className: 'failures-menu', href: '#'}, 'Failures')));
244 | alert.appendChild(
245 | createDom('span', {className: 'menu bar failure-list'},
246 | createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'),
247 | createDom('span', {}, ' | Failures ')));
248 |
249 | find('.failures-menu').onclick = function() {
250 | setMenuModeTo('failure-list');
251 | };
252 | find('.spec-list-menu').onclick = function() {
253 | setMenuModeTo('spec-list');
254 | };
255 |
256 | setMenuModeTo('failure-list');
257 |
258 | var failureNode = find('.failures');
259 | for (var i = 0; i < failures.length; i++) {
260 | failureNode.appendChild(failures[i]);
261 | }
262 | }
263 | };
264 |
265 | return this;
266 |
267 | function find(selector) {
268 | return getContainer().querySelector('.jasmine_html-reporter ' + selector);
269 | }
270 |
271 | function clearPrior() {
272 | // return the reporter
273 | var oldReporter = find('');
274 |
275 | if(oldReporter) {
276 | getContainer().removeChild(oldReporter);
277 | }
278 | }
279 |
280 | function createDom(type, attrs, childrenVarArgs) {
281 | var el = createElement(type);
282 |
283 | for (var i = 2; i < arguments.length; i++) {
284 | var child = arguments[i];
285 |
286 | if (typeof child === 'string') {
287 | el.appendChild(createTextNode(child));
288 | } else {
289 | if (child) {
290 | el.appendChild(child);
291 | }
292 | }
293 | }
294 |
295 | for (var attr in attrs) {
296 | if (attr == 'className') {
297 | el[attr] = attrs[attr];
298 | } else {
299 | el.setAttribute(attr, attrs[attr]);
300 | }
301 | }
302 |
303 | return el;
304 | }
305 |
306 | function pluralize(singular, count) {
307 | var word = (count == 1 ? singular : singular + 's');
308 |
309 | return '' + count + ' ' + word;
310 | }
311 |
312 | function specHref(result) {
313 | return addToExistingQueryString('spec', result.fullName);
314 | }
315 |
316 | function defaultQueryString(key, value) {
317 | return '?' + key + '=' + value;
318 | }
319 |
320 | function setMenuModeTo(mode) {
321 | htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode);
322 | }
323 |
324 | function noExpectations(result) {
325 | return (result.failedExpectations.length + result.passedExpectations.length) === 0 &&
326 | result.status === 'passed';
327 | }
328 | }
329 |
330 | return HtmlReporter;
331 | };
332 |
333 | jasmineRequire.HtmlSpecFilter = function() {
334 | function HtmlSpecFilter(options) {
335 | var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
336 | var filterPattern = new RegExp(filterString);
337 |
338 | this.matches = function(specName) {
339 | return filterPattern.test(specName);
340 | };
341 | }
342 |
343 | return HtmlSpecFilter;
344 | };
345 |
346 | jasmineRequire.ResultsNode = function() {
347 | function ResultsNode(result, type, parent) {
348 | this.result = result;
349 | this.type = type;
350 | this.parent = parent;
351 |
352 | this.children = [];
353 |
354 | this.addChild = function(result, type) {
355 | this.children.push(new ResultsNode(result, type, this));
356 | };
357 |
358 | this.last = function() {
359 | return this.children[this.children.length - 1];
360 | };
361 | }
362 |
363 | return ResultsNode;
364 | };
365 |
366 | jasmineRequire.QueryString = function() {
367 | function QueryString(options) {
368 |
369 | this.navigateWithNewParam = function(key, value) {
370 | options.getWindowLocation().search = this.fullStringWithNewParam(key, value);
371 | };
372 |
373 | this.fullStringWithNewParam = function(key, value) {
374 | var paramMap = queryStringToParamMap();
375 | paramMap[key] = value;
376 | return toQueryString(paramMap);
377 | };
378 |
379 | this.getParam = function(key) {
380 | return queryStringToParamMap()[key];
381 | };
382 |
383 | return this;
384 |
385 | function toQueryString(paramMap) {
386 | var qStrPairs = [];
387 | for (var prop in paramMap) {
388 | qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop]));
389 | }
390 | return '?' + qStrPairs.join('&');
391 | }
392 |
393 | function queryStringToParamMap() {
394 | var paramStr = options.getWindowLocation().search.substring(1),
395 | params = [],
396 | paramMap = {};
397 |
398 | if (paramStr.length > 0) {
399 | params = paramStr.split('&');
400 | for (var i = 0; i < params.length; i++) {
401 | var p = params[i].split('=');
402 | var value = decodeURIComponent(p[1]);
403 | if (value === 'true' || value === 'false') {
404 | value = JSON.parse(value);
405 | }
406 | paramMap[decodeURIComponent(p[0])] = value;
407 | }
408 | }
409 |
410 | return paramMap;
411 | }
412 |
413 | }
414 |
415 | return QueryString;
416 | };
417 |
--------------------------------------------------------------------------------
/config/env_development.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "development",
3 | "description": "Add here any environment specific stuff you like."
4 | }
5 |
--------------------------------------------------------------------------------
/config/env_production.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "production",
3 | "description": "Add here any environment specific stuff you like."
4 | }
5 |
--------------------------------------------------------------------------------
/config/env_test.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "test",
3 | "description": "Add here any environment specific stuff you like."
4 | }
5 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | require('./tasks/build');
4 | require('./tasks/release');
5 |
--------------------------------------------------------------------------------
/lg-desktop.sublime-project:
--------------------------------------------------------------------------------
1 | {
2 | "folders":
3 | [
4 | {
5 | "path": "."
6 | }
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "asar": "^0.7.2",
4 | "electron-prebuilt": "^0.35.1",
5 | "fs-jetpack": "^0.7.0",
6 | "gulp": "^3.9.0",
7 | "gulp-less": "^3.0.3",
8 | "gulp-util": "^3.0.6",
9 | "q": "^1.4.1",
10 | "rollup": "^0.21.0",
11 | "tree-kill": "^0.1.1",
12 | "yargs": "^3.15.0"
13 | },
14 | "optionalDependencies": {
15 | "appdmg": "^0.3.2",
16 | "rcedit": "^0.3.0"
17 | },
18 | "scripts": {
19 | "postinstall": "cd app && npm install",
20 | "build": "gulp build",
21 | "release": "gulp release --env=production",
22 | "start": "node ./tasks/start",
23 | "test": "node ./tasks/start --env=test"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/icon.png
--------------------------------------------------------------------------------
/resources/linux/DEBIAN/control:
--------------------------------------------------------------------------------
1 | Package: {{name}}
2 | Version: {{version}}
3 | Maintainer: {{author}}
4 | Priority: optional
5 | Architecture: amd64
6 | Installed-Size: {{size}}
7 | Description: {{description}}
8 |
--------------------------------------------------------------------------------
/resources/linux/app.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Version=1.0
3 | Type=Application
4 | Encoding=UTF-8
5 | Name={{productName}}
6 | Comment={{description}}
7 | Exec=/opt/{{name}}/{{name}}
8 | Path=/opt/{{name}}/
9 | Icon=/opt/{{name}}/icon.png
10 | Terminal=false
11 | Categories=Application;
12 |
--------------------------------------------------------------------------------
/resources/osx/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDisplayName
6 | {{productName}}
7 | CFBundleExecutable
8 | {{productName}}
9 | CFBundleIconFile
10 | icon.icns
11 | CFBundleIdentifier
12 | {{identifier}}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | {{productName}}
17 | CFBundlePackageType
18 | APPL
19 | CFBundleVersion
20 | {{version}}
21 | CFBundleGetInfoString
22 | {{version}}
23 | LSMinimumSystemVersion
24 | 10.8.0
25 | NSMainNibFile
26 | MainMenu
27 | NSPrincipalClass
28 | AtomApplication
29 | NSSupportsAutomaticGraphicsSwitching
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/resources/osx/appdmg.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "{{productName}}",
3 | "icon": "{{dmgIcon}}",
4 | "background": "{{dmgBackground}}",
5 | "icon-size": 128,
6 | "contents": [
7 | { "x": 410, "y": 220, "type": "link", "path": "/Applications" },
8 | { "x": 130, "y": 220, "type": "file", "path": "{{appPath}}" }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/resources/osx/dmg-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/osx/dmg-background.png
--------------------------------------------------------------------------------
/resources/osx/dmg-background@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/osx/dmg-background@2x.png
--------------------------------------------------------------------------------
/resources/osx/dmg-icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/osx/dmg-icon.icns
--------------------------------------------------------------------------------
/resources/osx/helper_apps/Info EH.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDisplayName
6 | {{productName}} Helper EH
7 | CFBundleExecutable
8 | {{productName}} Helper EH
9 | CFBundleIdentifier
10 | {{identifier}}.helper.EH
11 | CFBundleName
12 | {{productName}} Helper EH
13 | CFBundlePackageType
14 | APPL
15 | DTSDKName
16 | macosx
17 | LSUIElement
18 |
19 | NSSupportsAutomaticGraphicsSwitching
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/resources/osx/helper_apps/Info NP.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDisplayName
6 | {{productName}} Helper NP
7 | CFBundleExecutable
8 | {{productName}} Helper NP
9 | CFBundleIdentifier
10 | {{identifier}}.helper.NP
11 | CFBundleName
12 | {{productName}} Helper NP
13 | CFBundlePackageType
14 | APPL
15 | DTSDKName
16 | macosx
17 | LSUIElement
18 |
19 | NSSupportsAutomaticGraphicsSwitching
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/resources/osx/helper_apps/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleIdentifier
6 | {{identifier}}.helper
7 | CFBundleName
8 | {{productName}} Helper
9 | CFBundlePackageType
10 | APPL
11 | DTSDKName
12 | macosx
13 | LSUIElement
14 |
15 | NSSupportsAutomaticGraphicsSwitching
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/resources/osx/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/osx/icon.icns
--------------------------------------------------------------------------------
/resources/windows/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/windows/icon.ico
--------------------------------------------------------------------------------
/resources/windows/installer.nsi:
--------------------------------------------------------------------------------
1 | ; NSIS packaging/install script
2 | ; Docs: http://nsis.sourceforge.net/Docs/Contents.html
3 |
4 | !include LogicLib.nsh
5 | !include nsDialogs.nsh
6 |
7 | ; --------------------------------
8 | ; Variables
9 | ; --------------------------------
10 |
11 | !define dest "{{dest}}"
12 | !define src "{{src}}"
13 | !define name "{{name}}"
14 | !define productName "{{productName}}"
15 | !define version "{{version}}"
16 | !define icon "{{icon}}"
17 | !define setupIcon "{{setupIcon}}"
18 | !define banner "{{banner}}"
19 |
20 | !define exec "{{productName}}.exe"
21 |
22 | !define regkey "Software\${productName}"
23 | !define uninstkey "Software\Microsoft\Windows\CurrentVersion\Uninstall\${productName}"
24 |
25 | !define uninstaller "uninstall.exe"
26 |
27 | ; --------------------------------
28 | ; Installation
29 | ; --------------------------------
30 |
31 | Unicode true
32 | SetCompressor /SOLID lzma
33 |
34 | Name "${productName}"
35 | Icon "${setupIcon}"
36 | OutFile "${dest}"
37 | InstallDir "$PROGRAMFILES\${productName}"
38 | InstallDirRegKey HKLM "${regkey}" ""
39 |
40 | RequestExecutionLevel admin
41 | CRCCheck on
42 | SilentInstall normal
43 |
44 | XPStyle on
45 | ShowInstDetails nevershow
46 | AutoCloseWindow false
47 | WindowIcon off
48 |
49 | Caption "${productName} Setup"
50 | ; Don't add sub-captions to title bar
51 | SubCaption 3 " "
52 | SubCaption 4 " "
53 |
54 | Page custom welcome
55 | Page instfiles
56 |
57 | Var Image
58 | Var ImageHandle
59 |
60 | Function .onInit
61 |
62 | ; Extract banner image for welcome page
63 | InitPluginsDir
64 | ReserveFile "${banner}"
65 | File /oname=$PLUGINSDIR\banner.bmp "${banner}"
66 |
67 | FunctionEnd
68 |
69 | ; Custom welcome page
70 | Function welcome
71 |
72 | nsDialogs::Create 1018
73 |
74 | ${NSD_CreateLabel} 185 1u 210 100% "Welcome to ${productName} version ${version} installer.$\r$\n$\r$\nClick install to begin."
75 |
76 | ${NSD_CreateBitmap} 0 0 170 210 ""
77 | Pop $Image
78 | ${NSD_SetImage} $Image $PLUGINSDIR\banner.bmp $ImageHandle
79 |
80 | nsDialogs::Show
81 |
82 | ${NSD_FreeImage} $ImageHandle
83 |
84 | FunctionEnd
85 |
86 | ; Installation declarations
87 | Section "Install"
88 |
89 | WriteRegStr HKLM "${regkey}" "Install_Dir" "$INSTDIR"
90 | WriteRegStr HKLM "${uninstkey}" "DisplayName" "${productName}"
91 | WriteRegStr HKLM "${uninstkey}" "DisplayIcon" '"$INSTDIR\icon.ico"'
92 | WriteRegStr HKLM "${uninstkey}" "UninstallString" '"$INSTDIR\${uninstaller}"'
93 |
94 | ; Remove all application files copied by previous installation
95 | RMDir /r "$INSTDIR"
96 |
97 | SetOutPath $INSTDIR
98 |
99 | ; Include all files from /build directory
100 | File /r "${src}\*"
101 |
102 | ; Create start menu shortcut
103 | CreateShortCut "$SMPROGRAMS\${productName}.lnk" "$INSTDIR\${exec}" "" "$INSTDIR\icon.ico"
104 |
105 | WriteUninstaller "${uninstaller}"
106 |
107 | SectionEnd
108 |
109 | ; --------------------------------
110 | ; Uninstaller
111 | ; --------------------------------
112 |
113 | ShowUninstDetails nevershow
114 |
115 | UninstallCaption "Uninstall ${productName}"
116 | UninstallText "Don't like ${productName} anymore? Hit uninstall button."
117 | UninstallIcon "${icon}"
118 |
119 | UninstPage custom un.confirm un.confirmOnLeave
120 | UninstPage instfiles
121 |
122 | Var RemoveAppDataCheckbox
123 | Var RemoveAppDataCheckbox_State
124 |
125 | ; Custom uninstall confirm page
126 | Function un.confirm
127 |
128 | nsDialogs::Create 1018
129 |
130 | ${NSD_CreateLabel} 1u 1u 100% 24u "If you really want to remove ${productName} from your computer press uninstall button."
131 |
132 | ${NSD_CreateCheckbox} 1u 35u 100% 10u "Remove also my ${productName} personal data"
133 | Pop $RemoveAppDataCheckbox
134 |
135 | nsDialogs::Show
136 |
137 | FunctionEnd
138 |
139 | Function un.confirmOnLeave
140 |
141 | ; Save checkbox state on page leave
142 | ${NSD_GetState} $RemoveAppDataCheckbox $RemoveAppDataCheckbox_State
143 |
144 | FunctionEnd
145 |
146 | ; Uninstall declarations
147 | Section "Uninstall"
148 |
149 | DeleteRegKey HKLM "${uninstkey}"
150 | DeleteRegKey HKLM "${regkey}"
151 |
152 | Delete "$SMPROGRAMS\${productName}.lnk"
153 |
154 | ; Remove whole directory from Program Files
155 | RMDir /r "$INSTDIR"
156 |
157 | ; Remove also appData directory generated by your app if user checked this option
158 | ${If} $RemoveAppDataCheckbox_State == ${BST_CHECKED}
159 | RMDir /r "$APPDATA\${productName}"
160 | ${EndIf}
161 |
162 | SectionEnd
163 |
--------------------------------------------------------------------------------
/resources/windows/setup-banner.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/windows/setup-banner.bmp
--------------------------------------------------------------------------------
/resources/windows/setup-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sachinchoolur/lightgallery-desktop/46ace840e0fdc03e79f864ad4b47c7057237ac6e/resources/windows/setup-icon.ico
--------------------------------------------------------------------------------
/tasks/build.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var pathUtil = require('path');
4 | var Q = require('q');
5 | var gulp = require('gulp');
6 | var rollup = require('rollup');
7 | var less = require('gulp-less');
8 | var jetpack = require('fs-jetpack');
9 |
10 | var utils = require('./utils');
11 | var generateSpecsImportFile = require('./generate_specs_import');
12 |
13 | var projectDir = jetpack;
14 | var srcDir = projectDir.cwd('./app');
15 | var destDir = projectDir.cwd('./build');
16 |
17 | var paths = {
18 | copyFromAppDir: [
19 | './node_modules/**',
20 | './vendor/**',
21 | './lightgallery/**',
22 | './**/*.html',
23 | './**/*.+(jpg|png|svg)'
24 | ],
25 | }
26 |
27 | // -------------------------------------
28 | // Tasks
29 | // -------------------------------------
30 |
31 | gulp.task('clean', function(callback) {
32 | return destDir.dirAsync('.', { empty: true });
33 | });
34 |
35 |
36 | var copyTask = function () {
37 | return projectDir.copyAsync('app', destDir.path(), {
38 | overwrite: true,
39 | matching: paths.copyFromAppDir
40 | });
41 | };
42 | gulp.task('copy', ['clean'], copyTask);
43 | gulp.task('copy-watch', copyTask);
44 |
45 |
46 | var bundle = function (src, dest) {
47 | var deferred = Q.defer();
48 |
49 | rollup.rollup({
50 | entry: src,
51 | }).then(function (bundle) {
52 | var jsFile = pathUtil.basename(dest);
53 | var result = bundle.generate({
54 | format: 'cjs',
55 | sourceMap: true,
56 | sourceMapFile: jsFile,
57 | });
58 | // Wrap code in self invoking function so the variables don't
59 | // pollute the global namespace.
60 | var isolatedCode = '(function () {' + result.code + '}());';
61 | return Q.all([
62 | destDir.writeAsync(dest, isolatedCode + '\n//# sourceMappingURL=' + jsFile + '.map'),
63 | destDir.writeAsync(dest + '.map', result.map.toString()),
64 | ]);
65 | }).then(function () {
66 | deferred.resolve();
67 | }).catch(function (err) {
68 | console.error('Build: Error during rollup', err.stack);
69 | });
70 |
71 | return deferred.promise;
72 | };
73 |
74 | var bundleApplication = function () {
75 | return Q.all([
76 | bundle(srcDir.path('background.js'), destDir.path('background.js')),
77 | bundle(srcDir.path('app.js'), destDir.path('app.js')),
78 | ]);
79 | };
80 |
81 | var bundleSpecs = function () {
82 | generateSpecsImportFile().then(function (specEntryPointPath) {
83 | return Q.all([
84 | bundle(srcDir.path('background.js'), destDir.path('background.js')),
85 | bundle(specEntryPointPath, destDir.path('spec.js')),
86 | ]);
87 | });
88 | };
89 |
90 | var bundleTask = function () {
91 | if (utils.getEnvName() === 'test') {
92 | return bundleSpecs();
93 | }
94 | return bundleApplication();
95 | };
96 | gulp.task('bundle', ['clean'], bundleTask);
97 | gulp.task('bundle-watch', bundleTask);
98 |
99 |
100 | var lessTask = function () {
101 | return gulp.src('app/stylesheets/main.less')
102 | .pipe(less())
103 | .pipe(gulp.dest(destDir.path('stylesheets')));
104 | };
105 | gulp.task('less', ['clean'], lessTask);
106 | gulp.task('less-watch', lessTask);
107 |
108 |
109 | gulp.task('finalize', ['clean'], function () {
110 | var manifest = srcDir.read('package.json', 'json');
111 |
112 | // Add "dev" or "test" suffix to name, so Electron will write all data
113 | // like cookies and localStorage in separate places for each environment.
114 | switch (utils.getEnvName()) {
115 | case 'development':
116 | manifest.name += '-dev';
117 | manifest.productName += ' Dev';
118 | break;
119 | case 'test':
120 | manifest.name += '-test';
121 | manifest.productName += ' Test';
122 | break;
123 | }
124 |
125 | // Copy environment variables to package.json file for easy use
126 | // in the running application. This is not official way of doing
127 | // things, but also isn't prohibited ;)
128 | manifest.env = projectDir.read('config/env_' + utils.getEnvName() + '.json', 'json');
129 |
130 | destDir.write('package.json', manifest);
131 | });
132 |
133 |
134 | gulp.task('watch', function () {
135 | gulp.watch('app/**/*.js', ['bundle-watch']);
136 | gulp.watch(paths.copyFromAppDir, { cwd: 'app' }, ['copy-watch']);
137 | gulp.watch('app/**/*.less', ['less-watch']);
138 | });
139 |
140 |
141 | gulp.task('build', ['bundle', 'less', 'copy', 'finalize']);
142 |
--------------------------------------------------------------------------------
/tasks/generate_specs_import.js:
--------------------------------------------------------------------------------
1 | // Spec files are scattered through the whole project. Here we're searching
2 | // for them and generate one entry file which will run all the tests.
3 |
4 | 'use strict';
5 |
6 | var jetpack = require('fs-jetpack');
7 | var srcDir = jetpack.cwd('app');
8 |
9 | var fileName = 'spec.js';
10 | var fileBanner = "// This file is generated automatically.\n"
11 | + "// All your modifications to it will be lost (so don't do it).\n";
12 | var whatToInclude = [
13 | '*.spec.js',
14 | '!node_modules/**',
15 | ];
16 |
17 | module.exports = function () {
18 | return srcDir.findAsync('.', { matching: whatToInclude }, 'relativePath')
19 | .then(function (specPaths) {
20 | var fileContent = specPaths.map(function (path) {
21 | return 'import "' + path + '";';
22 | }).join('\n');
23 | return srcDir.writeAsync(fileName, fileBanner + fileContent);
24 | })
25 | .then(function () {
26 | return srcDir.path(fileName);
27 | });
28 | };
29 |
--------------------------------------------------------------------------------
/tasks/release.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var gulp = require('gulp');
4 | var utils = require('./utils');
5 |
6 | var releaseForOs = {
7 | osx: require('./release_osx'),
8 | linux: require('./release_linux'),
9 | windows: require('./release_windows'),
10 | };
11 |
12 | gulp.task('release', ['build'], function () {
13 | return releaseForOs[utils.os()]();
14 | });
15 |
--------------------------------------------------------------------------------
/tasks/release_linux.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var Q = require('q');
4 | var gulpUtil = require('gulp-util');
5 | var childProcess = require('child_process');
6 | var jetpack = require('fs-jetpack');
7 | var asar = require('asar');
8 | var utils = require('./utils');
9 |
10 | var projectDir;
11 | var releasesDir;
12 | var packName;
13 | var packDir;
14 | var tmpDir;
15 | var readyAppDir;
16 | var manifest;
17 |
18 | var init = function () {
19 | projectDir = jetpack;
20 | tmpDir = projectDir.dir('./tmp', { empty: true });
21 | releasesDir = projectDir.dir('./releases');
22 | manifest = projectDir.read('app/package.json', 'json');
23 | packName = manifest.name + '_' + manifest.version;
24 | packDir = tmpDir.dir(packName);
25 | readyAppDir = packDir.cwd('opt', manifest.name);
26 |
27 | return Q();
28 | };
29 |
30 | var copyRuntime = function () {
31 | return projectDir.copyAsync('node_modules/electron-prebuilt/dist', readyAppDir.path(), { overwrite: true });
32 | };
33 |
34 | var packageBuiltApp = function () {
35 | var deferred = Q.defer();
36 |
37 | asar.createPackage(projectDir.path('build'), readyAppDir.path('resources/app.asar'), function() {
38 | deferred.resolve();
39 | });
40 |
41 | return deferred.promise;
42 | };
43 |
44 | var finalize = function () {
45 | // Create .desktop file from the template
46 | var desktop = projectDir.read('resources/linux/app.desktop');
47 | desktop = utils.replace(desktop, {
48 | name: manifest.name,
49 | productName: manifest.productName,
50 | description: manifest.description,
51 | version: manifest.version,
52 | author: manifest.author
53 | });
54 | packDir.write('usr/share/applications/' + manifest.name + '.desktop', desktop);
55 |
56 | // Copy icon
57 | projectDir.copy('resources/icon.png', readyAppDir.path('icon.png'));
58 |
59 | return Q();
60 | };
61 |
62 | var renameApp = function() {
63 | return readyAppDir.renameAsync("electron", manifest.name);
64 | };
65 |
66 | var packToDebFile = function () {
67 | var deferred = Q.defer();
68 |
69 | var debFileName = packName + '_amd64.deb';
70 | var debPath = releasesDir.path(debFileName);
71 |
72 | gulpUtil.log('Creating DEB package...');
73 |
74 | // Counting size of the app in KiB
75 | var appSize = Math.round(readyAppDir.inspectTree('.').size / 1024);
76 |
77 | // Preparing debian control file
78 | var control = projectDir.read('resources/linux/DEBIAN/control');
79 | control = utils.replace(control, {
80 | name: manifest.name,
81 | description: manifest.description,
82 | version: manifest.version,
83 | author: manifest.author,
84 | size: appSize
85 | });
86 | packDir.write('DEBIAN/control', control);
87 |
88 | // Build the package...
89 | childProcess.exec('fakeroot dpkg-deb -Zxz --build ' + packDir.path().replace(/\s/g, '\\ ') + ' ' + debPath.replace(/\s/g, '\\ '),
90 | function (error, stdout, stderr) {
91 | if (error || stderr) {
92 | console.log("ERROR while building DEB package:");
93 | console.log(error);
94 | console.log(stderr);
95 | } else {
96 | gulpUtil.log('DEB package ready!', debPath);
97 | }
98 | deferred.resolve();
99 | });
100 |
101 | return deferred.promise;
102 | };
103 |
104 | var cleanClutter = function () {
105 | return tmpDir.removeAsync('.');
106 | };
107 |
108 | module.exports = function () {
109 | return init()
110 | .then(copyRuntime)
111 | .then(packageBuiltApp)
112 | .then(finalize)
113 | .then(renameApp)
114 | .then(packToDebFile)
115 | .then(cleanClutter)
116 | .catch(console.error);
117 | };
118 |
--------------------------------------------------------------------------------
/tasks/release_osx.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var Q = require('q');
4 | var gulpUtil = require('gulp-util');
5 | var jetpack = require('fs-jetpack');
6 | var asar = require('asar');
7 | var utils = require('./utils');
8 | var child_process = require('child_process');
9 |
10 | var projectDir;
11 | var releasesDir;
12 | var tmpDir;
13 | var finalAppDir;
14 | var manifest;
15 |
16 | var init = function () {
17 | projectDir = jetpack;
18 | tmpDir = projectDir.dir('./tmp', { empty: true });
19 | releasesDir = projectDir.dir('./releases');
20 | manifest = projectDir.read('app/package.json', 'json');
21 | finalAppDir = tmpDir.cwd(manifest.productName + '.app');
22 |
23 | return Q();
24 | };
25 |
26 | var copyRuntime = function () {
27 | return projectDir.copyAsync('node_modules/electron-prebuilt/dist/Electron.app', finalAppDir.path());
28 | };
29 |
30 | var cleanupRuntime = function() {
31 | finalAppDir.remove('Contents/Resources/default_app');
32 | finalAppDir.remove('Contents/Resources/atom.icns');
33 | return Q();
34 | }
35 |
36 | var packageBuiltApp = function () {
37 | var deferred = Q.defer();
38 |
39 | asar.createPackage(projectDir.path('build'), finalAppDir.path('Contents/Resources/app.asar'), function() {
40 | deferred.resolve();
41 | });
42 |
43 | return deferred.promise;
44 | };
45 |
46 | var finalize = function () {
47 | // Prepare main Info.plist
48 | var info = projectDir.read('resources/osx/Info.plist');
49 | info = utils.replace(info, {
50 | productName: manifest.productName,
51 | identifier: manifest.identifier,
52 | version: manifest.version
53 | });
54 | finalAppDir.write('Contents/Info.plist', info);
55 |
56 | // Prepare Info.plist of Helper apps
57 | [' EH', ' NP', ''].forEach(function (helper_suffix) {
58 | info = projectDir.read('resources/osx/helper_apps/Info' + helper_suffix + '.plist');
59 | info = utils.replace(info, {
60 | productName: manifest.productName,
61 | identifier: manifest.identifier
62 | });
63 | finalAppDir.write('Contents/Frameworks/Electron Helper' + helper_suffix + '.app/Contents/Info.plist', info);
64 | });
65 |
66 | // Copy icon
67 | projectDir.copy('resources/osx/icon.icns', finalAppDir.path('Contents/Resources/icon.icns'));
68 |
69 | return Q();
70 | };
71 |
72 | var renameApp = function() {
73 | // Rename helpers
74 | [' Helper EH', ' Helper NP', ' Helper'].forEach(function (helper_suffix) {
75 | finalAppDir.rename('Contents/Frameworks/Electron' + helper_suffix + '.app/Contents/MacOS/Electron' + helper_suffix, manifest.productName + helper_suffix );
76 | finalAppDir.rename('Contents/Frameworks/Electron' + helper_suffix + '.app', manifest.productName + helper_suffix + '.app');
77 | });
78 | // Rename application
79 | finalAppDir.rename('Contents/MacOS/Electron', manifest.productName);
80 | return Q();
81 | }
82 |
83 | var signApp = function () {
84 | var identity = utils.getSigningId();
85 | if (identity) {
86 | var cmd = 'codesign --deep --force --sign "' + identity + '" "' + finalAppDir.path() + '"';
87 | gulpUtil.log('Signing with:', cmd);
88 | return Q.nfcall(child_process.exec, cmd);
89 | } else {
90 | return Q();
91 | }
92 | }
93 |
94 | var packToDmgFile = function () {
95 | var deferred = Q.defer();
96 |
97 | var appdmg = require('appdmg');
98 | var dmgName = manifest.name + '_' + manifest.version + '.dmg';
99 |
100 | // Prepare appdmg config
101 | var dmgManifest = projectDir.read('resources/osx/appdmg.json');
102 | dmgManifest = utils.replace(dmgManifest, {
103 | productName: manifest.productName,
104 | appPath: finalAppDir.path(),
105 | dmgIcon: projectDir.path("resources/osx/dmg-icon.icns"),
106 | dmgBackground: projectDir.path("resources/osx/dmg-background.png")
107 | });
108 | tmpDir.write('appdmg.json', dmgManifest);
109 |
110 | // Delete DMG file with this name if already exists
111 | releasesDir.remove(dmgName);
112 |
113 | gulpUtil.log('Packaging to DMG file...');
114 |
115 | var readyDmgPath = releasesDir.path(dmgName);
116 | appdmg({
117 | source: tmpDir.path('appdmg.json'),
118 | target: readyDmgPath
119 | })
120 | .on('error', function (err) {
121 | console.error(err);
122 | })
123 | .on('finish', function () {
124 | gulpUtil.log('DMG file ready!', readyDmgPath);
125 | deferred.resolve();
126 | });
127 |
128 | return deferred.promise;
129 | };
130 |
131 | var cleanClutter = function () {
132 | return tmpDir.removeAsync('.');
133 | };
134 |
135 | module.exports = function () {
136 | return init()
137 | .then(copyRuntime)
138 | .then(cleanupRuntime)
139 | .then(packageBuiltApp)
140 | .then(finalize)
141 | .then(renameApp)
142 | .then(signApp)
143 | .then(packToDmgFile)
144 | .then(cleanClutter)
145 | .catch(console.error);
146 | };
147 |
--------------------------------------------------------------------------------
/tasks/release_windows.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var Q = require('q');
4 | var gulpUtil = require('gulp-util');
5 | var childProcess = require('child_process');
6 | var jetpack = require('fs-jetpack');
7 | var asar = require('asar');
8 | var utils = require('./utils');
9 |
10 | var projectDir;
11 | var tmpDir;
12 | var releasesDir;
13 | var readyAppDir;
14 | var manifest;
15 |
16 | var init = function () {
17 | projectDir = jetpack;
18 | tmpDir = projectDir.dir('./tmp', { empty: true });
19 | releasesDir = projectDir.dir('./releases');
20 | manifest = projectDir.read('app/package.json', 'json');
21 | readyAppDir = tmpDir.cwd(manifest.name);
22 |
23 | return Q();
24 | };
25 |
26 | var copyRuntime = function () {
27 | return projectDir.copyAsync('node_modules/electron-prebuilt/dist', readyAppDir.path(), { overwrite: true });
28 | };
29 |
30 | var cleanupRuntime = function () {
31 | return readyAppDir.removeAsync('resources/default_app');
32 | };
33 |
34 | var packageBuiltApp = function () {
35 | var deferred = Q.defer();
36 |
37 | asar.createPackage(projectDir.path('build'), readyAppDir.path('resources/app.asar'), function() {
38 | deferred.resolve();
39 | });
40 |
41 | return deferred.promise;
42 | };
43 |
44 | var finalize = function () {
45 | var deferred = Q.defer();
46 |
47 | projectDir.copy('resources/windows/icon.ico', readyAppDir.path('icon.ico'));
48 |
49 | // Replace Electron icon for your own.
50 | var rcedit = require('rcedit');
51 | rcedit(readyAppDir.path('electron.exe'), {
52 | 'icon': projectDir.path('resources/windows/icon.ico'),
53 | 'version-string': {
54 | 'ProductName': manifest.productName,
55 | 'FileDescription': manifest.description,
56 | }
57 | }, function (err) {
58 | if (!err) {
59 | deferred.resolve();
60 | }
61 | });
62 |
63 | return deferred.promise;
64 | };
65 |
66 | var renameApp = function () {
67 | return readyAppDir.renameAsync('electron.exe', manifest.productName + '.exe');
68 | };
69 |
70 | var createInstaller = function () {
71 | var deferred = Q.defer();
72 |
73 | var finalPackageName = manifest.name + '_' + manifest.version + '.exe';
74 | var installScript = projectDir.read('resources/windows/installer.nsi');
75 | installScript = utils.replace(installScript, {
76 | name: manifest.name,
77 | productName: manifest.productName,
78 | version: manifest.version,
79 | src: readyAppDir.path(),
80 | dest: releasesDir.path(finalPackageName),
81 | icon: readyAppDir.path('icon.ico'),
82 | setupIcon: projectDir.path('resources/windows/setup-icon.ico'),
83 | banner: projectDir.path('resources/windows/setup-banner.bmp'),
84 | });
85 | tmpDir.write('installer.nsi', installScript);
86 |
87 | gulpUtil.log('Building installer with NSIS...');
88 |
89 | // Remove destination file if already exists.
90 | releasesDir.remove(finalPackageName);
91 |
92 | // Note: NSIS have to be added to PATH (environment variables).
93 | var nsis = childProcess.spawn('makensis', [
94 | tmpDir.path('installer.nsi')
95 | ], {
96 | stdio: 'inherit'
97 | });
98 | nsis.on('error', function (err) {
99 | if (err.message === 'spawn makensis ENOENT') {
100 | throw "Can't find NSIS. Are you sure you've installed it and"
101 | + " added to PATH environment variable?";
102 | } else {
103 | throw err;
104 | }
105 | });
106 | nsis.on('close', function () {
107 | gulpUtil.log('Installer ready!', releasesDir.path(finalPackageName));
108 | deferred.resolve();
109 | });
110 |
111 | return deferred.promise;
112 | };
113 |
114 | var cleanClutter = function () {
115 | return tmpDir.removeAsync('.');
116 | };
117 |
118 | module.exports = function () {
119 | return init()
120 | .then(copyRuntime)
121 | .then(cleanupRuntime)
122 | .then(packageBuiltApp)
123 | .then(finalize)
124 | .then(renameApp)
125 | .then(createInstaller)
126 | .then(cleanClutter)
127 | .catch(console.error);
128 | };
129 |
--------------------------------------------------------------------------------
/tasks/start.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var Q = require('q');
4 | var electron = require('electron-prebuilt');
5 | var pathUtil = require('path');
6 | var childProcess = require('child_process');
7 | var kill = require('tree-kill');
8 | var utils = require('./utils');
9 | var watch;
10 |
11 | var gulpPath = pathUtil.resolve('./node_modules/.bin/gulp');
12 | if (process.platform === 'win32') {
13 | gulpPath += '.cmd';
14 | }
15 |
16 | var runBuild = function () {
17 | var deferred = Q.defer();
18 |
19 | var build = childProcess.spawn(gulpPath, [
20 | 'build',
21 | '--env=' + utils.getEnvName(),
22 | '--color'
23 | ], {
24 | stdio: 'inherit'
25 | });
26 |
27 | build.on('close', function (code) {
28 | deferred.resolve();
29 | });
30 |
31 | return deferred.promise;
32 | };
33 |
34 | var runGulpWatch = function () {
35 | watch = childProcess.spawn(gulpPath, [
36 | 'watch',
37 | '--env=' + utils.getEnvName(),
38 | '--color'
39 | ], {
40 | stdio: 'inherit'
41 | });
42 |
43 | watch.on('close', function (code) {
44 | // Gulp watch exits when error occured during build.
45 | // Just respawn it then.
46 | runGulpWatch();
47 | });
48 | };
49 |
50 | var runApp = function () {
51 | var app = childProcess.spawn(electron, ['./build'], {
52 | stdio: 'inherit'
53 | });
54 |
55 | app.on('close', function (code) {
56 | // User closed the app. Kill the host process.
57 | kill(watch.pid, 'SIGKILL', function () {
58 | process.exit();
59 | });
60 | });
61 | };
62 |
63 | runBuild()
64 | .then(function () {
65 | runGulpWatch();
66 | runApp();
67 | });
68 |
--------------------------------------------------------------------------------
/tasks/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var argv = require('yargs').argv;
4 | var os = require('os');
5 | var jetpack = require('fs-jetpack');
6 |
7 | module.exports.os = function () {
8 | switch (os.platform()) {
9 | case 'darwin':
10 | return 'osx';
11 | case 'linux':
12 | return 'linux';
13 | case 'win32':
14 | return 'windows';
15 | }
16 | return 'unsupported';
17 | };
18 |
19 | module.exports.replace = function (str, patterns) {
20 | Object.keys(patterns).forEach(function (pattern) {
21 | var matcher = new RegExp('{{' + pattern + '}}', 'g');
22 | str = str.replace(matcher, patterns[pattern]);
23 | });
24 | return str;
25 | };
26 |
27 | module.exports.getEnvName = function () {
28 | return argv.env || 'development';
29 | };
30 |
31 | module.exports.getSigningId = function () {
32 | return argv.sign;
33 | };
34 |
35 | module.exports.getElectronVersion = function () {
36 | var manifest = jetpack.read(__dirname + '/../package.json', 'json');
37 | return manifest.devDependencies['electron-prebuilt'].substring(1);
38 | };
39 |
--------------------------------------------------------------------------------