├── .gitignore ├── README.md ├── comps ├── devices.ai ├── intro.ai ├── intro.png ├── intro.svg ├── rosie.psd └── skills.ai ├── gulpfile.js ├── package-lock.json ├── package.json ├── server.js ├── src ├── 404.html ├── assets │ ├── app │ │ ├── _contact.js │ │ ├── _experience.js │ │ ├── _header.js │ │ ├── _navbar.js │ │ ├── _portfolio.js │ │ ├── app.js │ │ └── lib │ │ │ ├── form1.js │ │ │ └── form2.js │ ├── css │ │ └── style.css │ ├── fonts │ │ └── bootstrap │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ ├── img │ │ ├── arrow-left.png │ │ ├── arrow-right.png │ │ ├── close.svg │ │ ├── desktop.svg │ │ ├── experience │ │ │ ├── epn.png │ │ │ ├── free.png │ │ │ ├── google.svg │ │ │ ├── mdd.png │ │ │ ├── nintendo.svg │ │ │ ├── rand.png │ │ │ ├── sesame.svg │ │ │ └── starbucks.svg │ │ ├── inline.svg │ │ ├── ipad.svg │ │ ├── link-website.svg │ │ ├── mobile.svg │ │ ├── portfolio │ │ │ ├── adeq.png │ │ │ ├── carcrash.png │ │ │ ├── classappraisal.png │ │ │ ├── devref.png │ │ │ ├── disney.png │ │ │ ├── eighties.png │ │ │ ├── fridgebinge.png │ │ │ ├── harmonystyles.png │ │ │ ├── hdrgallery.png │ │ │ ├── riskvisualizer.png │ │ │ └── rosie.png │ │ ├── skills │ │ │ ├── afterfx.svg │ │ │ ├── angular.svg │ │ │ ├── bash.svg │ │ │ ├── bootstrap.svg │ │ │ ├── css.svg │ │ │ ├── d3.svg │ │ │ ├── firebase.svg │ │ │ ├── git.svg │ │ │ ├── gsap.svg │ │ │ ├── gulp.svg │ │ │ ├── html.svg │ │ │ ├── illustrator.svg │ │ │ ├── jasmine.svg │ │ │ ├── jquery.svg │ │ │ ├── js.svg │ │ │ ├── mongo.svg │ │ │ ├── node.svg │ │ │ ├── npm.svg │ │ │ ├── phaser.svg │ │ │ ├── photoshop.svg │ │ │ ├── premiere.svg │ │ │ ├── react.svg │ │ │ ├── sass.svg │ │ │ ├── skills.svg │ │ │ ├── sublime.svg │ │ │ ├── svg.svg │ │ │ └── typescript.svg │ │ ├── social │ │ │ ├── facebook.png │ │ │ ├── github.png │ │ │ └── linkedin.png │ │ ├── xl.png │ │ ├── xs.png │ │ └── zoom.svg │ ├── js │ │ └── app.js │ ├── res │ │ ├── favicon │ │ │ ├── android-chrome-144x144.png │ │ │ ├── android-chrome-36x36.png │ │ │ ├── android-chrome-48x48.png │ │ │ ├── android-chrome-72x72.png │ │ │ ├── android-chrome-96x96.png │ │ │ ├── apple-touch-icon-114x114.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-144x144.png │ │ │ ├── apple-touch-icon-57x57.png │ │ │ ├── apple-touch-icon-60x60.png │ │ │ ├── apple-touch-icon-72x72.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon-precomposed.png │ │ │ ├── apple-touch-icon.png │ │ │ ├── browserconfig.xml │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon-96x96.png │ │ │ ├── favicon.ico │ │ │ ├── manifest.json │ │ │ ├── mstile-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ ├── mstile-310x150.png │ │ │ ├── mstile-310x310.png │ │ │ ├── mstile-70x70.png │ │ │ └── safari-pinned-tab.svg │ │ └── video │ │ │ ├── bg.mp4 │ │ │ ├── fridgebinge-desktop.mp4 │ │ │ └── rosie-desktop.mp4 │ └── scss │ │ ├── _buttons.scss │ │ ├── _fonts.scss │ │ ├── _form.scss │ │ ├── _header.scss │ │ ├── _images.scss │ │ ├── _layout.scss │ │ ├── _modals.scss │ │ ├── _navbar.scss │ │ ├── _responsive.scss │ │ ├── _tricks.scss │ │ ├── _vars.scss │ │ ├── _video.scss │ │ └── style.scss └── index.html ├── template ├── data.json └── partials │ ├── experience.html │ ├── favicons.html │ ├── modal-portfolio.html │ ├── modal-resume.html │ ├── portfolio.html │ ├── skillset.html │ └── svg-intro.html └── utils ├── GitHub-Logo.png ├── aftereffects.png ├── crap ├── gulpfile.js ├── server.js └── temp │ ├── app.js │ └── style.css ├── cssparalax.css ├── docs.png ├── download.png ├── drive.png ├── express.xcf ├── facebook_circle_color-512.png ├── favicon.ico ├── finalcut.png ├── firstformvalidator.txt ├── formvalidation-master ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTORS.md ├── Gruntfile.js ├── LICENSE.txt ├── README.md ├── demo │ ├── ajaxSubmit.html │ ├── ajaxSubmit.php │ ├── attribute.html │ ├── choice.html │ ├── collapse.html │ ├── container.html │ ├── container2.html │ ├── container3.html │ ├── container4.html │ ├── date.html │ ├── defaultMessage.html │ ├── dynamic.html │ ├── dynamic2.html │ ├── dynamic3.html │ ├── dynamic4.html │ ├── enable.html │ ├── enable2.html │ ├── event.html │ ├── event2.html │ ├── event3.html │ ├── file.html │ ├── foundation │ │ ├── horizontalForm.html │ │ └── horizontalFormTooltip.html │ ├── html5.html │ ├── i18n.html │ ├── icon.html │ ├── ignored.html │ ├── index.html │ ├── invisible.html │ ├── mailgun.html │ ├── message.html │ ├── multiple.html │ ├── multipleAsOne.html │ ├── pure │ │ ├── horizontalForm.html │ │ └── stackedForm.html │ ├── remote.html │ ├── remote.php │ ├── remote2.php │ ├── reset.html │ ├── row.html │ ├── selector.html │ ├── selector2.html │ ├── semantic │ │ ├── horizontalForm.html │ │ ├── horizontalFormTooltip.html │ │ ├── stackedForm.html │ │ └── stackedFormTooltip.html │ ├── specialName.html │ ├── submitHandler.html │ ├── tab.html │ ├── target.php │ ├── tooltip.html │ ├── typehead.html │ ├── uikit │ │ ├── horizontalForm.html │ │ ├── horizontalFormTooltip.html │ │ ├── stackedForm.html │ │ └── stackedFormTooltip.html │ └── validators.html ├── package.json ├── screenshots │ ├── bootstrap.gif │ ├── foundation.gif │ ├── pure.gif │ ├── semantic.gif │ └── uikit.gif ├── src │ ├── css │ │ └── formValidation.css │ └── js │ │ ├── base.js │ │ ├── framework │ │ ├── bootstrap.js │ │ ├── foundation.js │ │ ├── pure.js │ │ ├── semantic.js │ │ └── uikit.js │ │ ├── helper.js │ │ ├── language │ │ ├── ar_MA.js │ │ ├── be_FR.js │ │ ├── be_NL.js │ │ ├── bg_BG.js │ │ ├── ca_ES.js │ │ ├── cs_CZ.js │ │ ├── da_DK.js │ │ ├── de_DE.js │ │ ├── en_US.js │ │ ├── es_CL.js │ │ ├── es_ES.js │ │ ├── eu_ES.js │ │ ├── fa_IR.js │ │ ├── fi_FI.js │ │ ├── fr_FR.js │ │ ├── gr_EL.js │ │ ├── he_IL.js │ │ ├── hi_IN.js │ │ ├── hu_HU.js │ │ ├── id_ID.js │ │ ├── it_IT.js │ │ ├── ja_JP.js │ │ ├── nl_NL.js │ │ ├── no_NO.js │ │ ├── pl_PL.js │ │ ├── pt_BR.js │ │ ├── pt_PT.js │ │ ├── ro_RO.js │ │ ├── ru_RU.js │ │ ├── sk_SK.js │ │ ├── sq_AL.js │ │ ├── sr_RS.js │ │ ├── sv_SE.js │ │ ├── th_TH.js │ │ ├── tr_TR.js │ │ ├── ua_UA.js │ │ ├── vi_VN.js │ │ ├── zh_CN.js │ │ └── zh_TW.js │ │ └── validator │ │ ├── base64.js │ │ ├── between.js │ │ ├── bic.js │ │ ├── blank.js │ │ ├── callback.js │ │ ├── choice.js │ │ ├── color.js │ │ ├── creditCard.js │ │ ├── cusip.js │ │ ├── cvv.js │ │ ├── date.js │ │ ├── different.js │ │ ├── digits.js │ │ ├── ean.js │ │ ├── ein.js │ │ ├── emailAddress.js │ │ ├── file.js │ │ ├── greaterThan.js │ │ ├── grid.js │ │ ├── hex.js │ │ ├── iban.js │ │ ├── id.js │ │ ├── identical.js │ │ ├── imei.js │ │ ├── imo.js │ │ ├── integer.js │ │ ├── ip.js │ │ ├── isbn.js │ │ ├── isin.js │ │ ├── ismn.js │ │ ├── issn.js │ │ ├── lessThan.js │ │ ├── mac.js │ │ ├── meid.js │ │ ├── notEmpty.js │ │ ├── numeric.js │ │ ├── phone.js │ │ ├── regexp.js │ │ ├── remote.js │ │ ├── rtn.js │ │ ├── sedol.js │ │ ├── siren.js │ │ ├── siret.js │ │ ├── step.js │ │ ├── stringCase.js │ │ ├── stringLength.js │ │ ├── uri.js │ │ ├── uuid.js │ │ ├── vat.js │ │ ├── vin.js │ │ └── zipCode.js ├── test │ ├── helper.js │ ├── index.html │ ├── invalid.json │ ├── spec.js │ ├── spec │ │ ├── api.js │ │ ├── autoFocus.js │ │ ├── container.js │ │ ├── dynamic.js │ │ ├── enable.js │ │ ├── event.js │ │ ├── excluded.js │ │ ├── i18n.js │ │ ├── message.js │ │ ├── row.js │ │ ├── submit.js │ │ ├── transformer.js │ │ ├── validator │ │ │ ├── between.js │ │ │ ├── bic.js │ │ │ ├── callback.js │ │ │ ├── color.js │ │ │ ├── creditCard.js │ │ │ ├── cusip.js │ │ │ ├── date.js │ │ │ ├── ean.js │ │ │ ├── ein.js │ │ │ ├── emailAddress.js │ │ │ ├── greaterThan.js │ │ │ ├── iban.js │ │ │ ├── id.js │ │ │ ├── identical.js │ │ │ ├── imo.js │ │ │ ├── ip.js │ │ │ ├── isbn.js │ │ │ ├── isin.js │ │ │ ├── ismn.js │ │ │ ├── issn.js │ │ │ ├── lessThan.js │ │ │ ├── meid.js │ │ │ ├── phone.js │ │ │ ├── stringLength.js │ │ │ ├── uri.js │ │ │ ├── vat.js │ │ │ └── zipCode.js │ │ └── verbose.js │ └── valid.json └── vendor │ ├── bootstrap │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ └── bootstrap.min.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── jasmine │ ├── boot.js │ ├── console.js │ ├── jasmine-html.js │ ├── jasmine.css │ ├── jasmine.js │ └── jasmine_favicon.png │ └── jquery │ └── jquery.min.js ├── icons.psd ├── indexparallax.html ├── linkedin copy 2.png ├── linkedin copy 3.png ├── linkedin copy.png ├── linkedin logo.png ├── linkedin.png ├── linkedin.xcf ├── logic.png ├── logos ├── bash.png ├── cont.png ├── css.xcf ├── edu.png ├── expe.png ├── github.png ├── googledrive.png ├── googlemapsapi.png ├── html.xcf ├── html2.png ├── logo.png ├── photoshop.png ├── php.png ├── python.png ├── sql.png ├── tolls.png └── work.png └── nginx.png /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X folder meta 2 | .DS_Store 3 | .idea 4 | 5 | # Bower and npm packages 6 | bower_components 7 | node_modules 8 | 9 | # Dist and temp folder 10 | dist 11 | src/assets/js 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # xaviro.com 2 | My Portfolio 3 | 4 | ![My Portfolio](/dist/img/facebook.png "Visual Preview") 5 | *** 6 | **Key Technologies Used:** HTML, CSS, Javascript, AngularJS, Bootstrap 7 | *** 8 | [**Go to Site**](http://www.xaviro.com) -------------------------------------------------------------------------------- /comps/devices.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/comps/devices.ai -------------------------------------------------------------------------------- /comps/intro.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/comps/intro.ai -------------------------------------------------------------------------------- /comps/intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/comps/intro.png -------------------------------------------------------------------------------- /comps/rosie.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/comps/rosie.psd -------------------------------------------------------------------------------- /comps/skills.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/comps/skills.ai -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xaviro", 3 | "version": "2.0.0", 4 | "description": "My Portfolio", 5 | "main": "server.js", 6 | "engines": { 7 | "node": ">=14.5.0" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "keywords": [ 13 | "angular", 14 | "bootstrap", 15 | "node", 16 | "mongodb" 17 | ], 18 | "author": "Xavier Reyes Ochoa", 19 | "license": "MIT", 20 | "devDependencies": { 21 | "browser-sync": "^2.26.13", 22 | "del": "^2.2.2", 23 | "gulp": "^4.0.2", 24 | "gulp-autoprefixer": "^3.1.1", 25 | "gulp-clean-css": "^4.3.0", 26 | "gulp-compile-handlebars": "^0.6.1", 27 | "gulp-htmlmin": "^5.0.1", 28 | "gulp-imagemin": "^7.1.0", 29 | "gulp-include": "^2.3.1", 30 | "gulp-inline": "^0.1.3", 31 | "gulp-jshint": "^2.1.0", 32 | "gulp-sass": "^4.1.0", 33 | "gulp-uglify": "^2.0.0", 34 | "imagemin-gifsicle": "^7.0.0", 35 | "imagemin-jpegtran": "^7.0.0", 36 | "imagemin-optipng": "^8.0.0", 37 | "imagemin-svgo": "^8.0.0", 38 | "jshint": "^2.12.0" 39 | }, 40 | "dependencies": { 41 | "bootstrap": "^3.4.1", 42 | "bootstrap-sass": "^3.3.7", 43 | "gsap": "^3.6.0", 44 | "jquery": "^3.5.1", 45 | "video.js": "^5.11.7" 46 | }, 47 | "browserslist": [ 48 | "Android 2.3", 49 | "Android >= 4", 50 | "Chrome >= 20", 51 | "Firefox >= 24", 52 | "Explorer >= 8", 53 | "iOS >= 6", 54 | "Opera >= 12", 55 | "Safari >= 6" 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | 3 | function serve(build, dir, port) { 4 | 5 | var server = new express(); 6 | 7 | server.listen(port, function() { 8 | server.use(express.static(__dirname + dir)); 9 | console.log('Serving ' + build + ' at http://localhost:' + port); 10 | }); 11 | 12 | } 13 | 14 | serve('source', '/src', 4000); 15 | serve('distribution', '/dist', 8000); 16 | -------------------------------------------------------------------------------- /src/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 404 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 33 | 34 | 35 | 36 | 37 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/assets/app/_experience.js: -------------------------------------------------------------------------------- 1 | /*---------- EXPERIENCE MODAL ----------*/ 2 | 3 | $('.btn-resume').click(function() { 4 | $("#resume-modal").modal(); 5 | }); 6 | -------------------------------------------------------------------------------- /src/assets/app/_header.js: -------------------------------------------------------------------------------- 1 | /*---------- INTRO ANIMATION ----------*/ 2 | 3 | //self executing intro function: computer, circle and the other functions 4 | (function() { 5 | 6 | //svg 7 | var $svgIntro = $('#svg-intro'); 8 | 9 | //svg elements 10 | var $circle = $('#svg-intro-circle'); 11 | var $computer = $('#svg-intro-computer'); 12 | var $screen = $('#svg-intro-screen'); 13 | var $code = $('#svg-intro-code'); 14 | 15 | var tl = new TimelineMax({ delay: 0.5 }); 16 | tl.fromTo($svgIntro, 1, { transformOrigin: '50% 50%', scale: 0.8 }, { opacity: 1, scale: 1, ease: Power4.easeOut, onComplete: animateIcons }) 17 | .fromTo($circle, 1.2, { transformOrigin: '50% 50%', scale: 0.8 }, { opacity: 1, scale: 1, ease: Back.easeOut.config(4) }, '=-1') 18 | .fromTo($computer, 1, { y: '100%' }, { y: '0%', opacity: 1, ease: Power4.easeOut }, '=-0.5') 19 | .to($screen, 1, { opacity: 1, ease: RoughEase.ease.config({ template: Power0.easeNone, strength: 1, points: 20, taper: "none", randomize: true, clamp: false }) }, '=-0.5') 20 | .to($code, 0.5, { opacity: 1, onComplete: loopUnderscore }) 21 | 22 | 23 | })(); 24 | 25 | //icons 26 | function animateIcons() { 27 | 28 | //svg 29 | var $svgIntro = $('#svg-intro'); 30 | 31 | //svg elements 32 | var $icons = $('.svg-intro-icon'); 33 | var $icon1 = $('#svg-intro-icon1'); 34 | var $icon2 = $('#svg-intro-icon2'); 35 | var $icon3 = $('#svg-intro-icon3'); 36 | var $icon4 = $('#svg-intro-icon4'); 37 | var $icon5 = $('#svg-intro-icon5'); 38 | var $icon6 = $('#svg-intro-icon6'); 39 | var $shadow = $('#svg-intro-shadow'); 40 | 41 | 42 | var tl = new TimelineMax(); 43 | tl.fromTo($svgIntro, 2, { transformOrigin: '50% 50%', scale: 1 }, { scale: 1.1, ease: Sine.easeInOut }) 44 | .to($svgIntro, 0.5, { scale: 1, ease: Bounce.easeOut, onComplete: animateLetters }) 45 | .to($icon1, 2, { x: '400%', opacity: 0.5, ease: Power4.easeOut }, '=-0.3') 46 | .to($icon2, 1.5, { x: '200%', opacity: 0.7, ease: Power4.easeOut }, '=-2') 47 | .to($icon3, 1, { x: '100%', opacity: 0.9, ease: Power4.easeOut }, '=-2') 48 | .to($icon5, 2, { x: '-400%', opacity: 0.5, ease: Power4.easeOut }, '=-2') 49 | .to($icon6, 1.5, { x: '-200%', opacity: 0.7, ease: Power4.easeOut }, '=-2') 50 | .to($icon4, 1, { x: '-100%', opacity: 0.9, ease: Power4.easeOut }, '=-2') 51 | .to($shadow, 3, { opacity: 1 }); 52 | 53 | } 54 | 55 | //letters 56 | function animateLetters() { 57 | 58 | var $lead = $('.lead'); 59 | var $video = $('#bg-video'); 60 | 61 | TweenMax.to($lead, 1, { opacity: 1 }); 62 | TweenMax.to($video, 3, { delay: 1, opacity: 0.2 }); 63 | 64 | 65 | $('.xaviro').each(function(i) { 66 | var letter = $(this); 67 | 68 | setTimeout(function() { 69 | 70 | letter.removeClass('transparent'); 71 | }, 100 * i); 72 | }); 73 | 74 | $('.com').each(function(i) { 75 | var letter = $(this); 76 | 77 | setTimeout(function() { 78 | 79 | letter.addClass('transparent'); 80 | }, 100 * i); 81 | }); 82 | 83 | } 84 | 85 | //infinite underscore 86 | function loopUnderscore() { 87 | 88 | var $underscore = $('#svg-intro-underscore'); 89 | TweenMax.fromTo($underscore, 0.5, { opacity: 1 }, { delay: 0.5, opacity: 0, repeatDelay: 0.5, repeat: -1, yoyo: true, ease: SteppedEase.config(1) }) 90 | 91 | } 92 | -------------------------------------------------------------------------------- /src/assets/app/_navbar.js: -------------------------------------------------------------------------------- 1 | /*---------- FIXED NAVBAR ON SCROLL ----------*/ 2 | 3 | var windowVar = $(window); 4 | var body = $('body'); 5 | 6 | var collapsible = $("#collapsible"); 7 | var scrollFade = $("#scrollFade"); 8 | 9 | //navbar fixed 10 | var nav = $('#navbar'); 11 | var navParent = $('#nav-parent'); 12 | var section = $('#portfolio'); 13 | 14 | var navParentPosition, windowPosition, sectionPosition, 15 | counter = "on"; 16 | 17 | function changingValues() { 18 | navParentPosition = navParent.offset().top; 19 | windowPosition = windowVar.scrollTop(); 20 | sectionPosition = section.offset().top; 21 | } 22 | 23 | 24 | windowVar.scroll(function() { 25 | 26 | 27 | collapsible.collapse('hide'); 28 | 29 | changingValues(); 30 | 31 | if (windowPosition >= navParentPosition && counter == "on") { 32 | 33 | nav.addClass('navbar-fixed-top'); 34 | section.css("margin-top", sectionPosition - navParentPosition); 35 | scrollFade.fadeIn(); 36 | 37 | counter = "off"; 38 | 39 | } else if (windowPosition < navParentPosition && counter == "off") { 40 | 41 | nav.removeClass('navbar-fixed-top'); 42 | section.css("margin-top", 0); 43 | scrollFade.fadeOut(); 44 | 45 | counter = "on"; 46 | 47 | } 48 | 49 | }); 50 | 51 | 52 | /*---------- ANCHOR LINKS ANIMATION ----------*/ 53 | 54 | var sections = ['portfolio', 'skillset', 'experience', 'contact']; 55 | 56 | $.each(sections, function(i, val) { 57 | 58 | $('#btn-' + val).click(function(event) { 59 | event.preventDefault(); 60 | TweenMax.to(window, 1, { scrollTo: { y: '#' + val, offsetY: 0 } }); 61 | }); 62 | 63 | }); 64 | 65 | -------------------------------------------------------------------------------- /src/assets/app/app.js: -------------------------------------------------------------------------------- 1 | /*---------- LIBRARIES ----------*/ 2 | 3 | //=require ../../../node_modules/jquery/dist/jquery.js 4 | //=require ../../../node_modules/bootstrap/dist/js/bootstrap.js 5 | //=require ../../../node_modules/gsap/dist/gsap.min.js 6 | //=require ../../../node_modules/gsap/dist/ScrollToPlugin.min.js 7 | //=require ../../../node_modules/gsap/dist/EasePack.min.js 8 | 9 | //video.js alse requires a css file 10 | //=require ../../../node_modules/video.js/dist/video.min.js 11 | 12 | //=require ./lib/form1.js 13 | //=require ./lib/form2.js 14 | 15 | 16 | /*---------- CUSTOM JS ----------*/ 17 | 18 | (function() { 19 | 20 | 'use strict'; 21 | 22 | //=require ./_header.js 23 | //=require ./_navbar.js 24 | //=require ./_portfolio.js 25 | //=require ./_experience.js 26 | //=require ./_contact.js 27 | 28 | /*---------- BOOTSTRAP TOOLTIP ----------*/ 29 | 30 | $('[data-toggle="tooltip"]').tooltip(); 31 | 32 | }()); 33 | -------------------------------------------------------------------------------- /src/assets/app/lib/form2.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * FormValidation (http://formvalidation.io) 3 | * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks 4 | * 5 | * @version v0.6.2-dev, built on 2015-03-13 8:15:46 AM 6 | * @author https://twitter.com/nghuuphuoc 7 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 8 | * @license http://formvalidation.io/license/ 9 | */ 10 | !function(a){FormValidation.Framework.Bootstrap=function(b,c,d){c=a.extend(!0,{button:{selector:'[type="submit"]',disabled:"disabled"},err:{clazz:"help-block",parent:"^(.*)col-(xs|sm|md|lg)-(offset-){0,1}[0-9]+(.*)$"},icon:{valid:null,invalid:null,validating:null,feedback:"form-control-feedback"},row:{selector:".form-group",valid:"has-success",invalid:"has-error",feedback:"has-feedback"}},c),FormValidation.Base.apply(this,[b,c,d])},FormValidation.Framework.Bootstrap.prototype=a.extend({},FormValidation.Base.prototype,{_fixIcon:function(a,b){var c=this._namespace,d=a.attr("type"),e=a.attr("data-"+c+"-field"),f=this.options.fields[e].row||this.options.row.selector,g=a.closest(f);if("checkbox"===d||"radio"===d){var h=a.parent();h.hasClass(d)?b.insertAfter(h):h.parent().hasClass(d)&&b.insertAfter(h.parent())}0===g.find("label").length&&b.addClass("fv-icon-no-label"),0!==g.find(".input-group").length&&b.addClass("fv-bootstrap-icon-input-group").insertAfter(g.find(".input-group").eq(0))},_createTooltip:function(a,b,c){var d=this._namespace,e=a.data(d+".icon");if(e)switch(c){case"popover":e.css({cursor:"pointer","pointer-events":"auto"}).popover("destroy").popover({container:"body",content:b,html:!0,placement:"auto top",trigger:"hover click"});break;case"tooltip":default:e.css({cursor:"pointer","pointer-events":"auto"}).tooltip("destroy").tooltip({container:"body",html:!0,placement:"auto top",title:b})}},_destroyTooltip:function(a,b){var c=this._namespace,d=a.data(c+".icon");if(d)switch(b){case"popover":d.css({cursor:"","pointer-events":"none"}).popover("destroy");break;case"tooltip":default:d.css({cursor:"","pointer-events":"none"}).tooltip("destroy")}},_hideTooltip:function(a,b){var c=this._namespace,d=a.data(c+".icon");if(d)switch(b){case"popover":d.popover("hide");break;case"tooltip":default:d.tooltip("hide")}},_showTooltip:function(a,b){var c=this._namespace,d=a.data(c+".icon");if(d)switch(b){case"popover":d.popover("show");break;case"tooltip":default:d.tooltip("show")}}}),a.fn.bootstrapValidator=function(b){var c=arguments;return this.each(function(){var d=a(this),e=d.data("formValidation")||d.data("bootstrapValidator"),f="object"==typeof b&&b;e||(e=new FormValidation.Framework.Bootstrap(this,a.extend({},{events:{formInit:"init.form.bv",formError:"error.form.bv",formSuccess:"success.form.bv",fieldAdded:"added.field.bv",fieldRemoved:"removed.field.bv",fieldInit:"init.field.bv",fieldError:"error.field.bv",fieldSuccess:"success.field.bv",fieldStatus:"status.field.bv",localeChanged:"changed.locale.bv",validatorError:"error.validator.bv",validatorSuccess:"success.validator.bv"}},f),"bv"),d.addClass("fv-form-bootstrap").data("formValidation",e).data("bootstrapValidator",e)),"string"==typeof b&&e[b].apply(e,Array.prototype.slice.call(c,1))})},a.fn.bootstrapValidator.Constructor=FormValidation.Framework.Bootstrap}(jQuery); -------------------------------------------------------------------------------- /src/assets/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/assets/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/assets/img/arrow-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/arrow-left.png -------------------------------------------------------------------------------- /src/assets/img/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/arrow-right.png -------------------------------------------------------------------------------- /src/assets/img/close.svg: -------------------------------------------------------------------------------- 1 | close -------------------------------------------------------------------------------- /src/assets/img/desktop.svg: -------------------------------------------------------------------------------- 1 | desktop -------------------------------------------------------------------------------- /src/assets/img/experience/epn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/experience/epn.png -------------------------------------------------------------------------------- /src/assets/img/experience/free.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/experience/free.png -------------------------------------------------------------------------------- /src/assets/img/experience/google.svg: -------------------------------------------------------------------------------- 1 | google -------------------------------------------------------------------------------- /src/assets/img/experience/mdd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/experience/mdd.png -------------------------------------------------------------------------------- /src/assets/img/experience/nintendo.svg: -------------------------------------------------------------------------------- 1 | nintendo -------------------------------------------------------------------------------- /src/assets/img/experience/rand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/experience/rand.png -------------------------------------------------------------------------------- /src/assets/img/ipad.svg: -------------------------------------------------------------------------------- 1 | ipad -------------------------------------------------------------------------------- /src/assets/img/link-website.svg: -------------------------------------------------------------------------------- 1 | link-website -------------------------------------------------------------------------------- /src/assets/img/mobile.svg: -------------------------------------------------------------------------------- 1 | mobile -------------------------------------------------------------------------------- /src/assets/img/portfolio/adeq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/adeq.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/carcrash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/carcrash.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/classappraisal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/classappraisal.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/devref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/devref.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/disney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/disney.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/eighties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/eighties.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/fridgebinge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/fridgebinge.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/harmonystyles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/harmonystyles.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/hdrgallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/hdrgallery.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/riskvisualizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/riskvisualizer.png -------------------------------------------------------------------------------- /src/assets/img/portfolio/rosie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/portfolio/rosie.png -------------------------------------------------------------------------------- /src/assets/img/skills/afterfx.svg: -------------------------------------------------------------------------------- 1 | aafterfx -------------------------------------------------------------------------------- /src/assets/img/skills/angular.svg: -------------------------------------------------------------------------------- 1 | angular -------------------------------------------------------------------------------- /src/assets/img/skills/bash.svg: -------------------------------------------------------------------------------- 1 | bash -------------------------------------------------------------------------------- /src/assets/img/skills/bootstrap.svg: -------------------------------------------------------------------------------- 1 | bootstrap -------------------------------------------------------------------------------- /src/assets/img/skills/css.svg: -------------------------------------------------------------------------------- 1 | css -------------------------------------------------------------------------------- /src/assets/img/skills/d3.svg: -------------------------------------------------------------------------------- 1 | d3 -------------------------------------------------------------------------------- /src/assets/img/skills/firebase.svg: -------------------------------------------------------------------------------- 1 | firebase -------------------------------------------------------------------------------- /src/assets/img/skills/git.svg: -------------------------------------------------------------------------------- 1 | git -------------------------------------------------------------------------------- /src/assets/img/skills/gulp.svg: -------------------------------------------------------------------------------- 1 | gulp -------------------------------------------------------------------------------- /src/assets/img/skills/html.svg: -------------------------------------------------------------------------------- 1 | html -------------------------------------------------------------------------------- /src/assets/img/skills/illustrator.svg: -------------------------------------------------------------------------------- 1 | illustrator -------------------------------------------------------------------------------- /src/assets/img/skills/jasmine.svg: -------------------------------------------------------------------------------- 1 | jasmine -------------------------------------------------------------------------------- /src/assets/img/skills/jquery.svg: -------------------------------------------------------------------------------- 1 | jquery -------------------------------------------------------------------------------- /src/assets/img/skills/js.svg: -------------------------------------------------------------------------------- 1 | js -------------------------------------------------------------------------------- /src/assets/img/skills/mongo.svg: -------------------------------------------------------------------------------- 1 | mongo -------------------------------------------------------------------------------- /src/assets/img/skills/node.svg: -------------------------------------------------------------------------------- 1 | node -------------------------------------------------------------------------------- /src/assets/img/skills/npm.svg: -------------------------------------------------------------------------------- 1 | npm -------------------------------------------------------------------------------- /src/assets/img/skills/photoshop.svg: -------------------------------------------------------------------------------- 1 | photoshop -------------------------------------------------------------------------------- /src/assets/img/skills/premiere.svg: -------------------------------------------------------------------------------- 1 | premiere -------------------------------------------------------------------------------- /src/assets/img/skills/sass.svg: -------------------------------------------------------------------------------- 1 | sass -------------------------------------------------------------------------------- /src/assets/img/skills/skills.svg: -------------------------------------------------------------------------------- 1 | skills -------------------------------------------------------------------------------- /src/assets/img/skills/sublime.svg: -------------------------------------------------------------------------------- 1 | sublime -------------------------------------------------------------------------------- /src/assets/img/skills/svg.svg: -------------------------------------------------------------------------------- 1 | svg -------------------------------------------------------------------------------- /src/assets/img/skills/typescript.svg: -------------------------------------------------------------------------------- 1 | typescript -------------------------------------------------------------------------------- /src/assets/img/social/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/social/facebook.png -------------------------------------------------------------------------------- /src/assets/img/social/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/social/github.png -------------------------------------------------------------------------------- /src/assets/img/social/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/social/linkedin.png -------------------------------------------------------------------------------- /src/assets/img/xl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/xl.png -------------------------------------------------------------------------------- /src/assets/img/xs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/img/xs.png -------------------------------------------------------------------------------- /src/assets/img/zoom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | zoom 10 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/res/favicon/android-chrome-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/android-chrome-144x144.png -------------------------------------------------------------------------------- /src/assets/res/favicon/android-chrome-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/android-chrome-36x36.png -------------------------------------------------------------------------------- /src/assets/res/favicon/android-chrome-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/android-chrome-48x48.png -------------------------------------------------------------------------------- /src/assets/res/favicon/android-chrome-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/android-chrome-72x72.png -------------------------------------------------------------------------------- /src/assets/res/favicon/android-chrome-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/android-chrome-96x96.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /src/assets/res/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /src/assets/res/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | #da532c 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/res/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /src/assets/res/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /src/assets/res/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /src/assets/res/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/favicon.ico -------------------------------------------------------------------------------- /src/assets/res/favicon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xaviro.com", 3 | "icons": [ 4 | { 5 | "src": "res\/favicon\/android-chrome-36x36.png?v=2", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": 0.75 9 | }, 10 | { 11 | "src": "res\/favicon\/android-chrome-48x48.png?v=2", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": 1 15 | }, 16 | { 17 | "src": "res\/favicon\/android-chrome-72x72.png?v=2", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": 1.5 21 | }, 22 | { 23 | "src": "res\/favicon\/android-chrome-96x96.png?v=2", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": 2 27 | }, 28 | { 29 | "src": "res\/favicon\/android-chrome-144x144.png?v=2", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": 3 33 | } 34 | ], 35 | "start_url": "http:\/\/xaviro.com", 36 | "display": "standalone" 37 | } 38 | -------------------------------------------------------------------------------- /src/assets/res/favicon/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/mstile-144x144.png -------------------------------------------------------------------------------- /src/assets/res/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /src/assets/res/favicon/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/mstile-310x150.png -------------------------------------------------------------------------------- /src/assets/res/favicon/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/mstile-310x310.png -------------------------------------------------------------------------------- /src/assets/res/favicon/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/favicon/mstile-70x70.png -------------------------------------------------------------------------------- /src/assets/res/favicon/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/assets/res/video/bg.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/video/bg.mp4 -------------------------------------------------------------------------------- /src/assets/res/video/fridgebinge-desktop.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/video/fridgebinge-desktop.mp4 -------------------------------------------------------------------------------- /src/assets/res/video/rosie-desktop.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/src/assets/res/video/rosie-desktop.mp4 -------------------------------------------------------------------------------- /src/assets/scss/_buttons.scss: -------------------------------------------------------------------------------- 1 | /*---------- PLACEHOLDER ----------*/ 2 | 3 | //resets some nasty behaviors 4 | %no-outline { 5 | &:focus, 6 | &:visited, 7 | &:active, 8 | &:hover { 9 | outline: none !important; 10 | } 11 | } 12 | 13 | %btn-hover { 14 | opacity: 0.75; 15 | transform-origin: 50% 50%; //just in case 16 | transition: opacity .3s ease, transform .3s ease; 17 | &:hover { 18 | opacity: 1; 19 | transform: scale(1.2) rotate(360deg); 20 | } 21 | } 22 | 23 | 24 | /*---------- STYLES ----------*/ 25 | 26 | #contact button { 27 | @extend %no-outline; 28 | background-color: $orange; 29 | color: $white; 30 | border: 1px solid darken($orange, 5%); 31 | margin: 3rem; 32 | &:hover { 33 | background-color: darken($orange, 5%); 34 | border: 1px solid darken($orange, 10%); 35 | color: $white; 36 | } 37 | } 38 | 39 | .btn-close { 40 | @extend %no-outline; 41 | width: 30px; 42 | //animation 43 | @extend %btn-hover; 44 | } 45 | 46 | .btn-device { 47 | @extend %no-outline; 48 | width: 40px; 49 | height: 50px; 50 | background-color: $white; 51 | border-radius: 50%; //to improve style of shadow that appears when button is clicked 52 | padding: 0; //overwrites button padding 53 | margin: 10px; 54 | //animation 55 | @extend %btn-hover; 56 | } 57 | -------------------------------------------------------------------------------- /src/assets/scss/_fonts.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'Montserrat', sans-serif; 3 | color: $gray2; 4 | } 5 | 6 | .lead, 7 | .section { 8 | letter-spacing: 0.3rem; 9 | } 10 | 11 | #header, 12 | #footer, 13 | .even { 14 | color: $white; 15 | } 16 | 17 | h2 { 18 | text-transform: uppercase; 19 | } 20 | 21 | .half-size { 22 | font-size: 1rem; 23 | letter-spacing: 0.3rem; 24 | } 25 | 26 | #portfolio .glyphicon { 27 | font-size: 10rem; 28 | } -------------------------------------------------------------------------------- /src/assets/scss/_form.scss: -------------------------------------------------------------------------------- 1 | .form-control, 2 | .form-control:focus { 3 | font-size: 2rem; 4 | color: $black; 5 | border: 0; 6 | background-color: transparent; 7 | box-shadow: none; 8 | cursor: pointer; 9 | } 10 | 11 | .form-control::-webkit-input-placeholder { 12 | color: white; 13 | } 14 | 15 | .form-control:-moz-placeholder { 16 | color: white; 17 | } 18 | 19 | .form-control::-moz-placeholder { 20 | color: white; 21 | } 22 | 23 | .form-control:-ms-input-placeholder { 24 | color: white; 25 | } 26 | 27 | label { 28 | opacity: 0; 29 | transition: all ease .5s; 30 | } 31 | 32 | .has-success .form-control, 33 | .has-success .form-control:focus, 34 | .has-error .form-control, 35 | .has-error .form-control:focus { 36 | border: 0; 37 | background-color: transparent; 38 | box-shadow: none; 39 | } 40 | 41 | .has-error { 42 | .help-block, 43 | .glyphicon { 44 | color: $yellow; 45 | } 46 | } 47 | 48 | .has-success { 49 | .help-block, 50 | .glyphicon { 51 | color: $green; 52 | } 53 | } 54 | 55 | textarea { 56 | resize: none 57 | } -------------------------------------------------------------------------------- /src/assets/scss/_header.scss: -------------------------------------------------------------------------------- 1 | /* BACKGROUND VIDEO */ 2 | 3 | //parent 4 | #header { 5 | padding: 10rem 0 5rem; 6 | position: relative; 7 | overflow: hidden; 8 | background: linear-gradient($black, darken($black, 3%)); 9 | .container-fluid { 10 | position: relative; 11 | } 12 | } 13 | 14 | #bg-video { 15 | position: absolute; 16 | top: 50%; 17 | left: 50%; 18 | transform: translate(-50%, -50%); 19 | min-width: 100%; 20 | min-height: 100%; 21 | } 22 | 23 | //letter title 24 | .transparent { 25 | color: transparent; 26 | font-size: 0rem; 27 | } 28 | 29 | .xaviro, 30 | .com { 31 | transition: font-size 0.5s ease, color 1.5s; 32 | } 33 | 34 | //bar name 35 | #scrollFade { 36 | display: none; 37 | } 38 | 39 | #header-logo, 40 | .lead { 41 | opacity: 0; 42 | transition: all 2s ease; 43 | } 44 | 45 | .navbar-fixed-top { 46 | padding: 0.5rem 0; 47 | transition: padding .3s; 48 | } 49 | 50 | 51 | /*---------- SVG INTRO WITH HEADER LOGO ----------*/ 52 | 53 | #svg-intro { 54 | width: 300px; 55 | max-width: 40%; //responsive, like 100% but 40% because some elements overflow the svg element 56 | overflow: visible; 57 | } 58 | 59 | 60 | /*---------- INITIALIZE ANIMATION ----------*/ 61 | 62 | #svg-intro, 63 | #svg-intro-circle, 64 | #svg-intro-computer, 65 | #svg-intro-shadow, 66 | #svg-intro-screen, 67 | #svg-intro-code, 68 | #bg-video { 69 | opacity: 0; 70 | } 71 | 72 | #svg-intro-icon1, 73 | #svg-intro-icon2, 74 | #svg-intro-icon3, 75 | #svg-intro-icon4, 76 | #svg-intro-icon5, 77 | #svg-intro-icon6 { 78 | opacity: 0.1; 79 | } 80 | -------------------------------------------------------------------------------- /src/assets/scss/_layout.scss: -------------------------------------------------------------------------------- 1 | $amount: 3%; 2 | html, 3 | body { 4 | position: relative; 5 | background: linear-gradient($white, darken($white, $amount)); 6 | } 7 | 8 | #footer { 9 | background: linear-gradient($black, darken($black, $amount)); 10 | } 11 | 12 | #name { 13 | height: 5rem; 14 | } 15 | 16 | .even, 17 | #navbar { 18 | background: linear-gradient($blue, darken($blue, $amount)); 19 | } 20 | 21 | #footer { 22 | padding: 3rem 0; 23 | } 24 | 25 | .section { 26 | padding-top: 7rem; 27 | padding-bottom: 7rem; 28 | } 29 | 30 | .image-container { 31 | padding: 1rem; 32 | } -------------------------------------------------------------------------------- /src/assets/scss/_modals.scss: -------------------------------------------------------------------------------- 1 | .modal-content { 2 | background-color: $gray2; 3 | padding: 0; 4 | } 5 | 6 | .modal-subcontainer { 7 | text-align: left; 8 | font-family: 'Open Sans'; 9 | .modal-head { 10 | padding: 0 3% 1%; 11 | } 12 | #resume-head { 13 | color: $white; 14 | } 15 | #resume-body { 16 | background-color: $white; 17 | } 18 | #resume-footer { 19 | padding: 2% 0 0; 20 | margin-top: 3%; 21 | background-color: #ff7866; 22 | } 23 | article { 24 | padding: 0 5%; 25 | } 26 | ul { 27 | padding-left: 5%; 28 | } 29 | h1 { 30 | padding-top: 5%; 31 | font-size: 24pt; 32 | font-weight: 700; 33 | } 34 | h6 { 35 | font-size: 8pt; 36 | } 37 | a { 38 | color: $blue; 39 | text-decoration: none; 40 | transition: color .3s ease; 41 | &:hover { 42 | color: $orange; 43 | } 44 | } 45 | h3, 46 | p { 47 | font-size: 11pt; 48 | } 49 | h3 { 50 | width: 100%; 51 | background-color: #36bed9; 52 | color: $white; 53 | font-weight: bold; 54 | padding: 1%; 55 | } 56 | h4 { 57 | font-weight: bold; 58 | font-size: 10pt; 59 | } 60 | li { 61 | text-align: justify; 62 | } 63 | .circle-list { 64 | list-style-type: circle; 65 | } 66 | } 67 | 68 | .color-cleared { 69 | background-color: $white; 70 | } 71 | -------------------------------------------------------------------------------- /src/assets/scss/_navbar.scss: -------------------------------------------------------------------------------- 1 | .navbar-custom { 2 | box-shadow: 0px 0px 10px 1px $gray2; 3 | .navbar-brand { 4 | transition: all ease .3s; 5 | color: $black; 6 | &:hover, 7 | &:focus { 8 | color: $white; 9 | } 10 | } 11 | .navbar-nav { 12 | > li > a { 13 | color: $white; 14 | transition: color .3s ease, background-color .3s ease; 15 | &:hover, 16 | &:focus { 17 | color: $black; 18 | background-color: $white; 19 | } 20 | } 21 | > .active > a { 22 | &, 23 | &:hover, 24 | &:focus { 25 | background-color: darken($blue, 5%); 26 | } 27 | } 28 | } 29 | .navbar-toggle { 30 | border-radius: 2rem; 31 | border-color: transparent; 32 | &:hover { 33 | background-color: $black; 34 | } 35 | .icon-bar { 36 | background-color: $white; 37 | } 38 | } 39 | .navbar-collapse, 40 | .navbar-form { 41 | border-color: $blue; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/assets/scss/_responsive.scss: -------------------------------------------------------------------------------- 1 | #min-email { 2 | display: none; 3 | font-size: 1rem; 4 | } 5 | 6 | @media (max-width: 460px) { 7 | h1, 8 | h2 { 9 | font-size: 2rem; 10 | } 11 | // not working...because of jquery #scrollFade {display: none;} 12 | #experience .image-container { 13 | height: auto; 14 | } 15 | h5 { 16 | display: none; 17 | } 18 | #scrollFade { 19 | font-size: 1.5rem; 20 | } 21 | .half-size, 22 | .min-footer { 23 | display: none; 24 | } 25 | .form-control, 26 | .form-control:focus { 27 | font-size: 1.5rem; 28 | } 29 | .btn-device { 30 | width: 40px; 31 | } 32 | } 33 | 34 | @media (max-width: 270px) { 35 | #scrollFade { 36 | font-size: 0rem; 37 | } 38 | h1, 39 | h2 { 40 | font-size: 1.5rem; 41 | } 42 | form { 43 | display: none; 44 | } 45 | #min-email { 46 | display: block; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/assets/scss/_tricks.scss: -------------------------------------------------------------------------------- 1 | hr { 2 | height: 0.1rem; 3 | max-width: 100%; 4 | border: 0; 5 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0), $blue, rgba(0, 0, 0, 0)); 6 | } 7 | 8 | .even { 9 | hr { 10 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0), $white, rgba(0, 0, 0, 0)); 11 | } 12 | } 13 | 14 | .section-hr { 15 | margin-bottom: 5rem; 16 | //height: 0.5rem; 17 | } 18 | 19 | .tooltip-inner { 20 | background-color: $black; 21 | color: $white; 22 | font-size: 2rem; 23 | } 24 | 25 | .tooltip.top .tooltip-arrow { 26 | border-top-color: $black; 27 | } -------------------------------------------------------------------------------- /src/assets/scss/_vars.scss: -------------------------------------------------------------------------------- 1 | $orange:#fe9141; 2 | $yellow:#ffcf41; 3 | $green:#5fff41; 4 | $blue:#36bed9; 5 | $white:#f5f9fa; 6 | $gray:#e1e4e5; 7 | $gray2:#4b4c4d; 8 | $black:#323333; 9 | -------------------------------------------------------------------------------- /src/assets/scss/style.scss: -------------------------------------------------------------------------------- 1 | //plugins 2 | @import '../../../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap.scss'; 3 | @import '../../../node_modules/video.js/dist/video-js.min.css'; 4 | //common 5 | @import 'vars'; 6 | @import 'fonts'; 7 | //sections 8 | @import 'header'; 9 | @import 'navbar'; 10 | @import 'layout'; 11 | @import 'images'; 12 | @import 'tricks'; 13 | @import 'modals'; 14 | @import 'form'; 15 | @import 'buttons'; 16 | @import 'responsive'; 17 | @import 'video'; 18 | -------------------------------------------------------------------------------- /template/partials/experience.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

