From 8af851f5405c68a8329fbfff66779f92d35d77dc Mon Sep 17 00:00:00 2001 From: Seaton Jiang Date: Tue, 18 May 2021 10:13:56 +0800 Subject: [PATCH] feat: add sticky sidebar (#324) --- assets/js/kratos.js | 9 +++++++++ assets/js/kratos.min.js | 2 +- assets/js/theia-sticky-sidebar.min.js | 1 + inc/theme-core.php | 6 ++++-- inc/theme-options.php | 10 +++++++++- index.php | 4 ++-- page.php | 4 ++-- single.php | 4 ++-- 8 files changed, 30 insertions(+), 10 deletions(-) create mode 100755 assets/js/theia-sticky-sidebar.min.js diff --git a/assets/js/kratos.js b/assets/js/kratos.js index 1e37351..c573448 100644 --- a/assets/js/kratos.js +++ b/assets/js/kratos.js @@ -168,6 +168,12 @@ }); }; + var siderbarConfig = function () { + $(".sticky-sidebar").theiaStickySidebar({ + additionalMarginTop: 25, + }); + }; + var consoleConfig = function () { console.log( "\n Kratos v" + @@ -187,6 +193,9 @@ postlikeConfig(); donateConfig(); consoleConfig(); + if (kratos.sticky) { + siderbarConfig(); + } }); })(); diff --git a/assets/js/kratos.min.js b/assets/js/kratos.min.js index 1b3a0a4..b4beb52 100644 --- a/assets/js/kratos.min.js +++ b/assets/js/kratos.min.js @@ -1 +1 @@ -function grin (t) { var o; if (t = " " + t + " ", !document.getElementById("comment") || "textarea" != document.getElementById("comment").type) return !1; if (o = document.getElementById("comment"), document.selection) o.focus(), sel = document.selection.createRange(), sel.text = t, o.focus(); else if (o.selectionStart || "0" == o.selectionStart) { var e = o.selectionStart, a = o.selectionEnd, n = a; o.value = o.value.substring(0, e) + t + o.value.substring(a, o.value.length), n += t.length, o.focus(), o.selectionStart = n, o.selectionEnd = n } else o.value += t, o.focus() } (function () { "use strict"; var t = "3.2.9", o = function () { $("#navbutton").on("click", function () { $(".navbar-toggler").toggleClass("nav-close") }) }, e = function () { $(function () { $('[data-toggle="tooltip"]').tooltip() }) }, a = function () { $(window).on("load", function () { var t = $(window); t.scrollTop() > 200 ? $(".gotop").addClass("active") : $(".gotop").removeClass("active"), t.scroll(function () { t.scrollTop() > 200 ? $(".gotop").addClass("active") : $(".gotop").removeClass("active") }) }), $(".gotop").on("click", function (t) { return t.preventDefault(), $("html, body").animate({ scrollTop: $("html").offset().top }, 500), !1 }) }, n = function () { $(".search").on("click", function (t) { $(".search-form").animate({ width: "200px" }, 200), $(".search-form input").css("display", "block"), $(document).one("click", function () { $(".search-form").animate({ width: "0" }, 100), $(".search-form input").hide() }), t.stopPropagation() }), $(".search-form").on("click", function (t) { t.stopPropagation() }) }, c = function () { $(".wechat").mouseout(function () { $(".wechat-pic")[0].style.display = "none" }), $(".wechat").mouseover(function () { $(".wechat-pic")[0].style.display = "block" }) }, s = function () { $("#addsmile").on("click", function (t) { return $(".smile").toggleClass("open"), $(document).one("click", function () { $(".smile").toggleClass("open") }), t.stopPropagation(), !1 }) }, i = function () { $.fn.postLike = function () { if ($(this).hasClass("done")) return layer.msg(kratos.repeat, function () { }), !1; $(this).addClass("done"), layer.msg(kratos.thanks); var t = $(this).data("id"), o = $(this).data("action"), e = { action: "love", um_id: t, um_action: o }; return $.post(kratos.site + "/wp-admin/admin-ajax.php", e, function (t) { }), !1 }, $(document).on("click", ".btn-thumbs", function () { $(this).postLike() }) }, l = function () { $("#donate").on("click", function () { layer.open({ type: 1, area: ["300px", "370px"], title: kratos.donate, resize: !1, scrollbar: !1, content: '' }), $(".choose-pay input[type='radio']").click(function () { var t = $(this).attr("id"); "alipay" == t && ($(".qr-pay #alipay_qr").removeClass("d-none"), $(".qr-pay #wechat_qr").addClass("d-none")), "wechatpay" == t && ($(".qr-pay #alipay_qr").addClass("d-none"), $(".qr-pay #wechat_qr").removeClass("d-none")) }) }) }, r = function () { $(document).on("click", ".acheader", function (t) { var o = $(this); o.closest(".accordion").find(".contents").slideToggle(300), o.closest(".accordion").hasClass("active") ? o.closest(".accordion").removeClass("active") : o.closest(".accordion").addClass("active"), t.preventDefault() }) }, d = function () { console.log("\n Kratos v" + t + "\n\n https://github.com/vtrois/kratos \n\n") }; $(function () { r(), o(), e(), a(), n(), c(), s(), i(), l(), d() }) })() \ No newline at end of file +function grin(a){var b,c,d,e;return a=" "+a+" ",document.getElementById("comment")&&"textarea"==document.getElementById("comment").type?(b=document.getElementById("comment"),document.selection?(b.focus(),sel=document.selection.createRange(),sel.text=a,b.focus()):b.selectionStart||"0"==b.selectionStart?(c=b.selectionStart,d=b.selectionEnd,e=d,b.value=b.value.substring(0,c)+a+b.value.substring(d,b.value.length),e+=a.length,b.focus(),b.selectionStart=e,b.selectionEnd=e):(b.value+=a,b.focus()),void 0):!1}!function(){"use strict";var a="3.2.9",b=function(){$("#navbutton").on("click",function(){$(".navbar-toggler").toggleClass("nav-close")})},c=function(){$(function(){$('[data-toggle="tooltip"]').tooltip()})},d=function(){$(window).on("load",function(){var a=$(window);a.scrollTop()>200?$(".gotop").addClass("active"):$(".gotop").removeClass("active"),a.scroll(function(){a.scrollTop()>200?$(".gotop").addClass("active"):$(".gotop").removeClass("active")})}),$(".gotop").on("click",function(a){return a.preventDefault(),$("html, body").animate({scrollTop:$("html").offset().top},500),!1})},e=function(){$(".search").on("click",function(a){$(".search-form").animate({width:"200px"},200),$(".search-form input").css("display","block"),$(document).one("click",function(){$(".search-form").animate({width:"0"},100),$(".search-form input").hide()}),a.stopPropagation()}),$(".search-form").on("click",function(a){a.stopPropagation()})},f=function(){$(".wechat").mouseout(function(){$(".wechat-pic")[0].style.display="none"}),$(".wechat").mouseover(function(){$(".wechat-pic")[0].style.display="block"})},g=function(){$("#addsmile").on("click",function(a){return $(".smile").toggleClass("open"),$(document).one("click",function(){$(".smile").toggleClass("open")}),a.stopPropagation(),!1})},h=function(){$.fn.postLike=function(){var a,b,c;return $(this).hasClass("done")?(layer.msg(kratos.repeat,function(){}),!1):($(this).addClass("done"),layer.msg(kratos.thanks),a=$(this).data("id"),b=$(this).data("action"),c={action:"love",um_id:a,um_action:b},$.post(kratos.site+"/wp-admin/admin-ajax.php",c,function(){}),!1)},$(document).on("click",".btn-thumbs",function(){$(this).postLike()})},i=function(){$("#donate").on("click",function(){layer.open({type:1,area:["300px","370px"],title:kratos.donate,resize:!1,scrollbar:!1,content:''}),$(".choose-pay input[type='radio']").click(function(){var a=$(this).attr("id");"alipay"==a&&($(".qr-pay #alipay_qr").removeClass("d-none"),$(".qr-pay #wechat_qr").addClass("d-none")),"wechatpay"==a&&($(".qr-pay #alipay_qr").addClass("d-none"),$(".qr-pay #wechat_qr").removeClass("d-none"))})})},j=function(){$(document).on("click",".acheader",function(a){var b=$(this);b.closest(".accordion").find(".contents").slideToggle(300),b.closest(".accordion").hasClass("active")?b.closest(".accordion").removeClass("active"):b.closest(".accordion").addClass("active"),a.preventDefault()})},k=function(){$(".sticky-sidebar").theiaStickySidebar({additionalMarginTop:25})},l=function(){console.log("\n Kratos v"+a+"\n\n https://github.com/vtrois/kratos \n\n")};$(function(){j(),b(),c(),d(),e(),f(),g(),h(),i(),l(),kratos.sticky&&k()})}(); \ No newline at end of file diff --git a/assets/js/theia-sticky-sidebar.min.js b/assets/js/theia-sticky-sidebar.min.js new file mode 100755 index 0000000..7bcdd11 --- /dev/null +++ b/assets/js/theia-sticky-sidebar.min.js @@ -0,0 +1 @@ +!function(i){i.fn.theiaStickySidebar=function(t){function e(t,e){var a=o(t,e);a||(console.log("TSS: Body width smaller than options.minWidth. Init is delayed."),i(document).on("scroll."+t.namespace,function(t,e){return function(a){var n=o(t,e);n&&i(this).unbind(a)}}(t,e)),i(window).on("resize."+t.namespace,function(t,e){return function(a){var n=o(t,e);n&&i(this).unbind(a)}}(t,e)))}function o(t,e){return t.initialized===!0||!(i("body").width().theiaStickySidebar:after {content: ""; display: table; clear: both;}')),e.each(function(){function e(){a.fixedScrollTop=0,a.sidebar.css({"min-height":"1px"}),a.stickySidebar.css({position:"static",width:"",transform:"none"})}function o(t){var e=t.height();return t.children().each(function(){e=Math.max(e,i(this).height())}),e}var a={};if(a.sidebar=i(this),a.options=t||{},a.container=i(a.options.containerSelector),0==a.container.length&&(a.container=a.sidebar.parent()),a.sidebar.parents().css("-webkit-transform","none"),a.sidebar.css({position:a.options.defaultPosition,overflow:"visible","-webkit-box-sizing":"border-box","-moz-box-sizing":"border-box","box-sizing":"border-box"}),a.stickySidebar=a.sidebar.find(".theiaStickySidebar"),0==a.stickySidebar.length){var s=/(?:text|application)\/(?:x-)?(?:javascript|ecmascript)/i;a.sidebar.find("script").filter(function(i,t){return 0===t.type.length||t.type.match(s)}).remove(),a.stickySidebar=i("
").addClass("theiaStickySidebar").append(a.sidebar.children()),a.sidebar.append(a.stickySidebar)}a.marginBottom=parseInt(a.sidebar.css("margin-bottom")),a.paddingTop=parseInt(a.sidebar.css("padding-top")),a.paddingBottom=parseInt(a.sidebar.css("padding-bottom"));var r=a.stickySidebar.offset().top,d=a.stickySidebar.outerHeight();a.stickySidebar.css("padding-top",1),a.stickySidebar.css("padding-bottom",1),r-=a.stickySidebar.offset().top,d=a.stickySidebar.outerHeight()-d-r,0==r?(a.stickySidebar.css("padding-top",0),a.stickySidebarPaddingTop=0):a.stickySidebarPaddingTop=1,0==d?(a.stickySidebar.css("padding-bottom",0),a.stickySidebarPaddingBottom=0):a.stickySidebarPaddingBottom=1,a.previousScrollTop=null,a.fixedScrollTop=0,e(),a.onScroll=function(a){if(a.stickySidebar.is(":visible")){if(i("body").width()a.container.width())return void e()}var r=i(document).scrollTop(),d="static";if(r>=a.sidebar.offset().top+(a.paddingTop-a.options.additionalMarginTop)){var c,p=a.paddingTop+t.additionalMarginTop,b=a.paddingBottom+a.marginBottom+t.additionalMarginBottom,l=a.sidebar.offset().top,f=a.sidebar.offset().top+o(a.container),h=0+t.additionalMarginTop,g=a.stickySidebar.outerHeight()+p+b0?Math.min(y,h):Math.max(y,c-a.stickySidebar.outerHeight()),y=Math.max(y,u),y=Math.min(y,S-a.stickySidebar.outerHeight());var k=a.container.height()==a.stickySidebar.outerHeight();d=(k||y!=h)&&(k||y!=c-a.stickySidebar.outerHeight())?r+y-a.sidebar.offset().top-a.paddingTop<=t.additionalMarginTop?"static":"absolute":"fixed"}if("fixed"==d){var v=i(document).scrollLeft();a.stickySidebar.css({position:"fixed",width:n(a.stickySidebar)+"px",transform:"translateY("+y+"px)",left:a.sidebar.offset().left+parseInt(a.sidebar.css("padding-left"))-v+"px",top:"0px"})}else if("absolute"==d){var x={};"absolute"!=a.stickySidebar.css("position")&&(x.position="absolute",x.transform="translateY("+(r+y-a.sidebar.offset().top-a.stickySidebarPaddingTop-a.stickySidebarPaddingBottom)+"px)",x.top="0px"),x.width=n(a.stickySidebar)+"px",x.left="",a.stickySidebar.css(x)}else"static"==d&&e();"static"!=d&&1==a.options.updateSidebarHeight&&a.sidebar.css({"min-height":a.stickySidebar.outerHeight()+a.stickySidebar.offset().top-a.sidebar.offset().top+a.paddingBottom}),a.previousScrollTop=r}},a.onScroll(a),i(document).on("scroll."+a.options.namespace,function(i){return function(){i.onScroll(i)}}(a)),i(window).on("resize."+a.options.namespace,function(i){return function(){i.stickySidebar.css({position:"static"}),i.onScroll(i)}}(a)),"undefined"!=typeof ResizeSensor&&new ResizeSensor(a.stickySidebar[0],function(i){return function(){i.onScroll(i)}}(a))})}function n(i){var t;try{t=i[0].getBoundingClientRect().width}catch(i){}return"undefined"==typeof t&&(t=i.width()),t}var s={containerSelector:"",additionalMarginTop:0,additionalMarginBottom:0,updateSidebarHeight:!0,minWidth:0,disableOnResponsiveLayouts:!0,sidebarBehavior:"modern",defaultPosition:"relative",namespace:"TSS"};return t=i.extend(s,t),t.additionalMarginTop=parseInt(t.additionalMarginTop)||0,t.additionalMarginBottom=parseInt(t.additionalMarginBottom)||0,e(t,this),this}}(jQuery); diff --git a/inc/theme-core.php b/inc/theme-core.php index 2507b66..91ade40 100644 --- a/inc/theme-core.php +++ b/inc/theme-core.php @@ -3,7 +3,7 @@ * 核心函数 * @author Seaton Jiang * @license MIT License - * @version 2021.03.11 + * @version 2021.05.18 */ if (kratos_option('g_cdn', false)) { @@ -73,6 +73,7 @@ function theme_autoload() wp_enqueue_script('jquery', ASSET_PATH . '/assets/js/jquery.min.js', array(), '3.4.1', false); wp_enqueue_script('bootstrap-bundle', ASSET_PATH . '/assets/js/bootstrap.bundle.min.js', array(), '4.5.0', true); wp_enqueue_script('layer', ASSET_PATH . '/assets/js/layer.min.js', array(), '3.1.1', true); + wp_enqueue_script('sticky', ASSET_PATH . '/assets/js/theia-sticky-sidebar.min.js', array(), '1.5.0', true); wp_enqueue_script('kratos', ASSET_PATH . '/assets/js/kratos.min.js', array(), THEME_VERSION, true); wp_enqueue_script('custom', get_template_directory_uri() . '/custom/custom.js', array(), THEME_VERSION, true); @@ -84,7 +85,8 @@ function theme_autoload() 'repeat' => __('您已经赞过了', 'kratos'), 'thanks' => __('感谢您的支持', 'kratos'), 'donate' => __('打赏作者', 'kratos'), - 'scan' => __('扫码支付', 'kratos'), + 'scan' => __('扫码支付', 'kratos'), + 'sticky' => kratos_option('g_sticky', false), ); wp_localize_script('kratos', 'kratos', $data); } diff --git a/inc/theme-options.php b/inc/theme-options.php index 5e869f3..d8f2afd 100644 --- a/inc/theme-options.php +++ b/inc/theme-options.php @@ -3,7 +3,7 @@ * 主题选项 * @author Seaton Jiang * @license MIT License - * @version 2021.04.15 + * @version 2021.05.18 */ function getrobots() @@ -111,6 +111,14 @@ function kratos_options() 'type' => 'checkbox', ); + $options[] = array( + 'name' => __('侧边栏随动', 'kratos'), + 'desc' => __('开启小工具侧边栏随动功能', 'kratos'), + 'std' => '0', + 'id' => 'g_sticky', + 'type' => 'checkbox', + ); + $options[] = array( 'name' => __('搜索增强', 'kratos'), 'desc' => __('仅查找文章标题,而不全文搜索(适用于文章数量较多的站点)', 'kratos'), diff --git a/index.php b/index.php index 708ede8..a518c5a 100644 --- a/index.php +++ b/index.php @@ -3,7 +3,7 @@ * 首页模板 * @author Seaton Jiang * @license MIT License - * @version 2020.04.12 + * @version 2021.05.18 */ get_header(); ?> @@ -40,7 +40,7 @@ get_header(); ?> pagelist(); wp_reset_query(); ?>
- diff --git a/page.php b/page.php index a553844..b353eda 100644 --- a/page.php +++ b/page.php @@ -3,7 +3,7 @@ * 页面模板 * @author Seaton Jiang * @license MIT License - * @version 2020.03.14 + * @version 2021.05.18 */ get_header(); ?> @@ -51,7 +51,7 @@ get_header(); ?> - diff --git a/single.php b/single.php index 883d613..caaebb0 100644 --- a/single.php +++ b/single.php @@ -3,7 +3,7 @@ * 文章内容 * @author Seaton Jiang * @license MIT License - * @version 2021.03.20 + * @version 2021.05.18 */ get_header(); @@ -145,7 +145,7 @@ $select_col = $col_array[kratos_option('g_article_widgets', 'two_side')]; -