updated 添加最短关系功能

This commit is contained in:
mumuy
2022-08-24 18:45:55 +08:00
parent 66be15f326
commit 15417fd1af
8 changed files with 65 additions and 17 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+16 -3
View File
@@ -167,6 +167,12 @@
</div>
</div>
<div class="c-panel">
<div class="row text-right">
<label for="field-3-0">
<input id="field-3-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="输入要查询的称呼"/>
@@ -207,6 +213,12 @@
</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="输入要查询的称呼"/>
@@ -650,6 +662,7 @@
var $panel = $module.querySelector('.c-panel:nth-child(3)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
var $optimal = $panel.querySelectorAll('input[name="optimal"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
@@ -658,7 +671,7 @@
var target = $target.value.trim();
if(person){
var reverse = !$reverse[1].checked;
var result = relationship({text:person,reverse:reverse,target:target});
var result = relationship({text:person,reverse:reverse,target:target,optimal:$optimal[0].checked});
if(result.length){
$result.value = result.join('\n');
}else{
@@ -686,7 +699,7 @@
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(4)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
var $optimal = $panel.querySelectorAll('input[name="optimal"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
@@ -694,7 +707,7 @@
var person = $person.value.trim();
var target = $target.value.trim();
if(person){
var result = relationship({text:person,target:target,type:'pair'});
var result = relationship({text:person,target:target,type:'pair',optimal:$optimal[0].checked});
if(result.length){
$result.value = result.join('\n');
}else{
+1
View File
@@ -38,6 +38,7 @@ var options = {
type:'default', //转换类型:'default'计算称谓,'chain'计算关系链,'pair'计算关系合称
reverse:false, //称呼方式:true对方称呼我,false我称呼对方
mode:'default' //模式选择:使用setMode方法定制不同地区模式,在此选择自定义模式
optimal:false, // 最短关系:计算两者之间的最短关系
};
```
+13 -1
View File
@@ -139,7 +139,19 @@ export function getSelectors(str){
};
// 合并选择器,查找两个对象之间的关系
export function mergeSelector(from,to,my_sex){
export function mergeSelector(options){
var my_sex = options['sex'];
var from = options['from'];
var to = options['to'];
if(from&&to&&options.optimal){
if(from.indexOf(to)==0){
from = from.replace(to,'');
to = '';
}else if(to.indexOf(from)==0){
to = to.replace(from,'');
from = '';
}
}
if(my_sex<0){
var to_sex = -1;
var from_sex = -1;
+13 -7
View File
@@ -15,12 +15,13 @@ var _data = getDataByMode(); // 最终数据
// 对外方法
var relationship = function (parameter){
var options = Object.assign({
text:'',
target:'',
sex:-1,
type:'default', // 'chain'表示关系链
reverse:false, // true表示反向
mode:'default', // 用户自定义模式
text:'', // 目标对象:目标对象的称谓汉字表达,称谓间用‘的’字分隔
target:'', // 相对对象:相对对象的称谓汉字表达,称谓间用‘的’字分隔,空表示自己
sex:-1, // 本人性别:0表示女性,1表示男性
type:'default', // 转换类型:'default'计算称谓,'chain'计算关系链,'pair'计算关系合称
reverse:false, // 称呼方式:true对方称呼我,false我称呼对方
mode:'default', // 模式选择:使用setMode方法定制不同地区模式,在此选择自定义模式
optimal:false // 最短关系:计算两者之间的最短关系
},parameter);
_data = getDataByMode(options.mode);
var from_selectors = getSelectors(options.text);
@@ -32,7 +33,12 @@ var relationship = function (parameter){
var result = []; //匹配结果
from_selectors.forEach(function(from){
to_selectors.forEach(function(to){
var data = mergeSelector(from,to,options.sex);
var data = mergeSelector({
from:from,
to:to,
sex:options.sex,
optimal:options.optimal
});
// console.log('[data]',from,to,data);
var ids = data?selector2id(data['selector'],data['sex']):null;
// console.log('[ids]',data['selector'],data['sex'],ids);
+3
View File
@@ -276,6 +276,9 @@ a:hover{
.mod-panel .bd .input-text-small{
width: 200px;
}
.mod-panel .bd .text-right{
text-align: right;
}
.mod-panel .bd .btn {
height: 32px;
min-width: 80px;
+17 -4
View File
@@ -31,7 +31,7 @@
<div class="mod-head">
<div class="bd">
<span class="language">
<a href="/relationship/">簡體</a>
<a href="/relationship/">简体</a>
<span>/</span>
<a class="active" href="zh-HK.html">繁體</a>
</span>
@@ -167,6 +167,12 @@
</div>
</div>
<div class="c-panel">
<div class="row text-right">
<label for="field-3-0">
<input id="field-3-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="輸入要查詢的稱呼"/>
@@ -207,6 +213,12 @@
</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="輸入要查詢的稱呼"/>
@@ -650,6 +662,7 @@
var $panel = $module.querySelector('.c-panel:nth-child(3)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
var $optimal = $panel.querySelectorAll('input[name="optimal"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
@@ -658,7 +671,7 @@
var target = $target.value.trim();
if(person){
var reverse = !$reverse[1].checked;
var result = relationship({text:person,reverse:reverse,target:target});
var result = relationship({text:person,reverse:reverse,target:target,optimal:$optimal[0].checked});
if(result.length){
$result.value = result.join('\n');
}else{
@@ -686,7 +699,7 @@
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(4)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
var $optimal = $panel.querySelectorAll('input[name="optimal"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
@@ -694,7 +707,7 @@
var person = $person.value.trim();
var target = $target.value.trim();
if(person){
var result = relationship({text:person,target:target,type:'pair'});
var result = relationship({text:person,target:target,type:'pair',optimal:$optimal[0].checked});
if(result.length){
$result.value = result.join('\n');
}else{