Commit ddeae2d3 authored by Christian's avatar Christian

milestone 0.4.0

parent 2f30e97a
{
"maxerr": 50,
"bitwise": true,
"camelcase": false,
"curly": true,
"eqeqeq": true,
"forin": true,
"immed": false,
"indent": 4,
"latedef": false,
"newcap": false,
"noarg": true,
"noempty": true,
"nonew": false,
"plusplus": false,
"quotmark": "single",
"undef": true,
"unused": true,
"strict": false,
"trailing": false,
"asi": false,
"boss": false,
"debug": false,
"eqnull": false,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"funcscope": false,
"globalstrict": true,
"iterator": false,
"lastsemic": false,
"laxbreak": false,
"laxcomma": false,
"loopfunc": false,
"multistr": false,
"proto": false,
"scripturl": false,
"smarttabs": false,
"shadow": false,
"sub": false,
"supernew": false,
"validthis": false,
"browser": true,
"couch": false,
"devel": true,
"dojo": false,
"jquery": false,
"mootools": false,
"node": false,
"nonstandard": false,
"prototypejs": false,
"rhino": false,
"worker": false,
"wsh": false,
"yui": false,
"nomen": false,
"onevar": false,
"passfail": false,
"white": false,
"globals": {
"Ember": true,
"Dygraph": true,
"$": true,
"jQuery": true,
"GLOBE": true,
"Em": true,
"moment": true,
"Handlebars": true,
"prepareForTesting": true
}
}
\ No newline at end of file
......@@ -12,7 +12,7 @@ module.exports = function(grunt) {
// Default task(s).
var cleanBuild = ['clean:build'];
var defaultTasks = ['env:dev', 'clean:tmp', 'copy:tmp', 'preprocess', 'regex-replace', 'emberTemplates', 'concat:dev', 'sass', 'cssmin', 'copy:assets'];
var standaloneTasks = ['env:prod', 'clean:tmp', 'copy:tmp', 'clean:standalone', 'preprocess', 'regex-replace', 'emberTemplates', 'concat:prod', 'uglify', 'sass', 'cssmin', 'copy:standalone'];
var standaloneTasks = ['env:prod', 'clean:tmp', 'eslint', 'copy:tmp', 'clean:standalone', 'preprocess', 'regex-replace', 'emberTemplates', 'concat:prod', 'uglify', 'sass', 'cssmin', 'copy:standalone'];
var requiredWatchTasks = ['env:dev', 'clean:tmp', 'copy:tmp', 'preprocess', 'regex-replace', 'emberTemplates'];
/*
......@@ -26,14 +26,16 @@ module.exports = function(grunt) {
// helper methods
var prefixEach = function(array, prefix){
var newArray = [];
for(var itemIndex = 0, max = array.length; itemIndex < max; itemIndex++){
array[itemIndex] = prefix + array[itemIndex];
newArray[itemIndex] = prefix + array[itemIndex];
}
return array;
return newArray;
};
// application files
var applicationFiles = [
var applicationFiles = [],
theApplicationFiles = [
// intro
'js/application/intro.js',
......@@ -45,20 +47,22 @@ module.exports = function(grunt) {
'js/helpers/formatter.js',
'js/helpers/util.js',
'js/helpers/handlebarsHelper.js',
'js/helpers/dataTablesRenderer.js',
// controllers
'js/controllers/ApplicationController.js',
'js/controllers/IndexController.js',
'js/controllers/Top10Controller.js',
'js/controllers/RelayDetailController.js',
'js/controllers/BridgeDetailController.js',
'js/controllers/SummarySearchController.js',
// routes
'js/routes/Router.js',
'js/routes/IndexRoute.js',
'js/routes/Top10Route.js',
'js/routes/SummarySearchRoute.js',
'js/routes/RelayDetailRoute.js',
'js/routes/BridgeDetailRoute.js',
'js/routes/StaticRoutes.js',
// models
'js/models/defaults.js',
......@@ -68,12 +72,13 @@ module.exports = function(grunt) {
'js/models/OnionooBandwidthHistory.js',
'js/models/OnionooWeightsHistory.js',
// components
'js/components/AlertBoxComponent.js',
'js/components/LoadingIndicatorComponent.js',
// views
'js/views/LoadingIndicatorView.js',
'js/views/HistoryGraphView.js',
'js/views/ToggleEnableView.js',
'js/views/RelaySummariesView.js',
'js/views/AlertView.js'
'js/views/SummariesView.js',
];
// vendor files
......@@ -83,7 +88,7 @@ module.exports = function(grunt) {
'js/vendor/modernizr-2.6.2.min.js',
'js/vendor/sha1.js',
'js/vendor/moment/moment.min.js',
'js/vendor/jquery/jquery-1.10.1.js',
'js/vendor/jquery/jquery-1.10.2.js',
'js/vendor/jquery-deparam/jquery-deparam.js',
'js/vendor/datatables/jquery.dataTables.js',
'js/vendor/dygraph/dygraph-combined.js',
......@@ -91,19 +96,17 @@ module.exports = function(grunt) {
// emberjs
'js/vendor/handlebars-runtime/handlebars.runtime-1.0.0.js',
'js/vendor/ember/ember.js',
'js/vendor/ember/ember-1.1.2.js',
// foundation
'js/vendor/zepto/zepto.js',
'js/vendor/foundation/foundation.min.js',
'js/vendor/foundation/foundation.tooltips.js'
// qtip2
'js/vendor/qtip2/jquery.qtip.min.js',
],
prod: [
// vendor libs
'js/vendor/modernizr-2.6.2.min.js',
'js/vendor/sha1.js',
'js/vendor/moment/moment.min.js',
'js/vendor/jquery/jquery-1.10.1.min.js',
'js/vendor/jquery/jquery-1.10.2.min.js',
'js/vendor/jquery-deparam/jquery-deparam.min.js',
'js/vendor/datatables/jquery.dataTables.min.js',
'js/vendor/dygraph/dygraph-combined.js',
......@@ -112,18 +115,16 @@ module.exports = function(grunt) {
// emberjs
'js/vendor/handlebars-runtime/handlebars.runtime-1.0.0.js',
// TODO .min or .prod
'js/vendor/ember/ember.js',
'js/vendor/ember/ember-1.1.2.min.js',
// foundation
'js/vendor/zepto/zepto.js',
'js/vendor/foundation/foundation.min.js',
'js/vendor/foundation/foundation.tooltips.js'
// qtip2
'js/vendor/qtip2/jquery.qtip.min.js',
]
};
vendorFiles.dev = prefixEach(vendorFiles.dev, srcPath);
vendorFiles.prod = prefixEach(vendorFiles.prod, tmpPath);
applicationFiles = prefixEach(applicationFiles, tmpPath);
applicationFiles = prefixEach(theApplicationFiles, tmpPath);
// clean task
gruntCfg['clean'] = {
......@@ -132,6 +133,13 @@ module.exports = function(grunt) {
build: [ distPath, tmpPath, releasePath ]
};
gruntCfg['eslint'] = {
target: prefixEach(theApplicationFiles, srcPath),
options: {
config: 'eslint.json'
}
};
// copy files task
gruntCfg['copy'] = {
standalone: {
......@@ -184,7 +192,7 @@ module.exports = function(grunt) {
},
hbs:{
files: [ srcPath + 'js/templates/*.handlebars'],
tasks: requiredWatchTasks.concat(['emberTemplates'])
tasks: requiredWatchTasks.concat(['emberTemplates', 'concat:dev'])
},
css:{
files: [ srcPath + 'css/*.css' ],
......@@ -212,7 +220,7 @@ module.exports = function(grunt) {
files: {}
}
};
gruntCfg['emberTemplates']['compile']['files'][tmpPath+ 'js/templates/<%= pkg.name %>.templates.js'] = tmpPath + 'js/templates/*.handlebars';
gruntCfg['emberTemplates']['compile']['files'][tmpPath+ 'js/templates/<%= pkg.name %>.templates.js'] = tmpPath + 'js/templates/**/*.handlebars';
// concat files task
gruntCfg['concat'] = {
......@@ -249,7 +257,7 @@ module.exports = function(grunt) {
files: {}
}
};
gruntCfg['sass']['dev']['files'][tmpPath + 'css/style.css'] = tmpPath + 'css/style.scss';
gruntCfg['sass']['dev']['files'][tmpPath + 'css/style.css'] = tmpPath + 'css/new-style.scss';
// minify css taks
gruntCfg['cssmin'] = {
......@@ -265,10 +273,10 @@ module.exports = function(grunt) {
}
};
gruntCfg['cssmin']['combine']['files'][distPath + '<%= pkg.name %>.css'] = [
tmpPath + 'css/normalize.css',
tmpPath + 'css/foundation.min.css',
tmpPath + 'css/style.css',
tmpPath + 'css/country-flags.css'
tmpPath + 'css/pure-min.css',
tmpPath + 'css/new-style.css',
tmpPath + 'css/country-flags.css',
tmpPath + 'css/jquery.qtip.min.css'
];
// create archive task
......@@ -369,6 +377,7 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-preprocess');
grunt.loadNpmTasks('grunt-env');
grunt.loadNpmTasks('grunt-regex-replace');
grunt.loadNpmTasks('grunt-eslint');
standaloneTasks= cleanBuild.concat(standaloneTasks).concat(['clean:tmp']);
defaultTasks = cleanBuild.concat(defaultTasks).concat(['clean:tmp']);
......
......@@ -28,14 +28,18 @@ Globe is open-sourced software licensed under the [MIT license](http://opensourc
Project | License
--- | ---
[Entypo pictorgrams](http://www.entypo.com/) | [CC BY 3.0](http://creativecommons.org/licenses/by-sa/3.0/)
[Entypo font](http://www.entypo.com/) | [SIL Open Font License](http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL)
[Foundation](http://foundation.zurb.com/) | [MIT License](http://opensource.org/licenses/MIT)
[Ember.js](http://emberjs.com/) | [MIT License](http://opensource.org/licenses/MIT)
[Pure](http://purecss.io/) | [Yahoo! Inc. BSD license](https://github.com/yui/pure/blob/master/LICENSE.md)
[Font Awesome - Font](http://purecss.io/) | [SIL OFL 1.1](http://scripts.sil.org/OFL)
[Font Awesome - SASS files](http://purecss.io/) | [MIT License](http://opensource.org/licenses/mit-license.html)
[Handlebars](http://handlebarsjs.com/) | [MIT License](http://opensource.org/licenses/MIT)
[dygraphs](http://dygraphs.com/) | [MIT License](http://opensource.org/licenses/MIT)
[moment](http://momentjs.com/) | [MIT License](http://opensource.org/licenses/MIT)
[jQuery](http://jquery.com/) | [MIT License](http://opensource.org/licenses/MIT)
[qTip2](http://qtip2.com/) | [MIT License](http://opensource.org/licenses/MIT)
[DataTables](https://datatables.net/) | [MIT license](http://opensource.org/licenses/MIT) [@](http://datatables.net/license_mit)
[jquery deparam](https://github.com/chrissrogers/jquery-deparam/blob/master/jquery-deparam.js) | none mentioned
[jsSHA](http://caligatio.github.io/jsSHA/) | [BSD license](https://github.com/Caligatio/jsSHA/blob/release-1.42/LICENSE)
##Installation
......
{
"env": {
"browser": true,
"node": false,
"amd": false
},
"rules": {
"no-spaced-func": 0,
"no-alert": 2,
"no-caller": 2,
"no-bitwise": 0,
"no-catch-shadow": 2,
"no-console": 2,
"no-comma-dangle": 2,
"no-control-regex": 2,
"no-debugger": 2,
"no-div-regex": 0,
"no-dupe-keys": 2,
"no-else-return": 0,
"no-empty": 2,
"no-empty-class": 2,
"no-eq-null": 0,
"no-eval": 2,
"no-ex-assign": 2,
"no-func-assign": 2,
"no-floating-decimal": 0,
"no-implied-eval": 2,
"no-with": 2,
"no-fallthrough": 2,
"no-global-strict": 0,
"no-unreachable": 2,
"no-undef": 2,
"no-undef-init": 2,
"no-unused-expressions": 0,
"no-octal": 2,
"no-octal-escape": 2,
"no-obj-calls": 2,
"no-multi-str": 2,
"no-new-wrappers": 2,
"no-new": 2,
"no-new-func": 2,
"no-native-reassign": 2,
"no-plusplus": 0,
"no-delete-var": 2,
"no-return-assign": 2,
"no-new-array": 2,
"no-new-object": 2,
"no-label-var": 2,
"no-ternary": 0,
"no-self-compare": 0,
"no-sync": 0,
"no-underscore-dangle": 2,
"no-loop-func": 2,
"no-empty-label": 2,
"no-unused-vars": 2,
"no-script-url": 2,
"no-proto": 2,
"no-iterator": 2,
"no-mixed-requires": [0, false],
"no-wrap-func": 2,
"no-shadow": 2,
"no-use-before-define": 2,
"no-redeclare": 2,
"brace-style": 0,
"block-scoped-var": 0,
"camelcase": 0,
"complexity": [0, 11],
"consistent-this": [0, "that"],
"curly": 2,
"dot-notation": 2,
"eqeqeq": 2,
"guard-for-in": 0,
"max-depth": [0, 4],
"max-len": [0, 80, 4],
"max-params": [0, 3],
"max-statements": [0, 10],
"new-cap": 0,
"new-parens": 2,
"one-var": 0,
"quotes": [2, "single"],
"quote-props": 0,
"radix": 0,
"regex-spaces": 2,
"semi": 2,
"smarter-eqeqeq": 0,
"strict": 0,
"unnecessary-strict": 2,
"use-isnan": 2,
"wrap-iife": 0,
"wrap-regex": 0
}
}
\ No newline at end of file
{
"name": "globe",
"version": "0.2.8",
"version": "0.4.0",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.2.6",
"grunt": "~0.4.1"
"express": "3.2.6"
},
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-uglify": "~0.2.2",
"grunt-contrib-cssmin": "~0.6.0",
"grunt": "~0.4.1",
"grunt-contrib-watch": "~0.3.1",
"grunt-neuter": "~0.5.0",
"grunt-env": "~0.4.0",
"grunt-contrib-handlebars": "~0.5.9",
"grunt-ember-templates": "~0.4.10",
"grunt-contrib-concat": "~0.3.0",
"grunt-sass": "~0.6.0",
......@@ -24,8 +21,8 @@
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-compress": "~0.5.2",
"grunt-karma": "~0.4.5",
"grunt-contrib-htmlmin": "~0.1.3",
"grunt-preprocess": "~2.3.0",
"grunt-regex-replace": "~0.2.5"
"grunt-regex-replace": "~0.2.5",
"grunt-eslint": "git://github.com/makepanic/grunt-eslint.git#master"
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
res/assets/img/ajax-loader.gif

8.58 KB | W: | H:

res/assets/img/ajax-loader.gif

8.58 KB | W: | H:

res/assets/img/ajax-loader.gif
res/assets/img/ajax-loader.gif
res/assets/img/ajax-loader.gif
res/assets/img/ajax-loader.gif
  • 2-up
  • Swipe
  • Onion skin
@-webkit-keyframes text-shadow-pulse {
0% {
text-shadow: 0 0 0; }
50% {
text-shadow: 0 0 10px; }
100% {
text-shadow: 0 0 0; } }
@-moz-keyframes text-shadow-pulse {
0% {
text-shadow: 0 0 0; }
50% {
text-shadow: 0 0 10px; }
100% {
text-shadow: 0 0 0; } }
@-o-keyframes text-shadow-pulse {
0% {
text-shadow: 0 0 0; }
50% {
text-shadow: 0 0 10px; }
100% {
text-shadow: 0 0 0; } }
@keyframes text-shadow-pulse {
0% {
text-shadow: 0 0 0; }
50% {
text-shadow: 0 0 10px; }
100% {
text-shadow: 0 0 0; } }
@import "colors";
@-webkit-keyframes text-shadow-pulse {
0% { text-shadow: 0 0 0; }
50% { text-shadow: 0 0 10px; }
100% { text-shadow: 0 0 0; }
}
@-moz-keyframes text-shadow-pulse {
0% { text-shadow: 0 0 0; }
50% { text-shadow: 0 0 10px; }
100% { text-shadow: 0 0 0; }
}
@-o-keyframes text-shadow-pulse {
0% { text-shadow: 0 0 0; }
50% { text-shadow: 0 0 10px; }
100% { text-shadow: 0 0 0; }
}
@keyframes text-shadow-pulse {
0% { text-shadow: 0 0 0; }
50% { text-shadow: 0 0 10px; }
100% { text-shadow: 0 0 0; }
}
\ No newline at end of file
......@@ -11,9 +11,10 @@ $white: #fff;
$white-darker: #F7F7F7;
$grey-lighter: #F4F4F4;
$grey-lighter-lighter: lighten(#F4F4F4, 30%);
$grey-lightest: lighten($grey-lighter, 10%);
$grey: #F0EDEE;
$grey-darker: darken($grey, 5%);
$grey-darkest: #999;
$black: #363636;
$black-darker: darken($black, 10%);
......@@ -25,7 +26,7 @@ $blue-darker-darker: darken($blue-darker, 30%);
$blue-lighter: lighten($blue, 10%);
$blue-lighter-lighter: lighten($blue-lighter, 30%);
$green: #6BAE3F;
$green: #aed6ac;
$green-darker: darken($green, 10%);
$green-lighter: lighten($green, 10%);
......@@ -33,4 +34,10 @@ $orange: #EB5F3A;
$orange-darker: darken($orange, 10%);
$orange-lighter: lighten($orange, 10%);
$red: #8e2525;
\ No newline at end of file
$red: #c96f67;
$purple: #7c62a0;
$purple-darker: darken($purple, 10%);
$purple-darkest: darken($purple, 20%);
$purple-light: #ab93cb;
$grey: #eeeeee;
\ No newline at end of file
......@@ -8,4 +8,18 @@
background-image: -webkit-linear-gradient($from, $to);
background-image: -o-linear-gradient($from, $to);
background-image: -ms-linear-gradient($from, $to);
}
\ No newline at end of file
}
@mixin border-box(){
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}
@mixin transition($transition-property: all, $transition-time: .5s, $method: linear) {
-webkit-transition: $transition-property $transition-time $method;
-moz-transition: $transition-property $transition-time $method;
-ms-transition: $transition-property $transition-time $method;
-o-transition: $transition-property $transition-time $method;
transition: $transition-property $transition-time $method;
}
@import "colors";
@import "vars";
h2,h3,h4,h5,h6{
small{
color: $black-lighter;
font-weight: normal;
}
&.styled{
margin-top: 2em !important;
margin-bottom: 2em !important;
text-align: center;
color: $purple;
text-transform: uppercase;
}
}
a{
color: $purple-darker;
&:hover{
color: $torpurple-darker;
}
}
.align-center{
text-align: center;
}
.text-content{
position: relative;
padding: 20px 20px 0 20px;
h2,h3,h4,h5,h6{
margin-top: 0;
}
p{
max-width: $paragraph-max-width;
line-height:1.6em;
&.no-width-limit{
max-width: none;
}
}
}
code{
background: $white-darker;
border: 1px solid $grey;
border-radius: 2px;
padding: 2px 5px;
margin: 2px 0;
display: inline-block;
}
.c-red{
color: $red;
}
\ No newline at end of file
$fa-font-path: './fonts';
$paragraph-max-width: 900px;
$max-width: 1200px;
\ No newline at end of file
.fa{
}
\ No newline at end of file
@import "../colors";
// alerts for user feedback
.alert{
margin: 20px 20px 0 20px;
padding: 10px 17px;
text-align: center;
background: $grey;
color: $black-lighter;
&.info{
background: $purple;
color: $white;
}
}
\ No newline at end of file
@import "../colors";
@import "../vars";
@import "../mixins";
.dataTables_scrollHead{
margin-top: 2em;
}
.dataTables_scrollBody{
margin-bottom: 2em;
}
.dataTables_wrapper{
thead{
th{
cursor: pointer;
}
}
tbody{
td{
text-align: center;
}
tr{
cursor: pointer;
&:hover{
td{
background: $purple;
color: $white;
}
}
}
}
.fa{
margin-right: 4px;
}
.dataTables_empty{