flex_infinite_scroll 0.1.3 → 0.1.4

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
- SHA256:
3
- metadata.gz: 3cb41835798253e2a4d88bdcfe92c12777f14b68c8ed69b1983f59d70ef17253
4
- data.tar.gz: 50e727fdb17ba2d7fbf6990197e4d083e281fe0cfdd79cc10c0a449f156ec243
2
+ SHA1:
3
+ metadata.gz: 6dca995d94c2ad3e09019b7d273940ba9aaab2c7
4
+ data.tar.gz: 11616db0db37cbefd5d5a303d528440baa5c11f5
5
5
  SHA512:
6
- metadata.gz: ed2d0f945d3afe55c13e162cce7f4c8ef87bb8de0f644de7bd48e818b24e5c0c3d58a1e96769436a513976bd36bf119abf528d35d0e2327101cae85b28f4e415
7
- data.tar.gz: 0e80acdf4f616b7bb78374bed03b75598d4fc25c267fa2fcf22643ad4da39b5e477fdfb6ab73221dd03d7cfeeb1e609069ea7926d1699b82bd9e2b7148bbf807
6
+ metadata.gz: cd01ef3e67277c1805e030e6cce972978eb8e0f88839eb5fcf5166c7a7fb9497c1f1ecb5c504c979d45e3292cf5458d6315339cdd93855e65b3beeaeba7b402c
7
+ data.tar.gz: 83e655f62ab35e6c8f2375bddfeca4996dafb9add85de27eb1ef24d557133e63cfd71069f26d197b767bbb6fd206576b517160ab12508fdd21f152e2c3ccf8c6
@@ -6,24 +6,24 @@ module FlexInfiniteScroll
6
6
  include ActionView::Context
7
7
 
8
8
  def fis_init_list(data, partial, config = {})
9
+ data = kaminari_prepare(data) if config[:kaminari]
9
10
  result = if config[:targetContainer]
10
11
  fis_get_list(data, partial, 'html')
11
12
  else
12
- content_tag :div, class: "fis-container #{config[:container_class] || ''}" do
13
+ content_tag :div, id: 'fis-container', class: (config[:container_class] || '').to_s do
13
14
  fis_get_list(data, partial, 'html')
14
15
  end
15
16
  end
16
17
  config[:scrollContainer] ||= (config[:targetContainer] || 'body')
17
- config[:targetContainer] ||= '.fis-container'
18
+ config[:targetContainer] ||= 'fis-container'
18
19
  result += javascript_tag do
19
- "$('#{config[:scrollContainer]}').flexInfiniteScroll(#{config.to_json})".html_safe
20
+ "flexInfiniteScroll('#{config[:scrollContainer]}',#{config.to_json})".html_safe
20
21
  end
21
- Sanitize.fragment(result,
22
- Sanitize::Config.merge(Sanitize::Config::RELAXED,
23
- elements: Sanitize::Config::RELAXED[:elements] + %w(script))).html_safe
22
+ result.html_safe
24
23
  end
25
24
 
26
- def fis_next_page(data, partial)
25
+ def fis_next_page(data, partial, config = {})
26
+ data = kaminari_prepare(data) if config[:kaminari]
27
27
  data[:data] = fis_get_list(data, partial, 'json')
28
28
  data
29
29
  end
@@ -37,7 +37,16 @@ module FlexInfiniteScroll
37
37
  render partial: partial, locals: { fis_object: member }
38
38
  end
39
39
  end
40
- Sanitize.fragment(result, Sanitize::Config::RELAXED).html_safe
40
+ result.html_safe
41
+ end
42
+
43
+ private
44
+
45
+ def kaminari_prepare(data)
46
+ {
47
+ data: data,
48
+ next_page: data.next_page
49
+ }
41
50
  end
42
51
  end
43
52
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  # Infinite scroll module
4
4
  require 'flex_infinite_scroll/view_helpers'
5
- require 'sanitize'
6
5
 
7
6
  module FlexInfiniteScroll
8
7
  class Engine < ::Rails::Engine
@@ -1,12 +1,12 @@
1
1
  // Flex Infinite Scroll initialization
2
2
 