Experience

6 |
7 |
8 |
9 |
10 | 11 | {{#each experience}} 12 |
13 | 14 | 15 | 16 |
{{this.name}}
17 | 18 |
19 | {{/each}} 20 |
21 |
22 | -------------------------------------------------------------------------------- /template/partials/favicons.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /template/partials/modal-portfolio.html: -------------------------------------------------------------------------------- 1 | 42 | -------------------------------------------------------------------------------- /template/partials/portfolio.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

Portfolio

6 |
7 |
8 |
9 | 27 |
28 | -------------------------------------------------------------------------------- /template/partials/skillset.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

Skillset

6 |
7 |
8 |
9 |
10 | {{#each skillset}} 11 |
12 | {{this.name}} 13 |
14 | {{/each}} 15 |
16 |
17 | -------------------------------------------------------------------------------- /utils/GitHub-Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/GitHub-Logo.png -------------------------------------------------------------------------------- /utils/aftereffects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/aftereffects.png -------------------------------------------------------------------------------- /utils/cssparalax.css: -------------------------------------------------------------------------------- 1 | // Paralax 2 | .parallax { 3 | height: 100vh; 4 | overflow-y: auto; 5 | perspective: 300px; 6 | } 7 | 8 | .layer { 9 | position: absolute; 10 | top: 0; 11 | } 12 | 13 | .top { 14 | @extend .layer; 15 | } 16 | 17 | .back { 18 | @extend .layer; 19 | transform: translateZ(-300px) scale(2); 20 | padding-top: 25vh; 21 | 22 | } 23 | 24 | .group { 25 | position: relative; 26 | height: 50vh; 27 | transform-style: preserve-3d; 28 | } 29 | 30 | .group-front { 31 | @extend .group; 32 | z-index: 5; 33 | background: linear-gradient(#59BFF6, #59A2F6); 34 | box-shadow: 0px 0px 5px 0px #000; 35 | } 36 | 37 | .group-back { 38 | @extend .group; 39 | z-index: -5; 40 | } 41 | 42 | //Custom 43 | @font-face { 44 | font-family: Manteka; 45 | src: url(Mohave.otf); 46 | } 47 | 48 | body, 49 | html { 50 | overflow: hidden; 51 | background: linear-gradient(white, #dddddd); 52 | color: #4A4A4A; 53 | } 54 | header { 55 | padding-top: 10%; 56 | width: 100%; 57 | } 58 | 59 | .first { 60 | height: 50vh; 61 | } 62 | 63 | .logo, img { 64 | height: 50px; 65 | } 66 | 67 | .moon, .title { 68 | width: 100%; 69 | background-color: red; 70 | } 71 | .footer { 72 | padding: 3%; 73 | } -------------------------------------------------------------------------------- /utils/docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/docs.png -------------------------------------------------------------------------------- /utils/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/download.png -------------------------------------------------------------------------------- /utils/drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/drive.png -------------------------------------------------------------------------------- /utils/express.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/express.xcf -------------------------------------------------------------------------------- /utils/facebook_circle_color-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/facebook_circle_color-512.png -------------------------------------------------------------------------------- /utils/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/favicon.ico -------------------------------------------------------------------------------- /utils/finalcut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/finalcut.png -------------------------------------------------------------------------------- /utils/firstformvalidator.txt: -------------------------------------------------------------------------------- 1 | data-error="Please give me a valid email address so I can write you back." required 2 | 3 | data-error="Please give me a valid phone number so I can call you back." required 4 | 5 | data-error="Please describe the reason of contact so I can gladly help you." required 6 | 7 | data-error="Please give me a valid name to know who you are." required 8 | 9 | 10 |
-------------------------------------------------------------------------------- /utils/formvalidation-master/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | _gh_pages 3 | node_modules -------------------------------------------------------------------------------- /utils/formvalidation-master/LICENSE.txt: -------------------------------------------------------------------------------- 1 | FormValidation License 2 | --- 3 | 4 | For more information about the license, see http://formvalidation.io/license/ 5 | 6 | ## FormValidation commercial license agreement 7 | 8 | This Commercial License Agreement is a binding legal agreement between you and Nguyen Huu Phuoc. 9 | By installing, copying, or using FormValidation (the Software), you agree to be bound 10 | by these terms of this Agreement. 11 | 12 | ### Grant of license 13 | 14 | Subject to the payment of the fee required and the conditions herein, you are hereby granted 15 | a non-exclusive, non-transferable right to use FormValidation (the Software) to design 16 | and develop commercial applications (Applications). 17 | 18 | ### Developer grant 19 | 20 | The FormValidation Commercial Developer License grants one license for you as one designated 21 | user (Developer) to use the Software for developing Applications. A Developer is an individual 22 | who implements the Software into Applications, most often writing the necessary code to do so. 23 | You must purchase another separate license to the Software for each and any additional Developer, 24 | or purchase a FormValidation Commercial Organization License to cover your entire organization. 25 | 26 | ### Organization grant 27 | 28 | The FormValidation Commercial Organization License grants one license for your Organization 29 | as one designated, collective user (Organization) to use the Software for developing Applications. 30 | There is no limit or restriction of the number of Developers within your Organization who 31 | may develop Applications using the Software. 32 | 33 | ### Usage 34 | 35 | You are granted the right to use and to modify the source code of the Software for use in 36 | Applications. There is no limit or restriction of the number of Applications which use the 37 | Software. You own any original work authored by you. Nguyen Huu Phuoc continues to retain 38 | all copyright and other intellectual property rights in the Software. You are not permitted 39 | to move, remove, edit, or obscure any copyright, trademark, attribution, warning or disclaimer 40 | notices in the Software. 41 | 42 | You may use the Software only to create Applications that are significantly different than 43 | and do not compete with the Software. You are granted the license to distribute the Software 44 | as part of your Applications on a royalty-free basis. Users of your Applications are permitted 45 | to use the Software or your modifications of the Software as part of your Applications. 46 | Users do not need to purchase their own commercial license for the Software, so long as they 47 | are not acting as Developers, developing their own commercial Applications with the Software. 48 | 49 | ### Warranties and remedies 50 | 51 | The Software is provided "as is", without warranty of any kind, express or implied, including 52 | but not limited to the warranties of merchantability, fitness for a particular purpose and 53 | non-infringement. Nguyen Huu Phuoc's entire liability and your exclusive remedy under this 54 | agreement shall be return of the price paid for the Software. -------------------------------------------------------------------------------- /utils/formvalidation-master/README.md: -------------------------------------------------------------------------------- 1 | # FormValidation - [Download](http://formvalidation.io/download/) 2 | 3 | | Quick links | 4 | |----------------------------------------------------------------------------------| 5 | | [Document](http://formvalidation.io) | 6 | | [Examples](http://formvalidation.io/examples/) | 7 | | [Report issues, Ask questions](https://github.com/formvalidation/support/issues) | 8 | 9 | [http://formvalidation.io](http://formvalidation.io) - The best [jQuery](http://jquery.com/) plugin to validate form fields, designed to use with: 10 | 11 | - [x] [Bootstrap](http://getbootstrap.com/) 12 | - [x] [Foundation](http://foundation.zurb.com/) 13 | - [x] [Pure](http://purecss.io/) 14 | - [x] [Semantic UI](http://semantic-ui.com/) 15 | - [x] [UIKit](http://getuikit.com/) 16 | 17 | It's developed from scratch by [@nghuuphuoc](http://twitter.com/nghuuphuoc). 18 | 19 | __Required__: [jQuery 1.9.1+](http://jquery.com/) 20 | 21 | Screenshots first because we love it! 22 | 23 | __Validating Bootstrap form__ 24 | 25 | ![Screenshot](screenshots/bootstrap.gif) 26 | 27 | __Validating Foundation form__ 28 | 29 | ![Screenshot](screenshots/foundation.gif) 30 | 31 | __Validating Pure form__ 32 | 33 | ![Screenshot](screenshots/pure.gif) 34 | 35 | __Validating Semantic UI form__ 36 | 37 | ![Screenshot](screenshots/semantic.gif) 38 | 39 | __Validating UI Kit form__ 40 | 41 | ![Screenshot](screenshots/uikit.gif) 42 | 43 | ## Live demo 44 | 45 | http://formvalidation.io/examples/ 46 | 47 | There are also many examples located in the [demo](demo) directory. 48 | 49 | You also can run the ```demo``` locally by: 50 | 51 | * Clone the repo: 52 | 53 | ``` 54 | git clone https://github.com/formvalidation/formvalidation.git 55 | ``` 56 | 57 | * Go to the cloned directory and run the command: 58 | 59 | ``` 60 | python -m SimpleHTTPServer 8000 61 | ``` 62 | 63 | * Access the demo at 64 | 65 | ``` 66 | http://localhost:8000/demo/the_demo_file_here.html 67 | ``` 68 | 69 | ## Features 70 | 71 | See the [official website](http://formvalidation.io) for the full list of features 72 | 73 | ## Download 74 | 75 | * Latest version: http://formvalidation.io/download/ 76 | * Release History: Look at the [Change Log](CHANGELOG.md) 77 | 78 | ## Documentation 79 | 80 | * [Official website](http://formvalidation.io) 81 | 82 | ## Author 83 | 84 | The __FormValidation__ plugin is written by Nguyen Huu Phuoc, aka @nghuuphuoc 85 | 86 | * [http://twitter.com/nghuuphuoc](http://twitter.com/nghuuphuoc) 87 | * [http://github.com/nghuuphuoc](http://github.com/nghuuphuoc) 88 | 89 | ## Contribution 90 | 91 | Contributions are welcome! 92 | 93 | Please notice that **your code** may be used as part of a **commercial product** if the pull request is **merged**. 94 | 95 | ## License 96 | 97 | For more information about the license, see http://formvalidation.io/license/ -------------------------------------------------------------------------------- /utils/formvalidation-master/demo/ajaxSubmit.php: -------------------------------------------------------------------------------- 1 | sprintf('Welcome %s', $userName), 6 | )); 7 | -------------------------------------------------------------------------------- /utils/formvalidation-master/demo/remote.php: -------------------------------------------------------------------------------- 1 | 'admin@domain.com', 15 | 'administrator' => 'administrator@domain.com', 16 | 'root' => 'root@domain.com', 17 | ); 18 | 19 | if (isset($_POST['username']) && array_key_exists($_POST['username'], $users)) { 20 | $valid = false; 21 | } else if (isset($_POST['email'])) { 22 | $email = $_POST['email'][0]; 23 | foreach ($users as $k => $v) { 24 | if ($email == $v) { 25 | $valid = false; 26 | break; 27 | } 28 | } 29 | } 30 | 31 | echo json_encode(array( 32 | 'valid' => $valid, 33 | )); 34 | -------------------------------------------------------------------------------- /utils/formvalidation-master/demo/remote2.php: -------------------------------------------------------------------------------- 1 | 'admin@domain.com', 14 | 'administrator' => 'administrator@domain.com', 15 | 'root' => 'root@domain.com', 16 | ); 17 | 18 | if (isset($_POST['username']) && array_key_exists($_POST['username'], $users)) { 19 | $valid = false; 20 | $message = 'The username is not available'; 21 | } else if (isset($_POST['email'])) { 22 | $email = $_POST['email']; 23 | foreach ($users as $k => $v) { 24 | if ($email == $v) { 25 | $valid = false; 26 | $message = 'The email is not available'; 27 | break; 28 | } 29 | } 30 | } 31 | 32 | echo json_encode( 33 | $valid ? array('valid' => $valid) : array('valid' => $valid, 'message' => $message) 34 | ); 35 | -------------------------------------------------------------------------------- /utils/formvalidation-master/demo/target.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FormValidation demo 5 | 6 | 7 | 8 |
9 |
10 |

Form data

11 |
12 |

This is a simple page showing the data you have just submitted

13 |
14 |
15 |
16 | 17 | -------------------------------------------------------------------------------- /utils/formvalidation-master/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "formvalidation", 3 | "version": "0.6.2-dev", 4 | "description": "The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks", 5 | "keywords": [ 6 | "jQuery", 7 | "plugin", 8 | "validate", 9 | "validator", 10 | "form", 11 | "Bootstrap", 12 | "Foundation", 13 | "Pure", 14 | "SemanticUI", 15 | "UIKit" 16 | ], 17 | "author": { 18 | "name": "Nguyen Huu Phuoc", 19 | "email": "phuoc@huuphuoc.me", 20 | "url": "https://twitter.com/nghuuphuoc" 21 | }, 22 | "homepage": "http://formvalidation.io", 23 | "bugs": { 24 | "url": "https://github.com/formvalidation/formvalidation/issues", 25 | "email": "phuoc@huuphuoc.me" 26 | }, 27 | "license": "http://formvalidation.io/license/", 28 | "main": "./dist/js/formValidation.js", 29 | "repository": { 30 | "type": "git", 31 | "url": "https://github.com/formvalidation/formvalidation.git" 32 | }, 33 | "devDependencies": { 34 | "grunt": "latest", 35 | "grunt-contrib-concat": "latest", 36 | "grunt-contrib-copy": "latest", 37 | "grunt-contrib-cssmin": "latest", 38 | "grunt-contrib-jasmine": "latest", 39 | "grunt-contrib-jshint": "latest", 40 | "grunt-contrib-uglify": "latest", 41 | "grunt-contrib-watch": "latest" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /utils/formvalidation-master/screenshots/bootstrap.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/screenshots/bootstrap.gif -------------------------------------------------------------------------------- /utils/formvalidation-master/screenshots/foundation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/screenshots/foundation.gif -------------------------------------------------------------------------------- /utils/formvalidation-master/screenshots/pure.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/screenshots/pure.gif -------------------------------------------------------------------------------- /utils/formvalidation-master/screenshots/semantic.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/screenshots/semantic.gif -------------------------------------------------------------------------------- /utils/formvalidation-master/screenshots/uikit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/screenshots/uikit.gif -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/framework/pure.js: -------------------------------------------------------------------------------- 1 | /** 2 | * FormValidation (http://formvalidation.io) 3 | * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks 4 | * 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | 10 | /** 11 | * This class supports validating Pure framework (http://purecss.io/) 12 | */ 13 | (function($) { 14 | FormValidation.Framework.Pure = function(element, options) { 15 | options = $.extend(true, { 16 | button: { 17 | selector: '[type="submit"]', 18 | // The class of disabled button 19 | // http://purecss.io/buttons/#disabled-buttons 20 | disabled: 'pure-button-disabled' 21 | }, 22 | err: { 23 | clazz: 'fv-help-block', 24 | parent: '^.*pure-control-group.*$' 25 | }, 26 | // Pure doesn't support feedback icon 27 | icon: { 28 | valid: null, 29 | invalid: null, 30 | validating: null, 31 | feedback: 'fv-control-feedback' 32 | }, 33 | row: { 34 | // http://purecss.io/forms/#aligned-form 35 | selector: '.pure-control-group', 36 | valid: 'fv-has-success', 37 | invalid: 'fv-has-error', 38 | feedback: 'fv-has-feedback' 39 | } 40 | }, options); 41 | 42 | FormValidation.Base.apply(this, [element, options]); 43 | }; 44 | 45 | FormValidation.Framework.Pure.prototype = $.extend({}, FormValidation.Base.prototype, { 46 | /** 47 | * Specific framework might need to adjust the icon position 48 | * 49 | * @param {jQuery} $field The field element 50 | * @param {jQuery} $icon The icon element 51 | */ 52 | _fixIcon: function($field, $icon) { 53 | var ns = this._namespace, 54 | type = $field.attr('type'), 55 | field = $field.attr('data-' + ns + '-field'), 56 | row = this.options.fields[field].row || this.options.row.selector, 57 | $parent = $field.closest(row); 58 | 59 | if ($parent.find('label').length === 0) { 60 | $icon.addClass('fv-icon-no-label'); 61 | } 62 | } 63 | }); 64 | }(jQuery)); 65 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/base64.js: -------------------------------------------------------------------------------- 1 | /** 2 | * base64 validator 3 | * 4 | * @link http://formvalidation.io/validators/base64/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | base64: { 13 | 'default': 'Please enter a valid base 64 encoded' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.base64 = { 19 | /** 20 | * Return true if the input value is a base 64 encoded string. 21 | * 22 | * @param {FormValidation.Base} validator The validator plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} options Can consist of the following keys: 25 | * - message: The invalid message 26 | * @returns {Boolean} 27 | */ 28 | validate: function(validator, $field, options) { 29 | var value = validator.getFieldValue($field, 'base64'); 30 | if (value === '') { 31 | return true; 32 | } 33 | 34 | return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value); 35 | } 36 | }; 37 | }(jQuery)); 38 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/bic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * bic validator 3 | * 4 | * @link http://formvalidation.io/validators/bic/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | bic: { 13 | 'default': 'Please enter a valid BIC number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.bic = { 19 | /** 20 | * Validate an Business Identifier Code (BIC), also known as ISO 9362, SWIFT-BIC, SWIFT ID or SWIFT code 21 | * 22 | * For more information see http://en.wikipedia.org/wiki/ISO_9362 23 | * 24 | * @todo The 5 and 6 characters are an ISO 3166-1 country code, this could also be validated 25 | * @param {FormValidation.Base} validator The validator plugin instance 26 | * @param {jQuery} $field Field element 27 | * @param {Object} options Can consist of the following keys: 28 | * - message: The invalid message 29 | * @returns {Object} 30 | */ 31 | validate: function(validator, $field, options) { 32 | var value = validator.getFieldValue($field, 'bic'); 33 | if (value === '') { 34 | return true; 35 | } 36 | return /^[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?$/.test(value); 37 | } 38 | }; 39 | }(jQuery)); 40 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/blank.js: -------------------------------------------------------------------------------- 1 | /** 2 | * blank validator 3 | * 4 | * @author https://twitter.com/nghuuphuoc 5 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 6 | * @license http://formvalidation.io/license/ 7 | */ 8 | (function($) { 9 | FormValidation.Validator.blank = { 10 | /** 11 | * Placeholder validator that can be used to display a custom validation message 12 | * returned from the server 13 | * Example: 14 | * 15 | * (1) a "blank" validator is applied to an input field. 16 | * (2) data is entered via the UI that is unable to be validated client-side. 17 | * (3) server returns a 400 with JSON data that contains the field that failed 18 | * validation and an associated message. 19 | * (4) ajax 400 call handler does the following: 20 | * 21 | * bv.updateMessage(field, 'blank', errorMessage); 22 | * bv.updateStatus(field, 'INVALID'); 23 | * 24 | * @see https://github.com/formvalidation/formvalidation/issues/542 25 | * @see https://github.com/formvalidation/formvalidation/pull/666 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | return true; 34 | } 35 | }; 36 | }(jQuery)); 37 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/callback.js: -------------------------------------------------------------------------------- 1 | /** 2 | * callback validator 3 | * 4 | * @link http://formvalidation.io/validators/callback/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | callback: { 13 | 'default': 'Please enter a valid value' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.callback = { 19 | html5Attributes: { 20 | message: 'message', 21 | callback: 'callback' 22 | }, 23 | 24 | /** 25 | * Return result from the callback method 26 | * 27 | * @param {FormValidation.Base} validator The validator plugin instance 28 | * @param {jQuery} $field Field element 29 | * @param {Object} options Can consist of the following keys: 30 | * - callback: The callback method that passes 2 parameters: 31 | * callback: function(fieldValue, validator, $field) { 32 | * // fieldValue is the value of field 33 | * // validator is instance of BootstrapValidator 34 | * // $field is the field element 35 | * } 36 | * - message: The invalid message 37 | * @returns {Deferred} 38 | */ 39 | validate: function(validator, $field, options) { 40 | var value = validator.getFieldValue($field, 'callback'), 41 | dfd = new $.Deferred(), 42 | result = { valid: true }; 43 | 44 | if (options.callback) { 45 | var response = FormValidation.Helper.call(options.callback, [value, validator, $field]); 46 | result = ('boolean' === typeof response || null === response) ? { valid: response } : response; 47 | } 48 | 49 | dfd.resolve($field, 'callback', result); 50 | return dfd; 51 | } 52 | }; 53 | }(jQuery)); 54 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/cusip.js: -------------------------------------------------------------------------------- 1 | /** 2 | * cusip validator 3 | * 4 | * @link http://formvalidation.io/validators/cusip/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | cusip: { 13 | 'default': 'Please enter a valid CUSIP number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.cusip = { 19 | /** 20 | * Validate a CUSIP number 21 | * Examples: 22 | * - Valid: 037833100, 931142103, 14149YAR8, 126650BG6 23 | * - Invalid: 31430F200, 022615AC2 24 | * 25 | * @see http://en.wikipedia.org/wiki/CUSIP 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} [options] Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'cusip'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | value = value.toUpperCase(); 39 | if (!/^[0-9A-Z]{9}$/.test(value)) { 40 | return false; 41 | } 42 | 43 | var converted = $.map(value.split(''), function(item) { 44 | var code = item.charCodeAt(0); 45 | return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0)) 46 | // Replace A, B, C, ..., Z with 10, 11, ..., 35 47 | ? (code - 'A'.charCodeAt(0) + 10) 48 | : item; 49 | }), 50 | length = converted.length, 51 | sum = 0; 52 | for (var i = 0; i < length - 1; i++) { 53 | var num = parseInt(converted[i], 10); 54 | if (i % 2 !== 0) { 55 | num *= 2; 56 | } 57 | if (num > 9) { 58 | num -= 9; 59 | } 60 | sum += num; 61 | } 62 | 63 | sum = (10 - (sum % 10)) % 10; 64 | return sum === parseInt(converted[length - 1], 10); 65 | } 66 | }; 67 | }(jQuery)); 68 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/digits.js: -------------------------------------------------------------------------------- 1 | /** 2 | * digits validator 3 | * 4 | * @link http://formvalidation.io/validators/digits/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | digits: { 13 | 'default': 'Please enter only digits' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.digits = { 19 | /** 20 | * Return true if the input value contains digits only 21 | * 22 | * @param {FormValidation.Base} validator Validate plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} [options] 25 | * @returns {Boolean} 26 | */ 27 | validate: function(validator, $field, options) { 28 | var value = validator.getFieldValue($field, 'digits'); 29 | if (value === '') { 30 | return true; 31 | } 32 | 33 | return /^\d+$/.test(value); 34 | } 35 | }; 36 | }(jQuery)); 37 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/ean.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ean validator 3 | * 4 | * @link http://formvalidation.io/validators/ean/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | ean: { 13 | 'default': 'Please enter a valid EAN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.ean = { 19 | /** 20 | * Validate EAN (International Article Number) 21 | * Examples: 22 | * - Valid: 73513537, 9780471117094, 4006381333931 23 | * - Invalid: 73513536 24 | * 25 | * @see http://en.wikipedia.org/wiki/European_Article_Number 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'ean'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | if (!/^(\d{8}|\d{12}|\d{13})$/.test(value)) { 39 | return false; 40 | } 41 | 42 | var length = value.length, 43 | sum = 0, 44 | weight = (length === 8) ? [3, 1] : [1, 3]; 45 | for (var i = 0; i < length - 1; i++) { 46 | sum += parseInt(value.charAt(i), 10) * weight[i % 2]; 47 | } 48 | sum = (10 - sum % 10) % 10; 49 | return (sum + '' === value.charAt(length - 1)); 50 | } 51 | }; 52 | }(jQuery)); 53 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/ein.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ein validator 3 | * 4 | * @link http://formvalidation.io/validators/ein/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | ein: { 13 | 'default': 'Please enter a valid EIN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.ein = { 19 | // The first two digits are called campus 20 | // See http://en.wikipedia.org/wiki/Employer_Identification_Number 21 | // http://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/How-EINs-are-Assigned-and-Valid-EIN-Prefixes 22 | CAMPUS: { 23 | ANDOVER: ['10', '12'], 24 | ATLANTA: ['60', '67'], 25 | AUSTIN: ['50', '53'], 26 | BROOKHAVEN: ['01', '02', '03', '04', '05', '06', '11', '13', '14', '16', '21', '22', '23', '25', '34', '51', '52', '54', '55', '56', '57', '58', '59', '65'], 27 | CINCINNATI: ['30', '32', '35', '36', '37', '38', '61'], 28 | FRESNO: ['15', '24'], 29 | KANSAS_CITY: ['40', '44'], 30 | MEMPHIS: ['94', '95'], 31 | OGDEN: ['80', '90'], 32 | PHILADELPHIA: ['33', '39', '41', '42', '43', '46', '48', '62', '63', '64', '66', '68', '71', '72', '73', '74', '75', '76', '77', '81', '82', '83', '84', '85', '86', '87', '88', '91', '92', '93', '98', '99'], 33 | INTERNET: ['20', '26', '27', '45', '46'], 34 | SMALL_BUSINESS_ADMINISTRATION: ['31'] 35 | }, 36 | 37 | /** 38 | * Validate EIN (Employer Identification Number) which is also known as 39 | * Federal Employer Identification Number (FEIN) or Federal Tax Identification Number 40 | * 41 | * @param {FormValidation.Base} validator The validator plugin instance 42 | * @param {jQuery} $field Field element 43 | * @param {Object} options Can consist of the following keys: 44 | * - message: The invalid message 45 | * @returns {Object|Boolean} 46 | */ 47 | validate: function(validator, $field, options) { 48 | var value = validator.getFieldValue($field, 'ein'); 49 | if (value === '') { 50 | return true; 51 | } 52 | 53 | if (!/^[0-9]{2}-?[0-9]{7}$/.test(value)) { 54 | return false; 55 | } 56 | // Check the first two digits 57 | var campus = value.substr(0, 2) + ''; 58 | for (var key in this.CAMPUS) { 59 | if ($.inArray(campus, this.CAMPUS[key]) !== -1) { 60 | return { 61 | valid: true, 62 | campus: key 63 | }; 64 | } 65 | } 66 | 67 | return false; 68 | } 69 | }; 70 | }(jQuery)); 71 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/grid.js: -------------------------------------------------------------------------------- 1 | /** 2 | * grid validator 3 | * 4 | * @link http://formvalidation.io/validators/grid/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | grid: { 13 | 'default': 'Please enter a valid GRId number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.grid = { 19 | /** 20 | * Validate GRId (Global Release Identifier) 21 | * Examples: 22 | * - Valid: A12425GABC1234002M, A1-2425G-ABC1234002-M, A1 2425G ABC1234002 M, Grid:A1-2425G-ABC1234002-M 23 | * - Invalid: A1-2425G-ABC1234002-Q 24 | * 25 | * @see http://en.wikipedia.org/wiki/Global_Release_Identifier 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'grid'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | value = value.toUpperCase(); 39 | if (!/^[GRID:]*([0-9A-Z]{2})[-\s]*([0-9A-Z]{5})[-\s]*([0-9A-Z]{10})[-\s]*([0-9A-Z]{1})$/g.test(value)) { 40 | return false; 41 | } 42 | value = value.replace(/\s/g, '').replace(/-/g, ''); 43 | if ('GRID:' === value.substr(0, 5)) { 44 | value = value.substr(5); 45 | } 46 | return FormValidation.Helper.mod37And36(value); 47 | } 48 | }; 49 | }(jQuery)); 50 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/hex.js: -------------------------------------------------------------------------------- 1 | /** 2 | * hex validator 3 | * 4 | * @link http://formvalidation.io/validators/hex/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | hex: { 13 | 'default': 'Please enter a valid hexadecimal number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.hex = { 19 | /** 20 | * Return true if and only if the input value is a valid hexadecimal number 21 | * 22 | * @param {FormValidation.Base} validator The validator plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} options Consist of key: 25 | * - message: The invalid message 26 | * @returns {Boolean} 27 | */ 28 | validate: function(validator, $field, options) { 29 | var value = validator.getFieldValue($field, 'hex'); 30 | if (value === '') { 31 | return true; 32 | } 33 | 34 | return /^[0-9a-fA-F]+$/.test(value); 35 | } 36 | }; 37 | }(jQuery)); 38 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/identical.js: -------------------------------------------------------------------------------- 1 | /** 2 | * identical validator 3 | * 4 | * @link http://formvalidation.io/validators/identical/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | identical: { 13 | 'default': 'Please enter the same value' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.identical = { 19 | html5Attributes: { 20 | message: 'message', 21 | field: 'field' 22 | }, 23 | 24 | /** 25 | * Bind the validator on the live change of the field to compare with current one 26 | * 27 | * @param {FormValidation.Base} validator The validator plugin instance 28 | * @param {jQuery} $field Field element 29 | * @param {Object} options Consists of the following key: 30 | * - field: The name of field that will be used to compare with current one 31 | */ 32 | init: function(validator, $field, options) { 33 | var compareWith = validator.getFieldElements(options.field); 34 | validator.onLiveChange(compareWith, 'live_identical', function() { 35 | var status = validator.getStatus($field, 'identical'); 36 | if (status !== validator.STATUS_NOT_VALIDATED) { 37 | validator.revalidateField($field); 38 | } 39 | }); 40 | }, 41 | 42 | /** 43 | * Unbind the validator on the live change of the field to compare with current one 44 | * 45 | * @param {FormValidation.Base} validator The validator plugin instance 46 | * @param {jQuery} $field Field element 47 | * @param {Object} options Consists of the following key: 48 | * - field: The name of field that will be used to compare with current one 49 | */ 50 | destroy: function(validator, $field, options) { 51 | var compareWith = validator.getFieldElements(options.field); 52 | validator.offLiveChange(compareWith, 'live_identical'); 53 | }, 54 | 55 | /** 56 | * Check if input value equals to value of particular one 57 | * 58 | * @param {FormValidation.Base} validator The validator plugin instance 59 | * @param {jQuery} $field Field element 60 | * @param {Object} options Consists of the following key: 61 | * - field: The name of field that will be used to compare with current one 62 | * @returns {Boolean} 63 | */ 64 | validate: function(validator, $field, options) { 65 | var value = validator.getFieldValue($field, 'identical'), 66 | compareWith = validator.getFieldElements(options.field); 67 | if (compareWith === null || compareWith.length === 0) { 68 | return true; 69 | } 70 | 71 | var compareValue = validator.getFieldValue(compareWith, 'identical'); 72 | if (value === compareValue) { 73 | validator.updateStatus(compareWith, validator.STATUS_VALID, 'identical'); 74 | return true; 75 | } 76 | 77 | return false; 78 | } 79 | }; 80 | }(jQuery)); 81 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/imei.js: -------------------------------------------------------------------------------- 1 | /** 2 | * imei validator 3 | * 4 | * @link http://formvalidation.io/validators/imei/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | imei: { 13 | 'default': 'Please enter a valid IMEI number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.imei = { 19 | /** 20 | * Validate IMEI (International Mobile Station Equipment Identity) 21 | * Examples: 22 | * - Valid: 35-209900-176148-1, 35-209900-176148-23, 3568680000414120, 490154203237518 23 | * - Invalid: 490154203237517 24 | * 25 | * @see http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'imei'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | switch (true) { 39 | case /^\d{15}$/.test(value): 40 | case /^\d{2}-\d{6}-\d{6}-\d{1}$/.test(value): 41 | case /^\d{2}\s\d{6}\s\d{6}\s\d{1}$/.test(value): 42 | value = value.replace(/[^0-9]/g, ''); 43 | return FormValidation.Helper.luhn(value); 44 | 45 | case /^\d{14}$/.test(value): 46 | case /^\d{16}$/.test(value): 47 | case /^\d{2}-\d{6}-\d{6}(|-\d{2})$/.test(value): 48 | case /^\d{2}\s\d{6}\s\d{6}(|\s\d{2})$/.test(value): 49 | return true; 50 | 51 | default: 52 | return false; 53 | } 54 | } 55 | }; 56 | }(jQuery)); 57 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/imo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * imo validator 3 | * 4 | * @link http://formvalidation.io/validators/imo/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | imo: { 13 | 'default': 'Please enter a valid IMO number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.imo = { 19 | /** 20 | * Validate IMO (International Maritime Organization) 21 | * Examples: 22 | * - Valid: IMO 8814275, IMO 9176187 23 | * - Invalid: IMO 8814274 24 | * 25 | * @see http://en.wikipedia.org/wiki/IMO_Number 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'imo'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | if (!/^IMO \d{7}$/i.test(value)) { 39 | return false; 40 | } 41 | 42 | // Grab just the digits 43 | var sum = 0, 44 | digits = value.replace(/^.*(\d{7})$/, '$1'); 45 | 46 | // Go over each char, multiplying by the inverse of it's position 47 | // IMO 9176187 48 | // (9 * 7) + (1 * 6) + (7 * 5) + (6 * 4) + (1 * 3) + (8 * 2) = 147 49 | // Take the last digit of that, that's the check digit (7) 50 | for (var i = 6; i >= 1; i--) { 51 | sum += (digits.slice((6 - i), -i) * (i + 1)); 52 | } 53 | 54 | return sum % 10 === parseInt(digits.charAt(6), 10); 55 | } 56 | }; 57 | }(jQuery)); 58 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/integer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * integer validator 3 | * 4 | * @link http://formvalidation.io/validators/integer/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | integer: { 13 | 'default': 'Please enter a valid number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.integer = { 19 | enableByHtml5: function($field) { 20 | return ('number' === $field.attr('type')) && ($field.attr('step') === undefined || $field.attr('step') % 1 === 0); 21 | }, 22 | 23 | /** 24 | * Return true if the input value is an integer 25 | * 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following key: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) { 34 | return false; 35 | } 36 | 37 | var value = validator.getFieldValue($field, 'integer'); 38 | if (value === '') { 39 | return true; 40 | } 41 | return /^(?:-?(?:0|[1-9][0-9]*))$/.test(value); 42 | } 43 | }; 44 | }(jQuery)); 45 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/ismn.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ismn validator 3 | * 4 | * @link http://formvalidation.io/validators/ismn/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | ismn: { 13 | 'default': 'Please enter a valid ISMN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.ismn = { 19 | /** 20 | * Validate ISMN (International Standard Music Number) 21 | * Examples: 22 | * - Valid: M230671187, 979-0-0601-1561-5, 979 0 3452 4680 5, 9790060115615 23 | * - Invalid: 9790060115614 24 | * 25 | * @see http://en.wikipedia.org/wiki/International_Standard_Music_Number 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'ismn'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | // Groups are separated by a hyphen or a space 39 | var type; 40 | switch (true) { 41 | case /^M\d{9}$/.test(value): 42 | case /^M-\d{4}-\d{4}-\d{1}$/.test(value): 43 | case /^M\s\d{4}\s\d{4}\s\d{1}$/.test(value): 44 | type = 'ISMN10'; 45 | break; 46 | case /^9790\d{9}$/.test(value): 47 | case /^979-0-\d{4}-\d{4}-\d{1}$/.test(value): 48 | case /^979\s0\s\d{4}\s\d{4}\s\d{1}$/.test(value): 49 | type = 'ISMN13'; 50 | break; 51 | default: 52 | return false; 53 | } 54 | 55 | if ('ISMN10' === type) { 56 | value = '9790' + value.substr(1); 57 | } 58 | 59 | // Replace all special characters except digits 60 | value = value.replace(/[^0-9]/gi, ''); 61 | var length = value.length, 62 | sum = 0, 63 | weight = [1, 3]; 64 | for (var i = 0; i < length - 1; i++) { 65 | sum += parseInt(value.charAt(i), 10) * weight[i % 2]; 66 | } 67 | sum = 10 - sum % 10; 68 | return (sum + '' === value.charAt(length - 1)); 69 | } 70 | }; 71 | }(jQuery)); 72 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/issn.js: -------------------------------------------------------------------------------- 1 | /** 2 | * issn validator 3 | * 4 | * @link http://formvalidation.io/validators/issn/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | issn: { 13 | 'default': 'Please enter a valid ISSN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.issn = { 19 | /** 20 | * Validate ISSN (International Standard Serial Number) 21 | * Examples: 22 | * - Valid: 0378-5955, 0024-9319, 0032-1478 23 | * - Invalid: 0032-147X 24 | * 25 | * @see http://en.wikipedia.org/wiki/International_Standard_Serial_Number 26 | * @param {FormValidation.Base} validator The validator plugin instance 27 | * @param {jQuery} $field Field element 28 | * @param {Object} options Can consist of the following keys: 29 | * - message: The invalid message 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var value = validator.getFieldValue($field, 'issn'); 34 | if (value === '') { 35 | return true; 36 | } 37 | 38 | // Groups are separated by a hyphen or a space 39 | if (!/^\d{4}\-\d{3}[\dX]$/.test(value)) { 40 | return false; 41 | } 42 | 43 | // Replace all special characters except digits and X 44 | value = value.replace(/[^0-9X]/gi, ''); 45 | var chars = value.split(''), 46 | length = chars.length, 47 | sum = 0; 48 | 49 | if (chars[7] === 'X') { 50 | chars[7] = 10; 51 | } 52 | for (var i = 0; i < length; i++) { 53 | sum += parseInt(chars[i], 10) * (8 - i); 54 | } 55 | return (sum % 11 === 0); 56 | } 57 | }; 58 | }(jQuery)); 59 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/lessThan.js: -------------------------------------------------------------------------------- 1 | /** 2 | * lessThan validator 3 | * 4 | * @link http://formvalidation.io/validators/lessThan/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | lessThan: { 13 | 'default': 'Please enter a value less than or equal to %s', 14 | notInclusive: 'Please enter a value less than %s' 15 | } 16 | } 17 | }); 18 | 19 | FormValidation.Validator.lessThan = { 20 | html5Attributes: { 21 | message: 'message', 22 | value: 'value', 23 | inclusive: 'inclusive' 24 | }, 25 | 26 | enableByHtml5: function($field) { 27 | var type = $field.attr('type'), 28 | max = $field.attr('max'); 29 | if (max && type !== 'date') { 30 | return { 31 | value: max 32 | }; 33 | } 34 | 35 | return false; 36 | }, 37 | 38 | /** 39 | * Return true if the input value is less than or equal to given number 40 | * 41 | * @param {FormValidation.Base} validator The validator plugin instance 42 | * @param {jQuery} $field Field element 43 | * @param {Object} options Can consist of the following keys: 44 | * - value: The number used to compare to. It can be 45 | * - A number 46 | * - Name of field which its value defines the number 47 | * - Name of callback function that returns the number 48 | * - A callback function that returns the number 49 | * 50 | * - inclusive [optional]: Can be true or false. Default is true 51 | * - message: The invalid message 52 | * @returns {Boolean|Object} 53 | */ 54 | validate: function(validator, $field, options) { 55 | var value = validator.getFieldValue($field, 'lessThan'); 56 | if (value === '') { 57 | return true; 58 | } 59 | 60 | value = this._format(value); 61 | if (!$.isNumeric(value)) { 62 | return false; 63 | } 64 | 65 | var locale = validator.getLocale(), 66 | compareTo = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value), 67 | compareToValue = this._format(compareTo); 68 | 69 | value = parseFloat(value); 70 | return (options.inclusive === true || options.inclusive === undefined) 71 | ? { 72 | valid: value <= compareToValue, 73 | message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].lessThan['default'], compareTo) 74 | } 75 | : { 76 | valid: value < compareToValue, 77 | message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].lessThan.notInclusive, compareTo) 78 | }; 79 | }, 80 | 81 | _format: function(value) { 82 | return (value + '').replace(',', '.'); 83 | } 84 | }; 85 | }(jQuery)); 86 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/mac.js: -------------------------------------------------------------------------------- 1 | /** 2 | * mac validator 3 | * 4 | * @link http://formvalidation.io/validators/mac/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | mac: { 13 | 'default': 'Please enter a valid MAC address' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.mac = { 19 | /** 20 | * Return true if the input value is a MAC address. 21 | * 22 | * @param {FormValidation.Base} validator The validator plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} options Can consist of the following keys: 25 | * - message: The invalid message 26 | * @returns {Boolean} 27 | */ 28 | validate: function(validator, $field, options) { 29 | var value = validator.getFieldValue($field, 'mac'); 30 | if (value === '') { 31 | return true; 32 | } 33 | 34 | return /^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/.test(value); 35 | } 36 | }; 37 | }(jQuery)); 38 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/notEmpty.js: -------------------------------------------------------------------------------- 1 | /** 2 | * notEmpty validator 3 | * 4 | * @link http://formvalidation.io/validators/notEmpty/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | notEmpty: { 13 | 'default': 'Please enter a value' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.notEmpty = { 19 | enableByHtml5: function($field) { 20 | var required = $field.attr('required') + ''; 21 | return ('required' === required || 'true' === required); 22 | }, 23 | 24 | /** 25 | * Check if input value is empty or not 26 | * 27 | * @param {FormValidation.Base} validator The validator plugin instance 28 | * @param {jQuery} $field Field element 29 | * @param {Object} options 30 | * @returns {Boolean} 31 | */ 32 | validate: function(validator, $field, options) { 33 | var type = $field.attr('type'); 34 | if ('radio' === type || 'checkbox' === type) { 35 | var ns = validator.getNamespace(); 36 | return validator 37 | .getFieldElements($field.attr('data-' + ns + '-field')) 38 | .filter(':checked') 39 | .length > 0; 40 | } 41 | 42 | if ('number' === type && $field.get(0).validity && $field.get(0).validity.badInput === true) { 43 | return true; 44 | } 45 | 46 | var value = validator.getFieldValue($field, 'notEmpty'); 47 | return $.trim(value) !== ''; 48 | } 49 | }; 50 | }(jQuery)); 51 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/numeric.js: -------------------------------------------------------------------------------- 1 | /** 2 | * numeric validator 3 | * 4 | * @link http://formvalidation.io/validators/numeric/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | numeric: { 13 | 'default': 'Please enter a valid float number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.numeric = { 19 | html5Attributes: { 20 | message: 'message', 21 | separator: 'separator' 22 | }, 23 | 24 | enableByHtml5: function($field) { 25 | return ('number' === $field.attr('type')) && ($field.attr('step') !== undefined) && ($field.attr('step') % 1 !== 0); 26 | }, 27 | 28 | /** 29 | * Validate decimal number 30 | * 31 | * @param {FormValidation.Base} validator The validator plugin instance 32 | * @param {jQuery} $field Field element 33 | * @param {Object} options Consist of key: 34 | * - message: The invalid message 35 | * - separator: The decimal separator. Can be "." (default), "," 36 | * @returns {Boolean} 37 | */ 38 | validate: function(validator, $field, options) { 39 | if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) { 40 | return false; 41 | } 42 | 43 | var value = validator.getFieldValue($field, 'numeric'); 44 | if (value === '') { 45 | return true; 46 | } 47 | var separator = options.separator || '.'; 48 | if (separator !== '.') { 49 | value = value.replace(separator, '.'); 50 | } 51 | 52 | return !isNaN(parseFloat(value)) && isFinite(value); 53 | } 54 | }; 55 | }(jQuery)); 56 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/regexp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * regexp validator 3 | * 4 | * @link http://formvalidation.io/validators/regexp/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | regexp: { 13 | 'default': 'Please enter a value matching the pattern' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.regexp = { 19 | html5Attributes: { 20 | message: 'message', 21 | regexp: 'regexp' 22 | }, 23 | 24 | enableByHtml5: function($field) { 25 | var pattern = $field.attr('pattern'); 26 | if (pattern) { 27 | return { 28 | regexp: pattern 29 | }; 30 | } 31 | 32 | return false; 33 | }, 34 | 35 | /** 36 | * Check if the element value matches given regular expression 37 | * 38 | * @param {FormValidation.Base} validator The validator plugin instance 39 | * @param {jQuery} $field Field element 40 | * @param {Object} options Consists of the following key: 41 | * - regexp: The regular expression you need to check 42 | * @returns {Boolean} 43 | */ 44 | validate: function(validator, $field, options) { 45 | var value = validator.getFieldValue($field, 'regexp'); 46 | if (value === '') { 47 | return true; 48 | } 49 | 50 | var regexp = ('string' === typeof options.regexp) ? new RegExp(options.regexp) : options.regexp; 51 | return regexp.test(value); 52 | } 53 | }; 54 | }(jQuery)); 55 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/rtn.js: -------------------------------------------------------------------------------- 1 | /** 2 | * rtn validator 3 | * 4 | * @link http://formvalidation.io/validators/rtn/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | rtn: { 13 | 'default': 'Please enter a valid RTN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.rtn = { 19 | /** 20 | * Validate a RTN (Routing transit number) 21 | * Examples: 22 | * - Valid: 021200025, 789456124 23 | * 24 | * @see http://en.wikipedia.org/wiki/Routing_transit_number 25 | * @param {FormValidation.Base} validator The validator plugin instance 26 | * @param {jQuery} $field Field element 27 | * @param {Object} options Can consist of the following keys: 28 | * - message: The invalid message 29 | * @returns {Boolean} 30 | */ 31 | validate: function(validator, $field, options) { 32 | var value = validator.getFieldValue($field, 'rtn'); 33 | if (value === '') { 34 | return true; 35 | } 36 | 37 | if (!/^\d{9}$/.test(value)) { 38 | return false; 39 | } 40 | 41 | var sum = 0; 42 | for (var i = 0; i < value.length; i += 3) { 43 | sum += parseInt(value.charAt(i), 10) * 3 44 | + parseInt(value.charAt(i + 1), 10) * 7 45 | + parseInt(value.charAt(i + 2), 10); 46 | } 47 | return (sum !== 0 && sum % 10 === 0); 48 | } 49 | }; 50 | }(jQuery)); 51 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/sedol.js: -------------------------------------------------------------------------------- 1 | /** 2 | * sedol validator 3 | * 4 | * @link http://formvalidation.io/validators/sedol/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | sedol: { 13 | 'default': 'Please enter a valid SEDOL number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.sedol = { 19 | /** 20 | * Validate a SEDOL (Stock Exchange Daily Official List) 21 | * Examples: 22 | * - Valid: 0263494, B0WNLY7 23 | * 24 | * @see http://en.wikipedia.org/wiki/SEDOL 25 | * @param {FormValidation.Base} validator The validator plugin instance 26 | * @param {jQuery} $field Field element 27 | * @param {Object} options Can consist of the following keys: 28 | * - message: The invalid message 29 | * @returns {Boolean} 30 | */ 31 | validate: function(validator, $field, options) { 32 | var value = validator.getFieldValue($field, 'sedol'); 33 | if (value === '') { 34 | return true; 35 | } 36 | 37 | value = value.toUpperCase(); 38 | if (!/^[0-9A-Z]{7}$/.test(value)) { 39 | return false; 40 | } 41 | 42 | var sum = 0, 43 | weight = [1, 3, 1, 7, 3, 9, 1], 44 | length = value.length; 45 | for (var i = 0; i < length - 1; i++) { 46 | sum += weight[i] * parseInt(value.charAt(i), 36); 47 | } 48 | sum = (10 - sum % 10) % 10; 49 | return sum + '' === value.charAt(length - 1); 50 | } 51 | }; 52 | }(jQuery)); 53 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/siren.js: -------------------------------------------------------------------------------- 1 | /** 2 | * siren validator 3 | * 4 | * @link http://formvalidation.io/validators/siren/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | siren: { 13 | 'default': 'Please enter a valid SIREN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.siren = { 19 | /** 20 | * Check if a string is a siren number 21 | * 22 | * @param {FormValidation.Base} validator The validator plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} options Consist of key: 25 | * - message: The invalid message 26 | * @returns {Boolean} 27 | */ 28 | validate: function(validator, $field, options) { 29 | var value = validator.getFieldValue($field, 'siren'); 30 | if (value === '') { 31 | return true; 32 | } 33 | 34 | if (!/^\d{9}$/.test(value)) { 35 | return false; 36 | } 37 | return FormValidation.Helper.luhn(value); 38 | } 39 | }; 40 | }(jQuery)); 41 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/siret.js: -------------------------------------------------------------------------------- 1 | /** 2 | * siret validator 3 | * 4 | * @link http://formvalidation.io/validators/siret/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | siret: { 13 | 'default': 'Please enter a valid SIRET number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.siret = { 19 | /** 20 | * Check if a string is a siret number 21 | * 22 | * @param {FormValidation.Base} validator The validator plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} options Consist of key: 25 | * - message: The invalid message 26 | * @returns {Boolean} 27 | */ 28 | validate: function(validator, $field, options) { 29 | var value = validator.getFieldValue($field, 'siret'); 30 | if (value === '') { 31 | return true; 32 | } 33 | 34 | var sum = 0, 35 | length = value.length, 36 | tmp; 37 | for (var i = 0; i < length; i++) { 38 | tmp = parseInt(value.charAt(i), 10); 39 | if ((i % 2) === 0) { 40 | tmp = tmp * 2; 41 | if (tmp > 9) { 42 | tmp -= 9; 43 | } 44 | } 45 | sum += tmp; 46 | } 47 | return (sum % 10 === 0); 48 | } 49 | }; 50 | }(jQuery)); 51 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/step.js: -------------------------------------------------------------------------------- 1 | /** 2 | * step validator 3 | * 4 | * @link http://formvalidation.io/validators/step/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | step: { 13 | 'default': 'Please enter a valid step of %s' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.step = { 19 | html5Attributes: { 20 | message: 'message', 21 | base: 'baseValue', 22 | step: 'step' 23 | }, 24 | 25 | /** 26 | * Return true if the input value is valid step one 27 | * 28 | * @param {FormValidation.Base} validator The validator plugin instance 29 | * @param {jQuery} $field Field element 30 | * @param {Object} options Can consist of the following keys: 31 | * - baseValue: The base value 32 | * - step: The step 33 | * - message: The invalid message 34 | * @returns {Boolean|Object} 35 | */ 36 | validate: function(validator, $field, options) { 37 | var value = validator.getFieldValue($field, 'step'); 38 | if (value === '') { 39 | return true; 40 | } 41 | 42 | options = $.extend({}, { baseValue: 0, step: 1 }, options); 43 | value = parseFloat(value); 44 | if (!$.isNumeric(value)) { 45 | return false; 46 | } 47 | 48 | var round = function(x, precision) { 49 | var m = Math.pow(10, precision); 50 | x = x * m; 51 | var sign = (x > 0) | -(x < 0), 52 | isHalf = (x % 1 === 0.5 * sign); 53 | if (isHalf) { 54 | return (Math.floor(x) + (sign > 0)) / m; 55 | } else { 56 | return Math.round(x) / m; 57 | } 58 | }, 59 | floatMod = function(x, y) { 60 | if (y === 0.0) { 61 | return 1.0; 62 | } 63 | var dotX = (x + '').split('.'), 64 | dotY = (y + '').split('.'), 65 | precision = ((dotX.length === 1) ? 0 : dotX[1].length) + ((dotY.length === 1) ? 0 : dotY[1].length); 66 | return round(x - y * Math.floor(x / y), precision); 67 | }; 68 | 69 | var locale = validator.getLocale(), 70 | mod = floatMod(value - options.baseValue, options.step); 71 | return { 72 | valid: mod === 0.0 || mod === options.step, 73 | message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].step['default'], [options.step]) 74 | }; 75 | } 76 | }; 77 | }(jQuery)); 78 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/stringCase.js: -------------------------------------------------------------------------------- 1 | /** 2 | * stringCase validator 3 | * 4 | * @link http://formvalidation.io/validators/stringCase/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | stringCase: { 13 | 'default': 'Please enter only lowercase characters', 14 | upper: 'Please enter only uppercase characters' 15 | } 16 | } 17 | }); 18 | 19 | FormValidation.Validator.stringCase = { 20 | html5Attributes: { 21 | message: 'message', 22 | 'case': 'case' 23 | }, 24 | 25 | /** 26 | * Check if a string is a lower or upper case one 27 | * 28 | * @param {FormValidation.Base} validator The validator plugin instance 29 | * @param {jQuery} $field Field element 30 | * @param {Object} options Consist of key: 31 | * - message: The invalid message 32 | * - case: Can be 'lower' (default) or 'upper' 33 | * @returns {Object} 34 | */ 35 | validate: function(validator, $field, options) { 36 | var value = validator.getFieldValue($field, 'stringCase'); 37 | if (value === '') { 38 | return true; 39 | } 40 | 41 | var locale = validator.getLocale(), 42 | stringCase = (options['case'] || 'lower').toLowerCase(); 43 | return { 44 | valid: ('upper' === stringCase) ? value === value.toUpperCase() : value === value.toLowerCase(), 45 | message: options.message || (('upper' === stringCase) ? FormValidation.I18n[locale].stringCase.upper : FormValidation.I18n[locale].stringCase['default']) 46 | }; 47 | } 48 | }; 49 | }(jQuery)); 50 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/uuid.js: -------------------------------------------------------------------------------- 1 | /** 2 | * uuid validator 3 | * 4 | * @link http://formvalidation.io/validators/uuid/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | uuid: { 13 | 'default': 'Please enter a valid UUID number', 14 | version: 'Please enter a valid UUID version %s number' 15 | } 16 | } 17 | }); 18 | 19 | FormValidation.Validator.uuid = { 20 | html5Attributes: { 21 | message: 'message', 22 | version: 'version' 23 | }, 24 | 25 | /** 26 | * Return true if and only if the input value is a valid UUID string 27 | * 28 | * @see http://en.wikipedia.org/wiki/Universally_unique_identifier 29 | * @param {FormValidation.Base} validator The validator plugin instance 30 | * @param {jQuery} $field Field element 31 | * @param {Object} options Consist of key: 32 | * - message: The invalid message 33 | * - version: Can be 3, 4, 5, null 34 | * @returns {Boolean|Object} 35 | */ 36 | validate: function(validator, $field, options) { 37 | var value = validator.getFieldValue($field, 'uuid'); 38 | if (value === '') { 39 | return true; 40 | } 41 | 42 | // See the format at http://en.wikipedia.org/wiki/Universally_unique_identifier#Variants_and_versions 43 | var locale = validator.getLocale(), 44 | patterns = { 45 | '3': /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, 46 | '4': /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, 47 | '5': /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, 48 | all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i 49 | }, 50 | version = options.version ? (options.version + '') : 'all'; 51 | return { 52 | valid: (null === patterns[version]) ? true : patterns[version].test(value), 53 | message: options.version 54 | ? FormValidation.Helper.format(options.message || FormValidation.I18n[locale].uuid.version, options.version) 55 | : (options.message || FormValidation.I18n[locale].uuid['default']) 56 | }; 57 | } 58 | }; 59 | }(jQuery)); 60 | -------------------------------------------------------------------------------- /utils/formvalidation-master/src/js/validator/vin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * vin validator 3 | * 4 | * @link http://formvalidation.io/validators/vin/ 5 | * @author https://twitter.com/nghuuphuoc 6 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 7 | * @license http://formvalidation.io/license/ 8 | */ 9 | (function($) { 10 | FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 11 | 'en_US': { 12 | vin: { 13 | 'default': 'Please enter a valid VIN number' 14 | } 15 | } 16 | }); 17 | 18 | FormValidation.Validator.vin = { 19 | /** 20 | * Validate an US VIN (Vehicle Identification Number) 21 | * 22 | * @param {FormValidation.Base} validator The validator plugin instance 23 | * @param {jQuery} $field Field element 24 | * @param {Object} options Consist of key: 25 | * - message: The invalid message 26 | * @returns {Boolean} 27 | */ 28 | validate: function(validator, $field, options) { 29 | var value = validator.getFieldValue($field, 'vin'); 30 | if (value === '') { 31 | return true; 32 | } 33 | 34 | // Don't accept I, O, Q characters 35 | if (!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(value)) { 36 | return false; 37 | } 38 | 39 | value = value.toUpperCase(); 40 | var chars = { 41 | A: 1, B: 2, C: 3, D: 4, E: 5, F: 6, G: 7, H: 8, 42 | J: 1, K: 2, L: 3, M: 4, N: 5, P: 7, R: 9, 43 | S: 2, T: 3, U: 4, V: 5, W: 6, X: 7, Y: 8, Z: 9, 44 | '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0 45 | }, 46 | weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2], 47 | sum = 0, 48 | length = value.length; 49 | for (var i = 0; i < length; i++) { 50 | sum += chars[value.charAt(i) + ''] * weights[i]; 51 | } 52 | 53 | var reminder = sum % 11; 54 | if (reminder === 10) { 55 | reminder = 'X'; 56 | } 57 | 58 | return (reminder + '') === value.charAt(8); 59 | } 60 | }; 61 | }(jQuery)); 62 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/helper.js: -------------------------------------------------------------------------------- 1 | var TestSuite = {}; -------------------------------------------------------------------------------- /utils/formvalidation-master/test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FormValidation test suites 6 | 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 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "valid": "false" 3 | } -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/bic.js: -------------------------------------------------------------------------------- 1 | describe('bic', function() { 2 | beforeEach(function() { 3 | $([ 4 | '
', 5 | '
', 6 | '', 7 | '
', 8 | '
' 9 | ].join('\n')).appendTo('body'); 10 | 11 | $('#bicForm').formValidation(); 12 | 13 | this.fv = $('#bicForm').data('formValidation'); 14 | this.$bic = this.fv.getFieldElements('bic'); 15 | }); 16 | 17 | afterEach(function() { 18 | $('#bicForm').formValidation('destroy').remove(); 19 | }); 20 | 21 | it('invalid bic', function() { 22 | // Test some invalid BICs 23 | var invalidSamples = [ 24 | 'ASPKAT2LXX', 'ASPKAT2LX', 'ASPKAT2LXXX1', 'DABADKK', 'RZ00AT2L303', 25 | // Invalid fist 6 characters 26 | '1SBACNBXSHA', 'D2BACNBXSHA', 'DS3ACNBXSHA', 'DSB4CNBXSHA', 'DSBA5NBXSHA', 'DSBAC6BXSHA', '1S3AC6BXSHA' 27 | ]; 28 | for (i in invalidSamples) { 29 | this.fv.resetForm(); 30 | this.$bic.val(invalidSamples[i]); 31 | this.fv.validate(); 32 | expect(this.fv.isValid()).toEqual(false); 33 | } 34 | }); 35 | 36 | it('valid bic', function() { 37 | // Examples see http://en.wikipedia.org/wiki/ISO_9362 38 | var validSamples = ['ASPKAT2LXXX', 'ASPKAT2L', 'DSBACNBXSHA', 'UNCRIT2B912', 'DABADKKK', 'RZOOAT2L303']; 39 | for (i in validSamples) { 40 | this.fv.resetForm(); 41 | this.$bic.val(validSamples[i]); 42 | this.fv.validate(); 43 | expect(this.fv.isValid()).toBeTruthy(); 44 | } 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/callback.js: -------------------------------------------------------------------------------- 1 | function validateCaptcha(value, validator, $field) { 2 | var items = $('#captchaOperation').html().split(' '), sum = parseInt(items[0]) + parseInt(items[2]); 3 | return value === sum + ''; 4 | }; 5 | 6 | describe('callback', function() { 7 | beforeEach(function() { 8 | $([ 9 | '
', 10 | '
', 11 | '', 12 | '
', 13 | '', 14 | '
', 15 | '
', 16 | '
', 17 | '
', 18 | '', 19 | '
', 20 | '
', 21 | '
' 22 | ].join('\n')).appendTo('body'); 23 | 24 | $('#callbackForm').formValidation({ 25 | fields: { 26 | captcha: { 27 | validators: { 28 | callback: { 29 | message: 'Wrong answer', 30 | callback: function(value, validator, $field) { 31 | return validateCaptcha(value, validator, $field); 32 | } 33 | } 34 | } 35 | } 36 | } 37 | }); 38 | 39 | this.fv = $('#callbackForm').data('formValidation'); 40 | this.$captcha = this.fv.getFieldElements('captcha'); 41 | this.$declarativeCaptcha = this.fv.getFieldElements('declarativeCaptcha'); 42 | }); 43 | 44 | afterEach(function() { 45 | $('#callbackForm').formValidation('destroy').remove(); 46 | }); 47 | 48 | it('execute the callback', function() { 49 | $('#captchaOperation').html('1 + 2'); 50 | 51 | this.$captcha.val('3'); 52 | this.fv.validate(); 53 | expect(this.fv.isValidField('captcha')).toBeTruthy(); 54 | 55 | this.fv.resetForm(); 56 | this.$captcha.val('5'); 57 | this.fv.validate(); 58 | expect(this.fv.isValidField('captcha')).toEqual(false); 59 | }); 60 | 61 | it('callback declarative', function() { 62 | $('#captchaOperation').html('10 + 20'); 63 | 64 | this.$declarativeCaptcha.val('40'); 65 | this.fv.validate(); 66 | expect(this.fv.isValidField('declarativeCaptcha')).toEqual(false); 67 | 68 | this.fv.resetForm(); 69 | this.$declarativeCaptcha.val('30'); 70 | this.fv.validate(); 71 | expect(this.fv.isValidField('declarativeCaptcha')).toBeTruthy(); 72 | }); 73 | }); 74 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/cusip.js: -------------------------------------------------------------------------------- 1 | describe('cusip', function() { 2 | beforeEach(function() { 3 | $([ 4 | '
', 5 | '
', 6 | '', 7 | '
', 8 | '
' 9 | ].join('\n')).appendTo('body'); 10 | $('#cusipForm').formValidation(); 11 | 12 | this.fv = $('#cusipForm').data('formValidation'); 13 | this.$cusip = this.fv.getFieldElements('cusip'); 14 | }); 15 | 16 | afterEach(function() { 17 | $('#cusipForm').formValidation('destroy').remove(); 18 | }); 19 | 20 | it('valid', function() { 21 | var samples = ['037833100', '931142103', '14149YAR8', '126650BG6']; 22 | 23 | for (var i in samples) { 24 | this.fv.resetForm(); 25 | this.$cusip.val(samples[i]); 26 | this.fv.validate(); 27 | expect(this.fv.isValidField('cusip')).toBeTruthy(); 28 | } 29 | }); 30 | 31 | it('invalid', function() { 32 | var samples = ['31430F200', '022615AC2']; 33 | 34 | for (var i in samples) { 35 | this.fv.resetForm(); 36 | this.$cusip.val(samples[i]); 37 | this.fv.validate(); 38 | expect(this.fv.isValidField('cusip')).toEqual(false); 39 | } 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/ean.js: -------------------------------------------------------------------------------- 1 | describe('ean', function() { 2 | beforeEach(function() { 3 | var html = [ 4 | '
', 5 | '
', 6 | '
', 7 | '', 8 | '
', 9 | '
', 10 | '
' 11 | ].join('\n'); 12 | 13 | $(html).appendTo('body'); 14 | $('#eanForm').formValidation(); 15 | 16 | this.fv = $('#eanForm').data('formValidation'); 17 | this.$ean = this.fv.getFieldElements('ean'); 18 | }); 19 | 20 | afterEach(function() { 21 | $('#eanForm').formValidation('destroy').parent().remove(); 22 | }); 23 | 24 | it('valid', function() { 25 | var samples = ['73513537', '9780471117094', '4006381333931']; 26 | 27 | for (var i in samples) { 28 | this.$ean.val(samples[i]); 29 | this.fv.validate(); 30 | expect(this.fv.isValidField('ean')).toBeTruthy(); 31 | } 32 | }); 33 | 34 | it('contains only digits', function() { 35 | this.$ean.val('123abcDEF!@#'); 36 | this.fv.validate(); 37 | expect(this.fv.isValidField('ean')).toEqual(false); 38 | }); 39 | 40 | it('invalid length', function() { 41 | this.$ean.val('1234567'); 42 | this.fv.validate(); 43 | expect(this.fv.isValidField('ean')).toEqual(false); 44 | }); 45 | 46 | it('invalid check digit', function() { 47 | this.$ean.val('73513536'); 48 | this.fv.validate(); 49 | expect(this.fv.isValidField('ean')).toEqual(false); 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/ein.js: -------------------------------------------------------------------------------- 1 | describe('ein', function() { 2 | beforeEach(function() { 3 | $([ 4 | '
', 5 | '
', 6 | '', 7 | '
', 8 | '
' 9 | ].join('\n')).appendTo('body'); 10 | $('#einForm').formValidation(); 11 | 12 | this.fv = $('#einForm').data('formValidation'); 13 | this.$ein = this.fv.getFieldElements('ein'); 14 | }); 15 | 16 | afterEach(function() { 17 | $('#einForm').formValidation('destroy').remove(); 18 | }); 19 | 20 | it('valid', function() { 21 | var samples = ['01-1234567', '91-1144442', '011234567']; 22 | 23 | for (var i in samples) { 24 | this.fv.resetForm(); 25 | this.$ein.val(samples[i]); 26 | this.fv.validate(); 27 | expect(this.fv.isValid()).toBeTruthy(); 28 | } 29 | }); 30 | 31 | it('invalid format', function() { 32 | var samples = ['123-45-6789']; 33 | 34 | for (var i in samples) { 35 | this.fv.resetForm(); 36 | this.$ein.val(samples[i]); 37 | this.fv.validate(); 38 | expect(this.fv.isValid()).toEqual(false); 39 | } 40 | }); 41 | 42 | it('invalid campus', function() { 43 | var samples = ['00-1234567', '07-1144442', '49-1234567']; 44 | 45 | for (var i in samples) { 46 | this.fv.resetForm(); 47 | this.$ein.val(samples[i]); 48 | this.fv.validate(); 49 | expect(this.fv.isValid()).toEqual(false); 50 | } 51 | }); 52 | 53 | it('campus', function() { 54 | $('#einForm').on('success.field.fv', function(e, data) { 55 | expect(data.result.campus).toEqual(data.element.attr('data-campus')); 56 | }); 57 | 58 | var samples = { 59 | AUSTIN: '50-1234567', 60 | BROOKHAVEN: '04-2103594', 61 | SMALL_BUSINESS_ADMINISTRATION: '31-1234567' 62 | }; 63 | 64 | for (var i in samples) { 65 | this.fv.resetForm(); 66 | this.$ein.val(samples[i]).attr('data-campus', i); 67 | this.fv.validate(); 68 | } 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/identical.js: -------------------------------------------------------------------------------- 1 | describe('identical', function() { 2 | beforeEach(function() { 3 | $([ 4 | '
', 5 | '
', 6 | '', 7 | '
', 8 | '
', 9 | '', 10 | '
', 11 | '
', 12 | '', 13 | '
', 14 | '
' 15 | ].join('\n')).appendTo('body'); 16 | 17 | $('#identicalForm').formValidation(); 18 | 19 | this.fv = $('#identicalForm').data('formValidation'); 20 | this.$a = this.fv.getFieldElements('a'); 21 | this.$b = this.fv.getFieldElements('b'); 22 | }); 23 | 24 | afterEach(function () { 25 | $('#identicalForm').formValidation('destroy').remove(); 26 | }); 27 | 28 | // #1267 29 | it('compare to field which does not use any validators', function() { 30 | this.$a.val('123'); 31 | this.$b.val('123abc'); 32 | this.fv.validate(); 33 | expect(this.fv.isValid()).toEqual(false); 34 | 35 | this.fv.resetForm(); 36 | this.$a.val('123456'); 37 | this.$b.val('123456'); 38 | this.fv.validate(); 39 | expect(this.fv.isValid()).toEqual(true); 40 | }); 41 | 42 | it('compare to hidden field', function() { 43 | this.$b.attr('data-fv-identical-field', 'hiddenField'); 44 | 45 | this.fv = $('#identicalForm').formValidation('destroy').formValidation().data('formValidation'); 46 | this.$b.val('123abc'); 47 | this.fv.validate(); 48 | expect(this.fv.isValid()).toEqual(false); 49 | 50 | this.fv.resetForm(); 51 | this.$b.val('abcdef'); 52 | this.fv.validate(); 53 | expect(this.fv.isValid()).toEqual(true); 54 | }); 55 | }); -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/imo.js: -------------------------------------------------------------------------------- 1 | describe('imo', function() { 2 | beforeEach(function() { 3 | $([ 4 | '
', 5 | '
', 6 | '', 7 | '
', 8 | '
' 9 | ].join('\n')).appendTo('body'); 10 | 11 | $('#imoForm').formValidation(); 12 | 13 | this.fv = $('#imoForm').data('formValidation'); 14 | this.$imo = this.fv.getFieldElements('imo'); 15 | }); 16 | 17 | afterEach(function() { 18 | $('#imoForm').formValidation('destroy').remove(); 19 | }); 20 | 21 | it('Valid IMO (upper)', function() { 22 | this.fv.resetForm(); 23 | this.$imo.val('IMO 9074729'); 24 | this.fv.validate(); 25 | expect(this.fv.isValid()).toBeTruthy(); 26 | }); 27 | 28 | it('Valid IMO (lower)', function() { 29 | this.fv.resetForm(); 30 | this.$imo.val('imo 9074729'); 31 | this.fv.validate(); 32 | expect(this.fv.isValid()).toBeTruthy(); 33 | }); 34 | 35 | it('Invalid IMO (bad format)', function() { 36 | this.fv.resetForm(); 37 | this.$imo.val('9074729'); 38 | this.fv.validate(); 39 | expect(this.fv.isValid()).toBeFalsy(); 40 | }); 41 | 42 | it('Invalid IMO (bad check digit)', function() { 43 | this.fv.resetForm(); 44 | this.$imo.val('IMO 9074728'); 45 | this.fv.validate(); 46 | expect(this.fv.isValid()).toBeFalsy(); 47 | }); 48 | }); 49 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/isbn.js: -------------------------------------------------------------------------------- 1 | describe('isbn', function() { 2 | beforeEach(function() { 3 | var html = [ 4 | '
', 5 | '
', 6 | '
', 7 | '', 8 | '
', 9 | '
', 10 | '
' 11 | ].join('\n'); 12 | 13 | $(html).appendTo('body'); 14 | $('#isbnForm').formValidation(); 15 | 16 | this.fv = $('#isbnForm').data('formValidation'); 17 | this.$isbn = this.fv.getFieldElements('isbn'); 18 | }); 19 | 20 | afterEach(function() { 21 | $('#isbnForm').formValidation('destroy').parent().remove(); 22 | }); 23 | 24 | it('isbn10 hyphen', function() { 25 | var samples = ['99921-58-10-7', '9971-5-0210-0', '960-425-059-0', '80-902734-1-6']; 26 | 27 | for (var i in samples) { 28 | this.$isbn.val(samples[i]); 29 | this.fv.validate(); 30 | expect(this.fv.isValidField('isbn')).toBeTruthy(); 31 | } 32 | }); 33 | 34 | it('isbn10 space', function() { 35 | var samples = ['85 359 0277 5', '1 84356 028 3', '0 684 84328 5', '0 85131 041 9', '0 943396 04 2']; 36 | 37 | for (var i in samples) { 38 | this.$isbn.val(samples[i]); 39 | this.fv.validate(); 40 | expect(this.fv.isValidField('isbn')).toBeTruthy(); 41 | } 42 | }); 43 | 44 | it('isbn10 hyphen with X', function() { 45 | var samples = ['0-8044-2957-X', '0-9752298-0-X']; 46 | for (var i in samples) { 47 | this.$isbn.val(samples[i]); 48 | this.fv.validate(); 49 | expect(this.fv.isValidField('isbn')).toBeTruthy(); 50 | } 51 | }); 52 | 53 | it('isbn10 invalid check digit', function() { 54 | this.$isbn.val('99921-58-10-6'); 55 | this.fv.validate(); 56 | expect(this.fv.isValidField('isbn')).toEqual(false); 57 | }); 58 | 59 | it('isbn13', function() { 60 | this.$isbn.val('978-0-306-40615-7'); 61 | this.fv.validate(); 62 | expect(this.fv.isValidField('isbn')).toBeTruthy(); 63 | }); 64 | 65 | it('isbn13 invalid check digit', function() { 66 | this.$isbn.val('978-0-306-40615-6'); 67 | this.fv.validate(); 68 | expect(this.fv.isValidField('isbn')).toEqual(false); 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/isin.js: -------------------------------------------------------------------------------- 1 | describe('isin', function() { 2 | beforeEach(function() { 3 | var html = [ 4 | '
', 5 | '
', 6 | '
', 7 | '', 8 | '
', 9 | '
', 10 | '
' 11 | ].join('\n'); 12 | 13 | $(html).appendTo('body'); 14 | $('#isinForm').formValidation(); 15 | 16 | this.fv = $('#isinForm').data('formValidation'); 17 | this.$isin = this.fv.getFieldElements('isin'); 18 | }); 19 | 20 | afterEach(function() { 21 | $('#isinForm').formValidation('destroy').parent().remove(); 22 | }); 23 | 24 | it('valid', function() { 25 | var samples = ['US0378331005', 'AU0000XVGZA3', 'GB0002634946']; 26 | 27 | for (var i in samples) { 28 | this.$isin.val(samples[i]); 29 | this.fv.validate(); 30 | expect(this.fv.isValidField('isin')).toBeTruthy(); 31 | } 32 | }); 33 | 34 | it('invalid country code', function() { 35 | this.$isin.val('AA0000XVGZA3'); 36 | this.fv.validate(); 37 | expect(this.fv.isValidField('isin')).toEqual(false); 38 | }); 39 | 40 | it('contains only digits and alphabet', function() { 41 | this.$isin.val('US12345ABC@#$'); 42 | this.fv.validate(); 43 | expect(this.fv.isValidField('isin')).toEqual(false); 44 | }); 45 | 46 | it('invalid length', function() { 47 | this.$isin.val('US1234567'); 48 | this.fv.validate(); 49 | expect(this.fv.isValidField('isin')).toEqual(false); 50 | }); 51 | 52 | it('invalid check digit', function() { 53 | this.$isin.val('US0378331004'); 54 | this.fv.validate(); 55 | expect(this.fv.isValidField('isin')).toEqual(false); 56 | }); 57 | }); 58 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/ismn.js: -------------------------------------------------------------------------------- 1 | describe('ismn', function() { 2 | beforeEach(function() { 3 | var html = [ 4 | '
', 5 | '
', 6 | '
', 7 | '', 8 | '
', 9 | '
', 10 | '
' 11 | ].join('\n'); 12 | 13 | $(html).appendTo('body'); 14 | $('#ismnForm').formValidation(); 15 | 16 | this.fv = $('#ismnForm').data('formValidation'); 17 | this.$ismn = this.fv.getFieldElements('ismn'); 18 | }); 19 | 20 | afterEach(function() { 21 | $('#ismnForm').formValidation('destroy').parent().remove(); 22 | }); 23 | 24 | it('valid start with M', function() { 25 | this.$ismn.val('M230671187'); 26 | this.fv.validate(); 27 | expect(this.fv.isValidField('ismn')).toBeTruthy(); 28 | }); 29 | 30 | it('valid start with 979', function() { 31 | this.$ismn.val('9790060115615'); 32 | this.fv.validate(); 33 | expect(this.fv.isValidField('ismn')).toBeTruthy(); 34 | }); 35 | 36 | it('valid contains spaces', function() { 37 | this.$ismn.val('979 0 3452 4680 5'); 38 | this.fv.validate(); 39 | expect(this.fv.isValidField('ismn')).toBeTruthy(); 40 | }); 41 | 42 | it('valid contains dashes', function() { 43 | this.$ismn.val('979-0-0601-1561-5'); 44 | this.fv.validate(); 45 | expect(this.fv.isValidField('ismn')).toBeTruthy(); 46 | }); 47 | 48 | it('invalid format', function() { 49 | this.$ismn.val('N123456789'); 50 | this.fv.validate(); 51 | expect(this.fv.isValidField('ismn')).toEqual(false); 52 | }); 53 | 54 | it('invalid check digit', function() { 55 | this.$ismn.val('9790060115614'); 56 | this.fv.validate(); 57 | expect(this.fv.isValidField('ismn')).toEqual(false); 58 | }); 59 | }); 60 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/spec/validator/issn.js: -------------------------------------------------------------------------------- 1 | describe('issn', function() { 2 | beforeEach(function() { 3 | var html = [ 4 | '
', 5 | '
', 6 | '
', 7 | '', 8 | '
', 9 | '
', 10 | '
' 11 | ].join('\n'); 12 | 13 | $(html).appendTo('body'); 14 | $('#issnForm').formValidation(); 15 | 16 | this.fv = $('#issnForm').data('formValidation'); 17 | this.$issn = this.fv.getFieldElements('issn'); 18 | }); 19 | 20 | afterEach(function() { 21 | $('#issnForm').formValidation('destroy').parent().remove(); 22 | }); 23 | 24 | it('valid', function() { 25 | var samples = ['0378-5955', '0024-9319', '0032-1478']; 26 | 27 | for (var i in samples) { 28 | this.$issn.val(samples[i]); 29 | this.fv.validate(); 30 | expect(this.fv.isValidField('issn')).toBeTruthy(); 31 | } 32 | }); 33 | 34 | it('not contains hyphen', function() { 35 | this.$issn.val('03785955'); 36 | this.fv.validate(); 37 | expect(this.fv.isValidField('issn')).toEqual(false); 38 | }); 39 | 40 | it('contains only digits, X', function() { 41 | this.$issn.val('1234-566A'); 42 | this.fv.validate(); 43 | expect(this.fv.isValidField('issn')).toEqual(false); 44 | }); 45 | 46 | it('invalid check sum', function() { 47 | this.$issn.val('0032-147X'); 48 | this.fv.validate(); 49 | expect(this.fv.isValidField('issn')).toEqual(false); 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /utils/formvalidation-master/test/valid.json: -------------------------------------------------------------------------------- 1 | { 2 | "valid": true 3 | } -------------------------------------------------------------------------------- /utils/formvalidation-master/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /utils/formvalidation-master/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /utils/formvalidation-master/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /utils/formvalidation-master/vendor/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /utils/formvalidation-master/vendor/jasmine/jasmine_favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/formvalidation-master/vendor/jasmine/jasmine_favicon.png -------------------------------------------------------------------------------- /utils/icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/icons.psd -------------------------------------------------------------------------------- /utils/indexparallax.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 |
7 |
8 |

SKILLS

9 |
10 |
11 |

Full-Stack JavaScript Developer and Designer with an engineering background keen on contributing with logical thinking and professional experience toward creating great modern responsive web apps

12 |
13 |
14 |
15 | 16 |
17 |
18 |
19 |
20 |

SKILLS

21 |
22 |
23 |
24 |
25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |
33 | 34 |
35 |
36 |
37 |
38 |

SKILLS

39 |
40 |
41 |

Full-Stack JavaScript Developer and Designer with an engineering background keen on contributing with logical thinking and professional experience toward creating great modern responsive web apps

42 |
43 |
44 |
45 | 46 | 47 |
48 |
49 |
50 |
51 |

SKILLS

52 |
53 |
54 |

Full-Stack JavaScript Developer and Designer with an engineering background keen on contributing with logical thinking and professional experience toward creating great modern responsive web apps

55 |
56 | 57 |
58 | -------------------------------------------------------------------------------- /utils/linkedin copy 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/linkedin copy 2.png -------------------------------------------------------------------------------- /utils/linkedin copy 3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/linkedin copy 3.png -------------------------------------------------------------------------------- /utils/linkedin copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/linkedin copy.png -------------------------------------------------------------------------------- /utils/linkedin logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/linkedin logo.png -------------------------------------------------------------------------------- /utils/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/linkedin.png -------------------------------------------------------------------------------- /utils/linkedin.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/linkedin.xcf -------------------------------------------------------------------------------- /utils/logic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logic.png -------------------------------------------------------------------------------- /utils/logos/bash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/bash.png -------------------------------------------------------------------------------- /utils/logos/cont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/cont.png -------------------------------------------------------------------------------- /utils/logos/css.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/css.xcf -------------------------------------------------------------------------------- /utils/logos/edu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/edu.png -------------------------------------------------------------------------------- /utils/logos/expe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/expe.png -------------------------------------------------------------------------------- /utils/logos/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/github.png -------------------------------------------------------------------------------- /utils/logos/googledrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/googledrive.png -------------------------------------------------------------------------------- /utils/logos/googlemapsapi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/googlemapsapi.png -------------------------------------------------------------------------------- /utils/logos/html.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/html.xcf -------------------------------------------------------------------------------- /utils/logos/html2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/html2.png -------------------------------------------------------------------------------- /utils/logos/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/logo.png -------------------------------------------------------------------------------- /utils/logos/photoshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/photoshop.png -------------------------------------------------------------------------------- /utils/logos/php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/php.png -------------------------------------------------------------------------------- /utils/logos/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/python.png -------------------------------------------------------------------------------- /utils/logos/sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/sql.png -------------------------------------------------------------------------------- /utils/logos/tolls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/tolls.png -------------------------------------------------------------------------------- /utils/logos/work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/logos/work.png -------------------------------------------------------------------------------- /utils/nginx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xrochoa/PortfolioBuild/16df471bd4b5fd4b866971bb81acb8f168a75c56/utils/nginx.png --------------------------------------------------------------------------------