CV-Portfolio 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +53 -0
  4. data/_config.yml +111 -0
  5. data/_includes/backtotop.html +1 -0
  6. data/_includes/clients.html +37 -0
  7. data/_includes/header.html +2 -0
  8. data/_includes/javascripts.html +4 -0
  9. data/_includes/mapbox-init.html +2 -0
  10. data/_includes/mapbox.html +3 -0
  11. data/_includes/meta.html +28 -0
  12. data/_includes/photoswipe.html +40 -0
  13. data/_includes/preloader.html +4 -0
  14. data/_includes/review.html +79 -0
  15. data/_includes/scroll.html +2 -0
  16. data/_includes/sidebar.html +68 -0
  17. data/_includes/skills.html +31 -0
  18. data/_includes/testimonials.html +54 -0
  19. data/_layouts/contact.html +20 -0
  20. data/_layouts/default.html +18 -0
  21. data/_layouts/post.html +21 -0
  22. data/_layouts/project.html +23 -0
  23. data/_layouts/resume.html +18 -0
  24. data/_sass/style.scss +3353 -0
  25. data/assets/css/app/_button.scss +70 -0
  26. data/assets/css/app/_cases.scss +35 -0
  27. data/assets/css/app/_clients.scss +22 -0
  28. data/assets/css/app/_contact.scss +74 -0
  29. data/assets/css/app/_form.scss +264 -0
  30. data/assets/css/app/_general.scss +106 -0
  31. data/assets/css/app/_navbar.scss +98 -0
  32. data/assets/css/app/_news.scss +112 -0
  33. data/assets/css/app/_other.scss +58 -0
  34. data/assets/css/app/_popup.scss +167 -0
  35. data/assets/css/app/_portfolio.scss +269 -0
  36. data/assets/css/app/_sections.scss +265 -0
  37. data/assets/css/app/_sidebar.scss +181 -0
  38. data/assets/css/app/_single-news.scss +445 -0
  39. data/assets/css/app/_single-project.scss +97 -0
  40. data/assets/css/app/_testimonials.scss +147 -0
  41. data/assets/css/app/_timeline.scss +78 -0
  42. data/assets/css/app/_typography.scss +253 -0
  43. data/assets/css/main.scss +9 -0
  44. data/assets/css/style.css.map +30 -0
  45. data/assets/css/style.scss +43 -0
  46. data/assets/css/variables/_media.scss +8 -0
  47. data/assets/css/variables/_mixins.scss +59 -0
  48. data/assets/css/variables/_vars.scss +48 -0
  49. data/assets/css/vendors/bootstrap.css +10819 -0
  50. data/assets/css/vendors/bootstrap.css.map +1 -0
  51. data/assets/css/vendors/bootstrap.min.css +7 -0
  52. data/assets/css/vendors/bootstrap.min.css.map +1 -0
  53. data/assets/css/vendors/default-skin.css +482 -0
  54. data/assets/css/vendors/magnific-popup.css +351 -0
  55. data/assets/css/vendors/photoswipe.css +179 -0
  56. data/assets/css/vendors/simplebar.css +211 -0
  57. data/assets/css/vendors/simplebar.min.css +1 -0
  58. data/assets/css/vendors/swiper.min.css +12 -0
  59. data/assets/icons/dark/icon-app.svg +4 -0
  60. data/assets/icons/dark/icon-design.svg +5 -0
  61. data/assets/icons/dark/icon-dev.svg +12 -0
  62. data/assets/icons/dark/icon-education.svg +10 -0
  63. data/assets/icons/dark/icon-experience.svg +4 -0
  64. data/assets/icons/dark/icon-photo.svg +7 -0
  65. data/assets/icons/dark/icon-quote.svg +3 -0
  66. data/assets/icons/emoji/emoji-angry.svg +15 -0
  67. data/assets/icons/emoji/emoji-bad.svg +15 -0
  68. data/assets/icons/emoji/emoji-crazy.svg +15 -0
  69. data/assets/icons/emoji/emoji-happy-2.svg +12 -0
  70. data/assets/icons/emoji/emoji-happy-3.svg +16 -0
  71. data/assets/icons/emoji/emoji-happy.svg +15 -0
  72. data/assets/icons/emoji/emoji-in-love.svg +15 -0
  73. data/assets/icons/emoji/emoji-laughing.svg +15 -0
  74. data/assets/icons/emoji/emoji-nerd.svg +16 -0
  75. data/assets/icons/emoji/emoji-pressure.svg +17 -0
  76. data/assets/icons/emoji/emoji-sad-2.svg +15 -0
  77. data/assets/icons/emoji/emoji-sad.svg +13 -0
  78. data/assets/icons/emoji/emoji-shocked-2.svg +15 -0
  79. data/assets/icons/emoji/emoji-shocked-3.svg +11 -0
  80. data/assets/icons/emoji/emoji-shocked.svg +14 -0
  81. data/assets/icons/emoji/emoji-sweating.svg +10 -0
  82. data/assets/icons/emoji/emoji-thinking.svg +13 -0
  83. data/assets/icons/emoji/emoji-wink.svg +12 -0
  84. data/assets/icons/feather.css +871 -0
  85. data/assets/icons/feather.woff +0 -0
  86. data/assets/icons/feather.woff2 +0 -0
  87. data/assets/icons/icomoon.svg +45 -0
  88. data/assets/icons/icomoon.ttf +0 -0
  89. data/assets/icons/icomoon.woff +0 -0
  90. data/assets/icons/icon-app.svg +14 -0
  91. data/assets/icons/icon-at.svg +3 -0
  92. data/assets/icons/icon-calendar.svg +3 -0
  93. data/assets/icons/icon-design.svg +27 -0
  94. data/assets/icons/icon-dev.svg +54 -0
  95. data/assets/icons/icon-download.svg +3 -0
  96. data/assets/icons/icon-education.svg +10 -0
  97. data/assets/icons/icon-envelope.svg +3 -0
  98. data/assets/icons/icon-experience.svg +4 -0
  99. data/assets/icons/icon-like-fill.svg +3 -0
  100. data/assets/icons/icon-like.svg +3 -0
  101. data/assets/icons/icon-location.svg +3 -0
  102. data/assets/icons/icon-news.svg +3 -0
  103. data/assets/icons/icon-phone.svg +3 -0
  104. data/assets/icons/icon-photo.svg +45 -0
  105. data/assets/icons/icon-quote.svg +9 -0
  106. data/assets/icons/icon-reply.svg +3 -0
  107. data/assets/icons/icon-send.svg +3 -0
  108. data/assets/icons/icon-skype.svg +3 -0
  109. data/assets/icons/icon-user.svg +6 -0
  110. data/assets/icons/style-custome-icons.css +132 -0
  111. data/assets/images/280x204.jpg +0 -0
  112. data/assets/images/400x550.jpg +0 -0
  113. data/assets/images/433x240.jpg +0 -0
  114. data/assets/images/560x340.jpg +0 -0
  115. data/assets/images/958x400.jpg +0 -0
  116. data/assets/images/_icon-map-pic.svg +15 -0
  117. data/assets/images/apple-store.png +0 -0
  118. data/assets/images/avatar-1.png +0 -0
  119. data/assets/images/avatar-2.png +0 -0
  120. data/assets/images/avatar-3.png +0 -0
  121. data/assets/images/avatar-4.png +0 -0
  122. data/assets/images/clients/logo-1-color.png +0 -0
  123. data/assets/images/clients/logo-1-white.png +0 -0
  124. data/assets/images/clients/logo-2-color.png +0 -0
  125. data/assets/images/clients/logo-2-white.png +0 -0
  126. data/assets/images/clients/logo-3-color.png +0 -0
  127. data/assets/images/clients/logo-3-white.png +0 -0
  128. data/assets/images/clients/logo-4-color.png +0 -0
  129. data/assets/images/clients/logo-4-white.png +0 -0
  130. data/assets/images/clients/logo-5-color.png +0 -0
  131. data/assets/images/clients/logo-5-white.png +0 -0
  132. data/assets/images/clients/logo-6-color.png +0 -0
  133. data/assets/images/clients/logo-6-white.png +0 -0
  134. data/assets/images/clients/logo-7-color.png +0 -0
  135. data/assets/images/clients/logo-7-white.png +0 -0
  136. data/assets/images/clients/logo-8-color.png +0 -0
  137. data/assets/images/clients/logo-8-white.png +0 -0
  138. data/assets/images/clients/logo-9-color.png +0 -0
  139. data/assets/images/clients/logo-9-white.png +0 -0
  140. data/assets/images/cover.png +0 -0
  141. data/assets/images/cv-portfolio.jpg +0 -0
  142. data/assets/images/favicons/apple-touch-icon-114x114.png +0 -0
  143. data/assets/images/favicons/apple-touch-icon-144x144.png +0 -0
  144. data/assets/images/favicons/apple-touch-icon-57x57.png +0 -0
  145. data/assets/images/favicons/apple-touch-icon-72x72.png +0 -0
  146. data/assets/images/favicons/favicon.png +0 -0
  147. data/assets/images/icon-map-pic.svg +30 -0
  148. data/assets/images/icon-quote.svg +3 -0
  149. data/assets/images/logotype.svg +9 -0
  150. data/assets/images/my-avatar.png +0 -0
  151. data/assets/images/photoswiper/default-skin.png +0 -0
  152. data/assets/images/photoswiper/default-skin.svg +1 -0
  153. data/assets/images/photoswiper/preloader.gif +0 -0
  154. data/assets/images/play-store.png +0 -0
  155. data/assets/images/splash.gif +0 -0
  156. data/assets/img/posts/400x550.jpg +0 -0
  157. data/assets/img/posts/958x400.jpg +0 -0
  158. data/assets/js/common.js +737 -0
  159. data/assets/js/jquery-3.4.1.min.js +2 -0
  160. data/assets/js/mapbox.init.js +32 -0
  161. data/assets/js/plugins.js +33367 -0
  162. data/assets/js/plugins.min.js +106 -0
  163. data/assets/php/form-contact.php +95 -0
  164. data/assets/php/phpmailer/COMMITMENT +46 -0
  165. data/assets/php/phpmailer/LICENSE +502 -0
  166. data/assets/php/phpmailer/README.md +218 -0
  167. data/assets/php/phpmailer/SECURITY.md +28 -0
  168. data/assets/php/phpmailer/VERSION +1 -0
  169. data/assets/php/phpmailer/composer.json +55 -0
  170. data/assets/php/phpmailer/get_oauth_token.php +144 -0
  171. data/assets/php/phpmailer/language/phpmailer.lang-am.php +26 -0
  172. data/assets/php/phpmailer/language/phpmailer.lang-ar.php +27 -0
  173. data/assets/php/phpmailer/language/phpmailer.lang-az.php +26 -0
  174. data/assets/php/phpmailer/language/phpmailer.lang-ba.php +26 -0
  175. data/assets/php/phpmailer/language/phpmailer.lang-be.php +26 -0
  176. data/assets/php/phpmailer/language/phpmailer.lang-bg.php +26 -0
  177. data/assets/php/phpmailer/language/phpmailer.lang-ca.php +26 -0
  178. data/assets/php/phpmailer/language/phpmailer.lang-ch.php +26 -0
  179. data/assets/php/phpmailer/language/phpmailer.lang-cs.php +25 -0
  180. data/assets/php/phpmailer/language/phpmailer.lang-da.php +26 -0
  181. data/assets/php/phpmailer/language/phpmailer.lang-de.php +25 -0
  182. data/assets/php/phpmailer/language/phpmailer.lang-el.php +25 -0
  183. data/assets/php/phpmailer/language/phpmailer.lang-eo.php +25 -0
  184. data/assets/php/phpmailer/language/phpmailer.lang-es.php +26 -0
  185. data/assets/php/phpmailer/language/phpmailer.lang-et.php +27 -0
  186. data/assets/php/phpmailer/language/phpmailer.lang-fa.php +27 -0
  187. data/assets/php/phpmailer/language/phpmailer.lang-fi.php +27 -0
  188. data/assets/php/phpmailer/language/phpmailer.lang-fo.php +26 -0
  189. data/assets/php/phpmailer/language/phpmailer.lang-fr.php +29 -0
  190. data/assets/php/phpmailer/language/phpmailer.lang-gl.php +26 -0
  191. data/assets/php/phpmailer/language/phpmailer.lang-he.php +26 -0
  192. data/assets/php/phpmailer/language/phpmailer.lang-hi.php +26 -0
  193. data/assets/php/phpmailer/language/phpmailer.lang-hr.php +26 -0
  194. data/assets/php/phpmailer/language/phpmailer.lang-hu.php +26 -0
  195. data/assets/php/phpmailer/language/phpmailer.lang-id.php +27 -0
  196. data/assets/php/phpmailer/language/phpmailer.lang-it.php +27 -0
  197. data/assets/php/phpmailer/language/phpmailer.lang-ja.php +27 -0
  198. data/assets/php/phpmailer/language/phpmailer.lang-ka.php +26 -0
  199. data/assets/php/phpmailer/language/phpmailer.lang-ko.php +26 -0
  200. data/assets/php/phpmailer/language/phpmailer.lang-lt.php +26 -0
  201. data/assets/php/phpmailer/language/phpmailer.lang-lv.php +26 -0
  202. data/assets/php/phpmailer/language/phpmailer.lang-mg.php +25 -0
  203. data/assets/php/phpmailer/language/phpmailer.lang-ms.php +26 -0
  204. data/assets/php/phpmailer/language/phpmailer.lang-nb.php +25 -0
  205. data/assets/php/phpmailer/language/phpmailer.lang-nl.php +26 -0
  206. data/assets/php/phpmailer/language/phpmailer.lang-pl.php +26 -0
  207. data/assets/php/phpmailer/language/phpmailer.lang-pt.php +26 -0
  208. data/assets/php/phpmailer/language/phpmailer.lang-pt_br.php +29 -0
  209. data/assets/php/phpmailer/language/phpmailer.lang-ro.php +26 -0
  210. data/assets/php/phpmailer/language/phpmailer.lang-ru.php +27 -0
  211. data/assets/php/phpmailer/language/phpmailer.lang-sk.php +27 -0
  212. data/assets/php/phpmailer/language/phpmailer.lang-sl.php +27 -0
  213. data/assets/php/phpmailer/language/phpmailer.lang-sr.php +27 -0
  214. data/assets/php/phpmailer/language/phpmailer.lang-sv.php +26 -0
  215. data/assets/php/phpmailer/language/phpmailer.lang-tl.php +27 -0
  216. data/assets/php/phpmailer/language/phpmailer.lang-tr.php +30 -0
  217. data/assets/php/phpmailer/language/phpmailer.lang-uk.php +27 -0
  218. data/assets/php/phpmailer/language/phpmailer.lang-vi.php +26 -0
  219. data/assets/php/phpmailer/language/phpmailer.lang-zh.php +28 -0
  220. data/assets/php/phpmailer/language/phpmailer.lang-zh_cn.php +28 -0
  221. data/assets/php/phpmailer/src/Exception.php +39 -0
  222. data/assets/php/phpmailer/src/OAuth.php +138 -0
  223. data/assets/php/phpmailer/src/PHPMailer.php +4502 -0
  224. data/assets/php/phpmailer/src/POP3.php +419 -0
  225. data/assets/php/phpmailer/src/SMTP.php +1326 -0
  226. data/assets/videos/video-1.mp4 +0 -0
  227. data/assets/videos/video-2.mp4 +0 -0
  228. metadata +283 -0
