frank-cucumber 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/frank-skeleton/frank_static_resources.bundle/index.html +29 -34
  2. data/frank-skeleton/frank_static_resources.bundle/{index.haml → index.html.haml} +28 -29
  3. data/frank-skeleton/frank_static_resources.bundle/js/accessible_views_view.coffee +41 -0
  4. data/frank-skeleton/frank_static_resources.bundle/js/accessible_views_view.js +46 -0
  5. data/frank-skeleton/frank_static_resources.bundle/js/controller.coffee +129 -0
  6. data/frank-skeleton/frank_static_resources.bundle/js/controller.js +142 -0
  7. data/frank-skeleton/frank_static_resources.bundle/js/details_view.coffee +42 -0
  8. data/frank-skeleton/frank_static_resources.bundle/js/details_view.js +51 -0
  9. data/frank-skeleton/frank_static_resources.bundle/js/dropdown_control.coffee +64 -0
  10. data/frank-skeleton/frank_static_resources.bundle/js/dropdown_control.js +73 -0
  11. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_model.coffee +46 -0
  12. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_model.js +59 -0
  13. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_view.coffee +167 -0
  14. data/frank-skeleton/frank_static_resources.bundle/js/ersatz_view.js +198 -0
  15. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_model.coffee +10 -0
  16. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_model.js +17 -0
  17. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_view.coffee +43 -0
  18. data/frank-skeleton/frank_static_resources.bundle/js/experiment_bar_view.js +60 -0
  19. data/frank-skeleton/frank_static_resources.bundle/js/frank.coffee +96 -0
  20. data/frank-skeleton/frank_static_resources.bundle/js/frank.js +118 -0
  21. data/frank-skeleton/frank_static_resources.bundle/js/lib/backbone.js +1431 -0
  22. data/frank-skeleton/frank_static_resources.bundle/{coffee-script.js → js/lib/coffee-script.js} +0 -0
  23. data/frank-skeleton/frank_static_resources.bundle/{jquery-ui.min.js → js/lib/jquery-ui.min.js} +0 -0
  24. data/frank-skeleton/frank_static_resources.bundle/{jquery.min.js → js/lib/jquery.min.js} +0 -0
  25. data/frank-skeleton/frank_static_resources.bundle/{jquery.treeview.js → js/lib/jquery.treeview.js} +0 -0
  26. data/frank-skeleton/frank_static_resources.bundle/{json2.js → js/lib/json2.js} +0 -0
  27. data/frank-skeleton/frank_static_resources.bundle/js/lib/raphael.js +5815 -0
  28. data/frank-skeleton/frank_static_resources.bundle/js/lib/require.js +2053 -0
  29. data/frank-skeleton/frank_static_resources.bundle/{underscore.js → js/lib/underscore.js} +466 -177
  30. data/frank-skeleton/frank_static_resources.bundle/js/main.coffee +27 -0
  31. data/frank-skeleton/frank_static_resources.bundle/js/main.js +29 -0
  32. data/frank-skeleton/frank_static_resources.bundle/js/tabs_controller.coffee +13 -0
  33. data/frank-skeleton/frank_static_resources.bundle/js/tabs_controller.js +22 -0
  34. data/frank-skeleton/frank_static_resources.bundle/js/toast_controller.coffee +15 -0
  35. data/frank-skeleton/frank_static_resources.bundle/js/toast_controller.js +28 -0
  36. data/frank-skeleton/frank_static_resources.bundle/js/transform_stack.coffee +59 -0
  37. data/frank-skeleton/frank_static_resources.bundle/js/transform_stack.js +78 -0
  38. data/frank-skeleton/frank_static_resources.bundle/js/tree_view.coffee +53 -0
  39. data/frank-skeleton/frank_static_resources.bundle/js/tree_view.js +64 -0
  40. data/frank-skeleton/frank_static_resources.bundle/js/view_heir_model.coffee +37 -0
  41. data/frank-skeleton/frank_static_resources.bundle/js/view_heir_model.js +48 -0
  42. data/frank-skeleton/frank_static_resources.bundle/js/view_model.coffee +39 -0
  43. data/frank-skeleton/frank_static_resources.bundle/js/view_model.js +62 -0
  44. data/frank-skeleton/frank_static_resources.bundle/symbiote.css +116 -84
  45. data/lib/frank-cucumber/frankifier.rb +20 -2
  46. data/lib/frank-cucumber/version.rb +1 -1
  47. metadata +70 -38
  48. data/frank-skeleton/frank_static_resources.bundle/raphael-min.js +0 -7
  49. data/frank-skeleton/frank_static_resources.bundle/symbiote.js +0 -585
  50. data/frank-skeleton/frank_static_resources.bundle/symbiote_ui.coffee +0 -39
