quick_script 0.5.14 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module QuickScript
2
- VERSION = "0.5.14"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -11,6 +11,9 @@ Array.prototype.itemAt = (val)->
11
11
  Array.prototype.pushOnce = (item) ->
12
12
  if (!this.includes(item))
13
13
  this.push(item)
14
+ Array.prototype.remove = (item) ->
15
+ idx = this.indexOf(item)
16
+ this.splice(idx, 1) if idx > -1
14
17
  Date.from_utc = (utc) ->
15
18
  new Date(utc * 1000)
16
19
  Date.prototype.to_utc = ->
@@ -61,6 +61,48 @@
61
61
  owner: this
62
62
  ko.applyBindingsToNode(element, { checked: interceptor })
63
63
 
64
+ ko.bindingHandlers.untabbable =
65
+ update : (element, valueAccessor, bindingsAccessor, viewModel) ->
66
+ if (valueAccessor())
67
+ $(element).find('iframe, input, textarea, a, iframe').attr('tabIndex', -1)
68
+ else
69
+ $(element).find('input, textarea, a, iframe').removeAttr('tabIndex')
70
+
71
+ ko.bindingHandlers.carousel =
72
+ init : (element, valueAccessor, bindingsAccessor, viewModel) ->
73
+ idx = viewModel.getViewBoxIndex(viewModel.task())
74
+ new_el = $(element).find('.slide-item-' + idx)
75
+ new_el.addClass('active')
76
+ update : (element, valueAccessor, bindingsAccessor, viewModel) ->
77
+ opts = viewModel.transition.opts
78
+ if viewModel.task() != null
79
+ idx = viewModel.getViewBoxIndex(viewModel.task())
80
+ console.log('updating slider to ' + idx)
81
+ old_idx = opts.slide_index()
82
+ new_el = $(element).find('.slide-item-' + idx)
83
+ old_el = $(element).find('.slide-item-' + old_idx)
84
+ if idx > old_idx
85
+ new_el.addClass('next')
86
+ new_el[0].offsetWidth if new_el[0]?
87
+ new_el.addClass('left')
88
+ old_el.addClass('left')
89
+ else
90
+ new_el.addClass('prev')
91
+ new_el[0].offsetWidth if new_el[0]?
92
+ new_el.addClass('right')
93
+ old_el.addClass('right')
94
+ setTimeout ->
95
+ new_el.removeClass('next left prev right')
96
+ old_el.removeClass('next left prev right')
97
+ old_el.removeClass('active')
98
+ new_el.addClass('active')
99
+ , 600
100
+ opts.slide_index(idx)
101
+
102
+ ko.bindingHandlers.bindelem =
103
+ init : (element, valueAccessor, bindingsAccessor, viewModel) ->
104
+ viewModel.element = element
105
+
64
106
  ko.bindingHandlers.tinymce =
65
107
  init : (element, valueAccessor, bindingsAccessor, viewModel) ->
