ilog 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +44 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/ilog.gemspec +29 -0
- data/lib/ilog/assets/favicon.ico +0 -0
- data/lib/ilog/assets/images/.gitkeep +0 -0
- data/lib/ilog/assets/javascripts/.gitkeep +0 -0
- data/lib/ilog/assets/javascripts/index.js +60723 -0
- data/lib/ilog/assets/javascripts/vue-config.js +92 -0
- data/lib/ilog/assets/javascripts/vue-index.js +60725 -0
- data/lib/ilog/assets/stylesheets/.gitkeep +0 -0
- data/lib/ilog/assets/stylesheets/log-style.css +3858 -0
- data/lib/ilog/assets/stylesheets/style.css +3858 -0
- data/lib/ilog/config/routes.rb +13 -0
- data/lib/ilog/configuration.rb +8 -0
- data/lib/ilog/controllers/.gitkeep +0 -0
- data/lib/ilog/controllers/digital/show.rb +23 -0
- data/lib/ilog/controllers/digital/tags.rb +15 -0
- data/lib/ilog/controllers/index/.DS_Store +0 -0
- data/lib/ilog/controllers/index/digital.rb +27 -0
- data/lib/ilog/controllers/index/index.rb +95 -0
- data/lib/ilog/controllers/platform/platform.rb +12 -0
- data/lib/ilog/controllers/post/post.rb +12 -0
- data/lib/ilog/models/item.rb +5 -0
- data/lib/ilog/models/post.rb +9 -0
- data/lib/ilog/models/stuff.rb +8 -0
- data/lib/ilog/templates/application.html.erb +11 -0
- data/lib/ilog/templates/digital/show.html.erb +0 -0
- data/lib/ilog/templates/digital/tags.html.erb +0 -0
- data/lib/ilog/templates/index/digital.html.erb +40 -0
- data/lib/ilog/templates/index/index.html.haml +10 -0
- data/lib/ilog/templates/index/vue.html.erb +0 -0
- data/lib/ilog/templates/platform/platform.html.erb +0 -0
- data/lib/ilog/templates/post/post.html.erb +0 -0
- data/lib/ilog/version.rb +3 -0
- data/lib/ilog/views/application_layout.rb +7 -0
- data/lib/ilog/views/digital/show.rb +9 -0
- data/lib/ilog/views/digital/tags.rb +9 -0
- data/lib/ilog/views/index/.DS_Store +0 -0
- data/lib/ilog/views/index/digital.rb +10 -0
- data/lib/ilog/views/index/index.rb +10 -0
- data/lib/ilog/views/platform/platform.rb +9 -0
- data/lib/ilog/views/post/post.rb +9 -0
- data/lib/ilog.rb +331 -0
- data/mix-manifest.json +5 -0
- data/package.json +40 -0
- data/src/js/vue-config.js +7 -0
- data/src/sass/.DS_Store +0 -0
- data/src/sass/_variables.scss +3 -0
- data/src/sass/components/.DS_Store +0 -0
- data/src/sass/components/article-text.scss +223 -0
- data/src/sass/components/card.scss +33 -0
- data/src/sass/components/post.scss +5 -0
- data/src/sass/components/selectize.scss +324 -0
- data/src/sass/components/single.scss +80 -0
- data/src/sass/components/tag.scss +46 -0
- data/src/sass/fonts/headings.scss +105 -0
- data/src/sass/fonts/pure.scss +29 -0
- data/src/sass/libs/selectize.scss +8 -0
- data/src/sass/log/.DS_Store +0 -0
- data/src/sass/log/base.scss +132 -0
- data/src/sass/log/grid.scss +82 -0
- data/src/sass/log/instagram-header.scss +123 -0
- data/src/sass/log/list.scss +242 -0
- data/src/sass/log/style.scss +3 -0
- data/src/sass/log/treestyle-addons.scss +102 -0
- data/src/sass/log/treestyle.scss +163 -0
- data/src/sass/style.scss +28 -0
- data/src/vue/Log.vue +257 -0
- data/src/vue/components/.DS_Store +0 -0
- data/src/vue/components/Item.vue +46 -0
- data/src/vue/components/Modal.vue +27 -0
- data/src/vue/components/Post.vue +125 -0
- data/src/vue/components/PostBody.vue +86 -0
- data/src/vue/components/Stuff.vue +63 -0
- data/src/vue/configs/app.js +5 -0
- data/src/vue/configs/axios.js +14 -0
- data/src/vue/elements/People.vue +75 -0
- data/src/vue/elements/Profile.vue +63 -0
- data/src/vue/elements/Tunekit.vue +82 -0
- data/src/vue/index.js +30 -0
- data/src/vue/router.js +50 -0
- data/src/vue/views/.DS_Store +0 -0
- data/src/vue/views/Introduction.vue +88 -0
- data/src/vue/views/List.vue +46 -0
- data/src/vue/views/Post.vue +163 -0
- data/webpack.mix.js +6 -0
- metadata +141 -0
@@ -0,0 +1,75 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="search-form">
|
3
|
+
<form v-on:submit.prevent="onSubmit" class="pure-form">
|
4
|
+
<multiselect
|
5
|
+
placeholder="mention"
|
6
|
+
v-model="person"
|
7
|
+
:options="people"
|
8
|
+
track-by="id"
|
9
|
+
label="identifier"
|
10
|
+
:multiple="false"
|
11
|
+
:taggable="true"
|
12
|
+
@tag="addPeople"
|
13
|
+
class="input-multiselect"
|
14
|
+
selectLabel=""
|
15
|
+
deselect-label=""
|
16
|
+
:loading="isLoading"
|
17
|
+
@search-change="asyncFind"
|
18
|
+
></multiselect>
|
19
|
+
<button type="submit"><i class="fas fa-filter"></i></button>
|
20
|
+
</form>
|
21
|
+
</div>
|
22
|
+
</template>
|
23
|
+
|
24
|
+
<script>
|
25
|
+
|
26
|
+
import app from '../configs/app'
|
27
|
+
import Multiselect from 'vue-multiselect'
|
28
|
+
export default {
|
29
|
+
name: 'People',
|
30
|
+
props: [],
|
31
|
+
components: {
|
32
|
+
Multiselect
|
33
|
+
},
|
34
|
+
data () {
|
35
|
+
return {
|
36
|
+
person: null,
|
37
|
+
people: [],
|
38
|
+
isLoading: false,
|
39
|
+
}
|
40
|
+
},
|
41
|
+
methods: {
|
42
|
+
asyncFind (query) {
|
43
|
+
this.isLoading = true;
|
44
|
+
let self = this;
|
45
|
+
this.$http.get(app.host + '/modules/people/search/?person=' + encodeURIComponent(query))
|
46
|
+
.then(function(response){
|
47
|
+
console.log(query)
|
48
|
+
self.people = response.data
|
49
|
+
self.isLoading = false
|
50
|
+
});
|
51
|
+
},
|
52
|
+
addPeople (newPerson) {
|
53
|
+
const person = {
|
54
|
+
name: newPerson,
|
55
|
+
}
|
56
|
+
this.people.push(person)
|
57
|
+
},
|
58
|
+
onSubmit () {
|
59
|
+
if (this.person.id != '') {
|
60
|
+
this.$router.push({ name: 'mention', params: { id: this.person.id, identifier: this.person.identifier }})
|
61
|
+
} else {
|
62
|
+
|
63
|
+
}
|
64
|
+
},
|
65
|
+
},
|
66
|
+
created() {
|
67
|
+
|
68
|
+
},
|
69
|
+
filters: {
|
70
|
+
|
71
|
+
},
|
72
|
+
watch: {
|
73
|
+
}
|
74
|
+
}
|
75
|
+
</script>
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="profile">
|
3
|
+
<span class="avatar-container"><img class="avatar" :src="avatar" /></span>
|
4
|
+
<div>
|
5
|
+
<span class="h2"><a :href="website">{{ author }}</a></span><br />
|
6
|
+
<span class="detail">
|
7
|
+
<a :href="address"><i class="fas fa-book"></i> Digital Log</a> | <i class="fas fa-map-marked-alt"></i> {{ location }}
|
8
|
+
</span><br />
|
9
|
+
<span class="status">{{ status }}</span>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</template>
|
13
|
+
|
14
|
+
<script>
|
15
|
+
|
16
|
+
import app from '../configs/app'
|
17
|
+
|
18
|
+
export default {
|
19
|
+
name: 'Profile',
|
20
|
+
components: {
|
21
|
+
},
|
22
|
+
data () {
|
23
|
+
return {
|
24
|
+
address: '',
|
25
|
+
location: app.profile.location,
|
26
|
+
author: app.profile.author,
|
27
|
+
status: app.profile.status,
|
28
|
+
avatar: app.profile.avatar,
|
29
|
+
// email: app.profile.email,
|
30
|
+
website: app.profile.website,
|
31
|
+
tag: {},
|
32
|
+
tags: [],
|
33
|
+
dashboard_1: '',
|
34
|
+
dashboard_2: '',
|
35
|
+
rss: '',
|
36
|
+
atom: '',
|
37
|
+
}
|
38
|
+
},
|
39
|
+
methods: {
|
40
|
+
},
|
41
|
+
created() {
|
42
|
+
this.address = app.host;
|
43
|
+
this.dashboard_1 = Window.Config.dasbhoard_1
|
44
|
+
this.dashboard_2 = Window.Config.dasbhoard_2
|
45
|
+
|
46
|
+
this.rss = app.host + '/feed/rss'
|
47
|
+
this.atom = app.host + '/feed/atom'
|
48
|
+
},
|
49
|
+
filters: {
|
50
|
+
capitalize: function(text) {
|
51
|
+
return text[0].toUpperCase() + text.slice(1);
|
52
|
+
},
|
53
|
+
fromNow: function(date) {
|
54
|
+
return moment(date).fromNow();
|
55
|
+
}
|
56
|
+
},
|
57
|
+
watch: {
|
58
|
+
}
|
59
|
+
}
|
60
|
+
</script>
|
61
|
+
|
62
|
+
<style scoped>
|
63
|
+
</style>
|
@@ -0,0 +1,82 @@
|
|
1
|
+
<template>
|
2
|
+
|
3
|
+
<div class="tunekit">
|
4
|
+
<div id="tags" class="content search-form" style="overflow: visible;">
|
5
|
+
<div v-if="tags">
|
6
|
+
<form v-on:submit.prevent="onSubmit" class="pure-form">
|
7
|
+
<multiselect
|
8
|
+
placeholder="tag"
|
9
|
+
v-model="tag"
|
10
|
+
:options="tags"
|
11
|
+
track-by="id"
|
12
|
+
label="word"
|
13
|
+
:multiple="false"
|
14
|
+
:taggable="true"
|
15
|
+
class="input-multiselect"
|
16
|
+
selectLabel=""
|
17
|
+
deselect-label=""
|
18
|
+
></multiselect>
|
19
|
+
<button type="submit"><i class="fas fa-filter"></i></button>
|
20
|
+
</form>
|
21
|
+
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div id="search" class="content" style="overflow: visible;">
|
26
|
+
<people></people>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
</div>
|
30
|
+
|
31
|
+
</template>
|
32
|
+
|
33
|
+
<script>
|
34
|
+
|
35
|
+
import app from '../configs/app'
|
36
|
+
import People from '../elements/People'
|
37
|
+
import Multiselect from 'vue-multiselect'
|
38
|
+
|
39
|
+
export default {
|
40
|
+
name: 'Tunekit',
|
41
|
+
components: {
|
42
|
+
People,
|
43
|
+
Multiselect,
|
44
|
+
},
|
45
|
+
data () {
|
46
|
+
return {
|
47
|
+
tag: {},
|
48
|
+
tags: [],
|
49
|
+
}
|
50
|
+
},
|
51
|
+
methods: {
|
52
|
+
onSubmit () {
|
53
|
+
this.$router.push({ name: 'tag', params: { id: this.tag.id } })
|
54
|
+
},
|
55
|
+
},
|
56
|
+
created() {
|
57
|
+
let self = this
|
58
|
+
this.$http.get(app.host + '/modules/tags/')
|
59
|
+
.then(function(response){
|
60
|
+
self.tags = response.data
|
61
|
+
});
|
62
|
+
this.dashboard_1 = Window.Config.dasbhoard_1
|
63
|
+
this.dashboard_2 = Window.Config.dasbhoard_2
|
64
|
+
},
|
65
|
+
filters: {
|
66
|
+
capitalize: function(text) {
|
67
|
+
return text[0].toUpperCase() + text.slice(1);
|
68
|
+
},
|
69
|
+
fromNow: function(date) {
|
70
|
+
return moment(date).fromNow();
|
71
|
+
}
|
72
|
+
},
|
73
|
+
watch: {
|
74
|
+
}
|
75
|
+
}
|
76
|
+
</script>
|
77
|
+
|
78
|
+
<style scoped>
|
79
|
+
.tag {
|
80
|
+
float: left;
|
81
|
+
}
|
82
|
+
</style>
|
data/src/vue/index.js
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
import Vue from 'vue';
|
2
|
+
|
3
|
+
import VueRouter from 'vue-router';
|
4
|
+
import Meta from 'vue-meta'
|
5
|
+
|
6
|
+
Vue.use(VueRouter);
|
7
|
+
Vue.use(Meta)
|
8
|
+
|
9
|
+
Vue.config.productionTip = false
|
10
|
+
|
11
|
+
import axiosApp from './configs/axios';
|
12
|
+
|
13
|
+
Vue.prototype.$http = axiosApp;
|
14
|
+
|
15
|
+
import {VueMasonryPlugin} from 'vue-masonry';
|
16
|
+
Vue.use(VueMasonryPlugin)
|
17
|
+
|
18
|
+
import lodash from 'lodash';
|
19
|
+
Object.defineProperty(Vue.prototype, '_', { value: lodash });
|
20
|
+
|
21
|
+
import Ilog from './Ilog'
|
22
|
+
|
23
|
+
import router from './router.js'
|
24
|
+
|
25
|
+
const ibaIlog = new Vue({
|
26
|
+
el: '#bp-log',
|
27
|
+
router,
|
28
|
+
template: '<Ilog/>',
|
29
|
+
components: { Ilog },
|
30
|
+
})
|
data/src/vue/router.js
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
import VueRouter from 'vue-router'
|
2
|
+
|
3
|
+
import Post from './components/PostBody'
|
4
|
+
|
5
|
+
let routes = [
|
6
|
+
{
|
7
|
+
path: '/',
|
8
|
+
name: 'home',
|
9
|
+
/*
|
10
|
+
components: {
|
11
|
+
single: ''
|
12
|
+
}
|
13
|
+
*/
|
14
|
+
},
|
15
|
+
{
|
16
|
+
path: '/tag/:id/',
|
17
|
+
name: 'tag',
|
18
|
+
},
|
19
|
+
{
|
20
|
+
path: '/mention/:id/',
|
21
|
+
name: 'mention',
|
22
|
+
},
|
23
|
+
{
|
24
|
+
path: '/:id/',
|
25
|
+
name: 'post',
|
26
|
+
pathToRegexpOptions: { strict: true }
|
27
|
+
},
|
28
|
+
];
|
29
|
+
|
30
|
+
export default new VueRouter({
|
31
|
+
mode: 'history',
|
32
|
+
base: '/' + Window.Config.digital.uri,
|
33
|
+
routes,
|
34
|
+
scrollBehavior (to, from, savedPosition) {
|
35
|
+
if (to.hash) {
|
36
|
+
return {
|
37
|
+
selector: to.hash
|
38
|
+
// , offset: { x: 0, y: 10 }
|
39
|
+
}
|
40
|
+
}
|
41
|
+
if ( to.name == 'tag' ) {
|
42
|
+
return { x: 0, y: 0 }
|
43
|
+
}
|
44
|
+
/* FIX THIS ISSUE FROM NAVIGATING TO A TAG FROM INSIDE A POST
|
45
|
+
if ( to.name != 'post' ) {
|
46
|
+
return { x: 0, y: 0 }
|
47
|
+
}
|
48
|
+
*/
|
49
|
+
}
|
50
|
+
});
|
Binary file
|
@@ -0,0 +1,88 @@
|
|
1
|
+
<template>
|
2
|
+
<div>
|
3
|
+
<div class="post-single">
|
4
|
+
<article class="text shadow">
|
5
|
+
<div>
|
6
|
+
<h2>{{ content.title.value }}</h2>
|
7
|
+
</div>
|
8
|
+
<div>
|
9
|
+
<span class="mc tag">{{ content.timestamp.publish | date }}</span> |
|
10
|
+
<template v-if="content.bundles">
|
11
|
+
<template v-for="bundle in content.bundles" v-if="bundle.type == 'category'">
|
12
|
+
<router-link class="inlink-sc" :to="{ name: 'categories', params: { slug: bundle.slug.value }}">
|
13
|
+
{{ bundle.title.value }}
|
14
|
+
</router-link>
|
15
|
+
</template>
|
16
|
+
</template>
|
17
|
+
</div>
|
18
|
+
<div v-html="content.content">
|
19
|
+
</div>
|
20
|
+
<div>
|
21
|
+
<template v-if="content.keywords">
|
22
|
+
<template v-for="keyword in content.keywords">
|
23
|
+
<span class="mc"><router-link :to="{ name: 'home', query: { tag: keyword.word }}">
|
24
|
+
#{{ keyword.word }}
|
25
|
+
</router-link>, </span>
|
26
|
+
</template>
|
27
|
+
</template>
|
28
|
+
</div>
|
29
|
+
</article>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</template>
|
33
|
+
|
34
|
+
<script>
|
35
|
+
|
36
|
+
import app from '../configs/app'
|
37
|
+
var _ = require('underscore')
|
38
|
+
var moment = require('moment')
|
39
|
+
|
40
|
+
export default {
|
41
|
+
data () {
|
42
|
+
return {
|
43
|
+
content: {},
|
44
|
+
underscore: _,
|
45
|
+
}
|
46
|
+
},
|
47
|
+
components: {
|
48
|
+
},
|
49
|
+
methods: {
|
50
|
+
initiate() {
|
51
|
+
|
52
|
+
|
53
|
+
}
|
54
|
+
},
|
55
|
+
created() {
|
56
|
+
let self = this;
|
57
|
+
|
58
|
+
this.$http.get(app.host + this.$route.params.id )
|
59
|
+
.then(function(response){
|
60
|
+
self.content = response.data
|
61
|
+
});
|
62
|
+
},
|
63
|
+
filters: {
|
64
|
+
date(date) {
|
65
|
+
return moment(date).format("MMMM D, YYYY");
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
</script>
|
70
|
+
|
71
|
+
<style>
|
72
|
+
.post-single {
|
73
|
+
padding: 2rem 0px 1rem 0px;
|
74
|
+
}
|
75
|
+
.tag-sc {
|
76
|
+
background-color: #e691e6;
|
77
|
+
}
|
78
|
+
@media screen and (min-width: 64em) {
|
79
|
+
.post-single {
|
80
|
+
margin: 0px 5vw;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
@media screen and (min-width: 80em) {
|
84
|
+
.post-single {
|
85
|
+
margin: 0px 10vw;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
</style>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<template>
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script>
|
8
|
+
|
9
|
+
import Item from '../components/Item'
|
10
|
+
|
11
|
+
|
12
|
+
var _ = require('underscore')
|
13
|
+
|
14
|
+
export default {
|
15
|
+
name: 'list',
|
16
|
+
props: ['items', 'collection', 'title', 'next', 'empty', 'status', 'prev'],
|
17
|
+
data () {
|
18
|
+
return {
|
19
|
+
underscore: _,
|
20
|
+
elements: {},
|
21
|
+
}
|
22
|
+
},
|
23
|
+
components: {
|
24
|
+
Tunekit,
|
25
|
+
Item,
|
26
|
+
Profile,
|
27
|
+
},
|
28
|
+
methods: {
|
29
|
+
},
|
30
|
+
created() {
|
31
|
+
},
|
32
|
+
watch: {
|
33
|
+
empty() {
|
34
|
+
// the route has changed, hence empty the elements
|
35
|
+
if (this.empty == false) { this.elements = []; }
|
36
|
+
},
|
37
|
+
items()
|
38
|
+
{
|
39
|
+
this.elements = _.union(this.elements, this.items);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
</script>
|
44
|
+
|
45
|
+
<style>
|
46
|
+
</style>
|
@@ -0,0 +1,163 @@
|
|
1
|
+
<template>
|
2
|
+
|
3
|
+
<modal v-on:close="close()">
|
4
|
+
|
5
|
+
<template v-if="content.thumbnail">
|
6
|
+
<img :src="thumbnail" class="shadow" style="max-width: 100%; margin: 0px auto; display: block; position: relative; z-index: -1;" />
|
7
|
+
</template>
|
8
|
+
|
9
|
+
<div class="post-single">
|
10
|
+
|
11
|
+
<div class="container shadow" v-if="!isNaN($route.params.id)">
|
12
|
+
<article class="text">
|
13
|
+
<h1 v-html="content.title.value"></h1>
|
14
|
+
</article>
|
15
|
+
|
16
|
+
<article class="text" v-html="content.content"></article>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<div class="tag-container">
|
20
|
+
|
21
|
+
<template v-if="content.keywords && content.keywords.length != 0">
|
22
|
+
<template v-for="keyword in content.keywords">
|
23
|
+
<span class="tag tag-sc">
|
24
|
+
<router-link :to="{ name: 'tag', params: { id: keyword.id }}">
|
25
|
+
<i class="fas fa-tag"></i>{{ keyword.word }}
|
26
|
+
</router-link>
|
27
|
+
</span>
|
28
|
+
</template>
|
29
|
+
</template>
|
30
|
+
|
31
|
+
<div class="timestamps">
|
32
|
+
<p v-if="content.timestamp.draft">
|
33
|
+
<span class="label">Draft | </span>
|
34
|
+
{{ content.timestamp.draft | date }}
|
35
|
+
</p>
|
36
|
+
<p v-if="content.timestamp.publish">
|
37
|
+
<span class="label">Published | </span>
|
38
|
+
{{ content.timestamp.publish | date }}
|
39
|
+
</p>
|
40
|
+
<p v-if="content.timestamp.amend">
|
41
|
+
<span class="label">Updated | </span>
|
42
|
+
{{ content.timestamp.amend | date }}
|
43
|
+
</p>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class="container shadow" v-if="isNaN($route.params.id)">
|
48
|
+
<article class="text">
|
49
|
+
<h1 v-html="content.title"></h1>
|
50
|
+
<p><span v-html="content.date"></span></p>
|
51
|
+
</article>
|
52
|
+
<article class="text" v-html="content.content"></article>
|
53
|
+
</div>
|
54
|
+
|
55
|
+
</div>
|
56
|
+
</modal>
|
57
|
+
|
58
|
+
</template>
|
59
|
+
|
60
|
+
<script>
|
61
|
+
|
62
|
+
import app from '../configs/app'
|
63
|
+
import Modal from '../components/Modal'
|
64
|
+
var _ = require('underscore')
|
65
|
+
var moment = require('moment')
|
66
|
+
|
67
|
+
export default {
|
68
|
+
props: ['route'],
|
69
|
+
data () {
|
70
|
+
return {
|
71
|
+
content: {
|
72
|
+
title: {
|
73
|
+
value: '',
|
74
|
+
},
|
75
|
+
date: {
|
76
|
+
|
77
|
+
},
|
78
|
+
timestamp: {
|
79
|
+
publish: ''
|
80
|
+
},
|
81
|
+
},
|
82
|
+
underscore: _,
|
83
|
+
previous: null,
|
84
|
+
}
|
85
|
+
},
|
86
|
+
components: {
|
87
|
+
Modal,
|
88
|
+
},
|
89
|
+
metaInfo () {
|
90
|
+
return {
|
91
|
+
title: 'Post #' + this.content.id + ' by ' + Window.Config.profile.author + ' (Digital Log)',
|
92
|
+
meta: [{ vmid: 'description', name: 'description', content: this.content.title.value }],
|
93
|
+
}
|
94
|
+
},
|
95
|
+
methods: {
|
96
|
+
close() {
|
97
|
+
this.back()
|
98
|
+
},
|
99
|
+
initialize() {
|
100
|
+
let self = this;
|
101
|
+
this.$http.get(app.host + '/' + this.$route.params.id )
|
102
|
+
.then( function(response) {
|
103
|
+
if ( !isNaN(self.$route.params.id) ) {
|
104
|
+
self.content = response.data
|
105
|
+
}
|
106
|
+
else
|
107
|
+
{
|
108
|
+
self.content = response.data.leaf
|
109
|
+
}
|
110
|
+
});
|
111
|
+
|
112
|
+
},
|
113
|
+
back() {
|
114
|
+
/*
|
115
|
+
if (this.route == 0) {
|
116
|
+
this.$router.push({ path: '/' })
|
117
|
+
return;
|
118
|
+
}
|
119
|
+
this.$router.go(-1)
|
120
|
+
*/
|
121
|
+
if (_.size(this.$parent.collection) > 0 )
|
122
|
+
{
|
123
|
+
this.$router.push({ path: this.previous })
|
124
|
+
} else {
|
125
|
+
this.$router.push({ path: '/' })
|
126
|
+
}
|
127
|
+
},
|
128
|
+
},
|
129
|
+
mounted() {
|
130
|
+
this.initialize();
|
131
|
+
|
132
|
+
},
|
133
|
+
filters: {
|
134
|
+
date(date) {
|
135
|
+
if (date)
|
136
|
+
return moment(date).format("MMMM D, YYYY");
|
137
|
+
else
|
138
|
+
return null;
|
139
|
+
}
|
140
|
+
},
|
141
|
+
watch: {
|
142
|
+
'$route.params.id': function() {
|
143
|
+
this.initialize();
|
144
|
+
}
|
145
|
+
},
|
146
|
+
beforeRouteEnter (to, from, next) {
|
147
|
+
let self = this
|
148
|
+
next(self => {
|
149
|
+
self.previous = from.fullPath
|
150
|
+
})
|
151
|
+
},
|
152
|
+
computed: {
|
153
|
+
thumbnail: function() {
|
154
|
+
return Window.Config.host + '/' + Window.Config.digital.uri + '/' + this.content.id + '/' + this.content.thumbnail.name;
|
155
|
+
},
|
156
|
+
}
|
157
|
+
}
|
158
|
+
</script>
|
159
|
+
|
160
|
+
<style scoped lang="scss">
|
161
|
+
</style>
|
162
|
+
<style lang="sass">
|
163
|
+
</style>
|
data/webpack.mix.js
ADDED