Browse Source

Initial commit

tags/15.07.18
PHENOM 2 years ago
commit
5b00e94553

+ 15
- 0
.drone.yml View File

@@ -0,0 +1,15 @@
pipeline:
build:
image: node
commands:
- npm install
- npm run generate
deploy:
image: cschlosser/drone-ftps
hostname: phenomic.net:1488
secrets: [ ftp_username, ftp_password ]
clean_dir: true
dest_dir: /html
src_dir: /dist
when:
event: tag

+ 16
- 0
.eslintrc.js View File

@@ -0,0 +1,16 @@
module.exports = {
root: true,
parser: 'babel-eslint',
env: {
browser: true,
node: true
},
extends: 'standard',
// required to lint *.vue files
plugins: [
'html'
],
// add your custom rules here
rules: {},
globals: {}
}

+ 14
- 0
.gitignore View File

@@ -0,0 +1,14 @@
# dependencies
node_modules

# logs
npm-debug.log

# Nuxt build
.nuxt

# Nuxt generate
dist

# Custom
package-lock.json

+ 22
- 0
README.md View File

@@ -0,0 +1,22 @@
# [PHENOMIC.net](https://phenomic.net)

The main website for PHENOM based on Nuxt.js. Visit the site here https://phenomic.net

## Build Setup

``` bash
# install dependencies
$ npm install # Or yarn install

# serve with hot reload at localhost:3000
$ npm run dev

# build for production and launch server
$ npm run build
$ npm start

# generate static project
$ npm run generate
```

