futurism 0.1.0 → 0.3.0

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
  SHA256:
3
- metadata.gz: 0c74426f9853a4805efb25ac42eebc0304d463146910b29c0508475be67b972b
4
- data.tar.gz: ed5d1b2cc4f493d9bf01806d57ca6b3b1e428f949b5c9b652bae9a5e9348f5ca
3
+ metadata.gz: e4522cbff1a5893e2a977bf7a32236b1ad9425983ed38521f188c5696dbbfec1
4
+ data.tar.gz: 37cb1278ae994766170290f172aca2f4db3b8e2a801edcb77c1ce4632352d56a
5
5
  SHA512:
6
- metadata.gz: eff8b1b73bf954eade8ebf3ff3883cb9d4e64b9b0144331a2229cc886de71b75235697c8ea06a7379b4fa480df973e9c7cc143b58c8c6d8e979e41b7c0d98f4a
7
- data.tar.gz: a2295457e258a9de0b2061fe4ed3b86e0944a99783ea0a7da2367148a8b488a43c0b8ea174711b79720162865fcf80f8d206839bf44e29f2f061274f284bdf85
6
+ metadata.gz: 83742f96cb378d99ddc8d51bb95b8734fcdec0d9e22d0f3ac2b17122977dedf518942ed38664d715ec2b6890017269a301c31ebe3489d1e10d2176412970c13e
7
+ data.tar.gz: 42a03c5aa611bd415ecfc33b76b9242ce2c4d1e2c06cab8bf50ee06e6e7fe67fb14bad078f4c36bf9b0cd2e242eeefdd3f79581a5f50d47e2c89f5c184f12e40
data/README.md CHANGED
@@ -1,25 +1,105 @@
1
1
  # Futurism
