futurism 0.1.0 → 0.3.0

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
  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 };