「MediaWiki:Gadget-shareLinks.js」の版間の差分
ナビゲーションに移動
検索に移動
細編集の要約なし |
(ハッシュタグ生成時、チルダと波ダッシュは同一視) |
||
(同じ利用者による、間の4版が非表示) | |||
9行目: | 9行目: | ||
const curidURL = 'https://'+FQDN+'/w/?curid='+mw.config.get( 'wgArticleId' ); | const curidURL = 'https://'+FQDN+'/w/?curid='+mw.config.get( 'wgArticleId' ); | ||
// see: https://github.com/twitter/twitter-text/blob/master/js/src/regexp/validHashtag.js | |||
const xHashTag = ( | |||
( | |||
pageTitle.replace( /\uff5e/g, '\u301c' ) | |||
.normalize( 'NFKC' ) | |||
.match( new RegExp( /(?:\p{L}|\p{M}|\p{Nd}|[_\u200c\u200d\ua67e\u05be\u05f3\u05f4\uff5e\u301c\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\xb7])+/, 'giu' ) ) || [] | |||
).join( '_' ) | |||
.match( new RegExp( /.*(\p{L}|\p{M}).*/, 'giu' ) ) || [] | |||
).join(); | |||
function getSocialShareLinkElm( href, imgAlt, imgSrc, imgSrcSet ) { | function getSocialShareLinkElm( href, imgAlt, imgSrc, imgSrcSet ) { | ||
29行目: | 39行目: | ||
const $XBtn = getSocialShareLinkElm( | const $XBtn = getSocialShareLinkElm( | ||
'http://twitter.com/share?url=' + curidURL + '&text=' + pageTitle + ' - 謎の百科事典もどき「Enpedia」&hashtags=謎の百科事典もどき,エンペディア,' + | 'http://twitter.com/share?url=' + curidURL + '&text=' + encodeURIComponent(pageTitle) + ' - 謎の百科事典もどき「Enpedia」&hashtags=謎の百科事典もどき,エンペディア' + (xHashTag ? ',' + xHashTag : ''), | ||
'Twitter logo.jpg', | 'Twitter logo.jpg', | ||
'/w/images/thumb/b/bc/Twitter_logo.jpg/30px-Twitter_logo.jpg', | '/w/images/thumb/b/bc/Twitter_logo.jpg/30px-Twitter_logo.jpg', |
2024-02-24T00:02:08時点における最新版
// 「記事」か「よみもの」のときだけ発火
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 || mw.config.get( 'wgNamespaceNumber' ) === 106 ) {
$(function (){
const pageTitle = mw.config.get( 'wgTitle' );
const FQDN = mw.config.get( 'wgServerName' );
// 例: https://enpedia.rxy.jp/wiki/日本語
const URL = ( 'https://'+FQDN+'/wiki/'+pageTitle ).replace( ' ', '%20' );
const curidURL = 'https://'+FQDN+'/w/?curid='+mw.config.get( 'wgArticleId' );
// see: https://github.com/twitter/twitter-text/blob/master/js/src/regexp/validHashtag.js
const xHashTag = (
(
pageTitle.replace( /\uff5e/g, '\u301c' )
.normalize( 'NFKC' )
.match( new RegExp( /(?:\p{L}|\p{M}|\p{Nd}|[_\u200c\u200d\ua67e\u05be\u05f3\u05f4\uff5e\u301c\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\xb7])+/, 'giu' ) ) || []
).join( '_' )
.match( new RegExp( /.*(\p{L}|\p{M}).*/, 'giu' ) ) || []
).join();
function getSocialShareLinkElm( href, imgAlt, imgSrc, imgSrcSet ) {
return $( '<div/>', { class: '_blank' } ).append(
$( '<a/>', {
href: href,
rel: 'nofollow'
} ).append(
$( '<img/>', {
alt: imgAlt,
src: imgSrc,
srcset: imgSrcSet,
decoding: 'async',
width:'30',
height:'30'
})
)
);
}
const $XBtn = getSocialShareLinkElm(
'http://twitter.com/share?url=' + curidURL + '&text=' + encodeURIComponent(pageTitle) + ' - 謎の百科事典もどき「Enpedia」&hashtags=謎の百科事典もどき,エンペディア' + (xHashTag ? ',' + xHashTag : ''),
'Twitter logo.jpg',
'/w/images/thumb/b/bc/Twitter_logo.jpg/30px-Twitter_logo.jpg',
'/w/images/thumb/b/bc/Twitter_logo.jpg/45px-Twitter_logo.jpg 1.5x, /w/images/thumb/b/bc/Twitter_logo.jpg/60px-Twitter_logo.jpg 2x'
);
const $FacebookBtn = getSocialShareLinkElm(
'https://www.facebook.com/sharer/sharer.php?u=' + URL,
'F icon.png',
'/w/images/thumb/2/2c/F_icon.png/30px-F_icon.png',
'/w/images/thumb/2/2c/F_icon.png/45px-F_icon.png 1.5x, /w/images/thumb/2/2c/F_icon.png/60px-F_icon.png 2x'
);
const $HatenaBtn = getSocialShareLinkElm(
'https://b.hatena.ne.jp/add?mode=confirm&url=' + URL,
'はてなブックマーク.png',
'/w/images/thumb/1/19/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF.png/30px-%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF.png',
'/w/images/thumb/1/19/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF.png/45px-%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF.png 1.5x, /w/images/thumb/1/19/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF.png/60px-%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF.png 2x'
);
const $LineBtn = getSocialShareLinkElm(
'https://lineit.line.me/share/ui?url=' + curidURL,
'LINE logo.svg',
'/w/images/thumb/4/41/LINE_logo.svg/30px-LINE_logo.svg.png',
'/w/images/thumb/4/41/LINE_logo.svg/45px-LINE_logo.svg.png 1.5x, /w/images/thumb/4/41/LINE_logo.svg/60px-LINE_logo.svg.png 2x'
);
const $shareBtns = $( '<div/>', { style: 'margin-left:auto' } ).append(
$( '<div/>', { style: 'display:flex; align-items:center; gap:5px' } ).append(
$( '<div/>', { text: '記事をシェア:' } ),
$XBtn,
$FacebookBtn,
$HatenaBtn,
$LineBtn
)
);
$('#siteSub').css({
'display': 'flex',
'flexWrap': 'wrap',
'alignItems': 'center',
'gap': '10px'
}).append($shareBtns);
});
}