# Conflicts:
#	dist/lang/relationship.zh-HK.min.js
#	dist/lang/relationship.zh-HK.min.mjs
#	dist/relationship.min.js
#	dist/relationship.min.mjs
This commit is contained in:
zhenghaole 2024-09-06 09:18:52 +08:00
commit 227f44dced
9 changed files with 1000 additions and 628 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
const gulp = require('gulp'); const gulp = require('gulp');
const rename = require("gulp-rename"); const rename = require("gulp-rename");
const cht = require('gulp-cht'); const cht = require('gulp-cht');
const replace = require('gulp-replace');
gulp.task('localization', () => { gulp.task('localization', () => {
// gulp.src('./index.html') // gulp.src('./index.html')
@ -14,6 +15,7 @@ gulp.task('localization', () => {
'dist/relationship-mode.min.js', 'dist/relationship-mode.min.js',
'dist/relationship-mode.min.mjs', 'dist/relationship-mode.min.mjs',
]).pipe(cht()) ]).pipe(cht())
.pipe(replace('嶽','岳'))
.pipe(rename(function(path) { .pipe(rename(function(path) {
path.basename = path.basename.replace('.min','.zh-HK.min'); path.basename = path.basename.replace('.min','.zh-HK.min');
})) }))

View File

@ -26,21 +26,8 @@
</script> </script>
</head> </head>
<body> <body>
<div class="wrapper"> <div class="scroll-container">
<div class="mod-bg"> <header>
<svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
<defs>
<path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"></path>
</defs>
<g class="parallax">
<use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.4)"></use>
<use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.6)"></use>
<use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.2)"></use>
<use xlink:href="#gentle-wave" x="48" y="7" fill="rgba(255,255,255,1)"></use>
</g>
</svg>
</div>
<div class="header">
<div class="mod-head"> <div class="mod-head">
<div class="inner"> <div class="inner">
<div class="bd"> <div class="bd">
@ -57,229 +44,246 @@
</div> </div>
</div> </div>
</div> </div>
</div> </header>
<div class="container"> <section class="scroll-item">
<div class="mod-panel"> <div class="mod-bg">
<svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
<defs>
<path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"></path>
</defs>
<g class="parallax">
<use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.4)"></use>
<use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.6)"></use>
<use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.2)"></use>
<use xlink:href="#gentle-wave" x="48" y="7" fill="rgba(255,255,255,1)"></use>
</g>
</svg>
</div>
<div class="module mod-panel">
<div class="inner"> <div class="inner">
<div class="hd">
<h1><span class="name">中国</span><span>亲戚关系计算器</span><span class="tag">开源算法</span></h1>
<p>逢年过节遇到三姑六婆,拒绝叫不出口的尴尬!轻松搞定亲戚关系~</p>
<p>当前亲戚称呼大全已收录约<b id="count">-</b>条亲戚关系</p>
<p class="text-gray">始于2016年3月</p>
<div class="picture">
<img src="static/image/app.png" width="512" height="320" alt="亲戚称呼换算APP"/>
</div>
<div class="mobile">
<a class="btn" href="vue/" target="_blank">
<span class="name">访问手机版</span>
<span class="qrcode">
<img src="static/image/qrcode.png"/>
</span>
</a>
</div>
</div>
<div class="bd"> <div class="bd">
<div class="c-hd"> <div class="panel-left">
<ul> <h1><span class="name">中国</span><span>亲戚关系计算器</span><span class="tag">开源算法</span></h1>
<li class="active"><a href="javascript:;" rel="nofollow">关系找称呼</a></li> <p>逢年过节遇到三姑六婆,拒绝叫不出口的尴尬!轻松搞定亲戚关系~</p>
<li><a href="javascript:;" rel="nofollow">称呼找关系</a></li> <p>当前亲戚称呼大全已收录约<b id="count">-</b>条亲戚关系</p>
<li><a href="javascript:;" rel="nofollow">两者间称呼</a></li> <p class="text-gray">始于2016年3月</p>
<li><a href="javascript:;" rel="nofollow">两者的合称</a></li> <div class="picture">
</ul> <img src="static/image/app.png" width="512" height="320" alt="亲戚称呼换算APP"/>
</div>
<div class="mobile">
<a class="btn" href="vue/" target="_blank">
<span class="name">访问手机版</span>
<span class="qrcode">
<img src="static/image/qrcode.png"/>
</span>
</a>
</div>
</div> </div>
<div class="c-bd"> <div class="panel-right">
<div class="c-panel" style="display:block;"> <div class="c-hd">
<div class="row"> <ul>
<div class="field"> <li class="active"><a href="javascript:;" rel="nofollow">关系找称呼</a></li>
区域模式: <li><a href="javascript:;" rel="nofollow">称呼找关系</a></li>
<label for="field-0-1"> <li><a href="javascript:;" rel="nofollow">两者间称呼</a></li>
<input id="field-0-1" type="radio" name="mode" value="default" checked> <li><a href="javascript:;" rel="nofollow">两者的合称</a></li>
<span>默认</span> </ul>
</label>
<label for="field-0-2">
<input id="field-0-2" type="radio" name="mode" value="north">
<span>北方地区</span>
</label>
<label for="field-0-3">
<input id="field-0-3" type="radio" name="mode" value="guangdong">
<span>粤语惯用</span>
</label>
</div>
<div class="field">
我的性别:
<label for="field-1-1">
<input id="field-1-1" type="radio" name="sex" value="1" checked="checked">
<span></span>
</label>
<label for="field-1-2">
<input id="field-1-2" type="radio" name="sex" value="0">
<span></span>
</label>
</div>
<div class="field">
称呼方式:
<label for="field-2-1">
<input id="field-2-1" type="radio" name="reverse" value="0" checked>
<span>我称呼对方</span>
</label>
<label for="field-2-2">
<input id="field-2-2" type="radio" name="reverse" value="1">
<span>对方称呼我</span>
</label>
</div>
</div>
<div class="row">
<textarea name="input" placeholder="称呼之间用'的'字分开…"></textarea>
</div>
<div class="operation">
<div class="row">
<p>
<span>
<button class="btn btn-small" data-value="爸爸"></button>
<button class="btn btn-small" data-value="妈妈"></button>
</span>
<span>
<button class="btn btn-small" data-value="老公"></button>
<button class="btn btn-small" data-value="老婆"></button>
</span>
<span>
<button class="btn btn-small" data-value="哥哥"></button>
<button class="btn btn-small" data-value="弟弟"></button>
</span>
<span>
<button class="btn btn-small" data-value="姐姐"></button>
<button class="btn btn-small" data-value="妹妹"></button>
</span>
<span>
<button class="btn btn-small" data-value="儿子"></button>
<button class="btn btn-small" data-value="女儿"></button>
</span>
</p>
</div>
<div class="row">
<button class="btn btn-3 btn-orange">回退</button>
<button class="btn btn-3 btn-red">清空</button>
<button class="btn btn-3 btn-green">计算</button>
</div>
</div>
<div class="row">
<p>计算结果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
</div> </div>
<div class="c-panel"> <div class="c-bd">
<div class="row"> <div class="c-panel" style="display:block;">
<div class="field">
输入称呼:
<input class="input-text" type="text" name="input" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="operation">
<div class="row"> <div class="row">
<button class="btn btn-red">清空</button> <div class="field">
<button class="btn btn-green">计算</button> 区域模式:
<label for="field-0-1">
<input id="field-0-1" type="radio" name="mode" value="default" checked>
<span>默认</span>
</label>
<label for="field-0-2">
<input id="field-0-2" type="radio" name="mode" value="north">
<span>北方地区</span>
</label>
<label for="field-0-3">
<input id="field-0-3" type="radio" name="mode" value="guangdong">
<span>粤语惯用</span>
</label>
</div>
<div class="field">
我的性别:
<label for="field-1-1">
<input id="field-1-1" type="radio" name="sex" value="1" checked="checked">
<span></span>
</label>
<label for="field-1-2">
<input id="field-1-2" type="radio" name="sex" value="0">
<span></span>
</label>
</div>
<div class="field">
称呼方式:
<label for="field-2-1">
<input id="field-2-1" type="radio" name="reverse" value="0" checked>
<span>我称呼对方</span>
</label>
<label for="field-2-2">
<input id="field-2-2" type="radio" name="reverse" value="1">
<span>对方称呼我</span>
</label>
</div>
</div>
<div class="row">
<textarea name="input" placeholder="称呼之间用'的'字分开…"></textarea>
</div>
<div class="operation">
<div class="row">
<p>
<span>
<button class="btn btn-small" data-value="爸爸"></button>
<button class="btn btn-small" data-value="妈妈"></button>
</span>
<span>
<button class="btn btn-small" data-value="老公"></button>
<button class="btn btn-small" data-value="老婆"></button>
</span>
<span>
<button class="btn btn-small" data-value="哥哥"></button>
<button class="btn btn-small" data-value="弟弟"></button>
</span>
<span>
<button class="btn btn-small" data-value="姐姐"></button>
<button class="btn btn-small" data-value="妹妹"></button>
</span>
<span>
<button class="btn btn-small" data-value="儿子"></button>
<button class="btn btn-small" data-value="女儿"></button>
</span>
</p>
</div>
<div class="row">
<button class="btn btn-3 btn-orange">回退</button>
<button class="btn btn-3 btn-red">清空</button>
<button class="btn btn-3 btn-green">计算</button>
</div>
</div>
<div class="row">
<p>计算结果:</p>
<p><textarea name="result" readonly></textarea></p>
</div> </div>
</div> </div>
<div class="row"> <div class="c-panel">
<p>计算结果:</p> <div class="row">
<p><textarea name="result" readonly></textarea></p> <div class="field">
</div> 输入称呼:
<div class="intro"> <input class="input-text" type="text" name="input" placeholder="输入要查询的称呼"/>
<h3>应用场景</h3> </div>
<p class="q">七舅姥爷和我什么关系?</p> </div>
<p class="q">三叔公是什么亲戚?</p> <div class="operation">
<p class="q">侄子和外甥的区别在哪里?</p> <div class="row">
<p class="q">太外公和外太公有什么不同?</p> <button class="btn btn-red">清空</button>
</div> <button class="btn btn-green">计算</button>
</div> </div>
<div class="c-panel"> </div>
<div class="row text-right"> <div class="row">
<label for="field-3-0"> <p>计算结果:</p>
<input id="field-3-0" type="checkbox" name="optimal" value="1" checked> <p><textarea name="result" readonly></textarea></p>
<span>最短关系</span> </div>
</label> <div class="intro">
</div> <h3>应用场景</h3>
<div class="row"> <p class="q">七舅姥爷和我什么关系?</p>
<div class="field"> <p class="q">三叔公是什么亲戚?</p>
<input class="input-text" type="text" name="person" placeholder="输入要查询的称呼"/> <p class="q">侄子和外甥的区别在哪里?</p>
<p class="q">太外公和外太公有什么不同?</p>
</div> </div>
</div> </div>
<div class="row"> <div class="c-panel">
<div class="field"> <div class="row text-right">
称呼方式: <label for="field-3-0">
<label for="field-3-1"> <input id="field-3-0" type="checkbox" name="optimal" value="1" checked>
<input id="field-3-1" type="radio" name="reverse2" value="1" checked> <span>最短关系</span>
<span>前者称呼后者</span>
</label>
<label for="field-3-2">
<input id="field-3-2" type="radio" name="reverse2" value="0">
<span>后者称呼前者</span>
</label> </label>
</div> </div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="operation">
<div class="row"> <div class="row">
<button class="btn btn-red">清空</button> <div class="field">
<button class="btn btn-green">计算</button> <input class="input-text" type="text" name="person" placeholder="输入要查询的称呼"/>
</div>
</div> </div>
</div>
<div class="row">
<p>计算结果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>应用场景</h3>
<p class="q">外舅公是我妈的谁?</p>
<p class="q">我爸应该叫舅老爷什么?</p>
</div>
</div>
<div class="c-panel">
<div class="row text-right">
<label for="field-4-0">
<input id="field-4-0" type="checkbox" name="optimal" value="1" checked>
<span>最短关系</span>
</label>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="person" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="row">
<div class="field" style="text-align:center;">
<span>+</span>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="operation">
<div class="row"> <div class="row">
<button class="btn btn-red">清空</button> <div class="field">
<button class="btn btn-green">计算</button> 称呼方式:
<label for="field-3-1">
<input id="field-3-1" type="radio" name="reverse2" value="1" checked>
<span>前者称呼后者</span>
</label>
<label for="field-3-2">
<input id="field-3-2" type="radio" name="reverse2" value="0">
<span>后者称呼前者</span>
</label>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">计算</button>
</div>
</div>
<div class="row">
<p>计算结果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>应用场景</h3>
<p class="q">外舅公是我妈的谁?</p>
<p class="q">我爸应该叫舅老爷什么?</p>
</div> </div>
</div> </div>
<div class="row"> <div class="c-panel">
<p>计算结果:</p> <div class="row text-right">
<p><textarea name="result" readonly></textarea></p> <label for="field-4-0">
</div> <input id="field-4-0" type="checkbox" name="optimal" value="1" checked>
<div class="intro"> <span>最短关系</span>
<h3>应用场景</h3> </label>
<p class="q">奶奶和外婆之间什么关系?</p> </div>
<p class="q">舅公和爷爷是什么关系?</p> <div class="row">
<div class="field">
<input class="input-text" type="text" name="person" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="row">
<div class="field" style="text-align:center;">
<span>+</span>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="输入要查询的称呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">计算</button>
</div>
</div>
<div class="row">
<p>计算结果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>应用场景</h3>
<p class="q">奶奶和外婆之间什么关系?</p>
<p class="q">舅公和爷爷是什么关系?</p>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section>
<section class="scroll-item">
<div class="module mod-intro"> <div class="module mod-intro">
<div class="inner"> <div class="inner">
<div class="hd"><span>功能支持</span></div> <div class="hd"><span>功能支持</span></div>
@ -361,9 +365,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="mod-banner"> </section>
<section class="scroll-item">
<div class="module mod-article">
<div class="inner"> <div class="inner">
<div class="bd"> <div class="banner">
<span>外甥</span> <span>外甥</span>
<span>姑姑</span> <span>姑姑</span>
<span>岳父</span> <span>岳父</span>
@ -403,10 +409,6 @@
<span>孙子</span> <span>孙子</span>
<span>姑丈公</span> <span>姑丈公</span>
</div> </div>
</div>
</div>
<div class="module mod-article">
<div class="inner">
<div class="hd"><span>关于中国亲戚称呼</span></div> <div class="hd"><span>关于中国亲戚称呼</span></div>
<div class="bd"> <div class="bd">
<p>亲属是基于婚姻、血缘和法律拟制而形成的社会关系。亲属关系包括夫妻、父母、子女、兄弟姊妹、祖父母和外祖父母、孙子女和外孙子女、儿媳和公婆、女婿和岳父母、以及其他三代以内的旁系血亲,如伯、叔、姑、舅、姨、侄子女、甥子女、堂兄弟姊妹、表兄弟姊妹、姨兄弟姊妹等。</p> <p>亲属是基于婚姻、血缘和法律拟制而形成的社会关系。亲属关系包括夫妻、父母、子女、兄弟姊妹、祖父母和外祖父母、孙子女和外孙子女、儿媳和公婆、女婿和岳父母、以及其他三代以内的旁系血亲,如伯、叔、姑、舅、姨、侄子女、甥子女、堂兄弟姊妹、表兄弟姊妹、姨兄弟姊妹等。</p>
@ -416,6 +418,8 @@
</div> </div>
</div> </div>
</div> </div>
</section>
<section class="scroll-item">
<div class="module mod-copy"> <div class="module mod-copy">
<div class="inner"> <div class="inner">
<div class="hd"><span>算法开源</span></div> <div class="hd"><span>算法开源</span></div>
@ -433,6 +437,8 @@
</div> </div>
</div> </div>
</div> </div>
</section>
<section class="scroll-item">
<div class="module mod-app"> <div class="module mod-app">
<div class="inner"> <div class="inner">
<div class="hd"><span>他们都在使用</span></div> <div class="hd"><span>他们都在使用</span></div>
@ -466,7 +472,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="mod-foot"> <div class="module mod-foot">
<div class="inner"> <div class="inner">
<div class="hd"><span>😳支持我的开源</span></div> <div class="hd"><span>😳支持我的开源</span></div>
<div class="bd"> <div class="bd">
@ -503,7 +509,9 @@
</ul> </ul>
</div> </div>
</div> </div>
</div> <script type="text/javascript" src="https://passer-by.com/public/script/projects.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/stat.js"></script>
</section>
</div> </div>
<script type="text/javascript" src="dist/relationship.min.js"></script> <script type="text/javascript" src="dist/relationship.min.js"></script>
<script type="text/javascript" src="dist/relationship-mode.min.js"></script> <script type="text/javascript" src="dist/relationship-mode.min.js"></script>
@ -764,7 +772,5 @@
})(); })();
</script> </script>
<script async defer src="https://cdn.bootcdn.net/ajax/libs/github-buttons/2.21.1/buttons.min.js"></script> <script async defer src="https://cdn.bootcdn.net/ajax/libs/github-buttons/2.21.1/buttons.min.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/projects.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/stat.js"></script>
</body> </body>
</html> </html>