66
108
  options = {
@@ -413,6 +455,8 @@ class @Model
413
455
  console.log("Delete error encountered")
414
456
  @model_state(ko.modelStates.READY)
415
457
  @model_state(ko.modelStates.SAVING)
458
+ removeFromCollection : =>
459
+ @collection.removeItemById(@id()) if @collection?
416
460
  toJS : (flds)=>
417
461
  flds ||= @fields
418
462
  obj = {}
@@ -485,7 +529,7 @@ class @FileModel extends @Model
485
529
  @input.is_image = ko.computed ->
486
530
  if @input.present() then @input.file().type.match('image.*') else false
487
531
  , this
488
- @input.clear = -> @input.files([])
532
+ @input.clear = => @input.files([])
489
533
  reset : ->
490
534
  super
491
535
  @input.files([])
@@ -688,7 +732,10 @@ class @View
688
732
  @has_error = ko.computed (-> @error().length > 0), this
689
733
  @view = null
690
734
  @task = ko.observable(null)
691
- @transition = {type : 'fade', opts : {'slide_left' : ko.observable(0), 'working' : ko.observable(false)}}
735
+ @prev_task = ko.observable(null)
736
+ @transition = {type : 'fade', opts : {'slide_pos' : ko.observable(0), 'slide_index' : ko.observable(0)}}
737
+ @transition.has_slide_css = (css, idx)=>
738
+ @transition.opts['slide_css' + css]().includes? idx
692
739
  @init()
693
740
  @setupViewBox()
694
741
  show : ->
@@ -699,13 +746,29 @@ class @View
699
746
  setupViewBox : ->
700
747
  if @transition.type == 'slide'
701
748
  @task.subscribe (val)=>
749
+ return
750
+ opts = @transition.opts
702
751
  if val != null
703
- left = @getViewBoxIndex(val) * @transition.opts.width * -1
704
- #console.log(left)
705
- @transition.opts.slide_left(left)
706
- clearTimeout(@transition.opts.wtid) if @transition.opts.wtid?
707
- @transition.opts.working(true)
708
- @transition.opts.wtid = setTimeout (=> @transition.opts.working(false)) , 1000
752
+ idx = @getViewBoxIndex(val)
753
+ old_idx = opts.slide_index()
754
+ new_el = $(@element).find('.slide-item-' + idx)
755
+ old_el = $(@element).find('.slide-item-' + old_idx)
756
+ if idx > old_idx
757
+ new_el.addClass('next')
758
+ new_el[0].offsetWidth if new_el[0]?
759
+ new_el.addClass('left')
760
+ old_el.addClass('left')
761
+ else
762
+ new_el.addClass('prev')
763
+ new_el[0].offsetWidth if new_el[0]?
764
+ new_el.addClass('right')
765
+ old_el.addClass('right')
766
+ setTimeout ->
767
+ new_el.removeClass('next left prev right')
768
+ old_el.removeClass('active next left prev right')
769
+ new_el.addClass('active')
770
+ , 600
771
+ opts.slide_index(idx)
709
772
  load : ->
710
773
  addView : (name, view_class, tpl) ->
711
774
  @views[name] = new view_class(name, this)
@@ -727,6 +790,7 @@ class @View
727
790
  if (last_view != view)
728
791
  console.log("View [#{view.name}] selected.")
729
792
  @view = view
793
+ @prev_task(@task())
730
794
  @task(view.name)
731
795
  last_view.hide() if last_view?
732
796
  view.show()
@@ -747,6 +811,17 @@ class @View
747
811
  getViewBoxIndex : (view_name) ->
748
812
  arr = Object.keys(@views)
749
813
  arr.indexAt(view_name)
814
+ getViewByIndex : (idx) ->
815
+ keys = Object.keys(@views)
816
+ @views[keys[idx]]
817
+ afterRender : =>
818
+ if @transition.type == 'slide'
819
+ setTimeout =>
820
+ console.log('after render')
821
+ idx = @getViewBoxIndex(@task())
822
+ new_el = $(@element).find('.slide-item-' + idx)
823
+ new_el.addClass('active')
824
+ 500
750
825
  showAsOverlay : (tmp, opts, cls)=>
751
826
  Overlay.add(this, tmp, opts, cls)
752
827
  hideOverlay : =>
@@ -854,6 +929,14 @@ class @AccountAdapter
854
929
  progress : opts.progress
855
930
  success : opts.success
856
931
  error : opts.error
932
+ delete : (opts)->
933
+ $.ajax_qs
934
+ type : 'DELETE'
935
+ url : opts.url
936
+ data : opts.data
937
+ progress : opts.progress
938
+ success : opts.success
939
+ error : opts.error
857
940
  add_method : (fn_name, fn)->
858
941
  @[fn_name] = fn.bind(this)
859
942
 
@@ -865,17 +948,14 @@ class @AppView extends @View
865
948
  @path_parts = []
866
949
  ko.addTemplate "app-view", """
867
950
  <div data-bind='foreach : viewList()'>
868
- <div data-bind="fadeVisible : is_visible(), template : { name : getViewName }, attr : { id : templateID}"></div>
951
+ <div data-bind="fadeVisible : is_visible(), template : { name : getViewName, afterRender : afterRender}, attr : { id : templateID}, bindelem : true"></div>
869
952
  </div>
870
953
  """
871
954
  ko.addTemplate "app-slide", """
872
- <div data-bind="style : {width : transition.opts.width + 'px', height : transition.opts.height + 'px', overflowX : 'hidden', overflowY : 'hidden'}">
873
- <div class='view-slider' data-bind="style : {width : ((viewCount()+1) * transition.opts.width) + 'px', height : transition.opts.height + 'px', clear : 'both', marginLeft : transition.opts.slide_left() + 'px', 'position' : 'relative'}">
874
- <div data-bind='foreach : viewList()'>
875
- <div data-bind="template : { name : getViewName }, attr : {id : templateID}, style : {width : owner.transition.opts.width + 'px', height : owner.transition.opts.height + 'px', left : ($index() * owner.transition.opts.width) + 'px', 'position' : 'absolute', overflowY : 'auto'}, visible : is_visible() || owner.transition.opts.working()"></div>
876
- </div>
955
+ <div class="view-slider" data-bind="style : {width : transition.opts.width + 'px', height : transition.opts.height + 'px'}, carousel : true">
956
+ <div data-bind='foreach : viewList()'>
957
+ <div class="slide-item" data-bind="template : { name : getViewName }, attr : {id : templateID, class : 'slide-item slide-item-' + $index()}, css : {}, style : {width : owner.transition.opts.width + 'px', height : owner.transition.opts.height + 'px'}, bindelem : true"></div>
877
958
  </div>
878
- <div style='clear: both;'></div>
879
959
  </div>
880
960
  """
881
961
  @current_user = new @account_model()
@@ -911,4 +991,5 @@ class @AppView extends @View
911
991
 
912
992
  # layout bindings
913
993
  $('body').koBind(appViewModel)
994
+ appViewModel.afterRender()
914
995
 
@@ -149,4 +149,29 @@
149
149
  font-size: 20px
150
150
 
151
151
  .view-slider
152
- +animate(0.50s)
152
+ overflow: hidden
153
+ position: relative
154
+ .slide-item
155
+ +transition(0.60s ease-in-out left)
156
+ position: relative
157
+ overflow-y: auto
158
+ display: none
159
+ &.next
160
+ left: 100%
161
+ &.left
162
+ left: 0
163
+ &.prev
164
+ left: -100%
165
+ &.right
166
+ left: 0
167
+ &.active, &.prev, &.next
168
+ display: block
169
+ &.prev, &.next
170
+ top: 0
171
+ position: absolute
172
+ &.active.left
173
+ left: -100%
174
+ &.active.right
175
+ left: 100%
176
+ &.active
177
+ left: 0px
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quick_script
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 5
9
- - 14
10
- version: 0.5.14
8
+ - 7
9
+ - 0
10
+ version: 0.7.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alan Graham
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-07-03 00:00:00 Z
18
+ date: 2012-07-09 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: Framework for single-page web applications