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
data/src/sass/style.scss
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
@import "/libs/selectize";
|
2
|
+
|
3
|
+
@import "~@piratesatelier/css-ordinary/src/scss/config";
|
4
|
+
@import "~@piratesatelier/css-ordinary/src/scss/custom";
|
5
|
+
|
6
|
+
@import "/variables";
|
7
|
+
|
8
|
+
@import "/components/post.scss";
|
9
|
+
@import "/components/tag.scss";
|
10
|
+
@import "/components/single";
|
11
|
+
@import "/components/card";
|
12
|
+
|
13
|
+
@import "/log/style";
|
14
|
+
|
15
|
+
@import url('https://fonts.googleapis.com/css?family=Lato:400,400i,700&subset=latin-ext');
|
16
|
+
|
17
|
+
.modal {
|
18
|
+
z-index: 6;
|
19
|
+
}
|
20
|
+
|
21
|
+
body > header {
|
22
|
+
|
23
|
+
padding: 2em 2em .5em 2em;
|
24
|
+
|
25
|
+
@include breakpoint(lg) {
|
26
|
+
padding: 2em 8em .5em 8em;
|
27
|
+
}
|
28
|
+
}
|
data/src/vue/Log.vue
ADDED
@@ -0,0 +1,257 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="log">
|
3
|
+
<header>
|
4
|
+
<p style="display:flex; justify-content: space-between;">
|
5
|
+
<span v-if="head"><b>{{ head }}</b></span>
|
6
|
+
{{ count.posts }} posts & {{ count.stuffs }} stuff
|
7
|
+
</p>
|
8
|
+
<profile class="lg-yes" :count="count"></profile>
|
9
|
+
</header>
|
10
|
+
|
11
|
+
<main class="log-list">
|
12
|
+
<header>
|
13
|
+
<profile class="lg-no"></profile>
|
14
|
+
<tunekit></tunekit>
|
15
|
+
<span v-if="title" v-html="title" class="title"></span>
|
16
|
+
<nav v-if="page.prev" class>
|
17
|
+
<span class="status" v-if="loading">{{ loading }}</span>
|
18
|
+
<span class="button" v-if="!loading" v-on:click="retriveNewer()">Newer</span>
|
19
|
+
</nav>
|
20
|
+
</header>
|
21
|
+
|
22
|
+
<item v-for="(item, index) in items"
|
23
|
+
:content="item"
|
24
|
+
:key="item.kind + item.id"
|
25
|
+
>
|
26
|
+
</item>
|
27
|
+
|
28
|
+
<footer>
|
29
|
+
<nav v-if="page.next" class="footer">
|
30
|
+
<span class="button" v-if="!loading" v-on:click="retriveNextPage()">Older</span>
|
31
|
+
<span class="status" v-if="loading">{{ loading }}</span>
|
32
|
+
</nav>
|
33
|
+
</footer>
|
34
|
+
</main>
|
35
|
+
|
36
|
+
<footer>
|
37
|
+
<menu>
|
38
|
+
<a class="inlink" :href="'mailto:' + email"><i class="fas fa-envelope"></i>
|
39
|
+
<span class="no xl-yes">Email</span>
|
40
|
+
</a>
|
41
|
+
<router-link to="/"><i class="fas fa-home"></i>
|
42
|
+
<span class="no xl-yes">Home</span>
|
43
|
+
</router-link>
|
44
|
+
<a class="inlink" :href="atom"><i class="fas fa-rss-square"></i>
|
45
|
+
<span class="no xl-yes">Atom</span>
|
46
|
+
</a>
|
47
|
+
<a class="inlink" :href="rss"><i class="fas fa-rss"></i>
|
48
|
+
<span class="no xl-yes">RSS</span>
|
49
|
+
</a>
|
50
|
+
<a class="inlink"><i class="fas fa-question-circle"></i>
|
51
|
+
<span class="no xl-yes">Help</span>
|
52
|
+
</a>
|
53
|
+
</menu>
|
54
|
+
</footer>
|
55
|
+
|
56
|
+
</div>
|
57
|
+
|
58
|
+
</template>
|
59
|
+
|
60
|
+
<script>
|
61
|
+
import app from './configs/app.js'
|
62
|
+
import Profile from './elements/Profile'
|
63
|
+
import Tunekit from './elements/Tunekit'
|
64
|
+
import Item from './components/Item'
|
65
|
+
|
66
|
+
var _ = require('underscore')
|
67
|
+
var moment = require('moment')
|
68
|
+
|
69
|
+
export default {
|
70
|
+
name: 'Log',
|
71
|
+
components: {
|
72
|
+
Profile,
|
73
|
+
Tunekit,
|
74
|
+
Item
|
75
|
+
},
|
76
|
+
data () {
|
77
|
+
return {
|
78
|
+
address: '',
|
79
|
+
location: app.profile.location,
|
80
|
+
author: app.profile.author,
|
81
|
+
status: app.profile.status,
|
82
|
+
avatar: app.profile.avatar,
|
83
|
+
|
84
|
+
count: {},
|
85
|
+
items: [],
|
86
|
+
forward: false,
|
87
|
+
underscore: _,
|
88
|
+
|
89
|
+
title: '',
|
90
|
+
route: 0,
|
91
|
+
|
92
|
+
|
93
|
+
head: '',
|
94
|
+
host: '',
|
95
|
+
atom: '',
|
96
|
+
rss: '',
|
97
|
+
email: app.profile.email,
|
98
|
+
|
99
|
+
page: {
|
100
|
+
current: false,
|
101
|
+
next: false,
|
102
|
+
prev: false,
|
103
|
+
respodata: {}
|
104
|
+
},
|
105
|
+
request: '',
|
106
|
+
loading: 'starting to lead content',
|
107
|
+
}
|
108
|
+
},
|
109
|
+
metaInfo () {
|
110
|
+
return {
|
111
|
+
title: this.head + ' by ' + this.author + ' (Digital Ilog)',
|
112
|
+
meta: [{ vmid: 'description', name: 'description', content: app.profile.status }],
|
113
|
+
host: Window.Config.host + '/' + app.host
|
114
|
+
}
|
115
|
+
},
|
116
|
+
mounted () {
|
117
|
+
},
|
118
|
+
methods: {
|
119
|
+
setPrev() {
|
120
|
+
this.page.prev = this.page.respodata.prev
|
121
|
+
},
|
122
|
+
setNext() {
|
123
|
+
this.page.next = this.page.respodata.next
|
124
|
+
},
|
125
|
+
retriveNewer() {
|
126
|
+
this.$router.replace({ name: 'home' })
|
127
|
+
this.constructRequest()
|
128
|
+
this.request = this.request + this.page.prev
|
129
|
+
console.log(this.request)
|
130
|
+
this.forward = true;
|
131
|
+
let self = this;
|
132
|
+
this.retriveIlogs().then(function(){
|
133
|
+
self.setPrev()
|
134
|
+
})
|
135
|
+
},
|
136
|
+
retriveNextPage() {
|
137
|
+
this.$router.replace({ name: 'home' })
|
138
|
+
this.constructRequest()
|
139
|
+
this.request = this.request + this.page.next
|
140
|
+
let self = this;
|
141
|
+
this.retriveIlogs().then(function(){
|
142
|
+
self.setNext()
|
143
|
+
})
|
144
|
+
|
145
|
+
},
|
146
|
+
retriveIlogs() {
|
147
|
+
let vue = this;
|
148
|
+
return new Promise(function(resolve, reject) {
|
149
|
+
let self = vue;
|
150
|
+
let success = false;
|
151
|
+
vue.loading = 'loading';
|
152
|
+
vue.$http.get(vue.request).
|
153
|
+
then(function(response) {
|
154
|
+
self.count = response.data.count
|
155
|
+
|
156
|
+
self.page.current = response.data.items.current_page // set current page
|
157
|
+
console.log('hardcore')
|
158
|
+
console.log(response.data.items.prev_page_url)
|
159
|
+
|
160
|
+
self.page.respodata.prev = response.data.items.prev_page_url
|
161
|
+
self.page.respodata.next = response.data.items.next_page_url
|
162
|
+
|
163
|
+
if (self.items.length == 0 ) {
|
164
|
+
console.log(self.page.respodata.next)
|
165
|
+
self.setNext()
|
166
|
+
self.setPrev()
|
167
|
+
}
|
168
|
+
|
169
|
+
if (self.forward) {
|
170
|
+
self.items = _.union(_.toArray(response.data.items.data), self.items) // add data
|
171
|
+
self.forward = false;
|
172
|
+
} else {
|
173
|
+
self.items = _.union(self.items,_.toArray(response.data.items.data)) // add data
|
174
|
+
}
|
175
|
+
self.loading = false;
|
176
|
+
resolve()
|
177
|
+
}).catch(e => {
|
178
|
+
console.log(e)
|
179
|
+
reject()
|
180
|
+
})
|
181
|
+
})
|
182
|
+
},
|
183
|
+
constructRequest()
|
184
|
+
{
|
185
|
+
this.request = app.host;
|
186
|
+
switch (this.$route.name) {
|
187
|
+
case 'tag':
|
188
|
+
this.items = [];
|
189
|
+
this.page.current = false;
|
190
|
+
this.request = this.request + '/tag/' + this.$route.params.id;
|
191
|
+
this.retriveIlogs()
|
192
|
+
this.head = "#:" + this.$route.params.id;
|
193
|
+
break;
|
194
|
+
case 'mention':
|
195
|
+
this.items = [];
|
196
|
+
this.page.current = false;
|
197
|
+
this.request = this.request + '/mention/' + this.$route.params.id;
|
198
|
+
this.retriveIlogs()
|
199
|
+
this.head = "@:" + this.$route.params.id;
|
200
|
+
break;
|
201
|
+
case 'post':
|
202
|
+
console.log(this.items.length)
|
203
|
+
if (this.items.length == 0 )
|
204
|
+
{
|
205
|
+
this.page.current = false;
|
206
|
+
this.request = this.request + '/' + this.$route.params.id + '/find/';
|
207
|
+
let self = this;
|
208
|
+
this.retriveIlogs().then(function() {
|
209
|
+
self.setNext()
|
210
|
+
self.setPrev()
|
211
|
+
})
|
212
|
+
}
|
213
|
+
break;
|
214
|
+
case 'home':
|
215
|
+
if (this.items.length == 0 )
|
216
|
+
{
|
217
|
+
this.page.current = false;
|
218
|
+
this.request = this.request + '/index/';
|
219
|
+
let self = this;
|
220
|
+
this.retriveIlogs().then(function() {
|
221
|
+
self.setNext()
|
222
|
+
self.setPrev()
|
223
|
+
}).catch(e => {
|
224
|
+
console.log(e);
|
225
|
+
})
|
226
|
+
} else {
|
227
|
+
}
|
228
|
+
break;
|
229
|
+
}
|
230
|
+
},
|
231
|
+
},
|
232
|
+
filters: {
|
233
|
+
capitalize: function(text) {
|
234
|
+
return text[0].toUpperCase() + text.slice(1);
|
235
|
+
}
|
236
|
+
},
|
237
|
+
created() {
|
238
|
+
this.address = app.host;
|
239
|
+
this.rss = app.host + '/feed/rss'
|
240
|
+
this.atom = app.host + '/feed/atom'
|
241
|
+
},
|
242
|
+
mounted() {
|
243
|
+
this.constructRequest()
|
244
|
+
},
|
245
|
+
watch: {
|
246
|
+
$route() {
|
247
|
+
this.constructRequest()
|
248
|
+
},
|
249
|
+
},
|
250
|
+
computed: {
|
251
|
+
},
|
252
|
+
}
|
253
|
+
</script>
|
254
|
+
|
255
|
+
|
256
|
+
<style scoped>
|
257
|
+
</style>
|
Binary file
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<template>
|
2
|
+
<div :class="'item ' + content.kind">
|
3
|
+
<component :is="content.kind" :content="content">
|
4
|
+
</component>
|
5
|
+
</div>
|
6
|
+
</template>
|
7
|
+
|
8
|
+
<script>
|
9
|
+
|
10
|
+
var moment = require('moment');
|
11
|
+
import Stuff from '../components/Stuff'
|
12
|
+
import Post from '../components/Post'
|
13
|
+
|
14
|
+
export default {
|
15
|
+
name: 'item',
|
16
|
+
props: ['content'],
|
17
|
+
components: {
|
18
|
+
Post,
|
19
|
+
Stuff,
|
20
|
+
},
|
21
|
+
data () {
|
22
|
+
return {
|
23
|
+
}
|
24
|
+
},
|
25
|
+
methods: {
|
26
|
+
},
|
27
|
+
mounted() {
|
28
|
+
},
|
29
|
+
filters: {
|
30
|
+
capitalize: function(text) {
|
31
|
+
return text[0].toUpperCase() + text.slice(1);
|
32
|
+
},
|
33
|
+
fromNow: function(date) {
|
34
|
+
return moment(date).fromNow();
|
35
|
+
},
|
36
|
+
date: function(time) {
|
37
|
+
return moment(time).format('MMM D, YY');
|
38
|
+
}
|
39
|
+
},
|
40
|
+
watch: {
|
41
|
+
}
|
42
|
+
}
|
43
|
+
</script>
|
44
|
+
|
45
|
+
<style scoped>
|
46
|
+
</style>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="modal" style="display: block;">
|
3
|
+
<span class="close" v-on:click="close()"><i class="fas fa-times"></i></span>
|
4
|
+
<div class="modal-content" style="z-index: 10;">
|
5
|
+
<slot></slot>
|
6
|
+
</div>
|
7
|
+
</div>
|
8
|
+
</template>
|
9
|
+
|
10
|
+
<script>
|
11
|
+
export default {
|
12
|
+
methods: {
|
13
|
+
close() {
|
14
|
+
this.$emit('close')
|
15
|
+
}
|
16
|
+
},
|
17
|
+
created() {
|
18
|
+
document.body.classList.add('modal-open')
|
19
|
+
},
|
20
|
+
destroyed() {
|
21
|
+
document.body.classList.remove('modal-open')
|
22
|
+
},
|
23
|
+
}
|
24
|
+
</script>
|
25
|
+
|
26
|
+
<style>
|
27
|
+
</style>
|
@@ -0,0 +1,125 @@
|
|
1
|
+
<template>
|
2
|
+
<transition name="display-content" mode="out-in">
|
3
|
+
<component-view :is='view' :ref="content.id" v-on:click="display" v-on:closePost="close" :content="post">
|
4
|
+
|
5
|
+
<div class="content">
|
6
|
+
|
7
|
+
<template v-if="content.thumbnail">
|
8
|
+
<img class="thumbnail" :src="thumbnail()" />
|
9
|
+
</template>
|
10
|
+
|
11
|
+
<div class="title h2" v-html="content.title.value"></div>
|
12
|
+
|
13
|
+
<footer>
|
14
|
+
<div class="date">{{ content.timestamp.publish | date }}</div>
|
15
|
+
|
16
|
+
<template v-if="typeof(content.keywords) !== 'undefined' && content.keywords.length != 0">
|
17
|
+
<div class="tags" >
|
18
|
+
<template v-for="keyword in content.keywords">
|
19
|
+
<span class="tag">
|
20
|
+
<router-link :to="{ name: 'tag', params: { id: keyword.id }}">
|
21
|
+
<i class="fas fa-tag"></i>{{ keyword.word }}
|
22
|
+
</router-link>
|
23
|
+
</span>
|
24
|
+
</template>
|
25
|
+
</div>
|
26
|
+
</template>
|
27
|
+
|
28
|
+
</footer>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
</component-view>
|
32
|
+
</transition>
|
33
|
+
</template>
|
34
|
+
|
35
|
+
<script>
|
36
|
+
|
37
|
+
var moment = require('moment');
|
38
|
+
import PostBody from '../components/PostBody'
|
39
|
+
import app from '../configs/app'
|
40
|
+
|
41
|
+
export default {
|
42
|
+
name: 'post',
|
43
|
+
props: ['content'],
|
44
|
+
components: {
|
45
|
+
PostBody
|
46
|
+
},
|
47
|
+
data () {
|
48
|
+
return {
|
49
|
+
view: 'div',
|
50
|
+
status: false,
|
51
|
+
post: {},
|
52
|
+
request: '',
|
53
|
+
}
|
54
|
+
},
|
55
|
+
methods: {
|
56
|
+
close() {
|
57
|
+
this.view = 'div';
|
58
|
+
this.$router.replace({ name: 'home' })
|
59
|
+
},
|
60
|
+
display() {
|
61
|
+
this.$router.replace({ name: 'post', params: { id: this.content.id } })
|
62
|
+
this.view = 'post-body';
|
63
|
+
this.status = 'active';
|
64
|
+
console.log('content = ' + this.content.content)
|
65
|
+
if ( this.content.content == undefined ) {
|
66
|
+
this.retrivePostBody()
|
67
|
+
} else {
|
68
|
+
this.post = this.content;
|
69
|
+
}
|
70
|
+
},
|
71
|
+
thumbnail() {
|
72
|
+
return Window.Config.host + '/' + Window.Config.digital.uri + '/' + this.content.id + '/' + this.content.thumbnail.name;
|
73
|
+
},
|
74
|
+
retrivePostBody() {
|
75
|
+
let self = this;
|
76
|
+
this.request = '/' + this.$route.params.id
|
77
|
+
this.$http.get(app.host + this.request )
|
78
|
+
.then( function(response) {
|
79
|
+
if ( !isNaN(self.$route.params.id) ) {
|
80
|
+
self.post = response.data
|
81
|
+
}
|
82
|
+
else
|
83
|
+
{
|
84
|
+
self.post = response.data.leaf
|
85
|
+
}
|
86
|
+
});
|
87
|
+
},
|
88
|
+
},
|
89
|
+
filters: {
|
90
|
+
capitalize: function(text) {
|
91
|
+
return text[0].toUpperCase() + text.slice(1);
|
92
|
+
},
|
93
|
+
date: function(time) {
|
94
|
+
return moment(time).format('MMM D, YY');
|
95
|
+
}
|
96
|
+
},
|
97
|
+
created()
|
98
|
+
{
|
99
|
+
if ( this.$route.name == 'post' && this.content.id == this.$route.params.id ) {
|
100
|
+
this.request = '/' + this.$route.params.id
|
101
|
+
if ( this.content.content != undefined ) {
|
102
|
+
this.post = this.content;
|
103
|
+
} else {
|
104
|
+
this.retrivePostBody()
|
105
|
+
}
|
106
|
+
} else {
|
107
|
+
this.post = this.content;
|
108
|
+
// this.$emit('closePost')
|
109
|
+
}
|
110
|
+
this.$nextTick(() => {
|
111
|
+
if (typeof this.content.view !== 'undefined') {
|
112
|
+
this.$nextTick(() => {
|
113
|
+
this.$refs[this.content.id].scrollIntoView()
|
114
|
+
this.$nextTick(() => {
|
115
|
+
this.view = 'post-body'
|
116
|
+
})
|
117
|
+
})
|
118
|
+
}
|
119
|
+
})
|
120
|
+
}
|
121
|
+
}
|
122
|
+
</script>
|
123
|
+
|
124
|
+
<style scoped>
|
125
|
+
</style>
|
@@ -0,0 +1,86 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="post-body">
|
3
|
+
<header class="text article" style="background-color: transparent">
|
4
|
+
<template v-if="content.thumbnail">
|
5
|
+
<img class="thumbnail" :src="thumbnail()" />
|
6
|
+
</template>
|
7
|
+
<h1 v-html="content.title.value" v-on:click="$emit('closePost')"></h1>
|
8
|
+
</header>
|
9
|
+
<div class="text article" v-html="content.content">
|
10
|
+
</div>
|
11
|
+
<div class="text" style="background-color: transparent">
|
12
|
+
<footer>
|
13
|
+
<ul class="timestamps">
|
14
|
+
<li v-if="content.timestamp.draft">
|
15
|
+
<span class="label">Draft | </span>
|
16
|
+
{{ content.timestamp.draft | date }}
|
17
|
+
</li>
|
18
|
+
<li v-if="content.timestamp.publish">
|
19
|
+
<span class="label">Published | </span>
|
20
|
+
{{ content.timestamp.publish | date }}
|
21
|
+
</li>
|
22
|
+
|
23
|
+
<li v-if="content.timestamp.amend">
|
24
|
+
<span class="label">Updated | </span>
|
25
|
+
{{ content.timestamp.amend | date }}
|
26
|
+
</li>
|
27
|
+
</ul>
|
28
|
+
|
29
|
+
<template v-if="typeof(content.keywords) !== 'undefined' && content.keywords.length != 0">
|
30
|
+
<div class="tags" >
|
31
|
+
<template v-for="keyword in content.keywords">
|
32
|
+
<span class="tag">
|
33
|
+
<router-link :to="{ name: 'tag', params: { id: keyword.id }}">
|
34
|
+
<i class="fas fa-tag"></i>{{ keyword.word }}
|
35
|
+
</router-link>
|
36
|
+
</span>
|
37
|
+
</template>
|
38
|
+
</div>
|
39
|
+
</template>
|
40
|
+
|
41
|
+
</footer>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
</template>
|
45
|
+
|
46
|
+
<script>
|
47
|
+
|
48
|
+
import Modal from '../components/Modal'
|
49
|
+
var _ = require('underscore')
|
50
|
+
var moment = require('moment')
|
51
|
+
|
52
|
+
export default {
|
53
|
+
props: ['content'],
|
54
|
+
data () {
|
55
|
+
return {
|
56
|
+
}
|
57
|
+
},
|
58
|
+
components: {
|
59
|
+
Modal,
|
60
|
+
},
|
61
|
+
methods: {
|
62
|
+
thumbnail() {
|
63
|
+
return Window.Config.host + '/' + Window.Config.digital.uri + '/' + this.content.id + '/' + this.content.thumbnail.name;
|
64
|
+
},
|
65
|
+
},
|
66
|
+
mounted() {
|
67
|
+
console.log('this is the poost we have')
|
68
|
+
console.log(this.content.title.value)
|
69
|
+
},
|
70
|
+
filters: {
|
71
|
+
date(date) {
|
72
|
+
if (date)
|
73
|
+
return moment(date).format("MMMM D, YYYY");
|
74
|
+
else
|
75
|
+
return null;
|
76
|
+
}
|
77
|
+
},
|
78
|
+
computed: {
|
79
|
+
}
|
80
|
+
}
|
81
|
+
</script>
|
82
|
+
|
83
|
+
<style scoped lang="scss">
|
84
|
+
</style>
|
85
|
+
<style lang="sass">
|
86
|
+
</style>
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<template>
|
2
|
+
<a :href="content.slug.value" class=" content">
|
3
|
+
|
4
|
+
<header class="kind" v-if="content.kind">
|
5
|
+
<span><i class="fas fa-external-link-square-alt"></i> {{ content.kind }}</span>
|
6
|
+
</header>
|
7
|
+
|
8
|
+
<div>
|
9
|
+
<template v-if="content.thumbnail">
|
10
|
+
<img class="thumbnail" :src="thumbnail()" />
|
11
|
+
</template>
|
12
|
+
|
13
|
+
<div class="title h2" v-html="content.title.value"></div>
|
14
|
+
|
15
|
+
<footer>
|
16
|
+
<template v-if="typeof(content.keywords) !== 'undefined' && content.keywords.length != 0">
|
17
|
+
<div class="tags" >
|
18
|
+
<template v-for="keyword in content.keywords">
|
19
|
+
<span class="tag">
|
20
|
+
<span :to="{ name: 'tag', params: { id: keyword.id }}">
|
21
|
+
<i class="fas fa-tag"></i>{{ keyword.word }}
|
22
|
+
</span>
|
23
|
+
</span>
|
24
|
+
</template>
|
25
|
+
</div>
|
26
|
+
</template>
|
27
|
+
<span class="date">{{ content.timestamp.publish | date }}</span>
|
28
|
+
</footer>
|
29
|
+
</div>
|
30
|
+
<footer>
|
31
|
+
|
32
|
+
</footer>
|
33
|
+
</a>
|
34
|
+
|
35
|
+
</template>
|
36
|
+
|
37
|
+
<script>
|
38
|
+
var moment = require('moment');
|
39
|
+
export default {
|
40
|
+
name: 'stuff',
|
41
|
+
props: ['content'],
|
42
|
+
data () {
|
43
|
+
return {
|
44
|
+
}
|
45
|
+
},
|
46
|
+
methods: {
|
47
|
+
thumbnail() {
|
48
|
+
return this.content.thumbnail.path + this.content.thumbnail.name;
|
49
|
+
},
|
50
|
+
},
|
51
|
+
filters: {
|
52
|
+
capitalize: function(text) {
|
53
|
+
return text[0].toUpperCase() + text.slice(1);
|
54
|
+
},
|
55
|
+
date: function(time) {
|
56
|
+
return moment(time).format('MMM D, YY');
|
57
|
+
}
|
58
|
+
},
|
59
|
+
}
|
60
|
+
</script>
|
61
|
+
|
62
|
+
<style scoped>
|
63
|
+
</style>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import axios from 'axios';
|
2
|
+
import app from '../configs/app';
|
3
|
+
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
4
|
+
|
5
|
+
export default new axios.create({
|
6
|
+
baseURL: app.host,
|
7
|
+
headers: {
|
8
|
+
'X-Requested-With': 'XMLHttpRequest'
|
9
|
+
|
10
|
+
}
|
11
|
+
// 'X-Requested-With': 'XMLHttpRequest',
|
12
|
+
// Authorization: 'Bearer ' + localStorage.access_token,
|
13
|
+
// }
|
14
|
+
})
|