Code page
0
jenkins/deploy.sh
Executable file → Normal file
0
simon987/build/webpack.dev.conf.js
Executable file → Normal file
@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width,initial-scale=1,minimal-ui" name="viewport">
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:400,500,700,400italic|Material+Icons">
|
||||
<link rel="stylesheet" href="static/md-icons.css">
|
||||
|
||||
<title>simon987.net</title>
|
||||
</head>
|
||||
|
49
simon987/package-lock.json
generated
@ -5552,9 +5552,9 @@
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
"version": "4.17.15",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
|
||||
},
|
||||
"lodash.camelcase": {
|
||||
"version": "4.3.0",
|
||||
@ -5951,9 +5951,9 @@
|
||||
}
|
||||
},
|
||||
"mixin-deep": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
|
||||
"integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
|
||||
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"for-in": "^1.0.2",
|
||||
@ -9824,9 +9824,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"set-value": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
|
||||
"integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
||||
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"extend-shallow": "^2.0.1",
|
||||
@ -10738,38 +10738,15 @@
|
||||
}
|
||||
},
|
||||
"union-value": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
|
||||
"integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
|
||||
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"arr-union": "^3.1.0",
|
||||
"get-value": "^2.0.6",
|
||||
"is-extendable": "^0.1.1",
|
||||
"set-value": "^0.4.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"extend-shallow": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-extendable": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"set-value": {
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
|
||||
"integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"extend-shallow": "^2.0.1",
|
||||
"is-extendable": "^0.1.1",
|
||||
"is-plain-object": "^2.0.1",
|
||||
"to-object-path": "^0.3.0"
|
||||
}
|
||||
}
|
||||
"set-value": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"uniq": {
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "simon987.net",
|
||||
"version": "1.0.0",
|
||||
"description": "A Vue.js project",
|
||||
"version": "1.2.0",
|
||||
"description": "My personal website",
|
||||
"author": "simon987 <me@simon987.net>",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@ -11,7 +11,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"d3": "^5.9.2",
|
||||
"lodash": "^4.17.11",
|
||||
"lodash": "^4.17.15",
|
||||
"pixi.js": "^4.8.7",
|
||||
"vue": "^2.6.10",
|
||||
"vue-material": "^1.0.0-beta-11",
|
||||
|
@ -5,6 +5,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import 'vue-material/dist/vue-material.min.css'
|
||||
import 'vue-material/dist/theme/default.css'
|
||||
|
||||
export default {
|
||||
name: 'App'
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
import * as PIXI from 'pixi.js'
|
||||
import * as _ from 'lodash'
|
||||
|
||||
function Grid(cellSize, tickLen, colScheme) {
|
||||
function Grid(cellSize, tickLen, themes) {
|
||||
|
||||
this._c1 = colScheme.c1;
|
||||
this._c2 = colScheme.c2;
|
||||
this._c3 = colScheme.c3;
|
||||
let lastTheme = -1;
|
||||
|
||||
this.seed = function () {
|
||||
this._cells = new Uint8Array(this._cellCount).map(() => {
|
||||
@ -19,7 +17,29 @@ function Grid(cellSize, tickLen, colScheme) {
|
||||
});
|
||||
};
|
||||
|
||||
this.getTheme = function () {
|
||||
if (lastTheme === -1) {
|
||||
lastTheme = 0;
|
||||
return lastTheme;
|
||||
} else {
|
||||
let theme;
|
||||
do {
|
||||
theme = Math.floor(Math.random() * themes.length);
|
||||
} while (theme === lastTheme);
|
||||
lastTheme = theme;
|
||||
return theme;
|
||||
}
|
||||
};
|
||||
|
||||
this.setRandomColorSchemes = function() {
|
||||
let theme = themes[this.getTheme()];
|
||||
this._c1 = theme.c1;
|
||||
this._c2 = theme.c2;
|
||||
this._c3 = theme.c3;
|
||||
};
|
||||
|
||||
this.resize = function () {
|
||||
this.setRandomColorSchemes();
|
||||
this._pxWidth = window.innerWidth;
|
||||
this._pxHeight = window.innerHeight;
|
||||
|
||||
|
Before Width: | Height: | Size: 6.7 KiB |
225
simon987/src/components/Code.vue
Normal file
@ -0,0 +1,225 @@
|
||||
<template>
|
||||
<div id="content" class="md-layout">
|
||||
<md-card class="md-layout-item md-elevation-10">
|
||||
<md-card-header>
|
||||
<md-card-header-text>
|
||||
<span class="md-title"><md-icon class="md-size-2x">code</md-icon> Code</span>
|
||||
</md-card-header-text>
|
||||
</md-card-header>
|
||||
|
||||
<md-card-content>
|
||||
This is a partial list of my active programming projects
|
||||
</md-card-content>
|
||||
|
||||
<Project
|
||||
name="Much Assembly Required"
|
||||
date="[2017-11]"
|
||||
description="Multi-player 16-bit assembly programming game in your browser."
|
||||
:techs="['Java', 'Pixi.js', 'Typescript', 'MongoDB', 'x86-16 ASM']"
|
||||
:links="[{github: 'https://github.com/simon987/Much-Assembly-Required'}, {website:'https://muchassemblyrequired.com'}]"
|
||||
media="/static/cubot.png"
|
||||
/>
|
||||
|
||||
<!-- TODO: demo website -->
|
||||
<Project
|
||||
name="Simple Incremental Search Tool"
|
||||
date="[2018-01]"
|
||||
description="Simple web frontend to an elasticsearch database made for local files indexing.
|
||||
Enables lightning-fast incremental (as you type) search in a modern Web UI."
|
||||
:techs="['Elasticsearch', 'Python', 'Flask', 'Javascript', 'SQLite', 'Test-Driven']"
|
||||
:links="[{github: 'https://github.com/simon987/Simple-Incremental-Search-Tool'}, {demo:'https://sist.simon987.net'}]"
|
||||
media="/static/sist.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="Misc Web scraping"
|
||||
date="[2018-02]"
|
||||
description=""
|
||||
:techs="['Python', 'SQLite']"
|
||||
media="/static/python.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="OD-Database"
|
||||
date="[2018-07]"
|
||||
description="Distributed crawler, database and web frontend for public directories indexing."
|
||||
:techs="['Elasticsearch', 'Python', 'Flask', 'PostgreSQL']"
|
||||
:links="[{github: 'https://github.com/simon987/od-database'}, {website:'https://od-db.the-eye.eu'}]"
|
||||
media="/static/oddb.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="task_tracker"
|
||||
date="[2019-02]"
|
||||
description="Fast task tracker (job queue) with authentication, statistics and web frontend"
|
||||
:techs="['Go', 'PostgreSQL', 'Angular', 'Test-Driven']"
|
||||
:links="[{github: 'https://github.com/simon987/task_tracker'}, {demo:'https://tt.simon987.net'}]"
|
||||
media="/static/tt.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="task_tracker_drone"
|
||||
date="[2019-03]"
|
||||
description="General purpose 'set and forget' task runner and client library for task_tracker"
|
||||
:techs="['Python']"
|
||||
:links="[{github: 'https://github.com/simon987/task_tracker_drone'}]"
|
||||
media="/static/worker.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="ws_bucket"
|
||||
date="[2019-03]"
|
||||
description="Simple websocket-based file upload service with token-based auth. Currently used to allow secure file upload for OD-Database workers."
|
||||
:techs="['Go', 'Test-Driven']"
|
||||
:links="[{github: 'https://github.com/simon987/ws_bucket'}]"
|
||||
media="/static/go.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="Music graph (API & UI)"
|
||||
date="[2019-04]"
|
||||
description="Massive Web scraping project that attempts to aggregate raw information from
|
||||
Musicbrainz, Last.fm, Spotify and Cover Art Archive to generate an interactive map of music-related data.
|
||||
Uses a graph-database as its core and allows subsecond searching through tens of millions of relationships
|
||||
with its mobile-friendly interface"
|
||||
:techs="['D3.js', 'Graph Database', 'Vue.js', 'Python', 'Bash', 'Java']"
|
||||
:links="[{'github (ui)': 'https://github.com/simon987/music-graph-ui'}, {'github (api)': 'https://github.com/simon987/music-graph-api'}, {website: 'https://mg.simon987.net'}]"
|
||||
media="/static/mg.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="DataArchivist.net"
|
||||
date="[2019-04]"
|
||||
description="Personal data archival blog"
|
||||
:techs="['HTML', 'Hugo']"
|
||||
:links="[{'github': 'https://github.com/simon987/dataarchivist.net'}, {website: 'https://dataarchivist.net'}]"
|
||||
media="/static/rss.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="simon987.net"
|
||||
date="[2019-04]"
|
||||
description="My personal website"
|
||||
:techs="['Pixi.js', 'Vue.js']"
|
||||
:links="[{'github': 'https://github.com/simon987/simon987.net'}, {website: 'https://simon987.net'}]"
|
||||
media="/static/net.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="irarchives"
|
||||
date="[2019-05]"
|
||||
description="Large scale reverse image and video search for reddit.
|
||||
This project is a massive rewrite & refactor of the now defunct i.rarchives.com website.
|
||||
It uses a combination of real-time ingesting using reddit_feed and historical
|
||||
archival from Pushshift. Several optimizations have been implemented to allow parametrised
|
||||
image and video search possible among its large dataset (See pg_hamming)."
|
||||
:techs="['Python', 'PostgreSQL', 'Javascript']"
|
||||
:links="[{'github': 'https://github.com/simon987/irarchives'}]"
|
||||
media="/static/irar.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="Architeuthis"
|
||||
date="[2019-05]"
|
||||
description="MITM HTTP(S) proxy with integrated load-balancing, rate-limiting and error handling.
|
||||
This tool was implemented to de-couple the often repetitive
|
||||
HTTP error handling & rate-limiting logic from many Web scraping jobs."
|
||||
:techs="['Go']"
|
||||
:links="[{'github': 'https://github.com/simon987/Architeuthis'}]"
|
||||
media="/static/archi.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="pg_hamming"
|
||||
date="[2019-07]"
|
||||
description="Custom C-Level function for PostgreSQL to calculate hamming distance
|
||||
for fixed-length BYTEA datatype. Was designed and optimized to drastically reduce
|
||||
the query time of the irarchives project."
|
||||
:techs="['C', 'PostgreSQL']"
|
||||
:links="[{'github': 'https://github.com/simon987/pg_hamming'}]"
|
||||
media="/static/hamming.png"
|
||||
/>
|
||||
|
||||
|
||||
<Project
|
||||
name="beemer"
|
||||
date="[2019-07]"
|
||||
description="beemer is an utility tool that executes a custom command on files written in a watched
|
||||
directory. It is mainly used to facilitate offloading of large datasets generated by
|
||||
scraping jobs to cloud storage."
|
||||
:techs="['Go']"
|
||||
:links="[{'github': 'https://github.com/simon987/beemer'}]"
|
||||
media="/static/go.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="phpBB request system"
|
||||
date="[2019-07]"
|
||||
description="Simple request system for phpBB3.2 built for an online community"
|
||||
:techs="['PHP']"
|
||||
:links="[{'github': 'https://github.com/simon987/phpBB-reqs'}]"
|
||||
media="/static/phpbb.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="reddit_feed"
|
||||
date="[2019-08]"
|
||||
description="Fault-tolerant daemon that fetches comments and submissions from reddit.
|
||||
Was built to de-couple, centralize and simplify reddit API calls for various other projects."
|
||||
:techs="['Python', 'RabbitMQ']"
|
||||
:links="[{'github': 'https://github.com/simon987/reddit_feed'}]"
|
||||
media="/static/reddit_feed.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="chan_feed"
|
||||
date="[2019-08]"
|
||||
description="Daemon that fetches posts from compatible *chan image boards.
|
||||
It keeps track of visited threads to minimize the number of HTTP requests."
|
||||
:techs="['Python', 'RabbitMQ', 'SQLite']"
|
||||
:links="[{'github': 'https://github.com/simon987/chan_feed'}]"
|
||||
media="/static/chan_feed.png"
|
||||
/>
|
||||
|
||||
<Project
|
||||
name="telegram ingest"
|
||||
date="[2019-08]"
|
||||
description="Pushshift Telegram Ingest."
|
||||
:techs="['Python', 'Elasticsearch', 'Javascript']"
|
||||
:links="[{'github': 'https://github.com/pushshift/telegram'}]"
|
||||
media="/static/telegram.png"
|
||||
fork
|
||||
/>
|
||||
</md-card>
|
||||
|
||||
<router-link to="/">
|
||||
<md-button class="md-fab md-fixed md-fab-top-left">
|
||||
<md-icon>arrow_back</md-icon>
|
||||
</md-button>
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Project from "./Project";
|
||||
|
||||
export default {
|
||||
name: "Code",
|
||||
components: {Project}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.md-card {
|
||||
background-color: white;
|
||||
margin: 2em;
|
||||
max-width: 1200px;
|
||||
min-width: inherit;
|
||||
}
|
||||
|
||||
.md-layout-item {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
</style>
|
@ -9,17 +9,48 @@
|
||||
import Grid from '../Grid';
|
||||
import Jumbotron from "./Jumbotron";
|
||||
|
||||
let lightTheme = {
|
||||
c1: 0xf9989f,
|
||||
c2: 0xfccb8f,
|
||||
c3: 0xc5f8c8
|
||||
};
|
||||
|
||||
let darkTheme = {
|
||||
c1: 0x3a3b52,
|
||||
c2: 0x33284b,
|
||||
c3: 0x2c2332
|
||||
};
|
||||
let themes = [
|
||||
{
|
||||
c1: 0xf9989f,
|
||||
c2: 0xfccb8f,
|
||||
c3: 0xc5f8c8
|
||||
},
|
||||
{
|
||||
c1: 0x3a3b52,
|
||||
c2: 0x33284b,
|
||||
c3: 0x2c2332
|
||||
},
|
||||
{
|
||||
c1: 0x547d59,
|
||||
c2: 0xa0b97b,
|
||||
c3: 0xbdc17c
|
||||
},
|
||||
{
|
||||
c1: 0xd9bf68,
|
||||
c2: 0xe05b7c,
|
||||
c3: 0x811143
|
||||
},
|
||||
{
|
||||
c1: 0x70ce9a,
|
||||
c2: 0xf2f1c7,
|
||||
c3: 0xc15b41
|
||||
},
|
||||
{
|
||||
c1: 0xEAEBD7,
|
||||
c2: 0x74645F,
|
||||
c3: 0xF3876A
|
||||
},
|
||||
{
|
||||
c1: 0xADBCB9,
|
||||
c2: 0xC184E9,
|
||||
c3: 0xD8C5C3
|
||||
},
|
||||
{
|
||||
c1: 0xFA520B,
|
||||
c2: 0xFCB20C,
|
||||
c3: 0xE5E113
|
||||
},
|
||||
];
|
||||
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const size = urlParams.get('size');
|
||||
@ -34,8 +65,7 @@ export default {
|
||||
let grid = new Grid(
|
||||
size ? size : window.innerWidth < 1000 ? 15 : 25,
|
||||
window.innerWidth < 1000 ? 80 : 40,
|
||||
// darkTheme
|
||||
lightTheme
|
||||
themes
|
||||
);
|
||||
grid.setup();
|
||||
grid.resize();
|
||||
|
@ -1,52 +1,33 @@
|
||||
<template>
|
||||
<div id="content" class="md-layout">
|
||||
<md-card class="md-layout-item md-elevation-10 md-size-90">
|
||||
<md-card class="md-layout-item md-elevation-10 main-card">
|
||||
<md-card-header>
|
||||
<span class="md-display-3 text-mono">simon987.net<span class="vim-caret">_</span></span>
|
||||
<md-card-header-text>
|
||||
<span class="md-display-3 text-mono">simon987.net<span class="vim-caret">_</span></span>
|
||||
</md-card-header-text>
|
||||
</md-card-header>
|
||||
|
||||
<md-card-content>
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio itaque ea, nostrum odio. Dolores, sed
|
||||
accusantium quasi non.
|
||||
<!-- - Software engineering student-->
|
||||
<!-- - Open source zealot-->
|
||||
<!-- - Data archival hobbyist-->
|
||||
</md-card-content>
|
||||
|
||||
<div class="sections">
|
||||
<md-empty-state
|
||||
md-rounded
|
||||
md-icon="code"
|
||||
md-label="Code"
|
||||
md-description="Placeholder text">
|
||||
</md-empty-state>
|
||||
<md-button to="/code" class="md-raised big-button">
|
||||
<md-icon class="md-accent">code</md-icon> Code
|
||||
<div class="desc">Projects portfolio</div>
|
||||
</md-button>
|
||||
|
||||
<md-empty-state
|
||||
md-rounded
|
||||
md-icon="edit"
|
||||
md-label="Blog"
|
||||
md-description="Placeholder text">
|
||||
</md-empty-state>
|
||||
</div>
|
||||
<md-button to="/" class="md-raised big-button">
|
||||
<md-icon class="md-accent">edit</md-icon> Blog
|
||||
<div class="desc">Placeholder text</div>
|
||||
</md-button>
|
||||
|
||||
<div class="sections-small">
|
||||
<md-card md-with-hover>
|
||||
<md-ripple>
|
||||
<md-card-header><span class="md-title"><md-icon>code</md-icon>Code</span></md-card-header>
|
||||
<md-card-content>Placeholder text</md-card-content>
|
||||
</md-ripple>
|
||||
</md-card>
|
||||
|
||||
<md-card md-with-hover>
|
||||
<md-ripple>
|
||||
<md-card-header><span class="md-title"><md-icon>edit</md-icon>Blog</span></md-card-header>
|
||||
<md-card-content>Placeholder text</md-card-content>
|
||||
</md-ripple>
|
||||
</md-card>
|
||||
|
||||
<md-card md-with-hover>
|
||||
<md-ripple>
|
||||
<md-card-header><span class="md-title"><md-icon>email</md-icon>Contact</span></md-card-header>
|
||||
<md-card-content>Placeholder text</md-card-content>
|
||||
</md-ripple>
|
||||
</md-card>
|
||||
<md-button to="/" class="md-raised big-button">
|
||||
<md-icon class="md-accent">email</md-icon> Contact
|
||||
<div class="desc">Placeholder text</div>
|
||||
</md-button>
|
||||
</div>
|
||||
</md-card>
|
||||
</div>
|
||||
@ -64,10 +45,8 @@ export default {
|
||||
margin: 2em;
|
||||
max-width: 1200px;
|
||||
min-width: inherit;
|
||||
}
|
||||
|
||||
.md-card .md-ripple {
|
||||
padding: 0 1em;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.text-mono {
|
||||
@ -135,21 +114,10 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.md-empty-state {
|
||||
display: inline-block;
|
||||
margin-left: 16px;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
.sections {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sections-small .md-card {
|
||||
background-color: rgba(58, 59, 82, 0.08);
|
||||
}
|
||||
|
||||
.md-layout-item {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
@ -159,40 +127,24 @@ export default {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 972px) {
|
||||
.md-display-3 {
|
||||
font-size: 42px;
|
||||
}
|
||||
|
||||
.sections {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sections-small {
|
||||
display: inherit;
|
||||
}
|
||||
.main-card {
|
||||
padding: 1rem 2rem 2rem 2rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 972px) {
|
||||
.sections-small {
|
||||
display: none;
|
||||
}
|
||||
.big-button {
|
||||
height: 110px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.md-empty-state.md-theme-default.md-rounded {
|
||||
background-color: rgba(58, 59, 82, 0.08);
|
||||
.desc {
|
||||
opacity: 0.8;
|
||||
font-weight: normal;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.md-empty-state:hover {
|
||||
cursor: pointer;
|
||||
transition: 0.3s;
|
||||
box-shadow: 0 6px 6px -3px rgba(0, 0, 0, .2), 0 10px 14px 1px rgba(0, 0, 0, .14), 0 4px 18px 3px rgba(0, 0, 0, .12);
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
.md-empty-state:hover .md-empty-state-icon {
|
||||
color: #FF5252 !important;
|
||||
transition: 0.1s;
|
||||
.md-button {
|
||||
margin-left: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
101
simon987/src/components/Project.vue
Normal file
@ -0,0 +1,101 @@
|
||||
<template>
|
||||
<md-card>
|
||||
<md-card-header>
|
||||
<md-card-header-text>
|
||||
<div class="md-title">
|
||||
<md-icon v-if="this.fork" md-src="/static/fork.svg"></md-icon>
|
||||
{{this.name}}
|
||||
<TechChip :name="tech" :key="tech" v-for="tech in this.techs"/>
|
||||
</div>
|
||||
<div class="md-subhead">
|
||||
<span class="muted">{{this.date}}</span>
|
||||
{{this.description}}
|
||||
</div>
|
||||
</md-card-header-text>
|
||||
|
||||
<md-card-media md-big>
|
||||
<img :src="this.media" alt="media">
|
||||
</md-card-media>
|
||||
</md-card-header>
|
||||
|
||||
|
||||
<md-card-expand>
|
||||
<md-card-actions md-alignment="space-between">
|
||||
<div>
|
||||
<a v-for="link in this.links" :href="Object.values(link)[0]" target="_blank">
|
||||
<md-button >{{Object.keys(link)[0]}}</md-button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<md-card-expand-trigger>
|
||||
<md-button class="md-icon-button">
|
||||
<md-icon>keyboard_arrow_down</md-icon>
|
||||
</md-button>
|
||||
</md-card-expand-trigger>
|
||||
</md-card-actions>
|
||||
|
||||
<md-card-expand-content>
|
||||
<md-card-content>
|
||||
Lorem ipsum dolor si2t amet, consectetur adipisicing elit. Optio itaque ea, nostrum odio. Dolores,
|
||||
sed accusantium quasi non, voluptas eius illo quas, saepe voluptate pariatur in deleniti minus sint.
|
||||
Excepturi.
|
||||
</md-card-content>
|
||||
</md-card-expand-content>
|
||||
</md-card-expand>
|
||||
|
||||
</md-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import TechChip from "./TechChip";
|
||||
import MdRouterLink from "vue-material/src/core/mixins/MdRouterLink/MdRouterLink";
|
||||
|
||||
export default {
|
||||
name: "Project",
|
||||
components: {MdRouterLink, TechChip},
|
||||
props: {
|
||||
name: String,
|
||||
date: String,
|
||||
description: String,
|
||||
media: String,
|
||||
techs: Array,
|
||||
links: Array,
|
||||
fork: {
|
||||
default: false,
|
||||
type: Boolean
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.md-card {
|
||||
background-color: white;
|
||||
margin: 2em;
|
||||
}
|
||||
|
||||
.md-title .md-icon {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.muted {
|
||||
color: #9e9e9e;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.md-subhead {
|
||||
margin-top: 0.4rem;
|
||||
opacity: .8;
|
||||
}
|
||||
|
||||
.md-card-header .md-card-media.md-big {
|
||||
max-height: 160px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.md-card-media {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
124
simon987/src/components/TechChip.vue
Normal file
@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<md-chip :class="this.name.toLowerCase().replace(/[. \-]/gi, '')">{{this.name}}</md-chip>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "TechChip",
|
||||
props: ["name"],
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.python {
|
||||
background: #3572A5;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.go {
|
||||
background: #00ADD8;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.java {
|
||||
background: #b07219;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.typescript {
|
||||
background: #2b7489;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.mongodb {
|
||||
background: #589636;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.x86-16asm {
|
||||
background: #6E4C13;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.angular {
|
||||
background: #b52e31;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.postgresql {
|
||||
background: #dad8d8;
|
||||
}
|
||||
|
||||
.pixijs {
|
||||
background: #E91E63;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.vuejs {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.c {
|
||||
background: #555555;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.d3js {
|
||||
background: #F68945;
|
||||
}
|
||||
|
||||
.javascript {
|
||||
background: #f1e05a;
|
||||
}
|
||||
|
||||
.bash {
|
||||
background: #89e051;
|
||||
}
|
||||
|
||||
.elasticsearch {
|
||||
background: #0077CC;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.flask {
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.php {
|
||||
background: #4F5D95;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.rabbitmq {
|
||||
background: #FF6600;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.html {
|
||||
background: #e34c26;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.sqlite {
|
||||
background: #5AB1E3;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.testdriven {
|
||||
background: #7BFF7B;
|
||||
}
|
||||
|
||||
.hugo {
|
||||
background: #FF4088;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.graphdatabase {
|
||||
background: #63B543;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
@ -4,8 +4,6 @@ import router from './router'
|
||||
|
||||
//TODO: Import individual components
|
||||
import VueMaterial from 'vue-material'
|
||||
import 'vue-material/dist/vue-material.min.css'
|
||||
import 'vue-material/dist/theme/default.css'
|
||||
|
||||
Vue.config.productionTip = false;
|
||||
Vue.use(VueMaterial);
|
||||
|
@ -1,11 +1,12 @@
|
||||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
import Grid from '../components/Grid'
|
||||
import Jumbotron from "../components/Jumbotron";
|
||||
import Code from "../components/Code";
|
||||
|
||||
Vue.use(Router);
|
||||
|
||||
export default new Router({
|
||||
mode: 'history',
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
@ -13,9 +14,9 @@ export default new Router({
|
||||
component: Grid
|
||||
},
|
||||
{
|
||||
path: '/j',
|
||||
name: 'Jumbotron',
|
||||
component: Jumbotron
|
||||
path: '/code',
|
||||
name: 'Code',
|
||||
component: Code
|
||||
}
|
||||
]
|
||||
})
|
||||
|
BIN
simon987/static/archi.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
simon987/static/chan_feed.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
simon987/static/cubot.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
1
simon987/static/fork.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"></path></svg>
|
After Width: | Height: | Size: 588 B |
BIN
simon987/static/go.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
simon987/static/hamming.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
simon987/static/irar.png
Normal file
After Width: | Height: | Size: 60 KiB |
247
simon987/static/md-icons.css
Normal file
@ -0,0 +1,247 @@
|
||||
/* fallback */
|
||||
@font-face {
|
||||
font-family: 'Material Icons';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(https://fonts.gstatic.com/s/materialicons/v48/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xIIzI.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
.material-icons {
|
||||
font-family: 'Material Icons';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-transform: none;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
word-wrap: normal;
|
||||
direction: ltr;
|
||||
-moz-font-feature-settings: 'liga';
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
BIN
simon987/static/mg.png
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
simon987/static/net.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
simon987/static/oddb.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
simon987/static/phpbb.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
simon987/static/python.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
simon987/static/reddit_feed.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
simon987/static/rss.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
simon987/static/sist.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
simon987/static/telegram.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
simon987/static/tt.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
simon987/static/worker.png
Normal file
After Width: | Height: | Size: 3.2 KiB |