summaryrefslogtreecommitdiff
path: root/src/client/app/common
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/client/app/common
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/client/app/common')
-rw-r--r--src/client/app/common/scripts/note-mixin.ts12
-rw-r--r--src/client/app/common/views/components/url-preview.vue19
2 files changed, 23 insertions, 8 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;