2
+ [![Twitter follow](https://img.shields.io/twitter/follow/julian_rubisch?style=social)](https://twitter.com/julian_rubisch)
3
+ <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
4
+ [![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)
5
+ <!-- ALL-CONTRIBUTORS-BADGE:END -->
2
6
  Lazy-load Rails partials via CableReady
3
7
 
8
+ :rotating_light: *Futurism is still in pre-1.0 state. As much as I hope to keep the API backwards-compatible, I cannot guarantee it* :rotating_light:
9
+
10
+ ## Facts
11
+ - only one dependency: CableReady
12
+ - bundle size (without CableReady) is around [~1.04kB](https://bundlephobia.com/result?p=@minthesize/futurism@0.1.3)
13
+
14
+ ### Browser Support
15
+
16
+ - Chrome v67+ (v54+ via Polyfill)
17
+ - Firefox v63+
18
+ - Edge v79+
19
+ - Safari v10.1+ via Polyfill
20
+ - iOS Safari & Chrome v10.3+ via Polyfill
21
+
22
+ [Caniuse](https://www.caniuse.com/#search=custom%20elements)
23
+
4
24
  ## Usage
5
25
  with a helper in your template
6
26
 
7
27
  ```erb
8
- <%= futurize @posts %>
28
+ <%= futurize @posts, extends: :div do %>
29
+ <!-- placeholder -->
30
+ <% end %>
9
31
  ```
10
32
 
11
- custom `<futurism-elements>` (in the form of a `<div>` or a `<tr is="futurism-table-row">` are rendered. Those custom elements have an `IntersectionObserver` attached that will send the `dom_id` to an ActionCable channel (`FuturismChannel`) which will then replace the placeholders with the actual resource partial.
33
+ custom `<futurism-element>`s (in the form of a `<div>` or a `<tr is="futurism-table-row">` are rendered. Those custom elements have an `IntersectionObserver` attached that will send a signed global id to an ActionCable channel (`FuturismChannel`) which will then replace the placeholders with the actual resource partial.
12
34
 
13
35
  With that method, you could lazy load every class that has to_partial_path defined (ActiveModel has by default).
14
36
 
15
37
  You can pass the placeholder as a block:
16
38
 
17
39
  ```erb
18
- <%= futurize @posts do %>
40
+ <%= futurize @posts, extends: :tr do %>
41
+ <td class="placeholder"></td>
42
+ <% end %>
43
+ ```
44
+
45
+ ![aa601dec1930151f71dbf0d6b02b61c9](https://user-images.githubusercontent.com/4352208/87131629-f768a480-c294-11ea-89a9-ea0a76ee06ef.gif)
46
+
47
+ ## API
48
+
49
+ Currently there are two ways to call `futurize`, designed to wrap `render`'s behavior:
50
+
51
+ ### Resource
52
+
53
+ You can pass a single `ActiveRecord` or an `ActiveRecord::Relation` to `futurize`, just as you would call `render`:
54
+
55
+ ```erb
56
+ <%= futurize @posts, extends: :tr do %>
19
57
  <td class="placeholder"></td>
20
58
  <% end %>
21
59
  ```
22
60
 
61
+ #### Partial Path
62
+
63
+ Remember that you can override the partial path in you models, like so:
64
+
65
+ ```rb
66
+ class Post < ApplicationRecord
67
+ def to_partial_path
68
+ "home/post"
69
+ end
70
+ end
71
+ ```
72
+
73
+ That way you get maximal flexibility when just specifying a single resource.
74
+
75
+ ### Explicit Partial
76
+
77
+ Call `futurize` with a `partial` keyword:
78
+
79
+ ```erb
80
+ <%= futurize partial: "items/card", locals: {card: @card}, extends: :div do %>
81
+ <div class="spinner"></div>
82
+ <% end %>
83
+ ```
84
+
85
+ You can also use the shorthand syntax:
86
+
87
+ ```erb
88
+ <%= futurize "items/card", card: @card, extends: :div do %>
89
+ <div class="spinner"></div>
90
+ <% end %>
91
+ ```
92
+
93
+ #### Collections
94
+
95
+ Collection rendering is also possible:
96
+
97
+ ```erb
98
+ <%= futurize partial: "items/card", collection: @cards, extends: :div do %>
99
+ <div class="spinner"></div>
100
+ <% end %>
101
+ ```
102
+
23
103
  ## Installation
24
104
  Add this line to your application's Gemfile:
25
105
 
@@ -38,8 +118,51 @@ To copy over the javascript files to your application, run
38
118
  $ bin/rails futurism:install
39
119
  ```
40
120
 
121
+ **! Note that the installer will run `yarn add @minthesize/futurism` for you !**
122
+
123
+ ### Manual Installation
124
+ After `bundle`, install the Javascript library:
125
+
126
+ ```bash
127
+ $ bin/yarn add @minthesize/futurism
128
+ ```
129
+
130
+ In your `app/javascript/channels/index.js`, add the following
131
+
132
+ ```js
133
+ import * as Futurism
134
+
135
+ import consumer from './consumer'
136
+
137
+ Futurism.initializeElements()
138
+ Futurism.createSubscription(consumer)
139
+ ```
41
140
 
42
141
  ## Contributing
43
142
 
44
143
  ## License
45
144
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
145
+
146
+ ## Contributors ✨
147
+
148
+ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
149
+
150
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
151
+ <!-- prettier-ignore-start -->
152
+ <!-- markdownlint-disable -->
153
+ <table>
154
+ <tr>
155
+ <td align="center"><a href="http://www.julianrubisch.at"><img src="https://avatars0.githubusercontent.com/u/4352208?v=4" width="100px;" alt=""/><br /><sub><b>Julian Rubisch</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=julianrubisch" title="Code">💻</a></td>
156
+ <td align="center"><a href="https://github.com/darkrubyist"><img src="https://avatars2.githubusercontent.com/u/11207292?v=4" width="100px;" alt=""/><br /><sub><b>darkrubyist</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=darkrubyist" title="Code">💻</a> <a href="https://github.com/julianrubisch/futurism/commits?author=darkrubyist" title="Documentation">📖</a></td>
157
+ <td align="center"><a href="https://ParamagicDev.github.io/portfolio"><img src="https://avatars2.githubusercontent.com/u/26425882?v=4" width="100px;" alt=""/><br /><sub><b>Konnor Rogers</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=ParamagicDev" title="Code">💻</a></td>
158
+ <td align="center"><a href="https://www.andrewm.codes"><img src="https://avatars1.githubusercontent.com/u/18423853?v=4" width="100px;" alt=""/><br /><sub><b>Andrew Mason</b></sub></a><br /><a href="#maintenance-andrewmcodes" title="Maintenance">🚧</a></td>
159
+ <td align="center"><a href="http://gorails.com"><img src="https://avatars1.githubusercontent.com/u/67093?v=4" width="100px;" alt=""/><br /><sub><b>Chris Oliver</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=excid3" title="Code">💻</a> <a href="https://github.com/julianrubisch/futurism/pulls?q=is%3Apr+reviewed-by%3Aexcid3" title="Reviewed Pull Requests">👀</a></td>
160
+ <td align="center"><a href="https://github.com/leastbad"><img src="https://avatars2.githubusercontent.com/u/38150464?v=4" width="100px;" alt=""/><br /><sub><b>leastbad</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=leastbad" title="Code">💻</a></td>
161
+ </tr>
162
+ </table>
163
+
164
+ <!-- markdownlint-enable -->
165
+ <!-- prettier-ignore-end -->
166
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
167
+
168
+ This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
@@ -6,6 +6,10 @@ require "futurism/channel"
6
6
  require "futurism/helpers"
7
7
 
8
8
  module Futurism
9
+ extend ActiveSupport::Autoload
10
+
11
+ autoload :Helpers, "futurism/helpers"
12
+
9
13
  ActiveSupport.on_load(:action_view) {
10
14
  include Futurism::Helpers
11
15
  }
@@ -7,13 +7,15 @@ module Futurism
7
7
  end
8
8
 
9
9
  def receive(data)
10
- resources = data["sgids"].map { |sgid|
11
- [sgid, GlobalID::Locator.locate_signed(sgid)]
10
+ resources = data["signed_params"].map { |signed_params|
11
+ [signed_params, Rails.application.message_verifier("futurism").verify(signed_params)]
12
12
  }
13
13
 
14
- resources.each do |sgid, resource|
14
+ ApplicationController.renderer.instance_variable_set(:@env, connection.env)
15
+
16
+ resources.each do |signed_params, resource|
15
17
  cable_ready["Futurism::Channel"].outer_html(
16
- selector: "[data-sgid='#{sgid}']",
18
+ selector: "[data-signed-params='#{signed_params}']",
17
19
  html: ApplicationController.render(resource)
18
20
  )
19
21
  end
@@ -1,15 +1,46 @@
1
1
  module Futurism
2
2
  module Helpers
3
- def futurize(records, extends: :tr, &block)
3
+ def futurize(records_or_string = nil, extends:, **options, &block)
4
4
  placeholder = capture(&block)
5
+
6
+ if records_or_string.is_a?(ActiveRecord::Base) || records_or_string.is_a?(ActiveRecord::Relation)
7
+ futurize_active_record(records_or_string, extends: extends, placeholder: placeholder)
8
+ elsif records_or_string.is_a?(String)
9
+ futurize_with_options(extends: extends, partial: records_or_string, locals: options, placeholder: placeholder)
10
+ else
11
+ futurize_with_options(extends: extends, placeholder: placeholder, **options)
12
+ end
13
+ end
14
+
15
+ def futurize_with_options(extends:, placeholder:, **options)
16
+ collection = options.delete(:collection)
17
+ if collection.nil?
18
+ render_element(extends: extends, placeholder: placeholder, options: options)
19
+ else
20
+ collection_class_name = collection.first.class.name
21
+ collection.map { |record|
22
+ render_element(extends: extends, placeholder: placeholder, options: options.merge(locals: {collection_class_name.downcase.to_sym => record}))
23
+ }.join.html_safe
24
+ end
25
+ end
26
+
27
+ def futurize_active_record(records, extends:, placeholder:)
5
28
  Array(records).map { |record|
6
- case extends
7
- when :tr
8
- content_tag :tr, placeholder, data: {sgid: record.to_sgid.to_s}, is: "futurism-table-row"
9
- else
10
- content_tag :"futurism-element", placeholder, data: {sgid: record.to_sgid.to_s}
11
- end
29
+ render_element(extends: extends, placeholder: placeholder, options: record)
12
30
  }.join.html_safe
13
31
  end
32
+
33
+ def render_element(extends:, options:, placeholder:)
34
+ case extends
35
+ when :tr
36
+ content_tag :tr, placeholder, data: {signed_params: futurism_signed_params(options)}, is: "futurism-table-row"
37
+ else
38
+ content_tag :"futurism-element", placeholder, data: {signed_params: futurism_signed_params(options)}
39
+ end
40
+ end
41
+
42
+ def futurism_signed_params(params)
43
+ Rails.application.message_verifier("futurism").generate(params)
44
+ end
14
45
  end
15
46
  end
@@ -1,3 +1,3 @@
1
1
  module Futurism
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -3,17 +3,11 @@ require "fileutils"
3
3
  namespace :futurism do
4
4
  desc "Let's look into a brighter future with futurism and CableReady"
5
5
  task install: :environment do
6
- system "yarn add cable_ready"
7
-
8
- app_path_part = Webpacker && Rails ? Webpacker.config.source_path.relative_path_from(Rails.root) : "app/javascript"
9
-
10
- FileUtils.mkdir_p "./#{app_path_part}/channels"
11
- FileUtils.mkdir_p "./#{app_path_part}/elements"
12
-
13
- FileUtils.cp File.expand_path("../templates/futurism_channel.js", __dir__), "./#{app_path_part}/channels"
14
- FileUtils.cp_r File.expand_path("../templates/elements", __dir__), "./#{app_path_part}"
6
+ system "yarn add @minthesize/futurism"
15
7
 
16
8
  filepath = %w[
9
+ app/javascript/channels/index.js
10
+ app/javascript/channels/index.ts
17
11
  app/javascript/packs/application.js
18
12
  app/javascript/packs/application.ts
19
13
  ]
@@ -24,7 +18,21 @@ namespace :futurism do
24
18
  puts "Updating #{filepath}"
25
19
  lines = File.open(filepath, "r") { |f| f.readlines }
26
20
 
27
- lines << "\nimport 'elements'"
21
+ unless lines.find { |line| line.start_with?("import * as Futurism") }
22
+ matches = lines.select { |line| line =~ /\A(require|import)/ }
23
+ lines.insert lines.index(matches.last).to_i + 1, "import * as Futurism from '@minthesize/futurism'\n"
24
+ end
25
+
26
+ unless lines.find { |line| line.start_with?("import consumer") }
27
+ matches = lines.select { |line| line =~ /\A(require|import)/ }
28
+ lines.insert lines.index(matches.last).to_i + 1, "import consumer from '../channels/consumer'\n"
29
+ end
30
+
31
+ initialize_line = lines.find { |line| line.start_with?("Futurism.initializeElements") }
32
+ lines << "Futurism.initializeElements()\n" unless initialize_line
33
+
34
+ subscribe_line = lines.find { |line| line.start_with?("Futurism.createSubscription") }
35
+ lines << "Futurism.createSubscription(consumer)\n" unless subscribe_line
28
36
 
29
37
  File.open(filepath, "w") { |f| f.write lines.join }
30
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: futurism
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Rubisch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-09 00:00:00.000000000 Z
11
+ date: 2020-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.12.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: standardrb
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,34 @@ dependencies:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: spy
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: rack
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -84,9 +126,6 @@ dependencies:
84
126
  name: rails
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '5.2'
90
129
  - - ">="
91
130
  - !ruby/object:Gem::Version
92
131
  version: '6'
@@ -94,9 +133,6 @@ dependencies:
94
133
  prerelease: false
95
134
  version_requirements: !ruby/object:Gem::Requirement
96
135
  requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: '5.2'
100
136
  - - ">="
101
137
  - !ruby/object:Gem::Version
102
138
  version: '6'
@@ -137,13 +173,6 @@ files:
137
173
  - lib/futurism/version.rb
138
174
  - lib/tasks/futurism_tasks.rake
139
175
  - lib/tasks/futurism_tasks.rake~
140
- - lib/templates/elements/futurism_element.js
141
- - lib/templates/elements/futurism_table_row.js
142
- - lib/templates/elements/index.js
143
- - lib/templates/futurism_channel.js
144
- - lib/templates/futurism_element.js~
145
- - lib/templates/futurism_table_row.js~
146
- - lib/templates/index.js~
147
176
  homepage: https://github.com/julianrubisch/futurism
148
177
  licenses:
149
178
  - MIT
@@ -1,39 +0,0 @@
1
- class FuturismElement extends HTMLElement {
2
- connectedCallback () {
3
- const options = {}
4
-
5
- this.observer = new IntersectionObserver((entries, observer) => {
6
- entries.forEach(
7
- (entry => {
8
- if (entry.isIntersecting) {
9
- this.dispatchAppearEvent(entry, observer)
10
- }
11
- }).bind(this)
12
- )
13
- }, options)
14
-
15
- this.observer.observe(this)
16
- }
17
-
18
- dispatchAppearEvent (entry, observer) {
19
- if (window.Futurism) {
20
- const evt = new CustomEvent('futurism:appear', {
21
- bubbles: true,
22
- detail: {
23
- target: entry.target,
24
- observer
25
- }
26
- })
27
- this.dispatchEvent(evt)
28
- } else {
29
- setTimeout(
30
- (() => {
31
- this.dispatchAppearEvent(entry, observer)
32
- }).bind(this),
33
- 1
34
- )
35
- }
36
- }
37
- }
38
-
39
- customElements.define('futurism-element', FuturismElement)
@@ -1,41 +0,0 @@
1
- class FuturismTableRow extends HTMLTableRowElement {
2
- connectedCallback () {
3
- const options = {}
4
-
5
- this.observer = new IntersectionObserver((entries, observer) => {
6
- entries.forEach(
7
- (entry => {
8
- if (entry.isIntersecting) {
9
- this.dispatchAppearEvent(entry, observer)
10
- }
11
- }).bind(this)
12
- )
13
- }, options)
14
-
15
- this.observer.observe(this)
16
- }
17
-
18
- dispatchAppearEvent (entry, observer) {
19
- if (window.Futurism) {
20
- const evt = new CustomEvent('futurism:appear', {
21
- bubbles: true,
22
- detail: {
23
- target: entry.target,
24
- observer
25
- }
26
- })
27
- this.dispatchEvent(evt)
28
- } else {
29
- setTimeout(
30
- (() => {
31
- this.dispatchAppearEvent(entry, observer)
32
- }).bind(this),
33
- 1
34
- )
35
- }
36
- }
37
- }
38
-
39
- customElements.define('futurism-table-row', FuturismTableRow, {
40
- extends: 'tr'
41
- })
@@ -1,4 +0,0 @@
1
- import FuturismElement from './futurism_element'
2
- import FuturismTableRow from './futurism_table_row'
3
-
4
- export { FuturismElement, FuturismTableRow }
@@ -1,38 +0,0 @@
1
- import consumer from './consumer'
2
- import CableReady from 'cable_ready'
3
-
4
- const debounceEvents = (callback, delay = 250) => {
5
- let timeoutId
6
- let events = []
7
- return (...args) => {
8
- clearTimeout(timeoutId)
9
- events = [...events, ...args]
10
- timeoutId = setTimeout(() => {
11
- timeoutId = null
12
- callback(events)
13
- events = []
14
- }, delay)
15
- }
16
- }
17
-
18
- consumer.subscriptions.create('Futurism::Channel', {
19
- connected () {
20
- window.Futurism = this
21
- document.addEventListener(
22
- 'futurism:appear',
23
- debounceEvents(
24
- (events => {
25
- this.send({ sgids: events.map(e => e.target.dataset.sgid) })
26
- }).bind(this)
27
- )
28
- )
29
- },
30
-
31
- received (data) {
32
- if (data.cableReady) {
33
- CableReady.perform(data.operations, {
34
- emitMissingElementWarnings: false
35
- })
36
- }
37
- }
38
- })
@@ -1,40 +0,0 @@
1
- class FuturismElement extends HTMLElement {
2
- connectedCallback() {
3
- console.log("connected");
4
- const options = {};
5
-
6
- this.observer = new IntersectionObserver((entries, observer) => {
7
- entries.forEach(
8
- (entry => {
9
- if (entry.isIntersecting) {
10
- this.dispatchAppearEvent(entry, observer);
11
- }
12
- }).bind(this)
13
- );
14
- }, options);
15
-
16
- this.observer.observe(this);
17
- }
18
-
19
- dispatchAppearEvent(entry, observer) {
20
- if (window.Futurism) {
21
- const evt = new CustomEvent("futurism:appear", {
22
- bubbles: true,
23
- detail: {
24
- target: entry.target,
25
- observer
26
- }
27
- });
28
- this.dispatchEvent(evt);
29
- } else {
30
- setTimeout(
31
- (() => {
32
- this.dispatchAppearEvent(entry, observer);
33
- }).bind(this),
34
- 1
35
- );
36
- }
37
- }
38
- }
39
-
40
- customElements.define("futurism-element", FuturismElement);
@@ -1,40 +0,0 @@
1
- class FuturismElement extends HTMLElement {
2
- connectedCallback() {
3
- console.log("connected");
4
- const options = {};
5
-
6
- this.observer = new IntersectionObserver((entries, observer) => {
7
- entries.forEach(
8
- (entry => {
9
- if (entry.isIntersecting) {
10
- this.dispatchAppearEvent(entry, observer);
11
- }
12
- }).bind(this)
13
- );
14
- }, options);
15
-
16
- this.observer.observe(this);
17
- }
18
-
19
- dispatchAppearEvent(entry, observer) {
20
- if (window.Futurism) {
21
- const evt = new CustomEvent("futurism:appear", {
22
- bubbles: true,
23
- detail: {
24
- target: entry.target,
25
- observer
26
- }
27
- });
28
- this.dispatchEvent(evt);
29
- } else {
30
- setTimeout(
31
- (() => {
32
- this.dispatchAppearEvent(entry, observer);
33
- }).bind(this),
34
- 1
35
- );
36
- }
37
- }
38
- }
39
-
40
- customElements.define("futurism-element", FuturismElement);
@@ -1,3 +0,0 @@
1
- import FuturismElement from "./futurism_element";
2
-
3
- export { FuturismElement };