coupdoeil 1.0.0.pre.alpha.1
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 +7 -0
- data/CHANGELOG.md +1 -0
- data/MIT-LICENSE +20 -0
- data/README.md +6 -0
- data/Rakefile +8 -0
- data/app/assets/config/coupdoeil_manifest.js +1 -0
- data/app/assets/javascripts/coupdoeil.js +2289 -0
- data/app/assets/javascripts/coupdoeil.min.js +2 -0
- data/app/assets/javascripts/coupdoeil.min.js.map +1 -0
- data/app/assets/stylesheets/coupdoeil/application.css +15 -0
- data/app/assets/stylesheets/coupdoeil/hovercard-animation.css +44 -0
- data/app/assets/stylesheets/coupdoeil/hovercard-arrow.css +39 -0
- data/app/assets/stylesheets/coupdoeil/hovercard.css +84 -0
- data/app/controllers/coupdoeil/hovercards_controller.rb +46 -0
- data/app/helpers/coupdoeil/application_helper.rb +16 -0
- data/app/javascript/coupdoeil/elements/coupdoeil_element.js +33 -0
- data/app/javascript/coupdoeil/events/onclick.js +68 -0
- data/app/javascript/coupdoeil/events/onmouseover.js +86 -0
- data/app/javascript/coupdoeil/events.js +19 -0
- data/app/javascript/coupdoeil/hovercard/actions.js +60 -0
- data/app/javascript/coupdoeil/hovercard/attributes.js +33 -0
- data/app/javascript/coupdoeil/hovercard/cache.js +18 -0
- data/app/javascript/coupdoeil/hovercard/closing.js +81 -0
- data/app/javascript/coupdoeil/hovercard/config.js +15 -0
- data/app/javascript/coupdoeil/hovercard/controller.js +22 -0
- data/app/javascript/coupdoeil/hovercard/opening.js +139 -0
- data/app/javascript/coupdoeil/hovercard/optionsParser.js +117 -0
- data/app/javascript/coupdoeil/hovercard/positioning.js +74 -0
- data/app/javascript/coupdoeil/hovercard/state_check.js +11 -0
- data/app/javascript/coupdoeil/hovercard.js +6 -0
- data/app/javascript/coupdoeil/index.js +1 -0
- data/app/models/coupdoeil/hovercard/option/animation.rb +20 -0
- data/app/models/coupdoeil/hovercard/option/cache.rb +19 -0
- data/app/models/coupdoeil/hovercard/option/loading.rb +19 -0
- data/app/models/coupdoeil/hovercard/option/offset.rb +35 -0
- data/app/models/coupdoeil/hovercard/option/placement.rb +44 -0
- data/app/models/coupdoeil/hovercard/option/trigger.rb +19 -0
- data/app/models/coupdoeil/hovercard/option.rb +45 -0
- data/app/models/coupdoeil/hovercard/options_set.rb +57 -0
- data/app/models/coupdoeil/hovercard/registry.rb +25 -0
- data/app/models/coupdoeil/hovercard/setup.rb +44 -0
- data/app/models/coupdoeil/hovercard/view_context_delegation.rb +18 -0
- data/app/models/coupdoeil/hovercard.rb +115 -0
- data/app/models/coupdoeil/params.rb +83 -0
- data/app/models/coupdoeil/tag.rb +45 -0
- data/app/style/hovercard-animation.scss +44 -0
- data/app/style/hovercard-arrow.scss +40 -0
- data/app/style/hovercard.scss +2 -0
- data/app/views/layouts/coupdoeil/application.html.erb +15 -0
- data/config/routes.rb +3 -0
- data/lib/coupdoeil/engine.rb +62 -0
- data/lib/coupdoeil/version.rb +3 -0
- data/lib/coupdoeil.rb +6 -0
- data/lib/generators/coupdoeil/hovercard/USAGE +15 -0
- data/lib/generators/coupdoeil/hovercard/hovercard_generator.rb +22 -0
- data/lib/generators/coupdoeil/hovercard/templates/hovercard.rb.tt +8 -0
- data/lib/generators/coupdoeil/install/install_generator.rb +71 -0
- data/lib/generators/coupdoeil/install/templates/layout.html.erb.tt +14 -0
- data/lib/tasks/coupdoeil_tasks.rake +4 -0
- metadata +129 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Coupdoeil
|
4
|
+
module Params
|
5
|
+
extend self
|
6
|
+
|
7
|
+
GLOBAL_ID_KEY = "_cd_globalid"
|
8
|
+
|
9
|
+
RESERVED_KEYS = [GLOBAL_ID_KEY, GLOBAL_ID_KEY.to_sym].freeze
|
10
|
+
|
11
|
+
private_constant :RESERVED_KEYS, :GLOBAL_ID_KEY
|
12
|
+
|
13
|
+
SerializationError = Class.new(StandardError)
|
14
|
+
|
15
|
+
def deserialize_global_id(hash) = GlobalID::Locator.locate hash[GLOBAL_ID_KEY]
|
16
|
+
def deserialize_hash(serialized_hash) = serialized_hash.transform_values { deserialize_param(_1) }
|
17
|
+
def serialized_global_id?(hash) = hash.size == 1 && hash.include?(GLOBAL_ID_KEY)
|
18
|
+
|
19
|
+
def serialize(*params)
|
20
|
+
ActiveSupport::Notifications.instrument("serialize_hovercard_params.coupdoeil") do
|
21
|
+
params.map { |param| serialize_param(param) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def deserialize(params)
|
26
|
+
Array.wrap(params).map { |param| deserialize_param(param) }
|
27
|
+
rescue StandardError
|
28
|
+
raise DeserializationError
|
29
|
+
end
|
30
|
+
|
31
|
+
def serialize_param(param)
|
32
|
+
case param
|
33
|
+
when GlobalID::Identification
|
34
|
+
convert_to_global_id_hash(param)
|
35
|
+
when Array
|
36
|
+
param.map { serialize_param(_1) }
|
37
|
+
when Hash
|
38
|
+
serialize_hash(param)
|
39
|
+
else
|
40
|
+
param
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def serialize_hash(param)
|
45
|
+
param.each_with_object({}) do |(key, value), hash|
|
46
|
+
hash[serialize_hash_key(key)] = serialize_param(value)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def serialize_hash_key(key)
|
51
|
+
case key
|
52
|
+
when *RESERVED_KEYS
|
53
|
+
raise Coupdoeil::SerializationError, "Can't serialize a Hash with reserved key #{key.inspect}"
|
54
|
+
when String, Symbol
|
55
|
+
key.to_s
|
56
|
+
else
|
57
|
+
raise Coupdoeil::SerializationError, "Only string and symbol hash keys may be serialized as hovercard params, but #{key.inspect} is a #{key.class}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def convert_to_global_id_hash(param)
|
62
|
+
{ GLOBAL_ID_KEY => param.to_global_id.to_s }
|
63
|
+
rescue URI::GID::MissingModelIdError
|
64
|
+
raise Coupdoeil::SerializationError, "Unable to serialize #{param.class} " \
|
65
|
+
"without an id. (Maybe you forgot to call save?)"
|
66
|
+
end
|
67
|
+
|
68
|
+
def deserialize_param(param)
|
69
|
+
case param
|
70
|
+
when Array
|
71
|
+
param.map { |arg| deserialize_param(arg) }
|
72
|
+
when Hash
|
73
|
+
if serialized_global_id?(param)
|
74
|
+
deserialize_global_id param
|
75
|
+
else
|
76
|
+
deserialize_hash(param)
|
77
|
+
end
|
78
|
+
else
|
79
|
+
param
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Coupdoeil
|
4
|
+
class Tag
|
5
|
+
def initialize(hovercard:, hovercard_options:, attributes:)
|
6
|
+
@hovercard_setup = hovercard
|
7
|
+
@attributes = attributes
|
8
|
+
hovercard_options = Hovercard::OptionsSet.new(hovercard_options)
|
9
|
+
@hovercard_options_set = hovercard_setup.default_options.merge(hovercard_options)
|
10
|
+
@hovercard_options_set.validate!
|
11
|
+
end
|
12
|
+
|
13
|
+
def render_in(view_context, &block)
|
14
|
+
ActiveSupport::Notifications.instrument("render_tag.coupdoeil") do
|
15
|
+
content = view_context.capture(&block) if block_given?
|
16
|
+
view_context.content_tag("coup-doeil", **@attributes.merge(hovercard_attributes)) do
|
17
|
+
if hovercard_options_set.preload?
|
18
|
+
view_context.tag.template(view_context.render(hovercard_setup), class: "hovercard-content") + content
|
19
|
+
else
|
20
|
+
content
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :hovercard_options_set, :hovercard_setup
|
29
|
+
|
30
|
+
def hovercard_attributes
|
31
|
+
attributes = { hc: hovercard_options_set.to_base36 }
|
32
|
+
|
33
|
+
unless hovercard_options_set.preload?
|
34
|
+
params = Params.serialize(hovercard_setup.params).sole.presence&.to_json
|
35
|
+
attributes.merge!("hc-type" => hovercard_setup.identifier, "hc-params" => params)
|
36
|
+
end
|
37
|
+
|
38
|
+
if Rails.env.local?
|
39
|
+
attributes.merge!(hovercard_options_set.to_h.transform_keys { "hovercard-#{_1}" })
|
40
|
+
end
|
41
|
+
|
42
|
+
attributes
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
.coupdoeil--hovercard.hidden {
|
2
|
+
display: none
|
3
|
+
}
|
4
|
+
|
5
|
+
.coupdoeil--hovercard[data-animation] {
|
6
|
+
&.hovercard-enter {
|
7
|
+
transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
|
8
|
+
}
|
9
|
+
&.hovercard-leave {
|
10
|
+
transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
|
11
|
+
}
|
12
|
+
&.hovercard-enter, &.hovercard-leave {
|
13
|
+
transition-property: opacity, transform;
|
14
|
+
transition-duration: 150ms;
|
15
|
+
}
|
16
|
+
|
17
|
+
&.hovercard-enter-end, &.hovercard-leave-start {
|
18
|
+
&[data-animation="fade-in"], &[data-animation="slide-in"], &[data-animation="slide-out"] {
|
19
|
+
opacity: 1;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
&.hovercard-enter-start, &.hovercard-leave-end {
|
24
|
+
&[data-animation="fade-in"], &[data-animation="slide-in"], &[data-animation="slide-out"] {
|
25
|
+
opacity: 0;
|
26
|
+
}
|
27
|
+
&[data-placement|="right"] {
|
28
|
+
&[data-animation="slide-in"] { transform: translateX(1rem); }
|
29
|
+
&[data-animation="slide-out"] { transform: translateX(-1rem); }
|
30
|
+
}
|
31
|
+
&[data-placement|="left"] {
|
32
|
+
&[data-animation="slide-in"] { transform: translateX(-1rem); }
|
33
|
+
&[data-animation="slide-out"] { transform: translateX(1rem); }
|
34
|
+
}
|
35
|
+
&[data-placement|="top"] {
|
36
|
+
&[data-animation="slide-in"] { transform: translateY(-1rem); }
|
37
|
+
&[data-animation="slide-out"] { transform: translateY(1rem); }
|
38
|
+
}
|
39
|
+
&[data-placement|="bottom"] {
|
40
|
+
&[data-animation="slide-in"] { transform: translateY(1rem); }
|
41
|
+
&[data-animation="slide-out"] { transform: translateY(-1rem); }
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
@use 'sass:list';
|
2
|
+
|
3
|
+
.coupdoeil--hovercard {
|
4
|
+
& [data-hovercard-arrow] {
|
5
|
+
--co-hovercard--color: white;
|
6
|
+
--co-hovercard--border-color: rgb(209 213 219);
|
7
|
+
--co-hovercard-border-size: 1px;
|
8
|
+
--co-hovercard-border-style: solid;
|
9
|
+
--co-hovercard--size-ratio: 1;
|
10
|
+
--co-hovercard--height: 0.75rem;
|
11
|
+
--co-hovercard--width: calc(var(--co-hovercard--height) / var(--co-hovercard--size-ratio));
|
12
|
+
|
13
|
+
position: absolute;
|
14
|
+
height: var(--co-hovercard--height);
|
15
|
+
width: var(--co-hovercard--height);
|
16
|
+
|
17
|
+
&::after, &::before {
|
18
|
+
content: "";
|
19
|
+
width: 0;
|
20
|
+
height: 0;
|
21
|
+
position: absolute;
|
22
|
+
bottom: 0;
|
23
|
+
border: var(--co-hovercard--base-border-width) var(--co-hovercard-border-style) transparent;
|
24
|
+
}
|
25
|
+
|
26
|
+
&::after {
|
27
|
+
--co-hovercard--base-border-width: var(--co-hovercard--width);
|
28
|
+
border-bottom-color: var(--co-hovercard--color);
|
29
|
+
left: calc(50% - var(--co-hovercard--width));
|
30
|
+
}
|
31
|
+
&::before {
|
32
|
+
--co-hovercard--base-border-width: calc(var(--co-hovercard--height) + var(--co-hovercard-border-size));
|
33
|
+
border-bottom-color: var(--co-hovercard--border-color);
|
34
|
+
left: calc(50% - var(--co-hovercard--width) - var(--co-hovercard-border-size));
|
35
|
+
}
|
36
|
+
}
|
37
|
+
&[data-placement|="top"] [data-hovercard-arrow] { transform: rotate(180deg); }
|
38
|
+
&[data-placement|="right"] [data-hovercard-arrow] { transform: rotate(-90deg); }
|
39
|
+
&[data-placement|="left"] [data-hovercard-arrow] { transform: rotate(90deg); }
|
40
|
+
}
|
data/config/routes.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
module Coupdoeil
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
isolate_namespace Coupdoeil
|
4
|
+
# config.eager_load_namespaces << Coupdoeil
|
5
|
+
config.coupdoeil = ActiveSupport::OrderedOptions.new
|
6
|
+
|
7
|
+
# If you don't want to precompile Coupdoeil's assets (eg. because you're using webpack),
|
8
|
+
# you can do this in an intiailzer:
|
9
|
+
#
|
10
|
+
# config.after_initialize do
|
11
|
+
# config.assets.precompile -= Coupdoeil::Engine::PRECOMPILE_ASSETS
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# If you just want to remove specific css:
|
15
|
+
#
|
16
|
+
# config.after_initialize do
|
17
|
+
# config.assets.precompile -= %w[coupdoeil/hovercard-arrow.css]
|
18
|
+
# end
|
19
|
+
PRECOMPILE_ASSETS = %w[
|
20
|
+
coupdoeil.js
|
21
|
+
coupdoeil.min.js
|
22
|
+
coupdoeil.min.js.map
|
23
|
+
coupdoeil/hovercard.css
|
24
|
+
coupdoeil/hovercard-arrow.css
|
25
|
+
coupdoeil/hovercard-animation.css
|
26
|
+
]
|
27
|
+
|
28
|
+
initializer "coupdoeil.assets" do
|
29
|
+
if Rails.application.config.respond_to?(:assets)
|
30
|
+
Rails.application.config.assets.precompile += PRECOMPILE_ASSETS
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
initializer "coupdoeil.logger" do
|
35
|
+
stdout_logger = ActiveSupport::Logger.new(STDOUT)
|
36
|
+
stdout_logger.formatter = ::Logger::Formatter.new
|
37
|
+
tagged_stdout_logger = ActiveSupport::TaggedLogging.new(stdout_logger)
|
38
|
+
config.coupdoeil.logger = tagged_stdout_logger.tagged("Coupdoeil")
|
39
|
+
end
|
40
|
+
|
41
|
+
initializer "coupdoeil.helpers", before: :load_config_initializers do
|
42
|
+
ActiveSupport.on_load(:action_controller_base) do
|
43
|
+
helper Coupdoeil::Engine.helpers
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
initializer "coupdoeil.view_paths" do
|
48
|
+
config.to_prepare do
|
49
|
+
views = Rails.application.config.paths["app/views"].existent
|
50
|
+
views += Rails.application.config.paths.add("app/hovercards").existent
|
51
|
+
views += Rails.application.config.paths.add("app/hovercards/layouts").existent
|
52
|
+
Coupdoeil::Hovercard.prepend_view_path(views)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
initializer "coupdoeil.routes" do |app|
|
57
|
+
app.routes.append do
|
58
|
+
mount Coupdoeil::Engine => "/coupdoeil"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/coupdoeil.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Description:
|
2
|
+
Create hovercard class and views files.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
bin/rails generate hovercard Contact details from_project
|
6
|
+
|
7
|
+
creates the following files:
|
8
|
+
app/hovercards/contact_hovercard.rb
|
9
|
+
app/views/contact_hovercard/details.html.erb
|
10
|
+
app/views/contact_hovercard/from_project.html.erb
|
11
|
+
|
12
|
+
bin/rails generate hovercard Contact details from_project --skip-views
|
13
|
+
|
14
|
+
creates only the class file:
|
15
|
+
app/hovercards/contact_hovercard.rb
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Coupdoeil::HovercardGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path("templates", __dir__)
|
3
|
+
|
4
|
+
check_class_collision suffix: "Hovercard"
|
5
|
+
|
6
|
+
class_option :skip_views, type: :boolean, desc: "Skip view files", default: false
|
7
|
+
|
8
|
+
argument :action_names, type: :array, default: []
|
9
|
+
|
10
|
+
def create_hovercard_file
|
11
|
+
template "hovercard.rb",
|
12
|
+
File.join("app/hovercards", class_path, "#{file_name}_hovercard.rb")
|
13
|
+
unless options.skip_views?
|
14
|
+
action_names.each do |action_name|
|
15
|
+
path = [*class_path, file_name].join('/')
|
16
|
+
create_file "app/hovercards/#{path}_hovercard/#{action_name}.html.erb", <<~ERB
|
17
|
+
<p>Hello from #{class_name}Hovercard##{action_name}</p>
|
18
|
+
ERB
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class Coupdoeil::InstallGenerator < Rails::Generators::Base
|
2
|
+
Coupdoeil::InstallGenerator.source_root Coupdoeil::Engine.root.join("lib/generators/coupdoeil/install/templates")
|
3
|
+
|
4
|
+
desc "Create base class for hovercards and default layout."
|
5
|
+
|
6
|
+
def create_base_class
|
7
|
+
create_file "app/hovercards/application_hovercard.rb", <<~RUBY
|
8
|
+
class ApplicationHovercard < Coupdoeil::Hovercard
|
9
|
+
end
|
10
|
+
RUBY
|
11
|
+
end
|
12
|
+
|
13
|
+
def insert_default_layout
|
14
|
+
template "layout.html.erb.tt", "app/hovercards/layouts/hovercard.html.erb"
|
15
|
+
end
|
16
|
+
|
17
|
+
def install_javascripts
|
18
|
+
puts ""
|
19
|
+
if Rails.root.join("config/importmap.rb").exist?
|
20
|
+
append_to_importmap
|
21
|
+
elsif Rails.root.join("package.json").exist?
|
22
|
+
raise "package.json not supported yet!"
|
23
|
+
else
|
24
|
+
puts "You must either be running with node (package.json) or importmap-rails (config/importmap.rb) to use this gem."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def install_stylesheets
|
29
|
+
puts ""
|
30
|
+
import_stylesheet
|
31
|
+
hidden_class_requirement
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def append_to_importmap
|
37
|
+
puts "Using importmap"
|
38
|
+
puts "Pin Coupdoeil"
|
39
|
+
append_to_file "config/importmap.rb", %(pin "coupdoeil", to: "coupdoeil.min.js", preload: true\n)
|
40
|
+
|
41
|
+
puts "Import Coupdoeil"
|
42
|
+
append_to_file "app/javascript/application.js", %(import "coupdoeil"\n)
|
43
|
+
end
|
44
|
+
|
45
|
+
def import_stylesheet
|
46
|
+
puts "To use Coupdoeil hovercard style, add to your layout's head:"
|
47
|
+
puts ""
|
48
|
+
puts <<-ERB
|
49
|
+
<%= stylesheet_link_tag "coupdoeil/hovercard" %>
|
50
|
+
ERB
|
51
|
+
puts ""
|
52
|
+
puts "Or one of two:"
|
53
|
+
puts ""
|
54
|
+
puts <<-ERB
|
55
|
+
<%= stylesheet_link_tag "coupdoeil/hovercard-arrow" %>
|
56
|
+
<%= stylesheet_link_tag "coupdoeil/hovercard-animation" %>
|
57
|
+
ERB
|
58
|
+
end
|
59
|
+
|
60
|
+
def hidden_class_requirement
|
61
|
+
puts ""
|
62
|
+
puts "Also make sure you have a CSS implementation of .hidden class:"
|
63
|
+
puts ""
|
64
|
+
puts <<-CSS
|
65
|
+
.hidden {
|
66
|
+
display: none;
|
67
|
+
}
|
68
|
+
CSS
|
69
|
+
puts ""
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div
|
2
|
+
style="
|
3
|
+
background: white;
|
4
|
+
padding: 1rem;
|
5
|
+
border: 1px solid rgb(209 213 219);
|
6
|
+
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
7
|
+
width: max-content;
|
8
|
+
max-width: 24rem;
|
9
|
+
border-radius: 0.25rem;
|
10
|
+
"
|
11
|
+
>
|
12
|
+
<div data-hovercard-arrow></div>
|
13
|
+
<%%= yield %>
|
14
|
+
</div>
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: coupdoeil
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.pre.alpha.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- PageHey
|
8
|
+
bindir: bin
|
9
|
+
cert_chain: []
|
10
|
+
date: 2025-05-10 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: rails
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: 7.1.0
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 7.1.0
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: jekyll
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
description: Easy and powerful hovercard system for Ruby On Rails.
|
41
|
+
email:
|
42
|
+
- pagehey@pm.me
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- CHANGELOG.md
|
48
|
+
- MIT-LICENSE
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- app/assets/config/coupdoeil_manifest.js
|
52
|
+
- app/assets/javascripts/coupdoeil.js
|
53
|
+
- app/assets/javascripts/coupdoeil.min.js
|
54
|
+
- app/assets/javascripts/coupdoeil.min.js.map
|
55
|
+
- app/assets/stylesheets/coupdoeil/application.css
|
56
|
+
- app/assets/stylesheets/coupdoeil/hovercard-animation.css
|
57
|
+
- app/assets/stylesheets/coupdoeil/hovercard-arrow.css
|
58
|
+
- app/assets/stylesheets/coupdoeil/hovercard.css
|
59
|
+
- app/controllers/coupdoeil/hovercards_controller.rb
|
60
|
+
- app/helpers/coupdoeil/application_helper.rb
|
61
|
+
- app/javascript/coupdoeil/elements/coupdoeil_element.js
|
62
|
+
- app/javascript/coupdoeil/events.js
|
63
|
+
- app/javascript/coupdoeil/events/onclick.js
|
64
|
+
- app/javascript/coupdoeil/events/onmouseover.js
|
65
|
+
- app/javascript/coupdoeil/hovercard.js
|
66
|
+
- app/javascript/coupdoeil/hovercard/actions.js
|
67
|
+
- app/javascript/coupdoeil/hovercard/attributes.js
|
68
|
+
- app/javascript/coupdoeil/hovercard/cache.js
|
69
|
+
- app/javascript/coupdoeil/hovercard/closing.js
|
70
|
+
- app/javascript/coupdoeil/hovercard/config.js
|
71
|
+
- app/javascript/coupdoeil/hovercard/controller.js
|
72
|
+
- app/javascript/coupdoeil/hovercard/opening.js
|
73
|
+
- app/javascript/coupdoeil/hovercard/optionsParser.js
|
74
|
+
- app/javascript/coupdoeil/hovercard/positioning.js
|
75
|
+
- app/javascript/coupdoeil/hovercard/state_check.js
|
76
|
+
- app/javascript/coupdoeil/index.js
|
77
|
+
- app/models/coupdoeil/hovercard.rb
|
78
|
+
- app/models/coupdoeil/hovercard/option.rb
|
79
|
+
- app/models/coupdoeil/hovercard/option/animation.rb
|
80
|
+
- app/models/coupdoeil/hovercard/option/cache.rb
|
81
|
+
- app/models/coupdoeil/hovercard/option/loading.rb
|
82
|
+
- app/models/coupdoeil/hovercard/option/offset.rb
|
83
|
+
- app/models/coupdoeil/hovercard/option/placement.rb
|
84
|
+
- app/models/coupdoeil/hovercard/option/trigger.rb
|
85
|
+
- app/models/coupdoeil/hovercard/options_set.rb
|
86
|
+
- app/models/coupdoeil/hovercard/registry.rb
|
87
|
+
- app/models/coupdoeil/hovercard/setup.rb
|
88
|
+
- app/models/coupdoeil/hovercard/view_context_delegation.rb
|
89
|
+
- app/models/coupdoeil/params.rb
|
90
|
+
- app/models/coupdoeil/tag.rb
|
91
|
+
- app/style/hovercard-animation.scss
|
92
|
+
- app/style/hovercard-arrow.scss
|
93
|
+
- app/style/hovercard.scss
|
94
|
+
- app/views/layouts/coupdoeil/application.html.erb
|
95
|
+
- config/routes.rb
|
96
|
+
- lib/coupdoeil.rb
|
97
|
+
- lib/coupdoeil/engine.rb
|
98
|
+
- lib/coupdoeil/version.rb
|
99
|
+
- lib/generators/coupdoeil/hovercard/USAGE
|
100
|
+
- lib/generators/coupdoeil/hovercard/hovercard_generator.rb
|
101
|
+
- lib/generators/coupdoeil/hovercard/templates/hovercard.rb.tt
|
102
|
+
- lib/generators/coupdoeil/install/install_generator.rb
|
103
|
+
- lib/generators/coupdoeil/install/templates/layout.html.erb.tt
|
104
|
+
- lib/tasks/coupdoeil_tasks.rake
|
105
|
+
homepage: https://coupdoeil.org
|
106
|
+
licenses:
|
107
|
+
- MIT
|
108
|
+
metadata:
|
109
|
+
homepage_uri: https://coupdoeil.org
|
110
|
+
source_code_uri: https://gitlab.com/Pagehey/coupdoeil
|
111
|
+
changelog_uri: https://gitlab.com/Pagehey/coupdoeil/CHANGELOG.md
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubygems_version: 3.6.2
|
127
|
+
specification_version: 4
|
128
|
+
summary: A framework to easily handle hovercards.
|
129
|
+
test_files: []
|