Fireplace is a packaged version of the Firefox Marketplace's front-end.
- Chimney
- A bridge between Flue and the actual Zamboni API
- Damper
- A node.js server that serves a browser-friendly version of Fireplace
- Flue
- A mocked-out version of the Marketplace API.
- Hearth
- The source code for Fireplace.
- Inferno
- A build server which generates a packaged version of the Marketplace.
- Smoke Alarm
- A functional test runner for great justice.
- Yule Log
- A fake version of Fireplace to provide the Gaia team with a package that can be shipped and later upgraded to the real Fireplace.
npm install -d
Our dependencies:
nunjucks
: For templatesstylus
: For stylesheets
If you plan on doing compilation (i.e.: you're Wil Clouser), you'll also need
clean-css
: For minifying CSS or whateverrequirejs
: For warming up Spaceheateruglify-js
: For minifying JS and L10n string extraction
Comprehensive Flue documentation can be found in Flue's README.
To create a new Yule Log package for production:
make log
For -dev:
NAME='Dev' DOMAIN='marketplace-dev.allizom.org' make log
For stage:
NAME='Stage' DOMAIN='marketplace.allizom.org' make log
brew install node
And make sure that /usr/local/share/npm/bin
is in your $PATH
, ร la: ::
export PATH=/usr/local/share/npm/bin:$PATH
From the terminal, run the following command
node damper.js
This will start a local server on 0.0.0.0:8675 by default.
To control the hostname and port you can use the following otions
node damper.js --host 127.0.0.1 --port 8888
In addition to an HTTP server, the damper will also run a Stylus watcher (to recompile CSS as it's edited) and a template watcher (to recompile templates as they're edited).
For instructions on running Flue (the mock API server), please see the Flue docs.
To run the compilation process, which compiles templates, CSS, and locale
files, run the damper with the --compile
argument:
node damper.js --compile
The damper will not start a local server in this case, but a strings.po
file
will be generated.
If you need to compile include files (i.e.: for Space Heater or a less HTTP-
heavy version of the project), run make includes
. This will generate two files:
hearth/media/include.js
hearth/media/css/include.css
The CSS in include.css
is generated in the order in which CSS files are
included in hearth/index.html
.
include.js
uses a lightweight AMD loader (rather than require.js). This keeps
file size down and also makes it possible to name-mangle internal keywords which
otherwise wouldn't be minifiable. Note that the only safe globals are require
and define
---using any other non-browser globals will result in errors. I.e.:
accessing _
without requiring 'underscore'
will cause the code to fail. Also
note that all modules must include a name as the first parameter.
Note that you need the dev dependencies to run this compilation. You can get
them by running npm install -d
.
A detailed guide to extracting strings and creating JS language packs can be found on the wiki.
- If new templates or
.styl
files are added, they will not be recognized until the damper is restarted. Deleted files may also cause problems.
Install casper
brew install casperjs
Load http://localhost:8675/tests in your browser.
Before you run the functional tests, make sure your settings_local.js
file has
the subset of keys found in
settings_travis.js
.
make test
numberfmt
doesn't work (should probably be integrated with L10n pluralization)
If you want to run Fireplace locally in a way that's similar to
production, you can use nginx.
This snippet is an nginx.conf
example. You'll probably want to
edit the port numbers to match your own configuration.
Snippet:
http {
...
server {
# Listening on port 80 is nice but you have to start nginx
# with the right permissions.
listen 80 default;
# Set a host name. You also have to alias this host to
# 127.0.0.1 in /etc/hosts
server_name fireplace.local;
location /mozpay/ {
# This is an optional alias to your local Webpay server
# so you can process payments.
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
}
location / {
# This is an alias to the local Fireplace server (damper)
# to mimic a hosted Fireplace.
proxy_pass http://localhost:8675;
proxy_set_header Host $host;
}
location /developers/ {
# This is an optional alias to your local Zamboni so
# you can use the DevHub.
proxy_pass http://localhost:8002;
proxy_set_header Host $host;
}
location /users {
# Allows login to work on the devhub.
proxy_set_header Host $host;
if ($http_referer ~ '^http://[^/]*?/developers') {
proxy_pass http://localhost:8002;
break;
}
proxy_pass http://localhost:8675;
}
location /media {
# Conditional proxying of media for devhub (Zamboni) and fireplace.
proxy_set_header Host $host;
if ($http_referer ~ '^http://[^/]*?/(developers|media/css/mkt|media/css/devreg)') {
proxy_pass http://localhost:8002;
break;
}
proxy_pass http://localhost:8675;
}
location /tmp {
# Serve uploaded images from Zamboni.
proxy_set_header Host $host;
proxy_pass http://localhost:8002;
}
location /jsi18n.js {
# This serves i18n from Zamboni.
proxy_set_header Host $host;
proxy_pass http://localhost:8002;
}
}
}