♻️ refactor: format code
This commit is contained in:
+130
@@ -0,0 +1,130 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
# Based on Node.gitignore ( https://github.com/github/gitignore/blob/master/Node.gitignore )
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
web_modules/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test
|
||||||
|
.env.test.local
|
||||||
|
.env.production
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# yarn v2
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
||||||
|
.pnp
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
Vendored
+4388
-1
File diff suppressed because one or more lines are too long
+1022
-899
File diff suppressed because it is too large
Load Diff
@@ -5,11 +5,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Loader */
|
/* Loader */
|
||||||
|
body.landing.is-preload:before {
|
||||||
body.landing.is-preload:before {
|
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.landing.is-preload:after {
|
body.landing.is-preload:after {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
var acc = document.getElementsByClassName("accordion");
|
var acc = document.getElementsByClassName('accordion')
|
||||||
var i;
|
var i
|
||||||
|
|
||||||
for (i = 0; i < acc.length; i++) {
|
for (i = 0; i < acc.length; i++) {
|
||||||
acc[i].addEventListener("click", function() {
|
acc[i].addEventListener('click', function () {
|
||||||
/* Toggle between adding and removing the "active" class,
|
/* Toggle between adding and removing the "active" class,
|
||||||
to highlight the button that controls the panel */
|
to highlight the button that controls the panel */
|
||||||
this.classList.toggle("active");
|
this.classList.toggle('active')
|
||||||
|
|
||||||
/* Toggle between hiding and showing the active panel */
|
/* Toggle between hiding and showing the active panel */
|
||||||
var panel = this.nextElementSibling;
|
var panel = this.nextElementSibling
|
||||||
if (panel.style.maxHeight) {
|
if (panel.style.maxHeight) {
|
||||||
panel.style.maxHeight = null;
|
panel.style.maxHeight = null
|
||||||
} else {
|
} else {
|
||||||
panel.style.maxHeight = panel.scrollHeight + "px";
|
panel.style.maxHeight = panel.scrollHeight + 'px'
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
Vendored
+127
-1
@@ -1,2 +1,128 @@
|
|||||||
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
|
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
|
||||||
var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e<t.events.length;e++)n=t.events[e],t.active(n.query)?n.state||(n.state=!0,n.handler()):n.state&&(n.state=!1)}};return e._=t,e.on=function(e,n){t.on(e,n)},e.active=function(e){return t.active(e)},e}();!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.breakpoints=t()}(this,function(){return breakpoints});
|
var breakpoints = (function () {
|
||||||
|
'use strict'
|
||||||
|
function e(e) {
|
||||||
|
t.init(e)
|
||||||
|
}
|
||||||
|
var t = {
|
||||||
|
list: null,
|
||||||
|
media: {},
|
||||||
|
events: [],
|
||||||
|
init: function (e) {
|
||||||
|
;(t.list = e),
|
||||||
|
window.addEventListener('resize', t.poll),
|
||||||
|
window.addEventListener('orientationchange', t.poll),
|
||||||
|
window.addEventListener('load', t.poll),
|
||||||
|
window.addEventListener('fullscreenchange', t.poll)
|
||||||
|
},
|
||||||
|
active: function (e) {
|
||||||
|
var n, a, s, i, r, d, c
|
||||||
|
if (!(e in t.media)) {
|
||||||
|
if (
|
||||||
|
('>=' == e.substr(0, 2)
|
||||||
|
? ((a = 'gte'), (n = e.substr(2)))
|
||||||
|
: '<=' == e.substr(0, 2)
|
||||||
|
? ((a = 'lte'), (n = e.substr(2)))
|
||||||
|
: '>' == e.substr(0, 1)
|
||||||
|
? ((a = 'gt'), (n = e.substr(1)))
|
||||||
|
: '<' == e.substr(0, 1)
|
||||||
|
? ((a = 'lt'), (n = e.substr(1)))
|
||||||
|
: '!' == e.substr(0, 1)
|
||||||
|
? ((a = 'not'), (n = e.substr(1)))
|
||||||
|
: ((a = 'eq'), (n = e)),
|
||||||
|
n && n in t.list)
|
||||||
|
)
|
||||||
|
if (((i = t.list[n]), Array.isArray(i))) {
|
||||||
|
if (((r = parseInt(i[0])), (d = parseInt(i[1])), isNaN(r))) {
|
||||||
|
if (isNaN(d)) return
|
||||||
|
c = i[1].substr(String(d).length)
|
||||||
|
} else c = i[0].substr(String(r).length)
|
||||||
|
if (isNaN(r))
|
||||||
|
switch (a) {
|
||||||
|
case 'gte':
|
||||||
|
s = 'screen'
|
||||||
|
break
|
||||||
|
case 'lte':
|
||||||
|
s = 'screen and (max-width: ' + d + c + ')'
|
||||||
|
break
|
||||||
|
case 'gt':
|
||||||
|
s = 'screen and (min-width: ' + (d + 1) + c + ')'
|
||||||
|
break
|
||||||
|
case 'lt':
|
||||||
|
s = 'screen and (max-width: -1px)'
|
||||||
|
break
|
||||||
|
case 'not':
|
||||||
|
s = 'screen and (min-width: ' + (d + 1) + c + ')'
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
s = 'screen and (max-width: ' + d + c + ')'
|
||||||
|
}
|
||||||
|
else if (isNaN(d))
|
||||||
|
switch (a) {
|
||||||
|
case 'gte':
|
||||||
|
s = 'screen and (min-width: ' + r + c + ')'
|
||||||
|
break
|
||||||
|
case 'lte':
|
||||||
|
s = 'screen'
|
||||||
|
break
|
||||||
|
case 'gt':
|
||||||
|
s = 'screen and (max-width: -1px)'
|
||||||
|
break
|
||||||
|
case 'lt':
|
||||||
|
s = 'screen and (max-width: ' + (r - 1) + c + ')'
|
||||||
|
break
|
||||||
|
case 'not':
|
||||||
|
s = 'screen and (max-width: ' + (r - 1) + c + ')'
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
s = 'screen and (min-width: ' + r + c + ')'
|
||||||
|
}
|
||||||
|
else
|
||||||
|
switch (a) {
|
||||||
|
case 'gte':
|
||||||
|
s = 'screen and (min-width: ' + r + c + ')'
|
||||||
|
break
|
||||||
|
case 'lte':
|
||||||
|
s = 'screen and (max-width: ' + d + c + ')'
|
||||||
|
break
|
||||||
|
case 'gt':
|
||||||
|
s = 'screen and (min-width: ' + (d + 1) + c + ')'
|
||||||
|
break
|
||||||
|
case 'lt':
|
||||||
|
s = 'screen and (max-width: ' + (r - 1) + c + ')'
|
||||||
|
break
|
||||||
|
case 'not':
|
||||||
|
s = 'screen and (max-width: ' + (r - 1) + c + '), screen and (min-width: ' + (d + 1) + c + ')'
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
s = 'screen and (min-width: ' + r + c + ') and (max-width: ' + d + c + ')'
|
||||||
|
}
|
||||||
|
} else s = '(' == i.charAt(0) ? 'screen and ' + i : i
|
||||||
|
t.media[e] = !!s && s
|
||||||
|
}
|
||||||
|
return t.media[e] !== !1 && window.matchMedia(t.media[e]).matches
|
||||||
|
},
|
||||||
|
on: function (e, n) {
|
||||||
|
t.events.push({ query: e, handler: n, state: !1 }), t.active(e) && n()
|
||||||
|
},
|
||||||
|
poll: function () {
|
||||||
|
var e, n
|
||||||
|
for (e = 0; e < t.events.length; e++) (n = t.events[e]), t.active(n.query) ? n.state || ((n.state = !0), n.handler()) : n.state && (n.state = !1)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
(e._ = t),
|
||||||
|
(e.on = function (e, n) {
|
||||||
|
t.on(e, n)
|
||||||
|
}),
|
||||||
|
(e.active = function (e) {
|
||||||
|
return t.active(e)
|
||||||
|
}),
|
||||||
|
e
|
||||||
|
)
|
||||||
|
})()
|
||||||
|
!(function (e, t) {
|
||||||
|
'function' == typeof define && define.amd ? define([], t) : 'object' == typeof exports ? (module.exports = t()) : (e.breakpoints = t())
|
||||||
|
})(this, function () {
|
||||||
|
return breakpoints
|
||||||
|
})
|
||||||
|
|||||||
Vendored
+102
-1
@@ -1,2 +1,103 @@
|
|||||||
/* browser.js v1.0 | @ajlkn | MIT licensed */
|
/* browser.js v1.0 | @ajlkn | MIT licensed */
|
||||||
var browser=function(){"use strict";var e={name:null,version:null,os:null,osVersion:null,touch:null,mobile:null,_canUse:null,canUse:function(n){e._canUse||(e._canUse=document.createElement("div"));var o=e._canUse.style,r=n.charAt(0).toUpperCase()+n.slice(1);return n in o||"Moz"+r in o||"Webkit"+r in o||"O"+r in o||"ms"+r in o},init:function(){var n,o,r,i,t=navigator.userAgent;for(n="other",o=0,r=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(RegExp.$1);break}for(e.name=n,e.version=o,n="other",o=0,r=[["ios",/([0-9_]+) like Mac OS X/,function(e){return e.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(e){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(e){return e.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null],["linux",/Linux/,null],["bsd",/BSD/,null],["unix",/X11/,null]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(r[i][2]?r[i][2](RegExp.$1):RegExp.$1);break}e.os=n,e.osVersion=o,e.touch="wp"==e.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),e.mobile="wp"==e.os||"android"==e.os||"ios"==e.os||"bb"==e.os}};return e.init(),e}();!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.browser=n()}(this,function(){return browser});
|
var browser = (function () {
|
||||||
|
'use strict'
|
||||||
|
var e = {
|
||||||
|
name: null,
|
||||||
|
version: null,
|
||||||
|
os: null,
|
||||||
|
osVersion: null,
|
||||||
|
touch: null,
|
||||||
|
mobile: null,
|
||||||
|
_canUse: null,
|
||||||
|
canUse: function (n) {
|
||||||
|
e._canUse || (e._canUse = document.createElement('div'))
|
||||||
|
var o = e._canUse.style,
|
||||||
|
r = n.charAt(0).toUpperCase() + n.slice(1)
|
||||||
|
return n in o || 'Moz' + r in o || 'Webkit' + r in o || 'O' + r in o || 'ms' + r in o
|
||||||
|
},
|
||||||
|
init: function () {
|
||||||
|
var n,
|
||||||
|
o,
|
||||||
|
r,
|
||||||
|
i,
|
||||||
|
t = navigator.userAgent
|
||||||
|
for (
|
||||||
|
n = 'other',
|
||||||
|
o = 0,
|
||||||
|
r = [
|
||||||
|
['firefox', /Firefox\/([0-9\.]+)/],
|
||||||
|
['bb', /BlackBerry.+Version\/([0-9\.]+)/],
|
||||||
|
['bb', /BB[0-9]+.+Version\/([0-9\.]+)/],
|
||||||
|
['opera', /OPR\/([0-9\.]+)/],
|
||||||
|
['opera', /Opera\/([0-9\.]+)/],
|
||||||
|
['edge', /Edge\/([0-9\.]+)/],
|
||||||
|
['safari', /Version\/([0-9\.]+).+Safari/],
|
||||||
|
['chrome', /Chrome\/([0-9\.]+)/],
|
||||||
|
['ie', /MSIE ([0-9]+)/],
|
||||||
|
['ie', /Trident\/.+rv:([0-9]+)/],
|
||||||
|
],
|
||||||
|
i = 0;
|
||||||
|
i < r.length;
|
||||||
|
i++
|
||||||
|
)
|
||||||
|
if (t.match(r[i][1])) {
|
||||||
|
;(n = r[i][0]), (o = parseFloat(RegExp.$1))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for (
|
||||||
|
e.name = n,
|
||||||
|
e.version = o,
|
||||||
|
n = 'other',
|
||||||
|
o = 0,
|
||||||
|
r = [
|
||||||
|
[
|
||||||
|
'ios',
|
||||||
|
/([0-9_]+) like Mac OS X/,
|
||||||
|
function (e) {
|
||||||
|
return e.replace('_', '.').replace('_', '')
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'ios',
|
||||||
|
/CPU like Mac OS X/,
|
||||||
|
function (e) {
|
||||||
|
return 0
|
||||||
|
},
|
||||||
|
],
|
||||||
|
['wp', /Windows Phone ([0-9\.]+)/, null],
|
||||||
|
['android', /Android ([0-9\.]+)/, null],
|
||||||
|
[
|
||||||
|
'mac',
|
||||||
|
/Macintosh.+Mac OS X ([0-9_]+)/,
|
||||||
|
function (e) {
|
||||||
|
return e.replace('_', '.').replace('_', '')
|
||||||
|
},
|
||||||
|
],
|
||||||
|
['windows', /Windows NT ([0-9\.]+)/, null],
|
||||||
|
['bb', /BlackBerry.+Version\/([0-9\.]+)/, null],
|
||||||
|
['bb', /BB[0-9]+.+Version\/([0-9\.]+)/, null],
|
||||||
|
['linux', /Linux/, null],
|
||||||
|
['bsd', /BSD/, null],
|
||||||
|
['unix', /X11/, null],
|
||||||
|
],
|
||||||
|
i = 0;
|
||||||
|
i < r.length;
|
||||||
|
i++
|
||||||
|
)
|
||||||
|
if (t.match(r[i][1])) {
|
||||||
|
;(n = r[i][0]), (o = parseFloat(r[i][2] ? r[i][2](RegExp.$1) : RegExp.$1))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
;(e.os = n),
|
||||||
|
(e.osVersion = o),
|
||||||
|
(e.touch = 'wp' == e.os ? navigator.msMaxTouchPoints > 0 : !!('ontouchstart' in window)),
|
||||||
|
(e.mobile = 'wp' == e.os || 'android' == e.os || 'ios' == e.os || 'bb' == e.os)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return e.init(), e
|
||||||
|
})()
|
||||||
|
!(function (e, n) {
|
||||||
|
'function' == typeof define && define.amd ? define([], n) : 'object' == typeof exports ? (module.exports = n()) : (e.browser = n())
|
||||||
|
})(this, function () {
|
||||||
|
return browser
|
||||||
|
})
|
||||||
|
|||||||
Vendored
+247
-1
File diff suppressed because one or more lines are too long
Vendored
+4320
-1
File diff suppressed because one or more lines are too long
Vendored
+116
-1
@@ -1,2 +1,117 @@
|
|||||||
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
|
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
|
||||||
!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery);
|
!(function (t) {
|
||||||
|
function e(t, e, n) {
|
||||||
|
return (
|
||||||
|
'string' == typeof t &&
|
||||||
|
('%' == t.slice(-1)
|
||||||
|
? (t = (parseInt(t.substring(0, t.length - 1)) / 100) * e)
|
||||||
|
: 'vh' == t.slice(-2)
|
||||||
|
? (t = (parseInt(t.substring(0, t.length - 2)) / 100) * n)
|
||||||
|
: 'px' == t.slice(-2) && (t = parseInt(t.substring(0, t.length - 2)))),
|
||||||
|
t
|
||||||
|
)
|
||||||
|
}
|
||||||
|
var n = t(window),
|
||||||
|
i = 1,
|
||||||
|
o = {}
|
||||||
|
n
|
||||||
|
.on('scroll', function () {
|
||||||
|
var e = n.scrollTop()
|
||||||
|
t.map(o, function (t) {
|
||||||
|
window.clearTimeout(t.timeoutId),
|
||||||
|
(t.timeoutId = window.setTimeout(function () {
|
||||||
|
t.handler(e)
|
||||||
|
}, t.options.delay))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.on('load', function () {
|
||||||
|
n.trigger('scroll')
|
||||||
|
}),
|
||||||
|
(jQuery.fn.scrollex = function (l) {
|
||||||
|
var s = t(this)
|
||||||
|
if (0 == this.length) return s
|
||||||
|
if (this.length > 1) {
|
||||||
|
for (var r = 0; r < this.length; r++) t(this[r]).scrollex(l)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
if (s.data('_scrollexId')) return s
|
||||||
|
var a, u, h, c, p
|
||||||
|
switch (
|
||||||
|
((a = i++),
|
||||||
|
(u = jQuery.extend({ top: 0, bottom: 0, delay: 0, mode: 'default', enter: null, leave: null, initialize: null, terminate: null, scroll: null }, l)),
|
||||||
|
u.mode)
|
||||||
|
) {
|
||||||
|
case 'top':
|
||||||
|
h = function (t, e, n, i, o) {
|
||||||
|
return t >= i && o >= t
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'bottom':
|
||||||
|
h = function (t, e, n, i, o) {
|
||||||
|
return n >= i && o >= n
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'middle':
|
||||||
|
h = function (t, e, n, i, o) {
|
||||||
|
return e >= i && o >= e
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'top-only':
|
||||||
|
h = function (t, e, n, i, o) {
|
||||||
|
return i >= t && n >= i
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'bottom-only':
|
||||||
|
h = function (t, e, n, i, o) {
|
||||||
|
return n >= o && o >= t
|
||||||
|
}
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
case 'default':
|
||||||
|
h = function (t, e, n, i, o) {
|
||||||
|
return n >= i && o >= t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
(c = function (t) {
|
||||||
|
var i,
|
||||||
|
o,
|
||||||
|
l,
|
||||||
|
s,
|
||||||
|
r,
|
||||||
|
a,
|
||||||
|
u = this.state,
|
||||||
|
h = !1,
|
||||||
|
c = this.$element.offset()
|
||||||
|
;(i = n.height()),
|
||||||
|
(o = t + i / 2),
|
||||||
|
(l = t + i),
|
||||||
|
(s = this.$element.outerHeight()),
|
||||||
|
(r = c.top + e(this.options.top, s, i)),
|
||||||
|
(a = c.top + s - e(this.options.bottom, s, i)),
|
||||||
|
(h = this.test(t, o, l, r, a)),
|
||||||
|
h != u &&
|
||||||
|
((this.state = h),
|
||||||
|
h ? this.options.enter && this.options.enter.apply(this.element) : this.options.leave && this.options.leave.apply(this.element)),
|
||||||
|
this.options.scroll && this.options.scroll.apply(this.element, [(o - r) / (a - r)])
|
||||||
|
}),
|
||||||
|
(p = { id: a, options: u, test: h, handler: c, state: null, element: this, $element: s, timeoutId: null }),
|
||||||
|
(o[a] = p),
|
||||||
|
s.data('_scrollexId', p.id),
|
||||||
|
p.options.initialize && p.options.initialize.apply(this),
|
||||||
|
s
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
(jQuery.fn.unscrollex = function () {
|
||||||
|
var e = t(this)
|
||||||
|
if (0 == this.length) return e
|
||||||
|
if (this.length > 1) {
|
||||||
|
for (var n = 0; n < this.length; n++) t(this[n]).unscrollex()
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
var i, l
|
||||||
|
return (i = e.data('_scrollexId'))
|
||||||
|
? ((l = o[i]), window.clearTimeout(l.timeoutId), delete o[i], e.removeData('_scrollexId'), l.options.terminate && l.options.terminate.apply(this), e)
|
||||||
|
: e
|
||||||
|
})
|
||||||
|
})(jQuery)
|
||||||
|
|||||||
Vendored
+42
-1
@@ -1,2 +1,43 @@
|
|||||||
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
|
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
|
||||||
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);
|
;(function (e) {
|
||||||
|
function u(s, o) {
|
||||||
|
var u, a, f
|
||||||
|
if ((u = e(s))[t] == 0) return n
|
||||||
|
a = u[i]()[r]
|
||||||
|
switch (o.anchor) {
|
||||||
|
case 'middle':
|
||||||
|
f = a - (e(window).height() - u.outerHeight()) / 2
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
case r:
|
||||||
|
f = Math.max(a, 0)
|
||||||
|
}
|
||||||
|
return typeof o[i] == 'function' ? (f -= o[i]()) : (f -= o[i]), f
|
||||||
|
}
|
||||||
|
var t = 'length',
|
||||||
|
n = null,
|
||||||
|
r = 'top',
|
||||||
|
i = 'offset',
|
||||||
|
s = 'click.scrolly',
|
||||||
|
o = e(window)
|
||||||
|
e.fn.scrolly = function (i) {
|
||||||
|
var o,
|
||||||
|
a,
|
||||||
|
f,
|
||||||
|
l,
|
||||||
|
c = e(this)
|
||||||
|
if (this[t] == 0) return c
|
||||||
|
if (this[t] > 1) {
|
||||||
|
for (o = 0; o < this[t]; o++) e(this[o]).scrolly(i)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
;(l = n), (f = c.attr('href'))
|
||||||
|
if (f.charAt(0) != '#' || f[t] < 2) return c
|
||||||
|
;(a = jQuery.extend({ anchor: r, easing: 'swing', offset: 0, parent: e('body,html'), pollOnce: !1, speed: 1e3 }, i)),
|
||||||
|
a.pollOnce && (l = u(f, a)),
|
||||||
|
c.off(s).on(s, function (e) {
|
||||||
|
var t = l !== n ? l : u(f, a)
|
||||||
|
t !== n && (e.preventDefault(), a.parent.stop().animate({ scrollTop: t }, a.speed, a.easing))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})(jQuery)
|
||||||
|
|||||||
+110
-157
@@ -4,61 +4,47 @@
|
|||||||
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function($) {
|
;(function ($) {
|
||||||
|
|
||||||
var $window = $(window),
|
var $window = $(window),
|
||||||
$body = $('body');
|
$body = $('body')
|
||||||
|
|
||||||
// Breakpoints.
|
// Breakpoints.
|
||||||
breakpoints({
|
breakpoints({
|
||||||
xlarge: [ '1281px', '1680px' ],
|
xlarge: ['1281px', '1680px'],
|
||||||
large: [ '981px', '1280px' ],
|
large: ['981px', '1280px'],
|
||||||
medium: [ '737px', '980px' ],
|
medium: ['737px', '980px'],
|
||||||
small: [ '481px', '736px' ],
|
small: ['481px', '736px'],
|
||||||
xsmall: [ null, '480px' ]
|
xsmall: [null, '480px'],
|
||||||
});
|
})
|
||||||
|
|
||||||
// Play initial animations on page load.
|
// Play initial animations on page load.
|
||||||
$window.on('load', function() {
|
$window.on('load', function () {
|
||||||
window.setTimeout(function() {
|
window.setTimeout(function () {
|
||||||
$body.removeClass('is-preload');
|
$body.removeClass('is-preload')
|
||||||
}, 100);
|
}, 100)
|
||||||
});
|
})
|
||||||
|
|
||||||
// Touch mode.
|
// Touch mode.
|
||||||
if (browser.mobile)
|
if (browser.mobile) $body.addClass('is-touch')
|
||||||
$body.addClass('is-touch');
|
|
||||||
|
|
||||||
// Scrolly links.
|
// Scrolly links.
|
||||||
$('.scrolly').scrolly({
|
$('.scrolly').scrolly({
|
||||||
speed: 2000
|
speed: 2000,
|
||||||
});
|
})
|
||||||
|
|
||||||
// Dropdowns.
|
// Dropdowns.
|
||||||
$('#nav > ul').dropotron({
|
$('#nav > ul').dropotron({
|
||||||
alignment: 'right',
|
alignment: 'right',
|
||||||
hideDelay: 350
|
hideDelay: 350,
|
||||||
});
|
})
|
||||||
|
|
||||||
// Nav.
|
// Nav.
|
||||||
|
|
||||||
// Title Bar.
|
// Title Bar.
|
||||||
$(
|
$('<div id="titleBar">' + '<a href="#navPanel" class="toggle"></a>' + '<span class="title">' + $('#logo').html() + '</span>' + '</div>').appendTo($body)
|
||||||
'<div id="titleBar">' +
|
|
||||||
'<a href="#navPanel" class="toggle"></a>' +
|
|
||||||
'<span class="title">' + $('#logo').html() + '</span>' +
|
|
||||||
'</div>'
|
|
||||||
)
|
|
||||||
.appendTo($body);
|
|
||||||
|
|
||||||
// Panel.
|
// Panel.
|
||||||
$(
|
$('<div id="navPanel">' + '<nav>' + $('#nav').navList() + '</nav>' + '</div>')
|
||||||
'<div id="navPanel">' +
|
|
||||||
'<nav>' +
|
|
||||||
$('#nav').navList() +
|
|
||||||
'</nav>' +
|
|
||||||
'</div>'
|
|
||||||
)
|
|
||||||
.appendTo($body)
|
.appendTo($body)
|
||||||
.panel({
|
.panel({
|
||||||
delay: 500,
|
delay: 500,
|
||||||
@@ -68,110 +54,77 @@
|
|||||||
resetForms: true,
|
resetForms: true,
|
||||||
side: 'left',
|
side: 'left',
|
||||||
target: $body,
|
target: $body,
|
||||||
visibleClass: 'navPanel-visible'
|
visibleClass: 'navPanel-visible',
|
||||||
});
|
})
|
||||||
|
|
||||||
// Parallax.
|
// Parallax.
|
||||||
// Disabled on IE (choppy scrolling) and mobile platforms (poor performance).
|
// Disabled on IE (choppy scrolling) and mobile platforms (poor performance).
|
||||||
if (browser.name == 'ie'
|
if (browser.name == 'ie' || browser.mobile) {
|
||||||
|| browser.mobile) {
|
$.fn._parallax = function () {
|
||||||
|
return $(this)
|
||||||
$.fn._parallax = function() {
|
|
||||||
|
|
||||||
return $(this);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
|
$.fn._parallax = function () {
|
||||||
$.fn._parallax = function() {
|
$(this).each(function () {
|
||||||
|
|
||||||
$(this).each(function() {
|
|
||||||
|
|
||||||
var $this = $(this),
|
var $this = $(this),
|
||||||
on, off;
|
on,
|
||||||
|
off
|
||||||
|
|
||||||
on = function() {
|
on = function () {
|
||||||
|
$this.css('background-position', 'center 0px')
|
||||||
|
|
||||||
$this
|
$window.on('scroll._parallax', function () {
|
||||||
.css('background-position', 'center 0px');
|
var pos = parseInt($window.scrollTop()) - parseInt($this.position().top)
|
||||||
|
|
||||||
$window
|
$this.css('background-position', 'center ' + pos * -0.15 + 'px')
|
||||||
.on('scroll._parallax', function() {
|
})
|
||||||
|
}
|
||||||
|
|
||||||
var pos = parseInt($window.scrollTop()) - parseInt($this.position().top);
|
off = function () {
|
||||||
|
$this.css('background-position', '')
|
||||||
|
|
||||||
$this.css('background-position', 'center ' + (pos * -0.15) + 'px');
|
$window.off('scroll._parallax')
|
||||||
|
}
|
||||||
|
|
||||||
});
|
breakpoints.on('<=medium', off)
|
||||||
|
breakpoints.on('>medium', on)
|
||||||
|
})
|
||||||
|
|
||||||
};
|
return $(this)
|
||||||
|
}
|
||||||
off = function() {
|
|
||||||
|
|
||||||
$this
|
|
||||||
.css('background-position', '');
|
|
||||||
|
|
||||||
$window
|
|
||||||
.off('scroll._parallax');
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
breakpoints.on('<=medium', off);
|
|
||||||
breakpoints.on('>medium', on);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
return $(this);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
$window
|
|
||||||
.on('load resize', function() {
|
|
||||||
$window.trigger('scroll');
|
|
||||||
});
|
|
||||||
|
|
||||||
|
$window.on('load resize', function () {
|
||||||
|
$window.trigger('scroll')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spotlights.
|
// Spotlights.
|
||||||
var $spotlights = $('.spotlight');
|
var $spotlights = $('.spotlight')
|
||||||
|
|
||||||
$spotlights
|
|
||||||
._parallax()
|
|
||||||
.each(function() {
|
|
||||||
|
|
||||||
|
$spotlights._parallax().each(function () {
|
||||||
var $this = $(this),
|
var $this = $(this),
|
||||||
on, off;
|
on,
|
||||||
|
off
|
||||||
|
|
||||||
on = function() {
|
on = function () {
|
||||||
|
var top, bottom, mode
|
||||||
var top, bottom, mode;
|
|
||||||
|
|
||||||
// Use main <img>'s src as this spotlight's background.
|
// Use main <img>'s src as this spotlight's background.
|
||||||
$this.css('background-image', 'url("' + $this.find('.image.main > img').attr('src') + '")');
|
$this.css('background-image', 'url("' + $this.find('.image.main > img').attr('src') + '")')
|
||||||
|
|
||||||
// Side-specific scrollex tweaks.
|
// Side-specific scrollex tweaks.
|
||||||
if ($this.hasClass('top')) {
|
if ($this.hasClass('top')) {
|
||||||
|
mode = 'top'
|
||||||
mode = 'top';
|
top = '-20%'
|
||||||
top = '-20%';
|
bottom = 0
|
||||||
bottom = 0;
|
} else if ($this.hasClass('bottom')) {
|
||||||
|
mode = 'bottom-only'
|
||||||
}
|
top = 0
|
||||||
else if ($this.hasClass('bottom')) {
|
bottom = '20%'
|
||||||
|
} else {
|
||||||
mode = 'bottom-only';
|
mode = 'middle'
|
||||||
top = 0;
|
top = 0
|
||||||
bottom = '20%';
|
bottom = 0
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
mode = 'middle';
|
|
||||||
top = 0;
|
|
||||||
bottom = 0;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add scrollex.
|
// Add scrollex.
|
||||||
@@ -179,72 +132,72 @@
|
|||||||
mode: mode,
|
mode: mode,
|
||||||
top: top,
|
top: top,
|
||||||
bottom: bottom,
|
bottom: bottom,
|
||||||
initialize: function(t) { $this.addClass('inactive'); },
|
initialize: function (t) {
|
||||||
terminate: function(t) { $this.removeClass('inactive'); },
|
$this.addClass('inactive')
|
||||||
enter: function(t) { $this.removeClass('inactive'); },
|
},
|
||||||
|
terminate: function (t) {
|
||||||
|
$this.removeClass('inactive')
|
||||||
|
},
|
||||||
|
enter: function (t) {
|
||||||
|
$this.removeClass('inactive')
|
||||||
|
},
|
||||||
|
|
||||||
// Uncomment the line below to "rewind" when this spotlight scrolls out of view.
|
// Uncomment the line below to "rewind" when this spotlight scrolls out of view.
|
||||||
|
|
||||||
//leave: function(t) { $this.addClass('inactive'); },
|
//leave: function(t) { $this.addClass('inactive'); },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
});
|
off = function () {
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
off = function() {
|
|
||||||
|
|
||||||
// Clear spotlight's background.
|
// Clear spotlight's background.
|
||||||
$this.css('background-image', '');
|
$this.css('background-image', '')
|
||||||
|
|
||||||
// Remove scrollex.
|
// Remove scrollex.
|
||||||
$this.unscrollex();
|
$this.unscrollex()
|
||||||
|
}
|
||||||
|
|
||||||
};
|
breakpoints.on('<=medium', off)
|
||||||
|
breakpoints.on('>medium', on)
|
||||||
breakpoints.on('<=medium', off);
|
})
|
||||||
breakpoints.on('>medium', on);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Wrappers.
|
// Wrappers.
|
||||||
var $wrappers = $('.wrapper');
|
var $wrappers = $('.wrapper')
|
||||||
|
|
||||||
$wrappers
|
|
||||||
.each(function() {
|
|
||||||
|
|
||||||
|
$wrappers.each(function () {
|
||||||
var $this = $(this),
|
var $this = $(this),
|
||||||
on, off;
|
on,
|
||||||
|
off
|
||||||
on = function() {
|
|
||||||
|
|
||||||
|
on = function () {
|
||||||
$this.scrollex({
|
$this.scrollex({
|
||||||
top: 250,
|
top: 250,
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
initialize: function(t) { $this.addClass('inactive'); },
|
initialize: function (t) {
|
||||||
terminate: function(t) { $this.removeClass('inactive'); },
|
$this.addClass('inactive')
|
||||||
enter: function(t) { $this.removeClass('inactive'); },
|
},
|
||||||
|
terminate: function (t) {
|
||||||
|
$this.removeClass('inactive')
|
||||||
|
},
|
||||||
|
enter: function (t) {
|
||||||
|
$this.removeClass('inactive')
|
||||||
|
},
|
||||||
|
|
||||||
// Uncomment the line below to "rewind" when this wrapper scrolls out of view.
|
// Uncomment the line below to "rewind" when this wrapper scrolls out of view.
|
||||||
|
|
||||||
//leave: function(t) { $this.addClass('inactive'); },
|
//leave: function(t) { $this.addClass('inactive'); },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
});
|
off = function () {
|
||||||
|
$this.unscrollex()
|
||||||
|
}
|
||||||
|
|
||||||
};
|
breakpoints.on('<=medium', off)
|
||||||
|
breakpoints.on('>medium', on)
|
||||||
off = function() {
|
})
|
||||||
$this.unscrollex();
|
|
||||||
};
|
|
||||||
|
|
||||||
breakpoints.on('<=medium', off);
|
|
||||||
breakpoints.on('>medium', on);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Banner.
|
// Banner.
|
||||||
var $banner = $('#banner');
|
var $banner = $('#banner')
|
||||||
|
|
||||||
$banner
|
$banner._parallax()
|
||||||
._parallax();
|
})(jQuery)
|
||||||
|
|
||||||
})(jQuery);
|
|
||||||
|
|||||||
+198
-323
@@ -1,58 +1,51 @@
|
|||||||
(function($) {
|
;(function ($) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate an indented list of links from a nav. Meant for use with panel().
|
* Generate an indented list of links from a nav. Meant for use with panel().
|
||||||
* @return {jQuery} jQuery object.
|
* @return {jQuery} jQuery object.
|
||||||
*/
|
*/
|
||||||
$.fn.navList = function() {
|
$.fn.navList = function () {
|
||||||
|
var $this = $(this)
|
||||||
var $this = $(this);
|
;($a = $this.find('a')), (b = [])
|
||||||
$a = $this.find('a'),
|
|
||||||
b = [];
|
|
||||||
|
|
||||||
$a.each(function() {
|
|
||||||
|
|
||||||
|
$a.each(function () {
|
||||||
var $this = $(this),
|
var $this = $(this),
|
||||||
indent = Math.max(0, $this.parents('li').length - 1),
|
indent = Math.max(0, $this.parents('li').length - 1),
|
||||||
href = $this.attr('href'),
|
href = $this.attr('href'),
|
||||||
target = $this.attr('target');
|
target = $this.attr('target')
|
||||||
|
|
||||||
b.push(
|
b.push(
|
||||||
'<a ' +
|
'<a ' +
|
||||||
'class="link depth-' + indent + '"' +
|
'class="link depth-' +
|
||||||
( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
|
indent +
|
||||||
( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
|
'"' +
|
||||||
|
(typeof target !== 'undefined' && target != '' ? ' target="' + target + '"' : '') +
|
||||||
|
(typeof href !== 'undefined' && href != '' ? ' href="' + href + '"' : '') +
|
||||||
'>' +
|
'>' +
|
||||||
'<span class="indent-' + indent + '"></span>' +
|
'<span class="indent-' +
|
||||||
|
indent +
|
||||||
|
'"></span>' +
|
||||||
$this.text() +
|
$this.text() +
|
||||||
'</a>'
|
'</a>'
|
||||||
);
|
)
|
||||||
|
})
|
||||||
|
|
||||||
});
|
return b.join('')
|
||||||
|
}
|
||||||
return b.join('');
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Panel-ify an element.
|
* Panel-ify an element.
|
||||||
* @param {object} userConfig User config.
|
* @param {object} userConfig User config.
|
||||||
* @return {jQuery} jQuery object.
|
* @return {jQuery} jQuery object.
|
||||||
*/
|
*/
|
||||||
$.fn.panel = function(userConfig) {
|
$.fn.panel = function (userConfig) {
|
||||||
|
|
||||||
// No elements?
|
// No elements?
|
||||||
if (this.length == 0)
|
if (this.length == 0) return $this
|
||||||
return $this;
|
|
||||||
|
|
||||||
// Multiple elements?
|
// Multiple elements?
|
||||||
if (this.length > 1) {
|
if (this.length > 1) {
|
||||||
|
for (var i = 0; i < this.length; i++) $(this[i]).panel(userConfig)
|
||||||
|
|
||||||
for (var i=0; i < this.length; i++)
|
return $this
|
||||||
$(this[i]).panel(userConfig);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vars.
|
// Vars.
|
||||||
@@ -60,11 +53,11 @@
|
|||||||
$body = $('body'),
|
$body = $('body'),
|
||||||
$window = $(window),
|
$window = $(window),
|
||||||
id = $this.attr('id'),
|
id = $this.attr('id'),
|
||||||
config;
|
config
|
||||||
|
|
||||||
// Config.
|
// Config.
|
||||||
config = $.extend({
|
config = $.extend(
|
||||||
|
{
|
||||||
// Delay.
|
// Delay.
|
||||||
delay: 0,
|
delay: 0,
|
||||||
|
|
||||||
@@ -90,284 +83,215 @@
|
|||||||
target: $this,
|
target: $this,
|
||||||
|
|
||||||
// Class to toggle.
|
// Class to toggle.
|
||||||
visibleClass: 'visible'
|
visibleClass: 'visible',
|
||||||
|
},
|
||||||
}, userConfig);
|
userConfig
|
||||||
|
)
|
||||||
|
|
||||||
// Expand "target" if it's not a jQuery object already.
|
// Expand "target" if it's not a jQuery object already.
|
||||||
if (typeof config.target != 'jQuery')
|
if (typeof config.target != 'jQuery') config.target = $(config.target)
|
||||||
config.target = $(config.target);
|
|
||||||
|
|
||||||
// Panel.
|
// Panel.
|
||||||
|
|
||||||
// Methods.
|
// Methods.
|
||||||
$this._hide = function(event) {
|
$this._hide = function (event) {
|
||||||
|
|
||||||
// Already hidden? Bail.
|
// Already hidden? Bail.
|
||||||
if (!config.target.hasClass(config.visibleClass))
|
if (!config.target.hasClass(config.visibleClass)) return
|
||||||
return;
|
|
||||||
|
|
||||||
// If an event was provided, cancel it.
|
// If an event was provided, cancel it.
|
||||||
if (event) {
|
if (event) {
|
||||||
|
event.preventDefault()
|
||||||
event.preventDefault();
|
event.stopPropagation()
|
||||||
event.stopPropagation();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide.
|
// Hide.
|
||||||
config.target.removeClass(config.visibleClass);
|
config.target.removeClass(config.visibleClass)
|
||||||
|
|
||||||
// Post-hide stuff.
|
// Post-hide stuff.
|
||||||
window.setTimeout(function() {
|
window.setTimeout(function () {
|
||||||
|
|
||||||
// Reset scroll position.
|
// Reset scroll position.
|
||||||
if (config.resetScroll)
|
if (config.resetScroll) $this.scrollTop(0)
|
||||||
$this.scrollTop(0);
|
|
||||||
|
|
||||||
// Reset forms.
|
// Reset forms.
|
||||||
if (config.resetForms)
|
if (config.resetForms)
|
||||||
$this.find('form').each(function() {
|
$this.find('form').each(function () {
|
||||||
this.reset();
|
this.reset()
|
||||||
});
|
})
|
||||||
|
}, config.delay)
|
||||||
}, config.delay);
|
}
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// Vendor fixes.
|
// Vendor fixes.
|
||||||
$this
|
$this.css('-ms-overflow-style', '-ms-autohiding-scrollbar').css('-webkit-overflow-scrolling', 'touch')
|
||||||
.css('-ms-overflow-style', '-ms-autohiding-scrollbar')
|
|
||||||
.css('-webkit-overflow-scrolling', 'touch');
|
|
||||||
|
|
||||||
// Hide on click.
|
// Hide on click.
|
||||||
if (config.hideOnClick) {
|
if (config.hideOnClick) {
|
||||||
|
$this.find('a').css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)')
|
||||||
|
|
||||||
$this.find('a')
|
$this.on('click', 'a', function (event) {
|
||||||
.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
|
|
||||||
|
|
||||||
$this
|
|
||||||
.on('click', 'a', function(event) {
|
|
||||||
|
|
||||||
var $a = $(this),
|
var $a = $(this),
|
||||||
href = $a.attr('href'),
|
href = $a.attr('href'),
|
||||||
target = $a.attr('target');
|
target = $a.attr('target')
|
||||||
|
|
||||||
if (!href || href == '#' || href == '' || href == '#' + id)
|
if (!href || href == '#' || href == '' || href == '#' + id) return
|
||||||
return;
|
|
||||||
|
|
||||||
// Cancel original event.
|
// Cancel original event.
|
||||||
event.preventDefault();
|
event.preventDefault()
|
||||||
event.stopPropagation();
|
event.stopPropagation()
|
||||||
|
|
||||||
// Hide panel.
|
// Hide panel.
|
||||||
$this._hide();
|
$this._hide()
|
||||||
|
|
||||||
// Redirect to href.
|
// Redirect to href.
|
||||||
window.setTimeout(function() {
|
window.setTimeout(function () {
|
||||||
|
if (target == '_blank') window.open(href)
|
||||||
if (target == '_blank')
|
else window.location.href = href
|
||||||
window.open(href);
|
}, config.delay + 10)
|
||||||
else
|
})
|
||||||
window.location.href = href;
|
|
||||||
|
|
||||||
}, config.delay + 10);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Event: Touch stuff.
|
// Event: Touch stuff.
|
||||||
$this.on('touchstart', function(event) {
|
$this.on('touchstart', function (event) {
|
||||||
|
$this.touchPosX = event.originalEvent.touches[0].pageX
|
||||||
$this.touchPosX = event.originalEvent.touches[0].pageX;
|
$this.touchPosY = event.originalEvent.touches[0].pageY
|
||||||
$this.touchPosY = event.originalEvent.touches[0].pageY;
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
$this.on('touchmove', function(event) {
|
$this.on('touchmove', function (event) {
|
||||||
|
if ($this.touchPosX === null || $this.touchPosY === null) return
|
||||||
if ($this.touchPosX === null
|
|
||||||
|| $this.touchPosY === null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
|
var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
|
||||||
diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
|
diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
|
||||||
th = $this.outerHeight(),
|
th = $this.outerHeight(),
|
||||||
ts = ($this.get(0).scrollHeight - $this.scrollTop());
|
ts = $this.get(0).scrollHeight - $this.scrollTop()
|
||||||
|
|
||||||
// Hide on swipe?
|
// Hide on swipe?
|
||||||
if (config.hideOnSwipe) {
|
if (config.hideOnSwipe) {
|
||||||
|
|
||||||
var result = false,
|
var result = false,
|
||||||
boundary = 20,
|
boundary = 20,
|
||||||
delta = 50;
|
delta = 50
|
||||||
|
|
||||||
switch (config.side) {
|
switch (config.side) {
|
||||||
|
|
||||||
case 'left':
|
case 'left':
|
||||||
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
|
result = diffY < boundary && diffY > -1 * boundary && diffX > delta
|
||||||
break;
|
break
|
||||||
|
|
||||||
case 'right':
|
case 'right':
|
||||||
result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
|
result = diffY < boundary && diffY > -1 * boundary && diffX < -1 * delta
|
||||||
break;
|
break
|
||||||
|
|
||||||
case 'top':
|
case 'top':
|
||||||
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
|
result = diffX < boundary && diffX > -1 * boundary && diffY > delta
|
||||||
break;
|
break
|
||||||
|
|
||||||
case 'bottom':
|
case 'bottom':
|
||||||
result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
|
result = diffX < boundary && diffX > -1 * boundary && diffY < -1 * delta
|
||||||
break;
|
break
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
|
$this.touchPosX = null
|
||||||
|
$this.touchPosY = null
|
||||||
|
$this._hide()
|
||||||
|
|
||||||
$this.touchPosX = null;
|
return false
|
||||||
$this.touchPosY = null;
|
|
||||||
$this._hide();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent vertical scrolling past the top or bottom.
|
// Prevent vertical scrolling past the top or bottom.
|
||||||
if (($this.scrollTop() < 0 && diffY < 0)
|
if (($this.scrollTop() < 0 && diffY < 0) || (ts > th - 2 && ts < th + 2 && diffY > 0)) {
|
||||||
|| (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
});
|
|
||||||
|
|
||||||
// Event: Prevent certain events inside the panel from bubbling.
|
// Event: Prevent certain events inside the panel from bubbling.
|
||||||
$this.on('click touchend touchstart touchmove', function(event) {
|
$this.on('click touchend touchstart touchmove', function (event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation()
|
||||||
});
|
})
|
||||||
|
|
||||||
// Event: Hide panel if a child anchor tag pointing to its ID is clicked.
|
// Event: Hide panel if a child anchor tag pointing to its ID is clicked.
|
||||||
$this.on('click', 'a[href="#' + id + '"]', function(event) {
|
$this.on('click', 'a[href="#' + id + '"]', function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
|
||||||
event.preventDefault();
|
config.target.removeClass(config.visibleClass)
|
||||||
event.stopPropagation();
|
})
|
||||||
|
|
||||||
config.target.removeClass(config.visibleClass);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Body.
|
// Body.
|
||||||
|
|
||||||
// Event: Hide panel on body click/tap.
|
// Event: Hide panel on body click/tap.
|
||||||
$body.on('click touchend', function(event) {
|
$body.on('click touchend', function (event) {
|
||||||
$this._hide(event);
|
$this._hide(event)
|
||||||
});
|
})
|
||||||
|
|
||||||
// Event: Toggle.
|
// Event: Toggle.
|
||||||
$body.on('click', 'a[href="#' + id + '"]', function(event) {
|
$body.on('click', 'a[href="#' + id + '"]', function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
|
||||||
event.preventDefault();
|
config.target.toggleClass(config.visibleClass)
|
||||||
event.stopPropagation();
|
})
|
||||||
|
|
||||||
config.target.toggleClass(config.visibleClass);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Window.
|
// Window.
|
||||||
|
|
||||||
// Event: Hide on ESC.
|
// Event: Hide on ESC.
|
||||||
if (config.hideOnEscape)
|
if (config.hideOnEscape)
|
||||||
$window.on('keydown', function(event) {
|
$window.on('keydown', function (event) {
|
||||||
|
if (event.keyCode == 27) $this._hide(event)
|
||||||
|
})
|
||||||
|
|
||||||
if (event.keyCode == 27)
|
return $this
|
||||||
$this._hide(event);
|
}
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply "placeholder" attribute polyfill to one or more forms.
|
* Apply "placeholder" attribute polyfill to one or more forms.
|
||||||
* @return {jQuery} jQuery object.
|
* @return {jQuery} jQuery object.
|
||||||
*/
|
*/
|
||||||
$.fn.placeholder = function() {
|
$.fn.placeholder = function () {
|
||||||
|
|
||||||
// Browser natively supports placeholders? Bail.
|
// Browser natively supports placeholders? Bail.
|
||||||
if (typeof (document.createElement('input')).placeholder != 'undefined')
|
if (typeof document.createElement('input').placeholder != 'undefined') return $(this)
|
||||||
return $(this);
|
|
||||||
|
|
||||||
// No elements?
|
// No elements?
|
||||||
if (this.length == 0)
|
if (this.length == 0) return $this
|
||||||
return $this;
|
|
||||||
|
|
||||||
// Multiple elements?
|
// Multiple elements?
|
||||||
if (this.length > 1) {
|
if (this.length > 1) {
|
||||||
|
for (var i = 0; i < this.length; i++) $(this[i]).placeholder()
|
||||||
|
|
||||||
for (var i=0; i < this.length; i++)
|
return $this
|
||||||
$(this[i]).placeholder();
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vars.
|
// Vars.
|
||||||
var $this = $(this);
|
var $this = $(this)
|
||||||
|
|
||||||
// Text, TextArea.
|
// Text, TextArea.
|
||||||
$this.find('input[type=text],textarea')
|
$this
|
||||||
.each(function() {
|
.find('input[type=text],textarea')
|
||||||
|
.each(function () {
|
||||||
var i = $(this);
|
var i = $(this)
|
||||||
|
|
||||||
if (i.val() == ''
|
|
||||||
|| i.val() == i.attr('placeholder'))
|
|
||||||
i
|
|
||||||
.addClass('polyfill-placeholder')
|
|
||||||
.val(i.attr('placeholder'));
|
|
||||||
|
|
||||||
|
if (i.val() == '' || i.val() == i.attr('placeholder')) i.addClass('polyfill-placeholder').val(i.attr('placeholder'))
|
||||||
})
|
})
|
||||||
.on('blur', function() {
|
.on('blur', function () {
|
||||||
|
var i = $(this)
|
||||||
|
|
||||||
var i = $(this);
|
if (i.attr('name').match(/-polyfill-field$/)) return
|
||||||
|
|
||||||
if (i.attr('name').match(/-polyfill-field$/))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (i.val() == '')
|
|
||||||
i
|
|
||||||
.addClass('polyfill-placeholder')
|
|
||||||
.val(i.attr('placeholder'));
|
|
||||||
|
|
||||||
|
if (i.val() == '') i.addClass('polyfill-placeholder').val(i.attr('placeholder'))
|
||||||
})
|
})
|
||||||
.on('focus', function() {
|
.on('focus', function () {
|
||||||
|
var i = $(this)
|
||||||
|
|
||||||
var i = $(this);
|
if (i.attr('name').match(/-polyfill-field$/)) return
|
||||||
|
|
||||||
if (i.attr('name').match(/-polyfill-field$/))
|
if (i.val() == i.attr('placeholder')) i.removeClass('polyfill-placeholder').val('')
|
||||||
return;
|
})
|
||||||
|
|
||||||
if (i.val() == i.attr('placeholder'))
|
|
||||||
i
|
|
||||||
.removeClass('polyfill-placeholder')
|
|
||||||
.val('');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Password.
|
// Password.
|
||||||
$this.find('input[type=password]')
|
$this.find('input[type=password]').each(function () {
|
||||||
.each(function() {
|
var i = $(this)
|
||||||
|
|
||||||
var i = $(this);
|
|
||||||
var x = $(
|
var x = $(
|
||||||
$('<div>')
|
$('<div>')
|
||||||
.append(i.clone())
|
.append(i.clone())
|
||||||
@@ -375,213 +299,164 @@
|
|||||||
.html()
|
.html()
|
||||||
.replace(/type="password"/i, 'type="text"')
|
.replace(/type="password"/i, 'type="text"')
|
||||||
.replace(/type=password/i, 'type=text')
|
.replace(/type=password/i, 'type=text')
|
||||||
);
|
)
|
||||||
|
|
||||||
if (i.attr('id') != '')
|
if (i.attr('id') != '') x.attr('id', i.attr('id') + '-polyfill-field')
|
||||||
x.attr('id', i.attr('id') + '-polyfill-field');
|
|
||||||
|
|
||||||
if (i.attr('name') != '')
|
if (i.attr('name') != '') x.attr('name', i.attr('name') + '-polyfill-field')
|
||||||
x.attr('name', i.attr('name') + '-polyfill-field');
|
|
||||||
|
|
||||||
x.addClass('polyfill-placeholder')
|
x.addClass('polyfill-placeholder').val(x.attr('placeholder')).insertAfter(i)
|
||||||
.val(x.attr('placeholder')).insertAfter(i);
|
|
||||||
|
|
||||||
if (i.val() == '')
|
if (i.val() == '') i.hide()
|
||||||
i.hide();
|
else x.hide()
|
||||||
else
|
|
||||||
x.hide();
|
|
||||||
|
|
||||||
i
|
i.on('blur', function (event) {
|
||||||
.on('blur', function(event) {
|
event.preventDefault()
|
||||||
|
|
||||||
event.preventDefault();
|
var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]')
|
||||||
|
|
||||||
var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
|
|
||||||
|
|
||||||
if (i.val() == '') {
|
if (i.val() == '') {
|
||||||
|
i.hide()
|
||||||
i.hide();
|
x.show()
|
||||||
x.show();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
x
|
|
||||||
.on('focus', function(event) {
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
|
|
||||||
|
|
||||||
x.hide();
|
|
||||||
|
|
||||||
i
|
|
||||||
.show()
|
|
||||||
.focus();
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.on('keypress', function(event) {
|
|
||||||
|
|
||||||
event.preventDefault();
|
x.on('focus', function (event) {
|
||||||
x.val('');
|
event.preventDefault()
|
||||||
|
|
||||||
});
|
var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']')
|
||||||
|
|
||||||
});
|
x.hide()
|
||||||
|
|
||||||
|
i.show().focus()
|
||||||
|
}).on('keypress', function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
x.val('')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
// Events.
|
// Events.
|
||||||
$this
|
$this
|
||||||
.on('submit', function() {
|
.on('submit', function () {
|
||||||
|
$this.find('input[type=text],input[type=password],textarea').each(function (event) {
|
||||||
|
var i = $(this)
|
||||||
|
|
||||||
$this.find('input[type=text],input[type=password],textarea')
|
if (i.attr('name').match(/-polyfill-field$/)) i.attr('name', '')
|
||||||
.each(function(event) {
|
|
||||||
|
|
||||||
var i = $(this);
|
|
||||||
|
|
||||||
if (i.attr('name').match(/-polyfill-field$/))
|
|
||||||
i.attr('name', '');
|
|
||||||
|
|
||||||
if (i.val() == i.attr('placeholder')) {
|
if (i.val() == i.attr('placeholder')) {
|
||||||
|
i.removeClass('polyfill-placeholder')
|
||||||
i.removeClass('polyfill-placeholder');
|
i.val('')
|
||||||
i.val('');
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.on('reset', function(event) {
|
})
|
||||||
|
.on('reset', function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
event.preventDefault();
|
$this.find('select').val($('option:first').val())
|
||||||
|
|
||||||
$this.find('select')
|
|
||||||
.val($('option:first').val());
|
|
||||||
|
|
||||||
$this.find('input,textarea')
|
|
||||||
.each(function() {
|
|
||||||
|
|
||||||
|
$this.find('input,textarea').each(function () {
|
||||||
var i = $(this),
|
var i = $(this),
|
||||||
x;
|
x
|
||||||
|
|
||||||
i.removeClass('polyfill-placeholder');
|
i.removeClass('polyfill-placeholder')
|
||||||
|
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
|
|
||||||
case 'submit':
|
case 'submit':
|
||||||
case 'reset':
|
case 'reset':
|
||||||
break;
|
break
|
||||||
|
|
||||||
case 'password':
|
case 'password':
|
||||||
i.val(i.attr('defaultValue'));
|
i.val(i.attr('defaultValue'))
|
||||||
|
|
||||||
x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
|
x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]')
|
||||||
|
|
||||||
if (i.val() == '') {
|
if (i.val() == '') {
|
||||||
i.hide();
|
i.hide()
|
||||||
x.show();
|
x.show()
|
||||||
}
|
} else {
|
||||||
else {
|
i.show()
|
||||||
i.show();
|
x.hide()
|
||||||
x.hide();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break
|
||||||
|
|
||||||
case 'checkbox':
|
case 'checkbox':
|
||||||
case 'radio':
|
case 'radio':
|
||||||
i.attr('checked', i.attr('defaultValue'));
|
i.attr('checked', i.attr('defaultValue'))
|
||||||
break;
|
break
|
||||||
|
|
||||||
case 'text':
|
case 'text':
|
||||||
case 'textarea':
|
case 'textarea':
|
||||||
i.val(i.attr('defaultValue'));
|
i.val(i.attr('defaultValue'))
|
||||||
|
|
||||||
if (i.val() == '') {
|
if (i.val() == '') {
|
||||||
i.addClass('polyfill-placeholder');
|
i.addClass('polyfill-placeholder')
|
||||||
i.val(i.attr('placeholder'));
|
i.val(i.attr('placeholder'))
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break
|
||||||
|
|
||||||
default:
|
default:
|
||||||
i.val(i.attr('defaultValue'));
|
i.val(i.attr('defaultValue'))
|
||||||
break;
|
break
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
});
|
return $this
|
||||||
|
}
|
||||||
return $this;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Moves elements to/from the first positions of their respective parents.
|
* Moves elements to/from the first positions of their respective parents.
|
||||||
* @param {jQuery} $elements Elements (or selector) to move.
|
* @param {jQuery} $elements Elements (or selector) to move.
|
||||||
* @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
|
* @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
|
||||||
*/
|
*/
|
||||||
$.prioritize = function($elements, condition) {
|
$.prioritize = function ($elements, condition) {
|
||||||
|
var key = '__prioritize'
|
||||||
var key = '__prioritize';
|
|
||||||
|
|
||||||
// Expand $elements if it's not already a jQuery object.
|
// Expand $elements if it's not already a jQuery object.
|
||||||
if (typeof $elements != 'jQuery')
|
if (typeof $elements != 'jQuery') $elements = $($elements)
|
||||||
$elements = $($elements);
|
|
||||||
|
|
||||||
// Step through elements.
|
// Step through elements.
|
||||||
$elements.each(function() {
|
$elements.each(function () {
|
||||||
|
var $e = $(this),
|
||||||
var $e = $(this), $p,
|
$p,
|
||||||
$parent = $e.parent();
|
$parent = $e.parent()
|
||||||
|
|
||||||
// No parent? Bail.
|
// No parent? Bail.
|
||||||
if ($parent.length == 0)
|
if ($parent.length == 0) return
|
||||||
return;
|
|
||||||
|
|
||||||
// Not moved? Move it.
|
// Not moved? Move it.
|
||||||
if (!$e.data(key)) {
|
if (!$e.data(key)) {
|
||||||
|
|
||||||
// Condition is false? Bail.
|
// Condition is false? Bail.
|
||||||
if (!condition)
|
if (!condition) return
|
||||||
return;
|
|
||||||
|
|
||||||
// Get placeholder (which will serve as our point of reference for when this element needs to move back).
|
// Get placeholder (which will serve as our point of reference for when this element needs to move back).
|
||||||
$p = $e.prev();
|
$p = $e.prev()
|
||||||
|
|
||||||
// Couldn't find anything? Means this element's already at the top, so bail.
|
// Couldn't find anything? Means this element's already at the top, so bail.
|
||||||
if ($p.length == 0)
|
if ($p.length == 0) return
|
||||||
return;
|
|
||||||
|
|
||||||
// Move element to top of parent.
|
// Move element to top of parent.
|
||||||
$e.prependTo($parent);
|
$e.prependTo($parent)
|
||||||
|
|
||||||
// Mark element as moved.
|
// Mark element as moved.
|
||||||
$e.data(key, $p);
|
$e.data(key, $p)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Moved already?
|
// Moved already?
|
||||||
else {
|
else {
|
||||||
|
|
||||||
// Condition is true? Bail.
|
// Condition is true? Bail.
|
||||||
if (condition)
|
if (condition) return
|
||||||
return;
|
|
||||||
|
|
||||||
$p = $e.data(key);
|
$p = $e.data(key)
|
||||||
|
|
||||||
// Move element back to its original location (using our placeholder).
|
// Move element back to its original location (using our placeholder).
|
||||||
$e.insertAfter($p);
|
$e.insertAfter($p)
|
||||||
|
|
||||||
// Unmark element as moved.
|
// Unmark element as moved.
|
||||||
$e.removeData(key);
|
$e.removeData(key)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
});
|
}
|
||||||
|
})(jQuery)
|
||||||
};
|
|
||||||
|
|
||||||
})(jQuery);
|
|
||||||
|
|||||||
+18
-9
@@ -16,18 +16,25 @@
|
|||||||
<h1 id="logo"><a href="index.html">Michele Tartari</a></h1>
|
<h1 id="logo"><a href="index.html">Michele Tartari</a></h1>
|
||||||
<nav id="nav">
|
<nav id="nav">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="index.html">Home</a></li>
|
<li>
|
||||||
|
<a href="index.html">Home</a></li>
|
||||||
<li>
|
<li>
|
||||||
<a href="projects.html">Projects</a>
|
<a href="projects.html">Projects</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="projects.html#robotics">Robotics</a></li>
|
<li>
|
||||||
<li><a href="projects.html#engineering">Engineering</a></li>
|
<a href="projects.html#robotics">Robotics</a></li>
|
||||||
<li><a href="projects.html#hobbies">Hobbies</a></li>
|
<li>
|
||||||
<!-- <li><a href="projects.html#other">Others</a></li> -->
|
<a href="projects.html#engineering">Engineering</a></li>
|
||||||
|
<li>
|
||||||
|
<a href="projects.html#hobbies">Hobbies</a></li>
|
||||||
|
<!-- <li>
|
||||||
|
<a href="projects.html#other">Others</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="curriculum.html">Curriculim</a></li>
|
<li>
|
||||||
<li><a href="contacts.html" class="button primary">Contact me</a></li>
|
<a href="curriculum.html">Curriculim</a></li>
|
||||||
|
<li>
|
||||||
|
<a href="contacts.html" class="button primary">Contact me</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
@@ -42,7 +49,8 @@
|
|||||||
<section>
|
<section>
|
||||||
<h3>Feel free to contact me using any of the following:</h3>
|
<h3>Feel free to contact me using any of the following:</h3>
|
||||||
<ul style="list-style: none;">
|
<ul style="list-style: none;">
|
||||||
<li><a target="_blank" rel="noopener noreferrer" style="color: #ccc;" class="icon solid alt fa-envelope" href="mailto:michele.tartari@live.com">
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" style="color: #ccc;" class="icon solid alt fa-envelope" href="mailto:michele.tartari@live.com">
|
||||||
<span class="label">Email</span>
|
<span class="label">Email</span>
|
||||||
michele.tartari@live.com
|
michele.tartari@live.com
|
||||||
</a>
|
</a>
|
||||||
@@ -53,7 +61,8 @@
|
|||||||
m-tartari
|
m-tartari
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a target="_blank" rel="noopener noreferrer" style="color: #ccc;" class="icon brands alt fa-github" href="https://github.com/m-tartari">
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" style="color: #ccc;" class="icon brands alt fa-github" href="https://github.com/m-tartari">
|
||||||
<span class="label">GitHub</span>
|
<span class="label">GitHub</span>
|
||||||
m-tartari
|
m-tartari
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
+116
-32
@@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE HTML>
|
<!DOCTYPE html>
|
||||||
<!--
|
<!--
|
||||||
Based on Landed by HTML5 UP @ajlkn
|
Based on Landed by HTML5 UP @ajlkn
|
||||||
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||||
@@ -9,12 +9,11 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="icon" type="image/png" href="images/robot.png">
|
<link rel="icon" type="image/png" href="images/robot.png" />
|
||||||
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
|
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
|
||||||
</head>
|
</head>
|
||||||
<body class="is-preload landing">
|
<body class="is-preload landing">
|
||||||
<div id="page-wrapper">
|
<div id="page-wrapper">
|
||||||
|
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<header id="header">
|
<header id="header">
|
||||||
<h1 id="logo"><a href="index.html">Michele Tartari</a></h1>
|
<h1 id="logo"><a href="index.html">Michele Tartari</a></h1>
|
||||||
@@ -46,9 +45,21 @@
|
|||||||
<h2>Robotics Engineer</h2>
|
<h2>Robotics Engineer</h2>
|
||||||
<p>See some of my works below. Send a message to get in touch.</p>
|
<p>See some of my works below. Send a message to get in touch.</p>
|
||||||
<ul class="icons">
|
<ul class="icons">
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/m-tartari/" class="icon brands alt fa-linkedin-in"><span class="label">LinkedIn</span></a></li>
|
<li>
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari" class="icon brands alt fa-github"><span class="label">GitHub</span></a></li>
|
<a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/m-tartari/" class="icon brands alt fa-linkedin-in"
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="mailto:michele.tartari@live.com" class="icon solid alt fa-envelope"><span class="label">Email</span></a></li>
|
><span class="label">LinkedIn</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="mailto:michele.tartari@live.com" class="icon solid alt fa-envelope"
|
||||||
|
><span class="label">Email</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</header>
|
</header>
|
||||||
<span class="image"><img src="images/me.jpg" alt="" /></span>
|
<span class="image"><img src="images/me.jpg" alt="" /></span>
|
||||||
@@ -66,20 +77,35 @@
|
|||||||
<header>
|
<header>
|
||||||
<h2>Voice Controlled Mobile Robot for Indoor Applications</h2>
|
<h2>Voice Controlled Mobile Robot for Indoor Applications</h2>
|
||||||
<p>
|
<p>
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<i class="fa-stack">
|
<i class="fa-stack">
|
||||||
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
||||||
<i class="fa alt fa-slash fa-stack-1x "></i>
|
<i class="fa alt fa-slash fa-stack-1x"></i>
|
||||||
</i>
|
</i>
|
||||||
Master Thesis</p>
|
Master Thesis
|
||||||
|
</p>
|
||||||
</header>
|
</header>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-8 col-12-medium">
|
<div class="col-8 col-12-medium">
|
||||||
<p>This thesis proposes a design for a small mobile robot controlled by voice. Firstly a preliminary analysis of the state of art of human-robot interaction has been conducted.
|
<p>
|
||||||
Then, an analysis of the equipment selected took place, and, later, appropriate methodologies for voice recognition and user detection have been evaluated for this specific case.
|
This thesis proposes a design for a small mobile robot controlled by voice. Firstly a preliminary analysis of the state of art of human-robot
|
||||||
Finally, an overview of the complete software architecture of the system was given with three possible structures and their comparison.
|
interaction has been conducted. Then, an analysis of the equipment selected took place, and, later, appropriate methodologies for voice
|
||||||
The results obtained show both the feasibility of using low power boards and some of their limitations.
|
recognition and user detection have been evaluated for this specific case. Finally, an overview of the complete software architecture of the
|
||||||
<em>(research publication available <a target="_blank" rel="noopener noreferrer" href="https://doi.org/10.1007/978-3-030-58380-4_7"><em>here</em></a>).</em>
|
system was given with three possible structures and their comparison. The results obtained show both the feasibility of using low power boards
|
||||||
|
and some of their limitations.
|
||||||
|
<em
|
||||||
|
>(research publication available
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="https://doi.org/10.1007/978-3-030-58380-4_7"><em>here</em></a
|
||||||
|
>).</em
|
||||||
|
>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -96,16 +122,26 @@
|
|||||||
<h2>Recharging Electric Cars with a Mobile Robot</h2>
|
<h2>Recharging Electric Cars with a Mobile Robot</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/1wBfvAzy9N8uChNxNj9Kd_hcvI0Qq3uQj/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/1wBfvAzy9N8uChNxNj9Kd_hcvI0Qq3uQj/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<i class="fa-stack">
|
<i class="fa-stack">
|
||||||
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
||||||
<i class="fa alt fa-slash fa-stack-1x "></i>
|
<i class="fa alt fa-slash fa-stack-1x"></i>
|
||||||
</i>
|
</i>
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
<p>
|
<p>
|
||||||
The aim of this project was to prove the possibility to design an autonomous mobile robot whose task was to recharge electric cars in a parking lot. This was done by the means of a simulation, using the Gazebo simulator and a ROS based software architecture to control both the cars and the mobile robot.
|
The aim of this project was to prove the possibility to design an autonomous mobile robot whose task was to recharge electric cars in a parking lot.
|
||||||
We also simulated a world with a gas station and a small parking lot, consisting of four parking spots, to give an idea of the possible environment in which the robot could be used.
|
This was done by the means of a simulation, using the Gazebo simulator and a ROS based software architecture to control both the cars and the mobile
|
||||||
|
robot. We also simulated a world with a gas station and a small parking lot, consisting of four parking spots, to give an idea of the possible
|
||||||
|
environment in which the robot could be used.
|
||||||
</p>
|
</p>
|
||||||
<!-- <ul class="actions">
|
<!-- <ul class="actions">
|
||||||
<li><a href="#" class="button">Learn More</a></li>
|
<li><a href="#" class="button">Learn More</a></li>
|
||||||
@@ -121,15 +157,27 @@
|
|||||||
<header>
|
<header>
|
||||||
<h2>Mobile Robot Self-Localization</h2>
|
<h2>Mobile Robot Self-Localization</h2>
|
||||||
<p>
|
<p>
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/1BgPj-fgtYDDEsFHmDk2fGVm7DCPFWEeN/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/1BgPj-fgtYDDEsFHmDk2fGVm7DCPFWEeN/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/ekf_matlab" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/ekf_matlab" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
<p>
|
<p>
|
||||||
For this project we worked with the data retrieved from a differential drive robot for its localization in a certain area by the means of the Extended Kalman filter (EKF).
|
For this project we worked with the data retrieved from a differential drive robot for its localization in a certain area by the means of the
|
||||||
A first step included the development of a Kalman Filter for the self-localization. This has been then improved by implenting an Extended Kalman Filter that allowed to reduce.
|
Extended Kalman filter (EKF). A first step included the development of a Kalman Filter for the self-localization. This has been then improved by
|
||||||
Finally a comparison in performance of the two has been done.
|
implenting an Extended Kalman Filter that allowed to reduce. Finally a comparison in performance of the two has been done.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<a href="#four" class="goto-next scrolly">Next</a>
|
<a href="#four" class="goto-next scrolly">Next</a>
|
||||||
@@ -142,12 +190,32 @@
|
|||||||
<header>
|
<header>
|
||||||
<h2>Control of a Nonlinear System (PVTOL aircraft)</h2>
|
<h2>Control of a Nonlinear System (PVTOL aircraft)</h2>
|
||||||
<p>
|
<p>
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/1TE3TWkXZjVq8OuBkLl497c_MQSs3MiLQ/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/1TE3TWkXZjVq8OuBkLl497c_MQSs3MiLQ/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/modelling_and_control_of_manipulators" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://github.com/m-tartari/modelling_and_control_of_manipulators"
|
||||||
|
class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
<p>The aim of this project was to implement a control law for a nonlinear system (based on the model of a PVTOL aircraft), using the proper approach depending on the range of settings given in the four subsequent tasks. This shows the various theories and which is to be preferred over to the others, according to the situation to deal with.</p>
|
<p>
|
||||||
|
The aim of this project was to implement a control law for a nonlinear system (based on the model of a PVTOL aircraft), using the proper approach
|
||||||
|
depending on the range of settings given in the four subsequent tasks. This shows the various theories and which is to be preferred over to the
|
||||||
|
others, according to the situation to deal with.
|
||||||
|
</p>
|
||||||
<!-- <ul class="actions">
|
<!-- <ul class="actions">
|
||||||
<li><a href="#" class="button">Learn More</a></li>
|
<li><a href="#" class="button">Learn More</a></li>
|
||||||
</ul> -->
|
</ul> -->
|
||||||
@@ -222,15 +290,32 @@
|
|||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<footer id="footer">
|
<footer id="footer">
|
||||||
<ul class="icons">
|
<ul class="icons">
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/m-tartari/" class="icon brands alt fa-linkedin-in"><span class="label">LinkedIn</span></a></li>
|
<li>
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari" class="icon brands alt fa-github"><span class="label">GitHub</span></a></li>
|
<a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/m-tartari/" class="icon brands alt fa-linkedin-in"
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="mailto:michele.tartari@live.com" class="icon solid alt fa-envelope"><span class="label">Email</span></a></li>
|
><span class="label">LinkedIn</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="mailto:michele.tartari@live.com" class="icon solid alt fa-envelope"
|
||||||
|
><span class="label">Email</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="copyright">
|
<ul class="copyright">
|
||||||
<li>© 2020-<script>document.write( new Date().getFullYear() );</script> Michele Tartari. All rights reserved.</li>
|
<li>
|
||||||
|
© 2020-
|
||||||
|
<script>
|
||||||
|
document.write(new Date().getFullYear());
|
||||||
|
</script>
|
||||||
|
Michele Tartari. All rights reserved.
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
@@ -242,6 +327,5 @@
|
|||||||
<script src="assets/js/breakpoints.min.js"></script>
|
<script src="assets/js/breakpoints.min.js"></script>
|
||||||
<script src="assets/js/util.js"></script>
|
<script src="assets/js/util.js"></script>
|
||||||
<script src="assets/js/main.js"></script>
|
<script src="assets/js/main.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
+242
-94
@@ -1,16 +1,15 @@
|
|||||||
<!DOCTYPE HTML>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Michele Tartari - Projects</title>
|
<title>Michele Tartari - Projects</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="icon" type="image/png" href="images/robot.png">
|
<link rel="icon" type="image/png" href="images/robot.png" />
|
||||||
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
|
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
|
||||||
</head>
|
</head>
|
||||||
<body class="is-preload">
|
<body class="is-preload">
|
||||||
<div id="page-wrapper">
|
<div id="page-wrapper">
|
||||||
|
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<header id="header">
|
<header id="header">
|
||||||
<h1 id="logo"><a href="index.html">Michele Tartari</a></h1>
|
<h1 id="logo"><a href="index.html">Michele Tartari</a></h1>
|
||||||
@@ -36,245 +35,394 @@
|
|||||||
<div id="main" class="wrapper style1">
|
<div id="main" class="wrapper style1">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<header class="major">
|
<header class="major">
|
||||||
<h2>Projects</h2> <!--
|
<h2>Projects</h2>
|
||||||
|
<!--
|
||||||
<p>Ipsum dolor feugiat aliquam tempus sed magna lorem consequat accumsan</p> -->
|
<p>Ipsum dolor feugiat aliquam tempus sed magna lorem consequat accumsan</p> -->
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<section id="robotics">
|
<section id="robotics">
|
||||||
<h2 style="color: #e44c65;">Robotics</h2>
|
<h2 style="color: #e44c65">Robotics</h2>
|
||||||
<p style="margin-top: -20px;">Here there is a collection of all the projects that are strictly related to the design, development and functioning of robots:</p>
|
<p style="margin-top: -20px">
|
||||||
|
Here there is a collection of all the projects that are strictly related to the design, development and functioning of robots:
|
||||||
|
</p>
|
||||||
|
|
||||||
<button class="accordion"><b>Voice Controlled Mobile Robot for Indoor Applications</b></button>
|
<button class="accordion">
|
||||||
|
<b>Voice Controlled Mobile Robot for Indoor Applications</b>
|
||||||
|
</button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/drive/folders/1Y7TJJN8z1llCkSTnpVHMELD3PqsX8VF9?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<i class="fa-stack">
|
<i class="fa-stack">
|
||||||
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
||||||
<i class="fa alt fa-slash fa-stack-1x "></i>
|
<i class="fa alt fa-slash fa-stack-1x"></i>
|
||||||
</i>
|
</i>
|
||||||
Master Thesis
|
Master Thesis
|
||||||
<p>This thesis proposes a design from scratch for a small mobile robot controlled by voice using ROS.
|
<p>
|
||||||
The results obtained show both the feasibility of using low power boards and some of their limitations.
|
This thesis proposes a design from scratch for a small mobile robot controlled by voice using ROS. The results obtained show both the
|
||||||
(Research publication in preparation)
|
feasibility of using low power boards and some of their limitations. (Research publication in preparation)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Recharge Electric Car -->
|
<!-- Recharge Electric Car -->
|
||||||
<button class="accordion"><b> Recharging Electric Cars with a Mobile Robot </b></button>
|
<button class="accordion"><b> Recharging Electric Cars with a Mobile Robot </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/1wBfvAzy9N8uChNxNj9Kd_hcvI0Qq3uQj/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/1wBfvAzy9N8uChNxNj9Kd_hcvI0Qq3uQj/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<i class="fa-stack">
|
<i class="fa-stack">
|
||||||
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
||||||
<i class="fa alt fa-slash fa-stack-1x "></i>
|
<i class="fa alt fa-slash fa-stack-1x"></i>
|
||||||
</i>
|
</i>
|
||||||
<p>
|
<p>
|
||||||
The aim of this project was to prove the possibility to design an autonomous mobile robot whose task was to recharge electric cars in a parking lot.
|
The aim of this project was to prove the possibility to design an autonomous mobile robot whose task was to recharge electric cars in a parking
|
||||||
This was done in simulation, using the Gazebo and ROS.
|
lot. This was done in simulation, using the Gazebo and ROS.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- EKF Matlab -->
|
<!-- EKF Matlab -->
|
||||||
<button class="accordion"><b>
|
<button class="accordion"><b> Mobile Robot Self-Localization </b></button>
|
||||||
Mobile Robot Self-Localization
|
|
||||||
</b></button>
|
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/1BgPj-fgtYDDEsFHmDk2fGVm7DCPFWEeN/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/1BgPj-fgtYDDEsFHmDk2fGVm7DCPFWEeN/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/ekf_matlab" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/ekf_matlab" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
For this project we worked using Matlab on data retrieved from a differential drive robot for its localization in a certain area by the means of the Extended Kalman filter (EKF).
|
For this project we worked using Matlab on data retrieved from a differential drive robot for its localization in a certain area by the means of
|
||||||
|
the Extended Kalman filter (EKF).
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Biorobotics -->
|
<!-- Biorobotics -->
|
||||||
<button class="accordion"><b> Onychophora-Inspired Firefighting Robot</b></button>
|
<button class="accordion"><b> Onychophora-Inspired Firefighting Robot</b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/open?id=1a_ZvgaQjzvedeo296zrDpdvNL_VJDWTX" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/open?id=1a_ZvgaQjzvedeo296zrDpdvNL_VJDWTX"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/firebot" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/firebot" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
This project proposes a conceptual design for a firefighting robot suitable for indoor environments by taking inspiration from the biological world.
|
This project proposes a conceptual design for a firefighting robot suitable for indoor environments by taking inspiration from the biological
|
||||||
|
world.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- DESRO -->
|
<!-- DESRO -->
|
||||||
<button class="accordion"><b> 3RRR Planar Parallel Manipulator </b></button>
|
<button class="accordion"><b> 3RRR Planar Parallel Manipulator </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/open?id=11lCJM3EjVsua379BKD5NcEDHQLL4jdQn" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/open?id=11lCJM3EjVsua379BKD5NcEDHQLL4jdQn"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/3RRR_planar_parallel_manipulator" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
<p>
|
><a
|
||||||
This project concerns the design and optimization of a 3RRR planar parallel manipulator using MATLAB and CATIA
|
target="_blank"
|
||||||
</p>
|
rel="noopener noreferrer"
|
||||||
|
href="https://github.com/m-tartari/3RRR_planar_parallel_manipulator"
|
||||||
|
class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
<p>This project concerns the design and optimization of a 3RRR planar parallel manipulator using MATLAB and CATIA</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- OPTEC -->
|
<!-- OPTEC -->
|
||||||
<button class="accordion"><b> Point-to-Point Trajectory Optimization </b></button>
|
<button class="accordion"><b> Point-to-Point Trajectory Optimization </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/open?id=11m7r7fLda_jpDEZ-9qAWvnfRN2kLkhlA" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/open?id=11m7r7fLda_jpDEZ-9qAWvnfRN2kLkhlA"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/simple_trajectory_optimization" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://github.com/m-tartari/simple_trajectory_optimization"
|
||||||
|
class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
For this project we worked to find the optimal trajectory for a simple model of a robot performing point-to-point navigation in a room with some obstacles using MATLAB.
|
For this project we worked to find the optimal trajectory for a simple model of a robot performing point-to-point navigation in a room with some
|
||||||
|
obstacles using MATLAB.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- SOFAR -->
|
<!-- SOFAR -->
|
||||||
<button class="accordion"><b> Simple Swarm </b></button>
|
<button class="accordion"><b> Simple Swarm </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/simple_swarm" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/simple_swarm" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<p>
|
<p>Simple simulation and visualization of swarms of differential drive robots following a leader. Developed using C++ and ROS.</p>
|
||||||
Simple simulation and visualization of swarms of differential drive robots following a leader. Developed using C++ and ROS.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ARPRO-IRP -->
|
<!-- ARPRO-IRP -->
|
||||||
<button class="accordion"><b> Industrial Robot Programming </b></button>
|
<button class="accordion"><b> Industrial Robot Programming </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/industrial_robot_programming" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
<p>
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/industrial_robot_programming" class="icon brands alt fa-github"
|
||||||
Industrial Robot Programming using VAL II and V+ tested on a PUMA and a RX90 robots.
|
><span class="label">GitHub</span></a
|
||||||
</p>
|
></i
|
||||||
|
>
|
||||||
|
<p>Industrial Robot Programming using VAL II and V+ tested on a PUMA and a RX90 robots.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- MOCOM -->
|
<!-- MOCOM -->
|
||||||
<button class="accordion"><b> Modelling and Control of Manipulators </b></button>
|
<button class="accordion"><b> Modelling and Control of Manipulators </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/modelling_and_control_of_manipulators" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
<p>
|
><a
|
||||||
This contains several projects regarding modelling and control of various manipulators using MATLAB, Simulink and ADAMS.
|
target="_blank"
|
||||||
</p>
|
rel="noopener noreferrer"
|
||||||
|
href="https://github.com/m-tartari/modelling_and_control_of_manipulators"
|
||||||
|
class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
<p>This contains several projects regarding modelling and control of various manipulators using MATLAB, Simulink and ADAMS.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
|
||||||
<!-- Engineering Projects -->
|
<!-- Engineering Projects -->
|
||||||
<section id="engineering">
|
<section id="engineering">
|
||||||
<h2 style="color: #e44c65;">Engineering</h2>
|
<h2 style="color: #e44c65">Engineering</h2>
|
||||||
<p style="margin-top: -20px;">Here there is a collection of all the projects that are related to all the other fields of engineering:</p>
|
<p style="margin-top: -20px">Here there is a collection of all the projects that are related to all the other fields of engineering:</p>
|
||||||
|
|
||||||
<!-- Tongji Theis -->
|
<!-- Tongji Theis -->
|
||||||
<button class="accordion">
|
<button class="accordion">
|
||||||
<b>
|
<b> Solar Panel Fault Detection Method Based on Infrared Image Processing </b>
|
||||||
Solar Panel Fault Detection Method Based on Infrared Image Processing
|
|
||||||
</b>
|
|
||||||
</button>
|
</button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/0B1z42QMR-0UtYzBYSVhRV3ZPWk0/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/0B1z42QMR-0UtYzBYSVhRV3ZPWk0/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<i class="fa-stack">
|
<i class="fa-stack">
|
||||||
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
||||||
<i class="fa alt fa-slash fa-stack-1x "></i>
|
<i class="fa alt fa-slash fa-stack-1x"></i>
|
||||||
</i>
|
</i>
|
||||||
Bachelor Thesis
|
Bachelor Thesis
|
||||||
<p>
|
<p>My Chinese bachelor thesis that proposes a method to detect malfunctioning solar panels by processing thermal images using MATLAB.</p>
|
||||||
My Chinese bachelor thesis that proposes a method to detect malfunctioning solar panels by processing thermal images using MATLAB.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Unibo Thesis -->
|
<!-- Unibo Thesis -->
|
||||||
<button class="accordion">
|
<button class="accordion">
|
||||||
<b>
|
<b> Design of a Testing Machine for Flexure Hinges </b>
|
||||||
Design of a Testing Machine for Flexure Hinges
|
|
||||||
</b>
|
|
||||||
</button>
|
</button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/0B1z42QMR-0UtSkxRVzJPTk1IX0k/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/0B1z42QMR-0UtSkxRVzJPTk1IX0k/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<i class="fa-stack">
|
<i class="fa-stack">
|
||||||
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
<i class="fa icon brands alt fa-github fa-stack-1x"></i>
|
||||||
<i class="fa alt fa-slash fa-stack-1x "></i>
|
<i class="fa alt fa-slash fa-stack-1x"></i>
|
||||||
</i>
|
</i>
|
||||||
Bachelor Thesis
|
Bachelor Thesis
|
||||||
<p>
|
<p>My Italian bachelor thesis that proposes a design from scratch of a machine for the empirical characterization of flexure hinges.</p>
|
||||||
My Italian bachelor thesis that proposes a design from scratch of a machine for the empirical characterization of flexure hinges.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- NOLCO -->
|
<!-- NOLCO -->
|
||||||
<button class="accordion"><b> Control of a Nonlinear System </b></button>
|
<button class="accordion"><b> Control of a Nonlinear System </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/1TE3TWkXZjVq8OuBkLl497c_MQSs3MiLQ/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/1TE3TWkXZjVq8OuBkLl497c_MQSs3MiLQ/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/modelling_and_control_of_manipulators" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
<p>
|
><a
|
||||||
The aim of this project was to implement control laws for a nonlinear system (based on the model of a PVTOL aircraft).
|
target="_blank"
|
||||||
</p>
|
rel="noopener noreferrer"
|
||||||
|
href="https://github.com/m-tartari/modelling_and_control_of_manipulators"
|
||||||
|
class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
<p>The aim of this project was to implement control laws for a nonlinear system (based on the model of a PVTOL aircraft).</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Multi-body -->
|
<!-- Multi-body -->
|
||||||
<button class="accordion"><b> Multi-Body System’s Kinematic Analysis </b></button>
|
<button class="accordion"><b> Multi-Body System’s Kinematic Analysis </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://drive.google.com/file/d/15yrDU2blkb34Jy2GXkCIe4qNmDRmp31w/view?usp=sharing" class="icon alt far fa-file-pdf"><span class="label">Slideshow</span></a></i>
|
<i class="icon"
|
||||||
|
><a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://drive.google.com/file/d/15yrDU2blkb34Jy2GXkCIe4qNmDRmp31w/view?usp=sharing"
|
||||||
|
class="icon alt far fa-file-pdf"
|
||||||
|
><span class="label">Slideshow</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/multi-body-kinematics" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/multi-body-kinematics" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
For this project the kinematic analysis has been performed upon agiven mechanism using MATLAB.
|
For this project the kinematic analysis has been performed upon agiven mechanism using MATLAB. It has been then validated by comparing it to the
|
||||||
It has been then validated by comparing it to the ADAMS model of the same mechanism.
|
ADAMS model of the same mechanism.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- SIPRO -->
|
<!-- SIPRO -->
|
||||||
<button class="accordion"><b> Signal Processing </b></button>
|
<button class="accordion"><b> Signal Processing </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/signal_processing" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/signal_processing" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<p>
|
<p>Several Signal processing projects developed using MATLAB.</p>
|
||||||
Several Signal processing projects developed using MATLAB.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- RETSY -->
|
<!-- RETSY -->
|
||||||
<button class="accordion"><b> Real Time Systems </b></button>
|
<button class="accordion"><b> Real Time Systems </b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/real_time_systems" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/real_time_systems" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
|
|
||||||
<p>
|
<p>Several real-time systems' projects developed using C++ and OIL, and run using Trampoline RTOS on a Teensy board.</p>
|
||||||
Several real-time systems' projects developed using C++ and OIL, and run using Trampoline RTOS on a Teensy board.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
|
||||||
<!-- Hobbies -->
|
<!-- Hobbies -->
|
||||||
<section id="hobbies">
|
<section id="hobbies">
|
||||||
<h2 style="color: #e44c65;">Hobbies</h2>
|
<h2 style="color: #e44c65">Hobbies</h2>
|
||||||
<p style="margin-top: -20px;">Here there is a collection of projects related to things I do for fun:</p>
|
<p style="margin-top: -20px">Here there is a collection of projects related to things I do for fun:</p>
|
||||||
|
|
||||||
<!-- Medieval Furniture -->
|
<!-- Medieval Furniture -->
|
||||||
<button class="accordion"><b>Medieval Furniture</b></button>
|
<button class="accordion"><b>Medieval Furniture</b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/medieval_furniture" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/medieval_furniture" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
A collection of pdf and CAD models to create late XIV century furniture and medieval camp equipment. These objects are being realized by <a target="_blank" rel="noopener noreferrer" href="http://www.compagniadarmedelsantoluca.it/">Compagnia d'Arme del Santo Luca</a>.
|
A collection of pdf and CAD models to create late XIV century furniture and medieval camp equipment. These objects are being realized by
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="http://www.compagniadarmedelsantoluca.it/">Compagnia d'Arme del Santo Luca</a>.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Pinterest -->
|
<!-- Pinterest -->
|
||||||
<button class="accordion"><b>Pinterest Pinner</b></button>
|
<button class="accordion"><b>Pinterest Pinner</b></button>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<i class="icon"><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/pinterest_pinner" class="icon brands alt fa-github"><span class="label">GitHub</span></a></i>
|
<i class="icon"
|
||||||
|
><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari/pinterest_pinner" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
></i
|
||||||
|
>
|
||||||
<p>
|
<p>
|
||||||
Publishes all photos from a <a target="_blank" rel="noopener noreferrer" href="http://www.compagniadarmedelsantoluca.it/">selected website</a> into a target Pinterest board using Python3 and the Pinterest API.
|
Publishes all photos from a
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="http://www.compagniadarmedelsantoluca.it/">selected website</a>
|
||||||
|
into a target Pinterest board using Python3 and the Pinterest API.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<footer id="footer">
|
<footer id="footer">
|
||||||
<ul class="icons">
|
<ul class="icons">
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/m-tartari/" class="icon brands alt fa-linkedin-in"><span class="label">LinkedIn</span></a></li>
|
<li>
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari" class="icon brands alt fa-github"><span class="label">GitHub</span></a></li>
|
<a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/m-tartari/" class="icon brands alt fa-linkedin-in"
|
||||||
<li><a target="_blank" rel="noopener noreferrer" href="mailto:michele.tartari@live.com" class="icon solid alt fa-envelope"><span class="label">Email</span></a></li>
|
><span class="label">LinkedIn</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="https://github.com/m-tartari" class="icon brands alt fa-github"
|
||||||
|
><span class="label">GitHub</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener noreferrer" href="mailto:michele.tartari@live.com" class="icon solid alt fa-envelope"
|
||||||
|
><span class="label">Email</span></a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="copyright">
|
<ul class="copyright">
|
||||||
<li>© 2020-<script>document.write( new Date().getFullYear() );</script> Michele Tartari. All rights reserved.</li>
|
<li>
|
||||||
|
© 2020-
|
||||||
|
<script>
|
||||||
|
document.write(new Date().getFullYear());
|
||||||
|
</script>
|
||||||
|
Michele Tartari. All rights reserved.
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+50
-50
@@ -1,118 +1,118 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: #7681B3;
|
background-color: #7681b3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.presentational-container {
|
.presentational-container {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
box-shadow: 2px 2px 10px 5px;
|
box-shadow: 2px 2px 10px 5px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
background: none;
|
background: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 10px 10px 0;
|
padding: 10px 10px 0;
|
||||||
border-width: 3px 0 0 0;
|
border-width: 3px 0 0 0;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: #232C9F;
|
border-color: #232c9f;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.outer-row td.headshot-cell {
|
tr.outer-row td.headshot-cell {
|
||||||
padding: 0 12px 0 0;
|
padding: 0 12px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.headshot-cell a {
|
td.headshot-cell a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.headshot-cell img {
|
td.headshot-cell img {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
width:120px;
|
width: 120px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.description-cell {
|
td.description-cell {
|
||||||
padding: 0 0 0 12px;
|
padding: 0 0 0 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.description-cell > table {
|
td.description-cell > table {
|
||||||
background: none;
|
background: none;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.full-name {
|
td.full-name {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #232C9F;
|
color: #232c9f;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.title {
|
td.title {
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.website {
|
td.website {
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.website a {
|
td.website a {
|
||||||
color: #4BAFDB;
|
color: #4bafdb;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.social-icons {
|
td.social-icons {
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.social-icons ul {
|
td.social-icons ul {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
height: 25px;
|
height: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.social-icons li {
|
td.social-icons li {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.social-icons a {
|
td.social-icons a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.social-icons img {
|
td.social-icons img {
|
||||||
width: 25px;
|
width: 25px;
|
||||||
height: 25px;
|
height: 25px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<table role="presentation">
|
<table role="presentation">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="outer-row">
|
<tr class="outer-row">
|
||||||
<td class="headshot-cell">
|
<td class="headshot-cell">
|
||||||
<a href="http://www.m-tartari.eu">
|
<a href="http://www.m-tartari.eu">
|
||||||
<img src="https://drive.google.com/uc?id=1Y6t65qoE8s6CUPcfVQii6RZgAl1YmALD" name="preview-image-url" alt="Photo"/>
|
<img src="https://drive.google.com/uc?id=1Y6t65qoE8s6CUPcfVQii6RZgAl1YmALD" name="preview-image-url" alt="Photo" />
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="description-cell">
|
<td class="description-cell">
|
||||||
@@ -135,17 +135,17 @@ td.social-icons img {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a href="http://www.m-tartari.eu">
|
<a href="http://www.m-tartari.eu">
|
||||||
<img src="https://drive.google.com/uc?id=1KCLt13X7Jn-vTmcpCBjDJssYsKb29tRT" alt="Website"/>
|
<img src="https://drive.google.com/uc?id=1KCLt13X7Jn-vTmcpCBjDJssYsKb29tRT" alt="Website" />
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://github.com/m-tartari">
|
<a href="https://github.com/m-tartari">
|
||||||
<img src="https://drive.google.com/uc?id=1KferYVq2PXqGLZWEy6HlEYEaCKKZ8KiR" alt="Github"/>
|
<img src="https://drive.google.com/uc?id=1KferYVq2PXqGLZWEy6HlEYEaCKKZ8KiR" alt="Github" />
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://www.linkedin.com/in/m-tartari/">
|
<a href="https://www.linkedin.com/in/m-tartari/">
|
||||||
<img src="https://drive.google.com/uc?id=1V9nFk0LaUXXNhPb-FnmP0M30ubXrjyAo" alt="LinkedIn"/>
|
<img src="https://drive.google.com/uc?id=1V9nFk0LaUXXNhPb-FnmP0M30ubXrjyAo" alt="LinkedIn" />
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -158,5 +158,5 @@ td.social-icons img {
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user