@hopeplayer/core 1.0.15 → 1.0.17
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/README.md +24 -14
- package/dist/HopePlayerElement.d.ts +37 -0
- package/dist/HopePlayerElement.d.ts.map +1 -1
- package/dist/chunks/adTriggers-4SueRFgK.js +415 -0
- package/dist/chunks/adTriggers-4SueRFgK.js.map +1 -0
- package/dist/chunks/{index-BCMVXNL0.js → ads-DPL7m9PV.js} +135 -158
- package/dist/chunks/ads-DPL7m9PV.js.map +1 -0
- package/dist/chunks/{index-BeJNpAyx.js → audio-LkYgd5Wq.js} +7 -7
- package/dist/chunks/audio-LkYgd5Wq.js.map +1 -0
- package/dist/chunks/{ScratchSound-0XKHUcJK.js → audioScratchSound-7XkwCCDm.js} +1 -1
- package/dist/chunks/audioScratchSound-7XkwCCDm.js.map +1 -0
- package/dist/chunks/cast-DCAT2agI.js +387 -0
- package/dist/chunks/cast-DCAT2agI.js.map +1 -0
- package/dist/chunks/{index-rENB3n9O.js → countdownScreen-CI-u6jjA.js} +1 -1
- package/dist/chunks/countdownScreen-CI-u6jjA.js.map +1 -0
- package/dist/chunks/{index-Q8FMOHj0.js → dai-B9Tth1Iv.js} +1 -1
- package/dist/chunks/dai-B9Tth1Iv.js.map +1 -0
- package/dist/chunks/{index-DCXX1ZJG.js → debugPanel-Bnc_7GOn.js} +1 -1
- package/dist/chunks/debugPanel-Bnc_7GOn.js.map +1 -0
- package/dist/chunks/{index-DXWK4EFa.js → dubbing-kNMPpyHl.js} +1 -1
- package/dist/chunks/dubbing-kNMPpyHl.js.map +1 -0
- package/dist/chunks/{index-BBmuCtKu.js → geoChecker-BRtvHwI-.js} +1 -1
- package/dist/chunks/geoChecker-BRtvHwI-.js.map +1 -0
- package/dist/chunks/{index-Ca8hocby.js → gesture-BzPCgi87.js} +1 -1
- package/dist/chunks/gesture-BzPCgi87.js.map +1 -0
- package/dist/chunks/gpt-CGXHTG_H.js +18 -0
- package/dist/chunks/gpt-CGXHTG_H.js.map +1 -0
- package/dist/chunks/{index-3QALpwsf.js → inViewAutoplay-CRJe7GA4.js} +1 -1
- package/dist/chunks/inViewAutoplay-CRJe7GA4.js.map +1 -0
- package/dist/chunks/{index-7IBf8Y-R.js → liveWallClock-ChUTtzLD.js} +1 -1
- package/dist/chunks/liveWallClock-ChUTtzLD.js.map +1 -0
- package/dist/chunks/{index-f0vSgRIK.js → loopSection-CvF4l5uf.js} +1 -1
- package/dist/chunks/loopSection-CvF4l5uf.js.map +1 -0
- package/dist/chunks/{index-DRlQC-ev.js → markers-DE4O8xbw.js} +2 -2
- package/dist/chunks/markers-DE4O8xbw.js.map +1 -0
- package/dist/chunks/{index-CaMVTgh0.js → pauseAd-BQQe21X4.js} +55 -68
- package/dist/chunks/pauseAd-BQQe21X4.js.map +1 -0
- package/dist/chunks/{index-w7pACyTw.js → player-C886oKP-.js} +726 -391
- package/dist/chunks/player-C886oKP-.js.map +1 -0
- package/dist/chunks/{index-DpUZXNJS.js → playlist-CI3mRZjo.js} +2 -2
- package/dist/chunks/playlist-CI3mRZjo.js.map +1 -0
- package/dist/chunks/{VideoPrebid-CpckFzSq.js → prebid-CRY3i2OT.js} +1 -1
- package/dist/chunks/prebid-CRY3i2OT.js.map +1 -0
- package/dist/chunks/{index-DT8-oMPm.js → qrResume-BNy8XCp_.js} +1 -1
- package/dist/chunks/qrResume-BNy8XCp_.js.map +1 -0
- package/dist/chunks/redirectScreen-CJ3q9OX4.js +208 -0
- package/dist/chunks/redirectScreen-CJ3q9OX4.js.map +1 -0
- package/dist/chunks/rewardedUnlock-EyGMB9PK.js +264 -0
- package/dist/chunks/rewardedUnlock-EyGMB9PK.js.map +1 -0
- package/dist/chunks/{index-BOoNcKeR.js → segments-C2HKU6XK.js} +2 -2
- package/dist/chunks/segments-C2HKU6XK.js.map +1 -0
- package/dist/chunks/{index-D5P-LWbg.js → sponsorship-DyFwGmEb.js} +20 -20
- package/dist/chunks/sponsorship-DyFwGmEb.js.map +1 -0
- package/dist/chunks/{index-BvoB2O1p.js → spriteThumbnails-D0NQ5CCp.js} +2 -2
- package/dist/chunks/spriteThumbnails-D0NQ5CCp.js.map +1 -0
- package/dist/chunks/{index-DGtpFgHV.js → statsPanel-DSClIwA3.js} +1 -1
- package/dist/chunks/statsPanel-DSClIwA3.js.map +1 -0
- package/dist/chunks/{index-CDDke5rz.js → sticky-D_eLCNFk.js} +1 -1
- package/dist/chunks/sticky-D_eLCNFk.js.map +1 -0
- package/dist/chunks/{index-ClQg_X1N.js → story-D5Got6-6.js} +2 -2
- package/dist/chunks/{index-ClQg_X1N.js.map → story-D5Got6-6.js.map} +1 -1
- package/dist/chunks/{index-C5oGMHF_.js → tapGestures-DrC42DiI.js} +1 -1
- package/dist/chunks/tapGestures-DrC42DiI.js.map +1 -0
- package/dist/hls/SourceManager.d.ts +8 -0
- package/dist/hls/SourceManager.d.ts.map +1 -1
- package/dist/hls/sourceGroups.d.ts +19 -0
- package/dist/hls/sourceGroups.d.ts.map +1 -0
- package/dist/hope-player.js +1 -1
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/types.d.ts +12 -0
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/plugins/ad-triggers/AdTriggers.d.ts +99 -0
- package/dist/plugins/ad-triggers/AdTriggers.d.ts.map +1 -0
- package/dist/plugins/ad-triggers/index.d.ts +7 -0
- package/dist/plugins/ad-triggers/index.d.ts.map +1 -0
- package/dist/plugins/ads/AdsController.d.ts +8 -0
- package/dist/plugins/ads/AdsController.d.ts.map +1 -1
- package/dist/plugins/ads/generateVastUrl.d.ts +10 -0
- package/dist/plugins/ads/generateVastUrl.d.ts.map +1 -1
- package/dist/plugins/cast/CastController.d.ts +107 -0
- package/dist/plugins/cast/CastController.d.ts.map +1 -0
- package/dist/plugins/cast/RemoteMediaProxy.d.ts +41 -0
- package/dist/plugins/cast/RemoteMediaProxy.d.ts.map +1 -0
- package/dist/plugins/cast/castSdk.d.ts +160 -0
- package/dist/plugins/cast/castSdk.d.ts.map +1 -0
- package/dist/plugins/cast/index.d.ts +7 -0
- package/dist/plugins/cast/index.d.ts.map +1 -0
- package/dist/plugins/pause-ad/loadGpt.d.ts +2 -0
- package/dist/plugins/pause-ad/loadGpt.d.ts.map +1 -1
- package/dist/plugins/redirect-screen/RedirectScreen.d.ts +26 -3
- package/dist/plugins/redirect-screen/RedirectScreen.d.ts.map +1 -1
- package/dist/plugins/rewarded/RewardedUnlock.d.ts +2 -5
- package/dist/plugins/rewarded/RewardedUnlock.d.ts.map +1 -1
- package/dist/plugins/rewarded/gpt.d.ts +6 -2
- package/dist/plugins/rewarded/gpt.d.ts.map +1 -1
- package/dist/plugins/sponsorship/SponsorshipLayer.d.ts.map +1 -1
- package/dist/types/index.d.ts +308 -3
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +3 -1
- package/dist/chunks/ScratchSound-0XKHUcJK.js.map +0 -1
- package/dist/chunks/VideoPrebid-CpckFzSq.js.map +0 -1
- package/dist/chunks/index-3QALpwsf.js.map +0 -1
- package/dist/chunks/index-7IBf8Y-R.js.map +0 -1
- package/dist/chunks/index-BBmuCtKu.js.map +0 -1
- package/dist/chunks/index-BCMVXNL0.js.map +0 -1
- package/dist/chunks/index-BOoNcKeR.js.map +0 -1
- package/dist/chunks/index-BeJNpAyx.js.map +0 -1
- package/dist/chunks/index-BvoB2O1p.js.map +0 -1
- package/dist/chunks/index-C5oGMHF_.js.map +0 -1
- package/dist/chunks/index-CDDke5rz.js.map +0 -1
- package/dist/chunks/index-Ca8hocby.js.map +0 -1
- package/dist/chunks/index-CaMVTgh0.js.map +0 -1
- package/dist/chunks/index-D5P-LWbg.js.map +0 -1
- package/dist/chunks/index-D6r-BGAV.js +0 -77
- package/dist/chunks/index-D6r-BGAV.js.map +0 -1
- package/dist/chunks/index-DCXX1ZJG.js.map +0 -1
- package/dist/chunks/index-DGtpFgHV.js.map +0 -1
- package/dist/chunks/index-DRlQC-ev.js.map +0 -1
- package/dist/chunks/index-DT8-oMPm.js.map +0 -1
- package/dist/chunks/index-DXWK4EFa.js.map +0 -1
- package/dist/chunks/index-DpUZXNJS.js.map +0 -1
- package/dist/chunks/index-Q8FMOHj0.js.map +0 -1
- package/dist/chunks/index-TkG8IO6q.js +0 -239
- package/dist/chunks/index-TkG8IO6q.js.map +0 -1
- package/dist/chunks/index-f0vSgRIK.js.map +0 -1
- package/dist/chunks/index-rENB3n9O.js.map +0 -1
- package/dist/chunks/index-w7pACyTw.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var A = Object.defineProperty;
|
|
2
2
|
var g = (h, t, e) => t in h ? A(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e;
|
|
3
3
|
var n = (h, t, e) => g(h, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { c as b } from "./
|
|
4
|
+
import { c as b } from "./player-C886oKP-.js";
|
|
5
5
|
const P = {
|
|
6
6
|
startMode: "after_current",
|
|
7
7
|
startIndex: 0,
|
|
@@ -233,4 +233,4 @@ export {
|
|
|
233
233
|
I as PlaylistRunner,
|
|
234
234
|
M as installPlaylist
|
|
235
235
|
};
|
|
236
|
-
//# sourceMappingURL=
|
|
236
|
+
//# sourceMappingURL=playlist-CI3mRZjo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playlist-CI3mRZjo.js","sources":["../../src/plugins/playlist/PlaylistRunner.ts","../../src/plugins/playlist/index.ts"],"sourcesContent":["import { createIcon } from '../../icons/Icon';\nimport type { PlayableItem, PlaylistOptions } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\n\nexport interface PlaylistPlayerContext {\n videoEl: HTMLVideoElement;\n hostEl: HTMLElement;\n /** Liste UI'ının monte edileceği, shadow root içindeki panel. */\n panelEl: HTMLElement;\n loadSource(src: string, type?: string): Promise<void>;\n setPoster(url: string): void;\n /** AdsController varsa retry/VMAP durumunu sıfırlayıp item'ın (varsa) kendi adTagPreroll'üyle yeniden reklam ister — yoksa no-op. */\n requestFreshAd(prerollTag?: string): void;\n i18n: HopeLocaleStrings;\n}\n\ntype SourceMode = 'hls' | 'mp4';\n\ninterface Attempt {\n id: number;\n index: number;\n mode: SourceMode;\n tried: Set<SourceMode>;\n mp4Index: number;\n}\n\nconst DEFAULTS: Required<Omit<PlaylistOptions, 'items' | 'adTagPreroll' | 'ui'>> = {\n startMode: 'after_current',\n startIndex: 0,\n loop: false,\n autoplayNext: true,\n preferHls: true,\n adsOnItemChange: true,\n};\n\n/** Tek player üzerinde sıralı oynatma listesi (startMode, loop, hata fallback zinciri). */\nexport class PlaylistRunner {\n private readonly options: Required<Omit<PlaylistOptions, 'items' | 'adTagPreroll' | 'ui'>>;\n private readonly items: PlayableItem[];\n\n private index: number;\n private destroyed = false;\n private switching = false;\n private playlistActive = false;\n private startPendingAfterCurrent = false;\n private attemptId = 0;\n private attempt: Attempt | null = null;\n private lastErrorAt = 0;\n private lastAdsIndex: number | null = null;\n private lastDispatchedIndex: number | null = null;\n private userHasStartedPlayback = false;\n\n private readonly ui: {\n root: HTMLElement;\n titleEl: HTMLElement;\n listEl: HTMLElement;\n prevBtn: HTMLButtonElement;\n nextBtn: HTMLButtonElement;\n itemEls: Array<{ li: HTMLElement; titleRow: HTMLElement; progressFill: HTMLElement | null; timeEl: HTMLElement | null }>;\n };\n\n constructor(\n private readonly ctx: PlaylistPlayerContext,\n private readonly rawOptions: PlaylistOptions\n ) {\n this.options = { ...DEFAULTS, ...rawOptions };\n this.items = Array.isArray(rawOptions.items) ? rawOptions.items : [];\n this.index = this.clampIndex(this.options.startIndex);\n\n this.ui = this.buildUi();\n this.bindPlayerEvents();\n this.init();\n }\n\n // ── lifecycle ──\n\n private init(): void {\n if (!this.items.length) return;\n\n if (this.options.startMode === 'after_current') {\n this.startPendingAfterCurrent = true;\n this.playlistActive = false;\n this.setActive(this.index);\n return;\n }\n\n this.playlistActive = true;\n void this.loadAndPlay(this.index, { userInitiated: false, isPlaylistStart: true });\n }\n\n refreshLabels(): void {\n this.ui.titleEl.textContent = this.playlistTitleText();\n this.ui.prevBtn.setAttribute('aria-label', this.ctx.i18n.playlistPrev);\n this.ui.nextBtn.setAttribute('aria-label', this.ctx.i18n.playlistNext);\n this.ui.itemEls.forEach((entry, idx) => {\n const item = this.items[idx];\n if (item && !item.title) entry.titleRow.textContent = this.ctx.i18n.videoFallbackTitle(idx);\n });\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.ctx.videoEl.removeEventListener('ended', this.onEnded);\n this.ctx.videoEl.removeEventListener('error', this.onError);\n this.ctx.videoEl.removeEventListener('play', this.onUserPlay);\n this.ui.root.remove();\n }\n\n // ── public api ──\n\n start(opts: { index?: number } = {}): void {\n if (this.destroyed || !this.items.length) return;\n this.startPendingAfterCurrent = false;\n this.playlistActive = true;\n this.index = this.clampIndex(opts.index ?? this.index);\n this.setActive(this.index);\n void this.loadAndPlay(this.index, { userInitiated: false, isPlaylistStart: true });\n }\n\n next(): void {\n if (this.destroyed || !this.items.length) return;\n if (!this.playlistActive) return this.start({ index: this.index });\n\n if (this.index < this.items.length - 1) this.index++;\n else if (this.options.loop) this.index = 0;\n else return;\n\n this.setActive(this.index);\n void this.loadAndPlay(this.index, { userInitiated: true });\n }\n\n prev(): void {\n if (this.destroyed || !this.items.length) return;\n if (!this.playlistActive) return this.start({ index: this.index });\n if (this.index === 0) return;\n this.index--;\n this.setActive(this.index);\n void this.loadAndPlay(this.index, { userInitiated: true });\n }\n\n setIndex(i: number): void {\n if (this.destroyed || !this.items.length) return;\n this.index = this.clampIndex(i);\n this.setActive(this.index);\n if (!this.playlistActive) return this.start({ index: this.index });\n void this.loadAndPlay(this.index, { userInitiated: true });\n }\n\n getIndex(): number {\n return this.index;\n }\n\n isActive(): boolean {\n return this.playlistActive;\n }\n\n // ── player events ──\n\n private bindPlayerEvents(): void {\n this.ctx.videoEl.addEventListener('ended', this.onEnded);\n this.ctx.videoEl.addEventListener('error', this.onError);\n this.ctx.videoEl.addEventListener('play', this.onUserPlay);\n this.ctx.videoEl.addEventListener('timeupdate', this.onTimeUpdate);\n }\n\n private readonly onUserPlay = (): void => {\n this.userHasStartedPlayback = true;\n };\n\n private readonly onEnded = (): void => {\n if (this.startPendingAfterCurrent && !this.playlistActive) {\n this.startPendingAfterCurrent = false;\n this.playlistActive = true;\n this.setActive(this.index);\n void this.loadAndPlay(this.index, { userInitiated: true, isPlaylistStart: true });\n return;\n }\n if (this.playlistActive) this.next();\n };\n\n private readonly onError = (): void => {\n if (this.destroyed || !this.playlistActive) return;\n const now = Date.now();\n if (now - this.lastErrorAt < 200) return;\n this.lastErrorAt = now;\n void this.fallbackOrSkip();\n };\n\n private readonly onTimeUpdate = (): void => {\n this.updateProgress();\n };\n\n // ── core load ──\n\n private async loadAndPlay(\n i: number,\n opts: { userInitiated?: boolean; forceMode?: SourceMode | null; forceMp4Index?: number | null; isFallback?: boolean; isPlaylistStart?: boolean } = {}\n ): Promise<void> {\n if (this.destroyed || this.switching || !this.playlistActive) return;\n this.switching = true;\n\n const item = this.items[i];\n if (!item) {\n this.switching = false;\n return;\n }\n const attemptId = ++this.attemptId;\n const mode = opts.forceMode ?? this.resolveMode(item);\n\n let tried = new Set<SourceMode>([mode]);\n let mp4Index = opts.forceMp4Index ?? 0;\n if (opts.isFallback && this.attempt?.index === i && this.attempt?.tried) {\n tried = new Set(this.attempt.tried);\n tried.add(mode);\n if (opts.forceMp4Index == null) mp4Index = this.attempt.mp4Index ?? 0;\n }\n this.attempt = { id: attemptId, index: i, mode, tried, mp4Index };\n\n try {\n const payload = this.buildPayload(item, mode, mp4Index);\n if (!payload) throw new Error('No playable source');\n\n this.setActive(i);\n this.ctx.videoEl.pause();\n if (item.image) this.ctx.setPoster(item.image);\n await this.ctx.loadSource(payload.src, payload.type);\n\n if (this.options.adsOnItemChange) this.maybeRequestAds(i, item, !!opts.isFallback);\n\n if (this.shouldAutoPlay(!!opts.userInitiated)) {\n try {\n await this.ctx.videoEl.play();\n } catch {\n /* autoplay engellendi — sessizce geç */\n }\n }\n this.updateProgress();\n } finally {\n this.switching = false;\n }\n }\n\n private async fallbackOrSkip(): Promise<void> {\n if (this.destroyed || !this.attempt) return;\n const item = this.items[this.attempt.index];\n if (!item) return;\n\n if (this.attempt.mode === 'mp4') {\n const mp4List = (item.mp4 || []).filter((v) => v?.src);\n const nextMp4 = (this.attempt.mp4Index ?? 0) + 1;\n if (nextMp4 < mp4List.length) {\n await this.loadAndPlay(this.attempt.index, { forceMode: 'mp4', forceMp4Index: nextMp4, isFallback: true });\n return;\n }\n }\n\n const otherMode: SourceMode = this.attempt.mode === 'hls' ? 'mp4' : 'hls';\n if (this.hasMode(item, otherMode) && !this.attempt.tried.has(otherMode)) {\n await this.loadAndPlay(this.attempt.index, { forceMode: otherMode, isFallback: true });\n return;\n }\n\n this.next();\n }\n\n // ── ads ──\n\n private maybeRequestAds(index: number, item: PlayableItem, _isFallback: boolean): void {\n if (this.lastAdsIndex === index) return;\n this.lastAdsIndex = index;\n this.ctx.requestFreshAd(item.adTagPreroll || this.rawOptions.adTagPreroll);\n }\n\n // ── sources ──\n\n private resolveMode(item: PlayableItem): SourceMode {\n if (this.options.preferHls) return this.hasMode(item, 'hls') ? 'hls' : this.hasMode(item, 'mp4') ? 'mp4' : 'hls';\n return this.hasMode(item, 'mp4') ? 'mp4' : this.hasMode(item, 'hls') ? 'hls' : 'mp4';\n }\n\n private hasMode(item: PlayableItem, mode: SourceMode): boolean {\n return Array.isArray(item[mode]) && item[mode]!.some((v) => v?.src);\n }\n\n private buildPayload(item: PlayableItem, mode: SourceMode, mp4Index = 0): { src: string; type?: string } | null {\n const list = (item[mode] || []).filter((v) => v?.src);\n if (!list.length) return null;\n\n let src;\n if (mode === 'mp4') {\n src = mp4Index > 0 ? list[mp4Index] || list[0] : list.find((v) => v.selected) || list[0];\n } else {\n src = list[0];\n }\n return { src: src!.src, type: src!.type || (mode === 'hls' ? 'application/x-mpegURL' : 'video/mp4') };\n }\n\n private shouldAutoPlay(userInitiated: boolean): boolean {\n if (userInitiated) return true;\n return this.options.autoplayNext && this.userHasStartedPlayback;\n }\n\n private clampIndex(i: number): number {\n if (!Number.isFinite(i) || !this.items.length) return 0;\n return Math.max(0, Math.min(this.items.length - 1, Math.trunc(i)));\n }\n\n // ── ui ──\n\n private buildUi() {\n const ui = this.rawOptions.ui ?? {};\n const root = document.createElement('div');\n root.setAttribute('part', 'playlist-panel');\n root.className = 'hp:flex hp:flex-col hp:gap-2 hp:p-3 hp:bg-surface-elev hp:max-h-80 hp:overflow-y-auto';\n\n const header = document.createElement('div');\n header.className = 'hp:flex hp:items-center hp:justify-between hp:gap-2 hp:mb-1';\n\n const titleEl = document.createElement('div');\n titleEl.className = 'hp:text-sm hp:font-semibold hp:text-on-surface';\n titleEl.textContent = this.playlistTitleText();\n header.appendChild(titleEl);\n\n const navWrap = document.createElement('div');\n navWrap.className = 'hp:flex hp:gap-1';\n const prevBtn = this.navButton('chevron-left', this.ctx.i18n.playlistPrev, () => this.prev());\n const nextBtn = this.navButton('chevron-left', this.ctx.i18n.playlistNext, () => this.next());\n nextBtn.style.transform = 'rotate(180deg)';\n navWrap.append(prevBtn, nextBtn);\n header.appendChild(navWrap);\n\n root.appendChild(header);\n\n const listEl = document.createElement('ul');\n listEl.className = 'hp:flex hp:flex-col hp:gap-1 hp:list-none hp:m-0 hp:p-0';\n root.appendChild(listEl);\n\n const itemEls: Array<{ li: HTMLElement; titleRow: HTMLElement; progressFill: HTMLElement | null; timeEl: HTMLElement | null }> = [];\n this.items.forEach((item, idx) => {\n const li = document.createElement('li');\n li.className =\n 'hp:flex hp:items-center hp:gap-2 hp:p-2 hp:rounded hp:cursor-pointer hp:text-on-surface-muted hp:text-sm ' +\n 'hp:hover:bg-on-surface/5 hp:data-[active=true]:bg-accent/15 hp:data-[active=true]:text-on-surface';\n\n if (item.image) {\n const img = document.createElement('img');\n img.src = item.image;\n img.loading = 'lazy';\n img.className = 'hp:w-16 hp:aspect-video hp:object-cover hp:rounded hp:shrink-0';\n li.appendChild(img);\n }\n\n const body = document.createElement('div');\n body.className = 'hp:flex-1 hp:min-w-0';\n const titleRow = document.createElement('div');\n titleRow.className = 'hp:truncate hp:font-medium';\n titleRow.textContent = item.title || this.ctx.i18n.videoFallbackTitle(idx);\n body.appendChild(titleRow);\n\n let progressFill: HTMLElement | null = null;\n let timeEl: HTMLElement | null = null;\n if (ui.showMeta !== false) {\n const metaRow = document.createElement('div');\n metaRow.className = 'hp:flex hp:items-center hp:gap-2 hp:text-xs hp:opacity-70 hp:mt-0.5';\n timeEl = document.createElement('span');\n timeEl.textContent = '';\n metaRow.appendChild(timeEl);\n\n const bar = document.createElement('div');\n bar.className = 'hp:flex-1 hp:h-0.5 hp:bg-on-surface/20 hp:rounded-full hp:overflow-hidden';\n progressFill = document.createElement('div');\n progressFill.className = 'hp:h-full hp:bg-accent';\n progressFill.style.width = '0%';\n bar.appendChild(progressFill);\n metaRow.appendChild(bar);\n body.appendChild(metaRow);\n }\n\n li.appendChild(body);\n li.addEventListener('click', () => this.setIndex(idx));\n listEl.appendChild(li);\n itemEls.push({ li, titleRow, progressFill, timeEl });\n });\n\n this.ctx.panelEl.appendChild(root);\n return { root, titleEl, listEl, prevBtn, nextBtn, itemEls };\n }\n\n private playlistTitleText(): string {\n const ui = this.rawOptions.ui ?? {};\n const title = ui.title || this.ctx.i18n.playlistTitle;\n return ui.showCount === false ? title : `${title} (${this.items.length})`;\n }\n\n private navButton(iconName: string, label: string, onClick: () => void): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.setAttribute('aria-label', label);\n btn.className = 'hp:flex hp:items-center hp:justify-center hp:w-6 hp:h-6 hp:text-on-surface hp:bg-transparent hp:border-0 hp:cursor-pointer';\n btn.appendChild(createIcon(iconName, 'hp:text-sm'));\n btn.addEventListener('click', onClick);\n return btn;\n }\n\n private setActive(index: number): void {\n this.ui.itemEls.forEach((entry, idx) => {\n if (idx === index) entry.li.setAttribute('data-active', 'true');\n else entry.li.removeAttribute('data-active');\n });\n // loadAndPlay() hem anlık UI geri bildirimi için önceden (next/prev/setIndex\n // içinden) hem de kaynak gerçekten yüklendiğinde setActive() çağırıyor —\n // aynı index için event'i yalnızca BİR kez yaymak için guard.\n if (this.lastDispatchedIndex !== index) {\n this.lastDispatchedIndex = index;\n this.ctx.hostEl.dispatchEvent(new CustomEvent('hp:itemchange', { detail: { index, source: 'playlist' } }));\n }\n }\n\n private updateProgress(): void {\n const active = this.ui.itemEls[this.index];\n if (!active) return;\n const duration = this.ctx.videoEl.duration;\n const current = this.ctx.videoEl.currentTime;\n if (active.timeEl) active.timeEl.textContent = this.formatTime(current);\n if (active.progressFill && Number.isFinite(duration) && duration > 0) {\n active.progressFill.style.width = `${Math.min(100, (current / duration) * 100)}%`;\n }\n }\n\n private formatTime(sec: number): string {\n const s = Math.max(0, Math.floor(sec || 0));\n const m = Math.floor(s / 60);\n const r = s % 60;\n return `${m}:${String(r).padStart(2, '0')}`;\n }\n}\n","import { PlaylistRunner, type PlaylistPlayerContext } from './PlaylistRunner';\nimport type { PlaylistOptions } from '../../types';\n\nexport function installPlaylist(ctx: PlaylistPlayerContext, options: PlaylistOptions): PlaylistRunner {\n return new PlaylistRunner(ctx, options);\n}\n\nexport { PlaylistRunner };\nexport type { PlaylistPlayerContext };\n"],"names":["DEFAULTS","PlaylistRunner","ctx","rawOptions","__publicField","now","entry","idx","item","opts","i","attemptId","mode","tried","mp4Index","_a","_b","payload","mp4List","v","nextMp4","otherMode","index","_isFallback","list","src","userInitiated","ui","root","header","titleEl","navWrap","prevBtn","nextBtn","listEl","itemEls","li","img","body","titleRow","progressFill","timeEl","metaRow","bar","title","iconName","label","onClick","btn","createIcon","active","duration","current","sec","s","m","r","installPlaylist","options"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prebid-CRY3i2OT.js","sources":["../../src/plugins/prebid/VideoPrebid.ts"],"sourcesContent":["import type { PrebidBidderConfig, PrebidBreakOptions, PrebidOptions } from '../../types';\n\n/** window.pbjs yüzeyi — Prebid.js sayfaya <script> ile yüklenir, npm bağımlılığı değil. */\ninterface PbjsBid {\n bidder: string;\n cpm?: number;\n vastUrl?: string;\n vastXml?: string;\n videoCacheKey?: string;\n responseTimestamp?: number;\n ttl?: number;\n}\n\ninterface Pbjs {\n que: Array<() => void>;\n requestBids(params: { adUnits: unknown[]; timeout: number; bidsBackHandler: () => void }): void;\n addAdUnits(units: unknown[]): void;\n removeAdUnit(code: string): void;\n setConfig(config: Record<string, unknown>): void;\n getConfig?(key: string): { url?: string } | undefined;\n installedModules?: string[];\n aliasRegistry?: Record<string, string>;\n getHighestCpmBids?(adUnitCode: string): PbjsBid[];\n getBidResponsesForAdUnitCode?(adUnitCode: string): { bids: PbjsBid[] };\n adServers?: {\n gam?: { buildVideoUrl(args: { adUnit: unknown; params: Record<string, string> }): string | null };\n dfp?: { buildVideoUrl(args: { adUnit: unknown; params: Record<string, string> }): string | null };\n };\n __hopeConsentApplied?: boolean;\n}\n\ndeclare global {\n interface Window {\n pbjs?: Pbjs;\n }\n}\n\n/** Prebid.js instream video header bidding (GAM ve direkt-VAST modları). */\nexport class VideoPrebid {\n private readonly timeout: number;\n private readonly adUnitCode: string;\n private readonly sizes: Array<[number, number]>;\n private readonly bidders: PrebidBidderConfig[];\n private readonly gamAdUnit: string | null;\n private readonly gpid: string | null;\n private readonly playbackMethod: number;\n private readonly skip: 0 | 1;\n private readonly skipafter: number;\n private readonly maxduration: number;\n private readonly minduration: number;\n private readonly api: number[];\n private readonly protocols: number[];\n private readonly mimes: string[];\n private readonly applyLossFactor: boolean;\n private readonly lossFactors: Record<string, number>;\n private readonly consentManagement: PrebidOptions['consentManagement'];\n\n private cacheWarned = false;\n private gamWarned = false;\n private cacheKeyWarned = false;\n\n constructor(opts: PrebidBreakOptions & { consentManagement?: PrebidOptions['consentManagement'] } = {}) {\n this.timeout = opts.timeout ?? 1500;\n this.adUnitCode = opts.adUnitCode || 'hope-video-preroll';\n this.sizes = opts.sizes || [[640, 360]];\n this.bidders = opts.bidders || [];\n this.gamAdUnit = opts.gamAdUnit ?? null;\n this.gpid = opts.gpid ?? this.gamAdUnit ?? null;\n this.playbackMethod = opts.playbackMethod ?? 2;\n this.skip = opts.skip ?? 0;\n this.skipafter = opts.skipafter ?? 5;\n this.maxduration = opts.maxduration ?? 30;\n this.minduration = opts.minduration ?? 1;\n this.api = opts.api || [2, 7];\n this.protocols = opts.protocols || [2, 3, 5, 6, 7, 8];\n this.mimes = opts.mimes || (this.api.includes(2)\n ? ['video/mp4', 'video/webm', 'application/javascript']\n : ['video/mp4', 'video/webm']);\n this.applyLossFactor = opts.applyLossFactor ?? false;\n this.lossFactors = opts.lossFactors || {};\n this.consentManagement = opts.consentManagement ?? null;\n }\n\n private applyConsentConfig(): void {\n const pbjs = window.pbjs;\n if (!this.consentManagement || !pbjs || pbjs.__hopeConsentApplied) return;\n try {\n pbjs.setConfig({ consentManagement: this.consentManagement });\n pbjs.__hopeConsentApplied = true;\n } catch (err) {\n console.warn('[VideoPrebid] consentManagement setConfig hatası:', err);\n }\n }\n\n isAvailable(): boolean {\n const pbjs = window.pbjs;\n if (!pbjs || typeof pbjs.requestBids !== 'function') return false;\n\n if (!this.cacheWarned) {\n const cacheUrl = pbjs.getConfig?.('cache')?.url;\n if (!cacheUrl) {\n console.warn(`[VideoPrebid] pbjs.setConfig({cache:{url}}) tanımlı değil. ${this.gamAdUnit ? 'GAM isteğinde hb_uuid boş kalacak, creative reklam döndüremeyecek.' : 'vastUrl boş dönecek, fallback tag kullanılacak.'}`);\n }\n this.cacheWarned = true;\n }\n\n const installed = pbjs.installedModules || [];\n if (!installed.length) return true;\n\n const aliasRegistry = pbjs.aliasRegistry || {};\n return this.bidders.some((b) => {\n if (installed.includes(`${b.bidder}BidAdapter`)) return true;\n const canonical = aliasRegistry[b.bidder];\n return canonical ? installed.includes(`${canonical}BidAdapter`) : false;\n });\n }\n\n runAuction(fallbackVastUrl: string): Promise<string> {\n return new Promise((resolve) => {\n if (!this.isAvailable()) {\n resolve(fallbackVastUrl);\n return;\n }\n const pbjs = window.pbjs!;\n\n const adUnit = this.buildAdUnit();\n const cleanup = () => {\n try {\n pbjs.removeAdUnit(adUnit.code);\n } catch {\n /* no-op */\n }\n };\n\n let settled = false;\n const done = (url: string) => {\n if (settled) return;\n settled = true;\n cleanup();\n resolve(url);\n };\n\n pbjs.que = pbjs.que || [];\n pbjs.que.push(() => {\n this.applyConsentConfig();\n pbjs.removeAdUnit(adUnit.code);\n pbjs.addAdUnits([adUnit]);\n\n // Prebid'in kendi timeoutBuffer default'u 400ms, +300 bidsBackHandler'dan\n // önce ateşleyebiliyordu — +500ms tampon bu yüzden.\n const failsafe = setTimeout(() => done(fallbackVastUrl), this.timeout + 500);\n\n pbjs.requestBids({\n adUnits: [adUnit],\n timeout: this.timeout,\n bidsBackHandler: () => {\n clearTimeout(failsafe);\n done(this.resolveVastUrl(adUnit, fallbackVastUrl));\n },\n });\n });\n });\n }\n\n private buildAdUnit(): { code: string; ortb2Imp: unknown; mediaTypes: unknown; bids: PrebidBidderConfig[] } {\n const bids: PrebidBidderConfig[] = typeof structuredClone === 'function'\n ? structuredClone(this.bidders)\n : (JSON.parse(JSON.stringify(this.bidders)) as PrebidBidderConfig[]);\n\n const stableId = this.gpid || this.adUnitCode;\n\n return {\n code: this.adUnitCode,\n ortb2Imp: {\n ext: {\n gpid: stableId,\n data: { pbadslot: stableId },\n },\n },\n mediaTypes: {\n video: {\n context: 'instream',\n playerSize: this.sizes,\n mimes: this.mimes,\n protocols: this.protocols,\n api: this.api,\n minduration: this.minduration,\n maxduration: this.maxduration,\n startdelay: 0,\n playbackmethod: [this.playbackMethod],\n linearity: 1,\n plcmt: 1,\n placement: 1,\n skip: this.skip,\n ...(this.skip ? { skipafter: this.skipafter } : {}),\n pos: 1,\n },\n },\n bids,\n };\n }\n\n private getGamAdServer(): {\n buildVideoUrl(args: { adUnit: unknown; params: Record<string, string | Record<string, string>> }): string | null;\n } | null {\n const adServers = window.pbjs?.adServers;\n const gam = adServers?.gam || adServers?.dfp;\n return typeof gam?.buildVideoUrl === 'function' ? gam : null;\n }\n\n /** Fallback tag'in cust_params'ını objeye çevirir — buildVideoUrl URL'i sıfırdan kurduğu için ayrıca geçilmeli. */\n private extractCustParams(url: string): Record<string, string> {\n const result: Record<string, string> = {};\n try {\n const raw = new URL(url).searchParams.get('cust_params');\n if (!raw) return result;\n for (const pair of raw.split('&')) {\n const idx = pair.indexOf('=');\n if (idx <= 0) continue;\n const key = pair.slice(0, idx);\n if (key.startsWith('hb_')) continue;\n result[key] = pair.slice(idx + 1);\n }\n } catch (err) {\n console.warn('[VideoPrebid] fallback cust_params okunamadı:', err);\n }\n return result;\n }\n\n private pickWinningBid(adUnitCode: string): PbjsBid | undefined {\n const pbjs = window.pbjs!;\n if (!this.applyLossFactor) {\n return (pbjs.getHighestCpmBids?.(adUnitCode) || [])[0];\n }\n\n const responses = pbjs.getBidResponsesForAdUnitCode?.(adUnitCode)?.bids || [];\n if (!responses.length) return undefined;\n\n const now = Date.now();\n const valid = responses.filter((b) => !b.responseTimestamp || !b.ttl || b.responseTimestamp + b.ttl * 1000 > now);\n if (!valid.length) return undefined;\n\n let best: PbjsBid | undefined;\n let bestWeighted = -Infinity;\n for (const bid of valid) {\n const factor = this.lossFactors[bid.bidder] ?? 1;\n const weighted = (bid.cpm || 0) * factor;\n if (weighted > bestWeighted) {\n bestWeighted = weighted;\n best = bid;\n }\n }\n return best;\n }\n\n private resolveVastUrl(adUnit: { code: string }, fallback: string): string {\n const gam = this.gamAdUnit ? this.getGamAdServer() : null;\n\n if (this.gamAdUnit && !gam && !this.gamWarned) {\n console.warn('[VideoPrebid] pbjs.adServers.gam.buildVideoUrl bulunamadı — Prebid build\\'inde \"Google Ad Manager Video\" (dfpAdServerVideo) modülü yok. GAM atlanıyor, kazanan bid\\'in vastUrl\\'i kullanılacak.');\n this.gamWarned = true;\n }\n\n const winner = this.pickWinningBid(adUnit.code);\n\n if (gam && !winner) {\n console.warn(`[VideoPrebid] Auction'dan kazanan bid çıkmadı — GAM isteği hb_pb/hb_bidder olmadan gidiyor, cust_params'ta hb_uuid=undefined görünecek. pbjs.getBidResponsesForAdUnitCode('${adUnit.code}') ve pbjs.getEvents() ile no-bid/timeout sebebine bakın.`);\n }\n\n if (gam && winner && !winner.videoCacheKey && !this.cacheKeyWarned) {\n console.warn(`[VideoPrebid] Kazanan bid'de videoCacheKey yok — GAM isteğine hb_uuid=undefined gidecek. VAST cache'e yazılmamış: pbjs.setConfig({cache:{url}}) auction'dan önce çalışıyor mu ve cache POST'u başarılı mı kontrol edin. (bidder: ${winner.bidder})`);\n this.cacheKeyWarned = true;\n }\n\n if (gam) {\n try {\n const url = gam.buildVideoUrl({\n adUnit,\n params: {\n iu: this.gamAdUnit!,\n output: 'vast',\n description_url: window.location.href,\n url: window.location.href,\n cust_params: this.extractCustParams(fallback),\n },\n });\n if (url) return url;\n } catch (err) {\n console.warn('[VideoPrebid] buildVideoUrl failed:', err);\n }\n }\n\n if (winner) {\n if (winner.vastUrl) return winner.vastUrl;\n if (winner.vastXml) {\n console.warn('[VideoPrebid] Kazanan bid vastXml içeriyor ancak Prebid cache yapılandırılmamış. pbjs.setConfig({cache:{url}}) ekleyin. Fallback\\'e düşülüyor.');\n }\n }\n\n return fallback;\n }\n}\n\nexport default VideoPrebid;\n"],"names":["VideoPrebid","opts","__publicField","pbjs","err","_a","_b","installed","aliasRegistry","b","canonical","fallbackVastUrl","resolve","adUnit","cleanup","settled","done","url","failsafe","bids","stableId","adServers","gam","result","raw","pair","idx","key","adUnitCode","_c","responses","now","valid","best","bestWeighted","bid","factor","weighted","fallback","winner"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qrResume-BNy8XCp_.js","sources":["../../../../node_modules/qrcode-generator/dist/qrcode.mjs","../../src/plugins/qr-resume/qrSvg.ts","../../src/plugins/qr-resume/QrResume.ts","../../src/plugins/qr-resume/index.ts"],"sourcesContent":["//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n//---------------------------------------------------------------------\n// qrcode\n//---------------------------------------------------------------------\n\n/**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\nexport const qrcode = function(typeNumber, errorCorrectionLevel) {\n\n const PAD0 = 0xEC;\n const PAD1 = 0x11;\n\n let _typeNumber = typeNumber;\n const _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n let _modules = null;\n let _moduleCount = 0;\n let _dataCache = null;\n const _dataList = [];\n\n const _this = {};\n\n const makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n const modules = new Array(moduleCount);\n for (let row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (let col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n const setupPositionProbePattern = function(row, col) {\n\n for (let r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (let c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n const getBestMaskPattern = function() {\n\n let minLostPoint = 0;\n let pattern = 0;\n\n for (let i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n const lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n const setupTimingPattern = function() {\n\n for (let r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (let c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n const setupPositionAdjustPattern = function() {\n\n const pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (let i = 0; i < pos.length; i += 1) {\n\n for (let j = 0; j < pos.length; j += 1) {\n\n const row = pos[i];\n const col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (let r = -2; r <= 2; r += 1) {\n\n for (let c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n const setupTypeNumber = function(test) {\n\n const bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n const setupTypeInfo = function(test, maskPattern) {\n\n const data = (_errorCorrectionLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n const mapData = function(data, maskPattern) {\n\n let inc = -1;\n let row = _moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (let col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (let c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n let dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n const mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n const createBytes = function(buffer, rsBlocks) {\n\n let offset = 0;\n\n let maxDcCount = 0;\n let maxEcCount = 0;\n\n const dcdata = new Array(rsBlocks.length);\n const ecdata = new Array(rsBlocks.length);\n\n for (let r = 0; r < rsBlocks.length; r += 1) {\n\n const dcCount = rsBlocks[r].dataCount;\n const ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n let totalCodeCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n const data = new Array(totalCodeCount);\n let index = 0;\n\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n const createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < dataList.length; i += 1) {\n const data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n let newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n let typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < _dataList.length; i++) {\n const data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n let qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (let r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (let c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n let opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n let c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n const c = Math.floor( (x - min) / cellSize);\n const r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n\n let img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n const escapeXml = function(s) {\n let escaped = '';\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n const _createHalfASCII = function(margin) {\n const cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r1, r2, p;\n\n const blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n const blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n let ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r, p;\n\n const white = Array(cellSize+1).join('██');\n const black = Array(cellSize+1).join(' ');\n\n let ascii = '';\n let line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n const length = _this.getModuleCount();\n for (let row = 0; row < length; row++) {\n for (let col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrcode.stringToBytes\n//---------------------------------------------------------------------\n\nqrcode.stringToBytes = function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n};\n\n//---------------------------------------------------------------------\n// qrcode.createStringToBytes\n//---------------------------------------------------------------------\n\n/**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\nqrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n const unicodeMap = function() {\n\n const bin = base64DecodeInputStream(unicodeData);\n const read = function() {\n const b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n let count = 0;\n const unicodeMap = {};\n while (true) {\n const b0 = bin.read();\n if (b0 == -1) break;\n const b1 = read();\n const b2 = read();\n const b3 = read();\n const k = String.fromCharCode( (b0 << 8) | b1);\n const v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n const unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n const b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n};\n\n//---------------------------------------------------------------------\n// QRMode\n//---------------------------------------------------------------------\n\nconst QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n};\n\n//---------------------------------------------------------------------\n// QRErrorCorrectionLevel\n//---------------------------------------------------------------------\n\nconst QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n};\n\n//---------------------------------------------------------------------\n// QRMaskPattern\n//---------------------------------------------------------------------\n\nconst QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n};\n\n//---------------------------------------------------------------------\n// QRUtil\n//---------------------------------------------------------------------\n\nconst QRUtil = function() {\n\n const PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n const _this = {};\n\n const getBCHDigit = function(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n let d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n let d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n let a = qrPolynomial([1], 0);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n const moduleCount = qrcode.getModuleCount();\n\n let lostPoint = 0;\n\n // LEVEL1\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n\n let sameCount = 0;\n const dark = qrcode.isDark(row, col);\n\n for (let r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (let c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n let darkCount = 0;\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// QRMath\n//---------------------------------------------------------------------\n\nconst QRMath = function() {\n\n const EXP_TABLE = new Array(256);\n const LOG_TABLE = new Array(256);\n\n // initialize tables\n for (let i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (let i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (let i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n const _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrPolynomial\n//---------------------------------------------------------------------\n\nconst qrPolynomial = function(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n const _num = function() {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n const _num = new Array(num.length - offset + shift);\n for (let i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n const _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n const num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (let i = 0; i < _this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n const ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n const num = new Array(_this.getLength() );\n for (let i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// QRRSBlock\n//---------------------------------------------------------------------\n\nconst QRRSBlock = function() {\n\n const RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n const qrRSBlock = function(totalCount, dataCount) {\n const _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n const _this = {};\n\n const getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n const rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n const length = rsBlock.length / 3;\n\n const list = [];\n\n for (let i = 0; i < length; i += 1) {\n\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n\n for (let j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrBitBuffer\n//---------------------------------------------------------------------\n\nconst qrBitBuffer = function() {\n\n const _buffer = [];\n let _length = 0;\n\n const _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n const bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (let i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n const bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrNumber\n//---------------------------------------------------------------------\n\nconst qrNumber = function(data) {\n\n const _mode = QRMode.MODE_NUMBER;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const data = _data;\n\n let i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n const strToNum = function(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n const chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrAlphaNum\n//---------------------------------------------------------------------\n\nconst qrAlphaNum = function(data) {\n\n const _mode = QRMode.MODE_ALPHA_NUM;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const s = _data;\n\n let i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n const getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case '\\u0020' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qr8BitByte\n//---------------------------------------------------------------------\n\nconst qr8BitByte = function(data) {\n\n const _mode = QRMode.MODE_8BIT_BYTE;\n const _data = data;\n const _bytes = qrcode.stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (let i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrKanji\n//---------------------------------------------------------------------\n\nconst qrKanji = function(data) {\n\n const _mode = QRMode.MODE_KANJI;\n const _data = data;\n\n const stringToBytes = qrcode.stringToBytes;\n !function(c, code) {\n // self test for sjis support.\n const test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n const _bytes = stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n const data = _bytes;\n\n let i = 0;\n\n while (i + 1 < data.length) {\n\n let c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n};\n\n//=====================================================================\n// GIF Support etc.\n//\n\n//---------------------------------------------------------------------\n// byteArrayOutputStream\n//---------------------------------------------------------------------\n\nconst byteArrayOutputStream = function() {\n\n const _bytes = [];\n\n const _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (let i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (let i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n let s = '';\n s += '[';\n for (let i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64EncodeOutputStream\n//---------------------------------------------------------------------\n\nconst base64EncodeOutputStream = function() {\n\n let _buffer = 0;\n let _buflen = 0;\n let _length = 0;\n let _base64 = '';\n\n const _this = {};\n\n const writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n const encode = function(n) {\n if (n < 0) {\n throw 'n:' + n;\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n } else {\n throw 'n:' + n;\n }\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n const padlen = 3 - _length % 3;\n for (let i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64DecodeInputStream\n//---------------------------------------------------------------------\n\nconst base64DecodeInputStream = function(str) {\n\n const _str = str;\n let _pos = 0;\n let _buffer = 0;\n let _buflen = 0;\n\n const _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n const c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n const n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n const decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// gifImage (B/W)\n//---------------------------------------------------------------------\n\nconst gifImage = function(width, height) {\n\n const _width = width;\n const _height = height;\n const _data = new Array(width * height);\n\n const _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n const lzwMinCodeSize = 2;\n const raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n let offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n const bitOutputStream = function(out) {\n\n const _out = out;\n let _bitLength = 0;\n let _bitBuffer = 0;\n\n const _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n const getLZWRaster = function(lzwMinCodeSize) {\n\n const clearCode = 1 << lzwMinCodeSize;\n const endCode = (1 << lzwMinCodeSize) + 1;\n let bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n const table = lzwTable();\n\n for (let i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n const byteOut = byteArrayOutputStream();\n const bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n let dataIndex = 0;\n\n let s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n const c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n const lzwTable = function() {\n\n const _map = {};\n let _size = 0;\n\n const _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n};\n\nconst createDataURL = function(width, height, getPixel) {\n const gif = gifImage(width, height);\n for (let y = 0; y < height; y += 1) {\n for (let x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n const b = byteArrayOutputStream();\n gif.write(b);\n\n const base64 = base64EncodeOutputStream();\n const bytes = b.toByteArray();\n for (let i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n};\n\nexport default qrcode;\n\nexport const stringToBytes = qrcode.stringToBytes;\n","import QRCodeGenerator from 'qrcode-generator';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst XLINK_NS = 'http://www.w3.org/1999/xlink';\n\nexport interface QrSvgOptions {\n size: number;\n logoUrl?: string;\n /** 0-0.3 arası — `H` (en yüksek, ~%30 toleranslı) hata düzeltme seviyesiyle bile daha büyük değerler taranabilirliği bozabilir. */\n logoScale: number;\n}\n\n/** data'yı QR SVG'sine çizer (DOM API ile). */\nexport function buildQrSvg(data: string, opts: QrSvgOptions): SVGSVGElement {\n const qr = QRCodeGenerator(0, opts.logoUrl ? 'H' : 'M');\n qr.addData(data);\n qr.make();\n\n const count = qr.getModuleCount();\n const cell = opts.size / count;\n\n const svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('viewBox', `0 0 ${opts.size} ${opts.size}`);\n svg.setAttribute('width', String(opts.size));\n svg.setAttribute('height', String(opts.size));\n\n const bg = document.createElementNS(SVG_NS, 'rect');\n bg.setAttribute('width', '100%');\n bg.setAttribute('height', '100%');\n bg.setAttribute('fill', '#fff');\n svg.appendChild(bg);\n\n const modules = document.createElementNS(SVG_NS, 'g');\n modules.setAttribute('fill', '#000');\n for (let row = 0; row < count; row++) {\n for (let col = 0; col < count; col++) {\n if (!qr.isDark(row, col)) continue;\n const rect = document.createElementNS(SVG_NS, 'rect');\n rect.setAttribute('x', String(col * cell));\n rect.setAttribute('y', String(row * cell));\n rect.setAttribute('width', String(cell));\n rect.setAttribute('height', String(cell));\n modules.appendChild(rect);\n }\n }\n svg.appendChild(modules);\n\n if (opts.logoUrl) {\n const logoSize = opts.size * opts.logoScale;\n const pad = logoSize * 0.18;\n const backSize = logoSize + pad * 2;\n const backXY = (opts.size - backSize) / 2;\n const logoXY = (opts.size - logoSize) / 2;\n\n const back = document.createElementNS(SVG_NS, 'rect');\n back.setAttribute('x', String(backXY));\n back.setAttribute('y', String(backXY));\n back.setAttribute('width', String(backSize));\n back.setAttribute('height', String(backSize));\n back.setAttribute('rx', String(backSize * 0.22));\n back.setAttribute('fill', '#fff');\n svg.appendChild(back);\n\n const img = document.createElementNS(SVG_NS, 'image');\n img.setAttribute('href', opts.logoUrl);\n // Eski Safari sürümleri `href`i değil yalnızca `xlink:href`i anlıyor.\n img.setAttributeNS(XLINK_NS, 'xlink:href', opts.logoUrl);\n img.setAttribute('x', String(logoXY));\n img.setAttribute('y', String(logoXY));\n img.setAttribute('width', String(logoSize));\n img.setAttribute('height', String(logoSize));\n img.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.appendChild(img);\n }\n\n return svg;\n}\n","import type { QrResumeOptions } from '../../types';\nimport type { HopeLocaleStrings } from '../../i18n/types';\nimport { buildQrSvg } from './qrSvg';\n\nexport interface QrResumePlayerContext {\n videoEl: HTMLVideoElement;\n overlayContainerEl: HTMLElement;\n i18n: HopeLocaleStrings;\n}\n\nconst STORAGE_KEY = 'hope-qr-resume-dismissed';\n\n/** Yeterince izlenmiş bir noktada duraklatılınca \"telefonundan devam et\" QR kodu. */\nexport class QrResume {\n private wrapper: HTMLElement | null = null;\n private seeking = false;\n private seekTimeout: ReturnType<typeof setTimeout> | null = null;\n private pauseTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly paramName: string;\n\n constructor(\n private readonly ctx: QrResumePlayerContext,\n private readonly options: QrResumeOptions\n ) {\n this.paramName = options.paramName ?? 'vtime';\n\n this.applyResumeFromUrl();\n\n ctx.videoEl.addEventListener('play', this.onPlay);\n ctx.videoEl.addEventListener('ended', this.onPlay);\n ctx.videoEl.addEventListener('seeking', this.onSeeking);\n ctx.videoEl.addEventListener('seeked', this.onSeeked);\n ctx.videoEl.addEventListener('pause', this.onPause);\n }\n\n /** Dışarıdan (ör. entegratörün kendi \"telefonuna gönder\" butonu, ya da docs demo'sundaki test butonu) manuel olarak göstermek için — \"kaldığın yerden devam et\" otomatik tetiklenme kuralları (minElapsed/minRemaining) BURADA uygulanmaz, çağıran taraf bilinçli olarak gösteriyor demektir. */\n show(): void {\n this.create();\n }\n\n hide(): void {\n this.remove();\n }\n\n /** Ayarlar menüsündeki aç/kapa satırı — \"Bir daha gösterme\" sonrası tekrar açılabilsin. */\n isEnabled(): boolean {\n return !this.isDismissedForever();\n }\n\n setEnabled(enabled: boolean): void {\n this.setDismissedForever(!enabled);\n }\n\n /** Ekran her gösterimde sıfırdan oluşturuluyor ve güncel `ctx.i18n`'i okuyor — RedirectScreen'deki AYNI desen. */\n refreshLabels(): void {\n /* no-op */\n }\n\n destroy(): void {\n this.ctx.videoEl.removeEventListener('play', this.onPlay);\n this.ctx.videoEl.removeEventListener('ended', this.onPlay);\n this.ctx.videoEl.removeEventListener('seeking', this.onSeeking);\n this.ctx.videoEl.removeEventListener('seeked', this.onSeeked);\n this.ctx.videoEl.removeEventListener('pause', this.onPause);\n if (this.seekTimeout) clearTimeout(this.seekTimeout);\n if (this.pauseTimeout) clearTimeout(this.pauseTimeout);\n this.remove();\n }\n\n private isDismissedForever(): boolean {\n if (this.options.rememberDismiss === false) return false;\n try {\n return window.localStorage.getItem(STORAGE_KEY) === '1';\n } catch {\n return false;\n }\n }\n\n private setDismissedForever(value: boolean): void {\n try {\n window.localStorage.setItem(STORAGE_KEY, value ? '1' : '0');\n } catch {\n /* gizli mod vb. — sessizce yoksay */\n }\n }\n\n private buildResumeUrl(time: number): string {\n const url = new URL(window.location.href);\n url.searchParams.set(this.paramName, String(Math.floor(time)));\n return url.toString();\n }\n\n private applyResumeFromUrl(): void {\n const url = new URL(window.location.href);\n const raw = url.searchParams.get(this.paramName);\n if (raw === null || !/^\\d+$/.test(raw)) return;\n\n const seconds = Number(raw);\n const seekOnceReady = () => {\n this.ctx.videoEl.currentTime = seconds;\n };\n if (this.ctx.videoEl.readyState >= 1) seekOnceReady();\n else this.ctx.videoEl.addEventListener('loadedmetadata', seekOnceReady, { once: true });\n\n url.searchParams.delete(this.paramName);\n window.history.replaceState(window.history.state, '', url.toString());\n }\n\n private readonly onPlay = (): void => this.remove();\n\n private readonly onSeeking = (): void => {\n this.seeking = true;\n if (this.seekTimeout) clearTimeout(this.seekTimeout);\n this.seekTimeout = setTimeout(() => {\n this.seeking = false;\n }, 150);\n };\n\n private readonly onSeeked = (): void => {\n if (this.seekTimeout) clearTimeout(this.seekTimeout);\n this.seeking = false;\n };\n\n private readonly onPause = (): void => {\n if (this.isDismissedForever()) return;\n const { currentTime, duration } = this.ctx.videoEl;\n const minElapsed = this.options.minElapsed ?? 60;\n const minRemaining = this.options.minRemaining ?? 60;\n if (!(duration - currentTime > minRemaining && currentTime > minElapsed)) return;\n\n // Eski koddaki AYNI kısa gecikme — 'seeking' sırasında da anlık bir\n // 'pause' tetiklenebiliyor (scrub), bu ekranın yanlışlıkla\n // belirmesini önlüyor.\n if (this.pauseTimeout) clearTimeout(this.pauseTimeout);\n this.pauseTimeout = setTimeout(() => {\n if (!this.seeking && this.ctx.videoEl.paused) this.create();\n }, 150);\n };\n\n private remove(): void {\n this.wrapper?.remove();\n this.wrapper = null;\n }\n\n private create(): void {\n this.remove();\n const size = this.options.size ?? 220;\n const url = this.buildResumeUrl(this.ctx.videoEl.currentTime);\n\n const wrapper = document.createElement('div');\n wrapper.setAttribute('part', 'qr-resume-screen');\n wrapper.className =\n 'hp:absolute hp:inset-0 hp:z-30 hp:flex hp:flex-col hp:items-center hp:justify-center hp:gap-3 hp:bg-black/85 hp:text-white hp:text-center hp:p-4';\n\n const codeWrap = document.createElement('div');\n codeWrap.className = 'hp:rounded-lg hp:overflow-hidden hp:shadow-lg hp:leading-none';\n codeWrap.appendChild(buildQrSvg(url, { size, logoUrl: this.options.logo, logoScale: this.options.logoScale ?? 0.22 }));\n wrapper.appendChild(codeWrap);\n\n const text = document.createElement('div');\n text.className = 'hp:text-sm hp:opacity-90 hp:max-w-xs';\n text.textContent = this.ctx.i18n.qrResumeTitle;\n wrapper.appendChild(text);\n\n const buttons = document.createElement('div');\n buttons.className = 'hp:flex hp:gap-2 hp:mt-1';\n\n const dismissBtn = document.createElement('button');\n dismissBtn.type = 'button';\n dismissBtn.textContent = this.ctx.i18n.qrResumeDontShowAgain;\n dismissBtn.className = 'hp:px-4 hp:py-1.5 hp:rounded hp:bg-white/15 hp:text-white hp:border-0 hp:cursor-pointer hp:text-sm';\n dismissBtn.addEventListener('click', () => {\n this.setDismissedForever(true);\n this.remove();\n });\n\n const continueBtn = document.createElement('button');\n continueBtn.type = 'button';\n continueBtn.textContent = this.ctx.i18n.qrResumeContinue;\n continueBtn.className = 'hp:px-4 hp:py-1.5 hp:rounded hp:bg-accent hp:text-on-accent hp:border-0 hp:cursor-pointer hp:text-sm';\n continueBtn.addEventListener('click', () => {\n this.remove();\n if (this.ctx.videoEl.paused) void this.ctx.videoEl.play();\n });\n\n buttons.append(dismissBtn, continueBtn);\n wrapper.appendChild(buttons);\n\n this.ctx.overlayContainerEl.appendChild(wrapper);\n this.wrapper = wrapper;\n }\n}\n","import { QrResume, type QrResumePlayerContext } from './QrResume';\nimport type { QrResumeOptions } from '../../types';\n\nexport function installQrResume(ctx: QrResumePlayerContext, options: QrResumeOptions): QrResume {\n return new QrResume(ctx, options);\n}\n\nexport { QrResume };\nexport type { QrResumePlayerContext };\n"],"names":["qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","getBestMaskPattern","minLostPoint","pattern","i","lostPoint","QRUtil","pos","j","bits","mod","data","inc","bitIndex","byteIndex","maskFunc","dark","createBytes","buffer","rsBlocks","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","modPoly","qrPolynomial","modIndex","totalCodeCount","index","dataList","QRRSBlock","qrBitBuffer","totalDataCount","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","cellSize","margin","qrHtml","alt","title","opts","size","mc","mr","qrSvg","rect","escapeXml","min","max","createDataURL","x","y","img","s","escaped","_createHalfASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","white","black","line","context","length","bytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","b2","b3","k","v","unknownChar","QRMode","QRMaskPattern","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","d","errorCorrectLength","a","QRMath","type","sameCount","darkCount","ratio","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","RS_BLOCK_TABLE","qrRSBlock","totalCount","dataCount","getRsBlockTable","rsBlock","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","stringToBytes","code","byteArrayOutputStream","off","len","base64EncodeOutputStream","_buflen","_base64","writeEncoded","encode","padlen","str","_str","_pos","decode","gifImage","width","height","_width","_height","pixel","out","lzwMinCodeSize","raster","getLZWRaster","bitOutputStream","_out","_bitLength","_bitBuffer","clearCode","endCode","bitLength","table","lzwTable","byteOut","bitOut","dataIndex","_map","_size","key","getPixel","gif","base64","SVG_NS","XLINK_NS","buildQrSvg","qr","QRCodeGenerator","cell","svg","bg","logoSize","pad","backSize","backXY","logoXY","back","STORAGE_KEY","QrResume","ctx","options","__publicField","currentTime","duration","minElapsed","minRemaining","enabled","value","time","url","raw","seconds","seekOnceReady","_a","wrapper","codeWrap","text","buttons","dismissBtn","continueBtn","installQrResume"],"mappings":"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","x_google_ignoreList":[0]}
|