pinkman 0.9.9.1 → 0.9.9.2.fix

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8594d71908248b387d76ae776ee2645a0260a5a8
4
- data.tar.gz: fda03fd83b397414f49792eff5936d119c31359c
3
+ metadata.gz: c2026e4d3d78024833d6de5d1673787649d49893
4
+ data.tar.gz: 2d2c250b32799088f81a17e1abced7ed53098f63
5
5
  SHA512:
6
- metadata.gz: c135c46bf27d68423c2515ef4134ddecfb34583d47a0c80f662f0e87110b0020756a8067432540353b3a943fe339c8f9ec928e56262983b3ff83fc712d216a82
7
- data.tar.gz: 98f3eeee9cb5e77389c6e6cc7006aa0a165c928f68ef9b4d0a7aee2274b04c899f837fa2faa40fe9140fbb32a532d94f3a4860355acbee5c67f1ac84a01946fa
6
+ metadata.gz: b0770bfd824f5d45ec4a7372947cf77015a26497b4a82e31145d3c87bd467e91e15b3e42519fa56bc192670cff60b40bf83691c578eb5c29f6aa7bf029c243e4
7
+ data.tar.gz: 824a087f1fa19265e597d263e31853cc6a6a34c6f98b11009b187bd81ed07bd23997cf46c80dfa808b63a477839492874cd9dca928d724c3394c9168d31af3f9
@@ -52,8 +52,11 @@ class window.PinkmanCollection extends window.PinkmanCommon
52
52
  # tip: you can chain functions. Example: collection.each(transform).first()
53
53
  each: (transformation='',callback) ->
54
54
  if transformation? and typeof transformation=='function'
55
- transformation(o) for o in @collection
56
- callback(this) if typeof callback == 'function'
55
+ i = 0
56
+ for o in @collection
57
+ i = i+1
58
+ transformation(o)
59
+ callback(this) if (i == @count()) and typeof callback == 'function'
57
60
  return this
58
61
 
59
62
  # rails/ruby equivalent: where/select
@@ -79,6 +82,23 @@ class window.PinkmanCollection extends window.PinkmanCommon
79
82
  callback(selection) if typeof callback == 'function'
80
83
  return(selection)
81
84
 
85
+ # every element of this collection will be substituted by the element of the collection passed
86
+ absorb: (collection, callback) ->
87
+ if typeof collection == 'object' and collection.isPink and collection.isCollection
88
+ @each (obj) =>
89
+ o = collection.find(obj.id)
90
+ if o?
91
+ @remove obj, =>
92
+ @forceUnshift(o)
93
+ , callback
94
+
95
+ # substitute element a by element b
96
+ substitute: (a,b,callback) ->
97
+ if a? and b?
98
+ @remove(a)
99
+ @push(b)
100
+ callback() if typeof callback == 'function'
101
+
82
102
  # Desc: insert in last position
83
103
  push: (arg) ->
84
104
  if Pinkman.isArray(arg)
@@ -109,6 +129,12 @@ class window.PinkmanCollection extends window.PinkmanCommon
109
129
 
110
130
  forcePush: (object) ->
111
131
  @collection.push(object)
132
+
133
+ directUnshift: (object) ->
134
+ @collection.unshift(object) unless @include(object)
135
+
136
+ forceUnshift: (object) ->
137
+ @collection.unshift(object)
112
138
 
113
139
  unshiftIndividually: (object) ->
114
140
  if object? and typeof object == 'object' and not @include(object)
@@ -136,15 +162,17 @@ class window.PinkmanCollection extends window.PinkmanCommon
136
162
  @remove(@first())
137
163
 
138
164
  # Desc: remove a object from the collection
139
- remove: (object) ->
165
+ remove: (object,callback) ->
140
166
  if typeof object == 'object' and object.id? and (a = @find(object.id))?
141
167
  i = @collection.indexOf a
142
168
  @collection.splice(i,1)
143
- return a
169
+ value = a
144
170
  else