309
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "relationship.js", "name": "relationship.js",
"version": "1.2.6", "version": "1.2.7",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "relationship.js", "name": "relationship.js",
"version": "1.2.6", "version": "1.2.7",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@babel/core": "^7.24.4", "@babel/core": "^7.24.4",
@ -19,6 +19,7 @@
"gulp": "^5.0.0", "gulp": "^5.0.0",
"gulp-cht": "^2.0.20", "gulp-cht": "^2.0.20",
"gulp-rename": "^2.0.0", "gulp-rename": "^2.0.0",
"gulp-replace": "^1.1.4",
"rollup": "^3.29.4", "rollup": "^3.29.4",
"tape": "^5.7.5", "tape": "^5.7.5",
"through2": "^4.0.2" "through2": "^4.0.2"
@ -1933,12 +1934,40 @@
"integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==", "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==",
"dev": true "dev": true
}, },
"node_modules/@types/expect": {
"version": "1.20.4",
"resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
"integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.1.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz",
"integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.13.0"
}
},
"node_modules/@types/resolve": { "node_modules/@types/resolve": {
"version": "1.20.2", "version": "1.20.2",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
"integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
"dev": true "dev": true
}, },
"node_modules/@types/vinyl": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
"integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/expect": "^1.20.4",
"@types/node": "*"
}
},
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.11.1", "version": "8.11.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.1.tgz",
@ -2191,6 +2220,19 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/binaryextensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz",
"integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8"
},
"funding": {
"url": "https://bevry.me/fund"
}
},
"node_modules/bl": { "node_modules/bl": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
@ -2460,6 +2502,13 @@
"url": "https://opencollective.com/core-js" "url": "https://opencollective.com/core-js"
} }
}, },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true,
"license": "MIT"
},
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -3325,6 +3374,23 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/gulp-replace": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.4.tgz",
"integrity": "sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"@types/vinyl": "^2.0.4",
"istextorbinary": "^3.0.0",
"replacestream": "^4.0.3",
"yargs-parser": ">=5.0.0-security.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/gulplog": { "node_modules/gulplog": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz",
@ -3929,6 +3995,13 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true,
"license": "MIT"
},
"node_modules/isexe": { "node_modules/isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -3944,6 +4017,23 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/istextorbinary": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz",
"integrity": "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"binaryextensions": "^2.2.0",
"textextensions": "^3.2.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://bevry.me/fund"
}
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -4136,6 +4226,16 @@
"node": ">= 10.13.0" "node": ">= 10.13.0"
} }
}, },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-inspect": { "node_modules/object-inspect": {
"version": "1.13.1", "version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
@ -4301,6 +4401,13 @@
"url": "https://github.com/sponsors/jonschlinkert" "url": "https://github.com/sponsors/jonschlinkert"
} }
}, },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true,
"license": "MIT"
},
"node_modules/queue-tick": { "node_modules/queue-tick": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
@ -4466,6 +4573,51 @@
"node": ">= 10.13.0" "node": ">= 10.13.0"
} }
}, },
"node_modules/replacestream": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
"integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"escape-string-regexp": "^1.0.3",
"object-assign": "^4.0.1",
"readable-stream": "^2.0.2"
}
},
"node_modules/replacestream/node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/replacestream/node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT"
},
"node_modules/replacestream/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/require-directory": { "node_modules/require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -4949,6 +5101,19 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/textextensions": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz",
"integrity": "sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://bevry.me/fund"
}
},
"node_modules/through2": { "node_modules/through2": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
@ -5104,6 +5269,13 @@
"node": ">= 10.13.0" "node": ">= 10.13.0"
} }
}, },
"node_modules/undici-types": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
"integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
"dev": true,
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": { "node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@ -6742,12 +6914,37 @@
"integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==", "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==",
"dev": true "dev": true
}, },
"@types/expect": {
"version": "1.20.4",
"resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
"integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
"dev": true
},
"@types/node": {
"version": "22.1.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz",
"integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==",
"dev": true,
"requires": {
"undici-types": "~6.13.0"
}
},
"@types/resolve": { "@types/resolve": {
"version": "1.20.2", "version": "1.20.2",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
"integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
"dev": true "dev": true
}, },
"@types/vinyl": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
"integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
"dev": true,
"requires": {
"@types/expect": "^1.20.4",
"@types/node": "*"
}
},
"acorn": { "acorn": {
"version": "8.11.1", "version": "8.11.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.1.tgz",
@ -6920,6 +7117,12 @@
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true "dev": true
}, },
"binaryextensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz",
"integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==",
"dev": true
},
"bl": { "bl": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
@ -7105,6 +7308,12 @@
"browserslist": "^4.23.0" "browserslist": "^4.23.0"
} }
}, },
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true
},
"debug": { "debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -7769,6 +7978,19 @@
"integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==",
"dev": true "dev": true
}, },
"gulp-replace": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.4.tgz",
"integrity": "sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==",
"dev": true,
"requires": {
"@types/node": "*",
"@types/vinyl": "^2.0.4",
"istextorbinary": "^3.0.0",
"replacestream": "^4.0.3",
"yargs-parser": ">=5.0.0-security.0"
}
},
"gulplog": { "gulplog": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz",
@ -8167,6 +8389,12 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true "dev": true
}, },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true
},
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -8179,6 +8407,16 @@
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true "dev": true
}, },
"istextorbinary": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz",
"integrity": "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==",
"dev": true,
"requires": {
"binaryextensions": "^2.2.0",
"textextensions": "^3.2.0"
}
},
"js-tokens": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -8325,6 +8563,12 @@
"once": "^1.4.0" "once": "^1.4.0"
} }
}, },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"dev": true
},
"object-inspect": { "object-inspect": {
"version": "1.13.1", "version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
@ -8445,6 +8689,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true "dev": true
}, },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"queue-tick": { "queue-tick": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
@ -8579,6 +8829,49 @@
"integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==",
"dev": true "dev": true
}, },
"replacestream": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
"integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
"dev": true,
"requires": {
"escape-string-regexp": "^1.0.3",
"object-assign": "^4.0.1",
"readable-stream": "^2.0.2"
},
"dependencies": {
"readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
"require-directory": { "require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -8948,6 +9241,12 @@
"source-map-support": "~0.5.20" "source-map-support": "~0.5.20"
} }
}, },
"textextensions": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz",
"integrity": "sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==",
"dev": true
},
"through2": { "through2": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
@ -9064,6 +9363,12 @@
"integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==",
"dev": true "dev": true
}, },
"undici-types": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
"integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
"dev": true
},
"unicode-canonical-property-names-ecmascript": { "unicode-canonical-property-names-ecmascript": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",

View File

@ -44,7 +44,7 @@
"bugs": { "bugs": {
"url": "https://github.com/mumuy/relationship/issues" "url": "https://github.com/mumuy/relationship/issues"
}, },
"files":[ "files": [
"dist" "dist"
], ],
"devDependencies": { "devDependencies": {
@ -58,6 +58,7 @@
"gulp": "^5.0.0", "gulp": "^5.0.0",
"gulp-cht": "^2.0.20", "gulp-cht": "^2.0.20",
"gulp-rename": "^2.0.0", "gulp-rename": "^2.0.0",
"gulp-replace": "^1.1.4",
"rollup": "^3.29.4", "rollup": "^3.29.4",
"tape": "^5.7.5", "tape": "^5.7.5",
"through2": "^4.0.2" "through2": "^4.0.2"

View File

@ -1,8 +1,8 @@
// 头部滚动 // 头部滚动
(function(){ (function(){
let $header = document.querySelector('.header'); let $header = document.querySelector('.mod-head');
document.addEventListener('scroll',function(){ document.querySelector('.scroll-container').addEventListener('scroll',function(){
let scrollTop = document.documentElement.scrollTop; let scrollTop = this.scrollTop;
let ratio = Math.min(scrollTop/1000,1); let ratio = Math.min(scrollTop/1000,1);
$header.style.background = 'rgba(255,255,255,'+(ratio*0.8)+')'; $header.style.background = 'rgba(255,255,255,'+(ratio*0.8)+')';
$header.style.boxShadow = '1px 1px 6px rgba(0,0,0,'+(ratio*0.1)+')'; $header.style.boxShadow = '1px 1px 6px rgba(0,0,0,'+(ratio*0.1)+')';
@ -11,20 +11,13 @@
// 底部滚动 // 底部滚动
(function(){ (function(){
let timer = null;
let $gotop = document.querySelector('.mod-fixedbar .gotop'); let $gotop = document.querySelector('.mod-fixedbar .gotop');
let $container = document.querySelector('.scroll-container');
$gotop.addEventListener('click',function(){ $gotop.addEventListener('click',function(){
cancelAnimationFrame(timer); $container.scrollTo({
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop; left:0,
let move = scrollTop/18; top:0,
timer = requestAnimationFrame(function fn(){ behavior:'smooth'
var oTop = document.body.scrollTop || document.documentElement.scrollTop;
if(oTop > 0){
document.body.scrollTop = document.documentElement.scrollTop = oTop - move;
timer = requestAnimationFrame(fn);
}else{
cancelAnimationFrame(timer);
}
}); });
}); });
})(); })();

View File

@ -23,11 +23,30 @@ a:hover{
} }
.header{ .scroll-container{
margin-bottom: 15px; position: relative;
height: 100vh;
scroll-snap-type: y mandatory;
overflow: auto;
scrollbar-gutter:stable;
scroll-behavior:smooth
} }
.container{ .scroll-container .scroll-item{
padding-bottom: 30px; position: relative;
scroll-snap-align: center;
}
.scroll-container .scroll-item:before,.scroll-container .scroll-item:after {
content:"";
display:table;
}
.scroll-container .scroll-item:after { clear:both; }
header{
position: sticky;
left: 0;
top: 0;
width: 100%;
height: 0;
z-index: 99;
} }
.inner{ .inner{
max-width: 1000px; max-width: 1000px;
@ -35,7 +54,7 @@ a:hover{
margin: 0 auto; margin: 0 auto;
} }
.module{ .module{
margin-bottom: 80px; margin: 60px 0;
} }
.module .hd{ .module .hd{
margin: 0 5px 5px; margin: 0 5px 5px;
@ -51,7 +70,7 @@ a:hover{
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
height: 500px; height: 550px;
width: 100%; width: 100%;
z-index: -1; z-index: -1;
background: url('../image/bg.svg') center top repeat-x; background: url('../image/bg.svg') center top repeat-x;
@ -103,12 +122,11 @@ a:hover{
} }
} }
.header{ .mod-head{
position: sticky; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
width: 100%; width: 100%;
z-index: 99;
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
} }
.mod-head .bd{ .mod-head .bd{
@ -184,26 +202,27 @@ a:hover{
opacity: .02; opacity: .02;
} }
.mod-panel{
margin-bottom: 80px; .mod-panel .bd{
display: flex;
padding-top: 20px;
} }
.mod-panel .hd{ .mod-panel .panel-left{
float: left; width: 55%;
width: 50%;
padding-top: 15px; padding-top: 15px;
line-height: 22px; line-height: 22px;
} }
.mod-panel .hd h1{ .mod-panel .panel-left h1{
margin-bottom: 10px; margin-bottom: 10px;
line-height: 30px; line-height: 30px;
font-weight: bold; font-weight: bold;
font-size: 30px; font-size: 30px;
color:#1a2b3b; color:#1a2b3b;
} }
.mod-panel .hd h1 span.name{ .mod-panel .panel-left h1 span.name{
display: block; display: block;
} }
.mod-panel .hd h1 span.tag{ .mod-panel .panel-left h1 span.tag{
display: inline-block; display: inline-block;
padding: 0 8px; padding: 0 8px;
margin: 0 5px; margin: 0 5px;
@ -215,22 +234,22 @@ a:hover{
border-radius: 4px; border-radius: 4px;
box-shadow: 0 1px 5px 0 rgba(0,0,0,0.03); box-shadow: 0 1px 5px 0 rgba(0,0,0,0.03);
} }
.mod-panel .hd p{ .mod-panel .panel-left p{
line-height: 24px; line-height: 24px;
font-size: 15px; font-size: 15px;
} }
.mod-panel .hd p.text-gray{ .mod-panel .panel-left p.text-gray{
color: rgba(0,0,0,0.25); color: rgba(0,0,0,0.25);
} }
.mod-panel .hd .picture,.mod-panel .hd .mobile{ .mod-panel .panel-left .picture,.mod-panel .panel-left .mobile{
position: relative; position: relative;
width: 400px; width: 400px;
text-align: center; text-align: center;
} }
.mod-panel .hd .picture img{ .mod-panel .panel-left .picture img{
margin-left: -56px; margin-left: -56px;
} }
.mod-panel .hd .btn{ .mod-panel .panel-left .btn{
position: relative; position: relative;
display: inline-block; display: inline-block;
height: 36px; height: 36px;
@ -248,12 +267,12 @@ a:hover{
outline: none; outline: none;
-webkit-appearance: none; -webkit-appearance: none;
} }
.mod-panel .hd .btn span.name{ .mod-panel .panel-left .btn span.name{
display: inline-block; display: inline-block;
padding-right: 30px; padding-right: 30px;
background: url('../image/scan.png') right center / 16px 16px no-repeat; background: url('../image/scan.png') right center / 16px 16px no-repeat;
} }
.mod-panel .hd .btn span.qrcode{ .mod-panel .panel-left .btn span.qrcode{
display: none; display: none;
position: absolute; position: absolute;
right: -160px; right: -160px;
@ -264,13 +283,13 @@ a:hover{
margin-top: -84px; margin-top: -84px;
border: 2px solid rgba(0,0,0,0.1); border: 2px solid rgba(0,0,0,0.1);
} }
.mod-panel .hd .btn span.qrcode img{ .mod-panel .panel-left .btn span.qrcode img{
width: 150px; width: 150px;
height: 150px; height: 150px;
padding: 5px; padding: 5px;
background: #fff; background: #fff;
} }
.mod-panel .hd .btn span.qrcode::after{ .mod-panel .panel-left .btn span.qrcode::after{
position: absolute; position: absolute;
left: -6px; left: -6px;
top: 50%; top: 50%;
@ -283,73 +302,93 @@ a:hover{
box-shadow: -2px 2px 0 rgba(0,0,0,0.1); box-shadow: -2px 2px 0 rgba(0,0,0,0.1);
transform: rotate(45deg); transform: rotate(45deg);
} }
.mod-panel .hd .btn:hover { .mod-panel .panel-left .btn:hover {
background: #207fcc; background: #207fcc;
} }
.mod-panel .hd .btn:hover span.qrcode{ .mod-panel .panel-left .btn:hover span.qrcode{
display: block; display: block;
} }
.mod-panel .hd b{ .mod-panel .panel-left b{
margin: 0 3px; margin: 0 3px;
color: #fd7474; color: #fd7474;
} }
.mod-panel .bd{ .mod-panel .panel-right{
margin-left: 55%; width: 45%;
background: #fff;
box-shadow: 0 1px 5px 0 rgba(0,0,0,0.025);
border: 1px solid rgba(0,0,0,0.025);
} }
.mod-panel .bd .c-hd{ .mod-panel .panel-right .c-hd{
height: 44px; height: 44px;
border-bottom: 1px solid #f4f4f4; margin-bottom: 10px;
} }
.mod-panel .bd .c-hd li{ .mod-panel .panel-right .c-hd ul{
float: left; display: flex;
width: 25%; }
.mod-panel .panel-right .c-hd li{
flex: 1;
height: 44px; height: 44px;
line-height: 44px; line-height: 44px;
} }
.mod-panel .bd .c-hd li a{ .mod-panel .panel-right .c-hd li a{
position: relative;
display: block; display: block;
text-align: center; text-align: center;
text-decoration: none; text-decoration: none;
font-size: 14px; font-size: 16px;
color: #999; font-weight: bold;
color: rgba(0,0,0,0.25);
cursor: pointer; cursor: pointer;
transition: all 0.25s ease-in;
} }
.mod-panel .bd .c-hd li.active a{ .mod-panel .panel-right .c-hd li a::after{
position: relative; position: absolute;
color: #333; left: 50%;
bottom: 0;
display: block;
content: '';
width: 0px;
height: 0px;
margin-left: 0px;
background: #2095f2;
border-radius: 0px;
transition: all 0.25s ease-in;
} }
.mod-panel .bd .c-hd li.active a::after{ .mod-panel .panel-right .c-hd li.active a{
flex: 1.5;
font-size: 20px;
color: rgba(0,0,0,0.9);
}
.mod-panel .panel-right .c-hd li.active a::after{
position: absolute; position: absolute;
left: 50%; left: 50%;
bottom: 0; bottom: 0;
display: block; display: block;
content: ''; content: '';
width: 16px; width: 16px;
height: 4px; height: 6px;
margin-left: -8px; margin-left: -8px;
background: #2095f2; background: #2095f2;
border-radius: 3px; border-radius: 3px;
} }
.mod-panel .bd .c-bd{ .mod-panel .panel-right .c-bd{
height: 450px; height: 450px;
padding: 18px 20px; padding: 18px 20px;
background: #fff;
box-shadow: 0 0 0 3px rgba(0,0,0,0.025);
border: 1px solid rgba(0,0,0,0.025);
border-radius: 12px;
} }
.mod-panel .bd .c-panel{ .mod-panel .panel-right .c-panel{
display: none; display: none;
} }
.mod-panel .bd .c-panel .operation{ .mod-panel .panel-right .c-panel .operation{
margin: 10px 0; margin: 10px 0;
} }
.mod-panel .bd .c-panel .row{ .mod-panel .panel-right .c-panel .row{
margin-bottom: 5px; margin-bottom: 5px;
} }
.mod-panel .bd .c-panel .field{ .mod-panel .panel-right .c-panel .field{
line-height: 28px; line-height: 28px;
} }
.mod-panel .bd .c-panel .intro{ .mod-panel .panel-right .c-panel .intro{
padding: 10px 15px; padding: 10px 15px;
margin: 25px 0; margin: 25px 0;
background: #fffbf5; background: #fffbf5;
@ -357,24 +396,24 @@ a:hover{
color: #666; color: #666;
border-radius: 5px; border-radius: 5px;
} }
.mod-panel .bd .c-panel .intro h3{ .mod-panel .panel-right .c-panel .intro h3{
line-height: 30px; line-height: 30px;
font-weight: bold; font-weight: bold;
font-size: 15px; font-size: 15px;
color: #666; color: #666;
} }
.mod-panel .bd p{ .mod-panel .panel-right p{
overflow: hidden; overflow: hidden;
} }
.mod-panel .bd label{ .mod-panel .panel-right label{
display: inline-block; display: inline-block;
min-width: 90px; min-width: 90px;
margin-right: 15px; margin-right: 15px;
} }
.mod-panel .bd label span,.mod-panel .bd label input{ .mod-panel .panel-right label span,.mod-panel .panel-right label input{
vertical-align: middle; vertical-align: middle;
} }
.mod-panel .bd .input-text{ .mod-panel .panel-right .input-text{
display: inline-block; display: inline-block;
width: 100%; width: 100%;
height: 36px; height: 36px;
@ -386,13 +425,13 @@ a:hover{
border-radius: 5px; border-radius: 5px;
outline: none; outline: none;
} }
.mod-panel .bd .input-text-small{ .mod-panel .panel-right .input-text-small{
width: 200px; width: 200px;
} }
.mod-panel .bd .text-right{ .mod-panel .panel-right .text-right{
text-align: right; text-align: right;
} }
.mod-panel .bd .btn { .mod-panel .panel-right .btn {
height: 32px; height: 32px;
min-width: 80px; min-width: 80px;
background: #f0f0f0; background: #f0f0f0;
@ -406,40 +445,40 @@ a:hover{
border-radius: 4px; border-radius: 4px;
box-sizing: border-box; box-sizing: border-box;
} }
.mod-panel .bd .btn:hover{ .mod-panel .panel-right .btn:hover{
background: #e4e4e4; background: #e4e4e4;
} }
.mod-panel .bd .btn-green{ .mod-panel .panel-right .btn-green{
background: #4bae4f; background: #4bae4f;
color: #fff; color: #fff;
} }
.mod-panel .bd .btn-green:hover{ .mod-panel .panel-right .btn-green:hover{
background: #47a04b; background: #47a04b;
} }
.mod-panel .bd .btn-red{ .mod-panel .panel-right .btn-red{
background: #f56954; background: #f56954;
color: #fff; color: #fff;
} }
.mod-panel .bd .btn-red:hover{ .mod-panel .panel-right .btn-red:hover{
background: #f4543c;; background: #f4543c;;
} }
.mod-panel .bd .btn-orange{ .mod-panel .panel-right .btn-orange{
background: #ff9000; background: #ff9000;
color: #fff; color: #fff;
} }
.mod-panel .bd .btn-orange:hover{ .mod-panel .panel-right .btn-orange:hover{
background: #e18309; background: #e18309;
} }
.mod-panel .bd .btn-small{ .mod-panel .panel-right .btn-small{
min-width: 36px; min-width: 36px;
margin-right: -1px; margin-right: -1px;
cursor: pointer; cursor: pointer;
} }
.mod-panel .bd .btn[disabled]{ .mod-panel .panel-right .btn[disabled]{
background: #f0f0f0; background: #f0f0f0;
color: #aaa; color: #aaa;
} }
.mod-panel .bd textarea{ .mod-panel .panel-right textarea{
display: block; display: block;
width: 100%; width: 100%;
height: 120px; height: 120px;
@ -451,63 +490,13 @@ a:hover{
resize: none; resize: none;
outline: none; outline: none;
} }
.mod-panel .bd p{ .mod-panel .panel-right p{
line-height: 22px; line-height: 22px;
} }
.mod-panel .bd p span{ .mod-panel .panel-right p span{
margin-right: 4px; margin-right: 4px;
} }
.mod-banner .bd{
height: 120px;
padding: 20px 20px 20px 38%;
background: linear-gradient(to right,rgba(0,0,0,0) 0%, rgba(246,248,250,0.5) 100%);
border-radius: 12px;
line-height: 27px;
vertical-align: middle;
text-align: right;
font-size: 30px;
font-weight: bold;
color: #8b949e;
}
.mod-banner .bd span{
display: inline-block;
white-space: nowrap;
transform: scale(1);
}
.mod-banner .bd span:hover{
transform: scale(1.2);
transition: all 0.25s ease-in;
}
.mod-banner .bd span:nth-child(7n){
opacity: 0.15;
zoom: 0.6;
}
.mod-banner .bd span:nth-child(7n+1){
opacity: 0.35;
zoom: 0.7;
}
.mod-banner .bd span:nth-child(7n+2){
opacity: 0.25;
zoom: 0.6;
}
.mod-banner .bd span:nth-child(7n+3){
opacity: 0.30;
zoom: 0.9;
}
.mod-banner .bd span:nth-child(7n+4){
opacity: 0.45;
zoom: 0.8;
}
.mod-banner .bd span:nth-child(7n+5){
opacity: 0.40;
zoom: 0.7;
}
.mod-banner .bd span:nth-child(7n+6){
opacity: 0.65;
zoom: 1;
}
.mod-intro .bd ul{ .mod-intro .bd ul{
overflow: hidden; overflow: hidden;
} }
@ -544,8 +533,54 @@ a:hover{
overflow-x: auto; overflow-x: auto;
} }
.mod-article{ .mod-article .banner{
margin-bottom: 100px; height: 120px;
padding: 20px 20px 20px 38%;
background: linear-gradient(to right,rgba(0,0,0,0) 0%, rgba(246,248,250,0.5) 100%);
border-radius: 12px;
line-height: 27px;
vertical-align: middle;
text-align: right;
font-size: 30px;
font-weight: bold;
color: #8b949e;
}
.mod-article .banner span{
display: inline-block;
white-space: nowrap;
transform: scale(1);
}
.mod-article .banner span:hover{
transform: scale(1.2);
transition: all 0.25s ease-in;
}
.mod-article .banner span:nth-child(7n){
opacity: 0.15;
zoom: 0.6;
}
.mod-article .banner span:nth-child(7n+1){
opacity: 0.35;
zoom: 0.7;
}
.mod-article .banner span:nth-child(7n+2){
opacity: 0.25;
zoom: 0.6;
}
.mod-article .banner span:nth-child(7n+3){
opacity: 0.30;
zoom: 0.9;
}
.mod-article .banner span:nth-child(7n+4){
opacity: 0.45;
zoom: 0.8;
}
.mod-article .banner span:nth-child(7n+5){
opacity: 0.40;
zoom: 0.7;
}
.mod-article .banner span:nth-child(7n+6){
opacity: 0.65;
zoom: 1;
} }
.mod-article .hd{ .mod-article .hd{
margin-top: -36px; margin-top: -36px;
@ -580,6 +615,9 @@ a:hover{
text-indent: 2em; text-indent: 2em;
} }
.mod-app{
margin: 120px 0 80px;
}
.mod-app .hd{ .mod-app .hd{
text-align: center; text-align: center;
} }
@ -605,8 +643,8 @@ a:hover{
.mod-copy{ .mod-copy{
position: relative; position: relative;
margin-bottom: 125px;
padding: 15px 0 45px; padding: 15px 0 45px;
margin-bottom: 120px;
background: rgb(246, 248, 250); background: rgb(246, 248, 250);
} }
.mod-copy::before { .mod-copy::before {
@ -733,8 +771,12 @@ a:hover{
} }
@media screen and (max-width: 1020px) { @media screen and (max-width: 1020px) {
.header{ .scroll-container{
margin-bottom: 10px; height: auto;
scroll-snap-type: none;
}
header{
position: fixed;
} }
.inner{ .inner{
max-width: 640px; max-width: 640px;
@ -749,71 +791,77 @@ a:hover{
} }
.mod-panel{ .mod-panel{
margin-bottom: 25px; padding-top: 20px;
} }
.mod-panel .hd{ .mod-panel .bd{
flex-direction: column;
}
.mod-panel .panel-left,.mod-panel .panel-right{
width: auto;
}
.mod-panel .panel-left{
float: none; float: none;
padding-top: 0; padding-top: 0;
width: auto; width: auto;
margin-bottom: 15px; margin-bottom: 20px;
text-align: center; text-align: center;
} }
.mod-panel .hd h1{ .mod-panel .panel-left h1{
margin-bottom: 5px; margin-bottom: 5px;
line-height: 26px; line-height: 26px;
font-size: 20px; font-size: 20px;
} }
.mod-panel .hd h1 span.name{ .mod-panel .panel-left h1 span.name{
display: inline; display: inline;
} }
.mod-panel .hd p{ .mod-panel .panel-left p{
line-height: 22px; line-height: 22px;
font-size: 13px; font-size: 13px;
overflow: hidden; overflow: hidden;
} }
.mod-panel .hd .picture{ .mod-panel .panel-left .picture{
width: auto; width: auto;
padding-top: 0; padding-top: 0;
} }
.mod-panel .hd .mobile{ .mod-panel .panel-left .mobile{
width: auto; width: auto;
} }
.mod-panel .hd .picture img{ .mod-panel .panel-left .picture img{
width: 256px; width: 256px;
height: 160px; height: 160px;
margin-left: 0; margin-left: 0;
} }
.mod-panel .hd .btn{ .mod-panel .panel-left .btn{
display: block; display: block;
margin: 0 auto; margin: 0 auto;
} }
.mod-panel .hd .btn span.name{ .mod-panel .panel-left .btn span.name{
padding-right: 0; padding-right: 0;
background: none; background: none;
} }
.mod-panel .hd .btn span.qrcode{ .mod-panel .panel-left .btn span.qrcode{
display: none!important; display: none!important;
} }
.mod-panel .bd{ .mod-panel .panel-right{
margin-left: 0; margin-left: 0;
} }
.mod-panel .bd .c-hd{ .mod-panel .panel-right .c-hd{
text-align: center; text-align: center;
} }
.mod-panel .bd .c-hd ul{ .mod-panel .panel-right .c-hd ul{
overflow-x: auto; overflow-x: auto;
white-space: nowrap; white-space: nowrap;
} }
.mod-panel .bd .c-hd li{ .mod-panel .panel-right .c-hd li{
float: none; float: none;
display: inline-block; display: inline-block;
width: auto; width: auto;
min-width: 24% min-width: 24%
} }
.mod-panel .bd .c-hd li a{ .mod-panel .panel-right .c-hd li a{
padding: 0 4px; padding: 0 4px;
} }
.mod-panel .bd .c-bd{ .mod-panel .panel-right .c-bd{
height: auto; height: auto;
} }
.mod-panel textarea{ .mod-panel textarea{
@ -821,7 +869,7 @@ a:hover{
height: 80px; height: 80px;
box-sizing: border-box; box-sizing: border-box;
} }
.mod-panel .bd p span{ .mod-panel .panel-right p span{
float: left; float: left;
width: 50%; width: 50%;
text-align: center; text-align: center;
@ -850,6 +898,15 @@ a:hover{
.mod-article{ .mod-article{
margin-bottom: 55px; margin-bottom: 55px;
} }
.mod-article .banner{
height: auto;
padding: 15px;
line-height: 20px;
font-size: 20px;
}
.mod-article .hd{
margin-top: 0;
}
.mod-article .bd{ .mod-article .bd{
padding: 15px 0; padding: 15px 0;
} }
@ -892,18 +949,20 @@ a:hover{
} }
@media screen and (max-width: 640px) { @media screen and (max-width: 640px) {
.mod-panel .inner{ .mod-panel .panel-right .c-hd{
padding: 10px 0; margin-bottom: 4px;
} }
.mod-panel .bd .c-bd{ .mod-panel .panel-right .c-hd li a{
font-size: 14px;
}
.mod-panel .panel-right .c-hd li.active a{
font-size: 16px;
}
.mod-panel .panel-right .c-bd{
padding: 15px 10px; padding: 15px 10px;
} }
.mod-panel .panel-right .c-hd li.active a::after{
.mod-banner .bd{ height: 4px;
height: auto;
padding: 15px;
line-height: 20px;
font-size: 20px;
} }
.mod-intro .hd{ .mod-intro .hd{

View File

@ -26,21 +26,8 @@
</script> </script>
</head> </head>
<body> <body>
<div class="wrapper"> <div class="scroll-container">
<div class="mod-bg"> <header>
<svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
<defs>
<path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"></path>
</defs>
<g class="parallax">
<use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.4)"></use>
<use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.6)"></use>
<use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.2)"></use>
<use xlink:href="#gentle-wave" x="48" y="7" fill="rgba(255,255,255,1)"></use>
</g>
</svg>
</div>
<div class="header">
<div class="mod-head"> <div class="mod-head">
<div class="inner"> <div class="inner">
<div class="bd"> <div class="bd">
@ -57,229 +44,246 @@
</div> </div>
</div> </div>
</div> </div>
</div> </header>
<div class="container"> <section class="scroll-item">
<div class="mod-panel"> <div class="mod-bg">
<svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
<defs>
<path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"></path>
</defs>
<g class="parallax">
<use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.4)"></use>
<use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.6)"></use>
<use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.2)"></use>
<use xlink:href="#gentle-wave" x="48" y="7" fill="rgba(255,255,255,1)"></use>
</g>
</svg>
</div>
<div class="module mod-panel">
<div class="inner"> <div class="inner">
<div class="hd">
<h1><span class="name">中國</span><span>親戚關系計算器</span><span class="tag">開源算法</span></h1>
<p>逢年過節遇到三姑六婆,拒絕叫不出口的尷尬!輕鬆搞定親戚關系~</p>
<p>當前親戚稱呼大全已收錄約<b id="count">-</b>條親戚關系</p>
<p class="text-gray">始於2016年3月</p>
<div class="picture">
<img src="static/image/app.png" width="512" height="320" alt="親戚稱呼換算APP"/>
</div>
<div class="mobile">
<a class="btn" href="vue/" target="_blank">
<span class="name">訪問手機版</span>
<span class="qrcode">
<img src="static/image/qrcode.png"/>
</span>
</a>
</div>
</div>
<div class="bd"> <div class="bd">
<div class="c-hd"> <div class="panel-left">
<ul> <h1><span class="name">中國</span><span>親戚關系計算器</span><span class="tag">開源算法</span></h1>
<li class="active"><a href="javascript:;" rel="nofollow">關系找稱呼</a></li> <p>逢年過節遇到三姑六婆,拒絕叫不出口的尷尬!輕鬆搞定親戚關系~</p>
<li><a href="javascript:;" rel="nofollow">稱呼找關系</a></li> <p>當前親戚稱呼大全已收錄約<b id="count">-</b>條親戚關系</p>
<li><a href="javascript:;" rel="nofollow">兩者間稱呼</a></li> <p class="text-gray">始於2016年3月</p>
<li><a href="javascript:;" rel="nofollow">兩者的合稱</a></li> <div class="picture">
</ul> <img src="static/image/app.png" width="512" height="320" alt="親戚稱呼換算APP"/>
</div>
<div class="mobile">
<a class="btn" href="vue/" target="_blank">
<span class="name">訪問手機版</span>
<span class="qrcode">
<img src="static/image/qrcode.png"/>
</span>
</a>
</div>
</div> </div>
<div class="c-bd"> <div class="panel-right">
<div class="c-panel" style="display:block;"> <div class="c-hd">
<div class="row"> <ul>
<div class="field"> <li class="active"><a href="javascript:;" rel="nofollow">關系找稱呼</a></li>
區域模式: <li><a href="javascript:;" rel="nofollow">稱呼找關系</a></li>
<label for="field-0-1"> <li><a href="javascript:;" rel="nofollow">兩者間稱呼</a></li>
<input id="field-0-1" type="radio" name="mode" value="default" checked> <li><a href="javascript:;" rel="nofollow">兩者的合稱</a></li>
<span>默認</span> </ul>
</label>
<label for="field-0-2">
<input id="field-0-2" type="radio" name="mode" value="north">
<span>北方地區</span>
</label>
<label for="field-0-3">
<input id="field-0-3" type="radio" name="mode" value="guangdong">
<span>粵語慣用</span>
</label>
</div>
<div class="field">
我的性別:
<label for="field-1-1">
<input id="field-1-1" type="radio" name="sex" value="1" checked="checked">
<span></span>
</label>
<label for="field-1-2">
<input id="field-1-2" type="radio" name="sex" value="0">
<span></span>
</label>
</div>
<div class="field">
稱呼方式:
<label for="field-2-1">
<input id="field-2-1" type="radio" name="reverse" value="0" checked>
<span>我稱呼對方</span>
</label>
<label for="field-2-2">
<input id="field-2-2" type="radio" name="reverse" value="1">
<span>對方稱呼我</span>
</label>
</div>
</div>
<div class="row">
<textarea name="input" placeholder="稱呼之間用'的'字分開…"></textarea>
</div>
<div class="operation">
<div class="row">
<p>
<span>
<button class="btn btn-small" data-value="爸爸"></button>
<button class="btn btn-small" data-value="媽媽"></button>
</span>
<span>
<button class="btn btn-small" data-value="老公"></button>
<button class="btn btn-small" data-value="老婆"></button>
</span>
<span>
<button class="btn btn-small" data-value="哥哥"></button>
<button class="btn btn-small" data-value="弟弟"></button>
</span>
<span>
<button class="btn btn-small" data-value="姐姐"></button>
<button class="btn btn-small" data-value="妹妹"></button>
</span>
<span>
<button class="btn btn-small" data-value="兒子"></button>
<button class="btn btn-small" data-value="女兒"></button>
</span>
</p>
</div>
<div class="row">
<button class="btn btn-3 btn-orange">回退</button>
<button class="btn btn-3 btn-red">清空</button>
<button class="btn btn-3 btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
</div> </div>
<div class="c-panel"> <div class="c-bd">
<div class="row"> <div class="c-panel" style="display:block;">
<div class="field">
輸入稱呼:
<input class="input-text" type="text" name="input" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row"> <div class="row">
<button class="btn btn-red">清空</button> <div class="field">
<button class="btn btn-green">計算</button> 區域模式:
<label for="field-0-1">
<input id="field-0-1" type="radio" name="mode" value="default" checked>
<span>默認</span>
</label>
<label for="field-0-2">
<input id="field-0-2" type="radio" name="mode" value="north">
<span>北方地區</span>
</label>
<label for="field-0-3">
<input id="field-0-3" type="radio" name="mode" value="guangdong">
<span>粵語慣用</span>
</label>
</div>
<div class="field">
我的性別:
<label for="field-1-1">
<input id="field-1-1" type="radio" name="sex" value="1" checked="checked">
<span></span>
</label>
<label for="field-1-2">
<input id="field-1-2" type="radio" name="sex" value="0">
<span></span>
</label>
</div>
<div class="field">
稱呼方式:
<label for="field-2-1">
<input id="field-2-1" type="radio" name="reverse" value="0" checked>
<span>我稱呼對方</span>
</label>
<label for="field-2-2">
<input id="field-2-2" type="radio" name="reverse" value="1">
<span>對方稱呼我</span>
</label>
</div>
</div>
<div class="row">
<textarea name="input" placeholder="稱呼之間用'的'字分開…"></textarea>
</div>
<div class="operation">
<div class="row">
<p>
<span>
<button class="btn btn-small" data-value="爸爸"></button>
<button class="btn btn-small" data-value="媽媽"></button>
</span>
<span>
<button class="btn btn-small" data-value="老公"></button>
<button class="btn btn-small" data-value="老婆"></button>
</span>
<span>
<button class="btn btn-small" data-value="哥哥"></button>
<button class="btn btn-small" data-value="弟弟"></button>
</span>
<span>
<button class="btn btn-small" data-value="姐姐"></button>
<button class="btn btn-small" data-value="妹妹"></button>
</span>
<span>
<button class="btn btn-small" data-value="兒子"></button>
<button class="btn btn-small" data-value="女兒"></button>
</span>
</p>
</div>
<div class="row">
<button class="btn btn-3 btn-orange">回退</button>
<button class="btn btn-3 btn-red">清空</button>
<button class="btn btn-3 btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div> </div>
</div> </div>
<div class="row"> <div class="c-panel">
<p>計算結果:</p> <div class="row">
<p><textarea name="result" readonly></textarea></p> <div class="field">
</div> 輸入稱呼:
<div class="intro"> <input class="input-text" type="text" name="input" placeholder="輸入要查詢的稱呼"/>
<h3>應用場景</h3> </div>
<p class="q">七舅姥爺和我什麼關系?</p> </div>
<p class="q">三叔公是什麼親戚?</p> <div class="operation">
<p class="q">侄子和外甥的區別在哪裏?</p> <div class="row">
<p class="q">太外公和外太公有什麼不同?</p> <button class="btn btn-red">清空</button>
</div> <button class="btn btn-green">計算</button>
</div> </div>
<div class="c-panel"> </div>
<div class="row text-right"> <div class="row">
<label for="field-3-0"> <p>計算結果:</p>
<input id="field-3-0" type="checkbox" name="optimal" value="1" checked> <p><textarea name="result" readonly></textarea></p>
<span>最短關系</span> </div>
</label> <div class="intro">
</div> <h3>應用場景</h3>
<div class="row"> <p class="q">七舅姥爺和我什麼關系?</p>
<div class="field"> <p class="q">三叔公是什麼親戚?</p>
<input class="input-text" type="text" name="person" placeholder="輸入要查詢的稱呼"/> <p class="q">侄子和外甥的區別在哪裏?</p>
<p class="q">太外公和外太公有什麼不同?</p>
</div> </div>
</div> </div>
<div class="row"> <div class="c-panel">
<div class="field"> <div class="row text-right">
稱呼方式: <label for="field-3-0">
<label for="field-3-1"> <input id="field-3-0" type="checkbox" name="optimal" value="1" checked>
<input id="field-3-1" type="radio" name="reverse2" value="1" checked> <span>最短關系</span>
<span>前者稱呼後者</span>
</label>
<label for="field-3-2">
<input id="field-3-2" type="radio" name="reverse2" value="0">
<span>後者稱呼前者</span>
</label> </label>
</div> </div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row"> <div class="row">
<button class="btn btn-red">清空</button> <div class="field">
<button class="btn btn-green">計算</button> <input class="input-text" type="text" name="person" placeholder="輸入要查詢的稱呼"/>
</div>
</div> </div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>應用場景</h3>
<p class="q">外舅公是我媽的誰?</p>
<p class="q">我爸應該叫舅老爺什麼?</p>
</div>
</div>
<div class="c-panel">
<div class="row text-right">
<label for="field-4-0">
<input id="field-4-0" type="checkbox" name="optimal" value="1" checked>
<span>最短關系</span>
</label>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="person" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="row">
<div class="field" style="text-align:center;">
<span>+</span>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row"> <div class="row">
<button class="btn btn-red">清空</button> <div class="field">
<button class="btn btn-green">計算</button> 稱呼方式:
<label for="field-3-1">
<input id="field-3-1" type="radio" name="reverse2" value="1" checked>
<span>前者稱呼後者</span>
</label>
<label for="field-3-2">
<input id="field-3-2" type="radio" name="reverse2" value="0">
<span>後者稱呼前者</span>
</label>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>應用場景</h3>
<p class="q">外舅公是我媽的誰?</p>
<p class="q">我爸應該叫舅老爺什麼?</p>
</div> </div>
</div> </div>
<div class="row"> <div class="c-panel">
<p>計算結果:</p> <div class="row text-right">
<p><textarea name="result" readonly></textarea></p> <label for="field-4-0">
</div> <input id="field-4-0" type="checkbox" name="optimal" value="1" checked>
<div class="intro"> <span>最短關系</span>
<h3>應用場景</h3> </label>
<p class="q">奶奶和外婆之間什麼關系?</p> </div>
<p class="q">舅公和爺爺是什麼關系?</p> <div class="row">
<div class="field">
<input class="input-text" type="text" name="person" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="row">
<div class="field" style="text-align:center;">
<span>+</span>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>應用場景</h3>
<p class="q">奶奶和外婆之間什麼關系?</p>
<p class="q">舅公和爺爺是什麼關系?</p>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section>
<section class="scroll-item">
<div class="module mod-intro"> <div class="module mod-intro">
<div class="inner"> <div class="inner">
<div class="hd"><span>功能支持</span></div> <div class="hd"><span>功能支持</span></div>
@ -361,9 +365,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="mod-banner"> </section>
<section class="scroll-item">
<div class="module mod-article">
<div class="inner"> <div class="inner">
<div class="bd"> <div class="banner">
<span>外甥</span> <span>外甥</span>
<span>姑姑</span> <span>姑姑</span>
<span>岳父</span> <span>岳父</span>
@ -403,10 +409,6 @@
<span>孫子</span> <span>孫子</span>
<span>姑丈公</span> <span>姑丈公</span>
</div> </div>
</div>
</div>
<div class="module mod-article">
<div class="inner">
<div class="hd"><span>關於中國親戚稱呼</span></div> <div class="hd"><span>關於中國親戚稱呼</span></div>
<div class="bd"> <div class="bd">
<p>親屬是基於婚姻、血緣和法律擬制而形成的社會關系。親屬關系包括夫妻、父母、子女、兄弟姊妹、祖父母和外祖父母、孫子女和外孫子女、兒媳和公婆、女婿和岳父母、以及其他三代以內的旁系血親,如伯、叔、姑、舅、姨、侄子女、甥子女、堂兄弟姊妹、表兄弟姊妹、姨兄弟姊妹等。</p> <p>親屬是基於婚姻、血緣和法律擬制而形成的社會關系。親屬關系包括夫妻、父母、子女、兄弟姊妹、祖父母和外祖父母、孫子女和外孫子女、兒媳和公婆、女婿和岳父母、以及其他三代以內的旁系血親,如伯、叔、姑、舅、姨、侄子女、甥子女、堂兄弟姊妹、表兄弟姊妹、姨兄弟姊妹等。</p>
@ -416,6 +418,8 @@
</div> </div>
</div> </div>
</div> </div>
</section>
<section class="scroll-item">
<div class="module mod-copy"> <div class="module mod-copy">
<div class="inner"> <div class="inner">
<div class="hd"><span>算法開源</span></div> <div class="hd"><span>算法開源</span></div>
@ -433,6 +437,8 @@
</div> </div>
</div> </div>
</div> </div>
</section>
<section class="scroll-item">
<div class="module mod-app"> <div class="module mod-app">
<div class="inner"> <div class="inner">
<div class="hd"><span>他們都在使用</span></div> <div class="hd"><span>他們都在使用</span></div>
@ -466,7 +472,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="mod-foot"> <div class="module mod-foot">
<div class="inner"> <div class="inner">
<div class="hd"><span>😳支持我的開源</span></div> <div class="hd"><span>😳支持我的開源</span></div>
<div class="bd"> <div class="bd">
@ -503,7 +509,9 @@
</ul> </ul>
</div> </div>
</div> </div>
</div> <script type="text/javascript" src="https://passer-by.com/public/script/projects.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/stat.js"></script>
</section>
</div> </div>
<script type="text/javascript" src="dist/lang/relationship.zh-HK.min.js"></script> <script type="text/javascript" src="dist/lang/relationship.zh-HK.min.js"></script>
<script type="text/javascript" src="dist/lang/relationship-mode.zh-HK.min.js"></script> <script type="text/javascript" src="dist/lang/relationship-mode.zh-HK.min.js"></script>
@ -764,7 +772,5 @@
})(); })();
</script> </script>
<script async defer src="https://cdn.bootcdn.net/ajax/libs/github-buttons/2.21.1/buttons.min.js"></script> <script async defer src="https://cdn.bootcdn.net/ajax/libs/github-buttons/2.21.1/buttons.min.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/projects.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/stat.js"></script>
</body> </body>
</html> </html>