1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 17:56:25 +00:00

add filter

This commit is contained in:
Rokt33r
2015-07-24 20:34:10 +09:00
parent 867ec25e54
commit 054daac6db
3 changed files with 68 additions and 13 deletions

View File

@@ -7,7 +7,10 @@ var PlanetNavigator = React.createClass({
Users: React.PropTypes.array Users: React.PropTypes.array
}), }),
openLaunchModal: React.PropTypes.func, 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 () { getInitialState: function () {
return { return {
@@ -15,7 +18,6 @@ var PlanetNavigator = React.createClass({
} }
}, },
submitLaunchModal: function (ret) { submitLaunchModal: function (ret) {
console.log(ret)
this.setState({isLaunchModalOpen: false}) this.setState({isLaunchModalOpen: false})
}, },
render: function () { render: function () {
@@ -31,13 +33,13 @@ var PlanetNavigator = React.createClass({
<i className='fa fa-rocket fa-fw'/> Launch <i className='fa fa-rocket fa-fw'/> Launch
</button> </button>
<nav> <nav>
<a> <a onClick={this.props.showAll}>
<i className='fa fa-home fa-fw'/> Home <i className='fa fa-home fa-fw'/> Home
</a> </a>
<a> <a onClick={this.props.showOnlySnippets}>
<i className='fa fa-code fa-fw'/> Snippets <i className='fa fa-code fa-fw'/> Snippets
</a> </a>
<a> <a onClick={this.props.showOnlyBlueprints}>
<i className='fa fa-file-text-o fa-fw'/> Blueprints <i className='fa fa-file-text-o fa-fw'/> Blueprints
</a> </a>
</nav> </nav>

View File

@@ -19,26 +19,26 @@ var PlanetActions = require('../Actions/PlanetActions')
var AuthStore = require('../Stores/AuthStore') var AuthStore = require('../Stores/AuthStore')
var PlanetStore = require('../Stores/PlanetStore') var PlanetStore = require('../Stores/PlanetStore')
var searchArticle = function (search, articles) { function basicFilter (keyword, articles) {
if (search === '' || search == null) return articles if (keyword === '' || keyword == null) return articles
var firstFiltered = articles.filter(function (article) { var firstFiltered = articles.filter(function (article) {
var first = article.type === 'snippet' ? article.callSign : article.title 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 return false
}) })
var secondFiltered = articles.filter(function (article) { var secondFiltered = articles.filter(function (article) {
var second = article.type === 'snippet' ? article.description : article.content 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 return false
}) })
var thirdFiltered = articles.filter(function (article) { var thirdFiltered = articles.filter(function (article) {
if (article.type === 'snippet') { 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 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({ module.exports = React.createClass({
mixins: [ReactRouter.Navigation, ReactRouter.State], mixins: [ReactRouter.Navigation, ReactRouter.State],
propTypes: { propTypes: {
@@ -208,8 +248,9 @@ module.exports = React.createClass({
return return
} }
var user
if (res.status === 'userAdded') { if (res.status === 'userAdded') {
var user = res.data user = res.data
if (user == null) { if (user == null) {
return null return null
} }
@@ -221,7 +262,7 @@ module.exports = React.createClass({
} }
if (res.status === 'userRemoved') { if (res.status === 'userRemoved') {
var user = res.data user = res.data
if (user == null) { if (user == null) {
return null return null
} }
@@ -286,6 +327,15 @@ module.exports = React.createClass({
this.selectArticleByIndex(0) this.selectArticleByIndex(0)
}) })
}, },
showAll: function () {
this.setState({search: ''})
},
showOnlySnippets: function () {
this.setState({search: '$s'})
},
showOnlyBlueprints: function () {
this.setState({search: '$b'})
},
openLaunchModal: function () { openLaunchModal: function () {
this.setState({isLaunchModalOpen: true}) this.setState({isLaunchModalOpen: true})
}, },
@@ -493,7 +543,9 @@ module.exports = React.createClass({
<PlanetHeader search={this.state.search} <PlanetHeader search={this.state.search}
openSettingModal={this.openSettingModal} onSearchChange={this.handleSearchChange} currentPlanet={this.state.currentPlanet}/> openSettingModal={this.openSettingModal} onSearchChange={this.handleSearchChange} currentPlanet={this.state.currentPlanet}/>
<PlanetNavigator openLaunchModal={this.openLaunchModal} openAddUserModal={this.openAddUserModal} currentPlanet={this.state.currentPlanet}/> <PlanetNavigator openLaunchModal={this.openLaunchModal} openAddUserModal={this.openAddUserModal}
showAll={this.showAll}
showOnlySnippets={this.showOnlySnippets} showOnlyBlueprints={this.showOnlyBlueprints} currentPlanet={this.state.currentPlanet}/>
<PlanetArticleList ref='list' articles={filteredArticles}/> <PlanetArticleList ref='list' articles={filteredArticles}/>

View File

@@ -116,6 +116,7 @@
text-decoration none text-decoration none
background-color transparent background-color transparent
color textColor color textColor
cursor pointer
transition 0.1s transition 0.1s
&:hover, &.hover &:hover, &.hover
background-color hoverBackgroundColor background-color hoverBackgroundColor