增加Feed列表

master
落雨楓 2 years ago
parent 706e051d2e
commit 5b707ec169

@ -0,0 +1,7 @@
<?php
$magicWords = [
'en' => [
'htmldetails' => [0, 'htmldetails'],
'htmlsummary' => [0, 'htmlsummary'],
],
];

Binary file not shown.

@ -7,21 +7,28 @@
"descriptionmsg": "isekai-widgets-desc",
"license-name": "GPL-2.0-or-later",
"type": "parserhook",
"requires": {
"MediaWiki": ">= 1.34.0"
},
"MessagesDirs": {
"IsekaiWidgets": [
"i18n"
]
},
"ExtensionMessagesFiles": {
"IsekaiWidgetsMagic": "IsekaiWidgets.i18n.php"
},
"AutoloadNamespaces": {
"Isekai\\Widgets\\": "includes"
},
"Hooks": {
"ParserFirstCallInit": "Isekai\\Widgets\\Widgets::onParserSetup"
"ParserFirstCallInit": "Isekai\\Widgets\\Widgets::onParserSetup",
"BeforePageDisplay": "Isekai\\Widgets\\Widgets::onLoad"
},
"ResourceModules": {
"ext.isekai.widgets.global": {
"styles": [
"ext.isekai.alert.less"
"ext.isekai.widgets.global.less"
]
},
"ext.isekai.createPage": {
@ -70,6 +77,25 @@
"isekai-discover-error-cannotload"
]
},
"ext.isekai.feedList": {
"es6": true,
"scripts": [
"feedList/ext.isekai.feedList.js"
],
"styles": [
"feedList/ext.isekai.feedList.less"
],
"dependencies": [
"vue"
],
"targets": [
"desktop",
"mobile"
],
"messages": [
]
},
"ext.isekai.previewCard": {
"scripts": [
"previewCard/ext.isekai.previewCard.js"
@ -97,11 +123,33 @@
"desktop",
"mobile"
]
},
"ext.isekai.collapse": {
"scripts": [
"ext.isekai.collapse.js"
],
"styles": [
"ext.isekai.collapse.less"
],
"targets": [
"desktop",
"mobile"
]
}
},
"ResourceFileModulePaths": {
"localBasePath": "modules",
"remoteExtPath": "IsekaiWidgets/modules"
},
"manifest_version": 1
"attributes": {
"CodeMirror": {
"TagModes": {
"tilegroup": "text/mediawiki",
"exfont": "text/mediawiki",
"details": "text/mediawiki",
"summary": "text/mediawiki"
}
}
},
"manifest_version": 2
}

@ -13,5 +13,5 @@
"isekai-discover-loading": "読み込み中...",
"isekai-discover-change-btn": "変える",
"isekai-discover-readmore-btn": "開く",
"isekai-discover-error-cannotload": "サーバからのページを読み取りに失敗しま。"
"isekai-discover-error-cannotload": "サーバからのページを読み取りに失敗しました。"
}

@ -16,6 +16,8 @@
"isekai-discover-readmore-btn": "查看",
"isekai-discover-error-cannotload": "无法从服务器加载数据",
"isekai-feed-list-title": "最近更新",
"isekai-fontface-error-invalid-params": "请提供src和name参数。",
"isekai-fontface-error-font-name-invalid": "字体名中不能包含特殊字符。",
"isekai-fontface-error-font-not-exists": "字体文件 \"$1\" 不存在。",

