mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-15 18:56:22 +00:00
remove linkState function & move modal.js to main/lib
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import linkState from '../lib/linkState'
|
|
||||||
|
|
||||||
function isNotEmptyString (str) {
|
function isNotEmptyString (str) {
|
||||||
return _.isString(str) && str.length > 0
|
return _.isString(str) && str.length > 0
|
||||||
@@ -164,5 +163,3 @@ TagSelect.propTypes = {
|
|||||||
onChange: PropTypes.func,
|
onChange: PropTypes.func,
|
||||||
suggestTags: PropTypes.array
|
suggestTags: PropTypes.array
|
||||||
}
|
}
|
||||||
|
|
||||||
TagSelect.prototype.linkState = linkState
|
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
function getIn (object, path) {
|
|
||||||
let stack = path.split('.')
|
|
||||||
while (stack.length > 1) {
|
|
||||||
object = object[stack.shift()]
|
|
||||||
}
|
|
||||||
return object[stack.shift()]
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateIn (object, path, value) {
|
|
||||||
let current = object
|
|
||||||
let 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))
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function linkState (path) {
|
|
||||||
return {
|
|
||||||
value: getIn(this.state, path),
|
|
||||||
requestChange: setPartialState.bind(null, this, path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function linkState2 (el, path) {
|
|
||||||
return {
|
|
||||||
value: getIn(el.state, path),
|
|
||||||
requestChange: setPartialState.bind(null, el, path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,11 +2,10 @@ import React, { PropTypes } from 'react'
|
|||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import linkState from 'browser/lib/linkState'
|
|
||||||
import TagSelect from 'browser/components/TagSelect'
|
import TagSelect from 'browser/components/TagSelect'
|
||||||
import ModeSelect from 'browser/components/ModeSelect'
|
import ModeSelect from 'browser/components/ModeSelect'
|
||||||
import ShareButton from './ShareButton'
|
import ShareButton from './ShareButton'
|
||||||
import { openModal, isModalOpen } from 'browser/lib/modal'
|
import { openModal, isModalOpen } from 'browser/main/lib/modal'
|
||||||
import DeleteArticleModal from '../modals/DeleteArticleModal'
|
import DeleteArticleModal from '../modals/DeleteArticleModal'
|
||||||
import ArticleEditor from './ArticleEditor'
|
import ArticleEditor from './ArticleEditor'
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
@@ -338,4 +337,3 @@ ArticleDetail.propTypes = {
|
|||||||
dispatch: PropTypes.func,
|
dispatch: PropTypes.func,
|
||||||
repositories: PropTypes.array
|
repositories: PropTypes.array
|
||||||
}
|
}
|
||||||
ArticleDetail.prototype.linkState = linkState
|
|
||||||
|
|||||||
@@ -1,107 +1,20 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import ExternalLink from 'browser/components/ExternalLink'
|
import ExternalLink from 'browser/components/ExternalLink'
|
||||||
import { isModalOpen } from 'browser/lib/modal'
|
|
||||||
import activityRecord from 'browser/lib/activityRecord'
|
import activityRecord from 'browser/lib/activityRecord'
|
||||||
|
|
||||||
const electron = require('electron')
|
const OSX = process.platform === 'darwin'
|
||||||
const ipc = electron.ipcRenderer
|
|
||||||
|
|
||||||
const OSX = global.process.platform === 'darwin'
|
|
||||||
|
|
||||||
const BRAND_COLOR = '#18AF90'
|
|
||||||
|
|
||||||
const searchTutorialElement = (
|
|
||||||
<svg width='750' height='300' className='tutorial'>
|
|
||||||
<text x='125' y='63' fill={BRAND_COLOR} fontSize='24'>Search some posts!!</text>
|
|
||||||
<text x='125' y='90' fill={BRAND_COLOR} fontSize='18'>{'- Search by tag : #{string}'}</text>
|
|
||||||
<text x='125' y='115' fill={BRAND_COLOR} fontSize='18'>
|
|
||||||
{'- Search by folder : /{folder_name}\n'}</text>
|
|
||||||
<text x='140' y='135' fill={BRAND_COLOR} fontSize='14'>
|
|
||||||
{'exact match : //{folder_name}'}</text>
|
|
||||||
|
|
||||||
<svg x='90' width='500' height='300'>
|
|
||||||
<path fill='white' d='M27.2,6.9c-1.7,3.5-6,4.8-8,8.2c-1.8,3.1-2.1,6.8-1.8,10.2c0.7,7,4.2,16.7,10.3,20.7c0.5,0.4,1.4,0.2,1.8-0.2
|
|
||||||
c0.1-0.1,0.2-0.2,0.3-0.3c0.6-0.6,0.6-1.5,0-2.1c-0.2-0.2-0.3-0.4-0.5-0.5c-1.3-1.4-3.2,0.7-1.9,2.1c0.2,0.2-0.3,0.4,0.7,0.5
|
|
||||||
c0-0.7,0-1.4,0-2.1c0,0.1-0.4,0.2-0.5,0.3c0.6-0.1,1.1-0.2,1.7-0.2c-5.7-3.7-9.2-14.5-9-20.9c0.1-4,1.6-6.7,4.8-9.1
|
|
||||||
c2-1.5,3.6-2.6,4.7-4.9C30.6,6.7,28,5.2,27.2,6.9L27.2,6.9z'/>
|
|
||||||
<path fill='white' d='M9.5,24.4c2.4-2.7,4.9-5.4,7.3-8c2.5-2.8,5.7-7.6,9.9-7.8c-0.5-0.5-1-1-1.5-1.5c0.1,6.8,1.9,13.1,5.3,18.9
|
|
||||||
c1,1.7,3.6,0.2,2.6-1.5c-3.2-5.4-4.8-11.1-4.9-17.4c0-0.8-0.7-1.5-1.5-1.5c-3.6,0.2-5.9,2.1-8.3,4.7c-3.7,3.9-7.3,8-11,12
|
|
||||||
C6.1,23.7,8.2,25.9,9.5,24.4L9.5,24.4z'/>
|
|
||||||
</svg>
|
|
||||||
</svg>
|
|
||||||
)
|
|
||||||
|
|
||||||
const newPostTutorialElement = (
|
|
||||||
<svg width='900' height='900' className='tutorial'>
|
|
||||||
<text x='470' y='50' fill={BRAND_COLOR} fontSize='24'>Create a new post!!</text>
|
|
||||||
<text x='490' y='75' fill={BRAND_COLOR} fontSize='16' children={`press \`${OSX ? '⌘' : '^'} + n\``}/>
|
|
||||||
<svg x='415' y='20' width='400' height='400'>
|
|
||||||
<path fill='white' d='M11.6,14.7c1,5.5,2.9,10.7,5.7,15.5c1,1.7,3.5,0.2,2.6-1.5c-2.6-4.7-4.4-9.6-5.4-14.8
|
|
||||||
C14.1,12,11.3,12.8,11.6,14.7L11.6,14.7z'/>
|
|
||||||
<path fill='white' d='M16.8,17.1c4,0.2,7.6-1.1,10.7-3.6c1.5-1.2-0.6-3.3-2.1-2.1c-2.4,2-5.4,2.9-8.6,2.7C14.9,14,14.9,17,16.8,17.1
|
|
||||||
L16.8,17.1z'/>
|
|
||||||
<path fill='white' d='M13.8,17.6c11.9,3.5,24.1,4.9,36.4,3.9c1.9-0.1,1.9-3.1,0-3c-12.1,0.9-24-0.3-35.6-3.8
|
|
||||||
C12.7,14.1,11.9,17,13.8,17.6L13.8,17.6z'/>
|
|
||||||
</svg>
|
|
||||||
</svg>
|
|
||||||
)
|
|
||||||
|
|
||||||
export default class ArticleTopBar extends React.Component {
|
export default class ArticleTopBar extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props)
|
super(props)
|
||||||
|
|
||||||
this.saveAllHandler = e => {
|
|
||||||
if (isModalOpen()) return true
|
|
||||||
this.handleSaveAllButtonClick(e)
|
|
||||||
}
|
|
||||||
this.focusSearchHandler = e => {
|
|
||||||
if (isModalOpen()) return true
|
|
||||||
this.focusInput(e)
|
|
||||||
}
|
|
||||||
this.newPostHandler = e => {
|
|
||||||
if (isModalOpen()) return true
|
|
||||||
this.handleNewPostButtonClick(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
isTooltipHidden: true,
|
isTooltipHidden: true,
|
||||||
isLinksDropdownOpen: false
|
isLinksDropdownOpen: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount () {
|
|
||||||
this.searchInput = ReactDOM.findDOMNode(this.refs.searchInput)
|
|
||||||
this.linksButton = ReactDOM.findDOMNode(this.refs.links)
|
|
||||||
this.showLinksDropdown = e => {
|
|
||||||
e.preventDefault()
|
|
||||||
e.stopPropagation()
|
|
||||||
if (!this.state.isLinksDropdownOpen) {
|
|
||||||
this.setState({isLinksDropdownOpen: true})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// this.linksButton.addEventListener('click', this.showLinksDropdown)
|
|
||||||
this.hideLinksDropdown = e => {
|
|
||||||
if (this.state.isLinksDropdownOpen) {
|
|
||||||
this.setState({isLinksDropdownOpen: false})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.addEventListener('click', this.hideLinksDropdown)
|
|
||||||
|
|
||||||
// ipc.on('top-save-all', this.saveAllHandler)
|
|
||||||
ipc.on('top-focus-search', this.focusSearchHandler)
|
|
||||||
ipc.on('top-new-post', this.newPostHandler)
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillUnmount () {
|
|
||||||
document.removeEventListener('click', this.hideLinksDropdown)
|
|
||||||
this.linksButton.removeEventListener('click', this.showLinksDropdown())
|
|
||||||
|
|
||||||
// ipc.removeListener('top-save-all', this.saveAllHandler)
|
|
||||||
ipc.removeListener('top-focus-search', this.focusSearchHandler)
|
|
||||||
ipc.removeListener('top-new-post', this.newPostHandler)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleTooltipRequest (e) {
|
handleTooltipRequest (e) {
|
||||||
if (this.searchInput.value.length === 0 && (document.activeElement === this.searchInput)) {
|
if (this.searchInput.value.length === 0 && (document.activeElement === this.searchInput)) {
|
||||||
this.setState({isTooltipHidden: false})
|
this.setState({isTooltipHidden: false})
|
||||||
@@ -126,10 +39,6 @@ export default class ArticleTopBar extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleSearchChange (e) {
|
handleSearchChange (e) {
|
||||||
let { dispatch } = this.props
|
|
||||||
|
|
||||||
// dispatch(setSearchFilter(e.target.value))
|
|
||||||
this.handleTooltipRequest()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSearchClearButton (e) {
|
handleSearchClearButton (e) {
|
||||||
@@ -206,22 +115,6 @@ export default class ArticleTopBar extends React.Component {
|
|||||||
: null
|
: null
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{false ? (
|
|
||||||
<div className='tutorial'>
|
|
||||||
<div onClick={(e) => this.handleTutorialButtonClick(e)} className='clickJammer'/>
|
|
||||||
<svg width='500' height='250' className='finder'>
|
|
||||||
<text x='100' y='25' fontSize='32' fill={BRAND_COLOR}>Also, you can open Finder!!</text>
|
|
||||||
<text x='150' y='55' fontSize='18' fill={BRAND_COLOR} children={'with pressing ' + (OSX ? '`⌘ + Alt + s`' : '`Win + Alt + s`')}/>
|
|
||||||
</svg>
|
|
||||||
<svg width='450' className='global'>
|
|
||||||
<text x='100' y='45' fontSize='24' fill={BRAND_COLOR}>Hope you to enjoy our app :D</text>
|
|
||||||
<text x='50' y='75' fontSize='18' fill={BRAND_COLOR}>Press any key or click to escape tutorial mode</text>
|
|
||||||
</svg>
|
|
||||||
<div className='back'></div>
|
|
||||||
</div>
|
|
||||||
) : null}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class RepositorySection extends React.Component {
|
|||||||
|
|
||||||
handleContextButtonClick (e) {
|
handleContextButtonClick (e) {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
var menu = new Menu()
|
let menu = new Menu()
|
||||||
menu.append(new MenuItem({
|
menu.append(new MenuItem({
|
||||||
label: 'New Folder',
|
label: 'New Folder',
|
||||||
click: () => this.handleNewFolderButtonClick()
|
click: () => this.handleNewFolderButtonClick()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './SideNav.styl'
|
import styles from './SideNav.styl'
|
||||||
import { openModal } from 'browser/lib/modal'
|
import { openModal } from 'browser/main/lib/modal'
|
||||||
import Preferences from '../modals/Preferences'
|
import Preferences from '../modals/Preferences'
|
||||||
import RepositorySection from './RepositorySection'
|
import RepositorySection from './RepositorySection'
|
||||||
import NewRepositoryModal from '../modals/NewRepositoryModal'
|
import NewRepositoryModal from '../modals/NewRepositoryModal'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
import { Provider } from 'react-redux'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
|
import store from '../store'
|
||||||
const remote = require('electron').remote
|
|
||||||
|
|
||||||
class ModalBase extends React.Component {
|
class ModalBase extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
@@ -15,8 +15,6 @@ class ModalBase extends React.Component {
|
|||||||
|
|
||||||
close () {
|
close () {
|
||||||
if (modalBase != null) modalBase.setState({component: null, componentProps: null, isHidden: true})
|
if (modalBase != null) modalBase.setState({component: null, componentProps: null, isHidden: true})
|
||||||
|
|
||||||
remote.getCurrentWebContents().send('list-focus')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
@@ -24,7 +22,9 @@ class ModalBase extends React.Component {
|
|||||||
<div className={'ModalBase' + (this.state.isHidden ? ' hide' : '')}>
|
<div className={'ModalBase' + (this.state.isHidden ? ' hide' : '')}>
|
||||||
<div onClick={(e) => this.close(e)} className='modalBack'/>
|
<div onClick={(e) => this.close(e)} className='modalBack'/>
|
||||||
{this.state.component == null ? null : (
|
{this.state.component == null ? null : (
|
||||||
<this.state.component {...this.state.componentProps} close={this.close}/>
|
<Provider store={store}>
|
||||||
|
<this.state.component {...this.state.componentProps} close={this.close}/>
|
||||||
|
</Provider>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import linkState from 'browser/lib/linkState'
|
|
||||||
import fetchConfig from 'browser/lib/fetchConfig'
|
import fetchConfig from 'browser/lib/fetchConfig'
|
||||||
import hljsTheme from 'browser/lib/hljsThemes'
|
import hljsTheme from 'browser/lib/hljsThemes'
|
||||||
|
|
||||||
@@ -235,7 +234,6 @@ export default class AppSettingTab extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AppSettingTab.prototype.linkState = linkState
|
|
||||||
AppSettingTab.propTypes = {
|
AppSettingTab.propTypes = {
|
||||||
user: PropTypes.shape({
|
user: PropTypes.shape({
|
||||||
name: PropTypes.string
|
name: PropTypes.string
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import linkState from 'browser/lib/linkState'
|
|
||||||
import ExternalLink from 'browser/components/ExternalLink'
|
import ExternalLink from 'browser/components/ExternalLink'
|
||||||
|
|
||||||
export default class ContactTab extends React.Component {
|
export default class ContactTab extends React.Component {
|
||||||
@@ -20,5 +19,3 @@ export default class ContactTab extends React.Component {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ContactTab.prototype.linkState = linkState
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import { connect, Provider } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import linkState from 'browser/lib/linkState'
|
|
||||||
import store from 'browser/main/store'
|
|
||||||
import AppSettingTab from './AppSettingTab'
|
import AppSettingTab from './AppSettingTab'
|
||||||
import ContactTab from './ContactTab'
|
import ContactTab from './ContactTab'
|
||||||
import { closeModal } from 'browser/lib/modal'
|
import { closeModal } from 'browser/main/lib/modal'
|
||||||
|
|
||||||
const APP = 'APP'
|
const APP = 'APP'
|
||||||
const CONTACT = 'CONTACT'
|
const CONTACT = 'CONTACT'
|
||||||
@@ -83,15 +81,4 @@ Preferences.propTypes = {
|
|||||||
dispatch: PropTypes.func
|
dispatch: PropTypes.func
|
||||||
}
|
}
|
||||||
|
|
||||||
Preferences.prototype.linkState = linkState
|
export default connect((x) => x)(Preferences)
|
||||||
|
|
||||||
let RootComponent = connect((x) => x)(Preferences)
|
|
||||||
export default class PreferencesModal extends React.Component {
|
|
||||||
render () {
|
|
||||||
return (
|
|
||||||
<Provider store={store}>
|
|
||||||
<RootComponent/>
|
|
||||||
</Provider>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user