145
171
  i = @collection.indexOf object
146
172
  @collection.splice(i,1)
147
- return object
173
+ value = object
174
+ callback(this) if typeof callback == 'function'
175
+ return(value)
148
176
 
149
177
  # Desc: remove the first object that matches
150
178
  removeBy: (attribute,value) ->
@@ -204,7 +232,7 @@ class window.PinkmanCollection extends window.PinkmanCommon
204
232
 
205
233
  # Desc: return trues if has at least one member. If a criteria is specificied, returns true if at least one member satisfies it.
206
234
  any: (criteria='') ->
207
- if criteria? and typeof criteria == 'function'
235
+ if criteria? and (typeof criteria == 'function' or typeof criteria == 'object')
208
236
  @select(criteria).count() > 0
209
237
  else
210
238
  @count() > 0
@@ -57,11 +57,11 @@ class window.PinkmanController extends window.PinkmanObject
57
57
  @actions.getBy('name',args[0])
58
58
  else
59
59
  [name, eventName,callback,unknown...] = args
60
- a = new PinkmanAction(name: name, eventName: eventName, call: callback, controller: this)
60
+ id = "#{@pinkey}-#{name}-#{eventName}"
61
+ a = new PinkmanAction(id: id, name: name, eventName: eventName, call: callback, controller: this)
61
62
  a.set('selector',"##{a.controller.id} [data-action='#{a.name}']")
62
63
  Pinkman.actions.push(a)
63
- @actions.push(a)
64
- a.listen() if a.call? and typeof a.call == 'function'
64
+ a.listen() if @actions.push(a) and a.call? and typeof a.call == 'function'
65
65
  return(a)
66
66
 
67
67
 
@@ -205,10 +205,12 @@ class window.PinkmanAction extends window.PinkmanObject
205
205
 
206
206
  # Desc: attaches one single event
207
207
  attach: (eventName) ->
208
- if Pinkman.isString(eventName) and $("##{@controller.id}").length
208
+ if Pinkman.isString(eventName)
209
209
  action = this
210
210
  @events.push(eventName)
211
211
  $('body').on eventName, action.selector, (ev) ->
212
+ # debugger
213
+ # console.log "#{action.id}: called - #{action.name}"
212
214
  ev.preventDefault() if eventName != 'keypress' and eventName != 'mousedown'
213
215
  obj = window.Pinkman.closest($(this))
214
216
  action.call(obj,$(this),ev)
@@ -4,5 +4,5 @@ Pinkman.css = (selector,property,value) ->
4
4
 
5
5
  $(document).ready ->
6
6
  unless $('style#pinkman-css-injector').length
7
- $('body').append('<style id="pinkman-css-injector" type="text/css">pink{display: inline; margin: 0; padding: 0; color: inherit; background-color: inherit; font: inherit;}</style>')
7
+ $('head').append('<style id="pinkman-css-injector" type="text/css">pink{display: inline; margin: 0; padding: 0; color: inherit; background-color: inherit; font: inherit;} template, template *{ display: none !important;}</style>')
8
8
  document.createElement('pink') if document.createElement?
@@ -91,7 +91,19 @@ class window.Pinkman
91
91
  i = i+1
92
92
  a
93
93
 
94
-
94
+ # i hated that i had to do this
95
+ @unescape: (string) ->
96
+ if Pinkman.isString(string)
97
+ map = { '&amp;': '&', '&lt;': '<', '&gt;': '>', '&quot;': '"', '&#39;': "'", '&#x2F;': '/', '&#x60;': '`', '&#x3D;': '=' }
98
+ keys = []
99
+ keys.push("(?:#{k})") for k,v of map
100
+ window.regexp = new RegExp(keys.join('+|') + '+','gm')
101
+ string.replace regexp, (match) ->
102
+ map[match]
103
+ else
104
+ ''
105
+
106
+
95
107
  @calledFunctions = []
96
108
 
97
109
  # --- Scope
