├── img ├── main_bg.png ├── main_photo.jpg └── testimonials │ ├── testimonial-1.jpg │ ├── testimonial-2.jpg │ └── testimonial-3.jpg ├── README.md ├── css ├── fonts │ ├── linear-icons-font │ │ ├── fonts │ │ │ └── Linearicons-Free.woff2 │ │ └── style.css │ └── fontawesome-free-5.12.1-web │ │ └── webfonts │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.woff2 │ │ └── Linearicons-Free.woff2 ├── owl.carousel.css ├── magnific-popup.css └── normalize.css ├── js ├── imagesloaded.pkgd.min.js ├── main.js ├── modernizr.custom.js ├── jquery.googlemap.js ├── validator.js ├── jquery.shuffle.min.js ├── jquery.magnific-popup.min.js └── masonry.pkgd.min.js ├── contact.html ├── project.html ├── portfolio.html ├── resume.html └── index.html /img/main_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/img/main_bg.png -------------------------------------------------------------------------------- /img/main_photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/img/main_photo.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # portfolio7 2 | Sample website not fully filled/completed webiste>fork if u like this dont forget to starthe repo 3 | -------------------------------------------------------------------------------- /img/testimonials/testimonial-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/img/testimonials/testimonial-1.jpg -------------------------------------------------------------------------------- /img/testimonials/testimonial-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/img/testimonials/testimonial-2.jpg -------------------------------------------------------------------------------- /img/testimonials/testimonial-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/img/testimonials/testimonial-3.jpg -------------------------------------------------------------------------------- /css/fonts/linear-icons-font/fonts/Linearicons-Free.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/css/fonts/linear-icons-font/fonts/Linearicons-Free.woff2 -------------------------------------------------------------------------------- /css/fonts/fontawesome-free-5.12.1-web/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/css/fonts/fontawesome-free-5.12.1-web/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /css/fonts/fontawesome-free-5.12.1-web/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/css/fonts/fontawesome-free-5.12.1-web/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /css/fonts/fontawesome-free-5.12.1-web/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/css/fonts/fontawesome-free-5.12.1-web/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /css/fonts/fontawesome-free-5.12.1-web/webfonts/Linearicons-Free.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALBINPRAVEEN/portfolio7/HEAD/css/fonts/fontawesome-free-5.12.1-web/webfonts/Linearicons-Free.woff2 -------------------------------------------------------------------------------- /css/owl.carousel.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.0 3 | * Copyright 2013-2016 David Deutsch 4 | * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) 5 | */ 6 | /* 7 | * Owl Carousel - Core 8 | */ 9 | .owl-carousel { 10 | display: none; 11 | width: 100%; 12 | -webkit-tap-highlight-color: transparent; 13 | /* position relative and z-index fix webkit rendering fonts issue */ 14 | position: relative; 15 | z-index: 1; } 16 | .owl-carousel .owl-stage { 17 | position: relative; 18 | -ms-touch-action: pan-Y; } 19 | .owl-carousel .owl-stage:after { 20 | content: "."; 21 | display: block; 22 | clear: both; 23 | visibility: hidden; 24 | line-height: 0; 25 | height: 0; } 26 | .owl-carousel .owl-stage-outer { 27 | position: relative; 28 | overflow: hidden; 29 | /* fix for flashing background */ 30 | -webkit-transform: translate3d(0px, 0px, 0px); } 31 | .owl-carousel .owl-item { 32 | position: relative; 33 | min-height: 1px; 34 | float: left; 35 | -webkit-backface-visibility: hidden; 36 | -webkit-tap-highlight-color: transparent; 37 | -webkit-touch-callout: none; } 38 | .owl-carousel .owl-item img { 39 | display: block; 40 | width: 100%; 41 | -webkit-transform-style: preserve-3d; } 42 | .owl-carousel .owl-nav.disabled, 43 | .owl-carousel .owl-dots.disabled { 44 | display: none; } 45 | .owl-carousel .owl-nav .owl-prev, 46 | .owl-carousel .owl-nav .owl-next, 47 | .owl-carousel .owl-dot { 48 | cursor: pointer; 49 | cursor: hand; 50 | -webkit-user-select: none; 51 | -khtml-user-select: none; 52 | -moz-user-select: none; 53 | -ms-user-select: none; 54 | user-select: none; } 55 | .owl-carousel.owl-loaded { 56 | display: block; } 57 | .owl-carousel.owl-loading { 58 | opacity: 0; 59 | display: block; } 60 | .owl-carousel.owl-hidden { 61 | opacity: 0; } 62 | .owl-carousel.owl-refresh .owl-item { 63 | visibility: hidden; } 64 | .owl-carousel.owl-drag .owl-item { 65 | -webkit-user-select: none; 66 | -moz-user-select: none; 67 | -ms-user-select: none; 68 | user-select: none; } 69 | .owl-carousel.owl-grab { 70 | cursor: move; 71 | cursor: grab; } 72 | .owl-carousel.owl-rtl { 73 | direction: rtl; } 74 | .owl-carousel.owl-rtl .owl-item { 75 | float: right; } 76 | 77 | /* No Js */ 78 | .no-js .owl-carousel { 79 | display: block; } 80 | 81 | /* 82 | * Owl Carousel - Animate Plugin 83 | */ 84 | .owl-carousel .animated { 85 | -webkit-animation-duration: 1000ms; 86 | animation-duration: 1000ms; 87 | -webkit-animation-fill-mode: both; 88 | animation-fill-mode: both; } 89 | 90 | .owl-carousel .owl-animated-in { 91 | z-index: 0; } 92 | 93 | .owl-carousel .owl-animated-out { 94 | z-index: 1; } 95 | 96 | .owl-carousel .fadeOut { 97 | -webkit-animation-name: fadeOut; 98 | animation-name: fadeOut; } 99 | 100 | @-webkit-keyframes fadeOut { 101 | 0% { 102 | opacity: 1; } 103 | 100% { 104 | opacity: 0; } } 105 | 106 | @keyframes fadeOut { 107 | 0% { 108 | opacity: 1; } 109 | 100% { 110 | opacity: 0; } } 111 | 112 | /* 113 | * Owl Carousel - Auto Height Plugin 114 | */ 115 | .owl-height { 116 | transition: height 500ms ease-in-out; } 117 | 118 | /* 119 | * Owl Carousel - Lazy Load Plugin 120 | */ 121 | .owl-carousel .owl-item .owl-lazy { 122 | opacity: 0; 123 | transition: opacity 400ms ease; } 124 | 125 | .owl-carousel .owl-item img.owl-lazy { 126 | -webkit-transform-style: preserve-3d; 127 | transform-style: preserve-3d; } 128 | 129 | /* 130 | * Owl Carousel - Video Plugin 131 | */ 132 | .owl-carousel .owl-video-wrapper { 133 | position: relative; 134 | height: 100%; 135 | background: #000; } 136 | 137 | .owl-carousel .owl-video-play-icon { 138 | position: absolute; 139 | height: 80px; 140 | width: 80px; 141 | left: 50%; 142 | top: 50%; 143 | margin-left: -40px; 144 | margin-top: -40px; 145 | background: url("owl.video.play.png") no-repeat; 146 | cursor: pointer; 147 | z-index: 1; 148 | -webkit-backface-visibility: hidden; 149 | transition: -webkit-transform 100ms ease; 150 | transition: transform 100ms ease; } 151 | 152 | .owl-carousel .owl-video-play-icon:hover { 153 | -webkit-transform: scale(1.3, 1.3); 154 | -ms-transform: scale(1.3, 1.3); 155 | transform: scale(1.3, 1.3); } 156 | 157 | .owl-carousel .owl-video-playing .owl-video-tn, 158 | .owl-carousel .owl-video-playing .owl-video-play-icon { 159 | display: none; } 160 | 161 | .owl-carousel .owl-video-tn { 162 | opacity: 0; 163 | height: 100%; 164 | background-position: center center; 165 | background-repeat: no-repeat; 166 | background-size: contain; 167 | transition: opacity 400ms ease; } 168 | 169 | .owl-carousel .owl-video-frame { 170 | position: relative; 171 | z-index: 1; 172 | height: 100%; 173 | width: 100%; } 174 | -------------------------------------------------------------------------------- /js/imagesloaded.pkgd.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * imagesLoaded PACKAGED v4.1.1 3 | * JavaScript is all like "You images are done yet or what?" 4 | * MIT License 5 | */ 6 | 7 | !function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}(window,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;i'+t+"";a&&t&&(r("#contact_form").find(".messages").html(o),r("#contact_form")[0].reset())}}),!1}})}),r(window).on("load",function(){var e,a,t;r(".preloader").fadeOut(800,"linear"),e=r(window).width(),a="",t=r("#page_container").attr("data-animation"),(a=r(991
',patterns:{youtube:{index:"youtube.com/",id:null,src:"%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}},srcAction:"iframe_src"},callbacks:{markupParse:function(e,a,t){a.title=t.el.attr("title")}}}),r(".ajax-page-load-link").magnificPopup({type:"ajax",removalDelay:300,mainClass:"mfp-fade",gallery:{enabled:!0}}),r(".portfolio-page-wrapper .portfolio-grid").each(function(){r(this).magnificPopup({delegate:"a.gallery-lightbox",type:"image",gallery:{enabled:!0}})}),r(".form-control").val(""),r(".form-control").on("focusin",function(){r(this).parent(".form-group").addClass("form-group-focus")}),r(".form-control").on("focusout",function(){0===r(this).val().length&&r(this).parent(".form-group").removeClass("form-group-focus")}),r("body").append(''),s(),r(".sidebar-toggle").on("click",function(){r("#blog-sidebar").toggleClass("open"),r(this).toggleClass("open")}),r(".lmpixels-scroll-to-top").click(function(){return r("body,html").animate({scrollTop:0},400),!1}),r("#map").googleMap({zoom:16}),r("#map").addMarker({address:"S601 Townsend Street, San Francisco, California, USA"}),d(),t="",r(".skill-container").each(function(){var e=r(this).attr("data-value");if(101<=e&&(e="100"),void 0!==e){var a=r(this).attr("id");t+="#"+a+" .skill-percentage { width: "+e+"%; } "}}),r("head").append('")})}(jQuery); -------------------------------------------------------------------------------- /js/modernizr.custom.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.8.3 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-cssanimations-csstransforms-csstransforms3d-csstransitions-touch-shiv-cssclasses-prefixed-teststyles-testprop-testallprops-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:w(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},q.cssanimations=function(){return F("animationName")},q.csstransforms=function(){return!!F("transform")},q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return F("transition")};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,e.prefixed=function(a,b,c){return b?F(a,b,c):F(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f 2 | 3 | 4 | 5 | 6 | ALBIN PRAVEEN 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 |
30 |
31 |
32 |
33 |
34 | 35 | 36 | 37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 | 88 | 89 | 90 | 91 |
92 |
93 |
94 | 95 |
96 |