For detailed explanation on how things work, check out the [Nuxt.js](https://github.com/nuxt/nuxt.js) and [Vuetify.js](https://vuetifyjs.com/) documentation.

+ 5
- 0
assets/style/app.styl View File

@@ -0,0 +1,5 @@
// Import Vuetify styling
@require '~vuetify/src/stylus/app.styl'

.page
@extend .fade-transition

+ 79
- 0
components/NuxtLogo.vue View File

@@ -0,0 +1,79 @@
<template>
<div class="VueToNuxtLogo">
<div class="Triangle Triangle--two"></div>
<div class="Triangle Triangle--one"></div>
<div class="Triangle Triangle--three"></div>
<div class="Triangle Triangle--four"></div>
</div>
</template>

<style>
.VueToNuxtLogo {
display: inline-block;
animation: turn 2s linear forwards 1s;
transform: rotateX(180deg);
position: relative;
overflow: hidden;
height: 180px;
width: 245px;
}

.Triangle {
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
}

.Triangle--one {
border-left: 105px solid transparent;
border-right: 105px solid transparent;
border-bottom: 180px solid #41B883;
}

.Triangle--two {
top: 30px;
left: 35px;
animation: goright 0.5s linear forwards 3.5s;
border-left: 87.5px solid transparent;
border-right: 87.5px solid transparent;
border-bottom: 150px solid #3B8070;
}

.Triangle--three {
top: 60px;
left: 35px;
animation: goright 0.5s linear forwards 3.5s;
border-left: 70px solid transparent;
border-right: 70px solid transparent;
border-bottom: 120px solid #35495E;
}

.Triangle--four {
top: 120px;
left: 70px;
animation: godown 0.5s linear forwards 3s;
border-left: 35px solid transparent;
border-right: 35px solid transparent;
border-bottom: 60px solid #fff;
}

@keyframes turn {
100% {
transform: rotateX(0deg);
}
}

@keyframes godown {
100% {
top: 180px;
}
}

@keyframes goright {
100% {
left: 70px;
}
}
</style>

+ 16
- 0
components/VuetifyLogo.vue View File

@@ -0,0 +1,16 @@
<template>
<img class="VuetifyLogo" alt="Vuetify Logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAANs0lEQVR4nO2deTxV6R/H77n75dpluRdXCyVKKEvLkFC2SDQkIoWaUCoqTPWrmVY7De0yNRVhmsyYGG00MxXR1CjVvCb9puE3o0VNiyy/81xzzFTCvfc597H0eb3OX67zfZ7v28fzfc75nnMpFCmJyTfi89dVnON/XFEG/VhXUabpfaBc0zuLrKOMKTAcJq1cSUcYRuGvrzqju/NJOxmHdnBJu3bId6QcmnOzL1CoNNQZhC856xDP/giEO2aWJ+rckSKqjCJLZ8e9u/0JCD/wy1sYg81AnTvSpOKTHNOfgChYLopAnTNSRdcYqaa78+kLqEDSm/DkwQeiFXyqkSanoYA6Z6RLPfyr7P4ARNk+dgvqXElFnLHOlngi2/o0kNDSZsYQPS3UuZKOMCrG//jy9/CAPIbuDjWP1GzUaZKqFKZH+kMDkgYdSCtn+BQz1DmSqvASmKOTWF/fF4FofLivBN8IYqhzJHWpeKdv6otAZA1dnVHnBomYAlMBXgI3Sw7kETQYvMD86xhTpu9dJxll7W4y1tHPgYxDWVtPlYijEVmUKzGQVHhA5C0CFxFjM/lghonNLD8H2Ie1u68tlUYX7V/iZP+YwLjy9nYyjpmx+3cQcWRM3GwkLoEhAeEHnaynchRkwLg4XAXOsRvNf+bfaW+HfcRllWSJ7BCOvDIz8mRDLRlA1px+/qe8mpY8iIMxOTTtzber+wIQJZuV64n5f7hs40dkwDh+q/XFUGOrESIDAZrkvzaALJdYL9wQQsRRdFoTKhmQh5IDCS5+Slfja4DxsGW4jL0/NtwgA0hURkGGWDCAGGxZetS3D0lxyfITv1VjVBoVxKFx1bmClMYHKIGoTN+wi5i3rddCNzJg5N1pf84bYagtNhCgKQFr/clyiaGdty0RRzVgT4LYQFIkBtLK1BwzGowDw6hYyqmac2QACY/PTpIIBhCTw8XXkvqfyQASkFGWR8RhDbcaiSf3lXhAHkgERN1rVyExDtOpLpZ48tpgwzh242WT9khjnsRAgCzmRPiR5JJmzZGmgo4oGIW3+nwhCiCyo52mEXON2//tETLcsXjzXnhXjhlsGTrukhoyoLh/fHArEYdr4e0obSC8+ccrKH+vZdr6Y4bm3W5rhg0j50bzQyV1vgo0IEDmXmG+ZACJLm5qkFVS44IY+B6Arr297qbIQJLFByJn6utHzHHptgMJZLgjYF36OqgwgIBLIgruXScDypSAmAVEHKVZm5aLDqRRLBhaC7++R5VVZoO4KjxdpSPXnz2EDePwT0//UFLjK0IHAmQ+J3wuGUAiCxsqQXUDYtAUNJUEO588kQYQRduVUcTcfCI/WUmGO/xWx0e9O6MSCq+4GMsK7l0jA4qBjcdkIo7a0oJM0oEsPtNEk1NTAvEYTDYju+rZXdgwPq9uui+vrCZHGhAgS58VPmQA8U87fZSIwTGYZownurXXQJJEB6JiF5tMxHMJjZlLhjvmRPwnnFQYQFQanYpXXPDXkrK2F5qjxnfsYvF/X7yY70t7D+RPEYGUNLO0zfRAKDqTRU0tqb0I3R1Xn9SxZBVYpAMBmuAV/iEZLpkZs28jEUNuauhssoCoeaTnEnEsXXyt80nYCHosiQ2WCgwgUHGF5dyphg0kuqTpPpuryAEx8BKYqZNY37suR9GAtLF1zK2EE8Ewyqc5F07AhrH3x/qbbBmudNxBaLxnxBwyXGIxJ2IeEUPZa+ta2EA0ArIuUFgdFd1Is8mj8+60v4INxDVolb9UYQCBK8ERBXXQXRKed/ci+MsFoqsO1RCkPnjWI5DEP3oNhGs4s7NxekVabgZsGJnn666xOLJoeoHxisuTDJeMtvWyJGJoLP+m5y7HXgLhBxbcwugsYbJUeTpD8m63/QUbyAy/MC8kMICodAaouK7CBuKbWtLZpMYZ42ih29Mt3l4CUTBf0Nk4HRiXHAcbxu4f6q/Q8JygofG3zNxDPWADiT3f8kxV16DjUjWVjvHjLnXf5Zj4v54vkyz6tpHGVRM2TsspqcpmX3l0HzKQNmuPYFekMIDoLA49LPeXSthQnKMyOy/IKThGd9/lmNAzEOVpazqvKrsELg+C7Y6U4tpy5O4gZDYLvktWFT24x5ZXYoLz4yUwS5DS2CA2kNDSlwyVYcLGaSqVRs288PtPsN1h5TLXHi2Ffwnfl1Aj8uugu8TKN8qbiKHinbBRXCBD3JM616QpHiFOsN2RUHj1NO6OvtV6au4VNgs2kCVf3CgnGsqYOuMEummPun7Qp3sgreyhE4WN0/i5KNtOVBbDdoels/cHaLPfhcA1roiCexWQobSNsHLs7ELXXHGq6y7H+IZ3bwR9skoof1/aH201zQRPYCtMIFvyLn6NYX1j6XhL+FriBtslcxOL9hPnlxk3s+sux26AyIx2diJ+P2ZfURZkd7SMnexgjibbvRCdyaZ9dLT2EkwgMWebnypr66uD82N0JlVr47W3uxzfAYQXkHcdY3Do4HeHGk3QPn6r9TlMIBuOlOf1WXcQMnMLcYXtEvuw+LXE+RVdYkLeBCKIr+8SiLzlws7G6cVb92+B7Q6DCdZj0GRZBIFFOKKg7jJMIKtL/6qjsbnCv3SavDpXkPaosScgWouK6qlsBeGVYzkVdW7OzVcPYAKJO3j6MNpMiyAzd/gumTgvuvOioOr8XYmvuWTH20AUrSPXE5/3WfFpOEwYebfbX44YZzUKSXLFEai48N37DzCBLDpQeQajdlRL7BGT9HX/1eUoeBNIcPFTxpARHY3TsnLM/Zf+uAUTSHTGl/vQZlgMmbgGOUN2SeuwCXbjhCfHF1Le2vLCf4D8/hoQVcdNnY3Tdt7Bs+G6o+2Ftr5Z/3szENi9L825DdUlvkmndhPn51r4OHUNpLSFxTM2BJ8BjkotqS2HCSQiJScNXVYllLFzoBNMIGtOP29S1TUQPg4HHvTRSbhfKwSy/R8g6p4ZnY3T4+3cJuZDvF+eW9vylK9n1H9fJgAqLtwl38OEYrt48wri/IpuG5a9CURm1Aw74ufrsopzYLojLD47AU0mIcrYaf4MPJFtsIBEnXr0C1NWTlgC01UEyoKUxseC7fc7NoL+ORUUrKNxWjDKfHj+nTZo98uP1rx4pKY9TB1tNiEI3FXEd+/lMF0y3uMjN+L8asGHMgggcibenY3T4Tuyk2C6I+STPZvQZJAEGTsHzIAJJGjPxVPEudn61mNxIK38oMI6KqejhWiIjp7K0Zrmx7Bg5NS2PlDhCZTRZRCycJdgS4/dgumSFu2xk4w6Tk7DNJeVlCpaL48m4s2LTYuG6Y7A2KRYZMkjS+NcAh1gusRrc95O4tyy42ZZ02RVhS3/TBkF5ufVTXWwYBz66VmDwhDewHuJGdgTLD788zlYQNaefflYkTdU6c04bsGr/WC6w3vl1hVdzWdAyMjexw5mxTU1eONr70NksNjUjPN1lbBgHKx8+F/FITwuqnyRLtCVEfr5tbOwgER+VX8T9BkT57d08p6WD3EjiLtjKcp8SUXg2XSYa4mx43zhHUEMwyhb8n4shOeOB7+yZOSYqPMlFS35ogaaS4KzrhTi6xPFYIK1EZ7IFlhAZi5ctaDnmQwQ4WuJLcS15NXQ8Xajoj7L3w0Lxq7y32rYXEXpPk6AUqDiCs6qKoXlkvnJRYfwREK7X+68INIXdY6kLoOps6fCcsnWS/DK3Mzzd6+yZLj0nmcwwAR27yHZV7+DAWQbRCBTPRfMQp0bZDK097aG4RJYQNJLb1+iMZh9vK+HROGlKrbkcI3ELoEEpG2K2zynnkc9wGVgM/sDPKmtkgDZfllyIPEnq85RabTB6w5CoGt80YGKYsRA2ia6+tr2PNpBolE2HpMlWUskBRJfeLUEw/rW0wTIFXKw+pS4QHZIBqTV1G72RNTz73OSxCWSANmSf/kk5b073hZ4PRO+ey+SMpAWw0nTTVHPvc9Kf7LrRHEqrngxgWw4dCYXG4hfhwdLwoprX8U3IgOpEM8d+iZWhqjn3OelN9HZUtS1JEEMIDEHSgbXN+iIL4yycO8lkVwiKpDjtS0v9U0njUQ9034jvUkulqKsJaICid5TtLvnUbxXp8D9kqC9F0/2FkiiCEDAc4Za+mMFqOfY76Q/ydW8ty4RBUhE4uFU1HPrtwrIKDvRKyCVvYNxrObFEw1dIzjvXx+MwteSXrkkqZdAwuIPbUM9p36vwMzyHl3SGyC4Ox6qC/TUUM+n32u4hcN4POktkgIJjE1aj3ouA0LgTQkBGeUF3QFJ7gEI7o5GBdVB8K3P0tIwcweT7taS5CvdA/GL3r4a9RwGnAIzyvPfBSSlGyDgVX4KKuryqMc/4IS7xPRda0l3QHxXbY1EPfYBK//0M7miAMHdUcdVVOGgHveA1XCL6eO6csm7gHhGbApFPeaBLQwDFddbLkmtehvGwSuP7zA5soPjcQKUGmZub/ymS7oC4hwYNR/1WAeHcJcE7b34mkvS3gCy58L9nzlyiu/dIS3hFRdwyat3AbH3CZ2DeoyDSuCJqYCMsmNdAfns7G9VTBbnfeeCtKVrajOGWEvSq15zhzvqsQ1a+aWWHvk3kPTTv/5Apb5vmEYmvOIyAmtJerUQSJuls/901GMa9MLXki92VgsfJzhDo9PfuwO1dM1sDXEgzeYOffD964NS+L7EJy5zUc8f7B/6P+/deFKc6+9QAAAAAElFTkSuQmCC">
</template>

<style>
.VuetifyLogo {
width: 180px;
transform: rotateY(560deg);
animation: turn 3.5s ease-out forwards 1s;
}
@keyframes turn {
100% {
transform: rotateY(0deg);
}
}
</style>

+ 147
- 0
layouts/default.vue View File

@@ -0,0 +1,147 @@
<template>
<v-app dark>
<v-navigation-drawer
clipped
v-model="drawer"
fixed
app
>
<v-list>
<v-list-tile
router
:to="item.to"
:key="i"
v-for="(item, i) in items"
exact
>
<v-list-tile-action>
<v-icon v-html="item.icon"></v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title v-text="item.title"></v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
<v-toolbar
fixed
app
clipped-left
>
<v-toolbar-side-icon @click="drawer = !drawer"></v-toolbar-side-icon>

<v-toolbar-title>
<v-avatar size="48px">
<img src="images/avatar.gif">
</v-avatar>
{{ title }}
</v-toolbar-title>
<v-spacer></v-spacer>
<v-btn
icon
@click.stop="rightDrawer = !rightDrawer"
>
</v-btn>
</v-toolbar>
<v-content>
<v-container>
<nuxt />
</v-container>
</v-content>

<v-footer fixed height="auto" app>
<v-card
flat
tile
color="grey darken-4"
class="flex"
>
<v-card-text class="text-xs-center">
<v-btn flat color="blue" target="_blank" href="https://twitter.com/RealTHEPHENOM">
<v-icon>mdi-twitter-box</v-icon>
<span>@RealTHEPHENOM</span>
</v-btn>
<v-btn flat color="indigo" target="_blank" href="https://discord.gg/xuGxFSe">
<v-icon>mdi-discord</v-icon>
<span>@PHENOM#0001</span>
</v-btn>
<v-btn flat color="grey" target="_blank" href="https://github.com/PHENOMICAL">
<v-icon>mdi-github-box</v-icon>
<span>PHENOMICAL</span>
</v-btn>
<v-btn flat color="yellow" target="_blank" href="https://ci.phenomic.net">
<v-icon>mdi-wrench</v-icon>
<span>CI Builds</span>
</v-btn>
<v-btn flat color="green" @click.native.stop="dialog = true">
<v-icon>mdi-minecraft</v-icon>
<span>Minecraft</span>
</v-btn>
</v-card-text>
<v-card-text class="text-xs-center">
&copy;2018 - <strong>PHENOM</strong>
</v-card-text>
</v-card>
</v-footer>

<v-dialog v-model="dialog" max-width="290">
<v-card>
<v-card-title class="headline">Connect to PHENOM's Minecraft server</v-card-title>
<v-card-text>
<ul>
<li>In the main menu select Multiplayer and press Add Server</li>
<li>Server Address: <a v-clipboard:copy="minecraftip" v-clipboard:success="onCopy" v-clipboard:error="onCopyError"><code>{{ minecraftip }}</code></a></li>
</ul>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" flat="flat" @click.native="dialog = false">OK</v-btn>
</v-card-actions>
</v-card>
</v-dialog>

<v-snackbar
multi-line
bottom
v-model="copiedToast"
>
{{ copyMessage }}
<v-btn dark flat @click.native="copiedToast = false">Close</v-btn>
</v-snackbar>

</v-app>
</template>

<script>
export default {
data: () => ({
drawer: true,
minecraftip: 'phenomic.net',
items: [
{ icon: 'home', title: 'Home', to: '/' },
{ icon: 'mdi-book', title: 'Projects', to: '/projects' }
],
title: 'PHENOMIC.net',
dialog: false,
copiedToast: false,
copyMessage: ''
}),
methods: {
onCopy: function (e) {
this.copyMessage = 'Copied "' + e.text + '" to your clipboard'
this.copiedToast = true
},
onCopyError: function (e) {
this.copyMessage = 'Error when copying "' + e.text + '" to your clipboard'
this.copiedToast = true
}
}
}
</script>

<style>
html {
overflow-y: auto;
}
</style>


+ 73
- 0
nuxt.config.js View File

@@ -0,0 +1,73 @@
const nodeExternals = require('webpack-node-externals')
const resolve = (dir) => require('path').join(__dirname, dir)

module.exports = {
/*
** Headers of the page
*/
head: {
title: 'PHENOMIC.net',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: 'PHENOM\'s project site' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
{ rel: 'shortcut icon', type: 'image/x-icon', href: '/favicon.ico' },
{ rel: 'apple-touch-icon', href: '/apple_icon_184x184.png', sizes: '184x184' },
{ rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons' },
{ rel: 'stylesheet', href: '//cdn.materialdesignicons.com/2.3.54/css/materialdesignicons.min.css' }
],
script: [
]
},
plugins: ['~/plugins/vuetify.js'],
css: [
'~/assets/style/app.styl'
],
/*
** Customize the progress bar color
*/
loading: { color: '#3B8070' },
/*
** Build configuration
*/
build: {
babel: {
plugins: [
["transform-imports", {
"vuetify": {
"transform": "vuetify/es5/components/${member}",
"preventFullImport": true
}
}]
]
},
vendor: [
'~/plugins/vuetify.js',
'~/plugins/vue-clipboard2'
],
extractCSS: true,
/*
** Run ESLint on save
*/
extend (config, ctx) {
if (ctx.isDev && ctx.isClient) {
config.module.rules.push({
enforce: 'pre',
test: /\.(js|vue)$/,
loader: 'eslint-loader',
exclude: /(node_modules)/
})
}
if (ctx.isServer) {
config.externals = [
nodeExternals({
whitelist: [/^vuetify/]
})
]
}
}
}
}

+ 32
- 0
package.json View File

@@ -0,0 +1,32 @@
{
"name": "phenomic2",
"version": "1.0.0",
"description": "Nuxt.js + Vuetify.js project",
"author": "PHENOMICAL <thephenom1811@gmail.com>",
"private": true,
"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate"
},
"dependencies": {
"nuxt": "^1.4.1",
"vue-clipboard2": "^0.1.0",
"vuetify": "^1.0.0"
},
"devDependencies": {
"babel-eslint": "^7.2.3",
"babel-plugin-transform-imports": "^1.4.1",
"eslint": "^4.3.0",
"eslint-config-standard": "^10.2.1",
"eslint-loader": "^1.9.0",
"eslint-plugin-html": "^3.1.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-node": "^5.1.1",
"eslint-plugin-promise": "^3.5.0",
"eslint-plugin-standard": "^3.0.1",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.1"
}
}

