优化link标签

This commit is contained in:
xaoxuu 2021-11-19 20:25:05 +08:00
parent c0e2c4364a
commit baf6952254
2 changed files with 79 additions and 23 deletions

View File

@ -1,36 +1,59 @@
/** /**
* link.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/ * link.js v1.1 | https://github.com/xaoxuu/hexo-theme-stellar/
* 格式与官方标签插件一致使用空格分隔中括号内的是可选参数中括号不需要写出来 * 格式与官方标签插件一致使用空格分隔中括号内的是可选参数中括号不需要写出来
* *
* {% link url title [description] [img:src] %} * {% link url title [description] [icon:src] %}
*/ */
'use strict'; 'use strict';
hexo.extend.tag.register('link', function(args) { hexo.extend.tag.register('link', function(args) {
args = hexo.args.map(args, ['img'], ['url', 'title', 'description']); args = hexo.args.map(args, ['icon'], ['url', 'title', 'description']);
var el = ''; var el = '';
el += '<div class="tag-plugin link dis-select">'; el += '<div class="tag-plugin link dis-select">';
el += '<a class="link-card" title="' + args.title + '" href="' + args.url + '"'; el += '<a class="link-card' + (args.description ? ' rich' : ' plain') + '" title="' + args.title + '" href="' + args.url + '"';
if (args.url.includes('://')) { if (args.url.includes('://')) {
el += ' target="_blank" rel="external nofollow noopener noreferrer"'; el += ' target="_blank" rel="external nofollow noopener noreferrer"';
} }
el += '>'; el += '>';
// left
el += '<div class="left">';
el += '<span class="title fs14">' + args.title + '</span><span class="url fs12">' + (args.description || args.url) + '</span>';
el += '</div>';
// right function loadIcon() {
el += '<div class="right">'; var el = '';
if (hexo.theme.config.plugins.lazyload && hexo.theme.config.plugins.lazyload.enable) { if (hexo.theme.config.plugins.lazyload && hexo.theme.config.plugins.lazyload.enable) {
el += '<div class="lazy img" data-bg="' + (args.img || hexo.theme.config.default.link) + '"></div>'; el += '<div class="lazy img" data-bg="' + (args.icon || hexo.theme.config.default.link) + '"></div>';
} else { } else {
el += '<div class="lazy img" style="background-image:url(&quot;' + (args.img || hexo.theme.config.default.link) + '&quot;)"></div>'; el += '<div class="lazy img" style="background-image:url(&quot;' + (args.icon || hexo.theme.config.default.link) + '&quot;)"></div>';
}
return el;
}
function loadTitle() {
return '<span class="title fs14">' + args.title + '</span>';
}
function loadDesc() {
return '<span class="url fs12">' + (args.description || args.url) + '</span>';
} }
if (args.description) {
// top
el += '<div class="top">';
el += loadIcon();
el += '<span class="url fs12">' + args.url + '</span>';
el += '</div>'; el += '</div>';
// bottom
el += '<div class="bottom">';
el += loadTitle() + loadDesc();
el += '</div>';
} else {
// left
el += '<div class="left">';
el += loadTitle() + loadDesc();
el += '</div>';
// right
el += '<div class="right">';
el += loadIcon();
el += '</div>';
}
// end // end
el += '</a></div>'; el += '</a></div>';

View File

@ -1,5 +1,5 @@
.md .tag-plugin.link .md .tag-plugin.link
max-width: 360px max-width: 400px
margin: 1em auto margin: 1em auto
display: flex display: flex
justify-content: center justify-content: center
@ -24,26 +24,59 @@
box-shadow: $boxshadow-card-float box-shadow: $boxshadow-card-float
transform: translateY(-1px) transform: translateY(-1px)
.md .link-card.plain
flex-direction: row
.md .link-card.rich
flex-direction: column
align-items: flex-start
width: 400px
.md .link-card .md .link-card
div.left,div.right > div
pointer-events: none pointer-events: none
div.right >.top
display: flex
margin: .75rem 1rem .25rem
overflow: hidden
max-width: 'calc(100% - %s * 2)' % 1rem
align-items: center
.img
line-height: 0
height: 16px
width: 20px
margin-right: 4px
background-repeat: no-repeat
background-size: contain
background-position: left center
.url
opacity: .75
span
txt-ellipsis()
max-width: 100%
>.bottom
margin: 0 1rem .75rem 1rem
>.right
width: 2.5rem width: 2.5rem
height: 2.5rem height: 2.5rem
margin: 0.75rem margin: .75rem
overflow: hidden overflow: hidden
flex-shrink: 0 flex-shrink: 0
div.left >.left
overflow: hidden overflow: hidden
margin-left: 1rem margin: .5rem 0 .5rem 1rem
.url
flex-shrink: 0
txt-ellipsis()
span span
margin: 0 margin: 0
display: block display: block
txt-ellipsis()
span.title span.title
font-weight: 500 font-weight: 500
color: var(--text-p1) color: var(--text-p1)
line-height: 1.2
margin: 4px 0
span.url span.url
flex-shrink: 0
color: var(--text-p3) color: var(--text-p3)
line-height: 1.4
margin: 2px 0