All frontend related files are gone, since we have a separate frontend engine now.
このコミットが含まれているのは:
コミット
e907e57ab8
|
@ -17,24 +17,6 @@ window.Vue = require('vue');
|
|||
|
||||
// Vue.component('example', require('./components/Example.vue'));
|
||||
|
||||
// Global.
|
||||
Vue.component('global-menu', require('./components/Global/Menu.vue'));
|
||||
|
||||
// Homepage.
|
||||
Vue.component('new-items', require('./components/Home/New.vue'));
|
||||
Vue.component('hot-items', require('./components/Home/Hot.vue'));
|
||||
|
||||
// Entry page.
|
||||
Vue.component('entry-title', require('./components/Entry/Title.vue'));
|
||||
Vue.component('entry-screenshots', require('./components/Entry/Screenshots.vue'));
|
||||
Vue.component('entry-description', require('./components/Entry/Description.vue'));
|
||||
Vue.component('entry-changelog', require('./components/Entry/Changelog.vue'));
|
||||
|
||||
// Category page.
|
||||
Vue.component('category-entry', require('./components/Category/All.vue'));
|
||||
Vue.component('category-entry-downloads', require('./components/Category/Downloads.vue'));
|
||||
Vue.component('category-entry-views', require('./components/Category/Views.vue'));
|
||||
|
||||
new Vue({
|
||||
el: '#app'
|
||||
});
|
||||
|
|
|
@ -1,131 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
<div v-for="e in entries">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<a :href="'/entry/' + e.fid">{{ e.title }} {{ e.version }}</a> by
|
||||
<span v-for="o in owners">
|
||||
<span v-if="o.fid === e.fid">
|
||||
<a :href="'/profile/' + o.uid"><span :style="o.name_colour">{{ o.showname }}</span></a>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<img :src="'/assets/store/' + e.fid + '/screens/1.png'" height="100px" />
|
||||
<br /><br />
|
||||
Submitted on {{ e.submit_date }}
|
||||
<span v-if="e.ld !== 0">
|
||||
, last updated on {{ e.last_date }}
|
||||
</span>
|
||||
<br />
|
||||
{{ e.downloads }} downloads
|
||||
<br />
|
||||
{{ e.views }} views
|
||||
<br /><br />
|
||||
{{ e.description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
|
||||
export default {
|
||||
name: 'category-entry',
|
||||
props: [
|
||||
'cid',
|
||||
'page',
|
||||
'limit',
|
||||
],
|
||||
data: function () {
|
||||
return {
|
||||
id: this.cid,
|
||||
from: this.page,
|
||||
to: this.limit,
|
||||
entries: [],
|
||||
owners: [],
|
||||
groupCol: [],
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
// TODO: show all to users with approval permissions only.
|
||||
// For other users, use /api/rpc/file/getfilespageapproved instead.
|
||||
axios.get('/api/rpc/user/getgroupcolours').then(res => {
|
||||
res.data.forEach(cb => {
|
||||
this.groupCol.push({
|
||||
'id': cb.id,
|
||||
'name': cb.name,
|
||||
'male': cb.colour_m,
|
||||
'female': cb.colour_f,
|
||||
'unknown': cb.colour_u,
|
||||
});
|
||||
});
|
||||
});
|
||||
axios.get('/api/rpc/file/getfilespageall/' + this.id + '/' + this.from + '/' + this.to).then(res => {
|
||||
res.data.forEach(cb => {
|
||||
axios.get('/api/rpc/owner/getownersoffile/' + cb.id).then(res => {
|
||||
res.data.forEach(db => {
|
||||
var showName = '';
|
||||
var showCol = '';
|
||||
|
||||
if (db.display_name !== '') {
|
||||
showName = db.display_name;
|
||||
}
|
||||
else {
|
||||
showName = db.username;
|
||||
}
|
||||
|
||||
if (db.name_colour !== '') {
|
||||
showCol = db.name_colour;
|
||||
}
|
||||
else {
|
||||
this.groupCol.forEach(re => {
|
||||
if (re.id === db.perm_id) {
|
||||
if (db.gender === 1) {
|
||||
showCol = re.male;
|
||||
}
|
||||
else if (db.gender === 2) {
|
||||
showCol = re.female;
|
||||
}
|
||||
else {
|
||||
showCol = re.unknown;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.owners.push({
|
||||
'fid': cb.id,
|
||||
'uid': db.user_id,
|
||||
'showname': showName,
|
||||
'username': db.username,
|
||||
'display_name': db.display_name,
|
||||
'avatar': db.avatar,
|
||||
'gender': db.gender,
|
||||
'name_colour': showCol,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
this.entries.push({
|
||||
'fid': cb.id,
|
||||
'title': cb.title,
|
||||
'version': cb.version,
|
||||
'description': cb.description,
|
||||
'submit_date': moment.unix(cb.submit_date).format("YYYY/MM/DD"),
|
||||
'ld': cb.last_date,
|
||||
'last_date': moment.unix(cb.last_date).format("YYYY/MM/DD"),
|
||||
'views': cb.views,
|
||||
'downloads': cb.downloads,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,129 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
<div v-for="e in entries">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<a :href="'/entry/' + e.fid">{{ e.title }} {{ e.version }}</a> by
|
||||
<span v-for="o in owners">
|
||||
<span v-if="o.fid === e.fid">
|
||||
<a :href="'/profile/' + o.uid"><span :style="o.name_colour">{{ o.showname }}</span></a>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<img :src="'/assets/store/' + e.fid + '/screens/1.png'" height="100px" />
|
||||
<br /><br />
|
||||
Submitted on {{ e.submit_date }}
|
||||
<span v-if="e.ld !== 0">
|
||||
, last updated on {{ e.last_date }}
|
||||
</span>
|
||||
<br />
|
||||
{{ e.downloads }} downloads
|
||||
<br />
|
||||
{{ e.views }} views
|
||||
<br /><br />
|
||||
{{ e.description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
|
||||
export default {
|
||||
name: 'category-entry-downloads',
|
||||
props: [
|
||||
'cid',
|
||||
'page',
|
||||
'limit',
|
||||
],
|
||||
data: function () {
|
||||
return {
|
||||
id: this.cid,
|
||||
from: this.page,
|
||||
to: this.limit,
|
||||
entries: [],
|
||||
owners: [],
|
||||
groupCol: [],
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/user/getgroupcolours').then(res => {
|
||||
res.data.forEach(cb => {
|
||||
this.groupCol.push({
|
||||
'id': cb.id,
|
||||
'name': cb.name,
|
||||
'male': cb.colour_m,
|
||||
'female': cb.colour_f,
|
||||
'unknown': cb.colour_u,
|
||||
});
|
||||
});
|
||||
});
|
||||
axios.get('/api/rpc/file/getfilespagepopulardownload/' + this.id + '/' + this.from + '/' + this.to).then(res => {
|
||||
res.data.forEach(cb => {
|
||||
axios.get('/api/rpc/owner/getownersoffile/' + cb.id).then(res => {
|
||||
res.data.forEach(db => {
|
||||
var showName = '';
|
||||
var showCol = '';
|
||||
|
||||
if (db.display_name !== '') {
|
||||
showName = db.display_name;
|
||||
}
|
||||
else {
|
||||
showName = db.username;
|
||||
}
|
||||
|
||||
if (db.name_colour !== '') {
|
||||
showCol = db.name_colour;
|
||||
}
|
||||
else {
|
||||
this.groupCol.forEach(re => {
|
||||
if (re.id === db.perm_id) {
|
||||
if (db.gender === 1) {
|
||||
showCol = re.male;
|
||||
}
|
||||
else if (db.gender === 2) {
|
||||
showCol = re.female;
|
||||
}
|
||||
else {
|
||||
showCol = re.unknown;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.owners.push({
|
||||
'fid': cb.id,
|
||||
'uid': db.user_id,
|
||||
'showname': showName,
|
||||
'username': db.username,
|
||||
'display_name': db.display_name,
|
||||
'avatar': db.avatar,
|
||||
'gender': db.gender,
|
||||
'name_colour': showCol,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
this.entries.push({
|
||||
'fid': cb.id,
|
||||
'title': cb.title,
|
||||
'version': cb.version,
|
||||
'description': cb.description,
|
||||
'submit_date': moment.unix(cb.submit_date).format("YYYY/MM/DD"),
|
||||
'ld': cb.last_date,
|
||||
'last_date': moment.unix(cb.last_date).format("YYYY/MM/DD"),
|
||||
'views': cb.views,
|
||||
'downloads': cb.downloads,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,129 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
<div v-for="e in entries">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<a :href="'/entry/' + e.fid">{{ e.title }} {{ e.version }}</a> by
|
||||
<span v-for="o in owners">
|
||||
<span v-if="o.fid === e.fid">
|
||||
<a :href="'/profile/' + o.uid"><span :style="o.name_colour">{{ o.showname }}</span></a>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<img :src="'/assets/store/' + e.fid + '/screens/1.png'" height="100px" />
|
||||
<br /><br />
|
||||
Submitted on {{ e.submit_date }}
|
||||
<span v-if="e.ld !== 0">
|
||||
, last updated on {{ e.last_date }}
|
||||
</span>
|
||||
<br />
|
||||
{{ e.downloads }} downloads
|
||||
<br />
|
||||
{{ e.views }} views
|
||||
<br /><br />
|
||||
{{ e.description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
|
||||
export default {
|
||||
name: 'category-entry-views',
|
||||
props: [
|
||||
'cid',
|
||||
'page',
|
||||
'limit',
|
||||
],
|
||||
data: function () {
|
||||
return {
|
||||
id: this.cid,
|
||||
from: this.page,
|
||||
to: this.limit,
|
||||
entries: [],
|
||||
owners: [],
|
||||
groupCol: [],
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/user/getgroupcolours').then(res => {
|
||||
res.data.forEach(cb => {
|
||||
this.groupCol.push({
|
||||
'id': cb.id,
|
||||
'name': cb.name,
|
||||
'male': cb.colour_m,
|
||||
'female': cb.colour_f,
|
||||
'unknown': cb.colour_u,
|
||||
});
|
||||
});
|
||||
});
|
||||
axios.get('/api/rpc/file/getfilespagepopularview/' + this.id + '/' + this.from + '/' + this.to).then(res => {
|
||||
res.data.forEach(cb => {
|
||||
axios.get('/api/rpc/owner/getownersoffile/' + cb.id).then(res => {
|
||||
res.data.forEach(db => {
|
||||
var showName = '';
|
||||
var showCol = '';
|
||||
|
||||
if (db.display_name !== '') {
|
||||
showName = db.display_name;
|
||||
}
|
||||
else {
|
||||
showName = db.username;
|
||||
}
|
||||
|
||||
if (db.name_colour !== '') {
|
||||
showCol = db.name_colour;
|
||||
}
|
||||
else {
|
||||
this.groupCol.forEach(re => {
|
||||
if (re.id === db.perm_id) {
|
||||
if (db.gender === 1) {
|
||||
showCol = re.male;
|
||||
}
|
||||
else if (db.gender === 2) {
|
||||
showCol = re.female;
|
||||
}
|
||||
else {
|
||||
showCol = re.unknown;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.owners.push({
|
||||
'fid': cb.id,
|
||||
'uid': db.user_id,
|
||||
'showname': showName,
|
||||
'username': db.username,
|
||||
'display_name': db.display_name,
|
||||
'avatar': db.avatar,
|
||||
'gender': db.gender,
|
||||
'name_colour': showCol,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
this.entries.push({
|
||||
'fid': cb.id,
|
||||
'title': cb.title,
|
||||
'version': cb.version,
|
||||
'description': cb.description,
|
||||
'submit_date': moment.unix(cb.submit_date).format("YYYY/MM/DD"),
|
||||
'ld': cb.last_date,
|
||||
'last_date': moment.unix(cb.last_date).format("YYYY/MM/DD"),
|
||||
'views': cb.views,
|
||||
'downloads': cb.downloads,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,44 +0,0 @@
|
|||
<template>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<!--@lang('entry.changelog', ['version' => '2.0'])-->
|
||||
Changes in {{ version }}
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ changelog }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'entry-changelog',
|
||||
props: ['fid'],
|
||||
data: function () {
|
||||
return {
|
||||
id: this.fid,
|
||||
changelog: '',
|
||||
version: ''
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/file/getfilechangelog/' + this.id).then(data => {
|
||||
this.changelog = data.data[0].changelog;
|
||||
this.version = data.data[0].version;
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.col {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -1,45 +0,0 @@
|
|||
<template>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
@lang('entry.description')
|
||||
Description
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'entry-description',
|
||||
props: [
|
||||
'fid',
|
||||
'translations'
|
||||
],
|
||||
data: function () {
|
||||
return {
|
||||
id: this.fid,
|
||||
description: ''
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/file/getfiledescription/' + this.id).then(data => {
|
||||
this.description = data.data[0].description;
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.col {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -1,73 +0,0 @@
|
|||
<template>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<!--@lang('entry.changelog', ['version' => '2.0'])-->
|
||||
Changes in {{ version }}
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ changelog }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// https://adamwathan.me/2016/01/04/composing-reusable-modal-dialogs-with-vuejs/
|
||||
export default {
|
||||
name: 'entry-changelog',
|
||||
props: [
|
||||
'fid',
|
||||
'show'
|
||||
],
|
||||
data: function () {
|
||||
return {
|
||||
id: this.fid,
|
||||
title: '',
|
||||
version: '',
|
||||
notice: '',
|
||||
files: []
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/file/getfile/' + this.id).then(res => {
|
||||
this.title = res.data[0].title;
|
||||
this.version = res.data[0].version;
|
||||
if (res.data[0].warningnote !== '') this.notice = res.data[0].warningnote;
|
||||
});
|
||||
this.files.push(
|
||||
{
|
||||
'filename': 'test1.carc',
|
||||
'filesize': '1000 TiB'
|
||||
},
|
||||
{
|
||||
'filename': 'test2.carc',
|
||||
'filesize': '20 GiB'
|
||||
}
|
||||
);
|
||||
},
|
||||
methods: {
|
||||
close: function () {
|
||||
this.$emit('close');
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
document.addEventListener("keydown", e => {
|
||||
if (this.show && e.keyCode == 27) { // TODO: keyCode is deprecated; use alternative!
|
||||
this.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.col {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -1,27 +0,0 @@
|
|||
<template>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<!--@lang('entry.screenshots')-->
|
||||
Screenshots
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
(IMG)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'entry-screenshots',
|
||||
data: function () {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,176 +0,0 @@
|
|||
<template>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<!--@lang('entry.title', ['name' => 'Some Mod 2.0', 'user' => 'Someuser'])-->
|
||||
{{ title }} {{ version }} by
|
||||
<span v-for="(o, i) in owners">
|
||||
<a :href="'/profile/' + o.uid"><span :style="o.name_colour">{{ o.showname }}</span></a>
|
||||
<span v-if="i == owners.length - 2">
|
||||
, and
|
||||
</span>
|
||||
<span v-else-if="i == owners.length - 1">
|
||||
</span>
|
||||
<span v-else>
|
||||
,
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<button type="button" class="btn btn-primary btn-lg">
|
||||
<!--@lang('entry.download')-->
|
||||
Download
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<button type="button" class="btn btn-primary">
|
||||
<!--@lang('entry.update')-->
|
||||
Update
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<button type="button" class="btn btn-danger">
|
||||
<!--@lang('entry.remove')-->
|
||||
Remove/Restore
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<button type="button" class="btn btn-warning">
|
||||
<!--@lang('entry.report')-->
|
||||
Report
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<!--@lang('entry.views', ['count' => '1000'])-->
|
||||
Views: {{ views }}
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<!--@lang('entry.downloads', ['count' => '1000'])-->
|
||||
Downloads: {{ downloads }}
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<!--@lang('entry.submitted', ['datetime' => '1945/05/05'])-->
|
||||
Submitted: {{ submit_date }}
|
||||
</div>
|
||||
<div v-if="last_date !== 0" class="col-md-2">
|
||||
<!--@lang('entry.updated', ['datetime' => '2050/12/01'])-->
|
||||
Updated: {{ last_date }}
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<!--@lang('entry.filesize', ['size' => '1 TB'])-->
|
||||
Filesize: 1 TB
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
|
||||
export default {
|
||||
name: 'entry-title',
|
||||
props: ['fid'],
|
||||
data: function () {
|
||||
return {
|
||||
owners: [],
|
||||
id: this.fid,
|
||||
uid: 0,
|
||||
title: '',
|
||||
version: '',
|
||||
username: '',
|
||||
avatar: '',
|
||||
gender: '',
|
||||
perm_id: '',
|
||||
display_name: '',
|
||||
name_colour: '',
|
||||
views: 0,
|
||||
downloads: 0,
|
||||
submit_date: 0,
|
||||
last_date: 0,
|
||||
showName: '',
|
||||
showCol: '',
|
||||
groupCol: [],
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/user/getgroupcolours').then(res => {
|
||||
res.data.forEach(cb => {
|
||||
this.groupCol.push({
|
||||
'id': cb.id,
|
||||
'name': cb.name,
|
||||
'male': cb.colour_m,
|
||||
'female': cb.colour_f,
|
||||
'unknown': cb.colour_u,
|
||||
});
|
||||
});
|
||||
})
|
||||
axios.get('/api/rpc/file/getfiletitle/' + this.id).then(data => {
|
||||
this.uid = data.data[0].user_id;
|
||||
this.title = data.data[0].title;
|
||||
this.version = data.data[0].version;
|
||||
this.views = data.data[0].views;
|
||||
this.downloads = data.data[0].downloads;
|
||||
this.submit_date = moment.unix(data.data[0].submit_date).format("YYYY/MM/DD");
|
||||
if (data.data[0].last_date !== 0) {
|
||||
this.last_date = moment.unix(data.data[0].last_date).format("YYYY/MM/DD");
|
||||
}
|
||||
|
||||
data.data.forEach(cb => {
|
||||
if (cb.display_name !== '') {
|
||||
this.showName = cb.display_name;
|
||||
}
|
||||
else {
|
||||
this.showName = cb.username;
|
||||
}
|
||||
|
||||
if (cb.name_colour !== '') {
|
||||
this.showCol = cb.name_colour;
|
||||
}
|
||||
else {
|
||||
this.groupCol.forEach(re => {
|
||||
if (re.id === cb.perm_id) {
|
||||
if (cb.gender === 1) {
|
||||
this.showCol = re.male;
|
||||
}
|
||||
else if (cb.gender === 2) {
|
||||
this.showCol = re.female;
|
||||
}
|
||||
else {
|
||||
this.showCol = re.unknown;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.owners.push({
|
||||
'uid': cb.user_id,
|
||||
'showname': this.showName,
|
||||
'username': cb.username,
|
||||
'display_name': cb.display_name,
|
||||
'avatar': cb.avatar,
|
||||
'gender': cb.gender,
|
||||
'name_colour': this.showCol,
|
||||
});
|
||||
});
|
||||
this.username = data.data[0].username;
|
||||
this.display_name = data.data[0].display_name;
|
||||
this.gender = data.data[0].gender;
|
||||
this.avatar = data.data[0].avatar;
|
||||
this.name_colour = data.data[0].name_colour;
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.col {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -1,67 +0,0 @@
|
|||
<template>
|
||||
<span>
|
||||
<nav class="navbar navbar-default navbar-static-top">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<!-- Collapsed Hamburger -->
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse" aria-expanded="false">
|
||||
<span class="sr-only">Toggle Navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
|
||||
<!-- Branding Image -->
|
||||
<a class="navbar-brand" href="/">
|
||||
Hack Store
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse" id="app-navbar-collapse">
|
||||
<!-- Left Side Of Navbar -->
|
||||
<ul class="nav navbar-nav">
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Right Side Of Navbar -->
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<!-- Authentication Links -->
|
||||
<!-- If logged out -->
|
||||
<li><a href="/login">Login</a></li>
|
||||
<li><a href="/register">Register</a></li>
|
||||
<!-- Else -->
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
|
||||
Username <span class="caret"></span>
|
||||
</a>
|
||||
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="/upload">Upload</a></li>
|
||||
<li>
|
||||
<a href="/logout"
|
||||
onclick="event.preventDefault();
|
||||
document.getElementById('logout-form').submit();">
|
||||
Logout
|
||||
</a>
|
||||
|
||||
<form id="logout-form" action="/logout" method="POST" style="display: none;">
|
||||
<!--{{ csrf_field() }}-->
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'global-menu',
|
||||
mounted() {
|
||||
console.log('Component mounted.')
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,23 +0,0 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Example Component</div>
|
||||
|
||||
<div class="panel-body">
|
||||
I'm an example component!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
mounted() {
|
||||
console.log('Component mounted.')
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,49 +0,0 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<span v-for="item in items">
|
||||
<div class="col-md-2">
|
||||
<a :href="'/entry/' + item.id">
|
||||
<img :src="'/assets/store/' + item.id + '/screens/1.png'" width="100px" height="100px" />
|
||||
<br />
|
||||
{{ item.title }}
|
||||
</a>
|
||||
<br />
|
||||
<a href="/profile/0">
|
||||
Name
|
||||
</a>
|
||||
<br />
|
||||
Downloads: {{ item.downloads }}
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'hot-items',
|
||||
data: function () {
|
||||
return {
|
||||
items: []
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/file/gethotfiles').then(data => {
|
||||
data.data.forEach(cb => {
|
||||
this.items.push({
|
||||
'id': cb.id,
|
||||
'title': cb.title,
|
||||
'downloads': cb.downloads
|
||||
});
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.col {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -1,50 +0,0 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<span v-for="item in items">
|
||||
<div class="col-md-2">
|
||||
<a :href="'/entry/' + item.id">
|
||||
<img :src="'/assets/store/' + item.id + '/screens/1.png'" width="100px" height="100px" />
|
||||
<br />
|
||||
{{ item.title }}
|
||||
</a>
|
||||
<br />
|
||||
<a href="/profile/0">
|
||||
Name
|
||||
</a>
|
||||
<br />
|
||||
{{ item.submit_date }}
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
export default {
|
||||
name: 'new-items',
|
||||
data: function () {
|
||||
return {
|
||||
items: []
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
axios.get('/api/rpc/file/getnewfiles').then(data => {
|
||||
data.data.forEach(cb => {
|
||||
this.items.push({
|
||||
'id': cb.id,
|
||||
'title': cb.title,
|
||||
'submit_date': moment.unix(cb.submit_date).format("YYYY/MM/DD")
|
||||
});
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.col {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -1,23 +0,0 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Example Component</div>
|
||||
|
||||
<div class="panel-body">
|
||||
I'm an example component!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
mounted() {
|
||||
console.log('Component mounted.')
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'title' => ":name by :user",
|
||||
'screenshots' => "Screenshots",
|
||||
'download' => "Download",
|
||||
'update' => "Update",
|
||||
'remove' => "Remove",
|
||||
'approve' => "Approve",
|
||||
'disaprove' => "Disapprove",
|
||||
'report' => "Report",
|
||||
'views' => "Views: :count",
|
||||
'downloads' => "Downloads: :count",
|
||||
'submitted' => "Submitted :datetime",
|
||||
'updated' => "Updated :datetime",
|
||||
'filesize' => "Filesize: :size",
|
||||
'description' => "Description",
|
||||
'changelog' => "Changes in :version",
|
||||
];
|
|
@ -1,7 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'newitems' => "Latest uploads",
|
||||
'hotitems' => "Most popular",
|
||||
'downloads' => "Downloads:",
|
||||
];
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'login' => "Login",
|
||||
'logout' => "Logout",
|
||||
'register' => "Register",
|
||||
'upload' => "Upload",
|
||||
];
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'upload' => "Upload",
|
||||
];
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'title' => ":user の :name",
|
||||
'screenshots' => "スクリーンショット",
|
||||
'download' => "ダウンロード",
|
||||
'update' => "アップデート",
|
||||
'remove' => "削除",
|
||||
'approve' => "認可",
|
||||
'disaprove' => "不認可",
|
||||
'report' => "報告",
|
||||
'views' => "現職回数: :count 回",
|
||||
'downloads' => "ダウンロード: :count 回",
|
||||
'submitted' => ":datetime に公開",
|
||||
'updated' => ":datetime に編集",
|
||||
'filesize' => "ファイルの大きさ: :size",
|
||||
'description' => "説明",
|
||||
'changelog' => ":version の改正",
|
||||
];
|
|
@ -1,7 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'newitems' => "最近のアップロード",
|
||||
'hotitems' => "一番人気なファイル",
|
||||
'downloads' => "ダウンロード",
|
||||
];
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'login' => "ログイン",
|
||||
'logout' => "ログアウト",
|
||||
'register' => "登録",
|
||||
'upload' => "アップロード",
|
||||
];
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« 戻り',
|
||||
'next' => '次 »',
|
||||
|
||||
];
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Passwords must be at least six characters and match the confirmation.',
|
||||
'reset' => 'Your password has been reset!',
|
||||
'sent' => 'We have e-mailed your password reset link!',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => "We can't find a user with that e-mail address.",
|
||||
|
||||
];
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'upload' => "アップロード",
|
||||
];
|
|
@ -1,121 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
|
||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'numeric' => 'The :attribute must be between :min and :max.',
|
||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'string' => 'The :attribute must be between :min and :max characters.',
|
||||
'array' => 'The :attribute must have between :min and :max items.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'max' => [
|
||||
'numeric' => 'The :attribute may not be greater than :max.',
|
||||
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||
'string' => 'The :attribute may not be greater than :max characters.',
|
||||
'array' => 'The :attribute may not have more than :max items.',
|
||||
],
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'The :attribute must be at least :min.',
|
||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'string' => 'The :attribute must be at least :min characters.',
|
||||
'array' => 'The :attribute must have at least :min items.',
|
||||
],
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values is present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size' => [
|
||||
'numeric' => 'The :attribute must be :size.',
|
||||
'file' => 'The :attribute must be :size kilobytes.',
|
||||
'string' => 'The :attribute must be :size characters.',
|
||||
'array' => 'The :attribute must contain :size items.',
|
||||
],
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
|
@ -1,11 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div><category-entry cid="{{ $cat_id }}" page="0" limit="15" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,14 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div><entry-title fid="{{ $file_id }}" /></div>
|
||||
<div><entry-screenshots fid="{{ $file_id }}" /></div>
|
||||
<div><entry-description fid="{{ $file_id }}" /></div>
|
||||
<div><entry-changelog fid="{{ $file_id }}" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,24 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">@lang('homepage.newitems')</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<new-items />
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">@lang('homepage.hotitems')</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<hot-items />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,28 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ app()->getLocale() }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
|
||||
<!-- Styles -->
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div><global-menu /></div>
|
||||
@yield('content')
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="/js/lang.js"></script>
|
||||
<script src="{{ asset('js/app.js') }}"></script>
|
||||
<script>console.log(i18n.entry)</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,23 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Dashboard</div>
|
||||
|
||||
<div class="panel-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
You are logged in!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,23 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Dashboard</div>
|
||||
|
||||
<div class="panel-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
You are logged in!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,22 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">@lang('upload.upload')</div>
|
||||
|
||||
<div class="panel-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
Uploader.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
新しいイシューから参照