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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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{

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, // 最短关系:计算两者之间的最短关系
}; };
``` ```

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;

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);

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;

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{