mirror of
https://github.com/sstent/node.git
synced 2026-01-27 15:41:43 +00:00
updated app
This commit is contained in:
105
node_modules/derby-examples/gallery/src/app/index.coffee
generated
vendored
Normal file
105
node_modules/derby-examples/gallery/src/app/index.coffee
generated
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
parseUrl = require('url').parse
|
||||
{get, view, ready} = app = require('derby').createApp module
|
||||
|
||||
fillDimension = (max, side, otherSide) ->
|
||||
return if side >= otherSide
|
||||
max
|
||||
else
|
||||
side * max / otherSide
|
||||
|
||||
photoDimension = (obj, source, size = 's', type) ->
|
||||
if source is 'flickr'
|
||||
if type is 'width'
|
||||
side = obj.o_width
|
||||
otherSide = obj.o_height
|
||||
else
|
||||
side = obj.o_height
|
||||
otherSide = obj.o_width
|
||||
if size is 's'
|
||||
return 75
|
||||
if size is 'm'
|
||||
return fillDimension 240, side, otherSide
|
||||
return
|
||||
|
||||
photoDimensionFn = (type) ->
|
||||
return (obj, source, size, scale = 1) ->
|
||||
return unless obj
|
||||
return Math.round photoDimension(obj, source, size, type) * scale
|
||||
|
||||
photoSrc = (obj, source, size = 's') ->
|
||||
return unless obj
|
||||
if source is 'flickr'
|
||||
return "http://farm#{obj.farm}.staticflickr.com/" +
|
||||
"#{obj.server}/#{obj.id}_#{obj.secret}_#{size}.jpg"
|
||||
return
|
||||
|
||||
view.fn 'photoWidth', photoDimensionFn 'width'
|
||||
view.fn 'photoHeight', photoDimensionFn 'height'
|
||||
view.fn 'photoSrc', photoSrc
|
||||
|
||||
preCache = (obj, source, callback) ->
|
||||
src = photoSrc obj, source, 'm'
|
||||
img = document.createElement 'img'
|
||||
img.style.display = 'none'
|
||||
img.src = src
|
||||
cancelled = false
|
||||
callback.cancel = -> cancelled = true
|
||||
finish = ->
|
||||
document.body.removeChild img
|
||||
callback() unless cancelled
|
||||
count = 2
|
||||
wait = -> --count || finish()
|
||||
img.onload = wait
|
||||
setTimeout wait, 50
|
||||
document.body.appendChild img
|
||||
|
||||
get '/:source/:type/:id/:image?', (page, model, params, next) ->
|
||||
{source, type, id, image, query} = params
|
||||
{search} = parseUrl params.url
|
||||
next() unless source is 'flickr'
|
||||
pageIndex = if query.page then query.page - 1 else 0
|
||||
model.fetch "#{source}.#{type}.id_#{id}.photos.pages.#{pageIndex}", (err, photos) ->
|
||||
model.ref '_pages', photos.parent()
|
||||
model.ref '_page', '_pages', '_selectedPage'
|
||||
|
||||
model.set '_toggle', 0
|
||||
model.set '_fade0', 1
|
||||
model.set '_fade1', 0
|
||||
|
||||
model.ref '_image0', '_page', '_selected0'
|
||||
model.ref '_image1', '_page', '_selected1'
|
||||
|
||||
model.set '_selectedPage', pageIndex
|
||||
model.set '_selected0', image
|
||||
page.render {source, search}
|
||||
|
||||
lastLoad = null
|
||||
get from: '/:source/:type/:id/:image?', to: '/:source/:type/:id/:image?',
|
||||
(model, params, next) ->
|
||||
{source, type, id, image, query} = params
|
||||
next() unless source is 'flickr'
|
||||
pageIndex = if query.page then query.page - 1 else 0
|
||||
model.set '_selectedPage', pageIndex
|
||||
|
||||
lastLoad.cancel() if lastLoad
|
||||
lastLoad = ->
|
||||
lastLoad = null
|
||||
toggleValue = +!model.get('_toggle')
|
||||
model.set '_toggle', toggleValue
|
||||
model.set '_selected' + toggleValue, image
|
||||
model.set '_fade' + toggleValue, 1
|
||||
preCache model.get('_page.' + image), source, lastLoad
|
||||
|
||||
ready (model) ->
|
||||
|
||||
app.select = (e, el) ->
|
||||
model.set '_fade' + model.get('_toggle'), 0
|
||||
url = model.at(el).leaf() + window.location.search
|
||||
view.history.push url
|
||||
|
||||
model.set '_showReconnect', true
|
||||
app.connect = ->
|
||||
model.set '_showReconnect', false
|
||||
setTimeout (-> model.set '_showReconnect', true), 1000
|
||||
model.socket.socket.connect()
|
||||
app.reload = -> window.location.reload()
|
||||
61
node_modules/derby-examples/gallery/src/server/flickr.coffee
generated
vendored
Normal file
61
node_modules/derby-examples/gallery/src/server/flickr.coffee
generated
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
request = require 'request'
|
||||
|
||||
FLICKR_API = 'http://api.flickr.com/services/rest/'
|
||||
|
||||
exports.setup = (store, options) ->
|
||||
flickr = new Flickr options
|
||||
|
||||
# Prefacing the ids with 'id_' is needed, since photosets
|
||||
# start with a number, and paths must only start with a
|
||||
# letter or underscore, like JS variable names
|
||||
|
||||
store.route 'get', 'flickr.user.id_*.photos.pages.*', (username, page, done) ->
|
||||
flickr.userPublicPhotos username, page, done
|
||||
|
||||
store.route 'get', 'flickr.photoset.id_*.photos.pages.*', (id, page, done) ->
|
||||
flickr.setPhotos id, page, done
|
||||
|
||||
|
||||
Flickr = (options) ->
|
||||
@key = options.key
|
||||
@userIds = {}
|
||||
return
|
||||
|
||||
Flickr:: =
|
||||
|
||||
get: (qs, callback) ->
|
||||
qs.format = 'json'
|
||||
qs.api_key = @key
|
||||
qs.per_page = 20
|
||||
qs.extras = 'o_dims'
|
||||
request {url: FLICKR_API, qs}, (err, res, body) ->
|
||||
return callback err if err
|
||||
unless (match = /jsonFlickrApi\((.*)\)/.exec body) && (body = match[1])
|
||||
return callback new Erorr 'Unknown Flickr response'
|
||||
data = JSON.parse body
|
||||
unless data.stat == 'ok'
|
||||
return callback new Error data.message
|
||||
callback null, data
|
||||
|
||||
userId: (username, callback) ->
|
||||
if id = @userIds[username]
|
||||
return callback null, id
|
||||
qs = {method: 'flickr.people.findByUsername', username}
|
||||
@get qs, (err, body) =>
|
||||
return callback err if err
|
||||
id = @userIds[username] = body.user.id
|
||||
callback null, id
|
||||
|
||||
userPublicPhotos: (username, page, callback) ->
|
||||
@userId username, (err, user_id) =>
|
||||
return callback err if err
|
||||
qs = {method: 'flickr.people.getPublicPhotos', user_id, page: +page + 1}
|
||||
@get qs, (err, body) ->
|
||||
return callback err if err
|
||||
callback null, body.photos.photo, -1
|
||||
|
||||
setPhotos: (photoset_id, page, callback) ->
|
||||
qs = {method: 'flickr.photosets.getPhotos', photoset_id, page: +page + 1}
|
||||
@get qs, (err, body) ->
|
||||
return callback err if err
|
||||
callback null, body.photoset.photo, -1
|
||||
53
node_modules/derby-examples/gallery/src/server/index.coffee
generated
vendored
Normal file
53
node_modules/derby-examples/gallery/src/server/index.coffee
generated
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
http = require 'http'
|
||||
path = require 'path'
|
||||
express = require 'express'
|
||||
gzippo = require 'gzippo'
|
||||
derby = require 'derby'
|
||||
app = require '../app'
|
||||
flickr = require './flickr'
|
||||
serverError = require './serverError'
|
||||
|
||||
|
||||
## SERVER CONFIGURATION ##
|
||||
|
||||
ONE_YEAR = 1000 * 60 * 60 * 24 * 365
|
||||
root = path.dirname path.dirname __dirname
|
||||
publicPath = path.join root, 'public'
|
||||
|
||||
(expressApp = express())
|
||||
.use(express.favicon())
|
||||
# Gzip static files and serve from memory
|
||||
.use(gzippo.staticGzip publicPath, maxAge: ONE_YEAR)
|
||||
|
||||
# Gzip dynamically rendered content
|
||||
.use(express.compress())
|
||||
|
||||
# Uncomment to add form data parsing support
|
||||
# .use(express.bodyParser())
|
||||
# .use(express.methodOverride())
|
||||
|
||||
# Uncomment and supply secret to add Derby session handling
|
||||
# Derby session middleware creates req.model and subscribes to _session
|
||||
# .use(express.cookieParser 'secret_sauce')
|
||||
# .use(express.session cookie: {maxAge: ONE_YEAR})
|
||||
# .use(app.session())
|
||||
|
||||
# The router method creates an express middleware from the app's routes
|
||||
.use(app.router())
|
||||
.use(expressApp.router)
|
||||
.use(serverError root)
|
||||
|
||||
module.exports = server = http.createServer expressApp
|
||||
|
||||
|
||||
## SERVER ONLY ROUTES ##
|
||||
|
||||
expressApp.all '*', (req) ->
|
||||
throw "404: #{req.url}"
|
||||
|
||||
|
||||
## STORE SETUP ##
|
||||
|
||||
store = app.createStore listen: server
|
||||
|
||||
flickr.setup store, key: '86958e03c183fcb1b7fddfeb19f3a423'
|
||||
18
node_modules/derby-examples/gallery/src/server/serverError.coffee
generated
vendored
Normal file
18
node_modules/derby-examples/gallery/src/server/serverError.coffee
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
derby = require 'derby'
|
||||
{isProduction} = derby.util
|
||||
|
||||
module.exports = (root) ->
|
||||
staticPages = derby.createStatic root
|
||||
|
||||
return (err, req, res, next) ->
|
||||
return next() unless err?
|
||||
|
||||
console.log(if err.stack then err.stack else err)
|
||||
|
||||
## Customize error handling here ##
|
||||
message = err.message || err.toString()
|
||||
status = parseInt message
|
||||
if status is 404
|
||||
staticPages.render '404', res, {url: req.url}, 404
|
||||
else
|
||||
res.send if 400 <= status < 600 then status else 500
|
||||
Reference in New Issue
Block a user