+ 16
- 0
pages/index.vue View File

@@ -0,0 +1,16 @@
<template>
<v-layout column justify-center align-center>
<v-flex xs12 sm8 md6>
<v-jumbotron>
<v-container fill-height>
<v-layout align-center>
<v-flex>
<h3 class="display-3">Welcome to PHENOMIC.net</h3>
<span class="subheading">More content will follow soon</span>
</v-flex>
</v-layout>
</v-container>
</v-jumbotron>
</v-flex>
</v-layout>
</template>

+ 16
- 0
pages/projects.vue View File

@@ -0,0 +1,16 @@
<template>
<v-layout column justify-center align-center>
<v-flex xs12 sm8 md6>
<v-jumbotron>
<v-container fill-height>
<v-layout align-center>
<v-flex>
<h3 class="display-3">Project area</h3>
<span class="subheading">More content will follow soon</span>
</v-flex>
</v-layout>
</v-container>
</v-jumbotron>
</v-flex>
</v-layout>
</template>

+ 4
- 0
plugins/vue-clipboard2.js View File

@@ -0,0 +1,4 @@
import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'

Vue.use(VueClipboard)

+ 35
- 0
plugins/vuetify.js View File

@@ -0,0 +1,35 @@
import Vue from 'vue'
import {
Vuetify,
VApp,
VCard,
VNavigationDrawer,
VFooter,
VList,
VBtn,
VIcon,
VGrid,
VToolbar,
VAvatar,
VDialog,
VSnackbar,
VJumbotron
} from 'vuetify'

Vue.use(Vuetify, {
components: {
VApp,
VCard,
VNavigationDrawer,
VFooter,
VList,
VBtn,
VIcon,
VGrid,
VToolbar,
VAvatar,
VDialog,
VSnackbar,
VJumbotron
}
})

BIN
static/Thumbs.db View File


BIN
static/apple_icon_184x184.png View File


BIN
static/favicon.ico View File


BIN
static/images/Thumbs.db View File


BIN
static/images/avatar.gif View File


+ 9
- 0
store/index.js View File

@@ -0,0 +1,9 @@
export const state = () => ({
sidebar: false
})

export const mutations = {
toggleSidebar (state) {
state.sidebar = !state.sidebar
}
}

Loading…
Cancel
Save