summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2019-06-21 15:41:02 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-06-21 15:41:02 +0900
commit16b03fc157507261c54e5bb0eb030dcf6418a68c (patch)
treecda129a6a562bf156a6bfbed82a98bccaacff49a /src
parentFix bug (diff)
downloadsharkey-16b03fc157507261c54e5bb0eb030dcf6418a68c.tar.gz
sharkey-16b03fc157507261c54e5bb0eb030dcf6418a68c.tar.bz2
sharkey-16b03fc157507261c54e5bb0eb030dcf6418a68c.zip
Improve url-preview (#5077)
* url-previewリクエスト時にハッシュは除く * ハッシュだけ違うプレビューカードは表示しない * url-previewをユーザーロケールで出し分けるように * Fix code style
Diffstat (limited to 'src')
-rw-r--r--src/client/app/common/scripts/note-mixin.ts12
-rw-r--r--src/client/app/common/views/components/url-preview.vue19
-rw-r--r--src/server/web/url-preview.ts10
3 files changed, 29 insertions, 12 deletions
diff --git a/src/client/app/common/scripts/note-mixin.ts b/src/client/app/common/scripts/note-mixin.ts
index 4b454f8800..e649680070 100644
--- a/src/client/app/common/scripts/note-mixin.ts
+++ b/src/client/app/common/scripts/note-mixin.ts
@@ -83,9 +83,19 @@ export default (opts: Opts = {}) => ({
if (this.appearNote.text) {
const ast = parse(this.appearNote.text);
// TODO: 再帰的にURL要素がないか調べる
- return unique(ast
+ const urls = unique(ast
.filter(t => ((t.node.type == 'url' || t.node.type == 'link') && t.node.props.url && !t.node.props.silent))
.map(t => t.node.props.url));
+
+ // unique without hash
+ // [ http://a/#1, http://a/#2, http://b/#3 ] => [ http://a/#1, http://b/#3 ]
+ const removeHash = x => x.replace(/#[^#]*$/, '');
+
+ return urls.reduce((array, url) => {
+ const removed = removeHash(url);
+ if (!array.map(x => removeHash(x)).includes(removed)) array.push(url);
+ return array;
+ }, []);
} else {
return null;
}
diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index 9c61e46059..20fbcbb046 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -30,7 +30,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
-import { url as local } from '../../../config';
+import { url as local, lang } from '../../../config';
export default Vue.extend({
i18n: i18n('common/views/components/url-preview.vue'),
@@ -89,10 +89,10 @@ export default Vue.extend({
},
created() {
- const url = new URL(this.url);
+ const requestUrl = new URL(this.url);
- if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
- this.tweetUrl = url;
+ if (this.detail && requestUrl.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(requestUrl.pathname)) {
+ this.tweetUrl = requestUrl;
const twttr = (window as any).twttr || {};
const loadTweet = () => twttr.widgets.load(this.$refs.tweet);
@@ -113,10 +113,15 @@ export default Vue.extend({
return;
}
- if (url.hostname === 'music.youtube.com')
- url.hostname = 'youtube.com';
+ if (requestUrl.hostname === 'music.youtube.com') {
+ requestUrl.hostname = 'youtube.com';
+ }
+
+ const requestLang = (lang || 'ja-JP').replace('ja-KS', 'ja-JP');
+
+ requestUrl.hash = '';
- fetch(`/url?url=${encodeURIComponent(this.url)}`).then(res => {
+ fetch(`/url?url=${encodeURIComponent(requestUrl.href)}&lang=${requestLang}`).then(res => {
res.json().then(info => {
if (info.url == null) return;
this.title = info.title;
diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts
index e5b9ff6244..310cf88c02 100644
--- a/src/server/web/url-preview.ts
+++ b/src/server/web/url-preview.ts
@@ -12,18 +12,20 @@ module.exports = async (ctx: Koa.BaseContext) => {
const meta = await fetchMeta();
logger.info(meta.summalyProxy
- ? `(Proxy) Getting preview of ${ctx.query.url} ...`
- : `Getting preview of ${ctx.query.url} ...`);
+ ? `(Proxy) Getting preview of ${ctx.query.url}@${ctx.query.lang} ...`
+ : `Getting preview of ${ctx.query.url}@${ctx.query.lang} ...`);
try {
const summary = meta.summalyProxy ? await request.get({
url: meta.summalyProxy,
qs: {
- url: ctx.query.url
+ url: ctx.query.url,
+ lang: ctx.query.lang || 'ja-JP'
},
json: true
}) : await summaly(ctx.query.url, {
- followRedirects: false
+ followRedirects: false,
+ lang: ctx.query.lang || 'ja-JP'
});
logger.succ(`Got preview of ${ctx.query.url}: ${summary.title}`);