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>
|
</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{
|
||||||
|
@ -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, // 最短关系:计算两者之间的最短关系
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
21
zh-HK.html
21
zh-HK.html
@ -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{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user