- + {$arrNovel.n_name} - {$arrChapter.c_name}
-
@@ -260,7 +266,7 @@
- {$arrGrm[6]|raw} - + 详情 @@ -395,17 +401,17 @@ }; book.chapter = { //页面进入加载的章节id - id: '{$arrPreChapter.c_sort_num ?? 1}', + id: '{$arrChapter.pre_chapter.c_sort_num ?? 1}', //章节源id - source_id: '{$arrPreChapter.c_sort_num ?? 1}', + source_id: '{$arrChapter.pre_chapter.c_sort_num ?? 1}', //章节vip标识 vipStatus: 0, //上一章id - prevId: '{$arrPreChapter.c_sort_num ?? 1}', + prevId: '{$arrChapter.pre_chapter.c_sort_num ?? 1}', //下一章id - nextId: '{$arrNextChapter.c_sort_num ?? 1}' + nextId: '{$arrChapter.next_chapter.c_sort_num ?? 1}' }; - book.chapterUrl = '{$strPcPath}{site:cpurl n_id="$arrNovel[n_id]" n_py="$arrNovel[n_name_pinyin]" c_sort="$arrChapter[c_sort_num]" c_page="0"/}' ; + book.chapterUrl = '{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrChapter.c_sort_num" c_page="0"/}' ; book.nextChapterVip = 0; diff --git a/code/app/home/view/kuangYu/pc/getNovelInfo.html b/code/app/home/view/kuangYu/pc/getNovelInfo.html index a5922b4..4574c8c 100644 --- a/code/app/home/view/kuangYu/pc/getNovelInfo.html +++ b/code/app/home/view/kuangYu/pc/getNovelInfo.html @@ -1,13 +1,26 @@ {extend name="basePc" /} -{block name="title"}{$strTitle??''}{/block} -{block name="keywords"}{$strKeywords??''}{/block} -{block name="description"}{$strDescription??''}{/block} + +{block name="get-data"} +{if $Request.route.intNovelId} +{novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /} +{else} +{novel:info n_id="$DomainModel->info_id" n_key="arrNovel" n_forge_id="0" /} +{/if} +{site:grm page_code="h5_novel_info" diff="$arrNovel.n_id" num="120" g_key="arrGrm" /} +{/block} + +{block name="title"}{site:replace code="NOVEL@GETNOVELINFO@TITLE" diff="$Request.route.intNovelId" /}{/block} +{block name="keywords"}{site:replace code="NOVEL@GETNOVELINFO@KEYWORDS" diff="$Request.route.intNovelId"}{/block} +{block name="description"}{site:replace code="NOVEL@GETNOVELINFO@DESCRIPTION" diff="$Request.route.intNovelId"}{/block} + + {block name="head"} + - + + content='https://{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}' /> @@ -15,16 +28,16 @@ + content='https://{$DomainModel->d_domain}{$strPcPath}{site:cpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" c_sort="$arrNovel.intFirstChapterSort"/}'> - + + content='https://{$DomainModel->d_domain}{$strPcPath}{site:lcpurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'> - + {/block} + {block name="head-css"} + href='{$DomainModel->d_domain}{site:nurl n_id="$arrNovel.n_id" n_py="$arrNovel.n_name_pinyin" /}'> {/block} + {block name="logo-html"}
-
{$arrGrm[$key+10]|raw} - {$Novel['n_name'] ?? ''}
- {/volist}
+ {/novel:list}
- « {else}
- « {/if} {/case} {case value="下一页"} - {if $intPage >= $intTotalPage} + {if $resData.p_data.page >= $resData.p_data.total}
- » {else}
- » @@ -91,7 +104,7 @@ {/case} {default /} {if preg_match('/^\d+$/', $vo.label)} -
- +
- {$vo.label} {/if} diff --git a/code/app/home/view/kuangYu/pc/public/allChapterPage.html b/code/app/home/view/kuangYu/pc/public/allChapterPage.html index 148d487..7cb2e8c 100644 --- a/code/app/home/view/kuangYu/pc/public/allChapterPage.html +++ b/code/app/home/view/kuangYu/pc/public/allChapterPage.html @@ -1,6 +1,6 @@ -{if !empty($arrPaginator)} +{if !empty($resData.p_data.pager)}
- + + {$ForgeNovel.n_forge_title} + + + {/site:forgelist}
-
-
@@ -84,14 +89,14 @@ {$Novel.n_name ?? ''} - + {$Novel->n_author ?? ''} {$Novel.n_description ?? ''}
- {/volist}
+ {/novel:list}
- + + + +
-
+ {$arrGrm[$d_key]|raw}
+
+
+ +
+ -
+
{$Novel.n_name}
+作者:{$Novel.n_author}
+{$Novel.n_description}
+
+ -
+
+ {$arrGrm[$d_key+8+10*$start]|raw}
+
+
+ -
+
{$Novel.n_name}
+作者:{$Novel.n_author}
+{$Novel.n_description}
+
+ {/novel:list}
+ - + {$arrGrm[$d_key+8+10*$start]|raw} + {$Novel.n_name}{$Novel.n_author} + + {/novel:list} + +
- + [{$Novel.n_category}] + + {$arrGrm[$key]|raw} + + {$Novel.n_name} + + + {$Novel.n_author} + {:date('m-d')} + + {/foreach} +
-
+ {$arrGrm[$d_key+30]|raw}
+
+
+
+
+ -
+
+ + {$Novel.n_name} + +
+作者:{$Novel.n_author}
+{$Novel.n_description}
+
+ - 上一页 - {else} + {elseif $arrChapter['pre_chapter'] && $arrChapter['pre_chapter']['c_sort_num']}
- 上一页 @@ -159,7 +160,7 @@ c_page="$Request.route.intChapterPage" c_key="arrChapter" /}
- 上一页 - {else} + {elseif $arrChapter['pre_chapter'] && $arrChapter['pre_chapter']['c_sort_num']}
- 上一页 diff --git a/code/app/home/view/default/Novel/getNovelInfo.html b/code/app/home/view/shikong/novel/getNovelInfo.html similarity index 98% rename from code/app/home/view/default/Novel/getNovelInfo.html rename to code/app/home/view/shikong/novel/getNovelInfo.html index db54683..91e9ce2 100644 --- a/code/app/home/view/default/Novel/getNovelInfo.html +++ b/code/app/home/view/shikong/novel/getNovelInfo.html @@ -5,7 +5,12 @@ $Novel.n_id{extend name="baseH5" /} {block name="head"} +{if $Request.route.intNovelId} {novel:info n_id="$Request.route.intNovelId" n_key="arrNovel" n_forge_id="0" /} +{else} +{novel:info n_id="$DomainModel->info_id" n_key="arrNovel" n_forge_id="0" /} +{/if} + {site:grm page_code="h5_novel_info" diff="$arrNovel.n_id" num="120" g_key="arrGrm" /} diff --git a/code/app/home/view/shikong/novel/getSearchNovel.html b/code/app/home/view/shikong/novel/getSearchNovel.html new file mode 100644 index 0000000..1c6d512 --- /dev/null +++ b/code/app/home/view/shikong/novel/getSearchNovel.html @@ -0,0 +1,119 @@ +{extend name="baseH5" /} +{block name="title"}{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"}{/block} +{block name="keywords"}{site:replace code="NOVEL@GETSEARCHNOVEL@KEYWORDS"}{/block} +{block name="description"}{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}{/block} + +{block name="head"} + + + + + + + + + + + + + +{/block} + +{block name='nav-active-class'}home{/block} +{block name="body-class"}novel_so novel_search_page{/block} + +{block name="logo-html"} +
-
+ {$arrGrm[$key]|raw}
+
+
+
+
+ -
+
{$Novel.n_name}
+作者:{$Novel.n_author}
+{$Novel.n_description}
+
+ -
+
-
+
- 分类 +
- 书名 +
- 描述 +
- 作者 +
- 更新时间 +
+ {foreach $arrNewsNovel as $key=>$Novel}
+ {include file="Pc/Public/articleList" /}
+ {/foreach}
+ - {$Novel.n_author}{$Novel.n_name} + +
- {$Novel.n_description} + +
- + {$Novel.n_author ?? ''} + {$Novel.n_name + ?? ''} + +
- + + {$Novel.n_description ?? ''} + + +
- + [{$Novel->n_category ?? ''} + + {$arrGrm[$d_key+4]|raw} + {$Novel->n_name} + + {$Novel->n_author} + + + {/novel:list} +
- + {$arrGrm[$d_key+9+10*$start]|raw} + {$Novel->n_name}/{$Novel->n_author} + {/novel:list} +
- + [{$Novel->n_category ?? ''}] + + {$arrGrm[$d_key+100]|raw} + {$Novel->n_name} + {$Novel->n_author} + + {/novel:list} +
- + [{$Novel->n_category ?? ''}] + + {$arrGrm[$d_key+100]|raw} + {$Novel->n_name} + {$Novel->n_latest_chapter_name ?? + 'null'} + {$Novel->n_author} + {:date('m-d')} + + {/novel:list} + +
-
+
-
+
- 耽美百合 +
-
+
我真是一条龙
+
+ - 老读者必看公告!!! +
- 兔子很淡定 +
- 1天前 +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/chapterTableAll.html b/code/app/home/view/shikong/pc/public/chapterTableAll.html
new file mode 100644
index 0000000..2fc1fc2
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/chapterTableAll.html
@@ -0,0 +1,6 @@
+ - + 01 天龙问世 + +
- + 02 沧武的小霸王 + \ No newline at end of file diff --git a/code/app/home/view/shikong/pc/public/endNovelList.html b/code/app/home/view/shikong/pc/public/endNovelList.html new file mode 100644 index 0000000..cb851c3 --- /dev/null +++ b/code/app/home/view/shikong/pc/public/endNovelList.html @@ -0,0 +1,11 @@ +
-
+
+
+
+ ++落魄千金美食发家日常
+ 鱼昆子 +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/footer.html b/code/app/home/view/shikong/pc/public/footer.html
new file mode 100644
index 0000000..adc12bf
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/footer.html
@@ -0,0 +1,22 @@
+ - 狂雨小说cms +
-
+
玻璃焰
++ 美绿哔哔 + 武侠仙侠 + ++
+
+ [已签约实体待上市]【天生坏种x清冷校花】【大学校园、男追女、协议情侣、强制爱、破镜重圆】黎幸在整个西京大学都很有名。 + 高考状元,够美,够穷。这样的人,外貌不是恩赐,是原罪。楼崇,出生即登上金字塔最顶层的存在优越家世,顶级皮囊但却是个十足十的人渣。 + ——这样两个毫无交集的人,某天却被人撞见楼崇的阿斯顿马丁车内黎幸被单手抱起跨坐在腿上,后背抵着方向盘车窗光影交错,男人冷白精致的侧脸清晰可见,扣着她的手腕,亲自教她怎么扯开自己的领结。 + —— “协议女友,知道什么意思吗?” “意思是牵手,接吻,拥抱,上床。” “以及,爱上我。” “一步不能少。”—— “玻璃焰,玻璃高温产生的火焰,银蓝色,很美。” + 本站提示:各位书友要是觉得《玻璃焰》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
+
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/indexBoyNewsOne.html b/code/app/home/view/shikong/pc/public/indexBoyNewsOne.html
new file mode 100644
index 0000000..4d7860e
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/indexBoyNewsOne.html
@@ -0,0 +1,44 @@
+ -
+ {$key+=1}
+
娱乐宗师
+ +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/indexBoyRankOne.html b/code/app/home/view/shikong/pc/public/indexBoyRankOne.html
new file mode 100644
index 0000000..458de74
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/indexBoyRankOne.html
@@ -0,0 +1,26 @@
+ -
+ 1
+
捻转步舞曲[花滑] +
++ ++
+
+ + 作者:梧桐树下wt + 类别:武侠仙侠 ++【本文将会于2023年9月30日星期六入V,谢谢支持!】 【求投票——《成长·逆袭》主题征文——作品投票——鱼跃龙门后来居上】 + 【每5K营养液加更一章】 作为刚升组没多久,在华国内难得可以跳跃演绎两手抓的男子单人花滑选手,郁辰被队里的教练们给予极大的厚望。 + 并且整个教练团也在想尽各种方法教导这位,冰上冰下两个样子,经常会躲起来不见人的闷葫芦。 “到底有什么办法,能让那家伙在冰下的时候,有上冰那会百分之一的灵气啊!” + 只有郁辰他本人知道——他无论什么时候,都爱惨了艺术与冰面结合起来的样子。 ——只是台下之后,不会表达而已。 + 一切的变动,从他没忍住在莫斯科赛后偷瞒着教练,去看了一场芭蕾舞舞台剧之后。 追着一见钟情的男孩来到异国,并且努力学了中文的佐切卡:你好,郁!能我你拥抱? + 沉思了好久,才理清楚他语法顺序的郁辰:你学顺了中文再和我说话吧。 佐切卡(惊喜):那就是可以了! + 于是某位男单运动员就被纤细高挑练跳舞的熊抱住了一个下午,跑都跑不掉。 来自莫斯科的芭蕾舞者X略显自闭的花滑选手 1、故事里面所有人物故事,经历都没有原型。 + 2、作者对于花滑的认知还没有到完全专业水平,但是所有技术动作描写,比赛规则描述,都有资料支持。 + 3、如果有技术问题需要讨论可以随时留评,我看到后会回复的。看了每章词汇解释还是不懂的话也可以留评,我会想办法换一种解释试试看的(作者是真想教会你们滑冰系列)。 + 4、最重要一点——无论怎么样的情感下,都请不要轻易怀疑运动员对该项目的热爱。 5、停在‘4’好像不太好,所以写了个‘5’。 + 本站提示:各位书友要是觉得《捻转步舞曲[花滑]》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
+
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/indexNewsUpdateList.html b/code/app/home/view/shikong/pc/public/indexNewsUpdateList.html
new file mode 100644
index 0000000..1b055eb
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/indexNewsUpdateList.html
@@ -0,0 +1,12 @@
+ -
+
-
+
- 耽美百合 +
-
+
我真是一条龙
+
+ - 老读者必看公告!!! +
- 兔子很淡定 +
- 1天前 +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/shuKuNovelList.html b/code/app/home/view/shikong/pc/public/shuKuNovelList.html
new file mode 100644
index 0000000..1698493
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/shuKuNovelList.html
@@ -0,0 +1,32 @@
+ -
+
+
+
+ ++落魄千金美食发家日常
++ 作者:鱼昆子 + 分类:男生 + 状态:已完结 + 总字数:43.80万字+ +
+ +最近更新:219 桃花酿 +
+正文已完结,福利番外待续! 预收《癫疯人生有多爽你知道吗》《当家主母的咸鱼美食日常》戳专栏求收藏。 ——————— 温仲夏身为百万粉丝美食博主,一朝穿越。 + 好消息,穿成尚书千金。 坏消息,父兄获罪被贬到千里之外。 身边只有一个柔弱的嫂嫂和年幼的小弟。 开局就是一个交不上房租,大雪天几乎要流落街头的惨境。 温仲夏来不及哭,撸起袖子就是干。 + 红烧肉火锅烧烤爆米花卷饼卤肉奶茶小蛋糕…… 她就不信这些东京人都不爱吃。 不成的话,她还有麻辣烫烤鸭炸鸡酸辣粉炸酱面汤圆大馄饨…… 一不小心,落魄千金混成东京知名女掌柜。 …… 小剧场: + 一众贵女听闻温仲夏当街叫卖吃食后,纷纷对她这种抛头露面的行为狠狠批判。 几天后,她们却在温仲夏的食店门口不期而遇。 “你怎么来了,不会是来买蛋挞的吧?” “难道你也是?” + “我可不是,我还要买奶油蛋糕呢。” 说好的不齿与之为伍呢? 这时店内传来吆喝:“数量有限,先到先得。” 贵女们忙不迭地往里冲。 “我先来的!” ①本文主线是美食和日常。 + ②背景主要参考宋朝,不严谨的地方请见谅。 + 本站提示:各位书友要是觉得《落魄千金美食发家日常》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
++ 更新时间:2025-03-20 23:59 + 立即阅读 ++
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/swiperListImg.html b/code/app/home/view/shikong/pc/public/swiperListImg.html
new file mode 100644
index 0000000..b0b9b0c
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/swiperListImg.html
@@ -0,0 +1,7 @@
+ -
+
+
+
+
diff --git a/code/app/home/view/shikong/pc/public/swiperListText.html b/code/app/home/view/shikong/pc/public/swiperListText.html
new file mode 100644
index 0000000..620556b
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/swiperListText.html
@@ -0,0 +1,6 @@
+ -
+
+1+ 落魄千金美食发家日常 +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/user/getBookShelf.html b/code/app/home/view/shikong/pc/user/getBookShelf.html
new file mode 100644
index 0000000..4de16d1
--- /dev/null
+++ b/code/app/home/view/shikong/pc/user/getBookShelf.html
@@ -0,0 +1,49 @@
+{extend name="basePc" /}
+{block name="title"}我的书架{/block}
+{block name="keywords"}我的书架{/block}
+{block name="description"}我的书架{/block}
+{block name="head"}
+
+
+
+
+
+
+
+{block name="head-js"}{/block}
+
+
+{block name="body-class"}novel_home{/block}
+
+{block name="main"}
+
+ -
+
+ 我真是一条龙 +
{$key+=1} +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/public/chapterTable.html b/code/app/home/view/shikong/public/chapterTable.html
new file mode 100644
index 0000000..5c04f4a
--- /dev/null
+++ b/code/app/home/view/shikong/public/chapterTable.html
@@ -0,0 +1,3 @@
+ - + 01 天龙问世 + \ No newline at end of file diff --git a/code/app/home/view/shikong/public/chapterTableAll.html b/code/app/home/view/shikong/public/chapterTableAll.html new file mode 100644 index 0000000..ec3a545 --- /dev/null +++ b/code/app/home/view/shikong/public/chapterTableAll.html @@ -0,0 +1,12 @@ +
- + + 01 天龙问世 + + +
- + + 02 沧武的小霸王 + + \ No newline at end of file diff --git a/code/app/home/view/shikong/public/footer.html b/code/app/home/view/shikong/public/footer.html new file mode 100644 index 0000000..0a03808 --- /dev/null +++ b/code/app/home/view/shikong/public/footer.html @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/code/app/home/view/shikong/public/historyNovelList.html b/code/app/home/view/shikong/public/historyNovelList.html new file mode 100644 index 0000000..ca5bf18 --- /dev/null +++ b/code/app/home/view/shikong/public/historyNovelList.html @@ -0,0 +1,19 @@ +
-
+
+ +
+ 我真是一条龙 + 耽美百合 + + + 老读者必看公告!!! + + 4天前 + 继续阅读 + ++ + +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/public/novelListH.html b/code/app/home/view/shikong/public/novelListH.html
new file mode 100644
index 0000000..f594bca
--- /dev/null
+++ b/code/app/home/view/shikong/public/novelListH.html
@@ -0,0 +1,19 @@
+ -
+
+ 我真是一条龙
+ + 我的父亲告诉我,在我出生那一年,天上金光闪耀,隐隐约约中,好像能看到云朵里有条龙在盘旋,紧接着,一道金光照入我们的村子,我便出生了……为寻答案来人间,天龙问世扰乾坤。 + 无情无义闹天下,千军万马赴黄泉。 + 本站提示:各位书友要是觉得《我真是一条龙》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦! +
++ +
+作者: 兔子很淡定 + + 耽美百合 + + 已完结 +
+
diff --git a/code/app/home/view/shikong/public/novelListRank.html b/code/app/home/view/shikong/public/novelListRank.html
new file mode 100644
index 0000000..7b1959c
--- /dev/null
+++ b/code/app/home/view/shikong/public/novelListRank.html
@@ -0,0 +1,5 @@
+ -
+
+ 我真是一条龙 +
{$key+=1} +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/public/novelListS.html b/code/app/home/view/shikong/public/novelListS.html
new file mode 100644
index 0000000..66bd276
--- /dev/null
+++ b/code/app/home/view/shikong/public/novelListS.html
@@ -0,0 +1,10 @@
+ -
+
+
+ 落魄千金美食发家日常
+
+ 作者: 鱼昆子 + + +
\ No newline at end of file
diff --git a/code/app/home/view/shikong/test/test01/faker.html b/code/app/home/view/shikong/test/test01/faker.html
new file mode 100644
index 0000000..2b71d63
--- /dev/null
+++ b/code/app/home/view/shikong/test/test01/faker.html
@@ -0,0 +1,14 @@
+
+
+
+{novel:info n_id="$DomainModel->n_id" n_key="arrNovel01" n_forge_id="1125940" /}
+ - + Index: {$d_key} + Title: {$novel.n_name} + Author: {$novel.n_category} + +{/site:forgelist} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/code/app/home/view/shikong/user/getBookShelf.html b/code/app/home/view/shikong/user/getBookShelf.html new file mode 100644 index 0000000..55a721a --- /dev/null +++ b/code/app/home/view/shikong/user/getBookShelf.html @@ -0,0 +1,40 @@ +{extend name="baseH5" /} +{block name="title"}我的书架{/block} +{block name="keywords"}我的书架{/block} +{block name="description"}我的书架{/block} +{block name='nav-active-class'}home{/block} + + +{block name="body-class"}novel_so{/block} + +{block name='head-name'}{$DomainModel->d_name}{/block} +{block name='head-href'}/{/block} + +{block name="logo-html"} +
@@ -69,6 +84,11 @@
{/block} + +{block name="strPageCode"} + +{/block} + {block name="main"}精品推荐
-
- {volist name="arrRelateveNovel" id="Novel" key="key"}
+ {novel:list count="6" n_category="$arrNovel.n_category_pinyin" n_status="wanjie" d_key="key" d_val="Novel" p_val="page_data" cache_life="86400"}
-
- {novel:list count="10" sort_type="news" d_key="key" d_val="Novel" cache_life="86400"}
+ {novel:ranklist count="10" sort_type="daily" d_key="key" d_val="Novel" cache_life="1000"}
{if $key == 0}
{include file="pc/public/indexBoyRankOne" start="0"/}
{/if}
{if $key >= 1}
{include file="pc/public/indexBoyRankList" start="1"/}
{/if}
- {/novel:list}
+ {/novel:ranklist}
{$strSearchKeywords}搜索结果 - {$DomainModel->d_name} 第{$intPage}页
+{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$Request.get.page}页
没有相关数据
{else}-
- {foreach $arrPage.data as $key=>$Novel}
+ {foreach $resData.data as $key=>$Novel}
{include file="pc/public/shukuNovelList" start="0"/}
{/foreach}
-
- {volist name="arrPaginator" id="vo" key="k"}
+ {volist name="resData.p_data.pager" id="vo" key="k"}
{switch $vo.label}
{case value="上一页"}
- {if $intPage == 1}
+ {if $resData.p_data.page == 1}
友情链接
-
-
+ XML地图
+ 网站地图
+ {site:forgelist count="30" d_key="d_key" d_val="ForgeNovel" cache_life="86400"}
+
\ No newline at end of file
diff --git a/code/app/home/view/kuangYu/pc/user/getBookShelf.html b/code/app/home/view/kuangYu/pc/user/getBookShelf.html
index 461f915..f22e114 100644
--- a/code/app/home/view/kuangYu/pc/user/getBookShelf.html
+++ b/code/app/home/view/kuangYu/pc/user/getBookShelf.html
@@ -1,11 +1,13 @@
{extend name="basePcUser" /}
-{block name="title"}{$strTitle??''}{/block}
-{block name="keywords"}{$strKeywords??''}{/block}
-{block name="description"}{$strDescription??''}{/block}
+
+{block name="title"}我的书架{/block}
+{block name="keywords"}我的书架{/block}
+{block name="description"}我的书架{/block}
+
{block name="head"}
-
-
+
+
@@ -13,8 +15,8 @@
{
"@context": "https://{$DomainModel->d_domain}{$strBookShelfUrlTemp}",
"@type": "article",
- "headline": "{$strTitle??''}",
- "description": "{$strDescription??''}",
+ "headline": "我的书架",
+ "description": "我的书架",
"datePublished": "{:date('Y-m-d')}"
}
@@ -22,6 +24,7 @@
{block name="main"}
+{site:grm page_code="pc_bookshekf" diff="0" num="10" g_key="arrGrm" /}
{$arrGrm[0]|raw}
-
- {volist name="arrMoonRankNovel" id="Novel" key="key"}
+ {novel:list count="10" sort_type="news" d_key="key" d_val="Novel" cache_life="86400"}
{include file="pc/public/endNovelList" start="0"/}
- {/volist}
+ {/novel:list}
-
- {volist name="arrRecommendEndNovel" id="Novel" key="key"}
+ {novel:list count="10" sort_type="tuijian" d_key="key" d_val="Novel" cache_life="86400"}
{$arrGrm[$key]|raw}
-
+
+
{$DomainModel->d_name}
+ +最新标签
+-
+ {site:forgelist count="50" d_key="d_key" d_val="ForgeNovel" cache_life="86400"}
+
+ {$ForgeNovel.n_forge_title}
+
+ {/site:forgelist}
+ XML地图
+ 网站地图
+
+ {$DomainModel->d_name}-免费在线阅读热门小说 +
+{/block} + +{block name="main"} + +{site:grm page_code="h5_index" diff="0" num="100" g_key="arrGrm" /} + +{$DomainModel->d_index_description}
+封面推荐
+-
+
+ {$strCategoryName} + 更多.. +
+-
+
+
+
+ {novel:list count="1" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
-
+ {novel:list count="9" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
+ 狂雨小说 +
+{/block} + +{block name="main"} + + +article......... +{/block} + +{block name="customize"} {/block} \ No newline at end of file diff --git a/code/app/home/view/shikong/novel/getArticleList.html b/code/app/home/view/shikong/novel/getArticleList.html new file mode 100644 index 0000000..272e206 --- /dev/null +++ b/code/app/home/view/shikong/novel/getArticleList.html @@ -0,0 +1,46 @@ +{extend name="baseH5" /} +{block name='nav-active-class'}home{/block} +{block name="title"}{/block} +{block name="head-js"}{/block} + +{block name="logo-html"} ++ 狂雨小说/文章 +
+{/block} + +{block name="main"} + + +深度解说列表
+-
+ {foreach $arrNewsNovel as $key => $vo}
+ {include file="Public/articleList" /}
+
+ {/foreach}
+
+ {$DomainModel->d_name}-{$Request.route.strCategory}{$Request.route.strOrder}{$Request.route.strStatus}免费阅读 +
+{/block} + +{block name="nav-html"}{/block} + +{block name="main"} + +{novel:pagerexp page="$Request.get.page" limit="30" +n_category="$Request.route.strCategory" +sort_type="$Request.route.strOrder" +n_status="$Request.route.strStatus" d_key="d_key" +d_key="d_key" +d_val="Novel" n_num="total" +button_num="5" cache_life="86400" func="generateCategoryPager" export_name="resData" /} + +{site:grm page_code="h5_novel_library" diff="$resData.p_data.page" num="40" g_key="arrGrm" /} + +{$strDescription??''}
+ + +更新列表
+-
+ {foreach $resData.data as $key=>$Novel}
+
+
+ 封面推荐 +
+-
+
{$arrNovel['n_name']}最新章节 - {$arrNovel['n_author']} - {$DomainModel->d_name}
diff --git a/code/app/home/view/default/Novel/getNovelChapter.html b/code/app/home/view/shikong/novel/getNovelChapter.html similarity index 98% rename from code/app/home/view/default/Novel/getNovelChapter.html rename to code/app/home/view/shikong/novel/getNovelChapter.html index 0f3e893..8c08d9d 100644 --- a/code/app/home/view/default/Novel/getNovelChapter.html +++ b/code/app/home/view/shikong/novel/getNovelChapter.html @@ -1,4 +1,5 @@ {extend name="baseH5" /} + {block name="title"}{site:replace code="NOVEL@GETNOVELCHAPTER@TITLE"}{/block} {block name="keywords"}{site:replace code="NOVEL@GETNOVELCHAPTER@KEYWORDS"}{/block} {block name="description"}{site:replace code="NOVEL@GETNOVELCHAPTER@DESCRIPTION"}{/block} @@ -134,7 +135,7 @@ c_page="$Request.route.intChapterPage" c_key="arrChapter" /}-
{if $arrChapter.c_sort_num == 1}
-
{if $arrChapter.c_sort_num == 1}
+ {$DomainModel->d_name} +
+{/block} + +{block name="main"} + +{novel:pagerexp page="$Request.get.page" limit="30" +key="$Request.get.keyword" +d_key="d_key" +d_val="Novel" +p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /} + +{site:grm page_code="h5_novel_search" diff="$Request.url" num="30" g_key="arrGrm" /} + +{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页
+ {if $resData.p_data.total < 1}没有相关数据
+ {else} + +-
+
-
+
diff --git a/code/app/home/view/shikong/pc/getSearchNovel.html b/code/app/home/view/shikong/pc/getSearchNovel.html
new file mode 100644
index 0000000..daa10a4
--- /dev/null
+++ b/code/app/home/view/shikong/pc/getSearchNovel.html
@@ -0,0 +1,133 @@
+{extend name="basePc" /}
+{block name="title"}{site:replace code="NOVEL@GETSEARCHNOVEL@TITLE"}{/block}
+{block name="keywords"}{site:replace code="NOVEL@GETSEARCHNOVEL@KEYWORDS"}{/block}
+{block name="description"}{site:replace code="NOVEL@GETSEARCHNOVEL@DESCRIPTION"}{/block}
+
+{block name="head"}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{/block}
+
+{block name='nav-active-class'}home{/block}
+
+{block name="title"}{/block}
+{block name="meta-other"}{/block}
+{block name="body-class"}novel_home novel_search_page{/block}
+{block name="main"}
+
+
+{novel:pagerexp page="$Request.get.page" limit="30"
+key="$Request.get.keyword"
+d_key="d_key"
+d_val="Novel" n_num="total"
+p_val="page_data" button_num="10" cache_life="86400" func="generateSearchPager" export_name="resData" /}
+
+{site:grm page_code="pc_novel_search" diff="$Request.url" num="30" g_key="arrGrm" /}
+
+
+
+
+ {$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页
+
+ 搜索“{$Request.get.keyword}”相关结果共有 {$resData.p_data.total} 部小说
+
+ {if $resData.p_data.total <1} 没有相关数据
+ {else}
+
+
+ {foreach $resData.data as $key=>$Novel}
+
+
+ {$arrGrm[$key]|raw}
+
+
+
+
+
+
+
+ {/foreach}
+
+
+
+ {/if}
+
+
+
+
+
+
+ {volist name="resData.p_data.pager" id="vo" key="k"}
+ {switch $vo.label}
+ {case value="上一页"}
+ {if $resData.p_data.page == 1}
+ «
+ {else}
+ «
+ {/if}
+ {/case}
+ {case value="下一页"}
+ {if $resData.p_data.page >= $resData.p_data.total}
+ »
+ {else}
+ »
+ {/if}
+ {/case}
+ {case value="..."}
+ ...
+ {/case}
+ {default /}
+ {if preg_match('/^\d+$/', $vo.label)}
+ {$vo.label}
+ {/if}
+ {/switch}
+ {/volist}
+
+
+
+
+{/block}
+
+{block name="customize"}
+
+{/block}
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/index.html b/code/app/home/view/shikong/pc/index.html
new file mode 100644
index 0000000..817a7ed
--- /dev/null
+++ b/code/app/home/view/shikong/pc/index.html
@@ -0,0 +1,179 @@
+{extend name="basePc" /}
+{block name="title"}{site:replace code="INDEX@INDEX@TITLE"}{/block}
+{block name="keywords"}{site:replace code="INDEX@INDEX@KEYWORDS"}{/block}
+{block name="description"}{site:replace code="INDEX@INDEX@DESCRIPTION"}{/block}
+
+{block name="head-css"}
+
+{/block}
+{block name="head"}
+
+
+
+
+
+
+
+{/block}
+
+{block name="main"}
+
+{site:grm page_code="pc_index" diff="0" num="150" g_key="arrGrm" /}
+
+
+
+
+ {novel:list count="4" sort_type="tuijian" n_status="lianzai" d_key="d_key" d_val="Novel" p_val="page_data"
+ cache_life="86400"}
+
+
+ {$arrGrm[$d_key]|raw}
+
+
+
+
+
+
+
+ {/novel:list}
+
+
+ 经典推荐
+
+ {novel:list count="9" sort_type="tuijian" n_status="wanjie" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
+
+
+
+
+
+ {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
+
+ {$strCategoryName}
+
+
+
+
+ {novel:list count="1" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
+ {$arrGrm[$d_key+9+10*$start]|raw}
+
+
+
+
+
+ {/novel:list}
+
+
+ {novel:list count="12" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
+
+ {/novel:category}
+
+
+
+
+
+ 最新入库小说
+
+ {novel:list count="50" sort_type="news" d_key="d_key" d_val="Novel" p_val="page_data"
+ cache_life="86400"}
+
+
+
+ 最近更新小说列表
+
+ {novel:list count="50" sort_type="update" d_key="d_key" d_val="Novel" p_val="page_data"
+ cache_life="86400"}
+
+
+
+
+
+{/block}
+
+{block name="customize"}
+
+
+{/block}
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/adBanner.html b/code/app/home/view/shikong/pc/public/adBanner.html
new file mode 100644
index 0000000..bd8e696
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/adBanner.html
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/code/app/home/view/shikong/pc/public/allChapterPage.html b/code/app/home/view/shikong/pc/public/allChapterPage.html
new file mode 100644
index 0000000..ce3086b
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/allChapterPage.html
@@ -0,0 +1,35 @@
+{if !empty($resData.p_data.pager)}
+
+ {volist name="$resData.p_data.pager" id="item"}
+ {eq name="item.type" value="prev"}
+
+ {$item.label}
+
+ {/eq}
+ {/volist}
+
+
+
+ {volist name="$resData.p_data.pager" id="item"}
+ {eq name="item.type" value="next"}
+
+ {$item.label}
+
+ {/eq}
+ {/volist}
+
+{/if}
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/articleList.html b/code/app/home/view/shikong/pc/public/articleList.html
new file mode 100644
index 0000000..3a6a22b
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/articleList.html
@@ -0,0 +1,12 @@
+
{$Request.get.keyword}搜索结果 - {$DomainModel->d_name} 第{$resData.p_data.page}页
+没有相关数据
+ {else} +
+
+ -
+
+
+ -
+
经典推荐
+-
+ {novel:list count="9" sort_type="tuijian" n_status="wanjie" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
{$strCategoryName}
+
+
+ -
+ {novel:list count="12" n_category="$strCategoryPinyin" sort_type="news" d_key="d_key" d_val="Novel"
+ p_val="page_data" cache_life="86400"}
+
最新入库小说
+-
+ {novel:list count="50" sort_type="news" d_key="d_key" d_val="Novel" p_val="page_data"
+ cache_life="86400"}
+
最近更新小说列表
+-
+ {novel:list count="50" sort_type="update" d_key="d_key" d_val="Novel" p_val="page_data"
+ cache_life="86400"}
+
友情链接
+-
+
+
\ No newline at end of file
diff --git a/code/app/home/view/shikong/pc/public/historyNovelList.html b/code/app/home/view/shikong/pc/public/historyNovelList.html
new file mode 100644
index 0000000..59a94b1
--- /dev/null
+++ b/code/app/home/view/shikong/pc/public/historyNovelList.html
@@ -0,0 +1,23 @@
+
+ 渣攻的白月光总对我打直球
+ +
+
+ 【下本开《分手后四个鬼攻同时找上我》嗷~】 大二上学期,宣从南被一个温柔至极的男人追求;大二下学期,宣从南和沈迁在一起。 + 两个人谈了一年恋爱,宣从南发现,沈迁照常温柔,但他却常常把这样的话挂在嘴边: “不要笑。” “安静一点。” “不要太闹腾。” “眼里不要有温度。” “这样才像他。” 宣从南:……哦。 + 宣从南走了,潇洒果决,晚上却在路边捡到一个看起来落魄至极的男人。他耷拉着眉眼,带口罩,安静地坐在花坛边,似乎是在晒月光。 这人倒是很安静,还不笑,更不闹腾,眼里也没有温度。 + 宣从南把人捡回家了。他发现,这个名叫顾拾的男人竟然是娱乐圈里的顶流,只不过他不太关注娱乐圈,这才错误地把拥有千万粉丝的人捡回了家。 + 宣从南还发现,顾拾虽然过分冷淡,但他打直球说能不能喜欢我;顾拾虽然安静不闹腾,但他打直球说能不能抱抱我;顾拾虽然眼睛里没什么温度,但他打直球说能不能做…… 宣从南:这就是顶流吗? + “同居”段时间,两人顺理成章地谈恋爱。 又同居段时间,宣从南忽而得知顾拾就是沈迁爱而不得的白月光。 宣从南:……命运啊。 + 为了避免尴尬,他收拾行李又打算跑,刚走到门口却只听一道开门声,顾拾裹挟着外面的寒气进来,轻轻带上门。 宣从南:…… 顾拾冷淡的目光从上到下打量他,最后落在行李箱上。 “去哪儿?”他问。 + 宣从南捏紧行李杆,正欲说话,顾拾又道: “你想甩了我?” …… 这天晚上有狗仔拍到顾拾进了一间出租屋。 除了顾拾,窗户玻璃上还映出另外一道男性身影,他手边还有个行李箱。 + 紧接着,一向喜怒不形于色的顾拾猛地推开行李箱,拽起另一人的手腕去了卧室。 一夜没出来。 【阅读指南】: *1V1,HE,甜文。 *攻非常非常非常爱受,非常非常非常宠受 + *攻能直球绿茶也能偏执疯批,属性复杂,天使们直接看文叭 *有打脸剧情 *无原型,勿代入现实。我写文为了快乐,也只想让读者快乐~ *感谢支持正版,给大家鞠躬啦~ + ★下本《分手后四个鬼攻同时找上我》求收藏~ 宴祀亭是个小道士,山生山长,没见过外面的天,最大的雄心壮志是杀死鬼王。 但他怕鬼,还花心。 下山后进城,他在酒吧泡了一个大学教授做男朋友。 + 教授克制古板,一副性冷淡的模样。 但他“暴力”且沉沦地教会了宴祀亭在床上的108种姿势。 每天晚上宴祀亭都被哔的“身心俱散”。 随着感情渐深,教授带宴祀亭回家见父母。 他家里有鬼,好多鬼。 + 那些鬼躲在门外、趴在床底听他和教授...... 宴祀亭瑟瑟发抖,教授却像没事人,依然一次比一次深入。 宴祀亭:师父救命—— + 日复一日,教授变得愈发过分。他中午要抱宴祀亭亲昵,下午要抱宴祀亭厮磨,晚上要抱宴祀亭深入交流,非常不节制。 最后他还设门禁时间限制宴祀亭的出行,控制欲极强。 宴祀亭受不了,把人踹了。 + 他谈了第二个男朋友。 但为什么温柔先生最后因他变得野蛮,各种道具都上场; 绅士先生因他变成恶棍,让他不准离开自己的视线; 禁欲先生因他变得纵荡,永远都要按着他驰骋...... + 宴祀亭:师父我遇到了好多变态,我要回山立刻马上! 身心遭受“严重摧残”的宴祀亭决定封心锁爱,这辈子都不要泡男人了,要去完成自己的雄心壮志——杀死鬼王。 + 紧接着被甩的教授将他堵在家门口,唇角带笑声含魅:“不是要杀我吗?我来了。” 晦暗夜色下,教授身后又慢慢浮现出温柔先生、绅士先生、禁欲先生的身影,他们都在盯着宴祀亭。 + 教授柔声道:“你是要我们一起来,还是一个一个来呢。” 宴祀亭抖如筛糠无可逃脱地被他们推进了卧室。恶鬼们商量谁先来,最后愉快地决定一起。 “不要,救命啊啊啊啊啊啊啊啊啊——” *切片攻 + *所有躲门外趴床底听床戏的,都是攻的切片 ★求预收《不是人也能攻我?》收藏~ 司徒禁肩宽窄腰身材好,胸肌饱满腿长,在男同界是被许多人觊觎的优质1。 + 有人找司徒禁拍钙片,身为直男的司徒禁果断拒绝。 等再醒来,司徒禁发现他穿到了异世界。 这里到处是妖魔鬼怪。 + 司徒禁有个极倒霉的倒霉体质,喝凉水塞牙缝,吃东西噎喉咙,睡觉能窒息。再又一次平地摔跤后,司徒禁气得破口大骂。 那些神经病又来了。 玛德,这次还敢撕他衣服! + 这个世界不止他一个倒霉蛋,还有ABCDE等男人进来了。 老乡见老乡两眼泪汪汪,司徒禁和大家互相扶持,把这群想上他的变态杀得四处逃窜。 然后有一天,司徒禁看见男人 A 帮鬼撕碎了他的上衣。 + 司徒禁:? 男人B帮鬼扯烂了他的裤子。 司徒禁:?? 男人C帮鬼拽掉了他的衬衫夹。 司徒禁:??? 混乱中,谁摸了他的胸肌! 谁捏了他的屁股!! 谁掰开了他的腿!!! + 司徒禁冷笑:想攻我的千千万,你算哪块小饼干?! ABCDE 得逞,鬼得逞,怪物藤蔓得手,触手得逞...... 被迫野战后司徒禁躺在草地里抽事后烟,沉思:是个人都能攻我?不是人也能攻我? + 而他不知道,他进入的异世界其实是一个系列视频,无数观众坐在电视机前,每天就为了看他闯关。 司徒禁:什么关?“床”关吗? *切片攻,每个都为了受打得头破血流,甚至想杀了自己的分身 + *受极度理智冷静大胸美人 *攻疯得一批,每个切片都想独占囚禁受 *直播镜头前的观众只能看正经闯关,其他的看不到,花钱做榜一也没用 + 本站提示:各位书友要是觉得《渣攻的白月光总对我打直球》还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!
+我的书架
+ + +阅读记录
+ + ++ {$DomainModel->d_name} +
+{/block} + +{block name="main"} + +我的书架
++ {$DomainModel->d_name} +
+{/block} + +{block name="main"} + +阅读记录
+/gi,"\n")}class Ja{constructor(){this.state="INITIAL",this.buffer="",this.decoder=new Ya,this.regionList=[],this.cue=null,this.oncue=void 0,this.onparsingerror=void 0,this.onflush=void 0}parse(t){const e=this;function n(){let t=e.buffer,n=0;for(t=Xa(t);n
=w)return;if(_>10*o)return;n.nextLoadLevel=n.nextAutoLevel=S,m?this.bwEstimator.sample(l-Math.min(u,f),s.loaded):this.bwEstimator.sampleTTFB(l);const T=y[S].maxBitrate;this.getBwEstimate()*this.hls.config.abrBandWidthUpFactor>T&&this.resetEstimator(T),this.clearTimer(),ut.warn(`[abr] Fragment ${t.sn}${e?" part "+e.index:""} of level ${t.level} is loading too slowly;\n Time to underbuffer: ${p.toFixed(3)} s\n Estimated load time for current fragment: ${w.toFixed(3)} s\n Estimated load time for down switch fragment: ${_.toFixed(3)} s\n TTFB estimate: ${0|f} ms\n Current BW estimate: ${et(g)?0|g:"Unknown"} bps\n New BW estimate: ${0|this.getBwEstimate()} bps\n Switching to level ${S} @ ${0|T} bps`),n.trigger(rt.FRAG_LOAD_EMERGENCY_ABORTED,{frag:t,part:e,stats:s})},this.hls=t,this.bwEstimator=this.initEstimator(),this.registerListeners()}resetEstimator(t){t&&(ut.log(`setting initial bwe to ${t}`),this.hls.config.abrEwmaDefaultEstimate=t),this.firstSelection=-1,this.bwEstimator=this.initEstimator()}initEstimator(){const t=this.hls.config;return new pi(t.abrEwmaSlowVoD,t.abrEwmaFastVoD,t.abrEwmaDefaultEstimate)}registerListeners(){const{hls:t}=this;t.on(rt.MANIFEST_LOADING,this.onManifestLoading,this),t.on(rt.FRAG_LOADING,this.onFragLoading,this),t.on(rt.FRAG_LOADED,this.onFragLoaded,this),t.on(rt.FRAG_BUFFERED,this.onFragBuffered,this),t.on(rt.LEVEL_SWITCHING,this.onLevelSwitching,this),t.on(rt.LEVEL_LOADED,this.onLevelLoaded,this),t.on(rt.LEVELS_UPDATED,this.onLevelsUpdated,this),t.on(rt.MAX_AUTO_LEVEL_UPDATED,this.onMaxAutoLevelUpdated,this),t.on(rt.ERROR,this.onError,this)}unregisterListeners(){const{hls:t}=this;t&&(t.off(rt.MANIFEST_LOADING,this.onManifestLoading,this),t.off(rt.FRAG_LOADING,this.onFragLoading,this),t.off(rt.FRAG_LOADED,this.onFragLoaded,this),t.off(rt.FRAG_BUFFERED,this.onFragBuffered,this),t.off(rt.LEVEL_SWITCHING,this.onLevelSwitching,this),t.off(rt.LEVEL_LOADED,this.onLevelLoaded,this),t.off(rt.LEVELS_UPDATED,this.onLevelsUpdated,this),t.off(rt.MAX_AUTO_LEVEL_UPDATED,this.onMaxAutoLevelUpdated,this),t.off(rt.ERROR,this.onError,this))}destroy(){this.unregisterListeners(),this.clearTimer(),this.hls=this._abandonRulesCheck=null,this.fragCurrent=this.partCurrent=null}onManifestLoading(t,e){this.lastLoadedFragLevel=-1,this.firstSelection=-1,this.lastLevelLoadSec=0,this.fragCurrent=this.partCurrent=null,this.onLevelsUpdated(),this.clearTimer()}onLevelsUpdated(){this.lastLoadedFragLevel>-1&&this.fragCurrent&&(this.lastLoadedFragLevel=this.fragCurrent.level),this._nextAutoLevel=-1,this.onMaxAutoLevelUpdated(),this.codecTiers=null,this.audioTracksByGroup=null}onMaxAutoLevelUpdated(){this.firstSelection=-1,this.nextAutoLevelKey=""}onFragLoading(t,e){const n=e.frag;if(!this.ignoreFragment(n)){var i;if(!n.bitrateTest)this.fragCurrent=n,this.partCurrent=null!=(i=e.part)?i:null;this.clearTimer(),this.timer=self.setInterval(this._abandonRulesCheck,100)}}onLevelSwitching(t,e){this.clearTimer()}onError(t,e){if(!e.fatal)switch(e.details){case st.BUFFER_ADD_CODEC_ERROR:case st.BUFFER_APPEND_ERROR:this.lastLoadedFragLevel=-1,this.firstSelection=-1;break;case st.FRAG_LOAD_TIMEOUT:{const t=e.frag,{fragCurrent:n,partCurrent:i}=this;if(t&&n&&t.sn===n.sn&&t.level===n.level){const e=performance.now(),n=i?i.stats:t.stats,r=e-n.loading.start,a=n.loading.first?n.loading.first-n.loading.start:-1;if(n.loaded&&a>-1){const t=this.bwEstimator.getEstimateTTFB();this.bwEstimator.sample(r-Math.min(t,a),n.loaded)}else this.bwEstimator.sampleTTFB(r)}break}}}getTimeToLoadFrag(t,e,n,i){return t+n/e+(i?this.lastLevelLoadSec:0)}onLevelLoaded(t,e){const n=this.hls.config,{loading:i}=e.stats,r=i.end-i.start;et(r)&&(this.lastLevelLoadSec=r/1e3),e.details.live?this.bwEstimator.update(n.abrEwmaSlowLive,n.abrEwmaFastLive):this.bwEstimator.update(n.abrEwmaSlowVoD,n.abrEwmaFastVoD)}onFragLoaded(t,{frag:e,part:n}){const i=n?n.stats:e.stats;if(e.type===hn&&this.bwEstimator.sampleTTFB(i.loading.first-i.loading.start),!this.ignoreFragment(e)){if(this.clearTimer(),e.level===this._nextAutoLevel&&(this._nextAutoLevel=-1),this.firstSelection=-1,this.hls.config.abrMaxWithRealBitrate){const t=n?n.duration:e.duration,r=this.hls.levels[e.level],a=(r.loaded?r.loaded.bytes:0)+i.loaded,s=(r.loaded?r.loaded.duration:0)+t;r.loaded={bytes:a,duration:s},r.realBitrate=Math.round(8*a/s)}if(e.bitrateTest){const t={stats:i,frag:e,part:n,id:e.type};this.onFragBuffered(rt.FRAG_BUFFERED,t),e.bitrateTest=!1}else this.lastLoadedFragLevel=e.level}}onFragBuffered(t,e){const{frag:n,part:i}=e,r=null!=i&&i.stats.loaded?i.stats:n.stats;if(r.aborted)return;if(this.ignoreFragment(n))return;const a=r.parsing.end-r.loading.start-Math.min(r.loading.first-r.loading.start,this.bwEstimator.getEstimateTTFB());this.bwEstimator.sample(a,r.loaded),r.bwEstimate=this.getBwEstimate(),n.bitrateTest?this.bitrateTestDelay=a/1e3:this.bitrateTestDelay=0}ignoreFragment(t){return t.type!==hn||"initSegment"===t.sn}clearTimer(){this.timer>-1&&(self.clearInterval(this.timer),this.timer=-1)}get firstAutoLevel(){const{maxAutoLevel:t,minAutoLevel:e}=this.hls,n=this.getBwEstimate(),i=this.hls.config.maxStarvationDelay,r=this.findBestLevel(n,e,t,0,i,1,1);if(r>-1)return r;const a=this.hls.firstLevel,s=Math.min(Math.max(a,e),t);return ut.warn(`[abr] Could not find best starting auto level. Defaulting to first in playlist ${a} clamped to ${s}`),s}get forcedAutoLevel(){return this.nextAutoLevelKey?-1:this._nextAutoLevel}get nextAutoLevel(){const t=this.forcedAutoLevel,e=this.bwEstimator.canEstimate(),n=this.lastLoadedFragLevel>-1;if(!(-1===t||e&&n&&this.nextAutoLevelKey!==this.getAutoLevelKey()))return t;const i=e&&n?this.getNextABRAutoLevel():this.firstAutoLevel;if(-1!==t){const e=this.hls.levels;if(e.length>Math.max(t,i)&&e[t].loadError<=e[i].loadError)return t}return this._nextAutoLevel=i,this.nextAutoLevelKey=this.getAutoLevelKey(),i}getAutoLevelKey(){return`${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`}getNextABRAutoLevel(){const{fragCurrent:t,partCurrent:e,hls:n}=this,{maxAutoLevel:i,config:r,minAutoLevel:a}=n,s=e?e.duration:t?t.duration:0,o=this.getBwEstimate(),l=this.getStarvationDelay();let d=r.abrBandWidthFactor,c=r.abrBandWidthUpFactor;if(l){const t=this.findBestLevel(o,a,i,l,0,d,c);if(t>=0)return t}let u=s?Math.min(s,r.maxStarvationDelay):r.maxStarvationDelay;if(!l){const t=this.bitrateTestDelay;if(t){u=(s?Math.min(s,r.maxLoadingDelay):r.maxLoadingDelay)-t,ut.info(`[abr] bitrate test took ${Math.round(1e3*t)}ms, set first fragment max fetchDuration to ${Math.round(1e3*u)} ms`),d=c=1}}const h=this.findBestLevel(o,a,i,l,u,d,c);if(ut.info(`[abr] ${l?"rebuffering expected":"buffer is empty"}, optimal quality level ${h}`),h>-1)return h;const p=n.levels[a],f=n.levels[n.loadLevel];return(null==p?void 0:p.bitrate)<(null==f?void 0:f.bitrate)?a:n.loadLevel}getStarvationDelay(){const t=this.hls,e=t.media;if(!e)return 1/0;const n=e&&0!==e.playbackRate?Math.abs(e.playbackRate):1,i=t.mainForwardBufferInfo;return(i?i.len:0)/n}getBwEstimate(){return this.bwEstimator.canEstimate()?this.bwEstimator.getEstimate():this.hls.config.abrEwmaDefaultEstimate}findBestLevel(t,e,n,i,r,a,s){var o;const l=i+r,d=this.lastLoadedFragLevel,c=-1===d?this.hls.firstLevel:d,{fragCurrent:u,partCurrent:h}=this,{levels:p,allAudioTracks:f,loadLevel:m,config:g}=this.hls;if(1===p.length)return 0;const y=p[c],A=!(null==y||null==(o=y.details)||!o.live),v=-1===m||-1===d;let b,E="SDR",w=(null==y?void 0:y.frameRate)||0;const{audioPreference:x,videoPreference:S}=g,_=this.audioTracksByGroup||(this.audioTracksByGroup=function(t){return t.reduce(((t,e)=>{let n=t.groups[e.groupId];n||(n=t.groups[e.groupId]={tracks:[],channels:{2:0},hasDefault:!1,hasAutoSelect:!1}),n.tracks.push(e);const i=e.channels||"2";return n.channels[i]=(n.channels[i]||0)+1,n.hasDefault=n.hasDefault||e.default,n.hasAutoSelect=n.hasAutoSelect||e.autoselect,n.hasDefault&&(t.hasDefaultAudio=!0),n.hasAutoSelect&&(t.hasAutoSelectAudio=!0),t}),{hasDefaultAudio:!1,hasAutoSelectAudio:!1,groups:{}})}(f));if(v){if(-1!==this.firstSelection)return this.firstSelection;const i=this.codecTiers||(this.codecTiers=function(t,e,n,i){return t.slice(n,i+1).reduce(((t,n)=>{if(!n.codecSet)return t;const i=n.audioGroups;let r=t[n.codecSet];r||(t[n.codecSet]=r={minBitrate:1/0,minHeight:1/0,minFramerate:1/0,maxScore:0,videoRanges:{SDR:0},channels:{2:0},hasDefaultAudio:!i,fragmentError:0}),r.minBitrate=Math.min(r.minBitrate,n.bitrate);const a=Math.min(n.height,n.width);return r.minHeight=Math.min(r.minHeight,a),r.minFramerate=Math.min(r.minFramerate,n.frameRate),r.maxScore=Math.max(r.maxScore,n.score),r.fragmentError+=n.fragmentError,r.videoRanges[n.videoRange]=(r.videoRanges[n.videoRange]||0)+1,i&&i.forEach((t=>{if(!t)return;const n=e.groups[t];n&&(r.hasDefaultAudio=r.hasDefaultAudio||e.hasDefaultAudio?n.hasDefault:n.hasAutoSelect||!e.hasDefaultAudio&&!e.hasAutoSelectAudio,Object.keys(n.channels).forEach((t=>{r.channels[t]=(r.channels[t]||0)+n.channels[t]})))})),t}),{})}(p,_,e,n)),r=function(t,e,n,i,r){const a=Object.keys(t),s=null==i?void 0:i.channels,o=null==i?void 0:i.audioCodec,l=s&&2===parseInt(s);let d=!0,c=!1,u=1/0,h=1/0,p=1/0,f=0,m=[];const{preferHDR:g,allowedVideoRanges:y}=Ai(e,r);for(let e=a.length;e--;){const n=t[a[e]];d=n.channels[2]>0,u=Math.min(u,n.minHeight),h=Math.min(h,n.minFramerate),p=Math.min(p,n.minBitrate);const i=y.filter((t=>n.videoRanges[t]>0));i.length>0&&(c=!0,m=i)}u=et(u)?u:0,h=et(h)?h:0;const A=Math.max(1080,u),v=Math.max(30,h);return p=et(p)?p:n,n=Math.max(p,n),c||(e=void 0,m=[]),{codecSet:a.reduce(((e,i)=>{const r=t[i];if(i===e)return e;if(r.minBitrate>n)return vi(i,`min bitrate of ${r.minBitrate} > current estimate of ${n}`),e;if(!r.hasDefaultAudio)return vi(i,"no renditions with default or auto-select sound found"),e;if(o&&i.indexOf(o.substring(0,4))%5!=0)return vi(i,`audio codec preference "${o}" not found`),e;if(s&&!l){if(!r.channels[s])return vi(i,`no renditions with ${s} channel sound found (channels options: ${Object.keys(r.channels)})`),e}else if((!o||l)&&d&&0===r.channels[2])return vi(i,"no renditions with stereo sound found"),e;return r.minHeight>A?(vi(i,`min resolution of ${r.minHeight} > maximum of ${A}`),e):r.minFramerate>v?(vi(i,`min framerate of ${r.minFramerate} > maximum of ${v}`),e):m.some((t=>r.videoRanges[t]>0))?r.maxScore ').concat(t.text||"","'):"","\n \n ").concat(t.text?'
+
+