Skip to content

Add iframe component. #233

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/concepts/matestack/ui/core/iframe/iframe.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
%iframe{@tag_attributes}
- if options[:text].nil? && block_given?
= yield
- else
= options[:text]
14 changes: 14 additions & 0 deletions app/concepts/matestack/ui/core/iframe/iframe.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module Matestack::Ui::Core::Iframe
class Iframe < Matestack::Ui::Core::Component::Static

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing a lot of the attributes an iframe tag can have (see reference). See youtube or image component for reference on how to include multiple attributes into the @tag_attributes!

def setup
@tag_attributes.merge!({
src: options[:src],
height: options[:height],
width: options[:width],
srcdoc: options[:srcdoc]
})
end

end
end
58 changes: 58 additions & 0 deletions docs/components/iframe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# matestack core component: Iframe

Show [specs](/spec/usage/components/iframe_spec.rb)

The HTML iframe tag implemented in ruby.

## Parameters

This component can take 3 configuration params and either yield content or display what gets passed to the `text` configuration param.

#### # id (optional)
Expects a string with all ids the `iframe` should have.

#### # class (optional)
Expects a string with all classes the `iframe` should have for styling purpose.

#### # height (optional)
Specifies the height of an `iframe`.

#### # width (optional)
Specifies the width of an `iframe`.

#### # src
Specifies the address of the document to embed in the `iframe` tag.

#### # srcdoc
Specifies the HTML content of the page to show in the inline frame.

## Example 1: Yield a given block

```ruby
iframe id: "foo", class: "bar", src="https://www.demopage.com" do
plain 'The browser does not support iframe.'
end
```

returns

```html
<iframe id="foo" class="bar" src="https://www.demopage.com">
The browser does not support iframe.
</iframe>
```

## Example 2: Render options[:text] param

```ruby
iframe id: "foo", class: "bar", src="https://www.demopage.com", text: 'The browser does not support iframe.'
```

returns

```html
<iframe id="foo" class="bar" src="https://www.demopage.com">
The browser does not support iframe.
</iframe>
```

65 changes: 65 additions & 0 deletions spec/usage/components/iframe_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
require_relative "../../support/utils"
include Utils

describe 'Iframe Component', type: :feature, js: true do

it 'Example 1 - yield, no options[:text]' do

class ExamplePage < Matestack::Ui::Page

def response
components {
# simple iframe tag
iframe src="https://www.demopage.com" do
plain 'The browser does not support iframe.'
end

# enhanced iframe tag
iframe id: 'my-id', class: 'my-class', src="https://www.demopage.com", srcdoc="<p>Mate Stack UI!</p>" do
plain 'The browser does not support iframe.'
end
}
end

end

visit '/example'
static_output = page.html

expected_static_output = <<~HTML
<iframe src="https://www.demopage.com">The browser does not support iframe.</iframe>
<iframe id="my-id" class="my-class" src="https://www.demopage.com" srcdoc="<p>Mate Stack UI!</p>">The browser does not support iframe.</iframe>
HTML
expect(stripped(static_output)).to include(stripped(expected_static_output))
end

it 'Example 2 - render options[:text]' do

class ExamplePage < Matestack::Ui::Page

def response
components {
# simple iframe tag
iframe src="https://www.demopage.com", text: 'The browser does not support iframe.'

# enhanced iframe tag
iframe id: 'my-id', class: 'my-class', src="https://www.demopage.com",
srcdoc="<p>Mate Stack UI!</p>", text: 'The browser does not support iframe.'
}
end

end

visit '/example'

static_output = page.html

expected_static_output = <<~HTML
<iframe src="https://www.demopage.com">The browser does not support iframe.</iframe>
<iframe id="my-id" class="my-class" src="https://www.demopage.com" srcdoc="<p>Mate Stack UI!</p>">The browser does not support iframe.</iframe>
HTML

expect(stripped(static_output)).to include(stripped(expected_static_output))
end

end