1
0
mirror of https://github.com/hotomoe/hotomoe synced 2024-12-16 23:58:14 +09:00
hotomoe/src/client/app/common/scripts/parse-search-query.ts

54 lines
1.2 KiB
TypeScript
Raw Normal View History

2017-12-21 04:01:44 +09:00
export default function(qs: string) {
const q = {
text: ''
};
qs.split(' ').forEach(x => {
if (/^([a-z_]+?):(.+?)$/.test(x)) {
const [key, value] = x.split(':');
switch (key) {
case 'user':
2018-03-29 14:48:47 +09:00
q['includeUserUsernames'] = value.split(',');
2017-12-23 07:21:52 +09:00
break;
case 'exclude_user':
2018-03-29 14:48:47 +09:00
q['excludeUserUsernames'] = value.split(',');
2017-12-21 04:01:44 +09:00
break;
2017-12-21 06:31:56 +09:00
case 'follow':
q['following'] = value == 'null' ? null : value == 'true';
break;
2017-12-21 04:01:44 +09:00
case 'reply':
2017-12-21 07:35:16 +09:00
q['reply'] = value == 'null' ? null : value == 'true';
break;
case 'repost':
q['repost'] = value == 'null' ? null : value == 'true';
2017-12-21 04:01:44 +09:00
break;
case 'media':
2017-12-21 07:35:16 +09:00
q['media'] = value == 'null' ? null : value == 'true';
2017-12-21 04:01:44 +09:00
break;
2017-12-21 07:57:31 +09:00
case 'poll':
q['poll'] = value == 'null' ? null : value == 'true';
break;
2017-12-21 04:01:44 +09:00
case 'until':
case 'since':
// YYYY-MM-DD
if (/^[0-9]+\-[0-9]+\-[0-9]+$/) {
const [yyyy, mm, dd] = value.split('-');
q[`${key}_date`] = (new Date(parseInt(yyyy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10))).getTime();
}
break;
default:
q[key] = value;
break;
}
} else {
q.text += x + ' ';
}
});
if (q.text) {
q.text = q.text.trim();
}
return q;
}