ende 0.3.5 → 0.3.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.
@@ -1,39 +1,111 @@
1
1
  'use strict';
2
2
 
3
+ window.domo = []
4
+
3
5
  # TODO define componentjs required packages, as requirejs packages
4
6
  observable = require('indefinido-observable').mixin
5
7
 
6
- define ->
7
- (widget) ->
8
+ define ['stampit/stampit'], (stampit) ->
8
9
 
9
- widget = observable widget
10
+ scopingable = stampit
11
+ start: ->
12
+ deferred = @widget.sandbox.data.deferred()
10
13
 
11
- # TODO transfer data from old scope to new one
12
- # widget.subscribe 'scope', ->
14
+ # Update the scope after resolution
15
+ deferred.done ->
16
+ for scope_name, data of @widget.scopings
17
+ @widget.forward_scope_data scope_name, data
13
18
 
14
- enhance_presenter = (presenter) ->
15
- widget = @
16
- presenter.presentation ||= {binders: {}}
17
- presenter.presentation.binders ||= {}
19
+ # TODO think of a better method name than repopulate
20
+ @widget.repopulate()
21
+
22
+ @deferred = deferred
23
+
24
+ reset: ->
25
+ @start()
26
+
27
+ # TODO move bindings logic to here
28
+ enqueue: (scope_name, value) ->
29
+ @widget.scopings[scope_name] = value
30
+ ,
31
+ deferred: null
32
+ scopings: null
33
+ , ->
34
+
35
+ @widget.scopings ||= {}
18
36
 
19
- {presentation: {binders}} = presenter
37
+ # Resolve scopings after scoping has ended
38
+ @resolve = _.debounce =>
39
+ @deferred.resolveWith @, [@scopings]
40
+ @reset()
20
41
 
42
+ @
43
+
44
+
45
+
46
+ scopable = stampit
47
+ forward_scope_data: (scope_name, data) ->
48
+ switch @scope['$' + scope_name].constructor
49
+ when Array
50
+ data = [data] unless $.type(data) == 'array'
51
+ @scope[scope_name] data...
52
+ else
53
+ @scope[scope_name] data
54
+
55
+ enhancable_presenter: (presenter) ->
56
+ widget = @
57
+ scoping = scopingable widget: @
58
+ scoping.start()
59
+
60
+ # Update presenter interface to support binders customization
61
+ presenter.presentation ||= {binders: {}}
62
+ presenter.presentation.binders ||= {}
63
+ {presentation: {binders}} = presenter
21
64
 
65
+ # Create custom bindings for this scope, for storing scope
66
+ # changes per widget instance
22
67
  binders['scope-*'] =
23
68
  bind: ->
24
69
  @scope_name = @args[0].replace /-/g, '_'
70
+ @widget = widget
25
71
  routine: (element, value) ->
26
- widget.scope_to widget.scope[@scope_name] value
72
+ scoping.enqueue @scope_name, value
73
+ scoping.resolve()
27
74
 
28
75
  binders.scope =
29
-
76
+ bind: ->
77
+ @widget = widget
30
78
  routine: (element, value) ->
31
79
  keypath = @keypath.substring 1 if @keypath[0] == '_'
32
80
  name = "by_#{@key}_#{keypath || @keypath}"
33
- widget.scope_to widget.scope[name] value
34
81
 
35
- enhance_presenter.call widget, widget.presenter
36
- widget.subscribe 'presenter', enhance_presenter
82
+ scoping.enqueue name, value
83
+ scoping.resolve()
84
+
85
+
86
+ ,
87
+ scopings: null
88
+ , ->
89
+
90
+ observable @widget
91
+
92
+ # TODO compose this factory with the widget factory instead of
93
+ # creating a new instance and merging methods
94
+ stampit.mixIn @widget, scopable.fixed.methods
95
+
96
+ # TODO transfer data from old scope to new one
97
+ # widget.subscribe 'scope', ->
98
+
99
+ # TODO @widget.scopings = scopings = []
100
+ @widget.scopings = []
101
+ @enhancable_presenter.call @widget, @widget.presenter
102
+ @widget.subscribe 'presenter', @widget.enhancable_presenter
103
+
104
+ @widget
105
+
106
+
107
+ (widget) -> scopable widget: widget
108
+
37
109
 
38
110
 
39
111
 
data/lib/ende/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ende
2
- VERSION = "0.3.5"
2
+ VERSION = "0.3.6"
3
3
  end
@@ -0,0 +1,111 @@
1
+ .overlay {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ opacity: 1;
6
+ width: 100%;
7
+ height: 100%;
8
+ background: rgba(0,0,0,.75);
9
+ -webkit-transition: opacity 300ms;
10
+ -moz-transition: opacity 300ms;
11
+ transition: opacity 300ms;
12
+ z-index: 500;
13
+ }
14
+
15
+ .overlay.hide {
16
+ pointer-events: none;
17
+ opacity: 0;
18
+ }
19
+
20
+ #dialog {
21
+ position: fixed;
22
+ left: 50%;
23
+ top: 150px;
24
+ max-width: 600px;
25
+ min-width: 250px;
26
+ border: 1px solid #eee;
27
+ background: white;
28
+ z-index: 1000;
29
+ }
30
+
31
+ #dialog .content {
32
+ padding: 15px 20px;
33
+ }
34
+
35
+ #dialog h1 {
36
+ margin: 0 0 5px 0;
37
+ font-size: 16px;
38
+ font-weight: normal;
39
+ }
40
+
41
+ #dialog p {
42
+ margin: 0;
43
+ padding: 0;
44
+ font-size: .9em;
45
+ }
46
+
47
+ /* close */
48
+
49
+ #dialog .close {
50
+ position: absolute;
51
+ top: 3px;
52
+ right: 10px;
53
+ text-decoration: none;
54
+ color: #888;
55
+ font-size: 16px;
56
+ font-weight: bold;
57
+ display: none;
58
+ }
59
+
60
+ #dialog .close em {
61
+ display: none;
62
+ }
63
+
64
+ #dialog.closable .close {
65
+ display: block;
66
+ }
67
+
68
+ #dialog .close:hover {
69
+ color: black;
70
+ }
71
+
72
+ #dialog .close:active {
73
+ margin-top: 1px;
74
+ }
75
+
76
+ /* slide */
77
+
78
+ #dialog.slide {
79
+ -webkit-transition: opacity 300ms, top 300ms;
80
+ -moz-transition: opacity 300ms, top 300ms;
81
+ }
82
+
83
+ #dialog.slide.hide {
84
+ opacity: 0;
85
+ top: -500px;
86
+ }
87
+
88
+ /* fade */
89
+
90
+ #dialog.fade {
91
+ -webkit-transition: opacity 300ms;
92
+ -moz-transition: opacity 300ms;
93
+ }
94
+
95
+ #dialog.fade.hide {
96
+ opacity: 0;
97
+ }
98
+
99
+ /* scale */
100
+
101
+ #dialog.scale {
102
+ -webkit-transition: -webkit-transform 300ms;
103
+ -moz-transition: -moz-transform 300ms;
104
+ -webkit-transform: scale(1);
105
+ -moz-transform: scale(1);
106
+ }
107
+
108
+ #dialog.scale.hide {
109
+ -webkit-transform: scale(0);
110
+ -moz-transform: scale(0);
111
+ }