Add back switching of themes.

This commit is contained in:
Dorian 2015-07-12 18:11:11 -04:00
parent 9305536fc9
commit 0d9a3dceae
10 changed files with 445 additions and 2719 deletions

2956
dist/rookeries.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -6,10 +6,15 @@ Rookeries client - Action events for journal entries..
@author Dorian Pula [dorian.pula@amber-penguin-software.ca] @author Dorian Pula [dorian.pula@amber-penguin-software.ca]
### ###
'use strict' "use strict"
Reflux = require('reflux') Reflux = require "reflux"
JournalEntryActions = Reflux.createActions(["viewEntry", "loadEntry", "showError"]) Actions = Reflux.createActions [
"viewEntry"
"loadEntry"
"showError"
"switchTheme"
]
module.exports = JournalEntryActions module.exports = Actions

View File

@ -6,20 +6,19 @@ Rookeries client app
@author Dorian Pula [dorian.pula@amber-penguin-software.ca] @author Dorian Pula [dorian.pula@amber-penguin-software.ca]
### ###
'use strict' "use strict"
React = require('react') React = require "react"
Router = require('react-router') Router = require "react-router"
AppRoutes = require('./routes.cjsx') AppRoutes = require "./routes.cjsx"
UserLoginModalTrigger = require('./views/user_login_modal.cjsx') # UserLoginModalTrigger = require('./views/user_login_modal.cjsx')
UserRegistrationModalTrigger = require('./views/user_registration.cjsx') # UserRegistrationModalTrigger = require('./views/user_registration.cjsx')
FeatureUnavailableModalTrigger = require('./views/feature_unavailable.cjsx') ThemeSwitchView = require "./views/theme_switcher_button.cjsx"
require('./views/theme_switcher.cjsx')
Router.run(AppRoutes, Router.HistoryLocation, (Root) => Router.run(AppRoutes, Router.HistoryLocation, (Root) =>
React.render(<Root />, document.getElementById("markdown-target")) React.render(<Root />, document.getElementById("markdown-target"))
) )
React.render(UserLoginModalTrigger, document.getElementById('user-login-trigger')) # React.render(UserLoginModalTrigger, document.getElementById('user-login-trigger'))
React.render(UserRegistrationModalTrigger, document.getElementById('user-registration-trigger')) # React.render(UserRegistrationModalTrigger, document.getElementById('user-registration-trigger'))
React.render(FeatureUnavailableModalTrigger, document.getElementById('theme-switcher')) React.render(<ThemeSwitchView />, document.getElementById("theme-switcher"))

View File

