forked from GoogleChrome/developer.chrome.com
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIFrame.js
More file actions
51 lines (45 loc) · 1.43 KB
/
IFrame.js
File metadata and controls
51 lines (45 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const {html} = require('common-tags');
/**
* Generates HTML for an IFrame as a string.
*
* @param {IFrameArgs} args Named arguments
* @return {string}
*/
const IFrame = args => {
/** @type IFrameArgs */
const iframeArgs = {
style: 'height: 100%; width: 100%; border: 0;',
title: 'IFrame content',
...args,
loading: 'lazy',
};
if (!iframeArgs.src) {
throw new Error('No `src` provided to IFrame shortcode.');
}
const attributes = Object.keys(iframeArgs).reduce((combined, key) => {
const value = iframeArgs[key];
if (value === true) {
combined += ` ${key}`;
} else if (value !== false && value !== null && value !== undefined) {
combined += ` ${key}="${value}"`;
}
return combined;
}, '');
return html`<iframe${attributes}></iframe>`.replace(/\s\s+/g, ' ');
};
module.exports = {IFrame};