updated 添加最短关系功能
This commit is contained in:
parent
66be15f326
commit
15417fd1af
2
dist/relationship.min.js
vendored
2
dist/relationship.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/relationship.zh-HK.min.js
vendored
2
dist/relationship.zh-HK.min.js
vendored
File diff suppressed because one or more lines are too long
19
index.html
19
index.html
@ -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{
|
||||
|
@ -38,6 +38,7 @@ var options = {
|
||||
type:'default', //转换类型:'default'计算称谓,'chain'计算关系链,'pair'计算关系合称
|
||||
reverse:false, //称呼方式:true对方称呼我,false我称呼对方
|
||||
mode:'default' //模式选择:使用setMode方法定制不同地区模式,在此选择自定义模式
|
||||
optimal:false, // 最短关系:计算两者之间的最短关系
|
||||
};
|
||||
```
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
21
zh-HK.html
21
zh-HK.html
@ -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{
|
||||
|
Loading…
x
Reference in New Issue
Block a user