@@ -0,0 +1,27 @@
1
+ require ['controller','tabs_controller','tree_view','ersatz_view','details_view', 'accessible_views_view','experiment_bar_view','toast_controller'], (createMainController,createTabsController,TreeView,ErsatzView,DetailsView,AccessibleViewsView,ExperimentBarView,createToastController)->
2
+ $ ->
3
+ treeView = new TreeView()
4
+
5
+ ersatzView = new ErsatzView()
6
+ detailsView = new DetailsView()
7
+ accessibleViewsView = new AccessibleViewsView()
8
+ experimentBarView = new ExperimentBarView()
9
+
10
+ tabsController = createTabsController( $("#list-tabs"), $("#inspect-tabs") );
11
+ toastController = createToastController( $('.toast') )
12
+
13
+ mainController = createMainController(
14
+ tabsController: tabsController
15
+ toastController: toastController
16
+ treeView: treeView
17
+ ersatzView: ersatzView
18
+ detailsView: detailsView
19
+ accessibleViewsView: accessibleViewsView
20
+ experimentBarModel: experimentBarView.model
21
+ $asplodeButton: $('#asploder button')
22
+ $reloadButton: $('button#dump_button')
23
+ $liveButton: $('#live-view button')
24
+ )
25
+ mainController.boot()
26
+
27
+
@@ -0,0 +1,29 @@
1
+ (function() {
2
+
3
+ require(['controller', 'tabs_controller', 'tree_view', 'ersatz_view', 'details_view', 'accessible_views_view', 'experiment_bar_view', 'toast_controller'], function(createMainController, createTabsController, TreeView, ErsatzView, DetailsView, AccessibleViewsView, ExperimentBarView, createToastController) {
4
+ return $(function() {
5
+ var accessibleViewsView, detailsView, ersatzView, experimentBarView, mainController, tabsController, toastController, treeView;
6
+ treeView = new TreeView();
7
+ ersatzView = new ErsatzView();
8
+ detailsView = new DetailsView();
9
+ accessibleViewsView = new AccessibleViewsView();
10
+ experimentBarView = new ExperimentBarView();
11
+ tabsController = createTabsController($("#list-tabs"), $("#inspect-tabs"));
12
+ toastController = createToastController($('.toast'));
13
+ mainController = createMainController({
14
+ tabsController: tabsController,
15
+ toastController: toastController,
16
+ treeView: treeView,
17
+ ersatzView: ersatzView,
18
+ detailsView: detailsView,
19
+ accessibleViewsView: accessibleViewsView,
20
+ experimentBarModel: experimentBarView.model,
21
+ $asplodeButton: $('#asploder button'),
22
+ $reloadButton: $('button#dump_button'),
23
+ $liveButton: $('#live-view button')
24
+ });
25
+ return mainController.boot();
26
+ });
27
+ });
28
+
29
+ }).call(this);
@@ -0,0 +1,13 @@
1
+ define ->
2
+
3
+ createController = ($listTabs,$inspectTabs)->
4
+ $listTabs.tabs();
5
+ $inspectTabs.tabs();
6
+
7
+ selectViewDetailsTab = -> $inspectTabs.tabs('select', 0)
8
+ selectLocatorTab = -> $inspectTabs.tabs('select', 1)
9
+ {
10
+ selectViewDetailsTab: selectViewDetailsTab
11
+ selectLocatorTab: selectLocatorTab
12
+ }
13
+
@@ -0,0 +1,22 @@
1
+ (function() {
2
+
3
+ define(function() {
4
+ var createController;
5
+ return createController = function($listTabs, $inspectTabs) {
6
+ var selectLocatorTab, selectViewDetailsTab;
7
+ $listTabs.tabs();
8
+ $inspectTabs.tabs();
9
+ selectViewDetailsTab = function() {
10
+ return $inspectTabs.tabs('select', 0);
11
+ };
12
+ selectLocatorTab = function() {
13
+ return $inspectTabs.tabs('select', 1);
14
+ };
15
+ return {
16
+ selectViewDetailsTab: selectViewDetailsTab,
17
+ selectLocatorTab: selectLocatorTab
18
+ };
19
+ };
20
+ });
21
+
22
+ }).call(this);
@@ -0,0 +1,15 @@
1
+ TOAST_SHOW_TIME = 3000
2
+ define ->
3
+ createController = ($toast)->
4
+ existingTimeout = undefined
5
+
6
+ hideToast = -> $toast.removeClass('show')
7
+
8
+ hideToast()
9
+
10
+ showToastMessage: (message)->
11
+ $toast.addClass('show')
12
+ $toast.html(message)
13
+
14
+ window.clearTimeout(existingTimeout) if existingTimeout?
15
+ existingTimeout = window.setTimeout( hideToast, TOAST_SHOW_TIME )
@@ -0,0 +1,28 @@
1
+ (function() {
2
+ var TOAST_SHOW_TIME;
3
+
4
+ TOAST_SHOW_TIME = 3000;
5
+
6
+ define(function() {
7
+ var createController;
8
+ return createController = function($toast) {
9
+ var existingTimeout, hideToast;
10
+ existingTimeout = void 0;
11
+ hideToast = function() {
12
+ return $toast.removeClass('show');
13
+ };
14
+ hideToast();
15
+ return {
16
+ showToastMessage: function(message) {
17
+ $toast.addClass('show');
18
+ $toast.html(message);
19
+ if (existingTimeout != null) {
20
+ window.clearTimeout(existingTimeout);
21
+ }
22
+ return existingTimeout = window.setTimeout(hideToast, TOAST_SHOW_TIME);
23
+ }
24
+ };
25
+ };
26
+ });
27
+
28
+ }).call(this);
@@ -0,0 +1,59 @@
1
+ R = Raphael
2
+
3
+ define ->
4
+ (initialMatrix)->
5
+ currentMatrix = initialMatrix || R.matrix()
6
+ stack = [currentMatrix]
7
+
8
+ clone = ->
9
+ transformStack( currentMatrix.clone() )
10
+
11
+
12
+ push = ->
13
+ stack.push( currentMatrix )
14
+ currentMatrix = currentMatrix.clone()
15
+ @
16
+
17
+ pop = ->
18
+ stack.pop()
19
+ currentMatrix = _.last( stack )
20
+ @
21
+
22
+ desc = ->
23
+ currentMatrix.toTransformString()
24
+
25
+ descAndPop = ->
26
+ str = desc()
27
+ pop()
28
+ str
29
+
30
+ prefixedWithTranslate = (x,y)->
31
+ prefix = R.matrix()
32
+ prefix.translate(x,y)
33
+ prefix.add( currentMatrix )
34
+ prefix
35
+
36
+
37
+ chainerFor = ( methodName )->
38
+ (args...)->
39
+ currentMatrix[methodName](args...)
40
+ @
41
+
42
+ translate = chainerFor('translate')
43
+ rotate = chainerFor('rotate')
44
+ scale = chainerFor('scale')
45
+
46
+ skew = (x,y)->
47
+ x = R.rad(x)
48
+ y = R.rad(y)
49
+ currentMatrix.add( 1, 0, Math.tan(x), 1, 0, 0 )
50
+ currentMatrix.add( 1, Math.tan(y), 0, 1, 0, 0 )
51
+ @
52
+
53
+ rotateAroundPoint = (rot,x,y)->
54
+ @translate(x,y).rotate(rot).translate(-x,-y)
55
+
56
+ {
57
+ clone, translate, rotate, scale, skew, rotateAroundPoint,
58
+ push, pop, desc, descAndPop, prefixedWithTranslate
59
+ }
@@ -0,0 +1,78 @@
1
+ (function() {
2
+ var R,
3
+ __slice = [].slice;
4
+
5
+ R = Raphael;
6
+
7
+ define(function() {
8
+ return function(initialMatrix) {
9
+ var chainerFor, clone, currentMatrix, desc, descAndPop, pop, prefixedWithTranslate, push, rotate, rotateAroundPoint, scale, skew, stack, translate;
10
+ currentMatrix = initialMatrix || R.matrix();
11
+ stack = [currentMatrix];
12
+ clone = function() {
13
+ return transformStack(currentMatrix.clone());
14
+ };
15
+ push = function() {
16
+ stack.push(currentMatrix);
17
+ currentMatrix = currentMatrix.clone();
18
+ return this;
19
+ };
20
+ pop = function() {
21
+ stack.pop();
22
+ currentMatrix = _.last(stack);
23
+ return this;
24
+ };
25
+ desc = function() {
26
+ return currentMatrix.toTransformString();
27
+ };
28
+ descAndPop = function() {
29
+ var str;
30
+ str = desc();
31
+ pop();
32
+ return str;
33
+ };
34
+ prefixedWithTranslate = function(x, y) {
35
+ var prefix;
36
+ prefix = R.matrix();
37
+ prefix.translate(x, y);
38
+ prefix.add(currentMatrix);
39
+ return prefix;
40
+ };
41
+ chainerFor = function(methodName) {
42
+ return function() {
43
+ var args;
44
+ args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
45
+ currentMatrix[methodName].apply(currentMatrix, args);
46
+ return this;
47
+ };
48
+ };
49
+ translate = chainerFor('translate');
50
+ rotate = chainerFor('rotate');
51
+ scale = chainerFor('scale');
52
+ skew = function(x, y) {
53
+ x = R.rad(x);
54
+ y = R.rad(y);
55
+ currentMatrix.add(1, 0, Math.tan(x), 1, 0, 0);
56
+ currentMatrix.add(1, Math.tan(y), 0, 1, 0, 0);
57
+ return this;
58
+ };
59
+ rotateAroundPoint = function(rot, x, y) {
60
+ return this.translate(x, y).rotate(rot).translate(-x, -y);
61
+ };
62
+ return {
63
+ clone: clone,
64
+ translate: translate,
65
+ rotate: rotate,
66
+ scale: scale,
67
+ skew: skew,
68
+ rotateAroundPoint: rotateAroundPoint,
69
+ push: push,
70
+ pop: pop,
71
+ desc: desc,
72
+ descAndPop: descAndPop,
73
+ prefixedWithTranslate: prefixedWithTranslate
74
+ };
75
+ };
76
+ });
77
+
78
+ }).call(this);
@@ -0,0 +1,53 @@
1
+ define ['view_heir_model'],(ViewHeirModel)->
2
+
3
+ TreeNodeView = Backbone.View.extend
4
+ tagName: 'li'
5
+
6
+ initialize: ->
7
+ @model.on 'change:selected', _.bind( @refreshSelectedness, @ )
8
+
9
+ $a: -> @$( '> a' )
10
+
11
+ render: ->
12
+ $childList = $("<ul/>")
13
+
14
+ for child in @model.get('children')
15
+ childView = new TreeNodeView( model: child )
16
+ $childList.append( childView.render().el )
17
+
18
+ @$el.append("<a>#{@model.getDesc()}</a>").append($childList)
19
+
20
+ # have to do this by hand rather than with events property
21
+ # because BB doesn't appear to let you bind to just immediate
22
+ # descendants using e.g. "mouseenter > a"
23
+ @$a()
24
+ .on( 'mouseenter', => @model.setActive() )
25
+ .on( 'mouseleave', => @model.unsetActive() )
26
+ .on( 'click', => @model.trigger('selected',@model) )
27
+
28
+ @refreshSelectedness()
29
+ @
30
+
31
+ refreshSelectedness: ->
32
+ if @model.get('selected')
33
+ @$a().addClass('selected')
34
+ else
35
+ @$a().removeClass('selected')
36
+
37
+
38
+
39
+
40
+
41
+ TreeView = Backbone.View.extend
42
+ el: $('#dom-dump > ul')
43
+
44
+ initialize: ->
45
+ @model = new ViewHeirModel()
46
+ @model.on 'change', _.bind(@refresh,@)
47
+
48
+ refresh: ->
49
+ @$el.empty()
50
+ rootNodeView = new TreeNodeView(model: @model.get('root'))
51
+ @$el.append( rootNodeView.render().el )
52
+ @$el.treeview( collapsed: false )
53
+
@@ -0,0 +1,64 @@
1
+ (function() {
2
+
3
+ define(['view_heir_model'], function(ViewHeirModel) {
4
+ var TreeNodeView, TreeView;
5
+ TreeNodeView = Backbone.View.extend({
6
+ tagName: 'li',
7
+ initialize: function() {
8
+ return this.model.on('change:selected', _.bind(this.refreshSelectedness, this));
9
+ },
10
+ $a: function() {
11
+ return this.$('> a');
12
+ },
13
+ render: function() {
14
+ var $childList, child, childView, _i, _len, _ref,
15
+ _this = this;
16
+ $childList = $("<ul/>");
17
+ _ref = this.model.get('children');
18
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
19
+ child = _ref[_i];
20
+ childView = new TreeNodeView({
21
+ model: child
22
+ });
23
+ $childList.append(childView.render().el);
24
+ }
25
+ this.$el.append("<a>" + (this.model.getDesc()) + "</a>").append($childList);
26
+ this.$a().on('mouseenter', function() {
27
+ return _this.model.setActive();
28
+ }).on('mouseleave', function() {
29
+ return _this.model.unsetActive();
30
+ }).on('click', function() {
31
+ return _this.model.trigger('selected', _this.model);
32
+ });
33
+ this.refreshSelectedness();
34
+ return this;
35
+ },
36
+ refreshSelectedness: function() {
37
+ if (this.model.get('selected')) {
38
+ return this.$a().addClass('selected');
39
+ } else {
40
+ return this.$a().removeClass('selected');
41
+ }
42
+ }
43
+ });
44
+ return TreeView = Backbone.View.extend({
45
+ el: $('#dom-dump > ul'),
46
+ initialize: function() {
47
+ this.model = new ViewHeirModel();
48
+ return this.model.on('change', _.bind(this.refresh, this));
49
+ },
50
+ refresh: function() {
51
+ var rootNodeView;
52
+ this.$el.empty();
53
+ rootNodeView = new TreeNodeView({
54
+ model: this.model.get('root')
55
+ });
56
+ this.$el.append(rootNodeView.render().el);
57
+ return this.$el.treeview({
58
+ collapsed: false
59
+ });
60
+ }
61
+ });
62
+ });
63
+
64
+ }).call(this);
@@ -0,0 +1,37 @@
1
+ define ['view_model'], (ViewModel)->
2
+ ViewCollection = Backbone.Collection
3
+
4
+ flatten = (rootViewModel)->
5
+ flattenedViewModels = [rootViewModel]
6
+ for childViewModel in rootViewModel.get('children')
7
+ flattenedViewModels = flattenedViewModels.concat( flatten(childViewModel) )
8
+
9
+ flattenedViewModels
10
+
11
+
12
+
13
+ ViewHeirModel = Backbone.Model.extend
14
+ getAccessibleViews: ->
15
+ @get( 'allViews' ).filter (viewModel)-> viewModel.has('accessibilityLabel')
16
+
17
+ resetViewHeir: (rawRootView)->
18
+ rootViewModel = new ViewModel(rawRootView)
19
+ allViews = new ViewCollection( flatten( rootViewModel ) )
20
+
21
+ allViews.on 'change:active', (viewModel)=>
22
+ if viewModel.get('active')
23
+ @trigger( 'active-view-changed', viewModel )
24
+
25
+ allViews.on 'selected', (selectedViewModel)=>
26
+ allViews.each (viewModel)->
27
+ viewModel.set('selected',viewModel == selectedViewModel)
28
+ @trigger( 'selected-view-changed', selectedViewModel )
29
+
30
+ allViews.on 'accessible-selected', (viewModel)=>
31
+ @trigger( 'accessible-view-selected', viewModel )
32
+
33
+ @set( 'root', rootViewModel )
34
+ @set( 'allViews', allViews )
35
+
36
+
37
+ ViewHeirModel
@@ -0,0 +1,48 @@
1
+ (function() {
2
+
3
+ define(['view_model'], function(ViewModel) {
4
+ var ViewCollection, ViewHeirModel, flatten;
5
+ ViewCollection = Backbone.Collection;
6
+ flatten = function(rootViewModel) {
7
+ var childViewModel, flattenedViewModels, _i, _len, _ref;
8
+ flattenedViewModels = [rootViewModel];
9
+ _ref = rootViewModel.get('children');
10
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
11
+ childViewModel = _ref[_i];
12
+ flattenedViewModels = flattenedViewModels.concat(flatten(childViewModel));
13
+ }
14
+ return flattenedViewModels;
15
+ };
16
+ ViewHeirModel = Backbone.Model.extend({
17
+ getAccessibleViews: function() {
18
+ return this.get('allViews').filter(function(viewModel) {
19
+ return viewModel.has('accessibilityLabel');
20
+ });
21
+ },
22
+ resetViewHeir: function(rawRootView) {
23
+ var allViews, rootViewModel,
24
+ _this = this;
25
+ rootViewModel = new ViewModel(rawRootView);
26
+ allViews = new ViewCollection(flatten(rootViewModel));
27
+ allViews.on('change:active', function(viewModel) {
28
+ if (viewModel.get('active')) {
29
+ return _this.trigger('active-view-changed', viewModel);
30
+ }
31
+ });
32
+ allViews.on('selected', function(selectedViewModel) {
33
+ allViews.each(function(viewModel) {
34
+ return viewModel.set('selected', viewModel === selectedViewModel);
35
+ });
36
+ return _this.trigger('selected-view-changed', selectedViewModel);
37
+ });
38
+ allViews.on('accessible-selected', function(viewModel) {
39
+ return _this.trigger('accessible-view-selected', viewModel);
40
+ });
41
+ this.set('root', rootViewModel);
42
+ return this.set('allViews', allViews);
43
+ }
44
+ });
45
+ return ViewHeirModel;
46
+ });
47
+
48
+ }).call(this);