hooch 0.4.1 → 0.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50e01c687750265f50a10a17bd2ba2e6161b92cb
4
- data.tar.gz: 49d02d95c90c7b1de4d8e23805baa07322f5a39e
3
+ metadata.gz: 4d67b1b958e3b12561ada28c23195172d87206bc
4
+ data.tar.gz: 5ff5259338df3bde4f96b7a4885c4cf0eef681cf
5
5
  SHA512:
6
- metadata.gz: 105fbf16ca53a603d5f22f8f0718bd8172623737a47b6c7c5c8efea1b65aac3d00ee170ce479b9c0f04f6e996a037867722c25fcd60058758f8ec370ac8a2857
7
- data.tar.gz: 4ee8021ad19eb852f6fca4be879a9144cec5c11ab1fb39543b60c473a67be3cfbbb5c119276c2e2cf174b82d74e94c3e10064605ba6726679695a1c2105fb13b
6
+ metadata.gz: 7c869362a248c2f485342e1c74ea027299a6baadd8b4078610bb35744d582175e126af33ef0b9984bfd22c048db269e5d1c95fb29806a3ebc78149515c7484b5
7
+ data.tar.gz: d4322ea13fd7dac82374153df36799b3d649959967a7c0de09e9920340d258685eeeea515ba434b700a30ea8875d711d1dd1fde4f6e6b282514b6e6acd129c36
@@ -604,11 +604,43 @@ var initHooch = function(){
604
604
  },
605
605
  onMousemove: function(e){
606
606
  if(this.dragging_element){
607
- hooch.pauseEvent(e)
608
- this.redrawDraggingElement(e);
609
- this.refreshSequence(e)
610
- return false
607
+ this.handleMouseMove(e)
608
+ } else {
609
+ var pressed_element = this.getPressedElement()
610
+ if(pressed_element){
611
+ pressed_element.setDragging()
612
+ this.handleMouseMove(e)
613
+ }
614
+ }
615
+ return true
616
+ },
617
+ handleMouseMove: function(e){
618
+ hooch.pauseEvent(e)
619
+ this.dragging_element.dragging = true
620
+ this.redrawDraggingElement(e);
621
+ this.refreshSequence(e)
622
+ return false
623
+ },
624
+ onMouseup: function(){
625
+ if(this.dragging_element){
626
+ var tmp_dragging_element = this.dragging_element
627
+ this.removeDraggingElement()
628
+ if(tmp_dragging_element.dragging){
629
+ this.sendSort()
630
+ }
631
+ tmp_dragging_element.dragging = false
632
+ }
633
+ var pressed_element = this.getPressedElement()
634
+ if(pressed_element){
635
+ pressed_element.unSetPressed()
636
+ }
637
+ },
638
+ getPressedElement: function(){
639
+ var possible_pressed_element = $.grep(this.sort_elements, function(sort_element,i){return sort_element.pressed})
640
+ if(possible_pressed_element.length > 0){
641
+ return possible_pressed_element[0]
611
642
  }
643
+ return false
612
644
  },
613
645
  getSortElements: function(){
614
646
  this.$sort_elements = this.$sorter.children()
@@ -848,10 +880,6 @@ var initHooch = function(){
848
880
  this.removeDraggingElement()
849
881
  }
850
882
  },
