.
This commit is contained in:
parent
191c02af1e
commit
4c2764c747
19 changed files with 2605 additions and 95 deletions
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>pleroma_fe</title>
|
||||
<title>Pleroma</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
|
|
@ -13,7 +13,12 @@
|
|||
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^2.0.1"
|
||||
"moment": "^2.15.2",
|
||||
"node-sass": "^3.10.1",
|
||||
"sass-loader": "^4.0.2",
|
||||
"vue": "^2.0.1",
|
||||
"vue-router": "^2.0.1",
|
||||
"vuex": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^6.4.0",
|
||||
|
@ -55,12 +60,14 @@
|
|||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"karma-spec-reporter": "0.0.26",
|
||||
"karma-webpack": "^1.7.0",
|
||||
"lodash": "^4.16.4",
|
||||
"lolex": "^1.4.0",
|
||||
"mocha": "^3.1.0",
|
||||
"nightwatch": "^0.9.8",
|
||||
"opn": "^4.0.2",
|
||||
"ora": "^0.3.0",
|
||||
"phantomjs-prebuilt": "^2.1.3",
|
||||
"raw-loader": "^0.5.1",
|
||||
"selenium-server": "2.53.1",
|
||||
"semver": "^5.3.0",
|
||||
"shelljs": "^0.7.4",
|
||||
|
|
14
src/App.html
Normal file
14
src/App.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
<div id="app">
|
||||
<nav class='container'>
|
||||
<div class='item'>
|
||||
<a route-to='friends-timeline' href="#">Pleroma FE</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container" id="content">
|
||||
<sidebar>
|
||||
<user-panel></user-panel>
|
||||
<nav-panel></nav-panel>
|
||||
</sidebar>
|
||||
<router-view></router-view>
|
||||
</div>
|
||||
</div>
|
8
src/App.js
Normal file
8
src/App.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
import Hello from './components/hello/Hello'
|
||||
|
||||
export default {
|
||||
name: 'app',
|
||||
components: {
|
||||
Hello
|
||||
}
|
||||
}
|
383
src/App.scss
Normal file
383
src/App.scss
Normal file
|
@ -0,0 +1,383 @@
|
|||
$main-color: #f58d2c;
|
||||
$main-background: white;
|
||||
$darkened-background: whitesmoke;
|
||||
|
||||
body {
|
||||
background-color: $main-color;
|
||||
background-size: cover;
|
||||
background-attachment: fixed;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 50px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#content {
|
||||
padding-top: 60px;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: $main-color;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0 10px 0 10px;
|
||||
}
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.gaps {
|
||||
margin: -1em 0 0 -1em;
|
||||
}
|
||||
|
||||
.item {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.gaps > .item {
|
||||
padding: 1em 0 0 1em;
|
||||
}
|
||||
|
||||
.auto-size {
|
||||
flex: 1
|
||||
}
|
||||
|
||||
nav {
|
||||
background: black;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
position: fixed;
|
||||
height: 50px;
|
||||
|
||||
}
|
||||
|
||||
sidebar {
|
||||
width: 33.333% !important;
|
||||
}
|
||||
|
||||
main-router {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.status:hover {
|
||||
background-color: $darkened-background;
|
||||
}
|
||||
|
||||
/* The starting CSS styles for the enter animation */
|
||||
status.ng-enter {
|
||||
transition:0.5s linear all;
|
||||
opacity:0;
|
||||
}
|
||||
|
||||
/* The finishing CSS styles for the enter animation */
|
||||
status.ng-enter.ng-enter-active {
|
||||
opacity:1;
|
||||
}
|
||||
|
||||
.new-status-notification {
|
||||
font-size: 1.1em;
|
||||
background-color: $darkened-background;
|
||||
border-bottom-color: darken($darkened-background, 5%);
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 1px;
|
||||
|
||||
&:hover {
|
||||
background-color: darken($darkened-background, 5%);
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0px;
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.status.compact {
|
||||
color: rgba(0, 0, 0, 0.42);
|
||||
font-weight: 300;
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
font-size: 0.8em
|
||||
}
|
||||
}
|
||||
|
||||
/* Panel */
|
||||
|
||||
.panel {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: $main-background;
|
||||
margin: 0.5em;
|
||||
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
|
||||
.panel-heading {
|
||||
border-radius: 0.5em 0.5em 0 0;
|
||||
background-size: cover;
|
||||
background-color: bisque;
|
||||
padding-top: 0.3em;
|
||||
padding-bottom: 0.3em;
|
||||
text-align: center;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.panel-footer {
|
||||
background-color: bisque;
|
||||
border-radius: 0 0 0.5em 0.5em;
|
||||
}
|
||||
|
||||
.panel-body > p {
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
.attachments {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.attachment, attachment {
|
||||
flex: 1 0 30%;
|
||||
display: flex;
|
||||
margin: 0.2em;
|
||||
align-self: flex-start;
|
||||
|
||||
img {
|
||||
border: 1px solid;
|
||||
border-radius: 0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
video {
|
||||
border: 1px solid;
|
||||
border-radius: 0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.oembed {
|
||||
border: 1px solid rgba(0, 0, 0, 0.14);
|
||||
width: 100%;
|
||||
|
||||
display: flex;
|
||||
.image {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
img {
|
||||
border: 0px;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
flex: 2;
|
||||
margin: 8px;
|
||||
h1 {
|
||||
font-size: 14px;
|
||||
margin: 0px;
|
||||
|
||||
a {
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.media-body {
|
||||
flex: 1
|
||||
}
|
||||
|
||||
#content {
|
||||
margin: auto;
|
||||
max-width: 920px;
|
||||
}
|
||||
|
||||
.media-left {
|
||||
width: 10% !important;
|
||||
}
|
||||
|
||||
.media-body {
|
||||
flex: 1;
|
||||
padding-left: 0.3em;
|
||||
}
|
||||
|
||||
.status .avatar {
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
.status.compact .avatar {
|
||||
width: 32px;
|
||||
}
|
||||
|
||||
.status {
|
||||
padding: 0.5em;
|
||||
padding-right: 1em;
|
||||
border-bottom: 1px solid silver;
|
||||
}
|
||||
|
||||
.status-el:last-child .status {
|
||||
border: none
|
||||
}
|
||||
|
||||
[ng-click] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav-panel ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav-panel li {
|
||||
border-bottom: 1px solid silver;
|
||||
padding: 0.5em;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
nav-panel li:last-child {
|
||||
border: none;
|
||||
}
|
||||
|
||||
nav-panel a {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.status-el p {
|
||||
margin: 0;
|
||||
margin-top: 0.2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
padding: 1em;
|
||||
img {
|
||||
border: 3px solid;
|
||||
border-radius: 0.5em
|
||||
}
|
||||
|
||||
.user-screen-name {
|
||||
font-weight: lighter;
|
||||
}
|
||||
}
|
||||
|
||||
.user-counts {
|
||||
display: flex;
|
||||
padding: 1em 1em 0em 1em;
|
||||
}
|
||||
|
||||
.user-count {
|
||||
flex: 1;
|
||||
|
||||
h5 {
|
||||
font-weight: lighter;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
span {
|
||||
color: $main-color;
|
||||
}
|
||||
}
|
||||
|
||||
.fa {
|
||||
color: $main-color;
|
||||
}
|
||||
|
||||
.status-actions {
|
||||
width: 50%;
|
||||
display: flex;
|
||||
|
||||
div, favorite-button {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
status-text-container {
|
||||
display: block;
|
||||
}
|
||||
|
||||
attention {
|
||||
color: $main-color;
|
||||
}
|
||||
|
||||
.form-bottom {
|
||||
display: flex;
|
||||
padding: 0.5em;
|
||||
|
||||
media-upload {
|
||||
font-size: 26px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
button {
|
||||
flex: 2;
|
||||
}
|
||||
}
|
||||
|
||||
.status-el {
|
||||
line-height: 18px;
|
||||
|
||||
.notify {
|
||||
.avatar {
|
||||
border-width: 3px;
|
||||
border-color: $main-color;
|
||||
border-style: solid;
|
||||
}
|
||||
}
|
||||
|
||||
.media-left {
|
||||
img {
|
||||
margin-top: 0.2em;
|
||||
float: right;
|
||||
margin-right: 0.3em;
|
||||
border-radius: 20%;
|
||||
}
|
||||
}
|
||||
|
||||
.retweet-info {
|
||||
padding: 0.3em;
|
||||
|
||||
.media-left {
|
||||
display: flex;
|
||||
|
||||
i {
|
||||
align-self: center;
|
||||
text-align: right;
|
||||
flex: 1;
|
||||
padding-right: 0.3em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.media-heading {
|
||||
small {
|
||||
font-weight: lighter;
|
||||
}
|
||||
}
|
||||
}
|
30
src/App.vue
30
src/App.vue
|
@ -1,28 +1,4 @@
|
|||
<template>
|
||||
<div id="app">
|
||||
<img src="./assets/logo.png">
|
||||
<hello></hello>
|
||||
</div>
|
||||
</template>
|
||||
<template src="./App.html"></template>
|
||||
|
||||
<script>
|
||||
import Hello from './components/hello/Hello'
|
||||
|
||||
export default {
|
||||
name: 'app',
|
||||
components: {
|
||||
Hello
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
#app {
|
||||
font-family: 'Avenir', Helvetica, Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
margin-top: 60px;
|
||||
}
|
||||
</style>
|
||||
<script src="./App.js"></script>
|
||||
<style lang="scss" src="./App.scss"></style>
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
<template>
|
||||
<div class="hello">
|
||||
<h1>{{ msg }}</h1>
|
||||
<h2>Essential Links</h2>
|
||||
<ul>
|
||||
<li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
|
||||
<li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
|
||||
<li><a href="https://gitter.im/vuejs/vue" target="_blank">Gitter Chat</a></li>
|
||||
<li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
|
||||
<br>
|
||||
<li><a href="http://vuejs-templates.github.io/webpack/" target="_blank">Docs for This Template</a></li>
|
||||
</ul>
|
||||
<h2>Ecosystem</h2>
|
||||
<ul>
|
||||
<li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
|
||||
<li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
|
||||
<li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
|
||||
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script src='./Hello.js' />
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style scoped>
|
||||
h1, h2 {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #42b983;
|
||||
}
|
||||
</style>
|
|
@ -3,6 +3,6 @@ export default {
|
|||
data () {
|
||||
return {
|
||||
msg: 'Welcome to Your Vue.js app'
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
11
src/components/public_timeline/public_timeline.js
Normal file
11
src/components/public_timeline/public_timeline.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
import Timeline from '../timeline/timeline.vue'
|
||||
const PublicTimeline = {
|
||||
components: {
|
||||
Timeline
|
||||
},
|
||||
computed: {
|
||||
timeline () { return this.$store.state.statuses.timelines.public }
|
||||
}
|
||||
}
|
||||
|
||||
export default PublicTimeline
|
10
src/components/public_timeline/public_timeline.vue
Normal file
10
src/components/public_timeline/public_timeline.vue
Normal file
|
@ -0,0 +1,10 @@
|
|||
<template>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Public Timeline</div>
|
||||
<div class="panel-body">
|
||||
<Timeline v-bind:timeline="timeline" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script src="./public_timeline.js"></script>
|
7
src/components/timeline/timeline.js
Normal file
7
src/components/timeline/timeline.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
const Timeline = {
|
||||
props: [
|
||||
'timeline'
|
||||
]
|
||||
}
|
||||
|
||||
export default Timeline;
|
7
src/components/timeline/timeline.vue
Normal file
7
src/components/timeline/timeline.vue
Normal file
|
@ -0,0 +1,7 @@
|
|||
<template>
|
||||
<div class="timeline">
|
||||
<h1>Timeline goes here</h1>
|
||||
<h2 v-for="status in timeline.visibleStatuses">{{status.text}}</h2>
|
||||
</div>
|
||||
</template>
|
||||
<script src="./timeline.js"></script>
|
25
src/main.js
25
src/main.js
|
@ -1,8 +1,31 @@
|
|||
import Vue from 'vue'
|
||||
import App from './App'
|
||||
import VueRouter from 'vue-router'
|
||||
import Vuex from 'vuex'
|
||||
import App from './App.vue'
|
||||
import PublicTimeline from './components/public_timeline/public_timeline.vue'
|
||||
|
||||
import statuses from './modules/statuses.js'
|
||||
|
||||
Vue.use(Vuex)
|
||||
Vue.use(VueRouter)
|
||||
|
||||
const store = new Vuex.Store({
|
||||
modules: {
|
||||
statuses
|
||||
}
|
||||
})
|
||||
|
||||
const routes = [
|
||||
{ path: '/', redirect: '/main/public' },
|
||||
{ path: '/main/public', component: PublicTimeline }
|
||||
]
|
||||
|
||||
const router = new VueRouter({routes})
|
||||
|
||||
/* eslint-disable no-new */
|
||||
new Vue({
|
||||
router,
|
||||
store,
|
||||
el: '#app',
|
||||
template: '<App/>',
|
||||
components: { App }
|
||||
|
|
100
src/modules/statuses.js
Normal file
100
src/modules/statuses.js
Normal file
|
@ -0,0 +1,100 @@
|
|||
import { last, intersectionBy, sortBy, unionBy, toInteger, groupBy, differenceBy, each, find } from 'lodash'
|
||||
// import moment from 'moment'
|
||||
|
||||
const defaultState = {
|
||||
allStatuses: [],
|
||||
maxId: 0,
|
||||
timelines: {
|
||||
public: {
|
||||
statuses: [],
|
||||
faves: [],
|
||||
visibleStatuses: [],
|
||||
newStatusCount: 0,
|
||||
maxId: 0,
|
||||
minVisibleId: 0
|
||||
},
|
||||
publicAndExternal: {
|
||||
statuses: [],
|
||||
faves: [],
|
||||
visibleStatuses: [],
|
||||
newStatusCount: 0,
|
||||
maxId: 0,
|
||||
minVisibleId: 0
|
||||
},
|
||||
friends: {
|
||||
statuses: [],
|
||||
faves: [],
|
||||
visibleStatuses: [],
|
||||
newStatusCount: 0,
|
||||
maxId: 0,
|
||||
minVisibleId: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const statusType = (status) => {
|
||||
return !status.is_post_verb && status.uri.match(/fave/) ? 'fave' : 'status'
|
||||
}
|
||||
|
||||
const addStatusesToTimeline = (addedStatuses, showImmediately, { statuses, visibleStatuses, newStatusCount, faves }) => {
|
||||
const statusesAndFaves = groupBy(addedStatuses, statusType)
|
||||
const addedFaves = statusesAndFaves['fave'] || []
|
||||
const unseenFaves = differenceBy(addedFaves, faves, 'id')
|
||||
|
||||
// Update fave count
|
||||
each(unseenFaves, ({in_reply_to_status_id}) => {
|
||||
const status = find(statuses, { id: toInteger(in_reply_to_status_id) })
|
||||
if (status) {
|
||||
status.fave_num += 1
|
||||
}
|
||||
})
|
||||
|
||||
addedStatuses = statusesAndFaves['status'] || []
|
||||
|
||||
// Add some html to the statuses.
|
||||
each(addedStatuses, (status) => {
|
||||
const statusoid = status.retweeted_status || status
|
||||
if (statusoid.parsedText === undefined) {
|
||||
// statusoid.parsedText = statusParserService.parse(statusoid)
|
||||
statusoid.parsedText = statusoid.text
|
||||
}
|
||||
})
|
||||
|
||||
const newStatuses = sortBy(
|
||||
unionBy(addedStatuses, statuses, 'id'),
|
||||
({id}) => -id
|
||||
)
|
||||
|
||||
let newNewStatusCount = newStatusCount + (newStatuses.length - statuses.length)
|
||||
|
||||
let newVisibleStatuses = visibleStatuses
|
||||
|
||||
if (showImmediately) {
|
||||
newVisibleStatuses = unionBy(addedStatuses, newVisibleStatuses, 'id')
|
||||
newVisibleStatuses = sortBy(newVisibleStatuses, ({id}) => -id)
|
||||
newNewStatusCount = newStatusCount
|
||||
};
|
||||
|
||||
newVisibleStatuses = intersectionBy(newStatuses, newVisibleStatuses, 'id')
|
||||
|
||||
return {
|
||||
statuses: newStatuses,
|
||||
visibleStatuses: newVisibleStatuses,
|
||||
newStatusCount: newNewStatusCount,
|
||||
maxId: newStatuses[0].id,
|
||||
minVisibleId: last(newVisibleStatuses).id,
|
||||
faves: unionBy(faves, addedFaves, 'id')
|
||||
}
|
||||
}
|
||||
|
||||
const statuses = {
|
||||
state: defaultState,
|
||||
mutations: {
|
||||
addNewStatuses (state, { statuses, showImmediately = false, timeline }) {
|
||||
state.timelines[timeline] = addStatusesToTimeline(statuses, showImmediately, state.timelines[timeline])
|
||||
state.allStatuses = unionBy(state.timelines[timeline].statuses, state.allStatuses.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default statuses
|
101
src/services/api/api.service.js
Normal file
101
src/services/api/api.service.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
const LOGIN_URL='/api/account/verify_credentials.json';
|
||||
const FRIENDS_TIMELINE_URL='/api/statuses/friends_timeline.json';
|
||||
const PUBLIC_TIMELINE_URL='/api/statuses/public_timeline.json';
|
||||
const PUBLIC_AND_EXTERNAL_TIMELINE_URL='/api/statuses/public_and_external_timeline.json';
|
||||
const CONVERSATION_URL = '/api/statusnet/conversation/';
|
||||
const STATUS_UPDATE_URL = '/api/statuses/update.json';
|
||||
const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload';
|
||||
const FAVORITE_URL = '/api/favorites/create';
|
||||
const UNFAVORITE_URL = '/api/favorites/destroy';
|
||||
|
||||
const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'};
|
||||
|
||||
import { param, ajax } from 'jquery';
|
||||
import { merge } from 'lodash';
|
||||
|
||||
// TODO: This should probably be in redux.
|
||||
let authHeaders = {};
|
||||
|
||||
const apiServiceFactory = ($http) => {
|
||||
// Public
|
||||
const fetchConversation = (id) => {
|
||||
return $http.get(`${CONVERSATION_URL}/${id}.json?count=100`);
|
||||
};
|
||||
|
||||
const fetchTimeline = ({timeline, since = false, until = false}) => {
|
||||
const timelineUrls = {
|
||||
public: PUBLIC_TIMELINE_URL,
|
||||
friends: FRIENDS_TIMELINE_URL,
|
||||
'public-and-external': PUBLIC_AND_EXTERNAL_TIMELINE_URL
|
||||
};
|
||||
|
||||
let url = timelineUrls[timeline];
|
||||
|
||||
if(since) {
|
||||
url += `?since_id=${since}`;
|
||||
}
|
||||
|
||||
if(until) {
|
||||
url += `?max_id=${until}`;
|
||||
}
|
||||
|
||||
return fetch(url, { headers: authHeaders }).then((data) => data.json());
|
||||
};
|
||||
|
||||
// Need credentials
|
||||
const verifyCredentials = (user) => {
|
||||
const base64 = btoa(`${user.username}:${user.password}`);
|
||||
authHeaders = { "Authorization": `Basic ${base64}` };
|
||||
return $http.post(LOGIN_URL, null, { headers: authHeaders });
|
||||
};
|
||||
|
||||
const postStatus = ({status, mediaIds, in_reply_to_status_id}) => {
|
||||
const idsText = mediaIds.join(',');
|
||||
const form = new FormData();
|
||||
|
||||
form.append('status', status);
|
||||
form.append('source', 'The Wired FE');
|
||||
form.append('media_ids', idsText);
|
||||
if(in_reply_to_status_id) {
|
||||
form.append('in_reply_to_status_id', in_reply_to_status_id);
|
||||
};
|
||||
|
||||
return fetch(STATUS_UPDATE_URL, {
|
||||
body: form,
|
||||
method: 'POST',
|
||||
headers: authHeaders
|
||||
});
|
||||
};
|
||||
|
||||
const favorite = (id) => $http.post(`${FAVORITE_URL}/${id}.json`, null, {headers: authHeaders});
|
||||
const unfavorite = (id) => $http.post(`${UNFAVORITE_URL}/${id}.json`, null, {headers: authHeaders});
|
||||
|
||||
// This was impossible to get to work with $http. You're supposed to set Content-Type
|
||||
// undefined in the header so it sends the correct header. It would always send a json
|
||||
// content type. This method from jQuery worked right away...
|
||||
// Also, this method is only available as XML output. OLOLOLOLO
|
||||
const uploadMedia = (formData) => ajax({
|
||||
url: MEDIA_UPLOAD_URL,
|
||||
data: formData,
|
||||
type: 'POST',
|
||||
processData: false,
|
||||
contentType: false,
|
||||
headers: authHeaders
|
||||
});
|
||||
|
||||
const apiService = {
|
||||
verifyCredentials,
|
||||
fetchConversation,
|
||||
postStatus,
|
||||
uploadMedia,
|
||||
favorite,
|
||||
unfavorite,
|
||||
fetchTimeline
|
||||
};
|
||||
|
||||
return apiService;
|
||||
};
|
||||
|
||||
apiServiceFactory.$inject = ['$http'];
|
||||
|
||||
export default apiServiceFactory;
|
1
src/services/timeline_fetcher/.#timeline_fetcher.service.js
Symbolic link
1
src/services/timeline_fetcher/.#timeline_fetcher.service.js
Symbolic link
|
@ -0,0 +1 @@
|
|||
roger@yuuyuu.18961
|
53
src/services/timeline_fetcher/timeline_fetcher.service.js
Normal file
53
src/services/timeline_fetcher/timeline_fetcher.service.js
Normal file
|
@ -0,0 +1,53 @@
|
|||
import { upperFirst, camelCase } from 'lodash';
|
||||
|
||||
const timelineFetcherServiceFactory = ($ngRedux, apiService, $interval) => {
|
||||
let fetcher;
|
||||
|
||||
const update = ({statuses, timeline, showImmediately}) => {
|
||||
const ccTimeline = camelCase(timeline);
|
||||
|
||||
const action = {
|
||||
type: 'ADD_NEW_STATUSES',
|
||||
data: {
|
||||
statuses,
|
||||
timeline: ccTimeline,
|
||||
showImmediately
|
||||
}
|
||||
};
|
||||
|
||||
$ngRedux.dispatch(action);
|
||||
$ngRedux.dispatch({type: 'UPDATE_TIMESTAMPS'});
|
||||
};
|
||||
|
||||
const fetchAndUpdate = ({timeline = 'friends', older = false, showImmediately = false}) => {
|
||||
const args = { timeline };
|
||||
const timelineData = $ngRedux.getState().statuses.timelines[camelCase(timeline)];
|
||||
|
||||
if(older) {
|
||||
args['until'] = timelineData.minVisibleId;
|
||||
} else {
|
||||
args['since'] = timelineData.maxId;
|
||||
}
|
||||
|
||||
apiService.fetchTimeline(args).
|
||||
then((statuses) => update({statuses, timeline, showImmediately}));
|
||||
};
|
||||
|
||||
const startFetching = ({timeline = 'friends'}) => {
|
||||
fetchAndUpdate({timeline, showImmediately: true});
|
||||
|
||||
const boundFetchAndUpdate = () => fetchAndUpdate({timeline});
|
||||
fetcher = $interval(boundFetchAndUpdate, 10000);
|
||||
};
|
||||
|
||||
const timelineFetcherService = {
|
||||
startFetching,
|
||||
fetchAndUpdate
|
||||
};
|
||||
|
||||
return timelineFetcherService;
|
||||
};
|
||||
|
||||
timelineFetcherServiceFactory.$inject = ['$ngRedux', 'apiService', '$interval'];
|
||||
|
||||
export default timelineFetcherServiceFactory;
|
1658
test/fixtures/statuses.json
vendored
Normal file
1658
test/fixtures/statuses.json
vendored
Normal file
File diff suppressed because it is too large
Load diff
233
yarn.lock
233
yarn.lock
|
@ -142,6 +142,13 @@ array-flatten@1.1.1:
|
|||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
||||
|
||||
array-index@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9"
|
||||
dependencies:
|
||||
debug "^2.2.0"
|
||||
es6-symbol "^3.0.2"
|
||||
|
||||
array-slice@^0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
|
||||
|
@ -214,6 +221,10 @@ async-each@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
|
||||
|
||||
async-foreach@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
|
||||
|
||||
async@^0.9.0, async@~0.9.0:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||
|
@ -1016,6 +1027,10 @@ camelcase@^2.0.0:
|
|||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
|
||||
|
||||
camelcase@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
|
||||
|
||||
caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000554:
|
||||
version "1.0.30000568"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000568.tgz#f4e67925e254afc950d7130102f28b8726037492"
|
||||
|
@ -1151,6 +1166,14 @@ cliui@^2.1.0:
|
|||
right-align "^0.1.1"
|
||||
wordwrap "0.0.2"
|
||||
|
||||
cliui@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
|
||||
|
@ -1374,6 +1397,13 @@ core-util-is@~1.0.0:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
|
||||
cross-spawn@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
|
||||
dependencies:
|
||||
lru-cache "^4.0.1"
|
||||
which "^1.2.9"
|
||||
|
||||
cross-spawn@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
|
||||
|
@ -1536,7 +1566,7 @@ debug@0.7.4:
|
|||
version "0.7.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
|
||||
|
||||
decamelize@^1.0.0, decamelize@^1.1.2:
|
||||
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
||||
|
@ -1839,7 +1869,7 @@ es6-set@~0.1.3:
|
|||
es6-symbol "3"
|
||||
event-emitter "~0.3.4"
|
||||
|
||||
es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3:
|
||||
es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
|
||||
dependencies:
|
||||
|
@ -2311,6 +2341,12 @@ gauge@~2.6.0:
|
|||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gaze@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
|
||||
dependencies:
|
||||
globule "^1.0.0"
|
||||
|
||||
generate-function@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
|
||||
|
@ -2321,6 +2357,10 @@ generate-object-property@^1.1.0:
|
|||
dependencies:
|
||||
is-property "^1.0.0"
|
||||
|
||||
get-caller-file@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
|
||||
|
||||
get-stdin@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||
|
@ -2365,7 +2405,7 @@ glob@^5.0.15:
|
|||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
|
||||
dependencies:
|
||||
|
@ -2410,6 +2450,14 @@ globby@^5.0.0:
|
|||
pify "^2.0.0"
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
globule@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f"
|
||||
dependencies:
|
||||
glob "~7.1.1"
|
||||
lodash "~4.16.4"
|
||||
minimatch "~3.0.2"
|
||||
|
||||
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
||||
version "4.1.9"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29"
|
||||
|
@ -2665,6 +2713,10 @@ imurmurhash@^0.1.4:
|
|||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
|
||||
in-publish@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
|
||||
|
||||
indent-string@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
|
||||
|
@ -3206,7 +3258,7 @@ load-json-file@^1.0.0:
|
|||
pinkie-promise "^2.0.0"
|
||||
strip-bom "^2.0.0"
|
||||
|
||||
loader-utils@^0.2.10, loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@0.2.x:
|
||||
loader-utils@^0.2.10, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@0.2.x:
|
||||
version "0.2.16"
|
||||
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
|
||||
dependencies:
|
||||
|
@ -3215,6 +3267,10 @@ loader-utils@^0.2.10, loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^
|
|||
json5 "^0.5.0"
|
||||
object-assign "^4.0.1"
|
||||
|
||||
lodash, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.16.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.16.4:
|
||||
version "4.16.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127"
|
||||
|
||||
lodash._arraycopy@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
|
||||
|
@ -3315,6 +3371,10 @@ lodash._root@^3.0.0:
|
|||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
|
||||
|
||||
lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
|
||||
|
||||
lodash.camelcase@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298"
|
||||
|
@ -3329,6 +3389,10 @@ lodash.clone@^3.0.3:
|
|||
lodash._bindcallback "^3.0.0"
|
||||
lodash._isiterateecall "^3.0.0"
|
||||
|
||||
lodash.clonedeep@^4.3.2:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
|
||||
lodash.create@^3.1.1, lodash.create@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
|
||||
|
@ -3448,10 +3512,6 @@ lodash@^3.8.0:
|
|||
version "3.10.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
|
||||
|
||||
lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.16.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0:
|
||||
version "4.16.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127"
|
||||
|
||||
log-symbols@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
|
||||
|
@ -3554,7 +3614,7 @@ memory-fs@~0.3.0:
|
|||
errno "^0.1.3"
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
meow@^3.3.0:
|
||||
meow@^3.3.0, meow@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
|
||||
dependencies:
|
||||
|
@ -3623,7 +3683,7 @@ mime@1.2.x:
|
|||
version "1.2.11"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
|
||||
|
||||
minimatch@^3.0.0, minimatch@^3.0.2, "minimatch@2 || 3":
|
||||
minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2, "minimatch@2 || 3":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
|
||||
dependencies:
|
||||
|
@ -3699,6 +3759,10 @@ mocha@^3.1.0:
|
|||
mkdirp "0.5.1"
|
||||
supports-color "3.1.2"
|
||||
|
||||
moment:
|
||||
version "2.15.2"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.15.2.tgz#1bfdedf6a6e345f322fe956d5df5bd08a8ce84dc"
|
||||
|
||||
ms@0.7.1:
|
||||
version "0.7.1"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
|
||||
|
@ -3707,7 +3771,7 @@ mute-stream@0.0.5:
|
|||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
|
||||
|
||||
nan@^2.3.0:
|
||||
nan@^2.3.0, nan@^2.3.2:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
|
||||
|
||||
|
@ -3754,6 +3818,25 @@ no-case@^2.2.0:
|
|||
dependencies:
|
||||
lower-case "^1.1.1"
|
||||
|
||||
node-gyp@^3.3.1:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36"
|
||||
dependencies:
|
||||
fstream "^1.0.0"
|
||||
glob "^7.0.3"
|
||||
graceful-fs "^4.1.2"
|
||||
minimatch "^3.0.2"
|
||||
mkdirp "^0.5.0"
|
||||
nopt "2 || 3"
|
||||
npmlog "0 || 1 || 2 || 3"
|
||||
osenv "0"
|
||||
path-array "^1.0.0"
|
||||
request "2"
|
||||
rimraf "2"
|
||||
semver "2.x || 3.x || 4 || 5"
|
||||
tar "^2.0.0"
|
||||
which "1"
|
||||
|
||||
node-libs-browser@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c"
|
||||
|
@ -3796,6 +3879,27 @@ node-pre-gyp@^0.6.29:
|
|||
tar "~2.2.1"
|
||||
tar-pack "~3.3.0"
|
||||
|
||||
node-sass:
|
||||
version "3.10.1"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.10.1.tgz#c535b2e1a5439240591e06d7308cb663820d616c"
|
||||
dependencies:
|
||||
async-foreach "^0.1.3"
|
||||
chalk "^1.1.1"
|
||||
cross-spawn "^3.0.0"
|
||||
gaze "^1.0.0"
|
||||
get-stdin "^4.0.1"
|
||||
glob "^7.0.3"
|
||||
in-publish "^2.0.0"
|
||||
lodash.assign "^4.2.0"
|
||||
lodash.clonedeep "^4.3.2"
|
||||
meow "^3.7.0"
|
||||
mkdirp "^0.5.1"
|
||||
nan "^2.3.2"
|
||||
node-gyp "^3.3.1"
|
||||
npmlog "^4.0.0"
|
||||
request "^2.61.0"
|
||||
sass-graph "^2.1.1"
|
||||
|
||||
node-uuid@~1.4.7:
|
||||
version "1.4.7"
|
||||
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
|
||||
|
@ -3807,7 +3911,7 @@ nomnomnomnom@^2.0.0:
|
|||
chalk "~0.4.0"
|
||||
underscore "~1.6.0"
|
||||
|
||||
nopt@~3.0.1, nopt@~3.0.6, nopt@3.x:
|
||||
nopt@~3.0.1, nopt@~3.0.6, "nopt@2 || 3", nopt@3.x:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
|
||||
dependencies:
|
||||
|
@ -3862,6 +3966,15 @@ npmlog@^4.0.0:
|
|||
gauge "~2.6.0"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
"npmlog@0 || 1 || 2 || 3":
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873"
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
gauge "~2.6.0"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
nth-check@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
|
||||
|
@ -3973,7 +4086,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
||||
osenv@^0.1.0:
|
||||
osenv@^0.1.0, osenv@0:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217"
|
||||
dependencies:
|
||||
|
@ -4058,6 +4171,12 @@ pascal-case@^2.0.0:
|
|||
camel-case "^3.0.0"
|
||||
upper-case-first "^1.1.0"
|
||||
|
||||
path-array@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271"
|
||||
dependencies:
|
||||
array-index "^1.0.0"
|
||||
|
||||
path-browserify@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
|
||||
|
@ -4501,6 +4620,10 @@ raw-body@~2.1.7:
|
|||
iconv-lite "0.4.13"
|
||||
unpipe "1.0.0"
|
||||
|
||||
raw-loader:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
|
||||
|
||||
rc@~1.1.6:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
|
||||
|
@ -4719,7 +4842,7 @@ request-progress@~2.0.1:
|
|||
dependencies:
|
||||
throttleit "^1.0.0"
|
||||
|
||||
request@^2.75.0:
|
||||
request@^2.61.0, request@^2.75.0, request@2:
|
||||
version "2.76.0"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e"
|
||||
dependencies:
|
||||
|
@ -4770,6 +4893,14 @@ request@~2.74.0:
|
|||
tough-cookie "~2.3.0"
|
||||
tunnel-agent "~0.4.1"
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
|
||||
require-main-filename@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||
|
||||
require-uncached@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.2.tgz#67dad3b733089e77030124678a459589faf6a7ec"
|
||||
|
@ -4830,6 +4961,22 @@ samsam@1.1.2:
|
|||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
|
||||
|
||||
sass-graph@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b"
|
||||
dependencies:
|
||||
glob "^7.0.0"
|
||||
lodash "^4.0.0"
|
||||
yargs "^4.7.1"
|
||||
|
||||
sass-loader:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.0.2.tgz#a616eb770366543e64f547c8630f39c4da75f15d"
|
||||
dependencies:
|
||||
async "^2.0.1"
|
||||
loader-utils "^0.2.15"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
sax@~1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
|
||||
|
@ -4838,7 +4985,7 @@ selenium-server@2.53.1:
|
|||
version "2.53.1"
|
||||
resolved "https://registry.yarnpkg.com/selenium-server/-/selenium-server-2.53.1.tgz#d681528812f3c2e0531a6b7e613e23bb02cce8a6"
|
||||
|
||||
semver@^5.3.0, semver@~5.3.0, "semver@2 || 3 || 4 || 5":
|
||||
semver@^5.3.0, semver@~5.3.0, "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5":
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
|
||||
|
@ -4884,7 +5031,7 @@ serve-static@~1.11.1:
|
|||
parseurl "~1.3.1"
|
||||
send "0.14.1"
|
||||
|
||||
set-blocking@~2.0.0:
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
|
||||
|
@ -5256,7 +5403,7 @@ tar-pack@~3.3.0:
|
|||
tar "~2.2.1"
|
||||
uid-number "~0.0.6"
|
||||
|
||||
tar@~2.2.1:
|
||||
tar@^2.0.0, tar@~2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
|
||||
dependencies:
|
||||
|
@ -5528,6 +5675,10 @@ vue-loader@^9.4.0:
|
|||
vue-template-compiler "^2.0.0-rc.3"
|
||||
vue-template-es2015-compiler "^1.0.0"
|
||||
|
||||
vue-router:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.0.1.tgz#88b83cdc9497bad5b20b579e847a7e7240e221dd"
|
||||
|
||||
vue-style-loader@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-1.0.0.tgz#abeb7bd0f46313083741244d3079d4f14449e049"
|
||||
|
@ -5549,6 +5700,10 @@ vue@^2.0.1:
|
|||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.0.3.tgz#3f7698f83d6ad1f0e35955447901672876c63fde"
|
||||
|
||||
vuex:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/vuex/-/vuex-2.0.0.tgz#26befa44de220f009e432d1027487bff29571cee"
|
||||
|
||||
watchpack@^0.2.1:
|
||||
version "0.2.9"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
|
||||
|
@ -5622,7 +5777,11 @@ whet.extend@~0.9.9:
|
|||
version "0.9.9"
|
||||
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
|
||||
|
||||
which@^1.0.9, which@^1.1.1, which@^1.2.9, which@~1.2.10:
|
||||
which-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
|
||||
|
||||
which@^1.0.9, which@^1.1.1, which@^1.2.9, which@~1.2.10, which@1:
|
||||
version "1.2.11"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.2.11.tgz#c8b2eeea6b8c1659fa7c1dd4fdaabe9533dc5e8b"
|
||||
dependencies:
|
||||
|
@ -5638,6 +5797,10 @@ window-size@^0.1.2:
|
|||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
|
||||
|
||||
window-size@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
|
||||
|
||||
window-size@0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
|
||||
|
@ -5654,6 +5817,12 @@ wordwrap@0.0.2:
|
|||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
|
||||
|
||||
wrap-ansi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f"
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
|
@ -5687,7 +5856,7 @@ xtend@^4.0.0:
|
|||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
|
||||
y18n@^3.2.0:
|
||||
y18n@^3.2.0, y18n@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||
|
||||
|
@ -5695,6 +5864,32 @@ yallist@^2.0.0:
|
|||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
|
||||
|
||||
yargs-parser@^2.4.1:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4"
|
||||
dependencies:
|
||||
camelcase "^3.0.0"
|
||||
lodash.assign "^4.0.6"
|
||||
|
||||
yargs@^4.7.1:
|
||||
version "4.8.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
|
||||
dependencies:
|
||||
cliui "^3.2.0"
|
||||
decamelize "^1.1.1"
|
||||
get-caller-file "^1.0.1"
|
||||
lodash.assign "^4.0.3"
|
||||
os-locale "^1.4.0"
|
||||
read-pkg-up "^1.0.1"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^1.0.1"
|
||||
which-module "^1.0.0"
|
||||
window-size "^0.2.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^2.4.1"
|
||||
|
||||
yargs@~3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
|
||||
|
|
Loading…
Reference in a new issue