gokart 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +7 -6
- data/assets/Guardfile +0 -4
- data/assets/pkg/linux_amd64/server/config.a +0 -0
- data/assets/pkg/linux_amd64/server/controller.a +0 -0
- data/assets/pkg/linux_amd64/server/view.a +0 -0
- data/assets/src/server/config/config.go +5 -0
- data/assets/src/server/controller/presentation.go +42 -0
- data/assets/src/server/main.go +4 -0
- data/assets/src/server/server +0 -0
- data/assets/src/server/view/home.go +4 -0
- data/assets/src/server/view/presentation.go +32 -0
- data/assets/src/www/app/erb_helpers/erb_helper.rb +2 -2
- data/assets/src/www/app/sass/application.css.scss +6 -2
- data/assets/src/www/app/sass/presentation.css.scss +66 -0
- data/assets/src/www/app/sass/utils.scss +38 -0
- data/assets/src/www/app/scripts/application.js.coffee +1 -0
- data/assets/src/www/app/scripts/controllers/presentation_slides_controller.js +54 -0
- data/assets/src/www/app/scripts/pages/presentation.js +34 -0
- data/assets/src/www/app/scripts/vendor_wrapper.js +4 -0
- data/assets/src/www/app/scripts/views/presentation_slide_view.js +31 -0
- data/assets/src/www/app/scripts/views/presentation_view.js +104 -0
- data/assets/src/www/app/templates/base.gotmpl.erb +2 -2
- data/assets/src/www/app/templates/pages/home.gotmpl +8 -8
- data/assets/src/www/app/templates/pages/presentation.gotmpl +188 -0
- data/assets/src/www/spec/all-spec.js +1 -0
- data/assets/src/www/spec/support/jasmine.yml +5 -2
- data/assets/src/www/vendor/css/github.css +127 -0
- data/assets/src/www/vendor/js/highlight-min.js +1 -0
- data/lib/gokart/version.rb +1 -1
- metadata +47 -32
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Go Kart #
|
2
|
-
Combination of
|
3
|
-
There are no external
|
2
|
+
Combination of tools which will make developing webapps using go easier. The gokart gem by default combines SASS, Coffee Script, Rake, and Sprockets with Go to provide a great development environment. This environment supports test driven development (TDD) with ruby guard and jasmine.
|
3
|
+
There are no external dependencies other than Go and ruby (which I expect you already have...). All dependencies are installed via bundler after the project directory is created.
|
4
|
+
|
5
|
+
Example [Presentationn]()
|
4
6
|
|
5
7
|
|
6
8
|
# Usage #
|
@@ -9,7 +11,7 @@ With ruby (1.9.1 min maybe?) all you need to do is:
|
|
9
11
|
gem install gokart
|
10
12
|
```
|
11
13
|
|
12
|
-
Once installed to create a new go + sprockets
|
14
|
+
Once installed to create a new go + sprockets environment:
|
13
15
|
```
|
14
16
|
gokart APP_NAME
|
15
17
|
```
|
@@ -24,11 +26,10 @@ The environment is split into the following sections:
|
|
24
26
|
* bin/assets/templates/ - Compiled Go HTML templates
|
25
27
|
* bin/assets/www-min/ - Compiled and minified CSS/JS/images using sprockets
|
26
28
|
* bin/assets/www-debug/ - Compiled, but non-minified/concatonated CSS/JS source, images are here also
|
27
|
-
* lib/ - Where any Go libraries your app depends on will be installed by running 'go get'. Note: You'll need to set the project into your GOPATH, I haven't figured out a good solution for this yet.
|
28
29
|
* spec/javascripts/ - Where all of the compiled JS specs will be written to, and run from. Note: Currently these do not go through sprockets, but only the coffee-script compiler. So no preprocessing is available
|
29
|
-
* spec/javascripts/support - Configuration files for Jasmine. jasmin.yml contains the script
|
30
|
+
* spec/javascripts/support - Configuration files for Jasmine. jasmin.yml contains the script specifying the source files to load, and what order to load them in.
|
30
31
|
* src/server/ - All of your Go code will go here following the normal Go 1.0 directory pattern
|
31
32
|
* src/www/app/ - All of you Coffee script, sass, and Go Template are found here
|
32
33
|
* src/www/spec/ - All coffee script spec files which will be compiled into js and run using jasmine.
|
33
34
|
* src/www/vendor/ - js/css/image files for third party tools and libraries
|
34
|
-
* tasks/ - Rake tasks to build, run, and test the application. There are
|
35
|
+
* tasks/ - Rake tasks to build, run, and test the application. There are several tasks which you can run do 'rake --tasks' to see a complete list of them. 'rake app:test' to run test units, 'rake app:start' to build and run, use rake app:startdebug for a debug build. Note: when you do 'rake jasmine' or rake 'app:guard' you probably want to start these tasks in different tabs because they run until killed.
|
data/assets/Guardfile
CHANGED
@@ -27,10 +27,6 @@ guard 'rake', :task => 'app:www:images' do
|
|
27
27
|
watch(%r{^src/www/app/images/.+$})
|
28
28
|
end
|
29
29
|
|
30
|
-
guard 'rake', :task => 'app:www:partials' do
|
31
|
-
watch(%r{^src/www/app/partials/.+$})
|
32
|
-
end
|
33
|
-
|
34
30
|
guard 'rake', :task => 'app:www:spec' do
|
35
31
|
watch(%r{^src/www/spec/.+$})
|
36
32
|
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -5,6 +5,7 @@ import (
|
|
5
5
|
"github.com/jasondelponte/golib/config"
|
6
6
|
"net"
|
7
7
|
"path"
|
8
|
+
"strings"
|
8
9
|
)
|
9
10
|
|
10
11
|
type Config struct {
|
@@ -32,6 +33,10 @@ func LoadConfig(fileName string) (*Config, error) {
|
|
32
33
|
return nil, err
|
33
34
|
}
|
34
35
|
|
36
|
+
if len(c.URLRoot) == 0 || !strings.HasPrefix(c.URLRoot, "/") {
|
37
|
+
c.URLRoot = "/"
|
38
|
+
}
|
39
|
+
|
35
40
|
c.URLFullAssetsPath = c.buildURLFullAssetsPath()
|
36
41
|
|
37
42
|
return c, nil
|
@@ -0,0 +1,42 @@
|
|
1
|
+
package controller
|
2
|
+
|
3
|
+
import (
|
4
|
+
"github.com/jasondelponte/golib/net/conn/httpserver"
|
5
|
+
"log"
|
6
|
+
"net/http"
|
7
|
+
"server/config"
|
8
|
+
"server/view"
|
9
|
+
)
|
10
|
+
|
11
|
+
type PresentationController struct {
|
12
|
+
view *view.PresentationView
|
13
|
+
config *config.Config
|
14
|
+
HandlerFuncs struct {
|
15
|
+
Show httpserver.HandlerFunc
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
func NewPresentationController(view *view.PresentationView, cfg *config.Config) *PresentationController {
|
20
|
+
c := &PresentationController{
|
21
|
+
view: view,
|
22
|
+
config: cfg,
|
23
|
+
}
|
24
|
+
|
25
|
+
c.HandlerFuncs.Show = c.buildShowHandler()
|
26
|
+
|
27
|
+
return c
|
28
|
+
}
|
29
|
+
|
30
|
+
func (c PresentationController) buildShowHandler() httpserver.HandlerFunc {
|
31
|
+
return func(w http.ResponseWriter, r *http.Request) {
|
32
|
+
if c.config.Debug {
|
33
|
+
log.Println("PresentationController: DEBUG, Request received. Path:", r.URL.Path)
|
34
|
+
}
|
35
|
+
b, err := c.view.RenderPresentation()
|
36
|
+
if err != nil {
|
37
|
+
// TODO error response
|
38
|
+
return
|
39
|
+
}
|
40
|
+
w.Write(b)
|
41
|
+
}
|
42
|
+
}
|
data/assets/src/server/main.go
CHANGED
@@ -5,6 +5,7 @@ import (
|
|
5
5
|
"github.com/jasondelponte/golib/net/conn/httpserver"
|
6
6
|
"github.com/jasondelponte/golib/text/html/template"
|
7
7
|
"log"
|
8
|
+
"path"
|
8
9
|
"server/config"
|
9
10
|
"server/controller"
|
10
11
|
"server/view"
|
@@ -66,6 +67,9 @@ func initServer(cfg *config.Config, tmpl *template.Template) (*httpserver.HTTPSe
|
|
66
67
|
home := controller.NewHomeController(view.NewHomeView(tmpl, cfg), cfg)
|
67
68
|
server.AddHandlerFunc(cfg.URLRoot, home.HandlerFuncs.Welcome)
|
68
69
|
|
70
|
+
pres := controller.NewPresentationController(view.NewPresentationView(tmpl, cfg), cfg)
|
71
|
+
server.AddHandlerFunc(path.Join(cfg.URLRoot, "presentation", "show"), pres.HandlerFuncs.Show)
|
72
|
+
|
69
73
|
static := controller.NewStaticAssetController(cfg)
|
70
74
|
server.AddHandlerFunc(cfg.URLFullAssetsPath, static.HandlerFuncs.StaticAssets)
|
71
75
|
|
Binary file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
package view
|
2
|
+
|
3
|
+
import (
|
4
|
+
"github.com/jasondelponte/golib/text/html/template"
|
5
|
+
"server/config"
|
6
|
+
)
|
7
|
+
|
8
|
+
type PresentationView struct {
|
9
|
+
template *template.Template
|
10
|
+
config *config.Config
|
11
|
+
}
|
12
|
+
|
13
|
+
func NewPresentationView(tmpl *template.Template, cfg *config.Config) *PresentationView {
|
14
|
+
return &PresentationView{
|
15
|
+
template: tmpl,
|
16
|
+
config: cfg,
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
func (v *PresentationView) RenderPresentation() ([]byte, error) {
|
21
|
+
common := template.CommonProps{
|
22
|
+
Title: "GoKart Presentation",
|
23
|
+
Debug: v.config.Debug,
|
24
|
+
RootURL: v.config.URLRoot,
|
25
|
+
}
|
26
|
+
|
27
|
+
if v.config.Debug {
|
28
|
+
v.template.Reload()
|
29
|
+
}
|
30
|
+
|
31
|
+
return v.template.Render("presentation", common, nil)
|
32
|
+
}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
|
2
2
|
module ErbHelper
|
3
3
|
def ErbHelper.asset_link(asset, prefix)
|
4
|
-
src = "{{PathJoin .RootURL \"/assets/\" \"#{asset}\"}}"
|
4
|
+
src = "{{PathJoin .Common.RootURL \"/assets/\" \"#{asset}\"}}"
|
5
5
|
if (prefix == 'js')
|
6
6
|
return "<script type=\"text/javascript\" src=\"#{src}\"></script>"
|
7
7
|
|
8
8
|
elsif (prefix == 'css')
|
9
|
-
return "<link rel=\"stylesheet\" type=\"text/css\"
|
9
|
+
return "<link rel=\"stylesheet\" type=\"text/css\" href=\"#{src}\">"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -1,10 +1,14 @@
|
|
1
|
+
//= require github
|
2
|
+
//= require utils
|
3
|
+
//= require presentation
|
4
|
+
//= include_self
|
5
|
+
//= require_tree ./
|
1
6
|
|
2
|
-
$box_border: #C4A478;
|
7
|
+
$box_border : #C4A478;
|
3
8
|
$lightBlue: #3bbfce;
|
4
9
|
$warning: #f00;
|
5
10
|
$base_bg: #fff;
|
6
11
|
|
7
|
-
|
8
12
|
html, body, div, h1, h2, h3, h4, p {
|
9
13
|
margin: 0;
|
10
14
|
padding: 0;
|
@@ -0,0 +1,66 @@
|
|
1
|
+
@import "utils";
|
2
|
+
|
3
|
+
$slideWidth: 1000px;
|
4
|
+
|
5
|
+
.presentation {
|
6
|
+
font-size: 20px;
|
7
|
+
width: $slideWidth;
|
8
|
+
margin: 50px auto;
|
9
|
+
|
10
|
+
.pres-slides {
|
11
|
+
.presentation-slide {
|
12
|
+
width: $slideWidth;
|
13
|
+
display: inline-block;
|
14
|
+
vertical-align: top;
|
15
|
+
overflow: hidden;
|
16
|
+
|
17
|
+
@include transition-property(width, opacity);
|
18
|
+
@include transition-delay(0);
|
19
|
+
@include transition-duration(1s, 0.5s);
|
20
|
+
|
21
|
+
&.hidden {
|
22
|
+
@include transition-property(width, opacity);
|
23
|
+
@include transition-delay(0);
|
24
|
+
@include transition-duration(1s, 0.75s);
|
25
|
+
width: 0;
|
26
|
+
opacity: 0;
|
27
|
+
}
|
28
|
+
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
.slide-content {
|
33
|
+
width: $slideWidth;
|
34
|
+
font-size: 32px;
|
35
|
+
|
36
|
+
h1 {
|
37
|
+
font-size: 58px;
|
38
|
+
}
|
39
|
+
|
40
|
+
.bottom-right {
|
41
|
+
position: absolute;
|
42
|
+
right: 50px;
|
43
|
+
bottom: 50px;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
.pres-controls {
|
48
|
+
text-align: center;
|
49
|
+
display: none;
|
50
|
+
|
51
|
+
.pres-control{
|
52
|
+
display: inline-block;
|
53
|
+
vertical-align: middle;
|
54
|
+
cursor: pointer;
|
55
|
+
|
56
|
+
padding: 10px 20px;
|
57
|
+
|
58
|
+
text-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.6);
|
59
|
+
@include background-gradient(#EEE, #A1A1A1);
|
60
|
+
|
61
|
+
&:active {
|
62
|
+
@include background-gradient(#A1A1A1, #EEE);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
@mixin background-gradient($from, $to) {
|
3
|
+
/* fallback/image non-cover color */
|
4
|
+
background-color: $from;
|
5
|
+
|
6
|
+
/* Firefox 3.6+ */
|
7
|
+
background-image: -moz-linear-gradient($from, $to);
|
8
|
+
|
9
|
+
/* Safari 4+, Chrome 1+ */
|
10
|
+
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from($from), to($to));
|
11
|
+
|
12
|
+
/* Safari 5.1+, Chrome 10+ */
|
13
|
+
background-image: -webkit-linear-gradient($from, $to);
|
14
|
+
|
15
|
+
/* Opera 11.10+ */
|
16
|
+
background-image: -o-linear-gradient($from, $to);
|
17
|
+
}
|
18
|
+
|
19
|
+
@mixin transition-delay($delays...) {
|
20
|
+
transition-delay: $delays;
|
21
|
+
-moz-transition-delay: $delays; /* Firefox 4 */
|
22
|
+
-webkit-transition-delay: $delays; /* Safari and Chrome */
|
23
|
+
-o-transition-delay: $delays; /* Opera */
|
24
|
+
}
|
25
|
+
|
26
|
+
@mixin transition-property($props...) {
|
27
|
+
transition-property: $props;
|
28
|
+
-moz-transition-property: $props;
|
29
|
+
-webkit-transition-property: $props;
|
30
|
+
-o-transition-property: $props;
|
31
|
+
}
|
32
|
+
|
33
|
+
@mixin transition-duration($durations...) {
|
34
|
+
transition-duration: $durations;
|
35
|
+
-moz-transition-duration: $durations;
|
36
|
+
-webkit-transition-duration: $durations;
|
37
|
+
-o-transition-duration: $durations;
|
38
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*global define:true*/
|
2
|
+
define('controllers/presentation_slides_controller', [
|
3
|
+
'underscore',
|
4
|
+
'backbone'
|
5
|
+
], function PresentationSlidesControllerModule(_, Backbone) {
|
6
|
+
'use strict';
|
7
|
+
|
8
|
+
function PresentationSlidesController(options) {
|
9
|
+
this._container = options.container;
|
10
|
+
this._slideViews = options.slideViews;
|
11
|
+
}
|
12
|
+
|
13
|
+
_.extend(PresentationSlidesController.prototype, Backbone.Events, {
|
14
|
+
_currentSlideIdx: 0,
|
15
|
+
|
16
|
+
firstSlide: function firstSlide() {
|
17
|
+
this._showSlide(0);
|
18
|
+
},
|
19
|
+
|
20
|
+
nextSlide: function nextSlideFunc() {
|
21
|
+
if (this._currentSlideIdx === this._slideViews.length-1) {
|
22
|
+
return;
|
23
|
+
}
|
24
|
+
|
25
|
+
this._showSlide(this._currentSlideIdx-1, 'next');
|
26
|
+
},
|
27
|
+
|
28
|
+
prevSlide: function prevSlideFunc() {
|
29
|
+
if (this._currentSlideIdx === 0) {
|
30
|
+
return;
|
31
|
+
}
|
32
|
+
|
33
|
+
this._showSlide(this._currentSlideIdx+1, 'prev');
|
34
|
+
},
|
35
|
+
|
36
|
+
_showSlide: function _showSlideFunc(index, dir) {
|
37
|
+
var slide = this._slideViews[index];
|
38
|
+
|
39
|
+
var prevSlide = this._slideViews[this._currentSlideIdx];
|
40
|
+
if (dir === 'next') {
|
41
|
+
prevSlide.hideForNext();
|
42
|
+
}
|
43
|
+
else if (dir === 'prev') {
|
44
|
+
prevSlide.hideForPrev();
|
45
|
+
}
|
46
|
+
|
47
|
+
slide.show();
|
48
|
+
|
49
|
+
this._currentSlideIdx = index;
|
50
|
+
}
|
51
|
+
});
|
52
|
+
|
53
|
+
return PresentationSlidesController;
|
54
|
+
});
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/*global define:true*/
|
2
|
+
define('pages/presentation_page', [
|
3
|
+
'jquery',
|
4
|
+
'underscore',
|
5
|
+
'views/presentation_view'
|
6
|
+
], function PresentationPageModule($, _, PresentationView) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
function PresentationPage(options) {
|
10
|
+
this._container = $(options.container);
|
11
|
+
|
12
|
+
this.view = new PresentationView({
|
13
|
+
slides: [
|
14
|
+
'slide1Intro',
|
15
|
+
'slide2WhatIsGokart',
|
16
|
+
'slide3DevEnv',
|
17
|
+
'slide4WebServer',
|
18
|
+
'slide5Client',
|
19
|
+
'slide6Improvements',
|
20
|
+
]
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
_.extend(PresentationPage.prototype, {
|
25
|
+
start: function () {
|
26
|
+
this.view.render();
|
27
|
+
this._container.append(this.view.$el);
|
28
|
+
|
29
|
+
this.view.showFirstSlide();
|
30
|
+
}
|
31
|
+
});
|
32
|
+
|
33
|
+
return PresentationPage;
|
34
|
+
});
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/*global define:true*/
|
2
|
+
define('views/presentation_slide_view',[
|
3
|
+
'jquery',
|
4
|
+
'underscore',
|
5
|
+
'backbone',
|
6
|
+
'mustache'
|
7
|
+
], function PresentationSlideViewModule($, _, Backbone, Mustache) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
return Backbone.View.extend({
|
11
|
+
className: 'presentation-slide hidden',
|
12
|
+
template: null,
|
13
|
+
|
14
|
+
initialize: function initializeFunc(options) {
|
15
|
+
this.template = $('#'+options.slideId+'Template').html();
|
16
|
+
},
|
17
|
+
|
18
|
+
hide: function hideFunc() {
|
19
|
+
this.$el.addClass('hidden');
|
20
|
+
},
|
21
|
+
|
22
|
+
show: function showFunc() {
|
23
|
+
this.$el.removeClass('hidden next prev');
|
24
|
+
},
|
25
|
+
|
26
|
+
render: function renderFunc() {
|
27
|
+
this.$el.html(Mustache.render(this.template));
|
28
|
+
return this;
|
29
|
+
}
|
30
|
+
});
|
31
|
+
});
|
@@ -0,0 +1,104 @@
|
|
1
|
+
/*global define:true*/
|
2
|
+
define('views/presentation_view', [
|
3
|
+
'jquery',
|
4
|
+
'underscore',
|
5
|
+
'backbone',
|
6
|
+
'mustache',
|
7
|
+
'highlight',
|
8
|
+
'views/presentation_slide_view'
|
9
|
+
], function PresentationViewModule($, _, Backbone, Mustache, Highlight, PresentationSlideView) {
|
10
|
+
'use strict';
|
11
|
+
|
12
|
+
return Backbone.View.extend({
|
13
|
+
className: '',
|
14
|
+
template: $('#presentationContainerTemplate').html(),
|
15
|
+
|
16
|
+
events: {
|
17
|
+
'click .pres-controls .prev': '_onPrev',
|
18
|
+
'click .pres-controls .next': '_onNext'
|
19
|
+
},
|
20
|
+
_currentSlideIdx: 0,
|
21
|
+
_slides: null,
|
22
|
+
_slideViews: [],
|
23
|
+
|
24
|
+
initialize: function initializeFunc(options) {
|
25
|
+
this._slides = options.slides;
|
26
|
+
|
27
|
+
this._onKeyPress = _.bind(this._onKeyPress, this);
|
28
|
+
},
|
29
|
+
|
30
|
+
render: function renderFunc() {
|
31
|
+
this.$el.html(Mustache.render(this.template));
|
32
|
+
this._slideViews = this._initSlideViews(this._slides);
|
33
|
+
|
34
|
+
window.addEventListener('keyup', this._onKeyPress);
|
35
|
+
|
36
|
+
return this;
|
37
|
+
},
|
38
|
+
|
39
|
+
showFirstSlide: function showFirstSlideFunc() {
|
40
|
+
this._showSlide(0);
|
41
|
+
},
|
42
|
+
|
43
|
+
_initSlideViews: function _initSlideViewsFunc(slides) {
|
44
|
+
var slideViews = [];
|
45
|
+
var $slideCont = this.$('.pres-slides');
|
46
|
+
for (var i=0; i < slides.length; i++) {
|
47
|
+
var slide = new PresentationSlideView({slideId: slides[i]});
|
48
|
+
slide.render();
|
49
|
+
|
50
|
+
$slideCont.append(slide.$el);
|
51
|
+
slideViews.push(slide);
|
52
|
+
}
|
53
|
+
return slideViews;
|
54
|
+
},
|
55
|
+
|
56
|
+
_onKeyPress: function onKeyUpFunc(event) {
|
57
|
+
// TODO handle left/right arrows, enter and space for slide transition
|
58
|
+
console.log(event.keyCode, event.keyIdentifier);
|
59
|
+
var keyCode = event.keyCode;
|
60
|
+
if (keyCode === 39 || keyCode === 13 || keyCode === 32) {
|
61
|
+
this._onNext();
|
62
|
+
}
|
63
|
+
else if (keyCode === 37) {
|
64
|
+
this._onPrev();
|
65
|
+
}
|
66
|
+
|
67
|
+
return false;
|
68
|
+
},
|
69
|
+
|
70
|
+
_onPrev: function onPrevFunc(event) {
|
71
|
+
if (this._currentSlideIdx === 0) {
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
|
75
|
+
this._showSlide(this._currentSlideIdx-1, 'prev');
|
76
|
+
},
|
77
|
+
|
78
|
+
_onNext: function onNextFunc(event) {
|
79
|
+
if (this._currentSlideIdx === this._slideViews.length-1) {
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
|
83
|
+
this._showSlide(this._currentSlideIdx+1, 'next');
|
84
|
+
},
|
85
|
+
|
86
|
+
_showSlide: function _showSlideFunc(index, dir) {
|
87
|
+
var slide = this._slideViews[index];
|
88
|
+
|
89
|
+
var prevSlide = this._slideViews[this._currentSlideIdx];
|
90
|
+
if (dir === 'next' || dir === 'prev') {
|
91
|
+
prevSlide.hide();
|
92
|
+
}
|
93
|
+
|
94
|
+
slide.show();
|
95
|
+
slide.$('pre code').each(function(i, e) {
|
96
|
+
Highlight.highlightBlock(e);
|
97
|
+
});
|
98
|
+
|
99
|
+
this.trigger('slideChanged');
|
100
|
+
|
101
|
+
this._currentSlideIdx = index;
|
102
|
+
}
|
103
|
+
});
|
104
|
+
});
|
@@ -2,8 +2,8 @@
|
|
2
2
|
<!DOCTYPE html>
|
3
3
|
<html>
|
4
4
|
<head>
|
5
|
-
<title>{{.Title}}</title>
|
6
|
-
{{if .Debug}}{{template "base.header.assets.debug" .}}{{else}}{{template "base.header.assets" .}}{{end}}
|
5
|
+
<title>{{.Common.Title}}</title>
|
6
|
+
{{if .Common.Debug}}{{template "base.header.assets.debug" .}}{{else}}{{template "base.header.assets" .}}{{end}}
|
7
7
|
</head>
|
8
8
|
<body>
|
9
9
|
{{template "html_templates"}}
|
@@ -1,16 +1,17 @@
|
|
1
1
|
{{define "home.contents"}}
|
2
2
|
<div class="info-block">
|
3
3
|
<h3>Go Kart</h3>
|
4
|
-
<p>Combination of tools which will make developing webapps using go easier. The gokart gem by default combines SASS, Javascript, Coffee Script, Rake, and
|
4
|
+
<p>Combination of tools which will make developing webapps using go easier. The gokart gem by default combines SASS, Javascript, Coffee Script, Rake, and Sprockets with Go to provide a great development environment. This environment supports test driven development (TDD) with ruby guard and jasmine.</p>
|
5
5
|
<p>There are no external dependencies other than Go and ruby (which I expect you already have...). All dependencies are installed via bundler after the project directory is created.</p>
|
6
|
+
<p>Example <a href="{{PathJoin .Common.RootURL "/presentation/" "show"}}">Presentation</a></p>
|
6
7
|
</div>
|
7
8
|
<div class="info-block">
|
8
9
|
<h3>Usage</h3>
|
9
|
-
<p>With ruby
|
10
|
+
<p>With ruby all you need to do is:</p>
|
10
11
|
<p class="code">gem install gokart</p>
|
11
12
|
<p>Once installed to create a new go + sprockets environment:</p>
|
12
13
|
<p class="code">gokart APP_NAME</p>
|
13
|
-
<p>This utility/framework depends on the github.com/jasondelponte/
|
14
|
+
<p>This utility/framework depends on the github.com/jasondelponte/golib to run out of the box, but if you choose it would be simple to remove and place with utilities of your choice.<p>
|
14
15
|
<p>There are several rake commands you can use to build/run/deploy the environment. Checkout rake --tasks for a list of them. In general you'll probably only ever need the app:x commands not app:server:x or app:www:x.</p>
|
15
16
|
</div>
|
16
17
|
<div class="info-block">
|
@@ -22,14 +23,13 @@
|
|
22
23
|
<li><strong>bin/assets/templates/</strong> - Compiled Go HTML templates</li>
|
23
24
|
<li><strong>bin/assets/www-min/</strong> - Compiled and minified CSS/JS/images using sprockets</li>
|
24
25
|
<li><strong>bin/assets/www-debug/</strong> - Compiled, but non-minified/concatenated CSS/JS source, images are here also</li>
|
25
|
-
<li><strong>
|
26
|
-
<li><strong>spec/javascripts/</strong> - Where all of the compiled JS specs will be written to, and run from. Note: Currently these do not go through sprockets, but only the coffee-script compiler. So no preprocessing is available</li>
|
26
|
+
<li><strong>spec/javascripts/</strong> - Where all of the compiled JS specs will be written to, and run from. Note: Currently these do not go through sprockets, but only the coffee-script compiler. So no pre-processing is available</li>
|
27
27
|
<li><strong>spec/javascripts/support</strong> - Configuration files for Jasmine. jasmin.yml contains the script specifying the source files to load, and what order to load them in.</li>
|
28
28
|
<li><strong>src/server/</strong> - All of your Go code will go here following the normal Go 1.0 directory pattern</li>
|
29
29
|
<li><strong>src/www/app/</strong> - All of you Coffee script, sass, and Go Template are found here</li>
|
30
30
|
<li><strong>src/www/spec/</strong> - All coffee script spec files which will be compiled into js and run using jasmine.</li>
|
31
31
|
<li><strong>src/www/vendor/</strong> - js/css/image files for third party tools and libraries</li>
|
32
|
-
<li><strong>tasks/</strong> - Rake tasks to build, run, and test the application. There are several tasks which you can run do 'rake --tasks' to see a complete list of them. 'rake app:test' to run test units, 'rake app:start' to build and run, use startdebug for a debug build. Note: when you do 'rake jasmine' or rake 'app:guard' you probably want to start these tasks in different tabs because they run until killed.</li>
|
32
|
+
<li><strong>tasks/</strong> - Rake tasks to build, run, and test the application. There are several tasks which you can run do 'rake --tasks' to see a complete list of them. 'rake app:test' to run test units, 'rake app:start' to build and run, use rake app:startdebug for a debug build. Note: when you do 'rake jasmine' or rake 'app:guard' you probably want to start these tasks in different tabs because they run until killed.</li>
|
33
33
|
</ul>
|
34
34
|
</div>
|
35
35
|
|
@@ -40,7 +40,7 @@
|
|
40
40
|
{{end}}
|
41
41
|
|
42
42
|
{{define "home"}}
|
43
|
-
{{template "base.header" .
|
44
|
-
{{template "home.contents" .
|
43
|
+
{{template "base.header" .}}
|
44
|
+
{{template "home.contents" .}}
|
45
45
|
{{template "base.footer"}}
|
46
46
|
{{end}}
|
@@ -0,0 +1,188 @@
|
|
1
|
+
{{define "presentation.contents"}}
|
2
|
+
<div class="presentation">
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<script id="presentationContainerTemplate" type="text/html">
|
6
|
+
<div class="pres-slides"></div>
|
7
|
+
<div class="pres-controls">
|
8
|
+
<div class="prev pres-control">Prev</div>
|
9
|
+
<div class="next pres-control">Next</div>
|
10
|
+
</div>
|
11
|
+
</script>
|
12
|
+
|
13
|
+
<script id="slide1IntroTemplate" type="text/html">
|
14
|
+
<div class="slide-content">
|
15
|
+
<h1 class="main-title">gokart</h1>
|
16
|
+
<div class="bottom-right">
|
17
|
+
<div>Jason Del Ponte</div>
|
18
|
+
<div><a href="https://github.com/jasondelponte/gokart">github.com/jasondelponte/gokart</a></div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</script>
|
22
|
+
|
23
|
+
<script id="slide2WhatIsGokartTemplate" type="text/html">
|
24
|
+
<div class="slide-content">
|
25
|
+
<h1>What is the server?</h1>
|
26
|
+
<ul>
|
27
|
+
<li><p>Ruby gem to create a development environment for Go web applications have structured client scripting</p></li>
|
28
|
+
<li>
|
29
|
+
<p>Self contained web server</p>
|
30
|
+
<ul>
|
31
|
+
<li><p>Serves static and dynamically rendered content</p></li>
|
32
|
+
<li><p>Support SSL (soon)</p></li>
|
33
|
+
</ul>
|
34
|
+
</li>
|
35
|
+
<li><p>Integrates with existing Go workspaces without pollution</p></li>
|
36
|
+
<li><p>Easily Customized</p></li>
|
37
|
+
<li><p>Encourages continuous testing</p></li>
|
38
|
+
</ul>
|
39
|
+
</div>
|
40
|
+
</script>
|
41
|
+
|
42
|
+
<script id="slide3DevEnvTemplate" type="text/html">
|
43
|
+
<div class="slide-content">
|
44
|
+
<h1>Development Environment</h1>
|
45
|
+
<ul>
|
46
|
+
<li>
|
47
|
+
<p>Rake task build commands</p>
|
48
|
+
<ul>
|
49
|
+
<li><p>Simple and easy to use tasks for controlling the build environment</p></li>
|
50
|
+
</ul>
|
51
|
+
</li>
|
52
|
+
<li>
|
53
|
+
<p>Sprockets</p>
|
54
|
+
<ul>
|
55
|
+
<li><p>Pre-compiles all scripts and html templates</p></li>
|
56
|
+
</ul>
|
57
|
+
</li>
|
58
|
+
<li>
|
59
|
+
<p>Guard</p>
|
60
|
+
<ul>
|
61
|
+
<li><p>Unit testing on file changes</p></li>
|
62
|
+
<li><p>Rebuild of scripts and html template</p></li>
|
63
|
+
</ul>
|
64
|
+
</li>
|
65
|
+
<li>
|
66
|
+
<p>Unit tests</p>
|
67
|
+
<ul>
|
68
|
+
<li><p>Javascript Specs with Jasmine</p></li>
|
69
|
+
<li><p>Go tests</p></li>
|
70
|
+
</ul>
|
71
|
+
</li>
|
72
|
+
</ul>
|
73
|
+
</div>
|
74
|
+
</script>
|
75
|
+
|
76
|
+
<script id="slide4WebServerTemplate" type="text/html">
|
77
|
+
<div class="slide-content">
|
78
|
+
<h1>Web Server</h1>
|
79
|
+
<ul>
|
80
|
+
<li>
|
81
|
+
<p>Go Server</p>
|
82
|
+
<ul>
|
83
|
+
<li><p>Simple initial structure provided</p></li>
|
84
|
+
<li><p>Easily replaced or build on</p></li>
|
85
|
+
</ul>
|
86
|
+
</li>
|
87
|
+
<li>
|
88
|
+
<p>Structure</p>
|
89
|
+
<ul>
|
90
|
+
<li><p>Controllers with registered routes</p></li>
|
91
|
+
<li><p>Views render HTML template content</p></li>
|
92
|
+
</ul>
|
93
|
+
</li>
|
94
|
+
<li>
|
95
|
+
<p>HTML Templates</p>
|
96
|
+
<ul>
|
97
|
+
<li><p>Templates compiled by sprockets</p></li>
|
98
|
+
<li><p>Accept model data from view/controllers</p></li>
|
99
|
+
<li><p>Templates supports ERB helpers during compilation</p></li>
|
100
|
+
</ul>
|
101
|
+
</li>
|
102
|
+
</ul>
|
103
|
+
</div>
|
104
|
+
</script>
|
105
|
+
|
106
|
+
<script id="slide5ClientTemplate" type="text/html">
|
107
|
+
<div class="slide-content">
|
108
|
+
<h1>Client Scripting and Content</h1>
|
109
|
+
<ul>
|
110
|
+
<li>
|
111
|
+
<p>Scripting</p>
|
112
|
+
<ul>
|
113
|
+
<li><p>Supports Javascript, Coffeescript, CSS and SCSS</p></li>
|
114
|
+
<li><p>Sprockets used for compiling scripts</p></li>
|
115
|
+
</ul>
|
116
|
+
</li>
|
117
|
+
<li>
|
118
|
+
<p>Javascript AMD</p>
|
119
|
+
<ul>
|
120
|
+
<li><p>Compatible with most of require.js</p></li>
|
121
|
+
</ul>
|
122
|
+
</li>
|
123
|
+
<li>
|
124
|
+
<p>Jasmine Unit Testing</p>
|
125
|
+
<ul>
|
126
|
+
<li><p>Integrated with guard, and rake tasks</p></li>
|
127
|
+
<li><p>Test driven development</p></li>
|
128
|
+
</ul>
|
129
|
+
</li>
|
130
|
+
<li>
|
131
|
+
<p>Build</p>
|
132
|
+
<ul>
|
133
|
+
<li><p>Release: Single compressed JS/CSS files</p></li>
|
134
|
+
<li><p>Debug: JS/CSS files maintain pathing</p></li>
|
135
|
+
</ul>
|
136
|
+
</li>
|
137
|
+
</ul>
|
138
|
+
</div>
|
139
|
+
</script>
|
140
|
+
|
141
|
+
<script id="slide6ImprovementsTemplate" type="text/html">
|
142
|
+
<div class="slide-content">
|
143
|
+
<h1>Improvements</h1>
|
144
|
+
<ul>
|
145
|
+
<li>
|
146
|
+
<p>More thought out MVC model</p>
|
147
|
+
<ul>
|
148
|
+
<li><p>Both client side and in web server</p></li>
|
149
|
+
<li><p>HTML templates and javascript template cohesion</p></li>
|
150
|
+
</ul>
|
151
|
+
</li>
|
152
|
+
<li>
|
153
|
+
<p>Internationalization support</p>
|
154
|
+
<ul>
|
155
|
+
<li><p>Unification between html templates, and client scripts</p></li>
|
156
|
+
</ul>
|
157
|
+
</li>
|
158
|
+
<li>
|
159
|
+
<p>Generators</p>
|
160
|
+
<ul>
|
161
|
+
<li><p>Models/Views/Controllers</p></li>
|
162
|
+
<li><p>Boiler plate code</p></li>
|
163
|
+
</ul>
|
164
|
+
</li>
|
165
|
+
<li>
|
166
|
+
<p>Logging and Metrics tightly integrated</p>
|
167
|
+
<ul>
|
168
|
+
<li><p>Verification</p></li>
|
169
|
+
<li><p>Understanding scalability</p></li>
|
170
|
+
</ul>
|
171
|
+
</li>
|
172
|
+
</ul>
|
173
|
+
</div>
|
174
|
+
</script>
|
175
|
+
|
176
|
+
<script type="text/javascript">
|
177
|
+
var PresentationPage = require('pages/presentation_page');
|
178
|
+
|
179
|
+
var pres = new PresentationPage({container: ".presentation"});
|
180
|
+
pres.start();
|
181
|
+
</script>
|
182
|
+
{{end}}
|
183
|
+
|
184
|
+
{{define "presentation"}}
|
185
|
+
{{template "base.header" .}}
|
186
|
+
{{template "presentation.contents" .}}
|
187
|
+
{{template "base.footer"}}
|
188
|
+
{{end}}
|
@@ -12,6 +12,8 @@
|
|
12
12
|
#
|
13
13
|
src_files:
|
14
14
|
- "js/utilities/require.js"
|
15
|
+
- "js/underscore.js"
|
16
|
+
- "js/backbone.js"
|
15
17
|
- "js/**/*.js"
|
16
18
|
|
17
19
|
# stylesheets
|
@@ -50,6 +52,7 @@ helpers:
|
|
50
52
|
# - **/*[sS]pec.js
|
51
53
|
#
|
52
54
|
spec_files:
|
55
|
+
- "**/*[sS]pec.js"
|
53
56
|
|
54
57
|
# src_dir
|
55
58
|
#
|
@@ -60,7 +63,7 @@ spec_files:
|
|
60
63
|
#
|
61
64
|
# src_dir: public
|
62
65
|
#
|
63
|
-
src_dir: bin/assets/www-debug
|
66
|
+
src_dir: "bin/assets/www-debug"
|
64
67
|
|
65
68
|
# spec_dir
|
66
69
|
#
|
@@ -71,4 +74,4 @@ src_dir: bin/assets/www-debug
|
|
71
74
|
#
|
72
75
|
# spec_dir: spec/javascripts
|
73
76
|
#
|
74
|
-
spec_dir: spec/javascripts
|
77
|
+
spec_dir: "spec/javascripts"
|
@@ -0,0 +1,127 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
github.com style (c) Vasily Polovnyov <vast@whiteants.net>
|
4
|
+
|
5
|
+
*/
|
6
|
+
|
7
|
+
pre code {
|
8
|
+
display: block; padding: 0.5em;
|
9
|
+
color: #333;
|
10
|
+
background: #f8f8ff
|
11
|
+
}
|
12
|
+
|
13
|
+
pre .comment,
|
14
|
+
pre .template_comment,
|
15
|
+
pre .diff .header,
|
16
|
+
pre .javadoc {
|
17
|
+
color: #998;
|
18
|
+
font-style: italic
|
19
|
+
}
|
20
|
+
|
21
|
+
pre .keyword,
|
22
|
+
pre .css .rule .keyword,
|
23
|
+
pre .winutils,
|
24
|
+
pre .javascript .title,
|
25
|
+
pre .nginx .title,
|
26
|
+
pre .subst,
|
27
|
+
pre .request,
|
28
|
+
pre .status {
|
29
|
+
color: #333;
|
30
|
+
font-weight: bold
|
31
|
+
}
|
32
|
+
|
33
|
+
pre .number,
|
34
|
+
pre .hexcolor,
|
35
|
+
pre .ruby .constant {
|
36
|
+
color: #099;
|
37
|
+
}
|
38
|
+
|
39
|
+
pre .string,
|
40
|
+
pre .tag .value,
|
41
|
+
pre .phpdoc,
|
42
|
+
pre .tex .formula {
|
43
|
+
color: #d14
|
44
|
+
}
|
45
|
+
|
46
|
+
pre .title,
|
47
|
+
pre .id {
|
48
|
+
color: #900;
|
49
|
+
font-weight: bold
|
50
|
+
}
|
51
|
+
|
52
|
+
pre .javascript .title,
|
53
|
+
pre .lisp .title,
|
54
|
+
pre .clojure .title,
|
55
|
+
pre .subst {
|
56
|
+
font-weight: normal
|
57
|
+
}
|
58
|
+
|
59
|
+
pre .class .title,
|
60
|
+
pre .haskell .type,
|
61
|
+
pre .vhdl .literal,
|
62
|
+
pre .tex .command {
|
63
|
+
color: #458;
|
64
|
+
font-weight: bold
|
65
|
+
}
|
66
|
+
|
67
|
+
pre .tag,
|
68
|
+
pre .tag .title,
|
69
|
+
pre .rules .property,
|
70
|
+
pre .django .tag .keyword {
|
71
|
+
color: #000080;
|
72
|
+
font-weight: normal
|
73
|
+
}
|
74
|
+
|
75
|
+
pre .attribute,
|
76
|
+
pre .variable,
|
77
|
+
pre .lisp .body {
|
78
|
+
color: #008080
|
79
|
+
}
|
80
|
+
|
81
|
+
pre .regexp {
|
82
|
+
color: #009926
|
83
|
+
}
|
84
|
+
|
85
|
+
pre .class {
|
86
|
+
color: #458;
|
87
|
+
font-weight: bold
|
88
|
+
}
|
89
|
+
|
90
|
+
pre .symbol,
|
91
|
+
pre .ruby .symbol .string,
|
92
|
+
pre .lisp .keyword,
|
93
|
+
pre .tex .special,
|
94
|
+
pre .prompt {
|
95
|
+
color: #990073
|
96
|
+
}
|
97
|
+
|
98
|
+
pre .built_in,
|
99
|
+
pre .lisp .title,
|
100
|
+
pre .clojure .built_in {
|
101
|
+
color: #0086b3
|
102
|
+
}
|
103
|
+
|
104
|
+
pre .preprocessor,
|
105
|
+
pre .pi,
|
106
|
+
pre .doctype,
|
107
|
+
pre .shebang,
|
108
|
+
pre .cdata {
|
109
|
+
color: #999;
|
110
|
+
font-weight: bold
|
111
|
+
}
|
112
|
+
|
113
|
+
pre .deletion {
|
114
|
+
background: #fdd
|
115
|
+
}
|
116
|
+
|
117
|
+
pre .addition {
|
118
|
+
background: #dfd
|
119
|
+
}
|
120
|
+
|
121
|
+
pre .diff .change {
|
122
|
+
background: #0086b3
|
123
|
+
}
|
124
|
+
|
125
|
+
pre .chunk {
|
126
|
+
color: #aaa
|
127
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
var hljs=new function(){function l(o){return o.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+(q.parentNode?q.parentNode.className:"")).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o<p.length;o++){if(e[p[o]]||p[o]=="no-highlight"){return p[o]}}}function c(q){var o=[];(function p(r,s){for(var t=r.firstChild;t;t=t.nextSibling){if(t.nodeType==3){s+=t.nodeValue.length}else{if(t.nodeName=="BR"){s+=1}else{if(t.nodeType==1){o.push({event:"start",offset:s,node:t});s=p(t,s);o.push({event:"stop",offset:s,node:t})}}}}return s})(q,0);return o}function j(x,v,w){var p=0;var y="";var r=[];function t(){if(x.length&&v.length){if(x[0].offset!=v[0].offset){return(x[0].offset<v[0].offset)?x:v}else{return v[0].event=="start"?x:v}}else{return x.length?x:v}}function s(A){function z(B){return" "+B.nodeName+'="'+l(B.value)+'"'}return"<"+A.nodeName+Array.prototype.map.call(A.attributes,z).join("")+">"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("</"+o.nodeName.toLowerCase()+">")}while(o!=u.node);r.splice(q,1);while(q<r.length){y+=s(r[q]);q++}}}}return y+l(w.substr(p))}function f(q){function o(s,r){return RegExp(s,"m"+(q.cI?"i":"")+(r?"g":""))}function p(y,w){if(y.compiled){return}y.compiled=true;var s=[];if(y.k){var r={};function z(A,t){t.split(" ").forEach(function(B){var C=B.split("|");r[C[0]]=[A,C[1]?Number(C[1]):1];s.push(C[0])})}y.lR=o(y.l||hljs.IR,true);if(typeof y.k=="string"){z("keyword",y.k)}else{for(var x in y.k){if(!y.k.hasOwnProperty(x)){continue}z(x,y.k[x])}}y.k=r}if(w){if(y.bWK){y.b="\\b("+s.join("|")+")\\b\\s*"}y.bR=o(y.b?y.b:"\\B|\\b");if(!y.e&&!y.eW){y.e="\\B|\\b"}if(y.e){y.eR=o(y.e)}y.tE=y.e||"";if(y.eW&&w.tE){y.tE+=(y.e?"|":"")+w.tE}}if(y.i){y.iR=o(y.i)}if(y.r===undefined){y.r=1}if(!y.c){y.c=[]}for(var v=0;v<y.c.length;v++){if(y.c[v]=="self"){y.c[v]=y}p(y.c[v],y)}if(y.starts){p(y.starts,w)}var u=[];for(var v=0;v<y.c.length;v++){u.push(y.c[v].b)}if(y.tE){u.push(y.tE)}if(y.i){u.push(y.i)}y.t=u.length?o(u.join("|"),true):{exec:function(t){return null}}}p(q)}function d(E,F,C){function o(r,N){for(var M=0;M<N.c.length;M++){var L=N.c[M].bR.exec(r);if(L&&L.index==0){return N.c[M]}}}function s(L,r){if(L.e&&L.eR.test(r)){return L}if(L.eW){return s(L.parent,r)}}function t(r,L){return !C&&L.i&&L.iR.test(r)}function y(M,r){var L=G.cI?r[0].toLowerCase():r[0];return M.k.hasOwnProperty(L)&&M.k[L]}function H(){var L=l(w);if(!A.k){return L}var r="";var O=0;A.lR.lastIndex=0;var M=A.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=y(A,M);if(N){v+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=A.lR.lastIndex;M=A.lR.exec(L)}return r+L.substr(O)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return'<span class="'+r.language+'">'+r.value+"</span>"}function K(){return A.sL!==undefined?z():H()}function J(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){x+=L;w=""}else{if(M.eB){x+=l(r)+L;w=""}else{x+=L;w=r}}A=Object.create(M,{parent:{value:A}});B+=M.r}function D(L,r){w+=L;if(r===undefined){x+=K();return 0}var M=o(r,A);if(M){x+=K();J(M,r);return M.rB?0:r.length}var N=s(A,r);if(N){if(!(N.rE||N.eE)){w+=r}x+=K();do{if(A.cN){x+="</span>"}A=A.parent}while(A!=N.parent);if(N.eE){x+=l(r)}w="";if(N.starts){J(N.starts,"")}return N.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var G=e[E];f(G);var A=G;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(F);if(!u){break}q=D(F.substr(p,u.index-p),u[0]);p=u.index+q}D(F.substr(p));return{r:B,keyword_count:v,value:x,language:E}}catch(I){if(I=="Illegal"){return{r:0,keyword_count:0,value:l(F)}}else{throw I}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s,false);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"<br>")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v,true):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.go=function(a){var b={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{k:b,i:"</",c:[a.CLCM,a.CBLCLM,a.QSM,{cN:"string",b:"'",e:"[^\\\\]'",r:0},{cN:"string",b:"`",e:"`"},{cN:"number",b:"[^a-zA-Z_0-9](\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s)(\\+|\\-)?\\d+)?",r:0},a.CNM]}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ />]+"},b]}]}}(hljs);hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",i:"\\n",c:[{b:"\\\\[\\\\/]"}]},{b:"<",e:">;",sL:"xml"}],r:0},{cN:"function",bWK:true,e:"{",k:"function",c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[a.CLCM,a.CBLCLM],i:"[\"'\\(]"}],i:"\\[|%"}]}}(hljs);hljs.LANGUAGES.css=function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:"import page media charset",c:[c,a.ASM,a.QSM,a.NM]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);
|
data/lib/gokart/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gokart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sass
|
16
|
-
requirement: &
|
16
|
+
requirement: &22302840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22302840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: coffee-script
|
27
|
-
requirement: &
|
27
|
+
requirement: &22302420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *22302420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: therubyracer
|
38
|
-
requirement: &
|
38
|
+
requirement: &22302000 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *22302000
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sprockets
|
49
|
-
requirement: &
|
49
|
+
requirement: &22301580 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *22301580
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: guard
|
60
|
-
requirement: &
|
60
|
+
requirement: &22301160 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *22301160
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-coffeescript
|
71
|
-
requirement: &
|
71
|
+
requirement: &22317100 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *22317100
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: guard-jasmine
|
82
|
-
requirement: &
|
82
|
+
requirement: &22316680 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *22316680
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: guard-sass
|
93
|
-
requirement: &
|
93
|
+
requirement: &22316260 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *22316260
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: guard-rake
|
104
|
-
requirement: &
|
104
|
+
requirement: &22315840 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *22315840
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: guard-livereload
|
115
|
-
requirement: &
|
115
|
+
requirement: &22315420 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *22315420
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: guard-shell
|
126
|
-
requirement: &
|
126
|
+
requirement: &22315000 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *22315000
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: jasmine
|
137
|
-
requirement: &
|
137
|
+
requirement: &22314580 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *22314580
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: yui-compressor
|
148
|
-
requirement: &
|
148
|
+
requirement: &22314160 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *22314160
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: uglifier
|
159
|
-
requirement: &
|
159
|
+
requirement: &22313740 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,10 +164,10 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *22313740
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: bundler
|
170
|
-
requirement: &
|
170
|
+
requirement: &22313240 !ruby/object:Gem::Requirement
|
171
171
|
none: false
|
172
172
|
requirements:
|
173
173
|
- - ! '>='
|
@@ -175,7 +175,7 @@ dependencies:
|
|
175
175
|
version: 1.0.0
|
176
176
|
type: :runtime
|
177
177
|
prerelease: false
|
178
|
-
version_requirements: *
|
178
|
+
version_requirements: *22313240
|
179
179
|
description: Combination of tooks which will make developing webapps using go easier. The
|
180
180
|
gokart gem by default combines SASS, Coffee Script, Rake, and Sprokets with Go to
|
181
181
|
provide a great development environment. This environment supports test driven
|
@@ -194,14 +194,22 @@ files:
|
|
194
194
|
- lib/gokart/environment.rb
|
195
195
|
- lib/gokart/version.rb
|
196
196
|
- assets/Guardfile
|
197
|
+
- assets/pkg/linux_amd64/server/view.a
|
198
|
+
- assets/pkg/linux_amd64/server/config.a
|
199
|
+
- assets/pkg/linux_amd64/server/controller.a
|
197
200
|
- assets/config/config-debug.json
|
198
201
|
- assets/config/config-release.json
|
199
202
|
- assets/config.rb
|
203
|
+
- assets/src/server/server
|
200
204
|
- assets/src/server/controller/static_assets.go
|
205
|
+
- assets/src/server/controller/presentation.go
|
201
206
|
- assets/src/server/controller/home.go
|
202
207
|
- assets/src/server/config/config.go
|
203
208
|
- assets/src/server/main.go
|
209
|
+
- assets/src/server/view/presentation.go
|
204
210
|
- assets/src/server/view/home.go
|
211
|
+
- assets/src/www/vendor/css/github.css
|
212
|
+
- assets/src/www/vendor/js/highlight-min.js
|
205
213
|
- assets/src/www/vendor/js/backbone-min.js
|
206
214
|
- assets/src/www/vendor/js/underscore-min.js
|
207
215
|
- assets/src/www/vendor/js/backbone.js
|
@@ -217,12 +225,16 @@ files:
|
|
217
225
|
- assets/src/www/spec/support/jasmine_config.rb
|
218
226
|
- assets/src/www/app/erb_helpers/erb_helper.rb
|
219
227
|
- assets/src/www/app/scripts/vendor_wrapper.js
|
228
|
+
- assets/src/www/app/scripts/views/presentation_slide_view.js
|
229
|
+
- assets/src/www/app/scripts/views/presentation_view.js
|
230
|
+
- assets/src/www/app/scripts/controllers/presentation_slides_controller.js
|
220
231
|
- assets/src/www/app/scripts/application.js.coffee
|
221
232
|
- assets/src/www/app/scripts/utilities/properties.js.coffee
|
222
233
|
- assets/src/www/app/scripts/utilities/logger.js.coffee
|
223
234
|
- assets/src/www/app/scripts/utilities/deferred.js.coffee
|
224
235
|
- assets/src/www/app/scripts/utilities/require.js
|
225
236
|
- assets/src/www/app/scripts/pages/home.js
|
237
|
+
- assets/src/www/app/scripts/pages/presentation.js
|
226
238
|
- assets/src/www/app/templates/base.gotmpl.erb
|
227
239
|
- assets/src/www/app/templates/partials/test.gotmpl
|
228
240
|
- assets/src/www/app/templates/partials/test2.gotmpl
|
@@ -230,7 +242,10 @@ files:
|
|
230
242
|
- assets/src/www/app/templates/partials_end.gotmpl
|
231
243
|
- assets/src/www/app/templates/application.gotmpl
|
232
244
|
- assets/src/www/app/templates/pages/home.gotmpl
|
245
|
+
- assets/src/www/app/templates/pages/presentation.gotmpl
|
246
|
+
- assets/src/www/app/sass/presentation.css.scss
|
233
247
|
- assets/src/www/app/sass/application.css.scss
|
248
|
+
- assets/src/www/app/sass/utils.scss
|
234
249
|
- assets/tasks/app.rake
|
235
250
|
- assets/tasks/server.rake
|
236
251
|
- assets/tasks/www.rake
|