Contact

97 |
98 |

Get in Touch

99 |
100 |
101 | 102 |
103 | 104 |
105 |
106 |
107 |
108 |
109 | 110 |
111 |
112 | 113 |
114 | 115 |
116 |
117 | 118 |
119 |
120 |

+91 702574302

121 |

I may be slow to respond.

122 |
123 |
124 | 125 |
126 |
127 | 128 |
129 |
130 |

Kerala , India

131 |

Duis erat leo, aliquam laoreet fringilla quis, pretium vitae dui.

132 |
133 |
134 | 135 |
136 |
137 | 138 |
139 |
140 |

albinpraveen135790@gmail.com

141 |

Duis erat leo, aliquam laoreet fringilla quis, pretium vitae dui.

142 |
143 |
144 |
145 | 146 |
147 | 148 | 149 |
150 | 151 |
152 |

How Can I Help You?

153 |
154 | 155 |
156 | 157 |
158 | 159 |
160 |
161 |
162 |
163 | 164 |
165 |
166 |
167 | 168 |
169 | 170 |
171 |
172 |
173 | 174 |
175 | 176 |
177 |
178 |
179 |
180 |
181 |
182 | 183 |
184 |
185 |
186 |
187 |
188 | 189 | 190 | 191 |
192 |
193 | 194 |
195 | 196 | 197 |
198 | 199 |
200 |
201 |
202 |
203 | 204 | 205 |
206 | 229 | 230 | 233 |
234 | 235 | 236 |
237 |
238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | -------------------------------------------------------------------------------- /js/jquery.googlemap.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | $.fn.googleMap = function(params) { 4 | params = $.extend( { 5 | zoom : 10, 6 | coords : [48.895651, 2.290569], 7 | type : "ROADMAP", 8 | debug : false, 9 | langage : "english", 10 | overviewMapControl: false, 11 | streetViewControl: false, 12 | scrollwheel: false, 13 | mapTypeControl: false 14 | }, params); 15 | 16 | switch(params.type) { 17 | case 'ROADMAP': 18 | case 'SATELLITE': 19 | case 'HYBRID': 20 | case 'TERRAIN': 21 | params.type = google.maps.MapTypeId[params.type]; 22 | break; 23 | default: 24 | params.type = google.maps.MapTypeId.ROADMAP; 25 | break; 26 | } 27 | 28 | this.each(function() { 29 | 30 | var map = new google.maps.Map(this, { 31 | zoom: params.zoom, 32 | center: new google.maps.LatLng(params.coords[0], params.coords[1]), 33 | mapTypeId: params.type, 34 | scrollwheel: params.scrollwheel, 35 | streetViewControl: params.streetViewControl, 36 | overviewMapControl: params.overviewMapControl, 37 | mapTypeControl: params.mapTypeControl 38 | 39 | }); 40 | 41 | $(this).data('googleMap', map); 42 | $(this).data('googleLang', params.langage); 43 | $(this).data('googleDebug', params.debug); 44 | $(this).data('googleMarker', new Array()); 45 | $(this).data('googleBound', new google.maps.LatLngBounds()); 46 | }); 47 | 48 | return this; 49 | } 50 | 51 | $.fn.addMarker = function(params) { 52 | params = $.extend( { 53 | coords : false, 54 | address : false, 55 | url : false, 56 | id : false, 57 | icon : false, 58 | draggable : false, 59 | title : "", 60 | text : "", 61 | success : function() {} 62 | }, params); 63 | 64 | this.each(function() { 65 | $this = $(this); 66 | 67 | if(!$this.data('googleMap')) { 68 | if($this.data('googleDebug')) 69 | console.error("jQuery googleMap : Unable to add a marker where there is no map !"); 70 | 71 | return false; 72 | } 73 | 74 | if(!params.coords && !params.address) { 75 | if($this.data('googleDebug')) 76 | console.error("jQuery googleMap : Unable to add a marker if you don't tell us where !"); 77 | 78 | return false; 79 | } 80 | 81 | if(params.address && typeof params.address == "string") { 82 | 83 | var geocodeAsync = function($that) { 84 | 85 | var geocoder = new google.maps.Geocoder(); 86 | 87 | geocoder.geocode({ 88 | address : params.address, 89 | bounds : $that.data('googleBound'), 90 | language : $that.data('googleLang') 91 | }, function(results, status) { 92 | 93 | if (status == google.maps.GeocoderStatus.OK) { 94 | $that.data('googleBound').extend(results[0].geometry.location); 95 | 96 | if(params.icon) { 97 | var marker = new google.maps.Marker({ 98 | map: $this.data('googleMap'), 99 | position: results[0].geometry.location, 100 | title: params.title, 101 | icon: params.icon, 102 | draggable: params.draggable 103 | }); 104 | } else { 105 | var marker = new google.maps.Marker({ 106 | map: $that.data('googleMap'), 107 | position: results[0].geometry.location, 108 | title: params.title, 109 | draggable: params.draggable 110 | }); 111 | } 112 | 113 | if(params.draggable) { 114 | google.maps.event.addListener(marker, 'dragend', function() { 115 | var location = marker.getPosition(); 116 | 117 | var coords = {}; 118 | 119 | coords.lat = location.lat(); 120 | coords.lon = location.lng(); 121 | 122 | params.success(coords, $this); 123 | }); 124 | } 125 | 126 | if(params.title != "" && params.text != "" && !params.url) { 127 | var infowindow = new google.maps.InfoWindow({ 128 | content: "

"+params.title+"

"+params.text 129 | }); 130 | 131 | var map = $that.data('googleMap'); 132 | 133 | google.maps.event.addListener(marker, 'click', function() { 134 | infowindow.open(map, marker); 135 | }); 136 | } else if(params.url) { 137 | google.maps.event.addListener(marker, 'click', function() { 138 | document.location = params.url; 139 | }); 140 | } 141 | 142 | if(!params.id) { 143 | $that.data('googleMarker').push(marker); 144 | } else { 145 | $that.data('googleMarker')[params.id] = marker; 146 | } 147 | 148 | if($that.data('googleMarker').length == 1) { 149 | $that.data('googleMap').setCenter(results[0].geometry.location); 150 | $that.data('googleMap').setZoom($that.data('googleMap').getZoom()); 151 | } else { 152 | $that.data('googleMap').fitBounds($that.data('googleBound')); 153 | } 154 | 155 | var coords = {}; 156 | coords.lat = results[0].geometry.location.lat(); 157 | coords.lon = results[0].geometry.location.lng(); 158 | 159 | params.success(coords, $this); 160 | 161 | } else { 162 | if($this.data('googleDebug')) 163 | console.error("jQuery googleMap : Unable to find the place asked for the marker ("+status+")"); 164 | } 165 | }); 166 | }($this); 167 | } else { 168 | $this.data('googleBound').extend(new google.maps.LatLng(params.coords[0], params.coords[1])); 169 | 170 | if(params.icon) { 171 | var marker = new google.maps.Marker({ 172 | map: $this.data('googleMap'), 173 | position: new google.maps.LatLng(params.coords[0], params.coords[1]), 174 | title: params.title, 175 | icon: params.icon, 176 | draggable: params.draggable 177 | }); 178 | } else { 179 | var marker = new google.maps.Marker({ 180 | map: $this.data('googleMap'), 181 | position: new google.maps.LatLng(params.coords[0], params.coords[1]), 182 | title: params.title, 183 | draggable: params.draggable 184 | }); 185 | } 186 | 187 | if(params.title != "" && params.text != "" && !params.url) { 188 | var infowindow = new google.maps.InfoWindow({ 189 | content: "

"+params.title+"

"+params.text 190 | }); 191 | 192 | var map = $this.data('googleMap'); 193 | 194 | google.maps.event.addListener(marker, 'click', function() { 195 | infowindow.open(map, marker); 196 | }); 197 | } else if(params.url) { 198 | google.maps.event.addListener(marker, 'click', function() { 199 | document.location = params.url; 200 | }); 201 | } 202 | 203 | if(params.draggable) { 204 | google.maps.event.addListener(marker, 'dragend', function() { 205 | var location = marker.getPosition(); 206 | 207 | var coords = {}; 208 | 209 | coords.lat = location.lat(); 210 | coords.lon = location.lng(); 211 | 212 | params.success(coords, $this); 213 | }); 214 | } 215 | 216 | if(!params.id) { 217 | $this.data('googleMarker').push(marker); 218 | } else { 219 | $this.data('googleMarker')[params.id] = marker; 220 | } 221 | 222 | if($this.data('googleMarker').length == 1) { 223 | $this.data('googleMap').setCenter(new google.maps.LatLng(params.coords[0], params.coords[1])); 224 | $this.data('googleMap').setZoom($this.data('googleMap').getZoom()); 225 | } else { 226 | $this.data('googleMap').fitBounds($this.data('googleBound')); 227 | } 228 | 229 | params.success({ 230 | lat: params.coords[0], 231 | lon: params.coords[1] 232 | }, $this); 233 | } 234 | }); 235 | 236 | return this; 237 | } 238 | 239 | $.fn.removeMarker = function(id) { 240 | this.each(function() { 241 | var $this = $(this); 242 | 243 | if(!$this.data('googleMap')) { 244 | if($this.data('googleDebug')) 245 | console.log("jQuery googleMap : Unable to delete a marker where there is no map !"); 246 | 247 | return false; 248 | } 249 | 250 | var $markers = $this.data('googleMarker'); 251 | 252 | if(typeof $markers[id] != 'undefined') { 253 | $markers[id].setMap(null); 254 | 255 | if($this.data('googleDebug')) 256 | console.log('jQuery googleMap : marker deleted'); 257 | 258 | return true; 259 | } else { 260 | if($this.data('googleDebug')) 261 | console.error("jQuery googleMap : Unable to delete a marker if it not exists !"); 262 | 263 | return false; 264 | } 265 | }); 266 | } 267 | 268 | $.fn.addWay = function(params) { 269 | params = $.extend( { 270 | start : false, 271 | end : false, 272 | step : [], 273 | route : false, 274 | langage : 'english' 275 | }, params); 276 | 277 | var direction = new google.maps.DirectionsService({ 278 | region: "fr" 279 | }); 280 | 281 | var way = new google.maps.DirectionsRenderer({ 282 | draggable: true, 283 | map: $(this).data('googleMap'), 284 | panel: document.getElementById(params.route), 285 | provideTripAlternatives: true 286 | }); 287 | 288 | document.getElementById.innerHTML = ""; 289 | 290 | var waypoints = []; 291 | 292 | for(var i in params.step) { 293 | var step; 294 | if(typeof params.step[i] == "object") { 295 | step = new google.maps.LatLng(params.step[i][0], params.step[i][1]); 296 | } else { 297 | step = params.step[i]; 298 | } 299 | 300 | waypoints.push({ 301 | location: step, 302 | stopover: true 303 | }); 304 | } 305 | 306 | if(typeof params.end != "object") { 307 | var geocodeAsync = function($that) { 308 | var geocoder = new google.maps.Geocoder(); 309 | 310 | geocoder.geocode({ 311 | address : params.end, 312 | bounds : $that.data('googleBound'), 313 | language : params.langage 314 | }, function(results, status) { 315 | if (status == google.maps.GeocoderStatus.OK) { 316 | var request = { 317 | origin: params.start, 318 | destination: results[0].geometry.location, 319 | travelMode: google.maps.DirectionsTravelMode.DRIVING, 320 | region: "fr", 321 | waypoints: waypoints 322 | }; 323 | 324 | direction.route(request, function(response, status) { 325 | if (status == google.maps.DirectionsStatus.OK) { 326 | way.setDirections(response); 327 | } else { 328 | if($that.data('googleDebug')) 329 | console.error("jQuery googleMap : Unable to find the place asked for the route ("+response+")"); 330 | } 331 | }); 332 | 333 | } else { 334 | if($that.data('googleDebug')) 335 | console.error("jQuery googleMap : Address not found"); 336 | } 337 | }); 338 | }($(this)); 339 | } else { 340 | var request = { 341 | origin: params.start, 342 | destination: new google.maps.LatLng(params.end[0], params.end[1]), 343 | travelMode: google.maps.DirectionsTravelMode.DRIVING, 344 | region: "fr", 345 | waypoints: waypoints 346 | }; 347 | 348 | direction.route(request, function(response, status) { 349 | if (status == google.maps.DirectionsStatus.OK) { 350 | way.setDirections(response); 351 | } else { 352 | if($(this).data('googleDebug')) 353 | console.error("jQuery googleMap : Address not found"); 354 | } 355 | }); 356 | } 357 | 358 | return this; 359 | } 360 | }); 361 | -------------------------------------------------------------------------------- /css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */ 2 | 3 | /* ============================================================================= 4 | HTML5 display definitions 5 | ========================================================================== */ 6 | 7 | /* 8 | * Corrects block display not defined in IE6/7/8/9 & FF3 9 | */ 10 | 11 | article, 12 | aside, 13 | details, 14 | figcaption, 15 | figure, 16 | footer, 17 | header, 18 | hgroup, 19 | nav, 20 | section, 21 | summary { 22 | display: block; 23 | } 24 | 25 | /* 26 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3 27 | */ 28 | 29 | audio, 30 | canvas, 31 | video { 32 | display: inline-block; 33 | *display: inline; 34 | *zoom: 1; 35 | } 36 | 37 | /* 38 | * Prevents modern browsers from displaying 'audio' without controls 39 | * Remove excess height in iOS5 devices 40 | */ 41 | 42 | audio:not([controls]) { 43 | display: none; 44 | height: 0; 45 | } 46 | 47 | /* 48 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 49 | * Known issue: no IE6 support 50 | */ 51 | 52 | [hidden] { 53 | display: none; 54 | } 55 | 56 | 57 | /* ============================================================================= 58 | Base 59 | ========================================================================== */ 60 | 61 | /* 62 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units 63 | * http://clagnut.com/blog/348/#c790 64 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom 65 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ 66 | */ 67 | 68 | html { 69 | font-size: 100%; /* 1 */ 70 | -webkit-text-size-adjust: 100%; /* 2 */ 71 | -ms-text-size-adjust: 100%; /* 2 */ 72 | } 73 | 74 | /* 75 | * Addresses font-family inconsistency between 'textarea' and other form elements. 76 | */ 77 | 78 | html, 79 | button, 80 | input, 81 | select, 82 | textarea { 83 | font-family: sans-serif; 84 | } 85 | 86 | /* 87 | * Addresses margins handled incorrectly in IE6/7 88 | */ 89 | 90 | body { 91 | margin: 0; 92 | } 93 | 94 | 95 | /* ============================================================================= 96 | Links 97 | ========================================================================== */ 98 | 99 | /* 100 | * Addresses outline displayed oddly in Chrome 101 | */ 102 | 103 | a:focus { 104 | outline: thin dotted; 105 | } 106 | 107 | /* 108 | * Improves readability when focused and also mouse hovered in all browsers 109 | * people.opera.com/patrickl/experiments/keyboard/test 110 | */ 111 | 112 | a:hover, 113 | a:active { 114 | outline: 0; 115 | } 116 | 117 | 118 | /* ============================================================================= 119 | Typography 120 | ========================================================================== */ 121 | 122 | /* 123 | * Addresses font sizes and margins set differently in IE6/7 124 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5 125 | */ 126 | 127 | h1 { 128 | font-size: 2em; 129 | margin: 0.67em 0; 130 | } 131 | 132 | h2 { 133 | font-size: 1.5em; 134 | margin: 0.83em 0; 135 | } 136 | 137 | h3 { 138 | font-size: 1.17em; 139 | margin: 1em 0; 140 | } 141 | 142 | h4 { 143 | font-size: 1em; 144 | margin: 1.33em 0; 145 | } 146 | 147 | h5 { 148 | font-size: 0.83em; 149 | margin: 1.67em 0; 150 | } 151 | 152 | h6 { 153 | font-size: 0.75em; 154 | margin: 2.33em 0; 155 | } 156 | 157 | /* 158 | * Addresses styling not present in IE7/8/9, S5, Chrome 159 | */ 160 | 161 | abbr[title] { 162 | border-bottom: 1px dotted; 163 | } 164 | 165 | /* 166 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome 167 | */ 168 | 169 | b, 170 | strong { 171 | font-weight: bold; 172 | } 173 | 174 | blockquote { 175 | margin: 1em 40px; 176 | } 177 | 178 | /* 179 | * Addresses styling not present in S5, Chrome 180 | */ 181 | 182 | dfn { 183 | font-style: italic; 184 | } 185 | 186 | /* 187 | * Addresses styling not present in IE6/7/8/9 188 | */ 189 | 190 | mark { 191 | background: #ff0; 192 | color: #000; 193 | } 194 | 195 | /* 196 | * Addresses margins set differently in IE6/7 197 | */ 198 | 199 | p, 200 | pre { 201 | margin: 1em 0; 202 | } 203 | 204 | /* 205 | * Corrects font family set oddly in IE6, S4/5, Chrome 206 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59 207 | */ 208 | 209 | pre, 210 | code, 211 | kbd, 212 | samp { 213 | font-family: monospace, serif; 214 | _font-family: 'courier new', monospace; 215 | font-size: 1em; 216 | } 217 | 218 | /* 219 | * Improves readability of pre-formatted text in all browsers 220 | */ 221 | 222 | pre { 223 | white-space: pre; 224 | white-space: pre-wrap; 225 | word-wrap: break-word; 226 | } 227 | 228 | /* 229 | * 1. Addresses CSS quotes not supported in IE6/7 230 | * 2. Addresses quote property not supported in S4 231 | */ 232 | 233 | /* 1 */ 234 | 235 | q { 236 | quotes: none; 237 | } 238 | 239 | /* 2 */ 240 | 241 | q:before, 242 | q:after { 243 | content: ''; 244 | content: none; 245 | } 246 | 247 | small { 248 | font-size: 75%; 249 | } 250 | 251 | /* 252 | * Prevents sub and sup affecting line-height in all browsers 253 | * gist.github.com/413930 254 | */ 255 | 256 | sub, 257 | sup { 258 | font-size: 75%; 259 | line-height: 0; 260 | position: relative; 261 | vertical-align: baseline; 262 | } 263 | 264 | sup { 265 | top: -0.5em; 266 | } 267 | 268 | sub { 269 | bottom: -0.25em; 270 | } 271 | 272 | 273 | /* ============================================================================= 274 | Lists 275 | ========================================================================== */ 276 | 277 | /* 278 | * Addresses margins set differently in IE6/7 279 | */ 280 | 281 | dl, 282 | menu, 283 | ol, 284 | ul { 285 | margin: 1em 0; 286 | } 287 | 288 | dd { 289 | margin: 0 0 0 40px; 290 | } 291 | 292 | /* 293 | * Addresses paddings set differently in IE6/7 294 | */ 295 | 296 | menu, 297 | ol, 298 | ul { 299 | padding: 0 0 0 40px; 300 | } 301 | 302 | /* 303 | * Corrects list images handled incorrectly in IE7 304 | */ 305 | 306 | nav ul, 307 | nav ol { 308 | list-style: none; 309 | list-style-image: none; 310 | } 311 | 312 | 313 | /* ============================================================================= 314 | Embedded content 315 | ========================================================================== */ 316 | 317 | /* 318 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3 319 | * 2. Improves image quality when scaled in IE7 320 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ 321 | */ 322 | 323 | img { 324 | border: 0; /* 1 */ 325 | -ms-interpolation-mode: bicubic; /* 2 */ 326 | } 327 | 328 | /* 329 | * Corrects overflow displayed oddly in IE9 330 | */ 331 | 332 | svg:not(:root) { 333 | overflow: hidden; 334 | } 335 | 336 | 337 | /* ============================================================================= 338 | Figures 339 | ========================================================================== */ 340 | 341 | /* 342 | * Addresses margin not present in IE6/7/8/9, S5, O11 343 | */ 344 | 345 | figure { 346 | margin: 0; 347 | } 348 | 349 | 350 | /* ============================================================================= 351 | Forms 352 | ========================================================================== */ 353 | 354 | /* 355 | * Corrects margin displayed oddly in IE6/7 356 | */ 357 | 358 | form { 359 | margin: 0; 360 | } 361 | 362 | /* 363 | * Define consistent border, margin, and padding 364 | */ 365 | 366 | fieldset { 367 | border: 1px solid #c0c0c0; 368 | margin: 0 2px; 369 | padding: 0.35em 0.625em 0.75em; 370 | } 371 | 372 | /* 373 | * 1. Corrects color not being inherited in IE6/7/8/9 374 | * 2. Corrects text not wrapping in FF3 375 | * 3. Corrects alignment displayed oddly in IE6/7 376 | */ 377 | 378 | legend { 379 | border: 0; /* 1 */ 380 | padding: 0; 381 | white-space: normal; /* 2 */ 382 | *margin-left: -7px; /* 3 */ 383 | } 384 | 385 | /* 386 | * 1. Corrects font size not being inherited in all browsers 387 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome 388 | * 3. Improves appearance and consistency in all browsers 389 | */ 390 | 391 | button, 392 | input, 393 | select, 394 | textarea { 395 | font-size: 100%; /* 1 */ 396 | margin: 0; /* 2 */ 397 | vertical-align: baseline; /* 3 */ 398 | *vertical-align: middle; /* 3 */ 399 | } 400 | 401 | /* 402 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet 403 | */ 404 | 405 | button, 406 | input { 407 | line-height: normal; /* 1 */ 408 | } 409 | 410 | /* 411 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others 412 | * 2. Corrects inability to style clickable 'input' types in iOS 413 | * 3. Removes inner spacing in IE7 without affecting normal text inputs 414 | * Known issue: inner spacing remains in IE6 415 | */ 416 | 417 | button, 418 | input[type="button"], 419 | input[type="reset"], 420 | input[type="submit"] { 421 | cursor: pointer; /* 1 */ 422 | -webkit-appearance: button; /* 2 */ 423 | *overflow: visible; /* 3 */ 424 | } 425 | 426 | /* 427 | * Re-set default cursor for disabled elements 428 | */ 429 | 430 | button[disabled], 431 | input[disabled] { 432 | cursor: default; 433 | } 434 | 435 | /* 436 | * 1. Addresses box sizing set to content-box in IE8/9 437 | * 2. Removes excess padding in IE8/9 438 | * 3. Removes excess padding in IE7 439 | Known issue: excess padding remains in IE6 440 | */ 441 | 442 | input[type="checkbox"], 443 | input[type="radio"] { 444 | box-sizing: border-box; /* 1 */ 445 | padding: 0; /* 2 */ 446 | *height: 13px; /* 3 */ 447 | *width: 13px; /* 3 */ 448 | } 449 | 450 | /* 451 | * 1. Addresses appearance set to searchfield in S5, Chrome 452 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof) 453 | */ 454 | 455 | input[type="search"] { 456 | -webkit-appearance: textfield; /* 1 */ 457 | -moz-box-sizing: content-box; 458 | -webkit-box-sizing: content-box; /* 2 */ 459 | box-sizing: content-box; 460 | } 461 | 462 | /* 463 | * Removes inner padding and search cancel button in S5, Chrome on OS X 464 | */ 465 | 466 | input[type="search"]::-webkit-search-decoration, 467 | input[type="search"]::-webkit-search-cancel-button { 468 | -webkit-appearance: none; 469 | } 470 | 471 | /* 472 | * Removes inner padding and border in FF3+ 473 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ 474 | */ 475 | 476 | button::-moz-focus-inner, 477 | input::-moz-focus-inner { 478 | border: 0; 479 | padding: 0; 480 | } 481 | 482 | /* 483 | * 1. Removes default vertical scrollbar in IE6/7/8/9 484 | * 2. Improves readability and alignment in all browsers 485 | */ 486 | 487 | textarea { 488 | overflow: auto; /* 1 */ 489 | vertical-align: top; /* 2 */ 490 | } 491 | 492 | 493 | /* ============================================================================= 494 | Tables 495 | ========================================================================== */ 496 | 497 | /* 498 | * Remove most spacing between table cells 499 | */ 500 | 501 | table { 502 | border-collapse: collapse; 503 | border-spacing: 0; 504 | } 505 | 506 | 507 | /* ============================================================================= 508 | Clearfix 509 | ========================================================================== */ 510 | .clearfix:before, 511 | .clearfix:after { 512 | content: " "; 513 | display: table; 514 | } 515 | 516 | .clearfix:after { 517 | clear: both; 518 | } -------------------------------------------------------------------------------- /js/validator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Validator v0.11.5 for Bootstrap 3, by @1000hz 3 | * Copyright 2016 Cina Saffary 4 | * Licensed under http://opensource.org/licenses/MIT 5 | * 6 | * https://github.com/1000hz/bootstrap-validator 7 | */ 8 | 9 | +function ($) { 10 | 'use strict'; 11 | 12 | // VALIDATOR CLASS DEFINITION 13 | // ========================== 14 | 15 | function getValue($el) { 16 | return $el.is('[type="checkbox"]') ? $el.prop('checked') : 17 | $el.is('[type="radio"]') ? !!$('[name="' + $el.attr('name') + '"]:checked').length : 18 | $el.val() 19 | } 20 | 21 | var Validator = function (element, options) { 22 | this.options = options 23 | this.validators = $.extend({}, Validator.VALIDATORS, options.custom) 24 | this.$element = $(element) 25 | this.$btn = $('button[type="submit"], input[type="submit"]') 26 | .filter('[form="' + this.$element.attr('id') + '"]') 27 | .add(this.$element.find('input[type="submit"], button[type="submit"]')) 28 | 29 | this.update() 30 | 31 | this.$element.on('input.bs.validator change.bs.validator focusout.bs.validator', $.proxy(this.onInput, this)) 32 | this.$element.on('submit.bs.validator', $.proxy(this.onSubmit, this)) 33 | this.$element.on('reset.bs.validator', $.proxy(this.reset, this)) 34 | 35 | this.$element.find('[data-match]').each(function () { 36 | var $this = $(this) 37 | var target = $this.data('match') 38 | 39 | $(target).on('input.bs.validator', function (e) { 40 | getValue($this) && $this.trigger('input.bs.validator') 41 | }) 42 | }) 43 | 44 | this.$inputs.filter(function () { return getValue($(this)) }).trigger('focusout') 45 | 46 | this.$element.attr('novalidate', true) // disable automatic native validation 47 | this.toggleSubmit() 48 | } 49 | 50 | Validator.VERSION = '0.11.5' 51 | 52 | Validator.INPUT_SELECTOR = ':input:not([type="hidden"], [type="submit"], [type="reset"], button)' 53 | 54 | Validator.FOCUS_OFFSET = 20 55 | 56 | Validator.DEFAULTS = { 57 | delay: 500, 58 | html: false, 59 | disable: true, 60 | focus: true, 61 | custom: {}, 62 | errors: { 63 | match: 'Does not match', 64 | minlength: 'Not long enough' 65 | }, 66 | feedback: { 67 | success: 'glyphicon-ok', 68 | error: 'glyphicon-remove' 69 | } 70 | } 71 | 72 | Validator.VALIDATORS = { 73 | 'native': function ($el) { 74 | var el = $el[0] 75 | if (el.checkValidity) { 76 | return !el.checkValidity() && !el.validity.valid && (el.validationMessage || "error!") 77 | } 78 | }, 79 | 'match': function ($el) { 80 | var target = $el.data('match') 81 | return $el.val() !== $(target).val() && Validator.DEFAULTS.errors.match 82 | }, 83 | 'minlength': function ($el) { 84 | var minlength = $el.data('minlength') 85 | return $el.val().length < minlength && Validator.DEFAULTS.errors.minlength 86 | } 87 | } 88 | 89 | Validator.prototype.update = function () { 90 | this.$inputs = this.$element.find(Validator.INPUT_SELECTOR) 91 | .add(this.$element.find('[data-validate="true"]')) 92 | .not(this.$element.find('[data-validate="false"]')) 93 | 94 | return this 95 | } 96 | 97 | Validator.prototype.onInput = function (e) { 98 | var self = this 99 | var $el = $(e.target) 100 | var deferErrors = e.type !== 'focusout' 101 | 102 | if (!this.$inputs.is($el)) return 103 | 104 | this.validateInput($el, deferErrors).done(function () { 105 | self.toggleSubmit() 106 | }) 107 | } 108 | 109 | Validator.prototype.validateInput = function ($el, deferErrors) { 110 | var value = getValue($el) 111 | var prevErrors = $el.data('bs.validator.errors') 112 | var errors 113 | 114 | if ($el.is('[type="radio"]')) $el = this.$element.find('input[name="' + $el.attr('name') + '"]') 115 | 116 | var e = $.Event('validate.bs.validator', {relatedTarget: $el[0]}) 117 | this.$element.trigger(e) 118 | if (e.isDefaultPrevented()) return 119 | 120 | var self = this 121 | 122 | return this.runValidators($el).done(function (errors) { 123 | $el.data('bs.validator.errors', errors) 124 | 125 | errors.length 126 | ? deferErrors ? self.defer($el, self.showErrors) : self.showErrors($el) 127 | : self.clearErrors($el) 128 | 129 | if (!prevErrors || errors.toString() !== prevErrors.toString()) { 130 | e = errors.length 131 | ? $.Event('invalid.bs.validator', {relatedTarget: $el[0], detail: errors}) 132 | : $.Event('valid.bs.validator', {relatedTarget: $el[0], detail: prevErrors}) 133 | 134 | self.$element.trigger(e) 135 | } 136 | 137 | self.toggleSubmit() 138 | 139 | self.$element.trigger($.Event('validated.bs.validator', {relatedTarget: $el[0]})) 140 | }) 141 | } 142 | 143 | 144 | Validator.prototype.runValidators = function ($el) { 145 | var errors = [] 146 | var deferred = $.Deferred() 147 | 148 | $el.data('bs.validator.deferred') && $el.data('bs.validator.deferred').reject() 149 | $el.data('bs.validator.deferred', deferred) 150 | 151 | function getValidatorSpecificError(key) { 152 | return $el.data(key + '-error') 153 | } 154 | 155 | function getValidityStateError() { 156 | var validity = $el[0].validity 157 | return validity.typeMismatch ? $el.data('type-error') 158 | : validity.patternMismatch ? $el.data('pattern-error') 159 | : validity.stepMismatch ? $el.data('step-error') 160 | : validity.rangeOverflow ? $el.data('max-error') 161 | : validity.rangeUnderflow ? $el.data('min-error') 162 | : validity.valueMissing ? $el.data('required-error') 163 | : null 164 | } 165 | 166 | function getGenericError() { 167 | return $el.data('error') 168 | } 169 | 170 | function getErrorMessage(key) { 171 | return getValidatorSpecificError(key) 172 | || getValidityStateError() 173 | || getGenericError() 174 | } 175 | 176 | $.each(this.validators, $.proxy(function (key, validator) { 177 | var error = null 178 | if ((getValue($el) || $el.attr('required')) && 179 | ($el.data(key) || key == 'native') && 180 | (error = validator.call(this, $el))) { 181 | error = getErrorMessage(key) || error 182 | !~errors.indexOf(error) && errors.push(error) 183 | } 184 | }, this)) 185 | 186 | if (!errors.length && getValue($el) && $el.data('remote')) { 187 | this.defer($el, function () { 188 | var data = {} 189 | data[$el.attr('name')] = getValue($el) 190 | $.get($el.data('remote'), data) 191 | .fail(function (jqXHR, textStatus, error) { errors.push(getErrorMessage('remote') || error) }) 192 | .always(function () { deferred.resolve(errors)}) 193 | }) 194 | } else deferred.resolve(errors) 195 | 196 | return deferred.promise() 197 | } 198 | 199 | Validator.prototype.validate = function () { 200 | var self = this 201 | 202 | $.when(this.$inputs.map(function (el) { 203 | return self.validateInput($(this), false) 204 | })).then(function () { 205 | self.toggleSubmit() 206 | self.focusError() 207 | }) 208 | 209 | return this 210 | } 211 | 212 | Validator.prototype.focusError = function () { 213 | if (!this.options.focus) return 214 | 215 | var $input = this.$element.find(".has-error:first :input") 216 | if ($input.length === 0) return 217 | 218 | $('html, body').animate({scrollTop: $input.offset().top - Validator.FOCUS_OFFSET}, 250) 219 | $input.focus() 220 | } 221 | 222 | Validator.prototype.showErrors = function ($el) { 223 | var method = this.options.html ? 'html' : 'text' 224 | var errors = $el.data('bs.validator.errors') 225 | var $group = $el.closest('.form-group') 226 | var $block = $group.find('.help-block.with-errors') 227 | var $feedback = $group.find('.form-control-feedback') 228 | 229 | if (!errors.length) return 230 | 231 | $block.data('bs.validator.originalContent') === undefined && $block.data('bs.validator.originalContent', $block.html()) 232 | $block.empty().append(errors) 233 | $group.addClass('has-error has-danger') 234 | 235 | $group.hasClass('has-feedback') 236 | && $feedback.removeClass(this.options.feedback.success) 237 | && $feedback.addClass(this.options.feedback.error) 238 | && $group.removeClass('has-success') 239 | } 240 | 241 | Validator.prototype.clearErrors = function ($el) { 242 | var $group = $el.closest('.form-group') 243 | var $block = $group.find('.help-block.with-errors') 244 | var $feedback = $group.find('.form-control-feedback') 245 | 246 | $block.html($block.data('bs.validator.originalContent')) 247 | $group.removeClass('has-error has-danger has-success') 248 | 249 | $group.hasClass('has-feedback') 250 | && $feedback.removeClass(this.options.feedback.error) 251 | && $feedback.removeClass(this.options.feedback.success) 252 | && getValue($el) 253 | && $feedback.addClass(this.options.feedback.success) 254 | && $group.addClass('has-success') 255 | } 256 | 257 | Validator.prototype.hasErrors = function () { 258 | function fieldErrors() { 259 | return !!($(this).data('bs.validator.errors') || []).length 260 | } 261 | 262 | return !!this.$inputs.filter(fieldErrors).length 263 | } 264 | 265 | Validator.prototype.isIncomplete = function () { 266 | function fieldIncomplete() { 267 | var value = getValue($(this)) 268 | return !(typeof value == "string" ? $.trim(value) : value) 269 | } 270 | 271 | return !!this.$inputs.filter('[required]').filter(fieldIncomplete).length 272 | } 273 | 274 | Validator.prototype.onSubmit = function (e) { 275 | this.validate() 276 | if (this.isIncomplete() || this.hasErrors()) e.preventDefault() 277 | } 278 | 279 | Validator.prototype.toggleSubmit = function () { 280 | if (!this.options.disable) return 281 | this.$btn.toggleClass('disabled', this.isIncomplete() || this.hasErrors()) 282 | } 283 | 284 | Validator.prototype.defer = function ($el, callback) { 285 | callback = $.proxy(callback, this, $el) 286 | if (!this.options.delay) return callback() 287 | window.clearTimeout($el.data('bs.validator.timeout')) 288 | $el.data('bs.validator.timeout', window.setTimeout(callback, this.options.delay)) 289 | } 290 | 291 | Validator.prototype.reset = function () { 292 | this.$element.find('.form-control-feedback') 293 | .removeClass(this.options.feedback.error) 294 | .removeClass(this.options.feedback.success) 295 | 296 | this.$inputs 297 | .removeData(['bs.validator.errors', 'bs.validator.deferred']) 298 | .each(function () { 299 | var $this = $(this) 300 | var timeout = $this.data('bs.validator.timeout') 301 | window.clearTimeout(timeout) && $this.removeData('bs.validator.timeout') 302 | }) 303 | 304 | this.$element.find('.help-block.with-errors') 305 | .each(function () { 306 | var $this = $(this) 307 | var originalContent = $this.data('bs.validator.originalContent') 308 | 309 | $this 310 | .removeData('bs.validator.originalContent') 311 | .html(originalContent) 312 | }) 313 | 314 | this.$btn.removeClass('disabled') 315 | 316 | this.$element.find('.has-error, .has-danger, .has-success').removeClass('has-error has-danger has-success') 317 | 318 | return this 319 | } 320 | 321 | Validator.prototype.destroy = function () { 322 | this.reset() 323 | 324 | this.$element 325 | .removeAttr('novalidate') 326 | .removeData('bs.validator') 327 | .off('.bs.validator') 328 | 329 | this.$inputs 330 | .off('.bs.validator') 331 | 332 | this.options = null 333 | this.validators = null 334 | this.$element = null 335 | this.$btn = null 336 | 337 | return this 338 | } 339 | 340 | // VALIDATOR PLUGIN DEFINITION 341 | // =========================== 342 | 343 | 344 | function Plugin(option) { 345 | return this.each(function () { 346 | var $this = $(this) 347 | var options = $.extend({}, Validator.DEFAULTS, $this.data(), typeof option == 'object' && option) 348 | var data = $this.data('bs.validator') 349 | 350 | if (!data && option == 'destroy') return 351 | if (!data) $this.data('bs.validator', (data = new Validator(this, options))) 352 | if (typeof option == 'string') data[option]() 353 | }) 354 | } 355 | 356 | var old = $.fn.validator 357 | 358 | $.fn.validator = Plugin 359 | $.fn.validator.Constructor = Validator 360 | 361 | 362 | // VALIDATOR NO CONFLICT 363 | // ===================== 364 | 365 | $.fn.validator.noConflict = function () { 366 | $.fn.validator = old 367 | return this 368 | } 369 | 370 | 371 | // VALIDATOR DATA-API 372 | // ================== 373 | 374 | $(window).on('load', function () { 375 | $('form[data-toggle="validator"]').each(function () { 376 | var $form = $(this) 377 | Plugin.call($form, $form.data()) 378 | }) 379 | }) 380 | 381 | }(jQuery); 382 | -------------------------------------------------------------------------------- /js/jquery.shuffle.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Shuffle.js by @Vestride 3 | * Categorize, sort, and filter a responsive grid of items. 4 | * Dependencies: jQuery 1.9+, Modernizr 2.6.2+ 5 | * @license MIT license 6 | * @version 3.1.1 7 | */ 8 | !function(a){"function"==typeof define&&define.amd?define(["jquery","modernizr"],a):"object"==typeof exports?module.exports=a(require("jquery"),window.Modernizr):window.Shuffle=a(window.jQuery,window.Modernizr)}(function(a,b,c){"use strict";function d(a){return a?a.replace(/([A-Z])/g,function(a,b){return"-"+b.toLowerCase()}).replace(/^ms-/,"-ms-"):""}function e(b,c,d){var e,f,g,h=null,i=0;d=d||{};var j=function(){i=d.leading===!1?0:a.now(),h=null,g=b.apply(e,f),e=f=null};return function(){var k=a.now();i||d.leading!==!1||(i=k);var l=c-(k-i);return e=this,f=arguments,0>=l||l>c?(clearTimeout(h),h=null,i=k,g=b.apply(e,f),e=f=null):h||d.trailing===!1||(h=setTimeout(j,l)),g}}function f(a,b,c){for(var d=0,e=a.length;e>d;d++)if(b.call(c,a[d],d,a)==={})return}function g(b,c,d){return setTimeout(a.proxy(b,c),d)}function h(a){return Math.max.apply(Math,a)}function i(a){return Math.min.apply(Math,a)}function j(b){return a.isNumeric(b)?b:0}function k(a){var b,c,d=a.length;if(!d)return a;for(;--d;)c=Math.floor(Math.random()*(d+1)),b=a[c],a[c]=a[d],a[d]=b;return a}if("object"!=typeof b)throw new Error("Shuffle.js requires Modernizr.\nhttp://vestride.github.io/Shuffle/#dependencies");var l=b.prefixed("transition"),m=b.prefixed("transitionDelay"),n=b.prefixed("transitionDuration"),o={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[l],p=b.prefixed("transform"),q=d(p),r=b.csstransforms&&b.csstransitions,s=b.csstransforms3d,t=!!window.getComputedStyle,u="shuffle",v="all",w="groups",x=1,y=.001,z=window.getComputedStyle||function(){},A=function(a,b){this.x=j(a),this.y=j(b)};A.equals=function(a,b){return a.x===b.x&&a.y===b.y};var B=function(){if(!t)return!1;var a=document.body||document.documentElement,b=document.createElement("div");b.style.cssText="width:10px;padding:2px;-webkit-box-sizing:border-box;box-sizing:border-box;",a.appendChild(b);var c=z(b,null).width,d="10px"===c;return a.removeChild(b),d}(),C=0,D=a(window),E=function(b,c){c=c||{},a.extend(this,E.options,c,E.settings),this.$el=a(b),this.element=b,this.unique="shuffle_"+C++,this._fire(E.EventType.LOADING),this._init(),g(function(){this.initialized=!0,this._fire(E.EventType.DONE)},this,16)};return E.EventType={LOADING:"loading",DONE:"done",LAYOUT:"layout",REMOVED:"removed"},E.ClassName={BASE:u,SHUFFLE_ITEM:"shuffle-item",FILTERED:"filtered",CONCEALED:"concealed"},E.options={group:v,speed:250,easing:"ease-out",itemSelector:"",sizer:null,gutterWidth:0,columnWidth:0,delimeter:null,buffer:0,columnThreshold:t?.01:.1,initialSort:null,throttle:e,throttleTime:300,sequentialFadeDelay:150,supported:r},E.settings={useSizer:!1,itemCss:{position:"absolute",top:0,left:0,visibility:"visible"},revealAppendedDelay:300,lastSort:{},lastFilter:v,enabled:!0,destroyed:!1,initialized:!1,_animations:[],_transitions:[],_isMovementCanceled:!1,styleQueue:[]},E.Point=A,E._getItemTransformString=function(a,b){return s?"translate3d("+a.x+"px, "+a.y+"px, 0) scale3d("+b+", "+b+", 1)":"translate("+a.x+"px, "+a.y+"px) scale("+b+")"},E._getNumberStyle=function(b,c,d){if(t){d=d||z(b,null);var e=E._getFloat(d[c]);return B||"width"!==c?B||"height"!==c||(e+=E._getFloat(d.paddingTop)+E._getFloat(d.paddingBottom)+E._getFloat(d.borderTopWidth)+E._getFloat(d.borderBottomWidth)):e+=E._getFloat(d.paddingLeft)+E._getFloat(d.paddingRight)+E._getFloat(d.borderLeftWidth)+E._getFloat(d.borderRightWidth),e}return E._getFloat(a(b).css(c))},E._getFloat=function(a){return j(parseFloat(a))},E._getOuterWidth=function(a,b){var c=z(a,null),d=E._getNumberStyle(a,"width",c);if(b){var e=E._getNumberStyle(a,"marginLeft",c),f=E._getNumberStyle(a,"marginRight",c);d+=e+f}return d},E._getOuterHeight=function(a,b){var c=z(a,null),d=E._getNumberStyle(a,"height",c);if(b){var e=E._getNumberStyle(a,"marginTop",c),f=E._getNumberStyle(a,"marginBottom",c);d+=e+f}return d},E._skipTransition=function(a,b,c){var d=a.style[n];a.style[n]="0ms",b.call(c);var e=a.offsetWidth;e=null,a.style[n]=d},E.prototype._init=function(){this.$items=this._getItems(),this.sizer=this._getElementOption(this.sizer),this.sizer&&(this.useSizer=!0),this.$el.addClass(E.ClassName.BASE),this._initItems(),D.on("resize."+u+"."+this.unique,this._getResizeFunction());var a=this.$el.css(["position","overflow"]),b=E._getOuterWidth(this.element);this._validateStyles(a),this._setColumns(b),this.shuffle(this.group,this.initialSort),this.supported&&g(function(){this._setTransitions(),this.element.style[l]="height "+this.speed+"ms "+this.easing},this)},E.prototype._getResizeFunction=function(){var b=a.proxy(this._onResize,this);return this.throttle?this.throttle(b,this.throttleTime):b},E.prototype._getElementOption=function(a){return"string"==typeof a?this.$el.find(a)[0]||null:a&&a.nodeType&&1===a.nodeType?a:a&&a.jquery?a[0]:null},E.prototype._validateStyles=function(a){"static"===a.position&&(this.element.style.position="relative"),"hidden"!==a.overflow&&(this.element.style.overflow="hidden")},E.prototype._filter=function(a,b){a=a||this.lastFilter,b=b||this.$items;var c=this._getFilteredSets(a,b);return this._toggleFilterClasses(c.filtered,c.concealed),this.lastFilter=a,"string"==typeof a&&(this.group=a),c.filtered},E.prototype._getFilteredSets=function(b,c){var d=a(),e=a();return b===v?d=c:f(c,function(c){var f=a(c);this._doesPassFilter(b,f)?d=d.add(f):e=e.add(f)},this),{filtered:d,concealed:e}},E.prototype._doesPassFilter=function(b,c){if(a.isFunction(b))return b.call(c[0],c,this);var d=c.data(w),e=this.delimeter&&!a.isArray(d)?d.split(this.delimeter):d;return a.inArray(b,e)>-1},E.prototype._toggleFilterClasses=function(a,b){a.removeClass(E.ClassName.CONCEALED).addClass(E.ClassName.FILTERED),b.removeClass(E.ClassName.FILTERED).addClass(E.ClassName.CONCEALED)},E.prototype._initItems=function(a){a=a||this.$items,a.addClass([E.ClassName.SHUFFLE_ITEM,E.ClassName.FILTERED].join(" ")),a.css(this.itemCss).data("point",new A).data("scale",x)},E.prototype._updateItemCount=function(){this.visibleItems=this._getFilteredItems().length},E.prototype._setTransition=function(a){a.style[l]=q+" "+this.speed+"ms "+this.easing+", opacity "+this.speed+"ms "+this.easing},E.prototype._setTransitions=function(a){a=a||this.$items,f(a,function(a){this._setTransition(a)},this)},E.prototype._setSequentialDelay=function(a){this.supported&&f(a,function(a,b){a.style[m]="0ms,"+(b+1)*this.sequentialFadeDelay+"ms"},this)},E.prototype._getItems=function(){return this.$el.children(this.itemSelector)},E.prototype._getFilteredItems=function(){return this.$items.filter("."+E.ClassName.FILTERED)},E.prototype._getConcealedItems=function(){return this.$items.filter("."+E.ClassName.CONCEALED)},E.prototype._getColumnSize=function(b,c){var d;return d=a.isFunction(this.columnWidth)?this.columnWidth(b):this.useSizer?E._getOuterWidth(this.sizer):this.columnWidth?this.columnWidth:this.$items.length>0?E._getOuterWidth(this.$items[0],!0):b,0===d&&(d=b),d+c},E.prototype._getGutterSize=function(b){var c;return c=a.isFunction(this.gutterWidth)?this.gutterWidth(b):this.useSizer?E._getNumberStyle(this.sizer,"marginLeft"):this.gutterWidth},E.prototype._setColumns=function(a){var b=a||E._getOuterWidth(this.element),c=this._getGutterSize(b),d=this._getColumnSize(b,c),e=(b+c)/d;Math.abs(Math.round(e)-e)h;h++)this.positions[d+h]=f;return e},E.prototype._getColumnSpan=function(a,b,c){var d=a/b;return Math.abs(Math.round(d)-d)e;e++)d[e]=h(this.positions.slice(e,e+a));return d},E.prototype._getShortColumn=function(a,b){for(var c=i(a),d=0,e=a.length;e>d;d++)if(a[d]>=c-b&&a[d]<=c+b)return d;return 0},E.prototype._shrink=function(b){var c=b||this._getConcealedItems();f(c,function(b){var c=a(b),d=c.data();d.scale!==y&&(d.scale=y,this.styleQueue.push({$item:c,point:d.point,scale:y,opacity:0,callback:function(){c.css("visibility","hidden")}}))},this)},E.prototype._onResize=function(){if(this.enabled&&!this.destroyed){var a=E._getOuterWidth(this.element);a!==this.containerWidth&&this.update()}},E.prototype._getStylesForTransition=function(a){var b={opacity:a.opacity};return this.supported?b[p]=E._getItemTransformString(a.point,a.scale):(b.left=a.point.x,b.top=a.point.y),b},E.prototype._transition=function(b){var c=this._getStylesForTransition(b);this._startItemAnimation(b.$item,c,b.callfront||a.noop,b.callback||a.noop)},E.prototype._startItemAnimation=function(b,c,d,e){function f(b){b.target===b.currentTarget&&(a(b.target).off(o,f),g._removeTransitionReference(h),e())}var g=this,h={$element:b,handler:f};if(d(),!this.initialized)return b.css(c),void e();if(this.supported)b.css(c),b.on(o,f),this._transitions.push(h);else{var i=b.stop(!0).animate(c,this.speed,"swing",e);this._animations.push(i.promise())}},E.prototype._processStyleQueue=function(b){this.isTransitioning&&this._cancelMovement();var c=a();f(this.styleQueue,function(a){a.skipTransition?this._styleImmediately(a):(c=c.add(a.$item),this._transition(a))},this),c.length>0&&this.initialized&&this.speed>0?(this.isTransitioning=!0,this.supported?this._whenCollectionDone(c,o,this._movementFinished):this._whenAnimationsDone(this._movementFinished)):b||g(this._layoutEnd,this),this.styleQueue.length=0},E.prototype._cancelMovement=function(){this.supported?f(this._transitions,function(a){a.$element.off(o,a.handler)}):(this._isMovementCanceled=!0,this.$items.stop(!0),this._isMovementCanceled=!1),this._transitions.length=0,this.isTransitioning=!1},E.prototype._removeTransitionReference=function(b){var c=a.inArray(b,this._transitions);c>-1&&this._transitions.splice(c,1)},E.prototype._styleImmediately=function(a){E._skipTransition(a.$item[0],function(){a.$item.css(this._getStylesForTransition(a))},this)},E.prototype._movementFinished=function(){this.isTransitioning=!1,this._layoutEnd()},E.prototype._layoutEnd=function(){this._fire(E.EventType.LAYOUT)},E.prototype._addItems=function(a,b,c){this._initItems(a),this._setTransitions(a),this.$items=this._getItems(),this._shrink(a),f(this.styleQueue,function(a){a.skipTransition=!0}),this._processStyleQueue(!0),b?this._addItemsToEnd(a,c):this.shuffle(this.lastFilter)},E.prototype._addItemsToEnd=function(a,b){var c=this._filter(null,a),d=c.get();this._updateItemCount(),this._layout(d,!0),b&&this.supported&&this._setSequentialDelay(d),this._revealAppended(d)},E.prototype._revealAppended=function(b){g(function(){f(b,function(b){var c=a(b);this._transition({$item:c,opacity:1,point:c.data("point"),scale:x})},this),this._whenCollectionDone(a(b),o,function(){a(b).css(m,"0ms"),this._movementFinished()})},this,this.revealAppendedDelay)},E.prototype._whenCollectionDone=function(b,c,d){function e(b){b.target===b.currentTarget&&(a(b.target).off(c,e),f++,f===g&&(h._removeTransitionReference(i),d.call(h)))}var f=0,g=b.length,h=this,i={$element:b,handler:e};b.on(c,e),this._transitions.push(i)},E.prototype._whenAnimationsDone=function(b){a.when.apply(null,this._animations).always(a.proxy(function(){this._animations.length=0,this._isMovementCanceled||b.call(this)},this))},E.prototype.shuffle=function(a,b){this.enabled&&(a||(a=v),this._filter(a),this._updateItemCount(),this._shrink(),this.sort(b))},E.prototype.sort=function(a){if(this.enabled){this._resetCols();var b=a||this.lastSort,c=this._getFilteredItems().sorted(b);this._layout(c),this.lastSort=b}},E.prototype.update=function(a){this.enabled&&(a||this._setColumns(),this.sort())},E.prototype.layout=function(){this.update(!0)},E.prototype.appended=function(a,b,c){this._addItems(a,b===!0,c!==!1)},E.prototype.disable=function(){this.enabled=!1},E.prototype.enable=function(a){this.enabled=!0,a!==!1&&this.update()},E.prototype.remove=function(b){function c(){b.remove(),this.$items=this._getItems(),this._updateItemCount(),this._fire(E.EventType.REMOVED,[b,this]),b=null}b.length&&b.jquery&&(this._toggleFilterClasses(a(),b),this._shrink(b),this.sort(),this.$el.one(E.EventType.LAYOUT+"."+u,a.proxy(c,this)))},E.prototype.destroy=function(){D.off("."+this.unique),this.$el.removeClass(u).removeAttr("style").removeData(u),this.$items.removeAttr("style").removeData("point").removeData("scale").removeClass([E.ClassName.CONCEALED,E.ClassName.FILTERED,E.ClassName.SHUFFLE_ITEM].join(" ")),this.$items=null,this.$el=null,this.sizer=null,this.element=null,this._transitions=null,this.destroyed=!0},a.fn.shuffle=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),e=d.data(u);e?"string"==typeof b&&e[b]&&e[b].apply(e,c):(e=new E(this,b),d.data(u,e))})},a.fn.sorted=function(b){var d=a.extend({},a.fn.sorted.defaults,b),e=this.get(),f=!1;return e.length?d.randomize?k(e):(a.isFunction(d.by)&&e.sort(function(b,e){if(f)return 0;var g=d.by(a(b)),h=d.by(a(e));return g===c&&h===c?(f=!0,0):h>g||"sortFirst"===g||"sortLast"===h?-1:g>h||"sortLast"===g||"sortFirst"===h?1:0}),f?this.get():(d.reverse&&e.reverse(),e)):[]},a.fn.sorted.defaults={reverse:!1,by:null,randomize:!1},E}); -------------------------------------------------------------------------------- /project.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ALBIN PRAVEEN 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 |
30 |
31 |
32 |
33 |
34 | 35 | 36 | 37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 | 88 | 89 | 90 | 91 |
92 |
93 |
94 | 95 |
96 |

Blog

97 |
98 |

My Diary(sample as before)

99 |
100 |
101 | 102 |
103 | 104 |
105 |
106 | 107 |
108 | 109 |
110 |
111 |
112 |
113 | WordPress 114 |
115 | 116 | How to Make a WordPress Plugin Extensible 117 |
118 |
119 |
120 | 126 |
127 |
128 | 129 | 130 | 131 |
132 |
133 |
134 |
135 | Design 136 |
137 | 138 | 139 | 6 Easy Steps to Better Icon Design 140 |
141 |
142 |
143 | 149 |
150 |
151 | 152 | 153 | 154 |
155 |
156 |
157 |
158 | UI 159 |
160 | 161 | Creative and Innovative Navigation Designs 162 |
163 |
164 |
165 | 171 |
172 |
173 | 174 | 175 | 176 |
177 |
178 |
179 |
180 | Design 181 |
182 | 183 | Why I Switched to Sketch For UI Design 184 |
185 |
186 |
187 | 193 |
194 |
195 | 196 | 197 | 198 |
199 |
200 |
201 |
202 | E-Commerce 203 |
204 | 205 | An Overview of E-Commerce Platforms 206 |
207 |
208 |
209 | 215 |
216 |
217 | 218 | 219 | 220 |
221 |
222 |
223 |
224 | E-Commerce 225 |
226 | 227 | Designing the Perfect Feature Comparison Table 228 |
229 |
230 |
231 | 237 |
238 |
239 | 240 |
241 | 242 | See All Posts 243 |
244 |
245 | 246 |
247 |
248 |
249 |
250 | 251 | 252 |
253 | 276 | 277 | 280 |
281 | 282 | 283 |
284 |
285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | -------------------------------------------------------------------------------- /portfolio.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ALBIN PRAVEEN 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 |
30 |
31 |
32 |
33 |
34 | 35 | 36 | 37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 | 88 | 89 | 90 | 91 |
92 |
93 |
94 | 95 |
96 |

Portfolio

97 |
98 |

My Works(JUST SAMPLE.WHEN U FORK IT ADD VIDEOS OR WORKS)

99 |
100 |
101 | 102 |
103 | 104 |
105 |
106 | 107 |
108 | 109 | 142 | 143 | 144 | 145 |
146 | 147 | 148 |
149 |
150 | Full Project 2 151 | 152 |
153 | 154 | 155 |

Full Project 2

156 | Detailed 157 |
158 | 159 | 160 | 161 |
162 |
163 | YouTube Video 2 164 | 165 |
166 | 167 | 168 |

YouTube Video 2

169 | Video, YouTube Video 170 |
171 | 172 | 173 | 174 |
175 |
176 | Image 2 177 | 178 |
179 | 180 | 181 |

Image 2

182 | Image 183 |
184 | 185 | 186 | 187 |
188 |
189 | SoundCloud Audio 1 190 | 191 |
192 | 193 | 194 |

SoundCloud Audio 1

195 | SoundCloud 196 |
197 | 198 | 199 | 200 |
201 |
202 | Vimeo Video 203 | 204 |
205 | 206 | 207 |

Vimeo Video

208 | Video, Vimeo Video 209 |
210 | 211 | 212 | 213 |
214 |
215 | YouTube Video 1 216 | 217 |
218 | 219 | 220 |

YouTube Video 1

221 | Video, YouTube Video 222 |
223 | 224 | 225 | 226 |
227 |
228 | Full Project 1 229 | 230 |
231 | 232 | 233 |

Full Project 1

234 | Detailed 235 |
236 | 237 | 238 | 239 |
240 |
241 | Direct URL 242 | 243 |
244 | 245 | 246 |

Direct URL

247 | Direct URL 248 |
249 | 250 | 251 | 252 |
253 |
254 | Image 1 255 | 256 |
257 | 258 | 259 |

Image 1

260 | Image 261 |
262 | 263 |
264 | 265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 | 273 | 274 |
275 | 298 | 299 | 302 |
303 | 304 | 305 |
306 |
307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | -------------------------------------------------------------------------------- /resume.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ALBIN PRAVEEN 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 |
30 |
31 |
32 |
33 |
34 | 35 | 36 | 37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 | 88 | 89 | 90 |
91 |
92 |
93 | 94 |
95 |

Resume

96 |
97 |

Resume is just a sample and it is not my real resume.Just for experiment

98 |
99 |
100 | 101 |
102 |
103 | 104 |
105 |
106 |

Education

107 |
108 | 109 |
110 |
111 |
2009
112 | University of Studies 113 |

UI Design

114 |

Duis posuere, quam non imperdiet egestas, eros enim mattis mauris, in posuere lacus arcu quis felis. Etiam interdum erat non enim venenatis fermentum.

115 |
116 | 117 |
118 |
2008
119 | University of Studies 120 |

Graphic Design

121 |

Aliquam tincidunt malesuada tortor vitae iaculis. In eu turpis iaculis, feugiat risus quis, aliquet urna. Quisque fringilla mollis risus, eu pulvinar dolor.

122 |
123 | 124 |
125 |
2007
126 | University of Studies 127 |

Frontend Development

128 |

Maecenas finibus nec sem ut imperdiet. Ut tincidunt est ac dolor aliquam sodales. Phasellus sed mauris hendrerit, laoreet sem in, lobortis ante.

129 |
130 | 131 |
132 |
133 | 134 |
135 |
136 |

Experience

137 |
138 | 139 |
140 |
141 |
2016 - Current
142 | Rolling Thunder 143 |

Lead UI/UX Designer

144 |

Praesent dignissim sollicitudin justo, sed elementum quam lacinia quis. Phasellus eleifend tristique posuere. Sed vitae dui nec magna.

145 |
146 | 147 |
148 |
2013 - 2016
149 | Locost Accessories 150 |

Senior UI/UX Designer

151 |

Maecenas tempus faucibus rutrum. Duis eu aliquam urna. Proin vitae nulla tristique, ornare felis id, congue libero. Nam volutpat euismod quam.

152 |
153 | 154 |
155 |
2011 - 2013
156 | Sagebrush 157 |

Junior UI/UX Designer

158 |

Duis mollis nunc quis quam viverra venenatis. Nulla nulla arcu, congue vitae nunc ac, sodales ultricies diam. Nullam justo leo, tincidunt sit amet.

159 |
160 |
161 |
162 |
163 | 164 |
165 |
166 |
167 | 168 |
169 |

Certificates

170 |
171 |
172 |
173 | 174 | 231 | 232 |
233 |
234 |
235 |
236 |
237 | 238 |
239 |
240 |
241 |

Hacking Skills

242 |
243 | 244 |
245 | 246 |
247 |

Penetration Testing

248 |
95%
249 |
250 | 251 |
252 |
253 |
254 | 255 | 256 | 257 |
258 |

Bug bounty

259 |
75%
260 |
261 | 262 |
263 |
264 |
265 | 266 | 267 | 268 |
269 |

Netwokring

270 |
85%
271 |
272 |
273 |
274 |
275 | 276 | 277 | 278 |
279 |

Cyber Security

280 |
90%
281 |
282 |
283 |
284 |
285 | 286 |
287 | 288 |
289 | 290 | 291 |
292 |
293 |

Coding Skills

294 |
295 | 296 | 297 |
298 | 299 |
300 |

HTML

301 |
100%
302 |
303 |
304 |
305 |
306 | 307 | 308 | 309 |
310 |

Sql

311 |
90%
312 |
313 |
314 |
315 |
316 | 317 | 318 | 319 |
320 |

Bash

321 |
90%
322 |
323 |
324 |
325 |
326 | 327 | 328 | 329 |
330 |

Python

331 |
85%
332 |
333 |
334 |
335 |
336 | 337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 | 345 | 346 |
347 | 370 | 371 | 374 |
375 | 376 | 377 |
378 |
379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | -------------------------------------------------------------------------------- /js/jquery.magnific-popup.min.js: -------------------------------------------------------------------------------- 1 | /*! Magnific Popup - v1.1.0 - 2016-02-20 2 | * http://dimsemenov.com/plugins/magnific-popup/ 3 | * Copyright (c) 2016 Dmitry Semenov; */ 4 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("
");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()}); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ALBIN PRAVEEN 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 |
30 |
31 |
32 |
33 |
34 | 35 | 36 | 37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 | 88 | 89 | 90 |
91 |
92 |
93 |
94 | 95 |
96 |
97 |
98 |
99 | 100 |
101 |
102 |
103 |
104 |
105 |
106 | 107 |
108 |
109 | 123 | 124 | 125 |

Albin Praveen

126 |

Hi, I'm a Developer, Penetration Tester , a Ethical Hacker, and an Open Source Cyber Enthusiast who is highly passionate about building fast, creative applications , finding vulnerablity of a system or a network.Also, I'm a kid who loves to build and design Experiences which make peoples life easy.

127 | 128 |
129 | Download CV 130 | Contact 131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | 139 | 140 | 141 |
142 |
143 |
144 | 145 |
146 |

What I Do

147 |
148 |
149 |
150 | 151 |
152 |
153 |
154 |
155 |
156 | 157 |
158 | 159 |
160 |

Developer

161 |

I started coding when i was 16. and after beginning i went into sporting in programming .I have been in Python and HTML as by basic.Now i know PYTHON,HTML,BASH,SQL

162 |
163 |
164 | 165 |
166 |
167 | 168 |
169 | 170 |
171 |

Penetration Testing

172 |

I train my brain to learn and react , this is what lead you here . I love to find vulnerablity of a device ,system or a network.The TRYHACKME platform is where I practise cybersecurity and penetration testing.

173 |
174 |
175 |
176 |
177 | 178 |
179 |
180 | 181 |
182 |
183 | 184 |
185 | 186 |
187 |

Creative Things

188 |

Sharing the way i grind and help other to learn and develop new skills and manner is what i wanted to do and by creating interesting videos i find it easy manner to help.

189 |
190 |
191 | 192 |
193 |
194 | 195 |
196 | 197 |
198 |

Gaming

199 |

Gaming in arcade environment boost our skills to live and improve out though process, i love to play games in weekend and every time i play i always try to learn from the situations.

200 |
201 |
202 |
203 |
204 |
205 | 206 | 207 |
208 |
209 |
210 | 211 | 212 |
213 |

Testimonials

214 |
215 | 216 | 324 | 325 | 326 | 327 |
328 | 329 |
330 |
331 | 332 | 333 |
334 |
335 |
336 |

Fun Facts

337 |
338 |
339 |
340 | 341 |
342 |
343 |
344 | 345 |

Happy Clients

346 | 578 347 | 348 |
349 |
350 | 351 |
352 |
353 | 354 |

Working Hours

355 | 4,780 356 | 357 |
358 |
359 | 360 |
361 |
362 | 363 |

Awards Won

364 | 15 365 | 366 |
367 |
368 | 369 |
370 |
371 | 372 |

Coffee Consumed

373 | 1,286 374 | 375 |
376 |
377 |
378 | 379 | 380 | 381 |
382 |
383 |
384 |
385 | 386 | 387 |
388 | 411 | 412 | 415 |
416 | 417 | 418 |
419 |
420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | -------------------------------------------------------------------------------- /js/masonry.pkgd.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Masonry PACKAGED v4.1.1 3 | * Cascading grid layout library 4 | * http://masonry.desandro.com 5 | * MIT License 6 | * by David DeSandro 7 | */ 8 | 9 | !function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,r,a){function h(t,e,n){var o,r="$()."+i+'("'+e+'")';return t.each(function(t,h){var u=a.data(h,i);if(!u)return void s(i+" not initialized. Cannot call methods, i.e. "+r);var d=u[e];if(!d||"_"==e.charAt(0))return void s(r+" is not a valid method");var l=d.apply(u,n);o=void 0===o?l:o}),void 0!==o?o:t}function u(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(r.prototype.option||(r.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return h(this,t,e)}return u(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("get-size/get-size",[],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;u>e;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);r.isBoxSizeOuter=s=200==t(o.width),i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,E=a.borderTopWidth+a.borderBottomWidth,z=d&&s,b=t(r.width);b!==!1&&(a.width=b+(z?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(z?0:g+E)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+E),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;is?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},i.prototype.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},i.prototype._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this._getColGroup(n),r=Math.min.apply(Math,o),s=o.indexOf(r),a={x:this.columnWidth*s,y:r},h=r+t.size.outerHeight,u=this.cols+1-o.length,d=0;u>d;d++)this.colYs[s+d]=h;return a},i.prototype._getColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++){var o=this.colYs.slice(n,n+t);e[n]=Math.max.apply(Math,o)}return e},i.prototype._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},i.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},i.prototype._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},i.prototype.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}); --------------------------------------------------------------------------------