@ -11,9 +11,7 @@ Rookeries client app - Route setup
React = require('react') React = require('react')
Router = require('react-router') Router = require('react-router')
App = require './views/app_view.coffee'
JournalMarkdownView = require('./views/journal_markdown_viewer.cjsx') JournalMarkdownView = require('./views/journal_markdown_viewer.cjsx')
MissingPageView = require('./views/error_page.cjsx')
AppRoutes = ( AppRoutes = (
<Router.Route handler={JournalMarkdownView} path="/"> <Router.Route handler={JournalMarkdownView} path="/">

View File

@ -6,31 +6,33 @@ Rookeries client - Journal entry store.
@author Dorian Pula [dorian.pula@amber-penguin-software.ca] @author Dorian Pula [dorian.pula@amber-penguin-software.ca]
### ###
'use strict' "use strict"
Reflux = require('reflux') Reflux = require "reflux"
request = require('superagent') request = require "superagent"
Actions = require "../actions.coffee"
JournalEntryActions = require('../actions/journal_actions.coffee')
JournalEntryStore = Reflux.createStore( JournalEntryStore = Reflux.createStore(
init: () -> init: () ->
console.log('Initialize JournalEntryStore.') console.log('Initialize JournalEntryStore.')
@listenTo(JournalEntryActions.loadEntry, @loadEntry) @listenTo(Actions.loadEntry, @loadEntry)
loadEntry: (id) -> loadEntry: (id) ->
console.log('Request loading ') console.log("Request loading...")
id = "landing" if id is undefined if id is undefined
id = "landing"
request.get("/api/docs/#{id}") request.get("/api/docs/#{id}")
.accept('json') .accept('json')
.end( .end(
(err, res) -> (err, res) ->
if (res.ok) if (res.ok)
console.info("Received JSON #{res.status} - #{res.text}") console.info("Received JSON #{res.status} - #{res.text}")
JournalEntryActions.viewEntry({name: res.body.name, page_content: res.body.page_content}) Actions.viewEntry({name: res.body.name, page_content: res.body.page_content})
else else
console.error("Error getting document JSON - #{res.status} - #{res.text} - Actual #{err}") console.error("Error getting document JSON - #{res.status} - #{res.text} - Actual #{err}")
JournalEntryActions.showError({status: res.status, message: res.text, actual: err, title: res.body.error.message}) Actions.showError({status: res.status, message: res.text, actual: err, title: res.body.error.message})
) )
) )

View File

@ -0,0 +1,39 @@
###
Rookeries client - Theme switcher entry store.
@copyright (c) Copyright 2013-2015 Dorian Pula
@license AGPL v3
@author Dorian Pula [dorian.pula@amber-penguin-software.ca]
###
"use strict"
Reflux = require "reflux"
request = require "superagent"
Actions = require "../actions.coffee"
ThemeSwitchStore = Reflux.createStore(
init: () ->
console.log('Initialize ThemeSwitchStore.')
@listenTo(Actions.switchTheme, @switchTheme)
switchTheme: () ->
console.log('Theme switched ')
current_themes = document.body.classList
console.log "Current themes are #{current_themes}"
# TODO Implement logic to switch between "daytime" and "evening" themes in a nicer manner.
# TODO Store the current theme in local storage somewhere...
if "daytime" in current_themes
current_themes.remove("daytime")
current_themes.add("evening")
else
current_themes.remove("evening")
current_themes.add("daytime")
)
module.exports = ThemeSwitchStore

View File

@ -1,14 +0,0 @@
React = require "react/addons"
{div, h1} = React.DOM
Router = require('react-router')
App = React.createClass
render: ->
(div {}, [
h1 {}, "App"
Router.RouteHandler
])
module.exports = App

View File

@ -1,47 +0,0 @@
###
Rookeries client - Temporary unavailable modal.
@copyright (c) Copyright 2013-2015 Dorian Pula
@license AGPL v3
@author Dorian Pula [dorian.pula@amber-penguin-software.ca]
###
'use strict'
React = require('react')
Bootstrap = require('react-bootstrap')
FontAwesome = require('react-fontawesome')
FeatureUnavailableModal = React.createClass(
render: () ->
console.log('Render UserRegistrationModal view.')
return(
<Bootstrap.Modal {...@props} title='Feature Unavailable' animation={false}>
<div className="modal-body">
<Bootstrap.Alert bsStyle='warning'>
Feature currently unavailable.
</Bootstrap.Alert>
</div>
<div className="modal-footer">
<Bootstrap.Button bsStyle="warning" onClick={this.props.onRequestHide}>OK</Bootstrap.Button>
</div>
</Bootstrap.Modal>
)
)
FeatureUnavailableModalTrigger = (
<Bootstrap.ModalTrigger {...@props} modal={<FeatureUnavailableModal />} >
<div className="text-center muted hoverable">
<FontAwesome name='eye' />
&nbsp;
Change to [ alternative_theme ] theme
</div>
</Bootstrap.ModalTrigger>
)
module.exports = FeatureUnavailableModalTrigger

View File

@ -8,12 +8,12 @@ Rookeries client - Markdown controller to view a journal entry.
'use strict' 'use strict'
React = require('react') React = require 'react'
Reflux = require('reflux') Reflux = require 'reflux'
marked = require('marked') marked = require 'marked'
Router = require('react-router') Router = require 'react-router'
JournalEntryActions = require('../actions/journal_actions.coffee') Actions = require "../actions.coffee"
JournalEntryStore = require('../stores/journal_entry_store.coffee') JournalEntryStore = require('../stores/journal_entry_store.coffee')
@ -35,19 +35,19 @@ JournalMarkdownView = React.createClass(
componentDidMount: () -> componentDidMount: () ->
console.log('Mount JournalMarkdownView.') console.log('Mount JournalMarkdownView.')
@listenTo(JournalEntryActions.viewEntry, @onStatusChange) @listenTo(Actions.viewEntry, @onStatusChange)
@listenTo(JournalEntryActions.showError, @onErrorStatus) @listenTo(Actions.showError, @onErrorStatus)
pageToLoad = @getParams().id pageToLoad = @getParams().id
console.log("Trigger JournalEntryAction.loadEntry event - #{pageToLoad}.") console.log("Trigger JournalEntryAction.loadEntry event - #{pageToLoad}.")
JournalEntryActions.loadEntry(pageToLoad) Actions.loadEntry(pageToLoad)
statics: { statics: {
willTransitionTo: (transition, params, query, callback) -> willTransitionTo: (transition, params, query, callback) ->
console.log('Transition for JournalMarkdownView triggered.') console.log('Transition for JournalMarkdownView triggered.')
pageToLoad = params.id pageToLoad = params.id
console.log("Trigger JournalEntryAction.loadEntry event - #{pageToLoad}.") console.log("Trigger JournalEntryAction.loadEntry event - #{pageToLoad}.")
JournalEntryActions.loadEntry(pageToLoad) Actions.loadEntry(pageToLoad)
callback() callback()
} }

View File

@ -0,0 +1,34 @@
###
Rookeries client - Temporary unavailable modal.
@copyright (c) Copyright 2013-2015 Dorian Pula
@license AGPL v3
@author Dorian Pula [dorian.pula@amber-penguin-software.ca]
###
"use strict"
React = require "react"
Bootstrap = require "react-bootstrap"
FontAwesome = require "react-fontawesome"
Actions = require "../actions.coffee"
ThemeSwitchStore = require "../stores/theme_switcher_store.coffee"
ThemeSwitchView = React.createClass(
switchTheme: () ->
console.log("Switch theme")
Actions.switchTheme()
render: () ->
console.log("Render UserRegistrationModal view.")
return (
<div className="text-center muted hoverable" onClick=@switchTheme>
<FontAwesome name="eye" />
&nbsp; Change to [ alternative_theme ] theme
</div>
)
)
module.exports = ThemeSwitchView