agt 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.md +7 -0
- data/README.md +5 -0
- data/app/assets/javascripts/agt/config.coffee +9 -0
- data/app/assets/javascripts/agt/dom.coffee +12 -0
- data/app/assets/javascripts/agt/function.coffee +317 -0
- data/app/assets/javascripts/agt/geom/circle.coffee +338 -0
- data/app/assets/javascripts/agt/geom/cubic_bezier.coffee +37 -0
- data/app/assets/javascripts/agt/geom/diamond.coffee +241 -0
- data/app/assets/javascripts/agt/geom/ellipsis.coffee +141 -0
- data/app/assets/javascripts/agt/geom/linear_spline.coffee +56 -0
- data/app/assets/javascripts/agt/geom/matrix.coffee +240 -0
- data/app/assets/javascripts/agt/geom/mixins/geometry.coffee +171 -0
- data/app/assets/javascripts/agt/geom/mixins/intersections.coffee +150 -0
- data/app/assets/javascripts/agt/geom/mixins/path.coffee +145 -0
- data/app/assets/javascripts/agt/geom/mixins/proxyable.coffee +9 -0
- data/app/assets/javascripts/agt/geom/mixins/spline.coffee +329 -0
- data/app/assets/javascripts/agt/geom/mixins/surface.coffee +55 -0
- data/app/assets/javascripts/agt/geom/mixins/triangulable.coffee +112 -0
- data/app/assets/javascripts/agt/geom/point.coffee +454 -0
- data/app/assets/javascripts/agt/geom/polygon.coffee +119 -0
- data/app/assets/javascripts/agt/geom/quad_bezier.coffee +43 -0
- data/app/assets/javascripts/agt/geom/quint_bezier.coffee +42 -0
- data/app/assets/javascripts/agt/geom/rectangle.coffee +599 -0
- data/app/assets/javascripts/agt/geom/spiral.coffee +90 -0
- data/app/assets/javascripts/agt/geom/transformation_proxy.coffee +43 -0
- data/app/assets/javascripts/agt/geom/triangle.coffee +442 -0
- data/app/assets/javascripts/agt/impulse.coffee +105 -0
- data/app/assets/javascripts/agt/index.coffee +56 -0
- data/app/assets/javascripts/agt/inflector/inflection.coffee +21 -0
- data/app/assets/javascripts/agt/inflector/inflections.coffee +75 -0
- data/app/assets/javascripts/agt/inflector/inflector.coffee +235 -0
- data/app/assets/javascripts/agt/inheritance.coffee +132 -0
- data/app/assets/javascripts/agt/math.coffee +45 -0
- data/app/assets/javascripts/agt/mixins/activable.coffee +31 -0
- data/app/assets/javascripts/agt/mixins/aliasable.coffee +25 -0
- data/app/assets/javascripts/agt/mixins/alternate_case.coffee +72 -0
- data/app/assets/javascripts/agt/mixins/cloneable.coffee +71 -0
- data/app/assets/javascripts/agt/mixins/delegation.coffee +90 -0
- data/app/assets/javascripts/agt/mixins/disposable.coffee +7 -0
- data/app/assets/javascripts/agt/mixins/equatable.coffee +37 -0
- data/app/assets/javascripts/agt/mixins/formattable.coffee +52 -0
- data/app/assets/javascripts/agt/mixins/globalizable.coffee +175 -0
- data/app/assets/javascripts/agt/mixins/has_ancestors.coffee +47 -0
- data/app/assets/javascripts/agt/mixins/has_collection.coffee +107 -0
- data/app/assets/javascripts/agt/mixins/has_nested_collection.coffee +51 -0
- data/app/assets/javascripts/agt/mixins/memoizable.coffee +64 -0
- data/app/assets/javascripts/agt/mixins/parameterizable.coffee +101 -0
- data/app/assets/javascripts/agt/mixins/poolable.coffee +62 -0
- data/app/assets/javascripts/agt/mixins/sourcable.coffee +45 -0
- data/app/assets/javascripts/agt/mixins/state_machine.coffee +47 -0
- data/app/assets/javascripts/agt/net/router.coffee +165 -0
- data/app/assets/javascripts/agt/object.coffee +9 -0
- data/app/assets/javascripts/agt/particles/actions/base_action.coffee +7 -0
- data/app/assets/javascripts/agt/particles/actions/die_on_surface.coffee +14 -0
- data/app/assets/javascripts/agt/particles/actions/force.coffee +11 -0
- data/app/assets/javascripts/agt/particles/actions/friction.coffee +14 -0
- data/app/assets/javascripts/agt/particles/actions/live.coffee +9 -0
- data/app/assets/javascripts/agt/particles/actions/macro_action.coffee +13 -0
- data/app/assets/javascripts/agt/particles/actions/move.coffee +11 -0
- data/app/assets/javascripts/agt/particles/actions/null_action.coffee +9 -0
- data/app/assets/javascripts/agt/particles/counters/by_rate.coffee +17 -0
- data/app/assets/javascripts/agt/particles/counters/fixed.coffee +9 -0
- data/app/assets/javascripts/agt/particles/counters/null_counter.coffee +9 -0
- data/app/assets/javascripts/agt/particles/emission.coffee +35 -0
- data/app/assets/javascripts/agt/particles/emitters/null_emitter.coffee +7 -0
- data/app/assets/javascripts/agt/particles/emitters/path.coffee +10 -0
- data/app/assets/javascripts/agt/particles/emitters/ponctual.coffee +9 -0
- data/app/assets/javascripts/agt/particles/emitters/surface.coffee +10 -0
- data/app/assets/javascripts/agt/particles/initializers/explosion.coffee +19 -0
- data/app/assets/javascripts/agt/particles/initializers/life.coffee +16 -0
- data/app/assets/javascripts/agt/particles/initializers/macro_initializer.coffee +10 -0
- data/app/assets/javascripts/agt/particles/initializers/null_initializer.coffee +7 -0
- data/app/assets/javascripts/agt/particles/initializers/particle_sub_system.coffee +12 -0
- data/app/assets/javascripts/agt/particles/initializers/stream.coffee +20 -0
- data/app/assets/javascripts/agt/particles/mixins/randomizable.coffee +10 -0
- data/app/assets/javascripts/agt/particles/particle.coffee +32 -0
- data/app/assets/javascripts/agt/particles/sub_system.coffee +11 -0
- data/app/assets/javascripts/agt/particles/system.coffee +103 -0
- data/app/assets/javascripts/agt/particles/timers/instant.coffee +11 -0
- data/app/assets/javascripts/agt/particles/timers/limited.coffee +19 -0
- data/app/assets/javascripts/agt/particles/timers/null_timer.coffee +11 -0
- data/app/assets/javascripts/agt/particles/timers/unlimited.coffee +9 -0
- data/app/assets/javascripts/agt/particles/timers/until_death.coffee +11 -0
- data/app/assets/javascripts/agt/promise.coffee +214 -0
- data/app/assets/javascripts/agt/random/random.coffee +100 -0
- data/app/assets/javascripts/agt/random/seeds/lagged_fibonnacci.coffee +53 -0
- data/app/assets/javascripts/agt/random/seeds/linear.coffee +16 -0
- data/app/assets/javascripts/agt/random/seeds/linear_congruential.coffee +23 -0
- data/app/assets/javascripts/agt/random/seeds/math_random.coffee +9 -0
- data/app/assets/javascripts/agt/random/seeds/mersenne_twister.coffee +42 -0
- data/app/assets/javascripts/agt/random/seeds/no_random.coffee +12 -0
- data/app/assets/javascripts/agt/random/seeds/paul_houle.coffee +19 -0
- data/app/assets/javascripts/agt/signal.coffee +272 -0
- data/app/assets/javascripts/agt/sprites/animation.coffee +13 -0
- data/app/assets/javascripts/agt/sprites/sprite.coffee +30 -0
- data/app/assets/javascripts/agt/widgets/hash.coffee +36 -0
- data/app/assets/javascripts/agt/widgets/widgets.coffee +194 -0
- data/app/assets/javascripts/agt/widgets/widgets/checked_input.coffee +7 -0
- data/app/assets/javascripts/agt/widgets/widgets/focus_bubbling.coffee +15 -0
- data/lib/agt.rb +8 -0
- data/lib/agt/version.rb +5 -0
- metadata +173 -0
@@ -0,0 +1,194 @@
|
|
1
|
+
namespace('agt.widgets')
|
2
|
+
|
3
|
+
#
|
4
|
+
__widgets__ = {}
|
5
|
+
|
6
|
+
# The `__instances__` object stores the returned instances of the various widgets,
|
7
|
+
# stored by widget type and then mapped with their target DOM element as key.
|
8
|
+
__instances__ = {}
|
9
|
+
|
10
|
+
__subscriptions__ = {}
|
11
|
+
|
12
|
+
### Public ###
|
13
|
+
|
14
|
+
# The `widgets` function is both the main module and the function
|
15
|
+
# used to register the widgets to apply on a page.
|
16
|
+
widgets = agt.widgets = (name, selector, options={}, block) ->
|
17
|
+
unless __widgets__[name]?
|
18
|
+
throw new Error "Unable to find widget '#{name}'"
|
19
|
+
|
20
|
+
# The options specific to the widget registration and activation are
|
21
|
+
# extracted from the options object.
|
22
|
+
events = options.on or 'init'
|
23
|
+
ifCondition = options.if
|
24
|
+
unlessCondition = options.unless
|
25
|
+
mediaCondition = options.media
|
26
|
+
|
27
|
+
delete options.on
|
28
|
+
delete options.if
|
29
|
+
delete options.unless
|
30
|
+
delete options.media
|
31
|
+
|
32
|
+
# Events can be passed as a string with event names separated with spaces.
|
33
|
+
events = events.split /\s+/g if typeof events is 'string'
|
34
|
+
|
35
|
+
# The widgets instances are stored in a Hash with the DOM element they
|
36
|
+
# target as key. The instances hashes are stored per widget type.
|
37
|
+
instances = __instances__[name] ||= new agt.widgets.Hash
|
38
|
+
|
39
|
+
# This method execute a test condition for the given element. The condition
|
40
|
+
# can be either a function or a value converted to boolean.
|
41
|
+
testCondition = (condition, element) ->
|
42
|
+
if typeof condition is 'function' then condition(element) else !!condition
|
43
|
+
|
44
|
+
# The DOM elements handled by a widget will receive a handled class
|
45
|
+
# to differenciate them from unhandled elements.
|
46
|
+
handledClass = "#{name}-handled"
|
47
|
+
|
48
|
+
# This method will test if an element can be handled by the current widget.
|
49
|
+
# It will test for both the handled class presence and the widget
|
50
|
+
# conditions. Note that if both the `if` and `unless` conditions
|
51
|
+
# are passed in the options object they will be tested as both part
|
52
|
+
# of a single `&&` condition.
|
53
|
+
canBeHandled = (element) ->
|
54
|
+
res = !element.classList.contains(handledClass)
|
55
|
+
res &&= testCondition(ifCondition, element) if ifCondition?
|
56
|
+
res &&= not testCondition(unlessCondition, element) if unlessCondition?
|
57
|
+
res
|
58
|
+
|
59
|
+
# If a media condition have been specified, the widget activation will be
|
60
|
+
# conditionned based on the result of this condition. The condition is
|
61
|
+
# verified each time the `resize` event is triggered.
|
62
|
+
if mediaCondition?
|
63
|
+
# The media condition can be either a boolean value, a function, or,
|
64
|
+
# to simply the setup, an object with `min` and `max` property containing
|
65
|
+
# the minimal and maximal window width where the widget is activated.
|
66
|
+
if typeof mediaCondition is 'object'
|
67
|
+
{min, max} = mediaCondition
|
68
|
+
mediaCondition = ->
|
69
|
+
res = true
|
70
|
+
res &&= window.innerWidth >= min if min?
|
71
|
+
res &&= window.innerWidth <= max if max?
|
72
|
+
res
|
73
|
+
|
74
|
+
# The media handler is registered on the `resize` event of the `window`
|
75
|
+
# object.
|
76
|
+
mediaHandler = (element, widget) ->
|
77
|
+
return unless widget?
|
78
|
+
|
79
|
+
condition_matched = testCondition(mediaCondition, element)
|
80
|
+
|
81
|
+
if condition_matched and not widget.active
|
82
|
+
widget.activate()
|
83
|
+
else if not condition_matched and widget.active
|
84
|
+
widget.deactivate()
|
85
|
+
|
86
|
+
window.addEventListener 'resize', ->
|
87
|
+
instances.eachPair (element, widget) ->
|
88
|
+
mediaHandler element, widget
|
89
|
+
|
90
|
+
# The `handler` function is the function registered on specified event and
|
91
|
+
# will proceed to the creation of the widgets if the conditions are met.
|
92
|
+
handler = ->
|
93
|
+
elements = document.querySelectorAll selector
|
94
|
+
|
95
|
+
Array::forEach.call elements, (element) ->
|
96
|
+
return unless canBeHandled element
|
97
|
+
|
98
|
+
widget = new agt.widgets.Widget(element)
|
99
|
+
args = [widget, element, Object.create(options), elements]
|
100
|
+
__widgets__[name].call(args...)
|
101
|
+
element.classList.add handledClass
|
102
|
+
instances.set element, widget
|
103
|
+
|
104
|
+
# The widgets activation state are resolved at creation
|
105
|
+
if mediaCondition?
|
106
|
+
mediaHandler(element, widget)
|
107
|
+
else
|
108
|
+
widget.activate()
|
109
|
+
|
110
|
+
document.dispatchEvent agt.domEvent("#{name}:handled", {element, widget})
|
111
|
+
|
112
|
+
block?.call element, element, widget
|
113
|
+
|
114
|
+
# For each event specified, the handler is registered as listener.
|
115
|
+
# A special case is the `init` event that simply mean to trigger the
|
116
|
+
# handler as soon a the function is called.
|
117
|
+
events.forEach (event) ->
|
118
|
+
switch event
|
119
|
+
when 'init' then handler()
|
120
|
+
when 'load', 'resize'
|
121
|
+
widgets.subscribe name, window, event, handler
|
122
|
+
else
|
123
|
+
widgets.subscribe name, document, event, handler
|
124
|
+
|
125
|
+
# The `widgets.define` is used to create a new widget usable through the
|
126
|
+
# `widgets` method. Basically, a widget is defined using a `name`, and a
|
127
|
+
# `block` function that will be called for each DOM elements targeted by
|
128
|
+
# the widget.
|
129
|
+
#
|
130
|
+
# The `block` function should have the following signature:
|
131
|
+
#
|
132
|
+
# function(element:HTMLElement, options:Object):Object
|
133
|
+
#
|
134
|
+
# The `options` object will contains all the options passed to the `widgets`
|
135
|
+
# method except the `on`, `if`, `unless` and `media` ones.
|
136
|
+
widgets.define = (name, block) -> __widgets__[name] = block
|
137
|
+
|
138
|
+
# A shorthand method to register a jQuery widget.
|
139
|
+
widgets.$define = (name, baseOptions={}, block) ->
|
140
|
+
[baseOptions, block] = [{}, baseOptions] if typeof baseOptions is 'function'
|
141
|
+
throw new Error "#{name} jquery widget isn't defined" unless $.fn[name]
|
142
|
+
__widgets__[name] = (element, options={}) ->
|
143
|
+
options[k] = v for k,v of baseOptions when not options[k]?
|
144
|
+
res = $(element)[name](options)
|
145
|
+
block?(res, options)
|
146
|
+
|
147
|
+
widgets.delete = (name) ->
|
148
|
+
__subscriptions__[name]?.forEach (subscription) -> subscription.off()
|
149
|
+
widgets.release(name)
|
150
|
+
delete __widgets__[name]
|
151
|
+
|
152
|
+
widgets.reset = (names...) ->
|
153
|
+
names = Object.keys(__instances__) if names.length is 0
|
154
|
+
widgets.delete(name) for name in names
|
155
|
+
|
156
|
+
widgets.widgetsFor = (element, widget) ->
|
157
|
+
if widget?
|
158
|
+
__instances__[widget].get(element)
|
159
|
+
else
|
160
|
+
instances.get(element) for instances in __instances__ when instances.hasKey(element)
|
161
|
+
|
162
|
+
widgets.subscribe = (name, to, evt, handler) ->
|
163
|
+
__subscriptions__[name] ||= []
|
164
|
+
to.addEventListener(evt, handler)
|
165
|
+
subscription = off: -> to.removeEventListener(evt, handler)
|
166
|
+
__subscriptions__[name].push subscription
|
167
|
+
subscription
|
168
|
+
|
169
|
+
# The `widgets.release` method can be used to completely remove the widgets
|
170
|
+
# of the given `name` from the page.
|
171
|
+
# It's the widget responsibility to clean up its dependencies during
|
172
|
+
# the `dispose` call.
|
173
|
+
widgets.release = (names...) ->
|
174
|
+
names = Object.keys(__instances__) if names.length is 0
|
175
|
+
for name in names
|
176
|
+
__instances__[name].each (value) -> value.dispose()
|
177
|
+
|
178
|
+
# Activates all the widgets instances of type `name`.
|
179
|
+
widgets.activate = (names...) ->
|
180
|
+
names = Object.keys(__instances__) if names.length is 0
|
181
|
+
for name in names
|
182
|
+
__instances__[name].each (value) -> value.activate()
|
183
|
+
|
184
|
+
# Deactivates all the widgets instances of type `name`.
|
185
|
+
widgets.deactivate = (names...) ->
|
186
|
+
names = Object.keys(__instances__) if names.length is 0
|
187
|
+
for name in names
|
188
|
+
__instances__[name].each (value) -> value.deactivate()
|
189
|
+
|
190
|
+
class agt.widgets.Widget
|
191
|
+
@include agt.mixins.Activable
|
192
|
+
@include agt.mixins.Disposable
|
193
|
+
|
194
|
+
constructor: (@element) ->
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Public: Decorates an input that support the `checked` property with
|
2
|
+
# a `checked` class whenever its property is `true`. It allows to have
|
3
|
+
# css rules on checked input on IE versions that doesn't support
|
4
|
+
# the `:checked` selector.
|
5
|
+
agt.widgets.define 'checked_input', (element) ->
|
6
|
+
element.addEventListener 'change', ->
|
7
|
+
element.classList.toggle 'checked', element.checked
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Public: This widgets decorates all the dom path until the current
|
2
|
+
# element with a `focus` class when the element have the focus.
|
3
|
+
agt.widgets.define 'bubbling_focus', (element) ->
|
4
|
+
blur = ->
|
5
|
+
Array::forEach.call document.querySelectorAll('.focus'), (el) ->
|
6
|
+
el.classList.remove('.focus')
|
7
|
+
|
8
|
+
element.addEventListener 'blur', -> blur()
|
9
|
+
element.addEventListener 'focus', ->
|
10
|
+
blur()
|
11
|
+
node = element
|
12
|
+
node.classList.add('focus')
|
13
|
+
while node.nodeName.toLowerCase() isnt 'html'
|
14
|
+
node = node.parentNode
|
15
|
+
node.classList.add('focus')
|
data/lib/agt.rb
ADDED
data/lib/agt/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: agt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Cédric Néhémie
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: Some game tools
|
42
|
+
email:
|
43
|
+
- cedric.nehemie@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/agt/version.rb
|
49
|
+
- lib/agt.rb
|
50
|
+
- app/assets/javascripts/agt/config.coffee
|
51
|
+
- app/assets/javascripts/agt/dom.coffee
|
52
|
+
- app/assets/javascripts/agt/function.coffee
|
53
|
+
- app/assets/javascripts/agt/geom/circle.coffee
|
54
|
+
- app/assets/javascripts/agt/geom/cubic_bezier.coffee
|
55
|
+
- app/assets/javascripts/agt/geom/diamond.coffee
|
56
|
+
- app/assets/javascripts/agt/geom/ellipsis.coffee
|
57
|
+
- app/assets/javascripts/agt/geom/linear_spline.coffee
|
58
|
+
- app/assets/javascripts/agt/geom/matrix.coffee
|
59
|
+
- app/assets/javascripts/agt/geom/mixins/geometry.coffee
|
60
|
+
- app/assets/javascripts/agt/geom/mixins/intersections.coffee
|
61
|
+
- app/assets/javascripts/agt/geom/mixins/path.coffee
|
62
|
+
- app/assets/javascripts/agt/geom/mixins/proxyable.coffee
|
63
|
+
- app/assets/javascripts/agt/geom/mixins/spline.coffee
|
64
|
+
- app/assets/javascripts/agt/geom/mixins/surface.coffee
|
65
|
+
- app/assets/javascripts/agt/geom/mixins/triangulable.coffee
|
66
|
+
- app/assets/javascripts/agt/geom/point.coffee
|
67
|
+
- app/assets/javascripts/agt/geom/polygon.coffee
|
68
|
+
- app/assets/javascripts/agt/geom/quad_bezier.coffee
|
69
|
+
- app/assets/javascripts/agt/geom/quint_bezier.coffee
|
70
|
+
- app/assets/javascripts/agt/geom/rectangle.coffee
|
71
|
+
- app/assets/javascripts/agt/geom/spiral.coffee
|
72
|
+
- app/assets/javascripts/agt/geom/transformation_proxy.coffee
|
73
|
+
- app/assets/javascripts/agt/geom/triangle.coffee
|
74
|
+
- app/assets/javascripts/agt/impulse.coffee
|
75
|
+
- app/assets/javascripts/agt/index.coffee
|
76
|
+
- app/assets/javascripts/agt/inflector/inflection.coffee
|
77
|
+
- app/assets/javascripts/agt/inflector/inflections.coffee
|
78
|
+
- app/assets/javascripts/agt/inflector/inflector.coffee
|
79
|
+
- app/assets/javascripts/agt/inheritance.coffee
|
80
|
+
- app/assets/javascripts/agt/math.coffee
|
81
|
+
- app/assets/javascripts/agt/mixins/activable.coffee
|
82
|
+
- app/assets/javascripts/agt/mixins/aliasable.coffee
|
83
|
+
- app/assets/javascripts/agt/mixins/alternate_case.coffee
|
84
|
+
- app/assets/javascripts/agt/mixins/cloneable.coffee
|
85
|
+
- app/assets/javascripts/agt/mixins/delegation.coffee
|
86
|
+
- app/assets/javascripts/agt/mixins/disposable.coffee
|
87
|
+
- app/assets/javascripts/agt/mixins/equatable.coffee
|
88
|
+
- app/assets/javascripts/agt/mixins/formattable.coffee
|
89
|
+
- app/assets/javascripts/agt/mixins/globalizable.coffee
|
90
|
+
- app/assets/javascripts/agt/mixins/has_ancestors.coffee
|
91
|
+
- app/assets/javascripts/agt/mixins/has_collection.coffee
|
92
|
+
- app/assets/javascripts/agt/mixins/has_nested_collection.coffee
|
93
|
+
- app/assets/javascripts/agt/mixins/memoizable.coffee
|
94
|
+
- app/assets/javascripts/agt/mixins/parameterizable.coffee
|
95
|
+
- app/assets/javascripts/agt/mixins/poolable.coffee
|
96
|
+
- app/assets/javascripts/agt/mixins/sourcable.coffee
|
97
|
+
- app/assets/javascripts/agt/mixins/state_machine.coffee
|
98
|
+
- app/assets/javascripts/agt/net/router.coffee
|
99
|
+
- app/assets/javascripts/agt/object.coffee
|
100
|
+
- app/assets/javascripts/agt/particles/actions/base_action.coffee
|
101
|
+
- app/assets/javascripts/agt/particles/actions/die_on_surface.coffee
|
102
|
+
- app/assets/javascripts/agt/particles/actions/force.coffee
|
103
|
+
- app/assets/javascripts/agt/particles/actions/friction.coffee
|
104
|
+
- app/assets/javascripts/agt/particles/actions/live.coffee
|
105
|
+
- app/assets/javascripts/agt/particles/actions/macro_action.coffee
|
106
|
+
- app/assets/javascripts/agt/particles/actions/move.coffee
|
107
|
+
- app/assets/javascripts/agt/particles/actions/null_action.coffee
|
108
|
+
- app/assets/javascripts/agt/particles/counters/by_rate.coffee
|
109
|
+
- app/assets/javascripts/agt/particles/counters/fixed.coffee
|
110
|
+
- app/assets/javascripts/agt/particles/counters/null_counter.coffee
|
111
|
+
- app/assets/javascripts/agt/particles/emission.coffee
|
112
|
+
- app/assets/javascripts/agt/particles/emitters/null_emitter.coffee
|
113
|
+
- app/assets/javascripts/agt/particles/emitters/path.coffee
|
114
|
+
- app/assets/javascripts/agt/particles/emitters/ponctual.coffee
|
115
|
+
- app/assets/javascripts/agt/particles/emitters/surface.coffee
|
116
|
+
- app/assets/javascripts/agt/particles/initializers/explosion.coffee
|
117
|
+
- app/assets/javascripts/agt/particles/initializers/life.coffee
|
118
|
+
- app/assets/javascripts/agt/particles/initializers/macro_initializer.coffee
|
119
|
+
- app/assets/javascripts/agt/particles/initializers/null_initializer.coffee
|
120
|
+
- app/assets/javascripts/agt/particles/initializers/particle_sub_system.coffee
|
121
|
+
- app/assets/javascripts/agt/particles/initializers/stream.coffee
|
122
|
+
- app/assets/javascripts/agt/particles/mixins/randomizable.coffee
|
123
|
+
- app/assets/javascripts/agt/particles/particle.coffee
|
124
|
+
- app/assets/javascripts/agt/particles/sub_system.coffee
|
125
|
+
- app/assets/javascripts/agt/particles/system.coffee
|
126
|
+
- app/assets/javascripts/agt/particles/timers/instant.coffee
|
127
|
+
- app/assets/javascripts/agt/particles/timers/limited.coffee
|
128
|
+
- app/assets/javascripts/agt/particles/timers/null_timer.coffee
|
129
|
+
- app/assets/javascripts/agt/particles/timers/unlimited.coffee
|
130
|
+
- app/assets/javascripts/agt/particles/timers/until_death.coffee
|
131
|
+
- app/assets/javascripts/agt/promise.coffee
|
132
|
+
- app/assets/javascripts/agt/random/random.coffee
|
133
|
+
- app/assets/javascripts/agt/random/seeds/lagged_fibonnacci.coffee
|
134
|
+
- app/assets/javascripts/agt/random/seeds/linear.coffee
|
135
|
+
- app/assets/javascripts/agt/random/seeds/linear_congruential.coffee
|
136
|
+
- app/assets/javascripts/agt/random/seeds/math_random.coffee
|
137
|
+
- app/assets/javascripts/agt/random/seeds/mersenne_twister.coffee
|
138
|
+
- app/assets/javascripts/agt/random/seeds/no_random.coffee
|
139
|
+
- app/assets/javascripts/agt/random/seeds/paul_houle.coffee
|
140
|
+
- app/assets/javascripts/agt/signal.coffee
|
141
|
+
- app/assets/javascripts/agt/sprites/animation.coffee
|
142
|
+
- app/assets/javascripts/agt/sprites/sprite.coffee
|
143
|
+
- app/assets/javascripts/agt/widgets/hash.coffee
|
144
|
+
- app/assets/javascripts/agt/widgets/widgets/checked_input.coffee
|
145
|
+
- app/assets/javascripts/agt/widgets/widgets/focus_bubbling.coffee
|
146
|
+
- app/assets/javascripts/agt/widgets/widgets.coffee
|
147
|
+
- LICENSE.md
|
148
|
+
- README.md
|
149
|
+
homepage: https://github.com/abe33/agt.git
|
150
|
+
licenses:
|
151
|
+
- MIT
|
152
|
+
metadata: {}
|
153
|
+
post_install_message:
|
154
|
+
rdoc_options: []
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
requirements: []
|
168
|
+
rubyforge_project:
|
169
|
+
rubygems_version: 2.0.3
|
170
|
+
signing_key:
|
171
|
+
specification_version: 4
|
172
|
+
summary: Some game tools
|
173
|
+
test_files: []
|