@@ -33,9 +33,17 @@ Pinkman.template_engines =
33
33
  template = Pinkman.templates.get(template: options.template, engine: options.engine)
34
34
  else
35
35
  template = new Pinkman.object(template: options.template, engine: options.engine)
36
- @compile(options.engine, template, @templateAdapter($('#' + options.template).html()))
36
+ @compile(options.engine, template, @templateModifier($('#' + options.template).html()))
37
37
  Pinkman.templates.push(template)
38
38
  return(template)
39
+
40
+ # templateModifier
41
+ # apply all pinkman modifiers to templates
42
+ templateModifier: (templateBody) ->
43
+ # content = templateBody
44
+ # content = @partialAdapter(templateBody)
45
+ # content = @templateAdapter(templateBody)
46
+ Pinkman.unescape(@templateAdapter(@partialAdapter(templateBody)))
39
47
 
40
48
 
41
49
  # attrAdapterHelper: helper for templateAdapter
@@ -49,7 +57,7 @@ Pinkman.template_engines =
49
57
  array.push('pinkey')
50
58
  pinkey = array.join('.')
51
59
  "#{$1}<pink data-pinkey=\"{{ #{pinkey} }}\" data-attribute=\"#{attr}\">{{ #{$2} }}</pink>#{$3}"
52
-
60
+
53
61
  # changes templates html to insert binders so pinkman can make realtime updates
54
62
  templateAdapter: (templateBody) ->
55
63
  if templateBody? and templateBody != ''
@@ -59,6 +67,21 @@ Pinkman.template_engines =
59
67
  content.replace(escapeSyncingRegex,'{{')
60
68
  else
61
69
  ''
70
+
71
+ # modifies templates inserting partials before sending them to rendering the engines
72
+ partialAdapter: (templateBody) ->
73
+ if templateBody? and templateBody != ''
74
+ partialRegex = /{{(?:\s)*partial\((?:\s)*(.*)(?:\s)*\)(?:\s)*}}/gm
75
+ templateBody.replace(partialRegex,@partialInception)
76
+ else
77
+ ''
78
+
79
+ partialInception: (match,id) ->
80
+ p = $("template##{id}.p")
81
+ if p.length
82
+ p.html()
83
+ else
84
+ match
62
85
 
63
86
  context: (options) ->
64
87
  options.object = options.context if options.context?
@@ -128,8 +151,9 @@ Pinkman.render = (options) ->
128
151
  Pinkman.template_engines.render(options)
129
152
  options.object.queue(options) if options.reRender and options.object? and options.object.isPink
130
153
 
154
+ Pinkman.scrolling = new PinkmanCollection unless Pinkman.scrolling?
155
+
131
156
  Pinkman.saveElementScrollPosition = (id) ->
132
- Pinkman.scrolling = new PinkmanCollection unless Pinkman.scrolling?
133
157
  a = Pinkman.scrolling.find(id)
134
158
  a = new Pinkman.object unless a?
135
159
  a.set('id',id)
@@ -138,20 +138,38 @@ class window.PinkmanRouter
138
138
  routes(router) if typeof routes == 'function'
139
139
  return(router)
140
140
 
141
+ @scrolling = new PinkmanCollection
142
+
143
+ @saveWindowScroll = (id) ->
144
+ @scrolling.firstOrInitialize(id: id).set('position', window.scrollY)
141
145
 
146
+ @restoreWindowScroll = (id) ->
147
+ o = @scrolling.firstOrInitialize(id: id)
148
+ # console.log o.position
149
+ o.position = 0 unless o.position?
150
+ window.scrollTo(0,o.position)
151
+
142
152
  @render: (r, callback) ->
153
+ @saveWindowScroll(Pinkman.routes.current.controller) if Pinkman.routes.current?
143
154
  Pinkman.state.initialize()
144
155
  yieldIn = r.route.yieldIn() || @_config.yield
