+
+ var teams = user.Teams == null ? [] : user.Teams.map(function (team) {
+ return (
+
-
-
+
+
{user.profileName}
-
{user.name}
+
{user.name}
+
+
+ Edit profile
+
+
+
{teams.length} {teams.length > 0 ? 'Teams' : 'Team'}
+
+
+
+
{userPlanets.length} {userPlanets.length > 0 ? 'Planets' : 'Planet'}
+
- Planets
-
)
}
} else {
- content = (
-
+ return (
+
+
+
)
}
-
- return (
-
-
- {content}
-
- )
}
})
diff --git a/browser/main/Containers/UserSettingContainer.jsx b/browser/main/Containers/UserSettingContainer.jsx
deleted file mode 100644
index 3ce23269..00000000
--- a/browser/main/Containers/UserSettingContainer.jsx
+++ /dev/null
@@ -1,173 +0,0 @@
-var React = require('react/addons')
-var ReactRouter = require('react-router')
-
-var ModalBase = require('../Components/ModalBase')
-
-var AuthActions = require('../Actions/AuthActions')
-
-var AuthStore = require('../Stores/AuthStore')
-
-var LogOutModal = React.createClass({
- propTypes: {
- close: React.PropTypes.func
- },
- componentDidMount: function () {
- React.findDOMNode(this.refs.cancel).focus()
- },
- submit: function () {
- AuthActions.logout()
- },
- handleKeyDown: function (e) {
- if (e.keyCode === 13 && e.metaKey) {
- this.submit()
- return
- }
- if (e.keyCode === 27) {
- this.props.close()
- return
- }
- },
- render: function () {
- return (
-
-
-
Logout
-
-
-
Are you sure to log out?
-
-
-
- )
- }
-})
-
-var UserSettingNavigation = React.createClass({
- propTypes: {
- currentUser: React.PropTypes.shape({
- name: React.PropTypes.string
- }),
- current: React.PropTypes.string,
- changeCurrent: React.PropTypes.func
- },
- getInitialState: function () {
- return {
- isLogOutModalOpen: false
- }
- },
- changeFactory: function (current) {
- return function () {
- this.props.changeCurrent(current)
- }.bind(this)
- },
- openLogOutModal: function () {
- this.setState({isLogOutModalOpen: true})
- },
- closeLogOutModal: function () {
- this.setState({isLogOutModalOpen: false})
- },
- render: function () {
- return (
-
- )
- }
-})
-
-var UserSettingMain = React.createClass({
- propTypes: {
- currentUser: React.PropTypes.shape({
- name: React.PropTypes.string
- }),
- current: React.PropTypes.string
- },
- render: function () {
- var view
-
- switch (this.props.current) {
- case 'profile':
- view = (
-
-
User Info
-
-
-
Password Reset
-
-
- )
- break
- default:
- view = (
-
- Missing...
-
- )
- break
- }
- return (
-
- {view}
-
- )
- }
-})
-
-module.exports = React.createClass({
- mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation],
- getInitialState: function () {
- return {
- current: 'profile'
- }
- },
- changeCurrent: function (current) {
- this.setState({
- current: current
- })
- },
- render: function () {
- var currentUser = AuthStore.getUser()
-
- return (
-
-
-
-
- )
- }
-})
diff --git a/browser/main/Mixins/ArticleFilter.js b/browser/main/Mixins/ArticleFilter.js
new file mode 100644
index 00000000..d3506e8d
--- /dev/null
+++ b/browser/main/Mixins/ArticleFilter.js
@@ -0,0 +1,67 @@
+function basicFilter (keyword, articles) {
+ if (keyword === '' || keyword == null) return articles
+ var firstFiltered = articles.filter(function (article) {
+
+ var first = article.type === 'code' ? article.description : article.title
+ if (first.match(new RegExp(keyword, 'i'))) return true
+
+ return false
+ })
+
+ var secondFiltered = articles.filter(function (article) {
+ var second = article.type === 'code' ? article.content : article.content
+ if (second.match(new RegExp(keyword, 'i'))) return true
+
+ return false
+ })
+
+ return firstFiltered.concat(secondFiltered).filter(function (value, index, self) {
+ return self.indexOf(value) === index
+ })
+}
+
+function codeFilter (articles) {
+ return articles.filter(function (article) {
+ return article.type === 'code'
+ })
+}
+
+function noteFilter (articles) {
+ return articles.filter(function (article) {
+ return article.type === 'note'
+ })
+}
+
+function tagFilter (keyword, articles) {
+ return articles.filter(function (article) {
+ return article.Tags.some(function (tag) {
+ return tag.name.match(new RegExp('^' + keyword, 'i'))
+ })
+ })
+}
+
+function searchArticle (search, articles) {
+ var keywords = search.split(' ')
+
+ for (var keyword of keywords) {
+ if (keyword.match(/^\$c/, 'i')) {
+ articles = codeFilter(articles)
+ continue
+ } else if (keyword.match(/^\$n/, 'i')) {
+ articles = noteFilter(articles)
+ continue
+ } else if (keyword.match(/^#[A-Za-z0-9]+/)) {
+ articles = tagFilter(keyword.substring(1, keyword.length), articles)
+ continue
+ }
+ articles = basicFilter(keyword, articles)
+ }
+
+ return articles.sort(function (a, b) {
+ return new Date(b.updatedAt) - new Date(a.updatedAt)
+ })
+}
+
+module.exports = {
+ searchArticle: searchArticle
+}
diff --git a/browser/main/Mixins/AuthFilter.js b/browser/main/Mixins/AuthFilter.js
new file mode 100644
index 00000000..22629fc9
--- /dev/null
+++ b/browser/main/Mixins/AuthFilter.js
@@ -0,0 +1,27 @@
+/* global localStorage*/
+
+var mixin = {}
+
+mixin.OnlyGuest = {
+ componentDidMount: function () {
+ var currentUser = localStorage.getItem('currentUser')
+
+ if (currentUser == null) {
+ return
+ }
+ this.transitionTo('userHome', {userName: currentUser.name})
+ }
+}
+
+mixin.OnlyUser = {
+ componentDidMount: function () {
+ var currentUser = localStorage.getItem('currentUser')
+
+ if (currentUser == null) {
+ this.transitionTo('login')
+ return
+ }
+ }
+}
+
+module.exports = mixin
diff --git a/browser/main/Mixins/Catalyst.js b/browser/main/Mixins/Catalyst.js
deleted file mode 100644
index 8ffc5dcc..00000000
--- a/browser/main/Mixins/Catalyst.js
+++ /dev/null
@@ -1,38 +0,0 @@
-(function (root, factory) {
- module.exports = factory()
-}(this, function () {
- function getIn (object, path) {
- var stack = path.split('.')
- while (stack.length > 1) {
- object = object[stack.shift()]
- }
- return object[stack.shift()]
- }
-
- function updateIn (object, path, value) {
- var current = object
- var stack = path.split('.')
- while (stack.length > 1) {
- current = current[stack.shift()]
- }
- current[stack.shift()] = value
- return object
- }
-
- function setPartialState (component, path, value) {
- component.setState(
- updateIn(component.state, path, value))
- }
-
- return {
- LinkedStateMixin: {
- linkState: function (path) {
- return {
- value: getIn(this.state, path),
- requestChange: setPartialState.bind(null, this, path)
- }
- }
- }
- }
-
-}))
diff --git a/browser/main/Mixins/LinkedState.js b/browser/main/Mixins/LinkedState.js
new file mode 100644
index 00000000..57fc6ea6
--- /dev/null
+++ b/browser/main/Mixins/LinkedState.js
@@ -0,0 +1,31 @@
+function getIn (object, path) {
+ var stack = path.split('.')
+ while (stack.length > 1) {
+ object = object[stack.shift()]
+ }
+ return object[stack.shift()]
+}
+
+function updateIn (object, path, value) {
+ var current = object
+ var stack = path.split('.')
+ while (stack.length > 1) {
+ current = current[stack.shift()]
+ }
+ current[stack.shift()] = value
+ return object
+}
+
+function setPartialState (component, path, value) {
+ component.setState(
+ updateIn(component.state, path, value))
+}
+
+module.exports = {
+ linkState: function (path) {
+ return {
+ value: getIn(this.state, path),
+ requestChange: setPartialState.bind(null, this, path)
+ }
+ }
+}
diff --git a/browser/main/Mixins/Modal.jsx b/browser/main/Mixins/Modal.jsx
new file mode 100644
index 00000000..1a14f5c1
--- /dev/null
+++ b/browser/main/Mixins/Modal.jsx
@@ -0,0 +1,42 @@
+var React = require('react/addons')
+var ModalBase = React.createClass({
+ getInitialState: function () {
+ return {
+ component: null,
+ componentProps: {},
+ isHidden: true
+ }
+ },
+ close: function () {
+ this.setState({component: null, componentProps: null, isHidden: true})
+ },
+ render: function () {
+ var componentProps = this.state.componentProps
+ return (
+
+
+ {this.state.component == null ? null : (
+
+ )}
+
+ )
+ }
+})
+
+var modalBase = null
+
+module.exports = {
+ componentDidMount: function () {
+ if (modalBase == null) {
+ var el = document.createElement('div')
+ document.body.appendChild(el)
+ modalBase = React.render(
, el)
+ }
+ },
+ openModal: function (component, props) {
+ modalBase.setState({component: component, componentProps: props, isHidden: false})
+ },
+ closeModal: function () {
+ modalBase.setState({isHidden: true})
+ }
+}
diff --git a/browser/main/Mixins/OnlyGuest.js b/browser/main/Mixins/OnlyGuest.js
deleted file mode 100644
index c4103b8b..00000000
--- a/browser/main/Mixins/OnlyGuest.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var AuthStore = require('../Stores/AuthStore')
-
-var OnlyGuest = {
- componentDidMount: function () {
- if (AuthStore.check()) {
- var user = AuthStore.getUser()
- if (user == null) {
- return
- }
- var planet = user.Planets.length > 0 ? user.Planets[0] : null
- if (planet == null) {
- this.transitionTo('user', {userName: user.name})
- return
- }
- this.transitionTo('planetHome', {userName: user.name, planetName: planet.name})
- }
- }
-}
-
-module.exports = OnlyGuest
diff --git a/browser/main/Services/Hq.js b/browser/main/Services/Hq.js
new file mode 100644
index 00000000..ae855c2e
--- /dev/null
+++ b/browser/main/Services/Hq.js
@@ -0,0 +1,112 @@
+/* global localStorage */
+
+var request = require('superagent-promise')(require('superagent'), Promise)
+var apiUrl = require('../../../config').apiUrl
+
+module.exports = {
+ // Auth
+ login: function (input) {
+ return request
+ .post(apiUrl + 'auth')
+ .send(input)
+ },
+ signup: function (input) {
+ return request
+ .post(apiUrl + 'auth/signup')
+ .send(input)
+ },
+ getUser: function () {
+ return request
+ .get(apiUrl + 'auth/user')
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ },
+ changePassword: function (input) {
+ return request
+ .post(apiUrl + 'auth/password')
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+
+ // Resources
+ fetchUser: function (userName) {
+ return request
+ .get(apiUrl + 'resources/' + userName)
+ },
+ updateUser: function (userName, input) {
+ return request
+ .put(apiUrl + 'resources/' + userName)
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+ createPlanet: function (userName, input) {
+ return request
+ .post(apiUrl + 'resources/' + userName + '/planets')
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+ fetchPlanet: function (userName, planetName) {
+ return request
+ .get(apiUrl + 'resources/' + userName + '/planets/' + planetName)
+ },
+ createCode: function (userName, planetName, input) {
+ return request
+ .post(apiUrl + 'resources/' + userName + '/planets/' + planetName + '/codes')
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+ updateCode: function (userName, planetName, localId, input) {
+ return request
+ .put(apiUrl + 'resources/' + userName + '/planets/' + planetName + '/codes/' + localId)
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+ destroyCode: function (userName, planetName, localId) {
+ return request
+ .del(apiUrl + 'resources/' + userName + '/planets/' + planetName + '/codes/' + localId)
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ },
+ createNote: function (userName, planetName, input) {
+ return request
+ .post(apiUrl + 'resources/' + userName + '/planets/' + planetName + '/notes')
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+ updateNote: function (userName, planetName, localId, input) {
+ return request
+ .put(apiUrl + 'resources/' + userName + '/planets/' + planetName + '/notes/' + localId)
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ .send(input)
+ },
+ destroyNote: function (userName, planetName, localId) {
+ return request
+ .del(apiUrl + 'resources/' + userName + '/planets/' + planetName + '/notes/' + localId)
+ .set({
+ Authorization: 'Bearer ' + localStorage.getItem('token')
+ })
+ },
+
+ // Search
+ searchTag: function (tagName) {
+ return request
+ .get(apiUrl + 'search/tags')
+ .query({name: tagName})
+ }
+}
diff --git a/browser/main/Stores/AuthStore.js b/browser/main/Stores/AuthStore.js
index cde154ef..5f64f310 100644
--- a/browser/main/Stores/AuthStore.js
+++ b/browser/main/Stores/AuthStore.js
@@ -2,17 +2,10 @@
var Reflux = require('reflux')
var request = require('superagent')
-var AuthActions = require('../Actions/AuthActions')
-
var apiUrl = require('../../../config').apiUrl
var AuthStore = Reflux.createStore({
init: function () {
- this.listenTo(AuthActions.login, this.login)
- this.listenTo(AuthActions.register, this.register)
- this.listenTo(AuthActions.logout, this.logout)
- this.listenTo(AuthActions.updateProfile, this.updateProfile)
- this.listenTo(AuthActions.refreshUser, this.refreshUser)
},
// Reflux Store
login: function (input) {
@@ -91,7 +84,7 @@ var AuthStore = Reflux.createStore({
},
logout: function () {
localStorage.removeItem('token')
- localStorage.removeItem('user')
+ localStorage.removeItem('currentUser')
this.trigger({
status: 'loggedOut'
@@ -129,7 +122,7 @@ var AuthStore = Reflux.createStore({
return false
},
getUser: function () {
- var userJSON = localStorage.getItem('user')
+ var userJSON = localStorage.getItem('currentUser')
if (userJSON == null) return null
return JSON.parse(userJSON)
}
diff --git a/browser/main/Stores/PlanetStore.js b/browser/main/Stores/PlanetStore.js
index 1df3ac7e..08cbd08a 100644
--- a/browser/main/Stores/PlanetStore.js
+++ b/browser/main/Stores/PlanetStore.js
@@ -1,359 +1,104 @@
/* global localStorage */
+
var Reflux = require('reflux')
-var request = require('superagent')
-var PlanetActions = require('../Actions/PlanetActions')
+var actions = Reflux.createActions([
+ 'updatePlanet',
+ 'destroyPlanet',
+ 'updateCode',
+ 'destroyCode',
+ 'updateNote',
+ 'destroyNote'
+])
-var apiUrl = require('../../../config').apiUrl
+module.exports = Reflux.createStore({
+ listenables: [actions],
+ Actions: actions,
+ onUpdatePlanet: function (planet) {
-var PlanetStore = Reflux.createStore({
- init: function () {
- this.listenTo(PlanetActions.createPlanet, this.createPlanet)
- this.listenTo(PlanetActions.fetchPlanet, this.fetchPlanet)
- this.listenTo(PlanetActions.deletePlanet, this.deletePlanet)
- this.listenTo(PlanetActions.changeName, this.changeName)
- this.listenTo(PlanetActions.addUser, this.addUser)
- this.listenTo(PlanetActions.removeUser, this.removeUser)
- this.listenTo(PlanetActions.createSnippet, this.createSnippet)
- this.listenTo(PlanetActions.updateSnippet, this.updateSnippet)
- this.listenTo(PlanetActions.deleteSnippet, this.deleteSnippet)
- this.listenTo(PlanetActions.createBlueprint, this.createBlueprint)
- this.listenTo(PlanetActions.updateBlueprint, this.updateBlueprint)
- this.listenTo(PlanetActions.deleteBlueprint, this.deleteBlueprint)
},
- createPlanet: function (input) {
- request
- .post(apiUrl + 'planets/create')
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
- })
- .send(input)
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
+ onUpdateCode: function (code) {
+ code.type = 'code'
+
+ var planet = JSON.parse(localStorage.getItem('planet-' + code.PlanetId))
+ if (planet != null) {
+ var isNew = !planet.Codes.some(function (_code, index) {
+ if (code.id === _code.id) {
+ planet.Codes.splice(index, 1, code)
+ return true
}
-
- var planet = res.body
- planet.Snippets = []
- planet.Blueprints = []
- planet.Articles = []
-
- this.trigger({
- status: 'planetCreated',
- data: planet
- })
- }.bind(this))
- },
- fetchPlanet: function (userName, planetName) {
- request
- .get(apiUrl + userName + '/' + planetName)
- .send()
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
- }
-
- var planet = res.body
- planet.userName = userName
-
- planet.Snippets = planet.Snippets.map(function (snippet) {
- snippet.type = 'snippet'
- return snippet
- })
-
- planet.Blueprints = planet.Blueprints.map(function (blueprint) {
- blueprint.type = 'blueprint'
- return blueprint
- })
-
- localStorage.setItem('planet-' + planet.id, JSON.stringify(planet))
-
- planet.Articles = planet.Snippets.concat(planet.Blueprints).sort(function (a, b) {
- a = new Date(a.updatedAt)
- b = new Date(b.updatedAt)
- return a < b ? 1 : a > b ? -1 : 0
- })
-
- this.trigger({
- status: 'planetFetched',
- data: planet
- })
- }.bind(this))
- },
- deletePlanet: function (userName, planetName) {
- request
- .del(apiUrl + userName + '/' + planetName)
- .send()
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
- }
-
- var planet = res.body
- localStorage.removeItem('planet-' + planet.id)
-
- this.trigger({
- status: 'planetDeleted',
- data: planet
- })
- }.bind(this))
- },
- changeName: function (userName, planetName, name) {
- request
- .put(apiUrl + userName + '/' + planetName)
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
+ return false
})
- .send({name: name})
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
+
+ if (isNew) planet.Codes.unshift(code)
+
+ localStorage.setItem('planet-' + code.PlanetId, JSON.stringify(planet))
+ }
+
+ this.trigger({
+ status: 'codeUpdated',
+ data: code
+ })
+ },
+ onDestroyCode: function (code) {
+ var planet = JSON.parse(localStorage.getItem('planet-' + code.PlanetId))
+ if (planet != null) {
+ planet.Codes.some(function (_code, index) {
+ if (code.id === _code.id) {
+ planet.Codes.splice(index, 1)
+ return true
}
-
- var planet = res.body
-
- var user = JSON.parse(localStorage.getItem('user'))
- user.Planets.some(function (_planet, index) {
- if (planet.id === _planet.id) {
- user.Planets[index].name = planet.name
- return true
- }
- return false
- })
- localStorage.setItem('user', JSON.stringify(user))
-
- this.trigger({
- status: 'nameChanged',
- data: planet
- })
- }.bind(this))
- },
- addUser: function (planetName, userName) {
- request
- .post(apiUrl + planetName + '/users')
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
+ return false
})
- .send({name: userName})
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
+
+ localStorage.setItem('planet-' + code.PlanetId, JSON.stringify(planet))
+ }
+
+ this.trigger({
+ status: 'codeDestroyed',
+ data: code
+ })
+ },
+ onUpdateNote: function (note) {
+ note.type = 'note'
+
+ var planet = JSON.parse(localStorage.getItem('planet-' + note.PlanetId))
+ if (planet != null) {
+ var isNew = !planet.Notes.some(function (_note, index) {
+ if (note.id === _note.id) {
+ planet.Notes.splice(index, 1, note)
+ return true
}
- var user = res.body
-
- this.trigger({
- status: 'userAdded',
- data: user
- })
- }.bind(this))
- },
- removeUser: function (planetName, userName) {
- request
- .del(apiUrl + planetName + '/users')
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
+ return false
})
- .send({name: userName})
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
+
+ if (isNew) planet.Codes.unshift(note)
+
+ localStorage.setItem('planet-' + note.PlanetId, JSON.stringify(planet))
+ }
+
+ this.trigger({
+ status: 'noteUpdated',
+ data: note
+ })
+ },
+ onDestroyNote: function (note) {
+ var planet = JSON.parse(localStorage.getItem('planet-' + note.PlanetId))
+ if (planet != null) {
+ planet.Notes.some(function (_note, index) {
+ if (note.id === _note.id) {
+ planet.Notes.splice(index, 1)
+ return true
}
- var user = res.body
-
- this.trigger({
- status: 'userRemoved',
- data: user
- })
- }.bind(this))
- },
- createSnippet: function (planetName, input) {
- input.description = input.description.substring(0, 255)
- request
- .post(apiUrl + planetName + '/snippets')
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
+ return false
})
- .send(input)
- .end(function (req, res) {
- var snippet = res.body
- snippet.type = 'snippet'
- var planet = JSON.parse(localStorage.getItem('planet-' + snippet.PlanetId))
- planet.Snippets.unshift(snippet)
- localStorage.setItem('planet-' + snippet.PlanetId, JSON.stringify(planet))
+ localStorage.setItem('planet-' + note.PlanetId, JSON.stringify(planet))
+ }
- this.trigger({
- status: 'articleCreated',
- data: snippet
- })
- }.bind(this))
- },
- updateSnippet: function (id, input) {
- input.description = input.description.substring(0, 255)
- request
- .put(apiUrl + 'snippets/id/' + id)
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
- })
- .send(input)
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
- }
-
- var snippet = res.body
- snippet.type = 'snippet'
-
- var planet = JSON.parse(localStorage.getItem('planet-' + snippet.PlanetId))
- planet.Snippets.some(function (_snippet, index) {
- if (snippet.id === _snippet) {
- planet.Snippets[index] = snippet
- return true
- }
- return false
- })
- localStorage.setItem('planet-' + snippet.PlanetId, JSON.stringify(planet))
-
- this.trigger({
- status: 'articleUpdated',
- data: snippet
- })
- }.bind(this))
- },
- deleteSnippet: function (id) {
- request
- .del(apiUrl + 'snippets/id/' + id)
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
- })
- .send()
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
- }
-
- var snippet = res.body
-
- var planet = JSON.parse(localStorage.getItem('planet-' + snippet.PlanetId))
- planet.Snippets.some(function (_snippet, index) {
- if (snippet.id === _snippet) {
- planet.splice(index, 1)
- return true
- }
- return false
- })
- localStorage.setItem('planet-' + snippet.PlanetId, JSON.stringify(planet))
-
- this.trigger({
- status: 'articleDeleted',
- data: snippet
- })
- }.bind(this))
- },
- createBlueprint: function (planetName, input) {
- input.title = input.title.substring(0, 255)
- request
- .post(apiUrl + planetName + '/blueprints')
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
- })
- .send(input)
- .end(function (req, res) {
- var blueprint = res.body
- blueprint.type = 'blueprint'
-
- var planet = JSON.parse(localStorage.getItem('planet-' + blueprint.PlanetId))
- planet.Blueprints.unshift(blueprint)
- localStorage.setItem('planet-' + blueprint.PlanetId, JSON.stringify(planet))
-
- this.trigger({
- status: 'articleCreated',
- data: blueprint
- })
- }.bind(this))
- },
- updateBlueprint: function (id, input) {
- input.title = input.title.substring(0, 255)
- request
- .put(apiUrl + 'blueprints/id/' + id)
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
- })
- .send(input)
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
- }
-
- var blueprint = res.body
- blueprint.type = 'blueprint'
-
- var planet = JSON.parse(localStorage.getItem('planet-' + blueprint.PlanetId))
- planet.Blueprints.some(function (_blueprint, index) {
- if (blueprint.id === _blueprint) {
- planet.Blueprints[index] = blueprint
- return true
- }
- return false
- })
- localStorage.setItem('planet-' + blueprint.PlanetId, JSON.stringify(blueprint))
-
- this.trigger({
- status: 'articleUpdated',
- data: blueprint
- })
- }.bind(this))
- },
- deleteBlueprint: function (id) {
- request
- .del(apiUrl + 'blueprints/id/' + id)
- .set({
- Authorization: 'Bearer ' + localStorage.getItem('token')
- })
- .send()
- .end(function (err, res) {
- if (err) {
- console.error(err)
- this.trigger(null)
- return
- }
-
- var blueprint = res.body
-
- var planet = JSON.parse(localStorage.getItem('planet-' + blueprint.PlanetId))
- planet.Blueprints.some(function (_blueprint, index) {
- if (blueprint.id === _blueprint) {
- planet.splice(index, 1)
- return true
- }
- return false
- })
- localStorage.setItem('planet-' + blueprint.PlanetId, JSON.stringify(planet))
-
- this.trigger({
- status: 'articleDeleted',
- data: blueprint
- })
- }.bind(this))
+ this.trigger({
+ status: 'noteDestroyed',
+ data: note
+ })
}
})
-
-module.exports = PlanetStore
diff --git a/browser/main/Stores/UserStore.js b/browser/main/Stores/UserStore.js
new file mode 100644
index 00000000..b565716b
--- /dev/null
+++ b/browser/main/Stores/UserStore.js
@@ -0,0 +1,23 @@
+var Reflux = require('reflux')
+
+var actions = Reflux.createActions([
+ 'update',
+ 'destroy'
+])
+
+module.exports = Reflux.createStore({
+ listenables: [actions],
+ onUpdate: function (user) {
+ this.trigger({
+ status: 'userUpdated',
+ data: user
+ })
+ },
+ onDestroy: function (user) {
+ this.trigger({
+ status: 'userDestroyed',
+ data: user
+ })
+ },
+ Actions: actions
+})
diff --git a/browser/main/index.electron.html b/browser/main/index.electron.html
index 0d9c5205..fa4e37b0 100644
--- a/browser/main/index.electron.html
+++ b/browser/main/index.electron.html
@@ -1,7 +1,7 @@
-
CodeXen v0.2.0
+
CodeXen v0.2.1
@@ -9,12 +9,6 @@