3
- $.fn.extend({
4
- flexInfiniteScroll: function(config = {}) {
3
+
4
+ function flexInfiniteScroll(object_id,config = {}) {
5
5
  // Config preparing
6
6
  var startPage = config.startPage || 1;
7
7
  var nextPage = startPage + 1;
8
8
  var dataUrl = config.url;
9
- var scrollContainer = this[0];
9
+ var scrollContainer = (object_id == 'body' ? document.body : document.getElementById(object_id));
10
10
  var queryParams = config.queryParams;
11
11
  var dataProcess = config.dataProcess;
12
12
  var initialLoad = config.initialLoad;
@@ -14,53 +14,68 @@ $.fn.extend({
14
14
  var beforeAction = config.beforeAction;
15
15
  var afterAction = config.afterAction;
16
16
  var targetContainer= config.targetContainer || scrollContainer ;
17
- var eventTarget = (scrollContainer.localName == 'body' ? window : scrollContainer);
17
+ var eventTarget = (object_id == 'body' ? window : scrollContainer);
18
18
  if (config.lastPage) nextPage = 'last';
19
19
  scrollContainer.dataset.fisNextPage = nextPage;
20
20
  scrollContainer.dataset.fisUrl = dataUrl;
21
21
  scrollContainer.dataset.fisLoading = 0;
22
22
 
23
23
  function getScrollHeight(){
24
- if (scrollContainer.localName == 'body'){
25
- return document.documentElement.scrollHeight
24
+ if (object_id == 'body'){
25
+ return document.documentElement.scrollHeight;
26
26
  } else {
27
- return eventTarget.scrollHeight
27
+ return eventTarget.scrollHeight;
28
28
  }
29
29
 
30
30
  }
31
+
32
+ function urlParams(object) {
33
+ var encodedString = '';
34
+ for (var prop in object) {
35
+ if (object.hasOwnProperty(prop)) {
36
+ if (encodedString.length > 0) {
37
+ encodedString += '&';
38
+ }
39
+ encodedString += encodeURI(prop + '=' + object[prop]);
40
+ }
41
+ }
42
+ return encodedString;
43
+ }
31
44
 
32
45
  function getData(page = 1){
33
46
  // Check for loading process and last page
34
- if (scrollContainer.dataset.fisLoading === '1' || page == 'last') return false
47
+ if (scrollContainer.dataset.fisLoading === '1' || page == 'last') return false;
35
48
  scrollContainer.dataset.fisLoading = 1;
36
49
  // before load action
37
50
  if (beforeAction) {
38
51
  if (typeof(beforeAction) == 'function') {
39
52
  beforeAction();
40
53
  }else if (typeof(beforeAction) == 'string') {
41
- eval(beforeAction)
54
+ eval(beforeAction);
42
55
  }
43
56
  }
44
- $.ajax({
45
- url: scrollContainer.dataset.fisUrl,
46
- // custom query params
47
- data: (queryParams || {page: page}),
48
- dataType: 'json',
49
- type: 'GET',
50
- success: function(json) {
51
-
57
+ var xhr = new XMLHttpRequest();
58
+ var params = (queryParams || {page: page});
59
+ xhr.open('GET', scrollContainer.dataset.fisUrl + '?' + urlParams(params));
60
+ xhr.onload = function() {
61
+ var json = JSON.parse(xhr.response)
62
+ if (xhr.status === 200) {
52
63
  if (dataProcess){
53
64
  // custom user processor
54
- dataProcess(json,$(targetContainer));
65
+ dataProcess(json,targetContainer);
55
66
  } else {
56
67
  // default data processor
57
- $(json.data).appendTo($(targetContainer));
68
+ var div = document.createElement('div');
69
+ div.innerHTML = json.data;
70
+ while (div.children.length > 0) {
71
+ document.getElementById(targetContainer).appendChild(div.children[0]);
72
+ }
58
73
  }
59
74
  scrollContainer.dataset.fisNextPage = json.next_page || 'last';
60
75
  scrollContainer.dataset.fisLoading = 0;
61
76
  if (scrollNotApear()) {
62
77
  // check if on initial load not enough elements on screen
63
- getData(scrollContainer.dataset.fisNextPage)
78
+ getData(scrollContainer.dataset.fisNextPage);
64
79
  }
65
80
  // after load action
66
81
  if (afterAction) {
@@ -69,17 +84,17 @@ $.fn.extend({
69
84
  }else if (typeof(afterAction) == 'string') {
70
85
  eval(afterAction)
71
86
  }
72
- }
73
- },
74
- error: function() {
87
+ }
88
+ } else {
75
89
  scrollContainer.dataset.fisLoading = 0;
76
90
  }
77
- });
91
+ };
92
+ xhr.send();
78
93
  }
79
94
 
80
95
  // intial load
81
96
  if (initialLoad) {
82
- getData(startPage)
97
+ getData(startPage);
83
98
  } else if (scrollNotApear()) {
84
99
  // check if on initial load not enough elements on screen
85
100
  getData(scrollContainer.dataset.fisNextPage);
@@ -88,14 +103,14 @@ $.fn.extend({
88
103
  // check if body scroll
89
104
 
90
105
  function scrollNotApear(){
91
- var containerSize=$(eventTarget).innerHeight();
106
+ var containerSize=(object_id == 'body' ? eventTarget.innerHeight : eventTarget.offsetHeight);
92
107
  var scrollSize=getScrollHeight();
93
- return (scrollSize - containerSize - loadMargin <= 0)
108
+ return (scrollSize - containerSize - loadMargin <= 0);
94
109
  }
95
110
 
96
- $(eventTarget).on('scroll', () => {
97
- var scrollTop=$(eventTarget).scrollTop();
98
- var containerSize=$(eventTarget).innerHeight();
111
+ eventTarget.addEventListener('scroll', function() {
112
+ var scrollTop= (object_id == 'body' ? eventTarget.scrollY : eventTarget.scrollTop);
113
+ var containerSize=(object_id == 'body' ? eventTarget.innerHeight : eventTarget.offsetHeight);
99
114
  var scrollSize=getScrollHeight();
100
115
  if (scrollTop + containerSize > scrollSize - loadMargin && scrollContainer.dataset.fisNextPage != 'last'){
101
116
  getData(scrollContainer.dataset.fisNextPage);
@@ -104,5 +119,4 @@ $.fn.extend({
104
119
 
105
120
 
106
121
 
107
- }
108
- })
122
+ }
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flex_infinite_scroll
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Ignatov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-21 00:00:00.000000000 Z
11
+ date: 2019-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: sanitize
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 4.6.3
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 4.6.3
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rails
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -65,11 +51,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
51
  - - ">="
66
52
  - !ruby/object:Gem::Version
67
53
  version: '0'
68
- requirements:
69
- - jQuery
54
+ requirements: []
70
55
  rubyforge_project:
71
- rubygems_version: 2.7.6
56
+ rubygems_version: 2.6.14.3
72
57
  signing_key:
73
58
  specification_version: 4
74
- summary: Add infinite scrolling to models and views
59
+ summary: Infinite scroll for Ruby on Rails applications on pure JavaScript. Also has
60
+ Kaminari support for pagination.
75
61
  test_files: []