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