agt 0.0.1
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.
- 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: []
|