Merge branch 'master' of github.com:mumuy/relationship

# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
This commit is contained in:
mumuy 2022-03-18 10:04:55 +08:00
commit 95e5ed916e
5 changed files with 26 additions and 68 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

@ -10,7 +10,7 @@ gulp.task('mini', () => {
// .pipe(rename("zh-HK.html")) // .pipe(rename("zh-HK.html"))
// .pipe(gulp.dest("./")); // .pipe(gulp.dest("./"));
gulp.src('script/relationship.js') return gulp.src('script/relationship.js')
.pipe(uglify({ .pipe(uglify({
output:{ output:{
comments: function(node, comment){ comments: function(node, comment){

View File

@ -257,7 +257,7 @@
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript" src="dist/relationship.min.js"></script> <script type="text/javascript" src="script/relationship.js"></script>
<script type="text/javascript"> <script type="text/javascript">
// 获取数量 // 获取数量
document.getElementById('count').innerText = relationship.dataCount; document.getElementById('count').innerText = relationship.dataCount;

View File

@ -12,7 +12,7 @@
}else{ }else{
root.relationship = factory(); root.relationship = factory();
} }
}(typeof window !== 'undefined' ? window : this,function (){ }(this,function (){
/* /*
* 关系数据语法说明 * 关系数据语法说明
* 关系符 f:; m:; h:; w:; s:; d:; xb:兄弟; ob:; lb:; xs:姐妹; os:; ls: * 关系符 f:; m:; h:; w:; s:; d:; xb:兄弟; ob:; lb:; xs:姐妹; os:; ls:
@ -272,6 +272,8 @@
'[f,xs|m,xb],d':['姑舅姊妹','舅姑姊妹'], '[f,xs|m,xb],d':['姑舅姊妹','舅姑姊妹'],
'[f,xs|m,xb],d&o':['姑舅姐','姑舅姐姐'], '[f,xs|m,xb],d&o':['姑舅姐','姑舅姐姐'],
'[f,xs|m,xb],d&l':['姑舅妹','姑舅妹妹'], '[f,xs|m,xb],d&l':['姑舅妹','姑舅妹妹'],
'[f,xs|m,xb],s,s':['姑舅儿子'],
'[f,xs|m,xb],s,d':['姑舅女儿'],
'xb,[s|d]':['侄子女','侄子侄女'], 'xb,[s|d]':['侄子女','侄子侄女'],
'xs,[s|d]':['甥子女','外甥子女'], 'xs,[s|d]':['甥子女','外甥子女'],
'[w|s|d]':['妻儿'], '[w|s|d]':['妻儿'],
@ -509,8 +511,6 @@
'f,xb,s,s,w':['堂侄媳妇','堂侄妇','从父侄妇','叔伯侄妇'], 'f,xb,s,s,w':['堂侄媳妇','堂侄妇','从父侄妇','叔伯侄妇'],
'f,xb,d,s':['堂外甥','堂甥男','从父甥男','叔伯甥男'], 'f,xb,d,s':['堂外甥','堂甥男','从父甥男','叔伯甥男'],
'f,xb,d,s,w':['堂甥媳妇','堂甥妇','从父甥妇','叔伯甥妇'], 'f,xb,d,s,w':['堂甥媳妇','堂甥妇','从父甥妇','叔伯甥妇'],
'm,xb,d,s':['姑舅儿子'],
'm,xb,d,d':['姑舅女儿'],
// 子辈 // 子辈
's':['儿子','男儿','息男','闺男','囝囝','囝男','小子','男亲','长子','次子','幼子','儿','仔','子','阿仔','仔仔','x儿子','一世孙'], 's':['儿子','男儿','息男','闺男','囝囝','囝男','小子','男亲','长子','次子','幼子','儿','仔','子','阿仔','仔仔','x儿子','一世孙'],
's,w':['儿媳','儿媳妇','新妇','心抱','息妇','x儿媳'], 's,w':['儿媳','儿媳妇','新妇','心抱','息妇','x儿媳'],
@ -1170,30 +1170,12 @@
var _data = {}; // 最终数据 var _data = {}; // 最终数据
// 数组去重 // 数组去重
function unique(arr) { function unique(arr){
var result = [], hash = {}; var sameList = arr.filter(item=>item==item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''));
var item; return arr.filter(item=>{
for (var i = 0; (item = arr[i]) != null; i++) { var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,'');
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重 return sameList.indexOf(item)>-1||item!=temp&&sameList.indexOf(temp)==-1;
if (temp==item&&!hash[temp]){ }).filter((item,idx,arr) => arr.indexOf(item) === idx);
hash[item] = true;
}
}
for (var i = 0; (item = arr[i]) != null; i++) {
var temp = item.replace(/[ol](?=s|b)/,'x').replace(/&[ol]/,''); //对特殊语法标识相互包含的行为去重
if (temp!=item){
if(!hash[temp]){
if(result.indexOf(item)==-1){
result.push(item);
}
}
}else{
if(result.indexOf(item)==-1){
result.push(item);
}
}
}
return result;
} }
// 中文获取选择器 // 中文获取选择器
@ -1274,17 +1256,6 @@
} }
} }
}); });
// 同义词替换
if(!items.length){
for(var i in _data){
var value = _data[i];
keywords.forEach(function(r_name){
if(value.indexOf(r_name)>-1){
items.push(i);
}
});
}
}
if(!items.length){ if(!items.length){
isMatch = false; isMatch = false;
} }
@ -1316,7 +1287,7 @@
} }
// console.log('[selector]',selector); // console.log('[selector]',selector);
var getId = function(selector,sex){ var getId = function(selector,sex){
if(selector.indexOf(',1')==-1&&selector.indexOf(',0')==-1){ if(sex>-1&&selector.indexOf(',1')==-1&&selector.indexOf(',0')==-1){
selector = ','+sex+selector; selector = ','+sex+selector;
} }
if(selector.match(/,[w0],w|,[h1],h/)){ //同志关系去除 if(selector.match(/,[w0],w|,[h1],h/)){ //同志关系去除
@ -1325,7 +1296,6 @@
var s=''; var s='';
if(!hash[selector]){ if(!hash[selector]){
hash[selector] = true; hash[selector] = true;
var status = true;
do{ do{
s = selector; s = selector;
for(var i in _filter){ for(var i in _filter){
@ -1333,30 +1303,19 @@
// console.log('[filter]',item['exp'],selector); // console.log('[filter]',item['exp'],selector);
selector = selector.replace(item['exp'],item['str']); selector = selector.replace(item['exp'],item['str']);
if(selector.indexOf('#')>-1){ if(selector.indexOf('#')>-1){
var arr = selector.split('#'); selector.split('#').forEach(getId);
for(var j=0;j<arr.length;j++){ return false;
getId(arr[j]);
}
status=false;
break;
} }
} }
}while(s!=selector); }while(s!=selector);
if(status){ if(selector.match(/,[w0],w|,[h1],h/)){ //同志关系去除
if(selector.match(/,[w0],w|,[h1],h/)){ //同志关系去除 return false;
return false;
}
selector = selector.replace(/,[01]/,'').substr(1); //去前面逗号和性别信息
result.push(selector);
} }
selector = selector.replace(/,[01]/,'').substr(1); //去前面逗号和性别信息
result.push(selector);
} }
} }
if(sex<0){ getId(selector,sex);
getId(selector,1);
getId(selector,0);
}else{
getId(selector,sex);
}
return unique(result); return unique(result);
} }
@ -1402,9 +1361,8 @@
// 缩小访问查找 // 缩小访问查找
if(!items.length){ if(!items.length){
var l = id.replace(/x/g,'l'); var l = id.replace(/x/g,'l');
items = getData(l);
var o = id.replace(/x/g,'o'); var o = id.replace(/x/g,'o');
items = items.concat(getData(o)); items = items.concat(getData(l),getData(o));
} }
} }
return items; return items;
@ -1484,14 +1442,14 @@
if(my_sex<0){ if(my_sex<0){
var to_sex = -1; var to_sex = -1;
var from_sex = -1; var from_sex = -1;
if(from.match(/^,w/)||from.match(/^,1/)){ if(from.match(/^,[w1]/)){
from_sex = 1; from_sex = 1;
}else if(from.match(/^,h/)||from.match(/^,0/)){ }else if(from.match(/^,[h0]/)){
from_sex = 0; from_sex = 0;
} }
if(to.match(/^,w/)||to.match(/^,1/)){ if(to.match(/^,[w1]/)){
to_sex = 1; to_sex = 1;
}else if(to.match(/^,h/)||to.match(/^,0/)){ }else if(to.match(/^,[h0]/)){
to_sex = 0; to_sex = 0;
} }
if(from_sex==-1&&to_sex>-1){ if(from_sex==-1&&to_sex>-1){