mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
var app = require('derby').createApp(module)
|
|
, get = app.get
|
|
, view = app.view
|
|
, ready = app.ready
|
|
, start
|
|
|
|
// ROUTES //
|
|
|
|
start = +new Date()
|
|
|
|
// Derby routes can be rendered on the client and the server
|
|
get('/:roomName?', function(page, model, params) {
|
|
var roomName = params.roomName || 'home'
|
|
|
|
// Subscribes the model to any updates on this room's object. Calls back
|
|
// with a scoped model equivalent to:
|
|
// room = model.at('rooms.' + roomName)
|
|
model.subscribe('rooms.' + roomName, function(err, room) {
|
|
model.ref('_room', room)
|
|
|
|
// setNull will set a value if the object is currently null or undefined
|
|
room.setNull('welcome', 'Welcome to ' + roomName + '!')
|
|
|
|
room.incr('visits')
|
|
|
|
// This value is set for when the page initially renders
|
|
model.set('_timer', '0.0')
|
|
// Reset the counter when visiting a new route client-side
|
|
start = +new Date()
|
|
|
|
// Render will use the model data as well as an optional context object
|
|
page.render({
|
|
roomName: roomName
|
|
, randomUrl: parseInt(Math.random() * 1e9).toString(36)
|
|
})
|
|
})
|
|
})
|
|
|
|
|
|
// CONTROLLER FUNCTIONS //
|
|
|
|
ready(function(model) {
|
|
var timer
|
|
|
|
// Expose the model as a global variable in the browser. This is fun in
|
|
// development, but it should be removed when writing an app
|
|
window.model = model
|
|
|
|
// Exported functions are exposed as a global in the browser with the same
|
|
// name as the module that includes Derby. They can also be bound to DOM
|
|
// events using the "x-bind" attribute in a template.
|
|
exports.stop = function() {
|
|
|
|
// Any path name that starts with an underscore is private to the current
|
|
// client. Nothing set under a private path is synced back to the server.
|
|
model.set('_stopped', true)
|
|
clearInterval(timer)
|
|
}
|
|
|
|
exports.start = function() {
|
|
model.set('_stopped', false)
|
|
timer = setInterval(function() {
|
|
model.set('_timer', (((+new Date()) - start) / 1000).toFixed(1))
|
|
}, 100)
|
|
}
|
|
exports.start()
|
|
|
|
|
|
model.set('_showReconnect', true)
|
|
exports.connect = function() {
|
|
// Hide the reconnect link for a second after clicking it
|
|
model.set('_showReconnect', false)
|
|
setTimeout(function() {
|
|
model.set('_showReconnect', true)
|
|
}, 1000)
|
|
model.socket.socket.connect()
|
|
}
|
|
|
|
exports.reload = function() {
|
|
window.location.reload()
|
|
}
|
|
|
|
})
|