851
- onMouseup: function(){
852
- this.removeDraggingElement()
853
- this.sendSort()
854
- },
855
883
  removeDraggingElement: function(){
856
884
  if(this.dragging_element){
857
885
  var placeholder_row = this.removePlaceholder()
@@ -901,6 +929,7 @@ var initHooch = function(){
901
929
  this.old_position = $sort_element.css('position')
902
930
  this.width = this.$sort_element.width()
903
931
  this.height = this.$sort_element.height()
932
+ this.dragging = false
904
933
  var sort_element = this
905
934
  this.$sort_element.on('dragstart', function(e){
906
935
  hooch.pauseEvent(e)
@@ -911,22 +940,28 @@ var initHooch = function(){
911
940
  onMousedown: function(e){
912
941
  if(1 == e.which){
913
942
  this.sorter.clearDraggingElement();
914
- hooch.pauseEvent(e)
943
+ this.pressed = true
915
944
  this.starting_offset = this.getOffset();
916
945
  this.mouse_start = {top: e.originalEvent.pageY, left: e.originalEvent.pageX}
917
- this.placeholder = new hooch.SortPlaceholder(this.$sort_element.clone().removeAttr('id').css({width: this.width, height: this.height}),this.sorter)
918
- this.placeholder.css({'visibility': 'hidden'});
919
- this.placeholder.css({background: 'none', 'background-color': 'pink'});
920
- $tmp = $('<div style="display: none;"></div>')
921
- this.$sort_element.before($tmp)
922
- this.$sort_element
923
- .css({position: 'absolute', top: this.starting_offset.top, left: this.starting_offset.left})
924
- .appendTo('body')
925
- $tmp.replaceWith(this.placeholder.$sort_element)
926
- this.sorter.setDraggingElement(this,e);
927
- return false;
928
946
  }
929
947
  },
948
+ unSetPressed: function(){
949
+ this.pressed = false
950
+ },
951
+ setDragging: function(){
952
+ this.sorter.clearDraggingElement();
953
+ this.unSetPressed()
954
+ this.placeholder = new hooch.SortPlaceholder(this.$sort_element.clone().removeAttr('id').css({width: this.width, height: this.height}),this.sorter)
955
+ this.placeholder.css({'visibility': 'hidden'});
956
+ this.placeholder.css({background: 'none', 'background-color': 'pink'});
957
+ $tmp = $('<div style="display: none;"></div>')
958
+ this.$sort_element.before($tmp)
959
+ this.$sort_element
960
+ .css({position: 'absolute', top: this.starting_offset.top, left: this.starting_offset.left})
961
+ .appendTo('body')
962
+ $tmp.replaceWith(this.placeholder.$sort_element)
963
+ this.sorter.setDraggingElement(this);
964
+ },
930
965
  drop: function(){
931
966
  this.css({position: this.old_position, top: '', left: ''})
932
967
  this.placeholder.replaceWith(this.$sort_element);
@@ -134,10 +134,25 @@ describe("hooch", function() {
134
134
  })
135
135
  it('Handles mousedown on a sort element', function(){
136
136
  sort_elem_a.onMousedown({which: 1, originalEvent: {pageY: 10, pageX: 10}})
137
+ //Pressing the left mouse button on a sort element sets the mousestart position
138
+ expect(sort_elem_a.mouse_start.top).toEqual(10)
139
+ expect(sort_elem_a.mouse_start.left).toEqual(10)
140
+ //That initial press should also set the 'pressed' attribute
141
+ expect(sort_elem_a.pressed).toBe(true)
142
+ //There should be no dragging element for the sorter yet
143
+ expect(sorter.dragging_element).toBeUndefined()
144
+
145
+ })
146
+ it('Handles the initial mousemove when dragging an element', function(){
147
+ sort_elem_a.onMousedown({which: 1, originalEvent: {pageY: 10, pageX: 10}})
148
+ sorter.onMousemove({originalEvent: {pageY: 10, pageX: 11}})
149
+ //Starting to move the mouse will unset the pressed flag so we don't try to initialize the movement again.
150
+ expect(sort_elem_a.pressed).toBe(false)
137
151
  //We set the dragging element for the sorter to be element 'a'
138
152
  expect(sorter.dragging_element.$sort_element.attr('id')).toEqual('a')
139
153
  //We created a placeholder for element a
140
154
  expect(sort_elem_a.placeholder.is_placeholder).toBe(true)
155
+
141
156
  var elem_before_b = sort_elem_b.$sort_element.prev()
142
157
  //The dom element for the placeholder had it's id removed to avoid duplication
143
158
  expect(elem_before_b.attr('id')).toBeUndefined()
@@ -145,6 +160,7 @@ describe("hooch", function() {
145
160
  expect(elem_before_b.is(sort_elem_a.placeholder.$sort_element)).toBe(true)
146
161
  //The real element 'a' is now attached directly to the body
147
162
  expect(sort_elem_a.$sort_element.parent()[0].nodeName).toEqual('BODY')
163
+
148
164
  })
149
165
  it('Handles mousemove when dragging an element', function(){
150
166
  sort_elem_a.onMousedown({which: 1, originalEvent: {pageY: 10, pageX: 10}})
@@ -165,11 +181,18 @@ describe("hooch", function() {
165
181
  it('Handles dropping an element', function(){
166
182
  sort_elem_a.onMousedown({which: 1, originalEvent: {pageY: 10, pageX: 10}})
167
183
  sorter.onMousemove({originalEvent: {pageY: 210, pageX: 10}})
168
- sorter.removeDraggingElement()
184
+ sorter.onMouseup()
169
185
  last_elem = sorter.$sorter.children(':last')
170
186
  //Now the real element 'a' is in last place after being dragged below the sorter
171
187
  expect(sort_elem_a.$sort_element.is(last_elem)).toBe(true)
172
188
  })
189
+ it('Handles a click without a drag', function(){
190
+ sort_elem_a.onMousedown({which: 1, originalEvent: {pageY: 10, pageX: 10}})
191
+ sorter.onMouseup()
192
+ expect(sorter.dragging_element).toBeUndefined()
193
+ var pressed_element = sorter.getPressedElement()
194
+ expect(pressed_element).toBe(false)
195
+ })
173
196
  it('Builds form data', function(){
174
197
  sorter.$sorter.attr('data-sort-field','my_sort')
175
198
  form_data = sorter.getFormData()
@@ -1,3 +1,3 @@
1
1
  module Hooch
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hooch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Draut
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-22 00:00:00.000000000 Z
11
+ date: 2015-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails