♻️ refactor: format code

This commit is contained in:
2022-07-07 11:54:43 +02:00
parent 14e5edd35a
commit bfd15205cf
18 changed files with 14772 additions and 5116 deletions
+130
View File
@@ -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
+4388 -1
View File
File diff suppressed because one or more lines are too long
+317 -194
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -5,7 +5,6 @@
*/ */
/* Loader */ /* Loader */
body.landing.is-preload:before { body.landing.is-preload:before {
display: none; display: none;
} }
+8 -8
View File
@@ -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'
} }
}); })
} }
+127 -1
View File
@@ -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
})
+102 -1
View File
@@ -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
})
+247 -1
View File
File diff suppressed because one or more lines are too long
+4320 -1
View File
File diff suppressed because one or more lines are too long
+116 -1
View File
@@ -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)
+42 -1
View File
@@ -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)
+95 -142
View File
@@ -4,10 +4,9 @@
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({
@@ -15,50 +14,37 @@
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 () { $.fn._parallax = function () {
return $(this)
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);
$this.css('background-position', 'center ' + (pos * -0.15) + 'px');
});
};
off = function () { off = function () {
$this.css('background-position', '')
$this $window.off('scroll._parallax')
.css('background-position', ''); }
$window breakpoints.on('<=medium', off)
.off('scroll._parallax'); breakpoints.on('>medium', on)
})
}; return $(this)
}
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 () { off = function () {
$this.unscrollex(); $this.unscrollex()
}; }
breakpoints.on('<=medium', off); breakpoints.on('<=medium', off)
breakpoints.on('>medium', on); breakpoints.on('>medium', on)
})
});
// Banner. // Banner.
var $banner = $('#banner'); var $banner = $('#banner')
$banner $banner._parallax()
._parallax(); })(jQuery)
})(jQuery);
+176 -301
View File
@@ -1,38 +1,36 @@
(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.
@@ -40,19 +38,14 @@
* @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
.find('input[type=text],textarea')
.each(function () { .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,148 +299,112 @@
.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.
@@ -524,64 +412,51 @@
* @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
View File
@@ -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>
&nbsp;&nbsp;michele.tartari@live.com &nbsp;&nbsp;michele.tartari@live.com
</a> </a>
@@ -53,7 +61,8 @@
&nbsp;&nbsp; m-tartari &nbsp;&nbsp; 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>
&nbsp;&nbsp; m-tartari &nbsp;&nbsp; m-tartari
</a> </a>
+114 -30
View File
@@ -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,7 +122,15 @@
<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>
@@ -104,8 +138,10 @@
</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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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>&copy; 2020-<script>document.write( new Date().getFullYear() );</script> Michele Tartari. All rights reserved.</li> <li>
&copy; 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>
+238 -90
View File
@@ -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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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
>
&nbsp;&nbsp; &nbsp;&nbsp;
<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>&copy; 2020-<script>document.write( new Date().getFullYear() );</script> Michele Tartari. All rights reserved.</li> <li>
&copy; 2020-
<script>
document.write(new Date().getFullYear());
</script>
Michele Tartari. All rights reserved.
</li>
</ul> </ul>
</footer> </footer>
</div> </div>
+5 -5
View File
@@ -8,7 +8,7 @@ body {
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 {
@@ -23,7 +23,7 @@ table {
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 {
@@ -53,7 +53,7 @@ td.description-cell > table {
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;
} }
@@ -74,7 +74,7 @@ td.website {
} }
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;
@@ -159,4 +159,4 @@ td.social-icons img {
</table> </table>
</div> </div>
</body> </body>
</html>