@ -7,7 +7,7 @@ class ExtraFontWidget {
public static function create($text, $params, $parser, $frame){
$existsFonts = $parser->extIsekaiWidgetsCache->get('extraFonts', INF, []);
$content = $text = $frame->expand($text);
$content = $text = $parser->recursiveTagParse($text, $frame);
if (!isset($params['name']) || empty($params['name'])) {
return '<span class="error">' . wfMessage('isekai-font-error-invalid-params')->parse() . '</span>' . $content;
}

@ -0,0 +1,17 @@
<?php
namespace Isekai\Widgets;
class FeedListWidget {
public static function getHtml(){
ob_start();
include(dirname(__DIR__) . '/modules/feedList/ext.isekai.feedList.tpl');
$template = ob_get_clean();
return [$template, "markerType" => 'nowiki'];
}
public static function create($text, $params, \Parser $parser, $frame){
$parser->getOutput()->addModules('ext.isekai.feedList');
return self::getHtml();
}
}

@ -11,7 +11,7 @@ class FontFaceWidget {
* @param \Parser $parser
* @param \PPFrame $frame
*/
public static function create($text, $params, $parser, $frame){
public static function create($text, $params, $parser, $frame) {
if (!isset($params['src']) || !isset($params['name']) ||
empty($params['src']) || empty($params['name'])) {
return '<span class="error">' . wfMessage('isekai-fontface-error-invalid-params')->parse() . '</span>';
@ -42,8 +42,8 @@ class FontFaceWidget {
$fontUrl = $file->getUrl();
$fontId = substr(Utils::safeBase64Encode(md5($fontName, true)), 0, 8);
$css = "<style>@font-face{src: url('{$fontUrl}');font-family:'{$fontName}'}" .
".isekai-extra-font.font-{$fontId}{font-family:'{$fontName}'}</style>";
$css = "<span><style>@font-face{src: url('{$fontUrl}');font-family:'{$fontName}'}" .
".isekai-extra-font.font-{$fontId}{font-family:'{$fontName}'}</style></span>";
$existsFonts[$fontName] = $fontId;
$existsFonts = $parser->extIsekaiWidgetsCache->set('extraFonts', $existsFonts);

@ -0,0 +1,35 @@
<?php
namespace Isekai\Widgets;
use Html;
class Html5Widget {
public static function createDetails(string $text, array $args, \Parser $parser, \PPFrame $frame) {
$parser->getOutput()->addModules('ext.isekai.collapse');
$allowedAttr = ['class'];
$htmlArgs = array_filter($args, function($k) use($allowedAttr) {
return in_array($k, $allowedAttr);
}, ARRAY_FILTER_USE_KEY);
$content = '';
if ($text) {
$content = Utils::makeParagraph($parser->recursiveTagParse($text, $frame), true);
}
return [Html::rawElement('details', $htmlArgs, $content), "markerType" => 'nowiki'];
}
public static function createSummary(string $text, array $args, \Parser $parser, \PPFrame $frame) {
$allowedAttr = ['class'];
$htmlArgs = array_filter($args, function($k) use($allowedAttr) {
return in_array($k, $allowedAttr);
}, ARRAY_FILTER_USE_KEY);
$content = '';
if ($text) {
$content = $parser->recursiveTagParse($text, $frame);
}
return [Html::rawElement('summary', $htmlArgs, $content), "markerType" => 'nowiki'];
}
}

@ -5,7 +5,7 @@ class PreviewCardWidget {
public static function getHtml($variables){
extract($variables);
ob_start();
include(dirname(__DIR__) . '/modules/previewCard/ext.isekai.previewCard.html');
include(dirname(__DIR__) . '/modules/previewCard/ext.isekai.previewCard.tpl');
$template = ob_get_clean();
return [$template, "markerType" => 'nowiki'];
}

@ -130,7 +130,7 @@ class TileWidget {
}
private function getImagesArgs(array &$element, array &$content){
/*$service = MediaWikiServices::getInstance();
$service = MediaWikiServices::getInstance();
$this->images = [];
// 提取wikitext图片
preg_match_all('/\[\[(?<title>.+?:.+?)(\|.*?)?\]\]/', $this->content, $matches);
@ -149,13 +149,14 @@ class TileWidget {
preg_match_all('/<img .*?src="(?<src>.*?)".*?srcset="(?<srcset>.*?)"[^\>]+>/', $this->content, $matches);
if (isset($matches['src']) && !empty($matches['src'])) {
$this->images = array_merge($this->images, $matches['src']);
}*/
}
if(!empty($this->images)){
$element['data-effect'] = 'image-set';
foreach($this->images as $image){
$content[] = Html::element('img', [
'src' => $image,
'style' => 'display: none'
]);
}
}

@ -5,4 +5,31 @@ class Utils {
public static function safeBase64Encode($input) {
return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($input));
}
public static function makeParagraph($text, $hasUniq = false) {
$text = str_replace("\r\n", "\n", $text);
if (strpos($text, "\n\n") === false) {
return $text;
}
$prepend = "";
$append = "";
if ($hasUniq) {
$splitPoint = strpos($text, "\n", 1) + 1;
$prepend = substr($text, 0, $splitPoint);
$text = substr($text, $splitPoint);
}
preg_match("/(\<\/div[^\>]*?\>|\n)+$/", $text, $matches);
if (count($matches) > 0) {
$append = $matches[0];
$text = substr($text, 0, -1 * strlen($append));
$tagNum = substr_count($append, '</div');
preg_match('/^(\<div[^\>]*?\>){' . $tagNum . '}/', $text, $matches);
if (count($matches) > 0) {
$prepend .= $matches[0];
$text = substr($text, strlen($matches[0]));
}
}
$lines = explode("\n\n", $text);
return $prepend . "<p>" . implode("</p>\n<p>", $lines) . "</p>" . $append;
}
}

@ -2,20 +2,34 @@
namespace Isekai\Widgets;
use MapCacheLRU;
use Parser;
class Widgets {
/**
* @param \Parser $parser
*/
public static function onParserSetup(&$parser){
$parser->extIsekaiWidgetsCache = new MapCacheLRU( 100 ); // 100 is arbitrary
$parser->setHook('createpage', CreatePageWidget::class . '::create');
$parser->setHook('discoverbox', DiscoverWidget::class . '::create');
$parser->setHook('previewcard', PreviewCardWidget::class . '::create');
$parser->setHook('createpage', [CreatePageWidget::class, 'create']);
$parser->setHook('discoverbox', [DiscoverWidget::class, 'create']);
$parser->setHook('feedlist', [FeedListWidget::class, 'create']);
$parser->setHook('previewcard', [PreviewCardWidget::class, 'create']);
$parser->setHook('tile', TileWidget::class . '::create');
$parser->setHook('tilegroup', TileGroupWidget::class . '::create');
$parser->setHook('tile', [TileWidget::class, 'create']);
$parser->setHook('tilegroup', [TileGroupWidget::class, 'create']);
$parser->setHook('fontface', [FontFaceWidget::class, 'create']);
$parser->setHook('exfont', [ExtraFontWidget::class, 'create']);
$parser->setHook('details', [Html5Widget::class, 'createDetails']);
$parser->setHook('summary', [Html5Widget::class, 'createSummary']);
$parser->setHook('fontface', FontFaceWidget::class . '::create');
$parser->setHook('exfont', ExtraFontWidget::class . '::create');
return true;
}
public static function onLoad(\OutputPage $outputPage) {
$outputPage->addModuleStyles("ext.isekai.widgets.global");
$outputPage->addModuleStyles("ext.isekai.collapse");
}
}

@ -1,5 +1,5 @@
@height: 20em;
@text-size: 0.85em;
@height: 20rem;
@text-size: 0.85rem;
.discover-card {
position: relative;
@ -13,6 +13,7 @@
border-radius: .25rem;
.card-header {
height: 2.25rem;
padding: .75rem 1.25rem;
margin-bottom: 0;
background-color: rgba(0,0,0,.03);
@ -25,7 +26,7 @@
}
.card-header-text {
font-size: 1.25em;
font-size: 1.25rem;
}
.card-header-buttons {
@ -34,13 +35,13 @@
}
.card-title {
margin: 1em 0 0.75em 1em;
margin: 1rem 0 0.75rem 1rem;
}
.card-body {
flex: 1 1 auto;
padding: 0.25em;
font-size: 1.25em;
padding: 0.25rem;
font-size: 1.25rem;
.loading {
width: 100%;
@ -51,7 +52,7 @@
.spinner {
margin: auto;
padding: 2em;
padding: 2rem;
width: 100%;
}
}
@ -60,8 +61,8 @@
height: @height;
overflow-y: auto;
border-top: 1px solid #ccc;
padding: 0 0.6em;
margin: 0 0.4em;
padding: 0 0.6rem;
margin: 0 0.4rem;
font-size: @text-size;
}
}
@ -70,31 +71,31 @@
.card-header {
@media(max-width: 410px){
.card-header-buttons {
font-size: 0.9em;
font-size: 0.9rem;
}
}
@media(max-width: 380px){
.card-header-buttons {
font-size: 0.8em;
font-size: 0.8rem;
}
}
@media(max-width: 360px){
.card-header-text {
font-size: 1em;
font-size: 1rem;
}
}
@media(max-width: 350px){
.card-header-text {
font-size: 1.25em;
font-size: 1.25rem;
}
.card-header-buttons {
margin-left: 0;
margin-top: 0.8em;
font-size: 1em;
margin-top: 0.8rem;
font-size: 1rem;
}
& {
@ -108,23 +109,23 @@
.card-header {
@media(max-width: 500px){
.card-header-text {
font-size: 1em;
font-size: 1rem;
}
.card-header-buttons {
font-size: 0.8em;
font-size: 0.8rem;
}
}
@media(max-width: 430px){
.card-header-text {
font-size: 1.25em;
font-size: 1.25rem;
}
.card-header-buttons {
margin-left: 0;
margin-top: 0.8em;
font-size: 1em;
margin-top: 0.8rem;
font-size: 1rem;
}
& {
@ -134,11 +135,11 @@
@media(max-width: 350px){
.card-header-text {
font-size: 1em;
font-size: 1rem;
}
.card-header-buttons {
font-size: 0.8em;
font-size: 0.8rem;
}
}
}

@ -1,10 +1,10 @@
<div class="isekai-discover discover-card discover-card-<?php echo wfMessage('isekai-discover-langcode')->parse(); ?>">
<div class="isekai-discover discover-card discover-card-<?=wfMessage('isekai-discover-langcode')->parse()?>">
<div class="card-header">
<span class="card-header-text" data-msg="isekai-discover-randompage"><?php echo wfMessage('isekai-discover-randompage')->parse(); ?></span>
<span class="card-header-text" data-msg="isekai-discover-randompage"><?=wfMessage('isekai-discover-randompage')->parse()?></span>
<span class="card-header-buttons"></span>
</div>
<div class="card-body">
<div class="card-title" data-msg="isekai-discover-loading"><?php echo wfMessage('isekai-discover-loading')->parse(); ?></div>
<div class="card-title" data-msg="isekai-discover-loading"><?=wfMessage('isekai-discover-loading')->parse()?></div>
<div class="loading">
<div class="spinner"></div>
</div>

@ -0,0 +1,33 @@
(function($) {
$('.isekai-collapse').addClass('animate')
$('.isekai-collapse .isekai-collapse-title').on('click', '', function(e) {
e.preventDefault();
var titleElem = $(this);
var containerElem = titleElem.parent('.isekai-collapse');
var contentElem = containerElem.find('.isekai-collapse-content');
if (containerElem.prop('open')) { // 需要收起
var collapsedHeight = titleElem.outerHeight();
var expandedHeight = collapsedHeight + contentElem.outerHeight();
containerElem.css('height', expandedHeight);
console.log('expandedHeight', expandedHeight);
requestAnimationFrame(function() {
console.log('collapsedHeight', collapsedHeight);
containerElem.addClass('closing').css('height', collapsedHeight);
setTimeout(function() {
containerElem.prop('open', false).removeClass('closing'); //.css('height', 'auto');
}, 260);
});
} else { // 需要展开
containerElem.prop('open', true);
var collapsedHeight = titleElem.outerHeight();
containerElem.css('height', collapsedHeight);
requestAnimationFrame(function() {
var expandedHeight = collapsedHeight + contentElem.outerHeight();
containerElem.css('height', expandedHeight);
/*setTimeout(function() {
containerElem.css('height', 'auto');
}, 260);*/
});
}
});
})(jQuery);

@ -0,0 +1,64 @@
.isekai-collapse {
width: 50%;
background: #fff;
margin-bottom: .5rem;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
border-radius: 5px;
overflow: hidden;
@media screen and (max-width: 767px) {
width: 100%;
}
&.animate {
overflow-y: hidden;
will-change: height;
transition: height 250ms ease-in-out;
}
.isekai-collapse-title {
padding: 1rem;
display: block;
background-color: #f7f7f7;
padding-left: 2.2rem;
position: relative;
cursor: pointer;
color: black;
font-size: 1rem;
&::before {
content: '';
border-width: 0.4rem;
border-style: solid;
border-color: transparent transparent transparent #000;
position: absolute;
top: 1.32rem;
left: 1.2rem;
transform: rotate(0);
transform-origin: 0.2rem 50%;
will-change: transform;
transition: transform 250ms ease;
}
&::-webkit-details-marker {
transform: rotate(90deg);
}
}
.isekai-collapse-content {
padding: 1em;
}
&[open] > .isekai-collapse-title:before {
transform: rotate(90deg);
}
&.closing[open] > .isekai-collapse-title:before {
transform: rotate(0);
}
}
.isekai-indent > .isekai-collapse {
padding-left: 0;
margin-left: 8px;
}

@ -0,0 +1,52 @@
.isekai-card {
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border: 1px solid rgba(0,0,0,.125);
border-radius: .25rem;
.card-header {
padding: .75rem 1.25rem;
margin-bottom: 0;
background-color: rgba(0,0,0,.03);
border-bottom: 1px solid rgba(0,0,0,.125);
display: flex;
align-items: center;
&:first-child {
border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0;
}
.card-header-text {
font-size: 1.25rem;
}
.card-header-buttons {
margin-left: auto;
}
}
.card-title {
margin: 1rem 0 0.75rem 1rem;
}
.card-body {
flex: 1 1 auto;
padding: 0.25rem;
}
.card-body-fluid {
flex: 1 1 auto;
padding: 0;
}
@media(max-width: 360px){
.card-header-text {
font-size: 1rem;
}
}
}

@ -0,0 +1,122 @@
const Vue = require("vue");
if (document.querySelector('#isekai-feed-list')) {
new Vue({
el: '#isekai-feed-list',
data: {
mounted: false,
loading: true,
feedList: []
},
mounted() {
this.$data.mounted = true;
const api = new mw.Api();
let recentData = {
recentNew: null,
recentEdit: null,
};
const onLoaded = () => {
if (Array.isArray(recentData.recentNew) && Array.isArray(recentData.recentEdit)) {
// 混合两个列表
let recentList = [
...recentData.recentNew,
...recentData.recentEdit
];
recentList.sort((a, b) => b.orderWeight - a.orderWeight);
// 去除重复获取pageid列表
let pageIdList = [];
recentList = recentList.filter((item) => {
if (pageIdList.includes(item.pageid)) {
return false;
} else {
pageIdList.push(item.pageid);
return true;
}
});
// 获取页面详细信息
api.get({
"action": "query",
"prop": "extracts|info",
"pageids": pageIdList.join('|'),
"redirects": 1,
"converttitles": 1,
"exchars": 100,
"exintro": 1,
"explaintext": 1,
"inprop": "url"
}).done((data) => {
if (data.query && data.query.pages) {
const pageInfoList = data.query.pages;
recentList = recentList.map((info) => {
if (info.pageid in pageInfoList) {
const pageInfo = pageInfoList[info.pageid];
return {
pageid: info.pageid,
title: pageInfo.title,
description: pageInfo.extract,
url: pageInfo.fullurl
}
} else {
return {
pageid: info.pageid,
title: info.title,
description: '',
url: mw.util.getUrl(info.title)
}
}
});
// 设置data
this.$data.feedList = recentList;
this.$data.loading = false;
}
});
}
};
api.get({
action: 'query',
list: 'recentchanges',
rctype: 'edit',
rcnamespace: 0,
rclimit: 20,
}).done((data) => {
recentData.recentEdit = [];
if (data.query && Array.isArray(data.query.recentchanges)) { //有成功取到数据
data.query.recentchanges.forEach((one) => {
if (one.timestamp) {
one.timestamp = new Date(one.timestamp).getTime();
one.orderWeight = one.timestamp;
} else {
one.orderWeight = 0;
}
recentData.recentEdit.push(one);
});
onLoaded();
}
});
api.get({
action: 'query',
list: 'recentchanges',
rctype: 'new',
rcnamespace: 0,
rclimit: 20,
}).done((data) => {
recentData.recentNew = [];
if (data.query && Array.isArray(data.query.recentchanges)) { // 成功取到数据
data.query.recentchanges.forEach((one) => {
if (one.timestamp) {
one.timestamp = new Date(one.timestamp).getTime();
one.orderWeight = one.timestamp + (86400 * 1000); // 新页面保护权重比页面更新高7天
} else {
one.orderWeight = 0;
}
recentData.recentNew.push(one);
});
onLoaded();
}
});
}
});
}

@ -0,0 +1,92 @@
@feed-list-height: 24rem;
.isekai-feed-list-card > .card-header {
height: 2.25rem;
}
#isekai-feed-list {
margin: 0;
height: @feed-list-height;
overflow-y: auto;
display: none;
&.mounted {
display: block;
}
.loading {
width: 100%;
height: 99.5%;
height: calc(100% - 2px); // fix: overflow because of border
margin-top: 1px;
display: flex;
.spinner {
margin: auto;
padding: 2rem;
width: 100%;
}
}
}
.isekai-list {
margin: 0 !important;
padding: 0 0 0.5rem 0 !important;
list-style: none;
background-color: transparent;
.isekai-list-item {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-sizing: border-box;
box-sizing: border-box;
min-height: 3rem;
padding: 0 1rem;
text-decoration: none;
cursor: pointer;
border-bottom: 1px solid rgba(0,0,0,.12);
&:hover {
background-color: rgba(0,0,0,.08);
}
&:last-of-type {
border-bottom: none;
}
}
a {
color: #000;
text-decoration: none;
}
.isekai-list-item-content {
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
padding-top: 0.875rem;
padding-bottom: 0.875rem;
font-weight: 400;
font-size: 1rem;
line-height: 1.25rem;
}
.isekai-list-item-title~.isekai-list-item-text {
margin-top: 0.25rem;
}
.isekai-list-item-text {
font-size: 0.875rem;
opacity: 0.54;
-webkit-line-clamp: 1;
height: 1.25rem;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
}
}

@ -0,0 +1,24 @@
<div class="isekai-card isekai-feed-list-card">
<div class="card-header">
<span class="card-header-text"><?=wfMessage('isekai-feed-list-title')->parse()?></span>
</div>
<div class="card-body-fluid">
<div id="isekai-feed-list" :class="{ mounted: 'mounted' }">
<div v-if="loading" class="loading">
<div class="spinner">
<div class="oo-ui-widget oo-ui-widget-enabled oo-ui-progressBarWidget-indeterminate oo-ui-progressBarWidget" aria-disabled="false" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<div class="oo-ui-progressBarWidget-bar"></div>
</div>
</div>
</div>
<ul v-else class="isekai-list">
<a class="isekai-list-item" v-for="(feedItem, index) in feedList" :key="index" :href="feedItem.url">
<div class="isekai-list-item-content">
<div class="isekai-list-item-title">{{ feedItem.title }}</div>
<div class="isekai-list-item-text">{{ feedItem.description }}</div>
</div>
</a>
</ul>
</div>
</div>
</div>

@ -1,9 +1,9 @@
<div class="isekai-preview-card-wrapper">
<div class="isekai-preview-card card-media" data-title="<?php echo $title; ?>">
<div class="isekai-preview-card card-media" data-title="<?=$title?>">
<div class="card-header">
<div class="card-header-title">
<div class="card-header-title-text"><?php echo $displayTitle; ?></div>
<div class="card-header-subtitle-text"><?php echo $path; ?></div>
<div class="card-header-title-text"><?=$displayTitle?></div>
<div class="card-header-subtitle-text"><?=$path?></div>
</div>
<img class="card-img" style="display: none;">
</div>

@ -519,7 +519,7 @@ isekai.tile.init = function () {
this._createTile = function(){
function switchImage(el, img_src, i){
$.setTimeout(function(){
setTimeout(function(){
el.fadeOut(500, function(){
el.css("background-image", "url(" + img_src + ")");
el.fadeIn();
@ -582,7 +582,11 @@ isekai.tile.init = function () {
element.addClass("image-set");
$.each(element.children("img"), function(){
that.images.push(this);
var imgElem = document.createElement('img');
imgElem.src = this.src;
imgElem.srcset = this.srcset;
imgElem.alt = this.alt;
that.images.push(imgElem);
$(this).remove();
});
@ -592,12 +596,14 @@ isekai.tile.init = function () {
var rnd_index = rand(0, temp.length - 1);
var div = $("<div>").addClass("img -js-img-"+i).css("background-image", "url("+temp[rnd_index].src+")");
element.prepend(div);
if (temp.length > 1) {
temp.splice(rnd_index, 1);
}
}
var a = [0, 1, 4, 3, 2];
$.setInterval(function(){
setInterval(function(){
var temp = that.images.slice();
var colors = Colors.colors(Colors.PALETTES.ALL), bg;
bg = colors[rand(0, colors.length - 1)];
@ -608,8 +614,10 @@ isekai.tile.init = function () {
var rnd_index = rand(0, temp.length - 1);
var div = element.find(".-js-img-"+a[i]);
switchImage(div, temp[rnd_index].src, i);
if (temp.length > 1) {
temp.splice(rnd_index, 1);
}
}
a = a.reverse();
}, 5000);
@ -619,7 +627,7 @@ isekai.tile.init = function () {
this._runEffects = function(){
var o = this.options;
if (this.effectInterval === false) this.effectInterval = $.setInterval(function(){
if (this.effectInterval === false) this.effectInterval = setInterval(function(){
var current, next;
current = $(this.slides[this.currentSlide]);
@ -641,7 +649,7 @@ isekai.tile.init = function () {
};
this._stopEffects = function(){
$.clearInterval(this.effectInterval);
clearInterval(this.effectInterval);
this.effectInterval = false;
};

Loading…
Cancel
Save