145
156
  $(yieldIn).html("<div class='pink-yield' id='#{r.controller}'></div>") if r.route.blank
146
157
  r.initialize()
147
- window.scrollTo(0,0) unless Pinkman.router._config.freeze
158
+ Pinkman.routes.set('current',r.route)
159
+ unless Pinkman.router._config.freeze or (r.options? and r.options.freeze)
160
+ # console.log 'topo'
161
+ window.scrollTo(0,0)
162
+ else
163
+ sleep 0.15, =>
164
+ @restoreWindowScroll(r.route.controller)
148
165
  callback() if typeof callback == 'function'
149
166
  true
150
167
 
151
168
  # Search path throughout routes. On match, activate respective controllers: clears template and execute main(s) function(s)
152
- @activate: (path,callback) ->
169
+ @activate: (path,callback,options) ->
153
170
  r = Pinkman.routes.match(path)
154
171
  if r? and r
172
+ r.options = options
155
173
  if @_config.transition? and typeof @_config.transition == 'function'
156
174
  @_config.transition =>
157
175
  @render(r,callback)
@@ -164,12 +182,12 @@ class window.PinkmanRouter
164
182
  @visit: (path) ->
165
183
  @activate path, ->
166
184
  Pinkman.state.push(path)
167
-
185
+
168
186
  @force: (path) ->
169
187
  (window.location=path) unless @visit(path)
170
188
 
171
189
  @restore: (path) ->
172
- (window.location=path) unless @activate(path)
190
+ (window.location=path) unless @activate(path,null,{freeze: yes})
173
191
 
174
192
  @redirect: (args...) ->
175
193
  @force(args...)
@@ -179,6 +197,12 @@ class window.PinkmanRouter
179
197
 
180
198
  @go: (args...) ->
181
199
  @force(args...)
200
+
201
+ @forward: ->
202
+ window.history.forward() if window.history?
203
+
204
+ @back: ->
205
+ window.history.back() if window.history?
182
206
 
183
207
  @start: ->
184
208
  Pinkman.ready =>
@@ -13,18 +13,31 @@ module PinkmanHelper
13
13
  end
14
14
  end
15
15
 
16
+
16
17
  def template path, &block
17
18
  # definition mode
18
19
  if block_given?
19
20
  name = path.to_s
20
21
  id = (/(?:-template)$/ =~ name) ? name : (name +'-template')
21
- content_tag('script',{id: id, type: 'text/p-template'}, &block)
22
+ content_tag('template',{id: id, type: 'text/p-template'}, &block)
22
23
  # rendering template partial mode
23
24
  else
24
25
  render partial: "pinkman/#{path}"
25
26
  end
26
27
  end
27
28
 
29
+ def partial path, &block
30
+ # definition mode
31
+ name = path.to_s
32
+ id = (/(?:-template)$/ =~ name) ? name : (name +'-template')
33
+ if block_given?
34
+ content_tag('template',{id: id, type: 'text/p-partial', class: 'p'}, &block)
35
+ # rendering template partial mode
36
+ else
37
+ raw("{{ partial(#{id}) }}")
38
+ end
39
+ end
40
+
28
41
  def load_templates
29
42
  if Rails
30
43
  dir = Rails.root.join('app','views','pinkman')
@@ -1,3 +1,3 @@
1
1
  module Pinkman
2
- VERSION = "0.9.9.1"
2
+ VERSION = "0.9.9.2.fix"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pinkman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9.1
4
+ version: 0.9.9.2.fix
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agilso Oliveira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-18 00:00:00.000000000 Z
11
+ date: 2017-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -239,9 +239,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
239
  version: '0'
240
240
  required_rubygems_version: !ruby/object:Gem::Requirement
241
241
  requirements:
242
- - - ">="
242
+ - - ">"
243
243
  - !ruby/object:Gem::Version
244
- version: '0'
244
+ version: 1.3.1
245
245
  requirements: []
246
246
  rubyforge_project:
247
247
  rubygems_version: 2.5.1