@@ -0,0 +1,737 @@
1
+ /*
2
+ * Author: ArtStyles (ArtTemplate)
3
+ * Template Name: vCard 4
4
+ * Version: 1.0.0
5
+ */
6
+
7
+ $(document).ready(function() {
8
+
9
+ 'use strict';
10
+
11
+ /*-----------------------------------------------------------------
12
+ Detect device mobile
13
+ -------------------------------------------------------------------*/
14
+
15
+ var isMobile = false;
16
+ if( /Android|webOS|iPhone|iPod|iPad|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
17
+ $('html').addClass('touch');
18
+ isMobile = true;
19
+ }
20
+ else {
21
+ $('html').addClass('no-touch');
22
+ isMobile = false;
23
+ }
24
+
25
+
26
+ /*-----------------------------------------------------------------
27
+ Show/hide additional info
28
+ -------------------------------------------------------------------*/
29
+
30
+ $('.js-btn-toggle').on('click', function(e) {
31
+ $('.js-show').toggle('slow');
32
+ e.preventDefault();
33
+ });
34
+
35
+
36
+ /*-----------------------------------------------------------------
37
+ Carousel
38
+ -------------------------------------------------------------------*/
39
+
40
+ // Testimonials
41
+ $('.js-carousel-review').each(function() {
42
+ var testimonialsCarousel = new Swiper('.js-carousel-review', {
43
+ slidesPerView: 2,
44
+ spaceBetween: 30,
45
+ speed: 300,
46
+ grabCursor: true,
47
+ watchOverflow: true,
48
+ pagination: {
49
+ el: '.swiper-pagination',
50
+ clickable: true
51
+ },
52
+ /*autoplay: {
53
+ delay: 5000,
54
+ },*/
55
+ breakpoints: {
56
+ 580: {
57
+ slidesPerView: 1,
58
+ spaceBetween: 20
59
+ },
60
+ 991: {
61
+ slidesPerView: 1
62
+ }
63
+ }
64
+ });
65
+ });
66
+
67
+ // Clients
68
+ $('.js-carousel-clients').each(function() {
69
+ var clientCarousel = new Swiper('.js-carousel-clients', {
70
+ slidesPerView: 4,
71
+ spaceBetween: 30,
72
+ //loop: true,
73
+ grabCursor: true,
74
+ watchOverflow: true,
75
+ pagination: {
76
+ el: '.swiper-pagination',
77
+ clickable: true
78
+ },
79
+ breakpoints: {
80
+ 320: {
81
+ slidesPerView: 2,
82
+ spaceBetween: 0
83
+ },
84
+ 580: {
85
+ slidesPerView: 3,
86
+ spaceBetween: 30
87
+ },
88
+ 991: {
89
+ slidesPerView: 3,
90
+ spaceBetween: 30
91
+ }
92
+ }
93
+ });
94
+ });
95
+
96
+ // Project carousel
97
+ $('.js-carousel-project').each(function() {
98
+ var projectCarousel = new Swiper('.js-carousel-project', {
99
+ loop: true,
100
+ slidesPerView: 'auto',
101
+ spaceBetween: 30,
102
+ centeredSlides: true,
103
+ speed: 300,
104
+ grabCursor: true,
105
+ watchOverflow: true,
106
+ pagination: {
107
+ el: '.swiper-pagination',
108
+ clickable: true
109
+ },
110
+ /*autoplay: {
111
+ delay: 5000,
112
+ },*/
113
+ breakpoints: {
114
+ 580: {
115
+ slidesPerView: 1,
116
+ spaceBetween: 20
117
+ },
118
+ 991: {
119
+ slidesPerView: 1
120
+ }
121
+ }
122
+ });
123
+ });
124
+
125
+
126
+ /*-----------------------------------------------------------------
127
+ Sticky sidebar
128
+ -------------------------------------------------------------------*/
129
+
130
+ function activeStickyKit() {
131
+ $('.sticky-column').stick_in_parent({
132
+ parent: '.sticky-parent'
133
+ });
134
+
135
+ // bootstrap col position
136
+ $('.sticky-column')
137
+ .on('sticky_kit:bottom', function(e) {
138
+ $(this).parent().css('position', 'static');
139
+ })
140
+ .on('sticky_kit:unbottom', function(e) {
141
+ $(this).parent().css('position', 'relative');
142
+ });
143
+ };
144
+ activeStickyKit();
145
+
146
+ function detachStickyKit() {
147
+ $('.sticky-column').trigger("sticky_kit:detach");
148
+ };
149
+
150
+ // stop sticky kit
151
+ // based on your window width
152
+
153
+ var screen = 1200;
154
+
155
+ var windowHeight, windowWidth;
156
+ windowWidth = $(window).width();
157
+ if ((windowWidth < screen)) {
158
+ detachStickyKit();
159
+ } else {
160
+ activeStickyKit();
161
+ }
162
+
163
+ // windowSize
164
+ // window resize
165
+ function windowSize() {
166
+ windowHeight = window.innerHeight ? window.innerHeight : $(window).height();
167
+ windowWidth = window.innerWidth ? window.innerWidth : $(window).width();
168
+ }
169
+ windowSize();
170
+
171
+ function debounce(func, wait, immediate) {
172
+ var timeout;
173
+ return function() {
174
+ var context = this, args = arguments;
175
+ var later = function() {
176
+ timeout = null;
177
+ if (!immediate) func.apply(context, args);
178
+ };
179
+ var callNow = immediate && !timeout;
180
+ clearTimeout(timeout);
181
+ timeout = setTimeout(later, wait);
182
+ if (callNow) func.apply(context, args);
183
+ };
184
+ };
185
+
186
+ $(window).resize(debounce(function(){
187
+ windowSize();
188
+ $(document.body).trigger("sticky_kit:recalc");
189
+ if (windowWidth < screen) {
190
+ detachStickyKit();
191
+ } else {
192
+ activeStickyKit();
193
+ }
194
+ }, 250));
195
+
196
+
197
+ /*-----------------------------------------------------------------
198
+ Progress bar
199
+ -------------------------------------------------------------------*/
200
+
201
+ function progressBar() {
202
+ $('.progress').each(function() {
203
+ var ctrl = new ScrollMagic.Controller();
204
+ new ScrollMagic.Scene({
205
+ triggerElement: '.progress',
206
+ triggerHook: 'onEnter',
207
+ duration: 300
208
+ })
209
+ .addTo(ctrl)
210
+ .on("enter", function (e) {
211
+ var progressBar = $('.progress-bar span');
212
+ progressBar.each(function(indx){
213
+ $(this).css({'width': $(this).attr('aria-valuenow') + '%', 'z-index': '2'});
214
+ });
215
+ });
216
+ });
217
+ }
218
+
219
+ progressBar(); //Init
220
+
221
+ /*-----------------------------------------------------------------
222
+ Scroll indicator
223
+ -------------------------------------------------------------------*/
224
+
225
+ function scrollIndicator() {
226
+ $(window).on('scroll', function() {
227
+ var wintop = $(window).scrollTop(), docheight =
228
+ $(document).height(), winheight = $(window).height();
229
+ var scrolled = (wintop/(docheight-winheight))*100;
230
+ $('.scroll-line').css('width', (scrolled + '%'));
231
+ });
232
+ }
233
+
234
+ scrollIndicator(); //Init
235
+
236
+
237
+ /*-----------------------------------------------------------------
238
+ ScrollTo
239
+ -------------------------------------------------------------------*/
240
+
241
+ function scrollToTop() {
242
+ var $backToTop = $('.back-to-top'),
243
+ $showBackTotop = $(window).height();
244
+
245
+ $backToTop.hide();
246
+
247
+ $(window).scroll( function() {
248
+ var windowScrollTop = $(window).scrollTop();
249
+ if( windowScrollTop > $showBackTotop ) {
250
+ $backToTop.fadeIn('fast');
251
+ } else {
252
+ $backToTop.fadeOut('fast');
253
+ }
254
+ });
255
+
256
+ $backToTop.on('click', function (e) {
257
+ e.preventDefault();
258
+ $(' body, html ').animate( {scrollTop : 0}, 'fast' );
259
+ });
260
+ }
261
+
262
+ scrollToTop(); //Init
263
+
264
+
265
+ /*-----------------------------------------------------------------
266
+ Style background image
267
+ -------------------------------------------------------------------*/
268
+
269
+ $('.js-image').each(function(){
270
+ var dataImage = $(this).attr('data-image');
271
+ $(this).css('background-image', 'url(' + dataImage + ')');
272
+ });
273
+
274
+
275
+ /*-----------------------------------------------------------------
276
+ Autoresize textarea
277
+ -------------------------------------------------------------------*/
278
+
279
+ $('textarea').each(function(){
280
+ autosize(this);
281
+ });
282
+
283
+
284
+ /*-----------------------------------------------------------------
285
+ Switch categories & Filter mobile
286
+ -------------------------------------------------------------------*/
287
+
288
+ $('.select').on('click','.placeholder',function(){
289
+ var parent = $(this).closest('.select');
290
+ if ( ! parent.hasClass('is-open')){
291
+ parent.addClass('is-open');
292
+ $('.select.is-open').not(parent).removeClass('is-open');
293
+ } else{
294
+ parent.removeClass('is-open');
295
+ }
296
+ }).on('click','ul>li',function(){
297
+ var parent = $(this).closest('.select');
298
+ parent.removeClass('is-open').find('.placeholder').text( $(this).text() );
299
+ parent.find('input[type=hidden]').attr('value', $(this).attr('data-value') );
300
+
301
+ $('.filter__item').removeClass('active');
302
+ $(this).addClass('active');
303
+ var selector = $(this).attr('data-filter');
304
+
305
+ $('.js-filter-container').isotope({
306
+ filter: selector
307
+ });
308
+ return false;
309
+ });
310
+
311
+
312
+ /*-----------------------------------------------------------------
313
+ Masonry
314
+ -------------------------------------------------------------------*/
315
+
316
+ // Portfolio
317
+ var $portfolioMasonry = $('.js-masonry').isotope({
318
+ itemSelector: '.gallery-grid__item',
319
+ layoutMode: 'fitRows',
320
+ percentPosition: true,
321
+ resizable: false,
322
+ transitionDuration: '0.5s',
323
+ hiddenStyle: {
324
+ opacity: 0,
325
+ transform: 'scale(0.001)'
326
+ },
327
+ visibleStyle: {
328
+ opacity: 1,
329
+ transform: 'scale(1)'
330
+ },
331
+ fitRows: {
332
+ gutter: '.gutter-sizer'
333
+ },
334
+ masonry: {
335
+ columnWidth: '.gallery-grid__item',
336
+ gutter: '.gutter-sizer',
337
+ isAnimated: true
338
+ }
339
+ });
340
+
341
+ $portfolioMasonry.imagesLoaded().progress( function() {
342
+ $portfolioMasonry.isotope ({
343
+ columnWidth: '.gallery-grid__item',
344
+ gutter: '.gutter-sizer',
345
+ isAnimated: true,
346
+ layoutMode: 'fitRows',
347
+ resizable: false,
348
+ fitRows: {
349
+ gutter: '.gutter-sizer'
350
+ }
351
+ });
352
+ });
353
+
354
+
355
+ /*-----------------------------------------------------------------
356
+ Tabs
357
+ -------------------------------------------------------------------*/
358
+
359
+ // on load of the page: switch to the currently selected tab
360
+ var hash = document.location.hash; //var hash = window.location.hash;
361
+ var prefix = "tab_";
362
+ if (hash) {
363
+ $('.nav a[href="'+hash.replace(prefix,"")+'"]').tab('show');
364
+ }
365
+ // Change hash for page-reload
366
+ $('ul.nav > li > a').on('shown.bs.tab', function (e) {
367
+ window.location.hash = e.target.hash.replace("#", "#" + prefix);
368
+ });
369
+
370
+ $('a[data-bs-toggle=tab]').each(function () {
371
+ var $this = $(this);
372
+ $this.on('shown.bs.tab', function () {
373
+ $portfolioMasonry.isotope ({
374
+ itemSelector: '.gallery-grid__item',
375
+ columnWidth: '.gallery-grid__item',
376
+ gutter: '.gutter-sizer',
377
+ isAnimated: true
378
+ });
379
+ }); //end shown
380
+ }); //end each
381
+
382
+
383
+ /*-----------------------------------------------------------------
384
+ niceScroll
385
+ -------------------------------------------------------------------*/
386
+
387
+ $('textarea').niceScroll({
388
+ horizrailenabled: false,
389
+ cursorcolor: "#383838",
390
+ cursorborder: '0',
391
+ cursorwidth: '3px',
392
+ railpadding: { top: 10, right: 2, left: 0, bottom: 10 }
393
+ });
394
+
395
+
396
+ /*-----------------------------------------------------------------
397
+ emoji add in textarea
398
+ -------------------------------------------------------------------*/
399
+
400
+ $(function() {
401
+ $('.emoji-wrap img').on('click', function(){
402
+ var emoji = $(this).attr('title');
403
+ $('#commentForm').val($('#commentForm').val()+" "+emoji+" ");
404
+ });
405
+ });
406
+
407
+
408
+ /*-----------------------------------------------------------------
409
+ mediumZoom
410
+ -------------------------------------------------------------------*/
411
+
412
+ mediumZoom('[data-zoom]', {
413
+ margin: 30
414
+ });
415
+
416
+ /*-----------------------------------------------------------------
417
+ magnificPopup
418
+ -------------------------------------------------------------------*/
419
+
420
+ $('.js-open-review').magnificPopup({
421
+ type: 'inline',
422
+ midClick: true,
423
+ fixedContentPos:true,
424
+ removalDelay: 500, //delay removal by X to allow out-animation
425
+ callbacks: {
426
+ beforeOpen: function() {
427
+ this.st.mainClass = this.st.el.attr('data-effect');
428
+ }
429
+ },
430
+ });
431
+
432
+ /*-----------------------------------------------------------------
433
+ Lazyload
434
+ -------------------------------------------------------------------*/
435
+
436
+ lazySizes.init();
437
+
438
+
439
+ /*-----------------------------------------------------------------
440
+ Polyfill object-fit
441
+ -------------------------------------------------------------------*/
442
+
443
+ var $someImages = $('img.cover');
444
+ objectFitImages($someImages);
445
+
446
+
447
+ /*-----------------------------------------------------------------
448
+ Contacts form
449
+ -------------------------------------------------------------------*/
450
+
451
+ $("#contact-form").validator().on("submit", function (event) {
452
+ if (event.isDefaultPrevented()) {
453
+ formError();
454
+ submitMSG(false, "Please fill in the form...");
455
+ } else {
456
+ event.preventDefault();
457
+ submitForm();
458
+ }
459
+ });
460
+
461
+ function submitForm(){
462
+ var name = $("#nameContact").val(),
463
+ email = $("#emailContact").val(),
464
+ message = $("#messageContact").val();
465
+
466
+ var url = "assets/php/form-contact.php";
467
+
468
+ $.ajax({
469
+ type: "POST",
470
+ url: url,
471
+ data: "name=" + name + "&email=" + email + "&message=" + message,
472
+ success : function(text){
473
+ if (text == "success"){
474
+ formSuccess();
475
+ } else {
476
+ formError();
477
+ submitMSG(false,text);
478
+ }
479
+ }
480
+ });
481
+ }
482
+
483
+ function formSuccess(){
484
+ $("#contact-form")[0].reset();
485
+ submitMSG(true, "Thanks! Your message has been sent.");
486
+ }
487
+
488
+ function formError(){
489
+ $("#contactForm").removeClass().addClass('shake animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
490
+ $(this).removeClass();
491
+ });
492
+ }
493
+
494
+ function submitMSG(valid, msg){
495
+ var msgClasses;
496
+ if(valid){
497
+ msgClasses = "validation-success";
498
+ } else {
499
+ msgClasses = "validation-danger";
500
+ }
501
+ $("#validator-contact").removeClass().addClass(msgClasses).text(msg);
502
+ }
503
+
504
+
505
+ /*-----------------------------------------------------------------
506
+ PhotoSwiper
507
+ -------------------------------------------------------------------*/
508
+
509
+ var initPhotoSwipeFromDOM = function(gallerySelector) {
510
+ // parse slide data (url, title, size ...) from DOM elements
511
+ // (children of gallerySelector)
512
+ var parseThumbnailElements = function(el) {
513
+ var thumbElements = el.childNodes,
514
+ numNodes = thumbElements.length,
515
+ items = [],
516
+ figureEl,
517
+ linkEl,
518
+ size,
519
+ item;
520
+
521
+ for (var i = 0; i < numNodes; i++) {
522
+ figureEl = thumbElements[i]; // <figure> element
523
+
524
+ // include only element nodes
525
+ if (figureEl.nodeType !== 1) {
526
+ continue;
527
+ }
528
+
529
+ linkEl = figureEl.children[0]; // <a> element
530
+
531
+ size = linkEl.getAttribute("data-size").split("x");
532
+
533
+ // create slide object
534
+ item = {
535
+ src: linkEl.getAttribute("href"),
536
+ w: parseInt(size[0], 10),
537
+ h: parseInt(size[1], 10)
538
+ };
539
+
540
+ if (figureEl.children.length > 1) {
541
+ // <figcaption> content
542
+ item.title = figureEl.children[1].innerHTML;
543
+ }
544
+
545
+ if (linkEl.children.length > 0) {
546
+ // <img> thumbnail element, retrieving thumbnail url
547
+ item.msrc = linkEl.children[0].getAttribute("src");
548
+ }
549
+
550
+ item.el = figureEl; // save link to element for getThumbBoundsFn
551
+ items.push(item);
552
+ }
553
+
554
+ return items;
555
+ };
556
+
557
+ // find nearest parent element
558
+ var closest = function closest(el, fn) {
559
+ return el && (fn(el) ? el : closest(el.parentNode, fn));
560
+ };
561
+
562
+ // triggers when user clicks on thumbnail
563
+ var onThumbnailsClick = function(e) {
564
+ e = e || window.event;
565
+ e.preventDefault ? e.preventDefault() : (e.returnValue = false);
566
+
567
+ var eTarget = e.target || e.srcElement;
568
+
569
+ // find root element of slide
570
+ var clickedListItem = closest(eTarget, function(el) {
571
+ return el.tagName && el.tagName.toUpperCase() === "FIGURE";
572
+ });
573
+
574
+ if (!clickedListItem) {
575
+ return;
576
+ }
577
+
578
+ // find index of clicked item by looping through all child nodes
579
+ // alternatively, you may define index via data- attribute
580
+ var clickedGallery = clickedListItem.parentNode,
581
+ childNodes = clickedListItem.parentNode.childNodes,
582
+ numChildNodes = childNodes.length,
583
+ nodeIndex = 0,
584
+ index;
585
+
586
+ for (var i = 0; i < numChildNodes; i++) {
587
+ if (childNodes[i].nodeType !== 1) {
588
+ continue;
589
+ }
590
+
591
+ if (childNodes[i] === clickedListItem) {
592
+ index = nodeIndex;
593
+ break;
594
+ }
595
+ nodeIndex++;
596
+ }
597
+
598
+ if (index >= 0) {
599
+ // open PhotoSwipe if valid index found
600
+ openPhotoSwipe(index, clickedGallery);
601
+ }
602
+ return false;
603
+ };
604
+
605
+ // parse picture index and gallery index from URL (#&pid=1&gid=2)
606
+ var photoswipeParseHash = function() {
607
+ var hash = window.location.hash.substring(1),
608
+ params = {};
609
+
610
+ if (hash.length < 5) {
611
+ return params;
612
+ }
613
+
614
+ var vars = hash.split("&");
615
+ for (var i = 0; i < vars.length; i++) {
616
+ if (!vars[i]) {
617
+ continue;
618
+ }
619
+ var pair = vars[i].split("=");
620
+ if (pair.length < 2) {
621
+ continue;
622
+ }
623
+ params[pair[0]] = pair[1];
624
+ }
625
+
626
+ if (params.gid) {
627
+ params.gid = parseInt(params.gid, 10);
628
+ }
629
+
630
+ return params;
631
+ };
632
+
633
+ var openPhotoSwipe = function(
634
+ index,
635
+ galleryElement,
636
+ disableAnimation,
637
+ fromURL
638
+ ) {
639
+ var pswpElement = document.querySelectorAll(".pswp")[0],
640
+ gallery,
641
+ options,
642
+ items;
643
+
644
+ items = parseThumbnailElements(galleryElement);
645
+ options = {
646
+ // Buttons/elements
647
+ closeEl: true,
648
+ captionEl: true,
649
+ fullscreenEl: true,
650
+ zoomEl: true,
651
+ shareEl: false,
652
+ counterEl: false,
653
+ arrowEl: true,
654
+ preloaderEl: true,
655
+ // define gallery index (for URL)
656
+ galleryUID: galleryElement.getAttribute("data-pswp-uid"),
657
+ getThumbBoundsFn: function(index) {
658
+ // See Options -> getThumbBoundsFn section of documentation for more info
659
+ var thumbnail = items[index].el.getElementsByTagName("img")[0], // find thumbnail
660
+ pageYScroll =
661
+ window.pageYOffset || document.documentElement.scrollTop,
662
+ rect = thumbnail.getBoundingClientRect();
663
+
664
+ return { x: rect.left, y: rect.top + pageYScroll, w: rect.width };
665
+ }
666
+ };
667
+
668
+ // PhotoSwipe opened from URL
669
+ if (fromURL) {
670
+ if (options.galleryPIDs) {
671
+ for (var j = 0; j < items.length; j++) {
672
+ if (items[j].pid == index) {
673
+ options.index = j;
674
+ break;
675
+ }
676
+ }
677
+ } else {
678
+ // in URL indexes start from 1
679
+ options.index = parseInt(index, 10) - 1;
680
+ }
681
+ } else {
682
+ options.index = parseInt(index, 10);
683
+ }
684
+
685
+ // exit if index not found
686
+ if (isNaN(options.index)) {
687
+ return;
688
+ }
689
+
690
+ if (disableAnimation) {
691
+ options.showAnimationDuration = 0;
692
+ }
693
+
694
+ // Pass data to PhotoSwipe and initialize it
695
+ gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
696
+ gallery.init();
697
+
698
+ gallery.listen("unbindEvents", function() {
699
+ // The index of the current photoswipe slide
700
+ var getCurrentIndex = gallery.getCurrentIndex();
701
+ // Update position of the slider
702
+ //projectCarousel.slideTo(getCurrentIndex, 0, false);
703
+ // 2/2. Start swiper autoplay (on close - if swiper autoplay is true)
704
+ //projectCarousel.autoplay.start();
705
+ });
706
+ // 2/2. Extra Code (Not from photoswipe) - swiper autoplay stop when image in zoom mode (When lightbox is open) */
707
+ /*gallery.listen('initialZoomIn', function() {
708
+ if(projectCarousel.autoplay.running){
709
+ projectCarousel.autoplay.stop();
710
+ }
711
+ });*/
712
+ };
713
+
714
+ // loop through all gallery elements and bind events
715
+ var galleryElements = document.querySelectorAll(gallerySelector);
716
+
717
+ for (var i = 0, l = galleryElements.length; i < l; i++) {
718
+ galleryElements[i].setAttribute("data-pswp-uid", i + 1);
719
+ galleryElements[i].onclick = onThumbnailsClick;
720
+ }
721
+
722
+ // Parse URL and open gallery if it contains #&pid=3&gid=1
723
+ var hashData = photoswipeParseHash();
724
+ if (hashData.pid && hashData.gid) {
725
+ openPhotoSwipe(hashData.pid, galleryElements[hashData.gid - 1], true, true);
726
+ }
727
+ };
728
+
729
+ // execute above function
730
+ initPhotoSwipeFromDOM(".project-gallery");
731
+ });
732
+
733
+ $(window).on('load', function() { // makes sure the whole site is loaded
734
+ $('#status').fadeOut(); // will first fade out the loading animation
735
+ $('#preloader').delay(350).fadeOut('slow'); // will fade out the white DIV that covers the website.
736
+ $('body').delay(350).css({'overflow':'visible'});
737
+ });