Below are instructions for hosting and building the site and a layout of how the code is organized.
CNX webview is designed to be run as a frontend for cnx-archive.
- If necessary, install Node.js and npm (included with Node.js).
- Run
npm install -g grunt-cli bower
in the command line to install grunt-cli and bower. - From the root
webview
directory, runnpm install
in the command line to install test and build dependencies.
npm install
runsbower install
andgrunt install
, both of which can also be run independentlybower install
downloads front-end dependenciesgrunt install
compiles the Aloha-Editor (which is downloaded by bower)
By default, webview will use cnx-archive and cnx-authoring hosted on cnx.org.
From the root webview
directory, run npm test
.
From the root webview
directory, run grunt dist
.
The dist
directory containing the built site will be added to the root webview
directory.
From the root webview
directory, run npm run-script upgrade
, which executes the following commands:
npm update
bower update
grunt aloha --verbose
- Install nginx
- Run
grunt nginx:start
(usesnginx.development.conf
) - (optional) Install https://github.com/prerender/prerender
- Point your browser to http://localhost:8000
-
Update settings in
src/scripts/settings.js
if necessary to, for example, include the correct Google Analytics ID, and to point to wherevercnxarchive
is being hosted. -
Ensure resources are being served with the correct MIME type, including fonts.
- Example nginx MIME types that may need to be added:
types {
image/svg+xml svg svgz;
font/truetype ttf;
font/opentype otf;
application/font-woff woff;
}
- Configure your server to point at
dist/index.html
(orsrc/index.html
for development)
- Unresolveable URIs should load
dist/index.html
orsrc/index.html
- If not hosting the site from the domain root, update
root
insrc/scripts/settings.js
scripts
,styles
, andimages
routes should be rewritten to the correct paths- Example nginx config:
server {
listen 8000; # dev
listen [::]:8000; # dev ipv6
listen 8001; # production
listen [::]:8001; # production ipv6
server_name _;
# Support both production and dev
set $ROOT "src";
if ($server_port ~ "8001") {
set $ROOT "dist";
}
root /path/to/webview/$ROOT/;
index index.html;
try_files $uri @prerender;
# Proxy resources and exports to cnx.org
# since they are not part of the locally hosted package
location /resources/ {
proxy_pass http://cnx.org;
}
location /exports/ {
proxy_pass http://cnx.org;
}
# For development only
location ~ ^.*/bower_components/(.*)$ {
alias /path/to/webview/bower_components/$1;
}
location ~ ^.*/(data|scripts|styles|images|fonts)/(.*) {
try_files $uri /$1/$2;
}
# Prerender for SEO
location @prerender {
# Support page prerendering for web crawlers
set $prerender 0;
if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest") {
set $prerender 1;
}
if ($args ~ "_escaped_fragment_") {
set $prerender 1;
}
if ($http_user_agent ~ "Prerender") {
set $prerender 0;
}
if ($uri ~ "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent)") {
set $prerender 0;
}
if ($prerender = 1) {
rewrite .* /$scheme://$http_host$request_uri? break;
proxy_pass http://localhost:3000;
}
if ($prerender = 0) {
rewrite .* /index.html break;
}
}
}
bower_components/
3rd Party Libraries (added after install)node_modules/
Node Modules (added after install)dist/
Production version of the site (added after build)src/
Development version of the sitesrc/data/
Hardcoded datasrc/images/
Images used throughout the sitesrc/scripts/
Site scripts and 3rd party librariessrc/scripts/collections
Backbone Collectionssrc/scripts/helpers
Helpers for Handlebars, Backbone, and generic codesrc/scripts/models
Backbone Modelssrc/scripts/modules
Self-contained, reusable Modules used to construct pagessrc/scripts/pages
Backbone Views representing an entire page (or the entire viewport)src/scripts/config.js
Require.js configurationsrc/scripts/loader.coffee
App loader, responsible for setting up global listenerssrc/scripts/main.js
Initial script called by Requirejssrc/scripts/router.coffee
Backbone Routersrc/scripts/session.coffee
Session state singleton (Backbone Model)src/scripts/settings.js
Global application config settings (remains in place after build)src/styles/
App-specific LESS variables and mixinssrc/index.html
App's HTML Pagetest/
Unit tests
This software is subject to the provisions of the GNU Affero General Public License Version 3.0 (AGPL). See license.txt for details. Copyright (c) 2013 Rice University.