diff --git a/browser/main/Components/PlanetNavigator.jsx b/browser/main/Components/PlanetNavigator.jsx
index f7e2132b..a3a0816f 100644
--- a/browser/main/Components/PlanetNavigator.jsx
+++ b/browser/main/Components/PlanetNavigator.jsx
@@ -7,7 +7,10 @@ var PlanetNavigator = React.createClass({
Users: React.PropTypes.array
}),
openLaunchModal: React.PropTypes.func,
- openAddUserModal: React.PropTypes.func
+ openAddUserModal: React.PropTypes.func,
+ showAll: React.PropTypes.func,
+ showOnlySnippets: React.PropTypes.func,
+ showOnlyBlueprints: React.PropTypes.func
},
getInitialState: function () {
return {
@@ -15,7 +18,6 @@ var PlanetNavigator = React.createClass({
}
},
submitLaunchModal: function (ret) {
- console.log(ret)
this.setState({isLaunchModalOpen: false})
},
render: function () {
@@ -31,13 +33,13 @@ var PlanetNavigator = React.createClass({
Launch
diff --git a/browser/main/Containers/PlanetContainer.jsx b/browser/main/Containers/PlanetContainer.jsx
index 0c8954d7..fd4a0026 100644
--- a/browser/main/Containers/PlanetContainer.jsx
+++ b/browser/main/Containers/PlanetContainer.jsx
@@ -19,26 +19,26 @@ var PlanetActions = require('../Actions/PlanetActions')
var AuthStore = require('../Stores/AuthStore')
var PlanetStore = require('../Stores/PlanetStore')
-var searchArticle = function (search, articles) {
- if (search === '' || search == null) return articles
+function basicFilter (keyword, articles) {
+ if (keyword === '' || keyword == null) return articles
var firstFiltered = articles.filter(function (article) {
var first = article.type === 'snippet' ? article.callSign : article.title
- if (first.match(new RegExp(search, 'i'))) return true
+ if (first.match(new RegExp(keyword, 'i'))) return true
return false
})
var secondFiltered = articles.filter(function (article) {
var second = article.type === 'snippet' ? article.description : article.content
- if (second.match(new RegExp(search, 'i'))) return true
+ if (second.match(new RegExp(keyword, 'i'))) return true
return false
})
var thirdFiltered = articles.filter(function (article) {
if (article.type === 'snippet') {
- if (article.content.match(new RegExp(search, 'i'))) return true
+ if (article.content.match(new RegExp(keyword, 'i'))) return true
}
return false
})
@@ -48,6 +48,46 @@ var searchArticle = function (search, articles) {
})
}
+function snippetFilter (articles) {
+ return articles.filter(function (article) {
+ return article.type === 'snippet'
+ })
+}
+
+function blueprintFilter (articles) {
+ return articles.filter(function (article) {
+ return article.type === 'blueprint'
+ })
+}
+
+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(/^\$s/, 'i')) {
+ articles = snippetFilter(articles)
+ continue
+ } else if (keyword.match(/^\$b/, 'i')) {
+ articles = blueprintFilter(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
+}
+
module.exports = React.createClass({
mixins: [ReactRouter.Navigation, ReactRouter.State],
propTypes: {
@@ -208,8 +248,9 @@ module.exports = React.createClass({
return
}
+ var user
if (res.status === 'userAdded') {
- var user = res.data
+ user = res.data
if (user == null) {
return null
}
@@ -221,7 +262,7 @@ module.exports = React.createClass({
}
if (res.status === 'userRemoved') {
- var user = res.data
+ user = res.data
if (user == null) {
return null
}
@@ -286,6 +327,15 @@ module.exports = React.createClass({
this.selectArticleByIndex(0)
})
},
+ showAll: function () {
+ this.setState({search: ''})
+ },
+ showOnlySnippets: function () {
+ this.setState({search: '$s'})
+ },
+ showOnlyBlueprints: function () {
+ this.setState({search: '$b'})
+ },
openLaunchModal: function () {
this.setState({isLaunchModalOpen: true})
},
@@ -493,7 +543,9 @@ module.exports = React.createClass({
-
+
diff --git a/browser/styles/main/containers/PlanetContainer.styl b/browser/styles/main/containers/PlanetContainer.styl
index a89b2196..d25745fc 100644
--- a/browser/styles/main/containers/PlanetContainer.styl
+++ b/browser/styles/main/containers/PlanetContainer.styl
@@ -116,6 +116,7 @@
text-decoration none
background-color transparent
color textColor
+ cursor pointer
transition 0.1s
&:hover, &.hover
background-color hoverBackgroundColor