frank-cucumber 0.9.6 → 0.9.7

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.
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);