onelineplayer 1.0.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.
- package/LICENSE +21 -0
- package/README.md +116 -0
- package/dist/index.d.ts +43 -0
- package/dist/onelineplayer.cjs +125 -0
- package/dist/onelineplayer.cjs.map +1 -0
- package/dist/onelineplayer.css +618 -0
- package/dist/onelineplayer.min.js +125 -0
- package/dist/onelineplayer.min.js.map +1 -0
- package/dist/onelineplayer.mjs +732 -0
- package/dist/onelineplayer.mjs.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onelineplayer.mjs","sources":["../src/template.html?raw","../src/utils.js","../src/adapters/html5.js","../src/adapters/vimeo.js","../src/controls/play-button.js","../src/controls/mute-button.js","../src/controls/fullscreen.js","../src/controls/progress-bar.js","../src/controls/time.js","../src/controls/poster.js","../src/controls/overlay.js","../src/Player.js","../src/inject-css.js","../src/index.js"],"sourcesContent":["export default \"<div class=\\\"oneline-wrap\\\">\\n <video style=\\\"display: none\\\" class=\\\"oneline oneline-video\\\" playsinline></video>\\n <div class=\\\"oneline-embed\\\"></div>\\n <div class=\\\"oneline-error-box\\\"><div class=\\\"oneline-error-message\\\"></div></div>\\n <div class=\\\"oneline-poster\\\" style=\\\"display: none\\\"></div>\\n <div class=\\\"oneline-overlay\\\" style=\\\"display: none\\\"></div>\\n <div class=\\\"oneline-play-pause\\\" style=\\\"display: none\\\">\\n <button aria-label=\\\"Play\\\" type=\\\"button\\\">\\n <svg class=\\\"oneline-play-button\\\" width=\\\"29px\\\" height=\\\"29px\\\" viewBox=\\\"-3 0 26 29\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" opacity=\\\"0.9\\\">\\n <g class=\\\"oneline-icon\\\" transform=\\\"translate(-308.000000, -226.000000)\\\" fill=\\\"#EFEFEF\\\" fill-rule=\\\"nonzero\\\">\\n <g>\\n <path d=\\\"M308,252.742128 L308,228.216201 C308,227.111631 308.895431,226.216201 310,226.216201 C310.395737,226.216201 310.782578,226.333602 311.111565,226.553545 L329.506011,238.85112 C330.42427,239.46502 330.671002,240.707081 330.057101,241.62534 C329.910345,241.844855 329.721572,242.033137 329.501676,242.179321 L311.10723,254.407674 C310.187374,255.01918 308.945961,254.769213 308.334454,253.849358 C308.116351,253.521277 308,253.13609 308,252.742128 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n <svg class=\\\"oneline-pause-button\\\" width=\\\"20px\\\" height=\\\"20px\\\" viewBox=\\\"-1 0 19 20\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" opacity=\\\"0.9\\\">\\n <g class=\\\"oneline-icon\\\" transform=\\\"translate(-1034.000000, -1137.000000)\\\" fill=\\\"#EFEFEF\\\">\\n <g transform=\\\"translate(920.000000, 331.000000)\\\">\\n <g transform=\\\"translate(0.000000, 656.000000)\\\">\\n <g transform=\\\"translate(87.000000, 60.000000)\\\">\\n <path d=\\\"M29,90 L30.3333333,90 C31.4379028,90 32.3333333,90.8954305 32.3333333,92 L32.3333333,108 C32.3333333,109.104569 31.4379028,110 30.3333333,110 L29,110 C27.8954305,110 27,109.104569 27,108 L27,92 C27,90.8954305 27.8954305,90 29,90 Z M40.3333333,90 L41.6666667,90 C42.7712362,90 43.6666667,90.8954305 43.6666667,92 L43.6666667,108 C43.6666667,109.104569 42.7712362,110 41.6666667,110 L40.3333333,110 C39.2287638,110 38.3333333,109.104569 38.3333333,108 L38.3333333,92 C38.3333333,90.8954305 39.2287638,90 40.3333333,90 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </g>\\n </g>\\n </svg>\\n </button>\\n </div>\\n <div class=\\\"oneline-loader-container\\\">\\n <div class=\\\"la-ball-pulse\\\">\\n <div></div>\\n <div></div>\\n <div></div>\\n </div>\\n </div>\\n <div class=\\\"oneline-controls\\\">\\n <div class=\\\"oneline-time\\\" style=\\\"display: none\\\"></div>\\n <div class=\\\"oneline-progress\\\" style=\\\"display: none\\\" tabindex=\\\"0\\\" role=\\\"slider\\\" aria-orientation=\\\"horizontal\\\">\\n <div class=\\\"oneline-progress-fill-bg\\\">\\n <div class=\\\"oneline-progress-fill\\\"></div>\\n </div>\\n <div class=\\\"oneline-progress-seek-fill\\\"></div>\\n <svg\\n class=\\\"ring\\\"\\n width=\\\"120\\\"\\n height=\\\"120\\\">\\n <circle\\n class=\\\"ring-circle ring-bg\\\"\\n stroke=\\\"white\\\"\\n stroke-width=\\\"4\\\"\\n fill=\\\"transparent\\\"\\n r=\\\"52\\\"\\n cx=\\\"60\\\"\\n cy=\\\"60\\\"/>\\n <circle\\n class=\\\"ring-circle ring-fill\\\"\\n stroke=\\\"red\\\"\\n stroke-width=\\\"4\\\"\\n fill=\\\"transparent\\\"\\n r=\\\"52\\\"\\n cx=\\\"60\\\"\\n cy=\\\"60\\\"/>\\n <circle\\n class=\\\"ring-circle ring-seek\\\"\\n stroke=\\\"blue\\\"\\n stroke-width=\\\"4\\\"\\n fill=\\\"transparent\\\"\\n r=\\\"52\\\"\\n cx=\\\"60\\\"\\n cy=\\\"60\\\"/>\\n </svg>\\n </div>\\n <div class=\\\"oneline-control-buttons\\\">\\n <button class=\\\"oneline-mute-button\\\" style=\\\"display: none\\\" type=\\\"button\\\">\\n <svg class=\\\"mute\\\" width=\\\"16px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 20\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <title>Mute</title>\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1392.000000, -1231.000000)\\\" fill=\\\"#FFFFFF\\\" fill-rule=\\\"nonzero\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M602.985222,437 L602.985222,456.123535 L600.787842,456.123535 L592.44458,450.014526 L590,450.014526 L590,442.986084 L592.44458,442.986084 L600.787842,437 L602.985222,437 Z M606,444 L606,449 L604,449 L604,444 L606,444 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n <svg class=\\\"unmute\\\" width=\\\"16px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 20\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <title>Unmute</title>\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1392.000000, -1197.000000)\\\" fill=\\\"#FFFFFF\\\" fill-rule=\\\"nonzero\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M602.985,411.757 L602.985222,422.123535 L600.787842,422.123535 L596.072,418.67 L602.985,411.757 Z M606.424621,403.368272 L607.838835,404.782486 L592.282486,420.338835 L590.868272,418.924621 L606.424621,403.368272 Z M602.985222,403 L602.985,404.687 L591.658,416.014 L590,416.014526 L590,408.986084 L592.44458,408.986084 L600.787842,403 L602.985222,403 Z M606,410 L606,415 L604,415 L604,410.742 L604.743,409.999 L606,410 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n </button>\\n <button class=\\\"oneline-fullscreen-button\\\" style=\\\"display: none\\\" type=\\\"button\\\">\\n <svg width=\\\"19px\\\" class=\\\"fullscreen-icon-on\\\" height=\\\"19px\\\" viewBox=\\\"0 0 19 19\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <title>Fullscreen</title>\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1351.000000, -1231.000000)\\\" fill=\\\"#FFFFFF\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M554.971733,448.344364 C555.432291,447.885212 556.177464,447.885212 556.638022,448.344364 L556.638022,448.344364 L556.654581,448.36091 C557.11514,448.821096 557.11514,449.566701 556.654581,450.025853 L556.654581,450.025853 L554.013357,452.664943 C553.750477,452.928645 553.750477,453.354705 554.013357,453.618407 L554.013357,453.618407 L555.245998,454.850052 C555.671367,455.274043 555.370193,456 554.769915,456 L554.769915,456 L549,456 L549,450.234747 C549,449.634953 549.726544,449.334023 550.150878,449.759049 L550.150878,449.759049 L551.377308,450.983454 C551.640189,451.247156 552.067628,451.247156 552.330509,450.983454 L552.330509,450.983454 Z M568,437 L568,442.764694 C568,443.36443 567.273456,443.665331 566.849122,443.240346 L566.849122,443.240346 L565.622692,442.01606 C565.359811,441.753417 564.932372,441.753417 564.669491,442.01606 L564.669491,442.01606 L562.028267,444.654894 C561.567709,445.115035 560.822536,445.115035 560.361978,444.654894 L560.361978,444.654894 L560.345419,444.638349 C559.88486,444.178208 559.88486,443.433709 560.345419,442.973568 L560.345419,442.973568 L562.986643,440.334734 C563.249523,440.071057 563.249523,439.645038 562.986643,439.381362 L562.986643,439.381362 L561.752967,438.149837 C561.328633,437.725886 561.629807,437 562.230085,437 L562.230085,437 L568,437 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n <svg class=\\\"fullscreen-icon-off\\\" width=\\\"19px\\\" height=\\\"19px\\\" viewBox=\\\"0 0 19 19\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g transform=\\\"translate(-1351.000000, -1197.000000)\\\" fill=\\\"#FFFFFF\\\">\\n <g transform=\\\"translate(802.000000, 794.000000)\\\">\\n <path d=\\\"M557,414 L557,419.764694 C557,420.36443 556.273456,420.665331 555.849122,420.240346 L555.849122,420.240346 L554.622692,419.01606 C554.359811,418.753417 553.932372,418.753417 553.669491,419.01606 L553.669491,419.01606 L551.028267,421.654894 C550.567709,422.115035 549.822536,422.115035 549.361978,421.654894 L549.361978,421.654894 L549.345419,421.638349 C548.88486,421.178208 548.88486,420.433709 549.345419,419.973568 L549.345419,419.973568 L551.986643,417.334734 C552.249523,417.071057 552.249523,416.645038 551.986643,416.381362 L551.986643,416.381362 L550.752967,415.149837 C550.328633,414.725886 550.629807,414 551.230085,414 L551.230085,414 L557,414 Z M565.971733,403.344364 C566.432291,402.885212 567.177464,402.885212 567.638022,403.344364 L567.638022,403.344364 L567.654581,403.36091 C568.11514,403.821096 568.11514,404.566701 567.654581,405.025853 L567.654581,405.025853 L565.013357,407.664943 C564.750477,407.928645 564.750477,408.354705 565.013357,408.618407 L565.013357,408.618407 L566.245998,409.850052 C566.671367,410.274043 566.370193,411 565.769915,411 L565.769915,411 L560,411 L560,405.234747 C560,404.634953 560.726544,404.334023 561.150878,404.759049 L561.150878,404.759049 L562.377308,405.983454 C562.640189,406.247156 563.067628,406.247156 563.330509,405.983454 L563.330509,405.983454 Z\\\"></path>\\n </g>\\n </g>\\n </g>\\n </svg>\\n </button>\\n </div>\\n </div>\\n</div>\\n\"","export function isVimeo(url) {\n return !!(url && url.match(/vimeo\\.com\\/(\\d+)/i));\n}\n\nexport function getVimeoId(url) {\n const matches = url && url.match(/vimeo\\.com\\/(\\d+)/i);\n return matches ? matches[1] : null;\n}\n\nexport function videoIsRestricted(url) {\n const restrictedUrls = [\n 'assets-1.entertainvideo.com/assets/video/30df75d701c29181572c47389a031c60.mp4',\n ];\n for (let i = 0; i < restrictedUrls.length; i++) {\n if (url && url.indexOf(restrictedUrls[i]) !== -1) {\n return true;\n }\n }\n return false;\n}\n\nexport function formatTime(seconds) {\n seconds = Math.floor(seconds);\n let hoursNum = Math.floor(seconds / 3600);\n let minutesNum = Math.floor((seconds - hoursNum * 3600) / 60);\n let secondsNum = seconds - hoursNum * 3600 - minutesNum * 60;\n\n minutesNum = minutesNum < 10 ? '0' + minutesNum : minutesNum;\n secondsNum = secondsNum < 10 ? '0' + secondsNum : secondsNum;\n\n let time = minutesNum + ':' + secondsNum;\n if (hoursNum > 0) {\n time = hoursNum + ':' + time;\n }\n return time;\n}\n\nexport function resolveElement(target) {\n if (!target) {\n throw new Error('onelineplayer.mount: target is required');\n }\n if (typeof target === 'string') {\n const el = document.querySelector(target);\n if (!el) {\n throw new Error('onelineplayer.mount: element not found: ' + target);\n }\n return el;\n }\n if (target.nodeType === 1) {\n return target;\n }\n throw new Error('onelineplayer.mount: target must be a selector or Element');\n}\n\nexport function normalizeOptions(options) {\n const opts = options || {};\n return {\n url: opts.url || '',\n poster: opts.poster || '',\n autoplay: !!opts.autoplay,\n loop: !!opts.loop,\n autopause: !!opts.autopause,\n muted: !!opts.muted,\n clickable: opts.clickable !== false,\n time: !!opts.time,\n progressBar: !!opts.progressBar,\n playButton: opts.playButton !== undefined ? !!opts.playButton : true,\n overlay: opts.overlay !== undefined ? !!opts.overlay : true,\n muteButton: !!opts.muteButton,\n fullscreenButton: !!opts.fullscreenButton,\n style: opts.style || 'light',\n buttonColor: opts.buttonColor || null,\n buttonSize: opts.buttonSize || null,\n overlayColor: opts.overlayColor || null,\n overlayOpacity: opts.overlayOpacity != null ? opts.overlayOpacity : null,\n quality: opts.quality || 'auto',\n };\n}\n","import { videoIsRestricted } from '../utils.js';\n\nexport function createHtml5Adapter(els, options, debug) {\n const player = els.video;\n const container = els.wrap;\n\n player.style.display = 'block';\n player.muted = !!options.muted;\n\n if (options.autoplay) {\n player.setAttribute('autoplay', '');\n }\n if (options.loop) {\n player.setAttribute('loop', '');\n }\n\n if (videoIsRestricted(options.url)) {\n player.src = 'restricted';\n } else {\n player.src = options.url;\n }\n\n player.addEventListener('error', function () {\n const errorMessage = container.querySelector('.oneline-error-message');\n if (player.error === null) {\n return;\n }\n\n let text = 'Video error';\n switch (player.error.code) {\n case 1:\n text = 'Video aborted';\n break;\n case 2:\n text = 'Video expired, reload the page';\n break;\n case 3:\n text = 'Network error';\n break;\n case 4:\n text = 'Video not found or not supported';\n break;\n }\n\n if (errorMessage) {\n errorMessage.innerText = text;\n }\n container.classList.add('oneline-error');\n container.classList.remove('oneline-load');\n });\n\n player.addEventListener(\n 'waiting',\n function () {\n if (debug) console.log('waiting');\n container.classList.add('oneline-load');\n },\n false\n );\n\n player.addEventListener(\n 'canplaythrough',\n function () {\n if (debug) console.log('canplay');\n container.classList.remove('oneline-load');\n },\n false\n );\n\n return {\n type: 'html',\n load: function (nextOptions) {\n player.src = nextOptions.url;\n if (nextOptions.autoplay) {\n player.setAttribute('autoplay', '');\n }\n },\n node: function () {\n return player;\n },\n play: function () {\n return player.play();\n },\n pause: function () {\n player.pause();\n },\n mute: function () {\n player.muted = true;\n },\n unmute: function () {\n player.muted = false;\n },\n getPaused: function (callback) {\n callback(player.paused);\n },\n getWidth: function (callback) {\n callback(player.videoWidth);\n },\n getHeight: function (callback) {\n callback(player.videoHeight);\n },\n getTime: function (callback) {\n callback(player.currentTime);\n },\n setTime: function (seconds) {\n player.currentTime = seconds;\n },\n setLoop: function (value) {\n if (value) {\n player.setAttribute('loop', '');\n } else {\n player.removeAttribute('loop');\n }\n },\n getDuration: function (callback) {\n callback(player.duration);\n },\n getMuted: function (callback) {\n callback(player.muted);\n },\n onLoadstart: function (callback) {\n player.addEventListener('loadstart', callback, false);\n },\n onLoadend: function (callback) {\n player.addEventListener('loadended', callback, false);\n },\n onReady: function (callback) {\n player.addEventListener('loadedmetadata', callback, false);\n },\n onPlay: function (callback) {\n player.addEventListener('play', callback, false);\n },\n onPause: function (callback) {\n player.addEventListener('pause', callback, false);\n },\n onTimeupdate: function (callback) {\n player.addEventListener('timeupdate', callback, false);\n },\n onVolumechange: function (callback) {\n player.addEventListener('volumechange', callback, false);\n },\n onEnded: function (callback) {\n player.addEventListener('ended', callback, false);\n },\n onSeeked: function (callback) {\n player.addEventListener('seeked', callback, false);\n },\n destroy: function () {\n player.removeAttribute('src');\n player.load();\n },\n };\n}\n","import { getVimeoId } from '../utils.js';\n\nconst VIMEO_SDK = 'https://player.vimeo.com/api/player.js';\nlet vimeoSdkPromise = null;\n\nfunction loadVimeoSdk() {\n if (typeof window !== 'undefined' && window.Vimeo && window.Vimeo.Player) {\n return Promise.resolve(window.Vimeo);\n }\n if (vimeoSdkPromise) {\n return vimeoSdkPromise;\n }\n vimeoSdkPromise = new Promise(function (resolve, reject) {\n const existing = document.querySelector('script[data-onelineplayer-vimeo]');\n if (existing) {\n existing.addEventListener('load', function () {\n resolve(window.Vimeo);\n });\n existing.addEventListener('error', reject);\n return;\n }\n const script = document.createElement('script');\n script.src = VIMEO_SDK;\n script.async = true;\n script.dataset.onelineplayerVimeo = '1';\n script.onload = function () {\n resolve(window.Vimeo);\n };\n script.onerror = reject;\n document.head.appendChild(script);\n });\n return vimeoSdkPromise;\n}\n\nfunction getVimeoOptions(options) {\n return {\n url: options.url,\n controls: false,\n muted: options.muted,\n autoplay: options.autoplay,\n loop: options.loop,\n quality: options.quality,\n responsive: true,\n };\n}\n\nexport async function createVimeoAdapter(els, options) {\n els.embed.style.display = 'block';\n const Vimeo = await loadVimeoSdk();\n const player = new Vimeo.Player(els.embed, getVimeoOptions(options));\n\n if (!options.muted) {\n player.setVolume(1);\n }\n\n return {\n type: 'vimeo',\n load: function (nextOptions) {\n player.loadVideo(getVimeoOptions(nextOptions));\n },\n node: function () {\n return player.element;\n },\n play: function () {\n return player.play();\n },\n pause: function () {\n return player.pause();\n },\n mute: function () {\n player.setVolume(0);\n },\n unmute: function () {\n player.setVolume(1);\n },\n getPaused: function (callback) {\n player.getPaused().then(callback);\n },\n getWidth: function (callback) {\n player.getVideoWidth().then(callback);\n },\n getHeight: function (callback) {\n player.getVideoHeight().then(callback);\n },\n getTime: function (callback) {\n player.getCurrentTime().then(callback);\n },\n setTime: function (seconds) {\n player.setCurrentTime(seconds);\n },\n setLoop: function (value) {\n player.setLoop(value);\n },\n getDuration: function (callback) {\n player.getDuration().then(callback);\n },\n getMuted: function (callback) {\n player.getVolume().then(function (volume) {\n callback(volume === 0);\n });\n },\n onLoadstart: function (callback) {\n player.on('bufferstart', callback);\n },\n onLoadend: function (callback) {\n player.on('bufferend', callback);\n },\n onReady: function (callback) {\n player.on('loaded', callback);\n },\n onPlay: function (callback) {\n player.on('play', callback);\n },\n onPause: function (callback) {\n player.on('pause', callback);\n },\n onTimeupdate: function (callback) {\n player.on('timeupdate', callback);\n },\n onVolumechange: function (callback) {\n player.on('volumechange', callback);\n },\n onEnded: function (callback) {\n player.on('ended', callback);\n },\n onSeeked: function (callback) {\n player.on('seeked', callback);\n },\n destroy: function () {\n return player.destroy();\n },\n };\n}\n\nexport { getVimeoId, loadVimeoSdk };\n","export function initPlayButton(ctx) {\n const { video, options, els, components, state } = ctx;\n const component = els.play;\n const container = els.wrap;\n\n if (options && options.buttonSize) {\n component.style.width = options.buttonSize + 'px';\n component.style.marginTop = -(options.buttonSize / 2) + 'px';\n component.style.marginLeft = -(options.buttonSize / 2) + 'px';\n } else {\n component.style.width = null;\n component.style.marginTop = null;\n component.style.marginLeft = null;\n }\n\n const iconsFill = options && options.buttonColor ? options.buttonColor : null;\n const icons = component.querySelectorAll('.oneline-icon');\n for (let i = 0; i < icons.length; i++) {\n icons[i].style.fill = iconsFill;\n }\n\n if (components.playButton) {\n return components.playButton;\n }\n\n const event = state.userCanTouch ? 'touchend' : 'click';\n component.addEventListener(event, function () {\n container.classList.add('oneline-started');\n video.getPaused(function (paused) {\n paused ? video.play() : video.pause();\n });\n }, false);\n\n component.style.display = 'block';\n components.playButton = component;\n return components.playButton;\n}\n","export function initMuteButton(ctx) {\n const { video, els, components, state } = ctx;\n\n if (components.muteButton) {\n return components.muteButton;\n }\n\n const muteButton = els.muteButton;\n\n video.getMuted(function (muted) {\n if (muted) {\n muteButton.classList.add('muted');\n }\n });\n\n const event = state.userCanTouch ? 'touchend' : 'click';\n muteButton.addEventListener(event, function () {\n video.getMuted(function (muted) {\n muted ? video.unmute() : video.mute();\n });\n });\n\n video.onVolumechange(function () {\n video.getMuted(function (muted) {\n muted ? muteButton.classList.add('muted') : muteButton.classList.remove('muted');\n });\n });\n\n muteButton.style.display = 'block';\n components.muteButton = muteButton;\n return components.muteButton;\n}\n","export function initFullscreenButton(ctx) {\n const { video, els, components, cleanup } = ctx;\n const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n const fullscreenButton = els.fullscreenButton;\n\n if (iOS && video.type === 'vimeo') {\n fullscreenButton.style.display = 'none';\n return null;\n }\n\n if (components.fullscreenButton) {\n return components.fullscreenButton;\n }\n\n function onFullscreenChange() {\n const container = els.wrap;\n if (isFullscreenActive()) {\n container.classList.remove('oneline-fullscreen');\n video.node().dispatchEvent(new CustomEvent('fullscreenExit'));\n } else {\n container.classList.add('oneline-fullscreen');\n video.node().dispatchEvent(new CustomEvent('fullscreenEnter'));\n }\n }\n\n function toggleFullScreen() {\n const target = els.root;\n\n if (isFullscreenActive()) {\n if (target.requestFullscreen) {\n target.requestFullscreen();\n } else if (target.msRequestFullscreen) {\n target.msRequestFullscreen();\n } else if (target.mozRequestFullScreen) {\n target.mozRequestFullScreen();\n } else if (target.webkitRequestFullscreen) {\n target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n } else if (iOS && video.type === 'html') {\n video.node().webkitEnterFullscreen();\n }\n } else {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n }\n\n function isFullscreenActive() {\n return (\n !document.fullscreenElement &&\n !document.mozFullScreenElement &&\n !document.webkitFullscreenElement &&\n !document.msFullscreenElement\n );\n }\n\n const onClick = function () {\n toggleFullScreen();\n fullscreenButton.blur();\n };\n\n fullscreenButton.addEventListener('click', onClick);\n document.addEventListener('webkitfullscreenchange', onFullscreenChange);\n document.addEventListener('fullscreenchange', onFullscreenChange);\n document.addEventListener('mozfullscreenchange', onFullscreenChange);\n document.addEventListener('MSFullscreenChange', onFullscreenChange);\n\n cleanup.push(function () {\n fullscreenButton.removeEventListener('click', onClick);\n document.removeEventListener('webkitfullscreenchange', onFullscreenChange);\n document.removeEventListener('fullscreenchange', onFullscreenChange);\n document.removeEventListener('mozfullscreenchange', onFullscreenChange);\n document.removeEventListener('MSFullscreenChange', onFullscreenChange);\n });\n\n fullscreenButton.style.display = 'block';\n components.fullscreenButton = fullscreenButton;\n return components.fullscreenButton;\n}\n","import { isVimeo } from '../utils.js';\n\nexport function initProgressBar(ctx) {\n const { video, options, els, components, cleanup } = ctx;\n\n if (components.progressBar) {\n return components.progressBar;\n }\n\n let seekHolded = false;\n let progressInterval = null;\n const progressBar = els.progress;\n const progressBarFill = els.progressFill;\n const progressBarSeekFill = els.progressSeekFill;\n const container = els.wrap;\n\n video.onPlay(function () {\n startTrackProgress();\n });\n\n video.onPause(function () {\n stopTrackProgress();\n });\n\n video.onEnded(function () {\n progressBarFill.style.width = progressBar.offsetWidth + 'px';\n });\n\n function onMouseDown(e) {\n seek(e);\n seekHolded = true;\n }\n function onMouseUp() {\n seekHolded = false;\n }\n function onMouseMove(e) {\n onMove(e, false);\n }\n function onTouchStart(e) {\n seekHolded = true;\n e.returnValue = false;\n }\n function onTouchMove(e) {\n onMove(e, true);\n }\n function onTouchEnd() {\n seekHolded = false;\n }\n function onKeyDown(e) {\n if (e.keyCode === 39) {\n addTime(5);\n }\n if (e.keyCode === 37) {\n addTime(-5);\n }\n }\n\n progressBar.addEventListener('mousedown', onMouseDown, false);\n progressBar.addEventListener('mouseup', onMouseUp, false);\n progressBar.addEventListener('mousemove', onMouseMove, false);\n progressBar.addEventListener('touchstart', onTouchStart, false);\n progressBar.addEventListener('touchmove', onTouchMove, false);\n progressBar.addEventListener('touchend', onTouchEnd, false);\n document.addEventListener('keydown', onKeyDown, false);\n\n cleanup.push(function () {\n stopTrackProgress();\n progressBar.removeEventListener('mousedown', onMouseDown, false);\n progressBar.removeEventListener('mouseup', onMouseUp, false);\n progressBar.removeEventListener('mousemove', onMouseMove, false);\n progressBar.removeEventListener('touchstart', onTouchStart, false);\n progressBar.removeEventListener('touchmove', onTouchMove, false);\n progressBar.removeEventListener('touchend', onTouchEnd, false);\n document.removeEventListener('keydown', onKeyDown, false);\n });\n\n progressBar.style.display = 'block';\n components.progressBar = progressBar;\n return progressBar;\n\n function addTime(secondsToAdd) {\n video.getTime(function (time) {\n video.setTime(time + secondsToAdd);\n });\n }\n\n function onMove(e, isTouch) {\n if (isTouch) {\n e.returnValue = false;\n }\n const percent = getSeekedPercent(e);\n setSeekProgress(percent);\n if (seekHolded) {\n seek(e);\n }\n }\n\n function seek(e) {\n const percent = getSeekedPercent(e);\n if (!isVimeo(options.url)) {\n container.classList.add('oneline-load');\n }\n video.getDuration(function (videoDuration) {\n video.setTime((percent / 100) * videoDuration);\n updateProgress();\n });\n }\n\n function startTrackProgress() {\n (function progressTrack() {\n updateProgress();\n progressInterval = setTimeout(progressTrack, 50);\n })();\n }\n\n function stopTrackProgress() {\n clearTimeout(progressInterval);\n }\n\n function updateProgress() {\n video.getTime(function (time) {\n video.getDuration(function (videoDuration) {\n setProgress((time * 100) / videoDuration);\n });\n });\n }\n\n function setProgress(percent) {\n progressBarFill.style.width = percent + '%';\n }\n\n function setSeekProgress(percent) {\n progressBarSeekFill.style.width = percent + '%';\n }\n\n function getSeekedPercent(e) {\n const isTouch = e.changedTouches;\n const progressBarLeftOffset = progressBar.getBoundingClientRect().left;\n const offset = isTouch ? e.pageX : e.clientX;\n const position = offset - progressBarLeftOffset;\n const fullWidth = progressBar.offsetWidth;\n\n if (position > 0 && position < fullWidth) {\n return (position * 100) / fullWidth;\n }\n return 0;\n }\n}\n","import { formatTime } from '../utils.js';\n\nexport function initTime(ctx) {\n const { video, els, components } = ctx;\n const slot = els.time;\n\n video.getTime(function (time) {\n slot.innerHTML = formatTime(time);\n });\n slot.style.display = 'block';\n\n if (components.time) {\n return components.time;\n }\n\n setCurrentTime();\n video.onTimeupdate(function () {\n setCurrentTime();\n });\n\n components.time = slot;\n return slot;\n\n function setCurrentTime() {\n video.getTime(function (time) {\n slot.innerHTML = formatTime(time);\n });\n }\n}\n","export function initPoster(ctx) {\n const { video, options, els, components } = ctx;\n const poster = els.poster;\n const url = options.poster;\n\n if (!url || url === 'null') {\n poster.style.display = 'none';\n return null;\n }\n\n poster.style.backgroundColor = '#000';\n poster.style.backgroundImage = 'url(' + url + ')';\n\n if (components.poster) {\n return components.poster;\n }\n\n poster.style.display = 'block';\n\n video.onPlay(function () {\n poster.style.display = 'none';\n });\n\n components.poster = poster;\n return poster;\n}\n","export function initOverlay(ctx) {\n const { video, options, els, components, state } = ctx;\n const overlay = els.overlay;\n const container = els.wrap;\n\n if (options && options.overlayColor) {\n overlay.style.backgroundColor = options.overlayColor;\n } else {\n overlay.style.backgroundColor = null;\n }\n\n if (options && options.overlayOpacity != null) {\n overlay.dataset.opacity = options.overlayOpacity;\n video.getPaused(function (paused) {\n if (paused) {\n overlay.style.opacity = overlay.dataset.opacity;\n }\n });\n } else {\n delete overlay.dataset.opacity;\n overlay.style.opacity = null;\n }\n\n if (components.overlay) {\n return components.overlay;\n }\n\n overlay.classList.add('oneline-clickable');\n\n const event = state.userCanTouch ? 'touchend' : 'click';\n overlay.addEventListener(event, function () {\n container.classList.add('oneline-started');\n video.getPaused(function (paused) {\n paused ? video.play() : video.pause();\n });\n }, false);\n\n video.onPlay(function () {\n if (typeof overlay.dataset.opacity !== 'undefined') {\n overlay.style.opacity = 0;\n }\n });\n\n video.onPause(function () {\n if (typeof overlay.dataset.opacity !== 'undefined') {\n overlay.style.opacity = overlay.dataset.opacity;\n }\n });\n\n overlay.addEventListener('mouseleave', function () {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n });\n\n overlay.addEventListener('mouseenter', function () {\n if (!state.userCanTouch) {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n if (state.hideTimeout) {\n clearTimeout(state.hideTimeout);\n }\n }\n });\n\n overlay.style.display = 'block';\n components.overlay = overlay;\n return components.overlay;\n}\n","import templateHtml from './template.html?raw';\nimport { isVimeo } from './utils.js';\nimport { createHtml5Adapter } from './adapters/html5.js';\nimport { createVimeoAdapter } from './adapters/vimeo.js';\nimport { initPlayButton } from './controls/play-button.js';\nimport { initMuteButton } from './controls/mute-button.js';\nimport { initFullscreenButton } from './controls/fullscreen.js';\nimport { initProgressBar } from './controls/progress-bar.js';\nimport { initTime } from './controls/time.js';\nimport { initPoster } from './controls/poster.js';\nimport { initOverlay } from './controls/overlay.js';\n\nconst instances = new Set();\n\nexport function getInstances() {\n return instances;\n}\n\nfunction collectEls(root) {\n const wrap = root.querySelector('.oneline-wrap');\n return {\n root: root,\n wrap: wrap,\n video: wrap.querySelector('.oneline-video'),\n embed: wrap.querySelector('.oneline-embed'),\n poster: wrap.querySelector('.oneline-poster'),\n overlay: wrap.querySelector('.oneline-overlay'),\n play: wrap.querySelector('.oneline-play-pause'),\n time: wrap.querySelector('.oneline-time'),\n progress: wrap.querySelector('.oneline-progress'),\n progressFill: wrap.querySelector('.oneline-progress-fill'),\n progressSeekFill: wrap.querySelector('.oneline-progress-seek-fill'),\n muteButton: wrap.querySelector('.oneline-mute-button'),\n fullscreenButton: wrap.querySelector('.oneline-fullscreen-button'),\n };\n}\n\nfunction render(root) {\n const tpl = document.createElement('template');\n tpl.innerHTML = templateHtml.trim();\n root.classList.add('oneline-player');\n root.replaceChildren(tpl.content.cloneNode(true));\n return collectEls(root);\n}\n\nexport class Player {\n constructor(root, options) {\n this.root = root;\n this.options = options;\n this.components = {};\n this.cleanup = [];\n this.state = {\n userCanTouch: false,\n hideTimeout: null,\n debug: false,\n };\n this.video = null;\n this.els = null;\n this._ready = false;\n this._destroyed = false;\n }\n\n async init() {\n this.els = render(this.root);\n const els = this.els;\n const options = this.options;\n const state = this.state;\n\n const onTouch = function () {\n state.userCanTouch = true;\n };\n els.root.addEventListener('touchstart', onTouch, true);\n this.cleanup.push(function () {\n els.root.removeEventListener('touchstart', onTouch, true);\n });\n\n if (isVimeo(options.url)) {\n this.video = await createVimeoAdapter(els, options);\n } else {\n this.video = createHtml5Adapter(els, options, state.debug);\n els.wrap.classList.add('oneline-load');\n }\n\n const video = this.video;\n const container = els.wrap;\n\n if (options.style === 'dark') {\n container.classList.add('oneline-dark');\n }\n\n if (options.poster) {\n initPoster({ video, options, els, components: this.components });\n }\n\n if (options.overlay) {\n initOverlay({ video, options, els, components: this.components, state });\n }\n\n if (options.autopause) {\n const self = this;\n video.onPlay(function () {\n instances.forEach(function (other) {\n if (other !== self && !other._destroyed) {\n other.pause();\n }\n });\n });\n }\n\n video.onLoadstart(function () {\n if (state.debug) console.log('loadstart');\n if (!isVimeo(options.url)) {\n container.classList.add('oneline-load');\n }\n container.classList.remove('oneline-error');\n });\n\n video.onLoadend(function () {\n if (state.debug) console.log('loadend');\n container.classList.remove('oneline-load');\n });\n\n video.onPlay(function () {\n if (state.debug) console.log('play');\n container.classList.add('oneline-hide-controls');\n container.classList.add('oneline-playing');\n container.classList.remove('oneline-paused');\n state.hideTimeout = setTimeout(function () {\n container.classList.add('oneline-hide-all');\n }, 3000);\n });\n\n video.onPause(function () {\n if (state.debug) console.log('pause');\n container.classList.add('oneline-paused');\n container.classList.remove('oneline-load');\n container.classList.remove('oneline-playing');\n container.classList.remove('oneline-hide-all');\n clearTimeout(state.hideTimeout);\n });\n\n video.onSeeked(function () {\n container.classList.remove('oneline-load');\n });\n\n const onMouseLeave = function () {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n container.classList.remove('active');\n };\n const onMouseEnter = function () {\n container.classList.remove('oneline-hide-controls');\n container.classList.remove('oneline-hide-all');\n clearTimeout(state.hideTimeout);\n };\n container.addEventListener('mouseleave', onMouseLeave);\n container.addEventListener('mouseenter', onMouseEnter);\n this.cleanup.push(function () {\n container.removeEventListener('mouseleave', onMouseLeave);\n container.removeEventListener('mouseenter', onMouseEnter);\n });\n\n const self = this;\n video.onReady(function () {\n if (self._destroyed) return;\n if (state.debug) console.log('loadedmetadata');\n\n container.classList.add('oneline-ready');\n container.classList.remove('oneline-load');\n if (!options.autoplay) {\n container.classList.add('oneline-paused');\n }\n\n const ctx = {\n video,\n options,\n els,\n components: self.components,\n state,\n cleanup: self.cleanup,\n };\n\n if (options.time) initTime(ctx);\n if (options.progressBar) initProgressBar(ctx);\n if (options.playButton) initPlayButton(ctx);\n if (options.muteButton) initMuteButton(ctx);\n if (options.fullscreenButton) initFullscreenButton(ctx);\n\n self._bindKeyboardFocus(ctx);\n self._ready = true;\n });\n\n instances.add(this);\n return this;\n }\n\n _bindKeyboardFocus(ctx) {\n const { video, els, components, cleanup } = ctx;\n const container = els.wrap;\n const keys = ['playButton', 'progressBar', 'muteButton', 'fullscreenButton'];\n\n function onKeyUp(e) {\n if (e.keyCode === 9) {\n container.classList.add('keyboard-control');\n }\n }\n function onKeyDown(e) {\n const isButton = document.activeElement && document.activeElement.tagName === 'BUTTON';\n if (e.keyCode === 32 && !isButton) {\n video.getPaused(function (paused) {\n paused ? video.play() : video.pause();\n });\n }\n }\n\n document.addEventListener('keyup', onKeyUp);\n document.addEventListener('keydown', onKeyDown);\n cleanup.push(function () {\n document.removeEventListener('keyup', onKeyUp);\n document.removeEventListener('keydown', onKeyDown);\n });\n\n keys.forEach(function (key) {\n const el = components[key];\n if (!el) return;\n el.addEventListener('click', function (e) {\n if (e.clientX || e.clientY) {\n container.classList.remove('keyboard-control');\n }\n });\n el.addEventListener('focus', function () {\n container.classList.add('active');\n });\n el.addEventListener('blur', function () {\n container.classList.remove('active');\n });\n });\n }\n\n play() {\n if (this.video) this.video.play();\n }\n\n pause() {\n if (this.video) this.video.pause();\n }\n\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n clearTimeout(this.state.hideTimeout);\n this.cleanup.forEach(function (fn) {\n try {\n fn();\n } catch (e) {\n /* ignore */\n }\n });\n this.cleanup = [];\n if (this.video && this.video.destroy) {\n this.video.destroy();\n }\n instances.delete(this);\n this.root.classList.remove('oneline-player');\n this.root.replaceChildren();\n }\n}\n","import cssText from './style.css?inline';\n\nlet injected = false;\n\nexport function ensureStyles() {\n if (injected || typeof document === 'undefined') {\n return;\n }\n if (document.querySelector('style[data-onelineplayer]')) {\n injected = true;\n return;\n }\n const style = document.createElement('style');\n style.setAttribute('data-onelineplayer', '1');\n style.textContent = cssText;\n document.head.appendChild(style);\n injected = true;\n}\n","import { Player } from './Player.js';\nimport { resolveElement, normalizeOptions } from './utils.js';\nimport { ensureStyles } from './inject-css.js';\n\n/**\n * Mount onelineplayer into a container.\n * @param {string|Element} target\n * @param {object} options\n * @returns {Promise<Player>}\n */\nexport function mount(target, options) {\n ensureStyles();\n const root = resolveElement(target);\n const opts = normalizeOptions(options);\n const player = new Player(root, opts);\n return player.init();\n}\n\n/**\n * Destroy a player instance previously returned by mount.\n * @param {Player} player\n */\nexport function destroy(player) {\n if (player && typeof player.destroy === 'function') {\n player.destroy();\n }\n}\n\nconst onelineplayer = {\n mount,\n destroy,\n};\n\nexport default onelineplayer;\n"],"names":["templateHtml","isVimeo","url","videoIsRestricted","restrictedUrls","i","formatTime","seconds","hoursNum","minutesNum","secondsNum","time","resolveElement","target","el","normalizeOptions","options","opts","createHtml5Adapter","els","debug","player","container","errorMessage","text","nextOptions","callback","value","VIMEO_SDK","vimeoSdkPromise","loadVimeoSdk","resolve","reject","existing","script","getVimeoOptions","createVimeoAdapter","Vimeo","volume","initPlayButton","ctx","video","components","state","component","iconsFill","icons","event","paused","initMuteButton","muteButton","muted","initFullscreenButton","cleanup","iOS","fullscreenButton","onFullscreenChange","isFullscreenActive","toggleFullScreen","onClick","initProgressBar","seekHolded","progressInterval","progressBar","progressBarFill","progressBarSeekFill","startTrackProgress","stopTrackProgress","onMouseDown","e","seek","onMouseUp","onMouseMove","onMove","onTouchStart","onTouchMove","onTouchEnd","onKeyDown","addTime","secondsToAdd","isTouch","percent","getSeekedPercent","setSeekProgress","videoDuration","updateProgress","progressTrack","setProgress","progressBarLeftOffset","position","fullWidth","initTime","slot","setCurrentTime","initPoster","poster","initOverlay","overlay","instances","collectEls","root","wrap","render","tpl","Player","onTouch","self","other","onMouseLeave","onMouseEnter","keys","onKeyUp","isButton","key","fn","injected","ensureStyles","style","cssText","mount","destroy","onelineplayer"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "onelineplayer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Minimal embeddable video player for Vimeo and direct video URLs — no branding",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/onelineplayer.cjs",
|
|
7
|
+
"module": "./dist/onelineplayer.mjs",
|
|
8
|
+
"browser": "./dist/onelineplayer.min.js",
|
|
9
|
+
"unpkg": "./dist/onelineplayer.min.js",
|
|
10
|
+
"jsdelivr": "./dist/onelineplayer.min.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/onelineplayer.mjs",
|
|
16
|
+
"require": "./dist/onelineplayer.cjs",
|
|
17
|
+
"default": "./dist/onelineplayer.mjs"
|
|
18
|
+
},
|
|
19
|
+
"./style.css": "./dist/onelineplayer.css",
|
|
20
|
+
"./package.json": "./package.json"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"dev": "vite",
|
|
27
|
+
"build": "vite build && node scripts/copy-types.js",
|
|
28
|
+
"prepublishOnly": "npm run build"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/dkiselew/onelineplayer-js.git"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"video",
|
|
36
|
+
"player",
|
|
37
|
+
"vimeo",
|
|
38
|
+
"embed",
|
|
39
|
+
"html5"
|
|
40
|
+
],
|
|
41
|
+
"author": "Dmitry Kiselev",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"homepage": "https://onelineplayer.com",
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/dkiselew/onelineplayer-js/issues"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"vite": "^5.4.11"
|
|
49
|
+
}
|
|
50
|
+
}
|