From 7b031ca191a27289f67bf6d8802ce64f0b14872d Mon Sep 17 00:00:00 2001 From: CircleCrop <54088075+CircleCrop@users.noreply.github.com> Date: Mon, 15 May 2023 12:53:34 +0800 Subject: [PATCH 01/39] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E5=A4=9A=E8=A1=8C=E4=B8=8D=E8=83=BD=E5=B1=85?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/theme_plus.php | 2 +- style.css | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/inc/theme_plus.php b/inc/theme_plus.php index ca376b27..6bce9e3f 100644 --- a/inc/theme_plus.php +++ b/inc/theme_plus.php @@ -303,7 +303,7 @@ function the_headPattern(){ endwhile; endif; }elseif(is_page()){ $full_image_url = !empty($full_image_url) ? $full_image_url[0] : null; - $t .= the_title( '

', '

', false); + $t .= the_title( '

', '

', false); }elseif(is_archive()){ $full_image_url = z_taxonomy_image_url(); $des = category_description() ? category_description() : ''; // 描述 diff --git a/style.css b/style.css index 27f1533a..a43769bd 100644 --- a/style.css +++ b/style.css @@ -10788,3 +10788,18 @@ body.dark .entry-content code { .aplayer-lrc { pointer-events: none } + +@media (max-width:860px) { + .pattern-center header.pattern-header { + top: 60px; + display: table; + margin: 0 10%; + height: 200px; + } + .pattern-center header.pattern-header span { + display: table-cell; + vertical-align: middle; + text-align: center; + width: 80vw; + } +} \ No newline at end of file From 65c651fd8134c2093a3706cfd2315d0805eda3f0 Mon Sep 17 00:00:00 2001 From: Circle Crop Date: Sun, 11 Jun 2023 22:06:21 +0800 Subject: [PATCH 02/39] Update page-word.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 输出content --- page-word.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/page-word.php b/page-word.php index 4a65b886..a827fb9a 100644 --- a/page-word.php +++ b/page-word.php @@ -20,6 +20,9 @@ ); $shuoshuo_query = new WP_Query($args); ?> +
+ +
have_posts()) : ?>
' . + '' . + __("Previous Post",'sakurairo') . + '' . + '
' . + '

%title


' . + '
'; + + + $next_link_html = '
' . + '' . + __("Next Post",'sakurairo') . + '' . + '
' . + '

%title


' . + '
'; + ?> + - '.__("Next Post",'sakurairo').'

%title


', $in_same_term = false, $excluded_terms = $classify_display_id ) ?> + \ No newline at end of file From c3def04a05caa1656859e09baabba93caa19b3cc Mon Sep 17 00:00:00 2001 From: KanoChan Date: Wed, 21 Jun 2023 13:22:00 +0800 Subject: [PATCH 06/39] =?UTF-8?q?fix(=E8=AF=B4=E8=AF=B4=E6=A8=A1=E6=9D=BF)?= =?UTF-8?q?:=20=E8=AF=B4=E8=AF=B4=E5=86=85=E5=AE=B9=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在文章页面中,基于对标题跳转的辅助支持,在标题前加了一个伪元素,并在css中进行了样式定义。 上面的特性,并不适用于说说模板,因为说说不需要目录支持。 异常的样式是说说的标题前面有非预期的“空行”伪元素占位,如图:https://github.com/mirai-mamori/Sakurairo/assets/79365334/6f612ace-4de0-400f-8b62-cc4b0cac6e77 修正方式是对该伪元素进行隐藏,且只针对说说模板页面,对文章的标题跳转无影响。 https://github.com/mirai-mamori/Sakurairo/assets/79365334/5e1a1da9-777a-44af-aab6-7024e5422394 --- style.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/style.css b/style.css index a5c31ea4..65f52e89 100644 --- a/style.css +++ b/style.css @@ -5043,6 +5043,15 @@ input#wp-comment-cookies-consent { position: relative; } +.cbp_tmlabel .entry-content h1::before, +.cbp_tmlabel .entry-content h2::before, +.cbp_tmlabel .entry-content h3::before, +.cbp_tmlabel .entry-content h4::before, +.cbp_tmlabel .entry-content h5::before, +.cbp_tmlabel .entry-content h6::before { + display: none; +} + .cbp_tmtimeline:before { content: ''; position: absolute; From 2b78f55ee566df4d646378f471331835c1b3e3bc Mon Sep 17 00:00:00 2001 From: KanoChan Date: Wed, 21 Jun 2023 14:07:01 +0800 Subject: [PATCH 07/39] =?UTF-8?q?fix(=E8=AF=B4=E8=AF=B4=E6=A8=A1=E6=9D=BF)?= =?UTF-8?q?:=20=E5=BC=95=E7=94=A8=E5=8C=BA=E5=9D=97=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E6=BA=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题样式:https://github.com/mirai-mamori/Sakurairo/assets/79365334/6e7cbf2f-f496-4948-85e3-9a48265caf36 修复后样式:https://github.com/mirai-mamori/Sakurairo/assets/79365334/7ef4c9cd-f767-4d06-9d98-88f52ae30113 之前是在正文输出前加个

标签占位临时解决,现移除

标签,通过css来修正样式。 --- page-word.php | 1 - style.css | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/page-word.php b/page-word.php index a827fb9a..3a8d1445 100644 --- a/page-word.php +++ b/page-word.php @@ -34,7 +34,6 @@

-

diff --git a/style.css b/style.css index 65f52e89..539f56a0 100644 --- a/style.css +++ b/style.css @@ -5052,6 +5052,13 @@ input#wp-comment-cookies-consent { display: none; } +.cbp_tmlabel .entry-content blockquote { + margin: 28px 0 0 0; + padding: 30px 60px; + position: relative; + quotes: "" ""; +} + .cbp_tmtimeline:before { content: ''; position: absolute; From 431779428e0959848fb8fac1aca8b757794e5efe Mon Sep 17 00:00:00 2001 From: KanoChan Date: Wed, 21 Jun 2023 19:22:05 +0800 Subject: [PATCH 08/39] =?UTF-8?q?fix(=E8=AF=B4=E8=AF=B4=E6=A8=A1=E6=9D=BF)?= =?UTF-8?q?:=20=E6=8F=90=E7=A4=BA=E7=AE=AD=E5=A4=B4=E5=A4=9C=E9=97=B4?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=9C=AA=E9=81=B5=E5=BE=AA=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E9=A2=9C=E8=89=B2=E8=AE=BE=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正前:https://github.com/mirai-mamori/Sakurairo/assets/79365334/46c5af49-da04-4546-a6d1-5922e5ee2f3b 修正后:https://github.com/mirai-mamori/Sakurairo/assets/79365334/85ff2c7c-80c2-40a7-ad56-cee1181c3b8a 因为夜间模式下提示箭头与cbp_tmlabel的border冲突,只能将其移除。 --- style.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/style.css b/style.css index 539f56a0..b6175883 100644 --- a/style.css +++ b/style.css @@ -10614,6 +10614,10 @@ body.dark li .cbp_tmlabel { border: 1px solid #949494; } +body.dark li .cbp_tmlabel:after { + display: none; +} + body.dark .header-info, body.dark .header-shuo { color: #CCCCCC !important; From d1a9a2f6bc75c11a96457c4257234a418e11514d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sat, 24 Jun 2023 12:46:17 +0800 Subject: [PATCH 09/39] Daily Update --- opt/assets/js/main.min.js | 4 ++-- opt/assets/js/plugins.min.js | 2 +- opt/classes/setup.class.php | 2 +- opt/fields/code_editor/code_editor.php | 6 +++--- opt/option-framework.php | 2 +- style.css | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/opt/assets/js/main.min.js b/opt/assets/js/main.min.js index 2e2be0ab..7b5a52b0 100644 --- a/opt/assets/js/main.min.js +++ b/opt/assets/js/main.min.js @@ -1,2 +1,2 @@ -/* Codestar Framework | A Simple and Lightweight WordPress Option Framework - v2.2.9*/ -!function(S,_,b,y){"use strict";var j={funcs:{}};j.vars={onloaded:!1,$body:S("body"),$window:S(_),$document:S(b),$form_warning:null,is_confirm:!1,form_modified:!1,code_themes:[],is_rtl:S("body").hasClass("rtl")},j.helper={uid:function(e){return(e||"")+Math.random().toString(36).substr(2,9)},preg_quote:function(e){return(e+"").replace(/(\[|\])/g,"\\$1")},name_nested_replace:function(e,t){var n=new RegExp(j.helper.preg_quote(t+"[\\d+]"),"g");e.find(":radio").each(function(){(this.checked||this.orginal_checked)&&(this.orginal_checked=!0)}),e.each(function(e){S(this).find(":input").each(function(){this.name=this.name.replace(n,t+"["+e+"]"),this.orginal_checked&&(this.checked=!0)})})},debounce:function(i,s,c){var a;return function(){var e=this,t=arguments,n=c&&!a;clearTimeout(a),a=setTimeout(function(){a=null,c||i.apply(e,t)},s),n&&i.apply(e,t)}}},S.fn.csf_clone=function(){for(var e=S.fn.clone.apply(this,arguments),t=this.find("select").add(this.filter("select")),n=e.find("select").add(e.filter("select")),i=0;i .csf-field:not(.csf-depend-on)"),i=n.find("> .csf-title, .csf-search-tags");1"),S("#csf-codemirror-css").after(e),e.attr({rel:"stylesheet",id:"csf-codemirror-"+s.theme+"-css",href:s.cdnURL+"/theme/"+s.theme+".min.css",type:"text/css",media:"all"}),j.vars.code_themes.push(s.theme)),CodeMirror.modeURL=s.cdnURL+"/mode/%N/%N.min.js",CodeMirror.autoLoadMode(n,s.mode),n.on("change",function(e,t){i.val(n.getValue()).trigger("change")}),clearInterval(c))}))})},S.fn.csf_field_date=function(){return this.each(function(){var e=S(this),n=e.find("input"),i=e.find(".csf-date-settings").data("settings"),i=S.extend({},i,{showAnim:"",beforeShow:function(e,t){S(t.dpDiv).addClass("csf-datepicker-wrapper")},onClose:function(e,t){S(t.dpDiv).removeClass("csf-datepicker-wrapper")}});2===n.length&&(i=S.extend({},i,{onSelect:function(e){S(this),n.first();var t=n.first().attr("id")===S(this).attr("id")?"minDate":"maxDate",e=S.datepicker.parseDate(i.dateFormat,e);n.not(this).datepicker("option",t,e)}})),n.each(function(){var e=S(this);e.hasClass("hasDatepicker")&&e.removeAttr("id").removeClass("hasDatepicker"),e.datepicker(i)})})},S.fn.csf_field_datetime=function(){return this.each(function(){var e=S(this),i=e.find("input"),t=e.find(".csf-datetime-settings").data("settings"),t=S.extend({},t,{onReady:function(e,t,n){S(n.calendarContainer).addClass("csf-flatpickr")}});2===i.length&&(t=S.extend({},t,{onChange:function(e,t,n){"from"===S(n.element).data("type")?i.last().get(0)._flatpickr.set("minDate",e[0]):i.first().get(0)._flatpickr.set("maxDate",e[0])}})),i.each(function(){S(this).flatpickr(t)})})},S.fn.csf_field_fieldset=function(){return this.each(function(){S(this).find(".csf-fieldset-content").csf_reload_script()})},S.fn.csf_field_gallery=function(){return this.each(function(){var s,e=S(this),c=e.find(".csf-edit-gallery"),a=e.find(".csf-clear-gallery"),r=e.find("ul"),o=e.find("input");e.find("img");e.on("click",".csf-button, .csf-edit-gallery",function(e){var t=S(this),n=o.val(),t=t.hasClass("csf-edit-gallery")?"edit":"add",i="add"!=t||n.length?"gallery-edit":"gallery";e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&("gallery"==i?(s=_.wp.media({library:{type:"image"},frame:"post",state:"gallery",multiple:!0})).open():(s=_.wp.media.gallery.edit('[gallery ids="'+n+'"]'),"add"==t&&s.setState("gallery-library")),s.on("update",function(e){r.empty();e=e.models.map(function(e){var e=e.toJSON(),t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url;return r.append('

  • '),e.id});o.val(e.join(",")).trigger("change"),a.removeClass("hidden"),c.removeClass("hidden")}))}),a.on("click",function(e){e.preventDefault(),r.empty(),o.val("").trigger("change"),a.addClass("hidden"),c.addClass("hidden")})})},S.fn.csf_field_group=function(){return this.each(function(){function e(e){e.preventDefault();var t,n,i,s,e=c.children(".csf-cloneable-item").length;r.hide(),h&&h')).append(t),s.append(n),s.append(i),c.children().eq(e.index()).after(s),j.helper.name_nested_replace(c.children(".csf-cloneable-item"),l),c.accordion("refresh"),c.csf_customizer_refresh(),c.csf_customizer_listen({closest:!0}),d&&u(c))}function t(e){e.preventDefault(),e=c.children(".csf-cloneable-item").length,a.hide(),r.hide(),p&&e-1 .csf-cloneable-item > .csf-cloneable-title",collapsible:!0,active:!1,animate:!1,heightStyle:"content",icons:{header:"csf-cloneable-header-icon fas fa-angle-right",activeHeader:"csf-cloneable-header-icon fas fa-angle-down"},activate:function(e,t){var i,s,n=t.newPanel,t=t.newHeader;n.length&&!n.data("opened")?(i=t.find(".csf-cloneable-value"),s=[],S.each(o,function(e,t){s.push(n.find('[data-depend-id="'+t+'"]'))}),S.each(s,function(e,t){t.on("change keyup csf.keyup",function(){var n=[];S.each(s,function(e,t){t=t.val();t&&n.push(t)}),n.length&&i.text(n.join(f))}).trigger("csf.keyup")}),n.csf_reload_script(),n.data("opened",!0),n.data("retry",!1)):n.data("retry")&&(n.csf_reload_script_retry(),n.data("retry",!1))}}),c.sortable({axis:"y",handle:".csf-cloneable-title,.csf-cloneable-sort",helper:"original",cursor:"move",placeholder:"widget-placeholder",start:function(e,t){c.accordion({active:!1}),c.sortable("refreshPositions"),t.item.children(".csf-cloneable-content").data("retry",!0)},update:function(e,t){j.helper.name_nested_replace(c.children(".csf-cloneable-item"),l),c.csf_customizer_refresh(),d&&u(c)}}),i.children(".csf-cloneable-add").on("click",function(e){e.preventDefault();var t=c.children(".csf-cloneable-item").length;r.hide(),h&&hOpenStreetMap contributors'}).addTo(a),r=L.marker(c.center,{draggable:!0}).addTo(a),o=function(e){n.val(e.lat),i.val(e.lng),s.val(a.getZoom())},a.on("click",function(e){r.setLatLng(e.latlng),o(e.latlng)}),a.on("zoom",function(){o(r.getLatLng())}),r.on("drag",function(){o(r.getLatLng())}),t.length||(t=S('[data-depend-id="'+e.find(".csf--address-field").data("address-field")+'"]')),f={},t.autocomplete({source:function(e,t){var n=e.term;n in f?t(f[n]):S.get("https://nominatim.openstreetmap.org/search",{format:"json",q:n},function(e){e=e.length?e.map(function(e){return{value:e.display_name,label:e.display_name,lat:e.lat,lon:e.lon}},"json"):[{value:"no-data",label:"No Results."}];f[n]=e,t(e)})},select:function(e,t){if("no-data"===t.item.value)return!1;t=L.latLng(t.item.lat,t.item.lon);a.panTo(t),r.setLatLng(t),o(t)},create:function(e,t){S(this).autocomplete("widget").addClass("csf-map-ui-autocomplate")}}),n.on("change",l=function(){var e=L.latLng(n.val(),i.val());a.panTo(e),r.setLatLng(e)}),i.on("change",l))})},S.fn.csf_field_link=function(){return this.each(function(){var i=S(this),e=i.find(".csf--link"),s=i.find(".csf--add"),c=i.find(".csf--edit"),a=i.find(".csf--remove"),r=i.find(".csf--result"),t=j.helper.uid("csf-wplink-textarea-");s.on("click",function(e){e.preventDefault(),_.wpLink.open(t)}),c.on("click",function(e){e.preventDefault(),s.trigger("click"),S("#wp-link-url").val(i.find(".csf--url").val()),S("#wp-link-text").val(i.find(".csf--text").val()),S("#wp-link-target").prop("checked","_blank"===i.find(".csf--target").val())}),a.on("click",function(e){e.preventDefault(),i.find(".csf--url").val("").trigger("change"),i.find(".csf--text").val(""),i.find(".csf--target").val(""),s.removeClass("hidden"),c.addClass("hidden"),a.addClass("hidden"),r.parent().addClass("hidden")}),e.attr("id",t).on("change",function(){var e=_.wpLink.getAttrs(),t=e.href,n=S("#wp-link-text").val(),e=e.target||"";i.find(".csf--url").val(t).trigger("change"),i.find(".csf--text").val(n),i.find(".csf--target").val(e),r.html('{url:"'+t+'", text:"'+n+'", target:"'+e+'"}'),s.addClass("hidden"),c.removeClass("hidden"),a.removeClass("hidden"),r.parent().removeClass("hidden")})})},S.fn.csf_field_media=function(){return this.each(function(){var n,i=S(this),s=i.find(".csf--button"),c=i.find(".csf--remove"),a=s.data("library")&&s.data("library").split(",")||"",r=!!i.hasClass("csf-assign-field-background")&&i.closest(".csf-field-background").find(".csf--auto-attributes");s.on("click",function(e){e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&(n||(n=_.wp.media({library:{type:a}})).on("select",function(){var e=n.state().get("selection").first().attributes,t=s.data("preview-size")||"thumbnail";a.length&&-1===a.indexOf(e.subtype)&&-1===a.indexOf(e.type)||(i.find(".csf--id").val(e.id),i.find(".csf--width").val(e.width),i.find(".csf--height").val(e.height),i.find(".csf--alt").val(e.alt),i.find(".csf--title").val(e.title),i.find(".csf--description").val(e.description),t=void 0!==e.sizes&&void 0!==e.sizes.thumbnail&&"thumbnail"===t?e.sizes.thumbnail.url:void 0!==e.sizes&&void 0!==e.sizes.full?e.sizes.full.url:"image"===e.type?e.url:e.icon,r&&r.removeClass("csf--attributes-hidden"),c.removeClass("hidden"),i.find(".csf--preview").removeClass("hidden"),i.find(".csf--src").attr("src",t),i.find(".csf--thumbnail").val(t),i.find(".csf--url").val(e.url).trigger("change"))}),n.open())}),c.on("click",function(e){e.preventDefault(),r&&r.addClass("csf--attributes-hidden"),c.addClass("hidden"),i.find("input").val(""),i.find(".csf--preview").addClass("hidden"),i.find(".csf--url").trigger("change")})})},S.fn.csf_field_repeater=function(){return this.each(function(){function e(e){e.preventDefault();var t,n,i,e=s.children(".csf-repeater-item").length;r.hide(),f&&f')).append(t),i.append(n),s.children().eq(e.index()).after(i),i.children(".csf-repeater-content").csf_reload_script(),j.helper.name_nested_replace(s.children(".csf-repeater-item"),o),s.csf_customizer_refresh(),s.csf_customizer_listen({closest:!0}))}function t(e){e.preventDefault(),e=s.children(".csf-repeater-item").length,a.hide(),r.hide(),l&&e-1'+i.unit+"")},spin:function(e,t){n.val(t.value).trigger("change")}})})},S.fn.csf_field_switcher=function(){return this.each(function(){var n=S(this).find(".csf--switcher");n.on("click",function(){var e=0,t=n.find("input");n.hasClass("csf--active")?n.removeClass("csf--active"):(e=1,n.addClass("csf--active")),t.val(e).trigger("change")})})},S.fn.csf_field_tabbed=function(){return this.each(function(){var e=S(this),t=e.find(".csf-tabbed-nav a"),n=e.find(".csf-tabbed-content");n.eq(0).csf_reload_script(),t.on("click",function(e){e.preventDefault();var e=S(this),t=e.index(),t=n.eq(t);e.addClass("csf-tabbed-active").siblings().removeClass("csf-tabbed-active"),t.csf_reload_script(),t.removeClass("hidden").siblings().addClass("hidden")})})},S.fn.csf_field_typography=function(){return this.each(function(){var x=this,z=S(this),i=[],D=csf_typography_json.webfonts,t=csf_typography_json.googlestyles,O=csf_typography_json.defaultstyles;x.sanitize_subset=function(e){return e=(e=e.replace("-ext"," Extended")).charAt(0).toUpperCase()+e.slice(1)},x.sanitize_style=function(e){return t[e]||e},x.load_google_font=function(e,t,n){e&&"object"==typeof WebFont&&(t=t?t.replace("normal",""):"",n=n?n.replace("normal",""):"",-1===i.indexOf(e=t||n?e+":"+t+n:e)&&WebFont.load({google:{families:[e]}}),i.push(e))},x.append_select_options=function(e,t,s,c,a){e.find("option").not(":first").remove();var r="";S.each(t,function(e,t){var n=t,i=a?s&&-1!==s.indexOf(t)?" selected":"":s&&s===t?" selected":"";"subset"===c?n=x.sanitize_subset(t):"style"===c&&(n=x.sanitize_style(t)),r+='"}),e.append(r).trigger("csf.change").trigger("chosen:updated")},x.init=function(){var c,a,r,o,f,l,d,h,g,p=[],e=z.find(".csf--typography"),u=z.find(".csf--type"),v=z.find(".csf--block-font-style"),m=e.data("unit"),_=e.data("line-height-unit"),t=e.data("exclude")?e.data("exclude").split(","):[],b=(z.find(".csf--chosen").length&&z.find("select").each(function(){var e=S(this),t=e.parent().find(".chosen-container");t.length&&t.remove(),e.chosen({allow_single_deselect:!0,disable_search_threshold:15,width:"100%"})}),z.find(".csf--font-family")),i=b.val(),s=(b.find("option").not(":first-child").remove(),""),y=(S.each(D,function(n,e){t&&-1!==t.indexOf(n)||(s+='',S.each(e.fonts,function(e,t){s+='"}),s+="")}),b.append(s).trigger("chosen:updated"),z.find(".csf--block-font-style")),w=(y.length&&(c=z.find(".csf--font-style-select"),a=c.val()?c.val().replace(/normal/g,""):"",c.on("change csf.change",function(e){var t=c.val(),n=(t=!t&&p&&-1===p.indexOf("normal")?p[0]:t)&&"italic"!==t&&"normal"===t?"normal":"",n=t&&"italic"!==t&&"normal"!==t?t.replace("italic",""):n,t=t&&"italic"===t.substr(-6)?"italic":"";z.find(".csf--font-weight").val(n),z.find(".csf--font-style").val(t)}),(r=z.find(".csf--block-extra-styles")).length&&(o=z.find(".csf--extra-styles"),f=o.val())),z.find(".csf--block-subset")),C=(w.length&&(l=z.find(".csf--subset"),d=l.val(),h=l.data("multiple")||!1),z.find(".csf--block-backup-font-family")),k=(b.on("change csf.change",function(e){w.length&&w.addClass("hidden"),r.length&&r.addClass("hidden"),C.length&&C.addClass("hidden");var t,n,i=b.find(":selected"),s=i.val(),i=i.data("type");i&&s?("google"!==i&&"custom"!==i||!C.length||C.removeClass("hidden"),y.length&&(n=O,"google"===i&&D[i].fonts[s][0]?n=D[i].fonts[s][0]:"custom"===i&&D[i].fonts[s]&&(n=D[i].fonts[s]),t=-1!==(p=n).indexOf("normal")?"normal":n[0],t=a&&-1!==n.indexOf(a)?a:t,x.append_select_options(c,n,t,"style"),a=!1,y.removeClass("hidden"),"google"===i&&r.length&&1!',S.each(e.errors,function(e,t){var e=S('[data-depend-id="'+e+'"]'),n=S('a[href="#tab='+e.closest(".csf-section").data("section-id")+'"]'),i=n.closest(".csf-tab-item");e.closest(".csf-fieldset").append('

    '+t+"

    "),n.find(".csf-error").length||n.append(s),i.find(".csf-arrow .csf-error").length||i.find(".csf-arrow").append(s)})),a.removeClass("csf-saving"),c.prop("disabled",!1).attr("value",n),r=!1,j.vars.form_modified=!1,j.vars.$form_warning.hide(),clearTimeout(i);var s,t=S(".csf-form-success");t.empty().append(e.notice).fadeIn("fast",function(){i=setTimeout(function(){t.fadeOut("fast")},1e3)})}).fail(function(e){alert(e.error)})):j.vars.form_modified=!1),r=!0})})},S.fn.csf_options=function(){return this.each(function(){var e=S(this),t=e.find(".csf-content"),n=e.find(".csf-form-success"),i=e.find(".csf-form-warning"),s=e.find(".csf-header .csf-save");(j.vars.$form_warning=i).length&&(_.onbeforeunload=function(){return!!j.vars.form_modified||y},t.on("change keypress",":input",function(){j.vars.form_modified||(n.hide(),i.fadeIn("fast"),j.vars.form_modified=!0)})),n.hasClass("csf-form-show")&&setTimeout(function(){n.fadeOut("fast")},1e3),S(b).keydown(function(e){if((e.ctrlKey||e.metaKey)&&83===e.which)return s.trigger("click"),e.preventDefault(),!1})})},S.fn.csf_taxonomy=function(){return this.each(function(){var e,t,n=S(this),i=n.parents("form");"addtag"===i.attr("id")&&(e=i.find("#submit"),t=n.find(".csf-field").csf_clone(),e.on("click",function(){i.find(".form-required").hasClass("form-invalid")||(n.data("inited",!1),n.empty(),n.html(t),t=t.csf_clone(),n.csf_reload_script())}))})},S.fn.csf_shortcode=function(){var m=this;return m.shortcode_parse=function(e,n){var i="";return S.each(e,function(e,t){i+="["+(n=n||e),S.each(t,function(e,t){"content"===e?i=(i+="]")+t+"[/"+n:i+=m.shortcode_tags(e,t)}),i+="]"}),i},m.shortcode_tags=function(e,t){var n="";return""!==t&&("object"!=typeof t||S.isArray(t)?n+=" "+e+'="'+t.toString()+'"':S.each(t,function(e,t){""!==(t="background-image"===e?t.url||"":t)&&(n+=" "+e+'="'+t.toString()+'"')})),n},m.insertAtChars=function(e,t){e=void 0!==e[0].name?e[0]:e;return e.value.length&&void 0!==e.selectionStart?(e.focus(),e.value.substring(0,e.selectionStart)+t+e.value.substring(e.selectionEnd,e.value.length)):(e.focus(),t)},m.send_to_editor=function(e,t){var n;(n="undefined"!=typeof tinymce?tinymce.get(t):n)&&!n.isHidden()?n.execCommand("mceInsertContent",!1,e):(n=S("#"+t)).val(m.insertAtChars(n,e)).trigger("change")},this.each(function(){var s,c,a,n,r,o,f,i,l,d=S(this),h=d.find(".csf-modal-load"),p=(d.find(".csf-modal-content"),d.find(".csf-modal-insert")),u=d.find(".csf-modal-loading"),t=d.find("select"),g=d.data("modal-id"),v=d.data("nonce");S(b).on("click",'.csf-shortcode-button[data-modal-id="'+g+'"]',function(e){e.preventDefault(),l=S(this),s=l.data("editor-id")||!1,c=l.data("target-id")||!1,a=l.data("gutenberg-id")||!1,d.removeClass("hidden"),d.hasClass("csf-shortcode-single")&&r===y&&t.trigger("change")}),t.on("change",function(){var e=S(this),t=e.find(":selected");n=e.val(),r=t.data("shortcode"),o=t.data("view")||"normal",f=t.data("group")||r,h.empty(),n?(u.show(),_.wp.ajax.post("csf-get-shortcode-"+g,{shortcode_key:n,nonce:v}).done(function(e){u.hide();e=S(e.content).appendTo(h);p.parent().removeClass("hidden"),i=e.find(".csf--repeat-shortcode").csf_clone(),e.csf_reload_script(),e.find(".csf-fields").csf_reload_script()})):p.parent().addClass("hidden")}),p.on("click",function(e){if(e.preventDefault(),!p.prop("disabled")&&!p.attr("disabled")){var n="",t=d.find(".csf-field:not(.csf-depend-on)").find(":input:not(.ignore)").serializeObjectCSF();switch(o){case"contents":var i=r?t[r]:t;S.each(i,function(e,t){e=r||e;n+="["+e+"]"+t+"[/"+e+"]"});break;case"group":n+="["+r,S.each(t[r],function(e,t){n+=m.shortcode_tags(e,t)}),n=(n=(n+="]")+m.shortcode_parse(t[f],f))+("[/"+r+"]");break;case"repeater":n+=m.shortcode_parse(t[f],f);break;default:n+=m.shortcode_parse(t)}n=""===n?"["+r+"]":n,a?(e=_.csf_gutenberg_props.attributes.hasOwnProperty("shortcode")?_.csf_gutenberg_props.attributes.shortcode:"",_.csf_gutenberg_props.setAttributes({shortcode:e+n})):s?m.send_to_editor(n,s):(e=c?S(c):l.parent().find("textarea")).val(m.insertAtChars(e,n)).trigger("change"),d.addClass("hidden")}}),d.on("click",".csf--repeat-button",function(e){e.preventDefault();var e=d.find(".csf--repeatable"),t=i.csf_clone(),n=t.find(".csf-repeat-remove");t.appendTo(e);t.find(".csf-fields").csf_reload_script(),j.helper.name_nested_replace(d.find(".csf--repeat-shortcode"),f),n.on("click",function(){t.remove(),j.helper.name_nested_replace(d.find(".csf--repeat-shortcode"),f)})}),d.on("click",".csf-modal-close, .csf-modal-overlay",function(){d.addClass("hidden")})})},"function"==typeof Color&&(Color.prototype.toString=function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var e=parseInt(this._color,10).toString(16);if(this.error)return"";if(e.length<6)for(var t=6-e.length-1;0<=t;t--)e="0"+e;return"#"+e}),j.funcs.parse_color=function(e){var e=e.replace(/\s+/g,""),t=-1!==e.indexOf("rgba")?parseFloat(100*e.replace(/^.*,(.+)\)/,"$1")):100;return{value:e,transparent:t,rgba:t<100}},S.fn.csf_color=function(){return this.each(function(){var a,r=S(this),n=j.funcs.parse_color(r.val()),e=!_.csf_vars.color_palette.length||_.csf_vars.color_palette;r.hasClass("wp-color-picker")&&r.closest(".wp-picker-container").after(r).remove(),r.wpColorPicker({palettes:e,change:function(e,t){t=t.color.toString();a.removeClass("csf--transparent-active"),a.find(".csf--transparent-offset").css("background-color",t),r.val(t).trigger("change")},create:function(){a=r.closest(".wp-picker-container");var i=r.data("a8cIris"),e=S('
    transparent
    ').appendTo(a.find(".wp-picker-holder")),s=e.find(".csf--transparent-slider"),c=e.find(".csf--transparent-text"),t=e.find(".csf--transparent-offset"),e=e.find(".csf--transparent-button");"transparent"===r.val()&&a.addClass("csf--transparent-active"),e.on("click",function(){"transparent"!==r.val()?(r.val("transparent").trigger("change").removeClass("iris-error"),a.addClass("csf--transparent-active")):(r.val(i._color.toString()).trigger("change"),a.removeClass("csf--transparent-active"))}),s.slider({value:n.transparent,step:1,min:0,max:100,slide:function(e,t){t=parseFloat(t.value/100);i._color._alpha=t,r.wpColorPicker("color",i._color.toString()),c.text(1===t||0===t?"":t)},create:function(){var e=parseFloat(n.transparent/100);c.text(e<1?e:""),t.css("background-color",n.value),a.on("click",".wp-picker-clear",function(){i._color._alpha=1,c.text(""),s.slider("option","value",100),a.removeClass("csf--transparent-active"),r.trigger("change")}),a.on("click",".wp-picker-default",function(){var e=j.funcs.parse_color(r.data("default-color")),t=parseFloat(e.transparent/100),n=t<1?t:"";i._color._alpha=t,c.text(n),s.slider("option","value",e.transparent),"transparent"===e.value&&(r.removeClass("iris-error"),a.addClass("csf--transparent-active"))})}})}})})},S.fn.csf_chosen=function(){return this.each(function(){var n,c,a=S(this),e=a.parent().find(".chosen-container"),t=a.hasClass("csf-chosen-sortable")||!1,i=a.hasClass("csf-chosen-ajax")||!1,s=a.attr("multiple")||!1,r=S.extend({allow_single_deselect:!0,disable_search_threshold:10,width:s?"100%":"auto",no_results_text:_.csf_vars.i18n.no_results_text},a.data("chosen-settings"));e.length&&e.remove(),i?(e=S.extend({data:{type:"post",nonce:""},allow_single_deselect:!0,disable_search_threshold:-1,width:"100%",min_length:3,type_delay:500,typing_text:_.csf_vars.i18n.typing_text,searching_text:_.csf_vars.i18n.searching_text,no_results_text:_.csf_vars.i18n.no_results_text},a.data("chosen-settings")),a.CSFAjaxChosen(e)):a.chosen(r),s&&(i=(n=a.parent().find(".csf-hide-select")).val()||[],a.on("change",function(e,t){t&&t.selected?n.append('"):t&&t.deselected&&n.find('option[value="'+t.deselected+'"]').remove(),_.wp.customize!==y&&0===n.children().length&&n.data("customize-setting-link")&&_.wp.customize.control(n.data("customize-setting-link")).setting.set(""),n.trigger("change")}),a.CSFChosenOrder(i,!0)),t&&((c=a.parent().find(".chosen-container").find(".chosen-choices")).bind("mousedown",function(e){S(e.target).is("span")&&e.stopPropagation()}),c.sortable({items:"li:not(.search-field)",helper:"orginal",cursor:"move",placeholder:"search-choice-placeholder",start:function(e,t){t.placeholder.width(t.item.innerWidth()),t.placeholder.height(t.item.innerHeight())},update:function(e,t){var i="",s=a.data("chosen"),n=a.parent().find(".csf-hide-select");c.find(".search-choice-close").each(function(){var n=S(this).data("option-array-index");S.each(s.results_data,function(e,t){t.array_index===n&&(i+='")})}),n.children().remove(),n.append(i),n.trigger("change")}}))})},S.fn.csf_checkbox=function(){return this.each(function(){var e=S(this),t=e.find(".csf--input"),n=e.find(".csf--checkbox");n.on("click",function(){t.val(Number(n.prop("checked"))).trigger("change")})})},S.fn.csf_checkbox_all=function(){return this.each(function(){var n=S(this);n.on("click",function(){var e=n.closest(".csf-field-checkbox").find(":input"),t=!1;e.each(function(){S(this).prop("checked")||(t=!0)}),t?(e.prop("checked","checked"),e.attr("checked","checked")):(e.prop("checked",""),e.removeAttr("checked")),e.first().trigger("change")})})},S.fn.csf_siblings=function(){return this.each(function(){var t=S(this),e=t.find(".csf--sibling"),n=t.data("multiple")||!1;e.on("click",function(){var e=S(this);n?e.hasClass("csf--active")?(e.removeClass("csf--active"),e.find("input").prop("checked",!1).trigger("change")):(e.addClass("csf--active"),e.find("input").prop("checked",!0).trigger("change")):(t.find("input").prop("checked",!1),e.find("input").prop("checked",!0).trigger("change"),e.addClass("csf--active").siblings().removeClass("csf--active"))})})},S.fn.csf_help=function(){return this.each(function(){var e,t,n=S(this);n.on({mouseenter:function(){e=S('
    ').html(n.find(".csf-help-text").html()).appendTo("body"),t=j.vars.is_rtl?n.offset().left+24:n.offset().left-e.outerWidth(),e.css({top:n.offset().top-(e.outerHeight()/2-14),left:t})},mouseleave:function(){e!==y&&e.remove()}})})},S.fn.csf_customizer_refresh=function(){return this.each(function(){var e=S(this),t=e.closest(".csf-customize-complex");if(t.length){var n=t.data("unique-id");if(n===y)return;var i=t.find(":input"),t=t.data("option-id"),i=i.serializeObjectCSF(),i=!S.isEmptyObject(i)&&i[n]&&i[n][t]?i[n][t]:"",n=_.wp.customize.control(n+"["+t+"]");n.setting._value=null,n.setting.set(i)}else e.find(":input").first().trigger("change");S(b).trigger("csf-customizer-refresh",e)})},S.fn.csf_customizer_listen=function(e){var s=S.extend({closest:!1},e);return this.each(function(){var t,e,n,i;_.wp.customize!==y&&(e=(t=s.closest?S(this).closest(".csf-customize-complex"):S(this)).find(":input"),n=t.data("unique-id"),i=t.data("option-id"),n!==y&&e.on("change keyup csf.change",function(){var e=t.find(":input").serializeObjectCSF(),e=!S.isEmptyObject(e)&&e[n]&&e[n][i]?e[n][i]:"";_.wp.customize.control(n+"["+i+"]").setting.set(e)}))})},S(b).on("expanded",".control-section",function(){var e,t,n=S(this);n.hasClass("open")&&!n.data("inited")&&(e=n.find(".csf-customize-field"),t=n.find(".csf-customize-complex"),e.length&&(n.csf_dependency(),e.csf_reload_script({dependency:!1}),t.csf_customizer_listen()),n.data("inited",!0))}),j.vars.$window.on("resize csf.resize",j.helper.debounce(function(e){(-1 .csf-field:not(.csf-depend-on)"),i=n.find("> .csf-title, .csf-search-tags");1"),S("#csf-codemirror-css").after(e),e.attr({rel:"stylesheet",id:"csf-codemirror-"+s.theme+"-css",href:s.cdnURL+"/theme/"+s.theme+".min.css",type:"text/css",media:"all"}),j.vars.code_themes.push(s.theme)),CodeMirror.modeURL=s.cdnURL+"/mode/%N/%N.min.js",CodeMirror.autoLoadMode(n,s.mode),n.on("change",function(e,t){i.val(n.getValue()).trigger("change")}),clearInterval(c))}))})},S.fn.csf_field_date=function(){return this.each(function(){var e=S(this),n=e.find("input"),i=e.find(".csf-date-settings").data("settings"),i=S.extend({},i,{showAnim:"",beforeShow:function(e,t){S(t.dpDiv).addClass("csf-datepicker-wrapper")},onClose:function(e,t){S(t.dpDiv).removeClass("csf-datepicker-wrapper")}});2===n.length&&(i=S.extend({},i,{onSelect:function(e){S(this),n.first();var t=n.first().attr("id")===S(this).attr("id")?"minDate":"maxDate",e=S.datepicker.parseDate(i.dateFormat,e);n.not(this).datepicker("option",t,e)}})),n.each(function(){var e=S(this);e.hasClass("hasDatepicker")&&e.removeAttr("id").removeClass("hasDatepicker"),e.datepicker(i)})})},S.fn.csf_field_datetime=function(){return this.each(function(){var e=S(this),i=e.find("input"),t=e.find(".csf-datetime-settings").data("settings"),t=S.extend({},t,{onReady:function(e,t,n){S(n.calendarContainer).addClass("csf-flatpickr")}});2===i.length&&(t=S.extend({},t,{onChange:function(e,t,n){"from"===S(n.element).data("type")?i.last().get(0)._flatpickr.set("minDate",e[0]):i.first().get(0)._flatpickr.set("maxDate",e[0])}})),i.each(function(){S(this).flatpickr(t)})})},S.fn.csf_field_fieldset=function(){return this.each(function(){S(this).find(".csf-fieldset-content").csf_reload_script()})},S.fn.csf_field_gallery=function(){return this.each(function(){var s,e=S(this),c=e.find(".csf-edit-gallery"),a=e.find(".csf-clear-gallery"),r=e.find("ul"),o=e.find("input");e.find("img");e.on("click",".csf-button, .csf-edit-gallery",function(e){var t=S(this),n=o.val(),t=t.hasClass("csf-edit-gallery")?"edit":"add",i="add"!=t||n.length?"gallery-edit":"gallery";e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&("gallery"==i?(s=_.wp.media({library:{type:"image"},frame:"post",state:"gallery",multiple:!0})).open():(s=_.wp.media.gallery.edit('[gallery ids="'+n+'"]'),"add"==t&&s.setState("gallery-library")),s.on("update",function(e){r.empty();e=e.models.map(function(e){var e=e.toJSON(),t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url;return r.append('
  • '),e.id});o.val(e.join(",")).trigger("change"),a.removeClass("hidden"),c.removeClass("hidden")}))}),a.on("click",function(e){e.preventDefault(),r.empty(),o.val("").trigger("change"),a.addClass("hidden"),c.addClass("hidden")})})},S.fn.csf_field_group=function(){return this.each(function(){function e(e){e.preventDefault();var t,n,i,s,e=c.children(".csf-cloneable-item").length;r.hide(),h&&h')).append(t),s.append(n),s.append(i),c.children().eq(e.index()).after(s),j.helper.name_nested_replace(c.children(".csf-cloneable-item"),l),c.accordion("refresh"),c.csf_customizer_refresh(),c.csf_customizer_listen({closest:!0}),d&&u(c))}function t(e){e.preventDefault(),e=c.children(".csf-cloneable-item").length,a.hide(),r.hide(),p&&e-1 .csf-cloneable-item > .csf-cloneable-title",collapsible:!0,active:!1,animate:!1,heightStyle:"content",icons:{header:"csf-cloneable-header-icon fas fa-angle-right",activeHeader:"csf-cloneable-header-icon fas fa-angle-down"},activate:function(e,t){var i,s,n=t.newPanel,t=t.newHeader;n.length&&!n.data("opened")?(i=t.find(".csf-cloneable-value"),s=[],S.each(o,function(e,t){s.push(n.find('[data-depend-id="'+t+'"]'))}),S.each(s,function(e,t){t.on("change keyup csf.keyup",function(){var n=[];S.each(s,function(e,t){t=t.val();t&&n.push(t)}),n.length&&i.text(n.join(f))}).trigger("csf.keyup")}),n.csf_reload_script(),n.data("opened",!0),n.data("retry",!1)):n.data("retry")&&(n.csf_reload_script_retry(),n.data("retry",!1))}}),c.sortable({axis:"y",handle:".csf-cloneable-title,.csf-cloneable-sort",helper:"original",cursor:"move",placeholder:"widget-placeholder",start:function(e,t){c.accordion({active:!1}),c.sortable("refreshPositions"),t.item.children(".csf-cloneable-content").data("retry",!0)},update:function(e,t){j.helper.name_nested_replace(c.children(".csf-cloneable-item"),l),c.csf_customizer_refresh(),d&&u(c)}}),i.children(".csf-cloneable-add").on("click",function(e){e.preventDefault();var t=c.children(".csf-cloneable-item").length;r.hide(),h&&hOpenStreetMap contributors'}).addTo(a),r=L.marker(c.center,{draggable:!0}).addTo(a),o=function(e){n.val(e.lat),i.val(e.lng),s.val(a.getZoom())},a.on("click",function(e){r.setLatLng(e.latlng),o(e.latlng)}),a.on("zoom",function(){o(r.getLatLng())}),r.on("drag",function(){o(r.getLatLng())}),t.length||(t=S('[data-depend-id="'+e.find(".csf--address-field").data("address-field")+'"]')),f={},t.autocomplete({source:function(e,t){var n=e.term;n in f?t(f[n]):S.get("https://nominatim.openstreetmap.org/search",{format:"json",q:n},function(e){e=e.length?e.map(function(e){return{value:e.display_name,label:e.display_name,lat:e.lat,lon:e.lon}},"json"):[{value:"no-data",label:"No Results."}];f[n]=e,t(e)})},select:function(e,t){if("no-data"===t.item.value)return!1;t=L.latLng(t.item.lat,t.item.lon);a.panTo(t),r.setLatLng(t),o(t)},create:function(e,t){S(this).autocomplete("widget").addClass("csf-map-ui-autocomplate")}}),n.on("change",l=function(){var e=L.latLng(n.val(),i.val());a.panTo(e),r.setLatLng(e)}),i.on("change",l))})},S.fn.csf_field_link=function(){return this.each(function(){var i=S(this),e=i.find(".csf--link"),s=i.find(".csf--add"),c=i.find(".csf--edit"),a=i.find(".csf--remove"),r=i.find(".csf--result"),t=j.helper.uid("csf-wplink-textarea-");s.on("click",function(e){e.preventDefault(),_.wpLink.open(t)}),c.on("click",function(e){e.preventDefault(),s.trigger("click"),S("#wp-link-url").val(i.find(".csf--url").val()),S("#wp-link-text").val(i.find(".csf--text").val()),S("#wp-link-target").prop("checked","_blank"===i.find(".csf--target").val())}),a.on("click",function(e){e.preventDefault(),i.find(".csf--url").val("").trigger("change"),i.find(".csf--text").val(""),i.find(".csf--target").val(""),s.removeClass("hidden"),c.addClass("hidden"),a.addClass("hidden"),r.parent().addClass("hidden")}),e.attr("id",t).on("change",function(){var e=_.wpLink.getAttrs(),t=e.href,n=S("#wp-link-text").val(),e=e.target||"";i.find(".csf--url").val(t).trigger("change"),i.find(".csf--text").val(n),i.find(".csf--target").val(e),r.html('{url:"'+t+'", text:"'+n+'", target:"'+e+'"}'),s.addClass("hidden"),c.removeClass("hidden"),a.removeClass("hidden"),r.parent().removeClass("hidden")})})},S.fn.csf_field_media=function(){return this.each(function(){var n,i=S(this),s=i.find(".csf--button"),c=i.find(".csf--remove"),a=s.data("library")&&s.data("library").split(",")||"",r=!!i.hasClass("csf-assign-field-background")&&i.closest(".csf-field-background").find(".csf--auto-attributes");s.on("click",function(e){e.preventDefault(),void 0!==_.wp&&_.wp.media&&_.wp.media.gallery&&(n||(n=_.wp.media({library:{type:a}})).on("select",function(){var e=n.state().get("selection").first().attributes,t=s.data("preview-size")||"thumbnail";a.length&&-1===a.indexOf(e.subtype)&&-1===a.indexOf(e.type)||(i.find(".csf--id").val(e.id),i.find(".csf--width").val(e.width),i.find(".csf--height").val(e.height),i.find(".csf--alt").val(e.alt),i.find(".csf--title").val(e.title),i.find(".csf--description").val(e.description),t=void 0!==e.sizes&&void 0!==e.sizes.thumbnail&&"thumbnail"===t?e.sizes.thumbnail.url:void 0!==e.sizes&&void 0!==e.sizes.full?e.sizes.full.url:"image"===e.type?e.url:e.icon,r&&r.removeClass("csf--attributes-hidden"),c.removeClass("hidden"),i.find(".csf--preview").removeClass("hidden"),i.find(".csf--src").attr("src",t),i.find(".csf--thumbnail").val(t),i.find(".csf--url").val(e.url).trigger("change"))}),n.open())}),c.on("click",function(e){e.preventDefault(),r&&r.addClass("csf--attributes-hidden"),c.addClass("hidden"),i.find("input").val(""),i.find(".csf--preview").addClass("hidden"),i.find(".csf--url").trigger("change")})})},S.fn.csf_field_repeater=function(){return this.each(function(){function e(e){e.preventDefault();var t,n,i,e=s.children(".csf-repeater-item").length;r.hide(),f&&f')).append(t),i.append(n),s.children().eq(e.index()).after(i),i.children(".csf-repeater-content").csf_reload_script(),j.helper.name_nested_replace(s.children(".csf-repeater-item"),o),s.csf_customizer_refresh(),s.csf_customizer_listen({closest:!0}))}function t(e){e.preventDefault(),e=s.children(".csf-repeater-item").length,a.hide(),r.hide(),l&&e-1'+i.unit+"")},spin:function(e,t){n.val(t.value).trigger("change")}})})},S.fn.csf_field_switcher=function(){return this.each(function(){var n=S(this).find(".csf--switcher");n.on("click",function(){var e=0,t=n.find("input");n.hasClass("csf--active")?n.removeClass("csf--active"):(e=1,n.addClass("csf--active")),t.val(e).trigger("change")})})},S.fn.csf_field_tabbed=function(){return this.each(function(){var e=S(this),t=e.find(".csf-tabbed-nav a"),n=e.find(".csf-tabbed-content");n.eq(0).csf_reload_script(),t.on("click",function(e){e.preventDefault();var e=S(this),t=e.index(),t=n.eq(t);e.addClass("csf-tabbed-active").siblings().removeClass("csf-tabbed-active"),t.csf_reload_script(),t.removeClass("hidden").siblings().addClass("hidden")})})},S.fn.csf_field_typography=function(){return this.each(function(){var x=this,z=S(this),i=[],D=csf_typography_json.webfonts,t=csf_typography_json.googlestyles,O=csf_typography_json.defaultstyles;x.sanitize_subset=function(e){return e=(e=e.replace("-ext"," Extended")).charAt(0).toUpperCase()+e.slice(1)},x.sanitize_style=function(e){return t[e]||e},x.load_google_font=function(e,t,n){e&&"object"==typeof WebFont&&(t=t?t.replace("normal",""):"",n=n?n.replace("normal",""):"",-1===i.indexOf(e=t||n?e+":"+t+n:e)&&WebFont.load({google:{families:[e]}}),i.push(e))},x.append_select_options=function(e,t,s,c,a){e.find("option").not(":first").remove();var r="";S.each(t,function(e,t){var n=t,i=a?s&&-1!==s.indexOf(t)?" selected":"":s&&s===t?" selected":"";"subset"===c?n=x.sanitize_subset(t):"style"===c&&(n=x.sanitize_style(t)),r+='"}),e.append(r).trigger("csf.change").trigger("chosen:updated")},x.init=function(){var c,a,r,o,f,l,d,h,g,p=[],e=z.find(".csf--typography"),u=z.find(".csf--type"),v=z.find(".csf--block-font-style"),m=e.data("unit"),_=e.data("line-height-unit"),t=e.data("exclude")?e.data("exclude").split(","):[],b=(z.find(".csf--chosen").length&&z.find("select").each(function(){var e=S(this),t=e.parent().find(".chosen-container");t.length&&t.remove(),e.chosen({allow_single_deselect:!0,disable_search_threshold:15,width:"100%"})}),z.find(".csf--font-family")),i=b.val(),s=(b.find("option").not(":first-child").remove(),""),y=(S.each(D,function(n,e){t&&-1!==t.indexOf(n)||(s+='',S.each(e.fonts,function(e,t){s+='"}),s+="")}),b.append(s).trigger("chosen:updated"),z.find(".csf--block-font-style")),w=(y.length&&(c=z.find(".csf--font-style-select"),a=c.val()?c.val().replace(/normal/g,""):"",c.on("change csf.change",function(e){var t=c.val(),n=(t=!t&&p&&-1===p.indexOf("normal")?p[0]:t)&&"italic"!==t&&"normal"===t?"normal":"",n=t&&"italic"!==t&&"normal"!==t?t.replace("italic",""):n,t=t&&"italic"===t.substr(-6)?"italic":"";z.find(".csf--font-weight").val(n),z.find(".csf--font-style").val(t)}),(r=z.find(".csf--block-extra-styles")).length&&(o=z.find(".csf--extra-styles"),f=o.val())),z.find(".csf--block-subset")),C=(w.length&&(l=z.find(".csf--subset"),d=l.val(),h=l.data("multiple")||!1),z.find(".csf--block-backup-font-family")),k=(b.on("change csf.change",function(e){w.length&&w.addClass("hidden"),r.length&&r.addClass("hidden"),C.length&&C.addClass("hidden");var t,n,i=b.find(":selected"),s=i.val(),i=i.data("type");i&&s?("google"!==i&&"custom"!==i||!C.length||C.removeClass("hidden"),y.length&&(n=O,"google"===i&&D[i].fonts[s][0]?n=D[i].fonts[s][0]:"custom"===i&&D[i].fonts[s]&&(n=D[i].fonts[s]),t=-1!==(p=n).indexOf("normal")?"normal":n[0],t=a&&-1!==n.indexOf(a)?a:t,x.append_select_options(c,n,t,"style"),a=!1,y.removeClass("hidden"),"google"===i&&r.length&&1!',S.each(e.errors,function(e,t){var e=S('[data-depend-id="'+e+'"]'),n=S('a[href="#tab='+e.closest(".csf-section").data("section-id")+'"]'),i=n.closest(".csf-tab-item");e.closest(".csf-fieldset").append('

    '+t+"

    "),n.find(".csf-error").length||n.append(s),i.find(".csf-arrow .csf-error").length||i.find(".csf-arrow").append(s)})),a.removeClass("csf-saving"),c.prop("disabled",!1).attr("value",n),r=!1,j.vars.form_modified=!1,j.vars.$form_warning.hide(),clearTimeout(i);var s,t=S(".csf-form-success");t.empty().append(e.notice).fadeIn("fast",function(){i=setTimeout(function(){t.fadeOut("fast")},1e3)})}).fail(function(e){alert(e.error)})):j.vars.form_modified=!1),r=!0})})},S.fn.csf_options=function(){return this.each(function(){var e=S(this),t=e.find(".csf-content"),n=e.find(".csf-form-success"),i=e.find(".csf-form-warning"),s=e.find(".csf-header .csf-save");(j.vars.$form_warning=i).length&&(_.onbeforeunload=function(){return!!j.vars.form_modified||y},t.on("change keypress",":input",function(){j.vars.form_modified||(n.hide(),i.fadeIn("fast"),j.vars.form_modified=!0)})),n.hasClass("csf-form-show")&&setTimeout(function(){n.fadeOut("fast")},1e3),S(b).keydown(function(e){if((e.ctrlKey||e.metaKey)&&83===e.which)return s.trigger("click"),e.preventDefault(),!1})})},S.fn.csf_taxonomy=function(){return this.each(function(){var e,t,n=S(this),i=n.parents("form");"addtag"===i.attr("id")&&(e=i.find("#submit"),t=n.children(".csf-field").csf_clone(),e.on("click",function(){i.find(".form-required").hasClass("form-invalid")||(n.data("inited",!1),n.empty(),n.html(t),t=t.csf_clone(),n.csf_reload_script())}))})},S.fn.csf_shortcode=function(){var m=this;return m.shortcode_parse=function(e,n){var i="";return S.each(e,function(e,t){i+="["+(n=n||e),S.each(t,function(e,t){"content"===e?i=(i+="]")+t+"[/"+n:i+=m.shortcode_tags(e,t)}),i+="]"}),i},m.shortcode_tags=function(e,t){var n="";return""!==t&&("object"!=typeof t||S.isArray(t)?n+=" "+e+'="'+t.toString()+'"':S.each(t,function(e,t){""!==(t="background-image"===e?t.url||"":t)&&(n+=" "+e+'="'+t.toString()+'"')})),n},m.insertAtChars=function(e,t){e=void 0!==e[0].name?e[0]:e;return e.value.length&&void 0!==e.selectionStart?(e.focus(),e.value.substring(0,e.selectionStart)+t+e.value.substring(e.selectionEnd,e.value.length)):(e.focus(),t)},m.send_to_editor=function(e,t){var n;(n="undefined"!=typeof tinymce?tinymce.get(t):n)&&!n.isHidden()?n.execCommand("mceInsertContent",!1,e):(n=S("#"+t)).val(m.insertAtChars(n,e)).trigger("change")},this.each(function(){var s,c,a,n,r,o,f,i,l,d=S(this),h=d.find(".csf-modal-load"),p=(d.find(".csf-modal-content"),d.find(".csf-modal-insert")),u=d.find(".csf-modal-loading"),t=d.find("select"),g=d.data("modal-id"),v=d.data("nonce");S(b).on("click",'.csf-shortcode-button[data-modal-id="'+g+'"]',function(e){e.preventDefault(),l=S(this),s=l.data("editor-id")||!1,c=l.data("target-id")||!1,a=l.data("gutenberg-id")||!1,d.removeClass("hidden"),d.hasClass("csf-shortcode-single")&&r===y&&t.trigger("change")}),t.on("change",function(){var e=S(this),t=e.find(":selected");n=e.val(),r=t.data("shortcode"),o=t.data("view")||"normal",f=t.data("group")||r,h.empty(),n?(u.show(),_.wp.ajax.post("csf-get-shortcode-"+g,{shortcode_key:n,nonce:v}).done(function(e){u.hide();e=S(e.content).appendTo(h);p.parent().removeClass("hidden"),i=e.find(".csf--repeat-shortcode").csf_clone(),e.csf_reload_script(),e.find(".csf-fields").csf_reload_script()})):p.parent().addClass("hidden")}),p.on("click",function(e){if(e.preventDefault(),!p.prop("disabled")&&!p.attr("disabled")){var n="",t=d.find(".csf-field:not(.csf-depend-on)").find(":input:not(.ignore)").serializeObjectCSF();switch(o){case"contents":var i=r?t[r]:t;S.each(i,function(e,t){e=r||e;n+="["+e+"]"+t+"[/"+e+"]"});break;case"group":n+="["+r,S.each(t[r],function(e,t){n+=m.shortcode_tags(e,t)}),n=(n=(n+="]")+m.shortcode_parse(t[f],f))+("[/"+r+"]");break;case"repeater":n+=m.shortcode_parse(t[f],f);break;default:n+=m.shortcode_parse(t)}n=""===n?"["+r+"]":n,a?(e=_.csf_gutenberg_props.attributes.hasOwnProperty("shortcode")?_.csf_gutenberg_props.attributes.shortcode:"",_.csf_gutenberg_props.setAttributes({shortcode:e+n})):s?m.send_to_editor(n,s):(e=c?S(c):l.parent().find("textarea")).val(m.insertAtChars(e,n)).trigger("change"),d.addClass("hidden")}}),d.on("click",".csf--repeat-button",function(e){e.preventDefault();var e=d.find(".csf--repeatable"),t=i.csf_clone(),n=t.find(".csf-repeat-remove");t.appendTo(e);t.find(".csf-fields").csf_reload_script(),j.helper.name_nested_replace(d.find(".csf--repeat-shortcode"),f),n.on("click",function(){t.remove(),j.helper.name_nested_replace(d.find(".csf--repeat-shortcode"),f)})}),d.on("click",".csf-modal-close, .csf-modal-overlay",function(){d.addClass("hidden")})})},"function"==typeof Color&&(Color.prototype.toString=function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var e=parseInt(this._color,10).toString(16);if(this.error)return"";if(e.length<6)for(var t=6-e.length-1;0<=t;t--)e="0"+e;return"#"+e}),j.funcs.parse_color=function(e){var e=e.replace(/\s+/g,""),t=-1!==e.indexOf("rgba")?parseFloat(100*e.replace(/^.*,(.+)\)/,"$1")):100;return{value:e,transparent:t,rgba:t<100}},S.fn.csf_color=function(){return this.each(function(){var a,r=S(this),n=j.funcs.parse_color(r.val()),e=!_.csf_vars.color_palette.length||_.csf_vars.color_palette;r.hasClass("wp-color-picker")&&r.closest(".wp-picker-container").after(r).remove(),r.wpColorPicker({palettes:e,change:function(e,t){t=t.color.toString();a.removeClass("csf--transparent-active"),a.find(".csf--transparent-offset").css("background-color",t),r.val(t).trigger("change")},create:function(){a=r.closest(".wp-picker-container");var i=r.data("a8cIris"),e=S('
    transparent
    ').appendTo(a.find(".wp-picker-holder")),s=e.find(".csf--transparent-slider"),c=e.find(".csf--transparent-text"),t=e.find(".csf--transparent-offset"),e=e.find(".csf--transparent-button");"transparent"===r.val()&&a.addClass("csf--transparent-active"),e.on("click",function(){"transparent"!==r.val()?(r.val("transparent").trigger("change").removeClass("iris-error"),a.addClass("csf--transparent-active")):(r.val(i._color.toString()).trigger("change"),a.removeClass("csf--transparent-active"))}),s.slider({value:n.transparent,step:1,min:0,max:100,slide:function(e,t){t=parseFloat(t.value/100);i._color._alpha=t,r.wpColorPicker("color",i._color.toString()),c.text(1===t||0===t?"":t)},create:function(){var e=parseFloat(n.transparent/100);c.text(e<1?e:""),t.css("background-color",n.value),a.on("click",".wp-picker-clear",function(){i._color._alpha=1,c.text(""),s.slider("option","value",100),a.removeClass("csf--transparent-active"),r.trigger("change")}),a.on("click",".wp-picker-default",function(){var e=j.funcs.parse_color(r.data("default-color")),t=parseFloat(e.transparent/100),n=t<1?t:"";i._color._alpha=t,c.text(n),s.slider("option","value",e.transparent),"transparent"===e.value&&(r.removeClass("iris-error"),a.addClass("csf--transparent-active"))})}})}})})},S.fn.csf_chosen=function(){return this.each(function(){var n,c,a=S(this),e=a.parent().find(".chosen-container"),t=a.hasClass("csf-chosen-sortable")||!1,i=a.hasClass("csf-chosen-ajax")||!1,s=a.attr("multiple")||!1,r=S.extend({allow_single_deselect:!0,disable_search_threshold:10,width:s?"100%":"auto",no_results_text:_.csf_vars.i18n.no_results_text},a.data("chosen-settings"));e.length&&e.remove(),i?(e=S.extend({data:{type:"post",nonce:""},allow_single_deselect:!0,disable_search_threshold:-1,width:"100%",min_length:3,type_delay:500,typing_text:_.csf_vars.i18n.typing_text,searching_text:_.csf_vars.i18n.searching_text,no_results_text:_.csf_vars.i18n.no_results_text},a.data("chosen-settings")),a.CSFAjaxChosen(e)):a.chosen(r),s&&(i=(n=a.parent().find(".csf-hide-select")).val()||[],a.on("change",function(e,t){t&&t.selected?n.append('"):t&&t.deselected&&n.find('option[value="'+t.deselected+'"]').remove(),_.wp.customize!==y&&0===n.children().length&&n.data("customize-setting-link")&&_.wp.customize.control(n.data("customize-setting-link")).setting.set(""),n.trigger("change")}),a.CSFChosenOrder(i,!0)),t&&((c=a.parent().find(".chosen-container").find(".chosen-choices")).bind("mousedown",function(e){S(e.target).is("span")&&e.stopPropagation()}),c.sortable({items:"li:not(.search-field)",helper:"orginal",cursor:"move",placeholder:"search-choice-placeholder",start:function(e,t){t.placeholder.width(t.item.innerWidth()),t.placeholder.height(t.item.innerHeight())},update:function(e,t){var i="",s=a.data("chosen"),n=a.parent().find(".csf-hide-select");c.find(".search-choice-close").each(function(){var n=S(this).data("option-array-index");S.each(s.results_data,function(e,t){t.array_index===n&&(i+='")})}),n.children().remove(),n.append(i),n.trigger("change")}}))})},S.fn.csf_checkbox=function(){return this.each(function(){var e=S(this),t=e.find(".csf--input"),n=e.find(".csf--checkbox");n.on("click",function(){t.val(Number(n.prop("checked"))).trigger("change")})})},S.fn.csf_checkbox_all=function(){return this.each(function(){var n=S(this);n.on("click",function(){var e=n.closest(".csf-field-checkbox").find(":input"),t=!1;e.each(function(){S(this).prop("checked")||(t=!0)}),t?(e.prop("checked","checked"),e.attr("checked","checked")):(e.prop("checked",""),e.removeAttr("checked")),e.first().trigger("change")})})},S.fn.csf_siblings=function(){return this.each(function(){var t=S(this),e=t.find(".csf--sibling"),n=t.data("multiple")||!1;e.on("click",function(){var e=S(this);n?e.hasClass("csf--active")?(e.removeClass("csf--active"),e.find("input").prop("checked",!1).trigger("change")):(e.addClass("csf--active"),e.find("input").prop("checked",!0).trigger("change")):(t.find("input").prop("checked",!1),e.find("input").prop("checked",!0).trigger("change"),e.addClass("csf--active").siblings().removeClass("csf--active"))})})},S.fn.csf_help=function(){return this.each(function(){var e,t,n=S(this);n.on({mouseenter:function(){e=S('
    ').html(n.find(".csf-help-text").html()).appendTo("body"),t=j.vars.is_rtl?n.offset().left+24:n.offset().left-e.outerWidth(),e.css({top:n.offset().top-(e.outerHeight()/2-14),left:t})},mouseleave:function(){e!==y&&e.remove()}})})},S.fn.csf_customizer_refresh=function(){return this.each(function(){var e=S(this),t=e.closest(".csf-customize-complex");if(t.length){var n=t.data("unique-id");if(n===y)return;var i=t.find(":input"),t=t.data("option-id"),i=i.serializeObjectCSF(),i=!S.isEmptyObject(i)&&i[n]&&i[n][t]?i[n][t]:"",n=_.wp.customize.control(n+"["+t+"]");n.setting._value=null,n.setting.set(i)}else e.find(":input").first().trigger("change");S(b).trigger("csf-customizer-refresh",e)})},S.fn.csf_customizer_listen=function(e){var s=S.extend({closest:!1},e);return this.each(function(){var t,e,n,i;_.wp.customize!==y&&(e=(t=s.closest?S(this).closest(".csf-customize-complex"):S(this)).find(":input"),n=t.data("unique-id"),i=t.data("option-id"),n!==y&&e.on("change keyup csf.change",function(){var e=t.find(":input").serializeObjectCSF(),e=!S.isEmptyObject(e)&&e[n]&&e[n][i]?e[n][i]:"";_.wp.customize.control(n+"["+i+"]").setting.set(e)}))})},S(b).on("expanded",".control-section",function(){var e,t,n=S(this);n.hasClass("open")&&!n.data("inited")&&(e=n.find(".csf-customize-field"),t=n.find(".csf-customize-complex"),e.length&&(n.csf_dependency(),e.csf_reload_script({dependency:!1}),t.csf_customizer_listen()),n.data("inited",!0))}),j.vars.$window.on("resize csf.resize",j.helper.debounce(function(e){(-1",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},fe={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){e%=100;if(3Math.min(t,n)&&en)&&(p.amPM.textContent=p.l10n.amPM[_e(p.amPM.textContent===p.l10n.amPM[0])]),t.value=pe(s)));var t,n,i,o,s,r,a=p._input.value;u(),T(),p._input.value!==a&&p._debouncedChange()}function u(){var e,t,n,i,o,s;void 0!==p.hourElement&&void 0!==p.minuteElement&&(o=(parseInt(p.hourElement.value.slice(-2),10)||0)%24,e=(parseInt(p.minuteElement.value,10)||0)%60,t=void 0!==p.secondElement?(parseInt(p.secondElement.value,10)||0)%60:0,void 0!==p.amPM&&(n=o,i=p.amPM.textContent,o=n%12+12*_e(i===p.l10n.amPM[1])),n=void 0!==p.config.minTime||p.config.minDate&&p.minDateHasTime&&p.latestSelectedDateObj&&0===Ee(p.latestSelectedDateObj,p.config.minDate,!0),(void 0!==p.config.maxTime||p.config.maxDate&&p.maxDateHasTime&&p.latestSelectedDateObj&&0===Ee(p.latestSelectedDateObj,p.config.maxDate,!0))&&(i=void 0!==p.config.maxTime?p.config.maxTime:p.config.maxDate,(e=(o=Math.min(o,i.getHours()))===i.getHours()?Math.min(e,i.getMinutes()):e)===i.getMinutes()&&(t=Math.min(t,i.getSeconds()))),n&&(s=void 0!==p.config.minTime?p.config.minTime:p.config.minDate,(e=(o=Math.max(o,s.getHours()))===s.getHours()&&ep.now?p.config.minDate:p.config.maxDate&&p.config.maxDate"+p.config.getWeek(t)+""),k("onDayCreate",s),s}function _(e){e.focus(),"range"===p.config.mode&&K(e)}function m(e){for(var t=0=Math.abs(o))return void _(f)}p.changeMonth(a),g(m(a),0)}else _(e)}function f(){if(void 0!==p.daysContainer){be(p.daysContainer),p.weekNumbers&&be(p.weekNumbers);for(var e=document.createDocumentFragment(),t=0;tp.config.maxDate.getMonth()||((e=ye("option","flatpickr-monthDropdown-month")).value=new Date(p.currentYear,t).getMonth().toString(),e.textContent=Ce(t,p.config.shorthandCurrentMonth,p.l10n),e.tabIndex=-1,p.currentMonth===t&&(e.selected=!0),p.monthsDropdownContainer.appendChild(e))}}function q(){be(p.monthNav),p.monthNav.appendChild(p.prevMonthNav),p.config.showMonths&&(p.yearElements=[],p.monthElements=[]);for(var e,t,n,i,o,s=p.config.showMonths;s--;){o=i=r=n=t=e=void 0,e=ye("div","flatpickr-month"),t=window.document.createDocumentFragment(),n=1\n "+t.join("")+"\n \n "}}function y(e,t){t=(t=void 0===t?!0:t)?e:e-p.currentMonth;t<0&&!0===p._hidePrevMonthArrow||0p.config.maxDate.getFullYear()||(t=p.currentYear!==e,p.currentYear=e||p.currentYear,p.config.maxDate&&p.currentYear===p.config.maxDate.getFullYear()?p.currentMonth=Math.min(p.config.maxDate.getMonth(),p.currentMonth):p.config.minDate&&p.currentYear===p.config.minDate.getFullYear()&&(p.currentMonth=Math.max(p.config.minDate.getMonth(),p.currentMonth)),t&&(p.redraw(),k("onYearChange"),v()))}function D(e,t){var n=p.parseDate(e,void 0,t=void 0===t?!0:t);if(p.config.minDate&&n&&Ee(n,p.config.minDate,void 0!==t?t:!p.minDateHasTime)<0||p.config.maxDate&&n&&0=a.from.getTime()&&n.getTime()<=a.to.getTime())return o}return!o}function C(e){return void 0!==p.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&p.daysContainer.contains(e))}function U(e){e.target===p._input&&(0n,o=window.pageYOffset+t.top+(s?-n-2:e.offsetHeight+2),ve(p.calendarContainer,"arrowTop",!s),ve(p.calendarContainer,"arrowBottom",s),p.config.inline||(n=window.pageXOffset+t.left,s=e=!1,"center"===i?(n-=(r-t.width)/2,e=!0):"right"===i&&(n-=r-t.width,s=!0),ve(p.calendarContainer,"arrowLeft",!e&&!s),ve(p.calendarContainer,"arrowCenter",e),ve(p.calendarContainer,"arrowRight",s),i=window.document.body.offsetWidth-(window.pageXOffset+t.right),e=n+r>window.document.body.offsetWidth,s=i+r>window.document.body.offsetWidth,ve(p.calendarContainer,"rightMost",e),p.config.static||(p.calendarContainer.style.top=o+"px",e?s?void 0!==(o=function(){for(var e=null,t=0;tp.currentMonth+p.config.showMonths-1)&&"range"!==p.config.mode,p.selectedDateElem=e,"single"===p.config.mode?p.selectedDates=[n]:"multiple"===p.config.mode?(i=oe(n))?p.selectedDates.splice(parseInt(i),1):p.selectedDates.push(n):"range"===p.config.mode&&(2===p.selectedDates.length&&p.clear(!1,!1),p.latestSelectedDateObj=n,p.selectedDates.push(n),0!==Ee(n,p.selectedDates[0],!0)&&p.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})),u(),t&&(i=p.currentYear!==n.getFullYear(),p.currentYear=n.getFullYear(),p.currentMonth=n.getMonth(),i&&(k("onYearChange"),v()),k("onMonthChange")),E(),f(),T(),t||"range"===p.config.mode||1!==p.config.showMonths?void 0!==p.selectedDateElem&&void 0===p.hourElement&&p.selectedDateElem&&p.selectedDateElem.focus():_(e),void 0!==p.hourElement&&void 0!==p.hourElement&&p.hourElement.focus(),p.config.closeOnSelect&&(n="single"===p.config.mode&&!p.config.enableTime,i="range"===p.config.mode&&2===p.selectedDates.length&&!p.config.enableTime,(n||i)&&Z()),o())}p.parseDate=ke({config:p.config,l10n:p.l10n}),p._handlers=[],p.pluginElements=[],p.loadedPlugins=[],p._bind=a,p._setHoursFromDate=i,p._positionCalendar=x,p.changeMonth=y,p.changeYear=w,p.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);p.input.value="",void 0!==p.altInput&&(p.altInput.value="");void 0!==p.mobileInput&&(p.mobileInput.value="");p.selectedDates=[],!(p.latestSelectedDateObj=void 0)===t&&(p.currentYear=p._initialDate.getFullYear(),p.currentMonth=p._initialDate.getMonth());{var n,i;!0===p.config.enableTime&&(t=Se(p.config),n=t.hours,i=t.minutes,t=t.seconds,r(n,i,t))}p.redraw(),e&&k("onChange")},p.close=function(){p.isOpen=!1,p.isMobile||(void 0!==p.calendarContainer&&p.calendarContainer.classList.remove("open"),void 0!==p._input&&p._input.classList.remove("active"));k("onClose")},p._createElement=ye,p.destroy=function(){void 0!==p.config&&k("onDestroy");for(var e=p._handlers.length;e--;)p._handlers[e].remove();if(p._handlers=[],p.mobileInput)p.mobileInput.parentNode&&p.mobileInput.parentNode.removeChild(p.mobileInput),p.mobileInput=void 0;else if(p.calendarContainer&&p.calendarContainer.parentNode)if(p.config.static&&p.calendarContainer.parentNode){var t=p.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else p.calendarContainer.parentNode.removeChild(p.calendarContainer);p.altInput&&(p.input.type="text",p.altInput.parentNode&&p.altInput.parentNode.removeChild(p.altInput),delete p.altInput);p.input&&(p.input.type=p.input._type,p.input.classList.remove("flatpickr-input"),p.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete p[e]}catch(e){}})},p.isEnabled=D,p.jumpToDate=s,p.open=function(e,t){void 0===t&&(t=p._positionElement);var n;!0===p.isMobile?(e&&(e.preventDefault(),(n=De(e))&&n.blur()),void 0!==p.mobileInput&&(p.mobileInput.focus(),p.mobileInput.click()),k("onOpen")):p._input.disabled||p.config.inline||(n=p.isOpen,p.isOpen=!0,n||(p.calendarContainer.classList.add("open"),p._input.classList.add("active"),k("onOpen"),x(t)),!0!==p.config.enableTime||!0!==p.config.noCalendar||!1!==p.config.allowInput||void 0!==e&&p.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return p.hourElement.select()},50))},p.redraw=X,p.set=function(e,t){if(null!==e&&"object"==typeof e)for(var n in Object.assign(p.config,e),e)void 0!==M[n]&&M[n].forEach(function(e){return e()});else p.config[e]=t,void 0!==M[e]?M[e].forEach(function(e){return e()}):-1p.config.maxDate.getMonth():p.currentYear>p.config.maxDate.getFullYear()))}function se(t){return p.selectedDates.map(function(e){return p.formatDate(e,t)}).filter(function(e,t,n){return"range"!==p.config.mode||p.config.enableTime||n.indexOf(e)===t}).join("range"!==p.config.mode?p.config.conjunction:p.l10n.rangeSeparator)}function T(e){void 0===e&&(e=!0),void 0!==p.mobileInput&&p.mobileFormatStr&&(p.mobileInput.value=void 0!==p.latestSelectedDateObj?p.formatDate(p.latestSelectedDateObj,p.mobileFormatStr):""),p.input.value=se(p.config.dateFormat),void 0!==p.altInput&&(p.altInput.value=se(p.config.altFormat)),!1!==e&&k("onValueUpdate")}function re(e){var e=De(e),t=p.prevMonthNav.contains(e),n=p.nextMonthNav.contains(e);t||n?y(t?-1:1):0<=p.yearElements.indexOf(e)?e.select():e.classList.contains("arrowUp")?p.changeYear(p.currentYear+1):e.classList.contains("arrowDown")&&p.changeYear(p.currentYear-1)}p.element=p.input=c,p.isOpen=!1;var e=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],t=ce(ce({},JSON.parse(JSON.stringify(c.dataset||{}))),P),n={},O=(p.config.parseDate=t.parseDate,p.config.formatDate=t.formatDate,Object.defineProperty(p.config,"enable",{get:function(){return p.config._enable},set:function(e){p.config._enable=ne(e)}}),Object.defineProperty(p.config,"disable",{get:function(){return p.config._disable},set:function(e){p.config._disable=ne(e)}}),"time"===t.mode);function ae(t){return function(e){p.config["min"===t?"_minTime":"_maxTime"]=p.parseDate(e,"H:i:S")}}t.dateFormat||!t.enableTime&&!O||(N=Ie.defaultConfig.dateFormat||de.dateFormat,n.dateFormat=t.noCalendar||O?"H:i"+(t.enableSeconds?":S":""):N+" H:i"+(t.enableSeconds?":S":"")),t.altInput&&(t.enableTime||O)&&!t.altFormat&&(N=Ie.defaultConfig.altFormat||de.altFormat,n.altFormat=t.noCalendar||O?"h:i"+(t.enableSeconds?":S K":" K"):N+(" h:i"+(t.enableSeconds?":S":""))+" K"),Object.defineProperty(p.config,"minDate",{get:function(){return p.config._minDate},set:Q("min")}),Object.defineProperty(p.config,"maxDate",{get:function(){return p.config._maxDate},set:Q("max")}),Object.defineProperty(p.config,"minTime",{get:function(){return p.config._minTime},set:ae("min")}),Object.defineProperty(p.config,"maxTime",{get:function(){return p.config._maxTime},set:ae("max")}),"time"===t.mode&&(p.config.noCalendar=!0,p.config.enableTime=!0),Object.assign(p.config,n,t);for(var S=0;Sp.now.getTime()?p.config.minDate:p.config.maxDate&&p.config.maxDate.getTime()'+this.options.typing_text.replace("%s",this.options.min_length-e.length)+"")},t.prototype.update_list=function(){var e,t,n=this;this.search_welcome_message(),this.is_typing||(t=(e=r.trim(this.search_field.val())).length").attr("value",t.value).html(t.text).appendTo(s.element)}),t=this.search_field.val(),i=this.search_field.innerWidth(),this.element.trigger("chosen:updated"),this.is_multiple&&(o=this.element.parent().find(".csf-hide-select").val()||[],this.element.CSFChosenOrder(o,!0),this.search_field.css("width",i)),this.search_field.val(t),null!==this.chosenXhr.done&&this.chosenXhr.done(e)))},r.fn.CSFAjaxChosen=function(e){return this.each(function(){new t(this,e)})}}(jQuery),function(){var s,r,a=[].indexOf||function(e){for(var t=0,n=this.length;t"+this.escape_html(e.group_label)+""+e.html:e.html},c.prototype.mouse_enter=function(){return this.mouse_on_container=!0},c.prototype.mouse_leave=function(){return this.mouse_on_container=!1},c.prototype.input_focus=function(e){if(this.is_multiple){if(!this.active_field)return setTimeout((t=this,function(){return t.container_mousedown()}),50)}else if(!this.active_field)return this.activate_field();var t},c.prototype.input_blur=function(e){if(!this.mouse_on_container)return this.active_field=!1,setTimeout((t=this,function(){return t.blur_test()}),100);var t},c.prototype.label_click_handler=function(e){return this.is_multiple?this.container_mousedown(e):this.activate_field()},c.prototype.results_option_build=function(e){for(var t,n,i="",o=0,s=this.results_data,r=0,a=s.length;r=this.max_shown_results));r++);return i},c.prototype.result_add_option=function(e){var t,n;return e.search_match&&this.include_option_in_results(e)?(t=[],e.disabled||e.selected&&this.is_multiple||t.push("active-result"),!e.disabled||e.selected&&this.is_multiple||t.push("disabled-result"),e.selected&&t.push("result-selected"),null!=e.group_array_index&&t.push("group-option"),""!==e.classes&&t.push(e.classes),(n=document.createElement("li")).className=t.join(" "),e.style&&(n.style.cssText=e.style),n.setAttribute("data-option-array-index",e.array_index),n.innerHTML=e.highlighted_html||e.html,e.title&&(n.title=e.title),this.outerHTML(n)):""},c.prototype.result_add_group=function(e){var t,n;return(e.search_match||e.group_match)&&0"+this.escape_html(n)+""+this.escape_html(f)),null!=u&&(u.group_match=!0)):null!=s.group_array_index&&this.results_data[s.group_array_index].search_match&&(s.search_match=!0)));return this.result_clear_highlight(),h<1&&a.length?(this.update_results_content(""),this.no_results(a)):(this.update_results_content(this.results_option_build()),null!=e&&e.skip_highlight?void 0:this.winnow_results_set_highlight())},c.prototype.get_search_regex=function(e){var t,e=this.search_contains?e:"(^|\\s|\\b)"+e+"[^\\s]*";return this.enable_split_word_search||this.search_contains||(e="^"+e),t=this.case_sensitive_search?"":"i",new RegExp(e,t)},c.prototype.search_string_match=function(e,t){t=t.exec(e);return!this.search_contains&&null!=t&&t[1]&&(t.index+=1),t},c.prototype.choices_count=function(){var e,t,n;if(null==this.selected_option_count)for(e=this.selected_option_count=0,t=(n=this.form_field.options).length;e\n '+this.default_text+'\n
    \n\n
    \n \n
      \n
      '},c.prototype.get_multi_html=function(){return'
        \n
      • \n \n
      • \n
      \n
      \n
        \n
        '},c.prototype.get_no_results_html=function(e){return'
      • \n '+this.results_none_found+" "+this.escape_html(e)+"\n
      • "},c.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?8<=document.documentMode:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},c.default_multiple_text="Select Some Options",c.default_single_text="Select an Option",c.default_no_result_text="No results match",s=c,(a=jQuery).fn.extend({chosen:function(i){return s.browser_is_supported()?this.each(function(e){var t=a(this),n=t.data("chosen");"destroy"===i?n instanceof o&&n.destroy():n instanceof o||t.data("chosen",new o(this,i))}):this}}),o=function(){var e,t=o,n=s;for(e in n)l.call(n,e)&&(t[e]=n[e]);function i(){this.constructor=t}function o(){return o.__super__.constructor.apply(this,arguments)}return i.prototype=n.prototype,t.prototype=new i,t.__super__=n.prototype,o.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},o.prototype.set_up_html=function(){var e=["chosen-container"];return e.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push("chosen-rtl"),e={class:e.join(" "),title:this.form_field.title},this.form_field.id.length&&(e.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
        ",e),this.container.width(this.container_width()),this.is_multiple?this.container.html(this.get_multi_html()):this.container.html(this.get_single_html()),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},o.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},o.prototype.register_observers=function(){var t,n,i,o,s,r,a,l,c,h,u,d,f,p,_,m,g,v,y,b,w,D,C,x;return this.container.on("touchstart.chosen",(t=this,function(e){t.container_mousedown(e)})),this.container.on("touchend.chosen",(n=this,function(e){n.container_mouseup(e)})),this.container.on("mousedown.chosen",(i=this,function(e){i.container_mousedown(e)})),this.container.on("mouseup.chosen",(o=this,function(e){o.container_mouseup(e)})),this.container.on("mouseenter.chosen",(s=this,function(e){s.mouse_enter(e)})),this.container.on("mouseleave.chosen",(r=this,function(e){r.mouse_leave(e)})),this.search_results.on("mouseup.chosen",(a=this,function(e){a.search_results_mouseup(e)})),this.search_results.on("mouseover.chosen",(l=this,function(e){l.search_results_mouseover(e)})),this.search_results.on("mouseout.chosen",(c=this,function(e){c.search_results_mouseout(e)})),this.search_results.on("mousewheel.chosen DOMMouseScroll.chosen",(h=this,function(e){h.search_results_mousewheel(e)})),this.search_results.on("touchstart.chosen",(u=this,function(e){u.search_results_touchstart(e)})),this.search_results.on("touchmove.chosen",(d=this,function(e){d.search_results_touchmove(e)})),this.search_results.on("touchend.chosen",(f=this,function(e){f.search_results_touchend(e)})),this.form_field_jq.on("chosen:updated.chosen",(p=this,function(e){p.results_update_field(e)})),this.form_field_jq.on("chosen:activate.chosen",(_=this,function(e){_.activate_field(e)})),this.form_field_jq.on("chosen:open.chosen",(m=this,function(e){m.container_mousedown(e)})),this.form_field_jq.on("chosen:close.chosen",(g=this,function(e){g.close_field(e)})),this.search_field.on("blur.chosen",(v=this,function(e){v.input_blur(e)})),this.search_field.on("keyup.chosen",(y=this,function(e){y.keyup_checker(e)})),this.search_field.on("keydown.chosen",(b=this,function(e){b.keydown_checker(e)})),this.search_field.on("focus.chosen",(w=this,function(e){w.input_focus(e)})),this.search_field.on("cut.chosen",(D=this,function(e){D.clipboard_event_checker(e)})),this.search_field.on("paste.chosen",(C=this,function(e){C.clipboard_event_checker(e)})),this.is_multiple?this.search_choices.on("click.chosen",(x=this,function(e){x.choices_click(e)})):this.container.on("click.chosen",function(e){e.preventDefault()})},o.prototype.destroy=function(){return a(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),0",{class:"search-choice"}).html(""+this.choice_label(e)+"");return e.disabled?n.addClass("search-choice-disabled"):((e=a("",{class:"search-choice-close","data-option-array-index":e.array_index})).on("click.chosen",(t=this,function(e){return t.choice_destroy_link_click(e)})),n.append(e)),this.search_container.before(n)},o.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(a(e.target))},o.prototype.choice_destroy=function(e){if(this.result_deselect(e[0].getAttribute("data-option-array-index")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&0'),this.selected_item.addClass("chosen-single-with-deselect")},o.prototype.get_search_field_value=function(){return this.search_field.val()},o.prototype.get_search_text=function(){return a.trim(this.get_search_field_value())},o.prototype.escape_html=function(e){return a("
        ").text(e).html()},o.prototype.winnow_results_set_highlight=function(){var e=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),e=(e.length?e:this.search_results.find(".active-result")).first();if(null!=e)return this.result_do_highlight(e)},o.prototype.no_results=function(e){e=this.get_no_results_html(e);return this.search_results.append(e),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},o.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},o.prototype.keydown_arrow=function(){var e;return this.results_showing&&this.result_highlight?(e=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(e):void 0:this.results_show()},o.prototype.keyup_arrow=function(){var e;return this.results_showing||this.is_multiple?this.result_highlight?(e=this.result_highlight.prevAll("li.active-result")).length?this.result_do_highlight(e.first()):(0").css(o)).text(this.get_search_field_value()),a("body").append(e),r=e.width()+25,e.remove(),this.container.is(":visible")&&(r=Math.min(this.container.outerWidth()-10,r)),this.search_field.width(r)}},o.prototype.trigger_form_field_change=function(e){return this.form_field_jq.trigger("input",e),this.form_field_jq.trigger("change",e)},o}()}.call(this),function(r){"use strict";function i(e,t,n){this.init(e,t,n)}function e(){this.rules=[]}r.extend(i.prototype,{init:function(e,t,n){this.controller=e,this.condition=t,this.value=n,this.rules=[],this.controls=[]},evalCondition:function(e,t,n,i,o){if("=="==n)return this.checkBoolean(i)==this.checkBoolean(o);if("!="==n)return this.checkBoolean(i)!=this.checkBoolean(o);if(">="==n)return Number(o)>=Number(i);if("<="==n)return Number(o)<=Number(i);if(">"==n)return Number(o)>Number(i);if("<"==n)return Number(o)cdn_url . $this->version .'/codemirror.min.js' ), array( 'sakurairo_csf' )); - wp_enqueue_script( 'csf-codemirror-loadmode', esc_url( $this->cdn_url . $this->version .'/addon/mode/loadmode.min.js' ), array( 'csf-codemirror' )); + wp_enqueue_script( 'csf-codemirror', esc_url( $this->cdn_url . $this->version .'/codemirror.min.js' ), array( 'sakurairo_csf' ), $this->version, true ); + wp_enqueue_script( 'csf-codemirror-loadmode', esc_url( $this->cdn_url . $this->version .'/addon/mode/loadmode.min.js' ), array( 'csf-codemirror' ), $this->version, true ); } if ( ! wp_style_is( 'csf-codemirror' ) ) { - wp_enqueue_style( 'csf-codemirror', esc_url( $this->cdn_url . $this->version .'/codemirror.min.css' ), array()); + wp_enqueue_style( 'csf-codemirror', esc_url( $this->cdn_url . $this->version .'/codemirror.min.css' ), array(), $this->version ); } } diff --git a/opt/option-framework.php b/opt/option-framework.php index caf41bee..f4c86323 100644 --- a/opt/option-framework.php +++ b/opt/option-framework.php @@ -11,7 +11,7 @@ * Plugin URI: https://github.com/Fuukei/Sakurairo_CSF * Author: Codestar with Fuukei * Author URI: https://github.com/Fuukei - * Version: 2.2.9 + * Version: 2.3.0e * Description: A Simple and Lightweight WordPress Option Framework for Sakurairo * Text Domain: sakurairo_csf * Domain Path: /languages diff --git a/style.css b/style.css index b6175883..93d0cef5 100644 --- a/style.css +++ b/style.css @@ -6,7 +6,7 @@ Theme URI: https://github.com/mirai-mamori/Sakurairo Author: Created by Fuukei Author URI: https://fuukei.org/ Description: A colorful, Easy-to-use, Perfect Experience, and Powerful Customizable WordPress Theme (Based on Theme Sakura) -Version: 2.6.2 +Version: 2.6.3 Tested up to: 6.2 Requires at least: 5.8 Requires PHP: 7.2 From 8337a44a86270e0a24209bb1d1ce41cfb86a1aa3 Mon Sep 17 00:00:00 2001 From: KotoriK <52659125+KotoriK@users.noreply.github.com> Date: Wed, 12 Jul 2023 09:10:37 +0800 Subject: [PATCH 10/39] =?UTF-8?q?refactor:=20push=5Femoji=5Fpanel()?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=95=B0=E7=BB=84=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.php | 49 ++++--------------------------------------------- 1 file changed, 4 insertions(+), 45 deletions(-) diff --git a/functions.php b/functions.php index b7daae7e..5c7c523a 100644 --- a/functions.php +++ b/functions.php @@ -1092,51 +1092,10 @@ function tieba_smile_filter($content) function push_emoji_panel() { - return ' - (⌒▽⌒) - ( ̄▽ ̄) - (=・ω・=) - (`・ω・´) - (〜 ̄△ ̄)〜 - (・∀・) - (°∀°)ノ - ( ̄3 ̄) - ╮( ̄▽ ̄)╭ - (´_ゝ`) - ←_← - →_→ - (<_<) - (>_>) - (;¬_¬) - ("▔□▔)/ - (゚Д゚≡゚д゚)!? - Σ(゚д゚;) - Σ( ̄□ ̄||) - (’;ω;‘) - (/TДT)/ - (^・ω・^ ) - (。・ω・。) - (● ̄(エ) ̄●) - ε=ε=(ノ≧∇≦)ノ - (’・_・‘) - (-_-#) - ( ̄へ ̄) - ( ̄ε(# ̄)Σ - ヽ(‘Д’)ノ - (#-_-)┯━┯ - (╯°口°)╯(┴—┴ - ←◡← - ( ♥д♥) - _(:3」∠)_ - Σ>―(〃°ω°〃)♡→ - ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ - (╬゚д゚)▄︻┻┳═一 - ・*・:≡( ε:) - (笑) - (汗) - (泣) - (苦笑) - '; + $emojis = ['(⌒▽⌒)', '( ̄▽ ̄)', '(=・ω・=)', '(`・ω・´)', '(〜 ̄△ ̄)〜', '(・∀・)', '(°∀°)ノ', '( ̄3 ̄)', '╮( ̄▽ ̄)╭', '(´_ゝ`)', '←_←', '→_→', '(<_<)', '(>_>)', '(;¬_¬)', '("▔□▔)/', '(゚Д゚≡゚д゚)!?', 'Σ(゚д゚;)', 'Σ( ̄□ ̄||)', '(’;ω;‘)', '(/TДT)/', '(^・ω・^ )', '(。・ω・。)', '(● ̄(エ) ̄●)', 'ε=ε=(ノ≧∇≦)ノ', '(’・_・‘)', '(-_-#)', '( ̄へ ̄)', '( ̄ε(# ̄)Σ', 'ヽ(‘Д’)ノ', '(#-_-)┯━┯', '(╯°口°)╯(┴—┴', '←◡←', '( ♥д♥)', '_(:3」∠)_', 'Σ>―(〃°ω°〃)♡→', '⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄', '(╬゚д゚)▄︻┻┳═一', '・*・:≡( ε:)', '(笑)', '(汗)', '(泣)', '(苦笑)']; + return join('', array_map(function ($emoji) { + return '' . $emoji . ''; + }, $emojis)); } // bilibili smiles From cfe5599e7264524d653bf2450b48cdb56c134d40 Mon Sep 17 00:00:00 2001 From: KotoriK <52659125+KotoriK@users.noreply.github.com> Date: Wed, 12 Jul 2023 09:15:09 +0800 Subject: [PATCH 11/39] =?UTF-8?q?docs:=20=E9=80=89=E9=A1=B9=E4=B8=AD?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=9C=80=E8=A6=81=E6=8B=93=E5=B1=95=E7=9A=84?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Relate to #765, possibly #746 --- opt/options/theme-options.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opt/options/theme-options.php b/opt/options/theme-options.php index 99a9bfab..85f1417b 100644 --- a/opt/options/theme-options.php +++ b/opt/options/theme-options.php @@ -2664,7 +2664,7 @@ function iro_validate_optional_url( $value ) { 'id' => 'article_auto_toc', 'type' => 'switcher', 'title' => __('Article Page Auto Show Menu','sakurairo_csf'), - 'label' => __('Enabled by default, the article page will automatically show the menu','sakurairo_csf'), + 'label' => __('Enabled by default, the article page will automatically show the menu. PHP extension "DOM" is required for this feature.','sakurairo_csf'), 'default' => true ), From c3d6489abd89773665d417b5e4749b1a9cdadeb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E7=92=83=E9=9B=A8=E8=90=BD?= <79274361+meng-luo@users.noreply.github.com> Date: Thu, 20 Jul 2023 23:09:17 +0800 Subject: [PATCH 12/39] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E8=AF=84?= =?UTF-8?q?=E8=AE=BA=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96QQ=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/classes/QQ.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/inc/classes/QQ.php b/inc/classes/QQ.php index 5e3f5a3c..9e31e11d 100644 --- a/inc/classes/QQ.php +++ b/inc/classes/QQ.php @@ -5,16 +5,15 @@ class QQ { public static function get_qq_info($qq) { - $get_info = file_get_contents('http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?get_nick=1&uins=' . $qq); - $get_info = mb_convert_encoding($get_info, "UTF-8", "GBK"); - $name = json_decode(substr($get_info, 17, -1), true); + $get_info = file_get_contents('https://api.qjqq.cn/api/qqinfo?qq=' . $qq); + $name = json_decode($get_info, true); if ($name) { $output = array( 'status' => 200, 'success' => true, 'message' => 'success', 'avatar' => 'https://q.qlogo.cn/headimg_dl?dst_uin=' . $qq . '&spec=100', - 'name' => $name[$qq][6], + 'name' => $name['name'], ); } else { $output = array( @@ -36,4 +35,4 @@ public static function get_qq_avatar($encrypted) { return 'https://q2.qlogo.cn/headimg_dl?dst_uin=' . $matches[0] . '&spec=100'; } } -} \ No newline at end of file +} From a320dfad2d47daeda410fa31736f3c64354d0b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E7=92=83=E9=9B=A8=E8=90=BD?= <79274361+meng-luo@users.noreply.github.com> Date: Thu, 20 Jul 2023 23:31:30 +0800 Subject: [PATCH 13/39] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/classes/QQ.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/inc/classes/QQ.php b/inc/classes/QQ.php index 9e31e11d..6f235f39 100644 --- a/inc/classes/QQ.php +++ b/inc/classes/QQ.php @@ -8,13 +8,15 @@ public static function get_qq_info($qq) { $get_info = file_get_contents('https://api.qjqq.cn/api/qqinfo?qq=' . $qq); $name = json_decode($get_info, true); if ($name) { - $output = array( - 'status' => 200, - 'success' => true, - 'message' => 'success', - 'avatar' => 'https://q.qlogo.cn/headimg_dl?dst_uin=' . $qq . '&spec=100', - 'name' => $name['name'], - ); + if ($name['code'] == 200){ + $output = array( + 'status' => 200, + 'success' => true, + 'message' => 'success', + 'avatar' => 'https://q2.qlogo.cn/headimg_dl?dst_uin=' . $qq . '&spec=100', + 'name' => $name['name'], + ); + } } else { $output = array( 'status' => 404, From cb817208780ddd863ef084c99ceb366bee6c5fe6 Mon Sep 17 00:00:00 2001 From: KotoriK <52659125+KotoriK@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:27:33 +0800 Subject: [PATCH 14/39] fix(deprecation): null parameter in dash_scheme() Fix #760 --- functions.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/functions.php b/functions.php index 5c7c523a..1c061df6 100644 --- a/functions.php +++ b/functions.php @@ -1520,11 +1520,19 @@ function update_theme_admin_notice_meta() { //dashboard scheme function dash_scheme($key, $name, $col1, $col2, $col3, $col4, $base, $focus, $current, $rules = "") { - $hash = "color_1=" . str_replace("#", "", $col1) . - "&color_2=" . str_replace("#", "", $col2) . - "&color_3=" . str_replace("#", "", $col3) . - "&color_4=" . str_replace("#", "", $col4) . - "&rules=" . urlencode($rules); + $hash = 'rules='. urlencode($rules); + if($col1){ + $hash .= '&color_1=' . str_replace("#", "", $col1); + } + if($col2){ + $hash .= '&color_2=' . str_replace("#", "", $col2); + } + if($col3){ + $hash .= '&color_3=' . str_replace("#", "", $col3); + } + if($col4){ + $hash .= '&color_4=' . str_replace("#", "", $col4); + } wp_admin_css_color( $key, From 31f031e0aa136154bf0645bec443c24d8fa20d9f Mon Sep 17 00:00:00 2001 From: KotoriK <52659125+KotoriK@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:32:37 +0800 Subject: [PATCH 15/39] fix(deprecation): automatic conversion of false to array Fix #760 in iro_opt_update() --- functions.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/functions.php b/functions.php index 1c061df6..30ff2c53 100644 --- a/functions.php +++ b/functions.php @@ -32,8 +32,12 @@ function iro_opt($option = '', $default = null) if (!function_exists('iro_opt_update')) { function iro_opt_update($option = '', $value = null) { - $options = get_option('iro_options'); - $options[$option] = $value; + $options = get_option('iro_options'); // 当数据库没有指定项时,WordPress会返回false + if($options){ + $options[$option] = $value; + }else{ + $options = array($option => $value); + } update_option('iro_options', $options); } } From b5b5d73522efce63ec599ef7cd6f7b6ada14cce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E5=B0=98?= <78602461+Molyleaf@users.noreply.github.com> Date: Sat, 26 Aug 2023 09:34:54 +0800 Subject: [PATCH 16/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=92=8CWP=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=8F=92=E4=BB=B6=E7=9A=84=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/login.css | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/inc/login.css b/inc/login.css index 26b09c63..d0c77e14 100644 --- a/inc/login.css +++ b/inc/login.css @@ -420,7 +420,21 @@ input[type=checkbox]:checked:before { vertical-align: middle; } -.vp-basic-btn -{ +.vp-basic-btn { border-radius: 12px !important; -} \ No newline at end of file +} + +.aiowps-captcha-equation hide-when-displaying-tfa-input { + padding: 0 35px; +} + +.aiowps-captcha-answer { + font-size: 16px; + font-family: "Microsoft Yahei"; + height: 46px; + border-radius: 12px; + margin-top: 5px; + min-height: 40px; + max-height: none; + text-indent: 8px; +} From ff5ed00cbaafdf3105b40d43cdac21e78d249f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E5=B0=98?= <78602461+Molyleaf@users.noreply.github.com> Date: Sat, 26 Aug 2023 09:39:58 +0800 Subject: [PATCH 17/39] Update login.css --- inc/login.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/login.css b/inc/login.css index d0c77e14..e40d13dc 100644 --- a/inc/login.css +++ b/inc/login.css @@ -424,8 +424,8 @@ input[type=checkbox]:checked:before { border-radius: 12px !important; } -.aiowps-captcha-equation hide-when-displaying-tfa-input { - padding: 0 35px; +.aiowps-captcha-equation.hide-when-displaying-tfa-input { + padding: 0 35px; } .aiowps-captcha-answer { From 0e3bde7cd75337fa9ea5cee654ee7bc35611c514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Thu, 31 Aug 2023 10:39:38 +0800 Subject: [PATCH 18/39] Up PUC to 5.2 --- .../Puc/v5p1/Vcs/PluginUpdateChecker.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/update-checker/Puc/v5p1/Vcs/PluginUpdateChecker.php b/update-checker/Puc/v5p1/Vcs/PluginUpdateChecker.php index 082a847f..278ef82a 100644 --- a/update-checker/Puc/v5p1/Vcs/PluginUpdateChecker.php +++ b/update-checker/Puc/v5p1/Vcs/PluginUpdateChecker.php @@ -85,6 +85,21 @@ public function requestInfo($unusedParameter = null) { $this->setInfoFromHeader($remoteHeader, $info); } + //Sanity check: Reject updates that don't have a version number. + //This can happen when we're using a branch, and we either fail to retrieve the main plugin + //file or the file doesn't have a "Version" header. + if ( empty($info->version) ) { + do_action( + 'puc_api_error', + new \WP_Error( + 'puc-no-plugin-version', + 'Could not find the version number in the repository.' + ), + null, null, $this->slug + ); + return null; + } + //Try parsing readme.txt. If it's formatted according to WordPress.org standards, it will contain //a lot of useful information like the required/tested WP version, changelog, and so on. if ( $this->readmeTxtExistsLocally() ) { From ba52f1b55855f4748a5c04207ec4cb120862da7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Thu, 31 Aug 2023 11:48:04 +0800 Subject: [PATCH 19/39] Languages Update --- opt/languages/ja.mo | Bin 111116 -> 111216 bytes opt/languages/ja.po | 11 +++++++---- opt/languages/sakurairo_csf.pot | 6 ++++-- opt/languages/zh_CN.mo | Bin 90715 -> 90803 bytes opt/languages/zh_CN.po | 10 ++++++---- opt/languages/zh_TW.mo | Bin 90707 -> 90797 bytes opt/languages/zh_TW.po | 10 ++++++---- 7 files changed, 23 insertions(+), 14 deletions(-) diff --git a/opt/languages/ja.mo b/opt/languages/ja.mo index 797ac5e5970b5c65b864f43e3498e8556bd43d44..220187f7fb8f4eb152d2599e67733aacc00cba8b 100644 GIT binary patch delta 11633 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 delta 11548 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 AD*ylh diff --git a/opt/languages/ja.po b/opt/languages/ja.po index 2d6a549b..c206803f 100644 --- a/opt/languages/ja.po +++ b/opt/languages/ja.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Codestar Framework Modified by Fuukei\n" -"POT-Creation-Date: 2023-06-10 19:55+0800\n" -"PO-Revision-Date: 2023-06-10 19:55+0800\n" +"POT-Creation-Date: 2023-08-31 11:42+0800\n" +"PO-Revision-Date: 2023-08-31 11:43+0800\n" "Last-Translator: \n" "Language-Team: \n" "Language: ja\n" @@ -2848,9 +2848,12 @@ msgid "Article Page Auto Show Menu" msgstr "アーティクルページの自動表示メニュー" #: options/theme-options.php:2667 -msgid "Enabled by default, the article page will automatically show the menu" +msgid "" +"Enabled by default, the article page will automatically show the menu. PHP " +"extension \"DOM\" is required for this feature." msgstr "" -"既定で有効になっている場合、記事ページには自動的にメニューが表示されます。" +"デフォルトで有効にすると、記事ページは自動的にメニューを表示します。この機能" +"にはPHP拡張機能 \"DOM \"が必要です。" #: options/theme-options.php:2674 msgid "Inline Code Background Color" diff --git a/opt/languages/sakurairo_csf.pot b/opt/languages/sakurairo_csf.pot index 5bdb058d..b8a03b08 100644 --- a/opt/languages/sakurairo_csf.pot +++ b/opt/languages/sakurairo_csf.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Codestar Framework Modified by Fuukei\n" -"POT-Creation-Date: 2023-06-10 19:55+0800\n" +"POT-Creation-Date: 2023-08-31 11:42+0800\n" "PO-Revision-Date: 2021-06-26 16:15+0800\n" "Last-Translator: \n" "Language-Team: \n" @@ -2641,7 +2641,9 @@ msgid "Article Page Auto Show Menu" msgstr "" #: options/theme-options.php:2667 -msgid "Enabled by default, the article page will automatically show the menu" +msgid "" +"Enabled by default, the article page will automatically show the menu. PHP " +"extension \"DOM\" is required for this feature." msgstr "" #: options/theme-options.php:2674 diff --git a/opt/languages/zh_CN.mo b/opt/languages/zh_CN.mo index 5404a4353aaa980aab9bf670ca9bde521b346ed7..d31fe12ce15cf091c25455e30574f1a1183a17de 100644 GIT binary patch delta 11556 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 V?~o>te*S@!fpj|;g#`{a{XY(EvpN6( delta 11459 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 TI|zvP_ndkE@bjH_c6Z79_ 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 diff --git a/opt/languages/zh_TW.po b/opt/languages/zh_TW.po index 08d7d32d..6c8ba6b2 100644 --- a/opt/languages/zh_TW.po +++ b/opt/languages/zh_TW.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Codestar Framework Modified by Fuukei\n" -"POT-Creation-Date: 2023-06-10 19:55+0800\n" -"PO-Revision-Date: 2023-06-10 19:55+0800\n" +"POT-Creation-Date: 2023-08-31 11:46+0800\n" +"PO-Revision-Date: 2023-08-31 11:47+0800\n" "Last-Translator: \n" "Language-Team: \n" "Language: zh_TW\n" @@ -2732,8 +2732,10 @@ msgid "Article Page Auto Show Menu" msgstr "文章頁面自動顯示菜單" #: options/theme-options.php:2667 -msgid "Enabled by default, the article page will automatically show the menu" -msgstr "默認開啟,文章頁面會自動顯示菜單" +msgid "" +"Enabled by default, the article page will automatically show the menu. PHP " +"extension \"DOM\" is required for this feature." +msgstr "默認開啟,文章頁面會自動顯示菜單,此功能需要PHP擴展“DOM”。" #: options/theme-options.php:2674 msgid "Inline Code Background Color" From 266a157281a1f73b0d77244c73d799a8449a0379 Mon Sep 17 00:00:00 2001 From: KanoChan Date: Sun, 25 Jun 2023 21:48:04 +0800 Subject: [PATCH 20/39] =?UTF-8?q?fix(=E7=99=BB=E5=BD=95=E6=A8=A1=E6=9D=BF)?= =?UTF-8?q?:=20=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E6=97=B6=E6=9C=89=E6=A6=82=E7=8E=87=E5=AF=BC=E8=87=B4=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=A1=86=E6=97=A0=E6=B3=95=E8=BE=93=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 无法输入的原因是loading元素全屏遮挡了输入框 理论上资源加载完成后,应该要把loading移除,但是使用transitionend事件来触发移除操作,会概率性导致无法移除loading,具体原因暂不明。从测试上来看,页面加载速度越快,该问题出现的概率越大。有一个简单的触发步骤是:登录页面加载后,不输入任何信息,连续点击“登录”按钮。另外使用缓存刷新页面也有概率能够触发。 修正的话,是弃用transitionend事件,改为延迟400ms后直接移除loading元素。之所以是400ms,是因为以前transitionend事件的动画时间就是400ms。从体验上看,没有明显的视觉变化。 --- functions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/functions.php b/functions.php index 30ff2c53..d0169882 100644 --- a/functions.php +++ b/functions.php @@ -855,9 +855,9 @@ function custom_html() { document.body.style.backgroundImage = `url(${src})` loading.classList.add("hide"); loading.classList.remove("show"); - loading.addEventListener("transitionend", () => { + setTimeout(function() { loading.remove() - }); + }, 400); }, img = document.createElement('img') img.src = src From 59a0f2a03204d91cd0d105f319eca023c331582e Mon Sep 17 00:00:00 2001 From: KanoChan Date: Wed, 23 Aug 2023 12:42:17 +0800 Subject: [PATCH 21/39] =?UTF-8?q?fix(=E9=AA=8C=E8=AF=81=E7=A0=81=E5=A4=84?= =?UTF-8?q?=E7=90=86):=20=E6=89=BE=E5=9B=9E=E5=AF=86=E7=A0=81=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E9=AA=8C=E8=AF=81=E7=A0=81=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: mirai-mamori/Sakurairo#777 --- functions.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/functions.php b/functions.php index 30ff2c53..3d7a0e2a 100644 --- a/functions.php +++ b/functions.php @@ -2219,9 +2219,9 @@ function lostpassword_CHECK($errors) if ($check['code'] != 5) { return $errors->add('invalid_department ', '错误:' . $check['msg']); } - } - return $errors->add('invalid_department', '错误:验证码为空!'); - + } else { + return $errors->add('invalid_department', '错误:验证码为空!'); + } } add_action('lostpassword_post', 'lostpassword_CHECK'); From fa3d140d64e482c1123af4f06015d30888fbe322 Mon Sep 17 00:00:00 2001 From: KanoChan Date: Fri, 30 Jun 2023 00:59:25 +0800 Subject: [PATCH 22/39] =?UTF-8?q?fix(theme-options):=20=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E4=B8=8E=E5=AE=9E=E9=99=85=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=B8=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 正确做法是两种样式都可以应用二级菜单提示箭头 --- opt/options/theme-options.php | 1 - 1 file changed, 1 deletion(-) diff --git a/opt/options/theme-options.php b/opt/options/theme-options.php index 85f1417b..7a16c944 100644 --- a/opt/options/theme-options.php +++ b/opt/options/theme-options.php @@ -502,7 +502,6 @@ function iro_validate_optional_url( $value ) { 'type' => 'switcher', 'title' => __('Secondary Menu Prompt Arrow','sakurairo_csf'), 'label' => __('After turning on, the menu prompt arrow will appear in the secondary menu of the navigation menu','sakurairo_csf'), - 'dependency' => array( 'nav_menu_style', '==', 'sakura', '', 'true' ), 'default' => false ), From aca94d9c08c43d7bb21266dc1060270f260be1be Mon Sep 17 00:00:00 2001 From: KanoChan Date: Fri, 30 Jun 2023 16:46:36 +0800 Subject: [PATCH 23/39] =?UTF-8?q?fix(theme-options):=20=E7=99=BD=E7=8C=ABl?= =?UTF-8?q?ogo=E9=80=89=E9=A1=B9=E4=BE=9D=E8=B5=96=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=88=90=E4=BA=86=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- opt/options/theme-options.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opt/options/theme-options.php b/opt/options/theme-options.php index 7a16c944..0205d62e 100644 --- a/opt/options/theme-options.php +++ b/opt/options/theme-options.php @@ -549,7 +549,7 @@ function iro_validate_optional_url( $value ) { 'id' => 'text_secondary', 'type' => 'text', 'title' => __('Secondary Text','sakurairo_csf'), - 'dependency' => array( 'text_b', '!=', '' ), + 'dependency' => array( 'text_b', '!=', '', '', 'true' ), ), array( 'id' => 'font_name', From 7784c0b83b488b720e68e91c12940c7285e05f49 Mon Sep 17 00:00:00 2001 From: KanoChan Date: Wed, 23 Aug 2023 13:37:57 +0800 Subject: [PATCH 24/39] =?UTF-8?q?perf(=E8=AE=BE=E7=BD=AE=E9=80=89=E9=A1=B9?= =?UTF-8?q?):=20=E4=BC=98=E5=8C=96=E9=9A=8F=E6=9C=BA=E5=9B=BE=E9=80=89?= =?UTF-8?q?=E9=A1=B9=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 随机图选择为本地时,无需填写URL。 --- opt/options/theme-options.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/opt/options/theme-options.php b/opt/options/theme-options.php index 0205d62e..dafeafa1 100644 --- a/opt/options/theme-options.php +++ b/opt/options/theme-options.php @@ -1609,7 +1609,10 @@ function iro_validate_optional_url( $value ) { 'type' => 'text', 'title' => __('Webp Optimization/External API Desktop Side Random Graphics Address','sakurairo_csf'), 'desc' => __('Fill in an URL','sakurairo_csf'), - 'dependency' => array( 'cover_switch', '==', 'true', '', 'true' ), + 'dependency' => array( + array( 'cover_switch', '==', 'true', '', 'true' ), + array( 'random_graphs_options', '!=', 'local', '', 'true' ), + ), 'default' => 'https://api.maho.cc/random-img/pc.php', 'sanitize' => false, 'validate' => 'csf_validate_url', @@ -1622,6 +1625,7 @@ function iro_validate_optional_url( $value ) { 'dependency' => array( array( 'random_graphs_mts', '==', 'true' ), array( 'cover_switch', '==', 'true', '', 'true' ), + array( 'random_graphs_options', '!=', 'local', '', 'true' ), ), 'desc' => __('Fill in an URL','sakurairo_csf'), 'default' => 'https://api.maho.cc/random-img/mobile.php', From d564783471606ad4ff982c1547998b38d0f33db4 Mon Sep 17 00:00:00 2001 From: KotoriK <52659125+KotoriK@users.noreply.github.com> Date: Fri, 1 Sep 2023 09:52:49 +0800 Subject: [PATCH 25/39] chore: update composer dependencies --- composer.lock | 145 +++--- vendor/composer/ClassLoader.php | 96 ++-- vendor/composer/InstalledVersions.php | 17 +- vendor/composer/autoload_classmap.php | 1 + vendor/composer/autoload_files.php | 1 - vendor/composer/autoload_static.php | 2 +- vendor/composer/installed.json | 186 ++++--- vendor/composer/installed.php | 72 +-- vendor/guzzlehttp/guzzle/CHANGELOG.md | 107 +++- vendor/guzzlehttp/guzzle/README.md | 14 +- vendor/guzzlehttp/guzzle/UPGRADING.md | 2 +- vendor/guzzlehttp/guzzle/composer.json | 10 +- vendor/guzzlehttp/guzzle/src/Client.php | 40 +- .../guzzlehttp/guzzle/src/ClientInterface.php | 2 +- .../guzzle/src/Cookie/CookieJar.php | 56 +-- .../guzzle/src/Cookie/CookieJarInterface.php | 5 +- .../guzzle/src/Cookie/SessionCookieJar.php | 2 +- .../guzzle/src/Cookie/SetCookie.php | 84 +++- .../guzzle/src/Handler/CurlFactory.php | 97 +++- .../guzzle/src/Handler/CurlMultiHandler.php | 13 +- .../guzzle/src/Handler/EasyHandle.php | 2 +- .../guzzle/src/Handler/HeaderProcessor.php | 4 +- .../guzzle/src/Handler/MockHandler.php | 3 +- .../guzzle/src/Handler/StreamHandler.php | 66 ++- vendor/guzzlehttp/guzzle/src/HandlerStack.php | 16 +- .../guzzle/src/MessageFormatter.php | 17 +- .../guzzle/src/MessageFormatterInterface.php | 2 +- vendor/guzzlehttp/guzzle/src/Middleware.php | 20 +- .../guzzle/src/PrepareBodyMiddleware.php | 1 + .../guzzle/src/RedirectMiddleware.php | 12 +- .../guzzlehttp/guzzle/src/RequestOptions.php | 16 +- .../guzzlehttp/guzzle/src/RetryMiddleware.php | 7 +- .../guzzlehttp/guzzle/src/TransferStats.php | 4 +- vendor/guzzlehttp/guzzle/src/Utils.php | 22 +- vendor/guzzlehttp/guzzle/src/functions.php | 8 +- .../guzzle/src/functions_include.php | 2 +- vendor/guzzlehttp/promises/CHANGELOG.md | 35 ++ vendor/guzzlehttp/promises/README.md | 21 +- vendor/guzzlehttp/promises/composer.json | 20 +- .../promises/src/AggregateException.php | 4 +- .../promises/src/CancellationException.php | 2 + vendor/guzzlehttp/promises/src/Coroutine.php | 39 +- vendor/guzzlehttp/promises/src/Create.php | 21 +- vendor/guzzlehttp/promises/src/Each.php | 26 +- .../guzzlehttp/promises/src/EachPromise.php | 43 +- .../promises/src/FulfilledPromise.php | 29 +- vendor/guzzlehttp/promises/src/Is.php | 18 +- vendor/guzzlehttp/promises/src/Promise.php | 51 +- .../promises/src/PromiseInterface.php | 34 +- .../promises/src/PromisorInterface.php | 6 +- .../promises/src/RejectedPromise.php | 30 +- .../promises/src/RejectionException.php | 15 +- vendor/guzzlehttp/promises/src/TaskQueue.php | 16 +- .../promises/src/TaskQueueInterface.php | 10 +- vendor/guzzlehttp/promises/src/Utils.php | 69 +-- vendor/guzzlehttp/promises/src/functions.php | 363 -------------- .../promises/src/functions_include.php | 6 - vendor/guzzlehttp/psr7/CHANGELOG.md | 37 +- vendor/guzzlehttp/psr7/README.md | 24 +- vendor/guzzlehttp/psr7/composer.json | 5 +- vendor/guzzlehttp/psr7/src/AppendStream.php | 14 +- vendor/guzzlehttp/psr7/src/BufferStream.php | 2 - vendor/guzzlehttp/psr7/src/FnStream.php | 9 +- vendor/guzzlehttp/psr7/src/Header.php | 2 +- vendor/guzzlehttp/psr7/src/HttpFactory.php | 8 +- vendor/guzzlehttp/psr7/src/InflateStream.php | 6 +- vendor/guzzlehttp/psr7/src/Message.php | 28 +- vendor/guzzlehttp/psr7/src/MessageTrait.php | 21 +- vendor/guzzlehttp/psr7/src/MimeType.php | 34 +- .../guzzlehttp/psr7/src/MultipartStream.php | 8 +- vendor/guzzlehttp/psr7/src/PumpStream.php | 6 +- vendor/guzzlehttp/psr7/src/Query.php | 4 +- vendor/guzzlehttp/psr7/src/Request.php | 6 +- vendor/guzzlehttp/psr7/src/Response.php | 1 + vendor/guzzlehttp/psr7/src/Rfc7230.php | 2 +- vendor/guzzlehttp/psr7/src/ServerRequest.php | 14 +- vendor/guzzlehttp/psr7/src/Stream.php | 11 +- .../psr7/src/StreamDecoratorTrait.php | 5 +- vendor/guzzlehttp/psr7/src/StreamWrapper.php | 60 +-- vendor/guzzlehttp/psr7/src/Uri.php | 51 +- vendor/guzzlehttp/psr7/src/UriNormalizer.php | 10 +- vendor/guzzlehttp/psr7/src/UriResolver.php | 18 +- vendor/guzzlehttp/psr7/src/Utils.php | 10 +- vendor/haozi-team/chatgpt-php/CHANGELOG.md | 21 + vendor/haozi-team/chatgpt-php/README.md | 9 +- vendor/haozi-team/chatgpt-php/src/V1.php | 473 ++++++++++++++++-- .../haozi-team/chatgpt-php/tests/V1Test.php | 12 +- vendor/psr/http-client/README.md | 2 +- vendor/psr/http-client/composer.json | 4 +- vendor/psr/http-factory/.gitignore | 2 - vendor/psr/http-factory/.pullapprove.yml | 7 - vendor/psr/http-factory/README.md | 12 +- vendor/psr/http-factory/composer.json | 4 +- vendor/psr/http-message/composer.json | 4 +- .../psr/http-message/src/MessageInterface.php | 24 +- .../psr/http-message/src/RequestInterface.php | 15 +- .../http-message/src/ResponseInterface.php | 8 +- .../src/ServerRequestInterface.php | 24 +- .../psr/http-message/src/StreamInterface.php | 28 +- .../src/UploadedFileInterface.php | 14 +- vendor/psr/http-message/src/UriInterface.php | 34 +- vendor/symfony/polyfill-ctype/LICENSE | 2 +- vendor/symfony/polyfill-ctype/composer.json | 2 +- vendor/symfony/polyfill-php80/LICENSE | 2 +- vendor/symfony/polyfill-php80/composer.json | 2 +- vendor/symfony/polyfill-php81/LICENSE | 2 +- vendor/symfony/polyfill-php81/README.md | 1 + .../Resources/stubs/CURLStringFile.php | 51 ++ vendor/symfony/polyfill-php81/composer.json | 2 +- 109 files changed, 1776 insertions(+), 1393 deletions(-) delete mode 100644 vendor/guzzlehttp/promises/src/functions.php delete mode 100644 vendor/guzzlehttp/promises/src/functions_include.php delete mode 100644 vendor/psr/http-factory/.gitignore delete mode 100644 vendor/psr/http-factory/.pullapprove.yml create mode 100644 vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php diff --git a/composer.lock b/composer.lock index f2e10ad5..28599f8c 100644 --- a/composer.lock +++ b/composer.lock @@ -68,22 +68,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.5.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -94,7 +94,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -108,9 +109,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -176,7 +174,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" }, "funding": [ { @@ -192,38 +190,37 @@ "type": "tidelift" } ], - "time": "2022-08-28T15:39:27+00:00" + "time": "2023-08-27T10:20:53+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -260,7 +257,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.0.1" }, "funding": [ { @@ -276,20 +273,20 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2023-08-03T15:11:55+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.5.0", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { @@ -376,7 +373,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" + "source": "https://github.com/guzzle/psr7/tree/2.6.1" }, "funding": [ { @@ -392,20 +389,20 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:11:26+00:00" + "time": "2023-08-27T10:13:57+00:00" }, { "name": "haozi-team/chatgpt-php", - "version": "2.0.3", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/HaoZi-Team/ChatGPT-PHP.git", - "reference": "ffe5dedcb080740b5d5964da3af660c0272686f7" + "reference": "b6ceff8ae51eab93a70dd8c84234f4c079456fed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/HaoZi-Team/ChatGPT-PHP/zipball/ffe5dedcb080740b5d5964da3af660c0272686f7", - "reference": "ffe5dedcb080740b5d5964da3af660c0272686f7", + "url": "https://api.github.com/repos/HaoZi-Team/ChatGPT-PHP/zipball/b6ceff8ae51eab93a70dd8c84234f4c079456fed", + "reference": "b6ceff8ae51eab93a70dd8c84234f4c079456fed", "shasum": "" }, "require": { @@ -440,27 +437,27 @@ ], "support": { "issues": "https://github.com/HaoZi-Team/ChatGPT-PHP/issues", - "source": "https://github.com/HaoZi-Team/ChatGPT-PHP/tree/2.0.3" + "source": "https://github.com/HaoZi-Team/ChatGPT-PHP/tree/2.1.2" }, - "time": "2023-03-31T14:24:55+00:00" + "time": "2023-07-17T13:32:23+00:00" }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -480,7 +477,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -492,9 +489,9 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-04-10T20:12:12+00:00" }, { "name": "psr/http-factory", @@ -553,16 +550,16 @@ }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -571,7 +568,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -586,7 +583,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -600,9 +597,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "ralouphie/getallheaders", @@ -905,16 +902,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -929,7 +926,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -967,7 +964,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -983,20 +980,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -1005,7 +1002,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1050,7 +1047,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -1066,20 +1063,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", "shasum": "" }, "require": { @@ -1088,7 +1085,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1129,7 +1126,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" }, "funding": [ { @@ -1145,7 +1142,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" } ], "packages-dev": [], diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index a72151c7..7824d8f7 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -45,35 +45,34 @@ class ClassLoader /** @var \Closure(string):void */ private static $includeFile; - /** @var ?string */ + /** @var string|null */ private $vendorDir; // PSR-4 /** - * @var array[] - * @psalm-var array> + * @var array> */ private $prefixLengthsPsr4 = array(); /** - * @var array[] - * @psalm-var array> + * @var array> */ private $prefixDirsPsr4 = array(); /** - * @var array[] - * @psalm-var array + * @var list */ private $fallbackDirsPsr4 = array(); // PSR-0 /** - * @var array[] - * @psalm-var array> + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> */ private $prefixesPsr0 = array(); /** - * @var array[] - * @psalm-var array + * @var list */ private $fallbackDirsPsr0 = array(); @@ -81,8 +80,7 @@ class ClassLoader private $useIncludePath = false; /** - * @var string[] - * @psalm-var array + * @var array */ private $classMap = array(); @@ -90,21 +88,20 @@ class ClassLoader private $classMapAuthoritative = false; /** - * @var bool[] - * @psalm-var array + * @var array */ private $missingClasses = array(); - /** @var ?string */ + /** @var string|null */ private $apcuPrefix; /** - * @var self[] + * @var array */ private static $registeredLoaders = array(); /** - * @param ?string $vendorDir + * @param string|null $vendorDir */ public function __construct($vendorDir = null) { @@ -113,7 +110,7 @@ public function __construct($vendorDir = null) } /** - * @return string[] + * @return array> */ public function getPrefixes() { @@ -125,8 +122,7 @@ public function getPrefixes() } /** - * @return array[] - * @psalm-return array> + * @return array> */ public function getPrefixesPsr4() { @@ -134,8 +130,7 @@ public function getPrefixesPsr4() } /** - * @return array[] - * @psalm-return array + * @return list */ public function getFallbackDirs() { @@ -143,8 +138,7 @@ public function getFallbackDirs() } /** - * @return array[] - * @psalm-return array + * @return list */ public function getFallbackDirsPsr4() { @@ -152,8 +146,7 @@ public function getFallbackDirsPsr4() } /** - * @return string[] Array of classname => path - * @psalm-return array + * @return array Array of classname => path */ public function getClassMap() { @@ -161,8 +154,7 @@ public function getClassMap() } /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap + * @param array $classMap Class to filename map * * @return void */ @@ -179,24 +171,25 @@ public function addClassMap(array $classMap) * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories * * @return void */ public function add($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - (array) $paths + $paths ); } @@ -205,19 +198,19 @@ public function add($prefix, $paths, $prepend = false) $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; + $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - (array) $paths + $paths ); } } @@ -226,9 +219,9 @@ public function add($prefix, $paths, $prepend = false) * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException * @@ -236,17 +229,18 @@ public function add($prefix, $paths, $prepend = false) */ public function addPsr4($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - (array) $paths + $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -256,18 +250,18 @@ public function addPsr4($prefix, $paths, $prepend = false) throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; + $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - (array) $paths + $paths ); } } @@ -276,8 +270,8 @@ public function addPsr4($prefix, $paths, $prepend = false) * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories * * @return void */ @@ -294,8 +288,8 @@ public function set($prefix, $paths) * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException * @@ -481,9 +475,9 @@ public function findFile($class) } /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. + * Returns the currently registered loaders keyed by their corresponding vendor directories. * - * @return self[] + * @return array */ public static function getRegisteredLoaders() { diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index c6b54af7..51e734a7 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -98,7 +98,7 @@ public static function isInstalled($packageName, $includeDevRequirements = true) { foreach (self::getInstalled() as $installed) { if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; } } @@ -119,7 +119,7 @@ public static function isInstalled($packageName, $includeDevRequirements = true) */ public static function satisfies(VersionParser $parser, $packageName, $constraint) { - $constraint = $parser->parseConstraints($constraint); + $constraint = $parser->parseConstraints((string) $constraint); $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); return $provided->matches($constraint); @@ -328,7 +328,9 @@ private static function getInstalled() if (isset(self::$installedByVendor[$vendorDir])) { $installed[] = self::$installedByVendor[$vendorDir]; } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { self::$installed = $installed[count($installed) - 1]; } @@ -340,12 +342,17 @@ private static function getInstalled() // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; } else { self::$installed = array(); } } - $installed[] = self::$installed; + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } return $installed; } diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index b8009dff..3885b22a 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -7,6 +7,7 @@ return array( 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'CURLStringFile' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 1b99629a..19477328 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -8,7 +8,6 @@ return array( '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', - 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 91f301c5..16e049d7 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -9,7 +9,6 @@ class ComposerStaticInit980e0f694e30477decfa439603e05796 public static $files = array ( '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', - 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', @@ -104,6 +103,7 @@ class ComposerStaticInit980e0f694e30477decfa439603e05796 public static $classMap = array ( 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'CURLStringFile' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index fff65c93..98db80d8 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -65,23 +65,23 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.5.0", - "version_normalized": "7.5.0.0", + "version": "7.8.0", + "version_normalized": "7.8.0.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -92,7 +92,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -101,15 +102,12 @@ "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, - "time": "2022-08-28T15:39:27+00:00", + "time": "2023-08-27T10:20:53+00:00", "type": "library", "extra": { "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "installation-source": "dist", @@ -176,7 +174,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" }, "funding": [ { @@ -196,37 +194,36 @@ }, { "name": "guzzlehttp/promises", - "version": "1.5.2", - "version_normalized": "1.5.2.0", + "version": "2.0.1", + "version_normalized": "2.0.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, - "time": "2022-08-28T14:55:35+00:00", + "time": "2023-08-03T15:11:55+00:00", "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "installation-source": "dist", "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -263,7 +260,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.0.1" }, "funding": [ { @@ -283,23 +280,23 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.4.4", - "version_normalized": "2.4.4.0", + "version": "2.6.1", + "version_normalized": "2.6.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf" + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf", - "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -314,15 +311,12 @@ "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, - "time": "2023-03-09T13:19:02+00:00", + "time": "2023-08-27T10:13:57+00:00", "type": "library", "extra": { "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" } }, "installation-source": "dist", @@ -385,7 +379,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.4" + "source": "https://github.com/guzzle/psr7/tree/2.6.1" }, "funding": [ { @@ -405,17 +399,17 @@ }, { "name": "haozi-team/chatgpt-php", - "version": "2.0.3", - "version_normalized": "2.0.3.0", + "version": "2.1.2", + "version_normalized": "2.1.2.0", "source": { "type": "git", "url": "https://github.com/HaoZi-Team/ChatGPT-PHP.git", - "reference": "ffe5dedcb080740b5d5964da3af660c0272686f7" + "reference": "b6ceff8ae51eab93a70dd8c84234f4c079456fed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/HaoZi-Team/ChatGPT-PHP/zipball/ffe5dedcb080740b5d5964da3af660c0272686f7", - "reference": "ffe5dedcb080740b5d5964da3af660c0272686f7", + "url": "https://api.github.com/repos/HaoZi-Team/ChatGPT-PHP/zipball/b6ceff8ae51eab93a70dd8c84234f4c079456fed", + "reference": "b6ceff8ae51eab93a70dd8c84234f4c079456fed", "shasum": "" }, "require": { @@ -426,7 +420,7 @@ "require-dev": { "pestphp/pest": "^1.22" }, - "time": "2023-03-31T14:24:55+00:00", + "time": "2023-07-17T13:32:23+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -452,30 +446,30 @@ ], "support": { "issues": "https://github.com/HaoZi-Team/ChatGPT-PHP/issues", - "source": "https://github.com/HaoZi-Team/ChatGPT-PHP/tree/2.0.3" + "source": "https://github.com/HaoZi-Team/ChatGPT-PHP/tree/2.1.2" }, "install-path": "../haozi-team/chatgpt-php" }, { "name": "psr/http-client", - "version": "1.0.1", - "version_normalized": "1.0.1.0", + "version": "1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, - "time": "2020-06-29T06:28:15+00:00", + "time": "2023-04-10T20:12:12+00:00", "type": "library", "extra": { "branch-alias": { @@ -495,7 +489,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -507,30 +501,30 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, "install-path": "../psr/http-client" }, { "name": "psr/http-factory", - "version": "1.0.1", - "version_normalized": "1.0.1.0", + "version": "1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, - "time": "2019-04-30T12:38:16+00:00", + "time": "2023-04-10T20:10:41+00:00", "type": "library", "extra": { "branch-alias": { @@ -550,7 +544,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for PSR-7 HTTP message factories", @@ -565,33 +559,33 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, "install-path": "../psr/http-factory" }, { "name": "psr/http-message", - "version": "1.1", - "version_normalized": "1.1.0.0", + "version": "2.0", + "version_normalized": "2.0.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, - "time": "2023-04-04T09:50:52+00:00", + "time": "2023-04-04T09:54:51+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "installation-source": "dist", @@ -607,7 +601,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -621,7 +615,7 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, "install-path": "../psr/http-message" }, @@ -938,17 +932,17 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -960,11 +954,11 @@ "suggest": { "ext-ctype": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1003,7 +997,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -1023,27 +1017,27 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1089,7 +1083,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -1109,27 +1103,27 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1171,7 +1165,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 4cc01e80..ad57542c 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,9 +1,9 @@ array( 'name' => 'fuukei/sakurairo', - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => NULL, + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'reference' => '7217d2e2b3284f632342ee6e00ac4837e27b4bb0', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -20,54 +20,54 @@ 'dev_requirement' => false, ), 'fuukei/sakurairo' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => NULL, + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'reference' => '7217d2e2b3284f632342ee6e00ac4837e27b4bb0', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false, ), 'guzzlehttp/guzzle' => array( - 'pretty_version' => '7.5.0', - 'version' => '7.5.0.0', - 'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba', + 'pretty_version' => '7.8.0', + 'version' => '7.8.0.0', + 'reference' => '1110f66a6530a40fe7aea0378fe608ee2b2248f9', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => false, ), 'guzzlehttp/promises' => array( - 'pretty_version' => '1.5.2', - 'version' => '1.5.2.0', - 'reference' => 'b94b2807d85443f9719887892882d0329d1e2598', + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'reference' => '111166291a0f8130081195ac4556a5587d7f1b5d', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => false, ), 'guzzlehttp/psr7' => array( - 'pretty_version' => '2.4.4', - 'version' => '2.4.4.0', - 'reference' => '3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf', + 'pretty_version' => '2.6.1', + 'version' => '2.6.1.0', + 'reference' => 'be45764272e8873c72dbe3d2edcfdfcc3bc9f727', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => false, ), 'haozi-team/chatgpt-php' => array( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', - 'reference' => 'ffe5dedcb080740b5d5964da3af660c0272686f7', + 'pretty_version' => '2.1.2', + 'version' => '2.1.2.0', + 'reference' => 'b6ceff8ae51eab93a70dd8c84234f4c079456fed', 'type' => 'library', 'install_path' => __DIR__ . '/../haozi-team/chatgpt-php', 'aliases' => array(), 'dev_requirement' => false, ), 'psr/http-client' => array( - 'pretty_version' => '1.0.1', - 'version' => '1.0.1.0', - 'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621', + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'reference' => '0955afe48220520692d2d09f7ab7e0f93ffd6a31', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), @@ -80,9 +80,9 @@ ), ), 'psr/http-factory' => array( - 'pretty_version' => '1.0.1', - 'version' => '1.0.1.0', - 'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be', + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'reference' => 'e616d01114759c4c489f93b099585439f795fe35', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), @@ -95,9 +95,9 @@ ), ), 'psr/http-message' => array( - 'pretty_version' => '1.1', - 'version' => '1.1.0.0', - 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba', + 'pretty_version' => '2.0', + 'version' => '2.0.0.0', + 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), @@ -152,27 +152,27 @@ 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '5bbc823adecdae860bb64756d639ecfec17b050a', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '6caa57379c4aec19c0a12a38b59b26487dcfe4b5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '707403074c8ea6e2edaf8794b0157a0bfa52157a', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '7581cd600fa9fd681b797d00b02f068e2f13263b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php81', 'aliases' => array(), diff --git a/vendor/guzzlehttp/guzzle/CHANGELOG.md b/vendor/guzzlehttp/guzzle/CHANGELOG.md index 12949ba6..990b86c9 100644 --- a/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -2,6 +2,67 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version. + +## 7.8.0 - 2023-08-27 + +### Added + +- Support for PHP 8.3 +- Added automatic closing of handles on `CurlFactory` object destruction + + +## 7.7.1 - 2023-08-27 + +### Changed + +- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler` + + +## 7.7.0 - 2023-05-21 + +### Added + +- Support `guzzlehttp/promises` v2 + + +## 7.6.1 - 2023-05-15 + +### Fixed + +- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values + + +## 7.6.0 - 2023-05-14 + +### Added + +- Support for setting the minimum TLS version in a unified way +- Apply on request the version set in options parameters + + +## 7.5.2 - 2023-05-14 + +### Fixed + +- Fixed set cookie constructor validation +- Fixed handling of files with `'0'` body + +### Changed + +- Corrected docs and default connect timeout value to 300 seconds + + +## 7.5.1 - 2023-04-17 + +### Fixed + +- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable + +### Changed + +- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5` + + ## 7.5.0 - 2022-08-28 ### Added @@ -9,20 +70,30 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - Support PHP 8.2 - Add request to delay closure params + ## 7.4.5 - 2022-06-20 +### Fixed + * Fix change in port should be considered a change in origin * Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin + ## 7.4.4 - 2022-06-09 +### Fixed + * Fix failure to strip Authorization header on HTTP downgrade * Fix failure to strip the Cookie header on change in host or HTTP downgrade + ## 7.4.3 - 2022-05-25 +### Fixed + * Fix cross-domain cookie leakage + ## 7.4.2 - 2022-03-20 ### Fixed @@ -31,6 +102,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - Reject non-HTTP schemes in StreamHandler - Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve` + ## 7.4.1 - 2021-12-06 ### Changed @@ -42,6 +114,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950) + ## 7.4.0 - 2021-10-18 ### Added @@ -59,6 +132,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945) + ## 7.3.0 - 2021-03-23 ### Added @@ -71,6 +145,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872) + ## 7.2.0 - 2020-10-10 ### Added @@ -93,6 +168,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786) + ## 7.1.1 - 2020-09-30 ### Fixed @@ -104,6 +180,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - We dont connect curl `sink` on HEAD requests. - Removed some PHP 5 workarounds + ## 7.1.0 - 2020-09-22 ### Added @@ -126,14 +203,17 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version - `Utils::defaultCaBundle()` - `CurlFactory::LOW_CURL_VERSION_NUMBER` + ## 7.0.1 - 2020-06-27 * Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699) + ## 7.0.0 - 2020-06-27 No changes since 7.0.0-rc1. + ## 7.0.0-rc1 - 2020-06-15 ### Changed @@ -141,6 +221,7 @@ No changes since 7.0.0-rc1. * Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629) * Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675) + ## 7.0.0-beta2 - 2020-05-25 ### Added @@ -166,6 +247,7 @@ No changes since 7.0.0-rc1. * Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528) + ## 7.0.0-beta1 - 2019-12-30 The diff might look very big but 95% of Guzzle users will be able to upgrade without modification. @@ -199,15 +281,18 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440) * Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464) + ## 6.5.2 - 2019-12-23 * idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) + ## 6.5.1 - 2019-12-21 * Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) * IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) + ## 6.5.0 - 2019-12-07 * Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) @@ -217,11 +302,13 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) * Deprecated `ClientInterface::VERSION` + ## 6.4.1 - 2019-10-23 * No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that * Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` + ## 6.4.0 - 2019-10-23 * Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) @@ -234,6 +321,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) * Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) + ## 6.3.3 - 2018-04-22 * Fix: Default headers when decode_content is specified @@ -275,13 +363,14 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684) * Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827) - + Minor code cleanups, documentation fixes and clarifications. + ## 6.2.3 - 2017-02-28 * Fix deprecations with guzzle/psr7 version 1.4 + ## 6.2.2 - 2016-10-08 * Allow to pass nullable Response to delay callable @@ -289,6 +378,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Fix drain case where content-length is the literal string zero * Obfuscate in-URL credentials in exceptions + ## 6.2.1 - 2016-07-18 * Address HTTP_PROXY security vulnerability, CVE-2016-5385: @@ -299,6 +389,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c a server does not honor `Connection: close`. * Ignore URI fragment when sending requests. + ## 6.2.0 - 2016-03-21 * Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`. @@ -318,6 +409,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Bug fix: provide an empty string to `http_build_query` for HHVM workaround. https://github.com/guzzle/guzzle/pull/1367 + ## 6.1.1 - 2015-11-22 * Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler @@ -333,6 +425,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Bug fix: fixed regression where MockHandler was not using `sink`. https://github.com/guzzle/guzzle/pull/1292 + ## 6.1.0 - 2015-09-08 * Feature: Added the `on_stats` request option to provide access to transfer @@ -367,6 +460,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set. https://github.com/guzzle/guzzle/pull/1189 + ## 6.0.2 - 2015-07-04 * Fixed a memory leak in the curl handlers in which references to callbacks @@ -384,6 +478,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Functions are now conditionally required using an additional level of indirection to help with global Composer installations. + ## 6.0.1 - 2015-05-27 * Fixed a bug with serializing the `query` request option where the `&` @@ -392,6 +487,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c use `form_params` or `multipart` instead. * Various doc fixes. + ## 6.0.0 - 2015-05-26 * See the UPGRADING.md document for more information. @@ -416,6 +512,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * `$maxHandles` has been removed from CurlMultiHandler. * `MultipartPostBody` is now part of the `guzzlehttp/psr7` package. + ## 5.3.0 - 2015-05-19 * Mock now supports `save_to` @@ -426,6 +523,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated. * URL scheme is now always lowercased. + ## 6.0.0-beta.1 * Requires PHP >= 5.5 @@ -478,6 +576,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * `GuzzleHttp\QueryParser` has been replaced with the `GuzzleHttp\Psr7\parse_query`. + ## 5.2.0 - 2015-01-27 * Added `AppliesHeadersInterface` to make applying headers to a request based @@ -488,6 +587,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c RingBridge. * Added a guard in the Pool class to not use recursion for request retries. + ## 5.1.0 - 2014-12-19 * Pool class no longer uses recursion when a request is intercepted. @@ -508,6 +608,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c * Exceptions thrown in the `end` event are now correctly wrapped with Guzzle specific exceptions if necessary. + ## 5.0.3 - 2014-11-03 This change updates query strings so that they are treated as un-encoded values @@ -522,6 +623,7 @@ string that should not be parsed or encoded (unless a call to getQuery() is subsequently made, forcing the query-string to be converted into a Query object). + ## 5.0.2 - 2014-10-30 * Added a trailing `\r\n` to multipart/form-data payloads. See @@ -543,6 +645,7 @@ object). string on a URL: Now allowing many more characters to be present in the query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A + ## 5.0.1 - 2014-10-16 Bugfix release. @@ -554,6 +657,7 @@ Bugfix release. * Fixed an issue where transfer statistics were not being populated in the RingBridge. https://github.com/guzzle/guzzle/issues/866 + ## 5.0.0 - 2014-10-12 Adding support for non-blocking responses and some minor API cleanup. @@ -635,6 +739,7 @@ interfaces. argument. They now accept an associative array of options, including the "size" key and "metadata" key which can be used to provide custom metadata. + ## 4.2.2 - 2014-09-08 * Fixed a memory leak in the CurlAdapter when reusing cURL handles. diff --git a/vendor/guzzlehttp/guzzle/README.md b/vendor/guzzlehttp/guzzle/README.md index f287fa98..0786462b 100644 --- a/vendor/guzzlehttp/guzzle/README.md +++ b/vendor/guzzlehttp/guzzle/README.md @@ -60,13 +60,13 @@ composer require guzzlehttp/guzzle ## Version Guidance -| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 | PHP Version | -|---------|----------------|---------------------|--------------|---------------------|---------------------|-------|--------------| -| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >=5.3.3,<7.0 | -| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >=5.4,<7.0 | -| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >=5.4,<7.4 | -| 6.x | Security fixes | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >=5.5,<8.0 | -| 7.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes | >=7.2.5,<8.2 | +| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 | PHP Version | +|---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------| +| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >=5.3.3,<7.0 | +| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >=5.4,<7.0 | +| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >=5.4,<7.4 | +| 6.x | Security fixes only | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >=5.5,<8.0 | +| 7.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes | >=7.2.5,<8.3 | [guzzle-3-repo]: https://github.com/guzzle/guzzle3 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x diff --git a/vendor/guzzlehttp/guzzle/UPGRADING.md b/vendor/guzzlehttp/guzzle/UPGRADING.md index 45417a7e..8fa0afb5 100644 --- a/vendor/guzzlehttp/guzzle/UPGRADING.md +++ b/vendor/guzzlehttp/guzzle/UPGRADING.md @@ -27,7 +27,7 @@ Please make sure: - Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed. Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative. - Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed. -- Request option `exception` is removed. Please use `http_errors`. +- Request option `exceptions` is removed. Please use `http_errors`. - Request option `save_to` is removed. Please use `sink`. - Pool option `pool_size` is removed. Please use `concurrency`. - We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility. diff --git a/vendor/guzzlehttp/guzzle/composer.json b/vendor/guzzlehttp/guzzle/composer.json index f369ce67..72defd61 100644 --- a/vendor/guzzlehttp/guzzle/composer.json +++ b/vendor/guzzlehttp/guzzle/composer.json @@ -53,8 +53,8 @@ "require": { "php": "^7.2.5 || ^8.0", "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -64,7 +64,8 @@ "require-dev": { "ext-curl": "*", "bamarni/composer-bin-plugin": "^1.8.1", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -84,9 +85,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { diff --git a/vendor/guzzlehttp/guzzle/src/Client.php b/vendor/guzzlehttp/guzzle/src/Client.php index 58f1d891..bc6efc90 100644 --- a/vendor/guzzlehttp/guzzle/src/Client.php +++ b/vendor/guzzlehttp/guzzle/src/Client.php @@ -120,13 +120,14 @@ public function sendAsync(RequestInterface $request, array $options = []): Promi public function send(RequestInterface $request, array $options = []): ResponseInterface { $options[RequestOptions::SYNCHRONOUS] = true; + return $this->sendAsync($request, $options)->wait(); } /** * The HttpClient PSR (PSR-18) specify this method. * - * @inheritDoc + * {@inheritDoc} */ public function sendRequest(RequestInterface $request): ResponseInterface { @@ -184,6 +185,7 @@ public function requestAsync(string $method, $uri = '', array $options = []): Pr public function request(string $method, $uri = '', array $options = []): ResponseInterface { $options[RequestOptions::SYNCHRONOUS] = true; + return $this->requestAsync($method, $uri, $options)->wait(); } @@ -200,7 +202,7 @@ public function request(string $method, $uri = '', array $options = []): Respons * * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0. */ - public function getConfig(?string $option = null) + public function getConfig(string $option = null) { return $option === null ? $this->config @@ -228,11 +230,11 @@ private function configureDefaults(array $config): void { $defaults = [ 'allow_redirects' => RedirectMiddleware::$defaultSettings, - 'http_errors' => true, - 'decode_content' => true, - 'verify' => true, - 'cookies' => false, - 'idn_conversion' => false, + 'http_errors' => true, + 'decode_content' => true, + 'verify' => true, + 'cookies' => false, + 'idn_conversion' => false, ]; // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. @@ -354,10 +356,10 @@ private function applyOptions(RequestInterface $request, array &$options): Reque if (isset($options['form_params'])) { if (isset($options['multipart'])) { throw new InvalidArgumentException('You cannot use ' - . 'form_params and multipart at the same time. Use the ' - . 'form_params option if you want to send application/' - . 'x-www-form-urlencoded requests, and the multipart ' - . 'option to send multipart/form-data requests.'); + .'form_params and multipart at the same time. Use the ' + .'form_params option if you want to send application/' + .'x-www-form-urlencoded requests, and the multipart ' + .'option to send multipart/form-data requests.'); } $options['body'] = \http_build_query($options['form_params'], '', '&'); unset($options['form_params']); @@ -403,7 +405,7 @@ private function applyOptions(RequestInterface $request, array &$options): Reque // Ensure that we don't have the header in different case and set the new value. $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']); $modify['set_headers']['Authorization'] = 'Basic ' - . \base64_encode("$value[0]:$value[1]"); + .\base64_encode("$value[0]:$value[1]"); break; case 'digest': // @todo: Do not rely on curl @@ -437,13 +439,17 @@ private function applyOptions(RequestInterface $request, array &$options): Reque } } + if (isset($options['version'])) { + $modify['version'] = $options['version']; + } + $request = Psr7\Utils::modifyRequest($request, $modify); if ($request->getBody() instanceof Psr7\MultipartStream) { // Use a multipart/form-data POST if a Content-Type is not set. // Ensure that we don't have the header in different case and set the new value. $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' - . $request->getBody()->getBoundary(); + .$request->getBody()->getBoundary(); } // Merge in conditional headers if they are not present. @@ -469,9 +475,9 @@ private function applyOptions(RequestInterface $request, array &$options): Reque private function invalidBody(): InvalidArgumentException { return new InvalidArgumentException('Passing in the "body" request ' - . 'option as an array to send a request is not supported. ' - . 'Please use the "form_params" request option to send a ' - . 'application/x-www-form-urlencoded request, or the "multipart" ' - . 'request option to send a multipart/form-data request.'); + .'option as an array to send a request is not supported. ' + .'Please use the "form_params" request option to send a ' + .'application/x-www-form-urlencoded request, or the "multipart" ' + .'request option to send a multipart/form-data request.'); } } diff --git a/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 6aaee61a..1788e16a 100644 --- a/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -80,5 +80,5 @@ public function requestAsync(string $method, $uri, array $options = []): Promise * * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0. */ - public function getConfig(?string $option = null); + public function getConfig(string $option = null); } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php index 9985a981..fa2b10a8 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -50,10 +50,10 @@ public static function fromArray(array $cookies, string $domain): self $cookieJar = new self(); foreach ($cookies as $name => $value) { $cookieJar->setCookie(new SetCookie([ - 'Domain' => $domain, - 'Name' => $name, - 'Value' => $value, - 'Discard' => true + 'Domain' => $domain, + 'Name' => $name, + 'Value' => $value, + 'Discard' => true, ])); } @@ -96,9 +96,6 @@ public function getCookieByName(string $name): ?SetCookie return null; } - /** - * @inheritDoc - */ public function toArray(): array { return \array_map(static function (SetCookie $cookie): array { @@ -106,13 +103,11 @@ public function toArray(): array }, $this->getIterator()->getArrayCopy()); } - /** - * @inheritDoc - */ - public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void + public function clear(string $domain = null, string $path = null, string $name = null): void { if (!$domain) { $this->cookies = []; + return; } elseif (!$path) { $this->cookies = \array_filter( @@ -125,25 +120,22 @@ static function (SetCookie $cookie) use ($domain): bool { $this->cookies = \array_filter( $this->cookies, static function (SetCookie $cookie) use ($path, $domain): bool { - return !($cookie->matchesPath($path) && - $cookie->matchesDomain($domain)); + return !($cookie->matchesPath($path) + && $cookie->matchesDomain($domain)); } ); } else { $this->cookies = \array_filter( $this->cookies, static function (SetCookie $cookie) use ($path, $domain, $name) { - return !($cookie->getName() == $name && - $cookie->matchesPath($path) && - $cookie->matchesDomain($domain)); + return !($cookie->getName() == $name + && $cookie->matchesPath($path) + && $cookie->matchesDomain($domain)); } ); } } - /** - * @inheritDoc - */ public function clearSessionCookies(): void { $this->cookies = \array_filter( @@ -154,9 +146,6 @@ static function (SetCookie $cookie): bool { ); } - /** - * @inheritDoc - */ public function setCookie(SetCookie $cookie): bool { // If the name string is empty (but not 0), ignore the set-cookie @@ -170,9 +159,10 @@ public function setCookie(SetCookie $cookie): bool $result = $cookie->validate(); if ($result !== true) { if ($this->strictMode) { - throw new \RuntimeException('Invalid cookie: ' . $result); + throw new \RuntimeException('Invalid cookie: '.$result); } $this->removeCookieIfEmpty($cookie); + return false; } @@ -180,9 +170,9 @@ public function setCookie(SetCookie $cookie): bool foreach ($this->cookies as $i => $c) { // Two cookies are identical, when their path, and domain are // identical. - if ($c->getPath() != $cookie->getPath() || - $c->getDomain() != $cookie->getDomain() || - $c->getName() != $cookie->getName() + if ($c->getPath() != $cookie->getPath() + || $c->getDomain() != $cookie->getDomain() + || $c->getName() != $cookie->getName() ) { continue; } @@ -253,7 +243,7 @@ public function extractCookies(RequestInterface $request, ResponseInterface $res /** * Computes cookie path following RFC 6265 section 5.1.4 * - * @link https://tools.ietf.org/html/rfc6265#section-5.1.4 + * @see https://tools.ietf.org/html/rfc6265#section-5.1.4 */ private function getCookiePathFromRequest(RequestInterface $request): string { @@ -284,13 +274,13 @@ public function withCookieHeader(RequestInterface $request): RequestInterface $path = $uri->getPath() ?: '/'; foreach ($this->cookies as $cookie) { - if ($cookie->matchesPath($path) && - $cookie->matchesDomain($host) && - !$cookie->isExpired() && - (!$cookie->getSecure() || $scheme === 'https') + if ($cookie->matchesPath($path) + && $cookie->matchesDomain($host) + && !$cookie->isExpired() + && (!$cookie->getSecure() || $scheme === 'https') ) { - $values[] = $cookie->getName() . '=' - . $cookie->getValue(); + $values[] = $cookie->getName().'=' + .$cookie->getValue(); } } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php index 7df374b5..8c55cc6f 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -13,7 +13,8 @@ * necessary. Subclasses are also responsible for storing and retrieving * cookies from a file, database, etc. * - * @link https://docs.python.org/2/library/cookielib.html Inspiration + * @see https://docs.python.org/2/library/cookielib.html Inspiration + * * @extends \IteratorAggregate */ interface CookieJarInterface extends \Countable, \IteratorAggregate @@ -61,7 +62,7 @@ public function setCookie(SetCookie $cookie): bool; * @param string|null $path Clears cookies matching a domain and path * @param string|null $name Clears cookies matching a domain, path, and name */ - public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void; + public function clear(string $domain = null, string $path = null, string $name = null): void; /** * Discard all sessions cookies. diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php index 5d51ca98..cb3e67c6 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -71,7 +71,7 @@ protected function load(): void $this->setCookie(new SetCookie($cookie)); } } elseif (\strlen($data)) { - throw new \RuntimeException("Invalid cookie data"); + throw new \RuntimeException('Invalid cookie data'); } } } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php index a613c77b..d74915be 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -11,15 +11,15 @@ class SetCookie * @var array */ private static $defaults = [ - 'Name' => null, - 'Value' => null, - 'Domain' => null, - 'Path' => '/', - 'Max-Age' => null, - 'Expires' => null, - 'Secure' => false, - 'Discard' => false, - 'HttpOnly' => false + 'Name' => null, + 'Value' => null, + 'Domain' => null, + 'Path' => '/', + 'Max-Age' => null, + 'Expires' => null, + 'Secure' => false, + 'Discard' => false, + 'HttpOnly' => false, ]; /** @@ -58,7 +58,13 @@ public static function fromString(string $cookie): self } else { foreach (\array_keys(self::$defaults) as $search) { if (!\strcasecmp($search, $key)) { - $data[$search] = $value; + if ($search === 'Max-Age') { + if (is_numeric($value)) { + $data[$search] = (int) $value; + } + } else { + $data[$search] = $value; + } continue 2; } } @@ -74,13 +80,49 @@ public static function fromString(string $cookie): self */ public function __construct(array $data = []) { - /** @var array|null $replaced will be null in case of replace error */ - $replaced = \array_replace(self::$defaults, $data); - if ($replaced === null) { - throw new \InvalidArgumentException('Unable to replace the default values for the Cookie.'); + $this->data = self::$defaults; + + if (isset($data['Name'])) { + $this->setName($data['Name']); + } + + if (isset($data['Value'])) { + $this->setValue($data['Value']); + } + + if (isset($data['Domain'])) { + $this->setDomain($data['Domain']); + } + + if (isset($data['Path'])) { + $this->setPath($data['Path']); + } + + if (isset($data['Max-Age'])) { + $this->setMaxAge($data['Max-Age']); + } + + if (isset($data['Expires'])) { + $this->setExpires($data['Expires']); + } + + if (isset($data['Secure'])) { + $this->setSecure($data['Secure']); + } + + if (isset($data['Discard'])) { + $this->setDiscard($data['Discard']); + } + + if (isset($data['HttpOnly'])) { + $this->setHttpOnly($data['HttpOnly']); + } + + // Set the remaining values that don't have extra validation logic + foreach (array_diff(array_keys($data), array_keys(self::$defaults)) as $key) { + $this->data[$key] = $data[$key]; } - $this->data = $replaced; // Extract the Expires value and turn it into a UNIX timestamp if needed if (!$this->getExpires() && $this->getMaxAge()) { // Calculate the Expires date @@ -92,13 +134,13 @@ public function __construct(array $data = []) public function __toString() { - $str = $this->data['Name'] . '=' . ($this->data['Value'] ?? '') . '; '; + $str = $this->data['Name'].'='.($this->data['Value'] ?? '').'; '; foreach ($this->data as $k => $v) { if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) { if ($k === 'Expires') { - $str .= 'Expires=' . \gmdate('D, d M Y H:i:s \G\M\T', $v) . '; '; + $str .= 'Expires='.\gmdate('D, d M Y H:i:s \G\M\T', $v).'; '; } else { - $str .= ($v === true ? $k : "{$k}={$v}") . '; '; + $str .= ($v === true ? $k : "{$k}={$v}").'; '; } } } @@ -394,7 +436,7 @@ public function matchesDomain(string $domain): bool return false; } - return (bool) \preg_match('/\.' . \preg_quote($cookieDomain, '/') . '$/', $domain); + return (bool) \preg_match('/\.'.\preg_quote($cookieDomain, '/').'$/', $domain); } /** @@ -423,8 +465,8 @@ public function validate() $name )) { return 'Cookie name must not contain invalid characters: ASCII ' - . 'Control characters (0-31;127), space, tab and the ' - . 'following characters: ()<>@,;:\"/?={}'; + .'Control characters (0-31;127), space, tab and the ' + .'following characters: ()<>@,;:\"/?={}'; } // Value must not be null. 0 and empty string are valid. Empty strings diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php index 0c45089f..be88d9e4 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php @@ -51,7 +51,7 @@ public function create(RequestInterface $request, array $options): EasyHandle unset($options['curl']['body_as_string']); } - $easy = new EasyHandle; + $easy = new EasyHandle(); $easy->request = $request; $easy->options = $options; $conf = $this->getDefaultConf($easy); @@ -161,11 +161,11 @@ private static function finishError(callable $handler, EasyHandle $easy, CurlFac private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface { static $connectionErrors = [ - \CURLE_OPERATION_TIMEOUTED => true, + \CURLE_OPERATION_TIMEOUTED => true, \CURLE_COULDNT_RESOLVE_HOST => true, - \CURLE_COULDNT_CONNECT => true, - \CURLE_SSL_CONNECT_ERROR => true, - \CURLE_GOT_NOTHING => true, + \CURLE_COULDNT_CONNECT => true, + \CURLE_SSL_CONNECT_ERROR => true, + \CURLE_GOT_NOTHING => true, ]; if ($easy->createResponseException) { @@ -219,12 +219,12 @@ private static function createRejection(EasyHandle $easy, array $ctx): PromiseIn private function getDefaultConf(EasyHandle $easy): array { $conf = [ - '_headers' => $easy->request->getHeaders(), - \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), - \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), + '_headers' => $easy->request->getHeaders(), + \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), + \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), \CURLOPT_RETURNTRANSFER => false, - \CURLOPT_HEADER => false, - \CURLOPT_CONNECTTIMEOUT => 150, + \CURLOPT_HEADER => false, + \CURLOPT_CONNECTTIMEOUT => 300, ]; if (\defined('CURLOPT_PROTOCOLS')) { @@ -250,6 +250,7 @@ private function applyMethod(EasyHandle $easy, array &$conf): void if ($size === null || $size > 0) { $this->applyBody($easy->request, $easy->options, $conf); + return; } @@ -341,6 +342,7 @@ private function removeHeader(string $name, array &$options): void foreach (\array_keys($options['_headers']) as $key) { if (!\strcasecmp($key, $name)) { unset($options['_headers'][$key]); + return; } } @@ -365,11 +367,11 @@ private function applyHandlerOptions(EasyHandle $easy, array &$conf): void // If it's a directory or a link to a directory use CURLOPT_CAPATH. // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. if ( - \is_dir($options['verify']) || - ( - \is_link($options['verify']) === true && - ($verifyLink = \readlink($options['verify'])) !== false && - \is_dir($verifyLink) + \is_dir($options['verify']) + || ( + \is_link($options['verify']) === true + && ($verifyLink = \readlink($options['verify'])) !== false + && \is_dir($verifyLink) ) ) { $conf[\CURLOPT_CAPATH] = $options['verify']; @@ -443,13 +445,41 @@ private function applyHandlerOptions(EasyHandle $easy, array &$conf): void $scheme = $easy->request->getUri()->getScheme(); if (isset($options['proxy'][$scheme])) { $host = $easy->request->getUri()->getHost(); - if (!isset($options['proxy']['no']) || !Utils::isHostInNoProxy($host, $options['proxy']['no'])) { + if (isset($options['proxy']['no']) && Utils::isHostInNoProxy($host, $options['proxy']['no'])) { + unset($conf[\CURLOPT_PROXY]); + } else { $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme]; } } } } + if (isset($options['crypto_method'])) { + if (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) { + if (!defined('CURL_SSLVERSION_TLSv1_0')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.0 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0; + } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) { + if (!defined('CURL_SSLVERSION_TLSv1_1')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.1 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1; + } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) { + if (!defined('CURL_SSLVERSION_TLSv1_2')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2; + } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) { + if (!defined('CURL_SSLVERSION_TLSv1_3')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3; + } else { + throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided'); + } + } + if (isset($options['cert'])) { $cert = $options['cert']; if (\is_array($cert)) { @@ -459,8 +489,8 @@ private function applyHandlerOptions(EasyHandle $easy, array &$conf): void if (!\file_exists($cert)) { throw new \InvalidArgumentException("SSL certificate not found: {$cert}"); } - # OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files. - # see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html + // OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files. + // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html $ext = pathinfo($cert, \PATHINFO_EXTENSION); if (preg_match('#^(der|p12)$#i', $ext)) { $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext); @@ -523,9 +553,10 @@ private static function retryFailedRewind(callable $handler, EasyHandle $easy, a } } catch (\RuntimeException $e) { $ctx['error'] = 'The connection unexpectedly failed without ' - . 'providing an error. The request would have been retried, ' - . 'but attempting to rewind the request body failed. ' - . 'Exception: ' . $e; + .'providing an error. The request would have been retried, ' + .'but attempting to rewind the request body failed. ' + .'Exception: '.$e; + return self::createRejection($easy, $ctx); } @@ -534,14 +565,15 @@ private static function retryFailedRewind(callable $handler, EasyHandle $easy, a $easy->options['_curl_retries'] = 1; } elseif ($easy->options['_curl_retries'] == 2) { $ctx['error'] = 'The cURL request was retried 3 times ' - . 'and did not succeed. The most likely reason for the failure ' - . 'is that cURL was unable to rewind the body of the request ' - . 'and subsequent retries resulted in the same error. Turn on ' - . 'the debug option to see what went wrong. See ' - . 'https://bugs.php.net/bug.php?id=47204 for more information.'; + .'and did not succeed. The most likely reason for the failure ' + .'is that cURL was unable to rewind the body of the request ' + .'and subsequent retries resulted in the same error. Turn on ' + .'the debug option to see what went wrong. See ' + .'https://bugs.php.net/bug.php?id=47204 for more information.'; + return self::createRejection($easy, $ctx); } else { - $easy->options['_curl_retries']++; + ++$easy->options['_curl_retries']; } return $handler($easy->request, $easy->options); @@ -571,6 +603,7 @@ private function createHeaderFn(EasyHandle $easy): callable $easy->createResponse(); } catch (\Exception $e) { $easy->createResponseException = $e; + return -1; } if ($onHeaders !== null) { @@ -580,6 +613,7 @@ private function createHeaderFn(EasyHandle $easy): callable // Associate the exception with the handle and trigger // a curl header write error by returning 0. $easy->onHeadersException = $e; + return -1; } } @@ -589,7 +623,16 @@ private function createHeaderFn(EasyHandle $easy): callable } else { $easy->headers[] = $value; } + return \strlen($h); }; } + + public function __destruct() + { + foreach ($this->handles as $id => $handle) { + \curl_close($handle); + unset($this->handles[$id]); + } + } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index 4356d024..a64e1821 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -15,11 +15,8 @@ * associative array of curl option constants mapping to values in the * **curl** key of the provided request options. * - * @property resource|\CurlMultiHandle $_mh Internal use only. Lazy loaded multi-handle. - * * @final */ -#[\AllowDynamicProperties] class CurlMultiHandler { /** @@ -56,6 +53,9 @@ class CurlMultiHandler */ private $options = []; + /** @var resource|\CurlMultiHandle */ + private $_mh; + /** * This handler accepts the following options: * @@ -79,6 +79,10 @@ public function __construct(array $options = []) } $this->options = $options['options'] ?? []; + + // unsetting the property forces the first access to go through + // __get(). + unset($this->_mh); } /** @@ -164,7 +168,8 @@ public function tick(): void \usleep(250); } - while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM); + while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) { + } $this->processMessages(); } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php index 224344d7..1bc39f4b 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php @@ -106,7 +106,7 @@ public function createResponse(): void */ public function __get($name) { - $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name; + $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: '.$name; throw new \BadMethodCallException($msg); } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php b/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php index a0988845..5554b8fa 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php @@ -14,9 +14,9 @@ final class HeaderProcessor * * @param string[] $headers * - * @throws \RuntimeException - * * @return array{0:string, 1:int, 2:?string, 3:array} + * + * @throws \RuntimeException */ public static function parseHeaders(array $headers): array { diff --git a/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php index 79664e27..77ffed52 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php @@ -138,6 +138,7 @@ function ($reason) use ($request, $options) { if ($this->onRejected) { ($this->onRejected)($reason); } + return P\Create::rejectionFor($reason); } ); @@ -159,7 +160,7 @@ public function append(...$values): void ) { $this->queue[] = $value; } else { - throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found ' . Utils::describeType($value)); + throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found '.Utils::describeType($value)); } } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php index 543f825a..61632f56 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php @@ -67,7 +67,7 @@ public function __invoke(RequestInterface $request, array $options): PromiseInte if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed || false !== \strpos($message, 'Connection refused') || false !== \strpos($message, "couldn't connect to host") // error on HHVM - || false !== \strpos($message, "connection attempt failed") + || false !== \strpos($message, 'connection attempt failed') ) { $e = new ConnectException($e->getMessage(), $request, $e); } else { @@ -231,9 +231,10 @@ private function createResource(callable $callback) \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool { $errors[] = [ 'message' => $msg, - 'file' => $file, - 'line' => $line + 'file' => $file, + 'line' => $line, ]; + return true; }); @@ -247,7 +248,7 @@ private function createResource(callable $callback) $message = 'Error creating resource: '; foreach ($errors as $err) { foreach ($err as $key => $value) { - $message .= "[$key] $value" . \PHP_EOL; + $message .= "[$key] $value".\PHP_EOL; } } throw new \RuntimeException(\trim($message)); @@ -350,6 +351,7 @@ private function resolveHost(RequestInterface $request, array $options): UriInte if (false === $records || !isset($records[0]['ip'])) { throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); } + return $uri->withHost($records[0]['ip']); } if ('v6' === $options['force_ip_resolve']) { @@ -357,7 +359,8 @@ private function resolveHost(RequestInterface $request, array $options): UriInte if (false === $records || !isset($records[0]['ipv6'])) { throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); } - return $uri->withHost('[' . $records[0]['ipv6'] . ']'); + + return $uri->withHost('['.$records[0]['ipv6'].']'); } } @@ -375,11 +378,11 @@ private function getDefaultContext(RequestInterface $request): array $context = [ 'http' => [ - 'method' => $request->getMethod(), - 'header' => $headers, + 'method' => $request->getMethod(), + 'header' => $headers, 'protocol_version' => $request->getProtocolVersion(), - 'ignore_errors' => true, - 'follow_location' => 0, + 'ignore_errors' => true, + 'follow_location' => 0, ], 'ssl' => [ 'peer_name' => $request->getUri()->getHost(), @@ -388,7 +391,7 @@ private function getDefaultContext(RequestInterface $request): array $body = (string) $request->getBody(); - if (!empty($body)) { + if ('' !== $body) { $context['http']['content'] = $body; // Prevent the HTTP handler from adding a Content-Type header. if (!$request->hasHeader('Content-Type')) { @@ -472,6 +475,25 @@ private function add_timeout(RequestInterface $request, array &$options, $value, } } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_crypto_method(RequestInterface $request, array &$options, $value, array &$params): void + { + if ( + $value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT + || $value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT + || $value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT + || (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && $value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT) + ) { + $options['http']['crypto_method'] = $value; + + return; + } + + throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided'); + } + /** * @param mixed $value as passed via Request transfer options. */ @@ -542,27 +564,27 @@ private function add_debug(RequestInterface $request, array &$options, $value, a } static $map = [ - \STREAM_NOTIFY_CONNECT => 'CONNECT', + \STREAM_NOTIFY_CONNECT => 'CONNECT', \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', - \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', - \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', - \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', - \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', - \STREAM_NOTIFY_PROGRESS => 'PROGRESS', - \STREAM_NOTIFY_FAILURE => 'FAILURE', - \STREAM_NOTIFY_COMPLETED => 'COMPLETED', - \STREAM_NOTIFY_RESOLVE => 'RESOLVE', + \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', + \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', + \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', + \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', + \STREAM_NOTIFY_PROGRESS => 'PROGRESS', + \STREAM_NOTIFY_FAILURE => 'FAILURE', + \STREAM_NOTIFY_COMPLETED => 'COMPLETED', + \STREAM_NOTIFY_RESOLVE => 'RESOLVE', ]; static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max']; $value = Utils::debugResource($value); - $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment(''); + $ident = $request->getMethod().' '.$request->getUri()->withFragment(''); self::addNotification( $params, static function (int $code, ...$passed) use ($ident, $value, $map, $args): void { \fprintf($value, '<%s> [%s] ', $ident, $map[$code]); foreach (\array_filter($passed) as $i => $v) { - \fwrite($value, $args[$i] . ': "' . $v . '" '); + \fwrite($value, $args[$i].': "'.$v.'" '); } \fwrite($value, "\n"); } @@ -577,7 +599,7 @@ private static function addNotification(array &$params, callable $notify): void } else { $params['notification'] = self::callArray([ $params['notification'], - $notify + $notify, ]); } } diff --git a/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/vendor/guzzlehttp/guzzle/src/HandlerStack.php index e0a1d119..6cb12f07 100644 --- a/vendor/guzzlehttp/guzzle/src/HandlerStack.php +++ b/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -44,7 +44,7 @@ class HandlerStack * handler is provided, the best handler for your * system will be utilized. */ - public static function create(?callable $handler = null): self + public static function create(callable $handler = null): self { $stack = new self($handler ?: Utils::chooseHandler()); $stack->push(Middleware::httpErrors(), 'http_errors'); @@ -86,14 +86,14 @@ public function __toString() $stack = []; if ($this->handler !== null) { - $stack[] = "0) Handler: " . $this->debugCallable($this->handler); + $stack[] = '0) Handler: '.$this->debugCallable($this->handler); } $result = ''; foreach (\array_reverse($this->stack) as $tuple) { - $depth++; + ++$depth; $str = "{$depth}) Name: '{$tuple[1]}', "; - $str .= "Function: " . $this->debugCallable($tuple[0]); + $str .= 'Function: '.$this->debugCallable($tuple[0]); $result = "> {$str}\n{$result}"; $stack[] = $str; } @@ -122,7 +122,7 @@ public function setHandler(callable $handler): void */ public function hasHandler(): bool { - return $this->handler !== null ; + return $this->handler !== null; } /** @@ -131,7 +131,7 @@ public function hasHandler(): bool * @param callable(callable): callable $middleware Middleware function * @param string $name Name to register for this middleware. */ - public function unshift(callable $middleware, ?string $name = null): void + public function unshift(callable $middleware, string $name = null): void { \array_unshift($this->stack, [$middleware, $name]); $this->cached = null; @@ -266,10 +266,10 @@ private function debugCallable($fn): string if (\is_array($fn)) { return \is_string($fn[0]) ? "callable({$fn[0]}::{$fn[1]})" - : "callable(['" . \get_class($fn[0]) . "', '{$fn[1]}'])"; + : "callable(['".\get_class($fn[0])."', '{$fn[1]}'])"; } /** @var object $fn */ - return 'callable(' . \spl_object_hash($fn) . ')'; + return 'callable('.\spl_object_hash($fn).')'; } } diff --git a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php index da499547..04e9eb37 100644 --- a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php +++ b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -40,11 +40,11 @@ class MessageFormatter implements MessageFormatterInterface /** * Apache Common Log Format. * - * @link https://httpd.apache.org/docs/2.4/logs.html#common + * @see https://httpd.apache.org/docs/2.4/logs.html#common * * @var string */ - public const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}"; + public const CLF = '{hostname} {req_header_User-Agent} - [{date_common_log}] "{method} {target} HTTP/{version}" {code} {res_header_Content-Length}'; public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; @@ -68,7 +68,7 @@ public function __construct(?string $template = self::CLF) * @param ResponseInterface|null $response Response that was received * @param \Throwable|null $error Exception that was received */ - public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string + public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string { $cache = []; @@ -90,9 +90,9 @@ function (array $matches) use ($request, $response, $error, &$cache) { break; case 'req_headers': $result = \trim($request->getMethod() - . ' ' . $request->getRequestTarget()) - . ' HTTP/' . $request->getProtocolVersion() . "\r\n" - . $this->headers($request); + .' '.$request->getRequestTarget()) + .' HTTP/'.$request->getProtocolVersion()."\r\n" + .$this->headers($request); break; case 'res_headers': $result = $response ? @@ -101,7 +101,7 @@ function (array $matches) use ($request, $response, $error, &$cache) { $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase() - ) . "\r\n" . $this->headers($response) + )."\r\n".$this->headers($response) : 'NULL'; break; case 'req_body': @@ -177,6 +177,7 @@ function (array $matches) use ($request, $response, $error, &$cache) { } $cache[$matches[1]] = $result; + return $result; }, $this->template @@ -190,7 +191,7 @@ private function headers(MessageInterface $message): string { $result = ''; foreach ($message->getHeaders() as $name => $values) { - $result .= $name . ': ' . \implode(', ', $values) . "\r\n"; + $result .= $name.': '.\implode(', ', $values)."\r\n"; } return \trim($result); diff --git a/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php b/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php index a39ac248..47934614 100644 --- a/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php +++ b/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php @@ -14,5 +14,5 @@ interface MessageFormatterInterface * @param ResponseInterface|null $response Response that was received * @param \Throwable|null $error Exception that was received */ - public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string; + public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string; } diff --git a/vendor/guzzlehttp/guzzle/src/Middleware.php b/vendor/guzzlehttp/guzzle/src/Middleware.php index 7035c77f..7e3eb6b3 100644 --- a/vendor/guzzlehttp/guzzle/src/Middleware.php +++ b/vendor/guzzlehttp/guzzle/src/Middleware.php @@ -34,10 +34,12 @@ public static function cookies(): callable } $cookieJar = $options['cookies']; $request = $cookieJar->withCookieHeader($request); + return $handler($request, $options) ->then( static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface { $cookieJar->extractCookies($request, $response); + return $response; } ); @@ -60,6 +62,7 @@ public static function httpErrors(BodySummarizerInterface $bodySummarizer = null if (empty($options['http_errors'])) { return $handler($request, $options); } + return $handler($request, $options)->then( static function (ResponseInterface $response) use ($request, $bodySummarizer) { $code = $response->getStatusCode(); @@ -93,20 +96,22 @@ public static function history(&$container): callable return $handler($request, $options)->then( static function ($value) use ($request, &$container, $options) { $container[] = [ - 'request' => $request, + 'request' => $request, 'response' => $value, - 'error' => null, - 'options' => $options + 'error' => null, + 'options' => $options, ]; + return $value; }, static function ($reason) use ($request, &$container, $options) { $container[] = [ - 'request' => $request, + 'request' => $request, 'response' => null, - 'error' => $reason, - 'options' => $options + 'error' => $reason, + 'options' => $options, ]; + return P\Create::rejectionFor($reason); } ); @@ -138,6 +143,7 @@ public static function tap(callable $before = null, callable $after = null): cal if ($after) { $after($request, $options, $response); } + return $response; }; }; @@ -202,12 +208,14 @@ public static function log(LoggerInterface $logger, $formatter, string $logLevel static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface { $message = $formatter->format($request, $response); $logger->log($logLevel, $message); + return $response; }, static function ($reason) use ($logger, $request, $formatter): PromiseInterface { $response = $reason instanceof RequestException ? $reason->getResponse() : null; $message = $formatter->format($request, $response, P\Create::exceptionFor($reason)); $logger->error($message); + return P\Create::rejectionFor($reason); } ); diff --git a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php index 7ca62833..0a8de812 100644 --- a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -84,6 +84,7 @@ private function addExpectHeader(RequestInterface $request, array $options, arra // The expect header is unconditionally enabled if ($expect === true) { $modify['set_headers']['Expect'] = '100-Continue'; + return; } diff --git a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php index f67d448b..7aa21a62 100644 --- a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -27,10 +27,10 @@ class RedirectMiddleware * @var array */ public static $defaultSettings = [ - 'max' => 5, - 'protocols' => ['http', 'https'], - 'strict' => false, - 'referer' => false, + 'max' => 5, + 'protocols' => ['http', 'https'], + 'strict' => false, + 'referer' => false, 'track_redirects' => false, ]; @@ -166,8 +166,8 @@ public function modifyRequest(RequestInterface $request, array $options, Respons // not forcing RFC compliance, but rather emulating what all browsers // would do. $statusCode = $response->getStatusCode(); - if ($statusCode == 303 || - ($statusCode <= 302 && !$options['allow_redirects']['strict']) + if ($statusCode == 303 + || ($statusCode <= 302 && !$options['allow_redirects']['strict']) ) { $safeMethods = ['GET', 'HEAD', 'OPTIONS']; $requestMethod = $request->getMethod(); diff --git a/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/vendor/guzzlehttp/guzzle/src/RequestOptions.php index 20b31bc2..bf3b02b6 100644 --- a/vendor/guzzlehttp/guzzle/src/RequestOptions.php +++ b/vendor/guzzlehttp/guzzle/src/RequestOptions.php @@ -7,7 +7,7 @@ * * More documentation for each option can be found at http://guzzlephp.org/. * - * @link http://docs.guzzlephp.org/en/v6/request-options.html + * @see http://docs.guzzlephp.org/en/v6/request-options.html */ final class RequestOptions { @@ -70,10 +70,22 @@ final class RequestOptions /** * connect_timeout: (float, default=0) Float describing the number of * seconds to wait while trying to connect to a server. Use 0 to wait - * indefinitely (the default behavior). + * 300 seconds (the default behavior). */ public const CONNECT_TIMEOUT = 'connect_timeout'; + /** + * crypto_method: (int) A value describing the minimum TLS protocol + * version to use. + * + * This setting must be set to one of the + * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. PHP 7.4 or higher is + * required in order to use TLS 1.3, and cURL 7.34.0 or higher is required + * in order to specify a crypto method, with cURL 7.52.0 or higher being + * required to use TLS 1.3. + */ + public const CRYPTO_METHOD = 'crypto_method'; + /** * debug: (bool|resource) Set to true or set to a PHP stream returned by * fopen() enable debug output with the HTTP handler used to send a diff --git a/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php index 0236a9d5..8f4d93ac 100644 --- a/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php @@ -44,7 +44,7 @@ public function __construct(callable $decider, callable $nextHandler, callable $ { $this->decider = $decider; $this->nextHandler = $nextHandler; - $this->delay = $delay ?: __CLASS__ . '::exponentialDelay'; + $this->delay = $delay ?: __CLASS__.'::exponentialDelay'; } /** @@ -54,7 +54,7 @@ public function __construct(callable $decider, callable $nextHandler, callable $ */ public static function exponentialDelay(int $retries): int { - return (int) \pow(2, $retries - 1) * 1000; + return (int) 2 ** ($retries - 1) * 1000; } public function __invoke(RequestInterface $request, array $options): PromiseInterface @@ -64,6 +64,7 @@ public function __invoke(RequestInterface $request, array $options): PromiseInte } $fn = $this->nextHandler; + return $fn($request, $options) ->then( $this->onFulfilled($request, $options), @@ -85,6 +86,7 @@ private function onFulfilled(RequestInterface $request, array $options): callabl )) { return $value; } + return $this->doRetry($request, $options, $value); }; } @@ -103,6 +105,7 @@ private function onRejected(RequestInterface $req, array $options): callable )) { return P\Create::rejectionFor($reason); } + return $this->doRetry($req, $options); }; } diff --git a/vendor/guzzlehttp/guzzle/src/TransferStats.php b/vendor/guzzlehttp/guzzle/src/TransferStats.php index 93fa334c..2ce9e38f 100644 --- a/vendor/guzzlehttp/guzzle/src/TransferStats.php +++ b/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -46,8 +46,8 @@ final class TransferStats */ public function __construct( RequestInterface $request, - ?ResponseInterface $response = null, - ?float $transferTime = null, + ResponseInterface $response = null, + float $transferTime = null, $handlerErrorData = null, array $handlerStats = [] ) { diff --git a/vendor/guzzlehttp/guzzle/src/Utils.php b/vendor/guzzlehttp/guzzle/src/Utils.php index e355f321..fcf571d6 100644 --- a/vendor/guzzlehttp/guzzle/src/Utils.php +++ b/vendor/guzzlehttp/guzzle/src/Utils.php @@ -23,9 +23,9 @@ public static function describeType($input): string { switch (\gettype($input)) { case 'object': - return 'object(' . \get_class($input) . ')'; + return 'object('.\get_class($input).')'; case 'array': - return 'array(' . \count($input) . ')'; + return 'array('.\count($input).')'; default: \ob_start(); \var_dump($input); @@ -79,9 +79,9 @@ public static function debugResource($value = null) * * The returned handler is not wrapped by any default middlewares. * - * @throws \RuntimeException if no viable Handler is available. - * * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system. + * + * @throws \RuntimeException if no viable Handler is available. */ public static function chooseHandler(): callable { @@ -247,8 +247,8 @@ public static function isHostInNoProxy(string $host, array $noProxyArray): bool } // Special match if the area when prefixed with ".". Remove any // existing leading "." and add a new leading ".". - $area = '.' . \ltrim($area, '.'); - if (\substr($host, -(\strlen($area))) === $area) { + $area = '.'.\ltrim($area, '.'); + if (\substr($host, -\strlen($area)) === $area) { return true; } } @@ -269,13 +269,13 @@ public static function isHostInNoProxy(string $host, array $noProxyArray): bool * * @throws InvalidArgumentException if the JSON cannot be decoded. * - * @link https://www.php.net/manual/en/function.json-decode.php + * @see https://www.php.net/manual/en/function.json-decode.php */ public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0) { $data = \json_decode($json, $assoc, $depth, $options); if (\JSON_ERROR_NONE !== \json_last_error()) { - throw new InvalidArgumentException('json_decode error: ' . \json_last_error_msg()); + throw new InvalidArgumentException('json_decode error: '.\json_last_error_msg()); } return $data; @@ -290,13 +290,13 @@ public static function jsonDecode(string $json, bool $assoc = false, int $depth * * @throws InvalidArgumentException if the JSON cannot be encoded. * - * @link https://www.php.net/manual/en/function.json-encode.php + * @see https://www.php.net/manual/en/function.json-encode.php */ public static function jsonEncode($value, int $options = 0, int $depth = 512): string { $json = \json_encode($value, $options, $depth); if (\JSON_ERROR_NONE !== \json_last_error()) { - throw new InvalidArgumentException('json_encode error: ' . \json_last_error_msg()); + throw new InvalidArgumentException('json_encode error: '.\json_last_error_msg()); } /** @var string */ @@ -341,7 +341,7 @@ public static function idnUriConvert(UriInterface $uri, int $options = 0): UriIn $errorMessage = 'IDN conversion failed'; if ($errors) { - $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; + $errorMessage .= ' (errors: '.implode(', ', $errors).')'; } throw new InvalidArgumentException($errorMessage); diff --git a/vendor/guzzlehttp/guzzle/src/functions.php b/vendor/guzzlehttp/guzzle/src/functions.php index a70d2cbf..5edc66ab 100644 --- a/vendor/guzzlehttp/guzzle/src/functions.php +++ b/vendor/guzzlehttp/guzzle/src/functions.php @@ -50,10 +50,10 @@ function debug_resource($value = null) * * The returned handler is not wrapped by any default middlewares. * - * @throws \RuntimeException if no viable Handler is available. - * * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system. * + * @throws \RuntimeException if no viable Handler is available. + * * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead. */ function choose_handler(): callable @@ -141,7 +141,7 @@ function is_host_in_noproxy(string $host, array $noProxyArray): bool * * @throws Exception\InvalidArgumentException if the JSON cannot be decoded. * - * @link https://www.php.net/manual/en/function.json-decode.php + * @see https://www.php.net/manual/en/function.json-decode.php * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead. */ function json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0) @@ -158,7 +158,7 @@ function json_decode(string $json, bool $assoc = false, int $depth = 512, int $o * * @throws Exception\InvalidArgumentException if the JSON cannot be encoded. * - * @link https://www.php.net/manual/en/function.json-encode.php + * @see https://www.php.net/manual/en/function.json-encode.php * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead. */ function json_encode($value, int $options = 0, int $depth = 512): string diff --git a/vendor/guzzlehttp/guzzle/src/functions_include.php b/vendor/guzzlehttp/guzzle/src/functions_include.php index 6636a422..394f9534 100644 --- a/vendor/guzzlehttp/guzzle/src/functions_include.php +++ b/vendor/guzzlehttp/guzzle/src/functions_include.php @@ -2,5 +2,5 @@ // Don't redefine the functions if included multiple times. if (!\function_exists('GuzzleHttp\describe_type')) { - require __DIR__ . '/functions.php'; + require __DIR__.'/functions.php'; } diff --git a/vendor/guzzlehttp/promises/CHANGELOG.md b/vendor/guzzlehttp/promises/CHANGELOG.md index 253282eb..eaf2af42 100644 --- a/vendor/guzzlehttp/promises/CHANGELOG.md +++ b/vendor/guzzlehttp/promises/CHANGELOG.md @@ -1,11 +1,43 @@ # CHANGELOG + +## 2.0.1 - 2023-08-03 + +### Changed + +- PHP 8.3 support + + +## 2.0.0 - 2023-05-21 + +### Added + +- Added PHP 7 type hints + +### Changed + +- All previously non-final non-exception classes have been marked as soft-final + +### Removed + +- Dropped PHP < 7.2 support +- All functions in the `GuzzleHttp\Promise` namespace + + +## 1.5.3 - 2023-05-21 + +### Changed + +- Removed remaining usage of deprecated functions + + ## 1.5.2 - 2022-08-07 ### Changed - Officially support PHP 8.2 + ## 1.5.1 - 2021-10-22 ### Fixed @@ -13,6 +45,7 @@ - Revert "Call handler when waiting on fulfilled/rejected Promise" - Fix pool memory leak when empty array of promises provided + ## 1.5.0 - 2021-10-07 ### Changed @@ -24,12 +57,14 @@ - Fix manually settle promises generated with `Utils::task` + ## 1.4.1 - 2021-02-18 ### Fixed - Fixed `each_limit` skipping promises and failing + ## 1.4.0 - 2020-09-30 ### Added diff --git a/vendor/guzzlehttp/promises/README.md b/vendor/guzzlehttp/promises/README.md index 1ea667ab..a32d3d29 100644 --- a/vendor/guzzlehttp/promises/README.md +++ b/vendor/guzzlehttp/promises/README.md @@ -29,6 +29,21 @@ for a general introduction to promises. `GuzzleHttp\Promise\Coroutine::of()`. +## Installation + +```shell +composer require guzzlehttp/promises +``` + + +## Version Guidance + +| Version | Status | PHP Version | +|---------|------------------------|--------------| +| 1.x | Bug and security fixes | >=5.5,<8.3 | +| 2.x | Latest | >=7.2.5,<8.4 | + + ## Quick Start A *promise* represents the eventual result of an asynchronous operation. The @@ -430,8 +445,6 @@ $loop = React\EventLoop\Factory::create(); $loop->addPeriodicTimer(0, [$queue, 'run']); ``` -*TODO*: Perhaps adding a `futureTick()` on each tick would be faster? - ## Implementation Notes @@ -501,8 +514,8 @@ $promise->resolve('foo'); A static API was first introduced in 1.4.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The -function API will be removed in 2.0.0. A migration table has been provided here -for your convenience: +function API was removed in 2.0.0. A migration table has been provided here for +your convenience: | Original Function | Replacement Method | |----------------|----------------| diff --git a/vendor/guzzlehttp/promises/composer.json b/vendor/guzzlehttp/promises/composer.json index c959fb32..fc1989ec 100644 --- a/vendor/guzzlehttp/promises/composer.json +++ b/vendor/guzzlehttp/promises/composer.json @@ -26,32 +26,32 @@ } ], "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "autoload": { "psr-4": { "GuzzleHttp\\Promise\\": "src/" - }, - "files": ["src/functions_include.php"] + } }, "autoload-dev": { "psr-4": { "GuzzleHttp\\Promise\\Tests\\": "tests/" } }, - "scripts": { - "test": "vendor/bin/simple-phpunit", - "test-ci": "vendor/bin/simple-phpunit --coverage-text" - }, "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "config": { + "allow-plugins": { + "bamarni/composer-bin-plugin": true + }, "preferred-install": "dist", "sort-packages": true } diff --git a/vendor/guzzlehttp/promises/src/AggregateException.php b/vendor/guzzlehttp/promises/src/AggregateException.php index d2b5712b..40ffdbcf 100644 --- a/vendor/guzzlehttp/promises/src/AggregateException.php +++ b/vendor/guzzlehttp/promises/src/AggregateException.php @@ -1,5 +1,7 @@ generator = $generatorFn(); - $this->result = new Promise(function () { + $this->result = new Promise(function (): void { while (isset($this->currentPromise)) { $this->currentPromise->wait(); } }); try { $this->nextCoroutine($this->generator->current()); - } catch (\Exception $exception) { - $this->result->reject($exception); } catch (Throwable $throwable) { $this->result->reject($throwable); } @@ -78,10 +77,8 @@ public function __construct(callable $generatorFn) /** * Create a new coroutine. - * - * @return self */ - public static function of(callable $generatorFn) + public static function of(callable $generatorFn): self { return new self($generatorFn); } @@ -89,42 +86,42 @@ public static function of(callable $generatorFn) public function then( callable $onFulfilled = null, callable $onRejected = null - ) { + ): PromiseInterface { return $this->result->then($onFulfilled, $onRejected); } - public function otherwise(callable $onRejected) + public function otherwise(callable $onRejected): PromiseInterface { return $this->result->otherwise($onRejected); } - public function wait($unwrap = true) + public function wait(bool $unwrap = true) { return $this->result->wait($unwrap); } - public function getState() + public function getState(): string { return $this->result->getState(); } - public function resolve($value) + public function resolve($value): void { $this->result->resolve($value); } - public function reject($reason) + public function reject($reason): void { $this->result->reject($reason); } - public function cancel() + public function cancel(): void { $this->currentPromise->cancel(); $this->result->cancel(); } - private function nextCoroutine($yielded) + private function nextCoroutine($yielded): void { $this->currentPromise = Create::promiseFor($yielded) ->then([$this, '_handleSuccess'], [$this, '_handleFailure']); @@ -133,7 +130,7 @@ private function nextCoroutine($yielded) /** * @internal */ - public function _handleSuccess($value) + public function _handleSuccess($value): void { unset($this->currentPromise); try { @@ -143,8 +140,6 @@ public function _handleSuccess($value) } else { $this->result->resolve($value); } - } catch (Exception $exception) { - $this->result->reject($exception); } catch (Throwable $throwable) { $this->result->reject($throwable); } @@ -153,15 +148,13 @@ public function _handleSuccess($value) /** * @internal */ - public function _handleFailure($reason) + public function _handleFailure($reason): void { unset($this->currentPromise); try { $nextYield = $this->generator->throw(Create::exceptionFor($reason)); // The throw was caught, so keep iterating on the coroutine $this->nextCoroutine($nextYield); - } catch (Exception $exception) { - $this->result->reject($exception); } catch (Throwable $throwable) { $this->result->reject($throwable); } diff --git a/vendor/guzzlehttp/promises/src/Create.php b/vendor/guzzlehttp/promises/src/Create.php index 8d038e9c..9d3fc4a1 100644 --- a/vendor/guzzlehttp/promises/src/Create.php +++ b/vendor/guzzlehttp/promises/src/Create.php @@ -1,5 +1,7 @@ then([$promise, 'resolve'], [$promise, 'reject']); + return $promise; } @@ -34,10 +35,8 @@ public static function promiseFor($value) * If the provided reason is a promise, then it is returned as-is. * * @param mixed $reason Promise or reason. - * - * @return PromiseInterface */ - public static function rejectionFor($reason) + public static function rejectionFor($reason): PromiseInterface { if ($reason instanceof PromiseInterface) { return $reason; @@ -50,12 +49,10 @@ public static function rejectionFor($reason) * Create an exception for a rejected promise value. * * @param mixed $reason - * - * @return \Exception|\Throwable */ - public static function exceptionFor($reason) + public static function exceptionFor($reason): \Throwable { - if ($reason instanceof \Exception || $reason instanceof \Throwable) { + if ($reason instanceof \Throwable) { return $reason; } @@ -66,10 +63,8 @@ public static function exceptionFor($reason) * Returns an iterator for the given value. * * @param mixed $value - * - * @return \Iterator */ - public static function iterFor($value) + public static function iterFor($value): \Iterator { if ($value instanceof \Iterator) { return $value; diff --git a/vendor/guzzlehttp/promises/src/Each.php b/vendor/guzzlehttp/promises/src/Each.php index 1dda3549..1a7aa0fb 100644 --- a/vendor/guzzlehttp/promises/src/Each.php +++ b/vendor/guzzlehttp/promises/src/Each.php @@ -1,5 +1,7 @@ $onFulfilled, - 'rejected' => $onRejected + 'rejected' => $onRejected, ]))->promise(); } @@ -46,19 +46,17 @@ public static function of( * @param int|callable $concurrency * @param callable $onFulfilled * @param callable $onRejected - * - * @return PromiseInterface */ public static function ofLimit( $iterable, $concurrency, callable $onFulfilled = null, callable $onRejected = null - ) { + ): PromiseInterface { return (new EachPromise($iterable, [ - 'fulfilled' => $onFulfilled, - 'rejected' => $onRejected, - 'concurrency' => $concurrency + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected, + 'concurrency' => $concurrency, ]))->promise(); } @@ -70,19 +68,17 @@ public static function ofLimit( * @param mixed $iterable * @param int|callable $concurrency * @param callable $onFulfilled - * - * @return PromiseInterface */ public static function ofLimitAll( $iterable, $concurrency, callable $onFulfilled = null - ) { - return each_limit( + ): PromiseInterface { + return self::ofLimit( $iterable, $concurrency, $onFulfilled, - function ($reason, $idx, PromiseInterface $aggregate) { + function ($reason, $idx, PromiseInterface $aggregate): void { $aggregate->reject($reason); } ); diff --git a/vendor/guzzlehttp/promises/src/EachPromise.php b/vendor/guzzlehttp/promises/src/EachPromise.php index 280d7995..28dd9793 100644 --- a/vendor/guzzlehttp/promises/src/EachPromise.php +++ b/vendor/guzzlehttp/promises/src/EachPromise.php @@ -1,10 +1,14 @@ aggregate) { return $this->aggregate; @@ -82,21 +86,18 @@ public function promise() $this->refillPending(); } catch (\Throwable $e) { $this->aggregate->reject($e); - } catch (\Exception $e) { - $this->aggregate->reject($e); } /** * @psalm-suppress NullableReturnStatement - * @phpstan-ignore-next-line */ return $this->aggregate; } - private function createPromise() + private function createPromise(): void { $this->mutex = false; - $this->aggregate = new Promise(function () { + $this->aggregate = new Promise(function (): void { if ($this->checkIfFinished()) { return; } @@ -113,7 +114,7 @@ private function createPromise() }); // Clear the references when the promise is resolved. - $clearFn = function () { + $clearFn = function (): void { $this->iterable = $this->concurrency = $this->pending = null; $this->onFulfilled = $this->onRejected = null; $this->nextPendingIndex = 0; @@ -122,11 +123,13 @@ private function createPromise() $this->aggregate->then($clearFn, $clearFn); } - private function refillPending() + private function refillPending(): void { if (!$this->concurrency) { // Add all pending promises. - while ($this->addPending() && $this->advanceIterator()); + while ($this->addPending() && $this->advanceIterator()) { + } + return; } @@ -147,10 +150,11 @@ private function refillPending() // next value to yield until promise callbacks are called. while (--$concurrency && $this->advanceIterator() - && $this->addPending()); + && $this->addPending()) { + } } - private function addPending() + private function addPending(): bool { if (!$this->iterable || !$this->iterable->valid()) { return false; @@ -164,7 +168,7 @@ private function addPending() $idx = $this->nextPendingIndex++; $this->pending[$idx] = $promise->then( - function ($value) use ($idx, $key) { + function ($value) use ($idx, $key): void { if ($this->onFulfilled) { call_user_func( $this->onFulfilled, @@ -175,7 +179,7 @@ function ($value) use ($idx, $key) { } $this->step($idx); }, - function ($reason) use ($idx, $key) { + function ($reason) use ($idx, $key): void { if ($this->onRejected) { call_user_func( $this->onRejected, @@ -191,7 +195,7 @@ function ($reason) use ($idx, $key) { return true; } - private function advanceIterator() + private function advanceIterator(): bool { // Place a lock on the iterator so that we ensure to not recurse, // preventing fatal generator errors. @@ -204,19 +208,17 @@ private function advanceIterator() try { $this->iterable->next(); $this->mutex = false; + return true; } catch (\Throwable $e) { $this->aggregate->reject($e); $this->mutex = false; - return false; - } catch (\Exception $e) { - $this->aggregate->reject($e); - $this->mutex = false; + return false; } } - private function step($idx) + private function step(int $idx): void { // If the promise was already resolved, then ignore this step. if (Is::settled($this->aggregate)) { @@ -234,11 +236,12 @@ private function step($idx) } } - private function checkIfFinished() + private function checkIfFinished(): bool { if (!$this->pending && !$this->iterable->valid()) { // Resolve the promise if there's nothing left to do. $this->aggregate->resolve(null); + return true; } diff --git a/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/vendor/guzzlehttp/promises/src/FulfilledPromise.php index 98f72a62..ab712965 100644 --- a/vendor/guzzlehttp/promises/src/FulfilledPromise.php +++ b/vendor/guzzlehttp/promises/src/FulfilledPromise.php @@ -1,5 +1,7 @@ value; - $queue->add(static function () use ($p, $value, $onFulfilled) { + $queue->add(static function () use ($p, $value, $onFulfilled): void { if (Is::pending($p)) { try { $p->resolve($onFulfilled($value)); } catch (\Throwable $e) { $p->reject($e); - } catch (\Exception $e) { - $p->reject($e); } } }); @@ -50,34 +55,34 @@ public function then( return $p; } - public function otherwise(callable $onRejected) + public function otherwise(callable $onRejected): PromiseInterface { return $this->then(null, $onRejected); } - public function wait($unwrap = true, $defaultDelivery = null) + public function wait(bool $unwrap = true) { return $unwrap ? $this->value : null; } - public function getState() + public function getState(): string { return self::FULFILLED; } - public function resolve($value) + public function resolve($value): void { if ($value !== $this->value) { - throw new \LogicException("Cannot resolve a fulfilled promise"); + throw new \LogicException('Cannot resolve a fulfilled promise'); } } - public function reject($reason) + public function reject($reason): void { - throw new \LogicException("Cannot reject a fulfilled promise"); + throw new \LogicException('Cannot reject a fulfilled promise'); } - public function cancel() + public function cancel(): void { // pass } diff --git a/vendor/guzzlehttp/promises/src/Is.php b/vendor/guzzlehttp/promises/src/Is.php index c3ed8d01..f3f05038 100644 --- a/vendor/guzzlehttp/promises/src/Is.php +++ b/vendor/guzzlehttp/promises/src/Is.php @@ -1,45 +1,39 @@ getState() === PromiseInterface::PENDING; } /** * Returns true if a promise is fulfilled or rejected. - * - * @return bool */ - public static function settled(PromiseInterface $promise) + public static function settled(PromiseInterface $promise): bool { return $promise->getState() !== PromiseInterface::PENDING; } /** * Returns true if a promise is fulfilled. - * - * @return bool */ - public static function fulfilled(PromiseInterface $promise) + public static function fulfilled(PromiseInterface $promise): bool { return $promise->getState() === PromiseInterface::FULFILLED; } /** * Returns true if a promise is rejected. - * - * @return bool */ - public static function rejected(PromiseInterface $promise) + public static function rejected(PromiseInterface $promise): bool { return $promise->getState() === PromiseInterface::REJECTED; } diff --git a/vendor/guzzlehttp/promises/src/Promise.php b/vendor/guzzlehttp/promises/src/Promise.php index 75939057..1b07bdc9 100644 --- a/vendor/guzzlehttp/promises/src/Promise.php +++ b/vendor/guzzlehttp/promises/src/Promise.php @@ -1,11 +1,15 @@ state === self::PENDING) { $p = new Promise(null, [$this, 'cancel']); $this->handlers[] = [$p, $onFulfilled, $onRejected]; $p->waitList = $this->waitList; $p->waitList[] = $this; + return $p; } // Return a fulfilled promise and immediately invoke any callbacks. if ($this->state === self::FULFILLED) { $promise = Create::promiseFor($this->result); + return $onFulfilled ? $promise->then($onFulfilled) : $promise; } // It's either cancelled or rejected, so return a rejected promise // and immediately invoke any callbacks. $rejection = Create::rejectionFor($this->result); + return $onRejected ? $rejection->then(null, $onRejected) : $rejection; } - public function otherwise(callable $onRejected) + public function otherwise(callable $onRejected): PromiseInterface { return $this->then(null, $onRejected); } - public function wait($unwrap = true) + public function wait(bool $unwrap = true) { $this->waitIfPending(); @@ -73,12 +80,12 @@ public function wait($unwrap = true) } } - public function getState() + public function getState(): string { return $this->state; } - public function cancel() + public function cancel(): void { if ($this->state !== self::PENDING) { return; @@ -93,8 +100,6 @@ public function cancel() $fn(); } catch (\Throwable $e) { $this->reject($e); - } catch (\Exception $e) { - $this->reject($e); } } @@ -105,17 +110,17 @@ public function cancel() } } - public function resolve($value) + public function resolve($value): void { $this->settle(self::FULFILLED, $value); } - public function reject($reason) + public function reject($reason): void { $this->settle(self::REJECTED, $reason); } - private function settle($state, $value) + private function settle(string $state, $value): void { if ($this->state !== self::PENDING) { // Ignore calls with the same resolution. @@ -148,7 +153,7 @@ private function settle($state, $value) if (!is_object($value) || !method_exists($value, 'then')) { $id = $state === self::FULFILLED ? 1 : 2; // It's a success, so resolve the handlers in the queue. - Utils::queue()->add(static function () use ($id, $value, $handlers) { + Utils::queue()->add(static function () use ($id, $value, $handlers): void { foreach ($handlers as $handler) { self::callHandler($id, $value, $handler); } @@ -159,12 +164,12 @@ private function settle($state, $value) } else { // Resolve the handlers when the forwarded promise is resolved. $value->then( - static function ($value) use ($handlers) { + static function ($value) use ($handlers): void { foreach ($handlers as $handler) { self::callHandler(1, $value, $handler); } }, - static function ($reason) use ($handlers) { + static function ($reason) use ($handlers): void { foreach ($handlers as $handler) { self::callHandler(2, $reason, $handler); } @@ -180,7 +185,7 @@ static function ($reason) use ($handlers) { * @param mixed $value Value to pass to the callback. * @param array $handler Array of handler data (promise and callbacks). */ - private static function callHandler($index, $value, array $handler) + private static function callHandler(int $index, $value, array $handler): void { /** @var PromiseInterface $promise */ $promise = $handler[0]; @@ -211,12 +216,10 @@ private static function callHandler($index, $value, array $handler) } } catch (\Throwable $reason) { $promise->reject($reason); - } catch (\Exception $reason) { - $promise->reject($reason); } } - private function waitIfPending() + private function waitIfPending(): void { if ($this->state !== self::PENDING) { return; @@ -227,9 +230,9 @@ private function waitIfPending() } else { // If there's no wait function, then reject the promise. $this->reject('Cannot wait on a promise that has ' - . 'no internal wait function. You must provide a wait ' - . 'function when constructing the promise to be able to ' - . 'wait on a promise.'); + .'no internal wait function. You must provide a wait ' + .'function when constructing the promise to be able to ' + .'wait on a promise.'); } Utils::queue()->run(); @@ -240,13 +243,13 @@ private function waitIfPending() } } - private function invokeWaitFn() + private function invokeWaitFn(): void { try { $wfn = $this->waitFn; $this->waitFn = null; $wfn(true); - } catch (\Exception $reason) { + } catch (\Throwable $reason) { if ($this->state === self::PENDING) { // The promise has not been resolved yet, so reject the promise // with the exception. @@ -259,7 +262,7 @@ private function invokeWaitFn() } } - private function invokeWaitList() + private function invokeWaitList(): void { $waitList = $this->waitList; $this->waitList = null; diff --git a/vendor/guzzlehttp/promises/src/PromiseInterface.php b/vendor/guzzlehttp/promises/src/PromiseInterface.php index e5983314..2824802b 100644 --- a/vendor/guzzlehttp/promises/src/PromiseInterface.php +++ b/vendor/guzzlehttp/promises/src/PromiseInterface.php @@ -1,5 +1,7 @@ reason; $p = new Promise([$queue, 'run']); - $queue->add(static function () use ($p, $reason, $onRejected) { + $queue->add(static function () use ($p, $reason, $onRejected): void { if (Is::pending($p)) { try { // Return a resolved promise if onRejected does not throw. @@ -43,9 +50,6 @@ public function then( } catch (\Throwable $e) { // onRejected threw, so return a rejected promise. $p->reject($e); - } catch (\Exception $e) { - // onRejected threw, so return a rejected promise. - $p->reject($e); } } }); @@ -53,12 +57,12 @@ public function then( return $p; } - public function otherwise(callable $onRejected) + public function otherwise(callable $onRejected): PromiseInterface { return $this->then(null, $onRejected); } - public function wait($unwrap = true, $defaultDelivery = null) + public function wait(bool $unwrap = true) { if ($unwrap) { throw Create::exceptionFor($this->reason); @@ -67,24 +71,24 @@ public function wait($unwrap = true, $defaultDelivery = null) return null; } - public function getState() + public function getState(): string { return self::REJECTED; } - public function resolve($value) + public function resolve($value): void { - throw new \LogicException("Cannot resolve a rejected promise"); + throw new \LogicException('Cannot resolve a rejected promise'); } - public function reject($reason) + public function reject($reason): void { if ($reason !== $this->reason) { - throw new \LogicException("Cannot reject a rejected promise"); + throw new \LogicException('Cannot reject a rejected promise'); } } - public function cancel() + public function cancel(): void { // pass } diff --git a/vendor/guzzlehttp/promises/src/RejectionException.php b/vendor/guzzlehttp/promises/src/RejectionException.php index e2f13770..47dca862 100644 --- a/vendor/guzzlehttp/promises/src/RejectionException.php +++ b/vendor/guzzlehttp/promises/src/RejectionException.php @@ -1,5 +1,7 @@ reason = $reason; $message = 'The promise was rejected'; if ($description) { - $message .= ' with reason: ' . $description; + $message .= ' with reason: '.$description; } elseif (is_string($reason) || (is_object($reason) && method_exists($reason, '__toString')) ) { - $message .= ' with reason: ' . $this->reason; + $message .= ' with reason: '.$this->reason; } elseif ($reason instanceof \JsonSerializable) { - $message .= ' with reason: ' - . json_encode($this->reason, JSON_PRETTY_PRINT); + $message .= ' with reason: '.json_encode($this->reason, JSON_PRETTY_PRINT); } parent::__construct($message); diff --git a/vendor/guzzlehttp/promises/src/TaskQueue.php b/vendor/guzzlehttp/promises/src/TaskQueue.php index f0fba2c5..503e0b2d 100644 --- a/vendor/guzzlehttp/promises/src/TaskQueue.php +++ b/vendor/guzzlehttp/promises/src/TaskQueue.php @@ -1,5 +1,7 @@ run(); + * + * @final */ class TaskQueue implements TaskQueueInterface { private $enableShutdown = true; private $queue = []; - public function __construct($withShutdown = true) + public function __construct(bool $withShutdown = true) { if ($withShutdown) { - register_shutdown_function(function () { + register_shutdown_function(function (): void { if ($this->enableShutdown) { // Only run the tasks if an E_ERROR didn't occur. $err = error_get_last(); @@ -31,17 +35,17 @@ public function __construct($withShutdown = true) } } - public function isEmpty() + public function isEmpty(): bool { return !$this->queue; } - public function add(callable $task) + public function add(callable $task): void { $this->queue[] = $task; } - public function run() + public function run(): void { while ($task = array_shift($this->queue)) { /** @var callable $task */ @@ -60,7 +64,7 @@ public function run() * * Note: This shutdown will occur before any destructors are triggered. */ - public function disableShutdown() + public function disableShutdown(): void { $this->enableShutdown = false; } diff --git a/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/vendor/guzzlehttp/promises/src/TaskQueueInterface.php index 723d4d54..34c561a4 100644 --- a/vendor/guzzlehttp/promises/src/TaskQueueInterface.php +++ b/vendor/guzzlehttp/promises/src/TaskQueueInterface.php @@ -1,24 +1,24 @@ * - * @param TaskQueueInterface $assign Optionally specify a new queue instance. - * - * @return TaskQueueInterface + * @param TaskQueueInterface|null $assign Optionally specify a new queue instance. */ - public static function queue(TaskQueueInterface $assign = null) + public static function queue(TaskQueueInterface $assign = null): TaskQueueInterface { static $queue; @@ -39,22 +39,18 @@ public static function queue(TaskQueueInterface $assign = null) * returns a promise that is fulfilled or rejected with the result. * * @param callable $task Task function to run. - * - * @return PromiseInterface */ - public static function task(callable $task) + public static function task(callable $task): PromiseInterface { $queue = self::queue(); $promise = new Promise([$queue, 'run']); - $queue->add(function () use ($task, $promise) { + $queue->add(function () use ($task, $promise): void { try { if (Is::pending($promise)) { $promise->resolve($task()); } } catch (\Throwable $e) { $promise->reject($e); - } catch (\Exception $e) { - $promise->reject($e); } }); @@ -72,22 +68,18 @@ public static function task(callable $task) * key mapping to the rejection reason of the promise. * * @param PromiseInterface $promise Promise or value. - * - * @return array */ - public static function inspect(PromiseInterface $promise) + public static function inspect(PromiseInterface $promise): array { try { return [ 'state' => PromiseInterface::FULFILLED, - 'value' => $promise->wait() + 'value' => $promise->wait(), ]; } catch (RejectionException $e) { return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; } catch (\Throwable $e) { return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; - } catch (\Exception $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; } } @@ -100,14 +92,12 @@ public static function inspect(PromiseInterface $promise) * @see inspect for the inspection state array format. * * @param PromiseInterface[] $promises Traversable of promises to wait upon. - * - * @return array */ - public static function inspectAll($promises) + public static function inspectAll($promises): array { $results = []; foreach ($promises as $key => $promise) { - $results[$key] = inspect($promise); + $results[$key] = self::inspect($promise); } return $results; @@ -122,12 +112,9 @@ public static function inspectAll($promises) * * @param iterable $promises Iterable of PromiseInterface objects to wait on. * - * @return array - * - * @throws \Exception on error - * @throws \Throwable on error in PHP >=7 + * @throws \Throwable on error */ - public static function unwrap($promises) + public static function unwrap($promises): array { $results = []; foreach ($promises as $key => $promise) { @@ -147,22 +134,21 @@ public static function unwrap($promises) * * @param mixed $promises Promises or values. * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. - * - * @return PromiseInterface */ - public static function all($promises, $recursive = false) + public static function all($promises, bool $recursive = false): PromiseInterface { $results = []; $promise = Each::of( $promises, - function ($value, $idx) use (&$results) { + function ($value, $idx) use (&$results): void { $results[$idx] = $value; }, - function ($reason, $idx, Promise $aggregate) { + function ($reason, $idx, Promise $aggregate): void { $aggregate->reject($reason); } )->then(function () use (&$results) { ksort($results); + return $results; }); @@ -173,6 +159,7 @@ function ($reason, $idx, Promise $aggregate) { return self::all($promises, $recursive); } } + return $results; }); } @@ -193,17 +180,15 @@ function ($reason, $idx, Promise $aggregate) { * * @param int $count Total number of promises. * @param mixed $promises Promises or values. - * - * @return PromiseInterface */ - public static function some($count, $promises) + public static function some(int $count, $promises): PromiseInterface { $results = []; $rejections = []; return Each::of( $promises, - function ($value, $idx, PromiseInterface $p) use (&$results, $count) { + function ($value, $idx, PromiseInterface $p) use (&$results, $count): void { if (Is::settled($p)) { return; } @@ -212,7 +197,7 @@ function ($value, $idx, PromiseInterface $p) use (&$results, $count) { $p->resolve(null); } }, - function ($reason) use (&$rejections) { + function ($reason) use (&$rejections): void { $rejections[] = $reason; } )->then( @@ -224,6 +209,7 @@ function () use (&$results, &$rejections, $count) { ); } ksort($results); + return array_values($results); } ); @@ -234,10 +220,8 @@ function () use (&$results, &$rejections, $count) { * fulfillment value is not an array of 1 but the value directly. * * @param mixed $promises Promises or values. - * - * @return PromiseInterface */ - public static function any($promises) + public static function any($promises): PromiseInterface { return self::some(1, $promises)->then(function ($values) { return $values[0]; @@ -253,23 +237,22 @@ public static function any($promises) * @see inspect for the inspection state array format. * * @param mixed $promises Promises or values. - * - * @return PromiseInterface */ - public static function settle($promises) + public static function settle($promises): PromiseInterface { $results = []; return Each::of( $promises, - function ($value, $idx) use (&$results) { + function ($value, $idx) use (&$results): void { $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; }, - function ($reason, $idx) use (&$results) { + function ($reason, $idx) use (&$results): void { $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; } )->then(function () use (&$results) { ksort($results); + return $results; }); } diff --git a/vendor/guzzlehttp/promises/src/functions.php b/vendor/guzzlehttp/promises/src/functions.php deleted file mode 100644 index c03d39d0..00000000 --- a/vendor/guzzlehttp/promises/src/functions.php +++ /dev/null @@ -1,363 +0,0 @@ - - * while ($eventLoop->isRunning()) { - * GuzzleHttp\Promise\queue()->run(); - * } - * - * - * @param TaskQueueInterface $assign Optionally specify a new queue instance. - * - * @return TaskQueueInterface - * - * @deprecated queue will be removed in guzzlehttp/promises:2.0. Use Utils::queue instead. - */ -function queue(TaskQueueInterface $assign = null) -{ - return Utils::queue($assign); -} - -/** - * Adds a function to run in the task queue when it is next `run()` and returns - * a promise that is fulfilled or rejected with the result. - * - * @param callable $task Task function to run. - * - * @return PromiseInterface - * - * @deprecated task will be removed in guzzlehttp/promises:2.0. Use Utils::task instead. - */ -function task(callable $task) -{ - return Utils::task($task); -} - -/** - * Creates a promise for a value if the value is not a promise. - * - * @param mixed $value Promise or value. - * - * @return PromiseInterface - * - * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead. - */ -function promise_for($value) -{ - return Create::promiseFor($value); -} - -/** - * Creates a rejected promise for a reason if the reason is not a promise. If - * the provided reason is a promise, then it is returned as-is. - * - * @param mixed $reason Promise or reason. - * - * @return PromiseInterface - * - * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead. - */ -function rejection_for($reason) -{ - return Create::rejectionFor($reason); -} - -/** - * Create an exception for a rejected promise value. - * - * @param mixed $reason - * - * @return \Exception|\Throwable - * - * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead. - */ -function exception_for($reason) -{ - return Create::exceptionFor($reason); -} - -/** - * Returns an iterator for the given value. - * - * @param mixed $value - * - * @return \Iterator - * - * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead. - */ -function iter_for($value) -{ - return Create::iterFor($value); -} - -/** - * Synchronously waits on a promise to resolve and returns an inspection state - * array. - * - * Returns a state associative array containing a "state" key mapping to a - * valid promise state. If the state of the promise is "fulfilled", the array - * will contain a "value" key mapping to the fulfilled value of the promise. If - * the promise is rejected, the array will contain a "reason" key mapping to - * the rejection reason of the promise. - * - * @param PromiseInterface $promise Promise or value. - * - * @return array - * - * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead. - */ -function inspect(PromiseInterface $promise) -{ - return Utils::inspect($promise); -} - -/** - * Waits on all of the provided promises, but does not unwrap rejected promises - * as thrown exception. - * - * Returns an array of inspection state arrays. - * - * @see inspect for the inspection state array format. - * - * @param PromiseInterface[] $promises Traversable of promises to wait upon. - * - * @return array - * - * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead. - */ -function inspect_all($promises) -{ - return Utils::inspectAll($promises); -} - -/** - * Waits on all of the provided promises and returns the fulfilled values. - * - * Returns an array that contains the value of each promise (in the same order - * the promises were provided). An exception is thrown if any of the promises - * are rejected. - * - * @param iterable $promises Iterable of PromiseInterface objects to wait on. - * - * @return array - * - * @throws \Exception on error - * @throws \Throwable on error in PHP >=7 - * - * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead. - */ -function unwrap($promises) -{ - return Utils::unwrap($promises); -} - -/** - * Given an array of promises, return a promise that is fulfilled when all the - * items in the array are fulfilled. - * - * The promise's fulfillment value is an array with fulfillment values at - * respective positions to the original array. If any promise in the array - * rejects, the returned promise is rejected with the rejection reason. - * - * @param mixed $promises Promises or values. - * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. - * - * @return PromiseInterface - * - * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead. - */ -function all($promises, $recursive = false) -{ - return Utils::all($promises, $recursive); -} - -/** - * Initiate a competitive race between multiple promises or values (values will - * become immediately fulfilled promises). - * - * When count amount of promises have been fulfilled, the returned promise is - * fulfilled with an array that contains the fulfillment values of the winners - * in order of resolution. - * - * This promise is rejected with a {@see AggregateException} if the number of - * fulfilled promises is less than the desired $count. - * - * @param int $count Total number of promises. - * @param mixed $promises Promises or values. - * - * @return PromiseInterface - * - * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead. - */ -function some($count, $promises) -{ - return Utils::some($count, $promises); -} - -/** - * Like some(), with 1 as count. However, if the promise fulfills, the - * fulfillment value is not an array of 1 but the value directly. - * - * @param mixed $promises Promises or values. - * - * @return PromiseInterface - * - * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead. - */ -function any($promises) -{ - return Utils::any($promises); -} - -/** - * Returns a promise that is fulfilled when all of the provided promises have - * been fulfilled or rejected. - * - * The returned promise is fulfilled with an array of inspection state arrays. - * - * @see inspect for the inspection state array format. - * - * @param mixed $promises Promises or values. - * - * @return PromiseInterface - * - * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead. - */ -function settle($promises) -{ - return Utils::settle($promises); -} - -/** - * Given an iterator that yields promises or values, returns a promise that is - * fulfilled with a null value when the iterator has been consumed or the - * aggregate promise has been fulfilled or rejected. - * - * $onFulfilled is a function that accepts the fulfilled value, iterator index, - * and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate if needed. - * - * $onRejected is a function that accepts the rejection reason, iterator index, - * and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate if needed. - * - * @param mixed $iterable Iterator or array to iterate over. - * @param callable $onFulfilled - * @param callable $onRejected - * - * @return PromiseInterface - * - * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead. - */ -function each( - $iterable, - callable $onFulfilled = null, - callable $onRejected = null -) { - return Each::of($iterable, $onFulfilled, $onRejected); -} - -/** - * Like each, but only allows a certain number of outstanding promises at any - * given time. - * - * $concurrency may be an integer or a function that accepts the number of - * pending promises and returns a numeric concurrency limit value to allow for - * dynamic a concurrency size. - * - * @param mixed $iterable - * @param int|callable $concurrency - * @param callable $onFulfilled - * @param callable $onRejected - * - * @return PromiseInterface - * - * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead. - */ -function each_limit( - $iterable, - $concurrency, - callable $onFulfilled = null, - callable $onRejected = null -) { - return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected); -} - -/** - * Like each_limit, but ensures that no promise in the given $iterable argument - * is rejected. If any promise is rejected, then the aggregate promise is - * rejected with the encountered rejection. - * - * @param mixed $iterable - * @param int|callable $concurrency - * @param callable $onFulfilled - * - * @return PromiseInterface - * - * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead. - */ -function each_limit_all( - $iterable, - $concurrency, - callable $onFulfilled = null -) { - return Each::ofLimitAll($iterable, $concurrency, $onFulfilled); -} - -/** - * Returns true if a promise is fulfilled. - * - * @return bool - * - * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead. - */ -function is_fulfilled(PromiseInterface $promise) -{ - return Is::fulfilled($promise); -} - -/** - * Returns true if a promise is rejected. - * - * @return bool - * - * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead. - */ -function is_rejected(PromiseInterface $promise) -{ - return Is::rejected($promise); -} - -/** - * Returns true if a promise is fulfilled or rejected. - * - * @return bool - * - * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead. - */ -function is_settled(PromiseInterface $promise) -{ - return Is::settled($promise); -} - -/** - * Create a new coroutine. - * - * @see Coroutine - * - * @return PromiseInterface - * - * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead. - */ -function coroutine(callable $generatorFn) -{ - return Coroutine::of($generatorFn); -} diff --git a/vendor/guzzlehttp/promises/src/functions_include.php b/vendor/guzzlehttp/promises/src/functions_include.php deleted file mode 100644 index 34cd1710..00000000 --- a/vendor/guzzlehttp/promises/src/functions_include.php +++ /dev/null @@ -1,6 +0,0 @@ -=5.4,<8.1 | +| 2.x | Latest | >=7.2.5,<8.4 | ## AppendStream @@ -855,14 +863,6 @@ This of course assumes they will be resolved against the same base URI. If this equivalence or difference of relative references does not mean anything. -## Version Guidance - -| Version | Status | PHP Version | -|---------|----------------|------------------| -| 1.x | Security fixes | >=5.4,<8.1 | -| 2.x | Latest | ^7.2.5 \|\| ^8.0 | - - ## Security If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information. diff --git a/vendor/guzzlehttp/psr7/composer.json b/vendor/guzzlehttp/psr7/composer.json index cd91040c..d51dd622 100644 --- a/vendor/guzzlehttp/psr7/composer.json +++ b/vendor/guzzlehttp/psr7/composer.json @@ -52,7 +52,7 @@ "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -81,9 +81,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" } }, "config": { diff --git a/vendor/guzzlehttp/psr7/src/AppendStream.php b/vendor/guzzlehttp/psr7/src/AppendStream.php index cbcfaee6..ee8f3788 100644 --- a/vendor/guzzlehttp/psr7/src/AppendStream.php +++ b/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -40,12 +40,14 @@ public function __toString(): string { try { $this->rewind(); + return $this->getContents(); } catch (\Throwable $e) { if (\PHP_VERSION_ID >= 70400) { throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -138,9 +140,9 @@ public function getSize(): ?int public function eof(): bool { - return !$this->streams || - ($this->current >= count($this->streams) - 1 && - $this->streams[$this->current]->eof()); + return !$this->streams + || ($this->current >= count($this->streams) - 1 + && $this->streams[$this->current]->eof()); } public function rewind(): void @@ -167,7 +169,7 @@ public function seek($offset, $whence = SEEK_SET): void $stream->rewind(); } catch (\Exception $e) { throw new \RuntimeException('Unable to seek stream ' - . $i . ' of the AppendStream', 0, $e); + .$i.' of the AppendStream', 0, $e); } } @@ -197,7 +199,7 @@ public function read($length): string if ($this->current === $total) { break; } - $this->current++; + ++$this->current; } $result = $this->streams[$this->current]->read($remaining); @@ -237,8 +239,6 @@ public function write($string): int } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/vendor/guzzlehttp/psr7/src/BufferStream.php b/vendor/guzzlehttp/psr7/src/BufferStream.php index 21be8c0a..2b0eb77b 100644 --- a/vendor/guzzlehttp/psr7/src/BufferStream.php +++ b/vendor/guzzlehttp/psr7/src/BufferStream.php @@ -134,8 +134,6 @@ public function write($string): int } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/vendor/guzzlehttp/psr7/src/FnStream.php b/vendor/guzzlehttp/psr7/src/FnStream.php index 3a1a9512..9fdddb9c 100644 --- a/vendor/guzzlehttp/psr7/src/FnStream.php +++ b/vendor/guzzlehttp/psr7/src/FnStream.php @@ -18,7 +18,7 @@ final class FnStream implements StreamInterface private const SLOTS = [ '__toString', 'close', 'detach', 'rewind', 'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write', - 'isReadable', 'read', 'getContents', 'getMetadata' + 'isReadable', 'read', 'getContents', 'getMetadata', ]; /** @var array */ @@ -33,7 +33,7 @@ public function __construct(array $methods) // Create the functions on the class foreach ($methods as $name => $fn) { - $this->{'_fn_' . $name} = $fn; + $this->{'_fn_'.$name} = $fn; } } @@ -45,7 +45,7 @@ public function __construct(array $methods) public function __get(string $name): void { throw new \BadMethodCallException(str_replace('_fn_', '', $name) - . '() is not implemented in the FnStream'); + .'() is not implemented in the FnStream'); } /** @@ -99,6 +99,7 @@ public function __toString(): string throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -169,8 +170,6 @@ public function getContents(): string } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/vendor/guzzlehttp/psr7/src/Header.php b/vendor/guzzlehttp/psr7/src/Header.php index 4d7005b2..6e38e003 100644 --- a/vendor/guzzlehttp/psr7/src/Header.php +++ b/vendor/guzzlehttp/psr7/src/Header.php @@ -89,7 +89,7 @@ public static function splitList($values): array $v = ''; $isQuoted = false; $isEscaped = false; - for ($i = 0, $max = \strlen($value); $i < $max; $i++) { + for ($i = 0, $max = \strlen($value); $i < $max; ++$i) { if ($isEscaped) { $v .= $value[$i]; $isEscaped = false; diff --git a/vendor/guzzlehttp/psr7/src/HttpFactory.php b/vendor/guzzlehttp/psr7/src/HttpFactory.php index 30be222f..73d17e33 100644 --- a/vendor/guzzlehttp/psr7/src/HttpFactory.php +++ b/vendor/guzzlehttp/psr7/src/HttpFactory.php @@ -23,13 +23,7 @@ * Note: in consuming code it is recommended to require the implemented interfaces * and inject the instance of this class multiple times. */ -final class HttpFactory implements - RequestFactoryInterface, - ResponseFactoryInterface, - ServerRequestFactoryInterface, - StreamFactoryInterface, - UploadedFileFactoryInterface, - UriFactoryInterface +final class HttpFactory implements RequestFactoryInterface, ResponseFactoryInterface, ServerRequestFactoryInterface, StreamFactoryInterface, UploadedFileFactoryInterface, UriFactoryInterface { public function createUploadedFile( StreamInterface $stream, diff --git a/vendor/guzzlehttp/psr7/src/InflateStream.php b/vendor/guzzlehttp/psr7/src/InflateStream.php index 8e00f1c3..599b55da 100644 --- a/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -13,9 +13,9 @@ * then appends the zlib.inflate filter. The stream is then converted back * to a Guzzle stream resource to be used as a Guzzle stream. * - * @link http://tools.ietf.org/html/rfc1950 - * @link http://tools.ietf.org/html/rfc1952 - * @link http://php.net/manual/en/filters.compression.php + * @see http://tools.ietf.org/html/rfc1950 + * @see http://tools.ietf.org/html/rfc1952 + * @see http://php.net/manual/en/filters.compression.php */ final class InflateStream implements StreamInterface { diff --git a/vendor/guzzlehttp/psr7/src/Message.php b/vendor/guzzlehttp/psr7/src/Message.php index 61c1a5dc..6e6c3e51 100644 --- a/vendor/guzzlehttp/psr7/src/Message.php +++ b/vendor/guzzlehttp/psr7/src/Message.php @@ -18,31 +18,31 @@ final class Message public static function toString(MessageInterface $message): string { if ($message instanceof RequestInterface) { - $msg = trim($message->getMethod() . ' ' - . $message->getRequestTarget()) - . ' HTTP/' . $message->getProtocolVersion(); + $msg = trim($message->getMethod().' ' + .$message->getRequestTarget()) + .' HTTP/'.$message->getProtocolVersion(); if (!$message->hasHeader('host')) { - $msg .= "\r\nHost: " . $message->getUri()->getHost(); + $msg .= "\r\nHost: ".$message->getUri()->getHost(); } } elseif ($message instanceof ResponseInterface) { - $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' - . $message->getStatusCode() . ' ' - . $message->getReasonPhrase(); + $msg = 'HTTP/'.$message->getProtocolVersion().' ' + .$message->getStatusCode().' ' + .$message->getReasonPhrase(); } else { throw new \InvalidArgumentException('Unknown message type'); } foreach ($message->getHeaders() as $name => $values) { - if (strtolower($name) === 'set-cookie') { + if (is_string($name) && strtolower($name) === 'set-cookie') { foreach ($values as $value) { - $msg .= "\r\n{$name}: " . $value; + $msg .= "\r\n{$name}: ".$value; } } else { - $msg .= "\r\n{$name}: " . implode(', ', $values); + $msg .= "\r\n{$name}: ".implode(', ', $values); } } - return "{$msg}\r\n\r\n" . $message->getBody(); + return "{$msg}\r\n\r\n".$message->getBody(); } /** @@ -77,7 +77,7 @@ public static function bodySummary(MessageInterface $message, int $truncateAt = // Matches any printable character, including unicode characters: // letters, marks, numbers, punctuation, spacing, and separators. - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary)) { + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary) !== 0) { return null; } @@ -190,7 +190,7 @@ public static function parseRequestUri(string $path, array $headers): string $host = $headers[reset($hostKey)][0]; $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; - return $scheme . '://' . $host . '/' . ltrim($path, '/'); + return $scheme.'://'.$host.'/'.ltrim($path, '/'); } /** @@ -231,7 +231,7 @@ public static function parseResponse(string $message): ResponseInterface // between status-code and reason-phrase is required. But browsers accept // responses without space and reason as well. if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { - throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); + throw new \InvalidArgumentException('Invalid response string: '.$data['start-line']); } $parts = explode(' ', $data['start-line'], 3); diff --git a/vendor/guzzlehttp/psr7/src/MessageTrait.php b/vendor/guzzlehttp/psr7/src/MessageTrait.php index d2dc28b6..e05ebea8 100644 --- a/vendor/guzzlehttp/psr7/src/MessageTrait.php +++ b/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -12,11 +12,11 @@ */ trait MessageTrait { - /** @var array Map of all registered headers, as original name => array of values */ + /** @var string[][] Map of all registered headers, as original name => array of values */ private $headers = []; - /** @var array Map of lowercase header name => original name at registration */ - private $headerNames = []; + /** @var string[] Map of lowercase header name => original name at registration */ + private $headerNames = []; /** @var string */ private $protocol = '1.1'; @@ -37,6 +37,7 @@ public function withProtocolVersion($version): MessageInterface $new = clone $this; $new->protocol = $version; + return $new; } @@ -135,6 +136,7 @@ public function withBody(StreamInterface $body): MessageInterface $new = clone $this; $new->stream = $body; + return $new; } @@ -224,12 +226,9 @@ private function assertHeader($header): void )); } - if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/', $header)) { + if (!preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) { throw new \InvalidArgumentException( - sprintf( - '"%s" is not valid header name', - $header - ) + sprintf('"%s" is not valid header name.', $header) ); } } @@ -257,8 +256,10 @@ private function assertValue(string $value): void // Clients must not send a request with line folding and a server sending folded headers is // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting // folding is not likely to break any legitimate use case. - if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/', $value)) { - throw new \InvalidArgumentException(sprintf('"%s" is not valid header value', $value)); + if (!preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) { + throw new \InvalidArgumentException( + sprintf('"%s" is not valid header value.', $value) + ); } } } diff --git a/vendor/guzzlehttp/psr7/src/MimeType.php b/vendor/guzzlehttp/psr7/src/MimeType.php index 0debbd18..b131bdbe 100644 --- a/vendor/guzzlehttp/psr7/src/MimeType.php +++ b/vendor/guzzlehttp/psr7/src/MimeType.php @@ -18,7 +18,7 @@ final class MimeType '7zip' => 'application/x-7z-compressed', '123' => 'application/vnd.lotus-1-2-3', 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/x-acc', + 'aac' => 'audio/aac', 'aam' => 'application/x-authorware-map', 'aas' => 'application/x-authorware-seg', 'abw' => 'application/x-abiword', @@ -29,6 +29,7 @@ final class MimeType 'acu' => 'application/vnd.acucobol', 'acutc' => 'application/vnd.acucorp', 'adp' => 'audio/adpcm', + 'adts' => 'audio/aac', 'aep' => 'application/vnd.audiograph', 'afm' => 'application/x-font-type1', 'afp' => 'application/vnd.ibm.modcap', @@ -41,11 +42,16 @@ final class MimeType 'air' => 'application/vnd.adobe.air-application-installer-package+zip', 'ait' => 'application/vnd.dvb.ait', 'ami' => 'application/vnd.amiga.ami', + 'aml' => 'application/automationml-aml+xml', + 'amlx' => 'application/automationml-amlx+zip', 'amr' => 'audio/amr', 'apk' => 'application/vnd.android.package-archive', 'apng' => 'image/apng', 'appcache' => 'text/cache-manifest', + 'appinstaller' => 'application/appinstaller', 'application' => 'application/x-ms-application', + 'appx' => 'application/appx', + 'appxbundle' => 'application/appxbundle', 'apr' => 'application/vnd.lotus-approach', 'arc' => 'application/x-freearc', 'arj' => 'application/x-arj', @@ -90,6 +96,7 @@ final class MimeType 'bpk' => 'application/octet-stream', 'bpmn' => 'application/octet-stream', 'bsp' => 'model/vnd.valve.source.compiled-map', + 'btf' => 'image/prs.btif', 'btif' => 'image/prs.btif', 'buffer' => 'application/octet-stream', 'bz' => 'application/x-bzip', @@ -141,6 +148,7 @@ final class MimeType 'cjs' => 'application/node', 'cla' => 'application/vnd.claymore', 'class' => 'application/octet-stream', + 'cld' => 'model/vnd.cld', 'clkk' => 'application/vnd.crick.clicker.keyboard', 'clkp' => 'application/vnd.crick.clicker.palette', 'clkt' => 'application/vnd.crick.clicker.template', @@ -175,6 +183,7 @@ final class MimeType 'csv' => 'text/csv', 'cu' => 'application/cu-seeme', 'curl' => 'text/vnd.curl', + 'cwl' => 'application/cwl', 'cww' => 'application/prs.cww', 'cxt' => 'application/x-director', 'cxx' => 'text/x-c', @@ -197,6 +206,7 @@ final class MimeType 'der' => 'application/x-x509-ca-cert', 'dfac' => 'application/vnd.dreamfactory', 'dgc' => 'application/x-dgc-compressed', + 'dib' => 'image/bmp', 'dic' => 'text/x-c', 'dir' => 'application/x-director', 'dis' => 'application/vnd.mobius.dis', @@ -219,6 +229,7 @@ final class MimeType 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dp' => 'application/vnd.osgi.dp', 'dpg' => 'application/vnd.dpgraph', + 'dpx' => 'image/dpx', 'dra' => 'audio/vnd.dra', 'drle' => 'image/dicom-rle', 'dsc' => 'text/prs.lines.tag', @@ -255,7 +266,6 @@ final class MimeType 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', 'epub' => 'application/epub+zip', - 'es' => 'application/ecmascript', 'es3' => 'application/vnd.eszigno3+xml', 'esa' => 'application/vnd.osgi.subsystem', 'esf' => 'application/vnd.epson.esf', @@ -448,6 +458,7 @@ final class MimeType 'jsonld' => 'application/ld+json', 'jsonml' => 'application/jsonml+json', 'jsx' => 'text/jsx', + 'jt' => 'model/jt', 'jxr' => 'image/jxr', 'jxra' => 'image/jxra', 'jxrs' => 'image/jxrs', @@ -552,7 +563,7 @@ final class MimeType 'mime' => 'message/rfc822', 'mj2' => 'video/mj2', 'mjp2' => 'video/mj2', - 'mjs' => 'application/javascript', + 'mjs' => 'text/javascript', 'mk3d' => 'video/x-matroska', 'mka' => 'audio/x-matroska', 'mkd' => 'text/x-markdown', @@ -602,6 +613,8 @@ final class MimeType 'msg' => 'application/vnd.ms-outlook', 'msh' => 'model/mesh', 'msi' => 'application/x-msdownload', + 'msix' => 'application/msix', + 'msixbundle' => 'application/msixbundle', 'msl' => 'application/vnd.mobius.msl', 'msm' => 'application/octet-stream', 'msp' => 'application/octet-stream', @@ -775,6 +788,8 @@ final class MimeType 'pvb' => 'application/vnd.3gpp.pic-bw-var', 'pwn' => 'application/vnd.3m.post-it-notes', 'pya' => 'audio/vnd.ms-playready.media.pya', + 'pyo' => 'model/vnd.pytha.pyox', + 'pyox' => 'model/vnd.pytha.pyox', 'pyv' => 'video/vnd.ms-playready.media.pyv', 'qam' => 'application/vnd.epson.quickanime', 'qbo' => 'application/vnd.intu.qbo', @@ -923,10 +938,12 @@ final class MimeType 'st' => 'application/vnd.sailingtracker.track', 'stc' => 'application/vnd.sun.xml.calc.template', 'std' => 'application/vnd.sun.xml.draw.template', + 'step' => 'application/STEP', 'stf' => 'application/vnd.wt.stf', 'sti' => 'application/vnd.sun.xml.impress.template', 'stk' => 'application/hyperstudio', 'stl' => 'model/stl', + 'stp' => 'application/STEP', 'stpx' => 'model/step+xml', 'stpxz' => 'model/step-xml+zip', 'stpz' => 'model/step+zip', @@ -1013,10 +1030,12 @@ final class MimeType 'ulx' => 'application/x-glulx', 'umj' => 'application/vnd.umajin', 'unityweb' => 'application/vnd.unity', + 'uo' => 'application/vnd.uoml+xml', 'uoml' => 'application/vnd.uoml+xml', 'uri' => 'text/uri-list', 'uris' => 'text/uri-list', 'urls' => 'text/uri-list', + 'usda' => 'model/vnd.usda', 'usdz' => 'model/vnd.usdz+zip', 'ustar' => 'application/x-ustar', 'utz' => 'application/vnd.uiq.theme', @@ -1096,6 +1115,7 @@ final class MimeType 'webmanifest' => 'application/manifest+json', 'webp' => 'image/webp', 'wg' => 'application/vnd.pmi.widget', + 'wgsl' => 'text/wgsl', 'wgt' => 'application/widget', 'wif' => 'application/watcherinfo+xml', 'wks' => 'application/vnd.ms-works', @@ -1150,9 +1170,10 @@ final class MimeType 'xel' => 'application/xcap-el+xml', 'xenc' => 'application/xenc+xml', 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', + 'xfdf' => 'application/xfdf', 'xfdl' => 'application/vnd.xfdl', 'xht' => 'application/xhtml+xml', + 'xhtm' => 'application/vnd.pwg-xhtml-print+xml', 'xhtml' => 'application/xhtml+xml', 'xhvml' => 'application/xv+xml', 'xif' => 'image/vnd.xiff', @@ -1183,6 +1204,7 @@ final class MimeType 'xpw' => 'application/vnd.intercon.formnet', 'xpx' => 'application/vnd.intercon.formnet', 'xsd' => 'application/xml', + 'xsf' => 'application/prs.xsf+xml', 'xsl' => 'application/xml', 'xslt' => 'application/xslt+xml', 'xsm' => 'application/vnd.syncml+xml', @@ -1218,7 +1240,7 @@ final class MimeType /** * Determines the mimetype of a file by looking at its extension. * - * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json + * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json */ public static function fromFilename(string $filename): ?string { @@ -1228,7 +1250,7 @@ public static function fromFilename(string $filename): ?string /** * Maps a file extensions to a mimetype. * - * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json + * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json */ public static function fromExtension(string $extension): ?string { diff --git a/vendor/guzzlehttp/psr7/src/MultipartStream.php b/vendor/guzzlehttp/psr7/src/MultipartStream.php index 3e12b74d..41c48eef 100644 --- a/vendor/guzzlehttp/psr7/src/MultipartStream.php +++ b/vendor/guzzlehttp/psr7/src/MultipartStream.php @@ -60,7 +60,7 @@ private function getHeaders(array $headers): string $str .= "{$key}: {$value}\r\n"; } - return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n"; + return "--{$this->boundary}\r\n".trim($str)."\r\n\r\n"; } /** @@ -72,7 +72,7 @@ protected function createStream(array $elements = []): StreamInterface foreach ($elements as $element) { if (!is_array($element)) { - throw new \UnexpectedValueException("An array is expected"); + throw new \UnexpectedValueException('An array is expected'); } $this->addElement($stream, $element); } @@ -137,9 +137,7 @@ private function createElement(string $name, StreamInterface $stream, ?string $f // Set a default Content-Type if one was not supplied $type = $this->getHeader($headers, 'content-type'); if (!$type && ($filename === '0' || $filename)) { - if ($type = MimeType::fromFilename($filename)) { - $headers['Content-Type'] = $type; - } + $headers['Content-Type'] = MimeType::fromFilename($filename) ?? 'application/octet-stream'; } return [$stream, $headers]; diff --git a/vendor/guzzlehttp/psr7/src/PumpStream.php b/vendor/guzzlehttp/psr7/src/PumpStream.php index e90389c3..5585190c 100644 --- a/vendor/guzzlehttp/psr7/src/PumpStream.php +++ b/vendor/guzzlehttp/psr7/src/PumpStream.php @@ -34,7 +34,7 @@ final class PumpStream implements StreamInterface private $buffer; /** - * @param callable(int): (string|null|false) $source Source of the stream data. The callable MAY + * @param callable(int): (string|false|null) $source Source of the stream data. The callable MAY * accept an integer argument used to control the * amount of data to return. The callable MUST * return a string when called, or false|null on error @@ -60,6 +60,7 @@ public function __toString(): string throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -149,8 +150,6 @@ public function getContents(): string } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) @@ -169,6 +168,7 @@ private function pump(int $length): void $data = call_user_func($this->source, $length); if ($data === false || $data === null) { $this->source = null; + return; } $this->buffer->write($data); diff --git a/vendor/guzzlehttp/psr7/src/Query.php b/vendor/guzzlehttp/psr7/src/Query.php index 2faab3a8..8b949279 100644 --- a/vendor/guzzlehttp/psr7/src/Query.php +++ b/vendor/guzzlehttp/psr7/src/Query.php @@ -93,7 +93,7 @@ public static function build(array $params, $encoding = PHP_QUERY_RFC3986): stri $qs .= $k; $v = is_bool($v) ? (int) $v : $v; if ($v !== null) { - $qs .= '=' . $encoder((string) $v); + $qs .= '='.$encoder((string) $v); } $qs .= '&'; } else { @@ -101,7 +101,7 @@ public static function build(array $params, $encoding = PHP_QUERY_RFC3986): stri $qs .= $k; $vv = is_bool($vv) ? (int) $vv : $vv; if ($vv !== null) { - $qs .= '=' . $encoder((string) $vv); + $qs .= '='.$encoder((string) $vv); } $qs .= '&'; } diff --git a/vendor/guzzlehttp/psr7/src/Request.php b/vendor/guzzlehttp/psr7/src/Request.php index b17af66a..db29d95d 100644 --- a/vendor/guzzlehttp/psr7/src/Request.php +++ b/vendor/guzzlehttp/psr7/src/Request.php @@ -69,7 +69,7 @@ public function getRequestTarget(): string $target = '/'; } if ($this->uri->getQuery() != '') { - $target .= '?' . $this->uri->getQuery(); + $target .= '?'.$this->uri->getQuery(); } return $target; @@ -85,6 +85,7 @@ public function withRequestTarget($requestTarget): RequestInterface $new = clone $this; $new->requestTarget = $requestTarget; + return $new; } @@ -98,6 +99,7 @@ public function withMethod($method): RequestInterface $this->assertMethod($method); $new = clone $this; $new->method = strtoupper($method); + return $new; } @@ -131,7 +133,7 @@ private function updateHostFromUri(): void } if (($port = $this->uri->getPort()) !== null) { - $host .= ':' . $port; + $host .= ':'.$port; } if (isset($this->headerNames['host'])) { diff --git a/vendor/guzzlehttp/psr7/src/Response.php b/vendor/guzzlehttp/psr7/src/Response.php index 4c6ee6f0..8fc11478 100644 --- a/vendor/guzzlehttp/psr7/src/Response.php +++ b/vendor/guzzlehttp/psr7/src/Response.php @@ -138,6 +138,7 @@ public function withStatus($code, $reasonPhrase = ''): ResponseInterface $reasonPhrase = self::PHRASES[$new->statusCode]; } $new->reasonPhrase = (string) $reasonPhrase; + return $new; } diff --git a/vendor/guzzlehttp/psr7/src/Rfc7230.php b/vendor/guzzlehttp/psr7/src/Rfc7230.php index 30224018..8219dba4 100644 --- a/vendor/guzzlehttp/psr7/src/Rfc7230.php +++ b/vendor/guzzlehttp/psr7/src/Rfc7230.php @@ -14,7 +14,7 @@ final class Rfc7230 * * Note: header delimiter (\r\n) is modified to \r?\n to accept line feed only delimiters for BC reasons. * - * @link https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15 + * @see https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15 * * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE */ diff --git a/vendor/guzzlehttp/psr7/src/ServerRequest.php b/vendor/guzzlehttp/psr7/src/ServerRequest.php index 43cbb502..c852d96f 100644 --- a/vendor/guzzlehttp/psr7/src/ServerRequest.php +++ b/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -144,10 +144,10 @@ private static function normalizeNestedFileSpec(array $files = []): array foreach (array_keys($files['tmp_name']) as $key) { $spec = [ 'tmp_name' => $files['tmp_name'][$key], - 'size' => $files['size'][$key], - 'error' => $files['error'][$key], - 'name' => $files['name'][$key], - 'type' => $files['type'][$key], + 'size' => $files['size'][$key] ?? null, + 'error' => $files['error'][$key] ?? null, + 'name' => $files['name'][$key] ?? null, + 'type' => $files['type'][$key] ?? null, ]; $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); } @@ -182,7 +182,7 @@ public static function fromGlobals(): ServerRequestInterface private static function extractHostAndPortFromAuthority(string $authority): array { - $uri = 'http://' . $authority; + $uri = 'http://'.$authority; $parts = parse_url($uri); if (false === $parts) { return [null, null]; @@ -286,8 +286,6 @@ public function withQueryParams(array $query): ServerRequestInterface } /** - * {@inheritdoc} - * * @return array|object|null */ public function getParsedBody() @@ -309,8 +307,6 @@ public function getAttributes(): array } /** - * {@inheritdoc} - * * @return mixed */ public function getAttribute($attribute, $default = null) diff --git a/vendor/guzzlehttp/psr7/src/Stream.php b/vendor/guzzlehttp/psr7/src/Stream.php index ecd31861..f730ddac 100644 --- a/vendor/guzzlehttp/psr7/src/Stream.php +++ b/vendor/guzzlehttp/psr7/src/Stream.php @@ -61,8 +61,8 @@ public function __construct($stream, array $options = []) $this->stream = $stream; $meta = stream_get_meta_data($this->stream); $this->seekable = $meta['seekable']; - $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']); - $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']); + $this->readable = (bool) preg_match(self::READABLE_MODES, $meta['mode']); + $this->writable = (bool) preg_match(self::WRITABLE_MODES, $meta['mode']); $this->uri = $this->getMetadata('uri'); } @@ -80,12 +80,14 @@ public function __toString(): string if ($this->isSeekable()) { $this->seek(0); } + return $this->getContents(); } catch (\Throwable $e) { if (\PHP_VERSION_ID >= 70400) { throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -145,6 +147,7 @@ public function getSize(): ?int $stats = fstat($this->stream); if (is_array($stats) && isset($stats['size'])) { $this->size = $stats['size']; + return $this->size; } @@ -207,7 +210,7 @@ public function seek($offset, $whence = SEEK_SET): void } if (fseek($this->stream, $offset, $whence) === -1) { throw new \RuntimeException('Unable to seek to stream position ' - . $offset . ' with whence ' . var_export($whence, true)); + .$offset.' with whence '.var_export($whence, true)); } } @@ -261,8 +264,6 @@ public function write($string): int } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php index 56d4104d..96196a3e 100644 --- a/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php +++ b/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -31,6 +31,7 @@ public function __get(string $name) { if ($name === 'stream') { $this->stream = $this->createStream(); + return $this->stream; } @@ -43,12 +44,14 @@ public function __toString(): string if ($this->isSeekable()) { $this->seek(0); } + return $this->getContents(); } catch (\Throwable $e) { if (\PHP_VERSION_ID >= 70400) { throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -79,8 +82,6 @@ public function close(): void } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/vendor/guzzlehttp/psr7/src/StreamWrapper.php index 2a934640..b3655cb3 100644 --- a/vendor/guzzlehttp/psr7/src/StreamWrapper.php +++ b/vendor/guzzlehttp/psr7/src/StreamWrapper.php @@ -41,7 +41,7 @@ public static function getResource(StreamInterface $stream) $mode = 'w'; } else { throw new \InvalidArgumentException('The stream must be readable, ' - . 'writable, or both.'); + .'writable, or both.'); } return fopen('guzzle://stream', $mode, false, self::createStreamContext($stream)); @@ -55,7 +55,7 @@ public static function getResource(StreamInterface $stream) public static function createStreamContext(StreamInterface $stream) { return stream_context_create([ - 'guzzle' => ['stream' => $stream] + 'guzzle' => ['stream' => $stream], ]); } @@ -115,7 +115,7 @@ public function stream_seek(int $offset, int $whence): bool */ public function stream_cast(int $cast_as) { - $stream = clone($this->stream); + $stream = clone $this->stream; $resource = $stream->detach(); return $resource ?? false; @@ -127,27 +127,27 @@ public function stream_cast(int $cast_as) public function stream_stat(): array { static $modeMap = [ - 'r' => 33060, + 'r' => 33060, 'rb' => 33060, 'r+' => 33206, - 'w' => 33188, - 'wb' => 33188 + 'w' => 33188, + 'wb' => 33188, ]; return [ - 'dev' => 0, - 'ino' => 0, - 'mode' => $modeMap[$this->mode], - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => $this->stream->getSize() ?: 0, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, + 'dev' => 0, + 'ino' => 0, + 'mode' => $modeMap[$this->mode], + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => $this->stream->getSize() ?: 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, 'blksize' => 0, - 'blocks' => 0 + 'blocks' => 0, ]; } @@ -157,19 +157,19 @@ public function stream_stat(): array public function url_stat(string $path, int $flags): array { return [ - 'dev' => 0, - 'ino' => 0, - 'mode' => 0, - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => 0, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, + 'dev' => 0, + 'ino' => 0, + 'mode' => 0, + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, 'blksize' => 0, - 'blocks' => 0 + 'blocks' => 0, ]; } } diff --git a/vendor/guzzlehttp/psr7/src/Uri.php b/vendor/guzzlehttp/psr7/src/Uri.php index 09e878d3..fbba7f12 100644 --- a/vendor/guzzlehttp/psr7/src/Uri.php +++ b/vendor/guzzlehttp/psr7/src/Uri.php @@ -25,7 +25,7 @@ class Uri implements UriInterface, \JsonSerializable private const HTTP_DEFAULT_HOST = 'localhost'; private const DEFAULT_PORTS = [ - 'http' => 80, + 'http' => 80, 'https' => 443, 'ftp' => 21, 'gopher' => 70, @@ -41,14 +41,14 @@ class Uri implements UriInterface, \JsonSerializable /** * Unreserved characters for use in a regex. * - * @link https://tools.ietf.org/html/rfc3986#section-2.3 + * @see https://tools.ietf.org/html/rfc3986#section-2.3 */ private const CHAR_UNRESERVED = 'a-zA-Z0-9_\-\.~'; /** * Sub-delims for use in a regex. * - * @link https://tools.ietf.org/html/rfc3986#section-2.2 + * @see https://tools.ietf.org/html/rfc3986#section-2.2 */ private const CHAR_SUB_DELIMS = '!\$&\'\(\)\*\+,;='; private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26']; @@ -87,6 +87,7 @@ public function __construct(string $uri = '') $this->applyParts($parts); } } + /** * UTF-8 aware \parse_url() replacement. * @@ -121,7 +122,7 @@ static function ($matches) { $url ); - $result = parse_url($prefix . $encodedUrl); + $result = parse_url($prefix.$encodedUrl); if ($result === false) { return false; @@ -161,7 +162,7 @@ public function __toString(): string * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to * that format). * - * @link https://tools.ietf.org/html/rfc3986#section-5.3 + * @see https://tools.ietf.org/html/rfc3986#section-5.3 */ public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string { @@ -169,25 +170,25 @@ public static function composeComponents(?string $scheme, ?string $authority, st // weak type checks to also accept null until we can add scalar type hints if ($scheme != '') { - $uri .= $scheme . ':'; + $uri .= $scheme.':'; } if ($authority != '' || $scheme === 'file') { - $uri .= '//' . $authority; + $uri .= '//'.$authority; } if ($authority != '' && $path != '' && $path[0] != '/') { - $path = '/' . $path; + $path = '/'.$path; } $uri .= $path; if ($query != '') { - $uri .= '?' . $query; + $uri .= '?'.$query; } if ($fragment != '') { - $uri .= '#' . $fragment; + $uri .= '#'.$fragment; } return $uri; @@ -218,7 +219,7 @@ public static function isDefaultPort(UriInterface $uri): bool * @see Uri::isNetworkPathReference * @see Uri::isAbsolutePathReference * @see Uri::isRelativePathReference - * @link https://tools.ietf.org/html/rfc3986#section-4 + * @see https://tools.ietf.org/html/rfc3986#section-4 */ public static function isAbsolute(UriInterface $uri): bool { @@ -230,7 +231,7 @@ public static function isAbsolute(UriInterface $uri): bool * * A relative reference that begins with two slash characters is termed an network-path reference. * - * @link https://tools.ietf.org/html/rfc3986#section-4.2 + * @see https://tools.ietf.org/html/rfc3986#section-4.2 */ public static function isNetworkPathReference(UriInterface $uri): bool { @@ -242,7 +243,7 @@ public static function isNetworkPathReference(UriInterface $uri): bool * * A relative reference that begins with a single slash character is termed an absolute-path reference. * - * @link https://tools.ietf.org/html/rfc3986#section-4.2 + * @see https://tools.ietf.org/html/rfc3986#section-4.2 */ public static function isAbsolutePathReference(UriInterface $uri): bool { @@ -257,7 +258,7 @@ public static function isAbsolutePathReference(UriInterface $uri): bool * * A relative reference that does not begin with a slash character is termed a relative-path reference. * - * @link https://tools.ietf.org/html/rfc3986#section-4.2 + * @see https://tools.ietf.org/html/rfc3986#section-4.2 */ public static function isRelativePathReference(UriInterface $uri): bool { @@ -276,7 +277,7 @@ public static function isRelativePathReference(UriInterface $uri): bool * @param UriInterface $uri The URI to check * @param UriInterface|null $base An optional base URI to compare against * - * @link https://tools.ietf.org/html/rfc3986#section-4.4 + * @see https://tools.ietf.org/html/rfc3986#section-4.4 */ public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool { @@ -352,7 +353,7 @@ public static function withQueryValues(UriInterface $uri, array $keyValueArray): /** * Creates a URI from a hash of `parse_url` components. * - * @link http://php.net/manual/en/function.parse-url.php + * @see http://php.net/manual/en/function.parse-url.php * * @throws MalformedUriException If the components do not form a valid URI. */ @@ -374,11 +375,11 @@ public function getAuthority(): string { $authority = $this->host; if ($this->userInfo !== '') { - $authority = $this->userInfo . '@' . $authority; + $authority = $this->userInfo.'@'.$authority; } if ($this->port !== null) { - $authority .= ':' . $this->port; + $authority .= ':'.$this->port; } return $authority; @@ -435,7 +436,7 @@ public function withUserInfo($user, $password = null): UriInterface { $info = $this->filterUserInfoComponent($user); if ($password !== null) { - $info .= ':' . $this->filterUserInfoComponent($password); + $info .= ':'.$this->filterUserInfoComponent($password); } if ($this->userInfo === $info) { @@ -563,7 +564,7 @@ private function applyParts(array $parts): void ? $this->filterQueryAndFragment($parts['fragment']) : ''; if (isset($parts['pass'])) { - $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']); + $this->userInfo .= ':'.$this->filterUserInfoComponent($parts['pass']); } $this->removeDefaultPort(); @@ -595,7 +596,7 @@ private function filterUserInfoComponent($component): string } return preg_replace_callback( - '/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^%'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.']+|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $component ); @@ -627,7 +628,7 @@ private function filterPort($port): ?int } $port = (int) $port; - if (0 > $port || 0xffff < $port) { + if (0 > $port || 0xFFFF < $port) { throw new \InvalidArgumentException( sprintf('Invalid port: %d. Must be between 0 and 65535', $port) ); @@ -664,7 +665,7 @@ private static function generateQueryString(string $key, ?string $value): string $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT); if ($value !== null) { - $queryString .= '=' . strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); + $queryString .= '='.strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); } return $queryString; @@ -691,7 +692,7 @@ private function filterPath($path): string } return preg_replace_callback( - '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $path ); @@ -711,7 +712,7 @@ private function filterQueryAndFragment($str): string } return preg_replace_callback( - '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $str ); diff --git a/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/vendor/guzzlehttp/psr7/src/UriNormalizer.php index e12971ed..cd4c383a 100644 --- a/vendor/guzzlehttp/psr7/src/UriNormalizer.php +++ b/vendor/guzzlehttp/psr7/src/UriNormalizer.php @@ -11,7 +11,7 @@ * * @author Tobias Schultze * - * @link https://tools.ietf.org/html/rfc3986#section-6 + * @see https://tools.ietf.org/html/rfc3986#section-6 */ final class UriNormalizer { @@ -119,7 +119,7 @@ final class UriNormalizer * @param UriInterface $uri The URI to normalize * @param int $flags A bitmask of normalizations to apply, see constants * - * @link https://tools.ietf.org/html/rfc3986#section-6.2 + * @see https://tools.ietf.org/html/rfc3986#section-6.2 */ public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface { @@ -131,8 +131,8 @@ public static function normalize(UriInterface $uri, int $flags = self::PRESERVIN $uri = self::decodeUnreservedCharacters($uri); } - if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' && - ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') + if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' + && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') ) { $uri = $uri->withPath('/'); } @@ -174,7 +174,7 @@ public static function normalize(UriInterface $uri, int $flags = self::PRESERVIN * @param UriInterface $uri2 An URI to compare * @param int $normalizations A bitmask of normalizations to apply, see constants * - * @link https://tools.ietf.org/html/rfc3986#section-6.1 + * @see https://tools.ietf.org/html/rfc3986#section-6.1 */ public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool { diff --git a/vendor/guzzlehttp/psr7/src/UriResolver.php b/vendor/guzzlehttp/psr7/src/UriResolver.php index 426e5c9a..38d5793c 100644 --- a/vendor/guzzlehttp/psr7/src/UriResolver.php +++ b/vendor/guzzlehttp/psr7/src/UriResolver.php @@ -11,14 +11,14 @@ * * @author Tobias Schultze * - * @link https://tools.ietf.org/html/rfc3986#section-5 + * @see https://tools.ietf.org/html/rfc3986#section-5 */ final class UriResolver { /** * Removes dot segments from a path and returns the new path. * - * @link http://tools.ietf.org/html/rfc3986#section-5.2.4 + * @see http://tools.ietf.org/html/rfc3986#section-5.2.4 */ public static function removeDotSegments(string $path): string { @@ -40,7 +40,7 @@ public static function removeDotSegments(string $path): string if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) { // Re-add the leading slash if necessary for cases like "/.." - $newPath = '/' . $newPath; + $newPath = '/'.$newPath; } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) { // Add the trailing slash if necessary // If newPath is not empty, then $segment must be set and is the last segment from the foreach @@ -53,7 +53,7 @@ public static function removeDotSegments(string $path): string /** * Converts the relative URI into a new URI that is resolved against the base URI. * - * @link http://tools.ietf.org/html/rfc3986#section-5.2 + * @see http://tools.ietf.org/html/rfc3986#section-5.2 */ public static function resolve(UriInterface $base, UriInterface $rel): UriInterface { @@ -80,13 +80,13 @@ public static function resolve(UriInterface $base, UriInterface $rel): UriInterf $targetPath = $rel->getPath(); } else { if ($targetAuthority != '' && $base->getPath() === '') { - $targetPath = '/' . $rel->getPath(); + $targetPath = '/'.$rel->getPath(); } else { $lastSlashPos = strrpos($base->getPath(), '/'); if ($lastSlashPos === false) { $targetPath = $rel->getPath(); } else { - $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath(); + $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1).$rel->getPath(); } } } @@ -127,8 +127,8 @@ public static function resolve(UriInterface $base, UriInterface $rel): UriInterf */ public static function relativize(UriInterface $base, UriInterface $target): UriInterface { - if ($target->getScheme() !== '' && - ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') + if ($target->getScheme() !== '' + && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') ) { return $target; } @@ -185,7 +185,7 @@ private static function getRelativePath(UriInterface $base, UriInterface $target } } $targetSegments[] = $targetLastSegment; - $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments); + $relativePath = str_repeat('../', count($sourceSegments)).implode('/', $targetSegments); // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./". // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used diff --git a/vendor/guzzlehttp/psr7/src/Utils.php b/vendor/guzzlehttp/psr7/src/Utils.php index 3a4cf394..917c05e3 100644 --- a/vendor/guzzlehttp/psr7/src/Utils.php +++ b/vendor/guzzlehttp/psr7/src/Utils.php @@ -90,6 +90,7 @@ public static function copyToString(StreamInterface $stream, int $maxLen = -1): } $buffer .= $buf; } + return $buffer; } @@ -174,7 +175,7 @@ public static function modifyRequest(RequestInterface $request, array $changes): $standardPorts = ['http' => 80, 'https' => 443]; $scheme = $changes['uri']->getScheme(); if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { - $changes['set_headers']['Host'] .= ':' . $port; + $changes['set_headers']['Host'] .= ':'.$port; } } } @@ -230,7 +231,7 @@ public static function modifyRequest(RequestInterface $request, array $changes): * @param StreamInterface $stream Stream to read from * @param int|null $maxLength Maximum buffer length */ - public static function readLine(StreamInterface $stream, ?int $maxLength = null): string + public static function readLine(StreamInterface $stream, int $maxLength = null): string { $buffer = ''; $size = 0; @@ -291,6 +292,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt fwrite($stream, (string) $resource); fseek($stream, 0); } + return new Stream($stream, $options); } @@ -308,6 +310,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt fseek($stream, 0); $resource = $stream; } + return new Stream($resource, $options); case 'object': /** @var object $resource */ @@ -320,6 +323,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt } $result = $resource->current(); $resource->next(); + return $result; }, $options); } elseif (method_exists($resource, '__toString')) { @@ -334,7 +338,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt return new PumpStream($resource, $options); } - throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); + throw new \InvalidArgumentException('Invalid resource type: '.gettype($resource)); } /** diff --git a/vendor/haozi-team/chatgpt-php/CHANGELOG.md b/vendor/haozi-team/chatgpt-php/CHANGELOG.md index 4b329af3..7dd55472 100644 --- a/vendor/haozi-team/chatgpt-php/CHANGELOG.md +++ b/vendor/haozi-team/chatgpt-php/CHANGELOG.md @@ -2,6 +2,27 @@ All notable changes to `chatgpt-php` will be documented in this file. +## 2.1.1 - 2023-07-17 + +1. fix name undefined. + +## 2.1.0 - 2023-07-06 + +1. **Deprecated: `paid` parameter in `addAccount` method.** +2. Add arkose_token and fix GPT-4. +3. `addAccount` method add arkose_token parameter. +4. `ask` method adds more return values to support continue writing. +5. Add some new method. + +## 2.0.4 - 2023-04-25 + +1. Update V1 API + +## 2.0.3 - 2023-03-31 + +1. Sync V1 V2 return. +2. Update tests. + ## 2.0.2 - 2023-03-31 1. Bug Fix diff --git a/vendor/haozi-team/chatgpt-php/README.md b/vendor/haozi-team/chatgpt-php/README.md index 4efba91b..153fa76a 100644 --- a/vendor/haozi-team/chatgpt-php/README.md +++ b/vendor/haozi-team/chatgpt-php/README.md @@ -13,20 +13,19 @@ Reconstruct from @acheong08's [ChatGPT](https://github.com/acheong08/ChatGPT) `composer require haozi-team/chatgpt-php` # V1 Web ChatGPT -## Notice: As of 2023/03/15 - OpenAI has deactivated some accounts using V1. We recommend using V2 to avoid getting banned. > Uses `chat.openai.com` > - Free > - Rate limited > - Needs Bypassing Cloudflare -> Default api endpoint is `https://bypass.churchless.tech/` -> -> Rate limit at 5 requests / 10 seconds due to small server +> Default api endpoint is `https://ai.fakeopen.com/api/` by @pengzhile > > OpenAI rate limit: 50 requests per hour on free accounts. You can get around it with multi-account cycling -> +> > Plus accounts has around 150 requests per hour rate limit +> +> GPT-4: If you use GPT-4, you must provide arkose_token, usually the SDK can get it automatically through @pengzhile's API. ## Configuration diff --git a/vendor/haozi-team/chatgpt-php/src/V1.php b/vendor/haozi-team/chatgpt-php/src/V1.php index 2f2eaac7..1cfdb21d 100644 --- a/vendor/haozi-team/chatgpt-php/src/V1.php +++ b/vendor/haozi-team/chatgpt-php/src/V1.php @@ -12,7 +12,7 @@ class V1 { - private $baseUrl = 'https://bypass.churchless.tech/api/'; + private $baseUrl = 'https://ai.fakeopen.com/api/'; private $accounts = []; @@ -34,34 +34,50 @@ public function __construct(string $baseUrl = null, int $timeout = 360) /** * 设置账号 * - * @param string $accessToken - * @param mixed $name - * @param bool $paid - * @param string|null $model - * + * @param string $accessToken + * @param mixed $name + * @param string $model + * @param bool $historyAndTrainingDisabled + * @param string|null $arkoseToken * @return void */ - public function addAccount(string $accessToken, $name = null, bool $paid = false, string $model = null): void + public function addAccount(string $accessToken, $name = null, string $model = 'text-davinci-002-render-sha', bool $historyAndTrainingDisabled = false, string $arkoseToken = null): void { if ($name === null) { $this->accounts[] = [ 'access_token' => $accessToken, - 'paid' => $paid, 'model' => $model, + 'history_and_training_disabled' => $historyAndTrainingDisabled, + 'arkose_token' => $arkoseToken, ]; + if (substr($this->accounts[count($this->accounts) - 1]['model'], 0, 5) === 'gpt-4' && $arkoseToken === null) { + try { + $this->accounts[count($this->accounts) - 1]['arkose_token'] = $this->getArkoseToken(); + } catch (Exception $e) { + $this->accounts[count($this->accounts) - 1]['arkose_token'] = ''; + } + } } else { $this->accounts[$name] = [ 'access_token' => $accessToken, - 'paid' => $paid, 'model' => $model, + 'history_and_training_disabled' => $historyAndTrainingDisabled, + 'arkose_token' => $arkoseToken, ]; + if (substr($this->accounts[$name]['model'], 0, 5) === 'gpt-4' && $arkoseToken === null) { + try { + $this->accounts[$name]['arkose_token'] = $this->getArkoseToken(); + } catch (Exception $e) { + $this->accounts[$name]['arkose_token'] = ''; + } + } } } /** * 获取账号 * - * @param string $name + * @param string $name * * @return array */ @@ -82,11 +98,11 @@ public function getAccounts(): array /** * 发送消息 * - * @param string $prompt - * @param string|null $conversationId - * @param string|null $parentId - * @param mixed $account - * @param bool $stream + * @param string $prompt + * @param string|null $conversationId + * @param string|null $parentId + * @param mixed $account + * @param bool $stream * * @return Generator * @throws Exception|GuzzleException @@ -96,7 +112,7 @@ public function ask( string $conversationId = null, string $parentId = null, $account = null, - bool $stream = false + bool $stream = false ): Generator { // 如果账号为空,则随机选择一个账号 if ($account === null) { @@ -105,7 +121,7 @@ public function ask( try { $token = $this->accessTokenToJWT($this->accounts[$account]['access_token']); } catch (Exception $e) { - throw new Exception("Account ".$account." is invalid"); + throw new Exception("Account " . $account . " is invalid"); } } else { $token = isset($this->accounts[$account]['access_token']) ? $this->accessTokenToJWT($this->accounts[$account]['access_token']) : null; @@ -123,13 +139,13 @@ public function ask( // 如果会话ID与父消息ID都为空,则开启新的会话 if ($conversationId === null && $parentId === null) { - $parentId = (string) Uuid::uuid4(); + $parentId = (string)Uuid::uuid4(); } // 如果会话ID不为空,但是父消息ID为空,则尝试从ChatGPT获取历史记录 if ($conversationId !== null && $parentId === null) { try { - $response = $this->http->get('conversation/'.$conversationId, [ + $response = $this->http->get('conversation/' . $conversationId, [ 'headers' => [ 'Authorization' => $token, 'Content-Type' => 'application/json', @@ -138,7 +154,7 @@ public function ask( ], ]); } catch (GuzzleException $e) { - throw new Exception("Request failed: ".$e->getMessage()); + throw new Exception("Request failed: " . $e->getMessage()); } $response = json_decode($response->getBody()->getContents(), true); @@ -148,7 +164,7 @@ public function ask( } else { // 如果没有获取到父消息ID,则开启新的会话 $conversationId = null; - $parentId = (string) Uuid::uuid4(); + $parentId = (string)Uuid::uuid4(); } } @@ -156,7 +172,7 @@ public function ask( 'action' => 'next', 'messages' => [ [ - 'id' => (string) Uuid::uuid4(), + 'id' => (string)Uuid::uuid4(), 'role' => 'user', 'author' => ['role' => 'user'], 'content' => ['content_type' => 'text', 'parts' => [$prompt]], @@ -164,7 +180,171 @@ public function ask( ], 'conversation_id' => $conversationId, 'parent_message_id' => $parentId, - 'model' => empty($this->accounts[$account]['model']) ? $this->accounts[$account]['paid'] ? 'text-davinci-002-render-paid' : 'text-davinci-002-render-sha' : $this->accounts[$account]['model'], + 'model' => $this->accounts[$account]['model'], + 'arkose_token' => $this->accounts[$account]['arkose_token'], + 'history_and_training_disabled' => $this->accounts[$account]['history_and_training_disabled'], + ]; + + try { + $response = $this->http->post( + 'conversation', + [ + 'json' => $data, + 'headers' => [ + 'Authorization' => $token, + 'Accept' => 'text/event-stream', + 'Content-Type' => 'application/json', + 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', + 'X-Openai-Assistant-App-Id' => '', + 'Connection' => 'close', + 'Accept-Language' => 'en-US,en;q=0.9', + 'Referer' => 'https://chat.openai.com/chat', + ], + 'stream' => true, + ] + ); + } catch (RequestException $e) { + if ($e->hasResponse()) { + throw new Exception(Psr7\Message::toString($e->getResponse())); + } else { + throw new Exception($e->getMessage()); + } + } + + $answer = ''; + $conversationId = ''; + $messageId = ''; + $model = ''; + + // 流模式下,返回一个生成器 + if ($stream) { + $data = $response->getBody(); + while (! $data->eof()) { + $raw = Psr7\Utils::readLine($data); + $line = self::formatStreamMessage($raw); + if (self::checkFields($line)) { + $answer = $line['message']['content']['parts'][0]; + $conversationId = $line['conversation_id'] ?? null; + $messageId = $line['message']['id'] ?? null; + $model = $line["message"]["metadata"]["model_slug"] ?? null; + $finish_details = $line["message"]["metadata"]["finish_details"]['type'] ?? null; + $end_turn = $line["message"]["end_turn"] ?? true; + $recipient = $line["message"]["recipient"] ?? "all"; + $citations = $line["message"]["metadata"]["citations"] ?? []; + + yield [ + "answer" => $answer, + "id" => $messageId, + 'conversation_id' => $conversationId, + "model" => $model, + "account" => $account, + 'finish_details' => $finish_details, + 'end_turn' => $end_turn, + 'recipient' => $recipient, + 'citations' => $citations, + ]; + } + unset($raw, $line); + } + } else { + foreach (explode("\n", $response->getBody()) as $line) { + $line = trim($line); + if ($line === 'Internal Server Error') { + throw new Exception($line); + } + if ($line === '') { + continue; + } + + $line = $this->formatStreamMessage($line); + + if (! $this->checkFields($line)) { + if (isset($line["detail"]) && $line["detail"] === "Too many requests in 1 hour. Try again later.") { + throw new Exception("Rate limit exceeded"); + } + if (isset($line["detail"]) && $line["detail"] === "Conversation not found") { + throw new Exception("Conversation not found"); + } + if (isset($line["detail"]) && $line["detail"] === "Something went wrong, please try reloading the conversation.") { + throw new Exception("Something went wrong, please try reloading the conversation."); + } + if (isset($line["detail"]) && $line["detail"] === "invalid_api_key") { + throw new Exception("Invalid access token"); + } + if (isset($line["detail"]) && $line["detail"] === "invalid_token") { + throw new Exception("Invalid access token"); + } + + continue; + } + + if ($line['message']['content']['parts'][0] === $prompt) { + continue; + } + + $answer = $line['message']['content']['parts'][0]; + $conversationId = $line['conversation_id'] ?? null; + $messageId = $line['message']['id'] ?? null; + $model = $line["message"]["metadata"]["model_slug"] ?? null; + $finish_details = $line["message"]["metadata"]["finish_details"]['type'] ?? null; + $end_turn = $line["message"]["end_turn"] ?? true; + $recipient = $line["message"]["recipient"] ?? "all"; + $citations = $line["message"]["metadata"]["citations"] ?? []; + } + + yield [ + 'answer' => $answer, + 'id' => $messageId, + 'conversation_id' => $conversationId, + 'model' => $model, + 'account' => $account, + 'finish_details' => $finish_details, + 'end_turn' => $end_turn, + 'recipient' => $recipient, + 'citations' => $citations, + ]; + } + } + + /** + * 续写 + * + * @param string|null $conversationId + * @param string|null $parentId + * @param mixed $account + * @param bool $stream + * + * @return Generator + * @throws Exception|GuzzleException + */ + public function continueWrite( + string $prompt, + string $conversationId = null, + string $parentId = null, + $account = null, + bool $stream = false + ): Generator { + if ($account === null) { + throw new Exception("Continue write must set account"); + } else { + $token = isset($this->accounts[$account]['access_token']) ? $this->accessTokenToJWT($this->accounts[$account]['access_token']) : null; + } + + if ($token === null) { + throw new Exception("No account available"); + } + + if ($parentId == null || $conversationId === null) { + throw new Exception("Continue write must set conversationId and parentId"); + } + + $data = [ + 'action' => 'continue', + 'conversation_id' => $conversationId, + 'parent_message_id' => $parentId, + 'model' => $this->accounts[$account]['model'], + 'arkose_token' => $this->accounts[$account]['arkose_token'], + 'history_and_training_disabled' => $this->accounts[$account]['history_and_training_disabled'], ]; try { @@ -209,6 +389,10 @@ public function ask( $conversationId = $line['conversation_id'] ?? null; $messageId = $line['message']['id'] ?? null; $model = $line["message"]["metadata"]["model_slug"] ?? null; + $finish_details = $line["message"]["metadata"]["finish_details"]['type'] ?? null; + $end_turn = $line["message"]["end_turn"] ?? true; + $recipient = $line["message"]["recipient"] ?? "all"; + $citations = $line["message"]["metadata"]["citations"] ?? []; yield [ "answer" => $answer, @@ -216,6 +400,10 @@ public function ask( 'conversation_id' => $conversationId, "model" => $model, "account" => $account, + 'finish_details' => $finish_details, + 'end_turn' => $end_turn, + 'recipient' => $recipient, + 'citations' => $citations, ]; } unset($raw, $line); @@ -260,6 +448,10 @@ public function ask( $conversationId = $line['conversation_id'] ?? null; $messageId = $line['message']['id'] ?? null; $model = $line["message"]["metadata"]["model_slug"] ?? null; + $finish_details = $line["message"]["metadata"]["finish_details"]['type'] ?? null; + $end_turn = $line["message"]["end_turn"] ?? true; + $recipient = $line["message"]["recipient"] ?? "all"; + $citations = $line["message"]["metadata"]["citations"] ?? []; } yield [ @@ -268,6 +460,10 @@ public function ask( 'conversation_id' => $conversationId, 'model' => $model, 'account' => $account, + 'finish_details' => $finish_details, + 'end_turn' => $end_turn, + 'recipient' => $recipient, + 'citations' => $citations, ]; } } @@ -275,9 +471,9 @@ public function ask( /** * 获取会话列表 * - * @param int $offset - * @param int $limit - * @param mixed $account + * @param int $offset + * @param int $limit + * @param mixed $account * * @return array * @throws Exception @@ -321,8 +517,8 @@ public function getConversations(int $offset = 0, int $limit = 20, $account = 0) /** * 获取会话消息列表 * - * @param string $conversationId - * @param mixed $account + * @param string $conversationId + * @param mixed $account * * @return array * @throws Exception @@ -336,7 +532,7 @@ public function getConversationMessages(string $conversationId, $account = 0): a } try { - $response = $this->http->get('conversation/'.$conversationId, [ + $response = $this->http->get('conversation/' . $conversationId, [ 'headers' => [ 'Authorization' => $token, 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', @@ -358,9 +554,9 @@ public function getConversationMessages(string $conversationId, $account = 0): a /** * 生成会话标题 * - * @param string $conversationId - * @param string $messageId - * @param mixed $account + * @param string $conversationId + * @param string $messageId + * @param mixed $account * * @return bool * @throws Exception @@ -374,7 +570,7 @@ public function generateConversationTitle(string $conversationId, string $messag } try { - $response = $this->http->post('conversation/gen_title/'.$conversationId, [ + $response = $this->http->post('conversation/gen_title/' . $conversationId, [ 'headers' => [ 'Authorization' => $token, 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', @@ -404,9 +600,9 @@ public function generateConversationTitle(string $conversationId, string $messag /** * 修改会话标题 * - * @param string $conversationId - * @param string $title - * @param mixed $account + * @param string $conversationId + * @param string $title + * @param mixed $account * * @return bool * @throws Exception @@ -420,7 +616,7 @@ public function updateConversationTitle(string $conversationId, string $title, $ } try { - $response = $this->http->patch('conversation/'.$conversationId, [ + $response = $this->http->patch('conversation/' . $conversationId, [ 'headers' => [ 'Authorization' => $token, 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', @@ -449,8 +645,8 @@ public function updateConversationTitle(string $conversationId, string $title, $ /** * 删除会话 * - * @param string $conversationId - * @param mixed $account + * @param string $conversationId + * @param mixed $account * * @return bool * @throws Exception @@ -464,7 +660,7 @@ public function deleteConversation(string $conversationId, $account = 0): bool } try { - $response = $this->http->patch('conversation/'.$conversationId, [ + $response = $this->http->patch('conversation/' . $conversationId, [ 'headers' => [ 'Authorization' => $token, 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', @@ -493,7 +689,7 @@ public function deleteConversation(string $conversationId, $account = 0): bool /** * 清空会话 * - * @param mixed $account + * @param mixed $account * * @return bool * @throws Exception @@ -533,10 +729,167 @@ public function clearConversations($account = 0): bool return false; } + /** + * 获取插件列表 + * + * @param int $offset + * @param int $limit + * @param string $status + * @param mixed $account + * + * @return array + */ + public function getPlugins(int $offset = 0, int $limit = 250, string $status = 'approved', $account = 0): array + { + try { + $token = $this->accessTokenToJWT($this->accounts[$account]['access_token']); + } catch (Exception $e) { + throw new Exception("Invalid account"); + } + + try { + $response = $this->http->get('aip/p', [ + 'headers' => [ + 'Authorization' => $token, + 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', + 'Referer' => 'https://chat.openai.com/chat', + ], + 'query' => [ + 'offset' => $offset, + 'limit' => $limit, + 'status' => $status, + ], + ])->getBody()->getContents(); + } catch (GuzzleException $e) { + return []; + } + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return []; + } + + return $data; + } + + /** + * 安装插件 + * + * @param string $pluginId + * @param mixed $account + * + * @return bool + */ + public function installPlugin(string $pluginId, $account = 0): bool + { + try { + $token = $this->accessTokenToJWT($this->accounts[$account]['access_token']); + } catch (Exception $e) { + throw new Exception("Invalid account"); + } + + try { + $response = $this->http->patch('aip/p/' . $pluginId . '/user-settings', [ + 'headers' => [ + 'Authorization' => $token, + 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', + 'Referer' => 'https://chat.openai.com/chat', + ], + ])->getBody()->getContents(); + } catch (GuzzleException $e) { + return false; + } + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return false; + } + + return true; + } + + /** + * 获取未验证插件 + * + * @param string $domain + * @param mixed $account + * + * @return array + */ + public function getUnverifiedPlugins(string $domain = '', $account = 0): array + { + try { + $token = $this->accessTokenToJWT($this->accounts[$account]['access_token']); + } catch (Exception $e) { + throw new Exception("Invalid account"); + } + + try { + $response = $this->http->get('aip/p/domain', [ + 'headers' => [ + 'Authorization' => $token, + 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', + 'Referer' => 'https://chat.openai.com/chat', + ], + 'query' => [ + 'domain' => $domain, + ], + ])->getBody()->getContents(); + } catch (GuzzleException $e) { + return []; + } + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return []; + } + + return $data; + } + + /** + * 设置保存聊天记录与训练 + * + * @param bool $save + * @param mixed $account + * + * @return bool + */ + public function setChatHistoryAndTraining(bool $save, $account = 0): bool + { + try { + $token = $this->accessTokenToJWT($this->accounts[$account]['access_token']); + } catch (Exception $e) { + throw new Exception("Invalid account"); + } + + try { + $response = $this->http->get('models', [ + 'headers' => [ + 'Authorization' => $token, + 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63', + 'Referer' => 'https://chat.openai.com/chat', + ], + 'query' => [ + 'history_and_training_disabled' => ! $save, + ], + ])->getBody()->getContents(); + } catch (GuzzleException $e) { + return false; + } + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return false; + } + + return true; + } + /** * 检查响应行是否包含必要的字段 * - * @param mixed $line + * @param mixed $line * * @return bool */ @@ -550,7 +903,7 @@ public function checkFields($line): bool /** * 格式化流消息为数组 * - * @param string $line + * @param string $line * * @return array|false */ @@ -574,7 +927,7 @@ public function formatStreamMessage(string $line) /** * access_token 转换为 JWT * - * @param string $accessToken + * @param string $accessToken * * @return string * @throws Exception @@ -596,6 +949,36 @@ private function accessTokenToJWT(string $accessToken): string throw new Exception("Access token expired"); } - return 'Bearer '.$accessToken; + return 'Bearer ' . $accessToken; + } + + /** + * 获取arkose_token + * + * @return string + * @throws Exception + */ + public function getArkoseToken(): string + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, 'https://ai.fakeopen.com/api/arkose/token'); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $response = curl_exec($ch); + curl_close($ch); + + if ($response === false) { + throw new Exception('Request arkose token failed'); + } + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + throw new Exception('Request arkose response is not json'); + } + + if (! isset($data['token'])) { + throw new Exception('Request arkose token failed'); + } + + return $data['token']; } } diff --git a/vendor/haozi-team/chatgpt-php/tests/V1Test.php b/vendor/haozi-team/chatgpt-php/tests/V1Test.php index 293e5322..26883f4e 100644 --- a/vendor/haozi-team/chatgpt-php/tests/V1Test.php +++ b/vendor/haozi-team/chatgpt-php/tests/V1Test.php @@ -4,7 +4,7 @@ $accessToken = getenv('OPENAI_ACCESS_TOKEN'); $chatGPT = new V1(); -$chatGPT->addAccount($accessToken); +$chatGPT->addAccount($accessToken, 0, 'gpt-4'); $test = $chatGPT->ask('Hello'); foreach ($test as $answer) { $conversationId = $answer['conversation_id']; @@ -47,3 +47,13 @@ $return = $chatGPT->clearConversations(); $this->assertTrue($return); })->group('working'); + +it('should return plugins list', function () use ($chatGPT) { + $return = $chatGPT->getPlugins(); + $this->assertIsArray($return); +})->group('working'); + +it('should change history and training status', function () use ($chatGPT) { + $return = $chatGPT->setChatHistoryAndTraining(true); + $this->assertTrue($return); +})->group('working'); diff --git a/vendor/psr/http-client/README.md b/vendor/psr/http-client/README.md index 6876b840..84af5c55 100644 --- a/vendor/psr/http-client/README.md +++ b/vendor/psr/http-client/README.md @@ -7,6 +7,6 @@ Note that this is not a HTTP Client implementation of its own. It is merely abst The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. -[psr-url]: http://www.php-fig.org/psr/psr-18 +[psr-url]: https://www.php-fig.org/psr/psr-18 [package-url]: https://packagist.org/packages/psr/http-client [implementation-url]: https://packagist.org/providers/psr/http-client-implementation diff --git a/vendor/psr/http-client/composer.json b/vendor/psr/http-client/composer.json index c195f8ff..e4cab2f3 100644 --- a/vendor/psr/http-client/composer.json +++ b/vendor/psr/http-client/composer.json @@ -7,12 +7,12 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "autoload": { "psr-4": { diff --git a/vendor/psr/http-factory/.gitignore b/vendor/psr/http-factory/.gitignore deleted file mode 100644 index d8a7996a..00000000 --- a/vendor/psr/http-factory/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -composer.lock -vendor/ diff --git a/vendor/psr/http-factory/.pullapprove.yml b/vendor/psr/http-factory/.pullapprove.yml deleted file mode 100644 index 8cf08194..00000000 --- a/vendor/psr/http-factory/.pullapprove.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: default -reviewers: - - - name: contributors - required: 1 - teams: - - http-factory-contributors diff --git a/vendor/psr/http-factory/README.md b/vendor/psr/http-factory/README.md index 41d362a6..bf8913b5 100644 --- a/vendor/psr/http-factory/README.md +++ b/vendor/psr/http-factory/README.md @@ -1,10 +1,12 @@ HTTP Factories ============== -This repository holds all interfaces related to [PSR-17 (HTTP Message Factories)][psr-17]. -Please refer to the specification for a description. +This repository holds all interfaces related to [PSR-17 (HTTP Factories)][psr-url]. -You can find implementations of the specification by looking for packages providing the -[psr/http-factory-implementation](https://packagist.org/providers/psr/http-factory-implementation) virtual package. +Note that this is not a HTTP Factory implementation of its own. It is merely interfaces that describe the components of a HTTP Factory. -[psr-17]: https://www.php-fig.org/psr/psr-17/ +The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. + +[psr-url]: https://www.php-fig.org/psr/psr-17/ +[package-url]: https://packagist.org/packages/psr/http-factory +[implementation-url]: https://packagist.org/providers/psr/http-factory-implementation diff --git a/vendor/psr/http-factory/composer.json b/vendor/psr/http-factory/composer.json index af62b290..d1bbddee 100644 --- a/vendor/psr/http-factory/composer.json +++ b/vendor/psr/http-factory/composer.json @@ -15,12 +15,12 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "autoload": { "psr-4": { diff --git a/vendor/psr/http-message/composer.json b/vendor/psr/http-message/composer.json index 56e8c0a6..c66e5aba 100644 --- a/vendor/psr/http-message/composer.json +++ b/vendor/psr/http-message/composer.json @@ -7,7 +7,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "require": { @@ -20,7 +20,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } } } diff --git a/vendor/psr/http-message/src/MessageInterface.php b/vendor/psr/http-message/src/MessageInterface.php index 8cdb4ed6..a83c9851 100644 --- a/vendor/psr/http-message/src/MessageInterface.php +++ b/vendor/psr/http-message/src/MessageInterface.php @@ -1,7 +1,5 @@ = 7.4 is used) More information can be found in the [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). diff --git a/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php b/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php new file mode 100644 index 00000000..eb5952ee --- /dev/null +++ b/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID >= 70400 && extension_loaded('curl')) { + /** + * @property string $data + */ + class CURLStringFile extends CURLFile + { + private $data; + + public function __construct(string $data, string $postname, string $mime = 'application/octet-stream') + { + $this->data = $data; + parent::__construct('data://application/octet-stream;base64,'.base64_encode($data), $mime, $postname); + } + + public function __set(string $name, $value): void + { + if ('data' !== $name) { + $this->$name = $value; + + return; + } + + if (is_object($value) ? !method_exists($value, '__toString') : !is_scalar($value)) { + throw new \TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string'); + } + + $this->name = 'data://application/octet-stream;base64,'.base64_encode($value); + } + + public function __isset(string $name): bool + { + return isset($this->$name); + } + + public function &__get(string $name) + { + return $this->$name; + } + } +} diff --git a/vendor/symfony/polyfill-php81/composer.json b/vendor/symfony/polyfill-php81/composer.json index 149b5982..e02d673d 100644 --- a/vendor/symfony/polyfill-php81/composer.json +++ b/vendor/symfony/polyfill-php81/composer.json @@ -26,7 +26,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", From 424d27b9b475941980a7b9108607991d65cd05af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Fri, 1 Sep 2023 23:20:42 +0800 Subject: [PATCH 26/39] Style:Border-Radius --- functions.php | 2 +- style.css | 60 ++++++++++++++++++++++++--------------------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/functions.php b/functions.php index e836556f..8149ecac 100644 --- a/functions.php +++ b/functions.php @@ -10,7 +10,7 @@ define('IRO_VERSION', wp_get_theme()->get('Version')); -define('INT_VERSION', '18.2.0'); +define('INT_VERSION', '18.3.0'); define('BUILD_VERSION', '2'); function check_php_version($preset_version) { diff --git a/style.css b/style.css index 93d0cef5..7b8fb31a 100644 --- a/style.css +++ b/style.css @@ -294,7 +294,7 @@ textarea { font-size: 15px; line-height: 1.5; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding-left: 3px; width: 100%; font-weight: var(--global-font-weight); @@ -394,105 +394,105 @@ input[type=button] { input[type=color] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=date] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=datetime-local] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=datetime] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=email] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=month] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=number] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=password] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=range] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=search] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=tel] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=text] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=time] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=url] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } input[type=week] { color: #666; border: 1px solid var(--theme-skin, #505050); - border-radius: 15px; + border-radius: 10px; padding: 3px; } @@ -2223,7 +2223,8 @@ nav#comments-navi { -webkit-transition: all .8s; transition: all .8s; border-radius: 15px; - padding: 25px; + display: flex; + padding: 15px 25px; box-shadow: 0 1px 30px -4px var(--comment_area_shadow); margin-bottom: 8%; border: 1.5px solid #FFFFFF; @@ -2238,9 +2239,7 @@ nav#comments-navi { .comment-respond .logged-in-as { margin-bottom: 0; - padding: 0px 5px 17px - /*!covered19px 32px 17px*/ - ; + padding: 10px 0; border-radius: 3px; background: 0 0 /*!covered#FFF*/ @@ -2277,7 +2276,7 @@ nav#comments-navi { /*!covered31.3%*/ ; margin: 0; - padding: 21px 21px 20px; + padding: 15px; color: #535a63; border: 1px solid #ddd /*!covered0*/ @@ -2296,9 +2295,7 @@ nav#comments-navi { margin: 0; padding: 21px 21px 20px; color: #535a63; - border: 1px solid #ddd - /*!covered0*/ - ; + border: 1px solid #ddd; background: #FFF; display: block; float: none; @@ -2310,7 +2307,6 @@ nav#comments-navi { background-position: right; resize: vertical; font-weight: var(--global-font-weight); - } .input-label { @@ -2359,7 +2355,7 @@ nav#comments-navi { transition: all .1s ease-out; box-shadow: none; border: 1px solid #ccc; - border-radius: 15px; + border-radius: 10px; text-shadow: none; } @@ -4180,8 +4176,8 @@ input[type=radio]:checked:before { .comment-user-avatar { position: absolute; display: inline-block; - width: 64px; - height: 64px; + width: 52px; + height: 52px; margin-top: 10px; pointer-events: none; } @@ -4209,7 +4205,7 @@ input[type=radio]:checked:before { } .cmt-popup { - margin: 0 0 40px 1%; + margin: 0 0 30px 1%; --widthA: 97%; --widthB: calc(var(--widthA) - 71px); --widthC: calc(var(--widthB) / 3); @@ -9619,9 +9615,9 @@ body.dark .post-list-thumb:hover { } .comment-user-avatar { - padding-top: 10px; - width: 45px; - height: 55px; + padding-top: 8px; + width: 36px; + height: 44px; right: 2%; } From 13ec2a3634ddee76e3b23cf61c801a98df1cdd2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sat, 2 Sep 2023 11:55:03 +0800 Subject: [PATCH 27/39] Style --- style.css | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/style.css b/style.css index 7b8fb31a..8168a9ec 100644 --- a/style.css +++ b/style.css @@ -2083,7 +2083,7 @@ nav#comments-navi { width: 100%; margin-bottom: 5px; float: left; - padding-bottom: 25px; + padding-bottom: 15px; } .comment .body { @@ -2253,11 +2253,14 @@ nav#comments-navi { } .comment-respond #cancel-comment-reply-link { - background: #fff; - margin-left: 10px; + background-color: rgb(255 255 255 / 80%); + box-shadow: 0 1px 30px -4px #e8e8e8; border-radius: 5px; - padding: 10px 10px; + padding: 6px; + display: block; font-size: 12px; + width: max-content; + border: 1px solid #FFFFFF; color: #454545; font-weight: var(--global-font-weight); -webkit-transition: all .8s; @@ -2266,6 +2269,7 @@ nav#comments-navi { .comment-respond #cancel-comment-reply-link:hover { background: var(--comment_area_matching); + color: #fff; -webkit-transition: all .8s; transition: all .8s; } @@ -8137,7 +8141,7 @@ body.dark .post-list-thumb:hover { } .comment-respond { - width: 88% !important; + display: grid; } } @@ -8214,13 +8218,6 @@ body.dark .post-list-thumb:hover { } } -@media (max-width:1080px) { - .comment-respond { - width: 92%; - max-width: 1245px; - } -} - @media (max-width:625px) { .siren-checkbox-label { top: 8px; @@ -10656,8 +10653,10 @@ body.dark .comment .main:hover { } body.dark .comment-respond #cancel-comment-reply-link { - background: black; + box-shadow: 0 1px 20px 2px rgba(26, 26, 26, 0.8); + background: rgba(26, 26, 26, 0.8); color: #CCCCCC; + border: 1px solid #7d7d7d30; -webkit-transition: all .8s; transition: all .8s; } From 1f392a021428ccbe6d5eabab51f98ee03ce58be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sun, 3 Sep 2023 11:56:12 +0800 Subject: [PATCH 28/39] Daily Update --- opt/options/theme-options.php | 4 ++-- style.css | 32 ++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/opt/options/theme-options.php b/opt/options/theme-options.php index dafeafa1..01c8c94d 100644 --- a/opt/options/theme-options.php +++ b/opt/options/theme-options.php @@ -2833,7 +2833,7 @@ function iro_validate_optional_url( $value ) { 'type' => 'color', 'title' => __('Ideas Template Background ColorⅠ','sakurairo_csf'), 'desc' => __('Customize the colors','sakurairo_csf'), - 'default' => '#F9D938' + 'default' => 'rgba(255,224,102,0.2)' ), array( @@ -2841,7 +2841,7 @@ function iro_validate_optional_url( $value ) { 'type' => 'color', 'title' => __('Ideas Template Background Color II','sakurairo_csf'), 'desc' => __('Customize the colors','sakurairo_csf'), - 'default' => '#FCCD00' + 'default' => 'rgba(255,204,0,0.2)' ), array( diff --git a/style.css b/style.css index 8168a9ec..bbe3ca86 100644 --- a/style.css +++ b/style.css @@ -2299,7 +2299,7 @@ nav#comments-navi { margin: 0; padding: 21px 21px 20px; color: #535a63; - border: 1px solid #ddd; + border: 1px solid var(--comment_area_matching); background: #FFF; display: block; float: none; @@ -2313,6 +2313,12 @@ nav#comments-navi { font-weight: var(--global-font-weight); } +.graybar a{ + color: var(--comment_area_matching); + -webkit-transition: all .8s; + transition: all .8s; +} + .input-label { position: absolute; left: 16px; @@ -5080,12 +5086,11 @@ input#wp-comment-cookies-consent { .cbp_tmtimeline>li .cbp_tmlabel { margin: 0 0 45px 65px; - background: var(--shuoshuo_background_color2, #EE9CA7); + background: var(--shuoshuo_background_color2); color: #505050; - padding: .1em 1.2em .4em 1.2em; + padding: .4em 1.2em .4em 1.2em; font-size: 18px; font-weight: 300; - line-height: 1.4; position: relative; border-radius: 15px; transition: all 0.3s ease 0s; @@ -5094,6 +5099,10 @@ input#wp-comment-cookies-consent { display: block; } +.cbp_tmtimeline>li .cbp_tmlabel p{ + line-height: 10px !important; +} + .cbp_tmlabel:hover { /* transform:scale(1.05);*/ transform: translateY(-3px); @@ -5110,7 +5119,7 @@ input#wp-comment-cookies-consent { width: 0; position: absolute; pointer-events: none; - border-right-color: var(--shuoshuo_background_color2, #EE9CA7); + border-right-color: var(--shuoshuo_background_color2); border-width: 10px; top: 15px; } @@ -7710,11 +7719,11 @@ body.theme-dark .cbp_tmtimeline::before { } .cbp_tmtimeline>li:nth-child(odd) .cbp_tmlabel { - background: var(--shuoshuo_background_color1, #EE9999); + background: var(--shuoshuo_background_color1); } .cbp_tmtimeline>li:nth-child(odd) .cbp_tmlabel:after { - border-right-color: var(--shuoshuo_background_color1, #EE9999); + border-right-color: var(--shuoshuo_background_color1); top: 15px; } @@ -10264,6 +10273,11 @@ body.dark .entry-content h6 { color: #CCCCCC; } +body.dark .cbp_tmtimeline>li .cbp_tmlabel p{ + color: #cccccc!important; + transition: all 0.8s ease !important; +} + body.dark .site-header.yya { border: 1.5px solid #7d7d7d30; transition: all 0.8s ease; @@ -10602,9 +10616,7 @@ body.dark #changskin:hover { } body.dark li .cbp_tmlabel { - background: #505050 !important; - color: #bbb !important; - border: 1px solid #949494; + color: #CCCCCC !important; } body.dark li .cbp_tmlabel:after { From 07516d65676314e62b94a93e8e22a9940b6fa336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sun, 3 Sep 2023 13:04:39 +0800 Subject: [PATCH 29/39] Daily Update --- functions.php | 2 +- style.css | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/functions.php b/functions.php index 8149ecac..1ed437a7 100644 --- a/functions.php +++ b/functions.php @@ -2031,7 +2031,7 @@ function buy_shortcode($attr, $content = '') function gh_card($attr, $content = '') { extract(shortcode_atts(array("path" => ""), $attr)); - return '
        Github-Card
        '; + return '
        Github-Card
        '; } add_shortcode('showcard', 'show_card'); diff --git a/style.css b/style.css index bbe3ca86..2272514d 100644 --- a/style.css +++ b/style.css @@ -4821,8 +4821,6 @@ h5::before { .widget-area { display: flex; - flex-wrap: wrap; - justify-content: space-between; text-align: center; padding: 5px; margin: 5px; @@ -4833,8 +4831,6 @@ h5::before { max-width: 385px; transition: all .8s; border: 1px solid #ffffff; - align-items: flex-end; - flex-direction: column; overflow: hidden; max-height: 700px; } @@ -7632,6 +7628,7 @@ a.toc-link { color: #505050; max-width: 80%; width: fit-content; + font-size: 15px; box-shadow: 0 1px 30px -4px #e8e8e8; background: rgba(255, 255, 255, 0.5); border-radius: 10px !important; From 1154e4c82a4997ec872773243e07c527f0b38929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E5=B0=98?= <78602461+Molyleaf@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:18:02 +0800 Subject: [PATCH 30/39] Update footer.php --- footer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/footer.php b/footer.php index 3bc3f443..d8ddafa8 100644 --- a/footer.php +++ b/footer.php @@ -43,7 +43,7 @@ 本网站由 upyun-logo 提供 CDN 加速 / 云存储 服务
        -
        Theme Sakurairo by Fuukei + Theme Sakurairo by Fuukei
        From 18ecf874c30bd0e4c0d29aa78817c5388e57717f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E5=B0=98?= <78602461+Molyleaf@users.noreply.github.com> Date: Mon, 11 Sep 2023 10:04:08 +0800 Subject: [PATCH 31/39] =?UTF-8?q?=E7=BB=99=E4=B8=8A=E4=BC=A0=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E5=A2=9E=E5=8A=A0=E6=97=B6=E9=97=B4=E6=88=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/functions.php b/functions.php index 1ed437a7..5f1e1564 100644 --- a/functions.php +++ b/functions.php @@ -2323,3 +2323,9 @@ function search_404_fix_template_redirect() } add_action('template_redirect', 'search_404_fix_template_redirect'); + +// 给上传图片增加时间戳 +add_filter('wp_handle_upload_prefilter', function($file){ + $file['name'] = time().'-'.$file['name']; + return $file; +}); From bcdc8b0fbcb0b7e6bb077c8de8ebea0c37469f64 Mon Sep 17 00:00:00 2001 From: KanoChan Date: Fri, 15 Sep 2023 15:41:24 +0800 Subject: [PATCH 32/39] =?UTF-8?q?feat(=E8=AF=84=E8=AE=BA=E5=8C=BA=E8=A1=A8?= =?UTF-8?q?=E6=83=85):=20=E6=96=B0=E5=A2=9E=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=A1=A8=E6=83=85=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 详细信息:https://kanochan.net/archives/3449.html --- comments.php | 88 +++++++++++++++++----- functions.php | 136 ++++++++++++++++++++++++++++++++++ opt/options/theme-options.php | 67 +++++++++++++++-- style.css | 2 + 4 files changed, 265 insertions(+), 28 deletions(-) diff --git a/comments.php b/comments.php index b24f9ce0..ccd0bb08 100644 --- a/comments.php +++ b/comments.php @@ -57,9 +57,73 @@ if(iro_opt('not_robot')) $robot_comments = ''; $private_ms = iro_opt('comment_private_message') ? '' : ''; $mail_notify = iro_opt('mail_notify') ? '' : ''; - $bilibili_smile = !iro_opt('comment_smile_bilibili') ? '' : 'bilibili~'; - $bilibili_push_smile = !iro_opt('comment_smile_bilibili') ? '
        ' :'
        ' . push_bili_smilies() . '
        + ' . $smilies_panel . ' ', 'comment_notes_after' => '', 'comment_notes_before' => '', diff --git a/functions.php b/functions.php index 1ed437a7..a66b9098 100644 --- a/functions.php +++ b/functions.php @@ -1062,6 +1062,142 @@ function comment_picture_support($content) // 还有一个思路是根据表情调用路径来判定<-- 此法最好! // 贴吧 +/** + * 通过文件夹获取自定义表情列表,使用Transients来存储获得的列表,除非手动清除,数据永不过期。 + * 数据格式如下: + * Array + * ( + * [0] => Array + * ( + * [path] => C:\xampp\htdocs\wordpress/wp-content/uploads/sakurairo_vision/@2.4/smilies\bilipng\emoji_2233_chijing.png + * [little_path] => /sakurairo_vision/@2.4/smilies\bilipng\emoji_2233_chijing.png + * [file_url] => http://192.168.233.174/wordpress/wp-content/uploads/sakurairo_vision/@2.4/smilies\bilipng\emoji_2233_chijing.png + * [name] => emoji_2233_chijing.png + * [base_name] => emoji_2233_chijing + * [extension] => png + * ) + * ... + * ) + * + * @return array + */ +function get_custom_smilies_list() { + + $custom_smilies_list = get_transient("custom_smilies_list"); + + if ($custom_smilies_list !== false) { + return $custom_smilies_list; + } + + $custom_smilies_list = array(); + $custom_smilies_dir = iro_opt('smilies_dir'); + + if (!$custom_smilies_dir) { + return $custom_smilies_list; + } + + $custom_smilies_extension = ['jpg', 'jpeg', 'png', 'gif', 'svg', 'avif','webp']; + $custom_smilies_path = wp_get_upload_dir()['basedir'] . $custom_smilies_dir; + + if (!is_dir($custom_smilies_path)) { + return $custom_smilies_list; + } + + $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($custom_smilies_path), RecursiveIteratorIterator::LEAVES_ONLY); + foreach ($files as $file) { + if ($file->isFile()) { + $file_name = $file->getFilename(); + $file_base_name = pathinfo($file_name, PATHINFO_FILENAME); + $file_extension = pathinfo($file_name, PATHINFO_EXTENSION); + $file_path = $file->getPathname(); + $file_little_path = str_replace(wp_get_upload_dir()['basedir'], '' , $file_path); + $file_url = wp_get_upload_dir()['baseurl'] . $file_little_path; + if (in_array($file_extension, $custom_smilies_extension)) { + $custom_smilies_list[] = array( + 'path' => $file_path, + 'little_path' => $file_little_path, + 'file_url' => $file_url, + 'name' => $file_name, + 'base_name' => $file_base_name, + 'extension' => $file_extension + ); + } + } + } + set_transient("custom_smilies_list", $custom_smilies_list); + + return $custom_smilies_list; +} + +/** + * 通过 GET 方法更新自定义表情包列表 + */ +function update_custom_smilies_list() { + + if (!is_admin() || !current_user_can('manage_options')) { + return; + } + + if (!isset($_GET['update_custom_smilies'])) { + return; + } + + $transient_name = sanitize_key($_GET['update_custom_smilies']); + + if ($transient_name === 'true') { + delete_transient("custom_smilies_list"); + $custom_smilies_list = get_custom_smilies_list(); + $much = count($custom_smilies_list); + echo '自定义表情列表更新完成!总共有' . $much . '个表情。'; + } +} +update_custom_smilies_list(); + + +$custom_smiliestrans = array(); +/** + * 输出表情列表 + * + */ +function push_custom_smilies() { + + global $custom_smiliestrans; + $custom_smilies_panel = ''; + $custom_smilies_list = get_custom_smilies_list(); + + if (!$custom_smilies_list) { + $custom_smilies_panel = '
        File does not exist!
        '; + return $custom_smilies_panel; + } + + $custom_smilies_cdn = iro_opt('smilies_proxy'); + foreach ($custom_smilies_list as $smiley) { + + if ($custom_smilies_cdn) { + $smiley_url = $custom_smilies_cdn . $smiley['little_path']; + } else { + $smiley_url = $smiley['file_url']; + } + $custom_smilies_panel = $custom_smilies_panel . ''; + $custom_smiliestrans['{{' . $smiley['base_name'] . '}}'] = ''; + } + + return $custom_smilies_panel; +} + +/** + * 替换评论、文章中的表情符号 + * + */ +function custom_smilies_filter($content) { + push_custom_smilies(); + global $custom_smiliestrans; + $content = str_replace(array_keys($custom_smiliestrans), $custom_smiliestrans, $content); + return $content; +} +add_filter('the_content', 'custom_smilies_filter'); +add_filter('comment_text', 'custom_smilies_filter'); + $wpsmiliestrans = array(); function push_tieba_smilies() diff --git a/opt/options/theme-options.php b/opt/options/theme-options.php index 01c8c94d..030aed7d 100644 --- a/opt/options/theme-options.php +++ b/opt/options/theme-options.php @@ -3012,6 +3012,11 @@ function iro_validate_optional_url( $value ) { 'content' => __('You can click here to learn how to set the options on this page','sakurairo_csf'), ), + array( + 'type' => 'subheading', + 'content' => __('Comment Area Style','sakurairo_csf'), + ), + array( 'id' => 'comment_area', 'type' => 'radio', @@ -3040,14 +3045,6 @@ function iro_validate_optional_url( $value ) { 'default' => '#e8e8e8' ), - array( - 'id' => 'comment_smile_bilibili', - 'type' => 'switcher', - 'title' => __('Page Comment Area Bilibili Emoji Pack','sakurairo_csf'), - 'label' => __('Default on, bilibili emotions are displayed below the comment box','sakurairo_csf'), - 'default' => true - ), - array( 'id' => 'comment_area_image', 'type' => 'upload', @@ -3056,6 +3053,54 @@ function iro_validate_optional_url( $value ) { 'library' => 'image', ), + array( + 'type' => 'subheading', + 'content' => __('Comment Area Function','sakurairo_csf'), + ), + + array( + 'id' => 'smilies_list', + 'type' => 'button_set', + 'title' => __('Comment Area Emoticon','sakurairo_csf'), + 'desc' => __('Select the emoticons to be displayed in the comment area input box. Uncheck all to turn off the comment input box emoticon function.','sakurairo_csf'), + 'multiple' => true, + 'options' => array( + 'bilibili' => 'BILIBILI表情', + 'tieba' => '贴吧表情', + 'yanwenzi' => '颜文字', + 'custom' => '自定义表情', + ), + 'default' => array( 'bilibili', 'tieba', 'yanwenzi' ) + ), + + array( + 'id' => 'smilies_name', + 'type' => 'text', + 'title' => __('Customized Emoticon Column Name','sakurairo_csf'), + 'desc' => __('It is recommended to enter less than 4 Chinese characters in length to avoid causing compatibility issues on mobile terminals.','sakurairo_csf'), + 'dependency' => array( 'smilies_list', 'any', 'custom', '', 'true' ), + 'default' => 'custom' + ), + + array( + 'id' => 'smilies_dir', + 'type' => 'text', + 'title' => __('Path To Custom Expression','sakurairo_csf'), + 'desc' => __('Click here updating emoticon list. Specific usage reference: Comment related settings','sakurairo_csf'), + 'dependency' => array( 'smilies_list', 'any', 'custom', '', 'true' ), + ), + + array( + 'id' => 'smilies_proxy', + 'type' => 'text', + 'title' => __('Custom Emoticon Proxy Address','sakurairo_csf'), + 'desc' => __('Fill in the CDN address of the emoticon image. If left blank, the CDN proxy function will not be enabled.','sakurairo_csf'), + 'dependency' => array( + array('smilies_list', 'any', 'custom', '', 'true' ), + array('smilies_dir', '!=', '', '', 'true'), + ), + ), + array( 'id' => 'comment_useragent', 'type' => 'switcher', @@ -3177,9 +3222,15 @@ function iro_validate_optional_url( $value ) { 'type' => 'text', 'title' => __('Comment Image Proxy','sakurairo_csf'), 'desc' => __('Proxy for the image displayed on the frontend','sakurairo_csf'), + 'dependency' => array( 'img_upload_api', '!=', 'off', '', 'true' ), 'default' => 'https://images.weserv.nl/?url=' ), + array( + 'type' => 'subheading', + 'content' => __('Comment Email Notification','sakurairo_csf'), + ), + array( 'id' => 'mail_img', 'type' => 'upload', diff --git a/style.css b/style.css index 2272514d..9aa6e89a 100644 --- a/style.css +++ b/style.css @@ -6218,6 +6218,7 @@ form#commentform, .comment-respond textarea:active, .comment-respond textarea:focus { outline: 0; + width: 100%; } span.page-numbers.current { @@ -6361,6 +6362,7 @@ div.cbp_tmlabel>p { .micro, .bangumi-status p { position: relative; + width: 100%; } .commentbody:placeholder-shown::placeholder { From 82b22b5ce1fc3954273766de5431d66678876c84 Mon Sep 17 00:00:00 2001 From: bymoye <964907582@qq.com> Date: Wed, 4 Oct 2023 13:39:41 +0800 Subject: [PATCH 33/39] =?UTF-8?q?feat(vaptcha):=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E4=B8=8D=E5=A1=AB=E5=86=99vaptcha=5Fvid&key=E6=97=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8vaptcha=E6=96=B9=E5=BC=8F=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions.php b/functions.php index d372abe1..66ed83f5 100644 --- a/functions.php +++ b/functions.php @@ -2384,7 +2384,7 @@ function registration_CAPTCHA_CHECK($errors, $sanitized_user_login, $user_email) } add_filter('registration_errors', 'registration_CAPTCHA_CHECK', 2, 3); -} elseif (iro_opt('captcha_select') === 'vaptcha') { +} elseif ((iro_opt('captcha_select') === 'vaptcha') && (!empty(iro_opt("vaptcha_vid")) && !empty(iro_opt("vaptcha_key"))) { function vaptchaInit() { include_once('inc/classes/Vaptcha.php'); From f382712421820631b3017d3d0fddcc0d44299329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sat, 7 Oct 2023 13:37:36 +0800 Subject: [PATCH 34/39] Language Update --- opt/languages/ja.mo | Bin 111216 -> 112954 bytes opt/languages/ja.po | 1406 ++++++++++++++++--------------- opt/languages/sakurairo_csf.pot | 1381 +++++++++++++++--------------- opt/languages/zh_CN.mo | Bin 90803 -> 92290 bytes opt/languages/zh_CN.po | 1401 +++++++++++++++--------------- opt/languages/zh_TW.mo | Bin 90797 -> 92295 bytes opt/languages/zh_TW.po | 1401 +++++++++++++++--------------- 7 files changed, 2882 insertions(+), 2707 deletions(-) diff --git a/opt/languages/ja.mo b/opt/languages/ja.mo index 220187f7fb8f4eb152d2599e67733aacc00cba8b..f9df8c875617d290e8e24f987265b2a5e661903d 100644 GIT binary patch delta 20298 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 REDP%7DwRGs-c_{q{{sn!#Ge2F delta 18831 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" "ここをクリックしてください 。" -#: options/theme-options.php:587 +#: options/theme-options.php:586 msgid "Widgets Panel" msgstr "ウィジェットパネル" -#: options/theme-options.php:593 +#: options/theme-options.php:592 msgid "Widgets Panel Button Radius" msgstr "ウィジェットパネルのボタン半径" -#: options/theme-options.php:594 options/theme-options.php:604 +#: options/theme-options.php:593 options/theme-options.php:603 msgid "Slide to adjust, the recommended value is 10" msgstr "スライドで調整、推奨値は 10" -#: options/theme-options.php:603 +#: options/theme-options.php:602 msgid "Widgets Panel Widget Radius" msgstr "ウィジェットパネル ウィジェット半径" -#: options/theme-options.php:613 +#: options/theme-options.php:612 msgid "Widgets Panel Font" msgstr "ウィジェットパネルのフォント" -#: options/theme-options.php:621 +#: options/theme-options.php:620 msgid "Widgets Panel WP Widget Area" msgstr "ウィジェットパネルWPウィジェットエリア" -#: options/theme-options.php:622 +#: options/theme-options.php:621 msgid "When turned on, the WP Widget Area will be displayed in Widgets Panel" msgstr "オンにすると、WPウィジェット領域がウィジェットパネルに表示されます" -#: options/theme-options.php:629 +#: options/theme-options.php:628 msgid "Widgets Panel Shuoshuo" msgstr "ウィジェットパネル朔朔" -#: options/theme-options.php:630 +#: options/theme-options.php:629 msgid "" "When turned on, the Latest Shuoshuo text will be displayed in Widgets Panel" msgstr "オンにすると、最新のShuoshuoテキストがウィジェットパネルに表示されます" -#: options/theme-options.php:637 +#: options/theme-options.php:636 msgid "Widgets Panel Day&Night Switching" msgstr "ウィジェットパネル昼と夜の切り替え" -#: options/theme-options.php:638 +#: options/theme-options.php:637 msgid "" "Enabled by default, the Day&Night Switching will be displayed in Widgets " "Panel" @@ -1242,26 +1242,26 @@ msgstr "" "デフォルトで有効になっているので、昼と夜の切り替えがウィジェットパネルに表示" "されます" -#: options/theme-options.php:645 +#: options/theme-options.php:644 msgid "Widgets Panel Font Switching" msgstr "ウィジェットパネルのフォント切り替え" -#: options/theme-options.php:646 +#: options/theme-options.php:645 msgid "" "Enabled by default, the Font Switching will be displayed in Widgets Panel" msgstr "" "デフォルトで有効になっている場合、フォントの切り替えがウィジェットパネルに表" "示されます" -#: options/theme-options.php:652 +#: options/theme-options.php:651 msgid "Frontend Background" msgstr "フロントエンドの背景" -#: options/theme-options.php:663 +#: options/theme-options.php:662 msgid "Frontend Background Scaling Method" msgstr "フロントエンドの背景スケーリング方法" -#: options/theme-options.php:664 +#: options/theme-options.php:663 msgid "" "You can choose two ways to scale the frontend background, the default is " "auto-scaling" @@ -1269,70 +1269,70 @@ msgstr "" "フロントエンドの背景を拡大縮小する方法は 2 種類選択できますが、デフォルトは自" "動スケール" -#: options/theme-options.php:671 +#: options/theme-options.php:670 msgid "Background Transparency Blur" msgstr "手前の背景をぼかす" -#: options/theme-options.php:672 +#: options/theme-options.php:671 msgid "After opening Background Transparency Blur" msgstr "機能をオンにした後、手前の背景をぼかす" -#: options/theme-options.php:679 +#: options/theme-options.php:678 msgid "Widgets Panel Background Switching(Frontend Background)" msgstr "ウィジェットパネルの背景切り替え(フロントエンドの背景)" -#: options/theme-options.php:688 options/theme-options.php:704 -#: options/theme-options.php:720 options/theme-options.php:736 -#: options/theme-options.php:752 +#: options/theme-options.php:687 options/theme-options.php:703 +#: options/theme-options.php:719 options/theme-options.php:735 +#: options/theme-options.php:751 msgid "Image" msgstr "画像" -#: options/theme-options.php:693 +#: options/theme-options.php:692 msgid "Heart Shaped" msgstr "ハート型" -#: options/theme-options.php:699 options/theme-options.php:715 -#: options/theme-options.php:731 options/theme-options.php:747 +#: options/theme-options.php:698 options/theme-options.php:714 +#: options/theme-options.php:730 options/theme-options.php:746 msgid "Switch" msgstr "切り替え" -#: options/theme-options.php:709 +#: options/theme-options.php:708 msgid "Star Shaped" msgstr "星形" -#: options/theme-options.php:725 +#: options/theme-options.php:724 msgid "Square Shaped" msgstr "正方形の形" -#: options/theme-options.php:741 +#: options/theme-options.php:740 msgid "Lemon Shaped" msgstr "レモンの形" -#: options/theme-options.php:772 +#: options/theme-options.php:771 msgid "Background Transparency in the Frontend" msgstr "フロントエンドの背景の透明度" -#: options/theme-options.php:773 +#: options/theme-options.php:772 msgid "Slide to adjust, the recommended sliding value range is 0.6-0.8" msgstr "スライドで調整、推奨値の範囲は0.6-0.8です" -#: options/theme-options.php:782 +#: options/theme-options.php:781 msgid "Frontend Font" msgstr "フロントエンドフォント" -#: options/theme-options.php:788 +#: options/theme-options.php:787 msgid "Global Default Font/Widgets Panel Font Switching A" msgstr "グローバルデフォルトフォント/ウィジェットパネルフォント切り替えA" -#: options/theme-options.php:795 +#: options/theme-options.php:794 msgid "Widgets Panel Font Switching B" msgstr "ウィジェットパネルフォント切り替えB" -#: options/theme-options.php:805 +#: options/theme-options.php:804 msgid "Footer Options" msgstr "フッターオプション" -#: options/theme-options.php:812 +#: options/theme-options.php:811 msgid "" "You can click here to learn how to set the " @@ -1342,11 +1342,11 @@ msgstr "" "fuukei.org/Sakurairo/Global/#%E9%A1%B5%E5%B0%BE%E8%AE%BE%E7%BD%AE\">ここをク" "リックしてください 。" -#: options/theme-options.php:818 +#: options/theme-options.php:817 msgid "Footer Online Music Player" msgstr "footerオンライン音楽プレーヤー" -#: options/theme-options.php:819 +#: options/theme-options.php:818 msgid "" "A button will appear at the bottom left corner of the footer after turning " "on, click it and the footer online player will be displayed" @@ -1354,38 +1354,38 @@ msgstr "" "機能をオンにすると、ページの左下にボタンが表示され、ボタンをクリックすると、" "ページの最後にあるオンラインプレーヤーが表示されます" -#: options/theme-options.php:822 +#: options/theme-options.php:821 msgid "Netease Cloud Music" msgstr "網易雲音楽" -#: options/theme-options.php:823 +#: options/theme-options.php:822 msgid "Kugou Music(may not be available)" msgstr "KuGouミュージック(利用できない場合あり)" -#: options/theme-options.php:824 +#: options/theme-options.php:823 msgid "Baidu Music(not available on servers overseas)" msgstr "百度ミュージック(中国本土以外で利用できません)" -#: options/theme-options.php:825 +#: options/theme-options.php:824 msgid "QQ Music(may not be available)" msgstr "QQミュージック(利用できない場合があります)" -#: options/theme-options.php:833 +#: options/theme-options.php:832 msgid "Footer Online Music Player Proxy" msgstr "フッター オンライン 音楽 プレーヤー プロキシ" -#: options/theme-options.php:835 +#: options/theme-options.php:834 msgid "" "Ex. http://127.0.0.1:8080. Reference: https://curl.se/libcurl/c/" "CURLOPT_PROXY.html" msgstr "" "例:http://127.0.0.1:8080 参照:https://curl.se/libcurl/c/CURLOPT_PROXY.html" -#: options/theme-options.php:842 +#: options/theme-options.php:841 msgid "Footer Online Music Player Songlist ID" msgstr "フッターオンライン音楽プレーヤーソングリストID" -#: options/theme-options.php:844 +#: options/theme-options.php:843 msgid "" "Fill in the song ID, e.g. https://music.163.com/#/playlist?id=5380675133 " "SongID:5380675133" @@ -1393,47 +1393,47 @@ msgstr "" "ソングIDを入力。例えば、https://music.163.com/#/playlist?id=5380675133 ソング" "ID:5380675133" -#: options/theme-options.php:851 +#: options/theme-options.php:850 msgid "Footer Online Music Player Mode" msgstr "フッターオンライン音楽プレーヤーモード" -#: options/theme-options.php:853 +#: options/theme-options.php:852 msgid "Select music player mode" msgstr "音楽プレーヤーモードを選択" -#: options/theme-options.php:855 +#: options/theme-options.php:854 msgid "List" msgstr "リスト" -#: options/theme-options.php:856 +#: options/theme-options.php:855 msgid "Random" msgstr "ランダム" -#: options/theme-options.php:864 +#: options/theme-options.php:863 msgid "Footer Online Music Player Preload" msgstr "フッターオンライン音楽プレーヤーを先行読み込み" -#: options/theme-options.php:866 +#: options/theme-options.php:865 msgid "Whether to preload songs" msgstr "曲を先行読み込みの有無" -#: options/theme-options.php:869 +#: options/theme-options.php:868 msgid "Preload Metadata" msgstr "メタデータの先行読み込み" -#: options/theme-options.php:878 +#: options/theme-options.php:877 msgid "Default Volume of Footer Online Music Player" msgstr "フッターオンライン音楽プレーヤーのデフォルトボリューム" -#: options/theme-options.php:880 +#: options/theme-options.php:879 msgid "Slide to adjust, the recommended sliding value range is 0.4-0.6" msgstr "スライドで調整、推奨スライド値の範囲は0.4-0.6" -#: options/theme-options.php:889 +#: options/theme-options.php:888 msgid "Netease Cloud Music Cookies" msgstr "網易雲音楽クッキー" -#: options/theme-options.php:891 +#: options/theme-options.php:890 msgid "" "If you want to play VIP music on Netease Cloud Music Platform, please fill " "in your account cookies in this option." @@ -1441,31 +1441,31 @@ msgstr "" "網易雲音楽プラットフォームでVIP音楽を再生したい場合は、このオプションでアカウ" "ントのクッキーを記入してください。" -#: options/theme-options.php:897 +#: options/theme-options.php:896 msgid "Footer Sakura Icon" msgstr "フッター桜アイコン" -#: options/theme-options.php:898 +#: options/theme-options.php:897 msgid "Enabled by default, sakura icon will appear on the footer" msgstr "デフォルトで有効になっており、桜のアイコンがフッターに表示されます" -#: options/theme-options.php:905 +#: options/theme-options.php:904 msgid "Footer Info" msgstr "フッター情報" -#: options/theme-options.php:906 +#: options/theme-options.php:905 msgid "Footer description text, supports HTML code" msgstr "フッターの説明文字、HTMLコードを支援する" -#: options/theme-options.php:913 +#: options/theme-options.php:912 msgid "Footer Text Font" msgstr "フッターテキストのフォント" -#: options/theme-options.php:921 +#: options/theme-options.php:920 msgid "Footer Load Occupancy Query" msgstr "フッター負荷の占有率表示" -#: options/theme-options.php:922 +#: options/theme-options.php:921 msgid "" "Load occupancy information will appear at the end of the page after turning " "it on. Not recommended in production environment." @@ -1473,38 +1473,38 @@ msgstr "" "負荷占有率は、オンにするとページの最後に表示されます。運用環境では推奨されま" "せん。" -#: options/theme-options.php:929 +#: options/theme-options.php:928 msgid "Footer Upyun League Logo" msgstr "フッターウピョンリーグロゴ" -#: options/theme-options.php:930 +#: options/theme-options.php:929 msgid "Upyun Logo will appear at the end of the page after turning it on" msgstr "ウプユンロゴは、オンにするとページの最後に表示されます" -#: options/theme-options.php:938 +#: options/theme-options.php:937 msgid "Footer Addition" msgstr "フッターの付加コード" -#: options/theme-options.php:939 +#: options/theme-options.php:938 msgid "" "Add HTML code at the end of the page. Useful for adding customize JavaScript." msgstr "" "ページの最後にHTMLコードを添付します。カスタマイズ用のJavaScriptを追加するの" "に便利です。" -#: options/theme-options.php:944 +#: options/theme-options.php:943 msgid "Hitokoto" msgstr "一言" -#: options/theme-options.php:950 +#: options/theme-options.php:949 msgid "Footer Hitokoto" msgstr "フッターの一言" -#: options/theme-options.php:951 +#: options/theme-options.php:950 msgid "Hitokoto will appear at the end of the page after turning it on" msgstr "オンにすると、ページの最後に一言は表示します" -#: options/theme-options.php:958 +#: options/theme-options.php:957 msgid "" "

        Hitokoto API Setup Instructions

        Fill in as the example: " "[\"https://api.nmxc.ltd/yiyan/\", \"https://v1.hitokoto.cn/\"], where " @@ -1526,19 +1526,19 @@ msgstr "" "ラー。 https://api.nmxc.ltd/yiyan/

        " -#: options/theme-options.php:967 +#: options/theme-options.php:966 msgid "Hitokoto API address" msgstr "一言のAPIアドレス" -#: options/theme-options.php:969 +#: options/theme-options.php:968 msgid "Fill in the address in JavaScript array format" msgstr "JavaScriptの配列形式でアドレスを記入する" -#: options/theme-options.php:978 +#: options/theme-options.php:977 msgid "Cursor Options" msgstr "カーソルのオプション" -#: options/theme-options.php:985 +#: options/theme-options.php:984 msgid "" "You can click here to learn how to set the " @@ -1548,55 +1548,55 @@ msgstr "" "fuukei.org/Sakurairo/Global/#%E5%85%89%E6%A0%87%E8%AE%BE%E7%BD%AE\">ここをク" "リックしてください 。" -#: options/theme-options.php:991 +#: options/theme-options.php:990 msgid "Standard Cursor Style" msgstr "標準カーソルスタイル" -#: options/theme-options.php:992 +#: options/theme-options.php:991 msgid "Apply to global, fill in \".cur\" mouse file link" msgstr "全体に適用し、「.cur」マウスファイルのリングを入力してください" -#: options/theme-options.php:999 +#: options/theme-options.php:998 msgid "Selected Cursor Style" msgstr "選択されたカーソルスタイル" -#: options/theme-options.php:1000 +#: options/theme-options.php:999 msgid "Apply to multiple styles, fill in \".cur\" file link" msgstr "複数のスタイルに適用し、「.cur 」ファイルのリンクを入力してください" -#: options/theme-options.php:1007 +#: options/theme-options.php:1006 msgid "Selected Control Unit Cursor Style" msgstr "選択されたコントロールユニットのカーソルスタイル" -#: options/theme-options.php:1008 +#: options/theme-options.php:1007 msgid "Apply to selected control unit, fill in \".cur\" file link" msgstr "" "選択してのコントロールにユニットに適用し、「.cur 」ファイルのリンクを入力して" "ください" -#: options/theme-options.php:1015 +#: options/theme-options.php:1014 msgid "Selected Text Cursor Style" msgstr "選択された文字のカーソルスタイル" -#: options/theme-options.php:1016 +#: options/theme-options.php:1015 msgid "Apply to selected text, fill in \".cur\" file link" msgstr "選択しての文字に適用し、「.cur 」ファイルのリンクを入力してください" -#: options/theme-options.php:1023 +#: options/theme-options.php:1022 msgid "Work Status Cursor Style" msgstr "ワークステータスのカーソルスタイル" -#: options/theme-options.php:1024 +#: options/theme-options.php:1023 msgid "Apply to load control unit, fill in \".cur\" file link" msgstr "" "ロードコントロールユニットに適用し、「.cur 」ファイルのリンクを入力してくださ" "い" -#: options/theme-options.php:1033 +#: options/theme-options.php:1032 msgid "Additional Options" msgstr "追加オプション" -#: options/theme-options.php:1040 +#: options/theme-options.php:1039 msgid "" "You can click here to learn how to set the " @@ -1606,15 +1606,15 @@ msgstr "" "fuukei.org/Sakurairo/Global/#%E9%A2%9D%E5%A4%96%E8%AE%BE%E7%BD%AE\">ここをク" "リックしてください 。" -#: options/theme-options.php:1045 +#: options/theme-options.php:1044 msgid "Effects&Animations" msgstr "エフェクトとアニメーション" -#: options/theme-options.php:1051 +#: options/theme-options.php:1050 msgid "Preload Animation" msgstr "先行読み込みアニメーション" -#: options/theme-options.php:1052 +#: options/theme-options.php:1051 msgid "" "Preload animation before new pages load; To enable this option, ensure your " "page resources can load properly." @@ -1622,47 +1622,47 @@ msgstr "" "新しいページが読み込まれる前にアニメーションをプリロードします。このオプショ" "ンを有効にするには、ページ リソースが正しく読み込まれるようにします。" -#: options/theme-options.php:1059 +#: options/theme-options.php:1058 msgid "Preload Animation Color A" msgstr "プリロード アニメーション カラー A" -#: options/theme-options.php:1068 +#: options/theme-options.php:1067 msgid "Preload Animation Color B" msgstr "プリロード アニメーション カラー B" -#: options/theme-options.php:1076 +#: options/theme-options.php:1075 msgid "Preload Animation Blur Transition Effect" msgstr "プリロード アニメーション ブラー トランジション効果" -#: options/theme-options.php:1078 +#: options/theme-options.php:1077 msgid "Blur transition duration in milliseconds ms, off when set to 0." msgstr "0 に設定すると、ミリ秒単位のブラーの遷移時間(ミリ秒)がオフになります。" -#: options/theme-options.php:1088 +#: options/theme-options.php:1087 msgid "Sakura Falling Effects" msgstr "さくら落下効果" -#: options/theme-options.php:1091 +#: options/theme-options.php:1090 msgid "Native Quantity" msgstr "ネイティブ数量" -#: options/theme-options.php:1092 +#: options/theme-options.php:1091 msgid "Quarter Quantity" msgstr "四半期数量" -#: options/theme-options.php:1093 +#: options/theme-options.php:1092 msgid "Half Quantity" msgstr "半分の数量" -#: options/theme-options.php:1094 +#: options/theme-options.php:1093 msgid "Less Quantity" msgstr "少ない量" -#: options/theme-options.php:1102 +#: options/theme-options.php:1101 msgid "Particles Effects" msgstr "パーティクルエフェクト" -#: options/theme-options.php:1104 +#: options/theme-options.php:1103 msgid "" "Particles effects will appear in the global background. Please open the " "Cover-and-Frontend-Background-Integration Options to get the best experience" @@ -1670,11 +1670,11 @@ msgstr "" "パーティクルエフェクトはグローバル背景に表示されます。最高の体験を得るために" "カバーとフロントエンド -バックグラウンド統合オプションを開いてください" -#: options/theme-options.php:1112 +#: options/theme-options.php:1111 msgid "Particles JSON" msgstr "パーティクル JSON" -#: options/theme-options.php:1114 +#: options/theme-options.php:1113 msgid "" "You can go to the Project Address to generate your unique Particles Effects" @@ -1682,150 +1682,150 @@ msgstr "" "プロジェクトアドレス" "に移動して、独自のパーティクルエフェクトを生成できます。" -#: options/theme-options.php:1231 +#: options/theme-options.php:1230 msgid "Note Touch Effects" msgstr "ノートタッチエフェクト" -#: options/theme-options.php:1232 +#: options/theme-options.php:1231 msgid "" "After turning on, there will be a note sound alert when the back to top " "button and Mashiro style logo touch" msgstr "" "電源を入れると、トップボタンと正代スタイルのロゴタッチ時に音の警告が鳴ります" -#: options/theme-options.php:1238 +#: options/theme-options.php:1237 msgid "Feature" msgstr "機能" -#: options/theme-options.php:1244 +#: options/theme-options.php:1243 msgid "PJAX Partial Refresh" msgstr "PJAX 部分更新" -#: options/theme-options.php:1245 +#: options/theme-options.php:1244 msgid "Enabled by default, clicking to a new page will not require reloading" msgstr "" "既定で有効に設定すると、新しいページをクリックしても再読み込みは不要です" -#: options/theme-options.php:1252 +#: options/theme-options.php:1251 msgid "NProgress Loading Progress Bar" msgstr "N進行状況の読み込み進行状況バー" -#: options/theme-options.php:1253 +#: options/theme-options.php:1252 msgid "" "Enabled by default, when loading page there will be a progress bar alert" msgstr "" "既定で有効に設定され、ページを読み込むときに進行状況バーの警告が表示されま" "す。" -#: options/theme-options.php:1260 +#: options/theme-options.php:1259 msgid "Global Smooth Scroll" msgstr "グローバルスムーズスクロール" -#: options/theme-options.php:1261 +#: options/theme-options.php:1260 msgid "Enabled by default, page scrolling will be smoother" msgstr "既定で有効に設定すると、ページのスクロールはよりスムーズになります。" -#: options/theme-options.php:1268 +#: options/theme-options.php:1267 msgid "Captcha Selection" msgstr "セクションをリセット" -#: options/theme-options.php:1271 +#: options/theme-options.php:1270 msgid "Theme Built in Captcha" msgstr "統計に組み込まれたテーマ" -#: options/theme-options.php:1272 +#: options/theme-options.php:1271 msgid "Vaptcha" msgstr "Vaptcha" -#: options/theme-options.php:1280 +#: options/theme-options.php:1279 msgid "Vaptcha VID" msgstr "Vaptcha VID" -#: options/theme-options.php:1282 +#: options/theme-options.php:1281 msgid "Fill in your Vaptcha VID" msgstr "あなたのVaptcha VIDを記入してください" -#: options/theme-options.php:1288 +#: options/theme-options.php:1287 msgid "Vaptcha KEY" msgstr "Vaptcha KEY" -#: options/theme-options.php:1290 +#: options/theme-options.php:1289 msgid "Fill in your Vaptcha KEY" msgstr "Vaptcha KEYを入力する" -#: options/theme-options.php:1296 +#: options/theme-options.php:1295 msgid "Vaptcha Scene" msgstr "Vaptchaシーン" -#: options/theme-options.php:1312 +#: options/theme-options.php:1311 msgid "Pagination Mode" msgstr "ページネーション モード" -#: options/theme-options.php:1314 +#: options/theme-options.php:1313 msgid "Ajax Load" msgstr "AJAX自動読み込み" -#: options/theme-options.php:1315 +#: options/theme-options.php:1314 msgid "Page Up/Down" msgstr "ページアップ/ダウン" -#: options/theme-options.php:1323 +#: options/theme-options.php:1322 msgid "Next Page Auto Load" msgstr "次のページの自動読み込み" -#: options/theme-options.php:1326 +#: options/theme-options.php:1325 msgid "do not autoload" msgstr "自動ロードしない" -#: options/theme-options.php:1327 +#: options/theme-options.php:1326 msgid "0 Sec" msgstr "0秒" -#: options/theme-options.php:1328 +#: options/theme-options.php:1327 msgid "1 Sec" msgstr "1秒" -#: options/theme-options.php:1329 +#: options/theme-options.php:1328 msgid "2 Sec" msgstr "2秒" -#: options/theme-options.php:1330 +#: options/theme-options.php:1329 msgid "3 Sec" msgstr "3秒" -#: options/theme-options.php:1331 +#: options/theme-options.php:1330 msgid "4 Sec" msgstr "4秒" -#: options/theme-options.php:1332 +#: options/theme-options.php:1331 msgid "5 Sec" msgstr "5秒" -#: options/theme-options.php:1333 +#: options/theme-options.php:1332 msgid "6 Sec" msgstr "6秒" -#: options/theme-options.php:1334 +#: options/theme-options.php:1333 msgid "7 Sec" msgstr "7秒" -#: options/theme-options.php:1335 +#: options/theme-options.php:1334 msgid "8 Sec" msgstr "8秒" -#: options/theme-options.php:1336 +#: options/theme-options.php:1335 msgid "9 Sec" msgstr "9秒" -#: options/theme-options.php:1337 +#: options/theme-options.php:1336 msgid "10 Sec" msgstr "10秒" -#: options/theme-options.php:1345 +#: options/theme-options.php:1344 msgid "Placeholder SVG when loading the next page" msgstr "次のページのプレースホルダーSVGを読み込む" -#: options/theme-options.php:1346 +#: options/theme-options.php:1345 msgid "" "Fill in the address, this is the SVG that will be displayed as a placeholder " "when the next page is loading" @@ -1833,15 +1833,15 @@ msgstr "" "アドレスを入力すると、これは次のページが読み込まれたときにプレースホルダーと" "して表示されるSVGです" -#: options/theme-options.php:1354 +#: options/theme-options.php:1353 msgid "HomePage Options" msgstr "ホームページのオプション" -#: options/theme-options.php:1360 +#: options/theme-options.php:1359 msgid "Cover Options" msgstr "カバーオプション" -#: options/theme-options.php:1367 +#: options/theme-options.php:1366 msgid "" "You can click here to learn how to set the " @@ -1851,52 +1851,52 @@ msgstr "" "fuukei.org/Sakurairo/Homepage/#%E5%B0%81%E9%9D%A2%E8%AE%BE%E7%BD%AE\">ここを" "クリックしてください 。" -#: options/theme-options.php:1373 +#: options/theme-options.php:1372 msgid "Cover Switch" msgstr "カバースイッチ" -#: options/theme-options.php:1374 +#: options/theme-options.php:1373 msgid "On by default, if off, all options below will be disabled" msgstr "" "初期設定ではオン。オフにすると、以下のすべてのオプションが無効になります" -#: options/theme-options.php:1381 +#: options/theme-options.php:1380 msgid "Cover Full Screen" msgstr "カバーに全画面表示" -#: options/theme-options.php:1390 +#: options/theme-options.php:1389 msgid "Cover Arc Occlusion (Below)" msgstr "曲線状のカバーオクルージョン(下)" -#: options/theme-options.php:1391 +#: options/theme-options.php:1390 msgid "An arc occlusion will appear below the cover when turned on" msgstr "オンにすると、円弧のオクルージョンがカバーの下に表示されます。" -#: options/theme-options.php:1402 +#: options/theme-options.php:1401 msgid "Cover Radius" msgstr "カバー半径" -#: options/theme-options.php:1403 +#: options/theme-options.php:1402 msgid "Slide to adjust, the recommended value range is 15-20" msgstr "スライドで調整、推奨値の範囲は 15-20 です" -#: options/theme-options.php:1413 +#: options/theme-options.php:1412 msgid "Cover Animation" msgstr "カバーアニメーション" -#: options/theme-options.php:1414 +#: options/theme-options.php:1413 msgid "On by default, if off, the cover will be displayed directly" msgstr "初期設定ではオン。オフにすると、カバーが直接表示されます" -#: options/theme-options.php:1422 +#: options/theme-options.php:1421 msgid "Cover Animation Time" msgstr "カバーのアニメーション時間" -#: options/theme-options.php:1437 +#: options/theme-options.php:1436 msgid "Cover Info Bar" msgstr "カバー情報欄" -#: options/theme-options.php:1438 +#: options/theme-options.php:1437 msgid "" "Enabled by default, show avatar, Mashiro effects text, signature bar, " "shuoshuo bar, social area" @@ -1904,51 +1904,51 @@ msgstr "" "初期設定では有効、アバター、Mashiro効果のテキスト、署名バー、Shuoshuoバー、" "ソーシャルエリアを表示する" -#: options/theme-options.php:1446 +#: options/theme-options.php:1445 msgid "Cover Info Bar Style" msgstr "カバー情報欄のスタイル" -#: options/theme-options.php:1461 +#: options/theme-options.php:1460 msgid "Cover Info Bar Background Color" msgstr "カバー情報欄の背景色" -#: options/theme-options.php:1473 +#: options/theme-options.php:1472 msgid "Cover Info Bar Avatar Radius" msgstr "カバー情報欄のアバター半径" -#: options/theme-options.php:1474 +#: options/theme-options.php:1473 msgid "Slide to adjust, the recommended value is 100" msgstr "スライドで調整、推奨値は100です" -#: options/theme-options.php:1486 +#: options/theme-options.php:1485 msgid "Cover Info Bar Rounded" msgstr "カバー情報欄のスタイル" -#: options/theme-options.php:1487 +#: options/theme-options.php:1486 msgid "Slide to adjust, the recommended value range 10-20" msgstr "スライドで調整、推奨値範囲は10-20" -#: options/theme-options.php:1500 +#: options/theme-options.php:1499 msgid "Cover Signature Field Text" msgstr "カバー署名フィールドテキスト" -#: options/theme-options.php:1501 options/theme-options.php:2762 +#: options/theme-options.php:1500 options/theme-options.php:2765 msgid "A self-descriptive quote" msgstr "自己記述的な引用" -#: options/theme-options.php:1512 +#: options/theme-options.php:1511 msgid "Cover Signature Field Text Font" msgstr "カバー署名フィールドテキストフォント" -#: options/theme-options.php:1524 +#: options/theme-options.php:1523 msgid "Cover Signature Field Text Font Size" msgstr "カバー署名フィールドテキストのフォントサイズ" -#: options/theme-options.php:1539 +#: options/theme-options.php:1538 msgid "Cover Signature Bar Typing Effects" msgstr "カバー署名バーの入力効果" -#: options/theme-options.php:1540 +#: options/theme-options.php:1539 msgid "" "When turned on, the signature bar text will have an additional paragraph of " "text and will be rendered with typing effects" @@ -1956,43 +1956,43 @@ msgstr "" "オンにすると、署名バーのテキストには追加の段落が表示され、テキスト効果が表示" "されます。" -#: options/theme-options.php:1551 +#: options/theme-options.php:1550 msgid "Cover Signature Field Typing Effects Double Quotes" msgstr "カバー署名フィールド入力効果二重引用符" -#: options/theme-options.php:1557 +#: options/theme-options.php:1556 msgid "Typing effects will be appended with double quotes when turned on" msgstr "オンにすると、入力効果に二重引用符が付加されます。" -#: options/theme-options.php:1564 +#: options/theme-options.php:1563 msgid "Cover Signature Field Typing Effects Placeholder" msgstr "カバー署名フィールドタイピングエフェクトプレースホルダ" -#: options/theme-options.php:1577 +#: options/theme-options.php:1576 msgid "Typed.js initial option" msgstr "型付き.js初期オプション" -#: options/theme-options.php:1589 +#: options/theme-options.php:1588 msgid "Cover Random Image Options" msgstr "ランダムイメージオプションをカバー" -#: options/theme-options.php:1591 +#: options/theme-options.php:1590 msgid "External API" msgstr "外部 API" -#: options/theme-options.php:1592 +#: options/theme-options.php:1591 msgid "Webp optimized" msgstr "最適化されたウェブ" -#: options/theme-options.php:1593 +#: options/theme-options.php:1592 msgid "Local" msgstr "ローカル" -#: options/theme-options.php:1602 +#: options/theme-options.php:1601 msgid "Cover Random Image Multi-terminal Separation" msgstr "ランダム画像マルチ端子分離をカバー" -#: options/theme-options.php:1603 +#: options/theme-options.php:1602 msgid "" "Enabled by default, desktop and mobile devices will use separate random " "image addresses" @@ -2000,24 +2000,24 @@ msgstr "" "既定で有効に設定すると、デスクトップ デバイスとモバイル デバイスでは、別々の" "ランダム イメージ アドレスが使用されます。" -#: options/theme-options.php:1611 +#: options/theme-options.php:1610 msgid "Webp Optimization/External API Desktop Side Random Graphics Address" msgstr "" "Webp 最適化/外部 API デスクトップサイドのランダムなグラフィックアドレス" -#: options/theme-options.php:1612 options/theme-options.php:1627 +#: options/theme-options.php:1611 options/theme-options.php:1630 msgid "Fill in an URL" msgstr "URL を入力する" -#: options/theme-options.php:1622 +#: options/theme-options.php:1624 msgid "External API Mobile Devices Random Image Address" msgstr "外部 API モバイル デバイスのランダム イメージ アドレス" -#: options/theme-options.php:1636 +#: options/theme-options.php:1639 msgid "Cover Random Background Image Cache" msgstr "ランダム背景画像キャッシュをカバー" -#: options/theme-options.php:1637 +#: options/theme-options.php:1640 msgid "" "Enabled by default, this feature will cache a cover image locally, which can " "improve the loading speed of the first cover after entering the homepage. " @@ -2027,11 +2027,11 @@ msgstr "" "ホームページに入った後の最初のカバーの読み込み速度を向上させることができま" "す。注: この機能には、クロスドメイン要求を受け入れるカバー API が必要です。" -#: options/theme-options.php:1645 +#: options/theme-options.php:1648 msgid "Cover and Frontend Background Integration" msgstr "カバーとフロントエンドの背景統合" -#: options/theme-options.php:1646 +#: options/theme-options.php:1649 msgid "" "When enabled, the background of the cover will be set to transparent, while " "the frontend background will use the cover's random image API" @@ -2039,35 +2039,35 @@ msgstr "" "有効にすると、カバーの背景は透明に設定され、フロントエンドの背景はカバーのラ" "ンダムな画像APIを使用します。" -#: options/theme-options.php:1654 +#: options/theme-options.php:1657 msgid "Cover Random Images Filter" msgstr "ランダム画像フィルタをカバー" -#: options/theme-options.php:1656 +#: options/theme-options.php:1659 msgid "No filter" msgstr "フィルターなし" -#: options/theme-options.php:1657 +#: options/theme-options.php:1660 msgid "Light filter" msgstr "ライトフィルター" -#: options/theme-options.php:1658 +#: options/theme-options.php:1661 msgid "Dimmed filter" msgstr "薄暗いフィルター" -#: options/theme-options.php:1659 +#: options/theme-options.php:1662 msgid "Grid filter" msgstr "グリッド フィルター" -#: options/theme-options.php:1660 +#: options/theme-options.php:1663 msgid "Dot filter" msgstr "ドットフィルター" -#: options/theme-options.php:1669 +#: options/theme-options.php:1672 msgid "Cover Wave Effects" msgstr "カバーウェーブエフェクト" -#: options/theme-options.php:1670 +#: options/theme-options.php:1673 msgid "" "Wave effect will appear at the bottom of the cover of the home page after " "turning on, and it will be forced off in the dark mode" @@ -2075,21 +2075,21 @@ msgstr "" "波の効果は、オンにすると、ホームページの表紙の下部に表示され、それは暗いモー" "ドでオフに強制されます" -#: options/theme-options.php:1678 +#: options/theme-options.php:1681 msgid "Cover Dropdown Arrow" msgstr "カバー ドロップダウン矢印の色" -#: options/theme-options.php:1679 +#: options/theme-options.php:1682 msgid "Enabled by default, show a dropdown arrow at bottom of home cover" msgstr "" "デフォルトで有効に設定すると、ホームカバーの下部にドロップダウン矢印が表示さ" "れます。" -#: options/theme-options.php:1687 +#: options/theme-options.php:1690 msgid "Cover Dropdown Arrow Display on Mobile Devices" msgstr "モバイル デバイスのドロップダウン矢印の表示" -#: options/theme-options.php:1692 +#: options/theme-options.php:1695 msgid "" "Drop down arrow will appear at the bottom of the mobile devices' home cover " "after turning it on" @@ -2097,49 +2097,49 @@ msgstr "" "ドロップダウン矢印は、それをオンにすると、モバイルデバイスのホームカバーの下" "部に表示されます" -#: options/theme-options.php:1699 +#: options/theme-options.php:1702 msgid "Cover Dropdown Arrow Color" msgstr "カバー ドロップダウン矢印の色" -#: options/theme-options.php:1711 +#: options/theme-options.php:1714 msgid "Cover Dropdown Arrow Color (Dark Mode)" msgstr "カバー ドロップダウン矢印の色 (ダーク モード)" -#: options/theme-options.php:1716 +#: options/theme-options.php:1719 msgid "Customize the colors, dark colors are recommended" msgstr "色をカスタマイズし、暗い色をお勧めします" -#: options/theme-options.php:1723 +#: options/theme-options.php:1726 msgid "Cover Video" msgstr "カバービデオ" -#: options/theme-options.php:1724 +#: options/theme-options.php:1727 msgid "Use a video instead of the images as the cover" msgstr "画像の代わりにビデオをカバーとして使用する" -#: options/theme-options.php:1732 +#: options/theme-options.php:1735 msgid "Cover Video Loop" msgstr "カバービデオループ" -#: options/theme-options.php:1737 +#: options/theme-options.php:1740 msgid "Video will loop automatically when enabled." msgstr "ビデオは、有効にすると自動的にループします, Pjaxが必要" -#: options/theme-options.php:1744 +#: options/theme-options.php:1747 msgid "Cover Video Auto Resume" msgstr "カバービデオアドレス" -#: options/theme-options.php:1749 +#: options/theme-options.php:1752 msgid "" "Cover Video will resume automatically when coming back to homepage while " "Pjax enabled." msgstr "ビデオは、有効にすると自動的にループします, Pjaxが必要" -#: options/theme-options.php:1756 +#: options/theme-options.php:1759 msgid "Cover Video URL Base Path" msgstr "カバービデオ名" -#: options/theme-options.php:1762 +#: options/theme-options.php:1765 msgid "" "Fill in the base path your video located at. For example: https://localhost. " "Your site's URL is used as default. Please pay attention to the protocol " @@ -2148,11 +2148,11 @@ msgstr "" "ビデオのベース パスを入力します。たとえば、https://localhost。サイトの URL が" "既定として使用されます。URLのプロトコル名に注意してください。" -#: options/theme-options.php:1768 +#: options/theme-options.php:1771 msgid "Cover Video File Name" msgstr "カバービデオ名" -#: options/theme-options.php:1773 +#: options/theme-options.php:1776 msgid "" "For example: abc.mp4. Multiple videos should be separated by English commas " "like \"abc.mp4,efg.mp4,\" Random play is on by default." @@ -2161,11 +2161,11 @@ msgstr "" "は、\"abc,efg\"のような英語のカンマで区切られるべきです、 ランダムプレイはデ" "フォルトでオンになっています。" -#: options/theme-options.php:1781 +#: options/theme-options.php:1784 msgid "Cover Social Area Options" msgstr "ソーシャルエリアのオプションをカバーする" -#: options/theme-options.php:1788 +#: options/theme-options.php:1791 msgid "" "You can click here" "ここをクリックしてください 。" -#: options/theme-options.php:1793 +#: options/theme-options.php:1796 msgid "Related Options" msgstr "関連オプション" -#: options/theme-options.php:1799 +#: options/theme-options.php:1802 msgid "Cover Social Area" msgstr "カバーソーシャルエリア" -#: options/theme-options.php:1800 +#: options/theme-options.php:1803 msgid "" "Enabled by default, show cover random image toggle button and social network " "icons" @@ -2192,11 +2192,11 @@ msgstr "" "デフォルトで有効に設定され、カバーランダム画像トグルボタンとソーシャルネット" "ワークアイコンを表示" -#: options/theme-options.php:1807 +#: options/theme-options.php:1810 msgid "Social Icon" msgstr "ソーシャルアイコン" -#: options/theme-options.php:1808 +#: options/theme-options.php:1811 msgid "" "Select your favorite icon pack. Icon pack references are detailed in the " "\"About Theme\" section" @@ -2204,35 +2204,35 @@ msgstr "" "お気に入りのアイコンパックを選択します。アイコンパックのリファレンスについて" "は、「テーマについて」セクションで詳しく説明します。" -#: options/theme-options.php:1830 +#: options/theme-options.php:1833 msgid "Cover Social Area Rounded Corners" msgstr "表紙ソーシャルエリア角丸" -#: options/theme-options.php:1832 +#: options/theme-options.php:1835 msgid "Slide to adjust, the recommended value range is 10-20" msgstr "調整するスライド、推奨値の範囲は10-20です" -#: options/theme-options.php:1841 +#: options/theme-options.php:1844 msgid "Switch Button of Random Images" msgstr "ランダム画像の切り替えボタン" -#: options/theme-options.php:1843 +#: options/theme-options.php:1846 msgid "Enabled by default, show cover random image toggle button" msgstr "デフォルトで有効に設定され、カバーランダム画像トグルボタンを表示" -#: options/theme-options.php:1849 +#: options/theme-options.php:1852 msgid "Social Network" msgstr "ソーシャルネットワーク" -#: options/theme-options.php:1855 +#: options/theme-options.php:1858 msgid "Wechat" msgstr "ウェチャット" -#: options/theme-options.php:1864 +#: options/theme-options.php:1867 msgid "QQ" msgstr "QQ" -#: options/theme-options.php:1866 +#: options/theme-options.php:1869 msgid "" "Please note the format of filling out the form, e.g. tencent://message/?" "uin=123456" @@ -2240,109 +2240,109 @@ msgstr "" "フォームへの記入の形式に注意してください(例えば、tencent://message/?" "uin=123456)" -#: options/theme-options.php:1872 +#: options/theme-options.php:1875 msgid "Bilibili" msgstr "ビリビリ" -#: options/theme-options.php:1874 options/theme-options.php:1882 -#: options/theme-options.php:1890 options/theme-options.php:1898 -#: options/theme-options.php:1906 options/theme-options.php:1914 -#: options/theme-options.php:1922 options/theme-options.php:1930 -#: options/theme-options.php:1938 options/theme-options.php:1946 -#: options/theme-options.php:1954 options/theme-options.php:1962 -#: options/theme-options.php:1970 options/theme-options.php:1978 -#: options/theme-options.php:1986 options/theme-options.php:1994 -#: options/theme-options.php:2019 options/theme-options.php:2326 -#: options/theme-options.php:2352 options/theme-options.php:2378 -#: options/theme-options.php:2486 +#: options/theme-options.php:1877 options/theme-options.php:1885 +#: options/theme-options.php:1893 options/theme-options.php:1901 +#: options/theme-options.php:1909 options/theme-options.php:1917 +#: options/theme-options.php:1925 options/theme-options.php:1933 +#: options/theme-options.php:1941 options/theme-options.php:1949 +#: options/theme-options.php:1957 options/theme-options.php:1965 +#: options/theme-options.php:1973 options/theme-options.php:1981 +#: options/theme-options.php:1989 options/theme-options.php:1997 +#: options/theme-options.php:2022 options/theme-options.php:2329 +#: options/theme-options.php:2355 options/theme-options.php:2381 +#: options/theme-options.php:2489 msgid "add URL" msgstr "URLを追加" -#: options/theme-options.php:1880 +#: options/theme-options.php:1883 msgid "NetEase Music" msgstr "ネットイーズミュージック" -#: options/theme-options.php:1888 +#: options/theme-options.php:1891 msgid "Weibo" msgstr "Weibo" -#: options/theme-options.php:1896 +#: options/theme-options.php:1899 msgid "Github" msgstr "Github" -#: options/theme-options.php:1904 +#: options/theme-options.php:1907 msgid "Telegram" msgstr "Telegram" -#: options/theme-options.php:1912 +#: options/theme-options.php:1915 msgid "Steam" msgstr "Steam" -#: options/theme-options.php:1920 +#: options/theme-options.php:1923 msgid "ZhiHu" msgstr "知乎" -#: options/theme-options.php:1928 +#: options/theme-options.php:1931 msgid "QZone" msgstr "Qゾーン" -#: options/theme-options.php:1936 +#: options/theme-options.php:1939 msgid "Lofter" msgstr "LOFTER" -#: options/theme-options.php:1944 +#: options/theme-options.php:1947 msgid "Youku" msgstr "Youku" -#: options/theme-options.php:1952 +#: options/theme-options.php:1955 msgid "Linkedin" msgstr "Linkedin" -#: options/theme-options.php:1960 +#: options/theme-options.php:1963 msgid "Twitter" msgstr "Twitter" -#: options/theme-options.php:1968 +#: options/theme-options.php:1971 msgid "Facebook" msgstr "Facebook" -#: options/theme-options.php:1976 +#: options/theme-options.php:1979 msgid "CSDN" msgstr "CSDN" -#: options/theme-options.php:1984 +#: options/theme-options.php:1987 msgid "JianShu" msgstr "ジェンシュウ" -#: options/theme-options.php:1992 +#: options/theme-options.php:1995 msgid "Customized Social Network Ⅰ" msgstr "カスタマイズされたソーシャルネットワークII." -#: options/theme-options.php:2000 +#: options/theme-options.php:2003 msgid "Customized Social Network Ⅰ Title" msgstr "カスタマイズされたソーシャルネットワークII." -#: options/theme-options.php:2008 +#: options/theme-options.php:2011 msgid "Customized Social Network Ⅰ icon" msgstr "カスタマイズされたソーシャルネットワークI.アイコン" -#: options/theme-options.php:2017 +#: options/theme-options.php:2020 msgid "Customized Social Network Ⅱ" msgstr "カスタマイズされたソーシャルネットワークII." -#: options/theme-options.php:2025 +#: options/theme-options.php:2028 msgid "Customized Social Network Ⅱ Title" msgstr "カスタマイズされたソーシャルネットワークII." -#: options/theme-options.php:2033 +#: options/theme-options.php:2036 msgid "Customized Social Network Ⅱ icon" msgstr "カスタマイズされたソーシャルネットワークII.アイコン" -#: options/theme-options.php:2042 +#: options/theme-options.php:2045 msgid "Email Username" msgstr "電子メールユーザー名" -#: options/theme-options.php:2044 +#: options/theme-options.php:2047 msgid "" "name@domain.com fo name, the full address can be known only when there is a " "js runtime in the frontend, you can fill in with confidence" @@ -2350,19 +2350,19 @@ msgstr "" "fo 名 name@domain.com、完全なアドレスはフロントエンドに js ランタイムがある場" "合にのみ知ることができます。" -#: options/theme-options.php:2050 +#: options/theme-options.php:2053 msgid "Email Domain" msgstr "電子メール ドメイン" -#: options/theme-options.php:2052 +#: options/theme-options.php:2055 msgid "name@domain.com fo domain.com" msgstr "domain.com name@domain.com" -#: options/theme-options.php:2060 +#: options/theme-options.php:2063 msgid "Bulletin Board and Area Title Options" msgstr "掲示板とエリアタイトルのオプション" -#: options/theme-options.php:2067 +#: options/theme-options.php:2070 msgid "" "You can click here" "ここをクリックしてください 。" -#: options/theme-options.php:2072 options/theme-options.php:2078 +#: options/theme-options.php:2075 options/theme-options.php:2081 msgid "Bulletin Board" msgstr "掲示板" -#: options/theme-options.php:2079 +#: options/theme-options.php:2082 msgid "When enabled the bulletin board will be displayed below the front cover" msgstr "有効にすると、掲示板が表紙の下に表示されます" -#: options/theme-options.php:2086 +#: options/theme-options.php:2089 msgid "Bulletin Board Style" msgstr "掲示板スタイル" -#: options/theme-options.php:2089 +#: options/theme-options.php:2092 msgid "Picture Background" msgstr "画像の背景" -#: options/theme-options.php:2090 +#: options/theme-options.php:2093 msgid "Color Background" msgstr "色の背景" -#: options/theme-options.php:2098 +#: options/theme-options.php:2101 msgid "Bulletin Board \"Notice\" Icon" msgstr "掲示板の「お知らせ」アイコン" -#: options/theme-options.php:2100 +#: options/theme-options.php:2103 msgid "" "The \"Notice\" icon will be displayed on the left side of the announcement " "bar" msgstr "「お知らせ」アイコンがアナウンスバーの左側に表示されます" -#: options/theme-options.php:2107 +#: options/theme-options.php:2110 msgid "Bulletin Board Background" msgstr "掲示板の背景" -#: options/theme-options.php:2112 +#: options/theme-options.php:2115 msgid "Best width 820px, best height 67px" msgstr "最高の幅820px、最高の高さ67px" -#: options/theme-options.php:2120 +#: options/theme-options.php:2123 msgid "Bulletin Board Border Color" msgstr "掲示板のボーダー色" -#: options/theme-options.php:2125 +#: options/theme-options.php:2128 msgid "" "Customize the colors, it is recommended to use a light color that " "corresponds with the theme color" msgstr "" "色をカスタマイズし、テーマの色に対応する明るい色を使用することをお勧めします" -#: options/theme-options.php:2132 +#: options/theme-options.php:2135 msgid "Bulletin Board Text" msgstr "掲示板のテキスト" -#: options/theme-options.php:2134 +#: options/theme-options.php:2137 msgid "Fill in the announcement text, the text beyond 142 bytes will be hidden" msgstr "" "アナウンステキストを入力すると、142 バイトを超えるテキストが非表示になります" -#: options/theme-options.php:2140 +#: options/theme-options.php:2143 msgid "Bulletin Board Alignment" msgstr "掲示板のアライメント" -#: options/theme-options.php:2153 +#: options/theme-options.php:2156 msgid "Bulletin Board Text Color" msgstr "掲示板のテキストの色" -#: options/theme-options.php:2155 options/theme-options.php:2243 -#: options/theme-options.php:2439 options/theme-options.php:2675 -#: options/theme-options.php:2945 options/theme-options.php:2953 -#: options/theme-options.php:3028 options/theme-options.php:3036 +#: options/theme-options.php:2158 options/theme-options.php:2246 +#: options/theme-options.php:2442 options/theme-options.php:2678 +#: options/theme-options.php:2948 options/theme-options.php:2956 +#: options/theme-options.php:3036 options/theme-options.php:3044 msgid "" "Customize the colors, suggest using a corresponding color with the " "background color" msgstr "背景色に対応する色を使用して、色をカスタマイズする" -#: options/theme-options.php:2161 +#: options/theme-options.php:2164 msgid "Area Title" msgstr "エリアタイトル" -#: options/theme-options.php:2167 +#: options/theme-options.php:2170 msgid "Display Area Icon" msgstr "表示領域アイコン" -#: options/theme-options.php:2168 +#: options/theme-options.php:2171 msgid "" "Default is \"fa-solid fa-laptop\", You can check the FontAwesome Website to see the icons " @@ -2466,11 +2466,11 @@ msgstr "" "るために FontAwesome" "ウェブサイト をチェックすることができます" -#: options/theme-options.php:2175 +#: options/theme-options.php:2178 msgid "Display Area Title" msgstr "表示領域のタイトル" -#: options/theme-options.php:2176 +#: options/theme-options.php:2179 msgid "" "Default is \"Display\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" @@ -2478,11 +2478,11 @@ msgstr "" "デフォルトは「ディスプレイ」ですが、他の何かに変更できますが、もちろん広告と" "して使用することはできません!禁じられた!!!" -#: options/theme-options.php:2183 +#: options/theme-options.php:2186 msgid "Post Area Icon" msgstr "ポストエリアアイコン" -#: options/theme-options.php:2184 +#: options/theme-options.php:2187 msgid "" "Default is \"fa-regular fa-bookmark\", You can check the FontAwesome Website to see the icons " @@ -2492,11 +2492,11 @@ msgstr "" "を見るために FontAwesomeウェブサイト をチェックすることができます" -#: options/theme-options.php:2191 +#: options/theme-options.php:2194 msgid "Post Area Title" msgstr "ポストエリアタイトル" -#: options/theme-options.php:2192 +#: options/theme-options.php:2195 msgid "" "Default is \"Article\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" @@ -2504,19 +2504,19 @@ msgstr "" "デフォルトは「ディスプレイ」ですが、他の何かに変更できますが、もちろん広告と" "して使用することはできません!禁じられた!!!" -#: options/theme-options.php:2199 +#: options/theme-options.php:2202 msgid "Area Title Font" msgstr "エリア タイトル フォント" -#: options/theme-options.php:2207 +#: options/theme-options.php:2210 msgid "Area Title Alignment" msgstr "エリア タイトルの配置" -#: options/theme-options.php:2221 options/theme-options.php:2301 +#: options/theme-options.php:2224 options/theme-options.php:2304 msgid "Display Area Options" msgstr "表示領域オプション" -#: options/theme-options.php:2228 +#: options/theme-options.php:2231 msgid "" "You can click here to learn " @@ -2527,27 +2527,27 @@ msgstr "" "#%E5%B1%95%E7%A4%BA%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE\">ここをクリックして" "ください 。" -#: options/theme-options.php:2234 +#: options/theme-options.php:2237 msgid "Display Area" msgstr "表示領域" -#: options/theme-options.php:2235 +#: options/theme-options.php:2238 msgid "Enabled by default, display area is above article area" msgstr "デフォルトで有効に設定すると、表示領域は記事領域の上にあります" -#: options/theme-options.php:2242 +#: options/theme-options.php:2245 msgid "Display Area Matching Color" msgstr "表示領域マッチングカラー" -#: options/theme-options.php:2251 +#: options/theme-options.php:2254 msgid "Display Area Style" msgstr "表示領域スタイル" -#: options/theme-options.php:2263 +#: options/theme-options.php:2266 msgid "Display Area Compatibility Mode" msgstr "表示領域の互換モード" -#: options/theme-options.php:2268 +#: options/theme-options.php:2271 msgid "" "Enabled by default, this option avoids the problem of misaligned display " "areas" @@ -2555,51 +2555,51 @@ msgstr "" "デフォルトで有効になっている場合、このオプションを使用すると、表示領域の位置" "がずれる問題を回避できます。" -#: options/theme-options.php:2275 +#: options/theme-options.php:2278 msgid "Display Area Background Color" msgstr "表示領域の背景色" -#: options/theme-options.php:2287 +#: options/theme-options.php:2290 msgid "Display Area Rounded Corners" msgstr "表示領域丸いコーナー" -#: options/theme-options.php:2305 +#: options/theme-options.php:2308 msgid "First Display Area" msgstr "最初の表示領域" -#: options/theme-options.php:2310 options/theme-options.php:2336 -#: options/theme-options.php:2362 +#: options/theme-options.php:2313 options/theme-options.php:2339 +#: options/theme-options.php:2365 msgid "image" msgstr "画像" -#: options/theme-options.php:2311 options/theme-options.php:2337 -#: options/theme-options.php:2363 +#: options/theme-options.php:2314 options/theme-options.php:2340 +#: options/theme-options.php:2366 msgid "best width 260px, best height 160px" msgstr "最高の幅260px、最高の高さ160px" -#: options/theme-options.php:2316 options/theme-options.php:2342 -#: options/theme-options.php:2368 +#: options/theme-options.php:2319 options/theme-options.php:2345 +#: options/theme-options.php:2371 msgid "title" msgstr "タイトル" -#: options/theme-options.php:2321 options/theme-options.php:2347 -#: options/theme-options.php:2373 +#: options/theme-options.php:2324 options/theme-options.php:2350 +#: options/theme-options.php:2376 msgid "description" msgstr "説明" -#: options/theme-options.php:2331 +#: options/theme-options.php:2334 msgid "Second Display Area" msgstr "2 番目の表示領域" -#: options/theme-options.php:2357 +#: options/theme-options.php:2360 msgid "Third Display Area" msgstr "第3表示領域" -#: options/theme-options.php:2404 +#: options/theme-options.php:2407 msgid "Article Area Options" msgstr "アーティクルエリアオプション" -#: options/theme-options.php:2411 +#: options/theme-options.php:2414 msgid "" "You can click here to learn " @@ -2610,15 +2610,15 @@ msgstr "" "#%E6%96%87%E7%AB%A0%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE\">ここをクリックして" "ください 。" -#: options/theme-options.php:2417 +#: options/theme-options.php:2420 msgid "Article Area Display Style" msgstr "記事エリアの表示スタイル" -#: options/theme-options.php:2428 +#: options/theme-options.php:2431 msgid "Article Area Matching Color" msgstr "記事領域マッチングカラー" -#: options/theme-options.php:2430 +#: options/theme-options.php:2433 msgid "" "Customize the colors, This option only supports filling in hexadecimal " "colors, suggest the same as the matching color" @@ -2626,82 +2626,82 @@ msgstr "" "色をカスタマイズし、このオプションは16進色の塗りつぶしのみをサポートし、一致" "する色と同じことを提案します" -#: options/theme-options.php:2437 +#: options/theme-options.php:2440 msgid "Article Area Border Shadow Color" msgstr "記事領域の境界線の影の色" -#: options/theme-options.php:2446 +#: options/theme-options.php:2449 msgid "Article Area Featured Image Display Shapes" msgstr "記事エリアの注目画像表示図形" -#: options/theme-options.php:2448 +#: options/theme-options.php:2451 msgid "" "You can choose a circular or a rectangular display of the featured image" msgstr "" "あなたは、円形の表示または注目の画像で飾られた記事領域の長方形の表示の間で選" "択することができます" -#: options/theme-options.php:2459 +#: options/theme-options.php:2462 msgid "Article Area Featured Image Alignment" msgstr "記事エリアの注目画像配置" -#: options/theme-options.php:2461 +#: options/theme-options.php:2464 msgid "You can choose different directions to display the featured images" msgstr "" "あなたは、特色画像で飾られた記事エリアを表示するために、さまざまな方向を選択" "することができます" -#: options/theme-options.php:2473 +#: options/theme-options.php:2476 msgid "Article Area Featured Image Options" msgstr "アーティクルエリアの注目画像オプション" -#: options/theme-options.php:2475 +#: options/theme-options.php:2478 msgid "Cover Random Image" msgstr "ランダム画像をカバー" -#: options/theme-options.php:2476 +#: options/theme-options.php:2479 msgid "External API Random Image" msgstr "外部 API のランダム イメージ" -#: options/theme-options.php:2484 +#: options/theme-options.php:2487 msgid "Article Area Featured Image External API Random Image Address" msgstr "記事特集画像外部 API ランダムイメージアドレス" -#: options/theme-options.php:2494 +#: options/theme-options.php:2497 msgid "Article Area Title Font Size" msgstr "アーティクル領域のタイトルのフォント サイズ" -#: options/theme-options.php:2495 +#: options/theme-options.php:2498 msgid "Slide to adjust, the recommended value range is 16-20" msgstr "調整するスライド、推奨値の範囲は 16-20 です" -#: options/theme-options.php:2507 +#: options/theme-options.php:2510 msgid "Article Area Time Display Area Font Size" msgstr "アーティクルエリア時刻表示領域のフォントサイズ" -#: options/theme-options.php:2509 +#: options/theme-options.php:2512 msgid "Slide to adjust, the recommended values range is 10-14" msgstr "スライドして調整し、推奨値の範囲は 10 ~ 14" -#: options/theme-options.php:2520 +#: options/theme-options.php:2523 msgid "Article Area Author Info" msgstr "記事エリア作成者情報" -#: options/theme-options.php:2521 +#: options/theme-options.php:2524 msgid "" "When turned on, author information will be added to the article metadata " "section." msgstr "オンにすると、作成者情報が記事のメタデータ セクションに追加されます。" -#: options/theme-options.php:2530 +#: options/theme-options.php:2533 msgid "Page Options" msgstr "ページオプション" -#: options/theme-options.php:2536 +#: options/theme-options.php:2539 msgid "Common Options" msgstr "一般的なオプション" -#: options/theme-options.php:2543 +#: options/theme-options.php:2546 msgid "" "You can click here to learn how to set the " @@ -2711,27 +2711,27 @@ msgstr "" "fuukei.org/Sakurairo/Pages/#%E7%BB%BC%E5%90%88%E8%AE%BE%E7%BD%AE\">ここをク" "リックしてください 。" -#: options/theme-options.php:2549 +#: options/theme-options.php:2552 msgid "Page Style" msgstr "ページスタイル" -#: options/theme-options.php:2560 +#: options/theme-options.php:2563 msgid "Page Layout Style" msgstr "固定ページレイアウトスタイル" -#: options/theme-options.php:2562 +#: options/theme-options.php:2565 msgid "Default Style" msgstr "既定のスタイル" -#: options/theme-options.php:2563 +#: options/theme-options.php:2566 msgid "Github Style" msgstr "ギトハブスタイル" -#: options/theme-options.php:2571 +#: options/theme-options.php:2574 msgid "Page Decoration Image" msgstr "ページ装飾イメージ" -#: options/theme-options.php:2572 +#: options/theme-options.php:2575 msgid "" "Enabled by default, show on article pages, standalone pages and category " "pages" @@ -2739,28 +2739,28 @@ msgstr "" "既定で有効に設定されている、記事ページ、スタンドアロン ページ、カテゴリ ペー" "ジに表示する" -#: options/theme-options.php:2579 +#: options/theme-options.php:2582 msgid "Page Title Animation" msgstr "ページ タイトル アニメーション" -#: options/theme-options.php:2580 +#: options/theme-options.php:2583 msgid "Page title will have float-in animation when turned on" msgstr "" "オンにすると、ページ タイトルにフロートイン アニメーションが表示されます。" -#: options/theme-options.php:2587 +#: options/theme-options.php:2590 msgid "Page Title Animation Time" msgstr "ページ タイトル アニメーション時間" -#: options/theme-options.php:2589 +#: options/theme-options.php:2592 msgid "Slide to adjust, recommended value range is 1-2" msgstr "調整するスライド、推奨値の範囲は1-2" -#: options/theme-options.php:2599 +#: options/theme-options.php:2602 msgid "Page Clipboard Copyright Notice" msgstr "ページクリップボードの著作権情報" -#: options/theme-options.php:2600 +#: options/theme-options.php:2603 msgid "" "Enabled by default, users will have copyright notice text when copying text " "content over 30 bytes" @@ -2768,11 +2768,11 @@ msgstr "" "デフォルトで有効に設定すると、30 バイトを超えるテキストコンテンツをコピーする" "際に、ユーザーは著作権情報のテキストを表示します。" -#: options/theme-options.php:2607 +#: options/theme-options.php:2610 msgid "Page LazyLoad" msgstr "ページ遅延読み込み" -#: options/theme-options.php:2608 +#: options/theme-options.php:2611 msgid "" "LazyLoad effect for page images, WordPress block editor already comes with " "similar effect, not recommended to turn on" @@ -2780,11 +2780,11 @@ msgstr "" "ページ画像のレイジーロード効果は、WordPressブロックエディタは、すでに同様の効" "果が付属しています、 オンにすることはお勧めしません" -#: options/theme-options.php:2615 +#: options/theme-options.php:2618 msgid "Page LazyLoad Placeholder SVG" msgstr "ページレイジーロードプレースホルダSVG" -#: options/theme-options.php:2617 +#: options/theme-options.php:2620 msgid "" "Fill in the address, this is the placeholder image that will be displayed " "when the page LazyLoad is being loaded" @@ -2792,11 +2792,11 @@ msgstr "" "アドレスを入力すると、これはページ LazyLoad が読み込まれるときに表示されるプ" "レースホルダイメージです。" -#: options/theme-options.php:2624 +#: options/theme-options.php:2627 msgid "Page Image Placeholder SVG" msgstr "ページイメージ読み込みプレースホルダ SVG" -#: options/theme-options.php:2625 +#: options/theme-options.php:2628 msgid "" "Fill address, this is the SVG that will be displayed as a placeholder when " "the page image is being loaded" @@ -2804,11 +2804,11 @@ msgstr "" "塗りつぶしアドレス、これはページ画像がロードされたときにプレースホルダとして" "表示されるSVGです" -#: options/theme-options.php:2634 +#: options/theme-options.php:2637 msgid "Article Page Options" msgstr "アーティクル ページのオプション" -#: options/theme-options.php:2641 +#: options/theme-options.php:2644 msgid "" "You can click here to learn " @@ -2819,11 +2819,11 @@ msgstr "" "#%E6%96%87%E7%AB%A0%E9%A1%B5%E9%9D%A2%E8%AE%BE%E7%BD%AE\">ここをクリックして" "ください 。" -#: options/theme-options.php:2647 +#: options/theme-options.php:2650 msgid "Article Page Title Font Size" msgstr "記事ページタイトルフォントサイズ" -#: options/theme-options.php:2648 +#: options/theme-options.php:2651 msgid "" "Slide to adjust, recommended value range is 28-36. This option is only " "available for article pages that have a featured image set" @@ -2831,11 +2831,11 @@ msgstr "" "調整するスライド、推奨値の範囲は 28 -36 です。このオプションは、注目の画像" "セットを持つ記事ページでのみ使用できます。" -#: options/theme-options.php:2658 +#: options/theme-options.php:2661 msgid "Article Page Title Underline Animation" msgstr "記事ページタイトル下線アニメーション" -#: options/theme-options.php:2659 +#: options/theme-options.php:2662 msgid "" "Article title will have underline animation when this is enabled and article " "has a featured image set" @@ -2843,11 +2843,11 @@ msgstr "" "これが有効で、記事に注目の画像セットがある場合、記事のタイトルには下線のアニ" "メーションが表示されます。" -#: options/theme-options.php:2666 +#: options/theme-options.php:2669 msgid "Article Page Auto Show Menu" msgstr "アーティクルページの自動表示メニュー" -#: options/theme-options.php:2667 +#: options/theme-options.php:2670 msgid "" "Enabled by default, the article page will automatically show the menu. PHP " "extension \"DOM\" is required for this feature." @@ -2855,15 +2855,15 @@ msgstr "" "デフォルトで有効にすると、記事ページは自動的にメニューを表示します。この機能" "にはPHP拡張機能 \"DOM \"が必要です。" -#: options/theme-options.php:2674 +#: options/theme-options.php:2677 msgid "Inline Code Background Color" msgstr "インラインコードの背景色" -#: options/theme-options.php:2682 +#: options/theme-options.php:2685 msgid "Inline Code Background Color In Dark Mode" msgstr "ダークモードでのインラインコードの背景色" -#: options/theme-options.php:2683 +#: options/theme-options.php:2686 msgid "" "Customize the colors, suggest using a corresponding color with the " "background color,this color is only displayed in dark mode" @@ -2871,15 +2871,15 @@ msgstr "" "色をカスタマイズし、背景色に対応する色を使用することを提案し、この色はダーク" "モードでのみ表示されます" -#: options/theme-options.php:2689 +#: options/theme-options.php:2692 msgid "Article Expansion Area" msgstr "記事拡張エリア" -#: options/theme-options.php:2695 +#: options/theme-options.php:2698 msgid "Article Page Function Bar" msgstr "記事ページの機能バー" -#: options/theme-options.php:2696 +#: options/theme-options.php:2699 msgid "" "Enabled by default, will be displayed on the article page with the features " "enabled below" @@ -2887,89 +2887,89 @@ msgstr "" "デフォルトで有効になっており、以下の機能が有効になっている状態で記事ページに" "表示されます" -#: options/theme-options.php:2703 +#: options/theme-options.php:2706 msgid "Article Lincenses" msgstr "記事のリンセンス" -#: options/theme-options.php:2705 +#: options/theme-options.php:2708 msgid "Enabled by default, Article lincenses will appear on the function bar" msgstr "有効にすると、記事のリンセンスが機能バーに表示されます" -#: options/theme-options.php:2712 +#: options/theme-options.php:2715 msgid "Article Page Appreciation Function (Alipay QR Code)" msgstr "記事ページ鑑賞機能(アリペイQRコード)" -#: options/theme-options.php:2714 +#: options/theme-options.php:2717 msgid "Upload Alipay Receipt QR Code Image" msgstr "アップロード アリペイレシート QR コードイメージ" -#: options/theme-options.php:2721 +#: options/theme-options.php:2724 msgid "Article Page Appreciation Function (Wechat QR Code)" msgstr "記事ページ鑑賞機能(微信QRコード)" -#: options/theme-options.php:2723 +#: options/theme-options.php:2726 msgid "Upload WeChat Receipt QR Code Image" msgstr "WeChatの領収書QRコード画像をアップロード" -#: options/theme-options.php:2730 +#: options/theme-options.php:2733 msgid "Article Page Author Avatar" msgstr "記事ページ作成者アバター" -#: options/theme-options.php:2732 +#: options/theme-options.php:2735 msgid "Enabled by default, Author avatar will appear on the function bar" msgstr "有効にすると、作成者のアバターが機能バーに表示されます" -#: options/theme-options.php:2739 +#: options/theme-options.php:2742 msgid "Article Page Author Name" msgstr "記事ページの著者名" -#: options/theme-options.php:2741 +#: options/theme-options.php:2744 msgid "Author name will appear on the function bar when enabled" msgstr "有効にすると、作成者名が機能バーに表示されます" -#: options/theme-options.php:2748 +#: options/theme-options.php:2751 msgid "Article Page Author Signature" msgstr "記事ページの作成者の署名" -#: options/theme-options.php:2750 +#: options/theme-options.php:2753 msgid "Enabled by default, Author signature will appear on the function bar" msgstr "有効にすると、作成者の署名が機能バーに表示されます" -#: options/theme-options.php:2757 +#: options/theme-options.php:2760 msgid "Article Page Author Info Signature Text" msgstr "記事ページの作成者情報署名テキスト" -#: options/theme-options.php:2769 +#: options/theme-options.php:2772 msgid "Article Last Update Time" msgstr "記事の最終更新日時" -#: options/theme-options.php:2771 +#: options/theme-options.php:2774 msgid "Article last update time will appear on the function bar when enabled" msgstr "有効にすると、記事の最終更新日時が機能バーに表示されます" -#: options/theme-options.php:2778 +#: options/theme-options.php:2781 msgid "Article Tag" msgstr "記事のタグ" -#: options/theme-options.php:2780 +#: options/theme-options.php:2783 msgid "Enabled by default, Article tag will appear on the function bar" msgstr "記事タグを有効にすると、機能バーに表示されます" -#: options/theme-options.php:2787 +#: options/theme-options.php:2790 msgid "Article Page Prev/Next Article Switcher" msgstr "記事ページ前/次の記事スイッチャー" -#: options/theme-options.php:2788 +#: options/theme-options.php:2791 msgid "" "Enabled by default, the previous and next article switch will appear on the " "article pages" msgstr "記事ページをオンにすると、前の記事と次の記事の切り替えが表示されます" -#: options/theme-options.php:2797 +#: options/theme-options.php:2800 msgid "Template Page Options" msgstr "テンプレート ページのオプション" -#: options/theme-options.php:2804 +#: options/theme-options.php:2807 msgid "" "You can click here to learn " @@ -2980,15 +2980,15 @@ msgstr "" "#%E6%A8%A1%E6%9D%BF%E9%A1%B5%E9%9D%A2%E8%AE%BE%E7%BD%AE\">ここをクリックして" "ください 。" -#: options/theme-options.php:2809 +#: options/theme-options.php:2812 msgid "Public Settings" msgstr "共用設定" -#: options/theme-options.php:2815 +#: options/theme-options.php:2818 msgid "Template Page Title Font Size" msgstr "テンプレート ページ タイトルのフォント サイズ" -#: options/theme-options.php:2816 +#: options/theme-options.php:2819 msgid "" "Slide to adjust, recommended value range is 36-48. This option is only " "available for template pages with featured images already set" @@ -2996,36 +2996,36 @@ msgstr "" "調整するスライド、推奨値の範囲は 36 から 48 です。このオプションは、既に設定" "されている注目の画像を含むテンプレートページでのみ使用できます。" -#: options/theme-options.php:2825 +#: options/theme-options.php:2828 msgid "ShuoShuo Template Settings" msgstr "アイデアテンプレート設定" -#: options/theme-options.php:2831 +#: options/theme-options.php:2834 msgid "Ideas Template Background ColorⅠ" msgstr "アイデアテンプレート背景色I" -#: options/theme-options.php:2839 +#: options/theme-options.php:2842 msgid "Ideas Template Background Color II" msgstr "アイデアテンプレート背景色II" -#: options/theme-options.php:2847 +#: options/theme-options.php:2850 msgid "Ideas Template Tip Arrow" msgstr "アイデア テンプレート ヒント矢印" -#: options/theme-options.php:2848 +#: options/theme-options.php:2851 msgid "" "After turning on the alert arrow will appear on the left side of the comment" msgstr "警告矢印をオンにすると、コメントの左側に表示されます" -#: options/theme-options.php:2855 +#: options/theme-options.php:2858 msgid "Ideas Template Font" msgstr "アイデアテンプレートフォント" -#: options/theme-options.php:2863 +#: options/theme-options.php:2866 msgid "Number Of ShuoShuo" msgstr "アイデア表示件数" -#: options/theme-options.php:2864 +#: options/theme-options.php:2867 msgid "" "Enter a positive integer or \"-1\" to control the number of ShuoShuo " "displayed on each page. Enter \"-1\" to display all messages." @@ -3033,43 +3033,43 @@ msgstr "" "正の整数または\"-1 \"を入力すると、各ページに表示される朔望の数を制御できま" "す。すべてのメッセージを表示する場合は、\"-1 \"を入力してください。" -#: options/theme-options.php:2870 +#: options/theme-options.php:2873 msgid "Bangumi Template Settings" msgstr "バングミテンプレート設定" -#: options/theme-options.php:2876 +#: options/theme-options.php:2879 msgid "Bangumi Template Source" msgstr "バングミテンプレートソース" -#: options/theme-options.php:2887 +#: options/theme-options.php:2890 msgid "My Anime List Username" msgstr "マイアニメリストのユーザー名" -#: options/theme-options.php:2889 +#: options/theme-options.php:2892 msgid "Username on https://myanimelist.net/" msgstr "https://myanimelist.net/ のユーザー名" -#: options/theme-options.php:2896 +#: options/theme-options.php:2899 msgid "My Anime List Sort" msgstr "私のアニメリストソート" -#: options/theme-options.php:2899 +#: options/theme-options.php:2902 msgid "Status and Last Updated" msgstr "ステータスと最終更新日" -#: options/theme-options.php:2900 +#: options/theme-options.php:2903 msgid "Last Updated" msgstr "最終更新" -#: options/theme-options.php:2901 +#: options/theme-options.php:2904 msgid "Status" msgstr "ステータス" -#: options/theme-options.php:2909 +#: options/theme-options.php:2912 msgid "Bilibili Account UID" msgstr "Bilibili Account UID" -#: options/theme-options.php:2910 +#: options/theme-options.php:2913 msgid "" "Fill in your account ID, e.g. https://space.bilibili.com/13972644/, just the " "number part \"13972644\"" @@ -3077,11 +3077,11 @@ msgstr "" "アカウント ID (例 https://space.bilibili.com/13972644/)を記入し、番号部分 " "「13972644」" -#: options/theme-options.php:2918 +#: options/theme-options.php:2921 msgid "Bilibili Account Cookies" msgstr "Bilibili Account Cookies" -#: options/theme-options.php:2919 +#: options/theme-options.php:2922 msgid "" "Fill in your account cookies, F12 to open your browser web panel, go to your " "bilibili homepage to get cookies. If left empty, it will not show the " @@ -3091,81 +3091,81 @@ msgstr "" "ムページにアクセスしてクッキーを取得します。空のままにした場合、バングミを追" "いつぶの進行状況は表示されません" -#: options/theme-options.php:2926 +#: options/theme-options.php:2929 msgid "Friend Link Template Settings" msgstr "フレンドリンクテンプレート設定" -#: options/theme-options.php:2932 +#: options/theme-options.php:2935 msgid "Friend Link Template Unit Alignment" msgstr "フレンドリンクテンプレート ユニットの配置" -#: options/theme-options.php:2944 +#: options/theme-options.php:2947 msgid "Friend Link Template Unit Matching Color" msgstr "フレンドリンクテンプレートユニットマッチングカラー" -#: options/theme-options.php:2952 +#: options/theme-options.php:2955 msgid "Friend Link Template Unit Border Shadow Color" msgstr "フレンドリンクテンプレートユニットボーダーシャドウカラー" -#: options/theme-options.php:2960 +#: options/theme-options.php:2963 msgid "Friend Link Sorting Mode" msgstr "フレンドリンクソートモード" -#: options/theme-options.php:2961 +#: options/theme-options.php:2964 msgid "Select the friend link sorting mode, \"Name\" is used by Default." msgstr "" "フレンドリンクのソートモードを選択すると、デフォルトで「名前」が使用されま" "す。" -#: options/theme-options.php:2963 +#: options/theme-options.php:2966 msgid "Name" msgstr "名前" -#: options/theme-options.php:2964 +#: options/theme-options.php:2967 msgid "Rating" msgstr "レーティング" -#: options/theme-options.php:2965 +#: options/theme-options.php:2968 msgid "Updated" msgstr "最終更新" -#: options/theme-options.php:2966 +#: options/theme-options.php:2969 msgid "Rand" msgstr "ランダム" -#: options/theme-options.php:2974 +#: options/theme-options.php:2977 msgid "Ascending OR Descending" msgstr "昇順または降順" -#: options/theme-options.php:2975 +#: options/theme-options.php:2978 msgid "Order friend link in ascending or descending." msgstr "友達リンクを昇順または降順で並べ替えます。" -#: options/theme-options.php:2978 +#: options/theme-options.php:2981 msgid "Ascending" msgstr "昇順" -#: options/theme-options.php:2979 +#: options/theme-options.php:2982 msgid "Descending" msgstr "降順" -#: options/theme-options.php:2986 +#: options/theme-options.php:2989 msgid "Login Template Settings" msgstr "ログインテンプレート設定" -#: options/theme-options.php:2992 +#: options/theme-options.php:2995 msgid "Login Template Registration Function" msgstr "ログインテンプレート登録機能" -#: options/theme-options.php:2993 +#: options/theme-options.php:2996 msgid "Login template will allow registration when enabled" msgstr "ログインテンプレートは、有効にした場合に登録を許可します" -#: options/theme-options.php:3002 +#: options/theme-options.php:3005 msgid "Comment-related Options" msgstr "コメント関連のオプション" -#: options/theme-options.php:3009 +#: options/theme-options.php:3012 msgid "" "You can click here to learn " @@ -3176,38 +3176,34 @@ msgstr "" "#%E8%AF%84%E8%AE%BA%E7%9B%B8%E5%85%B3%E8%AE%BE%E7%BD%AE\">ここをクリックして" "ください 。" -#: options/theme-options.php:3015 +#: options/theme-options.php:3017 +msgid "Comment Area Style" +msgstr "コメントエリアのスタイル" + +#: options/theme-options.php:3023 msgid "Page Comment Area Display" msgstr "ページコメントエリア表示" -#: options/theme-options.php:3016 +#: options/theme-options.php:3024 msgid "You can choose to expand or shirink the content of the comment area" msgstr "コメント領域のコンテンツを展開または非表示にすることを選択できます" -#: options/theme-options.php:3018 +#: options/theme-options.php:3026 msgid "Expand" msgstr "拡張" -#: options/theme-options.php:3019 +#: options/theme-options.php:3027 msgid "Shrink" msgstr "縮める" -#: options/theme-options.php:3027 +#: options/theme-options.php:3035 msgid "Page Comment Area Matching Color" msgstr "色に一致するページコメント領域" -#: options/theme-options.php:3035 +#: options/theme-options.php:3043 msgid "Page Comment Area Shadow Color" msgstr "ページコメント領域の影の色" -#: options/theme-options.php:3043 -msgid "Page Comment Area Bilibili Emoji Pack" -msgstr "ページコメントエリアビリビリ絵文字パック" - -#: options/theme-options.php:3044 -msgid "Default on, bilibili emotions are displayed below the comment box" -msgstr "デフォルトでは、ビリビリビの感情はコメントボックスの下に表示されます" - #: options/theme-options.php:3051 msgid "Page Comment Area Bottom Right Background Image" msgstr "ページコメント領域右下背景画像" @@ -3218,11 +3214,69 @@ msgid "" msgstr "" "このオプションが空白の場合、画像はなく、ここでは最善の推奨事項はありません" -#: options/theme-options.php:3059 +#: options/theme-options.php:3058 +msgid "Comment Area Function" +msgstr "コメントエリアの機能" + +#: options/theme-options.php:3064 +msgid "Comment Area Emoticon" +msgstr "コメントエリアの絵文字" + +#: options/theme-options.php:3065 +msgid "" +"Select the emoticons to be displayed in the comment area input box. Uncheck " +"all to turn off the comment input box emoticon function." +msgstr "" +"コメントエリアの入力ボックスに表示する顔文字を選択します。すべてのチェックを" +"外すと、コメント入力ボックスの顔文字機能がオフになります。" + +#: options/theme-options.php:3079 +msgid "Customized Emoticon Column Name" +msgstr "カスタマイズ顔文字コラム名" + +#: options/theme-options.php:3080 +msgid "" +"It is recommended to enter less than 4 Chinese characters in length to avoid " +"causing compatibility issues on mobile terminals." +msgstr "" +"携帯端末での互換性の問題を避けるため、漢字の長さは4文字未満で入力することを推" +"奨する。" + +#: options/theme-options.php:3088 +msgid "Path To Custom Expression" +msgstr "カスタム式へのパス" + +#: options/theme-options.php:3089 +msgid "" +"Click here updating emoticon list. Specific usage reference: " +"Comment related settings" +msgstr "" +"顔文字一覧の更新は こちら。具体的な使い方の参考:" +"コメント関連設定" + +#: options/theme-options.php:3096 +msgid "Custom Emoticon Proxy Address" +msgstr "カスタム顔文字プロキシアドレス" + +#: options/theme-options.php:3097 +msgid "" +"Fill in the CDN address of the emoticon image. If left blank, the CDN proxy " +"function will not be enabled." +msgstr "" +"顔文字画像のCDNアドレスを入力します。空欄の場合、CDNプロキシ機能は有効になり" +"ません。" + +#: options/theme-options.php:3107 msgid "Page Comment Area UA Info" msgstr "ページコメントエリア UA 情報" -#: options/theme-options.php:3060 +#: options/theme-options.php:3108 msgid "" "When enabled, the page comment area will display the user’s browser, " "operating system information" @@ -3230,20 +3284,20 @@ msgstr "" "有効にすると、ページコメント領域にユーザーのブラウザ、オペレーティング システ" "ムの情報が表示されます。" -#: options/theme-options.php:3067 +#: options/theme-options.php:3115 msgid "Page Comment Area Location Information" msgstr "ページコメントエリアの位置情報" -#: options/theme-options.php:3068 +#: options/theme-options.php:3116 msgid "" "When enabled, the page comment area will show the user’s location information" msgstr "有効にすると、ページコメント領域にユーザーの位置情報が表示されます。" -#: options/theme-options.php:3075 +#: options/theme-options.php:3123 msgid "Private Comment Function" msgstr "プライベートコメント機能" -#: options/theme-options.php:3076 +#: options/theme-options.php:3124 msgid "" "When enabled, users are allowed to set their comments to be invisible to " "others" @@ -3251,40 +3305,40 @@ msgstr "" "有効にすると、ユーザーはコメントを他のユーザーに表示できないように設定できま" "す。" -#: options/theme-options.php:3083 +#: options/theme-options.php:3131 msgid "Page Comment Area Bot Verification" msgstr "ページコメントエリアボットの検証" -#: options/theme-options.php:3084 +#: options/theme-options.php:3132 msgid "After turning on user comments need to be verified before posting" msgstr "ユーザーコメントをオンにした後、投稿する前に確認する必要があります" -#: options/theme-options.php:3091 +#: options/theme-options.php:3139 msgid "QQ Avatar Link Encryption" msgstr "QQアバターリンクの暗号化" -#: options/theme-options.php:3094 +#: options/theme-options.php:3142 msgid "Redirect (low security)" msgstr "リダイレクト (低セキュリティ)" -#: options/theme-options.php:3095 +#: options/theme-options.php:3143 msgid "Get avatar data in the backend (medium security)" msgstr "バックエンドでアバターデータを取得する(中程度のセキュリティ)" -#: options/theme-options.php:3096 +#: options/theme-options.php:3144 msgid "Parse avatar interface in the backend (high security, slow)" msgstr "" "バックエンドでアバターインターフェイスを解析する(高いセキュリティ、遅い)" -#: options/theme-options.php:3104 +#: options/theme-options.php:3152 msgid "Page Comment Area Upload Image Interface" msgstr "ページコメントエリアアップロード画像インタフェース" -#: options/theme-options.php:3118 +#: options/theme-options.php:3166 msgid "Imgur Client ID" msgstr "Imgur クライアント ID" -#: options/theme-options.php:3120 +#: options/theme-options.php:3168 msgid "" "Fill in Client ID here, to register please visit https://api.imgur.com/" "oauth2/addclient" @@ -3292,11 +3346,11 @@ msgstr "" "クライアントIDをここに記入し、登録するには https://api.imgur.com/oauth2/" "addclient" -#: options/theme-options.php:3126 +#: options/theme-options.php:3174 msgid "Imgur Upload Proxy" msgstr "Imgur アップロード プロキシ" -#: options/theme-options.php:3128 +#: options/theme-options.php:3176 msgid "" "The proxy used by the backend when uploading images to Imgur. You can refer " "to the tutorial: https://2heng.xin/2018/06/06/javascript-upload-images-with-" @@ -3306,21 +3360,21 @@ msgstr "" "チュートリアルを参照できます https://2heng.xin/2018/06/06/javascript-upload-" "images-with-imgur-api/。" -#: options/theme-options.php:3135 +#: options/theme-options.php:3183 msgid "SM.MS Secret Token" msgstr "SM.MS シークレットトークン" -#: options/theme-options.php:3137 +#: options/theme-options.php:3185 msgid "" "Fill in your Key here, to get it please visit https://sm.ms/home/apitoken" msgstr "" "鍵をここに記入してください、それを得るためには https://sm.ms/home/apitoken" -#: options/theme-options.php:3143 +#: options/theme-options.php:3191 msgid "Chevereto API v1 Key" msgstr "チェベレト API v1 キー" -#: options/theme-options.php:3145 +#: options/theme-options.php:3193 msgid "" "Fill in the Key here, to get please visit your Chevereto home page address/" "dashboard/settings/api" @@ -3328,11 +3382,11 @@ msgstr "" "ここにキーを記入してください、取得するためにあなたのChhereetoホームページアド" "レス/ダッシュボード/設定/APIをご覧ください" -#: options/theme-options.php:3151 +#: options/theme-options.php:3199 msgid "Chevereto Address" msgstr "チェヴェレトアドレス" -#: options/theme-options.php:3153 +#: options/theme-options.php:3201 msgid "" "Your Chevereto home page address. Please note that there is no \"/\" at the " "end, e.g. https://your.cherverto.com" @@ -3340,11 +3394,11 @@ msgstr "" "あなたのチェベレトのホームページのアドレス。最後に「/」は存在しませんので、" "https://your.cherverto.com" -#: options/theme-options.php:3159 +#: options/theme-options.php:3207 msgid "Lsky Pro v1 Token" msgstr "Lsky Pro v1トークン" -#: options/theme-options.php:3161 +#: options/theme-options.php:3209 msgid "" "Fill in the Token here, Please note that there is no \"Bearer \" at first, " "to get please visit your Lsky Pro home page address/api" @@ -3352,11 +3406,11 @@ msgstr "" "ここにトークンを記入してください、最初は \"ベアラー\"がないことに注意してくだ" "さい、あなたのLsky Proホームページのアドレス/ APIにアクセスしてください" -#: options/theme-options.php:3167 +#: options/theme-options.php:3215 msgid "Lsky Pro Address" msgstr "Lsky Proアドレス" -#: options/theme-options.php:3169 +#: options/theme-options.php:3217 msgid "" "Your Lsky Pro home page address. Please note that there is no \"/\" at the " "end, e.g. https://your.lskypro.com" @@ -3364,27 +3418,31 @@ msgstr "" "Lsky Proのホームページアドレス。末尾に「/」はありませんのでご注意くださ " "https://your.lskypro.com" -#: options/theme-options.php:3175 +#: options/theme-options.php:3223 msgid "Comment Image Proxy" msgstr "コメントイメージプロキシ" -#: options/theme-options.php:3176 +#: options/theme-options.php:3224 msgid "Proxy for the image displayed on the frontend" msgstr "フロントエンドに表示されるイメージのプロキシ" -#: options/theme-options.php:3183 +#: options/theme-options.php:3231 +msgid "Comment Email Notification" +msgstr "コメントメール通知" + +#: options/theme-options.php:3237 msgid "Mail Template Featured Image" msgstr "メール テンプレートの注目画像" -#: options/theme-options.php:3184 +#: options/theme-options.php:3238 msgid "Set the background image of your reply email" msgstr "返信メールの背景画像を設定する" -#: options/theme-options.php:3192 +#: options/theme-options.php:3246 msgid "Mail Template Sending Address Prefix" msgstr "メール テンプレート送信アドレス プレフィックス" -#: options/theme-options.php:3193 +#: options/theme-options.php:3247 msgid "" "Used to send system mail. The sender address will be displayed in the user's " "mailbox, don't use Non-English Characters. The default system mail address " @@ -3394,11 +3452,11 @@ msgstr "" "クスに表示され、英語以外の文字は使用されません。デフォルトのシステムメールア" "ドレスはドメインbibi@your" -#: options/theme-options.php:3200 +#: options/theme-options.php:3254 msgid "User Mail Reply Notification" msgstr "ユーザー メール返信通知" -#: options/theme-options.php:3201 +#: options/theme-options.php:3255 msgid "" "By default WordPress will use email notifications to notify users when their " "comments receive a reply. After turning it on users are allowed to set " @@ -3408,26 +3466,26 @@ msgstr "" "たときにユーザーに通知します。オンにすると、コメントが返信を受け取ったときに" "電子メール通知を使用するかどうかをユーザーが設定できます" -#: options/theme-options.php:3208 +#: options/theme-options.php:3262 msgid "Admin Email Reply Notification" msgstr "管理者の電子メール返信通知" -#: options/theme-options.php:3209 +#: options/theme-options.php:3263 msgid "" "Use email notifications when admin comments receive a reply after turning it " "on" msgstr "" "管理者のコメントがオンにした後に返信を受信したときに電子メール通知を使用する" -#: options/theme-options.php:3218 +#: options/theme-options.php:3272 msgid "Other Options" msgstr "その他のオプション" -#: options/theme-options.php:3224 +#: options/theme-options.php:3278 msgid "Login Screen and Dashboard Related Options" msgstr "ログイン画面とダッシュボード関連のオプション" -#: options/theme-options.php:3231 +#: options/theme-options.php:3285 msgid "" "You can click here" "ここをクリックしてください 。" -#: options/theme-options.php:3236 +#: options/theme-options.php:3290 msgid "Login Screen" msgstr "ログイン画面のロゴ" -#: options/theme-options.php:3242 +#: options/theme-options.php:3296 msgid "Custom Login Screen" msgstr "カスタムログイン画面" -#: options/theme-options.php:3243 +#: options/theme-options.php:3297 msgid "Default on, custom login screen will replace the default login screen" msgstr "" "デフォルトでオン、カスタムログイン画面がデフォルトのログイン画面を置き換えま" "す" -#: options/theme-options.php:3250 +#: options/theme-options.php:3304 msgid "Login Screen Background Image" msgstr "ログイン画面背景画像" -#: options/theme-options.php:3251 +#: options/theme-options.php:3305 msgid "" "Set your login screen background image, leave this option blank to show the " "default" @@ -3464,49 +3522,49 @@ msgstr "" "ログイン画面の背景画像を設定し、このオプションを空白のままにしてデフォルトを" "表示します。" -#: options/theme-options.php:3260 +#: options/theme-options.php:3314 msgid "Login Screen Background Blur" msgstr "ログイン画面背景ぼかし" -#: options/theme-options.php:3261 +#: options/theme-options.php:3315 msgid "Login screen background image will be blurred when enabled" msgstr "ログイン画面の背景画像が有効になるとぼやける" -#: options/theme-options.php:3269 +#: options/theme-options.php:3323 msgid "Login Screen Logo" msgstr "ログイン画面のロゴ" -#: options/theme-options.php:3270 +#: options/theme-options.php:3324 msgid "Set your login screen Logo" msgstr "ログイン画面のロゴを設定する" -#: options/theme-options.php:3279 +#: options/theme-options.php:3333 msgid "Jump after login" msgstr "ログイン後にジャンプ" -#: options/theme-options.php:3280 +#: options/theme-options.php:3334 msgid "Jump to backend for admins and home for users after turning on." msgstr "" "電源を入れた後、管理者の場合はバックエンドに、ユーザーの場合はホームにジャン" "プします。" -#: options/theme-options.php:3287 +#: options/theme-options.php:3341 msgid "Login Screen Language Option" msgstr "ログイン画面の言語オプション" -#: options/theme-options.php:3288 +#: options/theme-options.php:3342 msgid "Login screen language option will be display when enabled" msgstr "ログイン画面の言語オプションを有効にすると表示されます" -#: options/theme-options.php:3294 +#: options/theme-options.php:3348 msgid "Dashboard" msgstr "ダッシュボード" -#: options/theme-options.php:3300 +#: options/theme-options.php:3354 msgid "Dashboard Background Image" msgstr "ダッシュボードの背景画像" -#: options/theme-options.php:3301 +#: options/theme-options.php:3355 msgid "" "Set your dashboard background image, leave this option blank to show white " "background" @@ -3514,35 +3572,35 @@ msgstr "" "ダッシュボードの背景画像を設定し、このオプションを空白のままにして白い背景を" "表示します。" -#: options/theme-options.php:3309 +#: options/theme-options.php:3363 msgid "Dashboard Options Menu Style" msgstr "ダッシュボード オプション メニュー スタイル" -#: options/theme-options.php:3320 +#: options/theme-options.php:3374 msgid "Dashboard Primary Menu Color" msgstr "ダッシュボードのメインメニューの色" -#: options/theme-options.php:3328 +#: options/theme-options.php:3382 msgid "Dashboard Secondary Menu Color" msgstr "ダッシュボードのセカンダリ メニューの色" -#: options/theme-options.php:3336 +#: options/theme-options.php:3390 msgid "Dashboard Emphasis Color" msgstr "ダッシュボード強調色" -#: options/theme-options.php:3344 +#: options/theme-options.php:3398 msgid "Dashboard Button Color" msgstr "ダッシュボード ボタンの色" -#: options/theme-options.php:3352 +#: options/theme-options.php:3406 msgid "Dashboard Text Color" msgstr "ダッシュボードテキストの色" -#: options/theme-options.php:3362 +#: options/theme-options.php:3416 msgid "ChatGPT Options" msgstr "ChatGPT オプション" -#: options/theme-options.php:3369 +#: options/theme-options.php:3423 msgid "" "You can click here to learn how to set the options on " @@ -3552,27 +3610,27 @@ msgstr "" "fuukei.org/Sakurairo/Others/#ChatGPT%E8%AE%BE%E7%BD%AE\">ここ をクリック" "してください" -#: options/theme-options.php:3375 +#: options/theme-options.php:3429 msgid "ChatGPT Function" msgstr "ChatGPT 機能" -#: options/theme-options.php:3376 +#: options/theme-options.php:3430 msgid "After turning on ChatGPT Function will be available" msgstr "ChatGPT 機能をオンにすると利用可能になります" -#: options/theme-options.php:3383 +#: options/theme-options.php:3437 msgid "ChatGPT Base URL" msgstr "ChatGPT Base URL" -#: options/theme-options.php:3384 +#: options/theme-options.php:3438 msgid "Fill in the ChatGPT Base URL, The default is http://sxy.gay/" msgstr "ChatGPT ベース URL を入力し、デフォルトは http://sxy.gay/" -#: options/theme-options.php:3392 +#: options/theme-options.php:3446 msgid "ChatGPT API keys" msgstr "ChatGPT API keys" -#: options/theme-options.php:3393 +#: options/theme-options.php:3447 msgid "" "Fill in Your ChatGPT API keys, You can go to OpenAI Website to get your API Keys" @@ -3581,15 +3639,15 @@ msgstr "" "ために OpenAIのウェ" "ブサイト に行くことができます" -#: options/theme-options.php:3400 +#: options/theme-options.php:3454 msgid "ChatGPT Article Summarize" msgstr "ChatGPTの記事の要約" -#: options/theme-options.php:3401 +#: options/theme-options.php:3455 msgid "After turning on ChatGPT will automatically generate article abstracts" msgstr "ChatGPTをオンにすると、記事の抄録が自動的に生成されます" -#: options/theme-options.php:3408 +#: options/theme-options.php:3462 msgid "" "Each update of your post will trigger a request to generate a summary. Due " "to current API limitations, if your article exceeds 4097 Token, the system " @@ -3599,11 +3657,11 @@ msgstr "" "のAPIの制限により、記事が4097トークンを超える場合、システムは未超過部分のみを" "送信し、要約を生成します" -#: options/theme-options.php:3418 +#: options/theme-options.php:3472 msgid "Article IDs that do not Require ChatGPT Summarize" msgstr "ChatGPTサマリーを必要としない記事ID" -#: options/theme-options.php:3419 +#: options/theme-options.php:3473 msgid "" "Enter the article IDs that do not need to generate ChatGPT Summarize, and " "split multiple article IDs with \",\"" @@ -3611,11 +3669,11 @@ msgstr "" "ChatGPTサマリーの生成に不要な記事IDを入力し、複数の記事IDを「,」で分割しま" "す。" -#: options/theme-options.php:3430 +#: options/theme-options.php:3484 msgid "ChatGPT Article Summarize Init Prompt" msgstr "ChatGPTの記事は初期化プロンプトを要約します" -#: options/theme-options.php:3435 +#: options/theme-options.php:3489 msgid "" "Fill in the Init Prompt, Please make changes if you know how to configure it " "correctly. Init Prompt will be passed to ChatGPT as \"system\" role" @@ -3623,11 +3681,11 @@ msgstr "" "initプロンプトに入力し、正しく構成する方法がわかっている場合は変更してくださ" "い。初期化プロンプトは「システム」ロールとしてChatGPTに渡されます" -#: options/theme-options.php:3446 +#: options/theme-options.php:3500 msgid "ChatGPT Article Summarize Ask Prompt" msgstr "ChatGPTの記事は、質問プロンプトを要約します" -#: options/theme-options.php:3451 +#: options/theme-options.php:3505 msgid "" "Fill in the Ask Prompt, Use preset value when option is empty, Please make " "changes if you know how to configure it correctly" @@ -3635,11 +3693,11 @@ msgstr "" "質問プロンプトに記入し、オプションが空のときにプリセット値を使用し、正しく構" "成する方法を知っている場合は変更を加えてください" -#: options/theme-options.php:3459 +#: options/theme-options.php:3513 msgid "Low Use Options" msgstr "低使用オプション" -#: options/theme-options.php:3466 +#: options/theme-options.php:3520 msgid "" "You can click here to learn how to " @@ -3649,54 +3707,54 @@ msgstr "" "fuukei.org/Sakurairo/Others/#%E4%BD%8E%E4%BD%BF%E7%94%A8%E8%AE%BE%E7%BD%AE\">" "ここをクリックしてください 。" -#: options/theme-options.php:3472 +#: options/theme-options.php:3526 msgid "Statistics API" msgstr "統計 API" -#: options/theme-options.php:3473 +#: options/theme-options.php:3527 msgid "" "You can choose WP-Statistics plugin statistics or theme built-in statistics " "to display" msgstr "" "WP-Statistics プラグイン統計またはテーマ組み込み統計を選択して表示できます。" -#: options/theme-options.php:3475 +#: options/theme-options.php:3529 msgid "Theme Built in Statistics" msgstr "統計に組み込まれたテーマ" -#: options/theme-options.php:3476 +#: options/theme-options.php:3530 msgid "WP-Statistics Plugin Statistics" msgstr "WP-統計プラグイン統計" -#: options/theme-options.php:3484 +#: options/theme-options.php:3538 msgid "Statistics display format" msgstr "統計表示形式" -#: options/theme-options.php:3485 +#: options/theme-options.php:3539 msgid "You can choose from four different data display formats" msgstr "4種類のデータ表示形式から選択できます。" -#: options/theme-options.php:3487 +#: options/theme-options.php:3541 msgid "23333 Visits" msgstr "23333訪問" -#: options/theme-options.php:3488 +#: options/theme-options.php:3542 msgid "23,333 Visits" msgstr "23,333訪問" -#: options/theme-options.php:3489 +#: options/theme-options.php:3543 msgid "23 333 Visits" msgstr "23 333訪問" -#: options/theme-options.php:3490 +#: options/theme-options.php:3544 msgid "23K Visits" msgstr "23K訪問" -#: options/theme-options.php:3498 +#: options/theme-options.php:3552 msgid "Live Search" msgstr "ライブ検索を利用" -#: options/theme-options.php:3499 +#: options/theme-options.php:3553 msgid "" "After turning on the live search in the frontend, call Rest API to update " "the cache once an hour. You can set the cache time manually in api.php" @@ -3704,11 +3762,11 @@ msgstr "" "フロントエンドでライブ検索を有効にした後、Rest API を呼び出して 1 時間に 1 回" "キャッシュを更新します。api でキャッシュ時間を手動で設定できます.php" -#: options/theme-options.php:3506 +#: options/theme-options.php:3560 msgid "Live Search Comment Support" msgstr "ライブ検索コメントのサポート" -#: options/theme-options.php:3508 +#: options/theme-options.php:3562 msgid "" "Enable to search for comments in live search (not recommended if site has " "too many comments)" @@ -3716,36 +3774,36 @@ msgstr "" "ライブ検索でコメントを検索できるようにする (サイトのコメントが多すぎる場合は" "推奨されません)" -#: options/theme-options.php:3515 +#: options/theme-options.php:3569 msgid "Google Analytics Id" msgstr "グーグルアナリティクスID" -#: options/theme-options.php:3516 +#: options/theme-options.php:3570 msgid "If you already have a plugin to handle it, please keep here empty." msgstr "" "すでにそれを処理するプラグインがある場合は、ここに空のままにしてください。" -#: options/theme-options.php:3522 +#: options/theme-options.php:3576 msgid "Custom CSS Styles" msgstr "カスタム CSS スタイル" -#: options/theme-options.php:3523 +#: options/theme-options.php:3577 msgid "Fill in the CSS code without writing style tag" msgstr "スタイルタグを書かずにCSSコードを入力する" -#: options/theme-options.php:3530 +#: options/theme-options.php:3584 msgid "Code inserted in the header" msgstr "ヘッダーに挿入されたコード" -#: options/theme-options.php:3531 +#: options/theme-options.php:3585 msgid "Insert HTML code right before ." msgstr "HTML コードを の直前に挿入します。" -#: options/theme-options.php:3537 +#: options/theme-options.php:3591 msgid "Timezone Fix" msgstr "タイムゾーン修正" -#: options/theme-options.php:3538 +#: options/theme-options.php:3592 msgid "" "Slide to adjust. If the comment has a time difference problem, adjust it " "here, fill in an integer. Calculation method: actual time = time of display " @@ -3754,11 +3812,11 @@ msgstr "" "スライドして調整します。コメントに時間差の問題がある場合は、ここで調整し、整" "数を入力します。計算方法: 実際の時間 = 表示エラーの時間 - 入力した整数 (時間)" -#: options/theme-options.php:3547 +#: options/theme-options.php:3601 msgid "Gravatar Service Proxy" msgstr "グラバタープロキシ" -#: options/theme-options.php:3548 +#: options/theme-options.php:3602 msgid "" "You can select multiple proxy as the Gravatar Service Proxy. By default, " "Tianli is used as the Gravatar Service Proxy." @@ -3766,31 +3824,31 @@ msgstr "" "複数のプロキシを Gravatar サービスプロキシとして選択できます。デフォルトで" "は、TianliはGravatarサービスプロキシとして使用されます。" -#: options/theme-options.php:3550 +#: options/theme-options.php:3604 msgid "Weavatar Service" msgstr "ウィアバターサービス" -#: options/theme-options.php:3551 +#: options/theme-options.php:3605 msgid "Cravatar Service" msgstr "クラバターサービス" -#: options/theme-options.php:3552 +#: options/theme-options.php:3606 msgid "Geekzu" msgstr "ゲクズ" -#: options/theme-options.php:3553 +#: options/theme-options.php:3607 msgid "Loli Net" msgstr "ロリネット" -#: options/theme-options.php:3554 +#: options/theme-options.php:3608 msgid "Official" msgstr "公式" -#: options/theme-options.php:3555 options/theme-options.php:3563 +#: options/theme-options.php:3609 options/theme-options.php:3617 msgid "Custom Proxy Address" msgstr "カスタム プロキシ アドレス" -#: options/theme-options.php:3564 +#: options/theme-options.php:3618 msgid "" "Enter your Gravatar proxy address without starting with \"http(s)://\" and " "ending with \"/\". Example: gravatar.com/avatar." @@ -3798,25 +3856,25 @@ msgstr "" "グラバタープロキシアドレスは、\"http(s)://\"で始まり\"/\"で終わることなく入力" "してください。例: gravatar.com/avatar。" -#: options/theme-options.php:3571 +#: options/theme-options.php:3625 msgid "Lightbox" msgstr "Lightbox" -#: options/theme-options.php:3577 +#: options/theme-options.php:3631 msgid "BaguetteBox Lightbox Effect" msgstr "バゲットボックスライトボックス効果" -#: options/theme-options.php:3578 +#: options/theme-options.php:3632 msgid "BaguetteBox will be used as the image lightbox effect when turned on" msgstr "" "バゲットボックスは、オンにすると、イメージライトボックス効果として使用されま" "す" -#: options/theme-options.php:3590 +#: options/theme-options.php:3644 msgid "FancyBox Lightbox Effect" msgstr "ファンシーボックスライトボックス効果" -#: options/theme-options.php:3591 +#: options/theme-options.php:3645 msgid "" "FancyBox will be used as an image lightbox effect after turning on, " "additional JQ libraries will be loaded" @@ -3824,16 +3882,16 @@ msgstr "" "ファンシーボックスは、オンにすると、追加のJQライブラリがロードされた後、イ" "メージライトボックス効果として使用されます" -#: options/theme-options.php:3603 +#: options/theme-options.php:3657 msgid "LightGallery Lightbox Effect" msgstr "LightGalleryライトボックスエフェクト" -#: options/theme-options.php:3604 +#: options/theme-options.php:3658 msgid "LightGallery will be used as an image lightbox effect after turning on." msgstr "" "LightGalleryをオンにすると、画像のライトボックス効果として使用されます。" -#: options/theme-options.php:3614 +#: options/theme-options.php:3668 msgid "" "Attension: Please read License Instruction before use.
        Highlight.js: Default. Automatic language recognition.

        Prism.js: Requires a language to be specified, see を参照してください。

        カスタム: 別の" "構成が使用可能な場合。

        " -#: options/theme-options.php:3657 +#: options/theme-options.php:3711 msgid "Code Highlight Method" msgstr "コードの強調表示方法" -#: options/theme-options.php:3661 +#: options/theme-options.php:3715 msgid "Custom Program" msgstr "カスタムプログラム" -#: options/theme-options.php:3669 +#: options/theme-options.php:3723 msgid "Prism.js: Add Line Number Display for All Code Blocks" msgstr "プリズム.js: すべてのコードブロックに行番号表示を追加" -#: options/theme-options.php:3673 +#: options/theme-options.php:3727 msgid "" "See the plugin " "description documentation" @@ -3910,28 +3968,28 @@ msgstr "" "プラグインの説明のド" "キュメントを参照してください。" -#: options/theme-options.php:3679 +#: options/theme-options.php:3733 msgid "Prism.js: Autoload Address" msgstr "プリズム.js: 自動ロードアドレス" -#: options/theme-options.php:3683 +#: options/theme-options.php:3737 msgid "Leave blank to use default values" msgstr "既定値を使用するには空白のままにします。" -#: options/theme-options.php:3690 +#: options/theme-options.php:3744 msgid "Prism.js: Code Highlight Theme" msgstr "プリズム.js: コードハイライトテーマ" -#: options/theme-options.php:3691 options/theme-options.php:3702 +#: options/theme-options.php:3745 options/theme-options.php:3756 msgid "Relative to autoload address. Leave blank to use default values" msgstr "" "自動ロード アドレスに対する相対値。既定値を使用するには空白のままにします。" -#: options/theme-options.php:3701 +#: options/theme-options.php:3755 msgid "Prism.js: Code Highlight Theme (Dark Mode)" msgstr "プリズム.js: コードハイライトテーマ(ダークモード)" -#: options/theme-options.php:3712 +#: options/theme-options.php:3766 msgid "" "The following Options are not recommended to be modified blindly, please use " "them under the guidance of others" @@ -3939,11 +3997,11 @@ msgstr "" "以下のオプションは、盲目的に変更することは推奨されません、他の人の指導の下で" "それらを使用してください" -#: options/theme-options.php:3718 +#: options/theme-options.php:3772 msgid "Image CDN" msgstr "イメージ CDN" -#: options/theme-options.php:3719 +#: options/theme-options.php:3773 msgid "" "Note: fill in the format https://your CDN domain/. This means that images " "with original path http://your.domain/wp-content/uploads/2018/05/xx.png will " @@ -3953,23 +4011,23 @@ msgstr "" "http://your.domain/wp-content/uploads/2018/05/xx.png を持つイメージは CDN ド" "メイン/2018/05/xx http://your ロードされます.png" -#: options/theme-options.php:3726 +#: options/theme-options.php:3780 msgid "Articles Categories (Do not display)" msgstr "記事のカテゴリ (表示しない)" -#: options/theme-options.php:3727 options/theme-options.php:3734 +#: options/theme-options.php:3781 options/theme-options.php:3788 msgid "Fill in category ID, seperate in English\" , \" when more than one" msgstr "カテゴリ ID を英語で区切って入力する\" と、複数の場合" -#: options/theme-options.php:3733 +#: options/theme-options.php:3787 msgid "Image Display Category" msgstr "画像表示カテゴリ" -#: options/theme-options.php:3740 +#: options/theme-options.php:3794 msgid "Specify Login Address" msgstr "ログイン アドレスの指定" -#: options/theme-options.php:3741 +#: options/theme-options.php:3795 msgid "" "Force not to use the WordPress login page address to login, fill in the new " "login page address, such as: http://www.xxx.com/login. Note that before " @@ -3981,11 +4039,11 @@ msgstr "" "いページに記入する前に、通常の開口部をテストして、背景などを入力できなくなる" "ように注意してください。" -#: options/theme-options.php:3747 +#: options/theme-options.php:3801 msgid "Specify Registration Address" msgstr "登録アドレスの指定" -#: options/theme-options.php:3748 +#: options/theme-options.php:3802 msgid "" "This address is used as the registration entry on the login page, if you " "specify a login address, it is recommended to fill in" @@ -3993,39 +4051,39 @@ msgstr "" "このアドレスはログインページの登録エントリとして使用され、ログインアドレスを" "指定した場合は、入力することをお勧めします。" -#: options/theme-options.php:3754 +#: options/theme-options.php:3808 msgid "Version Control" msgstr "バージョン管理システム" -#: options/theme-options.php:3755 +#: options/theme-options.php:3809 msgid "Used to update front-end cookies and browser cache, can use any string" msgstr "" "フロントエンドクッキーとブラウザキャッシュを更新するために使用され、任意の文" "字列を使用できます" -#: options/theme-options.php:3761 +#: options/theme-options.php:3815 msgid "Backup&Recovery" msgstr "バックアップとリカバリ" -#: options/theme-options.php:3763 +#: options/theme-options.php:3817 msgid "Backup or Recovery your theme options" msgstr "テーマオプションのバックアップまたはリカバリ" -#: options/theme-options.php:3774 +#: options/theme-options.php:3828 msgid "About Theme" msgstr "テーマについて" -#: options/theme-options.php:3780 +#: options/theme-options.php:3834 msgid "Version Info" msgstr "バージョン情報" -#: options/theme-options.php:3785 +#: options/theme-options.php:3839 msgid "" "" msgstr "" -#: options/theme-options.php:3791 +#: options/theme-options.php:3845 #, php-format msgid "" "Theme Sakurairo Version %s | Internal Version %s | プロジェクトアドレス" -#: options/theme-options.php:3796 +#: options/theme-options.php:3850 msgid "Update Related" msgstr "関連する更新プログラム" -#: options/theme-options.php:3802 +#: options/theme-options.php:3856 msgid "Theme Update Source" msgstr "テーマの更新元" -#: options/theme-options.php:3808 +#: options/theme-options.php:3862 msgid "" "If you are using a server set up in mainland China, please use the Upyun " "source or the official theme source as your theme update source" @@ -4050,11 +4108,11 @@ msgstr "" "中国本土で設定されたサーバーを使用している場合は、UPYUNソースまたは公式テーマ" "ソースをテーマアップデートソースとして使用してください。" -#: options/theme-options.php:3815 +#: options/theme-options.php:3869 msgid "Theme Update Test Channel Disclaimer" msgstr "テーマ更新テスト チャネルの免責事項" -#: options/theme-options.php:3821 +#: options/theme-options.php:3875 msgid "" "Please copy the text in quotes after ensure that you have carefully " "understood the risks associated with participating in the test and are " @@ -4066,37 +4124,37 @@ msgstr "" "の可能性を含むがこれらに限定されない)すべての結果を自己責任で引き受ける意思が" "あることを確認した後、引用符でテキストをコピーしてください" -#: options/theme-options.php:3827 +#: options/theme-options.php:3881 msgid "Theme Update Channel" msgstr "テーマ更新チャネル" -#: options/theme-options.php:3834 +#: options/theme-options.php:3888 msgid "" "You can toggle the update channel here to participate in the testing of the " "new version" msgstr "更新チャネルを切り替えて、新しいバージョンのテストに参加できます。" -#: options/theme-options.php:3836 +#: options/theme-options.php:3890 msgid "Stable Channel" msgstr "安定したチャネル" -#: options/theme-options.php:3837 +#: options/theme-options.php:3891 msgid "Beta Channel" msgstr "ベータチャンネル" -#: options/theme-options.php:3838 +#: options/theme-options.php:3892 msgid "Preview Channel" msgstr "チャンネルのプレビュー" -#: options/theme-options.php:3845 +#: options/theme-options.php:3899 msgid "Resource Control" msgstr "資源制御" -#: options/theme-options.php:3851 +#: options/theme-options.php:3905 msgid "Provide Critical Frontend Resource locally" msgstr "重要なフロントエンド リソースをローカルに提供する" -#: options/theme-options.php:3852 +#: options/theme-options.php:3906 msgid "" "Enabeld by default. Critical resources are those resources whose loading " "performance will have a significant impact on the user experience." @@ -4104,19 +4162,19 @@ msgstr "" "既定ではエナベルド。重要なリソースとは、読み込みパフォーマンスがユーザー エク" "スペリエンスに大きな影響を与えるリソースです。" -#: options/theme-options.php:3859 +#: options/theme-options.php:3913 msgid "Provide Other Frontend Resource locally" msgstr "他のフロントエンド リソースをローカルに提供する" -#: options/theme-options.php:3860 +#: options/theme-options.php:3914 msgid "Less important frontend resource in the theme's folder." msgstr "テーマのフォルダー内のあまり重要でないフロント エンド リソース。" -#: options/theme-options.php:3867 +#: options/theme-options.php:3921 msgid "Provide 3rd-party library from public CDN" msgstr "公共CDNからサードパーティのライブラリを提供する" -#: options/theme-options.php:3868 +#: options/theme-options.php:3922 msgid "" "When disabled, 3rd-party dependencies, which have been built to bundles " "along with themes's entry script, will be loaded from the exact same origin " @@ -4126,15 +4184,15 @@ msgstr "" "ティの依存関係は、クリティカル フロントエンド リソースとまったく同じオリジン" "から読み込まれます。" -#: options/theme-options.php:3875 +#: options/theme-options.php:3929 msgid "Public CDN Basepath" msgstr "パブリック CDN ベースパス" -#: options/theme-options.php:3887 +#: options/theme-options.php:3941 msgid "Vision Resource Basepath" msgstr "ビジョン リソース ベースパス" -#: options/theme-options.php:3888 +#: options/theme-options.php:3942 msgid "" "This link directory structure needs to be consistent with the Sakurairo Vision " @@ -4148,31 +4206,31 @@ msgstr "" "ります。 UPYUN によって正式に提供され" "るイメージソースはデフォルトで採用されています。" -#: options/theme-options.php:3894 +#: options/theme-options.php:3948 msgid "Theme Sponsors" msgstr "テーマスポンサー" -#: options/theme-options.php:3899 +#: options/theme-options.php:3953 msgid "" "\"sponsors\"" msgstr "" -#: options/theme-options.php:3904 +#: options/theme-options.php:3958 msgid "Theme Contributors" msgstr "貢献者" -#: options/theme-options.php:3909 +#: options/theme-options.php:3963 msgid "" "\"Theme" msgstr "" -#: options/theme-options.php:3914 +#: options/theme-options.php:3968 msgid "Privacy information" msgstr "プライバシー情報" -#: options/theme-options.php:3919 +#: options/theme-options.php:3973 msgid "" "

        The theme respects your privacy

        \n" "

        However, when you use a service provider pre-populated by the " @@ -4190,11 +4248,11 @@ msgstr "" "カライズすることで、サードパーティに送信される情報を減らすことができます。" -#: options/theme-options.php:3927 +#: options/theme-options.php:3981 msgid "Send Theme Version to Fuukei" msgstr "テーマバージョンをFuukeiに送る" -#: options/theme-options.php:3928 +#: options/theme-options.php:3982 msgid "" "The theme will only send time and version information to Fuukei officials " "and the data will be cleaned regularly and used only to count version " @@ -4203,11 +4261,11 @@ msgstr "" "テーマは時間とバージョンの情報をFuukei Officialにのみ送信し、データは定期的に" "クリーンアップされ、バージョンの更新をカウントするためにのみ使用されます。" -#: options/theme-options.php:3934 +#: options/theme-options.php:3988 msgid "Reference Information" msgstr "参照情報" -#: options/theme-options.php:3939 +#: options/theme-options.php:3993 msgid "" "

        Fluent Design Icon Referenced by Paradox Fluent Icon Pack

        \n" @@ -4223,11 +4281,11 @@ msgstr "" "

        ましろスタイルのロゴは、Hyacmによって提供および参照されているよう" "に、元のテーマ作成者Mashiroを参照しています

        " -#: options/theme-options.php:3946 +#: options/theme-options.php:4000 msgid "Dependency Information" msgstr "依存情報" -#: options/theme-options.php:3951 +#: options/theme-options.php:4005 msgid "" "

        Options Framework Relies on the Codestar Open Source Codestar Framework Project

        \n" @@ -4248,7 +4306,7 @@ msgstr "" "github.com/HaoZi-Team/ChatGPT-PHP\">ChatGPT PHP プロジェクトに依存してい" "る

        " -#: options/theme-options.php:3958 +#: options/theme-options.php:4012 msgid "" "\"Themehere to learn how to set the options on this page" msgstr "" -#: options/theme-options.php:587 +#: options/theme-options.php:586 msgid "Widgets Panel" msgstr "" -#: options/theme-options.php:593 +#: options/theme-options.php:592 msgid "Widgets Panel Button Radius" msgstr "" -#: options/theme-options.php:594 options/theme-options.php:604 +#: options/theme-options.php:593 options/theme-options.php:603 msgid "Slide to adjust, the recommended value is 10" msgstr "" -#: options/theme-options.php:603 +#: options/theme-options.php:602 msgid "Widgets Panel Widget Radius" msgstr "" -#: options/theme-options.php:613 +#: options/theme-options.php:612 msgid "Widgets Panel Font" msgstr "" -#: options/theme-options.php:621 +#: options/theme-options.php:620 msgid "Widgets Panel WP Widget Area" msgstr "" -#: options/theme-options.php:622 +#: options/theme-options.php:621 msgid "When turned on, the WP Widget Area will be displayed in Widgets Panel" msgstr "" -#: options/theme-options.php:629 +#: options/theme-options.php:628 msgid "Widgets Panel Shuoshuo" msgstr "" -#: options/theme-options.php:630 +#: options/theme-options.php:629 msgid "When turned on, the Latest Shuoshuo text will be displayed in Widgets Panel" msgstr "" -#: options/theme-options.php:637 +#: options/theme-options.php:636 msgid "Widgets Panel Day&Night Switching" msgstr "" -#: options/theme-options.php:638 +#: options/theme-options.php:637 msgid "" "Enabled by default, the Day&Night Switching will be displayed in Widgets Panel" msgstr "" -#: options/theme-options.php:645 +#: options/theme-options.php:644 msgid "Widgets Panel Font Switching" msgstr "" -#: options/theme-options.php:646 +#: options/theme-options.php:645 msgid "Enabled by default, the Font Switching will be displayed in Widgets Panel" msgstr "" -#: options/theme-options.php:652 +#: options/theme-options.php:651 msgid "Frontend Background" msgstr "" -#: options/theme-options.php:663 +#: options/theme-options.php:662 msgid "Frontend Background Scaling Method" msgstr "" -#: options/theme-options.php:664 +#: options/theme-options.php:663 msgid "" "You can choose two ways to scale the frontend background, the default is auto-" "scaling" msgstr "" -#: options/theme-options.php:671 +#: options/theme-options.php:670 msgid "Background Transparency Blur" msgstr "" -#: options/theme-options.php:672 +#: options/theme-options.php:671 msgid "After opening Background Transparency Blur" msgstr "" -#: options/theme-options.php:679 +#: options/theme-options.php:678 msgid "Widgets Panel Background Switching(Frontend Background)" msgstr "" -#: options/theme-options.php:688 options/theme-options.php:704 -#: options/theme-options.php:720 options/theme-options.php:736 -#: options/theme-options.php:752 +#: options/theme-options.php:687 options/theme-options.php:703 +#: options/theme-options.php:719 options/theme-options.php:735 +#: options/theme-options.php:751 msgid "Image" msgstr "" -#: options/theme-options.php:693 +#: options/theme-options.php:692 msgid "Heart Shaped" msgstr "" -#: options/theme-options.php:699 options/theme-options.php:715 -#: options/theme-options.php:731 options/theme-options.php:747 +#: options/theme-options.php:698 options/theme-options.php:714 +#: options/theme-options.php:730 options/theme-options.php:746 msgid "Switch" msgstr "" -#: options/theme-options.php:709 +#: options/theme-options.php:708 msgid "Star Shaped" msgstr "" -#: options/theme-options.php:725 +#: options/theme-options.php:724 msgid "Square Shaped" msgstr "" -#: options/theme-options.php:741 +#: options/theme-options.php:740 msgid "Lemon Shaped" msgstr "" -#: options/theme-options.php:772 +#: options/theme-options.php:771 msgid "Background Transparency in the Frontend" msgstr "" -#: options/theme-options.php:773 +#: options/theme-options.php:772 msgid "Slide to adjust, the recommended sliding value range is 0.6-0.8" msgstr "" -#: options/theme-options.php:782 +#: options/theme-options.php:781 msgid "Frontend Font" msgstr "" -#: options/theme-options.php:788 +#: options/theme-options.php:787 msgid "Global Default Font/Widgets Panel Font Switching A" msgstr "" -#: options/theme-options.php:795 +#: options/theme-options.php:794 msgid "Widgets Panel Font Switching B" msgstr "" -#: options/theme-options.php:805 +#: options/theme-options.php:804 msgid "Footer Options" msgstr "" -#: options/theme-options.php:812 +#: options/theme-options.php:811 msgid "" "You can click here to learn how to set the options " "on this page" msgstr "" -#: options/theme-options.php:818 +#: options/theme-options.php:817 msgid "Footer Online Music Player" msgstr "" -#: options/theme-options.php:819 +#: options/theme-options.php:818 msgid "" "A button will appear at the bottom left corner of the footer after turning on, " "click it and the footer online player will be displayed" msgstr "" -#: options/theme-options.php:822 +#: options/theme-options.php:821 msgid "Netease Cloud Music" msgstr "" -#: options/theme-options.php:823 +#: options/theme-options.php:822 msgid "Kugou Music(may not be available)" msgstr "" -#: options/theme-options.php:824 +#: options/theme-options.php:823 msgid "Baidu Music(not available on servers overseas)" msgstr "" -#: options/theme-options.php:825 +#: options/theme-options.php:824 msgid "QQ Music(may not be available)" msgstr "" -#: options/theme-options.php:833 +#: options/theme-options.php:832 msgid "Footer Online Music Player Proxy" msgstr "" -#: options/theme-options.php:835 +#: options/theme-options.php:834 msgid "" "Ex. http://127.0.0.1:8080. Reference: https://curl.se/libcurl/c/CURLOPT_PROXY.html" msgstr "" -#: options/theme-options.php:842 +#: options/theme-options.php:841 msgid "Footer Online Music Player Songlist ID" msgstr "" -#: options/theme-options.php:844 +#: options/theme-options.php:843 msgid "" "Fill in the song ID, e.g. https://music.163.com/#/playlist?id=5380675133 " "SongID:5380675133" msgstr "" -#: options/theme-options.php:851 +#: options/theme-options.php:850 msgid "Footer Online Music Player Mode" msgstr "" -#: options/theme-options.php:853 +#: options/theme-options.php:852 msgid "Select music player mode" msgstr "" -#: options/theme-options.php:855 +#: options/theme-options.php:854 msgid "List" msgstr "" -#: options/theme-options.php:856 +#: options/theme-options.php:855 msgid "Random" msgstr "" -#: options/theme-options.php:864 +#: options/theme-options.php:863 msgid "Footer Online Music Player Preload" msgstr "" -#: options/theme-options.php:866 +#: options/theme-options.php:865 msgid "Whether to preload songs" msgstr "" -#: options/theme-options.php:869 +#: options/theme-options.php:868 msgid "Preload Metadata" msgstr "" -#: options/theme-options.php:878 +#: options/theme-options.php:877 msgid "Default Volume of Footer Online Music Player" msgstr "" -#: options/theme-options.php:880 +#: options/theme-options.php:879 msgid "Slide to adjust, the recommended sliding value range is 0.4-0.6" msgstr "" -#: options/theme-options.php:889 +#: options/theme-options.php:888 msgid "Netease Cloud Music Cookies" msgstr "" -#: options/theme-options.php:891 +#: options/theme-options.php:890 msgid "" "If you want to play VIP music on Netease Cloud Music Platform, please fill in " "your account cookies in this option." msgstr "" -#: options/theme-options.php:897 +#: options/theme-options.php:896 msgid "Footer Sakura Icon" msgstr "" -#: options/theme-options.php:898 +#: options/theme-options.php:897 msgid "Enabled by default, sakura icon will appear on the footer" msgstr "" -#: options/theme-options.php:905 +#: options/theme-options.php:904 msgid "Footer Info" msgstr "" -#: options/theme-options.php:906 +#: options/theme-options.php:905 msgid "Footer description text, supports HTML code" msgstr "" -#: options/theme-options.php:913 +#: options/theme-options.php:912 msgid "Footer Text Font" msgstr "" -#: options/theme-options.php:921 +#: options/theme-options.php:920 msgid "Footer Load Occupancy Query" msgstr "" -#: options/theme-options.php:922 +#: options/theme-options.php:921 msgid "" "Load occupancy information will appear at the end of the page after turning it " "on. Not recommended in production environment." msgstr "" -#: options/theme-options.php:929 +#: options/theme-options.php:928 msgid "Footer Upyun League Logo" msgstr "" -#: options/theme-options.php:930 +#: options/theme-options.php:929 msgid "Upyun Logo will appear at the end of the page after turning it on" msgstr "" -#: options/theme-options.php:938 +#: options/theme-options.php:937 msgid "Footer Addition" msgstr "" -#: options/theme-options.php:939 +#: options/theme-options.php:938 msgid "" "Add HTML code at the end of the page. Useful for adding customize JavaScript." msgstr "" -#: options/theme-options.php:944 +#: options/theme-options.php:943 msgid "Hitokoto" msgstr "" -#: options/theme-options.php:950 +#: options/theme-options.php:949 msgid "Footer Hitokoto" msgstr "" -#: options/theme-options.php:951 +#: options/theme-options.php:950 msgid "Hitokoto will appear at the end of the page after turning it on" msgstr "" -#: options/theme-options.php:958 +#: options/theme-options.php:957 msgid "" "

        Hitokoto API Setup Instructions

        Fill in as the example: " "[\"https://api.nmxc.ltd/yiyan/\", \"https://v1.hitokoto.cn/\"], where the " @@ -1442,1537 +1442,1533 @@ msgid "" "nmxc.ltd/yiyan/

        " msgstr "" -#: options/theme-options.php:967 +#: options/theme-options.php:966 msgid "Hitokoto API address" msgstr "" -#: options/theme-options.php:969 +#: options/theme-options.php:968 msgid "Fill in the address in JavaScript array format" msgstr "" -#: options/theme-options.php:978 +#: options/theme-options.php:977 msgid "Cursor Options" msgstr "" -#: options/theme-options.php:985 +#: options/theme-options.php:984 msgid "" "You can click here to learn how to set the options " "on this page" msgstr "" -#: options/theme-options.php:991 +#: options/theme-options.php:990 msgid "Standard Cursor Style" msgstr "" -#: options/theme-options.php:992 +#: options/theme-options.php:991 msgid "Apply to global, fill in \".cur\" mouse file link" msgstr "" -#: options/theme-options.php:999 +#: options/theme-options.php:998 msgid "Selected Cursor Style" msgstr "" -#: options/theme-options.php:1000 +#: options/theme-options.php:999 msgid "Apply to multiple styles, fill in \".cur\" file link" msgstr "" -#: options/theme-options.php:1007 +#: options/theme-options.php:1006 msgid "Selected Control Unit Cursor Style" msgstr "" -#: options/theme-options.php:1008 +#: options/theme-options.php:1007 msgid "Apply to selected control unit, fill in \".cur\" file link" msgstr "" -#: options/theme-options.php:1015 +#: options/theme-options.php:1014 msgid "Selected Text Cursor Style" msgstr "" -#: options/theme-options.php:1016 +#: options/theme-options.php:1015 msgid "Apply to selected text, fill in \".cur\" file link" msgstr "" -#: options/theme-options.php:1023 +#: options/theme-options.php:1022 msgid "Work Status Cursor Style" msgstr "" -#: options/theme-options.php:1024 +#: options/theme-options.php:1023 msgid "Apply to load control unit, fill in \".cur\" file link" msgstr "" -#: options/theme-options.php:1033 +#: options/theme-options.php:1032 msgid "Additional Options" msgstr "" -#: options/theme-options.php:1040 +#: options/theme-options.php:1039 msgid "" "You can click here to learn how to set the options " "on this page" msgstr "" -#: options/theme-options.php:1045 +#: options/theme-options.php:1044 msgid "Effects&Animations" msgstr "" -#: options/theme-options.php:1051 +#: options/theme-options.php:1050 msgid "Preload Animation" msgstr "" -#: options/theme-options.php:1052 +#: options/theme-options.php:1051 msgid "" "Preload animation before new pages load; To enable this option, ensure your page " "resources can load properly." msgstr "" -#: options/theme-options.php:1059 +#: options/theme-options.php:1058 msgid "Preload Animation Color A" msgstr "" -#: options/theme-options.php:1068 +#: options/theme-options.php:1067 msgid "Preload Animation Color B" msgstr "" -#: options/theme-options.php:1076 +#: options/theme-options.php:1075 msgid "Preload Animation Blur Transition Effect" msgstr "" -#: options/theme-options.php:1078 +#: options/theme-options.php:1077 msgid "Blur transition duration in milliseconds ms, off when set to 0." msgstr "" -#: options/theme-options.php:1088 +#: options/theme-options.php:1087 msgid "Sakura Falling Effects" msgstr "" -#: options/theme-options.php:1091 +#: options/theme-options.php:1090 msgid "Native Quantity" msgstr "" -#: options/theme-options.php:1092 +#: options/theme-options.php:1091 msgid "Quarter Quantity" msgstr "" -#: options/theme-options.php:1093 +#: options/theme-options.php:1092 msgid "Half Quantity" msgstr "" -#: options/theme-options.php:1094 +#: options/theme-options.php:1093 msgid "Less Quantity" msgstr "" -#: options/theme-options.php:1102 +#: options/theme-options.php:1101 msgid "Particles Effects" msgstr "" -#: options/theme-options.php:1104 +#: options/theme-options.php:1103 msgid "" "Particles effects will appear in the global background. Please open the Cover-and-" "Frontend-Background-Integration Options to get the best experience" msgstr "" -#: options/theme-options.php:1112 +#: options/theme-options.php:1111 msgid "Particles JSON" msgstr "" -#: options/theme-options.php:1114 +#: options/theme-options.php:1113 msgid "" "You can go to the Project " "Address to generate your unique Particles Effects" msgstr "" -#: options/theme-options.php:1231 +#: options/theme-options.php:1230 msgid "Note Touch Effects" msgstr "" -#: options/theme-options.php:1232 +#: options/theme-options.php:1231 msgid "" "After turning on, there will be a note sound alert when the back to top button " "and Mashiro style logo touch" msgstr "" -#: options/theme-options.php:1238 +#: options/theme-options.php:1237 msgid "Feature" msgstr "" -#: options/theme-options.php:1244 +#: options/theme-options.php:1243 msgid "PJAX Partial Refresh" msgstr "" -#: options/theme-options.php:1245 +#: options/theme-options.php:1244 msgid "Enabled by default, clicking to a new page will not require reloading" msgstr "" -#: options/theme-options.php:1252 +#: options/theme-options.php:1251 msgid "NProgress Loading Progress Bar" msgstr "" -#: options/theme-options.php:1253 +#: options/theme-options.php:1252 msgid "Enabled by default, when loading page there will be a progress bar alert" msgstr "" -#: options/theme-options.php:1260 +#: options/theme-options.php:1259 msgid "Global Smooth Scroll" msgstr "" -#: options/theme-options.php:1261 +#: options/theme-options.php:1260 msgid "Enabled by default, page scrolling will be smoother" msgstr "" -#: options/theme-options.php:1268 +#: options/theme-options.php:1267 msgid "Captcha Selection" msgstr "" -#: options/theme-options.php:1271 +#: options/theme-options.php:1270 msgid "Theme Built in Captcha" msgstr "" -#: options/theme-options.php:1272 +#: options/theme-options.php:1271 msgid "Vaptcha" msgstr "" -#: options/theme-options.php:1280 +#: options/theme-options.php:1279 msgid "Vaptcha VID" msgstr "" -#: options/theme-options.php:1282 +#: options/theme-options.php:1281 msgid "Fill in your Vaptcha VID" msgstr "" -#: options/theme-options.php:1288 +#: options/theme-options.php:1287 msgid "Vaptcha KEY" msgstr "" -#: options/theme-options.php:1290 +#: options/theme-options.php:1289 msgid "Fill in your Vaptcha KEY" msgstr "" -#: options/theme-options.php:1296 +#: options/theme-options.php:1295 msgid "Vaptcha Scene" msgstr "" -#: options/theme-options.php:1312 +#: options/theme-options.php:1311 msgid "Pagination Mode" msgstr "" -#: options/theme-options.php:1314 +#: options/theme-options.php:1313 msgid "Ajax Load" msgstr "" -#: options/theme-options.php:1315 +#: options/theme-options.php:1314 msgid "Page Up/Down" msgstr "" -#: options/theme-options.php:1323 +#: options/theme-options.php:1322 msgid "Next Page Auto Load" msgstr "" -#: options/theme-options.php:1326 +#: options/theme-options.php:1325 msgid "do not autoload" msgstr "" -#: options/theme-options.php:1327 +#: options/theme-options.php:1326 msgid "0 Sec" msgstr "" -#: options/theme-options.php:1328 +#: options/theme-options.php:1327 msgid "1 Sec" msgstr "" -#: options/theme-options.php:1329 +#: options/theme-options.php:1328 msgid "2 Sec" msgstr "" -#: options/theme-options.php:1330 +#: options/theme-options.php:1329 msgid "3 Sec" msgstr "" -#: options/theme-options.php:1331 +#: options/theme-options.php:1330 msgid "4 Sec" msgstr "" -#: options/theme-options.php:1332 +#: options/theme-options.php:1331 msgid "5 Sec" msgstr "" -#: options/theme-options.php:1333 +#: options/theme-options.php:1332 msgid "6 Sec" msgstr "" -#: options/theme-options.php:1334 +#: options/theme-options.php:1333 msgid "7 Sec" msgstr "" -#: options/theme-options.php:1335 +#: options/theme-options.php:1334 msgid "8 Sec" msgstr "" -#: options/theme-options.php:1336 +#: options/theme-options.php:1335 msgid "9 Sec" msgstr "" -#: options/theme-options.php:1337 +#: options/theme-options.php:1336 msgid "10 Sec" msgstr "" -#: options/theme-options.php:1345 +#: options/theme-options.php:1344 msgid "Placeholder SVG when loading the next page" msgstr "" -#: options/theme-options.php:1346 +#: options/theme-options.php:1345 msgid "" "Fill in the address, this is the SVG that will be displayed as a placeholder when " "the next page is loading" msgstr "" -#: options/theme-options.php:1354 +#: options/theme-options.php:1353 msgid "HomePage Options" msgstr "" -#: options/theme-options.php:1360 +#: options/theme-options.php:1359 msgid "Cover Options" msgstr "" -#: options/theme-options.php:1367 +#: options/theme-options.php:1366 msgid "" "You can click here to learn how to set the options " "on this page" msgstr "" -#: options/theme-options.php:1373 +#: options/theme-options.php:1372 msgid "Cover Switch" msgstr "" -#: options/theme-options.php:1374 +#: options/theme-options.php:1373 msgid "On by default, if off, all options below will be disabled" msgstr "" -#: options/theme-options.php:1381 +#: options/theme-options.php:1380 msgid "Cover Full Screen" msgstr "" -#: options/theme-options.php:1390 +#: options/theme-options.php:1389 msgid "Cover Arc Occlusion (Below)" msgstr "" -#: options/theme-options.php:1391 +#: options/theme-options.php:1390 msgid "An arc occlusion will appear below the cover when turned on" msgstr "" -#: options/theme-options.php:1402 +#: options/theme-options.php:1401 msgid "Cover Radius" msgstr "" -#: options/theme-options.php:1403 +#: options/theme-options.php:1402 msgid "Slide to adjust, the recommended value range is 15-20" msgstr "" -#: options/theme-options.php:1413 +#: options/theme-options.php:1412 msgid "Cover Animation" msgstr "" -#: options/theme-options.php:1414 +#: options/theme-options.php:1413 msgid "On by default, if off, the cover will be displayed directly" msgstr "" -#: options/theme-options.php:1422 +#: options/theme-options.php:1421 msgid "Cover Animation Time" msgstr "" -#: options/theme-options.php:1437 +#: options/theme-options.php:1436 msgid "Cover Info Bar" msgstr "" -#: options/theme-options.php:1438 +#: options/theme-options.php:1437 msgid "" "Enabled by default, show avatar, Mashiro effects text, signature bar, shuoshuo " "bar, social area" msgstr "" -#: options/theme-options.php:1446 +#: options/theme-options.php:1445 msgid "Cover Info Bar Style" msgstr "" -#: options/theme-options.php:1461 +#: options/theme-options.php:1460 msgid "Cover Info Bar Background Color" msgstr "" -#: options/theme-options.php:1473 +#: options/theme-options.php:1472 msgid "Cover Info Bar Avatar Radius" msgstr "" -#: options/theme-options.php:1474 +#: options/theme-options.php:1473 msgid "Slide to adjust, the recommended value is 100" msgstr "" -#: options/theme-options.php:1486 +#: options/theme-options.php:1485 msgid "Cover Info Bar Rounded" msgstr "" -#: options/theme-options.php:1487 +#: options/theme-options.php:1486 msgid "Slide to adjust, the recommended value range 10-20" msgstr "" -#: options/theme-options.php:1500 +#: options/theme-options.php:1499 msgid "Cover Signature Field Text" msgstr "" -#: options/theme-options.php:1501 options/theme-options.php:2762 +#: options/theme-options.php:1500 options/theme-options.php:2765 msgid "A self-descriptive quote" msgstr "" -#: options/theme-options.php:1512 +#: options/theme-options.php:1511 msgid "Cover Signature Field Text Font" msgstr "" -#: options/theme-options.php:1524 +#: options/theme-options.php:1523 msgid "Cover Signature Field Text Font Size" msgstr "" -#: options/theme-options.php:1539 +#: options/theme-options.php:1538 msgid "Cover Signature Bar Typing Effects" msgstr "" -#: options/theme-options.php:1540 +#: options/theme-options.php:1539 msgid "" "When turned on, the signature bar text will have an additional paragraph of text " "and will be rendered with typing effects" msgstr "" -#: options/theme-options.php:1551 +#: options/theme-options.php:1550 msgid "Cover Signature Field Typing Effects Double Quotes" msgstr "" -#: options/theme-options.php:1557 +#: options/theme-options.php:1556 msgid "Typing effects will be appended with double quotes when turned on" msgstr "" -#: options/theme-options.php:1564 +#: options/theme-options.php:1563 msgid "Cover Signature Field Typing Effects Placeholder" msgstr "" -#: options/theme-options.php:1577 +#: options/theme-options.php:1576 msgid "Typed.js initial option" msgstr "" -#: options/theme-options.php:1589 +#: options/theme-options.php:1588 msgid "Cover Random Image Options" msgstr "" -#: options/theme-options.php:1591 +#: options/theme-options.php:1590 msgid "External API" msgstr "" -#: options/theme-options.php:1592 +#: options/theme-options.php:1591 msgid "Webp optimized" msgstr "" -#: options/theme-options.php:1593 +#: options/theme-options.php:1592 msgid "Local" msgstr "" -#: options/theme-options.php:1602 +#: options/theme-options.php:1601 msgid "Cover Random Image Multi-terminal Separation" msgstr "" -#: options/theme-options.php:1603 +#: options/theme-options.php:1602 msgid "" "Enabled by default, desktop and mobile devices will use separate random image " "addresses" msgstr "" -#: options/theme-options.php:1611 +#: options/theme-options.php:1610 msgid "Webp Optimization/External API Desktop Side Random Graphics Address" msgstr "" -#: options/theme-options.php:1612 options/theme-options.php:1627 +#: options/theme-options.php:1611 options/theme-options.php:1630 msgid "Fill in an URL" msgstr "" -#: options/theme-options.php:1622 +#: options/theme-options.php:1624 msgid "External API Mobile Devices Random Image Address" msgstr "" -#: options/theme-options.php:1636 +#: options/theme-options.php:1639 msgid "Cover Random Background Image Cache" msgstr "" -#: options/theme-options.php:1637 +#: options/theme-options.php:1640 msgid "" "Enabled by default, this feature will cache a cover image locally, which can " "improve the loading speed of the first cover after entering the homepage. Note: " "This feature needs the cover APIs that accept cross-domain requests." msgstr "" -#: options/theme-options.php:1645 +#: options/theme-options.php:1648 msgid "Cover and Frontend Background Integration" msgstr "" -#: options/theme-options.php:1646 +#: options/theme-options.php:1649 msgid "" "When enabled, the background of the cover will be set to transparent, while the " "frontend background will use the cover's random image API" msgstr "" -#: options/theme-options.php:1654 +#: options/theme-options.php:1657 msgid "Cover Random Images Filter" msgstr "" -#: options/theme-options.php:1656 +#: options/theme-options.php:1659 msgid "No filter" msgstr "" -#: options/theme-options.php:1657 +#: options/theme-options.php:1660 msgid "Light filter" msgstr "" -#: options/theme-options.php:1658 +#: options/theme-options.php:1661 msgid "Dimmed filter" msgstr "" -#: options/theme-options.php:1659 +#: options/theme-options.php:1662 msgid "Grid filter" msgstr "" -#: options/theme-options.php:1660 +#: options/theme-options.php:1663 msgid "Dot filter" msgstr "" -#: options/theme-options.php:1669 +#: options/theme-options.php:1672 msgid "Cover Wave Effects" msgstr "" -#: options/theme-options.php:1670 +#: options/theme-options.php:1673 msgid "" "Wave effect will appear at the bottom of the cover of the home page after turning " "on, and it will be forced off in the dark mode" msgstr "" -#: options/theme-options.php:1678 +#: options/theme-options.php:1681 msgid "Cover Dropdown Arrow" msgstr "" -#: options/theme-options.php:1679 +#: options/theme-options.php:1682 msgid "Enabled by default, show a dropdown arrow at bottom of home cover" msgstr "" -#: options/theme-options.php:1687 +#: options/theme-options.php:1690 msgid "Cover Dropdown Arrow Display on Mobile Devices" msgstr "" -#: options/theme-options.php:1692 +#: options/theme-options.php:1695 msgid "" "Drop down arrow will appear at the bottom of the mobile devices' home cover after " "turning it on" msgstr "" -#: options/theme-options.php:1699 +#: options/theme-options.php:1702 msgid "Cover Dropdown Arrow Color" msgstr "" -#: options/theme-options.php:1711 +#: options/theme-options.php:1714 msgid "Cover Dropdown Arrow Color (Dark Mode)" msgstr "" -#: options/theme-options.php:1716 +#: options/theme-options.php:1719 msgid "Customize the colors, dark colors are recommended" msgstr "" -#: options/theme-options.php:1723 +#: options/theme-options.php:1726 msgid "Cover Video" msgstr "" -#: options/theme-options.php:1724 +#: options/theme-options.php:1727 msgid "Use a video instead of the images as the cover" msgstr "" -#: options/theme-options.php:1732 +#: options/theme-options.php:1735 msgid "Cover Video Loop" msgstr "" -#: options/theme-options.php:1737 +#: options/theme-options.php:1740 msgid "Video will loop automatically when enabled." msgstr "" -#: options/theme-options.php:1744 +#: options/theme-options.php:1747 msgid "Cover Video Auto Resume" msgstr "" -#: options/theme-options.php:1749 +#: options/theme-options.php:1752 msgid "" "Cover Video will resume automatically when coming back to homepage while Pjax " "enabled." msgstr "" -#: options/theme-options.php:1756 +#: options/theme-options.php:1759 msgid "Cover Video URL Base Path" msgstr "" -#: options/theme-options.php:1762 +#: options/theme-options.php:1765 msgid "" "Fill in the base path your video located at. For example: https://localhost. Your " "site's URL is used as default. Please pay attention to the protocol name of the " "URL." msgstr "" -#: options/theme-options.php:1768 +#: options/theme-options.php:1771 msgid "Cover Video File Name" msgstr "" -#: options/theme-options.php:1773 +#: options/theme-options.php:1776 msgid "" "For example: abc.mp4. Multiple videos should be separated by English commas like " "\"abc.mp4,efg.mp4,\" Random play is on by default." msgstr "" -#: options/theme-options.php:1781 +#: options/theme-options.php:1784 msgid "Cover Social Area Options" msgstr "" -#: options/theme-options.php:1788 +#: options/theme-options.php:1791 msgid "" "You can click here to learn how to set the options on this page" msgstr "" -#: options/theme-options.php:1793 +#: options/theme-options.php:1796 msgid "Related Options" msgstr "" -#: options/theme-options.php:1799 +#: options/theme-options.php:1802 msgid "Cover Social Area" msgstr "" -#: options/theme-options.php:1800 +#: options/theme-options.php:1803 msgid "" "Enabled by default, show cover random image toggle button and social network icons" msgstr "" -#: options/theme-options.php:1807 +#: options/theme-options.php:1810 msgid "Social Icon" msgstr "" -#: options/theme-options.php:1808 +#: options/theme-options.php:1811 msgid "" "Select your favorite icon pack. Icon pack references are detailed in the \"About " "Theme\" section" msgstr "" -#: options/theme-options.php:1830 +#: options/theme-options.php:1833 msgid "Cover Social Area Rounded Corners" msgstr "" -#: options/theme-options.php:1832 +#: options/theme-options.php:1835 msgid "Slide to adjust, the recommended value range is 10-20" msgstr "" -#: options/theme-options.php:1841 +#: options/theme-options.php:1844 msgid "Switch Button of Random Images" msgstr "" -#: options/theme-options.php:1843 +#: options/theme-options.php:1846 msgid "Enabled by default, show cover random image toggle button" msgstr "" -#: options/theme-options.php:1849 +#: options/theme-options.php:1852 msgid "Social Network" msgstr "" -#: options/theme-options.php:1855 +#: options/theme-options.php:1858 msgid "Wechat" msgstr "" -#: options/theme-options.php:1864 +#: options/theme-options.php:1867 msgid "QQ" msgstr "" -#: options/theme-options.php:1866 +#: options/theme-options.php:1869 msgid "" "Please note the format of filling out the form, e.g. tencent://message/?uin=123456" msgstr "" -#: options/theme-options.php:1872 +#: options/theme-options.php:1875 msgid "Bilibili" msgstr "" -#: options/theme-options.php:1874 options/theme-options.php:1882 -#: options/theme-options.php:1890 options/theme-options.php:1898 -#: options/theme-options.php:1906 options/theme-options.php:1914 -#: options/theme-options.php:1922 options/theme-options.php:1930 -#: options/theme-options.php:1938 options/theme-options.php:1946 -#: options/theme-options.php:1954 options/theme-options.php:1962 -#: options/theme-options.php:1970 options/theme-options.php:1978 -#: options/theme-options.php:1986 options/theme-options.php:1994 -#: options/theme-options.php:2019 options/theme-options.php:2326 -#: options/theme-options.php:2352 options/theme-options.php:2378 -#: options/theme-options.php:2486 +#: options/theme-options.php:1877 options/theme-options.php:1885 +#: options/theme-options.php:1893 options/theme-options.php:1901 +#: options/theme-options.php:1909 options/theme-options.php:1917 +#: options/theme-options.php:1925 options/theme-options.php:1933 +#: options/theme-options.php:1941 options/theme-options.php:1949 +#: options/theme-options.php:1957 options/theme-options.php:1965 +#: options/theme-options.php:1973 options/theme-options.php:1981 +#: options/theme-options.php:1989 options/theme-options.php:1997 +#: options/theme-options.php:2022 options/theme-options.php:2329 +#: options/theme-options.php:2355 options/theme-options.php:2381 +#: options/theme-options.php:2489 msgid "add URL" msgstr "" -#: options/theme-options.php:1880 +#: options/theme-options.php:1883 msgid "NetEase Music" msgstr "" -#: options/theme-options.php:1888 +#: options/theme-options.php:1891 msgid "Weibo" msgstr "" -#: options/theme-options.php:1896 +#: options/theme-options.php:1899 msgid "Github" msgstr "" -#: options/theme-options.php:1904 +#: options/theme-options.php:1907 msgid "Telegram" msgstr "" -#: options/theme-options.php:1912 +#: options/theme-options.php:1915 msgid "Steam" msgstr "" -#: options/theme-options.php:1920 +#: options/theme-options.php:1923 msgid "ZhiHu" msgstr "" -#: options/theme-options.php:1928 +#: options/theme-options.php:1931 msgid "QZone" msgstr "" -#: options/theme-options.php:1936 +#: options/theme-options.php:1939 msgid "Lofter" msgstr "" -#: options/theme-options.php:1944 +#: options/theme-options.php:1947 msgid "Youku" msgstr "" -#: options/theme-options.php:1952 +#: options/theme-options.php:1955 msgid "Linkedin" msgstr "" -#: options/theme-options.php:1960 +#: options/theme-options.php:1963 msgid "Twitter" msgstr "" -#: options/theme-options.php:1968 +#: options/theme-options.php:1971 msgid "Facebook" msgstr "" -#: options/theme-options.php:1976 +#: options/theme-options.php:1979 msgid "CSDN" msgstr "" -#: options/theme-options.php:1984 +#: options/theme-options.php:1987 msgid "JianShu" msgstr "" -#: options/theme-options.php:1992 +#: options/theme-options.php:1995 msgid "Customized Social Network Ⅰ" msgstr "" -#: options/theme-options.php:2000 +#: options/theme-options.php:2003 msgid "Customized Social Network Ⅰ Title" msgstr "" -#: options/theme-options.php:2008 +#: options/theme-options.php:2011 msgid "Customized Social Network Ⅰ icon" msgstr "" -#: options/theme-options.php:2017 +#: options/theme-options.php:2020 msgid "Customized Social Network Ⅱ" msgstr "" -#: options/theme-options.php:2025 +#: options/theme-options.php:2028 msgid "Customized Social Network Ⅱ Title" msgstr "" -#: options/theme-options.php:2033 +#: options/theme-options.php:2036 msgid "Customized Social Network Ⅱ icon" msgstr "" -#: options/theme-options.php:2042 +#: options/theme-options.php:2045 msgid "Email Username" msgstr "" -#: options/theme-options.php:2044 +#: options/theme-options.php:2047 msgid "" "name@domain.com fo name, the full address can be known only when there is a js " "runtime in the frontend, you can fill in with confidence" msgstr "" -#: options/theme-options.php:2050 +#: options/theme-options.php:2053 msgid "Email Domain" msgstr "" -#: options/theme-options.php:2052 +#: options/theme-options.php:2055 msgid "name@domain.com fo domain.com" msgstr "" -#: options/theme-options.php:2060 +#: options/theme-options.php:2063 msgid "Bulletin Board and Area Title Options" msgstr "" -#: options/theme-options.php:2067 +#: options/theme-options.php:2070 msgid "" "You can click here to learn how to set the options on this page" msgstr "" -#: options/theme-options.php:2072 options/theme-options.php:2078 +#: options/theme-options.php:2075 options/theme-options.php:2081 msgid "Bulletin Board" msgstr "" -#: options/theme-options.php:2079 +#: options/theme-options.php:2082 msgid "When enabled the bulletin board will be displayed below the front cover" msgstr "" -#: options/theme-options.php:2086 +#: options/theme-options.php:2089 msgid "Bulletin Board Style" msgstr "" -#: options/theme-options.php:2089 +#: options/theme-options.php:2092 msgid "Picture Background" msgstr "" -#: options/theme-options.php:2090 +#: options/theme-options.php:2093 msgid "Color Background" msgstr "" -#: options/theme-options.php:2098 +#: options/theme-options.php:2101 msgid "Bulletin Board \"Notice\" Icon" msgstr "" -#: options/theme-options.php:2100 +#: options/theme-options.php:2103 msgid "" "The \"Notice\" icon will be displayed on the left side of the announcement bar" msgstr "" -#: options/theme-options.php:2107 +#: options/theme-options.php:2110 msgid "Bulletin Board Background" msgstr "" -#: options/theme-options.php:2112 +#: options/theme-options.php:2115 msgid "Best width 820px, best height 67px" msgstr "" -#: options/theme-options.php:2120 +#: options/theme-options.php:2123 msgid "Bulletin Board Border Color" msgstr "" -#: options/theme-options.php:2125 +#: options/theme-options.php:2128 msgid "" "Customize the colors, it is recommended to use a light color that corresponds " "with the theme color" msgstr "" -#: options/theme-options.php:2132 +#: options/theme-options.php:2135 msgid "Bulletin Board Text" msgstr "" -#: options/theme-options.php:2134 +#: options/theme-options.php:2137 msgid "Fill in the announcement text, the text beyond 142 bytes will be hidden" msgstr "" -#: options/theme-options.php:2140 +#: options/theme-options.php:2143 msgid "Bulletin Board Alignment" msgstr "" -#: options/theme-options.php:2153 +#: options/theme-options.php:2156 msgid "Bulletin Board Text Color" msgstr "" -#: options/theme-options.php:2155 options/theme-options.php:2243 -#: options/theme-options.php:2439 options/theme-options.php:2675 -#: options/theme-options.php:2945 options/theme-options.php:2953 -#: options/theme-options.php:3028 options/theme-options.php:3036 +#: options/theme-options.php:2158 options/theme-options.php:2246 +#: options/theme-options.php:2442 options/theme-options.php:2678 +#: options/theme-options.php:2948 options/theme-options.php:2956 +#: options/theme-options.php:3036 options/theme-options.php:3044 msgid "" "Customize the colors, suggest using a corresponding color with the background " "color" msgstr "" -#: options/theme-options.php:2161 +#: options/theme-options.php:2164 msgid "Area Title" msgstr "" -#: options/theme-options.php:2167 +#: options/theme-options.php:2170 msgid "Display Area Icon" msgstr "" -#: options/theme-options.php:2168 +#: options/theme-options.php:2171 msgid "" "Default is \"fa-solid fa-laptop\", You can check the FontAwesome Website to see the icons that " "can be filled in" msgstr "" -#: options/theme-options.php:2175 +#: options/theme-options.php:2178 msgid "Display Area Title" msgstr "" -#: options/theme-options.php:2176 +#: options/theme-options.php:2179 msgid "" "Default is \"Display\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" msgstr "" -#: options/theme-options.php:2183 +#: options/theme-options.php:2186 msgid "Post Area Icon" msgstr "" -#: options/theme-options.php:2184 +#: options/theme-options.php:2187 msgid "" "Default is \"fa-regular fa-bookmark\", You can check the FontAwesome Website to see the icons that " "can be filled in" msgstr "" -#: options/theme-options.php:2191 +#: options/theme-options.php:2194 msgid "Post Area Title" msgstr "" -#: options/theme-options.php:2192 +#: options/theme-options.php:2195 msgid "" "Default is \"Article\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" msgstr "" -#: options/theme-options.php:2199 +#: options/theme-options.php:2202 msgid "Area Title Font" msgstr "" -#: options/theme-options.php:2207 +#: options/theme-options.php:2210 msgid "Area Title Alignment" msgstr "" -#: options/theme-options.php:2221 options/theme-options.php:2301 +#: options/theme-options.php:2224 options/theme-options.php:2304 msgid "Display Area Options" msgstr "" -#: options/theme-options.php:2228 +#: options/theme-options.php:2231 msgid "" "You can click here to learn how " "to set the options on this page" msgstr "" -#: options/theme-options.php:2234 +#: options/theme-options.php:2237 msgid "Display Area" msgstr "" -#: options/theme-options.php:2235 +#: options/theme-options.php:2238 msgid "Enabled by default, display area is above article area" msgstr "" -#: options/theme-options.php:2242 +#: options/theme-options.php:2245 msgid "Display Area Matching Color" msgstr "" -#: options/theme-options.php:2251 +#: options/theme-options.php:2254 msgid "Display Area Style" msgstr "" -#: options/theme-options.php:2263 +#: options/theme-options.php:2266 msgid "Display Area Compatibility Mode" msgstr "" -#: options/theme-options.php:2268 +#: options/theme-options.php:2271 msgid "" "Enabled by default, this option avoids the problem of misaligned display areas" msgstr "" -#: options/theme-options.php:2275 +#: options/theme-options.php:2278 msgid "Display Area Background Color" msgstr "" -#: options/theme-options.php:2287 +#: options/theme-options.php:2290 msgid "Display Area Rounded Corners" msgstr "" -#: options/theme-options.php:2305 +#: options/theme-options.php:2308 msgid "First Display Area" msgstr "" -#: options/theme-options.php:2310 options/theme-options.php:2336 -#: options/theme-options.php:2362 +#: options/theme-options.php:2313 options/theme-options.php:2339 +#: options/theme-options.php:2365 msgid "image" msgstr "" -#: options/theme-options.php:2311 options/theme-options.php:2337 -#: options/theme-options.php:2363 +#: options/theme-options.php:2314 options/theme-options.php:2340 +#: options/theme-options.php:2366 msgid "best width 260px, best height 160px" msgstr "" -#: options/theme-options.php:2316 options/theme-options.php:2342 -#: options/theme-options.php:2368 +#: options/theme-options.php:2319 options/theme-options.php:2345 +#: options/theme-options.php:2371 msgid "title" msgstr "" -#: options/theme-options.php:2321 options/theme-options.php:2347 -#: options/theme-options.php:2373 +#: options/theme-options.php:2324 options/theme-options.php:2350 +#: options/theme-options.php:2376 msgid "description" msgstr "" -#: options/theme-options.php:2331 +#: options/theme-options.php:2334 msgid "Second Display Area" msgstr "" -#: options/theme-options.php:2357 +#: options/theme-options.php:2360 msgid "Third Display Area" msgstr "" -#: options/theme-options.php:2404 +#: options/theme-options.php:2407 msgid "Article Area Options" msgstr "" -#: options/theme-options.php:2411 +#: options/theme-options.php:2414 msgid "" "You can click here to learn how " "to set the options on this page" msgstr "" -#: options/theme-options.php:2417 +#: options/theme-options.php:2420 msgid "Article Area Display Style" msgstr "" -#: options/theme-options.php:2428 +#: options/theme-options.php:2431 msgid "Article Area Matching Color" msgstr "" -#: options/theme-options.php:2430 +#: options/theme-options.php:2433 msgid "" "Customize the colors, This option only supports filling in hexadecimal colors, " "suggest the same as the matching color" msgstr "" -#: options/theme-options.php:2437 +#: options/theme-options.php:2440 msgid "Article Area Border Shadow Color" msgstr "" -#: options/theme-options.php:2446 +#: options/theme-options.php:2449 msgid "Article Area Featured Image Display Shapes" msgstr "" -#: options/theme-options.php:2448 +#: options/theme-options.php:2451 msgid "You can choose a circular or a rectangular display of the featured image" msgstr "" -#: options/theme-options.php:2459 +#: options/theme-options.php:2462 msgid "Article Area Featured Image Alignment" msgstr "" -#: options/theme-options.php:2461 +#: options/theme-options.php:2464 msgid "You can choose different directions to display the featured images" msgstr "" -#: options/theme-options.php:2473 +#: options/theme-options.php:2476 msgid "Article Area Featured Image Options" msgstr "" -#: options/theme-options.php:2475 +#: options/theme-options.php:2478 msgid "Cover Random Image" msgstr "" -#: options/theme-options.php:2476 +#: options/theme-options.php:2479 msgid "External API Random Image" msgstr "" -#: options/theme-options.php:2484 +#: options/theme-options.php:2487 msgid "Article Area Featured Image External API Random Image Address" msgstr "" -#: options/theme-options.php:2494 +#: options/theme-options.php:2497 msgid "Article Area Title Font Size" msgstr "" -#: options/theme-options.php:2495 +#: options/theme-options.php:2498 msgid "Slide to adjust, the recommended value range is 16-20" msgstr "" -#: options/theme-options.php:2507 +#: options/theme-options.php:2510 msgid "Article Area Time Display Area Font Size" msgstr "" -#: options/theme-options.php:2509 +#: options/theme-options.php:2512 msgid "Slide to adjust, the recommended values range is 10-14" msgstr "" -#: options/theme-options.php:2520 +#: options/theme-options.php:2523 msgid "Article Area Author Info" msgstr "" -#: options/theme-options.php:2521 +#: options/theme-options.php:2524 msgid "" "When turned on, author information will be added to the article metadata section." msgstr "" -#: options/theme-options.php:2530 +#: options/theme-options.php:2533 msgid "Page Options" msgstr "" -#: options/theme-options.php:2536 +#: options/theme-options.php:2539 msgid "Common Options" msgstr "" -#: options/theme-options.php:2543 +#: options/theme-options.php:2546 msgid "" "You can click here to learn how to set the options " "on this page" msgstr "" -#: options/theme-options.php:2549 +#: options/theme-options.php:2552 msgid "Page Style" msgstr "" -#: options/theme-options.php:2560 +#: options/theme-options.php:2563 msgid "Page Layout Style" msgstr "" -#: options/theme-options.php:2562 +#: options/theme-options.php:2565 msgid "Default Style" msgstr "" -#: options/theme-options.php:2563 +#: options/theme-options.php:2566 msgid "Github Style" msgstr "" -#: options/theme-options.php:2571 +#: options/theme-options.php:2574 msgid "Page Decoration Image" msgstr "" -#: options/theme-options.php:2572 +#: options/theme-options.php:2575 msgid "" "Enabled by default, show on article pages, standalone pages and category pages" msgstr "" -#: options/theme-options.php:2579 +#: options/theme-options.php:2582 msgid "Page Title Animation" msgstr "" -#: options/theme-options.php:2580 +#: options/theme-options.php:2583 msgid "Page title will have float-in animation when turned on" msgstr "" -#: options/theme-options.php:2587 +#: options/theme-options.php:2590 msgid "Page Title Animation Time" msgstr "" -#: options/theme-options.php:2589 +#: options/theme-options.php:2592 msgid "Slide to adjust, recommended value range is 1-2" msgstr "" -#: options/theme-options.php:2599 +#: options/theme-options.php:2602 msgid "Page Clipboard Copyright Notice" msgstr "" -#: options/theme-options.php:2600 +#: options/theme-options.php:2603 msgid "" "Enabled by default, users will have copyright notice text when copying text " "content over 30 bytes" msgstr "" -#: options/theme-options.php:2607 +#: options/theme-options.php:2610 msgid "Page LazyLoad" msgstr "" -#: options/theme-options.php:2608 +#: options/theme-options.php:2611 msgid "" "LazyLoad effect for page images, WordPress block editor already comes with " "similar effect, not recommended to turn on" msgstr "" -#: options/theme-options.php:2615 +#: options/theme-options.php:2618 msgid "Page LazyLoad Placeholder SVG" msgstr "" -#: options/theme-options.php:2617 +#: options/theme-options.php:2620 msgid "" "Fill in the address, this is the placeholder image that will be displayed when " "the page LazyLoad is being loaded" msgstr "" -#: options/theme-options.php:2624 +#: options/theme-options.php:2627 msgid "Page Image Placeholder SVG" msgstr "" -#: options/theme-options.php:2625 +#: options/theme-options.php:2628 msgid "" "Fill address, this is the SVG that will be displayed as a placeholder when the " "page image is being loaded" msgstr "" -#: options/theme-options.php:2634 +#: options/theme-options.php:2637 msgid "Article Page Options" msgstr "" -#: options/theme-options.php:2641 +#: options/theme-options.php:2644 msgid "" "You can click here to learn how " "to set the options on this page" msgstr "" -#: options/theme-options.php:2647 +#: options/theme-options.php:2650 msgid "Article Page Title Font Size" msgstr "" -#: options/theme-options.php:2648 +#: options/theme-options.php:2651 msgid "" "Slide to adjust, recommended value range is 28-36. This option is only available " "for article pages that have a featured image set" msgstr "" -#: options/theme-options.php:2658 +#: options/theme-options.php:2661 msgid "Article Page Title Underline Animation" msgstr "" -#: options/theme-options.php:2659 +#: options/theme-options.php:2662 msgid "" "Article title will have underline animation when this is enabled and article has " "a featured image set" msgstr "" -#: options/theme-options.php:2666 +#: options/theme-options.php:2669 msgid "Article Page Auto Show Menu" msgstr "" -#: options/theme-options.php:2667 +#: options/theme-options.php:2670 msgid "" "Enabled by default, the article page will automatically show the menu. PHP " "extension \"DOM\" is required for this feature." msgstr "" -#: options/theme-options.php:2674 +#: options/theme-options.php:2677 msgid "Inline Code Background Color" msgstr "" -#: options/theme-options.php:2682 +#: options/theme-options.php:2685 msgid "Inline Code Background Color In Dark Mode" msgstr "" -#: options/theme-options.php:2683 +#: options/theme-options.php:2686 msgid "" "Customize the colors, suggest using a corresponding color with the background " "color,this color is only displayed in dark mode" msgstr "" -#: options/theme-options.php:2689 +#: options/theme-options.php:2692 msgid "Article Expansion Area" msgstr "" -#: options/theme-options.php:2695 +#: options/theme-options.php:2698 msgid "Article Page Function Bar" msgstr "" -#: options/theme-options.php:2696 +#: options/theme-options.php:2699 msgid "" "Enabled by default, will be displayed on the article page with the features " "enabled below" msgstr "" -#: options/theme-options.php:2703 +#: options/theme-options.php:2706 msgid "Article Lincenses" msgstr "" -#: options/theme-options.php:2705 +#: options/theme-options.php:2708 msgid "Enabled by default, Article lincenses will appear on the function bar" msgstr "" -#: options/theme-options.php:2712 +#: options/theme-options.php:2715 msgid "Article Page Appreciation Function (Alipay QR Code)" msgstr "" -#: options/theme-options.php:2714 +#: options/theme-options.php:2717 msgid "Upload Alipay Receipt QR Code Image" msgstr "" -#: options/theme-options.php:2721 +#: options/theme-options.php:2724 msgid "Article Page Appreciation Function (Wechat QR Code)" msgstr "" -#: options/theme-options.php:2723 +#: options/theme-options.php:2726 msgid "Upload WeChat Receipt QR Code Image" msgstr "" -#: options/theme-options.php:2730 +#: options/theme-options.php:2733 msgid "Article Page Author Avatar" msgstr "" -#: options/theme-options.php:2732 +#: options/theme-options.php:2735 msgid "Enabled by default, Author avatar will appear on the function bar" msgstr "" -#: options/theme-options.php:2739 +#: options/theme-options.php:2742 msgid "Article Page Author Name" msgstr "" -#: options/theme-options.php:2741 +#: options/theme-options.php:2744 msgid "Author name will appear on the function bar when enabled" msgstr "" -#: options/theme-options.php:2748 +#: options/theme-options.php:2751 msgid "Article Page Author Signature" msgstr "" -#: options/theme-options.php:2750 +#: options/theme-options.php:2753 msgid "Enabled by default, Author signature will appear on the function bar" msgstr "" -#: options/theme-options.php:2757 +#: options/theme-options.php:2760 msgid "Article Page Author Info Signature Text" msgstr "" -#: options/theme-options.php:2769 +#: options/theme-options.php:2772 msgid "Article Last Update Time" msgstr "" -#: options/theme-options.php:2771 +#: options/theme-options.php:2774 msgid "Article last update time will appear on the function bar when enabled" msgstr "" -#: options/theme-options.php:2778 +#: options/theme-options.php:2781 msgid "Article Tag" msgstr "" -#: options/theme-options.php:2780 +#: options/theme-options.php:2783 msgid "Enabled by default, Article tag will appear on the function bar" msgstr "" -#: options/theme-options.php:2787 +#: options/theme-options.php:2790 msgid "Article Page Prev/Next Article Switcher" msgstr "" -#: options/theme-options.php:2788 +#: options/theme-options.php:2791 msgid "" "Enabled by default, the previous and next article switch will appear on the " "article pages" msgstr "" -#: options/theme-options.php:2797 +#: options/theme-options.php:2800 msgid "Template Page Options" msgstr "" -#: options/theme-options.php:2804 +#: options/theme-options.php:2807 msgid "" "You can click here to learn how " "to set the options on this page" msgstr "" -#: options/theme-options.php:2809 +#: options/theme-options.php:2812 msgid "Public Settings" msgstr "" -#: options/theme-options.php:2815 +#: options/theme-options.php:2818 msgid "Template Page Title Font Size" msgstr "" -#: options/theme-options.php:2816 +#: options/theme-options.php:2819 msgid "" "Slide to adjust, recommended value range is 36-48. This option is only available " "for template pages with featured images already set" msgstr "" -#: options/theme-options.php:2825 +#: options/theme-options.php:2828 msgid "ShuoShuo Template Settings" msgstr "" -#: options/theme-options.php:2831 +#: options/theme-options.php:2834 msgid "Ideas Template Background ColorⅠ" msgstr "" -#: options/theme-options.php:2839 +#: options/theme-options.php:2842 msgid "Ideas Template Background Color II" msgstr "" -#: options/theme-options.php:2847 +#: options/theme-options.php:2850 msgid "Ideas Template Tip Arrow" msgstr "" -#: options/theme-options.php:2848 +#: options/theme-options.php:2851 msgid "After turning on the alert arrow will appear on the left side of the comment" msgstr "" -#: options/theme-options.php:2855 +#: options/theme-options.php:2858 msgid "Ideas Template Font" msgstr "" -#: options/theme-options.php:2863 +#: options/theme-options.php:2866 msgid "Number Of ShuoShuo" msgstr "" -#: options/theme-options.php:2864 +#: options/theme-options.php:2867 msgid "" "Enter a positive integer or \"-1\" to control the number of ShuoShuo displayed on " "each page. Enter \"-1\" to display all messages." msgstr "" -#: options/theme-options.php:2870 +#: options/theme-options.php:2873 msgid "Bangumi Template Settings" msgstr "" -#: options/theme-options.php:2876 +#: options/theme-options.php:2879 msgid "Bangumi Template Source" msgstr "" -#: options/theme-options.php:2887 +#: options/theme-options.php:2890 msgid "My Anime List Username" msgstr "" -#: options/theme-options.php:2889 +#: options/theme-options.php:2892 msgid "Username on https://myanimelist.net/" msgstr "" -#: options/theme-options.php:2896 +#: options/theme-options.php:2899 msgid "My Anime List Sort" msgstr "" -#: options/theme-options.php:2899 +#: options/theme-options.php:2902 msgid "Status and Last Updated" msgstr "" -#: options/theme-options.php:2900 +#: options/theme-options.php:2903 msgid "Last Updated" msgstr "" -#: options/theme-options.php:2901 +#: options/theme-options.php:2904 msgid "Status" msgstr "" -#: options/theme-options.php:2909 +#: options/theme-options.php:2912 msgid "Bilibili Account UID" msgstr "" -#: options/theme-options.php:2910 +#: options/theme-options.php:2913 msgid "" "Fill in your account ID, e.g. https://space.bilibili.com/13972644/, just the " "number part \"13972644\"" msgstr "" -#: options/theme-options.php:2918 +#: options/theme-options.php:2921 msgid "Bilibili Account Cookies" msgstr "" -#: options/theme-options.php:2919 +#: options/theme-options.php:2922 msgid "" "Fill in your account cookies, F12 to open your browser web panel, go to your " "bilibili homepage to get cookies. If left empty, it will not show the progress of " "catching up bangumis" msgstr "" -#: options/theme-options.php:2926 +#: options/theme-options.php:2929 msgid "Friend Link Template Settings" msgstr "" -#: options/theme-options.php:2932 +#: options/theme-options.php:2935 msgid "Friend Link Template Unit Alignment" msgstr "" -#: options/theme-options.php:2944 +#: options/theme-options.php:2947 msgid "Friend Link Template Unit Matching Color" msgstr "" -#: options/theme-options.php:2952 +#: options/theme-options.php:2955 msgid "Friend Link Template Unit Border Shadow Color" msgstr "" -#: options/theme-options.php:2960 +#: options/theme-options.php:2963 msgid "Friend Link Sorting Mode" msgstr "" -#: options/theme-options.php:2961 +#: options/theme-options.php:2964 msgid "Select the friend link sorting mode, \"Name\" is used by Default." msgstr "" -#: options/theme-options.php:2963 +#: options/theme-options.php:2966 msgid "Name" msgstr "" -#: options/theme-options.php:2964 +#: options/theme-options.php:2967 msgid "Rating" msgstr "" -#: options/theme-options.php:2965 +#: options/theme-options.php:2968 msgid "Updated" msgstr "" -#: options/theme-options.php:2966 +#: options/theme-options.php:2969 msgid "Rand" msgstr "" -#: options/theme-options.php:2974 +#: options/theme-options.php:2977 msgid "Ascending OR Descending" msgstr "" -#: options/theme-options.php:2975 +#: options/theme-options.php:2978 msgid "Order friend link in ascending or descending." msgstr "" -#: options/theme-options.php:2978 +#: options/theme-options.php:2981 msgid "Ascending" msgstr "" -#: options/theme-options.php:2979 +#: options/theme-options.php:2982 msgid "Descending" msgstr "" -#: options/theme-options.php:2986 +#: options/theme-options.php:2989 msgid "Login Template Settings" msgstr "" -#: options/theme-options.php:2992 +#: options/theme-options.php:2995 msgid "Login Template Registration Function" msgstr "" -#: options/theme-options.php:2993 +#: options/theme-options.php:2996 msgid "Login template will allow registration when enabled" msgstr "" -#: options/theme-options.php:3002 +#: options/theme-options.php:3005 msgid "Comment-related Options" msgstr "" -#: options/theme-options.php:3009 +#: options/theme-options.php:3012 msgid "" "You can click here to learn how " "to set the options on this page" msgstr "" -#: options/theme-options.php:3015 +#: options/theme-options.php:3017 +msgid "Comment Area Style" +msgstr "" + +#: options/theme-options.php:3023 msgid "Page Comment Area Display" msgstr "" -#: options/theme-options.php:3016 +#: options/theme-options.php:3024 msgid "You can choose to expand or shirink the content of the comment area" msgstr "" -#: options/theme-options.php:3018 +#: options/theme-options.php:3026 msgid "Expand" msgstr "" -#: options/theme-options.php:3019 -msgid "Shrink" -msgstr "" - #: options/theme-options.php:3027 -msgid "Page Comment Area Matching Color" +msgid "Shrink" msgstr "" #: options/theme-options.php:3035 -msgid "Page Comment Area Shadow Color" +msgid "Page Comment Area Matching Color" msgstr "" #: options/theme-options.php:3043 -msgid "Page Comment Area Bilibili Emoji Pack" -msgstr "" - -#: options/theme-options.php:3044 -msgid "Default on, bilibili emotions are displayed below the comment box" +msgid "Page Comment Area Shadow Color" msgstr "" #: options/theme-options.php:3051 @@ -2983,545 +2979,596 @@ msgstr "" msgid "If this option is blank, there will be no image, no best recommendation here" msgstr "" -#: options/theme-options.php:3059 +#: options/theme-options.php:3058 +msgid "Comment Area Function" +msgstr "" + +#: options/theme-options.php:3064 +msgid "Comment Area Emoticon" +msgstr "" + +#: options/theme-options.php:3065 +msgid "" +"Select the emoticons to be displayed in the comment area input box. Uncheck all " +"to turn off the comment input box emoticon function." +msgstr "" + +#: options/theme-options.php:3079 +msgid "Customized Emoticon Column Name" +msgstr "" + +#: options/theme-options.php:3080 +msgid "" +"It is recommended to enter less than 4 Chinese characters in length to avoid " +"causing compatibility issues on mobile terminals." +msgstr "" + +#: options/theme-options.php:3088 +msgid "Path To Custom Expression" +msgstr "" + +#: options/theme-options.php:3089 +msgid "" +"Click here updating emoticon list. Specific usage reference: Comment related settings" +msgstr "" + +#: options/theme-options.php:3096 +msgid "Custom Emoticon Proxy Address" +msgstr "" + +#: options/theme-options.php:3097 +msgid "" +"Fill in the CDN address of the emoticon image. If left blank, the CDN proxy " +"function will not be enabled." +msgstr "" + +#: options/theme-options.php:3107 msgid "Page Comment Area UA Info" msgstr "" -#: options/theme-options.php:3060 +#: options/theme-options.php:3108 msgid "" "When enabled, the page comment area will display the user’s browser, operating " "system information" msgstr "" -#: options/theme-options.php:3067 +#: options/theme-options.php:3115 msgid "Page Comment Area Location Information" msgstr "" -#: options/theme-options.php:3068 +#: options/theme-options.php:3116 msgid "" "When enabled, the page comment area will show the user’s location information" msgstr "" -#: options/theme-options.php:3075 +#: options/theme-options.php:3123 msgid "Private Comment Function" msgstr "" -#: options/theme-options.php:3076 +#: options/theme-options.php:3124 msgid "" "When enabled, users are allowed to set their comments to be invisible to others" msgstr "" -#: options/theme-options.php:3083 +#: options/theme-options.php:3131 msgid "Page Comment Area Bot Verification" msgstr "" -#: options/theme-options.php:3084 +#: options/theme-options.php:3132 msgid "After turning on user comments need to be verified before posting" msgstr "" -#: options/theme-options.php:3091 +#: options/theme-options.php:3139 msgid "QQ Avatar Link Encryption" msgstr "" -#: options/theme-options.php:3094 +#: options/theme-options.php:3142 msgid "Redirect (low security)" msgstr "" -#: options/theme-options.php:3095 +#: options/theme-options.php:3143 msgid "Get avatar data in the backend (medium security)" msgstr "" -#: options/theme-options.php:3096 +#: options/theme-options.php:3144 msgid "Parse avatar interface in the backend (high security, slow)" msgstr "" -#: options/theme-options.php:3104 +#: options/theme-options.php:3152 msgid "Page Comment Area Upload Image Interface" msgstr "" -#: options/theme-options.php:3118 +#: options/theme-options.php:3166 msgid "Imgur Client ID" msgstr "" -#: options/theme-options.php:3120 +#: options/theme-options.php:3168 msgid "" "Fill in Client ID here, to register please visit https://api.imgur.com/oauth2/" "addclient" msgstr "" -#: options/theme-options.php:3126 +#: options/theme-options.php:3174 msgid "Imgur Upload Proxy" msgstr "" -#: options/theme-options.php:3128 +#: options/theme-options.php:3176 msgid "" "The proxy used by the backend when uploading images to Imgur. You can refer to " "the tutorial: https://2heng.xin/2018/06/06/javascript-upload-images-with-imgur-" "api/" msgstr "" -#: options/theme-options.php:3135 +#: options/theme-options.php:3183 msgid "SM.MS Secret Token" msgstr "" -#: options/theme-options.php:3137 +#: options/theme-options.php:3185 msgid "Fill in your Key here, to get it please visit https://sm.ms/home/apitoken" msgstr "" -#: options/theme-options.php:3143 +#: options/theme-options.php:3191 msgid "Chevereto API v1 Key" msgstr "" -#: options/theme-options.php:3145 +#: options/theme-options.php:3193 msgid "" "Fill in the Key here, to get please visit your Chevereto home page address/" "dashboard/settings/api" msgstr "" -#: options/theme-options.php:3151 +#: options/theme-options.php:3199 msgid "Chevereto Address" msgstr "" -#: options/theme-options.php:3153 +#: options/theme-options.php:3201 msgid "" "Your Chevereto home page address. Please note that there is no \"/\" at the end, " "e.g. https://your.cherverto.com" msgstr "" -#: options/theme-options.php:3159 +#: options/theme-options.php:3207 msgid "Lsky Pro v1 Token" msgstr "" -#: options/theme-options.php:3161 +#: options/theme-options.php:3209 msgid "" "Fill in the Token here, Please note that there is no \"Bearer \" at first, to get " "please visit your Lsky Pro home page address/api" msgstr "" -#: options/theme-options.php:3167 +#: options/theme-options.php:3215 msgid "Lsky Pro Address" msgstr "" -#: options/theme-options.php:3169 +#: options/theme-options.php:3217 msgid "" "Your Lsky Pro home page address. Please note that there is no \"/\" at the end, e." "g. https://your.lskypro.com" msgstr "" -#: options/theme-options.php:3175 +#: options/theme-options.php:3223 msgid "Comment Image Proxy" msgstr "" -#: options/theme-options.php:3176 +#: options/theme-options.php:3224 msgid "Proxy for the image displayed on the frontend" msgstr "" -#: options/theme-options.php:3183 +#: options/theme-options.php:3231 +msgid "Comment Email Notification" +msgstr "" + +#: options/theme-options.php:3237 msgid "Mail Template Featured Image" msgstr "" -#: options/theme-options.php:3184 +#: options/theme-options.php:3238 msgid "Set the background image of your reply email" msgstr "" -#: options/theme-options.php:3192 +#: options/theme-options.php:3246 msgid "Mail Template Sending Address Prefix" msgstr "" -#: options/theme-options.php:3193 +#: options/theme-options.php:3247 msgid "" "Used to send system mail. The sender address will be displayed in the user's " "mailbox, don't use Non-English Characters. The default system mail address is " "bibi@your domain" msgstr "" -#: options/theme-options.php:3200 +#: options/theme-options.php:3254 msgid "User Mail Reply Notification" msgstr "" -#: options/theme-options.php:3201 +#: options/theme-options.php:3255 msgid "" "By default WordPress will use email notifications to notify users when their " "comments receive a reply. After turning it on users are allowed to set whether to " "use email notifications when their comments receive a reply" msgstr "" -#: options/theme-options.php:3208 +#: options/theme-options.php:3262 msgid "Admin Email Reply Notification" msgstr "" -#: options/theme-options.php:3209 +#: options/theme-options.php:3263 msgid "" "Use email notifications when admin comments receive a reply after turning it on" msgstr "" -#: options/theme-options.php:3218 +#: options/theme-options.php:3272 msgid "Other Options" msgstr "" -#: options/theme-options.php:3224 +#: options/theme-options.php:3278 msgid "Login Screen and Dashboard Related Options" msgstr "" -#: options/theme-options.php:3231 +#: options/theme-options.php:3285 msgid "" "You can click here to learn how to set the options on this page" msgstr "" -#: options/theme-options.php:3236 +#: options/theme-options.php:3290 msgid "Login Screen" msgstr "" -#: options/theme-options.php:3242 +#: options/theme-options.php:3296 msgid "Custom Login Screen" msgstr "" -#: options/theme-options.php:3243 +#: options/theme-options.php:3297 msgid "Default on, custom login screen will replace the default login screen" msgstr "" -#: options/theme-options.php:3250 +#: options/theme-options.php:3304 msgid "Login Screen Background Image" msgstr "" -#: options/theme-options.php:3251 +#: options/theme-options.php:3305 msgid "" "Set your login screen background image, leave this option blank to show the " "default" msgstr "" -#: options/theme-options.php:3260 +#: options/theme-options.php:3314 msgid "Login Screen Background Blur" msgstr "" -#: options/theme-options.php:3261 +#: options/theme-options.php:3315 msgid "Login screen background image will be blurred when enabled" msgstr "" -#: options/theme-options.php:3269 +#: options/theme-options.php:3323 msgid "Login Screen Logo" msgstr "" -#: options/theme-options.php:3270 +#: options/theme-options.php:3324 msgid "Set your login screen Logo" msgstr "" -#: options/theme-options.php:3279 +#: options/theme-options.php:3333 msgid "Jump after login" msgstr "" -#: options/theme-options.php:3280 +#: options/theme-options.php:3334 msgid "Jump to backend for admins and home for users after turning on." msgstr "" -#: options/theme-options.php:3287 +#: options/theme-options.php:3341 msgid "Login Screen Language Option" msgstr "" -#: options/theme-options.php:3288 +#: options/theme-options.php:3342 msgid "Login screen language option will be display when enabled" msgstr "" -#: options/theme-options.php:3294 +#: options/theme-options.php:3348 msgid "Dashboard" msgstr "" -#: options/theme-options.php:3300 +#: options/theme-options.php:3354 msgid "Dashboard Background Image" msgstr "" -#: options/theme-options.php:3301 +#: options/theme-options.php:3355 msgid "" "Set your dashboard background image, leave this option blank to show white " "background" msgstr "" -#: options/theme-options.php:3309 +#: options/theme-options.php:3363 msgid "Dashboard Options Menu Style" msgstr "" -#: options/theme-options.php:3320 +#: options/theme-options.php:3374 msgid "Dashboard Primary Menu Color" msgstr "" -#: options/theme-options.php:3328 +#: options/theme-options.php:3382 msgid "Dashboard Secondary Menu Color" msgstr "" -#: options/theme-options.php:3336 +#: options/theme-options.php:3390 msgid "Dashboard Emphasis Color" msgstr "" -#: options/theme-options.php:3344 +#: options/theme-options.php:3398 msgid "Dashboard Button Color" msgstr "" -#: options/theme-options.php:3352 +#: options/theme-options.php:3406 msgid "Dashboard Text Color" msgstr "" -#: options/theme-options.php:3362 +#: options/theme-options.php:3416 msgid "ChatGPT Options" msgstr "" -#: options/theme-options.php:3369 +#: options/theme-options.php:3423 msgid "" "You can click here to learn how to set the options on this page" msgstr "" -#: options/theme-options.php:3375 +#: options/theme-options.php:3429 msgid "ChatGPT Function" msgstr "" -#: options/theme-options.php:3376 +#: options/theme-options.php:3430 msgid "After turning on ChatGPT Function will be available" msgstr "" -#: options/theme-options.php:3383 +#: options/theme-options.php:3437 msgid "ChatGPT Base URL" msgstr "" -#: options/theme-options.php:3384 +#: options/theme-options.php:3438 msgid "Fill in the ChatGPT Base URL, The default is http://sxy.gay/" msgstr "" -#: options/theme-options.php:3392 +#: options/theme-options.php:3446 msgid "ChatGPT API keys" msgstr "" -#: options/theme-options.php:3393 +#: options/theme-options.php:3447 msgid "" "Fill in Your ChatGPT API keys, You can go to OpenAI Website to get your API Keys" msgstr "" -#: options/theme-options.php:3400 +#: options/theme-options.php:3454 msgid "ChatGPT Article Summarize" msgstr "" -#: options/theme-options.php:3401 +#: options/theme-options.php:3455 msgid "After turning on ChatGPT will automatically generate article abstracts" msgstr "" -#: options/theme-options.php:3408 +#: options/theme-options.php:3462 msgid "" "Each update of your post will trigger a request to generate a summary. Due to " "current API limitations, if your article exceeds 4097 Token, the system will only " "send the unexceeded portion to generate a summary" msgstr "" -#: options/theme-options.php:3418 +#: options/theme-options.php:3472 msgid "Article IDs that do not Require ChatGPT Summarize" msgstr "" -#: options/theme-options.php:3419 +#: options/theme-options.php:3473 msgid "" "Enter the article IDs that do not need to generate ChatGPT Summarize, and split " "multiple article IDs with \",\"" msgstr "" -#: options/theme-options.php:3430 +#: options/theme-options.php:3484 msgid "ChatGPT Article Summarize Init Prompt" msgstr "" -#: options/theme-options.php:3435 +#: options/theme-options.php:3489 msgid "" "Fill in the Init Prompt, Please make changes if you know how to configure it " "correctly. Init Prompt will be passed to ChatGPT as \"system\" role" msgstr "" -#: options/theme-options.php:3446 +#: options/theme-options.php:3500 msgid "ChatGPT Article Summarize Ask Prompt" msgstr "" -#: options/theme-options.php:3451 +#: options/theme-options.php:3505 msgid "" "Fill in the Ask Prompt, Use preset value when option is empty, Please make " "changes if you know how to configure it correctly" msgstr "" -#: options/theme-options.php:3459 +#: options/theme-options.php:3513 msgid "Low Use Options" msgstr "" -#: options/theme-options.php:3466 +#: options/theme-options.php:3520 msgid "" "You can click here to learn how to set the " "options on this page" msgstr "" -#: options/theme-options.php:3472 +#: options/theme-options.php:3526 msgid "Statistics API" msgstr "" -#: options/theme-options.php:3473 +#: options/theme-options.php:3527 msgid "" "You can choose WP-Statistics plugin statistics or theme built-in statistics to " "display" msgstr "" -#: options/theme-options.php:3475 +#: options/theme-options.php:3529 msgid "Theme Built in Statistics" msgstr "" -#: options/theme-options.php:3476 +#: options/theme-options.php:3530 msgid "WP-Statistics Plugin Statistics" msgstr "" -#: options/theme-options.php:3484 +#: options/theme-options.php:3538 msgid "Statistics display format" msgstr "" -#: options/theme-options.php:3485 +#: options/theme-options.php:3539 msgid "You can choose from four different data display formats" msgstr "" -#: options/theme-options.php:3487 +#: options/theme-options.php:3541 msgid "23333 Visits" msgstr "" -#: options/theme-options.php:3488 +#: options/theme-options.php:3542 msgid "23,333 Visits" msgstr "" -#: options/theme-options.php:3489 +#: options/theme-options.php:3543 msgid "23 333 Visits" msgstr "" -#: options/theme-options.php:3490 +#: options/theme-options.php:3544 msgid "23K Visits" msgstr "" -#: options/theme-options.php:3498 +#: options/theme-options.php:3552 msgid "Live Search" msgstr "" -#: options/theme-options.php:3499 +#: options/theme-options.php:3553 msgid "" "After turning on the live search in the frontend, call Rest API to update the " "cache once an hour. You can set the cache time manually in api.php" msgstr "" -#: options/theme-options.php:3506 +#: options/theme-options.php:3560 msgid "Live Search Comment Support" msgstr "" -#: options/theme-options.php:3508 +#: options/theme-options.php:3562 msgid "" "Enable to search for comments in live search (not recommended if site has too " "many comments)" msgstr "" -#: options/theme-options.php:3515 +#: options/theme-options.php:3569 msgid "Google Analytics Id" msgstr "" -#: options/theme-options.php:3516 +#: options/theme-options.php:3570 msgid "If you already have a plugin to handle it, please keep here empty." msgstr "" -#: options/theme-options.php:3522 +#: options/theme-options.php:3576 msgid "Custom CSS Styles" msgstr "" -#: options/theme-options.php:3523 +#: options/theme-options.php:3577 msgid "Fill in the CSS code without writing style tag" msgstr "" -#: options/theme-options.php:3530 +#: options/theme-options.php:3584 msgid "Code inserted in the header" msgstr "" -#: options/theme-options.php:3531 +#: options/theme-options.php:3585 msgid "Insert HTML code right before ." msgstr "" -#: options/theme-options.php:3537 +#: options/theme-options.php:3591 msgid "Timezone Fix" msgstr "" -#: options/theme-options.php:3538 +#: options/theme-options.php:3592 msgid "" "Slide to adjust. If the comment has a time difference problem, adjust it here, " "fill in an integer. Calculation method: actual time = time of display error - the " "integer you entered (in hours)" msgstr "" -#: options/theme-options.php:3547 +#: options/theme-options.php:3601 msgid "Gravatar Service Proxy" msgstr "" -#: options/theme-options.php:3548 +#: options/theme-options.php:3602 msgid "" "You can select multiple proxy as the Gravatar Service Proxy. By default, Tianli " "is used as the Gravatar Service Proxy." msgstr "" -#: options/theme-options.php:3550 +#: options/theme-options.php:3604 msgid "Weavatar Service" msgstr "" -#: options/theme-options.php:3551 +#: options/theme-options.php:3605 msgid "Cravatar Service" msgstr "" -#: options/theme-options.php:3552 +#: options/theme-options.php:3606 msgid "Geekzu" msgstr "" -#: options/theme-options.php:3553 +#: options/theme-options.php:3607 msgid "Loli Net" msgstr "" -#: options/theme-options.php:3554 +#: options/theme-options.php:3608 msgid "Official" msgstr "" -#: options/theme-options.php:3555 options/theme-options.php:3563 +#: options/theme-options.php:3609 options/theme-options.php:3617 msgid "Custom Proxy Address" msgstr "" -#: options/theme-options.php:3564 +#: options/theme-options.php:3618 msgid "" "Enter your Gravatar proxy address without starting with \"http(s)://\" and ending " "with \"/\". Example: gravatar.com/avatar." msgstr "" -#: options/theme-options.php:3571 +#: options/theme-options.php:3625 msgid "Lightbox" msgstr "" -#: options/theme-options.php:3577 +#: options/theme-options.php:3631 msgid "BaguetteBox Lightbox Effect" msgstr "" -#: options/theme-options.php:3578 +#: options/theme-options.php:3632 msgid "BaguetteBox will be used as the image lightbox effect when turned on" msgstr "" -#: options/theme-options.php:3590 +#: options/theme-options.php:3644 msgid "FancyBox Lightbox Effect" msgstr "" -#: options/theme-options.php:3591 +#: options/theme-options.php:3645 msgid "" "FancyBox will be used as an image lightbox effect after turning on, additional JQ " "libraries will be loaded" msgstr "" -#: options/theme-options.php:3603 +#: options/theme-options.php:3657 msgid "LightGallery Lightbox Effect" msgstr "" -#: options/theme-options.php:3604 +#: options/theme-options.php:3658 msgid "LightGallery will be used as an image lightbox effect after turning on." msgstr "" -#: options/theme-options.php:3614 +#: options/theme-options.php:3668 msgid "" "Attension: Please read License Instruction before use.
        Highlight.js: Default. Automatic language recognition.

        " "

        Prism.js: Requires a language to be specified, see " msgstr "" -#: options/theme-options.php:3657 +#: options/theme-options.php:3711 msgid "Code Highlight Method" msgstr "" -#: options/theme-options.php:3661 +#: options/theme-options.php:3715 msgid "Custom Program" msgstr "" -#: options/theme-options.php:3669 +#: options/theme-options.php:3723 msgid "Prism.js: Add Line Number Display for All Code Blocks" msgstr "" -#: options/theme-options.php:3673 +#: options/theme-options.php:3727 msgid "" "See the plugin description " "documentation" msgstr "" -#: options/theme-options.php:3679 +#: options/theme-options.php:3733 msgid "Prism.js: Autoload Address" msgstr "" -#: options/theme-options.php:3683 +#: options/theme-options.php:3737 msgid "Leave blank to use default values" msgstr "" -#: options/theme-options.php:3690 +#: options/theme-options.php:3744 msgid "Prism.js: Code Highlight Theme" msgstr "" -#: options/theme-options.php:3691 options/theme-options.php:3702 +#: options/theme-options.php:3745 options/theme-options.php:3756 msgid "Relative to autoload address. Leave blank to use default values" msgstr "" -#: options/theme-options.php:3701 +#: options/theme-options.php:3755 msgid "Prism.js: Code Highlight Theme (Dark Mode)" msgstr "" -#: options/theme-options.php:3712 +#: options/theme-options.php:3766 msgid "" "The following Options are not recommended to be modified blindly, please use them " "under the guidance of others" msgstr "" -#: options/theme-options.php:3718 +#: options/theme-options.php:3772 msgid "Image CDN" msgstr "" -#: options/theme-options.php:3719 +#: options/theme-options.php:3773 msgid "" "Note: fill in the format https://your CDN domain/. This means that images with " "original path http://your.domain/wp-content/uploads/2018/05/xx.png will be loaded " "from http://your CDN domain/2018/05/xx.png" msgstr "" -#: options/theme-options.php:3726 +#: options/theme-options.php:3780 msgid "Articles Categories (Do not display)" msgstr "" -#: options/theme-options.php:3727 options/theme-options.php:3734 +#: options/theme-options.php:3781 options/theme-options.php:3788 msgid "Fill in category ID, seperate in English\" , \" when more than one" msgstr "" -#: options/theme-options.php:3733 +#: options/theme-options.php:3787 msgid "Image Display Category" msgstr "" -#: options/theme-options.php:3740 +#: options/theme-options.php:3794 msgid "Specify Login Address" msgstr "" -#: options/theme-options.php:3741 +#: options/theme-options.php:3795 msgid "" "Force not to use the WordPress login page address to login, fill in the new login " "page address, such as: http://www.xxx.com/login. Note that before filling in the " @@ -3638,72 +3685,72 @@ msgid "" "enter the background, etc." msgstr "" -#: options/theme-options.php:3747 +#: options/theme-options.php:3801 msgid "Specify Registration Address" msgstr "" -#: options/theme-options.php:3748 +#: options/theme-options.php:3802 msgid "" "This address is used as the registration entry on the login page, if you specify " "a login address, it is recommended to fill in" msgstr "" -#: options/theme-options.php:3754 +#: options/theme-options.php:3808 msgid "Version Control" msgstr "" -#: options/theme-options.php:3755 +#: options/theme-options.php:3809 msgid "Used to update front-end cookies and browser cache, can use any string" msgstr "" -#: options/theme-options.php:3761 +#: options/theme-options.php:3815 msgid "Backup&Recovery" msgstr "" -#: options/theme-options.php:3763 +#: options/theme-options.php:3817 msgid "Backup or Recovery your theme options" msgstr "" -#: options/theme-options.php:3774 +#: options/theme-options.php:3828 msgid "About Theme" msgstr "" -#: options/theme-options.php:3780 +#: options/theme-options.php:3834 msgid "Version Info" msgstr "" -#: options/theme-options.php:3785 +#: options/theme-options.php:3839 msgid "" "" msgstr "" -#: options/theme-options.php:3791 +#: options/theme-options.php:3845 #, php-format msgid "" "Theme Sakurairo Version %s | Internal Version %s | Project Address" msgstr "" -#: options/theme-options.php:3796 +#: options/theme-options.php:3850 msgid "Update Related" msgstr "" -#: options/theme-options.php:3802 +#: options/theme-options.php:3856 msgid "Theme Update Source" msgstr "" -#: options/theme-options.php:3808 +#: options/theme-options.php:3862 msgid "" "If you are using a server set up in mainland China, please use the Upyun source " "or the official theme source as your theme update source" msgstr "" -#: options/theme-options.php:3815 +#: options/theme-options.php:3869 msgid "Theme Update Test Channel Disclaimer" msgstr "" -#: options/theme-options.php:3821 +#: options/theme-options.php:3875 msgid "" "Please copy the text in quotes after ensure that you have carefully " "understood the risks associated with participating in the test and are willing to " @@ -3712,70 +3759,70 @@ msgid "" "to bear all unexpected consequences\"" msgstr "" -#: options/theme-options.php:3827 +#: options/theme-options.php:3881 msgid "Theme Update Channel" msgstr "" -#: options/theme-options.php:3834 +#: options/theme-options.php:3888 msgid "" "You can toggle the update channel here to participate in the testing of the new " "version" msgstr "" -#: options/theme-options.php:3836 +#: options/theme-options.php:3890 msgid "Stable Channel" msgstr "" -#: options/theme-options.php:3837 +#: options/theme-options.php:3891 msgid "Beta Channel" msgstr "" -#: options/theme-options.php:3838 +#: options/theme-options.php:3892 msgid "Preview Channel" msgstr "" -#: options/theme-options.php:3845 +#: options/theme-options.php:3899 msgid "Resource Control" msgstr "" -#: options/theme-options.php:3851 +#: options/theme-options.php:3905 msgid "Provide Critical Frontend Resource locally" msgstr "" -#: options/theme-options.php:3852 +#: options/theme-options.php:3906 msgid "" "Enabeld by default. Critical resources are those resources whose loading " "performance will have a significant impact on the user experience." msgstr "" -#: options/theme-options.php:3859 +#: options/theme-options.php:3913 msgid "Provide Other Frontend Resource locally" msgstr "" -#: options/theme-options.php:3860 +#: options/theme-options.php:3914 msgid "Less important frontend resource in the theme's folder." msgstr "" -#: options/theme-options.php:3867 +#: options/theme-options.php:3921 msgid "Provide 3rd-party library from public CDN" msgstr "" -#: options/theme-options.php:3868 +#: options/theme-options.php:3922 msgid "" "When disabled, 3rd-party dependencies, which have been built to bundles along " "with themes's entry script, will be loaded from the exact same origin with " "Critical Frontend Resource. " msgstr "" -#: options/theme-options.php:3875 +#: options/theme-options.php:3929 msgid "Public CDN Basepath" msgstr "" -#: options/theme-options.php:3887 +#: options/theme-options.php:3941 msgid "Vision Resource Basepath" msgstr "" -#: options/theme-options.php:3888 +#: options/theme-options.php:3942 msgid "" "This link directory structure needs to be consistent with the Sakurairo Vision repositories officially " @@ -3784,31 +3831,31 @@ msgid "" "default." msgstr "" -#: options/theme-options.php:3894 +#: options/theme-options.php:3948 msgid "Theme Sponsors" msgstr "" -#: options/theme-options.php:3899 +#: options/theme-options.php:3953 msgid "" "\"sponsors\"" msgstr "" -#: options/theme-options.php:3904 +#: options/theme-options.php:3958 msgid "Theme Contributors" msgstr "" -#: options/theme-options.php:3909 +#: options/theme-options.php:3963 msgid "" "\"Theme" msgstr "" -#: options/theme-options.php:3914 +#: options/theme-options.php:3968 msgid "Privacy information" msgstr "" -#: options/theme-options.php:3919 +#: options/theme-options.php:3973 msgid "" "

        The theme respects your privacy

        \n" "

        However, when you use a service provider pre-populated by the theme to " @@ -3819,21 +3866,21 @@ msgid "" "you to modify

        " msgstr "" -#: options/theme-options.php:3927 +#: options/theme-options.php:3981 msgid "Send Theme Version to Fuukei" msgstr "" -#: options/theme-options.php:3928 +#: options/theme-options.php:3982 msgid "" "The theme will only send time and version information to Fuukei officials and the " "data will be cleaned regularly and used only to count version updates." msgstr "" -#: options/theme-options.php:3934 +#: options/theme-options.php:3988 msgid "Reference Information" msgstr "" -#: options/theme-options.php:3939 +#: options/theme-options.php:3993 msgid "" "

        Fluent Design Icon Referenced by Paradox Fluent Icon Pack

        \n" @@ -3843,11 +3890,11 @@ msgid "" "Provided and Referenced by Hyacm

        " msgstr "" -#: options/theme-options.php:3946 +#: options/theme-options.php:4000 msgid "Dependency Information" msgstr "" -#: options/theme-options.php:3951 +#: options/theme-options.php:4005 msgid "" "

        Options Framework Relies on the Codestar Open Source Codestar Framework Project

        \n" @@ -3858,7 +3905,7 @@ msgid "" "href=\"https://github.com/HaoZi-Team/ChatGPT-PHP\">ChatGPT PHP Project

        " msgstr "" -#: options/theme-options.php:3958 +#: options/theme-options.php:4012 msgid "" "\"ThemezngvL+3bNY3x_WC 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 z zO(X6>+j7*V-!mqO$MZj)PTyH_55^FuwJTJ|U#;zZ1#G1#F9J2bh|sp3`V@=BYzjY< zdKEcNQc4QjzW~R)X7!xZ(^F5(`MpwfipBAi-IQ7sZQ(YE8??W)9b4n~#Ch;T{K4{W z4~|2w7-f(p3RBnC{+)h{iJw#cCa3dzGbjVCqvDm+Ytxv^22dJrkuO9pJ@xCV zdAp^eK8xTEHfI0*n3PhC{IKLJ(eHhVw#?*rshxaD;u4g8#4$LPTp`qUiIO%@3tT@Zrqg^nXnTrz zUDazw{%@-%BEOaLlAN{%lt}8|1tLBNXlr5v=||n8)VDTKg?KXkFHo;({ocNRyhnD> z3UvC5a!q@%b+-ID{E6bT9V<~!NP92(mZAO+r3CeIv?s<6l59!swxO(~Q#831 z)c+;lDPC-Wnzf_m%<8%A z`bV|v*D0!F*ZzHawEMVI$Efz5dh{L~HK0qUs1Ch*_UzPaKvetQLt+mM>KPilc;f1m zvEMH0n{dOI?&ndquZEVb{H}PU?uU(TkcHq`K1(FsjnZHO(R7_0i zqQ&NPzIGyhkpeNXMXx`}G_Ry@ejNXdt#X36VL`qU@#2mL`${G#IA`vyIqPo){=B<# z-R-gCZ%rM4d*QctR_(gAblu&}here" "此处 了解如何在此页面上设置选项" -#: options/theme-options.php:587 +#: options/theme-options.php:586 msgid "Widgets Panel" msgstr "小组件面板" -#: options/theme-options.php:593 +#: options/theme-options.php:592 msgid "Widgets Panel Button Radius" msgstr "小组件面板按钮圆角" -#: options/theme-options.php:594 options/theme-options.php:604 +#: options/theme-options.php:593 options/theme-options.php:603 msgid "Slide to adjust, the recommended value is 10" msgstr "滑动滑块,推荐数值为10" -#: options/theme-options.php:603 +#: options/theme-options.php:602 msgid "Widgets Panel Widget Radius" msgstr "小组件面板组件圆角" -#: options/theme-options.php:613 +#: options/theme-options.php:612 msgid "Widgets Panel Font" msgstr "小组件面板字体" -#: options/theme-options.php:621 +#: options/theme-options.php:620 msgid "Widgets Panel WP Widget Area" msgstr "小组件面板WP小工具区" -#: options/theme-options.php:622 +#: options/theme-options.php:621 msgid "When turned on, the WP Widget Area will be displayed in Widgets Panel" msgstr "开启之后WP小工具区将显示在小组件面板" -#: options/theme-options.php:629 +#: options/theme-options.php:628 msgid "Widgets Panel Shuoshuo" msgstr "小组件面板说说" -#: options/theme-options.php:630 +#: options/theme-options.php:629 msgid "" "When turned on, the Latest Shuoshuo text will be displayed in Widgets Panel" msgstr "开启之后最新发布的说说将显示在小组件面板" -#: options/theme-options.php:637 +#: options/theme-options.php:636 msgid "Widgets Panel Day&Night Switching" msgstr "小部件面板浅色/深色模式切换" -#: options/theme-options.php:638 +#: options/theme-options.php:637 msgid "" "Enabled by default, the Day&Night Switching will be displayed in Widgets " "Panel" msgstr "默认开启,小组件面板将出现浅色/深色模式切换组件" -#: options/theme-options.php:645 +#: options/theme-options.php:644 msgid "Widgets Panel Font Switching" msgstr "小组件面板字体切换" -#: options/theme-options.php:646 +#: options/theme-options.php:645 msgid "" "Enabled by default, the Font Switching will be displayed in Widgets Panel" msgstr "默认开启,小组件面板将出现字体切换组件" -#: options/theme-options.php:652 +#: options/theme-options.php:651 msgid "Frontend Background" msgstr "前台背景" -#: options/theme-options.php:663 +#: options/theme-options.php:662 msgid "Frontend Background Scaling Method" msgstr "前台背景缩放方式" -#: options/theme-options.php:664 +#: options/theme-options.php:663 msgid "" "You can choose two ways to scale the frontend background, the default is " "auto-scaling" msgstr "你可以选择两种方式缩放前台背景,默认自动缩放" -#: options/theme-options.php:671 +#: options/theme-options.php:670 msgid "Background Transparency Blur" msgstr "前台背景模糊" -#: options/theme-options.php:672 +#: options/theme-options.php:671 msgid "After opening Background Transparency Blur" msgstr "开启之后前台背景模糊" -#: options/theme-options.php:679 +#: options/theme-options.php:678 msgid "Widgets Panel Background Switching(Frontend Background)" msgstr "小组件面板背景切换(前台背景)" -#: options/theme-options.php:688 options/theme-options.php:704 -#: options/theme-options.php:720 options/theme-options.php:736 -#: options/theme-options.php:752 +#: options/theme-options.php:687 options/theme-options.php:703 +#: options/theme-options.php:719 options/theme-options.php:735 +#: options/theme-options.php:751 msgid "Image" msgstr "图片" -#: options/theme-options.php:693 +#: options/theme-options.php:692 msgid "Heart Shaped" msgstr "心形形状" -#: options/theme-options.php:699 options/theme-options.php:715 -#: options/theme-options.php:731 options/theme-options.php:747 +#: options/theme-options.php:698 options/theme-options.php:714 +#: options/theme-options.php:730 options/theme-options.php:746 msgid "Switch" msgstr "开关" -#: options/theme-options.php:709 +#: options/theme-options.php:708 msgid "Star Shaped" msgstr "星形形状" -#: options/theme-options.php:725 +#: options/theme-options.php:724 msgid "Square Shaped" msgstr "方形形状" -#: options/theme-options.php:741 +#: options/theme-options.php:740 msgid "Lemon Shaped" msgstr "柠檬形状" -#: options/theme-options.php:772 +#: options/theme-options.php:771 msgid "Background Transparency in the Frontend" msgstr "前台背景透明度" -#: options/theme-options.php:773 +#: options/theme-options.php:772 msgid "Slide to adjust, the recommended sliding value range is 0.6-0.8" msgstr "滑动滑块,推荐数值范围为0.6-0.8" -#: options/theme-options.php:782 +#: options/theme-options.php:781 msgid "Frontend Font" msgstr "前台字体" -#: options/theme-options.php:788 +#: options/theme-options.php:787 msgid "Global Default Font/Widgets Panel Font Switching A" msgstr "默认字体/小组件面板字体切换 A" -#: options/theme-options.php:795 +#: options/theme-options.php:794 msgid "Widgets Panel Font Switching B" msgstr "小组件面板字体切换 B" -#: options/theme-options.php:805 +#: options/theme-options.php:804 msgid "Footer Options" msgstr "页尾设置" -#: options/theme-options.php:812 +#: options/theme-options.php:811 msgid "" "You can click here to learn how to set the " @@ -1310,37 +1310,37 @@ msgstr "" "您可以单击 此处 了解如何在此页面上设置选项" -#: options/theme-options.php:818 +#: options/theme-options.php:817 msgid "Footer Online Music Player" msgstr "页尾在线音乐播放器" -#: options/theme-options.php:819 +#: options/theme-options.php:818 msgid "" "A button will appear at the bottom left corner of the footer after turning " "on, click it and the footer online player will be displayed" msgstr "开启之后页尾左下角将出现按钮,点击按钮后页尾在线播放器将显示" -#: options/theme-options.php:822 +#: options/theme-options.php:821 msgid "Netease Cloud Music" msgstr "网易云音乐" -#: options/theme-options.php:823 +#: options/theme-options.php:822 msgid "Kugou Music(may not be available)" msgstr "酷狗音乐(可能无法使用)" -#: options/theme-options.php:824 +#: options/theme-options.php:823 msgid "Baidu Music(not available on servers overseas)" msgstr "千千音乐(海外服务器无法使用)" -#: options/theme-options.php:825 +#: options/theme-options.php:824 msgid "QQ Music(may not be available)" msgstr "QQ音乐(可能无法使用)" -#: options/theme-options.php:833 +#: options/theme-options.php:832 msgid "Footer Online Music Player Proxy" msgstr "页尾在线音乐播放器代理" -#: options/theme-options.php:835 +#: options/theme-options.php:834 msgid "" "Ex. http://127.0.0.1:8080. Reference: https://curl.se/libcurl/c/" "CURLOPT_PROXY.html" @@ -1348,11 +1348,11 @@ msgstr "" "例如:http://127.0.0.1:8080 请参考:https://curl.se/libcurl/c/CURLOPT_PROXY." "html" -#: options/theme-options.php:842 +#: options/theme-options.php:841 msgid "Footer Online Music Player Songlist ID" msgstr "页尾在线播放器歌单ID" -#: options/theme-options.php:844 +#: options/theme-options.php:843 msgid "" "Fill in the song ID, e.g. https://music.163.com/#/playlist?id=5380675133 " "SongID:5380675133" @@ -1360,113 +1360,113 @@ msgstr "" "填写歌单ID,例如:https://music.163.com/#/playlist?id=5380675133的歌单ID是" "5380675133" -#: options/theme-options.php:851 +#: options/theme-options.php:850 msgid "Footer Online Music Player Mode" msgstr "页尾在线音乐播放器模式" -#: options/theme-options.php:853 +#: options/theme-options.php:852 msgid "Select music player mode" msgstr "选择音乐播放器模式" -#: options/theme-options.php:855 +#: options/theme-options.php:854 msgid "List" msgstr "列表播放" -#: options/theme-options.php:856 +#: options/theme-options.php:855 msgid "Random" msgstr "随机播放" -#: options/theme-options.php:864 +#: options/theme-options.php:863 msgid "Footer Online Music Player Preload" msgstr "页尾在线音乐播放器预加载" -#: options/theme-options.php:866 +#: options/theme-options.php:865 msgid "Whether to preload songs" msgstr "选择是否预加载歌曲" -#: options/theme-options.php:869 +#: options/theme-options.php:868 msgid "Preload Metadata" msgstr "预加载元数据" -#: options/theme-options.php:878 +#: options/theme-options.php:877 msgid "Default Volume of Footer Online Music Player" msgstr "页尾在线音乐播放器默认音量" -#: options/theme-options.php:880 +#: options/theme-options.php:879 msgid "Slide to adjust, the recommended sliding value range is 0.4-0.6" msgstr "滑动滑块,推荐数值范围为0.4-0.6" -#: options/theme-options.php:889 +#: options/theme-options.php:888 msgid "Netease Cloud Music Cookies" msgstr "网易云音乐Cookies" -#: options/theme-options.php:891 +#: options/theme-options.php:890 msgid "" "If you want to play VIP music on Netease Cloud Music Platform, please fill " "in your account cookies in this option." msgstr "如果你想播放网易云音乐会员专享音乐,请在此选项填入你的帐号Cookies。" -#: options/theme-options.php:897 +#: options/theme-options.php:896 msgid "Footer Sakura Icon" msgstr "页尾樱花图标" -#: options/theme-options.php:898 +#: options/theme-options.php:897 msgid "Enabled by default, sakura icon will appear on the footer" msgstr "默认开启,将在页尾显示樱花图标" -#: options/theme-options.php:905 +#: options/theme-options.php:904 msgid "Footer Info" msgstr "页尾信息" -#: options/theme-options.php:906 +#: options/theme-options.php:905 msgid "Footer description text, supports HTML code" msgstr "页尾说明文字,支持HTML代码" -#: options/theme-options.php:913 +#: options/theme-options.php:912 msgid "Footer Text Font" msgstr "页尾文本字体" -#: options/theme-options.php:921 +#: options/theme-options.php:920 msgid "Footer Load Occupancy Query" msgstr "页尾负载占用查询" -#: options/theme-options.php:922 +#: options/theme-options.php:921 msgid "" "Load occupancy information will appear at the end of the page after turning " "it on. Not recommended in production environment." msgstr "" "开始之后将加载占用信息,该信息将显示在页面末尾。不建议在生产环境中使用。" -#: options/theme-options.php:929 +#: options/theme-options.php:928 msgid "Footer Upyun League Logo" msgstr "页尾又拍云联盟Logo" -#: options/theme-options.php:930 +#: options/theme-options.php:929 msgid "Upyun Logo will appear at the end of the page after turning it on" msgstr "开始之后将显示又拍云联盟Logo及信息" -#: options/theme-options.php:938 +#: options/theme-options.php:937 msgid "Footer Addition" msgstr "页尾附加代码" -#: options/theme-options.php:939 +#: options/theme-options.php:938 msgid "" "Add HTML code at the end of the page. Useful for adding customize JavaScript." msgstr "在页尾添加HTML代码。可用于添加 JavaScript" -#: options/theme-options.php:944 +#: options/theme-options.php:943 msgid "Hitokoto" msgstr "一言" -#: options/theme-options.php:950 +#: options/theme-options.php:949 msgid "Footer Hitokoto" msgstr "页尾一言" -#: options/theme-options.php:951 +#: options/theme-options.php:950 msgid "Hitokoto will appear at the end of the page after turning it on" msgstr "开启之后页尾将出现一言" -#: options/theme-options.php:958 +#: options/theme-options.php:957 msgid "" "

        Hitokoto API Setup Instructions

        Fill in as the example: " "[\"https://api.nmxc.ltd/yiyan/\", \"https://v1.hitokoto.cn/\"], where " @@ -1487,19 +1487,19 @@ msgstr "" "

        Maho API:官方API的反代镜像。https://api.nmxc.ltd/yiyan/

        " -#: options/theme-options.php:967 +#: options/theme-options.php:966 msgid "Hitokoto API address" msgstr "一言API地址" -#: options/theme-options.php:969 +#: options/theme-options.php:968 msgid "Fill in the address in JavaScript array format" msgstr "填写地址,格式为JavaScript数组" -#: options/theme-options.php:978 +#: options/theme-options.php:977 msgid "Cursor Options" msgstr "光标设置" -#: options/theme-options.php:985 +#: options/theme-options.php:984 msgid "" "You can click here to learn how to set the " @@ -1508,51 +1508,51 @@ msgstr "" "您可以单击 此处 了解如何在此页面上设置选项" -#: options/theme-options.php:991 +#: options/theme-options.php:990 msgid "Standard Cursor Style" msgstr "标准光标样式" -#: options/theme-options.php:992 +#: options/theme-options.php:991 msgid "Apply to global, fill in \".cur\" mouse file link" msgstr "应用于全局,填写Cur鼠标文件链接" -#: options/theme-options.php:999 +#: options/theme-options.php:998 msgid "Selected Cursor Style" msgstr "选定光标样式" -#: options/theme-options.php:1000 +#: options/theme-options.php:999 msgid "Apply to multiple styles, fill in \".cur\" file link" msgstr "应用于多种样式,填写Cur鼠标文件链接" -#: options/theme-options.php:1007 +#: options/theme-options.php:1006 msgid "Selected Control Unit Cursor Style" msgstr "选中控件单元光标样式" -#: options/theme-options.php:1008 +#: options/theme-options.php:1007 msgid "Apply to selected control unit, fill in \".cur\" file link" msgstr "应用于选中某个控件单元,填写Cur鼠标文件链接" -#: options/theme-options.php:1015 +#: options/theme-options.php:1014 msgid "Selected Text Cursor Style" msgstr "选中文本光标样式" -#: options/theme-options.php:1016 +#: options/theme-options.php:1015 msgid "Apply to selected text, fill in \".cur\" file link" msgstr "应用于选中文本,填写Cur鼠标文件链接" -#: options/theme-options.php:1023 +#: options/theme-options.php:1022 msgid "Work Status Cursor Style" msgstr "工作状态光标样式" -#: options/theme-options.php:1024 +#: options/theme-options.php:1023 msgid "Apply to load control unit, fill in \".cur\" file link" msgstr "应用于加载控件单元,填写Cur鼠标文件链接" -#: options/theme-options.php:1033 +#: options/theme-options.php:1032 msgid "Additional Options" msgstr "额外设置" -#: options/theme-options.php:1040 +#: options/theme-options.php:1039 msgid "" "You can click here to learn how to set the " @@ -1561,72 +1561,72 @@ msgstr "" "您可以单击 此处 了解如何在此页面上设置选项" -#: options/theme-options.php:1045 +#: options/theme-options.php:1044 msgid "Effects&Animations" msgstr "特效及动画" -#: options/theme-options.php:1051 +#: options/theme-options.php:1050 msgid "Preload Animation" msgstr "预加载动画" -#: options/theme-options.php:1052 +#: options/theme-options.php:1051 msgid "" "Preload animation before new pages load; To enable this option, ensure your " "page resources can load properly." msgstr "开启之后新页面加载前会有预加载动画,此选项需确保你的页面资源正常加载。" -#: options/theme-options.php:1059 +#: options/theme-options.php:1058 msgid "Preload Animation Color A" msgstr "预加载动画颜色A" -#: options/theme-options.php:1068 +#: options/theme-options.php:1067 msgid "Preload Animation Color B" msgstr "预加载动画颜色B" -#: options/theme-options.php:1076 +#: options/theme-options.php:1075 msgid "Preload Animation Blur Transition Effect" msgstr "预加载模糊过渡效果" -#: options/theme-options.php:1078 +#: options/theme-options.php:1077 msgid "Blur transition duration in milliseconds ms, off when set to 0." msgstr "模糊过渡持续时间,单位毫秒ms,为0时关闭。" -#: options/theme-options.php:1088 +#: options/theme-options.php:1087 msgid "Sakura Falling Effects" msgstr "樱花飘落特效" -#: options/theme-options.php:1091 +#: options/theme-options.php:1090 msgid "Native Quantity" msgstr "原生数量" -#: options/theme-options.php:1092 +#: options/theme-options.php:1091 msgid "Quarter Quantity" msgstr "四分之一数量" -#: options/theme-options.php:1093 +#: options/theme-options.php:1092 msgid "Half Quantity" msgstr "二分之一数量" -#: options/theme-options.php:1094 +#: options/theme-options.php:1093 msgid "Less Quantity" msgstr "少量数量" -#: options/theme-options.php:1102 +#: options/theme-options.php:1101 msgid "Particles Effects" msgstr "粒子特效" -#: options/theme-options.php:1104 +#: options/theme-options.php:1103 msgid "" "Particles effects will appear in the global background. Please open the " "Cover-and-Frontend-Background-Integration Options to get the best experience" msgstr "" "粒子特效将会出现在全局背景,请打开封面与前台背景一体化选项以获取最佳体验" -#: options/theme-options.php:1112 +#: options/theme-options.php:1111 msgid "Particles JSON" msgstr "粒子特效 JSON" -#: options/theme-options.php:1114 +#: options/theme-options.php:1113 msgid "" "You can go to the Project Address to generate your unique Particles Effects" @@ -1634,160 +1634,160 @@ msgstr "" "你可以访问 项目地址 " "以生成属于你的独特粒子特效" -#: options/theme-options.php:1231 +#: options/theme-options.php:1230 msgid "Note Touch Effects" msgstr "音符触动特效" -#: options/theme-options.php:1232 +#: options/theme-options.php:1231 msgid "" "After turning on, there will be a note sound alert when the back to top " "button and Mashiro style logo touch" msgstr "开启之后返回顶部按钮和白猫样式Logo触碰时将有音符声音提示" -#: options/theme-options.php:1238 +#: options/theme-options.php:1237 msgid "Feature" msgstr "功能" -#: options/theme-options.php:1244 +#: options/theme-options.php:1243 msgid "PJAX Partial Refresh" msgstr "PJAX局部刷新" -#: options/theme-options.php:1245 +#: options/theme-options.php:1244 msgid "Enabled by default, clicking to a new page will not require reloading" msgstr "默认开启,点击新页面将不需要重新加载" -#: options/theme-options.php:1252 +#: options/theme-options.php:1251 msgid "NProgress Loading Progress Bar" msgstr "NProgress加载进度条" -#: options/theme-options.php:1253 +#: options/theme-options.php:1252 msgid "" "Enabled by default, when loading page there will be a progress bar alert" msgstr "默认开启,加载页面将有进度条提示" -#: options/theme-options.php:1260 +#: options/theme-options.php:1259 msgid "Global Smooth Scroll" msgstr "全局平滑滚动" -#: options/theme-options.php:1261 +#: options/theme-options.php:1260 msgid "Enabled by default, page scrolling will be smoother" msgstr "默认开启,页面滚动将更加平滑" -#: options/theme-options.php:1268 +#: options/theme-options.php:1267 msgid "Captcha Selection" msgstr "验证码选项" -#: options/theme-options.php:1271 +#: options/theme-options.php:1270 msgid "Theme Built in Captcha" msgstr "主题内建验证码" -#: options/theme-options.php:1272 +#: options/theme-options.php:1271 msgid "Vaptcha" msgstr "Vaptcha验证码" -#: options/theme-options.php:1280 +#: options/theme-options.php:1279 msgid "Vaptcha VID" msgstr "" -#: options/theme-options.php:1282 +#: options/theme-options.php:1281 msgid "Fill in your Vaptcha VID" msgstr "填写你的 Vaptcha VID" -#: options/theme-options.php:1288 +#: options/theme-options.php:1287 msgid "Vaptcha KEY" msgstr "" -#: options/theme-options.php:1290 +#: options/theme-options.php:1289 msgid "Fill in your Vaptcha KEY" msgstr "填写你的 Vaptcha KEY" -#: options/theme-options.php:1296 +#: options/theme-options.php:1295 msgid "Vaptcha Scene" msgstr "Vaptcha场景" -#: options/theme-options.php:1312 +#: options/theme-options.php:1311 msgid "Pagination Mode" msgstr "分页模式" -#: options/theme-options.php:1314 +#: options/theme-options.php:1313 msgid "Ajax Load" msgstr "Ajax加载" -#: options/theme-options.php:1315 +#: options/theme-options.php:1314 msgid "Page Up/Down" msgstr "上下页" -#: options/theme-options.php:1323 +#: options/theme-options.php:1322 msgid "Next Page Auto Load" msgstr "下一页自动加载" -#: options/theme-options.php:1326 +#: options/theme-options.php:1325 msgid "do not autoload" msgstr "不自动加载" -#: options/theme-options.php:1327 +#: options/theme-options.php:1326 msgid "0 Sec" msgstr "0 秒" -#: options/theme-options.php:1328 +#: options/theme-options.php:1327 msgid "1 Sec" msgstr "1 秒" -#: options/theme-options.php:1329 +#: options/theme-options.php:1328 msgid "2 Sec" msgstr "2 秒" -#: options/theme-options.php:1330 +#: options/theme-options.php:1329 msgid "3 Sec" msgstr "3 秒" -#: options/theme-options.php:1331 +#: options/theme-options.php:1330 msgid "4 Sec" msgstr "4 秒" -#: options/theme-options.php:1332 +#: options/theme-options.php:1331 msgid "5 Sec" msgstr "5 秒" -#: options/theme-options.php:1333 +#: options/theme-options.php:1332 msgid "6 Sec" msgstr "6 秒" -#: options/theme-options.php:1334 +#: options/theme-options.php:1333 msgid "7 Sec" msgstr "7 秒" -#: options/theme-options.php:1335 +#: options/theme-options.php:1334 msgid "8 Sec" msgstr "8 秒" -#: options/theme-options.php:1336 +#: options/theme-options.php:1335 msgid "9 Sec" msgstr "9 秒" -#: options/theme-options.php:1337 +#: options/theme-options.php:1336 msgid "10 Sec" msgstr "10 秒" -#: options/theme-options.php:1345 +#: options/theme-options.php:1344 msgid "Placeholder SVG when loading the next page" msgstr "加载下一页占位 SVG" -#: options/theme-options.php:1346 +#: options/theme-options.php:1345 msgid "" "Fill in the address, this is the SVG that will be displayed as a placeholder " "when the next page is loading" msgstr "填写地址,此为加载下一页时占位显示的SVG" -#: options/theme-options.php:1354 +#: options/theme-options.php:1353 msgid "HomePage Options" msgstr "主页设置" -#: options/theme-options.php:1360 +#: options/theme-options.php:1359 msgid "Cover Options" msgstr "封面设置" -#: options/theme-options.php:1367 +#: options/theme-options.php:1366 msgid "" "You can click here to learn how to set the " @@ -1796,165 +1796,165 @@ msgstr "" "您可以单击 此处 了解如何在此页面上设置选项" -#: options/theme-options.php:1373 +#: options/theme-options.php:1372 msgid "Cover Switch" msgstr "封面开关" -#: options/theme-options.php:1374 +#: options/theme-options.php:1373 msgid "On by default, if off, all options below will be disabled" msgstr "默认开启,如果关闭,则下文所有选项均将失效" -#: options/theme-options.php:1381 +#: options/theme-options.php:1380 msgid "Cover Full Screen" msgstr "封面全屏显示" -#: options/theme-options.php:1390 +#: options/theme-options.php:1389 msgid "Cover Arc Occlusion (Below)" msgstr "封面弧形遮挡(下方)" -#: options/theme-options.php:1391 +#: options/theme-options.php:1390 msgid "An arc occlusion will appear below the cover when turned on" msgstr "开启之后封面下方将出现弧形遮挡" -#: options/theme-options.php:1402 +#: options/theme-options.php:1401 msgid "Cover Radius" msgstr "封面圆角" -#: options/theme-options.php:1403 +#: options/theme-options.php:1402 msgid "Slide to adjust, the recommended value range is 15-20" msgstr "滑动滑块,推荐数值范围为15-20" -#: options/theme-options.php:1413 +#: options/theme-options.php:1412 msgid "Cover Animation" msgstr "封面动画" -#: options/theme-options.php:1414 +#: options/theme-options.php:1413 msgid "On by default, if off, the cover will be displayed directly" msgstr "默认开启,如果关闭,则封面将直接显示" -#: options/theme-options.php:1422 +#: options/theme-options.php:1421 msgid "Cover Animation Time" msgstr "封面动画时间" -#: options/theme-options.php:1437 +#: options/theme-options.php:1436 msgid "Cover Info Bar" msgstr "封面信息栏" -#: options/theme-options.php:1438 +#: options/theme-options.php:1437 msgid "" "Enabled by default, show avatar, Mashiro effects text, signature bar, " "shuoshuo bar, social area" msgstr "默认开启,显示头像、白猫特效文字、签名栏、说说栏、社交区域" -#: options/theme-options.php:1446 +#: options/theme-options.php:1445 msgid "Cover Info Bar Style" msgstr "封面信息栏" -#: options/theme-options.php:1461 +#: options/theme-options.php:1460 msgid "Cover Info Bar Background Color" msgstr "封面信息栏背景颜色" -#: options/theme-options.php:1473 +#: options/theme-options.php:1472 msgid "Cover Info Bar Avatar Radius" msgstr "封面信息栏头像圆角" -#: options/theme-options.php:1474 +#: options/theme-options.php:1473 msgid "Slide to adjust, the recommended value is 100" msgstr "滑动滑块,推荐数值为10" -#: options/theme-options.php:1486 +#: options/theme-options.php:1485 msgid "Cover Info Bar Rounded" msgstr "封面信息栏圆角" -#: options/theme-options.php:1487 +#: options/theme-options.php:1486 msgid "Slide to adjust, the recommended value range 10-20" msgstr "滑动滑块,推荐数值范围为10-20" -#: options/theme-options.php:1500 +#: options/theme-options.php:1499 msgid "Cover Signature Field Text" msgstr "封面签名栏文本" -#: options/theme-options.php:1501 options/theme-options.php:2762 +#: options/theme-options.php:1500 options/theme-options.php:2765 msgid "A self-descriptive quote" msgstr "一段自我描述的话" -#: options/theme-options.php:1512 +#: options/theme-options.php:1511 msgid "Cover Signature Field Text Font" msgstr "封面签名栏文本字体" -#: options/theme-options.php:1524 +#: options/theme-options.php:1523 msgid "Cover Signature Field Text Font Size" msgstr "封面签名栏文本字体大小" -#: options/theme-options.php:1539 +#: options/theme-options.php:1538 msgid "Cover Signature Bar Typing Effects" msgstr "封面签名栏打字特效" -#: options/theme-options.php:1540 +#: options/theme-options.php:1539 msgid "" "When turned on, the signature bar text will have an additional paragraph of " "text and will be rendered with typing effects" msgstr "开启之后签名栏文本将增加一段文本并呈现打字特效" -#: options/theme-options.php:1551 +#: options/theme-options.php:1550 msgid "Cover Signature Field Typing Effects Double Quotes" msgstr "封面签名栏打字特效双引号" -#: options/theme-options.php:1557 +#: options/theme-options.php:1556 msgid "Typing effects will be appended with double quotes when turned on" msgstr "开启之后打字特效将追加双引号" -#: options/theme-options.php:1564 +#: options/theme-options.php:1563 msgid "Cover Signature Field Typing Effects Placeholder" msgstr "封面签名栏打字特效占位语句" -#: options/theme-options.php:1577 +#: options/theme-options.php:1576 msgid "Typed.js initial option" msgstr "Typed.js初始化选项" -#: options/theme-options.php:1589 +#: options/theme-options.php:1588 msgid "Cover Random Image Options" msgstr "封面随机图片选项" -#: options/theme-options.php:1591 +#: options/theme-options.php:1590 msgid "External API" msgstr "外部API" -#: options/theme-options.php:1592 +#: options/theme-options.php:1591 msgid "Webp optimized" msgstr "Webp优化" -#: options/theme-options.php:1593 +#: options/theme-options.php:1592 msgid "Local" msgstr "本地" -#: options/theme-options.php:1602 +#: options/theme-options.php:1601 msgid "Cover Random Image Multi-terminal Separation" msgstr "封面随机图片多终端分离" -#: options/theme-options.php:1603 +#: options/theme-options.php:1602 msgid "" "Enabled by default, desktop and mobile devices will use separate random " "image addresses" msgstr "默认开启,桌面端和移动端会分别使用不同的随机图片地址" -#: options/theme-options.php:1611 +#: options/theme-options.php:1610 msgid "Webp Optimization/External API Desktop Side Random Graphics Address" msgstr "Webp优化/外部API桌面端随机图片地址" -#: options/theme-options.php:1612 options/theme-options.php:1627 +#: options/theme-options.php:1611 options/theme-options.php:1630 msgid "Fill in an URL" msgstr "填写URL" -#: options/theme-options.php:1622 +#: options/theme-options.php:1624 msgid "External API Mobile Devices Random Image Address" msgstr "外部API手机端随机图片地址" -#: options/theme-options.php:1636 +#: options/theme-options.php:1639 msgid "Cover Random Background Image Cache" msgstr "封面随机背景图片缓存" -#: options/theme-options.php:1637 +#: options/theme-options.php:1640 msgid "" "Enabled by default, this feature will cache a cover image locally, which can " "improve the loading speed of the first cover after entering the homepage. " @@ -1963,111 +1963,111 @@ msgstr "" "默认开启,此功能会在本地缓存一份封面图片,可提升进入主页后第一张封面的加载速" "度。注意:此功能需要封面API能接受跨域请求。" -#: options/theme-options.php:1645 +#: options/theme-options.php:1648 msgid "Cover and Frontend Background Integration" msgstr "封面与前台背景一体化" -#: options/theme-options.php:1646 +#: options/theme-options.php:1649 msgid "" "When enabled, the background of the cover will be set to transparent, while " "the frontend background will use the cover's random image API" msgstr "开启之后,封面的背景将设置为透明,同时前台背景将使用封面的随机图API" -#: options/theme-options.php:1654 +#: options/theme-options.php:1657 msgid "Cover Random Images Filter" msgstr "封面随机图片滤镜" -#: options/theme-options.php:1656 +#: options/theme-options.php:1659 msgid "No filter" msgstr "无滤镜" -#: options/theme-options.php:1657 +#: options/theme-options.php:1660 msgid "Light filter" msgstr "浅色滤镜" -#: options/theme-options.php:1658 +#: options/theme-options.php:1661 msgid "Dimmed filter" msgstr "暗淡滤镜" -#: options/theme-options.php:1659 +#: options/theme-options.php:1662 msgid "Grid filter" msgstr "网格滤镜" -#: options/theme-options.php:1660 +#: options/theme-options.php:1663 msgid "Dot filter" msgstr "点状滤镜" -#: options/theme-options.php:1669 +#: options/theme-options.php:1672 msgid "Cover Wave Effects" msgstr "封面波浪特效" -#: options/theme-options.php:1670 +#: options/theme-options.php:1673 msgid "" "Wave effect will appear at the bottom of the cover of the home page after " "turning on, and it will be forced off in the dark mode" msgstr "开启之后首页封面底部将出现波浪特效,深色模式下将强制关闭" -#: options/theme-options.php:1678 +#: options/theme-options.php:1681 msgid "Cover Dropdown Arrow" msgstr "封面下拉箭头" -#: options/theme-options.php:1679 +#: options/theme-options.php:1682 msgid "Enabled by default, show a dropdown arrow at bottom of home cover" msgstr "默认开启,首页封面底部显示下拉箭头" -#: options/theme-options.php:1687 +#: options/theme-options.php:1690 msgid "Cover Dropdown Arrow Display on Mobile Devices" msgstr "封面下拉箭头移动端显示" -#: options/theme-options.php:1692 +#: options/theme-options.php:1695 msgid "" "Drop down arrow will appear at the bottom of the mobile devices' home cover " "after turning it on" msgstr "开启之后移动端首页封面底部将出现下拉箭头" -#: options/theme-options.php:1699 +#: options/theme-options.php:1702 msgid "Cover Dropdown Arrow Color" msgstr "封面下拉箭头颜色" -#: options/theme-options.php:1711 +#: options/theme-options.php:1714 msgid "Cover Dropdown Arrow Color (Dark Mode)" msgstr "封面下拉箭头颜色(深色模式)" -#: options/theme-options.php:1716 +#: options/theme-options.php:1719 msgid "Customize the colors, dark colors are recommended" msgstr "自定义颜色,建议使用浅色系颜色" -#: options/theme-options.php:1723 +#: options/theme-options.php:1726 msgid "Cover Video" msgstr "封面视频" -#: options/theme-options.php:1724 +#: options/theme-options.php:1727 msgid "Use a video instead of the images as the cover" msgstr "将会使用视频替换随机图片作为封面" -#: options/theme-options.php:1732 +#: options/theme-options.php:1735 msgid "Cover Video Loop" msgstr "封面视频循环" -#: options/theme-options.php:1737 +#: options/theme-options.php:1740 msgid "Video will loop automatically when enabled." msgstr "开启之后视频将自动循环" -#: options/theme-options.php:1744 +#: options/theme-options.php:1747 msgid "Cover Video Auto Resume" msgstr "封面视频自动恢复" -#: options/theme-options.php:1749 +#: options/theme-options.php:1752 msgid "" "Cover Video will resume automatically when coming back to homepage while " "Pjax enabled." msgstr "开启之后返回首页时视频将恢复播放,需要开启Pjax功能" -#: options/theme-options.php:1756 +#: options/theme-options.php:1759 msgid "Cover Video URL Base Path" msgstr "封面视频URL根路径" -#: options/theme-options.php:1762 +#: options/theme-options.php:1765 msgid "" "Fill in the base path your video located at. For example: https://localhost. " "Your site's URL is used as default. Please pay attention to the protocol " @@ -2076,22 +2076,22 @@ msgstr "" "填写视频所在的根路径。例如:https://localhost. 你站点的URL将作为默认URL。请注" "意URL的协议名称。" -#: options/theme-options.php:1768 +#: options/theme-options.php:1771 msgid "Cover Video File Name" msgstr "封面视频文件名称" -#: options/theme-options.php:1773 +#: options/theme-options.php:1776 msgid "" "For example: abc.mp4. Multiple videos should be separated by English commas " "like \"abc.mp4,efg.mp4,\" Random play is on by default." msgstr "" "例如:abc.mp4,多个视频请用英文逗号隔开如abc.mp4,efg.mp4。默认随机播放。" -#: options/theme-options.php:1781 +#: options/theme-options.php:1784 msgid "Cover Social Area Options" msgstr "封面社交区域设置" -#: options/theme-options.php:1788 +#: options/theme-options.php:1791 msgid "" "You can click here" "此处 了解如何在此页面上设置选项" -#: options/theme-options.php:1793 +#: options/theme-options.php:1796 msgid "Related Options" msgstr "相关设置" -#: options/theme-options.php:1799 +#: options/theme-options.php:1802 msgid "Cover Social Area" msgstr "封面社交区域" -#: options/theme-options.php:1800 +#: options/theme-options.php:1803 msgid "" "Enabled by default, show cover random image toggle button and social network " "icons" msgstr "默认开启,显示封面随机图片切换按钮和社交网络图标" -#: options/theme-options.php:1807 +#: options/theme-options.php:1810 msgid "Social Icon" msgstr "社交网络图标" -#: options/theme-options.php:1808 +#: options/theme-options.php:1811 msgid "" "Select your favorite icon pack. Icon pack references are detailed in the " "\"About Theme\" section" msgstr "选择你喜欢的图标包。图标包引用信息详见关于主题" -#: options/theme-options.php:1830 +#: options/theme-options.php:1833 msgid "Cover Social Area Rounded Corners" msgstr "封面社交区域圆角" -#: options/theme-options.php:1832 +#: options/theme-options.php:1835 msgid "Slide to adjust, the recommended value range is 10-20" msgstr "滑动滑块,推荐数值范围为10-20" -#: options/theme-options.php:1841 +#: options/theme-options.php:1844 msgid "Switch Button of Random Images" msgstr "随机图片切换按钮" -#: options/theme-options.php:1843 +#: options/theme-options.php:1846 msgid "Enabled by default, show cover random image toggle button" msgstr "默认开启,显示封面随机图片切换按钮" -#: options/theme-options.php:1849 +#: options/theme-options.php:1852 msgid "Social Network" msgstr "社交网络" -#: options/theme-options.php:1855 +#: options/theme-options.php:1858 msgid "Wechat" msgstr "微信" -#: options/theme-options.php:1864 +#: options/theme-options.php:1867 msgid "QQ" msgstr "QQ" -#: options/theme-options.php:1866 +#: options/theme-options.php:1869 msgid "" "Please note the format of filling out the form, e.g. tencent://message/?" "uin=123456" msgstr "请注意填写格式,例如:tencent://message/?uin=123456" -#: options/theme-options.php:1872 +#: options/theme-options.php:1875 msgid "Bilibili" msgstr "哔哩哔哩" -#: options/theme-options.php:1874 options/theme-options.php:1882 -#: options/theme-options.php:1890 options/theme-options.php:1898 -#: options/theme-options.php:1906 options/theme-options.php:1914 -#: options/theme-options.php:1922 options/theme-options.php:1930 -#: options/theme-options.php:1938 options/theme-options.php:1946 -#: options/theme-options.php:1954 options/theme-options.php:1962 -#: options/theme-options.php:1970 options/theme-options.php:1978 -#: options/theme-options.php:1986 options/theme-options.php:1994 -#: options/theme-options.php:2019 options/theme-options.php:2326 -#: options/theme-options.php:2352 options/theme-options.php:2378 -#: options/theme-options.php:2486 +#: options/theme-options.php:1877 options/theme-options.php:1885 +#: options/theme-options.php:1893 options/theme-options.php:1901 +#: options/theme-options.php:1909 options/theme-options.php:1917 +#: options/theme-options.php:1925 options/theme-options.php:1933 +#: options/theme-options.php:1941 options/theme-options.php:1949 +#: options/theme-options.php:1957 options/theme-options.php:1965 +#: options/theme-options.php:1973 options/theme-options.php:1981 +#: options/theme-options.php:1989 options/theme-options.php:1997 +#: options/theme-options.php:2022 options/theme-options.php:2329 +#: options/theme-options.php:2355 options/theme-options.php:2381 +#: options/theme-options.php:2489 msgid "add URL" msgstr "填写地址" -#: options/theme-options.php:1880 +#: options/theme-options.php:1883 msgid "NetEase Music" msgstr "网易云音乐" -#: options/theme-options.php:1888 +#: options/theme-options.php:1891 msgid "Weibo" msgstr "微博" -#: options/theme-options.php:1896 +#: options/theme-options.php:1899 msgid "Github" msgstr "Github" -#: options/theme-options.php:1904 +#: options/theme-options.php:1907 msgid "Telegram" msgstr "Telegram" -#: options/theme-options.php:1912 +#: options/theme-options.php:1915 msgid "Steam" msgstr "Steam" -#: options/theme-options.php:1920 +#: options/theme-options.php:1923 msgid "ZhiHu" msgstr "知乎" -#: options/theme-options.php:1928 +#: options/theme-options.php:1931 msgid "QZone" msgstr "QQ空间" -#: options/theme-options.php:1936 +#: options/theme-options.php:1939 msgid "Lofter" msgstr "" -#: options/theme-options.php:1944 +#: options/theme-options.php:1947 msgid "Youku" msgstr "优酷" -#: options/theme-options.php:1952 +#: options/theme-options.php:1955 msgid "Linkedin" msgstr "领英" -#: options/theme-options.php:1960 +#: options/theme-options.php:1963 msgid "Twitter" msgstr "推特" -#: options/theme-options.php:1968 +#: options/theme-options.php:1971 msgid "Facebook" msgstr "脸书" -#: options/theme-options.php:1976 +#: options/theme-options.php:1979 msgid "CSDN" msgstr "CSDN" -#: options/theme-options.php:1984 +#: options/theme-options.php:1987 msgid "JianShu" msgstr "简书" -#: options/theme-options.php:1992 +#: options/theme-options.php:1995 msgid "Customized Social Network Ⅰ" msgstr "自定义社交网络 Ⅰ" -#: options/theme-options.php:2000 +#: options/theme-options.php:2003 msgid "Customized Social Network Ⅰ Title" msgstr "自定义社交网络 Ⅰ 标题" -#: options/theme-options.php:2008 +#: options/theme-options.php:2011 msgid "Customized Social Network Ⅰ icon" msgstr "自定义社交网络 Ⅰ 图标" -#: options/theme-options.php:2017 +#: options/theme-options.php:2020 msgid "Customized Social Network Ⅱ" msgstr "自定义社交网络 Ⅱ" -#: options/theme-options.php:2025 +#: options/theme-options.php:2028 msgid "Customized Social Network Ⅱ Title" msgstr "自定义社交网络 Ⅱ 标题" -#: options/theme-options.php:2033 +#: options/theme-options.php:2036 msgid "Customized Social Network Ⅱ icon" msgstr "自定义社交网络 Ⅱ 图标" -#: options/theme-options.php:2042 +#: options/theme-options.php:2045 msgid "Email Username" msgstr "电子邮件用户名" -#: options/theme-options.php:2044 +#: options/theme-options.php:2047 msgid "" "name@domain.com fo name, the full address can be known only when there is a " "js runtime in the frontend, you can fill in with confidence" @@ -2269,19 +2269,19 @@ msgstr "" "name@domain.com的name部分,前端仅具有 js 运行环境时才能获取完整地址,可放心填" "写" -#: options/theme-options.php:2050 +#: options/theme-options.php:2053 msgid "Email Domain" msgstr "电子邮件域" -#: options/theme-options.php:2052 +#: options/theme-options.php:2055 msgid "name@domain.com fo domain.com" msgstr "name@domain.com的domain.com部分" -#: options/theme-options.php:2060 +#: options/theme-options.php:2063 msgid "Bulletin Board and Area Title Options" msgstr "公告板和区域标题设置" -#: options/theme-options.php:2067 +#: options/theme-options.php:2070 msgid "" "You can click here" "此处 了解如何在此页面上设置选项" -#: options/theme-options.php:2072 options/theme-options.php:2078 +#: options/theme-options.php:2075 options/theme-options.php:2081 msgid "Bulletin Board" msgstr "公告板" -#: options/theme-options.php:2079 +#: options/theme-options.php:2082 msgid "When enabled the bulletin board will be displayed below the front cover" msgstr "开启之后公告板将在首页封面下方显示" -#: options/theme-options.php:2086 +#: options/theme-options.php:2089 msgid "Bulletin Board Style" msgstr "公告板样式" -#: options/theme-options.php:2089 +#: options/theme-options.php:2092 msgid "Picture Background" msgstr "图片背景" -#: options/theme-options.php:2090 +#: options/theme-options.php:2093 msgid "Color Background" msgstr "颜色背景" -#: options/theme-options.php:2098 +#: options/theme-options.php:2101 msgid "Bulletin Board \"Notice\" Icon" msgstr "公告板\"公告\"图标" -#: options/theme-options.php:2100 +#: options/theme-options.php:2103 msgid "" "The \"Notice\" icon will be displayed on the left side of the announcement " "bar" msgstr "\"公告\"图标将显示在公告版的左侧" -#: options/theme-options.php:2107 +#: options/theme-options.php:2110 msgid "Bulletin Board Background" msgstr "公告板背景" -#: options/theme-options.php:2112 +#: options/theme-options.php:2115 msgid "Best width 820px, best height 67px" msgstr "最佳宽度820px,最佳高度67px" -#: options/theme-options.php:2120 +#: options/theme-options.php:2123 msgid "Bulletin Board Border Color" msgstr "公告板边框颜色" -#: options/theme-options.php:2125 +#: options/theme-options.php:2128 msgid "" "Customize the colors, it is recommended to use a light color that " "corresponds with the theme color" msgstr "自定义颜色,建议使用与主题色相同色系且属于浅色系的颜色" -#: options/theme-options.php:2132 +#: options/theme-options.php:2135 msgid "Bulletin Board Text" msgstr "公告板文本" -#: options/theme-options.php:2134 +#: options/theme-options.php:2137 msgid "Fill in the announcement text, the text beyond 142 bytes will be hidden" msgstr "填写公告文本,文本超出142个字节将会被隐藏" -#: options/theme-options.php:2140 +#: options/theme-options.php:2143 msgid "Bulletin Board Alignment" msgstr "公告板对齐方向" -#: options/theme-options.php:2153 +#: options/theme-options.php:2156 msgid "Bulletin Board Text Color" msgstr "公告板文本颜色" -#: options/theme-options.php:2155 options/theme-options.php:2243 -#: options/theme-options.php:2439 options/theme-options.php:2675 -#: options/theme-options.php:2945 options/theme-options.php:2953 -#: options/theme-options.php:3028 options/theme-options.php:3036 +#: options/theme-options.php:2158 options/theme-options.php:2246 +#: options/theme-options.php:2442 options/theme-options.php:2678 +#: options/theme-options.php:2948 options/theme-options.php:2956 +#: options/theme-options.php:3036 options/theme-options.php:3044 msgid "" "Customize the colors, suggest using a corresponding color with the " "background color" msgstr "自定义颜色,建议根据背景颜色搭配合适的颜色" -#: options/theme-options.php:2161 +#: options/theme-options.php:2164 msgid "Area Title" msgstr "区域标题" -#: options/theme-options.php:2167 +#: options/theme-options.php:2170 msgid "Display Area Icon" msgstr "展示区域图标" -#: options/theme-options.php:2168 +#: options/theme-options.php:2171 msgid "" "Default is \"fa-solid fa-laptop\", You can check the FontAwesome Website to see the icons " @@ -2381,21 +2381,21 @@ msgstr "" "默认为“fa-solid fa-laptop”,你可以前往 FontAwesome 网站 查看可以填写的图标" -#: options/theme-options.php:2175 +#: options/theme-options.php:2178 msgid "Display Area Title" msgstr "展示区域标题" -#: options/theme-options.php:2176 +#: options/theme-options.php:2179 msgid "" "Default is \"Display\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" msgstr "默认为“Display”,你可以修改为其他,当然不能当广告用!不允许!!" -#: options/theme-options.php:2183 +#: options/theme-options.php:2186 msgid "Post Area Icon" msgstr "文章区域图标" -#: options/theme-options.php:2184 +#: options/theme-options.php:2187 msgid "" "Default is \"fa-regular fa-bookmark\", You can check the FontAwesome Website to see the icons " @@ -2404,29 +2404,29 @@ msgstr "" "默认为“fa-regular fa-bookmark”,你可以前往 FontAwesome 网站 查看可以填写的图标" -#: options/theme-options.php:2191 +#: options/theme-options.php:2194 msgid "Post Area Title" msgstr "文章区域标题" -#: options/theme-options.php:2192 +#: options/theme-options.php:2195 msgid "" "Default is \"Article\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" msgstr "默认为“Article”,你可以修改为其他,当然不能当广告用!不允许!!" -#: options/theme-options.php:2199 +#: options/theme-options.php:2202 msgid "Area Title Font" msgstr "区域标题字体" -#: options/theme-options.php:2207 +#: options/theme-options.php:2210 msgid "Area Title Alignment" msgstr "区域标题对齐方向" -#: options/theme-options.php:2221 options/theme-options.php:2301 +#: options/theme-options.php:2224 options/theme-options.php:2304 msgid "Display Area Options" msgstr "展示区域设置" -#: options/theme-options.php:2228 +#: options/theme-options.php:2231 msgid "" "You can click here to learn " @@ -2436,77 +2436,77 @@ msgstr "" "#%E5%B1%95%E7%A4%BA%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE\">此处 了解如何在" "此页面上设置选项" -#: options/theme-options.php:2234 +#: options/theme-options.php:2237 msgid "Display Area" msgstr "展示区域" -#: options/theme-options.php:2235 +#: options/theme-options.php:2238 msgid "Enabled by default, display area is above article area" msgstr "默认开启,展示区域显示在文章区域上方" -#: options/theme-options.php:2242 +#: options/theme-options.php:2245 msgid "Display Area Matching Color" msgstr "展示区域搭配色" -#: options/theme-options.php:2251 +#: options/theme-options.php:2254 msgid "Display Area Style" msgstr "展示区域样式" -#: options/theme-options.php:2263 +#: options/theme-options.php:2266 msgid "Display Area Compatibility Mode" msgstr "展示区域兼容模式" -#: options/theme-options.php:2268 +#: options/theme-options.php:2271 msgid "" "Enabled by default, this option avoids the problem of misaligned display " "areas" msgstr "默认开启,此选项避免了展示区域可能出现错位的问题" -#: options/theme-options.php:2275 +#: options/theme-options.php:2278 msgid "Display Area Background Color" msgstr "展示区域背景颜色" -#: options/theme-options.php:2287 +#: options/theme-options.php:2290 msgid "Display Area Rounded Corners" msgstr "展示区域圆角" -#: options/theme-options.php:2305 +#: options/theme-options.php:2308 msgid "First Display Area" msgstr "第一展示区域" -#: options/theme-options.php:2310 options/theme-options.php:2336 -#: options/theme-options.php:2362 +#: options/theme-options.php:2313 options/theme-options.php:2339 +#: options/theme-options.php:2365 msgid "image" msgstr "图片" -#: options/theme-options.php:2311 options/theme-options.php:2337 -#: options/theme-options.php:2363 +#: options/theme-options.php:2314 options/theme-options.php:2340 +#: options/theme-options.php:2366 msgid "best width 260px, best height 160px" msgstr "最佳宽度 260px,最佳高度 160px" -#: options/theme-options.php:2316 options/theme-options.php:2342 -#: options/theme-options.php:2368 +#: options/theme-options.php:2319 options/theme-options.php:2345 +#: options/theme-options.php:2371 msgid "title" msgstr "标题" -#: options/theme-options.php:2321 options/theme-options.php:2347 -#: options/theme-options.php:2373 +#: options/theme-options.php:2324 options/theme-options.php:2350 +#: options/theme-options.php:2376 msgid "description" msgstr "描述" -#: options/theme-options.php:2331 +#: options/theme-options.php:2334 msgid "Second Display Area" msgstr "第二展示区域" -#: options/theme-options.php:2357 +#: options/theme-options.php:2360 msgid "Third Display Area" msgstr "第三展示区域" -#: options/theme-options.php:2404 +#: options/theme-options.php:2407 msgid "Article Area Options" msgstr "文章区域设置" -#: options/theme-options.php:2411 +#: options/theme-options.php:2414 msgid "" "You can click here to learn " @@ -2516,93 +2516,93 @@ msgstr "" "#%E6%96%87%E7%AB%A0%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE\">此处 了解如何在" "此页面上设置选项" -#: options/theme-options.php:2417 +#: options/theme-options.php:2420 msgid "Article Area Display Style" msgstr "文章区域显示样式" -#: options/theme-options.php:2428 +#: options/theme-options.php:2431 msgid "Article Area Matching Color" msgstr "文章区域搭配色" -#: options/theme-options.php:2430 +#: options/theme-options.php:2433 msgid "" "Customize the colors, This option only supports filling in hexadecimal " "colors, suggest the same as the matching color" msgstr "" "自定义颜色,此选项仅支持填写16进制色。建议使用与主题色搭配色相同色系的颜色" -#: options/theme-options.php:2437 +#: options/theme-options.php:2440 msgid "Article Area Border Shadow Color" msgstr "文章区域边框阴影颜色" -#: options/theme-options.php:2446 +#: options/theme-options.php:2449 msgid "Article Area Featured Image Display Shapes" msgstr "文章区域装饰特色图片展示形状" -#: options/theme-options.php:2448 +#: options/theme-options.php:2451 msgid "" "You can choose a circular or a rectangular display of the featured image" msgstr "你可以选择圆形展示或者矩形展示文章区域装饰特色图片" -#: options/theme-options.php:2459 +#: options/theme-options.php:2462 msgid "Article Area Featured Image Alignment" msgstr "文章区域装饰特色图片对齐方向" -#: options/theme-options.php:2461 +#: options/theme-options.php:2464 msgid "You can choose different directions to display the featured images" msgstr "你可以选择不同方向展示文章区域装饰特色图片" -#: options/theme-options.php:2473 +#: options/theme-options.php:2476 msgid "Article Area Featured Image Options" msgstr "文章区域装饰特色图片选项" -#: options/theme-options.php:2475 +#: options/theme-options.php:2478 msgid "Cover Random Image" msgstr "封面随机图片" -#: options/theme-options.php:2476 +#: options/theme-options.php:2479 msgid "External API Random Image" msgstr "外部API随机图片" -#: options/theme-options.php:2484 +#: options/theme-options.php:2487 msgid "Article Area Featured Image External API Random Image Address" msgstr "文章区域装饰特色图片外部API随机图片地址" -#: options/theme-options.php:2494 +#: options/theme-options.php:2497 msgid "Article Area Title Font Size" msgstr "文章区域标题字体大小" -#: options/theme-options.php:2495 +#: options/theme-options.php:2498 msgid "Slide to adjust, the recommended value range is 16-20" msgstr "滑动滑块,推荐数值范围为16-20" -#: options/theme-options.php:2507 +#: options/theme-options.php:2510 msgid "Article Area Time Display Area Font Size" msgstr "文章区域时间提示区域字体大小" -#: options/theme-options.php:2509 +#: options/theme-options.php:2512 msgid "Slide to adjust, the recommended values range is 10-14" msgstr "滑动滑块,推荐数值范围为10-14" -#: options/theme-options.php:2520 +#: options/theme-options.php:2523 msgid "Article Area Author Info" msgstr "文章区域“作者信息”" -#: options/theme-options.php:2521 +#: options/theme-options.php:2524 msgid "" "When turned on, author information will be added to the article metadata " "section." msgstr "开启之后,文章元数据部分将增加作者信息。" -#: options/theme-options.php:2530 +#: options/theme-options.php:2533 msgid "Page Options" msgstr "页面设置" -#: options/theme-options.php:2536 +#: options/theme-options.php:2539 msgid "Common Options" msgstr "综合设置" -#: options/theme-options.php:2543 +#: options/theme-options.php:2546 msgid "" "You can click here to learn how to set the " @@ -2611,63 +2611,63 @@ msgstr "" "您可以单击 此处 了解如何在此页面上设置选项" -#: options/theme-options.php:2549 +#: options/theme-options.php:2552 msgid "Page Style" msgstr "页面样式" -#: options/theme-options.php:2560 +#: options/theme-options.php:2563 msgid "Page Layout Style" msgstr "页面排版样式" -#: options/theme-options.php:2562 +#: options/theme-options.php:2565 msgid "Default Style" msgstr "默认样式" -#: options/theme-options.php:2563 +#: options/theme-options.php:2566 msgid "Github Style" msgstr "Github样式" -#: options/theme-options.php:2571 +#: options/theme-options.php:2574 msgid "Page Decoration Image" msgstr "页面装饰图片" -#: options/theme-options.php:2572 +#: options/theme-options.php:2575 msgid "" "Enabled by default, show on article pages, standalone pages and category " "pages" msgstr "默认开启,显示在文章页面,独立页面和分类页" -#: options/theme-options.php:2579 +#: options/theme-options.php:2582 msgid "Page Title Animation" msgstr "页面标题动画" -#: options/theme-options.php:2580 +#: options/theme-options.php:2583 msgid "Page title will have float-in animation when turned on" msgstr "开启之后页面标题将有浮入动画" -#: options/theme-options.php:2587 +#: options/theme-options.php:2590 msgid "Page Title Animation Time" msgstr "页面标题动画时间" -#: options/theme-options.php:2589 +#: options/theme-options.php:2592 msgid "Slide to adjust, recommended value range is 1-2" msgstr "滑动滑块,推荐数值范围为1-2" -#: options/theme-options.php:2599 +#: options/theme-options.php:2602 msgid "Page Clipboard Copyright Notice" msgstr "页面剪切板版权提示" -#: options/theme-options.php:2600 +#: options/theme-options.php:2603 msgid "" "Enabled by default, users will have copyright notice text when copying text " "content over 30 bytes" msgstr "默认开启,用户在复制文字内容超过30字节时,会有版权提示文本" -#: options/theme-options.php:2607 +#: options/theme-options.php:2610 msgid "Page LazyLoad" msgstr "页面LazyLoad" -#: options/theme-options.php:2608 +#: options/theme-options.php:2611 msgid "" "LazyLoad effect for page images, WordPress block editor already comes with " "similar effect, not recommended to turn on" @@ -2675,31 +2675,31 @@ msgstr "" "开启之后页面图片会有LazyLoad加载效果,WordPress区块编辑器已经自带相似效果,不" "建议开启" -#: options/theme-options.php:2615 +#: options/theme-options.php:2618 msgid "Page LazyLoad Placeholder SVG" msgstr "页面LazyLoad加载占位SVG" -#: options/theme-options.php:2617 +#: options/theme-options.php:2620 msgid "" "Fill in the address, this is the placeholder image that will be displayed " "when the page LazyLoad is being loaded" msgstr "填写地址,此为页面LazyLoad加载时会显示的占位图" -#: options/theme-options.php:2624 +#: options/theme-options.php:2627 msgid "Page Image Placeholder SVG" msgstr "页面图像加载占位SVG" -#: options/theme-options.php:2625 +#: options/theme-options.php:2628 msgid "" "Fill address, this is the SVG that will be displayed as a placeholder when " "the page image is being loaded" msgstr "填写地址,此为加载页面图像时占位显示的SVG" -#: options/theme-options.php:2634 +#: options/theme-options.php:2637 msgid "Article Page Options" msgstr "文章页面设置" -#: options/theme-options.php:2641 +#: options/theme-options.php:2644 msgid "" "You can click here to learn " @@ -2709,148 +2709,148 @@ msgstr "" "#%E6%96%87%E7%AB%A0%E9%A1%B5%E9%9D%A2%E8%AE%BE%E7%BD%AE\">此处 了解如何在" "此页面上设置选项" -#: options/theme-options.php:2647 +#: options/theme-options.php:2650 msgid "Article Page Title Font Size" msgstr "文章页面标题字体大小" -#: options/theme-options.php:2648 +#: options/theme-options.php:2651 msgid "" "Slide to adjust, recommended value range is 28-36. This option is only " "available for article pages that have a featured image set" msgstr "" "滑动滑块,推荐数值范围为28-36。此选项仅对已经设置了特色图片的文章页面生效" -#: options/theme-options.php:2658 +#: options/theme-options.php:2661 msgid "Article Page Title Underline Animation" msgstr "文章页面标题下划线动画" -#: options/theme-options.php:2659 +#: options/theme-options.php:2662 msgid "" "Article title will have underline animation when this is enabled and article " "has a featured image set" msgstr "开启且文章设置了特色图片之后,文章标题将有下划线动画" -#: options/theme-options.php:2666 +#: options/theme-options.php:2669 msgid "Article Page Auto Show Menu" msgstr "文章页面自动显示菜单" -#: options/theme-options.php:2667 +#: options/theme-options.php:2670 msgid "" "Enabled by default, the article page will automatically show the menu. PHP " "extension \"DOM\" is required for this feature." msgstr "默认开启,文章页面会自动显示菜单,此功能需要 PHP 扩展\"DOM\"。" -#: options/theme-options.php:2674 +#: options/theme-options.php:2677 msgid "Inline Code Background Color" msgstr "内联代码背景色" -#: options/theme-options.php:2682 +#: options/theme-options.php:2685 msgid "Inline Code Background Color In Dark Mode" msgstr "深色模式内联代码背景色" -#: options/theme-options.php:2683 +#: options/theme-options.php:2686 msgid "" "Customize the colors, suggest using a corresponding color with the " "background color,this color is only displayed in dark mode" msgstr "自定义颜色,建议使用与深色模式背景颜色相对应的颜色" -#: options/theme-options.php:2689 +#: options/theme-options.php:2692 msgid "Article Expansion Area" msgstr "文章扩展区" -#: options/theme-options.php:2695 +#: options/theme-options.php:2698 msgid "Article Page Function Bar" msgstr "文章页面功能栏" -#: options/theme-options.php:2696 +#: options/theme-options.php:2699 msgid "" "Enabled by default, will be displayed on the article page with the features " "enabled below" msgstr "默认开启,将在文章页显示下方开启的功能" -#: options/theme-options.php:2703 +#: options/theme-options.php:2706 msgid "Article Lincenses" msgstr "文章知识共享协议" -#: options/theme-options.php:2705 +#: options/theme-options.php:2708 msgid "Enabled by default, Article lincenses will appear on the function bar" msgstr "默认开启,将在文章页面功能栏显示知识共享协议信息" -#: options/theme-options.php:2712 +#: options/theme-options.php:2715 msgid "Article Page Appreciation Function (Alipay QR Code)" msgstr "文章页面赞赏功能(支付宝二维码)" -#: options/theme-options.php:2714 +#: options/theme-options.php:2717 msgid "Upload Alipay Receipt QR Code Image" msgstr "上传支付宝收款码图片" -#: options/theme-options.php:2721 +#: options/theme-options.php:2724 msgid "Article Page Appreciation Function (Wechat QR Code)" msgstr "文章页面赞赏功能(微信二维码)" -#: options/theme-options.php:2723 +#: options/theme-options.php:2726 msgid "Upload WeChat Receipt QR Code Image" msgstr "上传微信收款码图片" -#: options/theme-options.php:2730 +#: options/theme-options.php:2733 msgid "Article Page Author Avatar" msgstr "文章页面作者头像" -#: options/theme-options.php:2732 +#: options/theme-options.php:2735 msgid "Enabled by default, Author avatar will appear on the function bar" msgstr "默认开启,将在文章页面功能栏显示作者头像" -#: options/theme-options.php:2739 +#: options/theme-options.php:2742 msgid "Article Page Author Name" msgstr "文章页面作者名字" -#: options/theme-options.php:2741 +#: options/theme-options.php:2744 msgid "Author name will appear on the function bar when enabled" msgstr "开启之后文章页面功能栏将出现作者信息" -#: options/theme-options.php:2748 +#: options/theme-options.php:2751 msgid "Article Page Author Signature" msgstr "文章页面作者签名" -#: options/theme-options.php:2750 +#: options/theme-options.php:2753 msgid "Enabled by default, Author signature will appear on the function bar" msgstr "默认开启,将在文章页面功能栏显示作者签名" -#: options/theme-options.php:2757 +#: options/theme-options.php:2760 msgid "Article Page Author Info Signature Text" msgstr "文章页面作者签名文本" -#: options/theme-options.php:2769 +#: options/theme-options.php:2772 msgid "Article Last Update Time" msgstr "文章最后更新时间" -#: options/theme-options.php:2771 +#: options/theme-options.php:2774 msgid "Article last update time will appear on the function bar when enabled" msgstr "开启之后文章页面功能栏将出现文章最后更新时间" -#: options/theme-options.php:2778 +#: options/theme-options.php:2781 msgid "Article Tag" msgstr "文章标签" -#: options/theme-options.php:2780 +#: options/theme-options.php:2783 msgid "Enabled by default, Article tag will appear on the function bar" msgstr "默认开启,将在文章页面功能栏显示文章标签" -#: options/theme-options.php:2787 +#: options/theme-options.php:2790 msgid "Article Page Prev/Next Article Switcher" msgstr "文章页面上下文章切换" -#: options/theme-options.php:2788 +#: options/theme-options.php:2791 msgid "" "Enabled by default, the previous and next article switch will appear on the " "article pages" msgstr "默认开启,将在文章页面显示上下文章切换" -#: options/theme-options.php:2797 +#: options/theme-options.php:2800 msgid "Template Page Options" msgstr "模板页面设置" -#: options/theme-options.php:2804 +#: options/theme-options.php:2807 msgid "" "You can click here to learn " @@ -2860,93 +2860,93 @@ msgstr "" "#%E6%A8%A1%E6%9D%BF%E9%A1%B5%E9%9D%A2%E8%AE%BE%E7%BD%AE\">此处 了解如何在" "此页面上设置选项" -#: options/theme-options.php:2809 +#: options/theme-options.php:2812 msgid "Public Settings" msgstr "共用设置" -#: options/theme-options.php:2815 +#: options/theme-options.php:2818 msgid "Template Page Title Font Size" msgstr "模板页面标题字体大小" -#: options/theme-options.php:2816 +#: options/theme-options.php:2819 msgid "" "Slide to adjust, recommended value range is 36-48. This option is only " "available for template pages with featured images already set" msgstr "" "滑动滑块,推荐数值范围为36-48。此选项仅对已经设置了特色图片的模板页面生效" -#: options/theme-options.php:2825 +#: options/theme-options.php:2828 msgid "ShuoShuo Template Settings" msgstr "说说模板设置" -#: options/theme-options.php:2831 +#: options/theme-options.php:2834 msgid "Ideas Template Background ColorⅠ" msgstr "说说模板说说背景颜色Ⅰ" -#: options/theme-options.php:2839 +#: options/theme-options.php:2842 msgid "Ideas Template Background Color II" msgstr "说说模板说说背景颜色Ⅱ" -#: options/theme-options.php:2847 +#: options/theme-options.php:2850 msgid "Ideas Template Tip Arrow" msgstr "说说模板说说提示箭头" -#: options/theme-options.php:2848 +#: options/theme-options.php:2851 msgid "" "After turning on the alert arrow will appear on the left side of the comment" msgstr "开启之后提示箭头将出现在说说左侧上方" -#: options/theme-options.php:2855 +#: options/theme-options.php:2858 msgid "Ideas Template Font" msgstr "说说模板说说字体" -#: options/theme-options.php:2863 +#: options/theme-options.php:2866 msgid "Number Of ShuoShuo" msgstr "每页说说显示数量" -#: options/theme-options.php:2864 +#: options/theme-options.php:2867 msgid "" "Enter a positive integer or \"-1\" to control the number of ShuoShuo " "displayed on each page. Enter \"-1\" to display all messages." msgstr "填写正数则在一页中展示对应数量的说说,填写“-1“则将直接显示全部说说" -#: options/theme-options.php:2870 +#: options/theme-options.php:2873 msgid "Bangumi Template Settings" msgstr "追番模板设置" -#: options/theme-options.php:2876 +#: options/theme-options.php:2879 msgid "Bangumi Template Source" msgstr "追番模板源" -#: options/theme-options.php:2887 +#: options/theme-options.php:2890 msgid "My Anime List Username" msgstr "My Anime List用户名" -#: options/theme-options.php:2889 +#: options/theme-options.php:2892 msgid "Username on https://myanimelist.net/" msgstr "https://myanimelist.net/ 上的用户名" -#: options/theme-options.php:2896 +#: options/theme-options.php:2899 msgid "My Anime List Sort" msgstr "My Anime List顺序" -#: options/theme-options.php:2899 +#: options/theme-options.php:2902 msgid "Status and Last Updated" msgstr "状态和上次更新" -#: options/theme-options.php:2900 +#: options/theme-options.php:2903 msgid "Last Updated" msgstr "上次更新" -#: options/theme-options.php:2901 +#: options/theme-options.php:2904 msgid "Status" msgstr "状态" -#: options/theme-options.php:2909 +#: options/theme-options.php:2912 msgid "Bilibili Account UID" msgstr "哔哩哔哩UID" -#: options/theme-options.php:2910 +#: options/theme-options.php:2913 msgid "" "Fill in your account ID, e.g. https://space.bilibili.com/13972644/, just the " "number part \"13972644\"" @@ -2954,11 +2954,11 @@ msgstr "" "填写你的帐号ID,例如:https://space.bilibili.com/13972644/,只需填写数" "字“13972644”部分" -#: options/theme-options.php:2918 +#: options/theme-options.php:2921 msgid "Bilibili Account Cookies" msgstr "哔哩哔哩帐号Cookies" -#: options/theme-options.php:2919 +#: options/theme-options.php:2922 msgid "" "Fill in your account cookies, F12 to open your browser web panel, go to your " "bilibili homepage to get cookies. If left empty, it will not show the " @@ -2967,79 +2967,79 @@ msgstr "" "填写你的帐号Cookies,F12打开浏览器网络面板,前往你的B站主页获取Cookies。如果" "留空,将不会显示追番进度" -#: options/theme-options.php:2926 +#: options/theme-options.php:2929 msgid "Friend Link Template Settings" msgstr "友情链接模板设置" -#: options/theme-options.php:2932 +#: options/theme-options.php:2935 msgid "Friend Link Template Unit Alignment" msgstr "友情链接模板单元对齐方向" -#: options/theme-options.php:2944 +#: options/theme-options.php:2947 msgid "Friend Link Template Unit Matching Color" msgstr "友情链接模板单元搭配色" -#: options/theme-options.php:2952 +#: options/theme-options.php:2955 msgid "Friend Link Template Unit Border Shadow Color" msgstr "友情链接模板单元边框阴影颜色" -#: options/theme-options.php:2960 +#: options/theme-options.php:2963 msgid "Friend Link Sorting Mode" msgstr "友情链接列表排序模式" -#: options/theme-options.php:2961 +#: options/theme-options.php:2964 msgid "Select the friend link sorting mode, \"Name\" is used by Default." msgstr "选择友情链接列表排序模式,默认使用“名称”排序。" -#: options/theme-options.php:2963 +#: options/theme-options.php:2966 msgid "Name" msgstr "名称" -#: options/theme-options.php:2964 +#: options/theme-options.php:2967 msgid "Rating" msgstr "评级" -#: options/theme-options.php:2965 +#: options/theme-options.php:2968 msgid "Updated" msgstr "更新时间" -#: options/theme-options.php:2966 +#: options/theme-options.php:2969 msgid "Rand" msgstr "随机" -#: options/theme-options.php:2974 +#: options/theme-options.php:2977 msgid "Ascending OR Descending" msgstr "升序或降序" -#: options/theme-options.php:2975 +#: options/theme-options.php:2978 msgid "Order friend link in ascending or descending." msgstr "按升序或降序排序友情链接列表" -#: options/theme-options.php:2978 +#: options/theme-options.php:2981 msgid "Ascending" msgstr "升序" -#: options/theme-options.php:2979 +#: options/theme-options.php:2982 msgid "Descending" msgstr "降序" -#: options/theme-options.php:2986 +#: options/theme-options.php:2989 msgid "Login Template Settings" msgstr "登录模板设置" -#: options/theme-options.php:2992 +#: options/theme-options.php:2995 msgid "Login Template Registration Function" msgstr "登录模板注册功能" -#: options/theme-options.php:2993 +#: options/theme-options.php:2996 msgid "Login template will allow registration when enabled" msgstr "开启之后登录模板将允许注册" -#: options/theme-options.php:3002 +#: options/theme-options.php:3005 msgid "Comment-related Options" msgstr "评论相关设置" -#: options/theme-options.php:3009 +#: options/theme-options.php:3012 msgid "" "You can click here to learn " @@ -3049,38 +3049,34 @@ msgstr "" "#%E8%AF%84%E8%AE%BA%E7%9B%B8%E5%85%B3%E8%AE%BE%E7%BD%AE\">此处 了解如何在" "此页面上设置选项" -#: options/theme-options.php:3015 +#: options/theme-options.php:3017 +msgid "Comment Area Style" +msgstr "评论区域样式" + +#: options/theme-options.php:3023 msgid "Page Comment Area Display" msgstr "页面评论区域显示" -#: options/theme-options.php:3016 +#: options/theme-options.php:3024 msgid "You can choose to expand or shirink the content of the comment area" msgstr "你可以选择展开显示或者收缩显示评论区域内容" -#: options/theme-options.php:3018 +#: options/theme-options.php:3026 msgid "Expand" msgstr "展开" -#: options/theme-options.php:3019 +#: options/theme-options.php:3027 msgid "Shrink" msgstr "收缩" -#: options/theme-options.php:3027 +#: options/theme-options.php:3035 msgid "Page Comment Area Matching Color" msgstr "页面评论区域搭配色" -#: options/theme-options.php:3035 +#: options/theme-options.php:3043 msgid "Page Comment Area Shadow Color" msgstr "页面评论区域阴影颜色" -#: options/theme-options.php:3043 -msgid "Page Comment Area Bilibili Emoji Pack" -msgstr "页面评论区域哔哩哔哩表情包" - -#: options/theme-options.php:3044 -msgid "Default on, bilibili emotions are displayed below the comment box" -msgstr "默认开启,哔哩哔哩表情包显示在评论框的下方" - #: options/theme-options.php:3051 msgid "Page Comment Area Bottom Right Background Image" msgstr "页面评论区域右下背景图片" @@ -3090,78 +3086,131 @@ msgid "" "If this option is blank, there will be no image, no best recommendation here" msgstr "如果此选项为空白,则没有图像,无最佳推荐" -#: options/theme-options.php:3059 +#: options/theme-options.php:3058 +msgid "Comment Area Function" +msgstr "评论区域功能" + +#: options/theme-options.php:3064 +msgid "Comment Area Emoticon" +msgstr "评论区域表情" + +#: options/theme-options.php:3065 +msgid "" +"Select the emoticons to be displayed in the comment area input box. Uncheck " +"all to turn off the comment input box emoticon function." +msgstr "" +"选择要在评论区域输入框中显示的表情。全部取消选中可关闭评论区域输入框表情功" +"能。" + +#: options/theme-options.php:3079 +msgid "Customized Emoticon Column Name" +msgstr "自定义表情包名称" + +#: options/theme-options.php:3080 +msgid "" +"It is recommended to enter less than 4 Chinese characters in length to avoid " +"causing compatibility issues on mobile terminals." +msgstr "建议输入少于4个汉字的内容,以免造成移动端的兼容性问题。" + +#: options/theme-options.php:3088 +msgid "Path To Custom Expression" +msgstr "自定义表情包路径" + +#: options/theme-options.php:3089 +msgid "" +"Click here updating emoticon list. Specific usage reference: " +"Comment related settings" +msgstr "" +"点击 这" +"里 更新表情包列表。使用方法请参考:评论相关设置" + +#: options/theme-options.php:3096 +msgid "Custom Emoticon Proxy Address" +msgstr "自定义表情包代理地址" + +#: options/theme-options.php:3097 +msgid "" +"Fill in the CDN address of the emoticon image. If left blank, the CDN proxy " +"function will not be enabled." +msgstr "填写表情图片的 CDN 地址。如果留空,则不会启用 CDN 代理功能。" + +#: options/theme-options.php:3107 msgid "Page Comment Area UA Info" msgstr "页面评论区域 UA 信息" -#: options/theme-options.php:3060 +#: options/theme-options.php:3108 msgid "" "When enabled, the page comment area will display the user’s browser, " "operating system information" msgstr "开启之后页面评论区域将显示用户的浏览器,操作系统信息" -#: options/theme-options.php:3067 +#: options/theme-options.php:3115 msgid "Page Comment Area Location Information" msgstr "页面评论区域位置信息" -#: options/theme-options.php:3068 +#: options/theme-options.php:3116 msgid "" "When enabled, the page comment area will show the user’s location information" msgstr "开启之后页面评论区域将显示用户的位置信息" -#: options/theme-options.php:3075 +#: options/theme-options.php:3123 msgid "Private Comment Function" msgstr "私人评论功能" -#: options/theme-options.php:3076 +#: options/theme-options.php:3124 msgid "" "When enabled, users are allowed to set their comments to be invisible to " "others" msgstr "开启之后将允许用户设置自己的评论对其他人不可见" -#: options/theme-options.php:3083 +#: options/theme-options.php:3131 msgid "Page Comment Area Bot Verification" msgstr "页面评论区域机器人验证" -#: options/theme-options.php:3084 +#: options/theme-options.php:3132 msgid "After turning on user comments need to be verified before posting" msgstr "开启之后用户评论前需要经过验证后才可发布" -#: options/theme-options.php:3091 +#: options/theme-options.php:3139 msgid "QQ Avatar Link Encryption" msgstr "QQ头像链接加密" -#: options/theme-options.php:3094 +#: options/theme-options.php:3142 msgid "Redirect (low security)" msgstr "重定向(低安全性)" -#: options/theme-options.php:3095 +#: options/theme-options.php:3143 msgid "Get avatar data in the backend (medium security)" msgstr "后端获取头像数据(中安全性)" -#: options/theme-options.php:3096 +#: options/theme-options.php:3144 msgid "Parse avatar interface in the backend (high security, slow)" msgstr "后端解析头像接口(高安全性,慢速)" -#: options/theme-options.php:3104 +#: options/theme-options.php:3152 msgid "Page Comment Area Upload Image Interface" msgstr "页面评论区域上传图片接口" -#: options/theme-options.php:3118 +#: options/theme-options.php:3166 msgid "Imgur Client ID" msgstr "Imgur Client ID" -#: options/theme-options.php:3120 +#: options/theme-options.php:3168 msgid "" "Fill in Client ID here, to register please visit https://api.imgur.com/" "oauth2/addclient" msgstr "此处填写Client ID,注册请访问 https://api.imgur.com/oauth2/addclient" -#: options/theme-options.php:3126 +#: options/theme-options.php:3174 msgid "Imgur Upload Proxy" msgstr "Imgur上传代理" -#: options/theme-options.php:3128 +#: options/theme-options.php:3176 msgid "" "The proxy used by the backend when uploading images to Imgur. You can refer " "to the tutorial: https://2heng.xin/2018/06/06/javascript-upload-images-with-" @@ -3170,41 +3219,41 @@ msgstr "" "后端上传图片到 Imgur 的时候使用的代理。你可以参考教程:https://2heng." "xin/2018/06/06/javascript-upload-images-with-imgur-api/" -#: options/theme-options.php:3135 +#: options/theme-options.php:3183 msgid "SM.MS Secret Token" msgstr "SM.MS Secret Token" -#: options/theme-options.php:3137 +#: options/theme-options.php:3185 msgid "" "Fill in your Key here, to get it please visit https://sm.ms/home/apitoken" msgstr "此处填写Key,获取请访问 https://sm.ms/home/apitoken" -#: options/theme-options.php:3143 +#: options/theme-options.php:3191 msgid "Chevereto API v1 Key" msgstr "Chevereto API v1 Key" -#: options/theme-options.php:3145 +#: options/theme-options.php:3193 msgid "" "Fill in the Key here, to get please visit your Chevereto home page address/" "dashboard/settings/api" msgstr "此处填写Key,获取请访问你的Chevereto首页地址/dashboard/settings/api" -#: options/theme-options.php:3151 +#: options/theme-options.php:3199 msgid "Chevereto Address" msgstr "Chevereto地址" -#: options/theme-options.php:3153 +#: options/theme-options.php:3201 msgid "" "Your Chevereto home page address. Please note that there is no \"/\" at the " "end, e.g. https://your.cherverto.com" msgstr "" "你的Chevereto首页地址, 注意结尾没有 /, 例如:https://your.cherverto.com" -#: options/theme-options.php:3159 +#: options/theme-options.php:3207 msgid "Lsky Pro v1 Token" msgstr "Lsky Pro v1 Token" -#: options/theme-options.php:3161 +#: options/theme-options.php:3209 msgid "" "Fill in the Token here, Please note that there is no \"Bearer \" at first, " "to get please visit your Lsky Pro home page address/api" @@ -3212,37 +3261,41 @@ msgstr "" "在这里填写令牌,请注意,首先没有“Bearer”,要获得请访问您的Lsky Pro主页地址/ " "api" -#: options/theme-options.php:3167 +#: options/theme-options.php:3215 msgid "Lsky Pro Address" msgstr "Lsky Pro地址" -#: options/theme-options.php:3169 +#: options/theme-options.php:3217 msgid "" "Your Lsky Pro home page address. Please note that there is no \"/\" at the " "end, e.g. https://your.lskypro.com" msgstr "你的Lsky Pro首页地址, 注意结尾没有 /, 例如:https://your.lskypro.com" -#: options/theme-options.php:3175 +#: options/theme-options.php:3223 msgid "Comment Image Proxy" msgstr "评论图片代理" -#: options/theme-options.php:3176 +#: options/theme-options.php:3224 msgid "Proxy for the image displayed on the frontend" msgstr "前端显示的图片的代理" -#: options/theme-options.php:3183 +#: options/theme-options.php:3231 +msgid "Comment Email Notification" +msgstr "评论邮件通知" + +#: options/theme-options.php:3237 msgid "Mail Template Featured Image" msgstr "邮件模板特色图片" -#: options/theme-options.php:3184 +#: options/theme-options.php:3238 msgid "Set the background image of your reply email" msgstr "设置你的回复邮件上方背景图片" -#: options/theme-options.php:3192 +#: options/theme-options.php:3246 msgid "Mail Template Sending Address Prefix" msgstr "邮件模板发件地址前缀" -#: options/theme-options.php:3193 +#: options/theme-options.php:3247 msgid "" "Used to send system mail. The sender address will be displayed in the user's " "mailbox, don't use Non-English Characters. The default system mail address " @@ -3251,11 +3304,11 @@ msgstr "" "用于发送系统邮件,在用户的邮箱中显示的发件人地址,不要使用中文,默认系统邮件" "地址为 bibi@你的域名" -#: options/theme-options.php:3200 +#: options/theme-options.php:3254 msgid "User Mail Reply Notification" msgstr "用户邮件回复通知" -#: options/theme-options.php:3201 +#: options/theme-options.php:3255 msgid "" "By default WordPress will use email notifications to notify users when their " "comments receive a reply. After turning it on users are allowed to set " @@ -3264,25 +3317,25 @@ msgstr "" "WordPress默认会使用邮件通知用户评论收到回复,开启之后允许用户设置自己的评论收" "到回复时是否使用邮件通知" -#: options/theme-options.php:3208 +#: options/theme-options.php:3262 msgid "Admin Email Reply Notification" msgstr "管理员邮件回复通知" -#: options/theme-options.php:3209 +#: options/theme-options.php:3263 msgid "" "Use email notifications when admin comments receive a reply after turning it " "on" msgstr "开启之后当管理员评论收到回复时使用邮件通知" -#: options/theme-options.php:3218 +#: options/theme-options.php:3272 msgid "Other Options" msgstr "其他设置" -#: options/theme-options.php:3224 +#: options/theme-options.php:3278 msgid "Login Screen and Dashboard Related Options" msgstr "登录界面和仪表盘相关设置" -#: options/theme-options.php:3231 +#: options/theme-options.php:3285 msgid "" "You can click here" "此处 了解如何在此页面上设置选项" -#: options/theme-options.php:3236 +#: options/theme-options.php:3290 msgid "Login Screen" msgstr "登录界面" -#: options/theme-options.php:3242 +#: options/theme-options.php:3296 msgid "Custom Login Screen" msgstr "定制登录界面" -#: options/theme-options.php:3243 +#: options/theme-options.php:3297 msgid "Default on, custom login screen will replace the default login screen" msgstr "默认开启,定制登录界面将取代默认登录界面" -#: options/theme-options.php:3250 +#: options/theme-options.php:3304 msgid "Login Screen Background Image" msgstr "登录界面背景图片" -#: options/theme-options.php:3251 +#: options/theme-options.php:3305 msgid "" "Set your login screen background image, leave this option blank to show the " "default" msgstr "设置你的登录界面背景图片,此选项留空则显示默认背景" -#: options/theme-options.php:3260 +#: options/theme-options.php:3314 msgid "Login Screen Background Blur" msgstr "登录界面背景虚化" -#: options/theme-options.php:3261 +#: options/theme-options.php:3315 msgid "Login screen background image will be blurred when enabled" msgstr "开启之后登录界面背景图片将被虚化" -#: options/theme-options.php:3269 +#: options/theme-options.php:3323 msgid "Login Screen Logo" msgstr "登录界面Logo" -#: options/theme-options.php:3270 +#: options/theme-options.php:3324 msgid "Set your login screen Logo" msgstr "设置你的登录界面Logo" -#: options/theme-options.php:3279 +#: options/theme-options.php:3333 msgid "Jump after login" msgstr "登录后跳转" -#: options/theme-options.php:3280 +#: options/theme-options.php:3334 msgid "Jump to backend for admins and home for users after turning on." msgstr "开启之后管理员跳转至后台,用户跳转至主页。" -#: options/theme-options.php:3287 +#: options/theme-options.php:3341 msgid "Login Screen Language Option" msgstr "登录界面语言选项" -#: options/theme-options.php:3288 +#: options/theme-options.php:3342 msgid "Login screen language option will be display when enabled" msgstr "开启之后登录界面将显示语言选项" -#: options/theme-options.php:3294 +#: options/theme-options.php:3348 msgid "Dashboard" msgstr "仪表盘" -#: options/theme-options.php:3300 +#: options/theme-options.php:3354 msgid "Dashboard Background Image" msgstr "仪表盘背景图片" -#: options/theme-options.php:3301 +#: options/theme-options.php:3355 msgid "" "Set your dashboard background image, leave this option blank to show white " "background" msgstr "设置你的仪表盘背景图片,此选项留空则显示白色背景" -#: options/theme-options.php:3309 +#: options/theme-options.php:3363 msgid "Dashboard Options Menu Style" msgstr "仪表板设置菜单样式" -#: options/theme-options.php:3320 +#: options/theme-options.php:3374 msgid "Dashboard Primary Menu Color" msgstr "仪表盘一级菜单颜色" -#: options/theme-options.php:3328 +#: options/theme-options.php:3382 msgid "Dashboard Secondary Menu Color" msgstr "仪表盘二级菜单颜色" -#: options/theme-options.php:3336 +#: options/theme-options.php:3390 msgid "Dashboard Emphasis Color" msgstr "仪表板强调颜色" -#: options/theme-options.php:3344 +#: options/theme-options.php:3398 msgid "Dashboard Button Color" msgstr "仪表板按钮颜色" -#: options/theme-options.php:3352 +#: options/theme-options.php:3406 msgid "Dashboard Text Color" msgstr "仪表盘文本颜色" -#: options/theme-options.php:3362 +#: options/theme-options.php:3416 msgid "ChatGPT Options" msgstr "ChatGPT 设置" -#: options/theme-options.php:3369 +#: options/theme-options.php:3423 msgid "" "You can click here to learn how to set the options on " @@ -3397,27 +3450,27 @@ msgstr "" "您可以单击 此处 了解如何在此页面上设置选项" -#: options/theme-options.php:3375 +#: options/theme-options.php:3429 msgid "ChatGPT Function" msgstr "ChatGPT 功能" -#: options/theme-options.php:3376 +#: options/theme-options.php:3430 msgid "After turning on ChatGPT Function will be available" msgstr "开启之后 ChatGPT 功能将可以使用" -#: options/theme-options.php:3383 +#: options/theme-options.php:3437 msgid "ChatGPT Base URL" msgstr "ChatGPT 访问地址" -#: options/theme-options.php:3384 +#: options/theme-options.php:3438 msgid "Fill in the ChatGPT Base URL, The default is http://sxy.gay/" msgstr "填写ChatGPT访问地址,默认使用 http://sxy.gay/" -#: options/theme-options.php:3392 +#: options/theme-options.php:3446 msgid "ChatGPT API keys" msgstr "ChatGPT API密钥" -#: options/theme-options.php:3393 +#: options/theme-options.php:3447 msgid "" "Fill in Your ChatGPT API keys, You can go to OpenAI Website to get your API Keys" @@ -3425,15 +3478,15 @@ msgstr "" "填写您的 ChatGPT API 密钥,您可以访问 OpenAI 网站 获取您的 API 密钥" -#: options/theme-options.php:3400 +#: options/theme-options.php:3454 msgid "ChatGPT Article Summarize" msgstr "ChatGPT 文章摘要" -#: options/theme-options.php:3401 +#: options/theme-options.php:3455 msgid "After turning on ChatGPT will automatically generate article abstracts" msgstr "开启之后 ChatGPT 会自动生成文章摘要" -#: options/theme-options.php:3408 +#: options/theme-options.php:3462 msgid "" "Each update of your post will trigger a request to generate a summary. Due " "to current API limitations, if your article exceeds 4097 Token, the system " @@ -3442,21 +3495,21 @@ msgstr "" "你的每次文章更新都会触发生成摘要请求。由于目前API限制,如果你的文章超过 4097 " "Token,系统将会只发送未超出部分以生成摘要" -#: options/theme-options.php:3418 +#: options/theme-options.php:3472 msgid "Article IDs that do not Require ChatGPT Summarize" msgstr "不需要 ChatGPT 生成摘要的文章ID" -#: options/theme-options.php:3419 +#: options/theme-options.php:3473 msgid "" "Enter the article IDs that do not need to generate ChatGPT Summarize, and " "split multiple article IDs with \",\"" msgstr "输入不需要ChatGPT 生成摘要的文章 ID,并使用“,” 拆分多个文章 ID" -#: options/theme-options.php:3430 +#: options/theme-options.php:3484 msgid "ChatGPT Article Summarize Init Prompt" msgstr "ChatGPT 文章摘要初始化提示" -#: options/theme-options.php:3435 +#: options/theme-options.php:3489 msgid "" "Fill in the Init Prompt, Please make changes if you know how to configure it " "correctly. Init Prompt will be passed to ChatGPT as \"system\" role" @@ -3464,22 +3517,22 @@ msgstr "" "填写初始化提示,请你在知道如何正确配置的情况下进行修改,初始化提示将作为“系" "统”角色设定传递给 ChatGPT" -#: options/theme-options.php:3446 +#: options/theme-options.php:3500 msgid "ChatGPT Article Summarize Ask Prompt" msgstr "ChatGPT 文章摘要要求提示" -#: options/theme-options.php:3451 +#: options/theme-options.php:3505 msgid "" "Fill in the Ask Prompt, Use preset value when option is empty, Please make " "changes if you know how to configure it correctly" msgstr "" "填写询问文本,选项为空时使用预设值,请你在知道如何正确配置的情况下进行修改" -#: options/theme-options.php:3459 +#: options/theme-options.php:3513 msgid "Low Use Options" msgstr "低使用设置" -#: options/theme-options.php:3466 +#: options/theme-options.php:3520 msgid "" "You can click here to learn how to " @@ -3489,53 +3542,53 @@ msgstr "" "#%E4%BD%8E%E4%BD%BF%E7%94%A8%E8%AE%BE%E7%BD%AE\">此处 了解如何在此页面上" "设置选项" -#: options/theme-options.php:3472 +#: options/theme-options.php:3526 msgid "Statistics API" msgstr "统计接口" -#: options/theme-options.php:3473 +#: options/theme-options.php:3527 msgid "" "You can choose WP-Statistics plugin statistics or theme built-in statistics " "to display" msgstr "你可以选择WP-Statistics插件统计或者主题内建统计作为统计结果" -#: options/theme-options.php:3475 +#: options/theme-options.php:3529 msgid "Theme Built in Statistics" msgstr "主题内建统计" -#: options/theme-options.php:3476 +#: options/theme-options.php:3530 msgid "WP-Statistics Plugin Statistics" msgstr "WP-Statistics插件统计" -#: options/theme-options.php:3484 +#: options/theme-options.php:3538 msgid "Statistics display format" msgstr "统计数据显示格式" -#: options/theme-options.php:3485 +#: options/theme-options.php:3539 msgid "You can choose from four different data display formats" msgstr "你可以选择四种不同的数据显示格式" -#: options/theme-options.php:3487 +#: options/theme-options.php:3541 msgid "23333 Visits" msgstr "23333次访问" -#: options/theme-options.php:3488 +#: options/theme-options.php:3542 msgid "23,333 Visits" msgstr "23,333次访问" -#: options/theme-options.php:3489 +#: options/theme-options.php:3543 msgid "23 333 Visits" msgstr "23 333次访问" -#: options/theme-options.php:3490 +#: options/theme-options.php:3544 msgid "23K Visits" msgstr "23K次访问" -#: options/theme-options.php:3498 +#: options/theme-options.php:3552 msgid "Live Search" msgstr "实时搜索" -#: options/theme-options.php:3499 +#: options/theme-options.php:3553 msgid "" "After turning on the live search in the frontend, call Rest API to update " "the cache once an hour. You can set the cache time manually in api.php" @@ -3543,45 +3596,45 @@ msgstr "" "开启之后将在前台实现实时搜索,调用 Rest API 每小时更新一次缓存,可在 api.php " "里手动设置缓存时间" -#: options/theme-options.php:3506 +#: options/theme-options.php:3560 msgid "Live Search Comment Support" msgstr "实时搜索评论支援" -#: options/theme-options.php:3508 +#: options/theme-options.php:3562 msgid "" "Enable to search for comments in live search (not recommended if site has " "too many comments)" msgstr "启开启之后将在可在实时搜索中搜索评论(如果网站评论数量太多不建议开启)" -#: options/theme-options.php:3515 +#: options/theme-options.php:3569 msgid "Google Analytics Id" msgstr "谷歌统计ID" -#: options/theme-options.php:3516 +#: options/theme-options.php:3570 msgid "If you already have a plugin to handle it, please keep here empty." msgstr "如果已有类似功能插件,请将此处留空" -#: options/theme-options.php:3522 +#: options/theme-options.php:3576 msgid "Custom CSS Styles" msgstr "自定义CSS样式" -#: options/theme-options.php:3523 +#: options/theme-options.php:3577 msgid "Fill in the CSS code without writing style tag" msgstr "填写CSS代码,不需要写style标签" -#: options/theme-options.php:3530 +#: options/theme-options.php:3584 msgid "Code inserted in the header" msgstr "自定义插入 Header 代码" -#: options/theme-options.php:3531 +#: options/theme-options.php:3585 msgid "Insert HTML code right before ." msgstr "在前插入HTML代码" -#: options/theme-options.php:3537 +#: options/theme-options.php:3591 msgid "Timezone Fix" msgstr "时区修正" -#: options/theme-options.php:3538 +#: options/theme-options.php:3592 msgid "" "Slide to adjust. If the comment has a time difference problem, adjust it " "here, fill in an integer. Calculation method: actual time = time of display " @@ -3590,42 +3643,42 @@ msgstr "" "滑动滑块,如果评论出现时差问题在这里调整,填入一个整数,计算方法:实际时间=显" "示错误的时间-你输入的整数(单位:小时)" -#: options/theme-options.php:3547 +#: options/theme-options.php:3601 msgid "Gravatar Service Proxy" msgstr "Gravatar服务代理" -#: options/theme-options.php:3548 +#: options/theme-options.php:3602 msgid "" "You can select multiple proxy as the Gravatar Service Proxy. By default, " "Tianli is used as the Gravatar Service Proxy." msgstr "" "你可以选择多种代理作为Gravatar服务代理。默认使用Tianli作为Gravatar服务代理。" -#: options/theme-options.php:3550 +#: options/theme-options.php:3604 msgid "Weavatar Service" msgstr "Weavatar服务" -#: options/theme-options.php:3551 +#: options/theme-options.php:3605 msgid "Cravatar Service" msgstr "Cravatar服务" -#: options/theme-options.php:3552 +#: options/theme-options.php:3606 msgid "Geekzu" msgstr "极客族" -#: options/theme-options.php:3553 +#: options/theme-options.php:3607 msgid "Loli Net" msgstr "" -#: options/theme-options.php:3554 +#: options/theme-options.php:3608 msgid "Official" msgstr "官方" -#: options/theme-options.php:3555 options/theme-options.php:3563 +#: options/theme-options.php:3609 options/theme-options.php:3617 msgid "Custom Proxy Address" msgstr "自定义代理地址" -#: options/theme-options.php:3564 +#: options/theme-options.php:3618 msgid "" "Enter your Gravatar proxy address without starting with \"http(s)://\" and " "ending with \"/\". Example: gravatar.com/avatar." @@ -3633,37 +3686,37 @@ msgstr "" "输入你的头像代理地址,请勿以\"http(s)://\" 开头 “/” 结尾。示例:gravatar.com/" "avatar。" -#: options/theme-options.php:3571 +#: options/theme-options.php:3625 msgid "Lightbox" msgstr "灯箱" -#: options/theme-options.php:3577 +#: options/theme-options.php:3631 msgid "BaguetteBox Lightbox Effect" msgstr "BaguetteBox灯箱效果" -#: options/theme-options.php:3578 +#: options/theme-options.php:3632 msgid "BaguetteBox will be used as the image lightbox effect when turned on" msgstr "开启之后将使用BaguetteBox作为图片灯箱效果" -#: options/theme-options.php:3590 +#: options/theme-options.php:3644 msgid "FancyBox Lightbox Effect" msgstr "FancyBox灯箱效果" -#: options/theme-options.php:3591 +#: options/theme-options.php:3645 msgid "" "FancyBox will be used as an image lightbox effect after turning on, " "additional JQ libraries will be loaded" msgstr "开启之后将使用FancyBox作为图片灯箱效果,将会额外加载JQ库" -#: options/theme-options.php:3603 +#: options/theme-options.php:3657 msgid "LightGallery Lightbox Effect" msgstr "LightGallery灯箱效果" -#: options/theme-options.php:3604 +#: options/theme-options.php:3658 msgid "LightGallery will be used as an image lightbox effect after turning on." msgstr "开启之后将使用LightGallery作为图片灯箱效果" -#: options/theme-options.php:3614 +#: options/theme-options.php:3668 msgid "" "Attension: Please read License Instruction before use.
        提交关于 Github 的新讨论以寻求帮助。https://" "github.com/mirai-mamori/Sakurairo/discussions" -#: options/theme-options.php:3625 +#: options/theme-options.php:3679 msgid "" "Start from Sakurairo v2.4.0, plugins names in LightGallery option follow the " "form cite in official document (eg. lgHash instead of \"hash\")" @@ -3694,15 +3747,15 @@ msgstr "" "从Sakurairo v2.4.0开始,LightGallery中的插件名称会与官方文档中引用的表格保持" "一致(例如“hash”将被表示为IgHash)" -#: options/theme-options.php:3633 +#: options/theme-options.php:3687 msgid "LightGallery Lightbox Effect Options" msgstr "LightGallery灯箱效果" -#: options/theme-options.php:3644 +#: options/theme-options.php:3698 msgid "Code Highlighting" msgstr "代码高亮" -#: options/theme-options.php:3649 +#: options/theme-options.php:3703 msgid "" "

        Highlight.js: Default. Automatic language recognition.

        Prism.js: Requires a language to be specified, see 如何代码高亮动态载入的文件

        自定义: 适用于另有配置的情况。

        " -#: options/theme-options.php:3657 +#: options/theme-options.php:3711 msgid "Code Highlight Method" msgstr "代码高亮程序" -#: options/theme-options.php:3661 +#: options/theme-options.php:3715 msgid "Custom Program" msgstr "自定义" -#: options/theme-options.php:3669 +#: options/theme-options.php:3723 msgid "Prism.js: Add Line Number Display for All Code Blocks" msgstr "Prism.js:为所有代码块增加行数显示" -#: options/theme-options.php:3673 +#: options/theme-options.php:3727 msgid "" "See the plugin " "description documentation" msgstr "" "请参阅 插件描述文档" -#: options/theme-options.php:3679 +#: options/theme-options.php:3733 msgid "Prism.js: Autoload Address" msgstr "Prism.js:自动加载地址" -#: options/theme-options.php:3683 +#: options/theme-options.php:3737 msgid "Leave blank to use default values" msgstr "留空以使用默认值" -#: options/theme-options.php:3690 +#: options/theme-options.php:3744 msgid "Prism.js: Code Highlight Theme" msgstr "Prism.js:代码高亮主题" -#: options/theme-options.php:3691 options/theme-options.php:3702 +#: options/theme-options.php:3745 options/theme-options.php:3756 msgid "Relative to autoload address. Leave blank to use default values" msgstr "相对于自动加载地址。留空以使用默认值" -#: options/theme-options.php:3701 +#: options/theme-options.php:3755 msgid "Prism.js: Code Highlight Theme (Dark Mode)" msgstr "Prism.js:代码高亮主题(深色模式)" -#: options/theme-options.php:3712 +#: options/theme-options.php:3766 msgid "" "The following Options are not recommended to be modified blindly, please use " "them under the guidance of others" msgstr "以下设置不推荐盲目进行修改,请在他人的指导下使用" -#: options/theme-options.php:3718 +#: options/theme-options.php:3772 msgid "Image CDN" msgstr "图片 CDN" -#: options/theme-options.php:3719 +#: options/theme-options.php:3773 msgid "" "Note: fill in the format https://your CDN domain/. This means that images " "with original path http://your.domain/wp-content/uploads/2018/05/xx.png will " @@ -3776,23 +3829,23 @@ msgstr "" "domain/wp-content/uploads/2018/05/xx.png 的图片将从 http://你的CDN域" "名/2018/05/xx.png 加载" -#: options/theme-options.php:3726 +#: options/theme-options.php:3780 msgid "Articles Categories (Do not display)" msgstr "文章分类(不显示)" -#: options/theme-options.php:3727 options/theme-options.php:3734 +#: options/theme-options.php:3781 options/theme-options.php:3788 msgid "Fill in category ID, seperate in English\" , \" when more than one" msgstr "填写分类ID,多个用英文“ , ”分开" -#: options/theme-options.php:3733 +#: options/theme-options.php:3787 msgid "Image Display Category" msgstr "图片展示分类" -#: options/theme-options.php:3740 +#: options/theme-options.php:3794 msgid "Specify Login Address" msgstr "指定登录地址" -#: options/theme-options.php:3741 +#: options/theme-options.php:3795 msgid "" "Force not to use the WordPress login page address to login, fill in the new " "login page address, such as: http://www.xxx.com/login. Note that before " @@ -3803,47 +3856,47 @@ msgstr "" "www.xxx.com/login。注意填写前先测试下你新建的页面是可以正常打开的,以免造成无" "法进入后台等情况。" -#: options/theme-options.php:3747 +#: options/theme-options.php:3801 msgid "Specify Registration Address" msgstr "指定注册地址" -#: options/theme-options.php:3748 +#: options/theme-options.php:3802 msgid "" "This address is used as the registration entry on the login page, if you " "specify a login address, it is recommended to fill in" msgstr "该地址在登录页面作为注册入口,如果你指定了登录地址,则建议填写" -#: options/theme-options.php:3754 +#: options/theme-options.php:3808 msgid "Version Control" msgstr "版本控制" -#: options/theme-options.php:3755 +#: options/theme-options.php:3809 msgid "Used to update front-end cookies and browser cache, can use any string" msgstr "用于更新前端Cookie和浏览器缓存,可使用任意字符串" -#: options/theme-options.php:3761 +#: options/theme-options.php:3815 msgid "Backup&Recovery" msgstr "备份恢复" -#: options/theme-options.php:3763 +#: options/theme-options.php:3817 msgid "Backup or Recovery your theme options" msgstr "备份或恢复你的主题设置" -#: options/theme-options.php:3774 +#: options/theme-options.php:3828 msgid "About Theme" msgstr "关于主题" -#: options/theme-options.php:3780 +#: options/theme-options.php:3834 msgid "Version Info" msgstr "版本信息" -#: options/theme-options.php:3785 +#: options/theme-options.php:3839 msgid "" "" msgstr "" -#: options/theme-options.php:3791 +#: options/theme-options.php:3845 #, php-format msgid "" "Theme Sakurairo Version %s | Internal Version %s | 项目地址" -#: options/theme-options.php:3796 +#: options/theme-options.php:3850 msgid "Update Related" msgstr "更新相关" -#: options/theme-options.php:3802 +#: options/theme-options.php:3856 msgid "Theme Update Source" msgstr "主题更新源" -#: options/theme-options.php:3808 +#: options/theme-options.php:3862 msgid "" "If you are using a server set up in mainland China, please use the Upyun " "source or the official theme source as your theme update source" @@ -3868,11 +3921,11 @@ msgstr "" "如果你使用的是架设在国内的服务器,请使用又拍云源或主题官方源作为你的主题更新" "源" -#: options/theme-options.php:3815 +#: options/theme-options.php:3869 msgid "Theme Update Test Channel Disclaimer" msgstr "主题更新测试通道免责声明" -#: options/theme-options.php:3821 +#: options/theme-options.php:3875 msgid "" "Please copy the text in quotes after ensure that you have carefully " "understood the risks associated with participating in the test and are " @@ -3885,55 +3938,55 @@ msgstr "" "内 \"I agree and am willing to bear all unexpected consequences\" " -#: options/theme-options.php:3827 +#: options/theme-options.php:3881 msgid "Theme Update Channel" msgstr "主题更新频道" -#: options/theme-options.php:3834 +#: options/theme-options.php:3888 msgid "" "You can toggle the update channel here to participate in the testing of the " "new version" msgstr "你可以在此切换更新频道以参与到新版本的测试中" -#: options/theme-options.php:3836 +#: options/theme-options.php:3890 msgid "Stable Channel" msgstr "正式通道" -#: options/theme-options.php:3837 +#: options/theme-options.php:3891 msgid "Beta Channel" msgstr "公共测试频道" -#: options/theme-options.php:3838 +#: options/theme-options.php:3892 msgid "Preview Channel" msgstr "预览测试频道" -#: options/theme-options.php:3845 +#: options/theme-options.php:3899 msgid "Resource Control" msgstr "资源控制" -#: options/theme-options.php:3851 +#: options/theme-options.php:3905 msgid "Provide Critical Frontend Resource locally" msgstr "本地提供关键前端资源" -#: options/theme-options.php:3852 +#: options/theme-options.php:3906 msgid "" "Enabeld by default. Critical resources are those resources whose loading " "performance will have a significant impact on the user experience." msgstr "默认开启。关键资源是指那些其加载性能将对用户体验产生重大影响的资源。" -#: options/theme-options.php:3859 +#: options/theme-options.php:3913 msgid "Provide Other Frontend Resource locally" msgstr "本地提供其他前端资源" -#: options/theme-options.php:3860 +#: options/theme-options.php:3914 msgid "Less important frontend resource in the theme's folder." msgstr "主题文件夹中不太重要的前端资源。" -#: options/theme-options.php:3867 +#: options/theme-options.php:3921 msgid "Provide 3rd-party library from public CDN" msgstr "从公共 CDN 提供第三方库" -#: options/theme-options.php:3868 +#: options/theme-options.php:3922 msgid "" "When disabled, 3rd-party dependencies, which have been built to bundles " "along with themes's entry script, will be loaded from the exact same origin " @@ -3942,15 +3995,15 @@ msgstr "" "当禁用时,与主题脚本一起被构建打包的第三方依赖,将从与关键前端资源完全相同的" "来源加载。" -#: options/theme-options.php:3875 +#: options/theme-options.php:3929 msgid "Public CDN Basepath" msgstr "公共 CDN 路径" -#: options/theme-options.php:3887 +#: options/theme-options.php:3941 msgid "Vision Resource Basepath" msgstr "视觉资源路径" -#: options/theme-options.php:3888 +#: options/theme-options.php:3942 msgid "" "This link directory structure needs to be consistent with the Sakurairo Vision " @@ -3963,31 +4016,31 @@ msgstr "" "资源 404。默认采用 又拍云 提供的镜像" "源。" -#: options/theme-options.php:3894 +#: options/theme-options.php:3948 msgid "Theme Sponsors" msgstr "赞助信息" -#: options/theme-options.php:3899 +#: options/theme-options.php:3953 msgid "" "\"sponsors\"" msgstr "" -#: options/theme-options.php:3904 +#: options/theme-options.php:3958 msgid "Theme Contributors" msgstr "贡献者" -#: options/theme-options.php:3909 +#: options/theme-options.php:3963 msgid "" "\"Theme" msgstr "" -#: options/theme-options.php:3914 +#: options/theme-options.php:3968 msgid "Privacy information" msgstr "隐私信息" -#: options/theme-options.php:3919 +#: options/theme-options.php:3973 msgid "" "

        The theme respects your privacy

        \n" "

        However, when you use a service provider pre-populated by the " @@ -4003,11 +4056,11 @@ msgstr "" "

        你可以通过本地化与主题相关的资源来减少发送给第三方的信息,主题提供相关选项" "配置

        " -#: options/theme-options.php:3927 +#: options/theme-options.php:3981 msgid "Send Theme Version to Fuukei" msgstr "发送主题版本到 Fuukei 官方" -#: options/theme-options.php:3928 +#: options/theme-options.php:3982 msgid "" "The theme will only send time and version information to Fuukei officials " "and the data will be cleaned regularly and used only to count version " @@ -4016,11 +4069,11 @@ msgstr "" "主题只会向 Fuukei 官方发送时间和版本信息,数据将定期清理并仅用于统计版本更" "新。" -#: options/theme-options.php:3934 +#: options/theme-options.php:3988 msgid "Reference Information" msgstr "引用信息" -#: options/theme-options.php:3939 +#: options/theme-options.php:3993 msgid "" "

        Fluent Design Icon Referenced by Paradox Fluent Icon Pack

        \n" @@ -4035,11 +4088,11 @@ msgstr "" "apk/com.muh2.icon\">沐氢图标包

        \n" "

        白猫样式Logo参考原主题作者白猫,由 Hyacm 提供方案并引用

        " -#: options/theme-options.php:3946 +#: options/theme-options.php:4000 msgid "Dependency Information" msgstr "依赖信息" -#: options/theme-options.php:3951 +#: options/theme-options.php:4005 msgid "" "

        Options Framework Relies on the Codestar Open Source Codestar Framework Project

        \n" @@ -4057,7 +4110,7 @@ msgstr "" "

        ChatGPT 相关能力依赖于 HaoZi-Team 开源的 ChatGPT PHP 项目

        " -#: options/theme-options.php:3958 +#: options/theme-options.php:4012 msgid "" "\"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 delta 18754 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 eEL!yc?PcqT!oHhere" "此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:587 +#: options/theme-options.php:586 msgid "Widgets Panel" msgstr "小部件面板" -#: options/theme-options.php:593 +#: options/theme-options.php:592 msgid "Widgets Panel Button Radius" msgstr "小部件面板按鈕圓角" -#: options/theme-options.php:594 options/theme-options.php:604 +#: options/theme-options.php:593 options/theme-options.php:603 msgid "Slide to adjust, the recommended value is 10" msgstr "滑動滑塊,推薦數值為10" -#: options/theme-options.php:603 +#: options/theme-options.php:602 msgid "Widgets Panel Widget Radius" msgstr "小部件面板部件圓角" -#: options/theme-options.php:613 +#: options/theme-options.php:612 msgid "Widgets Panel Font" msgstr "小部件面板字體" -#: options/theme-options.php:621 +#: options/theme-options.php:620 msgid "Widgets Panel WP Widget Area" msgstr "小部件面板 WP 小工具區域" -#: options/theme-options.php:622 +#: options/theme-options.php:621 msgid "When turned on, the WP Widget Area will be displayed in Widgets Panel" msgstr "開啟之後WP小工具區域將顯示在小部件面板中" -#: options/theme-options.php:629 +#: options/theme-options.php:628 msgid "Widgets Panel Shuoshuo" msgstr "小部件面板说说" -#: options/theme-options.php:630 +#: options/theme-options.php:629 msgid "" "When turned on, the Latest Shuoshuo text will be displayed in Widgets Panel" msgstr "開啟之後最新说说文本將顯示在小部件面板" -#: options/theme-options.php:637 +#: options/theme-options.php:636 msgid "Widgets Panel Day&Night Switching" msgstr "小部件面板晝夜切換" -#: options/theme-options.php:638 +#: options/theme-options.php:637 msgid "" "Enabled by default, the Day&Night Switching will be displayed in Widgets " "Panel" msgstr "默認開啟,晝夜切換將顯示在小部件面板中" -#: options/theme-options.php:645 +#: options/theme-options.php:644 msgid "Widgets Panel Font Switching" msgstr "小部件面板字體切換" -#: options/theme-options.php:646 +#: options/theme-options.php:645 msgid "" "Enabled by default, the Font Switching will be displayed in Widgets Panel" msgstr "默認開啟,字體切換將顯示在小部件面板中" -#: options/theme-options.php:652 +#: options/theme-options.php:651 msgid "Frontend Background" msgstr "前台背景" -#: options/theme-options.php:663 +#: options/theme-options.php:662 msgid "Frontend Background Scaling Method" msgstr "前台背景縮放方式" -#: options/theme-options.php:664 +#: options/theme-options.php:663 msgid "" "You can choose two ways to scale the frontend background, the default is " "auto-scaling" msgstr "你可以選擇兩種方式縮放前台背景,默認自動縮放" -#: options/theme-options.php:671 +#: options/theme-options.php:670 msgid "Background Transparency Blur" msgstr "前台背景模糊" -#: options/theme-options.php:672 +#: options/theme-options.php:671 msgid "After opening Background Transparency Blur" msgstr "開啟之後前台背景模糊" -#: options/theme-options.php:679 +#: options/theme-options.php:678 msgid "Widgets Panel Background Switching(Frontend Background)" msgstr "小部件面板背景切換(前台背景)" -#: options/theme-options.php:688 options/theme-options.php:704 -#: options/theme-options.php:720 options/theme-options.php:736 -#: options/theme-options.php:752 +#: options/theme-options.php:687 options/theme-options.php:703 +#: options/theme-options.php:719 options/theme-options.php:735 +#: options/theme-options.php:751 msgid "Image" msgstr "圖像" -#: options/theme-options.php:693 +#: options/theme-options.php:692 msgid "Heart Shaped" msgstr "心形形狀" -#: options/theme-options.php:699 options/theme-options.php:715 -#: options/theme-options.php:731 options/theme-options.php:747 +#: options/theme-options.php:698 options/theme-options.php:714 +#: options/theme-options.php:730 options/theme-options.php:746 msgid "Switch" msgstr "開關" -#: options/theme-options.php:709 +#: options/theme-options.php:708 msgid "Star Shaped" msgstr "星形形狀" -#: options/theme-options.php:725 +#: options/theme-options.php:724 msgid "Square Shaped" msgstr "方形形狀" -#: options/theme-options.php:741 +#: options/theme-options.php:740 msgid "Lemon Shaped" msgstr "檸檬形形狀" -#: options/theme-options.php:772 +#: options/theme-options.php:771 msgid "Background Transparency in the Frontend" msgstr "前台背景透明度" -#: options/theme-options.php:773 +#: options/theme-options.php:772 msgid "Slide to adjust, the recommended sliding value range is 0.6-0.8" msgstr "滑動滑塊,推薦數值範圍為0.6-0.8" -#: options/theme-options.php:782 +#: options/theme-options.php:781 msgid "Frontend Font" msgstr "前台字體" -#: options/theme-options.php:788 +#: options/theme-options.php:787 msgid "Global Default Font/Widgets Panel Font Switching A" msgstr "默認字體/小部件面板字體切換A" -#: options/theme-options.php:795 +#: options/theme-options.php:794 msgid "Widgets Panel Font Switching B" msgstr "小部件面板字體切換B" -#: options/theme-options.php:805 +#: options/theme-options.php:804 msgid "Footer Options" msgstr "頁尾設定" -#: options/theme-options.php:812 +#: options/theme-options.php:811 msgid "" "You can click here to learn how to set the " @@ -1310,48 +1310,48 @@ msgstr "" "您可以按下 此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:818 +#: options/theme-options.php:817 msgid "Footer Online Music Player" msgstr "頁尾線上音樂播放器" -#: options/theme-options.php:819 +#: options/theme-options.php:818 msgid "" "A button will appear at the bottom left corner of the footer after turning " "on, click it and the footer online player will be displayed" msgstr "開啟之後頁尾左下角將出現按鈕,點擊按鈕後頁尾線上播放器將顯示" -#: options/theme-options.php:822 +#: options/theme-options.php:821 msgid "Netease Cloud Music" msgstr "網易云音樂" -#: options/theme-options.php:823 +#: options/theme-options.php:822 msgid "Kugou Music(may not be available)" msgstr "酷狗音樂(可能無法使用)" -#: options/theme-options.php:824 +#: options/theme-options.php:823 msgid "Baidu Music(not available on servers overseas)" msgstr "千千音樂(海外伺服器無法使用)" -#: options/theme-options.php:825 +#: options/theme-options.php:824 msgid "QQ Music(may not be available)" msgstr "QQ音樂(可能無法使用)" -#: options/theme-options.php:833 +#: options/theme-options.php:832 msgid "Footer Online Music Player Proxy" msgstr "頁尾線上音樂播放器代理" -#: options/theme-options.php:835 +#: options/theme-options.php:834 msgid "" "Ex. http://127.0.0.1:8080. Reference: https://curl.se/libcurl/c/" "CURLOPT_PROXY.html" msgstr "" "例:http://127.0.0.1:8080 參考:https://curl.se/libcurl/c/CURLOPT_PROXY.html" -#: options/theme-options.php:842 +#: options/theme-options.php:841 msgid "Footer Online Music Player Songlist ID" msgstr "頁尾線上播放器歌單ID" -#: options/theme-options.php:844 +#: options/theme-options.php:843 msgid "" "Fill in the song ID, e.g. https://music.163.com/#/playlist?id=5380675133 " "SongID:5380675133" @@ -1359,112 +1359,112 @@ msgstr "" "填寫歌單ID,例如:https://music.163.com/#/playlist?id=5380675133的歌單ID是" "5380675133" -#: options/theme-options.php:851 +#: options/theme-options.php:850 msgid "Footer Online Music Player Mode" msgstr "尾頁線上音樂播放器模式" -#: options/theme-options.php:853 +#: options/theme-options.php:852 msgid "Select music player mode" msgstr "設定音樂播放器模式" -#: options/theme-options.php:855 +#: options/theme-options.php:854 msgid "List" msgstr "列表播放" -#: options/theme-options.php:856 +#: options/theme-options.php:855 msgid "Random" msgstr "隨機播放" -#: options/theme-options.php:864 +#: options/theme-options.php:863 msgid "Footer Online Music Player Preload" msgstr "尾頁線上音樂播放器預載入" -#: options/theme-options.php:866 +#: options/theme-options.php:865 msgid "Whether to preload songs" msgstr "選擇是否預載入歌曲" -#: options/theme-options.php:869 +#: options/theme-options.php:868 msgid "Preload Metadata" msgstr "預載入元資料" -#: options/theme-options.php:878 +#: options/theme-options.php:877 msgid "Default Volume of Footer Online Music Player" msgstr "頁尾線上播放器默認音量" -#: options/theme-options.php:880 +#: options/theme-options.php:879 msgid "Slide to adjust, the recommended sliding value range is 0.4-0.6" msgstr "滑動滑塊,推薦數值範圍為0.4-0.6" -#: options/theme-options.php:889 +#: options/theme-options.php:888 msgid "Netease Cloud Music Cookies" msgstr "網易云音樂Cookies" -#: options/theme-options.php:891 +#: options/theme-options.php:890 msgid "" "If you want to play VIP music on Netease Cloud Music Platform, please fill " "in your account cookies in this option." msgstr "如果你想播放網易云音樂會員專享音樂,請在此選項填入你的帳號Cookies。" -#: options/theme-options.php:897 +#: options/theme-options.php:896 msgid "Footer Sakura Icon" msgstr "頁尾櫻花圖示" -#: options/theme-options.php:898 +#: options/theme-options.php:897 msgid "Enabled by default, sakura icon will appear on the footer" msgstr "默認啟用,櫻花圖示將顯示在頁尾上" -#: options/theme-options.php:905 +#: options/theme-options.php:904 msgid "Footer Info" msgstr "頁尾資訊" -#: options/theme-options.php:906 +#: options/theme-options.php:905 msgid "Footer description text, supports HTML code" msgstr "頁尾說明文字,支持HTML代碼" -#: options/theme-options.php:913 +#: options/theme-options.php:912 msgid "Footer Text Font" msgstr "頁尾文字字體" -#: options/theme-options.php:921 +#: options/theme-options.php:920 msgid "Footer Load Occupancy Query" msgstr "頁尾負載佔用查詢" -#: options/theme-options.php:922 +#: options/theme-options.php:921 msgid "" "Load occupancy information will appear at the end of the page after turning " "it on. Not recommended in production environment." msgstr "開啟佔用資訊之後,該資訊將顯示在頁面末尾。不建議在生產環境中使用。" -#: options/theme-options.php:929 +#: options/theme-options.php:928 msgid "Footer Upyun League Logo" msgstr "頁尾Upyun League Logo" -#: options/theme-options.php:930 +#: options/theme-options.php:929 msgid "Upyun Logo will appear at the end of the page after turning it on" msgstr "開啟之後Upyun Logo將出現在頁面末尾" -#: options/theme-options.php:938 +#: options/theme-options.php:937 msgid "Footer Addition" msgstr "尾頁附加程式碼" -#: options/theme-options.php:939 +#: options/theme-options.php:938 msgid "" "Add HTML code at the end of the page. Useful for adding customize JavaScript." msgstr "在尾頁添加HTML程式碼。可用於添加 JavaScript " -#: options/theme-options.php:944 +#: options/theme-options.php:943 msgid "Hitokoto" msgstr "一言" -#: options/theme-options.php:950 +#: options/theme-options.php:949 msgid "Footer Hitokoto" msgstr "尾頁一言" -#: options/theme-options.php:951 +#: options/theme-options.php:950 msgid "Hitokoto will appear at the end of the page after turning it on" msgstr "開啟之後頁尾將出現一言" -#: options/theme-options.php:958 +#: options/theme-options.php:957 msgid "" "

        Hitokoto API Setup Instructions

        Fill in as the example: " "[\"https://api.nmxc.ltd/yiyan/\", \"https://v1.hitokoto.cn/\"], where " @@ -1485,19 +1485,19 @@ msgstr "" "

        Maho API:官方API的反代鏡像。https://api.nmxc.ltd/yiyan/

        " -#: options/theme-options.php:967 +#: options/theme-options.php:966 msgid "Hitokoto API address" msgstr "一言API地址" -#: options/theme-options.php:969 +#: options/theme-options.php:968 msgid "Fill in the address in JavaScript array format" msgstr "填寫地址,格式為JavaScript陣列" -#: options/theme-options.php:978 +#: options/theme-options.php:977 msgid "Cursor Options" msgstr "滑鼠光標設定" -#: options/theme-options.php:985 +#: options/theme-options.php:984 msgid "" "You can click here to learn how to set the " @@ -1506,51 +1506,51 @@ msgstr "" "您可以按下 此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:991 +#: options/theme-options.php:990 msgid "Standard Cursor Style" msgstr "標準光標樣式" -#: options/theme-options.php:992 +#: options/theme-options.php:991 msgid "Apply to global, fill in \".cur\" mouse file link" msgstr "應用於全局,填寫Cur滑鼠檔案連結" -#: options/theme-options.php:999 +#: options/theme-options.php:998 msgid "Selected Cursor Style" msgstr "選定光標樣式" -#: options/theme-options.php:1000 +#: options/theme-options.php:999 msgid "Apply to multiple styles, fill in \".cur\" file link" msgstr "應用於多種樣式,填寫Cur滑鼠檔案連結" -#: options/theme-options.php:1007 +#: options/theme-options.php:1006 msgid "Selected Control Unit Cursor Style" msgstr "選中控件單元滑鼠樣式" -#: options/theme-options.php:1008 +#: options/theme-options.php:1007 msgid "Apply to selected control unit, fill in \".cur\" file link" msgstr "應用於選中某個控件單元,填寫Cur滑鼠檔案連結" -#: options/theme-options.php:1015 +#: options/theme-options.php:1014 msgid "Selected Text Cursor Style" msgstr "選中文本光標樣式" -#: options/theme-options.php:1016 +#: options/theme-options.php:1015 msgid "Apply to selected text, fill in \".cur\" file link" msgstr "應用於選中文本,填寫Cur滑鼠檔案連結" -#: options/theme-options.php:1023 +#: options/theme-options.php:1022 msgid "Work Status Cursor Style" msgstr "工作狀態滑鼠樣式" -#: options/theme-options.php:1024 +#: options/theme-options.php:1023 msgid "Apply to load control unit, fill in \".cur\" file link" msgstr "應用於載入控件單元,填寫Cur滑鼠檔案連結" -#: options/theme-options.php:1033 +#: options/theme-options.php:1032 msgid "Additional Options" msgstr "額外設定" -#: options/theme-options.php:1040 +#: options/theme-options.php:1039 msgid "" "You can click here to learn how to set the " @@ -1559,72 +1559,72 @@ msgstr "" "您可以按下 此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:1045 +#: options/theme-options.php:1044 msgid "Effects&Animations" msgstr "特效及動畫" -#: options/theme-options.php:1051 +#: options/theme-options.php:1050 msgid "Preload Animation" msgstr "預載入動畫" -#: options/theme-options.php:1052 +#: options/theme-options.php:1051 msgid "" "Preload animation before new pages load; To enable this option, ensure your " "page resources can load properly." msgstr "開啟之後新頁面載入前會有預載入動畫,此選項需確保你的頁面資源正常載入。" -#: options/theme-options.php:1059 +#: options/theme-options.php:1058 msgid "Preload Animation Color A" msgstr "預載入動畫顏色A" -#: options/theme-options.php:1068 +#: options/theme-options.php:1067 msgid "Preload Animation Color B" msgstr "預載入動畫顏色B" -#: options/theme-options.php:1076 +#: options/theme-options.php:1075 msgid "Preload Animation Blur Transition Effect" msgstr "預載入模糊過度效果" -#: options/theme-options.php:1078 +#: options/theme-options.php:1077 msgid "Blur transition duration in milliseconds ms, off when set to 0." msgstr "模糊過渡持續時間,單位毫秒ms,為0時關閉" -#: options/theme-options.php:1088 +#: options/theme-options.php:1087 msgid "Sakura Falling Effects" msgstr "櫻花飄落特效" -#: options/theme-options.php:1091 +#: options/theme-options.php:1090 msgid "Native Quantity" msgstr "原生數量" -#: options/theme-options.php:1092 +#: options/theme-options.php:1091 msgid "Quarter Quantity" msgstr "四分之一數量" -#: options/theme-options.php:1093 +#: options/theme-options.php:1092 msgid "Half Quantity" msgstr "二分之一數量" -#: options/theme-options.php:1094 +#: options/theme-options.php:1093 msgid "Less Quantity" msgstr "較少數量" -#: options/theme-options.php:1102 +#: options/theme-options.php:1101 msgid "Particles Effects" msgstr "粒子效應" -#: options/theme-options.php:1104 +#: options/theme-options.php:1103 msgid "" "Particles effects will appear in the global background. Please open the " "Cover-and-Frontend-Background-Integration Options to get the best experience" msgstr "" "粒子效應將出現在全局背景下。請打開封面和正面背景集成選項,以獲得最佳體驗" -#: options/theme-options.php:1112 +#: options/theme-options.php:1111 msgid "Particles JSON" msgstr "粒子效應 JSON" -#: options/theme-options.php:1114 +#: options/theme-options.php:1113 msgid "" "You can go to the Project Address to generate your unique Particles Effects" @@ -1632,160 +1632,160 @@ msgstr "" "您可以前往 項目位址 " "以產生您獨特的粒子效應" -#: options/theme-options.php:1231 +#: options/theme-options.php:1230 msgid "Note Touch Effects" msgstr "音符觸動特效" -#: options/theme-options.php:1232 +#: options/theme-options.php:1231 msgid "" "After turning on, there will be a note sound alert when the back to top " "button and Mashiro style logo touch" msgstr "開啟之後返回頂部按鈕和白貓樣式Logo觸碰時將有音符聲音提示" -#: options/theme-options.php:1238 +#: options/theme-options.php:1237 msgid "Feature" msgstr "功能" -#: options/theme-options.php:1244 +#: options/theme-options.php:1243 msgid "PJAX Partial Refresh" msgstr "PJAX局部重新載入" -#: options/theme-options.php:1245 +#: options/theme-options.php:1244 msgid "Enabled by default, clicking to a new page will not require reloading" msgstr "默認開啟,點擊新內容將不需要重新載入" -#: options/theme-options.php:1252 +#: options/theme-options.php:1251 msgid "NProgress Loading Progress Bar" msgstr "NProgress加载进度条" -#: options/theme-options.php:1253 +#: options/theme-options.php:1252 msgid "" "Enabled by default, when loading page there will be a progress bar alert" msgstr "默认開啟,加載頁面將有進度條提示" -#: options/theme-options.php:1260 +#: options/theme-options.php:1259 msgid "Global Smooth Scroll" msgstr "全局平滑滾動" -#: options/theme-options.php:1261 +#: options/theme-options.php:1260 msgid "Enabled by default, page scrolling will be smoother" msgstr "默認開啟,頁面滾動將更加平滑" -#: options/theme-options.php:1268 +#: options/theme-options.php:1267 msgid "Captcha Selection" msgstr "驗證碼選項" -#: options/theme-options.php:1271 +#: options/theme-options.php:1270 msgid "Theme Built in Captcha" msgstr "主題內建驗證碼" -#: options/theme-options.php:1272 +#: options/theme-options.php:1271 msgid "Vaptcha" msgstr "" -#: options/theme-options.php:1280 +#: options/theme-options.php:1279 msgid "Vaptcha VID" msgstr "" -#: options/theme-options.php:1282 +#: options/theme-options.php:1281 msgid "Fill in your Vaptcha VID" msgstr "填寫你的Vaptcha VID" -#: options/theme-options.php:1288 +#: options/theme-options.php:1287 msgid "Vaptcha KEY" msgstr "" -#: options/theme-options.php:1290 +#: options/theme-options.php:1289 msgid "Fill in your Vaptcha KEY" msgstr "填寫你的Vaptcha KEY" -#: options/theme-options.php:1296 +#: options/theme-options.php:1295 msgid "Vaptcha Scene" msgstr "Vaptcha場景" -#: options/theme-options.php:1312 +#: options/theme-options.php:1311 msgid "Pagination Mode" msgstr "分頁模式" -#: options/theme-options.php:1314 +#: options/theme-options.php:1313 msgid "Ajax Load" msgstr "Ajax載入" -#: options/theme-options.php:1315 +#: options/theme-options.php:1314 msgid "Page Up/Down" msgstr "上下頁" -#: options/theme-options.php:1323 +#: options/theme-options.php:1322 msgid "Next Page Auto Load" msgstr "下一頁自動載入" -#: options/theme-options.php:1326 +#: options/theme-options.php:1325 msgid "do not autoload" msgstr "不自動載入" -#: options/theme-options.php:1327 +#: options/theme-options.php:1326 msgid "0 Sec" msgstr "0秒" -#: options/theme-options.php:1328 +#: options/theme-options.php:1327 msgid "1 Sec" msgstr "1秒" -#: options/theme-options.php:1329 +#: options/theme-options.php:1328 msgid "2 Sec" msgstr "2秒" -#: options/theme-options.php:1330 +#: options/theme-options.php:1329 msgid "3 Sec" msgstr "3秒" -#: options/theme-options.php:1331 +#: options/theme-options.php:1330 msgid "4 Sec" msgstr "4秒" -#: options/theme-options.php:1332 +#: options/theme-options.php:1331 msgid "5 Sec" msgstr "5秒" -#: options/theme-options.php:1333 +#: options/theme-options.php:1332 msgid "6 Sec" msgstr "6秒" -#: options/theme-options.php:1334 +#: options/theme-options.php:1333 msgid "7 Sec" msgstr "7秒" -#: options/theme-options.php:1335 +#: options/theme-options.php:1334 msgid "8 Sec" msgstr "8秒" -#: options/theme-options.php:1336 +#: options/theme-options.php:1335 msgid "9 Sec" msgstr "9秒" -#: options/theme-options.php:1337 +#: options/theme-options.php:1336 msgid "10 Sec" msgstr "10秒" -#: options/theme-options.php:1345 +#: options/theme-options.php:1344 msgid "Placeholder SVG when loading the next page" msgstr "載入下一頁佔位SVG" -#: options/theme-options.php:1346 +#: options/theme-options.php:1345 msgid "" "Fill in the address, this is the SVG that will be displayed as a placeholder " "when the next page is loading" msgstr "填寫地址,此為載入下一頁時佔位顯示的SVG" -#: options/theme-options.php:1354 +#: options/theme-options.php:1353 msgid "HomePage Options" msgstr "主頁設定" -#: options/theme-options.php:1360 +#: options/theme-options.php:1359 msgid "Cover Options" msgstr "封面設定" -#: options/theme-options.php:1367 +#: options/theme-options.php:1366 msgid "" "You can click here to learn how to set the " @@ -1794,165 +1794,165 @@ msgstr "" "您可以按下 此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:1373 +#: options/theme-options.php:1372 msgid "Cover Switch" msgstr "封面開關" -#: options/theme-options.php:1374 +#: options/theme-options.php:1373 msgid "On by default, if off, all options below will be disabled" msgstr "默認開啟,如果關閉,則下文所有選項均將失效" -#: options/theme-options.php:1381 +#: options/theme-options.php:1380 msgid "Cover Full Screen" msgstr "封面全屏顯示" -#: options/theme-options.php:1390 +#: options/theme-options.php:1389 msgid "Cover Arc Occlusion (Below)" msgstr "封面弧形遮擋(下方)" -#: options/theme-options.php:1391 +#: options/theme-options.php:1390 msgid "An arc occlusion will appear below the cover when turned on" msgstr "開啟之後封面下方將出現弧形遮擋" -#: options/theme-options.php:1402 +#: options/theme-options.php:1401 msgid "Cover Radius" msgstr "封面圓角" -#: options/theme-options.php:1403 +#: options/theme-options.php:1402 msgid "Slide to adjust, the recommended value range is 15-20" msgstr "滑動滑塊,推薦數值範圍為15-20" -#: options/theme-options.php:1413 +#: options/theme-options.php:1412 msgid "Cover Animation" msgstr "封面動畫" -#: options/theme-options.php:1414 +#: options/theme-options.php:1413 msgid "On by default, if off, the cover will be displayed directly" msgstr "默認開啟,如果關閉,則封面將直接顯示" -#: options/theme-options.php:1422 +#: options/theme-options.php:1421 msgid "Cover Animation Time" msgstr "封面動畫時間" -#: options/theme-options.php:1437 +#: options/theme-options.php:1436 msgid "Cover Info Bar" msgstr "封面資訊欄" -#: options/theme-options.php:1438 +#: options/theme-options.php:1437 msgid "" "Enabled by default, show avatar, Mashiro effects text, signature bar, " "shuoshuo bar, social area" msgstr "默認開啟,顯示頭貼、白貓特效文字、簽名欄、说说欄、社交區域" -#: options/theme-options.php:1446 +#: options/theme-options.php:1445 msgid "Cover Info Bar Style" msgstr "封面資訊欄樣式" -#: options/theme-options.php:1461 +#: options/theme-options.php:1460 msgid "Cover Info Bar Background Color" msgstr "封面資訊欄背景顏色" -#: options/theme-options.php:1473 +#: options/theme-options.php:1472 msgid "Cover Info Bar Avatar Radius" msgstr "封面資訊欄頭貼圓角" -#: options/theme-options.php:1474 +#: options/theme-options.php:1473 msgid "Slide to adjust, the recommended value is 100" msgstr "滑動滑塊,推薦數值為100" -#: options/theme-options.php:1486 +#: options/theme-options.php:1485 msgid "Cover Info Bar Rounded" msgstr "封面資訊欄圓角" -#: options/theme-options.php:1487 +#: options/theme-options.php:1486 msgid "Slide to adjust, the recommended value range 10-20" msgstr "滑動滑塊,推薦數值範圍為10-20" -#: options/theme-options.php:1500 +#: options/theme-options.php:1499 msgid "Cover Signature Field Text" msgstr "封面簽名欄文本" -#: options/theme-options.php:1501 options/theme-options.php:2762 +#: options/theme-options.php:1500 options/theme-options.php:2765 msgid "A self-descriptive quote" msgstr "一段自我描述的話" -#: options/theme-options.php:1512 +#: options/theme-options.php:1511 msgid "Cover Signature Field Text Font" msgstr "封面簽名欄文本字體" -#: options/theme-options.php:1524 +#: options/theme-options.php:1523 msgid "Cover Signature Field Text Font Size" msgstr "封面簽名欄文本字體大小" -#: options/theme-options.php:1539 +#: options/theme-options.php:1538 msgid "Cover Signature Bar Typing Effects" msgstr "封面簽名欄打字特效" -#: options/theme-options.php:1540 +#: options/theme-options.php:1539 msgid "" "When turned on, the signature bar text will have an additional paragraph of " "text and will be rendered with typing effects" msgstr "開啟之後簽名欄文本將增加一段文本並呈現打字特效" -#: options/theme-options.php:1551 +#: options/theme-options.php:1550 msgid "Cover Signature Field Typing Effects Double Quotes" msgstr "封面簽名欄打字特效雙引號" -#: options/theme-options.php:1557 +#: options/theme-options.php:1556 msgid "Typing effects will be appended with double quotes when turned on" msgstr "開啟之後打字特效將追加雙引號" -#: options/theme-options.php:1564 +#: options/theme-options.php:1563 msgid "Cover Signature Field Typing Effects Placeholder" msgstr "封面簽名欄打字特效占位語句" -#: options/theme-options.php:1577 +#: options/theme-options.php:1576 msgid "Typed.js initial option" msgstr "Typed.js初始化選項" -#: options/theme-options.php:1589 +#: options/theme-options.php:1588 msgid "Cover Random Image Options" msgstr "封面隨機圖像設定" -#: options/theme-options.php:1591 +#: options/theme-options.php:1590 msgid "External API" msgstr "外部API" -#: options/theme-options.php:1592 +#: options/theme-options.php:1591 msgid "Webp optimized" msgstr "Webp優化" -#: options/theme-options.php:1593 +#: options/theme-options.php:1592 msgid "Local" msgstr "本地隨機圖像" -#: options/theme-options.php:1602 +#: options/theme-options.php:1601 msgid "Cover Random Image Multi-terminal Separation" msgstr "封面隨機圖像多終端分離" -#: options/theme-options.php:1603 +#: options/theme-options.php:1602 msgid "" "Enabled by default, desktop and mobile devices will use separate random " "image addresses" msgstr "默認開啟,桌面端和行動端會分別使用不同的隨機圖像地址" -#: options/theme-options.php:1611 +#: options/theme-options.php:1610 msgid "Webp Optimization/External API Desktop Side Random Graphics Address" msgstr "Webp優化/外部API桌面端隨機圖像地址" -#: options/theme-options.php:1612 options/theme-options.php:1627 +#: options/theme-options.php:1611 options/theme-options.php:1630 msgid "Fill in an URL" msgstr "填寫URL" -#: options/theme-options.php:1622 +#: options/theme-options.php:1624 msgid "External API Mobile Devices Random Image Address" msgstr "外部API行動端隨機圖像地址" -#: options/theme-options.php:1636 +#: options/theme-options.php:1639 msgid "Cover Random Background Image Cache" msgstr "封面隨機背景圖像快取" -#: options/theme-options.php:1637 +#: options/theme-options.php:1640 msgid "" "Enabled by default, this feature will cache a cover image locally, which can " "improve the loading speed of the first cover after entering the homepage. " @@ -1961,111 +1961,111 @@ msgstr "" "默認開啟,此功能會在本地快取一份封面圖像,可提升進入主頁後第一張封面的載入速" "度。注意:此功能需要封面API能接受跨來源資源共享。" -#: options/theme-options.php:1645 +#: options/theme-options.php:1648 msgid "Cover and Frontend Background Integration" msgstr "封面與前台背景一體化" -#: options/theme-options.php:1646 +#: options/theme-options.php:1649 msgid "" "When enabled, the background of the cover will be set to transparent, while " "the frontend background will use the cover's random image API" msgstr "開啟之後,封面的背景將設定為透明,同時前台背景將使用封面的隨機圖像API" -#: options/theme-options.php:1654 +#: options/theme-options.php:1657 msgid "Cover Random Images Filter" msgstr "封面隨機圖像濾鏡" -#: options/theme-options.php:1656 +#: options/theme-options.php:1659 msgid "No filter" msgstr "無濾鏡" -#: options/theme-options.php:1657 +#: options/theme-options.php:1660 msgid "Light filter" msgstr "淺色濾鏡" -#: options/theme-options.php:1658 +#: options/theme-options.php:1661 msgid "Dimmed filter" msgstr "暗淡濾鏡" -#: options/theme-options.php:1659 +#: options/theme-options.php:1662 msgid "Grid filter" msgstr "網格濾鏡" -#: options/theme-options.php:1660 +#: options/theme-options.php:1663 msgid "Dot filter" msgstr "點狀濾鏡" -#: options/theme-options.php:1669 +#: options/theme-options.php:1672 msgid "Cover Wave Effects" msgstr "封面波浪特效" -#: options/theme-options.php:1670 +#: options/theme-options.php:1673 msgid "" "Wave effect will appear at the bottom of the cover of the home page after " "turning on, and it will be forced off in the dark mode" msgstr "開啟之後首頁封面底部將出現波浪特效,深色模式下將強制關閉" -#: options/theme-options.php:1678 +#: options/theme-options.php:1681 msgid "Cover Dropdown Arrow" msgstr "封面下拉箭頭" -#: options/theme-options.php:1679 +#: options/theme-options.php:1682 msgid "Enabled by default, show a dropdown arrow at bottom of home cover" msgstr "默認開啟,首頁封面底部顯示下拉箭頭" -#: options/theme-options.php:1687 +#: options/theme-options.php:1690 msgid "Cover Dropdown Arrow Display on Mobile Devices" msgstr "封面下拉箭頭行動端顯示" -#: options/theme-options.php:1692 +#: options/theme-options.php:1695 msgid "" "Drop down arrow will appear at the bottom of the mobile devices' home cover " "after turning it on" msgstr "開啟之後行動端首頁封面底部將出現下拉箭頭" -#: options/theme-options.php:1699 +#: options/theme-options.php:1702 msgid "Cover Dropdown Arrow Color" msgstr "封面下拉箭頭顏色" -#: options/theme-options.php:1711 +#: options/theme-options.php:1714 msgid "Cover Dropdown Arrow Color (Dark Mode)" msgstr "封面下拉箭頭顏色(深色模式)" -#: options/theme-options.php:1716 +#: options/theme-options.php:1719 msgid "Customize the colors, dark colors are recommended" msgstr "自定義顏色,建議使用深色系顏色" -#: options/theme-options.php:1723 +#: options/theme-options.php:1726 msgid "Cover Video" msgstr "封面影片" -#: options/theme-options.php:1724 +#: options/theme-options.php:1727 msgid "Use a video instead of the images as the cover" msgstr "開啟之後將替代隨機圖像作為封面顯示" -#: options/theme-options.php:1732 +#: options/theme-options.php:1735 msgid "Cover Video Loop" msgstr "封面影片循環" -#: options/theme-options.php:1737 +#: options/theme-options.php:1740 msgid "Video will loop automatically when enabled." msgstr "開啟之後影片將自動循環" -#: options/theme-options.php:1744 +#: options/theme-options.php:1747 msgid "Cover Video Auto Resume" msgstr "封面影片自動恢復" -#: options/theme-options.php:1749 +#: options/theme-options.php:1752 msgid "" "Cover Video will resume automatically when coming back to homepage while " "Pjax enabled." msgstr "開啟之後返回首頁時視頻將恢復播放,需要開啟Pjax功能" -#: options/theme-options.php:1756 +#: options/theme-options.php:1759 msgid "Cover Video URL Base Path" msgstr "封面影片URL連結路徑" -#: options/theme-options.php:1762 +#: options/theme-options.php:1765 msgid "" "Fill in the base path your video located at. For example: https://localhost. " "Your site's URL is used as default. Please pay attention to the protocol " @@ -2074,22 +2074,22 @@ msgstr "" "填寫影片所在的根路徑。例如:https://localhost. 你站點的URL將作為默認URL。請注" "意URL的協議名稱。" -#: options/theme-options.php:1768 +#: options/theme-options.php:1771 msgid "Cover Video File Name" msgstr "封面影片檔案名稱" -#: options/theme-options.php:1773 +#: options/theme-options.php:1776 msgid "" "For example: abc.mp4. Multiple videos should be separated by English commas " "like \"abc.mp4,efg.mp4,\" Random play is on by default." msgstr "" "例如:abc.mp4,多個影片請用英文逗號隔開,如:abc.mp4,efg.mp4。默認隨機播放。" -#: options/theme-options.php:1781 +#: options/theme-options.php:1784 msgid "Cover Social Area Options" msgstr "封面社交區域設定" -#: options/theme-options.php:1788 +#: options/theme-options.php:1791 msgid "" "You can click here" "此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:1793 +#: options/theme-options.php:1796 msgid "Related Options" msgstr "相关設定" -#: options/theme-options.php:1799 +#: options/theme-options.php:1802 msgid "Cover Social Area" msgstr "封面社交區域" -#: options/theme-options.php:1800 +#: options/theme-options.php:1803 msgid "" "Enabled by default, show cover random image toggle button and social network " "icons" msgstr "默認開啟,顯示封面隨機圖像切換按鈕和社交網絡圖標" -#: options/theme-options.php:1807 +#: options/theme-options.php:1810 msgid "Social Icon" msgstr "社交網絡圖標" -#: options/theme-options.php:1808 +#: options/theme-options.php:1811 msgid "" "Select your favorite icon pack. Icon pack references are detailed in the " "\"About Theme\" section" msgstr "選擇你喜歡的圖標包。圖標包引用資訊詳見關於主題" -#: options/theme-options.php:1830 +#: options/theme-options.php:1833 msgid "Cover Social Area Rounded Corners" msgstr "封面社交區域圓角" -#: options/theme-options.php:1832 +#: options/theme-options.php:1835 msgid "Slide to adjust, the recommended value range is 10-20" msgstr "滑動滑塊,推薦數值範圍為10-20" -#: options/theme-options.php:1841 +#: options/theme-options.php:1844 msgid "Switch Button of Random Images" msgstr "封面隨機圖像切換按鈕" -#: options/theme-options.php:1843 +#: options/theme-options.php:1846 msgid "Enabled by default, show cover random image toggle button" msgstr "默認開啟,顯示封面隨機圖切換按鈕" -#: options/theme-options.php:1849 +#: options/theme-options.php:1852 msgid "Social Network" msgstr "社交網絡" -#: options/theme-options.php:1855 +#: options/theme-options.php:1858 msgid "Wechat" msgstr "微信" -#: options/theme-options.php:1864 +#: options/theme-options.php:1867 msgid "QQ" msgstr "QQ" -#: options/theme-options.php:1866 +#: options/theme-options.php:1869 msgid "" "Please note the format of filling out the form, e.g. tencent://message/?" "uin=123456" msgstr "請注意填寫格式,例如:tencent://message/?uin=123456" -#: options/theme-options.php:1872 +#: options/theme-options.php:1875 msgid "Bilibili" msgstr "嗶哩嗶哩" -#: options/theme-options.php:1874 options/theme-options.php:1882 -#: options/theme-options.php:1890 options/theme-options.php:1898 -#: options/theme-options.php:1906 options/theme-options.php:1914 -#: options/theme-options.php:1922 options/theme-options.php:1930 -#: options/theme-options.php:1938 options/theme-options.php:1946 -#: options/theme-options.php:1954 options/theme-options.php:1962 -#: options/theme-options.php:1970 options/theme-options.php:1978 -#: options/theme-options.php:1986 options/theme-options.php:1994 -#: options/theme-options.php:2019 options/theme-options.php:2326 -#: options/theme-options.php:2352 options/theme-options.php:2378 -#: options/theme-options.php:2486 +#: options/theme-options.php:1877 options/theme-options.php:1885 +#: options/theme-options.php:1893 options/theme-options.php:1901 +#: options/theme-options.php:1909 options/theme-options.php:1917 +#: options/theme-options.php:1925 options/theme-options.php:1933 +#: options/theme-options.php:1941 options/theme-options.php:1949 +#: options/theme-options.php:1957 options/theme-options.php:1965 +#: options/theme-options.php:1973 options/theme-options.php:1981 +#: options/theme-options.php:1989 options/theme-options.php:1997 +#: options/theme-options.php:2022 options/theme-options.php:2329 +#: options/theme-options.php:2355 options/theme-options.php:2381 +#: options/theme-options.php:2489 msgid "add URL" msgstr "填寫地址" -#: options/theme-options.php:1880 +#: options/theme-options.php:1883 msgid "NetEase Music" msgstr "網易云音樂" -#: options/theme-options.php:1888 +#: options/theme-options.php:1891 msgid "Weibo" msgstr "新浪微博" -#: options/theme-options.php:1896 +#: options/theme-options.php:1899 msgid "Github" msgstr "Github" -#: options/theme-options.php:1904 +#: options/theme-options.php:1907 msgid "Telegram" msgstr "Telegram" -#: options/theme-options.php:1912 +#: options/theme-options.php:1915 msgid "Steam" msgstr "Steam" -#: options/theme-options.php:1920 +#: options/theme-options.php:1923 msgid "ZhiHu" msgstr "知乎" -#: options/theme-options.php:1928 +#: options/theme-options.php:1931 msgid "QZone" msgstr "QQ空間" -#: options/theme-options.php:1936 +#: options/theme-options.php:1939 msgid "Lofter" msgstr "乐乎" -#: options/theme-options.php:1944 +#: options/theme-options.php:1947 msgid "Youku" msgstr "優酷" -#: options/theme-options.php:1952 +#: options/theme-options.php:1955 msgid "Linkedin" msgstr "領英" -#: options/theme-options.php:1960 +#: options/theme-options.php:1963 msgid "Twitter" msgstr "Twitter" -#: options/theme-options.php:1968 +#: options/theme-options.php:1971 msgid "Facebook" msgstr "Facebook" -#: options/theme-options.php:1976 +#: options/theme-options.php:1979 msgid "CSDN" msgstr "CSDN" -#: options/theme-options.php:1984 +#: options/theme-options.php:1987 msgid "JianShu" msgstr "簡書" -#: options/theme-options.php:1992 +#: options/theme-options.php:1995 msgid "Customized Social Network Ⅰ" msgstr "自定義社交網絡Ⅰ" -#: options/theme-options.php:2000 +#: options/theme-options.php:2003 msgid "Customized Social Network Ⅰ Title" msgstr "自定義社交網絡Ⅰ 標題" -#: options/theme-options.php:2008 +#: options/theme-options.php:2011 msgid "Customized Social Network Ⅰ icon" msgstr "自定義社交網絡Ⅰ 圖標" -#: options/theme-options.php:2017 +#: options/theme-options.php:2020 msgid "Customized Social Network Ⅱ" msgstr "自定義社交網絡Ⅱ" -#: options/theme-options.php:2025 +#: options/theme-options.php:2028 msgid "Customized Social Network Ⅱ Title" msgstr "自定義社交網絡Ⅱ 標題" -#: options/theme-options.php:2033 +#: options/theme-options.php:2036 msgid "Customized Social Network Ⅱ icon" msgstr "自定義社交網絡Ⅱ 圖標" -#: options/theme-options.php:2042 +#: options/theme-options.php:2045 msgid "Email Username" msgstr "電子郵箱用戶名" -#: options/theme-options.php:2044 +#: options/theme-options.php:2047 msgid "" "name@domain.com fo name, the full address can be known only when there is a " "js runtime in the frontend, you can fill in with confidence" @@ -2267,19 +2267,19 @@ msgstr "" "name@domain.com的name部分,前端僅具有 js 運行環境時才能獲取完整地址,可放心填" "寫" -#: options/theme-options.php:2050 +#: options/theme-options.php:2053 msgid "Email Domain" msgstr "電子郵箱域" -#: options/theme-options.php:2052 +#: options/theme-options.php:2055 msgid "name@domain.com fo domain.com" msgstr "name@domain.com的domain.com部分" -#: options/theme-options.php:2060 +#: options/theme-options.php:2063 msgid "Bulletin Board and Area Title Options" msgstr "公告欄和區域標題設定" -#: options/theme-options.php:2067 +#: options/theme-options.php:2070 msgid "" "You can click here" "此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:2072 options/theme-options.php:2078 +#: options/theme-options.php:2075 options/theme-options.php:2081 msgid "Bulletin Board" msgstr "公告欄" -#: options/theme-options.php:2079 +#: options/theme-options.php:2082 msgid "When enabled the bulletin board will be displayed below the front cover" msgstr "開啟之後公告欄將在首頁封面下方顯示" -#: options/theme-options.php:2086 +#: options/theme-options.php:2089 msgid "Bulletin Board Style" msgstr "公告欄樣式" -#: options/theme-options.php:2089 +#: options/theme-options.php:2092 msgid "Picture Background" msgstr "圖像背景" -#: options/theme-options.php:2090 +#: options/theme-options.php:2093 msgid "Color Background" msgstr "純色背景" -#: options/theme-options.php:2098 +#: options/theme-options.php:2101 msgid "Bulletin Board \"Notice\" Icon" msgstr "公告欄“公告”圖標" -#: options/theme-options.php:2100 +#: options/theme-options.php:2103 msgid "" "The \"Notice\" icon will be displayed on the left side of the announcement " "bar" msgstr "“公告”圖標將顯示在公告欄的左側" -#: options/theme-options.php:2107 +#: options/theme-options.php:2110 msgid "Bulletin Board Background" msgstr "公告欄背景" -#: options/theme-options.php:2112 +#: options/theme-options.php:2115 msgid "Best width 820px, best height 67px" msgstr "最佳寬度820px,最佳高度67px" -#: options/theme-options.php:2120 +#: options/theme-options.php:2123 msgid "Bulletin Board Border Color" msgstr "公告欄邊框顏色" -#: options/theme-options.php:2125 +#: options/theme-options.php:2128 msgid "" "Customize the colors, it is recommended to use a light color that " "corresponds with the theme color" msgstr "自定義顏色,建議使用與主題色相同色系且屬於淺色系的顏色" -#: options/theme-options.php:2132 +#: options/theme-options.php:2135 msgid "Bulletin Board Text" msgstr "公告文本" -#: options/theme-options.php:2134 +#: options/theme-options.php:2137 msgid "Fill in the announcement text, the text beyond 142 bytes will be hidden" msgstr "填寫公告文本,文本超出142個字節將會被隱藏" -#: options/theme-options.php:2140 +#: options/theme-options.php:2143 msgid "Bulletin Board Alignment" msgstr "公告板對齊方向" -#: options/theme-options.php:2153 +#: options/theme-options.php:2156 msgid "Bulletin Board Text Color" msgstr "公告板文本顏色" -#: options/theme-options.php:2155 options/theme-options.php:2243 -#: options/theme-options.php:2439 options/theme-options.php:2675 -#: options/theme-options.php:2945 options/theme-options.php:2953 -#: options/theme-options.php:3028 options/theme-options.php:3036 +#: options/theme-options.php:2158 options/theme-options.php:2246 +#: options/theme-options.php:2442 options/theme-options.php:2678 +#: options/theme-options.php:2948 options/theme-options.php:2956 +#: options/theme-options.php:3036 options/theme-options.php:3044 msgid "" "Customize the colors, suggest using a corresponding color with the " "background color" msgstr "自定義顏色,建議根據背景顏色搭配合適的顏色" -#: options/theme-options.php:2161 +#: options/theme-options.php:2164 msgid "Area Title" msgstr "區域標題" -#: options/theme-options.php:2167 +#: options/theme-options.php:2170 msgid "Display Area Icon" msgstr "展示區域圖標" -#: options/theme-options.php:2168 +#: options/theme-options.php:2171 msgid "" "Default is \"fa-solid fa-laptop\", You can check the FontAwesome Website to see the icons " @@ -2379,21 +2379,21 @@ msgstr "" "默認為“fa-solid fa-laptop”,可以前往 FontAwesome網站 查看可以填寫的圖示" -#: options/theme-options.php:2175 +#: options/theme-options.php:2178 msgid "Display Area Title" msgstr "展示區域標題" -#: options/theme-options.php:2176 +#: options/theme-options.php:2179 msgid "" "Default is \"Display\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" msgstr "默認為“Display”,你可以修改為其他,當然不能當廣告用!不允許!!" -#: options/theme-options.php:2183 +#: options/theme-options.php:2186 msgid "Post Area Icon" msgstr "文章區域圖標" -#: options/theme-options.php:2184 +#: options/theme-options.php:2187 msgid "" "Default is \"fa-regular fa-bookmark\", You can check the FontAwesome Website to see the icons " @@ -2402,29 +2402,29 @@ msgstr "" "默認為“fa-regular fa-bookmark”,可以前往 FontAwesome網站 查看可以填寫的圖示" -#: options/theme-options.php:2191 +#: options/theme-options.php:2194 msgid "Post Area Title" msgstr "文章區域標題" -#: options/theme-options.php:2192 +#: options/theme-options.php:2195 msgid "" "Default is \"Article\", you can change it to anything else, but of course it " "CANNOT be used as an ad! Not allowed!!!" msgstr "默認為“文章”,你可以修改為其他,當然不能當廣告用!不允許!!" -#: options/theme-options.php:2199 +#: options/theme-options.php:2202 msgid "Area Title Font" msgstr "區域標題字" -#: options/theme-options.php:2207 +#: options/theme-options.php:2210 msgid "Area Title Alignment" msgstr "區域標題對齊方向" -#: options/theme-options.php:2221 options/theme-options.php:2301 +#: options/theme-options.php:2224 options/theme-options.php:2304 msgid "Display Area Options" msgstr "展示區域設定" -#: options/theme-options.php:2228 +#: options/theme-options.php:2231 msgid "" "You can click here to learn " @@ -2434,77 +2434,77 @@ msgstr "" "#%E5%B1%95%E7%A4%BA%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE\">此處 瞭解如何在" "此頁面上設定選項" -#: options/theme-options.php:2234 +#: options/theme-options.php:2237 msgid "Display Area" msgstr "展示區域" -#: options/theme-options.php:2235 +#: options/theme-options.php:2238 msgid "Enabled by default, display area is above article area" msgstr "默認開啟,展示區域顯示在文章區域上方" -#: options/theme-options.php:2242 +#: options/theme-options.php:2245 msgid "Display Area Matching Color" msgstr "展示區域匹配顏色" -#: options/theme-options.php:2251 +#: options/theme-options.php:2254 msgid "Display Area Style" msgstr "展示區域樣式" -#: options/theme-options.php:2263 +#: options/theme-options.php:2266 msgid "Display Area Compatibility Mode" msgstr "展示區域兼容模式" -#: options/theme-options.php:2268 +#: options/theme-options.php:2271 msgid "" "Enabled by default, this option avoids the problem of misaligned display " "areas" msgstr "默認開啟,此選項避免了展示區域錯位的問題" -#: options/theme-options.php:2275 +#: options/theme-options.php:2278 msgid "Display Area Background Color" msgstr "展示區域背景顏色" -#: options/theme-options.php:2287 +#: options/theme-options.php:2290 msgid "Display Area Rounded Corners" msgstr "展示區域圓角" -#: options/theme-options.php:2305 +#: options/theme-options.php:2308 msgid "First Display Area" msgstr "第一展示區域" -#: options/theme-options.php:2310 options/theme-options.php:2336 -#: options/theme-options.php:2362 +#: options/theme-options.php:2313 options/theme-options.php:2339 +#: options/theme-options.php:2365 msgid "image" msgstr "圖像" -#: options/theme-options.php:2311 options/theme-options.php:2337 -#: options/theme-options.php:2363 +#: options/theme-options.php:2314 options/theme-options.php:2340 +#: options/theme-options.php:2366 msgid "best width 260px, best height 160px" msgstr "最佳寬度260px,最佳高度160px" -#: options/theme-options.php:2316 options/theme-options.php:2342 -#: options/theme-options.php:2368 +#: options/theme-options.php:2319 options/theme-options.php:2345 +#: options/theme-options.php:2371 msgid "title" msgstr "標題" -#: options/theme-options.php:2321 options/theme-options.php:2347 -#: options/theme-options.php:2373 +#: options/theme-options.php:2324 options/theme-options.php:2350 +#: options/theme-options.php:2376 msgid "description" msgstr "描述" -#: options/theme-options.php:2331 +#: options/theme-options.php:2334 msgid "Second Display Area" msgstr "第二展示區域" -#: options/theme-options.php:2357 +#: options/theme-options.php:2360 msgid "Third Display Area" msgstr "第三展示區域" -#: options/theme-options.php:2404 +#: options/theme-options.php:2407 msgid "Article Area Options" msgstr "文章區域設定" -#: options/theme-options.php:2411 +#: options/theme-options.php:2414 msgid "" "You can click here to learn " @@ -2514,92 +2514,92 @@ msgstr "" "#%E6%96%87%E7%AB%A0%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE\">此處 瞭解如何在" "此頁面上設定選項" -#: options/theme-options.php:2417 +#: options/theme-options.php:2420 msgid "Article Area Display Style" msgstr "文章區域展示樣式" -#: options/theme-options.php:2428 +#: options/theme-options.php:2431 msgid "Article Area Matching Color" msgstr "文章區域匹配顏色" -#: options/theme-options.php:2430 +#: options/theme-options.php:2433 msgid "" "Customize the colors, This option only supports filling in hexadecimal " "colors, suggest the same as the matching color" msgstr "自定義顏色,此選項僅支援填充十六進位顏色,建議與匹配顏色相同" -#: options/theme-options.php:2437 +#: options/theme-options.php:2440 msgid "Article Area Border Shadow Color" msgstr "文章區域邊框陰影顏色" -#: options/theme-options.php:2446 +#: options/theme-options.php:2449 msgid "Article Area Featured Image Display Shapes" msgstr "文章區域裝飾特色圖像展示形狀" -#: options/theme-options.php:2448 +#: options/theme-options.php:2451 msgid "" "You can choose a circular or a rectangular display of the featured image" msgstr "你可以選擇圓形展示或者矩形展示文章區域裝飾特色圖像" -#: options/theme-options.php:2459 +#: options/theme-options.php:2462 msgid "Article Area Featured Image Alignment" msgstr "文章區域裝飾特色圖像對齊方向" -#: options/theme-options.php:2461 +#: options/theme-options.php:2464 msgid "You can choose different directions to display the featured images" msgstr "你可以選擇不同方向展示文章區域裝飾特色圖像" -#: options/theme-options.php:2473 +#: options/theme-options.php:2476 msgid "Article Area Featured Image Options" msgstr "文章區域裝飾特色圖像選項" -#: options/theme-options.php:2475 +#: options/theme-options.php:2478 msgid "Cover Random Image" msgstr "封面隨機圖像" -#: options/theme-options.php:2476 +#: options/theme-options.php:2479 msgid "External API Random Image" msgstr "外部API隨機圖像" -#: options/theme-options.php:2484 +#: options/theme-options.php:2487 msgid "Article Area Featured Image External API Random Image Address" msgstr "文章區域裝飾特色圖像外部API隨機圖像地址" -#: options/theme-options.php:2494 +#: options/theme-options.php:2497 msgid "Article Area Title Font Size" msgstr "文章區域標題字體大小" -#: options/theme-options.php:2495 +#: options/theme-options.php:2498 msgid "Slide to adjust, the recommended value range is 16-20" msgstr "滑動滑塊,推薦數值範圍為16-20" -#: options/theme-options.php:2507 +#: options/theme-options.php:2510 msgid "Article Area Time Display Area Font Size" msgstr "文章區域時間提示區域字體大小" -#: options/theme-options.php:2509 +#: options/theme-options.php:2512 msgid "Slide to adjust, the recommended values range is 10-14" msgstr "滑動滑塊,推薦數值範圍為10-14" -#: options/theme-options.php:2520 +#: options/theme-options.php:2523 msgid "Article Area Author Info" msgstr "文章區域“作者資訊”" -#: options/theme-options.php:2521 +#: options/theme-options.php:2524 msgid "" "When turned on, author information will be added to the article metadata " "section." msgstr "開啟之後,文章元資料部分將增加作者資訊。" -#: options/theme-options.php:2530 +#: options/theme-options.php:2533 msgid "Page Options" msgstr "頁面設定" -#: options/theme-options.php:2536 +#: options/theme-options.php:2539 msgid "Common Options" msgstr "綜合設定" -#: options/theme-options.php:2543 +#: options/theme-options.php:2546 msgid "" "You can click here to learn how to set the " @@ -2608,63 +2608,63 @@ msgstr "" "您可以按下 此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:2549 +#: options/theme-options.php:2552 msgid "Page Style" msgstr "頁面樣式" -#: options/theme-options.php:2560 +#: options/theme-options.php:2563 msgid "Page Layout Style" msgstr "頁面排版樣式" -#: options/theme-options.php:2562 +#: options/theme-options.php:2565 msgid "Default Style" msgstr "默認樣式" -#: options/theme-options.php:2563 +#: options/theme-options.php:2566 msgid "Github Style" msgstr "Github樣式" -#: options/theme-options.php:2571 +#: options/theme-options.php:2574 msgid "Page Decoration Image" msgstr "頁面裝飾圖像" -#: options/theme-options.php:2572 +#: options/theme-options.php:2575 msgid "" "Enabled by default, show on article pages, standalone pages and category " "pages" msgstr "默認開啟,顯示在文章頁面,獨立頁面和分類頁" -#: options/theme-options.php:2579 +#: options/theme-options.php:2582 msgid "Page Title Animation" msgstr "頁面標題動畫" -#: options/theme-options.php:2580 +#: options/theme-options.php:2583 msgid "Page title will have float-in animation when turned on" msgstr "開啟之後頁面標題將有浮入動畫" -#: options/theme-options.php:2587 +#: options/theme-options.php:2590 msgid "Page Title Animation Time" msgstr "頁面標題動畫時間" -#: options/theme-options.php:2589 +#: options/theme-options.php:2592 msgid "Slide to adjust, recommended value range is 1-2" msgstr "滑動滑塊,推薦數值範圍為1-2" -#: options/theme-options.php:2599 +#: options/theme-options.php:2602 msgid "Page Clipboard Copyright Notice" msgstr "頁面剪切板版權提示" -#: options/theme-options.php:2600 +#: options/theme-options.php:2603 msgid "" "Enabled by default, users will have copyright notice text when copying text " "content over 30 bytes" msgstr "默認開啟,用戶在復製文字內容超過30字節時,會有版權提示文本" -#: options/theme-options.php:2607 +#: options/theme-options.php:2610 msgid "Page LazyLoad" msgstr "頁面LazyLoad" -#: options/theme-options.php:2608 +#: options/theme-options.php:2611 msgid "" "LazyLoad effect for page images, WordPress block editor already comes with " "similar effect, not recommended to turn on" @@ -2672,31 +2672,31 @@ msgstr "" "開啟之後頁面圖像會有LazyLoad載入效果,WordPress區塊編輯器已經自帶相似效果,不" "建議開啟" -#: options/theme-options.php:2615 +#: options/theme-options.php:2618 msgid "Page LazyLoad Placeholder SVG" msgstr "頁面LazyLoad載入佔位SVG" -#: options/theme-options.php:2617 +#: options/theme-options.php:2620 msgid "" "Fill in the address, this is the placeholder image that will be displayed " "when the page LazyLoad is being loaded" msgstr "填寫地址,此為頁面LazyLoad載入時會顯示的佔位圖" -#: options/theme-options.php:2624 +#: options/theme-options.php:2627 msgid "Page Image Placeholder SVG" msgstr "頁面圖像載入佔位SVG" -#: options/theme-options.php:2625 +#: options/theme-options.php:2628 msgid "" "Fill address, this is the SVG that will be displayed as a placeholder when " "the page image is being loaded" msgstr "填寫地址,此為載入頁面圖像時佔位顯示的SVG" -#: options/theme-options.php:2634 +#: options/theme-options.php:2637 msgid "Article Page Options" msgstr "文章頁面設定" -#: options/theme-options.php:2641 +#: options/theme-options.php:2644 msgid "" "You can click here to learn " @@ -2706,148 +2706,148 @@ msgstr "" "#%E6%96%87%E7%AB%A0%E9%A1%B5%E9%9D%A2%E8%AE%BE%E7%BD%AE\">此處 瞭解如何在" "此頁面上設定選項" -#: options/theme-options.php:2647 +#: options/theme-options.php:2650 msgid "Article Page Title Font Size" msgstr "文章頁面標題字體大小" -#: options/theme-options.php:2648 +#: options/theme-options.php:2651 msgid "" "Slide to adjust, recommended value range is 28-36. This option is only " "available for article pages that have a featured image set" msgstr "" "滑動滑塊,推薦數值範圍為28-36。此選項僅對已經設定了特色圖像的文章頁面生效" -#: options/theme-options.php:2658 +#: options/theme-options.php:2661 msgid "Article Page Title Underline Animation" msgstr "文章頁面標題下劃線動畫" -#: options/theme-options.php:2659 +#: options/theme-options.php:2662 msgid "" "Article title will have underline animation when this is enabled and article " "has a featured image set" msgstr "開啟且文章設定了特色圖像之後,文章標題將有下劃線動" -#: options/theme-options.php:2666 +#: options/theme-options.php:2669 msgid "Article Page Auto Show Menu" msgstr "文章頁面自動顯示菜單" -#: options/theme-options.php:2667 +#: options/theme-options.php:2670 msgid "" "Enabled by default, the article page will automatically show the menu. PHP " "extension \"DOM\" is required for this feature." msgstr "默認開啟,文章頁面會自動顯示菜單,此功能需要PHP擴展“DOM”。" -#: options/theme-options.php:2674 +#: options/theme-options.php:2677 msgid "Inline Code Background Color" msgstr "內聯代碼背景色" -#: options/theme-options.php:2682 +#: options/theme-options.php:2685 msgid "Inline Code Background Color In Dark Mode" msgstr "深色模式內聯代碼背景色" -#: options/theme-options.php:2683 +#: options/theme-options.php:2686 msgid "" "Customize the colors, suggest using a corresponding color with the " "background color,this color is only displayed in dark mode" msgstr "自訂顏色,建議使用與背景顏色對應的顏色,此顏色僅在深色模式下顯示" -#: options/theme-options.php:2689 +#: options/theme-options.php:2692 msgid "Article Expansion Area" msgstr "文章擴展區" -#: options/theme-options.php:2695 +#: options/theme-options.php:2698 msgid "Article Page Function Bar" msgstr "文章頁面功能列" -#: options/theme-options.php:2696 +#: options/theme-options.php:2699 msgid "" "Enabled by default, will be displayed on the article page with the features " "enabled below" msgstr "默認啟用,將在文章頁顯示下方開啟的功能" -#: options/theme-options.php:2703 +#: options/theme-options.php:2706 msgid "Article Lincenses" msgstr "文章知識共享協定" -#: options/theme-options.php:2705 +#: options/theme-options.php:2708 msgid "Enabled by default, Article lincenses will appear on the function bar" msgstr "默認啟用,文章行將顯示在功能欄上" -#: options/theme-options.php:2712 +#: options/theme-options.php:2715 msgid "Article Page Appreciation Function (Alipay QR Code)" msgstr "文章頁面讚賞功能(支付寶二維碼)" -#: options/theme-options.php:2714 +#: options/theme-options.php:2717 msgid "Upload Alipay Receipt QR Code Image" msgstr "上傳支付寶收款碼圖像" -#: options/theme-options.php:2721 +#: options/theme-options.php:2724 msgid "Article Page Appreciation Function (Wechat QR Code)" msgstr "文章頁面讚賞功能(微信QR碼)" -#: options/theme-options.php:2723 +#: options/theme-options.php:2726 msgid "Upload WeChat Receipt QR Code Image" msgstr "上傳微信收款碼圖像" -#: options/theme-options.php:2730 +#: options/theme-options.php:2733 msgid "Article Page Author Avatar" msgstr "文章頁面作者頭像" -#: options/theme-options.php:2732 +#: options/theme-options.php:2735 msgid "Enabled by default, Author avatar will appear on the function bar" msgstr "默認啟用,作者頭像將出現在功能欄上" -#: options/theme-options.php:2739 +#: options/theme-options.php:2742 msgid "Article Page Author Name" msgstr "文章頁面作者姓名" -#: options/theme-options.php:2741 +#: options/theme-options.php:2744 msgid "Author name will appear on the function bar when enabled" msgstr "啟用后,作者姓名將顯示在功能欄上" -#: options/theme-options.php:2748 +#: options/theme-options.php:2751 msgid "Article Page Author Signature" msgstr "文章頁面作者簽名" -#: options/theme-options.php:2750 +#: options/theme-options.php:2753 msgid "Enabled by default, Author signature will appear on the function bar" msgstr "默認啟用,作者簽名將顯示在功能列上" -#: options/theme-options.php:2757 +#: options/theme-options.php:2760 msgid "Article Page Author Info Signature Text" msgstr "文章頁面 作者資訊 簽名文本" -#: options/theme-options.php:2769 +#: options/theme-options.php:2772 msgid "Article Last Update Time" msgstr "文章最後更新時間" -#: options/theme-options.php:2771 +#: options/theme-options.php:2774 msgid "Article last update time will appear on the function bar when enabled" msgstr "啟用后,文章上次更新時間將顯示在功能列上" -#: options/theme-options.php:2778 +#: options/theme-options.php:2781 msgid "Article Tag" msgstr "文章標籤" -#: options/theme-options.php:2780 +#: options/theme-options.php:2783 msgid "Enabled by default, Article tag will appear on the function bar" msgstr "默認啟用,文章標籤將顯示在功能欄上" -#: options/theme-options.php:2787 +#: options/theme-options.php:2790 msgid "Article Page Prev/Next Article Switcher" msgstr "文章頁面上下文章切換" -#: options/theme-options.php:2788 +#: options/theme-options.php:2791 msgid "" "Enabled by default, the previous and next article switch will appear on the " "article pages" msgstr "默認啟用,上一篇文章和下一篇文章開關將顯示在文章頁面上" -#: options/theme-options.php:2797 +#: options/theme-options.php:2800 msgid "Template Page Options" msgstr "模板頁面設定" -#: options/theme-options.php:2804 +#: options/theme-options.php:2807 msgid "" "You can click here to learn " @@ -2857,93 +2857,93 @@ msgstr "" "#%E6%A8%A1%E6%9D%BF%E9%A1%B5%E9%9D%A2%E8%AE%BE%E7%BD%AE\">此處 瞭解如何在" "此頁面上設定選項" -#: options/theme-options.php:2809 +#: options/theme-options.php:2812 msgid "Public Settings" msgstr "共用設置" -#: options/theme-options.php:2815 +#: options/theme-options.php:2818 msgid "Template Page Title Font Size" msgstr "模板頁面標題字體大小" -#: options/theme-options.php:2816 +#: options/theme-options.php:2819 msgid "" "Slide to adjust, recommended value range is 36-48. This option is only " "available for template pages with featured images already set" msgstr "" "滑動滑塊,推薦數值範圍為36-48。此選項僅對已經設定了特色圖像的模板頁面生效" -#: options/theme-options.php:2825 +#: options/theme-options.php:2828 msgid "ShuoShuo Template Settings" msgstr "說說模板設置" -#: options/theme-options.php:2831 +#: options/theme-options.php:2834 msgid "Ideas Template Background ColorⅠ" msgstr "推文模板推文背景顏色Ⅰ" -#: options/theme-options.php:2839 +#: options/theme-options.php:2842 msgid "Ideas Template Background Color II" msgstr "推文模板推文背景顏色Ⅱ" -#: options/theme-options.php:2847 +#: options/theme-options.php:2850 msgid "Ideas Template Tip Arrow" msgstr "推文模板推文提示箭頭" -#: options/theme-options.php:2848 +#: options/theme-options.php:2851 msgid "" "After turning on the alert arrow will appear on the left side of the comment" msgstr "開啟之後提示箭頭將出現在推文左側上方" -#: options/theme-options.php:2855 +#: options/theme-options.php:2858 msgid "Ideas Template Font" msgstr "推文模板推文字體" -#: options/theme-options.php:2863 +#: options/theme-options.php:2866 msgid "Number Of ShuoShuo" msgstr "每頁說說顯示數量" -#: options/theme-options.php:2864 +#: options/theme-options.php:2867 msgid "" "Enter a positive integer or \"-1\" to control the number of ShuoShuo " "displayed on each page. Enter \"-1\" to display all messages." msgstr "輸入一個正整數或“-1”來控制每頁顯示的碩碩個數。 輸入“-1”顯示所有消息。" -#: options/theme-options.php:2870 +#: options/theme-options.php:2873 msgid "Bangumi Template Settings" msgstr "動漫模板設置" -#: options/theme-options.php:2876 +#: options/theme-options.php:2879 msgid "Bangumi Template Source" msgstr "動漫模板源" -#: options/theme-options.php:2887 +#: options/theme-options.php:2890 msgid "My Anime List Username" msgstr "我的動漫清單使用者名" -#: options/theme-options.php:2889 +#: options/theme-options.php:2892 msgid "Username on https://myanimelist.net/" msgstr "https://myanimelist.net/ 上的使用者名" -#: options/theme-options.php:2896 +#: options/theme-options.php:2899 msgid "My Anime List Sort" msgstr "我的動漫清單顺序" -#: options/theme-options.php:2899 +#: options/theme-options.php:2902 msgid "Status and Last Updated" msgstr "狀態和上次更新時間" -#: options/theme-options.php:2900 +#: options/theme-options.php:2903 msgid "Last Updated" msgstr "最後更新" -#: options/theme-options.php:2901 +#: options/theme-options.php:2904 msgid "Status" msgstr "狀態" -#: options/theme-options.php:2909 +#: options/theme-options.php:2912 msgid "Bilibili Account UID" msgstr "嗶哩嗶哩帳戶UID" -#: options/theme-options.php:2910 +#: options/theme-options.php:2913 msgid "" "Fill in your account ID, e.g. https://space.bilibili.com/13972644/, just the " "number part \"13972644\"" @@ -2951,11 +2951,11 @@ msgstr "" "填寫你的帳號ID,例如:https://space.bilibili.com/13972644/,只需填寫數" "字“13972644”部分" -#: options/theme-options.php:2918 +#: options/theme-options.php:2921 msgid "Bilibili Account Cookies" msgstr "嗶哩嗶哩帳戶Cookies" -#: options/theme-options.php:2919 +#: options/theme-options.php:2922 msgid "" "Fill in your account cookies, F12 to open your browser web panel, go to your " "bilibili homepage to get cookies. If left empty, it will not show the " @@ -2964,79 +2964,79 @@ msgstr "" "填寫你的帳號Cookies,F12打開瀏覽器網路面板,前往你的B站主頁獲取Cookies。如果" "留空,將不會顯示追番進度" -#: options/theme-options.php:2926 +#: options/theme-options.php:2929 msgid "Friend Link Template Settings" msgstr "友情連結模板設置" -#: options/theme-options.php:2932 +#: options/theme-options.php:2935 msgid "Friend Link Template Unit Alignment" msgstr "友情連結模板單元對齊方向" -#: options/theme-options.php:2944 +#: options/theme-options.php:2947 msgid "Friend Link Template Unit Matching Color" msgstr "友情連結模板單元匹配顏色" -#: options/theme-options.php:2952 +#: options/theme-options.php:2955 msgid "Friend Link Template Unit Border Shadow Color" msgstr "友情連結模板單元邊框陰影顏色" -#: options/theme-options.php:2960 +#: options/theme-options.php:2963 msgid "Friend Link Sorting Mode" msgstr "友情連結列表排序模式" -#: options/theme-options.php:2961 +#: options/theme-options.php:2964 msgid "Select the friend link sorting mode, \"Name\" is used by Default." msgstr "選擇友情連結列表排序模式,預設使用“名稱”。" -#: options/theme-options.php:2963 +#: options/theme-options.php:2966 msgid "Name" msgstr "名稱" -#: options/theme-options.php:2964 +#: options/theme-options.php:2967 msgid "Rating" msgstr "評級" -#: options/theme-options.php:2965 +#: options/theme-options.php:2968 msgid "Updated" msgstr "更新时间" -#: options/theme-options.php:2966 +#: options/theme-options.php:2969 msgid "Rand" msgstr "隨機" -#: options/theme-options.php:2974 +#: options/theme-options.php:2977 msgid "Ascending OR Descending" msgstr "升序或降序" -#: options/theme-options.php:2975 +#: options/theme-options.php:2978 msgid "Order friend link in ascending or descending." msgstr "按升序或降序排序友情連結列表。" -#: options/theme-options.php:2978 +#: options/theme-options.php:2981 msgid "Ascending" msgstr "升序" -#: options/theme-options.php:2979 +#: options/theme-options.php:2982 msgid "Descending" msgstr "降序" -#: options/theme-options.php:2986 +#: options/theme-options.php:2989 msgid "Login Template Settings" msgstr "登入模板設置" -#: options/theme-options.php:2992 +#: options/theme-options.php:2995 msgid "Login Template Registration Function" msgstr "登入模板註冊功能" -#: options/theme-options.php:2993 +#: options/theme-options.php:2996 msgid "Login template will allow registration when enabled" msgstr "開啟之後登入模板將允許註冊" -#: options/theme-options.php:3002 +#: options/theme-options.php:3005 msgid "Comment-related Options" msgstr "留言相關設定" -#: options/theme-options.php:3009 +#: options/theme-options.php:3012 msgid "" "You can click here to learn " @@ -3046,38 +3046,34 @@ msgstr "" "#%E8%AF%84%E8%AE%BA%E7%9B%B8%E5%85%B3%E8%AE%BE%E7%BD%AE\">此處 瞭解如何在" "此頁面上設定選項" -#: options/theme-options.php:3015 +#: options/theme-options.php:3017 +msgid "Comment Area Style" +msgstr "留言板區域樣式" + +#: options/theme-options.php:3023 msgid "Page Comment Area Display" msgstr "頁面留言板顯示" -#: options/theme-options.php:3016 +#: options/theme-options.php:3024 msgid "You can choose to expand or shirink the content of the comment area" msgstr "你可以選擇展開或者摺疊留言板內容" -#: options/theme-options.php:3018 +#: options/theme-options.php:3026 msgid "Expand" msgstr "展開" -#: options/theme-options.php:3019 +#: options/theme-options.php:3027 msgid "Shrink" msgstr "摺疊" -#: options/theme-options.php:3027 +#: options/theme-options.php:3035 msgid "Page Comment Area Matching Color" msgstr "頁面留言板域匹配顏色" -#: options/theme-options.php:3035 +#: options/theme-options.php:3043 msgid "Page Comment Area Shadow Color" msgstr "頁面留言板域陰影顏色" -#: options/theme-options.php:3043 -msgid "Page Comment Area Bilibili Emoji Pack" -msgstr "頁面留言板域嗶哩嗶哩表情包" - -#: options/theme-options.php:3044 -msgid "Default on, bilibili emotions are displayed below the comment box" -msgstr "默認開啟,嗶哩嗶哩表情包顯示在留言框的下方" - #: options/theme-options.php:3051 msgid "Page Comment Area Bottom Right Background Image" msgstr "頁面留言板右下背景圖像" @@ -3087,78 +3083,131 @@ msgid "" "If this option is blank, there will be no image, no best recommendation here" msgstr "如果此選項為空白,則沒有圖像,無最佳推薦" -#: options/theme-options.php:3059 +#: options/theme-options.php:3058 +msgid "Comment Area Function" +msgstr "留言板區域功能" + +#: options/theme-options.php:3064 +msgid "Comment Area Emoticon" +msgstr "留言板區域表情包" + +#: options/theme-options.php:3065 +msgid "" +"Select the emoticons to be displayed in the comment area input box. Uncheck " +"all to turn off the comment input box emoticon function." +msgstr "" +"選擇要在留言板區域輸入框中顯示的表情。 全部取消選中可關閉留言板區域輸入框表情" +"功能。" + +#: options/theme-options.php:3079 +msgid "Customized Emoticon Column Name" +msgstr "自訂表情包名稱" + +#: options/theme-options.php:3080 +msgid "" +"It is recommended to enter less than 4 Chinese characters in length to avoid " +"causing compatibility issues on mobile terminals." +msgstr "建議輸入少於4個漢字的內容,以免造成移動端的相容性問題。" + +#: options/theme-options.php:3088 +msgid "Path To Custom Expression" +msgstr "自訂表情包路徑" + +#: options/theme-options.php:3089 +msgid "" +"Click here updating emoticon list. Specific usage reference: " +"Comment related settings" +msgstr "" +"點擊 這" +"裡 更新表情包清單。 使用方法請參攷:留言相關設定" + +#: options/theme-options.php:3096 +msgid "Custom Emoticon Proxy Address" +msgstr "自訂表情包代理位址" + +#: options/theme-options.php:3097 +msgid "" +"Fill in the CDN address of the emoticon image. If left blank, the CDN proxy " +"function will not be enabled." +msgstr "填寫表情圖片的CDN位址。 如果留空,則不會啟用CDN代理功能。" + +#: options/theme-options.php:3107 msgid "Page Comment Area UA Info" msgstr "頁面留言板UA資訊" -#: options/theme-options.php:3060 +#: options/theme-options.php:3108 msgid "" "When enabled, the page comment area will display the user’s browser, " "operating system information" msgstr "開啟之後頁面留言板將顯示用戶的瀏覽器,作業系統資訊" -#: options/theme-options.php:3067 +#: options/theme-options.php:3115 msgid "Page Comment Area Location Information" msgstr "頁面留言板位置資訊" -#: options/theme-options.php:3068 +#: options/theme-options.php:3116 msgid "" "When enabled, the page comment area will show the user’s location information" msgstr "開啟之後頁面留言板將顯示用戶的位置資訊" -#: options/theme-options.php:3075 +#: options/theme-options.php:3123 msgid "Private Comment Function" msgstr "私人留言功能" -#: options/theme-options.php:3076 +#: options/theme-options.php:3124 msgid "" "When enabled, users are allowed to set their comments to be invisible to " "others" msgstr "開啟之後將允許用戶設定自己的留言對其他人不可見" -#: options/theme-options.php:3083 +#: options/theme-options.php:3131 msgid "Page Comment Area Bot Verification" msgstr "頁面留言板機器人驗證" -#: options/theme-options.php:3084 +#: options/theme-options.php:3132 msgid "After turning on user comments need to be verified before posting" msgstr "開啟之後用戶留言前需要經過驗證後才可發布" -#: options/theme-options.php:3091 +#: options/theme-options.php:3139 msgid "QQ Avatar Link Encryption" msgstr "QQ頭貼連結加密" -#: options/theme-options.php:3094 +#: options/theme-options.php:3142 msgid "Redirect (low security)" msgstr "重定向(低安全性)" -#: options/theme-options.php:3095 +#: options/theme-options.php:3143 msgid "Get avatar data in the backend (medium security)" msgstr "後端獲取頭貼數據(中安全性)" -#: options/theme-options.php:3096 +#: options/theme-options.php:3144 msgid "Parse avatar interface in the backend (high security, slow)" msgstr "後端解析頭貼接口(高安全性,慢速)" -#: options/theme-options.php:3104 +#: options/theme-options.php:3152 msgid "Page Comment Area Upload Image Interface" msgstr "頁面留言板上傳圖像接口" -#: options/theme-options.php:3118 +#: options/theme-options.php:3166 msgid "Imgur Client ID" msgstr "Imgur Client ID" -#: options/theme-options.php:3120 +#: options/theme-options.php:3168 msgid "" "Fill in Client ID here, to register please visit https://api.imgur.com/" "oauth2/addclient" msgstr "此處填寫Client ID,註冊請訪問 https://api.imgur.com/oauth2/addclient" -#: options/theme-options.php:3126 +#: options/theme-options.php:3174 msgid "Imgur Upload Proxy" msgstr "Imgur上傳代理" -#: options/theme-options.php:3128 +#: options/theme-options.php:3176 msgid "" "The proxy used by the backend when uploading images to Imgur. You can refer " "to the tutorial: https://2heng.xin/2018/06/06/javascript-upload-images-with-" @@ -3167,41 +3216,41 @@ msgstr "" "後端上傳圖像到 Imgur 的時候使用的代理。你可以參考教程:https://2heng." "xin/2018/06/06/javascript-upload-images-with-imgur-api/" -#: options/theme-options.php:3135 +#: options/theme-options.php:3183 msgid "SM.MS Secret Token" msgstr "SM.MS Secret Token" -#: options/theme-options.php:3137 +#: options/theme-options.php:3185 msgid "" "Fill in your Key here, to get it please visit https://sm.ms/home/apitoken" msgstr "此處填寫Key,獲取請訪問 https://sm.ms/home/apitoken" -#: options/theme-options.php:3143 +#: options/theme-options.php:3191 msgid "Chevereto API v1 Key" msgstr "Chevereto API v1 Key" -#: options/theme-options.php:3145 +#: options/theme-options.php:3193 msgid "" "Fill in the Key here, to get please visit your Chevereto home page address/" "dashboard/settings/api" msgstr "此處填寫Key,獲取請訪問你的Chevereto首頁地址/dashboard/settings/api" -#: options/theme-options.php:3151 +#: options/theme-options.php:3199 msgid "Chevereto Address" msgstr "Chevereto地址" -#: options/theme-options.php:3153 +#: options/theme-options.php:3201 msgid "" "Your Chevereto home page address. Please note that there is no \"/\" at the " "end, e.g. https://your.cherverto.com" msgstr "" "你的Chevereto首頁地址, 注意結尾沒有 /, 例如:https://your.cherverto.com" -#: options/theme-options.php:3159 +#: options/theme-options.php:3207 msgid "Lsky Pro v1 Token" msgstr "Lsky Pro v1 Token" -#: options/theme-options.php:3161 +#: options/theme-options.php:3209 msgid "" "Fill in the Token here, Please note that there is no \"Bearer \" at first, " "to get please visit your Lsky Pro home page address/api" @@ -3209,37 +3258,41 @@ msgstr "" "在這裡填寫令牌,請注意,首先沒有“持有者”,要獲得請訪問您的Lsky Pro主頁位址/ " "api" -#: options/theme-options.php:3167 +#: options/theme-options.php:3215 msgid "Lsky Pro Address" msgstr "Lsky Pro地址" -#: options/theme-options.php:3169 +#: options/theme-options.php:3217 msgid "" "Your Lsky Pro home page address. Please note that there is no \"/\" at the " "end, e.g. https://your.lskypro.com" msgstr "你的Lsky Pro首頁地址, 注意結尾沒有 /, 例如:https://your.lskypro.com" -#: options/theme-options.php:3175 +#: options/theme-options.php:3223 msgid "Comment Image Proxy" msgstr "留言圖像代理" -#: options/theme-options.php:3176 +#: options/theme-options.php:3224 msgid "Proxy for the image displayed on the frontend" msgstr "前端顯示的圖像的代理" -#: options/theme-options.php:3183 +#: options/theme-options.php:3231 +msgid "Comment Email Notification" +msgstr "留言板郵件通知" + +#: options/theme-options.php:3237 msgid "Mail Template Featured Image" msgstr "郵件模板特色圖像" -#: options/theme-options.php:3184 +#: options/theme-options.php:3238 msgid "Set the background image of your reply email" msgstr "設定你的回復郵件上方背景圖像" -#: options/theme-options.php:3192 +#: options/theme-options.php:3246 msgid "Mail Template Sending Address Prefix" msgstr "郵件模板發件地址前綴" -#: options/theme-options.php:3193 +#: options/theme-options.php:3247 msgid "" "Used to send system mail. The sender address will be displayed in the user's " "mailbox, don't use Non-English Characters. The default system mail address " @@ -3248,11 +3301,11 @@ msgstr "" "用於發送系統郵件,在用戶的郵箱中顯示的發件人地址,不要使用中文,默認系統郵件" "地址為 bibi@你的域名" -#: options/theme-options.php:3200 +#: options/theme-options.php:3254 msgid "User Mail Reply Notification" msgstr "用戶郵件回復通知" -#: options/theme-options.php:3201 +#: options/theme-options.php:3255 msgid "" "By default WordPress will use email notifications to notify users when their " "comments receive a reply. After turning it on users are allowed to set " @@ -3261,25 +3314,25 @@ msgstr "" "WordPress默認會使用郵件通知用戶留言收到回復,開啟之後允許用戶設定自己的留言收" "到回復時是否使用郵件通知" -#: options/theme-options.php:3208 +#: options/theme-options.php:3262 msgid "Admin Email Reply Notification" msgstr "管理員郵件回復通知" -#: options/theme-options.php:3209 +#: options/theme-options.php:3263 msgid "" "Use email notifications when admin comments receive a reply after turning it " "on" msgstr "開啟之後當管理員留言收到回復時使用郵件通知" -#: options/theme-options.php:3218 +#: options/theme-options.php:3272 msgid "Other Options" msgstr "其他設定" -#: options/theme-options.php:3224 +#: options/theme-options.php:3278 msgid "Login Screen and Dashboard Related Options" msgstr "登入介面和儀錶盤相關設定" -#: options/theme-options.php:3231 +#: options/theme-options.php:3285 msgid "" "You can click here" "此處 瞭解如何在此頁面上設定選項" -#: options/theme-options.php:3236 +#: options/theme-options.php:3290 msgid "Login Screen" msgstr "登入介面" -#: options/theme-options.php:3242 +#: options/theme-options.php:3296 msgid "Custom Login Screen" msgstr "自訂登錄螢幕" -#: options/theme-options.php:3243 +#: options/theme-options.php:3297 msgid "Default on, custom login screen will replace the default login screen" msgstr "默認開啟,自定義登錄螢幕將取代預設登錄螢幕" -#: options/theme-options.php:3250 +#: options/theme-options.php:3304 msgid "Login Screen Background Image" msgstr "登入介面背景圖像" -#: options/theme-options.php:3251 +#: options/theme-options.php:3305 msgid "" "Set your login screen background image, leave this option blank to show the " "default" msgstr "設定你的登入介面背景圖像,此選項留空則顯示默認背景" -#: options/theme-options.php:3260 +#: options/theme-options.php:3314 msgid "Login Screen Background Blur" msgstr "登入介面背景虛化" -#: options/theme-options.php:3261 +#: options/theme-options.php:3315 msgid "Login screen background image will be blurred when enabled" msgstr "開啟之後登入介面背景圖像將被虛化" -#: options/theme-options.php:3269 +#: options/theme-options.php:3323 msgid "Login Screen Logo" msgstr "登入介面Logo" -#: options/theme-options.php:3270 +#: options/theme-options.php:3324 msgid "Set your login screen Logo" msgstr "設定你的登入介面Logo" -#: options/theme-options.php:3279 +#: options/theme-options.php:3333 msgid "Jump after login" msgstr "登入後跳轉" -#: options/theme-options.php:3280 +#: options/theme-options.php:3334 msgid "Jump to backend for admins and home for users after turning on." msgstr "啟用后,跳轉到管理員的後端和使用者的主頁。" -#: options/theme-options.php:3287 +#: options/theme-options.php:3341 msgid "Login Screen Language Option" msgstr "登入介面語言選項" -#: options/theme-options.php:3288 +#: options/theme-options.php:3342 msgid "Login screen language option will be display when enabled" msgstr "開啟之後將顯示登入介面語言選項" -#: options/theme-options.php:3294 +#: options/theme-options.php:3348 msgid "Dashboard" msgstr "儀錶盤" -#: options/theme-options.php:3300 +#: options/theme-options.php:3354 msgid "Dashboard Background Image" msgstr "儀錶盤背景圖像" -#: options/theme-options.php:3301 +#: options/theme-options.php:3355 msgid "" "Set your dashboard background image, leave this option blank to show white " "background" msgstr "設定你的儀錶盤背景圖像,此選項留空則顯示白色背景" -#: options/theme-options.php:3309 +#: options/theme-options.php:3363 msgid "Dashboard Options Menu Style" msgstr "儀錶盤選項功能表樣式" -#: options/theme-options.php:3320 +#: options/theme-options.php:3374 msgid "Dashboard Primary Menu Color" msgstr "儀錶盤一級菜單顏色" -#: options/theme-options.php:3328 +#: options/theme-options.php:3382 msgid "Dashboard Secondary Menu Color" msgstr "儀錶盤二級菜單顏色" -#: options/theme-options.php:3336 +#: options/theme-options.php:3390 msgid "Dashboard Emphasis Color" msgstr "儀錶盤強調顏色" -#: options/theme-options.php:3344 +#: options/theme-options.php:3398 msgid "Dashboard Button Color" msgstr "儀錶盤按鈕顏色" -#: options/theme-options.php:3352 +#: options/theme-options.php:3406 msgid "Dashboard Text Color" msgstr "儀錶盤文本顏色" -#: options/theme-options.php:3362 +#: options/theme-options.php:3416 msgid "ChatGPT Options" msgstr "ChatGPT設定" -#: options/theme-options.php:3369 +#: options/theme-options.php:3423 msgid "" "You can click here to learn how to set the options on " @@ -3394,27 +3447,27 @@ msgstr "" "您可以按下 此處 瞭解如何設定此頁面上的選項" -#: options/theme-options.php:3375 +#: options/theme-options.php:3429 msgid "ChatGPT Function" msgstr "ChatGPT功能" -#: options/theme-options.php:3376 +#: options/theme-options.php:3430 msgid "After turning on ChatGPT Function will be available" msgstr "開啟之後ChatGPT功能后將可用" -#: options/theme-options.php:3383 +#: options/theme-options.php:3437 msgid "ChatGPT Base URL" msgstr "ChatGPT基本網址" -#: options/theme-options.php:3384 +#: options/theme-options.php:3438 msgid "Fill in the ChatGPT Base URL, The default is http://sxy.gay/" msgstr "填寫聊天GPT基本網址,預設為 http://sxy.gay/" -#: options/theme-options.php:3392 +#: options/theme-options.php:3446 msgid "ChatGPT API keys" msgstr "" -#: options/theme-options.php:3393 +#: options/theme-options.php:3447 msgid "" "Fill in Your ChatGPT API keys, You can go to OpenAI Website to get your API Keys" @@ -3422,15 +3475,15 @@ msgstr "" "填寫您的 ChatGPT API Keys,您可以存取 OpenAI 網站 取得您的 API Keys" -#: options/theme-options.php:3400 +#: options/theme-options.php:3454 msgid "ChatGPT Article Summarize" msgstr "ChatGPT文章摘要" -#: options/theme-options.php:3401 +#: options/theme-options.php:3455 msgid "After turning on ChatGPT will automatically generate article abstracts" msgstr "開啟之後ChatGPT會自動生成文章摘要" -#: options/theme-options.php:3408 +#: options/theme-options.php:3462 msgid "" "Each update of your post will trigger a request to generate a summary. Due " "to current API limitations, if your article exceeds 4097 Token, the system " @@ -3439,21 +3492,21 @@ msgstr "" "帖子的每次更新都會觸發生成摘要的請求。由於當前 API 限制,如果您的文章超過 " "4097 Token,系統只會發送未超出的部分以生成摘要" -#: options/theme-options.php:3418 +#: options/theme-options.php:3472 msgid "Article IDs that do not Require ChatGPT Summarize" msgstr "不需要 ChatGPT 摘要的文章 ID" -#: options/theme-options.php:3419 +#: options/theme-options.php:3473 msgid "" "Enter the article IDs that do not need to generate ChatGPT Summarize, and " "split multiple article IDs with \",\"" msgstr "輸入不需要生成 ChatGPT 摘要的文章 ID,並用“,” 拆分多個文章 ID" -#: options/theme-options.php:3430 +#: options/theme-options.php:3484 msgid "ChatGPT Article Summarize Init Prompt" msgstr "ChatGPT文章摘要初始化提示" -#: options/theme-options.php:3435 +#: options/theme-options.php:3489 msgid "" "Fill in the Init Prompt, Please make changes if you know how to configure it " "correctly. Init Prompt will be passed to ChatGPT as \"system\" role" @@ -3461,22 +3514,22 @@ msgstr "" "填寫 init 提示符,如果您知道如何正確配置,請進行更改。初始化提示符將作為「系" "統」角色傳遞給 ChatGPT" -#: options/theme-options.php:3446 +#: options/theme-options.php:3500 msgid "ChatGPT Article Summarize Ask Prompt" msgstr "ChatGPT文章摘要要求提示" -#: options/theme-options.php:3451 +#: options/theme-options.php:3505 msgid "" "Fill in the Ask Prompt, Use preset value when option is empty, Please make " "changes if you know how to configure it correctly" msgstr "" "填寫詢問提示,選項為空時使用預設值,請在您知道如何正確配置的情况下進行更改" -#: options/theme-options.php:3459 +#: options/theme-options.php:3513 msgid "Low Use Options" msgstr "低使用設定" -#: options/theme-options.php:3466 +#: options/theme-options.php:3520 msgid "" "You can click here to learn how to " @@ -3486,53 +3539,53 @@ msgstr "" "#%E4%BD%8E%E4%BD%BF%E7%94%A8%E8%AE%BE%E7%BD%AE\">此處 瞭解如何在此頁面上" "設定選項" -#: options/theme-options.php:3472 +#: options/theme-options.php:3526 msgid "Statistics API" msgstr "統計接口" -#: options/theme-options.php:3473 +#: options/theme-options.php:3527 msgid "" "You can choose WP-Statistics plugin statistics or theme built-in statistics " "to display" msgstr "你可以選擇WP-Statistics插件統計或者主題內建統計作為統計結果" -#: options/theme-options.php:3475 +#: options/theme-options.php:3529 msgid "Theme Built in Statistics" msgstr "主題內建統計" -#: options/theme-options.php:3476 +#: options/theme-options.php:3530 msgid "WP-Statistics Plugin Statistics" msgstr "WP-Statistics插件統計" -#: options/theme-options.php:3484 +#: options/theme-options.php:3538 msgid "Statistics display format" msgstr "統計數據顯示格式" -#: options/theme-options.php:3485 +#: options/theme-options.php:3539 msgid "You can choose from four different data display formats" msgstr "你可以選擇四種不同的數據顯示格式" -#: options/theme-options.php:3487 +#: options/theme-options.php:3541 msgid "23333 Visits" msgstr "23333次訪問" -#: options/theme-options.php:3488 +#: options/theme-options.php:3542 msgid "23,333 Visits" msgstr "23,333次訪問" -#: options/theme-options.php:3489 +#: options/theme-options.php:3543 msgid "23 333 Visits" msgstr "23 333次訪問" -#: options/theme-options.php:3490 +#: options/theme-options.php:3544 msgid "23K Visits" msgstr "23K次訪問" -#: options/theme-options.php:3498 +#: options/theme-options.php:3552 msgid "Live Search" msgstr "實時搜尋" -#: options/theme-options.php:3499 +#: options/theme-options.php:3553 msgid "" "After turning on the live search in the frontend, call Rest API to update " "the cache once an hour. You can set the cache time manually in api.php" @@ -3540,45 +3593,45 @@ msgstr "" "開啟之後將在前台實現實時搜尋,調用 Rest API 每小時更新一次快取,可在 api.php " "里手動設定快取時間" -#: options/theme-options.php:3506 +#: options/theme-options.php:3560 msgid "Live Search Comment Support" msgstr "實時搜尋留言支援" -#: options/theme-options.php:3508 +#: options/theme-options.php:3562 msgid "" "Enable to search for comments in live search (not recommended if site has " "too many comments)" msgstr "開啟之後將在可在實時搜尋中搜尋留言(如果網站留言數量太多不建議開啟)" -#: options/theme-options.php:3515 +#: options/theme-options.php:3569 msgid "Google Analytics Id" msgstr "谷歌統計ID" -#: options/theme-options.php:3516 +#: options/theme-options.php:3570 msgid "If you already have a plugin to handle it, please keep here empty." msgstr "如果已有類似功能挿件,請將此處留空" -#: options/theme-options.php:3522 +#: options/theme-options.php:3576 msgid "Custom CSS Styles" msgstr "自定義CSS樣式" -#: options/theme-options.php:3523 +#: options/theme-options.php:3577 msgid "Fill in the CSS code without writing style tag" msgstr "填寫CSS代碼,不需要寫style標籤" -#: options/theme-options.php:3530 +#: options/theme-options.php:3584 msgid "Code inserted in the header" msgstr "自定義插入Header程式碼" -#: options/theme-options.php:3531 +#: options/theme-options.php:3585 msgid "Insert HTML code right before ." msgstr "在前插入HTML程式碼" -#: options/theme-options.php:3537 +#: options/theme-options.php:3591 msgid "Timezone Fix" msgstr "時區修正" -#: options/theme-options.php:3538 +#: options/theme-options.php:3592 msgid "" "Slide to adjust. If the comment has a time difference problem, adjust it " "here, fill in an integer. Calculation method: actual time = time of display " @@ -3587,42 +3640,42 @@ msgstr "" "滑動滑塊,如果留言出現時差問題在這裡調整,填入一個整數,計算方法:實際時間=顯" "示錯誤的時間-你輸入的整數(單位:小時)" -#: options/theme-options.php:3547 +#: options/theme-options.php:3601 msgid "Gravatar Service Proxy" msgstr "Gravatar服務代理" -#: options/theme-options.php:3548 +#: options/theme-options.php:3602 msgid "" "You can select multiple proxy as the Gravatar Service Proxy. By default, " "Tianli is used as the Gravatar Service Proxy." msgstr "" "你可以選擇多種代理作為Gravatar服務代理。默認使用Tianli作為Gravatar服務代理。" -#: options/theme-options.php:3550 +#: options/theme-options.php:3604 msgid "Weavatar Service" msgstr "Weavatar服務" -#: options/theme-options.php:3551 +#: options/theme-options.php:3605 msgid "Cravatar Service" msgstr "Cravatar服務" -#: options/theme-options.php:3552 +#: options/theme-options.php:3606 msgid "Geekzu" msgstr "極客族" -#: options/theme-options.php:3553 +#: options/theme-options.php:3607 msgid "Loli Net" msgstr "Loli Net" -#: options/theme-options.php:3554 +#: options/theme-options.php:3608 msgid "Official" msgstr "官方" -#: options/theme-options.php:3555 options/theme-options.php:3563 +#: options/theme-options.php:3609 options/theme-options.php:3617 msgid "Custom Proxy Address" msgstr "自訂代理位址" -#: options/theme-options.php:3564 +#: options/theme-options.php:3618 msgid "" "Enter your Gravatar proxy address without starting with \"http(s)://\" and " "ending with \"/\". Example: gravatar.com/avatar." @@ -3630,37 +3683,37 @@ msgstr "" "輸入您的頭像代理位址,请勿以“HTTP(s)://”開頭,以“/”結尾。示例:gravatar." "com/avatar。" -#: options/theme-options.php:3571 +#: options/theme-options.php:3625 msgid "Lightbox" msgstr "燈箱" -#: options/theme-options.php:3577 +#: options/theme-options.php:3631 msgid "BaguetteBox Lightbox Effect" msgstr "BaguetteBox燈箱效果" -#: options/theme-options.php:3578 +#: options/theme-options.php:3632 msgid "BaguetteBox will be used as the image lightbox effect when turned on" msgstr "開啟之後將使用BaguetteBox作為圖像燈箱效果" -#: options/theme-options.php:3590 +#: options/theme-options.php:3644 msgid "FancyBox Lightbox Effect" msgstr "FancyBox燈箱效果" -#: options/theme-options.php:3591 +#: options/theme-options.php:3645 msgid "" "FancyBox will be used as an image lightbox effect after turning on, " "additional JQ libraries will be loaded" msgstr "開啟之後將使用FancyBox作為圖像燈箱效果,將會額外載入JQ庫" -#: options/theme-options.php:3603 +#: options/theme-options.php:3657 msgid "LightGallery Lightbox Effect" msgstr "LightGallery燈箱效果" -#: options/theme-options.php:3604 +#: options/theme-options.php:3658 msgid "LightGallery will be used as an image lightbox effect after turning on." msgstr "開啟之後將使用LightGallery作為圖像燈箱效果" -#: options/theme-options.php:3614 +#: options/theme-options.php:3668 msgid "" "Attension: Please read License Instruction before use.
        提交關於 Github 的新討論" "以尋求説明。https://github.com/mirai-mamori/Sakurairo/discussions" -#: options/theme-options.php:3625 +#: options/theme-options.php:3679 msgid "" "Start from Sakurairo v2.4.0, plugins names in LightGallery option follow the " "form cite in official document (eg. lgHash instead of \"hash\")" @@ -3691,15 +3744,15 @@ msgstr "" "從Sakurairo v2.4.0開始,LightGallery中的挿件名稱會與官方檔案中引用的表格保持" "一致(例如“hash”將被表示為IgHash)" -#: options/theme-options.php:3633 +#: options/theme-options.php:3687 msgid "LightGallery Lightbox Effect Options" msgstr "LightGallery燈箱效果選項" -#: options/theme-options.php:3644 +#: options/theme-options.php:3698 msgid "Code Highlighting" msgstr "程式碼高亮" -#: options/theme-options.php:3649 +#: options/theme-options.php:3703 msgid "" "

        Highlight.js: Default. Automatic language recognition.

        Prism.js: Requires a language to be specified, see 如何程式碼高亮顯示動態載入的檔案

        自定義: 適用於另有配置的情況。

        " -#: options/theme-options.php:3657 +#: options/theme-options.php:3711 msgid "Code Highlight Method" msgstr "程式碼高亮程式" -#: options/theme-options.php:3661 +#: options/theme-options.php:3715 msgid "Custom Program" msgstr "自定義" -#: options/theme-options.php:3669 +#: options/theme-options.php:3723 msgid "Prism.js: Add Line Number Display for All Code Blocks" msgstr "Prism.js:為所有程式碼塊增加行數顯示" -#: options/theme-options.php:3673 +#: options/theme-options.php:3727 msgid "" "See the plugin " "description documentation" msgstr "" "請查閱 外掛描述文件" -#: options/theme-options.php:3679 +#: options/theme-options.php:3733 msgid "Prism.js: Autoload Address" msgstr "Prism.js:自動載入地址" -#: options/theme-options.php:3683 +#: options/theme-options.php:3737 msgid "Leave blank to use default values" msgstr "留空以使用默認值" -#: options/theme-options.php:3690 +#: options/theme-options.php:3744 msgid "Prism.js: Code Highlight Theme" msgstr "Prism.js:程式碼高亮主題" -#: options/theme-options.php:3691 options/theme-options.php:3702 +#: options/theme-options.php:3745 options/theme-options.php:3756 msgid "Relative to autoload address. Leave blank to use default values" msgstr "相對於自動載入地址。留空以使用默認值" -#: options/theme-options.php:3701 +#: options/theme-options.php:3755 msgid "Prism.js: Code Highlight Theme (Dark Mode)" msgstr "Prism.js:程式碼高亮主題(深色模式)" -#: options/theme-options.php:3712 +#: options/theme-options.php:3766 msgid "" "The following Options are not recommended to be modified blindly, please use " "them under the guidance of others" msgstr "以下設定不推薦盲目進行修改,請在他人的指導下使用" -#: options/theme-options.php:3718 +#: options/theme-options.php:3772 msgid "Image CDN" msgstr "圖像CDN" -#: options/theme-options.php:3719 +#: options/theme-options.php:3773 msgid "" "Note: fill in the format https://your CDN domain/. This means that images " "with original path http://your.domain/wp-content/uploads/2018/05/xx.png will " @@ -3773,23 +3826,23 @@ msgstr "" "domain/wp-content/uploads/2018/05/xx.png 的圖像將從 http://你的CDN域" "名/2018/05/xx.png 載入" -#: options/theme-options.php:3726 +#: options/theme-options.php:3780 msgid "Articles Categories (Do not display)" msgstr "文章分類(不顯示)" -#: options/theme-options.php:3727 options/theme-options.php:3734 +#: options/theme-options.php:3781 options/theme-options.php:3788 msgid "Fill in category ID, seperate in English\" , \" when more than one" msgstr "'填寫分類ID,多個用英文“ , ”分開" -#: options/theme-options.php:3733 +#: options/theme-options.php:3787 msgid "Image Display Category" msgstr "圖像展示分類" -#: options/theme-options.php:3740 +#: options/theme-options.php:3794 msgid "Specify Login Address" msgstr "指定登入地址" -#: options/theme-options.php:3741 +#: options/theme-options.php:3795 msgid "" "Force not to use the WordPress login page address to login, fill in the new " "login page address, such as: http://www.xxx.com/login. Note that before " @@ -3800,47 +3853,47 @@ msgstr "" "www.xxx.com/login。注意填寫前先測試下你新建的頁面是可以正常打開的,以免造成無" "法進入後台等情況。" -#: options/theme-options.php:3747 +#: options/theme-options.php:3801 msgid "Specify Registration Address" msgstr "指定註冊地址" -#: options/theme-options.php:3748 +#: options/theme-options.php:3802 msgid "" "This address is used as the registration entry on the login page, if you " "specify a login address, it is recommended to fill in" msgstr "該地址在登入頁面作為註冊入口,如果你指定了登入地址,則建議填寫" -#: options/theme-options.php:3754 +#: options/theme-options.php:3808 msgid "Version Control" msgstr "版本控制" -#: options/theme-options.php:3755 +#: options/theme-options.php:3809 msgid "Used to update front-end cookies and browser cache, can use any string" msgstr "用於更新前端Cookie和瀏覽器快取,可使用任意字符串" -#: options/theme-options.php:3761 +#: options/theme-options.php:3815 msgid "Backup&Recovery" msgstr "備份恢復" -#: options/theme-options.php:3763 +#: options/theme-options.php:3817 msgid "Backup or Recovery your theme options" msgstr "備份或恢復你的主題設定" -#: options/theme-options.php:3774 +#: options/theme-options.php:3828 msgid "About Theme" msgstr "關於主題" -#: options/theme-options.php:3780 +#: options/theme-options.php:3834 msgid "Version Info" msgstr "版本資訊" -#: options/theme-options.php:3785 +#: options/theme-options.php:3839 msgid "" "" msgstr "" -#: options/theme-options.php:3791 +#: options/theme-options.php:3845 #, php-format msgid "" "Theme Sakurairo Version %s | Internal Version %s | 項目地址" -#: options/theme-options.php:3796 +#: options/theme-options.php:3850 msgid "Update Related" msgstr "更新相關" -#: options/theme-options.php:3802 +#: options/theme-options.php:3856 msgid "Theme Update Source" msgstr "主題更新源" -#: options/theme-options.php:3808 +#: options/theme-options.php:3862 msgid "" "If you are using a server set up in mainland China, please use the Upyun " "source or the official theme source as your theme update source" @@ -3865,11 +3918,11 @@ msgstr "" "如果你使用的是架設在中國的伺服器,請使用 UPYUN 源或主題官方源作為你的主題更新" "源" -#: options/theme-options.php:3815 +#: options/theme-options.php:3869 msgid "Theme Update Test Channel Disclaimer" msgstr "主題更新測試通道免責聲明" -#: options/theme-options.php:3821 +#: options/theme-options.php:3875 msgid "" "Please copy the text in quotes after ensure that you have carefully " "understood the risks associated with participating in the test and are " @@ -3882,55 +3935,55 @@ msgstr "" "內 \"I agree and am willing to bear all unexpected consequences\" " -#: options/theme-options.php:3827 +#: options/theme-options.php:3881 msgid "Theme Update Channel" msgstr "主題更新頻道" -#: options/theme-options.php:3834 +#: options/theme-options.php:3888 msgid "" "You can toggle the update channel here to participate in the testing of the " "new version" msgstr "你可以在此切換更新頻道以參與到新版本的測試中" -#: options/theme-options.php:3836 +#: options/theme-options.php:3890 msgid "Stable Channel" msgstr "正式通道" -#: options/theme-options.php:3837 +#: options/theme-options.php:3891 msgid "Beta Channel" msgstr "公共測試頻道" -#: options/theme-options.php:3838 +#: options/theme-options.php:3892 msgid "Preview Channel" msgstr "預覽測試頻道" -#: options/theme-options.php:3845 +#: options/theme-options.php:3899 msgid "Resource Control" msgstr "資源控制" -#: options/theme-options.php:3851 +#: options/theme-options.php:3905 msgid "Provide Critical Frontend Resource locally" msgstr "在本地提供關鍵前端資源" -#: options/theme-options.php:3852 +#: options/theme-options.php:3906 msgid "" "Enabeld by default. Critical resources are those resources whose loading " "performance will have a significant impact on the user experience." msgstr "預設為 Enabeld。關鍵資源是載入性能將對用戶體驗產生重大影響的資源。" -#: options/theme-options.php:3859 +#: options/theme-options.php:3913 msgid "Provide Other Frontend Resource locally" msgstr "在本地提供其他前端資源" -#: options/theme-options.php:3860 +#: options/theme-options.php:3914 msgid "Less important frontend resource in the theme's folder." msgstr "主題資料夾中不太重要的前端資源。" -#: options/theme-options.php:3867 +#: options/theme-options.php:3921 msgid "Provide 3rd-party library from public CDN" msgstr "從公共 CDN 提供第三方庫" -#: options/theme-options.php:3868 +#: options/theme-options.php:3922 msgid "" "When disabled, 3rd-party dependencies, which have been built to bundles " "along with themes's entry script, will be loaded from the exact same origin " @@ -3939,15 +3992,15 @@ msgstr "" "禁用后,第三方依賴項(已構建為與主題入口腳本捆綁在一起)將從與關鍵前端資源完" "全相同的源載入。" -#: options/theme-options.php:3875 +#: options/theme-options.php:3929 msgid "Public CDN Basepath" msgstr "公共 CDN 基本路徑" -#: options/theme-options.php:3887 +#: options/theme-options.php:3941 msgid "Vision Resource Basepath" msgstr "視覺資源基本路徑" -#: options/theme-options.php:3888 +#: options/theme-options.php:3942 msgid "" "This link directory structure needs to be consistent with the Sakurairo Vision " @@ -3959,31 +4012,31 @@ msgstr "" "Sakurairo_Vision\">櫻井眼視覺 存儲庫保持一致,否則可能會出現一些資源404。" "默認採用 UPYUN 提供的镜像源。" -#: options/theme-options.php:3894 +#: options/theme-options.php:3948 msgid "Theme Sponsors" msgstr "贊助資訊" -#: options/theme-options.php:3899 +#: options/theme-options.php:3953 msgid "" "\"sponsors\"" msgstr "" -#: options/theme-options.php:3904 +#: options/theme-options.php:3958 msgid "Theme Contributors" msgstr "貢獻者" -#: options/theme-options.php:3909 +#: options/theme-options.php:3963 msgid "" "\"Theme" msgstr "" -#: options/theme-options.php:3914 +#: options/theme-options.php:3968 msgid "Privacy information" msgstr "隱私資訊" -#: options/theme-options.php:3919 +#: options/theme-options.php:3973 msgid "" "

        The theme respects your privacy

        \n" "

        However, when you use a service provider pre-populated by the " @@ -3999,11 +4052,11 @@ msgstr "" "

        您可以通過本地化與主題相關的資源來減少發送給第三方的資訊,這些資源" "預先配置了供您修改的選項

        " -#: options/theme-options.php:3927 +#: options/theme-options.php:3981 msgid "Send Theme Version to Fuukei" msgstr "發送主題版到 Fuukei 官方" -#: options/theme-options.php:3928 +#: options/theme-options.php:3982 msgid "" "The theme will only send time and version information to Fuukei officials " "and the data will be cleaned regularly and used only to count version " @@ -4012,11 +4065,11 @@ msgstr "" "該主題只會向 Fuukei 官方發送時間和版本資訊,數據將定期清理並僅用於計算版本更" "新。" -#: options/theme-options.php:3934 +#: options/theme-options.php:3988 msgid "Reference Information" msgstr "引用資訊" -#: options/theme-options.php:3939 +#: options/theme-options.php:3993 msgid "" "

        Fluent Design Icon Referenced by Paradox Fluent Icon Pack

        \n" @@ -4031,11 +4084,11 @@ msgstr "" "apk/com.muh2.icon\">沐氫圖標包

        \n" "

        白貓樣式Logo參考原主題作者白貓,由 Hyacm 提供方案並引用

        " -#: options/theme-options.php:3946 +#: options/theme-options.php:4000 msgid "Dependency Information" msgstr "依賴資訊" -#: options/theme-options.php:3951 +#: options/theme-options.php:4005 msgid "" "

        Options Framework Relies on the Codestar Open Source Codestar Framework Project

        \n" @@ -4053,7 +4106,7 @@ msgstr "" "

        ChatGPT 相關能力依賴 HaoZi-Team 開源 ChatGPT PHP 專案

        " -#: options/theme-options.php:3958 +#: options/theme-options.php:4012 msgid "" "\"Theme Date: Sat, 7 Oct 2023 13:53:32 +0800 Subject: [PATCH 35/39] Style:post-squares --- style.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/style.css b/style.css index 9aa6e89a..75cb0ff7 100644 --- a/style.css +++ b/style.css @@ -1373,9 +1373,9 @@ h1.page-title { overflow: hidden; margin: 10px 0 0 0; background: #000; - width: 96%; + width: 97%; left: 50%; - margin-left: -48%; + margin-left: -48.5%; position: relative; border-radius: 15px; } From 6e2dc19cb06a95c6839d5887120a175360e012ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sat, 7 Oct 2023 13:53:39 +0800 Subject: [PATCH 36/39] =?UTF-8?q?Revert=20"feat(vaptcha):=20=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E4=B8=8D=E5=A1=AB=E5=86=99vaptcha=5Fvid&key=E6=97=B6?= =?UTF-8?q?=E4=BD=BF=E7=94=A8vaptcha=E6=96=B9=E5=BC=8F=E9=AA=8C=E8=AF=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 82b22b5ce1fc3954273766de5431d66678876c84. --- functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions.php b/functions.php index 66ed83f5..d372abe1 100644 --- a/functions.php +++ b/functions.php @@ -2384,7 +2384,7 @@ function registration_CAPTCHA_CHECK($errors, $sanitized_user_login, $user_email) } add_filter('registration_errors', 'registration_CAPTCHA_CHECK', 2, 3); -} elseif ((iro_opt('captcha_select') === 'vaptcha') && (!empty(iro_opt("vaptcha_vid")) && !empty(iro_opt("vaptcha_key"))) { +} elseif (iro_opt('captcha_select') === 'vaptcha') { function vaptchaInit() { include_once('inc/classes/Vaptcha.php'); From 6cb49fcbf2d9384c0f9b80406f360ad19642b7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=93=E5=B7=9D=20=E7=9E=B3?= <61381142+mirai-mamori@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:11:48 +0800 Subject: [PATCH 37/39] Daily Update --- opt/languages/ja.mo | Bin 112954 -> 113166 bytes opt/languages/ja.po | 20 ++++++++++++++++++-- opt/languages/sakurairo_csf.pot | 18 +++++++++++++++++- opt/languages/zh_CN.mo | Bin 92290 -> 92547 bytes opt/languages/zh_CN.po | 20 ++++++++++++++++++-- opt/languages/zh_TW.mo | Bin 92295 -> 92517 bytes opt/languages/zh_TW.po | 20 ++++++++++++++++++-- opt/options/theme-options.php | 8 ++++---- 8 files changed, 75 insertions(+), 11 deletions(-) diff --git a/opt/languages/ja.mo b/opt/languages/ja.mo index f9df8c875617d290e8e24f987265b2a5e661903d..57d69c55e3ec0d794d8ad102da2d8d6bbcc6e3d0 100644 GIT binary patch delta 18865 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 F{eN>(EHVH9 delta 18676 zcmYk^2YgT0|HturiNuHzAwgnGVkR+SuNaBZnkDv*t!9)OUpq$4pthEpEoy6xT16=} zYHuCXC`C)F<^Otr&&luaK7PmZe9k%d+;h)8=YGFQ`v1>(?)&vqU(b!~KJy%oZfPAS z6sv|f&NLs#X;)sQjx)KQGnft^TA!jX@k<-O!OXKg;mpSU1q zbR3TpNk$!1vevNHwKlXiwI*2GJ5u9M#BiPT{S_j`KNg zYU((w_{;^h9MZ-k@;7LWjk^**27R7h(S05 zOXDikg)U+MK0!@wnoh>@s0;VT2%Ly&zX9{&5!3~L#@y(1HaC)|v&WneMS(7yfZ;d< zwI&v0U0j2S_y~(&a~`lB!7vQQai}R>glrz?9IBs7SPPS+XnMc16zfW&Yg26`O};h(5&=*h)x zX?2I8rYsWmNaC>uwnIJpC8))=1~s4^sP^Yj7kG%8V&CrO{6eT3s(`9*h+&wBS8y8o zX#aQbVJ^@IH4{V87bl|@-%RUL)IdJRY`6o}@lh;-w^0}H?P=;uTC1UEs1fSMI-ssI z7}IJ0Pb8DeWkj~(vtH&I?LamB9(89oFdhDb8i3Q=tdRiJK=Y!?OQ4>0RckZUBkPG; zq$5x>GarMwzO$Z;ruHEE;ThE8yNtTvFQ_|sfVzWMr~zf;<)FAEs^eG;$9AY^KOS`h zTTuNUMm@T7m>-{@N82o0U(-

        Q1Vn7Dodtj0vba7=a~m2I_*ltrt*>>JJ;|=w~hv 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 B)?5Gp diff --git a/opt/languages/ja.po b/opt/languages/ja.po index 2c853396..09902024 100644 --- a/opt/languages/ja.po +++ b/opt/languages/ja.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Codestar Framework Modified by Fuukei\n" -"POT-Creation-Date: 2023-10-07 12:36+0800\n" -"PO-Revision-Date: 2023-10-07 12:51+0800\n" +"POT-Creation-Date: 2023-10-07 14:06+0800\n" +"PO-Revision-Date: 2023-10-07 14:09+0800\n" "Last-Translator: \n" "Language-Team: \n" "Language: ja\n" @@ -3230,6 +3230,22 @@ msgstr "" "コメントエリアの入力ボックスに表示する顔文字を選択します。すべてのチェックを" "外すと、コメント入力ボックスの顔文字機能がオフになります。" +#: options/theme-options.php:3068 +msgid "BiliBili Emoticon Pack" +msgstr "BiliBili 顔文字パック" + +#: options/theme-options.php:3069 +msgid "Baidu Tieba Emoticon Pack" +msgstr "百度貼吧顔文字パック" + +#: options/theme-options.php:3070 +msgid "Emoji" +msgstr "" + +#: options/theme-options.php:3071 +msgid "Customized Emoticon Pack" +msgstr "カスタム顔文字パック" + #: options/theme-options.php:3079 msgid "Customized Emoticon Column Name" msgstr "カスタマイズ顔文字コラム名" diff --git a/opt/languages/sakurairo_csf.pot b/opt/languages/sakurairo_csf.pot index 91087332..627357ee 100644 --- a/opt/languages/sakurairo_csf.pot +++ b/opt/languages/sakurairo_csf.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Codestar Framework Modified by Fuukei\n" -"POT-Creation-Date: 2023-10-07 12:36+0800\n" +"POT-Creation-Date: 2023-10-07 14:06+0800\n" "PO-Revision-Date: 2021-06-26 16:15+0800\n" "Last-Translator: \n" "Language-Team: \n" @@ -2993,6 +2993,22 @@ msgid "" "to turn off the comment input box emoticon function." msgstr "" +#: options/theme-options.php:3068 +msgid "BiliBili Emoticon Pack" +msgstr "" + +#: options/theme-options.php:3069 +msgid "Baidu Tieba Emoticon Pack" +msgstr "" + +#: options/theme-options.php:3070 +msgid "Emoji" +msgstr "" + +#: options/theme-options.php:3071 +msgid "Customized Emoticon Pack" +msgstr "" + #: options/theme-options.php:3079 msgid "Customized Emoticon Column Name" msgstr "" diff --git a/opt/languages/zh_CN.mo b/opt/languages/zh_CN.mo index 145319e7e26246ff490fdd078730dad0554e534f..d40aae3c6c9ca0000c7e0867cef1d8863c435bec 100644 GIT binary patch delta 18907 zcmZYH2YeO9yZ`Y$5JDgj2)zUdy_Zlz3xpPmR4Ga?2`yAXKq+zvO{#(vDI%ius)97> zB8UirND)y$dKFPYr2RkNGf(_;@7?>Fyytmlc6N7mcF#%hcgG%2HSRk9$P}LUI;QY>-tUb)ZvozK;(75ny_x47#e2;? zZw>B#+4H`nf8SP~SDWJ%eZ})8a(pk5N)8hDFcj0g>aHLwDvrRWSPVmOnCZvV#FH=+ z&cM9*36{Wp7>{?b0=8)DdG&ETa*p0%oWb$E9PQj0twJ^2!j4#_z2|ksIoKB;pazKV z;CXN2Dold~=p2TnP;qsvj&Z0HOTw}^8!O^|ERT=SUxiAkPM%i|dtiQ?izRU@*2K%G zdswh@;GTI=n1wh7GvLdZ1G`})jzF!Ag;*Fjqh{nB*1*(V7z^XNF#lRii6k`O1T2ON zFap2AYcBg&D4s_3e~x)DM>n^4qcJCO%Wi&m;C>{u zLlWx1tFQAFr2gY(^3*j=3qS zQ_&PIMqSYc%#3?2K56aOP$%{fb)s3iyL%ghn&RfDafYI1bOP4HC0GWpqOLeAXD`d5 zPT1dwN&za}P|xLf)RfOet@f3uDf|p|i@wEJJdZrTUcR1g@s&WGU{zHAS5OBUh&rLk zsQs6rE^xbR_j^aF6ee*U&th0FH+45q2e^xxnMW9mp}pN=%w$HQ`jx?qSQT~Pm#`3a zM~y$(+BcYcFoT}|<5YBJ7f}a#fT=Jfkt^|WLa2PvKJMOCMa9igSJn;H|1H!Bj6o`n}tuYikq7K*_bG^Wp2LH82Y`@M_eR?8bC>1PkI>)C=Yr zmcsDO=h+&W}_&CNgo z)FP^kI+0G85&NKKXe18B85o7ZgWS8n3hDwEVkE04Ox{-#uP0^Lz- z;4O0j<|W>OS@0BUpj)WLcpuZ_zo>g3!sT<$UL|uSt|HDojAtId#!7E>ICV-M8oe*?4NEYt<9#7y|Lc?NZy zTNte8|3RSQc~7wm4MD?sCt!Ef0i#E_6RC?Ds3|Jn6}5=^qaMdmI2FfYM+_V3W~wj7 z5xBVE14;zkm zk6UldOgt8~IOk$^+=fwj97|)$3GPIrP-|)Y1m<7&ZYl{)=^`wLt1&13j9Sfqqoz7^ zqFW2OFb8o#5%-{Gw8YzXYf$5aP2wUk&m^XV+4ee<&<;Oi8H}6E zpg08I!Ou`LRBH;49)67KSCAX76KIJ%`rb}#j%B9t0feKm0UpBT7(U(2$X0AmeA7>* z5tTTOqAPmWT!{(9dvPNce%CF&pD-2iZSy_`5&wgFik@1WWrllG<}?eNQDzNHOMibO zOSHx`B)Xz*MIVdbKy^&A{4~r!Jl|Y}p~TxTH-3$|@FHrBJVC9Ah?(w16^liPyJDE0 z|F@~=v6_n+aTRJNwqr>=fvijKIfnYEzvtSg&vNg9<)}B~e$*nnj>RzBY&SEpn3=d9 z>O|UNdK`&?=YKMlawKL15==R22EMWQB$g*Whn%sOVUByj z&ER@$f(Nk!4%XPFG4+LOU<TaM%KOWusA7`YtN}J?6*Ls2O^Mnwj8* z?&CHCs(k|LDOiD;;z+n_;5w8=T~Q1c!gi?VcQk6C z0~k0l)PYW;2EJtN_fRMD$l9M_ZsN3y+}bFDyuH0Ds2SSqr=kINU<4k*Jb2aOpby=S z`LP7~3aAt7jM;GOr@6;Gk2I^$w@OY5O-WiyLAqt;Mw)ME7yr=sV3D(VF0q7JYT zb??tu{+8uKK5{cw8Z{#^sD5#%wbK^!;y~0)yn{M{S(pnyL7n(6%%|u76cyc*2dIug zOPpCyx26zk#|o&KX@+_#`k6_n0q3H|S&x}<2Wsk%Vc?Bv`TM9BUGT>`aX-^RMTvr_ zDJhLPFcx(MZBeVg6Y5rVM_utCJdEQlZt;nG3KB3S`RS+`nu#fJ0qPbl!s>V$1Kp)Y+_&7#NCfJH%AjsR3~DCYqt;F@)CmnnjrX>-FTrTy^{88W z1$E_rqh>m41@o_aTz3U81#F2L;2LTN-%2;t;i%PL2>bZ>h(%rL_EoO`FIbTHA!-rl zUdjo@qHbOlv3D_Tppa%F2E8%_A zOch(_rnD~VMB`Bhn2x%oORzX@xAx0elsJQby}S37Q9JZN9bhXl8cA(tLG{m%dU{G?n4bTdRP^F#ifOSs>WT)Ub{K*>!O`Xf z)IFYN?W-^y@kZ2%?m<2GKcW`%J>)=M@MnAgVOG=$55pXK{>M`pPht^jN(y|=>lNcs zi)=4ypv$Ox{V(bSvTk(0`IN^5;x5<*ze4rPxyk*`R}nK1Pr`gS4|PFXF&D@8c2fz* zv#2Y+jXJ{zsF?`*!adJvFp0P->V&^Uop7zq&M{bucn_AwI~M2O;=aH%#LDDH;(XkQ z{t8r@Zgs0U$=qVzF$->UJGR40^q+~*co28vGt{lywcV|uL#Qb~iCQa{F)Q9g&7Ak8 zyTCkO+VfwMggR71Ey5N!1v{b!x`sLN0cz?p?r^I+JL&*sQTa+{4C-mAiy;_~8ow{< z1(t-G*~L4Uf9<%Ggsxx>D&B1FMBTgns1y0oyo61N?_*(%-O1+!_P_zS3$-Rn@8Wj_ zoQW;4BGWYwCtx)+$9tP<+Vn`0*IfFp1K>cBTJ3;u(dG5ucmF`XaPzdnw}c9r^i>S1c)2B?1i=2U7^>4m!TRj31git4!A@&~aX@lo?WYO!Y9@Ai+x zGQ{!N3TI+-yn?)3y-HuZKVDzN2;yP~0vF)-;;86AeNd}@Flx%jpw4^-mc&Jv0}rA4 z|AzVSCXT_h2i-lLiW!M#U|n2-x}YlSn@EhYaE0+!CR;c3Hr`GHJLCs@k^K=d!laHB#hwr-a;yQaVu(3 zoK^$gMeP`R#C@m~#dO3iQ3vXRui%^55WmMdnB%BBa0k>3%tAe`r?Cx&eeZc6V0ZMZ z;ydONAL4rA>c@F`;7wHfnID`(Pw)f~XX3{`yoMj*>XWP&Y;?-`FD@fqbDC!#Up~Wn z!04a&qXT|p4m->IFC0m`z>uqa=13rEd+Zn4fsozUl~3)t;qzjuI&R_6)pkoFJPF*~Yb zA&X0*o`x!z7h7Xhd>u>RIxL50P~)Y!&ubQIVGJI?(wOp3_b($+7_H}j7?qYZtP3Ql zaJdOk8PnoI)R`|gH=+jGWAR;!AEQpF_}}hVump@He&6ELn3Fj4f%|8;!dQ~yd+n*D z$BC!|%|<=nOE42|M_us|^R~5zKD2MeW^>dDjKD&;3A5r)sBwNr%~Xni+<2wYuf@}Z zN^$InIdG!67&WC^QCED!^4TA`0m@+x^3BcOmQO+*_#@PTH(UOYc^&hUPyH|RuPZM8 zuX}SvV>9C6sC)elY7JaQo#-u$#>bW~|Ja>KRn&>JMICUEIUY6s`{q*fGjrEt=3gBS zlhBT5P-lM2I{2QrGYv!aD~H*!23El~sF`^OwcifZI6t6H_zLP){B8MMPhG##sPXFh zspO>60<}XQjKLA8E8l`?a2M*p-=Ge30oDJ3#lg>99ATD1^^3v0*b-;qAPmA(&)xX` zv{W=uxFzzN#mus1G=|f!24=zL7>V7nAWpFSD%1;TmwCkU=TOJ_19f3O{x7qS`yWC@ zXBy%21*Wb%YHH#z54J?@@S5e{FvpuS%@0vizsB5U9yc$W56!eGbR0kLaVk1M3Di_a zSzJBPfrW`0xH)Pn<1J1?ExOqlcmbhS^%-mb7j?zyQ~CmnIgeQtb-`^g1IPFJQqdKU zG$)}BGzWFyO{jqnq7Hb&OcCS;&W#$dvc*kN{S#4(Zz>kWPf_EYL5*_@{i+0|awm|- zEP={bHd~-}Otg3uHX@#5`SYj~zK^>1;lXaaNYs9%QSG%X?t+@>!NER%;LJyn&>6pn znu$%;aW85Lf5ZWJ8TGieO6?1L6-z?JComR$A-=#@v)ZT&n2tJu<*27@8%E*@^RE!U zYsi|$HIy}5piX2E=El*e0T-aAdZXnJq1Mh7)D_*f_6KIVw61>v)Hqel*5+$|>o5&9 z(8uN~)Cqiwx_3LVGhQ+4@u%<)i9f*wSSOw9{|oBVOHT6C92`aU3S%P1FHeXY>WW{dPbdV5xc0%p2|td}ee&eYU)3@kK15=RZd# zw}|Ru1v(7ES8az#DT<(unlfQooI##U*OZTY6Q>!91?>`w8D@)zQ8}Db;M%CM^IDx z0Bd8pyuQGHKr|S20-u_9P%~K~pD*yc;%e+ldJi>yTjfLEVx;)?vIk z6ZKerh)+jKzPT*1|K?ej!ENOjJPiujcf74XCI?YisbM z&UhMz;bPR(uebbu^E7Ipo2bS5(BgDO-HGKyjgtq}uN>-xYM^dO0}TB4Kh3D97>#on$d@-1GOve3;Z6@6?H;=QEO*3hHKTn zLq#1wGFO=EQCI#2>I4s?z7gHA_Rtb;<}#TzP$$$ITjDa*xc{II_#9&~LrHg`&C#!W z+tCt9s2$$HH*gN>iqn^JQ(6SoUc!trtDt5s)@*`$)3vkqDVCp!fkkX?DaG@z=lhs- zOk3I=Al%G>x@Y+;E{=hFY1Tju_!4Sr6R;l+L!Ia)RR5c(ehQ#FZ^>LiCtUEwS)YO)@xDIO3HbQ+{Zfp5Is1q23T02uv$6e*8 zq62NW4o6S}UPV1#4=^+Si`g)&oExYx>I!S3t}xE>EzQ2>c+~id%umg)O#dk=5p=kL zT4cdd?f}J5XIL9GKugq#^)QE`PG|zA#t%@7bt&qWZMS&8#b;6DT(iar#YAWw+b)8g4x+z#teSAGz6<~J~meyOVZ0{?w*mTK+v%V2ep6I zI_?G31a$)OsC**o0!Cq4oQ%5i*%)~Kmr~I?eGTf5#wX0!y6(&58uK(p(w?%Ovyd5w z#mV=?k~jm0;||og(Q&T5vpLE9TNhWcNsNK%0}+9AuZ~JGg+L^EZT_YUkznRXn+{&*c?j{cSJq6ld(E3M6H3-SQjH- z@&*38f$mt7_z@1mDvjL*tVWHy2ep__n7`m);%kll?#$XZaUFZ17RLzGJ9~=dH()2? zeW+C(*_8JNZ@?JT1-#tMJ(itOS00c0l`Rpqh?6Y87S(^FxyNq}M^IDuBkBNuT0TQ_ zU*JEX%!cL2H^e$P9QA3p1N95c6V#vGr?hal<`@c7JtU!xvJkbpmtjlXg^e-%RX63GP`6@{#YfGsw(iz6!-cfZ zG)uR0@gdaX+@rnEyN#JUkk|9?b#xs*z!QX3I{Cc4n69(WTZBh(1NQ6UjOgm~mJ)x5 zmvB%wpEm>B#QVIpc-5Sh;QlsLtGmnpj3a5E)WaFnljpw|i7`~PsIH@~ykswDJ=7bl z6YAbhz*le@w!%x6uiV=$s+y>NjZyoxw0MM>gnGIrSv;>d&%bt9OhT)4xixIT0>rye zujGrCZ<^>1&>FQ^J6Jrx9BPh2p3eWXyP$=`7(UsK;ggQj2G z4vId{oOb^je%zzvqC*GVMq@|(i4LDqe?~od%S`=iavzYGg|jK?t-TQS(-dv1QR}2D zZMuEq@c^YL`S)-Fxs%j8==tZ1j`thM%p_wljPjJCZJ5KW$H|qW-WF@wmAp-#L<-+4 z{@b$B<|95y{w8L^wjzpm=c$KBGmI!j!^VJ z&HRym`h;tZL$EJ)C(pOAz(2o|3j7UmJh5KOjcKc=B-9^bbf@N(%}|GA4=cgY)U`szuLj{&M3!z^T}(ghgHa>qJGT! zl&4+aCl;#%+dlfdY6n%Ef;t~Fp8qF)T&FRO4Wenc5P*xCkq3;Rm+VlnT z3Z;jF7q+If541itF+T^oXz^TpjWU%|m;B)rw*I0C+LGiuMPTD~AK1Plw}x5>@%NNV zF6}*`o`SYP6m9YBudN{Y5d4b5$G$g(_Fbs$Z%R7rSApE|KwdYM?I=axYSxe}MyEI> z+5RA|PB|Os%pa;5Fvc|netu|q1*xgux3-^gJ8@n+!EN}Ql0>d0y39Q2Pk~a^JwxiU<@USdM?~d(N;~3Y*Q`fE5d) zS--wsUnS|IByR;6qzI)Qr9R2A>`>x`_7gTJ-y;J5>z8-vlkSD~WkXPueb1A4Ac`H~GMSZpn8N?=fvJvtKmzfojzHYeaG~iHsOe+?RSJ_0!bTQ)*E^ zN_msK{;jVcZYSPP;aj!$nBq}}5jSPUosX+MOSF(2hNeahR|4Ty_a|Lo*Gq>YV#|FI4; z@S;n43#tEQoh=n$6#2oHNX3AS=u;hMVqR=biKD)iJ~gNxp#F?9iSmejKP6v=`c3Ll z6gU5ptqO_HDa|Oa2O5#io2dWcx&(f{#m`U3C0QROk5S)caWNc3u7bq_)Pd~>#?lr? z{u}H_JXG&;ZP_UMskgWI6XF$g%tL&TGL8BKoPech8-n8~+MZLwx!UWrucBz1hOMzX zeIDW+$~}s<8@8Y7f%o49I{#=pDtVAHj#8G~21;A%g8!1x zIunnlUYs(U@+$FFY(`1m($nuD2+(x15XI&m0y^rq6lW+gslTgd#;T_EKa9qLBo@(7+@`-j^{wP*;dBhQ0V)t{8%23PP;)RqELtzWNe*(1^fBeHvOW5HV$uR1T@moqU$`Q)X zw6#QSL9|!2gRQ0B(GBeV>zciPXsbxBq4k+Tehd8~DQWfmAE)76%2rBtIxe*xlL;bM zn6}y^vSA%8$Ic_M1|@y+0cm?kX+yk`{AlW(s2{;Eh^tVRuwU}_Gxdi0{@2-(U*H_8 z|HV$R^sJ95$>qc;#MAMVjSx%yUFw%;{|&oXehBe4t2bx-EA*R5nM!UJYTHPk=M;Yo z9p0nz2Muq!w!q(R-lM+I;$${ZiA)Yqf7#Sl)dn3)eKccL#0Cy5&TYB%|M?~cG6)k|vKK=jfd1P>&jdcf4N*&aHV4uW| zhlVfc8C0=aRJo14E-cEO_1gShSGF&|zG>5y87rk)mc6Nc`+`G0{^07|x38>we@jxB&)5F{0o<>hxBvhE delta 18663 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 diff --git a/opt/languages/zh_CN.po b/opt/languages/zh_CN.po index d42bf32d..a5ca4d3c 100644 --- a/opt/languages/zh_CN.po +++ b/opt/languages/zh_CN.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Codestar Framework Modified by Fuukei\n" -"POT-Creation-Date: 2023-10-07 12:52+0800\n" -"PO-Revision-Date: 2023-10-07 13:11+0800\n" +"POT-Creation-Date: 2023-10-07 14:09+0800\n" +"PO-Revision-Date: 2023-10-07 14:10+0800\n" "Last-Translator: \n" "Language-Team: \n" "Language: zh_CN\n" @@ -3102,6 +3102,22 @@ msgstr "" "选择要在评论区域输入框中显示的表情。全部取消选中可关闭评论区域输入框表情功" "能。" +#: options/theme-options.php:3068 +msgid "BiliBili Emoticon Pack" +msgstr "哔哩哔哩表情包" + +#: options/theme-options.php:3069 +msgid "Baidu Tieba Emoticon Pack" +msgstr "百度贴吧表情包" + +#: options/theme-options.php:3070 +msgid "Emoji" +msgstr "颜文字" + +#: options/theme-options.php:3071 +msgid "Customized Emoticon Pack" +msgstr "自定义表情包" + #: options/theme-options.php:3079 msgid "Customized Emoticon Column Name" msgstr "自定义表情包名称" diff --git a/opt/languages/zh_TW.mo b/opt/languages/zh_TW.mo index 8a019014c28c57ab0e5a7259874166e3bc7dff9d..fe1a7acf046f7551a0887b876e2a7bf056ea56d5 100644 GIT binary patch delta 18874 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 I-ahH@KLz2HDF6Tf delta 18655 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 A8vp __('Select the emoticons to be displayed in the comment area input box. Uncheck all to turn off the comment input box emoticon function.','sakurairo_csf'), 'multiple' => true, 'options' => array( - 'bilibili' => 'BILIBILI表情', - 'tieba' => '贴吧表情', - 'yanwenzi' => '颜文字', - 'custom' => '自定义表情', + 'bilibili' => __('BiliBili Emoticon Pack','sakurairo_csf'), + 'tieba' => __('Baidu Tieba Emoticon Pack','sakurairo_csf'), + 'yanwenzi' => __('Emoji','sakurairo_csf'), + 'custom' => __('Customized Emoticon Pack','sakurairo_csf'), ), 'default' => array( 'bilibili', 'tieba', 'yanwenzi' ) ), From 92986b6bef252c0b660862a05062c50bc6851084 Mon Sep 17 00:00:00 2001 From: bymoye <964907582@qq.com> Date: Sat, 7 Oct 2023 15:34:33 +0800 Subject: [PATCH 38/39] =?UTF-8?q?fix:=20=E8=87=B4=E5=91=BD=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions.php b/functions.php index 66ed83f5..50dbbb33 100644 --- a/functions.php +++ b/functions.php @@ -2384,7 +2384,7 @@ function registration_CAPTCHA_CHECK($errors, $sanitized_user_login, $user_email) } add_filter('registration_errors', 'registration_CAPTCHA_CHECK', 2, 3); -} elseif ((iro_opt('captcha_select') === 'vaptcha') && (!empty(iro_opt("vaptcha_vid")) && !empty(iro_opt("vaptcha_key"))) { +} elseif ((iro_opt('captcha_select') === 'vaptcha') && (!empty(iro_opt("vaptcha_vid")) && !empty(iro_opt("vaptcha_key")))) { function vaptchaInit() { include_once('inc/classes/Vaptcha.php'); From d3ba46345f96b959635aacf66206b256e5280ae0 Mon Sep 17 00:00:00 2001 From: KotoriK <52659125+KotoriK@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:57:07 +0800 Subject: [PATCH 39/39] chore: update js bundle to 024f2c5 --- js/1812.js | 2 ++ js/1812.js.map | 1 + js/245.js | 2 ++ js/245.js.map | 1 + js/249.js | 2 -- js/249.js.map | 1 - js/2692.js | 3 +++ js/{5522.js.LICENSE.txt => 2692.js.LICENSE.txt} | 4 ++-- js/2692.js.map | 1 + js/362.js | 2 +- js/3906.js | 2 +- js/3906.js.map | 2 +- js/3994.js | 2 +- js/{7258.js => 4050.js} | 6 +++--- js/{7258.js.LICENSE.txt => 4050.js.LICENSE.txt} | 0 js/{7258.js.map => 4050.js.map} | 2 +- js/4617.js | 2 -- js/4617.js.map | 1 - js/4886.js | 2 ++ js/4886.js.map | 1 + js/{5276.css => 519.css} | 2 +- js/519.css.map | 1 + js/5269.js | 2 -- js/5276.css.map | 1 - js/5522.js | 3 --- js/5522.js.map | 1 - js/5740.js | 2 +- js/5740.js.map | 2 +- js/5775.js | 2 -- js/5775.js.map | 1 - js/593.js | 2 -- js/593.js.map | 1 - js/{1377.js => 6001.js} | 6 +++--- js/{1377.js.LICENSE.txt => 6001.js.LICENSE.txt} | 0 js/{1377.js.map => 6001.js.map} | 2 +- js/619.js | 2 +- js/619.js.map | 2 +- js/6531.js | 3 --- js/7003.js | 2 ++ js/7003.js.map | 1 + js/7104.js | 3 +++ js/{6531.js.LICENSE.txt => 7104.js.LICENSE.txt} | 0 js/{6531.js.map => 7104.js.map} | 2 +- js/7508.js | 2 -- js/7508.js.map | 1 - js/8013.js.map | 1 - js/8506.js | 2 ++ js/{5269.js.map => 8506.js.map} | 2 +- js/{8013.js => 8777.js} | 2 +- js/8777.js.map | 1 + js/9001.js | 2 +- js/9001.js.map | 2 +- js/{5053.css => 9088.css} | 2 +- js/{5053.css.map => 9088.css.map} | 2 +- js/9372.js | 2 ++ js/9372.js.map | 1 + js/anf.js | 2 +- js/anf.js.map | 2 +- js/app.js | 2 +- js/app.js.LICENSE.txt | 2 +- js/app.js.map | 2 +- js/lg-0.js | 2 +- js/lg-0.js.map | 2 +- js/lg-1.js | 2 +- js/lg-1.js.map | 2 +- js/lg-10.js | 2 +- js/lg-10.js.map | 2 +- js/lg-11.js | 2 +- js/lg-11.js.LICENSE.txt | 2 +- js/lg-11.js.map | 2 +- js/lg-12.js | 2 +- js/lg-12.js.map | 2 +- js/lg-2.js | 2 +- js/lg-2.js.map | 2 +- js/lg-3.js | 2 +- js/lg-3.js.map | 2 +- js/lg-4.js | 2 +- js/lg-4.js.map | 2 +- js/lg-5.js | 2 +- js/lg-5.js.map | 2 +- js/lg-6.js | 2 +- js/lg-6.js.map | 2 +- js/lg-7.js | 2 +- js/lg-7.js.map | 2 +- js/lg-8.js | 2 +- js/lg-8.js.LICENSE.txt | 2 +- js/lg-8.js.map | 2 +- js/lg-9.js | 2 +- js/lg-9.js.map | 2 +- js/page-bilibilifav.js | 2 +- js/page-bilibilifav.js.map | 2 +- js/page.js | 2 +- js/page.js.map | 2 +- js/polyfill.js | 2 +- js/polyfill.js.map | 2 +- 95 files changed, 91 insertions(+), 91 deletions(-) create mode 100644 js/1812.js create mode 100644 js/1812.js.map create mode 100644 js/245.js create mode 100644 js/245.js.map delete mode 100644 js/249.js delete mode 100644 js/249.js.map create mode 100644 js/2692.js rename js/{5522.js.LICENSE.txt => 2692.js.LICENSE.txt} (71%) create mode 100644 js/2692.js.map rename js/{7258.js => 4050.js} (99%) rename js/{7258.js.LICENSE.txt => 4050.js.LICENSE.txt} (100%) rename js/{7258.js.map => 4050.js.map} (99%) delete mode 100644 js/4617.js delete mode 100644 js/4617.js.map create mode 100644 js/4886.js create mode 100644 js/4886.js.map rename js/{5276.css => 519.css} (99%) create mode 100644 js/519.css.map delete mode 100644 js/5269.js delete mode 100644 js/5276.css.map delete mode 100644 js/5522.js delete mode 100644 js/5522.js.map delete mode 100644 js/5775.js delete mode 100644 js/5775.js.map delete mode 100644 js/593.js delete mode 100644 js/593.js.map rename js/{1377.js => 6001.js} (59%) rename js/{1377.js.LICENSE.txt => 6001.js.LICENSE.txt} (100%) rename js/{1377.js.map => 6001.js.map} (99%) delete mode 100644 js/6531.js create mode 100644 js/7003.js create mode 100644 js/7003.js.map create mode 100644 js/7104.js rename js/{6531.js.LICENSE.txt => 7104.js.LICENSE.txt} (100%) rename js/{6531.js.map => 7104.js.map} (99%) delete mode 100644 js/7508.js delete mode 100644 js/7508.js.map delete mode 100644 js/8013.js.map create mode 100644 js/8506.js rename js/{5269.js.map => 8506.js.map} (99%) rename js/{8013.js => 8777.js} (99%) create mode 100644 js/8777.js.map rename js/{5053.css => 9088.css} (99%) rename js/{5053.css.map => 9088.css.map} (99%) create mode 100644 js/9372.js create mode 100644 js/9372.js.map diff --git a/js/1812.js b/js/1812.js new file mode 100644 index 00000000..5f19be14 --- /dev/null +++ b/js/1812.js @@ -0,0 +1,2 @@ +(globalThis.webpackChunksakurairo_scripts=globalThis.webpackChunksakurairo_scripts||[]).push([[1812],{652:e=>{e.exports=function(e){var t,n=[].forEach,l=[].some,o=document.body,i=!0,r=" ";function s(t,l){var o=l.appendChild(function(t){var l=document.createElement("li"),o=document.createElement("a");e.listItemClass&&l.setAttribute("class",e.listItemClass);e.onClick&&(o.onclick=e.onClick);e.includeTitleTags&&o.setAttribute("title",t.textContent);e.includeHtml&&t.childNodes.length?n.call(t.childNodes,(function(e){o.appendChild(e.cloneNode(!0))})):o.textContent=t.textContent;return o.setAttribute("href",e.basePath+"#"+t.id),o.setAttribute("class",e.linkClass+r+"node-name--"+t.nodeName+r+e.extraLinkClasses),l.appendChild(o),l}(t));if(t.children.length){var i=a(t.isCollapsed);t.children.forEach((function(e){s(e,i)})),o.appendChild(i)}}function a(t){var n=e.orderedList?"ol":"ul",l=document.createElement(n),o=e.listClass+r+e.extraListClasses;return t&&(o=(o=o+r+e.collapsibleClass)+r+e.isCollapsedClass),l.setAttribute("class",o),l}function c(t){var n=0;return null!==t&&(n=t.offsetTop,e.hasInnerContainers&&(n+=c(t.offsetParent))),n}function d(t){return t&&-1!==t.className.indexOf(e.collapsibleClass)&&-1!==t.className.indexOf(e.isCollapsedClass)?(t.className=t.className.split(r+e.isCollapsedClass).join(""),d(t.parentNode.parentNode)):t}return{enableTocAnimation:function(){i=!0},disableTocAnimation:function(t){var n=t.target||t.srcElement;"string"==typeof n.className&&-1!==n.className.indexOf(e.linkClass)&&(i=!1)},render:function(e,n){var l=a(!1);if(n.forEach((function(e){s(e,l)})),null!==(t=e||t))return t.firstChild&&t.removeChild(t.firstChild),0===n.length?t:t.appendChild(l)},updateToc:function(s){var a;a=e.scrollContainer&&document.querySelector(e.scrollContainer)?document.querySelector(e.scrollContainer).scrollTop:document.documentElement.scrollTop||o.scrollTop,e.positionFixedSelector&&function(){var n;n=e.scrollContainer&&document.querySelector(e.scrollContainer)?document.querySelector(e.scrollContainer).scrollTop:document.documentElement.scrollTop||o.scrollTop;var l=document.querySelector(e.positionFixedSelector);"auto"===e.fixedSidebarOffset&&(e.fixedSidebarOffset=t.offsetTop),n>e.fixedSidebarOffset?-1===l.className.indexOf(e.positionFixedClass)&&(l.className+=r+e.positionFixedClass):l.className=l.className.split(r+e.positionFixedClass).join("")}();var u,f=s;if(i&&null!==t&&f.length>0){l.call(f,(function(t,n){return c(t)>a+e.headingsOffset+10?(u=f[0===n?n:n-1],!0):n===f.length-1?(u=f[f.length-1],!0):void 0}));var m=t.querySelector("."+e.activeLinkClass),h=t.querySelector("."+e.linkClass+".node-name--"+u.nodeName+'[href="'+e.basePath+"#"+u.id.replace(/([ #;&,.+*~':"!^$[\]()=>|/\\@])/g,"\\$1")+'"]');if(m===h)return;var p=t.querySelectorAll("."+e.linkClass);n.call(p,(function(t){t.className=t.className.split(r+e.activeLinkClass).join("")}));var C=t.querySelectorAll("."+e.listItemClass);n.call(C,(function(t){t.className=t.className.split(r+e.activeListItemClass).join("")})),h&&-1===h.className.indexOf(e.activeLinkClass)&&(h.className+=r+e.activeLinkClass);var g=h&&h.parentNode;g&&-1===g.className.indexOf(e.activeListItemClass)&&(g.className+=r+e.activeListItemClass);var v=t.querySelectorAll("."+e.listClass+"."+e.collapsibleClass);n.call(v,(function(t){-1===t.className.indexOf(e.isCollapsedClass)&&(t.className+=r+e.isCollapsedClass)})),h&&h.nextSibling&&-1!==h.nextSibling.className.indexOf(e.isCollapsedClass)&&(h.nextSibling.className=h.nextSibling.className.split(r+e.isCollapsedClass).join("")),d(h&&h.parentNode.parentNode)}}}}},455:e=>{e.exports={tocSelector:".js-toc",contentSelector:".js-toc-content",headingSelector:"h1, h2, h3",ignoreSelector:".js-toc-ignore",hasInnerContainers:!1,linkClass:"toc-link",extraLinkClasses:"",activeLinkClass:"is-active-link",listClass:"toc-list",extraListClasses:"",isCollapsedClass:"is-collapsed",collapsibleClass:"is-collapsible",listItemClass:"toc-list-item",activeListItemClass:"is-active-li",collapseDepth:0,scrollSmooth:!0,scrollSmoothDuration:420,scrollSmoothOffset:0,scrollEndCallback:function(e){},headingsOffset:1,throttleTimeout:50,positionFixedSelector:null,positionFixedClass:"is-position-fixed",fixedSidebarOffset:"auto",includeHtml:!1,includeTitleTags:!1,onClick:function(e){},orderedList:!0,scrollContainer:null,skipRendering:!1,headingLabelCallback:!1,ignoreHiddenElements:!1,headingObjectCallback:null,basePath:"",disableTocScrollSync:!1,tocScrollOffset:0}},1812:(e,t,n)=>{var l,o,i,r;r=void 0!==n.g?n.g:window||n.g,o=[],l=function(e){var t,l,o,i=n(455),r={},s={},a=n(652),c=n(92),d=n(1007),u=!!(e&&e.document&&e.document.querySelector&&e.addEventListener);if("undefined"!=typeof window||u){var f=Object.prototype.hasOwnProperty;return s.destroy=function(){var e=C(r);null!==e&&(r.skipRendering||e&&(e.innerHTML=""),r.scrollContainer&&document.querySelector(r.scrollContainer)?(document.querySelector(r.scrollContainer).removeEventListener("scroll",this._scrollListener,!1),document.querySelector(r.scrollContainer).removeEventListener("resize",this._scrollListener,!1),t&&document.querySelector(r.scrollContainer).removeEventListener("click",this._clickListener,!1)):(document.removeEventListener("scroll",this._scrollListener,!1),document.removeEventListener("resize",this._scrollListener,!1),t&&document.removeEventListener("click",this._clickListener,!1)))},s.init=function(e){if(u){r=m(i,e||{}),this.options=r,this.state={},r.scrollSmooth&&(r.duration=r.scrollSmoothDuration,r.offset=r.scrollSmoothOffset,s.scrollSmooth=n(6802).initSmoothScrolling(r)),t=a(r),l=c(r),this._buildHtml=t,this._parseContent=l,this._headingsArray=o,s.destroy();var f=p(r);if(null!==f){var g=C(r);if(null!==g&&null!==(o=l.selectHeadings(f,r.headingSelector))){var v=l.nestHeadingsArray(o).nest;if(r.skipRendering)return this;t.render(g,v),this._scrollListener=h((function(e){t.updateToc(o),!r.disableTocScrollSync&&d(r);var n=e&&e.target&&e.target.scrollingElement&&0===e.target.scrollingElement.scrollTop;(e&&(0===e.eventPhase||null===e.currentTarget)||n)&&(t.updateToc(o),r.scrollEndCallback&&r.scrollEndCallback(e))}),r.throttleTimeout),this._scrollListener(),r.scrollContainer&&document.querySelector(r.scrollContainer)?(document.querySelector(r.scrollContainer).addEventListener("scroll",this._scrollListener,!1),document.querySelector(r.scrollContainer).addEventListener("resize",this._scrollListener,!1)):(document.addEventListener("scroll",this._scrollListener,!1),document.addEventListener("resize",this._scrollListener,!1));var S=null;return this._clickListener=h((function(e){r.scrollSmooth&&t.disableTocAnimation(e),t.updateToc(o),S&&clearTimeout(S),S=setTimeout((function(){t.enableTocAnimation()}),r.scrollSmoothDuration)}),r.throttleTimeout),r.scrollContainer&&document.querySelector(r.scrollContainer)?document.querySelector(r.scrollContainer).addEventListener("click",this._clickListener,!1):document.addEventListener("click",this._clickListener,!1),this}}}},s.refresh=function(e){s.destroy(),s.init(e||this.options)},e.tocbot=s,s}function m(){for(var e={},t=0;t{e.exports=function(e){var t=[].reduce;function n(e){return e[e.length-1]}function l(e){return+e.nodeName.toUpperCase().replace("H","")}function o(t){if(!function(e){try{return e instanceof window.HTMLElement||e instanceof window.parent.HTMLElement}catch(t){return e instanceof window.HTMLElement}}(t))return t;if(e.ignoreHiddenElements&&(!t.offsetHeight||!t.offsetParent))return null;const n=t.getAttribute("data-heading-label")||(e.headingLabelCallback?String(e.headingLabelCallback(t.textContent)):t.textContent.trim());var o={id:t.id,children:[],nodeName:t.nodeName,headingLevel:l(t),textContent:n};return e.includeHtml&&(o.childNodes=t.childNodes),e.headingObjectCallback?e.headingObjectCallback(o,t):o}return{nestHeadingsArray:function(l){return t.call(l,(function(t,l){var i=o(l);return i&&function(t,l){for(var i=o(t),r=i.headingLevel,s=l,a=n(s),c=r-(a?a.headingLevel:0);c>0&&(!(a=n(s))||r!==a.headingLevel);)a&&void 0!==a.children&&(s=a.children),c--;r>=e.collapseDepth&&(i.isCollapsed=!0),s.push(i)}(i,t.nest),t}),{nest:[]})},selectHeadings:function(t,n){var l=n;e.ignoreSelector&&(l=n.split(",").map((function(t){return t.trim()+":not("+e.ignoreSelector+")"})));try{return t.querySelectorAll(l)}catch(e){return console.warn("Headers not found with selector: "+l),null}}}}},6802:(e,t)=>{t.initSmoothScrolling=function(e){var t=e.duration,n=e.offset,l=location.hash?o(location.href):location.href;function o(e){return e.slice(0,e.lastIndexOf("#"))}document.body.addEventListener("click",(function(i){var r;"a"!==(r=i.target).tagName.toLowerCase()||!(r.hash.length>0||"#"===r.href.charAt(r.href.length-1))||o(r.href)!==l&&o(r.href)+"#"!==l||i.target.className.indexOf("no-smooth-scroll")>-1||"#"===i.target.href.charAt(i.target.href.length-2)&&"!"===i.target.href.charAt(i.target.href.length-1)||-1===i.target.className.indexOf(e.linkClass)||function(e,t){var n,l,o=window.pageYOffset,i={duration:t.duration,offset:t.offset||0,callback:t.callback,easing:t.easing||u},r=document.querySelector('[id="'+decodeURI(e).split("#").join("")+'"]')||document.querySelector('[id="'+e.split("#").join("")+'"]'),s="string"==typeof e?i.offset+(e?r&&r.getBoundingClientRect().top||0:-(document.documentElement.scrollTop||document.body.scrollTop)):e,a="function"==typeof i.duration?i.duration(s):i.duration;function c(e){l=e-n,window.scrollTo(0,i.easing(l,o,s,a)),l{e.exports=function(e){var t=e.tocElement||document.querySelector(e.tocSelector);if(t&&t.scrollHeight>t.clientHeight){var n=t.querySelector("."+e.activeListItemClass);n&&(t.scrollTop=n.offsetTop-e.tocScrollOffset)}}}}]); +//# sourceMappingURL=1812.js.map \ No newline at end of file diff --git a/js/1812.js.map b/js/1812.js.map new file mode 100644 index 00000000..97673695 --- /dev/null +++ b/js/1812.js.map @@ -0,0 +1 @@ +{"version":3,"file":"1812.js","mappings":"8GAQAA,EAAOC,QAAU,SAAUC,GACzB,IAGIC,EAHAC,EAAU,GAAGA,QACbC,EAAO,GAAGA,KACVC,EAAOC,SAASD,KAEhBE,GAAwB,EACxBC,EAAa,IAQjB,SAASC,EAAUC,EAAGC,GACpB,IAAIC,EAAOD,EAAUE,YAiDvB,SAAqBC,GACnB,IAAIC,EAAOT,SAASU,cAAc,MAC9BC,EAAIX,SAASU,cAAc,KAC3Bf,EAAQiB,eACVH,EAAKI,aAAa,QAASlB,EAAQiB,eAGjCjB,EAAQmB,UACVH,EAAEI,QAAUpB,EAAQmB,SAGlBnB,EAAQqB,kBACVL,EAAEE,aAAa,QAASL,EAAKS,aAG3BtB,EAAQuB,aAAeV,EAAKW,WAAWC,OACzCvB,EAAQwB,KAAKb,EAAKW,YAAY,SAAUG,GACtCX,EAAEJ,YAAYe,EAAKC,WAAU,GAC/B,IAGAZ,EAAEM,YAAcT,EAAKS,YAOvB,OALAN,EAAEE,aAAa,OAAQlB,EAAQ6B,SAAW,IAAMhB,EAAKiB,IACrDd,EAAEE,aAAa,QAASlB,EAAQ+B,UAC9BxB,EAAa,cAAgBM,EAAKmB,SAClCzB,EAAaP,EAAQiC,kBACvBnB,EAAKF,YAAYI,GACVF,CACT,CA9EmCoB,CAAWzB,IAC5C,GAAIA,EAAE0B,SAASV,OAAQ,CACrB,IAAIW,EAAOC,EAAW5B,EAAE6B,aACxB7B,EAAE0B,SAASjC,SAAQ,SAAUqC,GAC3B/B,EAAS+B,EAAOH,EAClB,IACAzB,EAAKC,YAAYwB,EACnB,CACF,CA6EA,SAASC,EAAYC,GACnB,IAAIE,EAAexC,EAAmB,YAAI,KAAO,KAC7CoC,EAAO/B,SAASU,cAAcyB,GAC9BC,EAAUzC,EAAQ0C,UAAYnC,EAAaP,EAAQ2C,iBAOvD,OANIL,IAGFG,GADAA,EAAUA,EAAUlC,EAAaP,EAAQ4C,kBACrBrC,EAAaP,EAAQ6C,kBAE3CT,EAAKlB,aAAa,QAASuB,GACpBL,CACT,CAiCA,SAASU,EAAkBC,GACzB,IAAIC,EAAW,EAKf,OAJY,OAARD,IACFC,EAAWD,EAAIE,UACXjD,EAAQkD,qBAAsBF,GAAYF,EAAiBC,EAAII,gBAE9DH,CACT,CA8FA,SAASI,EAA4BC,GACnC,OAAIA,IAAoE,IAAzDA,EAAQC,UAAUC,QAAQvD,EAAQ4C,oBAAqF,IAAzDS,EAAQC,UAAUC,QAAQvD,EAAQ6C,mBAC7GQ,EAAQC,UAAYD,EAAQC,UAAUE,MAAMjD,EAAaP,EAAQ6C,kBAAkBY,KAAK,IACjFL,EAA2BC,EAAQK,WAAWA,aAEhDL,CACT,CAuBA,MAAO,CACLM,mBALF,WACErD,GAAwB,CAC1B,EAIEsD,oBAnBF,SAA8BC,GAC5B,IAAIC,EAASD,EAAMC,QAAUD,EAAME,WACH,iBAArBD,EAAOR,YAA2E,IAAjDQ,EAAOR,UAAUC,QAAQvD,EAAQ+B,aAK7EzB,GAAwB,EAC1B,EAYE0D,OAtPF,SAAiBC,EAAQpD,GACvB,IACIH,EAAY2B,GADA,GAShB,GANAxB,EAAKX,SAAQ,SAAUO,GACrBD,EAASC,EAAGC,EACd,IAImB,QADnBT,EAAagE,GAAUhE,GAWvB,OALIA,EAAWiE,YACbjE,EAAWkE,YAAYlE,EAAWiE,YAIhB,IAAhBrD,EAAKY,OACAxB,EAIFA,EAAWW,YAAYF,EAChC,EA6NE0D,UA1HF,SAAoBC,GAGhB,IAAIC,EACJA,EAFEtE,EAAQuE,iBAAmBlE,SAASmE,cAAcxE,EAAQuE,iBAEtDlE,SAASmE,cAAcxE,EAAQuE,iBAAiBE,UAEhDpE,SAASqE,gBAAgBD,WAAarE,EAAKqE,UAI/CzE,EAAQ2E,uBAjDd,WAEI,IAAIL,EACJA,EAFEtE,EAAQuE,iBAAmBlE,SAASmE,cAAcxE,EAAQuE,iBAEtDlE,SAASmE,cAAcxE,EAAQuE,iBAAiBE,UAEhDpE,SAASqE,gBAAgBD,WAAarE,EAAKqE,UAEnD,IAAIG,EAAavE,SAASmE,cAAcxE,EAAQ2E,uBAEb,SAA/B3E,EAAQ6E,qBACV7E,EAAQ6E,mBAAqB5E,EAAWgD,WAGtCqB,EAAMtE,EAAQ6E,oBACkD,IAA9DD,EAAWtB,UAAUC,QAAQvD,EAAQ8E,sBACvCF,EAAWtB,WAAa/C,EAAaP,EAAQ8E,oBAG/CF,EAAWtB,UAAYsB,EAAWtB,UAAUE,MAAMjD,EAAaP,EAAQ8E,oBAAoBrB,KAAK,GAEpG,CA8BIsB,GAIF,IACIC,EADAC,EAAWZ,EAGf,GAAI/D,GACa,OAAfL,GACAgF,EAASxD,OAAS,EAAG,CACrBtB,EAAKuB,KAAKuD,GAAU,SAAUC,EAASC,GACrC,OAAIrC,EAAiBoC,GAAWZ,EAAMtE,EAAQoF,eAAiB,IAG7DJ,EAAYC,EADO,IAANE,EAAWA,EAAIA,EAAI,IAEzB,GACEA,IAAMF,EAASxD,OAAS,GAEjCuD,EAAYC,EAASA,EAASxD,OAAS,IAChC,QAHF,CAKT,IAEA,IAAI4D,EAAmBpF,EAAWuE,cAAc,IAAMxE,EAAQsF,iBAC1DC,EAAgBtF,EACjBuE,cAAc,IAAMxE,EAAQ+B,UAC3B,eAAiBiD,EAAUhD,SAC3B,UAAYhC,EAAQ6B,SAAW,IAAMmD,EAAUlD,GAAG0D,QAAQ,mCAAoC,QAAU,MAG5G,GAAIH,IAAqBE,EACvB,OAIF,IAAIE,EAAWxF,EACZyF,iBAAiB,IAAM1F,EAAQ+B,WAClC7B,EAAQwB,KAAK+D,GAAU,SAAUE,GAC/BA,EAAQrC,UAAYqC,EAAQrC,UAAUE,MAAMjD,EAAaP,EAAQsF,iBAAiB7B,KAAK,GACzF,IACA,IAAImC,EAAS3F,EACVyF,iBAAiB,IAAM1F,EAAQiB,eAClCf,EAAQwB,KAAKkE,GAAQ,SAAUC,GAC7BA,EAAMvC,UAAYuC,EAAMvC,UAAUE,MAAMjD,EAAaP,EAAQ8F,qBAAqBrC,KAAK,GACzF,IAGI8B,IAA+E,IAA9DA,EAAcjC,UAAUC,QAAQvD,EAAQsF,mBAC3DC,EAAcjC,WAAa/C,EAAaP,EAAQsF,iBAElD,IAAIS,EAAKR,GAAiBA,EAAc7B,WACpCqC,IAA6D,IAAvDA,EAAGzC,UAAUC,QAAQvD,EAAQ8F,uBACrCC,EAAGzC,WAAa/C,EAAaP,EAAQ8F,qBAGvC,IAAIE,EAAW/F,EACZyF,iBAAiB,IAAM1F,EAAQ0C,UAAY,IAAM1C,EAAQ4C,kBAG5D1C,EAAQwB,KAAKsE,GAAU,SAAU5D,IAC2B,IAAtDA,EAAKkB,UAAUC,QAAQvD,EAAQ6C,oBACjCT,EAAKkB,WAAa/C,EAAaP,EAAQ6C,iBAE3C,IAGI0C,GAAiBA,EAAcU,cAA0F,IAA3EV,EAAcU,YAAY3C,UAAUC,QAAQvD,EAAQ6C,oBACpG0C,EAAcU,YAAY3C,UAAYiC,EAAcU,YAAY3C,UAAUE,MAAMjD,EAAaP,EAAQ6C,kBAAkBY,KAAK,KAE9HL,EAA2BmC,GAAiBA,EAAc7B,WAAWA,WACvE,CACF,EA0CF,C,UChSA5D,EAAOC,QAAU,CAEfmG,YAAa,UAEbC,gBAAiB,kBAEjBC,gBAAiB,aAEjBC,eAAgB,iBAEhBnD,oBAAoB,EAEpBnB,UAAW,WAEXE,iBAAkB,GAGlBqD,gBAAiB,iBAEjB5C,UAAW,WAEXC,iBAAkB,GAElBE,iBAAkB,eAGlBD,iBAAkB,iBAElB3B,cAAe,gBAEf6E,oBAAqB,eAMrBQ,cAAe,EAEfC,cAAc,EAEdC,qBAAsB,IAEtBC,mBAAoB,EAEpBC,kBAAmB,SAAUC,GAAI,EAEjCvB,eAAgB,EAGhBwB,gBAAiB,GAEjBjC,sBAAuB,KAGvBG,mBAAoB,oBAIpBD,mBAAoB,OAGpBtD,aAAa,EAIbF,kBAAkB,EAIlBF,QAAS,SAAUwF,GAAI,EAGvBE,aAAa,EAEbtC,gBAAiB,KAEjBuC,eAAe,EAOfC,sBAAsB,EAEtBC,sBAAsB,EAMtBC,sBAAuB,KAEvBpF,SAAU,GAGVqF,sBAAsB,EAGtBC,gBAAiB,E,iBCnGnB,UAaWC,SAQU,IAAX,EAAAC,EAAyB,EAAAA,EAASC,QAAU,EAAAD,EANlD,EAAO,GAAI,EAM+C,SAAUD,GAItE,IAUIG,EACAC,EAOAnD,EAlBAoD,EAAiB,EAAQ,KAEzBzH,EAAU,CAAC,EAEX0H,EAAS,CAAC,EAEVC,EAAY,EAAQ,KACpBC,EAAe,EAAQ,IACvBC,EAAkB,EAAQ,MAM1BC,KAAaV,GAAUA,EAAK/G,UAAc+G,EAAK/G,SAASmE,eAAmB4C,EAAKW,kBACpF,GAAsB,oBAAXT,QAA2BQ,EAAtC,CAMA,IAAIE,EAAiBC,OAAOC,UAAUF,eA8MtC,OApJAN,EAAOS,QAAU,WACf,IAAIlI,EAAamI,EAAcpI,GACZ,OAAfC,IAICD,EAAQ8G,eAEP7G,IACFA,EAAWoI,UAAY,IAKvBrI,EAAQuE,iBAAmBlE,SAASmE,cAAcxE,EAAQuE,kBAC5DlE,SAASmE,cAAcxE,EAAQuE,iBAAiB+D,oBAAoB,SAAUC,KAAKC,iBAAiB,GACpGnI,SAASmE,cAAcxE,EAAQuE,iBAAiB+D,oBAAoB,SAAUC,KAAKC,iBAAiB,GAChGjB,GACFlH,SAASmE,cAAcxE,EAAQuE,iBAAiB+D,oBAAoB,QAASC,KAAKE,gBAAgB,KAGpGpI,SAASiI,oBAAoB,SAAUC,KAAKC,iBAAiB,GAC7DnI,SAASiI,oBAAoB,SAAUC,KAAKC,iBAAiB,GACzDjB,GACFlH,SAASiI,oBAAoB,QAASC,KAAKE,gBAAgB,IAGjE,EAMAf,EAAOgB,KAAO,SAAUC,GAEtB,GAAKb,EAAL,CAMA9H,EAAU4I,EAAOnB,EAAgBkB,GAAiB,CAAC,GACnDJ,KAAKvI,QAAUA,EACfuI,KAAKM,MAAQ,CAAC,EAGV7I,EAAQuG,eACVvG,EAAQ8I,SAAW9I,EAAQwG,qBAC3BxG,EAAQ+I,OAAS/I,EAAQyG,mBACzBiB,EAAOnB,aAAe,4BAA+CvG,IAIvEuH,EAAYI,EAAU3H,GACtBwH,EAAeI,EAAa5H,GAG5BuI,KAAKS,WAAazB,EAClBgB,KAAKU,cAAgBzB,EACrBe,KAAKW,eAAiB7E,EAGtBqD,EAAOS,UAEP,IAAIgB,EAAiBC,EAAkBpJ,GACvC,GAAuB,OAAnBmJ,EAAJ,CAIA,IAAIlJ,EAAamI,EAAcpI,GAC/B,GAAmB,OAAfC,GAOkB,QAFtBoE,EAAgBmD,EAAa6B,eAAeF,EAAgBnJ,EAAQoG,kBAEpE,CAKA,IACIkD,EADoB9B,EAAa+B,kBAAkBlF,GAChBmF,KAGvC,GAAKxJ,EAAQ8G,cAIX,OAAOyB,KAHPhB,EAAUvD,OAAO/D,EAAYqJ,GAO/Bf,KAAKC,gBAAkBiB,GAAS,SAAU9C,GACxCY,EAAUnD,UAAUC,IACnBrE,EAAQkH,sBAAwBW,EAAgB7H,GACjD,IAAI0J,EAAQ/C,GAAKA,EAAE7C,QAAU6C,EAAE7C,OAAO6F,kBAA4D,IAAxChD,EAAE7C,OAAO6F,iBAAiBlF,WAC/EkC,IAAuB,IAAjBA,EAAEiD,YAAwC,OAApBjD,EAAEkD,gBAA4BH,KAC7DnC,EAAUnD,UAAUC,GAChBrE,EAAQ0G,mBACV1G,EAAQ0G,kBAAkBC,GAGhC,GAAG3G,EAAQ4G,iBACX2B,KAAKC,kBACDxI,EAAQuE,iBAAmBlE,SAASmE,cAAcxE,EAAQuE,kBAC5DlE,SAASmE,cAAcxE,EAAQuE,iBAAiBwD,iBAAiB,SAAUQ,KAAKC,iBAAiB,GACjGnI,SAASmE,cAAcxE,EAAQuE,iBAAiBwD,iBAAiB,SAAUQ,KAAKC,iBAAiB,KAEjGnI,SAAS0H,iBAAiB,SAAUQ,KAAKC,iBAAiB,GAC1DnI,SAAS0H,iBAAiB,SAAUQ,KAAKC,iBAAiB,IAI5D,IAAIsB,EAAU,KAmBd,OAlBAvB,KAAKE,eAAiBgB,GAAS,SAAU5F,GACnC7D,EAAQuG,cACVgB,EAAU3D,oBAAoBC,GAEhC0D,EAAUnD,UAAUC,GAEpByF,GAAWC,aAAaD,GACxBA,EAAUE,YAAW,WACnBzC,EAAU5D,oBACZ,GAAG3D,EAAQwG,qBACb,GAAGxG,EAAQ4G,iBAEP5G,EAAQuE,iBAAmBlE,SAASmE,cAAcxE,EAAQuE,iBAC5DlE,SAASmE,cAAcxE,EAAQuE,iBAAiBwD,iBAAiB,QAASQ,KAAKE,gBAAgB,GAE/FpI,SAAS0H,iBAAiB,QAASQ,KAAKE,gBAAgB,GAGnDF,IAvDP,CAZA,CA9BA,CAkGF,EAKAb,EAAOuC,QAAU,SAAUtB,GACzBjB,EAAOS,UACPT,EAAOgB,KAAKC,GAAiBJ,KAAKvI,QACpC,EAGAoH,EAAKM,OAASA,EAEPA,CAlNP,CAKA,SAASkB,IAEP,IADA,IAAI9E,EAAS,CAAC,EACLqB,EAAI,EAAGA,EAAI+E,UAAUzI,OAAQ0D,IAAK,CACzC,IAAIgF,EAASD,UAAU/E,GACvB,IAAK,IAAIiF,KAAOD,EACVnC,EAAetG,KAAKyI,EAAQC,KAC9BtG,EAAOsG,GAAOD,EAAOC,GAG3B,CACA,OAAOtG,CACT,CAGA,SAAS2F,EAAUY,EAAIC,EAAWC,GAEhC,IAAIC,EACAC,EACJ,OAHAH,IAAcA,EAAY,KAGnB,WACL,IAAII,EAAUH,GAAShC,KACnBoC,GAAO,IAAIC,KACXC,EAAOX,UACPM,GAAQG,EAAMH,EAAOF,GAEvBP,aAAaU,GACbA,EAAaT,YAAW,WACtBQ,EAAOG,EACPN,EAAGS,MAAMJ,EAASG,EACpB,GAAGP,KAEHE,EAAOG,EACPN,EAAGS,MAAMJ,EAASG,GAEtB,CACF,CAEA,SAASzB,EAAmBpJ,GAC1B,IACE,OAAOA,EAAQmJ,gBAAkB9I,SAASmE,cAAcxE,EAAQmG,gBAClE,CAAE,MAAOQ,GAEP,OADAoE,QAAQC,KAAK,+BAAiChL,EAAQmG,iBAC/C,IACT,CACF,CAEA,SAASiC,EAAepI,GACtB,IACE,OAAOA,EAAQC,YAAcI,SAASmE,cAAcxE,EAAQkG,YAC9D,CAAE,MAAOS,GAEP,OADAoE,QAAQC,KAAK,0BAA4BhL,EAAQkG,aAC1C,IACT,CACF,CA0JF,CA9Oa,CAAUkB,QAAK,0D,SCP5BtH,EAAOC,QAAU,SAAuBC,GACtC,IAAIiL,EAAS,GAAGA,OAOhB,SAASC,EAAaC,GACpB,OAAOA,EAAMA,EAAM1J,OAAS,EAC9B,CAOA,SAAS2J,EAAiBlG,GACxB,OAAQA,EAAQlD,SAASqJ,cAAc7F,QAAQ,IAAK,GACtD,CAwBA,SAAS8F,EAAkBpG,GAIzB,IApBF,SAAwBqG,GACtB,IACE,OACEA,aAAwBjE,OAAOkE,aAC/BD,aAAwBjE,OAAOrD,OAAOuH,WAE1C,CAAE,MAAO7E,GACP,OAAO4E,aAAwBjE,OAAOkE,WACxC,CACF,CAWOC,CAAcvG,GAAU,OAAOA,EAEpC,GAAIlF,EAAQgH,wBAA0B9B,EAAQwG,eAAiBxG,EAAQ/B,cACrE,OAAO,KAGT,MAAMwI,EAAezG,EAAQ0G,aAAa,wBACvC5L,EAAQ+G,qBAAuB8E,OAAO7L,EAAQ+G,qBAAqB7B,EAAQ5D,cAAgB4D,EAAQ5D,YAAYwK,QAClH,IAAI/I,EAAM,CACRjB,GAAIoD,EAAQpD,GACZK,SAAU,GACVH,SAAUkD,EAAQlD,SAClB+J,aAAcX,EAAgBlG,GAC9B5D,YAAaqK,GAOf,OAJI3L,EAAQuB,cACVwB,EAAIvB,WAAa0D,EAAQ1D,YAGvBxB,EAAQiH,sBACHjH,EAAQiH,sBAAsBlE,EAAKmC,GAGrCnC,CACT,CA4EA,MAAO,CACLwG,kBAbF,SAA4BlF,GAC1B,OAAO4G,EAAOvJ,KAAK2C,GAAe,SAAkB2H,EAAMC,GACxD,IAAIC,EAAiBZ,EAAiBW,GAItC,OAHIC,GA3DR,SAAkBvK,EAAM6H,GAUtB,IATA,IAAIzG,EAAMuI,EAAiB3J,GACvBwK,EAAQpJ,EAAIgJ,aACZZ,EAAQ3B,EACR4C,EAAWlB,EAAYC,GAIvBkB,EAAUF,GAHMC,EAChBA,EAASL,aACT,GAGGM,EAAU,MACfD,EAAWlB,EAAYC,KAEPgB,IAAUC,EAASL,eAExBK,QAAkCE,IAAtBF,EAASjK,WAC9BgJ,EAAQiB,EAASjK,UAEnBkK,IAGEF,GAASnM,EAAQsG,gBACnBvD,EAAIT,aAAc,GAGpB6I,EAAMoB,KAAKxJ,EAEb,CAiCMyJ,CAAQN,EAAgBF,EAAKxC,MAExBwC,CACT,GAAG,CACDxC,KAAM,IAEV,EAIEH,eAnCF,SAAyBF,EAAgB/C,GACvC,IAAIqG,EAAYrG,EACZpG,EAAQqG,iBACVoG,EAAYrG,EAAgB5C,MAAM,KAC/BkJ,KAAI,SAAuBC,GAC1B,OAAOA,EAASb,OAAS,QAAU9L,EAAQqG,eAAiB,GAC9D,KAEJ,IACE,OAAO8C,EAAezD,iBAAiB+G,EACzC,CAAE,MAAO9F,GAEP,OADAoE,QAAQC,KAAK,oCAAsCyB,GAC5C,IACT,CACF,EAuBF,C,eC7JA1M,EAAQ6M,oBAER,SAA8B5M,GAG5B,IAAI8I,EAAW9I,EAAQ8I,SACnBC,EAAS/I,EAAQ+I,OAEjB8D,EAAUC,SAASC,KACnBC,EAAUF,SAASG,MACnBH,SAASG,KAoCb,SAASD,EAAWE,GAClB,OAAOA,EAAIC,MAAM,EAAGD,EAAIE,YAAY,KACtC,CAjCE/M,SAASD,KAAK2H,iBAAiB,SAE/B,SAAkBpB,GAuBpB,IAAuB0G,EACc,OADdA,EArBH1G,EAAE7C,QAsBXwJ,QAAQC,iBACdF,EAAEN,KAAKtL,OAAS,GAA0C,MAArC4L,EAAEJ,KAAKO,OAAOH,EAAEJ,KAAKxL,OAAS,KACnDuL,EAAUK,EAAEJ,QAAUJ,GAAWG,EAAUK,EAAEJ,MAAQ,MAAQJ,GAvB5DlG,EAAE7C,OAAOR,UAAUC,QAAQ,qBAAuB,GACE,MAAnDoD,EAAE7C,OAAOmJ,KAAKO,OAAO7G,EAAE7C,OAAOmJ,KAAKxL,OAAS,IACM,MAAnDkF,EAAE7C,OAAOmJ,KAAKO,OAAO7G,EAAE7C,OAAOmJ,KAAKxL,OAAS,KACO,IAAnDkF,EAAE7C,OAAOR,UAAUC,QAAQvD,EAAQ+B,YA8C3C,SAAe+B,EAAQ9D,GACrB,IAsBIyN,EACAC,EAvBAC,EAAQrG,OAAOsG,YACfC,EAAM,CACR/E,SAAU9I,EAAQ8I,SAClBC,OAAQ/I,EAAQ+I,QAAU,EAC1B+E,SAAU9N,EAAQ8N,SAClBC,OAAQ/N,EAAQ+N,QAAUC,GAMxBC,EAAM5N,SAASmE,cAAc,QAAU0J,UAAUpK,GAAQN,MAAM,KAAKC,KAAK,IAAM,OACjFpD,SAASmE,cAAc,QAAU,EAAShB,MAAM,KAAKC,KAAK,IAAM,MAC9D0K,EAA6B,iBAAXrK,EAClB+J,EAAI9E,QACJjF,EACKmK,GAAOA,EAAIG,wBAAwB9J,KAAQ,IAC1CjE,SAASqE,gBAAgBD,WAAapE,SAASD,KAAKqE,YAC1DX,EACAgF,EAAmC,mBAAjB+E,EAAI/E,SACtB+E,EAAI/E,SAASqF,GACbN,EAAI/E,SAKR,SAASuF,EAAMC,GACbZ,EAAcY,EAAOb,EAErBnG,OAAOiH,SAAS,EAAGV,EAAIE,OAAOL,EAAaC,EAAOQ,EAAUrF,IAExD4E,EAAc5E,EAAY0F,sBAAsBH,GAAeI,GACrE,CAEA,SAASA,IACPnH,OAAOiH,SAAS,EAAGZ,EAAQQ,GAEC,mBAAjBN,EAAIC,UAA2BD,EAAIC,UAChD,CAGA,SAASE,EAAeU,EAAGC,EAAGC,EAAGnO,GAE/B,OADAiO,GAAKjO,EAAI,GACD,EAAUmO,EAAI,EAAIF,EAAIA,EAAIC,GAE1BC,EAAI,KADZF,GACsBA,EAAI,GAAK,GAAKC,CACtC,CArBAH,uBAAsB,SAAUF,GAAQb,EAAYa,EAAMD,EAAKC,EAAM,GAsBvE,CAvFMO,CAAKlI,EAAE7C,OAAOiJ,KAAM,CAClBjE,WACAC,SACA+E,SAAU,WAuBhB,IAAmBf,EACb1J,EADa0J,EAtBFpG,EAAE7C,OAAOiJ,MAuBpB1J,EAAUhD,SAASyO,eAAe/B,EAAKgC,UAAU,OAG9C,wCAAwCC,KAAK3L,EAAQiK,WACxDjK,EAAQ4L,UAAY,GAGtB5L,EAAQ6L,QA7BN,GAEJ,IAtBiD,EAoDrD,C,WCpEApP,EAAOC,QAAU,SAA0BC,GACzC,IAAImP,EAAMnP,EAAQC,YAAcI,SAASmE,cAAcxE,EAAQkG,aAC/D,GAAIiJ,GAAOA,EAAIC,aAAeD,EAAIE,aAAc,CAC9C,IAAIC,EAAaH,EAAI3K,cAAc,IAAMxE,EAAQ8F,qBAC7CwJ,IACFH,EAAI1K,UAAY6K,EAAWrM,UAAYjD,EAAQmH,gBAEnD,CACF,C","sources":["webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.2/node_modules/tocbot/src/js/build-html.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.2/node_modules/tocbot/src/js/default-options.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.2/node_modules/tocbot/src/js/index.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.2/node_modules/tocbot/src/js/parse-content.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.2/node_modules/tocbot/src/js/scroll-smooth/index.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.2/node_modules/tocbot/src/js/update-toc-scroll.js"],"sourcesContent":["/* eslint no-var: off */\n\n/**\n * This file is responsible for building the DOM and updating DOM state.\n *\n * @author Tim Scanlin\n */\n\nmodule.exports = function (options) {\n var forEach = [].forEach\n var some = [].some\n var body = document.body\n var tocElement\n var currentlyHighlighting = true\n var SPACE_CHAR = ' '\n\n /**\n * Create link and list elements.\n * @param {Object} d\n * @param {HTMLElement} container\n * @return {HTMLElement}\n */\n function createEl (d, container) {\n var link = container.appendChild(createLink(d))\n if (d.children.length) {\n var list = createList(d.isCollapsed)\n d.children.forEach(function (child) {\n createEl(child, list)\n })\n link.appendChild(list)\n }\n }\n\n /**\n * Render nested heading array data into a given element.\n * @param {HTMLElement} parent Optional. If provided updates the {@see tocElement} to match.\n * @param {Array} data\n * @return {HTMLElement}\n */\n function render (parent, data) {\n var collapsed = false\n var container = createList(collapsed)\n\n data.forEach(function (d) {\n createEl(d, container)\n })\n\n // Return if no TOC element is provided or known.\n tocElement = parent || tocElement\n if (tocElement === null) {\n return\n }\n\n // Remove existing child if it exists.\n if (tocElement.firstChild) {\n tocElement.removeChild(tocElement.firstChild)\n }\n\n // Just return the parent and don't append the list if no links are found.\n if (data.length === 0) {\n return tocElement\n }\n\n // Append the Elements that have been created\n return tocElement.appendChild(container)\n }\n\n /**\n * Create link element.\n * @param {Object} data\n * @return {HTMLElement}\n */\n function createLink (data) {\n var item = document.createElement('li')\n var a = document.createElement('a')\n if (options.listItemClass) {\n item.setAttribute('class', options.listItemClass)\n }\n\n if (options.onClick) {\n a.onclick = options.onClick\n }\n\n if (options.includeTitleTags) {\n a.setAttribute('title', data.textContent)\n }\n\n if (options.includeHtml && data.childNodes.length) {\n forEach.call(data.childNodes, function (node) {\n a.appendChild(node.cloneNode(true))\n })\n } else {\n // Default behavior.\n a.textContent = data.textContent\n }\n a.setAttribute('href', options.basePath + '#' + data.id)\n a.setAttribute('class', options.linkClass +\n SPACE_CHAR + 'node-name--' + data.nodeName +\n SPACE_CHAR + options.extraLinkClasses)\n item.appendChild(a)\n return item\n }\n\n /**\n * Create list element.\n * @param {Boolean} isCollapsed\n * @return {HTMLElement}\n */\n function createList (isCollapsed) {\n var listElement = (options.orderedList) ? 'ol' : 'ul'\n var list = document.createElement(listElement)\n var classes = options.listClass + SPACE_CHAR + options.extraListClasses\n if (isCollapsed) {\n // No plus/equals here fixes compilcation issue.\n classes = classes + SPACE_CHAR + options.collapsibleClass\n classes = classes + SPACE_CHAR + options.isCollapsedClass\n }\n list.setAttribute('class', classes)\n return list\n }\n\n /**\n * Update fixed sidebar class.\n * @return {HTMLElement}\n */\n function updateFixedSidebarClass () {\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n var top\n top = document.querySelector(options.scrollContainer).scrollTop\n } else {\n top = document.documentElement.scrollTop || body.scrollTop\n }\n var posFixedEl = document.querySelector(options.positionFixedSelector)\n\n if (options.fixedSidebarOffset === 'auto') {\n options.fixedSidebarOffset = tocElement.offsetTop\n }\n\n if (top > options.fixedSidebarOffset) {\n if (posFixedEl.className.indexOf(options.positionFixedClass) === -1) {\n posFixedEl.className += SPACE_CHAR + options.positionFixedClass\n }\n } else {\n posFixedEl.className = posFixedEl.className.split(SPACE_CHAR + options.positionFixedClass).join('')\n }\n }\n\n /**\n * Get top position of heading\n * @param {HTMLElement} obj\n * @return {int} position\n */\n function getHeadingTopPos (obj) {\n var position = 0\n if (obj !== null) {\n position = obj.offsetTop\n if (options.hasInnerContainers) { position += getHeadingTopPos(obj.offsetParent) }\n }\n return position\n }\n\n /**\n * Update TOC highlighting and collapsed groupings.\n */\n function updateToc (headingsArray) {\n // If a fixed content container was set\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n var top\n top = document.querySelector(options.scrollContainer).scrollTop\n } else {\n top = document.documentElement.scrollTop || body.scrollTop\n }\n\n // Add fixed class at offset\n if (options.positionFixedSelector) {\n updateFixedSidebarClass()\n }\n\n // Get the top most heading currently visible on the page so we know what to highlight.\n var headings = headingsArray\n var topHeader\n // Using some instead of each so that we can escape early.\n if (currentlyHighlighting &&\n tocElement !== null &&\n headings.length > 0) {\n some.call(headings, function (heading, i) {\n if (getHeadingTopPos(heading) > top + options.headingsOffset + 10) {\n // Don't allow negative index value.\n var index = (i === 0) ? i : i - 1\n topHeader = headings[index]\n return true\n } else if (i === headings.length - 1) {\n // This allows scrolling for the last heading on the page.\n topHeader = headings[headings.length - 1]\n return true\n }\n })\n\n var oldActiveTocLink = tocElement.querySelector('.' + options.activeLinkClass)\n var activeTocLink = tocElement\n .querySelector('.' + options.linkClass +\n '.node-name--' + topHeader.nodeName +\n '[href=\"' + options.basePath + '#' + topHeader.id.replace(/([ #;&,.+*~':\"!^$[\\]()=>|/\\\\@])/g, '\\\\$1') + '\"]')\n // Performance improvement to only change the classes\n // for the toc if a new link should be highlighted.\n if (oldActiveTocLink === activeTocLink) {\n return\n }\n\n // Remove the active class from the other tocLinks.\n var tocLinks = tocElement\n .querySelectorAll('.' + options.linkClass)\n forEach.call(tocLinks, function (tocLink) {\n tocLink.className = tocLink.className.split(SPACE_CHAR + options.activeLinkClass).join('')\n })\n var tocLis = tocElement\n .querySelectorAll('.' + options.listItemClass)\n forEach.call(tocLis, function (tocLi) {\n tocLi.className = tocLi.className.split(SPACE_CHAR + options.activeListItemClass).join('')\n })\n\n // Add the active class to the active tocLink.\n if (activeTocLink && activeTocLink.className.indexOf(options.activeLinkClass) === -1) {\n activeTocLink.className += SPACE_CHAR + options.activeLinkClass\n }\n var li = activeTocLink && activeTocLink.parentNode\n if (li && li.className.indexOf(options.activeListItemClass) === -1) {\n li.className += SPACE_CHAR + options.activeListItemClass\n }\n\n var tocLists = tocElement\n .querySelectorAll('.' + options.listClass + '.' + options.collapsibleClass)\n\n // Collapse the other collapsible lists.\n forEach.call(tocLists, function (list) {\n if (list.className.indexOf(options.isCollapsedClass) === -1) {\n list.className += SPACE_CHAR + options.isCollapsedClass\n }\n })\n\n // Expand the active link's collapsible list and its sibling if applicable.\n if (activeTocLink && activeTocLink.nextSibling && activeTocLink.nextSibling.className.indexOf(options.isCollapsedClass) !== -1) {\n activeTocLink.nextSibling.className = activeTocLink.nextSibling.className.split(SPACE_CHAR + options.isCollapsedClass).join('')\n }\n removeCollapsedFromParents(activeTocLink && activeTocLink.parentNode.parentNode)\n }\n }\n\n /**\n * Remove collapsed class from parent elements.\n * @param {HTMLElement} element\n * @return {HTMLElement}\n */\n function removeCollapsedFromParents (element) {\n if (element && element.className.indexOf(options.collapsibleClass) !== -1 && element.className.indexOf(options.isCollapsedClass) !== -1) {\n element.className = element.className.split(SPACE_CHAR + options.isCollapsedClass).join('')\n return removeCollapsedFromParents(element.parentNode.parentNode)\n }\n return element\n }\n\n /**\n * Disable TOC Animation when a link is clicked.\n * @param {Event} event\n */\n function disableTocAnimation (event) {\n var target = event.target || event.srcElement\n if (typeof target.className !== 'string' || target.className.indexOf(options.linkClass) === -1) {\n return\n }\n // Bind to tocLink clicks to temporarily disable highlighting\n // while smoothScroll is animating.\n currentlyHighlighting = false\n }\n\n /**\n * Enable TOC Animation.\n */\n function enableTocAnimation () {\n currentlyHighlighting = true\n }\n\n return {\n enableTocAnimation,\n disableTocAnimation,\n render,\n updateToc\n }\n}\n","module.exports = {\n // Where to render the table of contents.\n tocSelector: '.js-toc',\n // Where to grab the headings to build the table of contents.\n contentSelector: '.js-toc-content',\n // Which headings to grab inside of the contentSelector element.\n headingSelector: 'h1, h2, h3',\n // Headings that match the ignoreSelector will be skipped.\n ignoreSelector: '.js-toc-ignore',\n // For headings inside relative or absolute positioned containers within content\n hasInnerContainers: false,\n // Main class to add to links.\n linkClass: 'toc-link',\n // Extra classes to add to links.\n extraLinkClasses: '',\n // Class to add to active links,\n // the link corresponding to the top most heading on the page.\n activeLinkClass: 'is-active-link',\n // Main class to add to lists.\n listClass: 'toc-list',\n // Extra classes to add to lists.\n extraListClasses: '',\n // Class that gets added when a list should be collapsed.\n isCollapsedClass: 'is-collapsed',\n // Class that gets added when a list should be able\n // to be collapsed but isn't necessarily collapsed.\n collapsibleClass: 'is-collapsible',\n // Class to add to list items.\n listItemClass: 'toc-list-item',\n // Class to add to active list items.\n activeListItemClass: 'is-active-li',\n // How many heading levels should not be collapsed.\n // For example, number 6 will show everything since\n // there are only 6 heading levels and number 0 will collapse them all.\n // The sections that are hidden will open\n // and close as you scroll to headings within them.\n collapseDepth: 0,\n // Smooth scrolling enabled.\n scrollSmooth: true,\n // Smooth scroll duration.\n scrollSmoothDuration: 420,\n // Smooth scroll offset.\n scrollSmoothOffset: 0,\n // Callback for scroll end.\n scrollEndCallback: function (e) {},\n // Headings offset between the headings and the top of the document (this is meant for minor adjustments).\n headingsOffset: 1,\n // Timeout between events firing to make sure it's\n // not too rapid (for performance reasons).\n throttleTimeout: 50,\n // Element to add the positionFixedClass to.\n positionFixedSelector: null,\n // Fixed position class to add to make sidebar fixed after scrolling\n // down past the fixedSidebarOffset.\n positionFixedClass: 'is-position-fixed',\n // fixedSidebarOffset can be any number but by default is set\n // to auto which sets the fixedSidebarOffset to the sidebar\n // element's offsetTop from the top of the document on init.\n fixedSidebarOffset: 'auto',\n // includeHtml can be set to true to include the HTML markup from the\n // heading node instead of just including the textContent.\n includeHtml: false,\n // includeTitleTags automatically sets the html title tag of the link\n // to match the title. This can be useful for SEO purposes or\n // when truncating titles.\n includeTitleTags: false,\n // onclick function to apply to all links in toc. will be called with\n // the event as the first parameter, and this can be used to stop,\n // propagation, prevent default or perform action\n onClick: function (e) {},\n // orderedList can be set to false to generate unordered lists (ul)\n // instead of ordered lists (ol)\n orderedList: true,\n // If there is a fixed article scroll container, set to calculate titles' offset\n scrollContainer: null,\n // prevent ToC DOM rendering if it's already rendered by an external system\n skipRendering: false,\n // Optional callback to change heading labels.\n // For example it can be used to cut down and put ellipses on multiline headings you deem too long.\n // Called each time a heading is parsed. Expects a string and returns the modified label to display.\n // Additionally, the attribute `data-heading-label` may be used on a heading to specify\n // a shorter string to be used in the TOC.\n // function (string) => string\n headingLabelCallback: false,\n // ignore headings that are hidden in DOM\n ignoreHiddenElements: false,\n // Optional callback to modify properties of parsed headings.\n // The heading element is passed in node parameter and information parsed by default parser is provided in obj parameter.\n // Function has to return the same or modified obj.\n // The heading will be excluded from TOC if nothing is returned.\n // function (object, HTMLElement) => object | void\n headingObjectCallback: null,\n // Set the base path, useful if you use a `base` tag in `head`.\n basePath: '',\n // Only takes affect when `tocSelector` is scrolling,\n // keep the toc scroll position in sync with the content.\n disableTocScrollSync: false,\n // Offset for the toc scroll (top) position when scrolling the page.\n // Only effective if `disableTocScrollSync` is false.\n tocScrollOffset: 0\n}\n","/* eslint no-var: off */\n/**\n * Tocbot\n * Tocbot creates a table of contents based on HTML headings on a page,\n * this allows users to easily jump to different sections of the document.\n * Tocbot was inspired by tocify (http://gregfranko.com/jquery.tocify.js/).\n * The main differences are that it works natively without any need for jquery or jquery UI).\n *\n * @author Tim Scanlin\n */\n\n/* globals define */\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory(root))\n } else if (typeof exports === 'object') {\n module.exports = factory(root)\n } else {\n root.tocbot = factory(root)\n }\n})(typeof global !== 'undefined' ? global : window || global, function (root) {\n 'use strict'\n\n // Default options.\n var defaultOptions = require('./default-options.js')\n // Object to store current options.\n var options = {}\n // Object for public APIs.\n var tocbot = {}\n\n var BuildHtml = require('./build-html.js')\n var ParseContent = require('./parse-content.js')\n var updateTocScroll = require('./update-toc-scroll.js')\n // Keep these variables at top scope once options are passed in.\n var buildHtml\n var parseContent\n\n // Just return if its not a browser.\n var supports = !!root && !!root.document && !!root.document.querySelector && !!root.addEventListener // Feature test\n if (typeof window === 'undefined' && !supports) {\n return\n }\n var headingsArray\n\n // From: https://github.com/Raynos/xtend\n var hasOwnProperty = Object.prototype.hasOwnProperty\n function extend () {\n var target = {}\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n return target\n }\n\n // From: https://remysharp.com/2010/07/21/throttling-function-calls\n function throttle (fn, threshold, scope) {\n threshold || (threshold = 250)\n var last\n var deferTimer\n return function () {\n var context = scope || this\n var now = +new Date()\n var args = arguments\n if (last && now < last + threshold) {\n // hold on to it\n clearTimeout(deferTimer)\n deferTimer = setTimeout(function () {\n last = now\n fn.apply(context, args)\n }, threshold)\n } else {\n last = now\n fn.apply(context, args)\n }\n }\n }\n\n function getContentElement (options) {\n try {\n return options.contentElement || document.querySelector(options.contentSelector)\n } catch (e) {\n console.warn('Contents element not found: ' + options.contentSelector) // eslint-disable-line\n return null\n }\n }\n\n function getTocElement (options) {\n try {\n return options.tocElement || document.querySelector(options.tocSelector)\n } catch (e) {\n console.warn('TOC element not found: ' + options.tocSelector) // eslint-disable-line\n return null\n }\n }\n\n /**\n * Destroy tocbot.\n */\n tocbot.destroy = function () {\n var tocElement = getTocElement(options)\n if (tocElement === null) {\n return\n }\n\n if (!options.skipRendering) {\n // Clear HTML.\n if (tocElement) {\n tocElement.innerHTML = ''\n }\n }\n\n // Remove event listeners.\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).removeEventListener('scroll', this._scrollListener, false)\n document.querySelector(options.scrollContainer).removeEventListener('resize', this._scrollListener, false)\n if (buildHtml) {\n document.querySelector(options.scrollContainer).removeEventListener('click', this._clickListener, false)\n }\n } else {\n document.removeEventListener('scroll', this._scrollListener, false)\n document.removeEventListener('resize', this._scrollListener, false)\n if (buildHtml) {\n document.removeEventListener('click', this._clickListener, false)\n }\n }\n }\n\n /**\n * Initialize tocbot.\n * @param {object} customOptions\n */\n tocbot.init = function (customOptions) {\n // feature test\n if (!supports) {\n return\n }\n\n // Merge defaults with user options.\n // Set to options variable at the top.\n options = extend(defaultOptions, customOptions || {})\n this.options = options\n this.state = {}\n\n // Init smooth scroll if enabled (default).\n if (options.scrollSmooth) {\n options.duration = options.scrollSmoothDuration\n options.offset = options.scrollSmoothOffset\n tocbot.scrollSmooth = require('./scroll-smooth').initSmoothScrolling(options)\n }\n\n // Pass options to these modules.\n buildHtml = BuildHtml(options)\n parseContent = ParseContent(options)\n\n // For testing purposes.\n this._buildHtml = buildHtml\n this._parseContent = parseContent\n this._headingsArray = headingsArray\n\n // Destroy it if it exists first.\n tocbot.destroy()\n\n var contentElement = getContentElement(options)\n if (contentElement === null) {\n return\n }\n\n var tocElement = getTocElement(options)\n if (tocElement === null) {\n return\n }\n\n // Get headings array.\n headingsArray = parseContent.selectHeadings(contentElement, options.headingSelector)\n // Return if no headings are found.\n if (headingsArray === null) {\n return\n }\n\n // Build nested headings array.\n var nestedHeadingsObj = parseContent.nestHeadingsArray(headingsArray)\n var nestedHeadings = nestedHeadingsObj.nest\n\n // Render.\n if (!options.skipRendering) {\n buildHtml.render(tocElement, nestedHeadings)\n } else {\n // No need to attach listeners if skipRendering is true, this was causing errors.\n return this\n }\n\n // Update Sidebar and bind listeners.\n this._scrollListener = throttle(function (e) {\n buildHtml.updateToc(headingsArray)\n !options.disableTocScrollSync && updateTocScroll(options)\n var isTop = e && e.target && e.target.scrollingElement && e.target.scrollingElement.scrollTop === 0\n if ((e && (e.eventPhase === 0 || e.currentTarget === null)) || isTop) {\n buildHtml.updateToc(headingsArray)\n if (options.scrollEndCallback) {\n options.scrollEndCallback(e)\n }\n }\n }, options.throttleTimeout)\n this._scrollListener()\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).addEventListener('scroll', this._scrollListener, false)\n document.querySelector(options.scrollContainer).addEventListener('resize', this._scrollListener, false)\n } else {\n document.addEventListener('scroll', this._scrollListener, false)\n document.addEventListener('resize', this._scrollListener, false)\n }\n\n // Bind click listeners to disable animation.\n var timeout = null\n this._clickListener = throttle(function (event) {\n if (options.scrollSmooth) {\n buildHtml.disableTocAnimation(event)\n }\n buildHtml.updateToc(headingsArray)\n // Timeout to re-enable the animation.\n timeout && clearTimeout(timeout)\n timeout = setTimeout(function () {\n buildHtml.enableTocAnimation()\n }, options.scrollSmoothDuration)\n }, options.throttleTimeout)\n\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).addEventListener('click', this._clickListener, false)\n } else {\n document.addEventListener('click', this._clickListener, false)\n }\n\n return this\n }\n\n /**\n * Refresh tocbot.\n */\n tocbot.refresh = function (customOptions) {\n tocbot.destroy()\n tocbot.init(customOptions || this.options)\n }\n\n // Make tocbot available globally.\n root.tocbot = tocbot\n\n return tocbot\n})\n","/* eslint no-var: off */\n/**\n * This file is responsible for parsing the content from the DOM and making\n * sure data is nested properly.\n *\n * @author Tim Scanlin\n */\n\nmodule.exports = function parseContent (options) {\n var reduce = [].reduce\n\n /**\n * Get the last item in an array and return a reference to it.\n * @param {Array} array\n * @return {Object}\n */\n function getLastItem (array) {\n return array[array.length - 1]\n }\n\n /**\n * Get heading level for a heading dom node.\n * @param {HTMLElement} heading\n * @return {Number}\n */\n function getHeadingLevel (heading) {\n return +heading.nodeName.toUpperCase().replace('H', '')\n }\n\n /**\n * Determine whether the object is an HTML Element.\n * Also works inside iframes. HTML Elements might be created by the parent document.\n * @param {Object} maybeElement\n * @return {Number}\n */\n function isHTMLElement (maybeElement) {\n try {\n return (\n maybeElement instanceof window.HTMLElement ||\n maybeElement instanceof window.parent.HTMLElement\n )\n } catch (e) {\n return maybeElement instanceof window.HTMLElement\n }\n }\n\n /**\n * Get important properties from a heading element and store in a plain object.\n * @param {HTMLElement} heading\n * @return {Object}\n */\n function getHeadingObject (heading) {\n // each node is processed twice by this method because nestHeadingsArray() and addNode() calls it\n // first time heading is real DOM node element, second time it is obj\n // that is causing problem so I am processing only original DOM node\n if (!isHTMLElement(heading)) return heading\n\n if (options.ignoreHiddenElements && (!heading.offsetHeight || !heading.offsetParent)) {\n return null\n }\n\n const headingLabel = heading.getAttribute('data-heading-label') ||\n (options.headingLabelCallback ? String(options.headingLabelCallback(heading.textContent)) : heading.textContent.trim())\n var obj = {\n id: heading.id,\n children: [],\n nodeName: heading.nodeName,\n headingLevel: getHeadingLevel(heading),\n textContent: headingLabel\n }\n\n if (options.includeHtml) {\n obj.childNodes = heading.childNodes\n }\n\n if (options.headingObjectCallback) {\n return options.headingObjectCallback(obj, heading)\n }\n\n return obj\n }\n\n /**\n * Add a node to the nested array.\n * @param {Object} node\n * @param {Array} nest\n * @return {Array}\n */\n function addNode (node, nest) {\n var obj = getHeadingObject(node)\n var level = obj.headingLevel\n var array = nest\n var lastItem = getLastItem(array)\n var lastItemLevel = lastItem\n ? lastItem.headingLevel\n : 0\n var counter = level - lastItemLevel\n\n while (counter > 0) {\n lastItem = getLastItem(array)\n // Handle case where there are multiple h5+ in a row.\n if (lastItem && level === lastItem.headingLevel) {\n break\n } else if (lastItem && lastItem.children !== undefined) {\n array = lastItem.children\n }\n counter--\n }\n\n if (level >= options.collapseDepth) {\n obj.isCollapsed = true\n }\n\n array.push(obj)\n return array\n }\n\n /**\n * Select headings in content area, exclude any selector in options.ignoreSelector\n * @param {HTMLElement} contentElement\n * @param {Array} headingSelector\n * @return {Array}\n */\n function selectHeadings (contentElement, headingSelector) {\n var selectors = headingSelector\n if (options.ignoreSelector) {\n selectors = headingSelector.split(',')\n .map(function mapSelectors (selector) {\n return selector.trim() + ':not(' + options.ignoreSelector + ')'\n })\n }\n try {\n return contentElement.querySelectorAll(selectors)\n } catch (e) {\n console.warn('Headers not found with selector: ' + selectors); // eslint-disable-line\n return null\n }\n }\n\n /**\n * Nest headings array into nested arrays with 'children' property.\n * @param {Array} headingsArray\n * @return {Object}\n */\n function nestHeadingsArray (headingsArray) {\n return reduce.call(headingsArray, function reducer (prev, curr) {\n var currentHeading = getHeadingObject(curr)\n if (currentHeading) {\n addNode(currentHeading, prev.nest)\n }\n return prev\n }, {\n nest: []\n })\n }\n\n return {\n nestHeadingsArray,\n selectHeadings\n }\n}\n","/* eslint no-var: off */\n/* globals location, requestAnimationFrame */\n\nexports.initSmoothScrolling = initSmoothScrolling\n\nfunction initSmoothScrolling (options) {\n // if (isCssSmoothSCrollSupported()) { return }\n\n var duration = options.duration\n var offset = options.offset\n\n var pageUrl = location.hash\n ? stripHash(location.href)\n : location.href\n\n delegatedLinkHijacking()\n\n function delegatedLinkHijacking () {\n document.body.addEventListener('click', onClick, false)\n\n function onClick (e) {\n if (\n !isInPageLink(e.target) ||\n e.target.className.indexOf('no-smooth-scroll') > -1 ||\n (e.target.href.charAt(e.target.href.length - 2) === '#' &&\n e.target.href.charAt(e.target.href.length - 1) === '!') ||\n e.target.className.indexOf(options.linkClass) === -1) {\n return\n }\n\n // Don't prevent default or hash doesn't change.\n // e.preventDefault()\n\n jump(e.target.hash, {\n duration,\n offset,\n callback: function () {\n setFocus(e.target.hash)\n }\n })\n }\n }\n\n function isInPageLink (n) {\n return n.tagName.toLowerCase() === 'a' &&\n (n.hash.length > 0 || n.href.charAt(n.href.length - 1) === '#') &&\n (stripHash(n.href) === pageUrl || stripHash(n.href) + '#' === pageUrl)\n }\n\n function stripHash (url) {\n return url.slice(0, url.lastIndexOf('#'))\n }\n\n // function isCssSmoothSCrollSupported () {\n // return 'scrollBehavior' in document.documentElement.style\n // }\n\n // Adapted from:\n // https://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/\n function setFocus (hash) {\n var element = document.getElementById(hash.substring(1))\n\n if (element) {\n if (!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)) {\n element.tabIndex = -1\n }\n\n element.focus()\n }\n }\n}\n\nfunction jump (target, options) {\n var start = window.pageYOffset\n var opt = {\n duration: options.duration,\n offset: options.offset || 0,\n callback: options.callback,\n easing: options.easing || easeInOutQuad\n }\n // This makes ids that start with a number work: ('[id=\"' + decodeURI(target).split('#').join('') + '\"]')\n // DecodeURI for nonASCII hashes, they was encoded, but id was not encoded, it lead to not finding the tgt element by id.\n // And this is for IE: document.body.scrollTop\n // Handle decoded and non-decoded URIs since sometimes URLs automatically transform them (support for internation chars).\n var tgt = document.querySelector('[id=\"' + decodeURI(target).split('#').join('') + '\"]') ||\n document.querySelector('[id=\"' + (target).split('#').join('') + '\"]')\n var distance = typeof target === 'string'\n ? opt.offset + (\n target\n ? (tgt && tgt.getBoundingClientRect().top) || 0 // handle non-existent links better.\n : -(document.documentElement.scrollTop || document.body.scrollTop))\n : target\n var duration = typeof opt.duration === 'function'\n ? opt.duration(distance)\n : opt.duration\n var timeStart\n var timeElapsed\n\n requestAnimationFrame(function (time) { timeStart = time; loop(time) })\n function loop (time) {\n timeElapsed = time - timeStart\n\n window.scrollTo(0, opt.easing(timeElapsed, start, distance, duration))\n\n if (timeElapsed < duration) { requestAnimationFrame(loop) } else { end() }\n }\n\n function end () {\n window.scrollTo(0, start + distance)\n\n if (typeof opt.callback === 'function') { opt.callback() }\n }\n\n // Robert Penner's easeInOutQuad - http://robertpenner.com/easing/\n function easeInOutQuad (t, b, c, d) {\n t /= d / 2\n if (t < 1) return c / 2 * t * t + b\n t--\n return -c / 2 * (t * (t - 2) - 1) + b\n }\n}\n","/* eslint no-var: off */\n\nmodule.exports = function updateTocScroll (options) {\n var toc = options.tocElement || document.querySelector(options.tocSelector)\n if (toc && toc.scrollHeight > toc.clientHeight) {\n var activeItem = toc.querySelector('.' + options.activeListItemClass)\n if (activeItem) {\n toc.scrollTop = activeItem.offsetTop - options.tocScrollOffset\n }\n }\n}\n"],"names":["module","exports","options","tocElement","forEach","some","body","document","currentlyHighlighting","SPACE_CHAR","createEl","d","container","link","appendChild","data","item","createElement","a","listItemClass","setAttribute","onClick","onclick","includeTitleTags","textContent","includeHtml","childNodes","length","call","node","cloneNode","basePath","id","linkClass","nodeName","extraLinkClasses","createLink","children","list","createList","isCollapsed","child","listElement","classes","listClass","extraListClasses","collapsibleClass","isCollapsedClass","getHeadingTopPos","obj","position","offsetTop","hasInnerContainers","offsetParent","removeCollapsedFromParents","element","className","indexOf","split","join","parentNode","enableTocAnimation","disableTocAnimation","event","target","srcElement","render","parent","firstChild","removeChild","updateToc","headingsArray","top","scrollContainer","querySelector","scrollTop","documentElement","positionFixedSelector","posFixedEl","fixedSidebarOffset","positionFixedClass","updateFixedSidebarClass","topHeader","headings","heading","i","headingsOffset","oldActiveTocLink","activeLinkClass","activeTocLink","replace","tocLinks","querySelectorAll","tocLink","tocLis","tocLi","activeListItemClass","li","tocLists","nextSibling","tocSelector","contentSelector","headingSelector","ignoreSelector","collapseDepth","scrollSmooth","scrollSmoothDuration","scrollSmoothOffset","scrollEndCallback","e","throttleTimeout","orderedList","skipRendering","headingLabelCallback","ignoreHiddenElements","headingObjectCallback","disableTocScrollSync","tocScrollOffset","root","g","window","buildHtml","parseContent","defaultOptions","tocbot","BuildHtml","ParseContent","updateTocScroll","supports","addEventListener","hasOwnProperty","Object","prototype","destroy","getTocElement","innerHTML","removeEventListener","this","_scrollListener","_clickListener","init","customOptions","extend","state","duration","offset","_buildHtml","_parseContent","_headingsArray","contentElement","getContentElement","selectHeadings","nestedHeadings","nestHeadingsArray","nest","throttle","isTop","scrollingElement","eventPhase","currentTarget","timeout","clearTimeout","setTimeout","refresh","arguments","source","key","fn","threshold","scope","last","deferTimer","context","now","Date","args","apply","console","warn","reduce","getLastItem","array","getHeadingLevel","toUpperCase","getHeadingObject","maybeElement","HTMLElement","isHTMLElement","offsetHeight","headingLabel","getAttribute","String","trim","headingLevel","prev","curr","currentHeading","level","lastItem","counter","undefined","push","addNode","selectors","map","selector","initSmoothScrolling","pageUrl","location","hash","stripHash","href","url","slice","lastIndexOf","n","tagName","toLowerCase","charAt","timeStart","timeElapsed","start","pageYOffset","opt","callback","easing","easeInOutQuad","tgt","decodeURI","distance","getBoundingClientRect","loop","time","scrollTo","requestAnimationFrame","end","t","b","c","jump","getElementById","substring","test","tabIndex","focus","toc","scrollHeight","clientHeight","activeItem"],"sourceRoot":""} \ No newline at end of file diff --git a/js/245.js b/js/245.js new file mode 100644 index 00000000..2b09eedf --- /dev/null +++ b/js/245.js @@ -0,0 +1,2 @@ +(globalThis.webpackChunksakurairo_scripts=globalThis.webpackChunksakurairo_scripts||[]).push([[245],{245:()=>{!function(t,e,n,o){if(t.console=t.console||{info:function(t){}},n)if(n.fn.fancybox)console.info("fancyBox already initialized");else{var a,i,s,r,c={closeExisting:!1,loop:!1,gutter:50,keyboard:!0,preventCaptionOverlap:!0,arrows:!0,infobar:!0,smallBtn:"auto",toolbar:"auto",buttons:["zoom","slideShow","thumbs","close"],idleTime:3,protect:!1,modal:!1,image:{preload:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'',preload:!0,css:{},attr:{scrolling:"auto"}},video:{tpl:'',format:"",autoStart:!0},defaultType:"image",animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'

        ',spinnerTpl:'
        ',errorTpl:'

        {{ERROR}}

        ',btnTpl:{download:'',zoom:'',close:'',arrowLeft:'',arrowRight:'',smallBtn:''},parentEl:"body",hideScrollbar:!0,autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:3e3},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"},wheel:"auto",onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{preventCaptionOverlap:!1,idleTime:!1,clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded.
        Please try again later.",PLAY_START:"Start slideshow",PLAY_STOP:"Pause slideshow",FULL_SCREEN:"Full screen",THUMBS:"Thumbnails",DOWNLOAD:"Download",SHARE:"Share",ZOOM:"Zoom"},de:{CLOSE:"Schließen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden.
        Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder",DOWNLOAD:"Herunterladen",SHARE:"Teilen",ZOOM:"Vergrößern"}}},l=n(t),d=n(e),u=0,p=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)},f=t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)},h=function(){var t,n=e.createElement("fakeelement"),a={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in a)if(n.style[t]!==o)return a[t];return"transitionend"}(),g=function(t){return t&&t.length&&t[0].offsetHeight},b=function(t,e){var o=n.extend(!0,{},t,e);return n.each(e,(function(t,e){n.isArray(e)&&(o[t]=e)})),o},m=function(t,e,o){var a=this;a.opts=b({index:o},n.fancybox.defaults),n.isPlainObject(e)&&(a.opts=b(a.opts,e)),n.fancybox.isMobile&&(a.opts=b(a.opts,a.opts.mobile)),a.id=a.opts.id||++u,a.currIndex=parseInt(a.opts.index,10)||0,a.prevIndex=null,a.prevPos=null,a.currPos=0,a.firstRun=!0,a.group=[],a.slides={},a.addContent(t),a.group.length&&a.init()};n.extend(m.prototype,{init:function(){var o,a,i=this,s=i.group[i.currIndex].opts;s.closeExisting&&n.fancybox.close(!0),n("body").addClass("fancybox-active"),!n.fancybox.getInstance()&&!1!==s.hideScrollbar&&!n.fancybox.isMobile&&e.body.scrollHeight>t.innerHeight&&(n("head").append('"),n("body").addClass("compensate-for-scrollbar")),a="",n.each(s.buttons,(function(t,e){a+=s.btnTpl[e]||""})),o=n(i.translate(i,s.baseTpl.replace("{{buttons}}",a).replace("{{arrows}}",s.btnTpl.arrowLeft+s.btnTpl.arrowRight))).attr("id","fancybox-container-"+i.id).addClass(s.baseClass).data("FancyBox",i).appendTo(s.parentEl),i.$refs={container:o},["bg","inner","infobar","toolbar","stage","caption","navigation"].forEach((function(t){i.$refs[t]=o.find(".fancybox-"+t)})),i.trigger("onInit"),i.activate(),i.jumpTo(i.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang]||t.opts.i18n.en;return e.replace(/\{\{(\w+)\}\}/g,(function(t,e){return n[e]===o?t:n[e]}))},addContent:function(t){var e,a=this,i=n.makeArray(t);n.each(i,(function(t,e){var i,s,r,c,l,d={},u={};n.isPlainObject(e)?(d=e,u=e.opts||e):"object"===n.type(e)&&n(e).length?(u=(i=n(e)).data()||{},(u=n.extend(!0,{},u,u.options)).$orig=i,d.src=a.opts.src||u.src||i.attr("href"),d.type||d.src||(d.type="inline",d.src=e)):d={type:"html",src:e+""},d.opts=n.extend(!0,{},a.opts,u),n.isArray(u.buttons)&&(d.opts.buttons=u.buttons),n.fancybox.isMobile&&d.opts.mobile&&(d.opts=b(d.opts,d.opts.mobile)),s=d.type||d.opts.type,c=d.src||"",!s&&c&&((r=c.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(s="video",d.opts.video.format||(d.opts.video.format="video/"+("ogv"===r[1]?"ogg":r[1]))):c.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?s="image":c.match(/\.(pdf)((\?|#).*)?$/i)?(s="iframe",d=n.extend(!0,d,{contentType:"pdf",opts:{iframe:{preload:!1}}})):"#"===c.charAt(0)&&(s="inline")),s?d.type=s:a.trigger("objectNeedsType",d),d.contentType||(d.contentType=n.inArray(d.type,["html","inline","ajax"])>-1?"html":d.type),d.index=a.group.length,"auto"==d.opts.smallBtn&&(d.opts.smallBtn=n.inArray(d.type,["html","inline","ajax"])>-1),"auto"===d.opts.toolbar&&(d.opts.toolbar=!d.opts.smallBtn),d.$thumb=d.opts.$thumb||null,d.opts.$trigger&&d.index===a.opts.index&&(d.$thumb=d.opts.$trigger.find("img:first"),d.$thumb.length&&(d.opts.$orig=d.opts.$trigger)),d.$thumb&&d.$thumb.length||!d.opts.$orig||(d.$thumb=d.opts.$orig.find("img:first")),d.$thumb&&!d.$thumb.length&&(d.$thumb=null),d.thumb=d.opts.thumb||(d.$thumb?d.$thumb[0].src:null),"function"===n.type(d.opts.caption)&&(d.opts.caption=d.opts.caption.apply(e,[a,d])),"function"===n.type(a.opts.caption)&&(d.opts.caption=a.opts.caption.apply(e,[a,d])),d.opts.caption instanceof n||(d.opts.caption=d.opts.caption===o?"":d.opts.caption+""),"ajax"===d.type&&(l=c.split(/\s+/,2)).length>1&&(d.src=l.shift(),d.opts.filter=l.shift()),d.opts.modal&&(d.opts=n.extend(!0,d.opts,{trapFocus:!0,infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),a.group.push(d)})),Object.keys(a.slides).length&&(a.updateControls(),(e=a.Thumbs)&&e.isActive&&(e.create(),e.focus()))},addEvents:function(){var e=this;e.removeEvents(),e.$refs.container.on("click.fb-close","[data-fancybox-close]",(function(t){t.stopPropagation(),t.preventDefault(),e.close(t)})).on("touchstart.fb-prev click.fb-prev","[data-fancybox-prev]",(function(t){t.stopPropagation(),t.preventDefault(),e.previous()})).on("touchstart.fb-next click.fb-next","[data-fancybox-next]",(function(t){t.stopPropagation(),t.preventDefault(),e.next()})).on("click.fb","[data-fancybox-zoom]",(function(t){e[e.isScaledDown()?"scaleToActual":"scaleToFit"]()})),l.on("orientationchange.fb resize.fb",(function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?(e.requestId&&f(e.requestId),e.requestId=p((function(){e.update(t)}))):(e.current&&"iframe"===e.current.type&&e.$refs.stage.hide(),setTimeout((function(){e.$refs.stage.show(),e.update(t)}),n.fancybox.isMobile?600:250))})),d.on("keydown.fb",(function(t){var o=(n.fancybox?n.fancybox.getInstance():null).current,a=t.keyCode||t.which;if(9!=a){if(!(!o.opts.keyboard||t.ctrlKey||t.altKey||t.shiftKey||n(t.target).is("input,textarea,video,audio,select")))return 8===a||27===a?(t.preventDefault(),void e.close(t)):37===a||38===a?(t.preventDefault(),void e.previous()):39===a||40===a?(t.preventDefault(),void e.next()):void e.trigger("afterKeydown",t,a)}else o.opts.trapFocus&&e.focus(t)})),e.group[e.currIndex].opts.idleTime&&(e.idleSecondsCounter=0,d.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",(function(t){e.idleSecondsCounter=0,e.isIdle&&e.showControls(),e.isIdle=!1})),e.idleInterval=t.setInterval((function(){e.idleSecondsCounter++,e.idleSecondsCounter>=e.group[e.currIndex].opts.idleTime&&!e.isDragging&&(e.isIdle=!0,e.idleSecondsCounter=0,e.hideControls())}),1e3))},removeEvents:function(){var e=this;l.off("orientationchange.fb resize.fb"),d.off("keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e){var a,i,s,r,c,l,d,u,p,f=this,h=f.group.length;if(!(f.isDragging||f.isClosing||f.isAnimating&&f.firstRun)){if(t=parseInt(t,10),!(s=f.current?f.current.opts.loop:f.opts.loop)&&(t<0||t>=h))return!1;if(a=f.firstRun=!Object.keys(f.slides).length,c=f.current,f.prevIndex=f.currIndex,f.prevPos=f.currPos,r=f.createSlide(t),h>1&&((s||r.index0)&&f.createSlide(t-1)),f.current=r,f.currIndex=r.index,f.currPos=r.pos,f.trigger("beforeShow",a),f.updateControls(),r.forcedDuration=o,n.isNumeric(e)?r.forcedDuration=e:e=r.opts[a?"animationDuration":"transitionDuration"],e=parseInt(e,10),i=f.isMoved(r),r.$slide.addClass("fancybox-slide--current"),a)return r.opts.animationEffect&&e&&f.$refs.container.css("transition-duration",e+"ms"),f.$refs.container.addClass("fancybox-is-open").trigger("focus"),f.loadSlide(r),void f.preload("image");l=n.fancybox.getTranslate(c.$slide),d=n.fancybox.getTranslate(f.$refs.stage),n.each(f.slides,(function(t,e){n.fancybox.stop(e.$slide,!0)})),c.pos!==r.pos&&(c.isComplete=!1),c.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"),i?(p=l.left-(c.pos*l.width+c.pos*c.opts.gutter),n.each(f.slides,(function(t,o){o.$slide.removeClass("fancybox-animated").removeClass((function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")}));var a=o.pos*l.width+o.pos*o.opts.gutter;n.fancybox.setTranslate(o.$slide,{top:0,left:a-d.left+p}),o.pos!==r.pos&&o.$slide.addClass("fancybox-slide--"+(o.pos>r.pos?"next":"previous")),g(o.$slide),n.fancybox.animate(o.$slide,{top:0,left:(o.pos-r.pos)*l.width+(o.pos-r.pos)*o.opts.gutter},e,(function(){o.$slide.css({transform:"",opacity:""}).removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===f.currPos&&f.complete()}))}))):e&&r.opts.transitionEffect&&(u="fancybox-animated fancybox-fx-"+r.opts.transitionEffect,c.$slide.addClass("fancybox-slide--"+(c.pos>r.pos?"next":"previous")),n.fancybox.animate(c.$slide,u,e,(function(){c.$slide.removeClass(u).removeClass("fancybox-slide--next fancybox-slide--previous")}),!1)),r.isLoaded?f.revealContent(r):f.loadSlide(r),f.preload("image")}},createSlide:function(t){var e,o,a=this;return o=(o=t%a.group.length)<0?a.group.length+o:o,!a.slides[t]&&a.group[o]&&(e=n('
        ').appendTo(a.$refs.stage),a.slides[t]=n.extend(!0,{},a.group[o],{pos:t,$slide:e,isLoaded:!1}),a.updateSlide(a.slides[t])),a.slides[t]},scaleToActual:function(t,e,a){var i,s,r,c,l,d=this,u=d.current,p=u.$content,f=n.fancybox.getTranslate(u.$slide).width,h=n.fancybox.getTranslate(u.$slide).height,g=u.width,b=u.height;d.isAnimating||d.isMoved()||!p||"image"!=u.type||!u.isLoaded||u.hasError||(d.isAnimating=!0,n.fancybox.stop(p),t=t===o?.5*f:t,e=e===o?.5*h:e,(i=n.fancybox.getTranslate(p)).top-=n.fancybox.getTranslate(u.$slide).top,i.left-=n.fancybox.getTranslate(u.$slide).left,c=g/i.width,l=b/i.height,s=.5*f-.5*g,r=.5*h-.5*b,g>f&&((s=i.left*c-(t*c-t))>0&&(s=0),sh&&((r=i.top*l-(e*l-e))>0&&(r=0),re-.5&&(c=e),(l*=a)>o-.5&&(l=o),"image"===t.type?(d.top=Math.floor(.5*(o-l))+parseFloat(r.css("paddingTop")),d.left=Math.floor(.5*(e-c))+parseFloat(r.css("paddingLeft"))):"video"===t.contentType&&(l>c/(i=t.opts.width&&t.opts.height?c/l:t.opts.ratio||16/9)?l=c/i:c>l*i&&(c=l*i)),d.width=c,d.height=l,d)},update:function(t){var e=this;n.each(e.slides,(function(n,o){e.updateSlide(o,t)}))},updateSlide:function(t,e){var o=this,a=t&&t.$content,i=t.width||t.opts.width,s=t.height||t.opts.height,r=t.$slide;o.adjustCaption(t),a&&(i||s||"video"===t.contentType)&&!t.hasError&&(n.fancybox.stop(a),n.fancybox.setTranslate(a,o.getFitPos(t)),t.pos===o.currPos&&(o.isAnimating=!1,o.updateCursor())),o.adjustLayout(t),r.length&&(r.trigger("refresh"),t.pos===o.currPos&&o.$refs.toolbar.add(o.$refs.navigation.find(".fancybox-button--arrow_right")).toggleClass("compensate-for-scrollbar",r.get(0).scrollHeight>r.get(0).clientHeight)),o.trigger("onUpdate",t,e)},centerSlide:function(t){var e=this,a=e.current,i=a.$slide;!e.isClosing&&a&&(i.siblings().css({transform:"",opacity:""}),i.parent().children().removeClass("fancybox-slide--previous fancybox-slide--next"),n.fancybox.animate(i,{top:0,left:0,opacity:1},t===o?0:t,(function(){i.css({transform:"",opacity:""}),a.isComplete||e.complete()}),!1))},isMoved:function(t){var e,o,a=t||this.current;return!!a&&(o=n.fancybox.getTranslate(this.$refs.stage),e=n.fancybox.getTranslate(a.$slide),!a.$slide.hasClass("fancybox-animated")&&(Math.abs(e.top-o.top)>.5||Math.abs(e.left-o.left)>.5))},updateCursor:function(t,e){var o,a,i=this,s=i.current,r=i.$refs.container;s&&!i.isClosing&&i.Guestures&&(r.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"),a=!!(o=i.canPan(t,e))||i.isZoomable(),r.toggleClass("fancybox-is-zoomable",a),n("[data-fancybox-zoom]").prop("disabled",!a),o?r.addClass("fancybox-can-pan"):a&&("zoom"===s.opts.clickContent||n.isFunction(s.opts.clickContent)&&"zoom"==s.opts.clickContent(s))?r.addClass("fancybox-can-zoomIn"):s.opts.touch&&(s.opts.touch.vertical||i.group.length>1)&&"video"!==s.contentType&&r.addClass("fancybox-can-swipe"))},isZoomable:function(){var t,e=this,n=e.current;if(n&&!e.isClosing&&"image"===n.type&&!n.hasError){if(!n.isLoaded)return!0;if((t=e.getFitPos(n))&&(n.width>t.width||n.height>t.height))return!0}return!1},isScaledDown:function(t,e){var a=!1,i=this.current,s=i.$content;return t!==o&&e!==o?a=t1.5||Math.abs(i.height-s.height)>1.5)),s},loadSlide:function(t){var e,o,a,i=this;if(!t.isLoading&&!t.isLoaded){if(t.isLoading=!0,!1===i.trigger("beforeLoad",t))return t.isLoading=!1,!1;switch(e=t.type,(o=t.$slide).off("refresh").trigger("onReset").addClass(t.opts.slideClass),e){case"image":i.setImage(t);break;case"iframe":i.setIframe(t);break;case"html":i.setContent(t,t.src||t.content);break;case"video":i.setContent(t,t.opts.video.tpl.replace(/\{\{src\}\}/gi,t.src).replace("{{format}}",t.opts.videoFormat||t.opts.video.format||"").replace("{{poster}}",t.thumb||""));break;case"inline":n(t.src).length?i.setContent(t,n(t.src)):i.setError(t);break;case"ajax":i.showLoading(t),a=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&i.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&i.setError(t)}})),o.one("onReset",(function(){a.abort()}));break;default:i.setError(t)}return!0}},setImage:function(t){var o,a=this;setTimeout((function(){var e=t.$image;a.isClosing||!t.isLoading||e&&e.length&&e[0].complete||t.hasError||a.showLoading(t)}),50),a.checkSrcset(t),t.$content=n('
        ').addClass("fancybox-is-hidden").appendTo(t.$slide.addClass("fancybox-slide--image")),!1!==t.opts.preload&&t.opts.width&&t.opts.height&&t.thumb&&(t.width=t.opts.width,t.height=t.opts.height,(o=e.createElement("img")).onerror=function(){n(this).remove(),t.$ghost=null},o.onload=function(){a.afterLoad(t)},t.$ghost=n(o).addClass("fancybox-image").appendTo(t.$content).attr("src",t.thumb)),a.setBigImage(t)},checkSrcset:function(e){var n,o,a,i,s=e.opts.srcset||e.opts.image.srcset;if(s){a=t.devicePixelRatio||1,i=t.innerWidth*a,o=s.split(",").map((function(t){var e={};return t.trim().split(/\s+/).forEach((function(t,n){var o=parseInt(t.substring(0,t.length-1),10);if(0===n)return e.url=t;o&&(e.value=o,e.postfix=t[t.length-1])})),e})),o.sort((function(t,e){return t.value-e.value}));for(var r=0;r=i||"x"===c.postfix&&c.value>=a){n=c;break}}!n&&o.length&&(n=o[o.length-1]),n&&(e.src=n.url,e.width&&e.height&&"w"==n.postfix&&(e.height=e.width/e.height*n.value,e.width=n.value),e.opts.srcset=s)}},setBigImage:function(t){var o=this,a=e.createElement("img"),i=n(a);t.$image=i.one("error",(function(){o.setError(t)})).one("load",(function(){var e;t.$ghost||(o.resolveImageSlideSize(t,this.naturalWidth,this.naturalHeight),o.afterLoad(t)),o.isClosing||(t.opts.srcset&&((e=t.opts.sizes)&&"auto"!==e||(e=(t.width/t.height>1&&l.width()/l.height()>1?"100":Math.round(t.width/t.height*100))+"vw"),i.attr("sizes",e).attr("srcset",t.opts.srcset)),t.$ghost&&setTimeout((function(){t.$ghost&&!o.isClosing&&t.$ghost.hide()}),Math.min(300,Math.max(1e3,t.height/1600))),o.hideLoading(t))})).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),(a.complete||"complete"==a.readyState)&&i.naturalWidth&&i.naturalHeight?i.trigger("load"):a.error&&i.trigger("error")},resolveImageSlideSize:function(t,e,n){var o=parseInt(t.opts.width,10),a=parseInt(t.opts.height,10);t.width=e,t.height=n,o>0&&(t.width=o,t.height=Math.floor(o*n/e)),a>0&&(t.width=Math.floor(a*e/n),t.height=a)},setIframe:function(t){var e,a=this,i=t.opts.iframe,s=t.$slide;t.$content=n('
        ').css(i.css).appendTo(s),s.addClass("fancybox-slide--"+t.contentType),t.$iframe=e=n(i.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(i.attr).appendTo(t.$content),i.preload?(a.showLoading(t),e.on("load.fb error.fb",(function(e){this.isReady=1,t.$slide.trigger("refresh"),a.afterLoad(t)})),s.on("refresh.fb",(function(){var n,a=t.$content,r=i.css.width,c=i.css.height;if(1===e[0].isReady){try{n=e.contents().find("body")}catch(t){}n&&n.length&&n.children().length&&(s.css("overflow","visible"),a.css({width:"100%","max-width":"100%",height:"9999px"}),r===o&&(r=Math.ceil(Math.max(n[0].clientWidth,n.outerWidth(!0)))),a.css("width",r||"").css("max-width",""),c===o&&(c=Math.ceil(Math.max(n[0].clientHeight,n.outerHeight(!0)))),a.css("height",c||""),s.css("overflow","auto")),a.removeClass("fancybox-is-hidden")}}))):a.afterLoad(t),e.attr("src",t.src),s.one("onReset",(function(){try{n(this).find("iframe").hide().unbind().attr("src","//about:blank")}catch(t){}n(this).off("refresh.fb").empty(),t.isLoaded=!1,t.isRevealed=!1}))},setContent:function(t,e){var o,a=this;a.isClosing||(a.hideLoading(t),t.$content&&n.fancybox.stop(t.$content),t.$slide.empty(),(o=e)&&o.hasOwnProperty&&o instanceof n&&e.parent().length?((e.hasClass("fancybox-content")||e.parent().hasClass("fancybox-content"))&&e.parents(".fancybox-slide").trigger("onReset"),t.$placeholder=n("
        ").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"===n.type(e)&&(e=n("
        ").append(n.trim(e)).contents()),t.opts.filter&&(e=n("
        ").html(e).find(t.opts.filter))),t.$slide.one("onReset",(function(){n(this).find("video,audio").trigger("pause"),t.$placeholder&&(t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)})),n(e).appendTo(t.$slide),n(e).is("video,audio")&&(n(e).addClass("fancybox-video"),n(e).wrap("
        "),t.contentType="video",t.opts.width=t.opts.width||n(e).attr("width"),t.opts.height=t.opts.height||n(e).attr("height")),t.$content=t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner("
        ").children().first()),t.$content.addClass("fancybox-content"),t.$slide.addClass("fancybox-slide--"+t.contentType),a.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger("onReset").removeClass("fancybox-slide--"+t.contentType).addClass("fancybox-slide--error"),t.contentType="html",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;(t=t||e.current)&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn("fast"))},hideLoading:function(t){(t=t||this.current)&&t.$spinner&&(t.$spinner.stop().remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",(function(t){return 2==t.button&&t.preventDefault(),!0})),"image"===t.type&&n('
        ').appendTo(t.$content)),e.adjustCaption(t),e.adjustLayout(t),t.pos===e.currPos&&e.updateCursor(),e.revealContent(t))},adjustCaption:function(t){var e,n=this,o=t||n.current,a=o.opts.caption,i=o.opts.preventCaptionOverlap,s=n.$refs.caption,r=!1;s.toggleClass("fancybox-caption--separate",i),i&&a&&a.length&&(o.pos!==n.currPos?((e=s.clone().appendTo(s.parent())).children().eq(0).empty().html(a),r=e.outerHeight(!0),e.empty().remove()):n.$caption&&(r=n.$caption.outerHeight(!0)),o.$slide.css("padding-bottom",r||""))},adjustLayout:function(t){var e,n,o,a,i=t||this.current;i.isLoaded&&!0!==i.opts.disableLayoutFix&&(i.$content.css("margin-bottom",""),i.$content.outerHeight()>i.$slide.height()+.5&&(o=i.$slide[0].style["padding-bottom"],a=i.$slide.css("padding-bottom"),parseFloat(a)>0&&(e=i.$slide[0].scrollHeight,i.$slide.css("padding-bottom",0),Math.abs(e-i.$slide[0].scrollHeight)<1&&(n=a),i.$slide.css("padding-bottom",o))),i.$content.css("margin-bottom",n))},revealContent:function(t){var e,a,i,s,r=this,c=t.$slide,l=!1,d=!1,u=r.isMoved(t),p=t.isRevealed;return t.isRevealed=!0,e=t.opts[r.firstRun?"animationEffect":"transitionEffect"],i=t.opts[r.firstRun?"animationDuration":"transitionDuration"],i=parseInt(t.forcedDuration===o?i:t.forcedDuration,10),!u&&t.pos===r.currPos&&i||(e=!1),"zoom"===e&&(t.pos===r.currPos&&i&&"image"===t.type&&!t.hasError&&(d=r.getThumbPos(t))?l=r.getFitPos(t):e="fade"),"zoom"===e?(r.isAnimating=!0,l.scaleX=l.width/d.width,l.scaleY=l.height/d.height,"auto"==(s=t.opts.zoomOpacity)&&(s=Math.abs(t.width/t.height-d.width/d.height)>.1),s&&(d.opacity=.1,l.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),d),g(t.$content),void n.fancybox.animate(t.$content,l,i,(function(){r.isAnimating=!1,r.complete()}))):(r.updateSlide(t),e?(n.fancybox.stop(c),a="fancybox-slide--"+(t.pos>=r.prevPos?"next":"previous")+" fancybox-animated fancybox-fx-"+e,c.addClass(a).removeClass("fancybox-slide--current"),t.$content.removeClass("fancybox-is-hidden"),g(c),"image"!==t.type&&t.$content.hide().show(0),void n.fancybox.animate(c,"fancybox-slide--current",i,(function(){c.removeClass(a).css({transform:"",opacity:""}),t.pos===r.currPos&&r.complete()}),!0)):(t.$content.removeClass("fancybox-is-hidden"),p||!u||"image"!==t.type||t.hasError||t.$content.hide().fadeIn("fast"),void(t.pos===r.currPos&&r.complete())))},getThumbPos:function(t){var o,a,i,s,r,c,l=t.$thumb;return!(!l||!function(t){var o,a;return!(!t||t.ownerDocument!==e)&&(n(".fancybox-container").css("pointer-events","none"),o={x:t.getBoundingClientRect().left+t.offsetWidth/2,y:t.getBoundingClientRect().top+t.offsetHeight/2},a=e.elementFromPoint(o.x,o.y)===t,n(".fancybox-container").css("pointer-events",""),a)}(l[0]))&&(a=n.fancybox.getTranslate(l),i=parseFloat(l.css("border-top-width")||0),s=parseFloat(l.css("border-right-width")||0),r=parseFloat(l.css("border-bottom-width")||0),c=parseFloat(l.css("border-left-width")||0),o={top:a.top+i,left:a.left+c,width:a.width-s-c,height:a.height-i-r,scaleX:1,scaleY:1},a.width>0&&a.height>0&&o)},complete:function(){var t,e=this,o=e.current,a={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),e.preload("inline"),g(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(e.slides,(function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?a[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())})),e.slides=a),e.isAnimating=!1,e.updateCursor(),e.trigger("afterShow"),o.opts.video.autoStart&&o.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended",(function(){Document.exitFullscreen?Document.exitFullscreen():this.webkitExitFullscreen&&this.webkitExitFullscreen(),e.next()})),o.opts.autoFocus&&"html"===o.contentType&&((t=o.$content.find("input[autofocus]:enabled:visible:first")).length?t.trigger("focus"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e,n,o=this;o.group.length<2||(n=o.slides[o.currPos+1],(e=o.slides[o.currPos-1])&&e.type===t&&o.loadSlide(e),n&&n.type===t&&o.loadSlide(n))},focus:function(t,o){var a,i,s=this,r=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"])'].join(",");s.isClosing||((a=(a=!t&&s.current&&s.current.isComplete?s.current.$slide.find("*:visible"+(o?":not(.fancybox-close-small)":"")):s.$refs.container.find("*:visible")).filter(r).filter((function(){return"hidden"!==n(this).css("visibility")&&!n(this).hasClass("disabled")}))).length?(i=a.index(e.activeElement),t&&t.shiftKey?(i<0||0==i)&&(t.preventDefault(),a.eq(a.length-1).trigger("focus")):(i<0||i==a.length-1)&&(t&&t.preventDefault(),a.eq(0).trigger("focus"))):s.$refs.container.trigger("focus"))},activate:function(){var t=this;n(".fancybox-container").each((function(){var e=n(this).data("FancyBox");e&&e.id!==t.id&&!e.isClosing&&(e.trigger("onDeactivate"),e.removeEvents(),e.isVisible=!1)})),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,a,i,s,r,c,l,d=this,u=d.current,f=function(){d.cleanUp(t)};return!d.isClosing&&(d.isClosing=!0,!1===d.trigger("beforeClose",t)?(d.isClosing=!1,p((function(){d.update()})),!1):(d.removeEvents(),i=u.$content,o=u.opts.animationEffect,a=n.isNumeric(e)?e:o?u.opts.animationDuration:0,u.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),!0!==t?n.fancybox.stop(u.$slide):o=!1,u.$slide.siblings().trigger("onReset").remove(),a&&d.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration",a+"ms"),d.hideLoading(u),d.hideControls(!0),d.updateCursor(),"zoom"!==o||i&&a&&"image"===u.type&&!d.isMoved()&&!u.hasError&&(l=d.getThumbPos(u))||(o="fade"),"zoom"===o?(n.fancybox.stop(i),c={top:(s=n.fancybox.getTranslate(i)).top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},"auto"==(r=u.opts.zoomOpacity)&&(r=Math.abs(u.width/u.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(i,c),g(i),n.fancybox.animate(i,l,a,f),!0):(o&&a?n.fancybox.animate(u.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),"fancybox-animated fancybox-fx-"+o,a,f):!0===t?setTimeout(f,a):f(),!0)))},cleanUp:function(e){var o,a,i,s=this,r=s.current.opts.$orig;s.current.$slide.trigger("onReset"),s.$refs.container.empty().remove(),s.trigger("afterClose",e),s.current.opts.backFocus&&(r&&r.length&&r.is(":visible")||(r=s.$trigger),r&&r.length&&(a=t.scrollX,i=t.scrollY,r.trigger("focus"),n("html, body").scrollTop(i).scrollLeft(a))),s.current=null,(o=n.fancybox.getInstance())?o.activate():(n("body").removeClass("fancybox-active compensate-for-scrollbar"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,a=Array.prototype.slice.call(arguments,1),i=this,s=e&&e.opts?e:i.current;if(s?a.unshift(s):s=i,a.unshift(i),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,a)),!1===o)return o;"afterClose"!==t&&i.$refs?i.$refs.container.trigger(t+".fb",a):d.trigger(t+".fb",a)},updateControls:function(){var t=this,o=t.current,a=o.index,i=t.$refs.container,s=t.$refs.caption,r=o.opts.caption;o.$slide.trigger("refresh"),r&&r.length?(t.$caption=s,s.children().eq(0).html(r)):t.$caption=null,t.hasHiddenControls||t.isIdle||t.showControls(),i.find("[data-fancybox-count]").html(t.group.length),i.find("[data-fancybox-index]").html(a+1),i.find("[data-fancybox-prev]").prop("disabled",!o.opts.loop&&a<=0),i.find("[data-fancybox-next]").prop("disabled",!o.opts.loop&&a>=t.group.length-1),"image"===o.type?i.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href",o.opts.image.src||o.src).show():o.opts.toolbar&&i.find("[data-fancybox-download],[data-fancybox-zoom]").hide(),n(e.activeElement).is(":hidden,[disabled]")&&t.$refs.container.trigger("focus")},hideControls:function(t){var e=["infobar","toolbar","nav"];!t&&this.current.opts.preventCaptionOverlap||e.push("caption"),this.$refs.container.removeClass(e.map((function(t){return"fancybox-show-"+t})).join(" ")),this.hasHiddenControls=!0},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.hasHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-caption",!!t.$caption).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal)},toggleControls:function(){this.hasHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.5.7",defaults:c,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof m&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new m(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),!0===t&&this.close(t))},destroy:function(){this.close(!0),d.add("body").off("click.fb-start","**")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:(a=e.createElement("div"),t.getComputedStyle&&t.getComputedStyle(a)&&t.getComputedStyle(a).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)),getTranslate:function(t){var e;return!(!t||!t.length)&&{top:(e=t[0].getBoundingClientRect()).top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css("opacity"))}},setTranslate:function(t,e){var n="",a={};if(t&&e)return e.left===o&&e.top===o||(n=(e.left===o?t.position().left:e.left)+"px, "+(e.top===o?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),e.scaleX!==o&&e.scaleY!==o?n+=" scale("+e.scaleX+", "+e.scaleY+")":e.scaleX!==o&&(n+=" scaleX("+e.scaleX+")"),n.length&&(a.transform=n),e.opacity!==o&&(a.opacity=e.opacity),e.width!==o&&(a.width=e.width),e.height!==o&&(a.height=e.height),t.css(a)},animate:function(t,e,a,i,s){var r,c=this;n.isFunction(a)&&(i=a,a=null),c.stop(t),r=c.getTranslate(t),t.on(h,(function(l){(!l||!l.originalEvent||t.is(l.originalEvent.target)&&"z-index"!=l.originalEvent.propertyName)&&(c.stop(t),n.isNumeric(a)&&t.css("transition-duration",""),n.isPlainObject(e)?e.scaleX!==o&&e.scaleY!==o&&c.setTranslate(t,{top:e.top,left:e.left,width:r.width*e.scaleX,height:r.height*e.scaleY,scaleX:1,scaleY:1}):!0!==s&&t.removeClass(e),n.isFunction(i)&&i(l))})),n.isNumeric(a)&&t.css("transition-duration",a+"ms"),n.isPlainObject(e)?(e.scaleX!==o&&e.scaleY!==o&&(delete e.width,delete e.height,t.parent().hasClass("fancybox-slide--image")&&t.parent().addClass("fancybox-is-scaling")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data("timer",setTimeout((function(){t.trigger(h)}),a+33))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data("timer")),e&&t.trigger(h),t.off(h).css("transition-duration",""),t.parent().removeClass("fancybox-is-scaling"))}},n.fn.fancybox=function(t){var e;return(e=(t=t||{}).selector||!1)?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},y):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},y),this},d.on("click.fb-start","[data-fancybox]",y),d.on("click.fb-start","[data-fancybox-trigger]",(function(t){n('[data-fancybox="'+n(this).attr("data-fancybox-trigger")+'"]').eq(n(this).attr("data-fancybox-index")||0).trigger("click.fb-start",{$trigger:n(this)})})),i=".fancybox-button",s="fancybox-focus",r=null,d.on("mousedown mouseup focus blur",i,(function(t){switch(t.type){case"mousedown":r=n(this);break;case"mouseup":r=null;break;case"focusin":n(i).removeClass(s),n(this).is(r)||n(this).is("[disabled]")||n(this).addClass(s);break;case"focusout":n(i).removeClass(s)}}))}function y(t,e){var o,a,i,s=[],r=0;t&&t.isDefaultPrevented()||(t.preventDefault(),e=e||{},t&&t.data&&(e=b(t.data.options,e)),o=e.$target||n(t.currentTarget).trigger("blur"),(i=n.fancybox.getInstance())&&i.$trigger&&i.$trigger.is(o)||(s=e.selector?n(e.selector):(a=o.attr("data-fancybox")||"")?(s=t.data?t.data.items:[]).length?s.filter('[data-fancybox="'+a+'"]'):n('[data-fancybox="'+a+'"]'):[o],(r=n(s).index(o))<0&&(r=0),(i=n.fancybox.open(s,e,r)).$trigger=o))}}(window,document,jQuery),function(t){var e={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"https://www.youtube-nocookie.com/embed/$4",thumb:"https://img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12]+"").replace(/\?/,"&")+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}},n=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,(function(t,n){e=e.replace("$"+t,n||"")})),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e};t(document).on("objectNeedsType.fb",(function(o,a,i){var s,r,c,l,d,u,p,f=i.src||"",h=!1;s=t.extend(!0,{},e,i.opts.media),t.each(s,(function(e,o){if(c=f.match(o.matcher)){if(h=o.type,p=e,u={},o.paramPlace&&c[o.paramPlace]){"?"==(d=c[o.paramPlace])[0]&&(d=d.substring(1)),d=d.split("&");for(var a=0;a1&&("youtube"===n.contentSource||"vimeo"===n.contentSource)&&o.load(n.contentSource)}})}(jQuery),function(t,e,n){var o=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)},a=t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)},i=function(e){var n=[];for(var o in e=(e=e.originalEvent||e||t.e).touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e])e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe')||n.isFunction(t.get(0).onclick)||t.data("selectable"))return!0;for(var e=0,o=t[0].attributes,a=o.length;en.clientHeight,s=("scroll"===a||"auto"===a)&&n.scrollWidth>n.clientWidth,!(r=i||s)&&(e=e.parent()).length&&!e.hasClass("fancybox-stage")&&!e.is("body"););return r},l=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};l.prototype.destroy=function(){var t=this;t.$container.off(".fb.touch"),n(e).off(".fb.touch"),t.requestId&&(a(t.requestId),t.requestId=null),t.tapped&&(clearTimeout(t.tapped),t.tapped=null)},l.prototype.ontouchstart=function(o){var a=this,l=n(o.target),d=a.instance,u=d.current,p=u.$slide,f=u.$content,h="touchstart"==o.type;if(h&&a.$container.off("mousedown.fb.touch"),(!o.originalEvent||2!=o.originalEvent.button)&&p.length&&l.length&&!r(l)&&!r(l.parent())&&(l.is("img")||!(o.originalEvent.clientX>l[0].clientWidth+l.offset().left))){if(!u||d.isAnimating||u.$slide.hasClass("fancybox-animated"))return o.stopPropagation(),void o.preventDefault();a.realPoints=a.startPoints=i(o),a.startPoints.length&&(u.touch&&o.stopPropagation(),a.startEvent=o,a.canTap=!0,a.$target=l,a.$content=f,a.opts=u.opts.touch,a.isPanning=!1,a.isSwiping=!1,a.isZooming=!1,a.isScrolling=!1,a.canPan=d.canPan(),a.startTime=(new Date).getTime(),a.distanceX=a.distanceY=a.distance=0,a.canvasWidth=Math.round(p[0].clientWidth),a.canvasHeight=Math.round(p[0].clientHeight),a.contentLastPos=null,a.contentStartPos=n.fancybox.getTranslate(a.$content)||{top:0,left:0},a.sliderStartPos=n.fancybox.getTranslate(p),a.stagePos=n.fancybox.getTranslate(d.$refs.stage),a.sliderStartPos.top-=a.stagePos.top,a.sliderStartPos.left-=a.stagePos.left,a.contentStartPos.top-=a.stagePos.top,a.contentStartPos.left-=a.stagePos.left,n(e).off(".fb.touch").on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(a,"ontouchend")).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(a,"ontouchmove")),n.fancybox.isMobile&&e.addEventListener("scroll",a.onscroll,!0),((a.opts||a.canPan)&&(l.is(a.$stage)||a.$stage.find(l).length)||(l.is(".fancybox-image")&&o.preventDefault(),n.fancybox.isMobile&&l.parents(".fancybox-caption").length))&&(a.isScrollable=c(l)||c(l.parent()),n.fancybox.isMobile&&a.isScrollable||o.preventDefault(),(1===a.startPoints.length||u.hasError)&&(a.canPan?(n.fancybox.stop(a.$content),a.isPanning=!0):a.isSwiping=!0,a.$container.addClass("fancybox-is-grabbing")),2===a.startPoints.length&&"image"===u.type&&(u.isLoaded||u.$ghost)&&(a.canTap=!1,a.isSwiping=!1,a.isPanning=!1,a.isZooming=!0,n.fancybox.stop(a.$content),a.centerPointStartX=.5*(a.startPoints[0].x+a.startPoints[1].x)-n(t).scrollLeft(),a.centerPointStartY=.5*(a.startPoints[0].y+a.startPoints[1].y)-n(t).scrollTop(),a.percentageOfImageAtPinchPointX=(a.centerPointStartX-a.contentStartPos.left)/a.contentStartPos.width,a.percentageOfImageAtPinchPointY=(a.centerPointStartY-a.contentStartPos.top)/a.contentStartPos.height,a.startDistanceBetweenFingers=s(a.startPoints[0],a.startPoints[1]))))}},l.prototype.onscroll=function(t){this.isScrolling=!0,e.removeEventListener("scroll",this.onscroll,!0)},l.prototype.ontouchmove=function(t){var e=this;void 0===t.originalEvent.buttons||0!==t.originalEvent.buttons?e.isScrolling?e.canTap=!1:(e.newPoints=i(t),(e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&!0===e.isSwiping||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))):e.ontouchend(t)},l.prototype.onSwipe=function(e){var i,s=this,r=s.instance,c=s.isSwiping,l=s.sliderStartPos.left||0;if(!0!==c)"x"==c&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?l+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?l-=Math.pow(-s.distanceX,.8):l+=s.distanceX),s.sliderLastPos={top:"x"==c?0:s.sliderStartPos.top+s.distanceY,left:l},s.requestId&&(a(s.requestId),s.requestId=null),s.requestId=o((function(){s.sliderLastPos&&(n.each(s.instance.slides,(function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})})),s.$container.addClass("fancybox-is-sliding"))}));else if(Math.abs(s.distance)>10){if(s.canTap=!1,r.group.length<2&&s.opts.vertical?s.isSwiping="y":r.isDragging||!1===s.opts.vertical||"auto"===s.opts.vertical&&n(t).width()>800?s.isSwiping="x":(i=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=i>45&&i<135?"y":"x"),"y"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);r.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(r.slides,(function(t,e){var o,a;n.fancybox.stop(e.$slide),o=n.fancybox.getTranslate(e.$slide),a=n.fancybox.getTranslate(r.$refs.stage),e.$slide.css({transform:"",opacity:"","transition-duration":""}).removeClass("fancybox-animated").removeClass((function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")})),e.pos===r.current.pos&&(s.sliderStartPos.top=o.top-a.top,s.sliderStartPos.left=o.left-a.left),n.fancybox.setTranslate(e.$slide,{top:o.top-a.top,left:o.left-a.left})})),r.SlideShow&&r.SlideShow.isActive&&r.SlideShow.stop()}},l.prototype.onPan=function(){var t=this;s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5)?t.startPoints=t.newPoints:(t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&a(t.requestId),t.requestId=o((function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})))},l.prototype.limitMovement=function(){var t,e,n,o,a,i,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,p=u.left,f=u.top,h=u.width,g=u.height;return a=h>r?p+l:p,i=f+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&a>t&&(a=t-1+Math.pow(-t+p+l,.8)||0),l<0&&a0&&i>e&&(i=e-1+Math.pow(-e+f+d,.8)||0),d<0&&ia?(t=t>0?0:t)i?(e=e>0?0:e)1&&(o.dMs>130&&s>10||s>50);o.sliderLastPos=null,"y"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),a=o.instance.close(!0,250)):r&&o.distanceX>0?a=o.instance.previous(300):r&&o.distanceX<0&&(a=o.instance.next(300)),!1!==a||"x"!=t&&"y"!=t||o.instance.centerSlide(200),o.$container.removeClass("fancybox-is-sliding")},l.prototype.endPanning=function(){var t,e,o,a=this;a.contentLastPos&&(!1===a.opts.momentum||a.dMs>350?(t=a.contentLastPos.left,e=a.contentLastPos.top):(t=a.contentLastPos.left+500*a.velocityX,e=a.contentLastPos.top+500*a.velocityY),(o=a.limitPosition(t,e,a.contentStartPos.width,a.contentStartPos.height)).width=a.contentStartPos.width,o.height=a.contentStartPos.height,n.fancybox.animate(a.$content,o,366))},l.prototype.endZooming=function(){var t,e,o,a,i=this,s=i.instance.current,r=i.newWidth,c=i.newHeight;i.contentLastPos&&(t=i.contentLastPos.left,a={top:e=i.contentLastPos.top,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(i.$content,a),rs.width||c>s.height?i.instance.scaleToActual(i.centerPointStartX,i.centerPointStartY,150):(o=i.limitPosition(t,e,r,c),n.fancybox.animate(i.$content,o,150)))},l.prototype.onTap=function(e){var o,a=this,s=n(e.target),r=a.instance,c=r.current,l=e&&i(e)||a.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-a.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-a.stagePos.top:0,p=function(t){var o=c.opts[t];if(n.isFunction(o)&&(o=o.apply(r,[c,e])),o)switch(o){case"close":r.close(a.startEvent);break;case"toggleControls":r.toggleControls();break;case"next":r.next();break;case"nextOrClose":r.group.length>1?r.next():r.close(a.startEvent);break;case"zoom":"image"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(a.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is("img")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))o="Outside";else if(s.is(".fancybox-slide"))o="Slide";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o="Content"}if(a.tapped){if(clearTimeout(a.tapped),a.tapped=null,Math.abs(d-a.tapX)>50||Math.abs(u-a.tapY)>50)return this;p("dblclick"+o)}else a.tapX=d,a.tapY=u,c.opts["dblclick"+o]&&c.opts["dblclick"+o]!==c.opts["click"+o]?a.tapped=setTimeout((function(){a.tapped=null,r.isAnimating||p("click"+o)}),500):p("click"+o);return this}},n(e).on("onActivate.fb",(function(t,e){e&&!e.Guestures&&(e.Guestures=new l(e))})).on("beforeClose.fb",(function(t,e){e&&e.Guestures&&e.Guestures.destroy()}))}(window,document,jQuery),function(t,e){e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:''},slideShow:{autoStart:!1,speed:3e3,progress:!0}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this,n=t.instance,o=n.group[n.currIndex].opts.slideShow;t.$button=n.$refs.toolbar.find("[data-fancybox-play]").on("click",(function(){t.toggle()})),n.group.length<2||!o?t.$button.hide():o.progress&&(t.$progress=e('
        ').appendTo(n.$refs.inner))},set:function(t){var n=this,o=n.instance,a=o.current;a&&(!0===t||a.opts.loop||o.currIndex'},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,(function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&"image"===n.current.type&&n.isAnimating&&(n.isAnimating=!1,n.update(!0,!0,0),n.isComplete||n.complete()),n.trigger("onFullscreenChange",t),n.$refs.container.toggleClass("fancybox-is-fullscreen",t),n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter",!t).toggleClass("fancybox-button--fsexit",t))}))}e(t).on({"onInit.fb":function(t,e){n?e&&e.group[e.currIndex].opts.fullScreen?(e.$refs.container.on("click.fb-fullscreen","[data-fancybox-fullscreen]",(function(t){t.stopPropagation(),t.preventDefault(),o.toggle()})),e.opts.fullScreen&&!0===e.opts.fullScreen.autoStart&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide():e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove()},"afterKeydown.fb":function(t,e,n,o,a){e&&e.FullScreen&&70===a&&(o.preventDefault(),e.FullScreen.toggle())},"beforeClose.fb":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass("fancybox-is-fullscreen")&&o.exit()}})}(document,jQuery),function(t,e){var n="fancybox-thumbs",o=n+"-active";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:''},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"}},e.fancybox.defaults);var a=function(t){this.init(t)};e.extend(a.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e=this,n=t.group,o=0;e.instance=t,e.opts=n[t.currIndex].opts.thumbs,t.Thumbs=e,e.$button=t.$refs.toolbar.find("[data-fancybox-thumbs]");for(var a=0,i=n.length;a1));a++);o>1&&e.opts?(e.$button.removeAttr("style").on("click",(function(){e.toggle()})),e.isActive=!0):e.$button.hide()},create:function(){var t,o=this,a=o.instance,i=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('
        ').appendTo(a.$refs.container.find(i).addBack().filter(i)),o.$grid.on("click","a",(function(){a.jumpTo(e(this).attr("data-index"))}))),o.$list||(o.$list=e('
        ').appendTo(o.$grid)),e.each(a.group,(function(e,n){(t=n.thumb)||"image"!==n.type||(t=n.src),s.push('")})),o.$list[0].innerHTML=s.join(""),"x"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css("padding-right"),10)+a.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,a=this,i=a.$list,s=a.$grid;a.instance.current&&(n=(e=i.children().removeClass(o).filter('[data-index="'+a.instance.current.index+'"]').addClass(o)).position(),"y"===a.opts.axis&&(n.top<0||n.top>i.height()-e.outerHeight())?i.stop().animate({scrollTop:i.scrollTop()+n.top},t):"x"===a.opts.axis&&(n.lefts.scrollLeft()+(s.width()-e.outerWidth()))&&i.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger("onThumbsShow"),t.focus(0)):t.$grid&&t.instance.trigger("onThumbsHide"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){var n;e&&!e.Thumbs&&(n=new a(e)).isActive&&!0===n.opts.autoStart&&n.show()},"beforeShow.fb":function(t,e,n,o){var a=e&&e.Thumbs;a&&a.isVisible&&a.focus(o?0:250)},"afterKeydown.fb":function(t,e,n,o,a){var i=e&&e.Thumbs;i&&i.isActive&&71===a&&(o.preventDefault(),i.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&!1!==n.opts.hideOnClose&&n.$grid.hide()}})}(document,jQuery),function(t,e){e.extend(!0,e.fancybox.defaults,{btnTpl:{share:''},share:{url:function(t,e){return!t.currentHash&&"inline"!==e.type&&"html"!==e.type&&(e.origSrc||e.src)||window.location},tpl:''}}),e(t).on("click","[data-fancybox-share]",(function(){var t,n,o,a,i=e.fancybox.getInstance(),s=i.current||null;s&&("function"===e.type(s.opts.share.url)&&(t=s.opts.share.url.apply(s,[i,s])),n=s.opts.share.tpl.replace(/\{\{media\}\}/g,"image"===s.type?encodeURIComponent(s.src):"").replace(/\{\{url\}\}/g,encodeURIComponent(t)).replace(/\{\{url_raw\}\}/g,(o=t,a={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="},String(o).replace(/[&<>"'`=\/]/g,(function(t){return a[t]})))).replace(/\{\{descr\}\}/g,i.$caption?encodeURIComponent(i.$caption.text()):""),e.fancybox.open({src:i.translate(i,n),type:"html",opts:{touch:!1,animationEffect:!1,afterLoad:function(t,e){i.$refs.container.one("beforeClose.fb",(function(){t.close(null,0)})),e.$content.find(".fancybox-share__button").click((function(){return window.open(this.href,"Share","width=550, height=450"),!1}))},mobile:{autoFocus:!1}}}))}))}(document,jQuery),function(t,e,n){function o(){var e=t.location.hash.substr(1),n=e.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])&&parseInt(n.pop(-1),10)||1;return{hash:e,index:o<1?1:o,gallery:n.join("-")}}function a(t){""!==t.gallery&&n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1).focus().trigger("click.fb-start")}function i(t){var e,n;return!!t&&(""!==(n=(e=t.current?t.current.opts:t.opts).hash||(e.$orig?e.$orig.data("fancybox")||e.$orig.data("fancybox-trigger"):""))&&n)}n.escapeSelector||(n.escapeSelector=function(t){return(t+"").replace(/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,(function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t}))}),n((function(){!1!==n.fancybox.defaults.hash&&(n(e).on({"onInit.fb":function(t,e){var n,a;!1!==e.group[e.currIndex].opts.hash&&(n=o(),(a=i(e))&&n.gallery&&a==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,a,s){var r;a&&!1!==a.opts.hash&&(r=i(o))&&(o.currentHash=r+(o.group.length>1?"-"+(a.index+1):""),t.location.hash!=="#"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout((function(){"replaceState"in t.history?(t.history[s?"pushState":"replaceState"]({},e.title,t.location.pathname+t.location.search+"#"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null}),300)))},"beforeClose.fb":function(n,o,a){a&&!1!==a.opts.hash&&(clearTimeout(o.hashTimer),o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&("replaceState"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||"")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on("hashchange.fb",(function(){var t=o(),e=null;n.each(n(".fancybox-container").get().reverse(),(function(t,o){var a=n(o).data("FancyBox");if(a&&a.currentHash)return e=a,!1})),e?e.currentHash===t.gallery+"-"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):""!==t.gallery&&a(t)})),setTimeout((function(){n.fancybox.getInstance()||a(o())}),50))}))}(window,document,jQuery),function(t,e){var n=(new Date).getTime();e(t).on({"onInit.fb":function(t,e,o){e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll",(function(t){var o=e.current,a=(new Date).getTime();e.group.length<2||!1===o.opts.wheel||"auto"===o.opts.wheel&&"image"!==o.type||(t.preventDefault(),t.stopPropagation(),o.$slide.hasClass("fancybox-animated")||(t=t.originalEvent||t,a-n<250||(n=a,e[(-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)<0?"next":"previous"]())))}))}})}(document,jQuery)}}]); +//# sourceMappingURL=245.js.map \ No newline at end of file diff --git a/js/245.js.map b/js/245.js.map new file mode 100644 index 00000000..b0222cf2 --- /dev/null +++ b/js/245.js.map @@ -0,0 +1 @@ +{"version":3,"file":"245.js","mappings":"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","sources":["webpack://sakurairo-scripts/./node_modules/.pnpm/@fancyapps+fancybox@3.5.7_jquery@3.7.1/node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js"],"sourcesContent":["// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
        ' +\r\n '
        ' +\r\n '
        ' +\r\n '
         / 
        ' +\r\n '
        {{buttons}}
        ' +\r\n '
        {{arrows}}
        ' +\r\n '
        ' +\r\n '
        ' +\r\n \"
        \" +\r\n \"
        \",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
        ',\r\n\r\n // Error message template\r\n errorTpl: '

        {{ERROR}}

        ',\r\n\r\n btnTpl: {\r\n download: '' +\r\n '' +\r\n \"\",\r\n\r\n zoom: '\",\r\n\r\n close: '\",\r\n\r\n // Arrows\r\n arrowLeft: '\",\r\n\r\n arrowRight: '\",\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn: '\"\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl: \"body\",\r\n\r\n // Hide browser vertical scrollbars; use at your own risk\r\n hideScrollbar: true,\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus: true,\r\n\r\n // Put focus back to active element after closing\r\n backFocus: true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus: true,\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen: {\r\n autoStart: false\r\n },\r\n\r\n // Set `touch: false` to disable panning/swiping\r\n touch: {\r\n vertical: true, // Allow to drag content vertically\r\n momentum: true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash: null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media: {},\r\n\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000\r\n },\r\n\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n },\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel: \"auto\",\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit: $.noop, // When instance has been initialized\r\n\r\n beforeLoad: $.noop, // Before the content of a slide is being loaded\r\n afterLoad: $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow: $.noop, // Before open animation starts\r\n afterShow: $.noop, // When content is done loading and animating\r\n\r\n beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose: $.noop, // After instance has been closed\r\n\r\n onActivate: $.noop, // When instance is brought to front\r\n onDeactivate: $.noop, // When other instance has been activated\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide: \"close\",\r\n\r\n // Clicked on the background (backdrop) element;\r\n // if you have not changed the layout, then most likely you need to use `clickSlide` option\r\n clickOutside: \"close\",\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false,\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile: {\r\n preventCaptionOverlap: false,\r\n idleTime: false,\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : false;\r\n },\r\n clickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : \"close\";\r\n },\r\n dblclickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n dblclickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n }\r\n },\r\n\r\n // Internationalization\r\n // ====================\r\n\r\n lang: \"en\",\r\n i18n: {\r\n en: {\r\n CLOSE: \"Close\",\r\n NEXT: \"Next\",\r\n PREV: \"Previous\",\r\n ERROR: \"The requested content cannot be loaded.
        Please try again later.\",\r\n PLAY_START: \"Start slideshow\",\r\n PLAY_STOP: \"Pause slideshow\",\r\n FULL_SCREEN: \"Full screen\",\r\n THUMBS: \"Thumbnails\",\r\n DOWNLOAD: \"Download\",\r\n SHARE: \"Share\",\r\n ZOOM: \"Zoom\"\r\n },\r\n de: {\r\n CLOSE: \"Schließen\",\r\n NEXT: \"Weiter\",\r\n PREV: \"Zurück\",\r\n ERROR: \"Die angeforderten Daten konnten nicht geladen werden.
        Bitte versuchen Sie es später nochmal.\",\r\n PLAY_START: \"Diaschau starten\",\r\n PLAY_STOP: \"Diaschau beenden\",\r\n FULL_SCREEN: \"Vollbild\",\r\n THUMBS: \"Vorschaubilder\",\r\n DOWNLOAD: \"Herunterladen\",\r\n SHARE: \"Teilen\",\r\n ZOOM: \"Vergrößern\"\r\n }\r\n }\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n var isQuery = function (obj) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n var transitionEnd = (function () {\r\n var el = document.createElement(\"fakeelement\"),\r\n t;\r\n\r\n var transitions = {\r\n transition: \"transitionend\",\r\n OTransition: \"oTransitionEnd\",\r\n MozTransition: \"transitionend\",\r\n WebkitTransition: \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return \"transitionend\";\r\n })();\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly\r\n // ================================================================================\r\n var forceRedraw = function ($el) {\r\n return $el && $el.length && $el[0].offsetHeight;\r\n };\r\n\r\n // Exclude array (`buttons`) options from deep merging\r\n // ===================================================\r\n var mergeOpts = function (opts1, opts2) {\r\n var rez = $.extend(true, {}, opts1, opts2);\r\n\r\n $.each(opts2, function (key, value) {\r\n if ($.isArray(value)) {\r\n rez[key] = value;\r\n }\r\n });\r\n\r\n return rez;\r\n };\r\n\r\n // How much of an element is visible in viewport\r\n // =============================================\r\n\r\n var inViewport = function (elem) {\r\n var elemCenter, rez;\r\n\r\n if (!elem || elem.ownerDocument !== document) {\r\n return false;\r\n }\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"none\");\r\n\r\n elemCenter = {\r\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\r\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\r\n };\r\n\r\n rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"\");\r\n\r\n return rez;\r\n };\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function (content, opts, index) {\r\n var self = this;\r\n\r\n self.opts = mergeOpts({\r\n index: index\r\n }, $.fancybox.defaults);\r\n\r\n if ($.isPlainObject(opts)) {\r\n self.opts = mergeOpts(self.opts, opts);\r\n }\r\n\r\n if ($.fancybox.isMobile) {\r\n self.opts = mergeOpts(self.opts, self.opts.mobile);\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n\r\n self.currIndex = parseInt(self.opts.index, 10) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = true;\r\n\r\n // All group items\r\n self.group = [];\r\n\r\n // Existing slides (for current, next and previous gallery items)\r\n self.slides = {};\r\n\r\n // Create group elements\r\n self.addContent(content);\r\n\r\n if (!self.group.length) {\r\n return;\r\n }\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n // Create DOM structure\r\n // ====================\r\n\r\n init: function () {\r\n var self = this,\r\n firstItem = self.group[self.currIndex],\r\n firstItemOpts = firstItem.opts,\r\n $container,\r\n buttonStr;\r\n\r\n if (firstItemOpts.closeExisting) {\r\n $.fancybox.close(true);\r\n }\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n $(\"body\").addClass(\"fancybox-active\");\r\n\r\n if (\r\n !$.fancybox.getInstance() &&\r\n firstItemOpts.hideScrollbar !== false &&\r\n !$.fancybox.isMobile &&\r\n document.body.scrollHeight > window.innerHeight\r\n ) {\r\n $(\"head\").append(\r\n '\"\r\n );\r\n\r\n $(\"body\").addClass(\"compensate-for-scrollbar\");\r\n }\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = \"\";\r\n\r\n $.each(firstItemOpts.buttons, function (index, value) {\r\n buttonStr += firstItemOpts.btnTpl[value] || \"\";\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate(\r\n self,\r\n firstItemOpts.baseTpl\r\n .replace(\"{{buttons}}\", buttonStr)\r\n .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\r\n )\r\n )\r\n .attr(\"id\", \"fancybox-container-\" + self.id)\r\n .addClass(firstItemOpts.baseClass)\r\n .data(\"FancyBox\", self)\r\n .appendTo(firstItemOpts.parentEl);\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container: $container\r\n };\r\n\r\n [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\r\n self.$refs[item] = $container.find(\".fancybox-\" + item);\r\n });\r\n\r\n self.trigger(\"onInit\");\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo(self.currIndex);\r\n },\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate: function (obj, str) {\r\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\r\n return arr[n] === undefined ? match : arr[n];\r\n });\r\n },\r\n\r\n // Populate current group with fresh content\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n addContent: function (content) {\r\n var self = this,\r\n items = $.makeArray(content),\r\n thumbs;\r\n\r\n $.each(items, function (i, item) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ($.isPlainObject(item)) {\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n } else if ($.type(item) === \"object\" && $(item).length) {\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $(item);\r\n\r\n // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\r\n opts = $item.data() || {};\r\n opts = $.extend(true, {}, opts, opts.options);\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = self.opts.src || opts.src || $item.attr(\"href\");\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if (!obj.type && !obj.src) {\r\n obj.type = \"inline\";\r\n obj.src = item;\r\n }\r\n } else {\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

        Hi!

        ' );\r\n obj = {\r\n type: \"html\",\r\n src: item + \"\"\r\n };\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend(true, {}, self.opts, opts);\r\n\r\n // Do not merge buttons array\r\n if ($.isArray(opts.buttons)) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n if ($.fancybox.isMobile && obj.opts.mobile) {\r\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\r\n }\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || \"\";\r\n\r\n if (!type && src) {\r\n if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\r\n type = \"video\";\r\n\r\n if (!obj.opts.video.format) {\r\n obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\r\n }\r\n } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\r\n type = \"image\";\r\n } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\r\n type = \"iframe\";\r\n obj = $.extend(true, obj, {\r\n contentType: \"pdf\",\r\n opts: {\r\n iframe: {\r\n preload: false\r\n }\r\n }\r\n });\r\n } else if (src.charAt(0) === \"#\") {\r\n type = \"inline\";\r\n }\r\n }\r\n\r\n if (type) {\r\n obj.type = type;\r\n } else {\r\n self.trigger(\"objectNeedsType\", obj);\r\n }\r\n\r\n if (!obj.contentType) {\r\n obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\r\n }\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n if (obj.opts.smallBtn == \"auto\") {\r\n obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\r\n }\r\n\r\n if (obj.opts.toolbar === \"auto\") {\r\n obj.opts.toolbar = !obj.opts.smallBtn;\r\n }\r\n\r\n // Find thumbnail image, check if exists and if is in the viewport\r\n obj.$thumb = obj.opts.$thumb || null;\r\n\r\n if (obj.opts.$trigger && obj.index === self.opts.index) {\r\n obj.$thumb = obj.opts.$trigger.find(\"img:first\");\r\n\r\n if (obj.$thumb.length) {\r\n obj.opts.$orig = obj.opts.$trigger;\r\n }\r\n }\r\n\r\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\r\n obj.$thumb = obj.opts.$orig.find(\"img:first\");\r\n }\r\n\r\n if (obj.$thumb && !obj.$thumb.length) {\r\n obj.$thumb = null;\r\n }\r\n\r\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\r\n if ($.type(obj.opts.caption) === \"function\") {\r\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n if ($.type(self.opts.caption) === \"function\") {\r\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if (!(obj.opts.caption instanceof $)) {\r\n obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if (obj.type === \"ajax\") {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if (srcParts.length > 1) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if (obj.opts.modal) {\r\n obj.opts = $.extend(true, obj.opts, {\r\n trapFocus: true,\r\n // Remove buttons\r\n infobar: 0,\r\n toolbar: 0,\r\n\r\n smallBtn: 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard: 0,\r\n\r\n // Disable some modules\r\n slideShow: 0,\r\n fullScreen: 0,\r\n thumbs: 0,\r\n touch: 0,\r\n\r\n // Disable click event handlers\r\n clickContent: false,\r\n clickSlide: false,\r\n clickOutside: false,\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false\r\n });\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push(obj);\r\n });\r\n\r\n // Update controls if gallery is already opened\r\n if (Object.keys(self.slides).length) {\r\n self.updateControls();\r\n\r\n // Update thumbnails, if needed\r\n thumbs = self.Thumbs;\r\n\r\n if (thumbs && thumbs.isActive) {\r\n thumbs.create();\r\n\r\n thumbs.focus();\r\n }\r\n }\r\n },\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detecting inactivity\r\n // ======================================\r\n\r\n addEvents: function () {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n // ==================================\r\n\r\n self.$refs.container\r\n .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n })\r\n .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n })\r\n .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n })\r\n .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\r\n // Click handler for zoom button\r\n self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\r\n });\r\n\r\n // Handle page scrolling and browser resizing\r\n // ==========================================\r\n\r\n $W.on(\"orientationchange.fb resize.fb\", function (e) {\r\n if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n self.update(e);\r\n });\r\n } else {\r\n if (self.current && self.current.type === \"iframe\") {\r\n self.$refs.stage.hide();\r\n }\r\n\r\n setTimeout(\r\n function () {\r\n self.$refs.stage.show();\r\n\r\n self.update(e);\r\n },\r\n $.fancybox.isMobile ? 600 : 250\r\n );\r\n }\r\n });\r\n\r\n $D.on(\"keydown.fb\", function (e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\r\n current = instance.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n // Trap keyboard focus inside of the modal\r\n // =======================================\r\n\r\n if (keycode == 9) {\r\n if (current.opts.trapFocus) {\r\n self.focus(e);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Enable keyboard navigation\r\n // ==========================\r\n\r\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if (keycode === 8 || keycode === 27) {\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if (keycode === 37 || keycode === 38) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if (keycode === 39 || keycode === 40) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger(\"afterKeydown\", e, keycode);\r\n });\r\n\r\n // Hide controls after some inactivity period\r\n if (self.group[self.currIndex].opts.idleTime) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on(\r\n \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\r\n function (e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if (self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n }\r\n );\r\n\r\n self.idleInterval = window.setInterval(function () {\r\n self.idleSecondsCounter++;\r\n\r\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n }, 1000);\r\n }\r\n },\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents: function () {\r\n var self = this;\r\n\r\n $W.off(\"orientationchange.fb resize.fb\");\r\n $D.off(\"keydown.fb .fb-idle\");\r\n\r\n this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\r\n\r\n if (self.idleInterval) {\r\n window.clearInterval(self.idleInterval);\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous: function (duration) {\r\n return this.jumpTo(this.currPos - 1, duration);\r\n },\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next: function (duration) {\r\n return this.jumpTo(this.currPos + 1, duration);\r\n },\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo: function (pos, duration) {\r\n var self = this,\r\n groupLen = self.group.length,\r\n firstRun,\r\n isMoved,\r\n loop,\r\n current,\r\n previous,\r\n slidePos,\r\n stagePos,\r\n prop,\r\n diff;\r\n\r\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\r\n return;\r\n }\r\n\r\n // Should loop?\r\n pos = parseInt(pos, 10);\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if (!loop && (pos < 0 || pos >= groupLen)) {\r\n return false;\r\n }\r\n\r\n // Check if opening for the first time; this helps to speed things up\r\n firstRun = self.firstRun = !Object.keys(self.slides).length;\r\n\r\n // Create slides\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n current = self.createSlide(pos);\r\n\r\n if (groupLen > 1) {\r\n if (loop || current.index < groupLen - 1) {\r\n self.createSlide(pos + 1);\r\n }\r\n\r\n if (loop || current.index > 0) {\r\n self.createSlide(pos - 1);\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger(\"beforeShow\", firstRun);\r\n\r\n self.updateControls();\r\n\r\n // Validate duration length\r\n current.forcedDuration = undefined;\r\n\r\n if ($.isNumeric(duration)) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n }\r\n\r\n duration = parseInt(duration, 10);\r\n\r\n // Check if user has swiped the slides or if still animating\r\n isMoved = self.isMoved(current);\r\n\r\n // Make sure current slide is visible\r\n current.$slide.addClass(\"fancybox-slide--current\");\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if (firstRun) {\r\n if (current.opts.animationEffect && duration) {\r\n self.$refs.container.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\r\n\r\n // Attempt to load content into slide\r\n // This will later call `afterLoad` -> `revealContent`\r\n self.loadSlide(current);\r\n\r\n self.preload(\"image\");\r\n\r\n return;\r\n }\r\n\r\n // Get actual slide/stage positions (before cleaning up)\r\n slidePos = $.fancybox.getTranslate(previous.$slide);\r\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\r\n\r\n // Clean up all slides\r\n $.each(self.slides, function (index, slide) {\r\n $.fancybox.stop(slide.$slide, true);\r\n });\r\n\r\n if (previous.pos !== current.pos) {\r\n previous.isComplete = false;\r\n }\r\n\r\n previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\r\n\r\n // If slides are out of place, then animate them to correct position\r\n if (isMoved) {\r\n // Calculate horizontal swipe distance\r\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\r\n\r\n $.each(self.slides, function (index, slide) {\r\n slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n // Make sure that each slide is in equal distance\r\n // This is mostly needed for freshly added slides, because they are not yet positioned\r\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: 0,\r\n left: leftPos - stagePos.left + diff\r\n });\r\n\r\n if (slide.pos !== current.pos) {\r\n slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\r\n }\r\n\r\n // Redraw to make sure that transition will start\r\n forceRedraw(slide.$slide);\r\n\r\n // Animate the slide\r\n $.fancybox.animate(\r\n slide.$slide, {\r\n top: 0,\r\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\r\n },\r\n duration,\r\n function () {\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\"\r\n })\r\n .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n }\r\n );\r\n });\r\n } else if (duration && current.opts.transitionEffect) {\r\n // Set transition effect for previously active slide\r\n prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\r\n\r\n previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\r\n\r\n $.fancybox.animate(\r\n previous.$slide,\r\n prop,\r\n duration,\r\n function () {\r\n previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (current.isLoaded) {\r\n self.revealContent(current);\r\n } else {\r\n self.loadSlide(current);\r\n }\r\n\r\n self.preload(\"image\");\r\n },\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide: function (pos) {\r\n var self = this,\r\n $slide,\r\n index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if (!self.slides[pos] && self.group[index]) {\r\n $slide = $('
        ').appendTo(self.$refs.stage);\r\n\r\n self.slides[pos] = $.extend(true, {}, self.group[index], {\r\n pos: pos,\r\n $slide: $slide,\r\n isLoaded: false\r\n });\r\n\r\n self.updateSlide(self.slides[pos]);\r\n }\r\n\r\n return self.slides[pos];\r\n },\r\n\r\n // Scale image to the actual size of the image;\r\n // x and y values should be relative to the slide\r\n // ==============================================\r\n\r\n scaleToActual: function (x, y, duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\r\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\r\n newImgWidth = current.width,\r\n newImgHeight = current.height,\r\n imgPos,\r\n posX,\r\n posY,\r\n scaleX,\r\n scaleY;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate($content);\r\n\r\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\r\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\r\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\r\n\r\n // Make sure image does not move away from edges\r\n if (newImgWidth > canvasWidth) {\r\n posX = imgPos.left * scaleX - (x * scaleX - x);\r\n\r\n if (posX > 0) {\r\n posX = 0;\r\n }\r\n\r\n if (posX < canvasWidth - newImgWidth) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if (newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - (y * scaleY - y);\r\n\r\n if (posY > 0) {\r\n posY = 0;\r\n }\r\n\r\n if (posY < canvasHeight - newImgHeight) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor(newImgWidth, newImgHeight);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: posY,\r\n left: posX,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n\r\n // Stop slideshow\r\n if (self.SlideShow && self.SlideShow.isActive) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n end;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n end = self.getFitPos(current);\r\n\r\n self.updateCursor(end.width, end.height);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: end.top,\r\n left: end.left,\r\n scaleX: end.width / $content.width(),\r\n scaleY: end.height / $content.height()\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos: function (slide) {\r\n var self = this,\r\n $content = slide.$content,\r\n $slide = slide.$slide,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n maxWidth,\r\n maxHeight,\r\n minRatio,\r\n aspectRatio,\r\n rez = {};\r\n\r\n if (!slide.isLoaded || !$content || !$content.length) {\r\n return false;\r\n }\r\n\r\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\r\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\r\n\r\n maxWidth -=\r\n parseFloat($slide.css(\"paddingLeft\")) +\r\n parseFloat($slide.css(\"paddingRight\")) +\r\n parseFloat($content.css(\"marginLeft\")) +\r\n parseFloat($content.css(\"marginRight\"));\r\n\r\n maxHeight -=\r\n parseFloat($slide.css(\"paddingTop\")) +\r\n parseFloat($slide.css(\"paddingBottom\")) +\r\n parseFloat($content.css(\"marginTop\")) +\r\n parseFloat($content.css(\"marginBottom\"));\r\n\r\n if (!width || !height) {\r\n width = maxWidth;\r\n height = maxHeight;\r\n }\r\n\r\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\r\n\r\n width = minRatio * width;\r\n height = minRatio * height;\r\n\r\n // Adjust width/height to precisely fit into container\r\n if (width > maxWidth - 0.5) {\r\n width = maxWidth;\r\n }\r\n\r\n if (height > maxHeight - 0.5) {\r\n height = maxHeight;\r\n }\r\n\r\n if (slide.type === \"image\") {\r\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\r\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\r\n } else if (slide.contentType === \"video\") {\r\n // Force aspect ratio for the video\r\n // \"I say the whole world must learn of our peaceful ways… by force!\"\r\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\r\n\r\n if (height > width / aspectRatio) {\r\n height = width / aspectRatio;\r\n } else if (width > height * aspectRatio) {\r\n width = height * aspectRatio;\r\n }\r\n }\r\n\r\n rez.width = width;\r\n rez.height = height;\r\n\r\n return rez;\r\n },\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update: function (e) {\r\n var self = this;\r\n\r\n $.each(self.slides, function (key, slide) {\r\n self.updateSlide(slide, e);\r\n });\r\n },\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide: function (slide, e) {\r\n var self = this,\r\n $content = slide && slide.$content,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n $slide = slide.$slide;\r\n\r\n // First, prevent caption overlap, if needed\r\n self.adjustCaption(slide);\r\n\r\n // Then resize content to fit inside the slide\r\n if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\r\n $.fancybox.stop($content);\r\n\r\n $.fancybox.setTranslate($content, self.getFitPos(slide));\r\n\r\n if (slide.pos === self.currPos) {\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n // Then some adjustments\r\n self.adjustLayout(slide);\r\n\r\n if ($slide.length) {\r\n $slide.trigger(\"refresh\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.$refs.toolbar\r\n .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\r\n .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\r\n }\r\n }\r\n\r\n self.trigger(\"onUpdate\", slide, e);\r\n },\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $slide = current.$slide;\r\n\r\n if (self.isClosing || !current) {\r\n return;\r\n }\r\n\r\n $slide.siblings().css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n $slide\r\n .parent()\r\n .children()\r\n .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\r\n\r\n $.fancybox.animate(\r\n $slide, {\r\n top: 0,\r\n left: 0,\r\n opacity: 1\r\n },\r\n duration === undefined ? 0 : duration,\r\n function () {\r\n // Clean up\r\n $slide.css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (!current.isComplete) {\r\n self.complete();\r\n }\r\n },\r\n false\r\n );\r\n },\r\n\r\n // Check if current slide is moved (swiped)\r\n // ========================================\r\n\r\n isMoved: function (slide) {\r\n var current = slide || this.current,\r\n slidePos,\r\n stagePos;\r\n\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\r\n slidePos = $.fancybox.getTranslate(current.$slide);\r\n\r\n return (\r\n !current.$slide.hasClass(\"fancybox-animated\") &&\r\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\r\n );\r\n },\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n $container = self.$refs.container,\r\n canPan,\r\n isZoomable;\r\n\r\n if (!current || self.isClosing || !self.Guestures) {\r\n return;\r\n }\r\n\r\n $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\r\n\r\n canPan = self.canPan(nextWidth, nextHeight);\r\n\r\n isZoomable = canPan ? true : self.isZoomable();\r\n\r\n $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\r\n\r\n $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\r\n\r\n if (canPan) {\r\n $container.addClass(\"fancybox-can-pan\");\r\n } else if (\r\n isZoomable &&\r\n (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\r\n ) {\r\n $container.addClass(\"fancybox-can-zoomIn\");\r\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\r\n $container.addClass(\"fancybox-can-swipe\");\r\n }\r\n },\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable: function () {\r\n var self = this,\r\n current = self.current,\r\n fitPos;\r\n\r\n // Assume that slide is zoomable if:\r\n // - image is still loading\r\n // - actual size of the image is smaller than available area\r\n if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\r\n if (!current.isLoaded) {\r\n return true;\r\n }\r\n\r\n fitPos = self.getFitPos(current);\r\n\r\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown: function (nextWidth, nextHeight) {\r\n var self = this,\r\n rez = false,\r\n current = self.current,\r\n $content = current.$content;\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n rez = nextWidth < current.width && nextHeight < current.height;\r\n } else if ($content) {\r\n rez = $.fancybox.getTranslate($content);\r\n rez = rez.width < current.width && rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n pos = null,\r\n rez = false;\r\n\r\n if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\r\n rez = self.getFitPos(current);\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n pos = {\r\n width: nextWidth,\r\n height: nextHeight\r\n };\r\n } else if (current.isComplete) {\r\n pos = $.fancybox.getTranslate(current.$content);\r\n }\r\n\r\n if (pos && rez) {\r\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\r\n }\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide: function (slide) {\r\n var self = this,\r\n type,\r\n $slide,\r\n ajaxLoad;\r\n\r\n if (slide.isLoading || slide.isLoaded) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n if (self.trigger(\"beforeLoad\", slide) === false) {\r\n slide.isLoading = false;\r\n\r\n return false;\r\n }\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off(\"refresh\")\r\n .trigger(\"onReset\")\r\n .addClass(slide.opts.slideClass);\r\n\r\n // Create content depending on the type\r\n switch (type) {\r\n case \"image\":\r\n self.setImage(slide);\r\n\r\n break;\r\n\r\n case \"iframe\":\r\n self.setIframe(slide);\r\n\r\n break;\r\n\r\n case \"html\":\r\n self.setContent(slide, slide.src || slide.content);\r\n\r\n break;\r\n\r\n case \"video\":\r\n self.setContent(\r\n slide,\r\n slide.opts.video.tpl\r\n .replace(/\\{\\{src\\}\\}/gi, slide.src)\r\n .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\r\n .replace(\"{{poster}}\", slide.thumb || \"\")\r\n );\r\n\r\n break;\r\n\r\n case \"inline\":\r\n if ($(slide.src).length) {\r\n self.setContent(slide, $(slide.src));\r\n } else {\r\n self.setError(slide);\r\n }\r\n\r\n break;\r\n\r\n case \"ajax\":\r\n self.showLoading(slide);\r\n\r\n ajaxLoad = $.ajax(\r\n $.extend({}, slide.opts.ajax.settings, {\r\n url: slide.src,\r\n success: function (data, textStatus) {\r\n if (textStatus === \"success\") {\r\n self.setContent(slide, data);\r\n }\r\n },\r\n error: function (jqXHR, textStatus) {\r\n if (jqXHR && textStatus !== \"abort\") {\r\n self.setError(slide);\r\n }\r\n }\r\n })\r\n );\r\n\r\n $slide.one(\"onReset\", function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n default:\r\n self.setError(slide);\r\n\r\n break;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage: function (slide) {\r\n var self = this,\r\n ghost;\r\n\r\n // Check if need to show loading icon\r\n setTimeout(function () {\r\n var $img = slide.$image;\r\n\r\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\r\n self.showLoading(slide);\r\n }\r\n }, 50);\r\n\r\n //Check if image has srcset\r\n self.checkSrcset(slide);\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
        ')\r\n .addClass(\"fancybox-is-hidden\")\r\n .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n ghost = document.createElement(\"img\");\r\n\r\n ghost.onerror = function () {\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n };\r\n\r\n ghost.onload = function () {\r\n self.afterLoad(slide);\r\n };\r\n\r\n slide.$ghost = $(ghost)\r\n .addClass(\"fancybox-image\")\r\n .appendTo(slide.$content)\r\n .attr(\"src\", slide.thumb);\r\n }\r\n\r\n // Start loading actual image\r\n self.setBigImage(slide);\r\n },\r\n\r\n // Check if image has srcset and get the source\r\n // ============================================\r\n checkSrcset: function (slide) {\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\r\n found,\r\n temp,\r\n pxRatio,\r\n windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find first matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if (srcset) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(\",\").map(function (el) {\r\n var ret = {};\r\n\r\n el.trim()\r\n .split(/\\s+/)\r\n .forEach(function (el, i) {\r\n var value = parseInt(el.substring(0, el.length - 1), 10);\r\n\r\n if (i === 0) {\r\n return (ret.url = el);\r\n }\r\n\r\n if (value) {\r\n ret.value = value;\r\n ret.postfix = el[el.length - 1];\r\n }\r\n });\r\n\r\n return ret;\r\n });\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for (var j = 0; j < temp.length; j++) {\r\n var el = temp[j];\r\n\r\n if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if (!found && temp.length) {\r\n found = temp[temp.length - 1];\r\n }\r\n\r\n if (found) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if (slide.width && slide.height && found.postfix == \"w\") {\r\n slide.height = (slide.width / slide.height) * found.value;\r\n slide.width = found.value;\r\n }\r\n\r\n slide.opts.srcset = srcset;\r\n }\r\n }\r\n },\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage: function (slide) {\r\n var self = this,\r\n img = document.createElement(\"img\"),\r\n $img = $(img);\r\n\r\n slide.$image = $img\r\n .one(\"error\", function () {\r\n self.setError(slide);\r\n })\r\n .one(\"load\", function () {\r\n var sizes;\r\n\r\n if (!slide.$ghost) {\r\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\r\n\r\n self.afterLoad(slide);\r\n }\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (slide.opts.srcset) {\r\n sizes = slide.opts.sizes;\r\n\r\n if (!sizes || sizes === \"auto\") {\r\n sizes =\r\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\r\n \"vw\";\r\n }\r\n\r\n $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\r\n }\r\n\r\n // Hide temporary image after some delay\r\n if (slide.$ghost) {\r\n setTimeout(function () {\r\n if (slide.$ghost && !self.isClosing) {\r\n slide.$ghost.hide();\r\n }\r\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\r\n }\r\n\r\n self.hideLoading(slide);\r\n })\r\n .addClass(\"fancybox-image\")\r\n .attr(\"src\", slide.src)\r\n .appendTo(slide.$content);\r\n\r\n if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\r\n $img.trigger(\"load\");\r\n } else if (img.error) {\r\n $img.trigger(\"error\");\r\n }\r\n },\r\n\r\n // Computes the slide size from image size and maxWidth/maxHeight\r\n // ==============================================================\r\n\r\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\r\n var maxWidth = parseInt(slide.opts.width, 10),\r\n maxHeight = parseInt(slide.opts.height, 10);\r\n\r\n // Sets the default values from the image\r\n slide.width = imgWidth;\r\n slide.height = imgHeight;\r\n\r\n if (maxWidth > 0) {\r\n slide.width = maxWidth;\r\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\r\n }\r\n\r\n if (maxHeight > 0) {\r\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\r\n slide.height = maxHeight;\r\n }\r\n },\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe: function (slide) {\r\n var self = this,\r\n opts = slide.opts.iframe,\r\n $slide = slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
        ')\r\n .css(opts.css)\r\n .appendTo($slide);\r\n\r\n $slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\r\n .attr(opts.attr)\r\n .appendTo(slide.$content);\r\n\r\n if (opts.preload) {\r\n self.showLoading(slide);\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on(\"load.fb error.fb\", function (e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger(\"refresh\");\r\n\r\n self.afterLoad(slide);\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on(\"refresh.fb\", function () {\r\n var $content = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n $contents,\r\n $body;\r\n\r\n if ($iframe[0].isReady !== 1) {\r\n return;\r\n }\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find(\"body\");\r\n } catch (ignore) {}\r\n\r\n // Calculate content dimensions, if it is accessible\r\n if ($body && $body.length && $body.children().length) {\r\n // Avoid scrolling to top (if multiple instances)\r\n $slide.css(\"overflow\", \"visible\");\r\n\r\n $content.css({\r\n width: \"100%\",\r\n \"max-width\": \"100%\",\r\n height: \"9999px\"\r\n });\r\n\r\n if (frameWidth === undefined) {\r\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\r\n }\r\n\r\n $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\r\n\r\n if (frameHeight === undefined) {\r\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\r\n }\r\n\r\n $content.css(\"height\", frameHeight ? frameHeight : \"\");\r\n\r\n $slide.css(\"overflow\", \"auto\");\r\n }\r\n\r\n $content.removeClass(\"fancybox-is-hidden\");\r\n });\r\n } else {\r\n self.afterLoad(slide);\r\n }\r\n\r\n $iframe.attr(\"src\", slide.src);\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one(\"onReset\", function () {\r\n // This helps IE not to throw errors when closing\r\n try {\r\n $(this)\r\n .find(\"iframe\")\r\n .hide()\r\n .unbind()\r\n .attr(\"src\", \"//about:blank\");\r\n } catch (ignore) {}\r\n\r\n $(this)\r\n .off(\"refresh.fb\")\r\n .empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n });\r\n },\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent: function (slide, content) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n self.hideLoading(slide);\r\n\r\n if (slide.$content) {\r\n $.fancybox.stop(slide.$content);\r\n }\r\n\r\n slide.$slide.empty();\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n if (isQuery(content) && content.parent().length) {\r\n // Make sure content is not already moved to fancyBox\r\n if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\r\n content.parents(\".fancybox-slide\").trigger(\"onReset\");\r\n }\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $(\"
        \")\r\n .hide()\r\n .insertAfter(content);\r\n\r\n // Make sure content is visible\r\n content.css(\"display\", \"inline-block\");\r\n } else if (!slide.hasError) {\r\n // If content is just a plain text, try to convert it to html\r\n if ($.type(content) === \"string\") {\r\n content = $(\"
        \")\r\n .append($.trim(content))\r\n .contents();\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if (slide.opts.filter) {\r\n content = $(\"
        \")\r\n .html(content)\r\n .find(slide.opts.filter);\r\n }\r\n }\r\n\r\n slide.$slide.one(\"onReset\", function () {\r\n // Pause all html5 video/audio\r\n $(this)\r\n .find(\"video,audio\")\r\n .trigger(\"pause\");\r\n\r\n // Put content back\r\n if (slide.$placeholder) {\r\n slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if (slide.$smallBtn) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if (!slide.hasError) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n }\r\n });\r\n\r\n $(content).appendTo(slide.$slide);\r\n\r\n if ($(content).is(\"video,audio\")) {\r\n $(content).addClass(\"fancybox-video\");\r\n\r\n $(content).wrap(\"
        \");\r\n\r\n slide.contentType = \"video\";\r\n\r\n slide.opts.width = slide.opts.width || $(content).attr(\"width\");\r\n slide.opts.height = slide.opts.height || $(content).attr(\"height\");\r\n }\r\n\r\n slide.$content = slide.$slide\r\n .children()\r\n .filter(\"div,form,main,video,audio,article,.fancybox-content\")\r\n .first();\r\n\r\n slide.$content.siblings().hide();\r\n\r\n // Re-check if there is a valid content\r\n // (in some cases, ajax response can contain various elements or plain text)\r\n if (!slide.$content.length) {\r\n slide.$content = slide.$slide\r\n .wrapInner(\"
        \")\r\n .children()\r\n .first();\r\n }\r\n\r\n slide.$content.addClass(\"fancybox-content\");\r\n\r\n slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n self.afterLoad(slide);\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError: function (slide) {\r\n slide.hasError = true;\r\n\r\n slide.$slide\r\n .trigger(\"onReset\")\r\n .removeClass(\"fancybox-slide--\" + slide.contentType)\r\n .addClass(\"fancybox-slide--error\");\r\n\r\n slide.contentType = \"html\";\r\n\r\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\r\n\r\n if (slide.pos === this.currPos) {\r\n this.isAnimating = false;\r\n }\r\n },\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && !slide.$spinner) {\r\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\r\n .appendTo(slide.$slide)\r\n .hide()\r\n .fadeIn(\"fast\");\r\n }\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && slide.$spinner) {\r\n slide.$spinner.stop().remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n },\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad: function (slide) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger(\"afterLoad\", slide);\r\n\r\n self.hideLoading(slide);\r\n\r\n // Add small close button\r\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\r\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\r\n }\r\n\r\n // Disable right click\r\n if (slide.opts.protect && slide.$content && !slide.hasError) {\r\n slide.$content.on(\"contextmenu.fb\", function (e) {\r\n if (e.button == 2) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if (slide.type === \"image\") {\r\n $('
        ').appendTo(slide.$content);\r\n }\r\n }\r\n\r\n self.adjustCaption(slide);\r\n\r\n self.adjustLayout(slide);\r\n\r\n if (slide.pos === self.currPos) {\r\n self.updateCursor();\r\n }\r\n\r\n self.revealContent(slide);\r\n },\r\n\r\n // Prevent caption overlap,\r\n // fix css inconsistency across browsers\r\n // =====================================\r\n\r\n adjustCaption: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n caption = current.opts.caption,\r\n preventOverlap = current.opts.preventCaptionOverlap,\r\n $caption = self.$refs.caption,\r\n $clone,\r\n captionH = false;\r\n\r\n $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\r\n\r\n if (preventOverlap && caption && caption.length) {\r\n if (current.pos !== self.currPos) {\r\n $clone = $caption.clone().appendTo($caption.parent());\r\n\r\n $clone\r\n .children()\r\n .eq(0)\r\n .empty()\r\n .html(caption);\r\n\r\n captionH = $clone.outerHeight(true);\r\n\r\n $clone.empty().remove();\r\n } else if (self.$caption) {\r\n captionH = self.$caption.outerHeight(true);\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", captionH || \"\");\r\n }\r\n },\r\n\r\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\r\n // ====================================================================================\r\n\r\n adjustLayout: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n scrollHeight,\r\n marginBottom,\r\n inlinePadding,\r\n actualPadding;\r\n\r\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\r\n current.$content.css(\"margin-bottom\", \"\");\r\n\r\n // If we would always set margin-bottom for the content,\r\n // then it would potentially break vertical align\r\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\r\n inlinePadding = current.$slide[0].style[\"padding-bottom\"];\r\n actualPadding = current.$slide.css(\"padding-bottom\");\r\n\r\n if (parseFloat(actualPadding) > 0) {\r\n scrollHeight = current.$slide[0].scrollHeight;\r\n\r\n current.$slide.css(\"padding-bottom\", 0);\r\n\r\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\r\n marginBottom = actualPadding;\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", inlinePadding);\r\n }\r\n }\r\n\r\n current.$content.css(\"margin-bottom\", marginBottom);\r\n }\r\n },\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent: function (slide) {\r\n var self = this,\r\n $slide = slide.$slide,\r\n end = false,\r\n start = false,\r\n isMoved = self.isMoved(slide),\r\n isRevealed = slide.isRevealed,\r\n effect,\r\n effectClassName,\r\n duration,\r\n opacity;\r\n\r\n slide.isRevealed = true;\r\n\r\n effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\r\n duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n\r\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\r\n\r\n if (isMoved || slide.pos !== self.currPos || !duration) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if (effect === \"zoom\") {\r\n if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\r\n end = self.getFitPos(slide);\r\n } else {\r\n effect = \"fade\";\r\n }\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n if (effect === \"zoom\") {\r\n self.isAnimating = true;\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\r\n\r\n forceRedraw(slide.$content);\r\n\r\n // Start animation\r\n $.fancybox.animate(slide.$content, end, duration, function () {\r\n self.isAnimating = false;\r\n\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide(slide);\r\n\r\n // Simply show content if no effect\r\n // ================================\r\n if (!effect) {\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\r\n slide.$content.hide().fadeIn(\"fast\");\r\n }\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Prepare for CSS transiton\r\n // =========================\r\n $.fancybox.stop($slide);\r\n\r\n //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\r\n effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\r\n\r\n $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\r\n\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n // Force reflow\r\n forceRedraw($slide);\r\n\r\n if (slide.type !== \"image\") {\r\n slide.$content.hide().show(0);\r\n }\r\n\r\n $.fancybox.animate(\r\n $slide,\r\n \"fancybox-slide--current\",\r\n duration,\r\n function () {\r\n $slide.removeClass(effectClassName).css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n },\r\n true\r\n );\r\n },\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos: function (slide) {\r\n var rez = false,\r\n $thumb = slide.$thumb,\r\n thumbPos,\r\n btw,\r\n brw,\r\n bbw,\r\n blw;\r\n\r\n if (!$thumb || !inViewport($thumb[0])) {\r\n return false;\r\n }\r\n\r\n thumbPos = $.fancybox.getTranslate($thumb);\r\n\r\n btw = parseFloat($thumb.css(\"border-top-width\") || 0);\r\n brw = parseFloat($thumb.css(\"border-right-width\") || 0);\r\n bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\r\n blw = parseFloat($thumb.css(\"border-left-width\") || 0);\r\n\r\n rez = {\r\n top: thumbPos.top + btw,\r\n left: thumbPos.left + blw,\r\n width: thumbPos.width - brw - blw,\r\n height: thumbPos.height - btw - bbw,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\r\n },\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete: function () {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n $el;\r\n\r\n if (self.isMoved() || !current.isLoaded) {\r\n return;\r\n }\r\n\r\n if (!current.isComplete) {\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger(\"onReset\");\r\n\r\n self.preload(\"inline\");\r\n\r\n // Trigger any CSS transiton inside the slide\r\n forceRedraw(current.$slide);\r\n\r\n current.$slide.addClass(\"fancybox-slide--complete\");\r\n\r\n // Remove unnecessary slides\r\n $.each(self.slides, function (key, slide) {\r\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\r\n slides[slide.pos] = slide;\r\n } else if (slide) {\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n }\r\n\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger(\"afterShow\");\r\n\r\n // Autoplay first html5 video/audio\r\n if (!!current.opts.video.autoStart) {\r\n current.$slide\r\n .find(\"video,audio\")\r\n .filter(\":visible:first\")\r\n .trigger(\"play\")\r\n .one(\"ended\", function () {\r\n if (Document.exitFullscreen) {\r\n Document.exitFullscreen();\r\n } else if (this.webkitExitFullscreen) {\r\n this.webkitExitFullscreen();\r\n }\r\n\r\n self.next();\r\n });\r\n }\r\n\r\n // Try to focus on the first focusable element\r\n if (current.opts.autoFocus && current.contentType === \"html\") {\r\n // Look for the first input with autofocus attribute\r\n $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\r\n\r\n if ($el.length) {\r\n $el.trigger(\"focus\");\r\n } else {\r\n self.focus(null, true);\r\n }\r\n }\r\n\r\n // Avoid jumping\r\n current.$slide.scrollTop(0).scrollLeft(0);\r\n },\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload: function (type) {\r\n var self = this,\r\n prev,\r\n next;\r\n\r\n if (self.group.length < 2) {\r\n return;\r\n }\r\n\r\n next = self.slides[self.currPos + 1];\r\n prev = self.slides[self.currPos - 1];\r\n\r\n if (prev && prev.type === type) {\r\n self.loadSlide(prev);\r\n }\r\n\r\n if (next && next.type === type) {\r\n self.loadSlide(next);\r\n }\r\n },\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus: function (e, firstRun) {\r\n var self = this,\r\n focusableStr = [\r\n \"a[href]\",\r\n \"area[href]\",\r\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\r\n \"select:not([disabled]):not([aria-hidden])\",\r\n \"textarea:not([disabled]):not([aria-hidden])\",\r\n \"button:not([disabled]):not([aria-hidden])\",\r\n \"iframe\",\r\n \"object\",\r\n \"embed\",\r\n \"video\",\r\n \"audio\",\r\n \"[contenteditable]\",\r\n '[tabindex]:not([tabindex^=\"-\"])'\r\n ].join(\",\"),\r\n focusableItems,\r\n focusedItemIndex;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (e || !self.current || !self.current.isComplete) {\r\n // Focus on any element inside fancybox\r\n focusableItems = self.$refs.container.find(\"*:visible\");\r\n } else {\r\n // Focus inside current slide\r\n focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\r\n }\r\n\r\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\r\n return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\r\n });\r\n\r\n if (focusableItems.length) {\r\n focusedItemIndex = focusableItems.index(document.activeElement);\r\n\r\n if (e && e.shiftKey) {\r\n // Back tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\r\n e.preventDefault();\r\n\r\n focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\r\n }\r\n } else {\r\n // Outside or Forward tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n\r\n focusableItems.eq(0).trigger(\"focus\");\r\n }\r\n }\r\n } else {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate: function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $(\".fancybox-container\").each(function () {\r\n var instance = $(this).data(\"FancyBox\");\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger(\"onDeactivate\");\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if (self.current || self.isIdle) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger(\"onActivate\");\r\n\r\n self.addEvents();\r\n },\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close: function (e, d) {\r\n var self = this,\r\n current = self.current,\r\n effect,\r\n duration,\r\n $content,\r\n domRect,\r\n opacity,\r\n start,\r\n end;\r\n\r\n var done = function () {\r\n self.cleanUp(e);\r\n };\r\n\r\n if (self.isClosing) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if (self.trigger(\"beforeClose\", e) === false) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function () {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n $content = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\r\n\r\n current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\r\n\r\n if (e !== true) {\r\n $.fancybox.stop(current.$slide);\r\n } else {\r\n effect = false;\r\n }\r\n\r\n // Remove other slides\r\n current.$slide\r\n .siblings()\r\n .trigger(\"onReset\")\r\n .remove();\r\n\r\n // Trigger animations\r\n if (duration) {\r\n self.$refs.container\r\n .removeClass(\"fancybox-is-open\")\r\n .addClass(\"fancybox-is-closing\")\r\n .css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Clean up\r\n self.hideLoading(current);\r\n\r\n self.hideControls(true);\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if (\r\n effect === \"zoom\" &&\r\n !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\r\n ) {\r\n effect = \"fade\";\r\n }\r\n\r\n if (effect === \"zoom\") {\r\n $.fancybox.stop($content);\r\n\r\n domRect = $.fancybox.getTranslate($content);\r\n\r\n start = {\r\n top: domRect.top,\r\n left: domRect.left,\r\n scaleX: domRect.width / end.width,\r\n scaleY: domRect.height / end.height,\r\n width: end.width,\r\n height: end.height\r\n };\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n end.opacity = 0;\r\n }\r\n\r\n $.fancybox.setTranslate($content, start);\r\n\r\n forceRedraw($content);\r\n\r\n $.fancybox.animate($content, end, duration, done);\r\n\r\n return true;\r\n }\r\n\r\n if (effect && duration) {\r\n $.fancybox.animate(\r\n current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\r\n \"fancybox-animated fancybox-fx-\" + effect,\r\n duration,\r\n done\r\n );\r\n } else {\r\n // If skip animation\r\n if (e === true) {\r\n setTimeout(done, duration);\r\n } else {\r\n done();\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp: function (e) {\r\n var self = this,\r\n instance,\r\n $focus = self.current.opts.$orig,\r\n x,\r\n y;\r\n\r\n self.current.$slide.trigger(\"onReset\");\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger(\"afterClose\", e);\r\n\r\n // Place back focus\r\n if (!!self.current.opts.backFocus) {\r\n if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\r\n $focus = self.$trigger;\r\n }\r\n\r\n if ($focus && $focus.length) {\r\n x = window.scrollX;\r\n y = window.scrollY;\r\n\r\n $focus.trigger(\"focus\");\r\n\r\n $(\"html, body\")\r\n .scrollTop(y)\r\n .scrollLeft(x);\r\n }\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n instance.activate();\r\n } else {\r\n $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\r\n\r\n $(\"#fancybox-style-noscroll\").remove();\r\n }\r\n },\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger: function (name, slide) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if (obj) {\r\n args.unshift(obj);\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift(self);\r\n\r\n if ($.isFunction(obj.opts[name])) {\r\n rez = obj.opts[name].apply(obj, args);\r\n }\r\n\r\n if (rez === false) {\r\n return rez;\r\n }\r\n\r\n if (name === \"afterClose\" || !self.$refs) {\r\n $D.trigger(name + \".fb\", args);\r\n } else {\r\n self.$refs.container.trigger(name + \".fb\", args);\r\n }\r\n },\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls: function () {\r\n var self = this,\r\n current = self.current,\r\n index = current.index,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption,\r\n caption = current.opts.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger(\"refresh\");\r\n\r\n // Set caption\r\n if (caption && caption.length) {\r\n self.$caption = $caption;\r\n\r\n $caption\r\n .children()\r\n .eq(0)\r\n .html(caption);\r\n } else {\r\n self.$caption = null;\r\n }\r\n\r\n if (!self.hasHiddenControls && !self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find(\"[data-fancybox-count]\").html(self.group.length);\r\n $container.find(\"[data-fancybox-index]\").html(index + 1);\r\n\r\n $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\r\n $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\r\n\r\n if (current.type === \"image\") {\r\n // Re-enable buttons; update download button source\r\n $container\r\n .find(\"[data-fancybox-zoom]\")\r\n .show()\r\n .end()\r\n .find(\"[data-fancybox-download]\")\r\n .attr(\"href\", current.opts.image.src || current.src)\r\n .show();\r\n } else if (current.opts.toolbar) {\r\n $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\r\n }\r\n\r\n // Make sure focus is not on disabled button/element\r\n if ($(document.activeElement).is(\":hidden,[disabled]\")) {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls: function (andCaption) {\r\n var self = this,\r\n arr = [\"infobar\", \"toolbar\", \"nav\"];\r\n\r\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\r\n arr.push(\"caption\");\r\n }\r\n\r\n this.$refs.container.removeClass(\r\n arr\r\n .map(function (i) {\r\n return \"fancybox-show-\" + i;\r\n })\r\n .join(\" \")\r\n );\r\n\r\n this.hasHiddenControls = true;\r\n },\r\n\r\n showControls: function () {\r\n var self = this,\r\n opts = self.current ? self.current.opts : self.opts,\r\n $container = self.$refs.container;\r\n\r\n self.hasHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\r\n .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\r\n .toggleClass(\"fancybox-show-caption\", !!self.$caption)\r\n .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\r\n .toggleClass(\"fancybox-is-modal\", !!opts.modal);\r\n },\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls: function () {\r\n if (this.hasHiddenControls) {\r\n this.showControls();\r\n } else {\r\n this.hideControls();\r\n }\r\n }\r\n });\r\n\r\n $.fancybox = {\r\n version: \"3.5.7\",\r\n defaults: defaults,\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance: function (command) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\r\n args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if (instance instanceof FancyBox) {\r\n if ($.type(command) === \"string\") {\r\n instance[command].apply(instance, args);\r\n } else if ($.type(command) === \"function\") {\r\n command.apply(instance, args);\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open: function (items, opts, index) {\r\n return new FancyBox(items, opts, index);\r\n },\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close: function (all) {\r\n var instance = this.getInstance();\r\n\r\n if (instance) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n if (all === true) {\r\n this.close(all);\r\n }\r\n }\r\n },\r\n\r\n // Close all instances and unbind all events\r\n // =========================================\r\n\r\n destroy: function () {\r\n this.close(true);\r\n\r\n $D.add(\"body\").off(\"click.fb-start\", \"**\");\r\n },\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d: (function () {\r\n var div = document.createElement(\"div\");\r\n\r\n return (\r\n window.getComputedStyle &&\r\n window.getComputedStyle(div) &&\r\n window.getComputedStyle(div).getPropertyValue(\"transform\") &&\r\n !(document.documentMode && document.documentMode < 11)\r\n );\r\n })(),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate: function ($el) {\r\n var domRect;\r\n\r\n if (!$el || !$el.length) {\r\n return false;\r\n }\r\n\r\n domRect = $el[0].getBoundingClientRect();\r\n\r\n return {\r\n top: domRect.top || 0,\r\n left: domRect.left || 0,\r\n width: domRect.width,\r\n height: domRect.height,\r\n opacity: parseFloat($el.css(\"opacity\"))\r\n };\r\n },\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate: function ($el, props) {\r\n var str = \"\",\r\n css = {};\r\n\r\n if (!$el || !props) {\r\n return;\r\n }\r\n\r\n if (props.left !== undefined || props.top !== undefined) {\r\n str =\r\n (props.left === undefined ? $el.position().left : props.left) +\r\n \"px, \" +\r\n (props.top === undefined ? $el.position().top : props.top) +\r\n \"px\";\r\n\r\n if (this.use3d) {\r\n str = \"translate3d(\" + str + \", 0px)\";\r\n } else {\r\n str = \"translate(\" + str + \")\";\r\n }\r\n }\r\n\r\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\r\n str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\r\n } else if (props.scaleX !== undefined) {\r\n str += \" scaleX(\" + props.scaleX + \")\";\r\n }\r\n\r\n if (str.length) {\r\n css.transform = str;\r\n }\r\n\r\n if (props.opacity !== undefined) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if (props.width !== undefined) {\r\n css.width = props.width;\r\n }\r\n\r\n if (props.height !== undefined) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css(css);\r\n },\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate: function ($el, to, duration, callback, leaveAnimationName) {\r\n var self = this,\r\n from;\r\n\r\n if ($.isFunction(duration)) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n self.stop($el);\r\n\r\n from = self.getTranslate($el);\r\n\r\n $el.on(transitionEnd, function (e) {\r\n // Skip events from child elements and z-index change\r\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\r\n return;\r\n }\r\n\r\n self.stop($el);\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", \"\");\r\n }\r\n\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n self.setTranslate($el, {\r\n top: to.top,\r\n left: to.left,\r\n width: from.width * to.scaleX,\r\n height: from.height * to.scaleY,\r\n scaleX: 1,\r\n scaleY: 1\r\n });\r\n }\r\n } else if (leaveAnimationName !== true) {\r\n $el.removeClass(to);\r\n }\r\n\r\n if ($.isFunction(callback)) {\r\n callback(e);\r\n }\r\n });\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Start animation by changing CSS properties or class name\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n delete to.width;\r\n delete to.height;\r\n\r\n if ($el.parent().hasClass(\"fancybox-slide--image\")) {\r\n $el.parent().addClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n\r\n $.fancybox.setTranslate($el, to);\r\n } else {\r\n $el.addClass(to);\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\r\n \"timer\",\r\n setTimeout(function () {\r\n $el.trigger(transitionEnd);\r\n }, duration + 33)\r\n );\r\n },\r\n\r\n stop: function ($el, callCallback) {\r\n if ($el && $el.length) {\r\n clearTimeout($el.data(\"timer\"));\r\n\r\n if (callCallback) {\r\n $el.trigger(transitionEnd);\r\n }\r\n\r\n $el.off(transitionEnd).css(\"transition-duration\", \"\");\r\n\r\n $el.parent().removeClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n };\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run(e, opts) {\r\n var items = [],\r\n index = 0,\r\n $target,\r\n value,\r\n instance;\r\n\r\n // Avoid opening multiple times\r\n if (e && e.isDefaultPrevented()) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n opts = opts || {};\r\n\r\n if (e && e.data) {\r\n opts = mergeOpts(e.data.options, opts);\r\n }\r\n\r\n $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\r\n return;\r\n }\r\n\r\n if (opts.selector) {\r\n items = $(opts.selector);\r\n } else {\r\n // Get all related items and find index for clicked one\r\n value = $target.attr(\"data-fancybox\") || \"\";\r\n\r\n if (value) {\r\n items = e.data ? e.data.items : [];\r\n items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\r\n } else {\r\n items = [$target];\r\n }\r\n }\r\n\r\n index = $(items).index($target);\r\n\r\n // Sometimes current item can not be found\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n\r\n instance = $.fancybox.open(items, opts, index);\r\n\r\n // Save last active element\r\n instance.$trigger = $target;\r\n }\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if (selector) {\r\n // Use body element instead of document so it executes first\r\n $(\"body\")\r\n .off(\"click.fb-start\", selector)\r\n .on(\"click.fb-start\", selector, {\r\n options: options\r\n }, _run);\r\n } else {\r\n this.off(\"click.fb-start\").on(\r\n \"click.fb-start\", {\r\n items: this,\r\n options: options\r\n },\r\n _run\r\n );\r\n }\r\n\r\n return this;\r\n };\r\n\r\n // Self initializing plugin for all elements having `data-fancybox` attribute\r\n // ==========================================================================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\r\n\r\n // Enable \"trigger elements\"\r\n // =========================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\r\n $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\r\n .eq($(this).attr(\"data-fancybox-index\") || 0)\r\n .trigger(\"click.fb-start\", {\r\n $trigger: $(this)\r\n });\r\n });\r\n\r\n // Track focus event for better accessibility styling\r\n // ==================================================\r\n (function () {\r\n var buttonStr = \".fancybox-button\",\r\n focusStr = \"fancybox-focus\",\r\n $pressed = null;\r\n\r\n $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\r\n switch (e.type) {\r\n case \"mousedown\":\r\n $pressed = $(this);\r\n break;\r\n case \"mouseup\":\r\n $pressed = null;\r\n break;\r\n case \"focusin\":\r\n $(buttonStr).removeClass(focusStr);\r\n\r\n if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\r\n $(this).addClass(focusStr);\r\n }\r\n break;\r\n case \"focusout\":\r\n $(buttonStr).removeClass(focusStr);\r\n break;\r\n }\r\n });\r\n })();\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n(function ($) {\r\n \"use strict\";\r\n\r\n // Object containing properties for each media type\r\n var defaults = {\r\n youtube: {\r\n matcher: /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n params: {\r\n autoplay: 1,\r\n autohide: 1,\r\n fs: 1,\r\n rel: 0,\r\n hd: 1,\r\n wmode: \"transparent\",\r\n enablejsapi: 1,\r\n html5: 1\r\n },\r\n paramPlace: 8,\r\n type: \"iframe\",\r\n url: \"https://www.youtube-nocookie.com/embed/$4\",\r\n thumb: \"https://img.youtube.com/vi/$4/hqdefault.jpg\"\r\n },\r\n\r\n vimeo: {\r\n matcher: /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n params: {\r\n autoplay: 1,\r\n hd: 1,\r\n show_title: 1,\r\n show_byline: 1,\r\n show_portrait: 0,\r\n fullscreen: 1\r\n },\r\n paramPlace: 3,\r\n type: \"iframe\",\r\n url: \"//player.vimeo.com/video/$2\"\r\n },\r\n\r\n instagram: {\r\n matcher: /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n type: \"image\",\r\n url: \"//$1/p/$2/media/?size=l\"\r\n },\r\n\r\n // Examples:\r\n // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\r\n // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n gmap_place: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return (\r\n \"//maps.google.\" +\r\n rez[2] +\r\n \"/?ll=\" +\r\n (rez[9] ? rez[9] + \"&z=\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\//, \"&\") : \"\") : rez[12] + \"\").replace(/\\?/, \"&\") +\r\n \"&output=\" +\r\n (rez[12] && rez[12].indexOf(\"layer=c\") > 0 ? \"svembed\" : \"embed\")\r\n );\r\n }\r\n },\r\n\r\n // Examples:\r\n // https://www.google.com/maps/search/Empire+State+Building/\r\n // https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n gmap_search: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return \"//maps.google.\" + rez[2] + \"/maps?q=\" + rez[5].replace(\"query=\", \"q=\").replace(\"api=1\", \"\") + \"&output=embed\";\r\n }\r\n }\r\n };\r\n\r\n // Formats matching url to final form\r\n var format = function (url, rez, params) {\r\n if (!url) {\r\n return;\r\n }\r\n\r\n params = params || \"\";\r\n\r\n if ($.type(params) === \"object\") {\r\n params = $.param(params, true);\r\n }\r\n\r\n $.each(rez, function (key, value) {\r\n url = url.replace(\"$\" + key, value || \"\");\r\n });\r\n\r\n if (params.length) {\r\n url += (url.indexOf(\"?\") > 0 ? \"&\" : \"?\") + params;\r\n }\r\n\r\n return url;\r\n };\r\n\r\n $(document).on(\"objectNeedsType.fb\", function (e, instance, item) {\r\n var url = item.src || \"\",\r\n type = false,\r\n media,\r\n thumb,\r\n rez,\r\n params,\r\n urlParams,\r\n paramObj,\r\n provider;\r\n\r\n media = $.extend(true, {}, defaults, item.opts.media);\r\n\r\n // Look for any matching media type\r\n $.each(media, function (providerName, providerOpts) {\r\n rez = url.match(providerOpts.matcher);\r\n\r\n if (!rez) {\r\n return;\r\n }\r\n\r\n type = providerOpts.type;\r\n provider = providerName;\r\n paramObj = {};\r\n\r\n if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\r\n urlParams = rez[providerOpts.paramPlace];\r\n\r\n if (urlParams[0] == \"?\") {\r\n urlParams = urlParams.substring(1);\r\n }\r\n\r\n urlParams = urlParams.split(\"&\");\r\n\r\n for (var m = 0; m < urlParams.length; ++m) {\r\n var p = urlParams[m].split(\"=\", 2);\r\n\r\n if (p.length == 2) {\r\n paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\r\n }\r\n }\r\n }\r\n\r\n params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\r\n\r\n url =\r\n $.type(providerOpts.url) === \"function\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\r\n\r\n thumb =\r\n $.type(providerOpts.thumb) === \"function\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\r\n\r\n if (providerName === \"youtube\") {\r\n url = url.replace(/&t=((\\d+)m)?(\\d+)s/, function (match, p1, m, s) {\r\n return \"&start=\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\r\n });\r\n } else if (providerName === \"vimeo\") {\r\n url = url.replace(\"&%23\", \"#\");\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // If it is found, then change content type and update the url\r\n\r\n if (type) {\r\n if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\r\n item.opts.thumb = thumb;\r\n }\r\n\r\n if (type === \"iframe\") {\r\n item.opts = $.extend(true, item.opts, {\r\n iframe: {\r\n preload: false,\r\n attr: {\r\n scrolling: \"no\"\r\n }\r\n }\r\n });\r\n }\r\n\r\n $.extend(item, {\r\n type: type,\r\n src: url,\r\n origSrc: item.src,\r\n contentSource: provider,\r\n contentType: type === \"image\" ? \"image\" : provider == \"gmap_place\" || provider == \"gmap_search\" ? \"map\" : \"video\"\r\n });\r\n } else if (url) {\r\n item.type = item.opts.defaultType;\r\n }\r\n });\r\n\r\n // Load YouTube/Video API on request to detect when video finished playing\r\n var VideoAPILoader = {\r\n youtube: {\r\n src: \"https://www.youtube.com/iframe_api\",\r\n class: \"YT\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n vimeo: {\r\n src: \"https://player.vimeo.com/api/player.js\",\r\n class: \"Vimeo\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n load: function (vendor) {\r\n var _this = this,\r\n script;\r\n\r\n if (this[vendor].loaded) {\r\n setTimeout(function () {\r\n _this.done(vendor);\r\n });\r\n return;\r\n }\r\n\r\n if (this[vendor].loading) {\r\n return;\r\n }\r\n\r\n this[vendor].loading = true;\r\n\r\n script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = this[vendor].src;\r\n\r\n if (vendor === \"youtube\") {\r\n window.onYouTubeIframeAPIReady = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n } else {\r\n script.onload = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n }\r\n\r\n document.body.appendChild(script);\r\n },\r\n done: function (vendor) {\r\n var instance, $el, player;\r\n\r\n if (vendor === \"youtube\") {\r\n delete window.onYouTubeIframeAPIReady;\r\n }\r\n\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n $el = instance.current.$content.find(\"iframe\");\r\n\r\n if (vendor === \"youtube\" && YT !== undefined && YT) {\r\n player = new YT.Player($el.attr(\"id\"), {\r\n events: {\r\n onStateChange: function (e) {\r\n if (e.data == 0) {\r\n instance.next();\r\n }\r\n }\r\n }\r\n });\r\n } else if (vendor === \"vimeo\" && Vimeo !== undefined && Vimeo) {\r\n player = new Vimeo.Player($el);\r\n\r\n player.on(\"ended\", function () {\r\n instance.next();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n $(document).on({\r\n \"afterShow.fb\": function (e, instance, current) {\r\n if (instance.group.length > 1 && (current.contentSource === \"youtube\" || current.contentSource === \"vimeo\")) {\r\n VideoAPILoader.load(current.contentSource);\r\n }\r\n }\r\n });\r\n})(jQuery);\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n var getPointerXY = function (e) {\r\n var result = [];\r\n\r\n e = e.originalEvent || e || window.e;\r\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\r\n\r\n for (var key in e) {\r\n if (e[key].pageX) {\r\n result.push({\r\n x: e[key].pageX,\r\n y: e[key].pageY\r\n });\r\n } else if (e[key].clientX) {\r\n result.push({\r\n x: e[key].clientX,\r\n y: e[key].clientY\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var distance = function (point2, point1, what) {\r\n if (!point1 || !point2) {\r\n return 0;\r\n }\r\n\r\n if (what === \"x\") {\r\n return point2.x - point1.x;\r\n } else if (what === \"y\") {\r\n return point2.y - point1.y;\r\n }\r\n\r\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\r\n };\r\n\r\n var isClickable = function ($el) {\r\n if (\r\n $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\r\n $.isFunction($el.get(0).onclick) ||\r\n $el.data(\"selectable\")\r\n ) {\r\n return true;\r\n }\r\n\r\n // Check for attributes like data-fancybox-next or data-fancybox-close\r\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\r\n if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var hasScrollbars = function (el) {\r\n var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\r\n overflowX = window.getComputedStyle(el)[\"overflow-x\"],\r\n vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\r\n horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\r\n\r\n return vertical || horizontal;\r\n };\r\n\r\n var isScrollable = function ($el) {\r\n var rez = false;\r\n\r\n while (true) {\r\n rez = hasScrollbars($el.get(0));\r\n\r\n if (rez) {\r\n break;\r\n }\r\n\r\n $el = $el.parent();\r\n\r\n if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\r\n break;\r\n }\r\n }\r\n\r\n return rez;\r\n };\r\n\r\n var Guestures = function (instance) {\r\n var self = this;\r\n\r\n self.instance = instance;\r\n\r\n self.$bg = instance.$refs.bg;\r\n self.$stage = instance.$refs.stage;\r\n self.$container = instance.$refs.container;\r\n\r\n self.destroy();\r\n\r\n self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\r\n };\r\n\r\n Guestures.prototype.destroy = function () {\r\n var self = this;\r\n\r\n self.$container.off(\".fb.touch\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n self.requestId = null;\r\n }\r\n\r\n if (self.tapped) {\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n }\r\n };\r\n\r\n Guestures.prototype.ontouchstart = function (e) {\r\n var self = this,\r\n $target = $(e.target),\r\n instance = self.instance,\r\n current = instance.current,\r\n $slide = current.$slide,\r\n $content = current.$content,\r\n isTouchDevice = e.type == \"touchstart\";\r\n\r\n // Do not respond to both (touch and mouse) events\r\n if (isTouchDevice) {\r\n self.$container.off(\"mousedown.fb.touch\");\r\n }\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Ignore taping on links, buttons, input elements\r\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\r\n return;\r\n }\r\n // Ignore clicks on the scrollbar\r\n if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Ignore clicks while zooming or closing\r\n if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n self.realPoints = self.startPoints = getPointerXY(e);\r\n\r\n if (!self.startPoints.length) {\r\n return;\r\n }\r\n\r\n // Allow other scripts to catch touch event if \"touch\" is set to false\r\n if (current.touch) {\r\n e.stopPropagation();\r\n }\r\n\r\n self.startEvent = e;\r\n\r\n self.canTap = true;\r\n self.$target = $target;\r\n self.$content = $content;\r\n self.opts = current.opts.touch;\r\n\r\n self.isPanning = false;\r\n self.isSwiping = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n self.canPan = instance.canPan();\r\n\r\n self.startTime = new Date().getTime();\r\n self.distanceX = self.distanceY = self.distance = 0;\r\n\r\n self.canvasWidth = Math.round($slide[0].clientWidth);\r\n self.canvasHeight = Math.round($slide[0].clientHeight);\r\n\r\n self.contentLastPos = null;\r\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\r\n top: 0,\r\n left: 0\r\n };\r\n self.sliderStartPos = $.fancybox.getTranslate($slide);\r\n\r\n // Since position will be absolute, but we need to make it relative to the stage\r\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n self.sliderStartPos.top -= self.stagePos.top;\r\n self.sliderStartPos.left -= self.stagePos.left;\r\n\r\n self.contentStartPos.top -= self.stagePos.top;\r\n self.contentStartPos.left -= self.stagePos.left;\r\n\r\n $(document)\r\n .off(\".fb.touch\")\r\n .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\r\n .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\r\n\r\n if ($.fancybox.isMobile) {\r\n document.addEventListener(\"scroll\", self.onscroll, true);\r\n }\r\n\r\n // Skip if clicked outside the sliding area\r\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\r\n if ($target.is(\".fancybox-image\")) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\r\n return;\r\n }\r\n }\r\n\r\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\r\n\r\n // Check if element is scrollable and try to prevent default behavior (scrolling)\r\n if (!($.fancybox.isMobile && self.isScrollable)) {\r\n e.preventDefault();\r\n }\r\n\r\n // One finger or mouse click - swipe or pan an image\r\n if (self.startPoints.length === 1 || current.hasError) {\r\n if (self.canPan) {\r\n $.fancybox.stop(self.$content);\r\n\r\n self.isPanning = true;\r\n } else {\r\n self.isSwiping = true;\r\n }\r\n\r\n self.$container.addClass(\"fancybox-is-grabbing\");\r\n }\r\n\r\n // Two fingers - zoom image\r\n if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\r\n self.canTap = false;\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n\r\n self.isZooming = true;\r\n\r\n $.fancybox.stop(self.$content);\r\n\r\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\r\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\r\n\r\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\r\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\r\n\r\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\r\n }\r\n };\r\n\r\n Guestures.prototype.onscroll = function (e) {\r\n var self = this;\r\n\r\n self.isScrolling = true;\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n };\r\n\r\n Guestures.prototype.ontouchmove = function (e) {\r\n var self = this;\r\n\r\n // Make sure user has not released over iframe or disabled element\r\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\r\n self.ontouchend(e);\r\n return;\r\n }\r\n\r\n if (self.isScrolling) {\r\n self.canTap = false;\r\n return;\r\n }\r\n\r\n self.newPoints = getPointerXY(e);\r\n\r\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\r\n return;\r\n }\r\n\r\n if (!(self.isSwiping && self.isSwiping === true)) {\r\n e.preventDefault();\r\n }\r\n\r\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\r\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\r\n\r\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\r\n\r\n // Skip false ontouchmove events (Chrome)\r\n if (self.distance > 0) {\r\n if (self.isSwiping) {\r\n self.onSwipe(e);\r\n } else if (self.isPanning) {\r\n self.onPan();\r\n } else if (self.isZooming) {\r\n self.onZoom();\r\n }\r\n }\r\n };\r\n\r\n Guestures.prototype.onSwipe = function (e) {\r\n var self = this,\r\n instance = self.instance,\r\n swiping = self.isSwiping,\r\n left = self.sliderStartPos.left || 0,\r\n angle;\r\n\r\n // If direction is not yet determined\r\n if (swiping === true) {\r\n // We need at least 10px distance to correctly calculate an angle\r\n if (Math.abs(self.distance) > 10) {\r\n self.canTap = false;\r\n\r\n if (instance.group.length < 2 && self.opts.vertical) {\r\n self.isSwiping = \"y\";\r\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\r\n self.isSwiping = \"x\";\r\n } else {\r\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\r\n\r\n self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\r\n }\r\n\r\n if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\r\n self.isScrolling = true;\r\n\r\n return;\r\n }\r\n\r\n instance.isDragging = self.isSwiping;\r\n\r\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n self.startPoints = self.newPoints;\r\n\r\n $.each(instance.slides, function (index, slide) {\r\n var slidePos, stagePos;\r\n\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slidePos = $.fancybox.getTranslate(slide.$slide);\r\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\",\r\n \"transition-duration\": \"\"\r\n })\r\n .removeClass(\"fancybox-animated\")\r\n .removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n if (slide.pos === instance.current.pos) {\r\n self.sliderStartPos.top = slidePos.top - stagePos.top;\r\n self.sliderStartPos.left = slidePos.left - stagePos.left;\r\n }\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: slidePos.top - stagePos.top,\r\n left: slidePos.left - stagePos.left\r\n });\r\n });\r\n\r\n // Stop slideshow\r\n if (instance.SlideShow && instance.SlideShow.isActive) {\r\n instance.SlideShow.stop();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Sticky edges\r\n if (swiping == \"x\") {\r\n if (\r\n self.distanceX > 0 &&\r\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left + Math.pow(self.distanceX, 0.8);\r\n } else if (\r\n self.distanceX < 0 &&\r\n (self.instance.group.length < 2 ||\r\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left - Math.pow(-self.distanceX, 0.8);\r\n } else {\r\n left = left + self.distanceX;\r\n }\r\n }\r\n\r\n self.sliderLastPos = {\r\n top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\r\n left: left\r\n };\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n if (self.sliderLastPos) {\r\n $.each(self.instance.slides, function (index, slide) {\r\n var pos = slide.pos - self.instance.currPos;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: self.sliderLastPos.top,\r\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\r\n });\r\n });\r\n\r\n self.$container.addClass(\"fancybox-is-sliding\");\r\n }\r\n });\r\n };\r\n\r\n Guestures.prototype.onPan = function () {\r\n var self = this;\r\n\r\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\r\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\r\n self.startPoints = self.newPoints;\r\n return;\r\n }\r\n\r\n self.canTap = false;\r\n\r\n self.contentLastPos = self.limitMovement();\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n // Make panning sticky to the edges\r\n Guestures.prototype.limitMovement = function () {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n var distanceX = self.distanceX;\r\n var distanceY = self.distanceY;\r\n\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\r\n\r\n if (currentWidth > canvasWidth) {\r\n newOffsetX = currentOffsetX + distanceX;\r\n } else {\r\n newOffsetX = currentOffsetX;\r\n }\r\n\r\n newOffsetY = currentOffsetY + distanceY;\r\n\r\n // Slow down proportionally to traveled distance\r\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\r\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\r\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n // ->\r\n if (distanceX > 0 && newOffsetX > minTranslateX) {\r\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\r\n }\r\n\r\n // <-\r\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\r\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\r\n }\r\n\r\n // \\/\r\n if (distanceY > 0 && newOffsetY > minTranslateY) {\r\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\r\n }\r\n\r\n // /\\\r\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\r\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n if (newWidth > canvasWidth) {\r\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n } else {\r\n // Center horizontally\r\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\r\n }\r\n\r\n if (newHeight > canvasHeight) {\r\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n } else {\r\n // Center vertically\r\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.onZoom = function () {\r\n var self = this;\r\n\r\n // Calculate current distance between points to get pinch ratio and new width and height\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\r\n\r\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n var newWidth = Math.floor(currentWidth * pinchRatio);\r\n var newHeight = Math.floor(currentHeight * pinchRatio);\r\n\r\n // This is the translation due to pinch-zooming\r\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n // Point between the two touches\r\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\r\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\r\n\r\n // And this is the translation due to translation of the centerpoint\r\n // between the two fingers\r\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n // The new offset is the old/current one plus the total translation\r\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\r\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\r\n\r\n var newPos = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n scaleX: pinchRatio,\r\n scaleY: pinchRatio\r\n };\r\n\r\n self.canTap = false;\r\n\r\n self.newWidth = newWidth;\r\n self.newHeight = newHeight;\r\n\r\n self.contentLastPos = newPos;\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n Guestures.prototype.ontouchend = function (e) {\r\n var self = this;\r\n\r\n var swiping = self.isSwiping;\r\n var panning = self.isPanning;\r\n var zooming = self.isZooming;\r\n var scrolling = self.isScrolling;\r\n\r\n self.endPoints = getPointerXY(e);\r\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\r\n\r\n self.$container.removeClass(\"fancybox-is-grabbing\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n\r\n self.instance.isDragging = false;\r\n\r\n if (self.canTap) {\r\n return self.onTap(e);\r\n }\r\n\r\n self.speed = 100;\r\n\r\n // Speed in px/ms\r\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\r\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\r\n\r\n if (panning) {\r\n self.endPanning();\r\n } else if (zooming) {\r\n self.endZooming();\r\n } else {\r\n self.endSwiping(swiping, scrolling);\r\n }\r\n\r\n return;\r\n };\r\n\r\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\r\n var self = this,\r\n ret = false,\r\n len = self.instance.group.length,\r\n distanceX = Math.abs(self.distanceX),\r\n canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\r\n speedX = 300;\r\n\r\n self.sliderLastPos = null;\r\n\r\n // Close if swiped vertically / navigate if horizontally\r\n if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\r\n // Continue vertical movement\r\n $.fancybox.animate(\r\n self.instance.current.$slide, {\r\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\r\n opacity: 0\r\n },\r\n 200\r\n );\r\n ret = self.instance.close(true, 250);\r\n } else if (canAdvance && self.distanceX > 0) {\r\n ret = self.instance.previous(speedX);\r\n } else if (canAdvance && self.distanceX < 0) {\r\n ret = self.instance.next(speedX);\r\n }\r\n\r\n if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\r\n self.instance.centerSlide(200);\r\n }\r\n\r\n self.$container.removeClass(\"fancybox-is-sliding\");\r\n };\r\n\r\n // Limit panning from edges\r\n // ========================\r\n Guestures.prototype.endPanning = function () {\r\n var self = this,\r\n newOffsetX,\r\n newOffsetY,\r\n newPos;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n if (self.opts.momentum === false || self.dMs > 350) {\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n } else {\r\n // Continue movement\r\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\r\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\r\n }\r\n\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\r\n\r\n newPos.width = self.contentStartPos.width;\r\n newPos.height = self.contentStartPos.height;\r\n\r\n $.fancybox.animate(self.$content, newPos, 366);\r\n };\r\n\r\n Guestures.prototype.endZooming = function () {\r\n var self = this;\r\n\r\n var current = self.instance.current;\r\n\r\n var newOffsetX, newOffsetY, newPos, reset;\r\n\r\n var newWidth = self.newWidth;\r\n var newHeight = self.newHeight;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n\r\n reset = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n width: newWidth,\r\n height: newHeight,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n $.fancybox.setTranslate(self.$content, reset);\r\n\r\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\r\n self.instance.scaleToFit(150);\r\n } else if (newWidth > current.width || newHeight > current.height) {\r\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\r\n } else {\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\r\n\r\n $.fancybox.animate(self.$content, newPos, 150);\r\n }\r\n };\r\n\r\n Guestures.prototype.onTap = function (e) {\r\n var self = this;\r\n var $target = $(e.target);\r\n\r\n var instance = self.instance;\r\n var current = instance.current;\r\n\r\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\r\n\r\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\r\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\r\n\r\n var where;\r\n\r\n var process = function (prefix) {\r\n var action = current.opts[prefix];\r\n\r\n if ($.isFunction(action)) {\r\n action = action.apply(instance, [current, e]);\r\n }\r\n\r\n if (!action) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case \"close\":\r\n instance.close(self.startEvent);\r\n\r\n break;\r\n\r\n case \"toggleControls\":\r\n instance.toggleControls();\r\n\r\n break;\r\n\r\n case \"next\":\r\n instance.next();\r\n\r\n break;\r\n\r\n case \"nextOrClose\":\r\n if (instance.group.length > 1) {\r\n instance.next();\r\n } else {\r\n instance.close(self.startEvent);\r\n }\r\n\r\n break;\r\n\r\n case \"zoom\":\r\n if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\r\n if (instance.canPan()) {\r\n instance.scaleToFit();\r\n } else if (instance.isScaledDown()) {\r\n instance.scaleToActual(tapX, tapY);\r\n } else if (instance.group.length < 2) {\r\n instance.close(self.startEvent);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Skip if clicked on the scrollbar\r\n if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Check where is clicked\r\n if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\r\n where = \"Outside\";\r\n } else if ($target.is(\".fancybox-slide\")) {\r\n where = \"Slide\";\r\n } else if (\r\n instance.current.$content &&\r\n instance.current.$content\r\n .find($target)\r\n .addBack()\r\n .filter($target).length\r\n ) {\r\n where = \"Content\";\r\n } else {\r\n return;\r\n }\r\n\r\n // Check if this is a double tap\r\n if (self.tapped) {\r\n // Stop previously created single tap\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n\r\n // Skip if distance between taps is too big\r\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\r\n return this;\r\n }\r\n\r\n // OK, now we assume that this is a double-tap\r\n process(\"dblclick\" + where);\r\n } else {\r\n // Single tap will be processed if user has not clicked second time within 300ms\r\n // or there is no need to wait for double-tap\r\n self.tapX = tapX;\r\n self.tapY = tapY;\r\n\r\n if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\r\n self.tapped = setTimeout(function () {\r\n self.tapped = null;\r\n\r\n if (!instance.isAnimating) {\r\n process(\"click\" + where);\r\n }\r\n }, 500);\r\n } else {\r\n process(\"click\" + where);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n $(document)\r\n .on(\"onActivate.fb\", function (e, instance) {\r\n if (instance && !instance.Guestures) {\r\n instance.Guestures = new Guestures(instance);\r\n }\r\n })\r\n .on(\"beforeClose.fb\", function (e, instance) {\r\n if (instance && instance.Guestures) {\r\n instance.Guestures.destroy();\r\n }\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n slideShow: '\"\r\n },\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000,\r\n progress: true\r\n }\r\n });\r\n\r\n var SlideShow = function (instance) {\r\n this.instance = instance;\r\n this.init();\r\n };\r\n\r\n $.extend(SlideShow.prototype, {\r\n timer: null,\r\n isActive: false,\r\n $button: null,\r\n\r\n init: function () {\r\n var self = this,\r\n instance = self.instance,\r\n opts = instance.group[instance.currIndex].opts.slideShow;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n if (instance.group.length < 2 || !opts) {\r\n self.$button.hide();\r\n } else if (opts.progress) {\r\n self.$progress = $('
        ').appendTo(instance.$refs.inner);\r\n }\r\n },\r\n\r\n set: function (force) {\r\n var self = this,\r\n instance = self.instance,\r\n current = instance.current;\r\n\r\n // Check if reached last element\r\n if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\r\n if (self.isActive && current.contentType !== \"video\") {\r\n if (self.$progress) {\r\n $.fancybox.animate(self.$progress.show(), {\r\n scaleX: 1\r\n }, current.opts.slideShow.speed);\r\n }\r\n\r\n self.timer = setTimeout(function () {\r\n if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\r\n instance.jumpTo(0);\r\n } else {\r\n instance.next();\r\n }\r\n }, current.opts.slideShow.speed);\r\n }\r\n } else {\r\n self.stop();\r\n instance.idleSecondsCounter = 0;\r\n instance.showControls();\r\n }\r\n },\r\n\r\n clear: function () {\r\n var self = this;\r\n\r\n clearTimeout(self.timer);\r\n\r\n self.timer = null;\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n start: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n if (current) {\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\r\n .removeClass(\"fancybox-button--play\")\r\n .addClass(\"fancybox-button--pause\");\r\n\r\n self.isActive = true;\r\n\r\n if (current.isComplete) {\r\n self.set(true);\r\n }\r\n\r\n self.instance.trigger(\"onSlideShowChange\", true);\r\n }\r\n },\r\n\r\n stop: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n self.clear();\r\n\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\r\n .removeClass(\"fancybox-button--pause\")\r\n .addClass(\"fancybox-button--play\");\r\n\r\n self.isActive = false;\r\n\r\n self.instance.trigger(\"onSlideShowChange\", false);\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n toggle: function () {\r\n var self = this;\r\n\r\n if (self.isActive) {\r\n self.stop();\r\n } else {\r\n self.start();\r\n }\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n if (instance && !instance.SlideShow) {\r\n instance.SlideShow = new SlideShow(instance);\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (firstRun) {\r\n if (SlideShow && current.opts.slideShow.autoStart) {\r\n SlideShow.start();\r\n }\r\n } else if (SlideShow && SlideShow.isActive) {\r\n SlideShow.clear();\r\n }\r\n },\r\n\r\n \"afterShow.fb\": function (e, instance, current) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n SlideShow.set();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n // \"P\" or Spacebar\r\n if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\"button,a,input\")) {\r\n keypress.preventDefault();\r\n\r\n SlideShow.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb onDeactivate.fb\": function (e, instance) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow) {\r\n SlideShow.stop();\r\n }\r\n }\r\n });\r\n\r\n // Page Visibility API to pause slideshow when window is not active\r\n $(document).on(\"visibilitychange\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n if (document.hidden) {\r\n SlideShow.clear();\r\n } else {\r\n SlideShow.set();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n // Collection of methods supported by user browser\r\n var fn = (function () {\r\n var fnMap = [\r\n [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\r\n // new WebKit\r\n [\r\n \"webkitRequestFullscreen\",\r\n \"webkitExitFullscreen\",\r\n \"webkitFullscreenElement\",\r\n \"webkitFullscreenEnabled\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n // old WebKit (Safari 5.1)\r\n [\r\n \"webkitRequestFullScreen\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitCurrentFullScreenElement\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n [\r\n \"mozRequestFullScreen\",\r\n \"mozCancelFullScreen\",\r\n \"mozFullScreenElement\",\r\n \"mozFullScreenEnabled\",\r\n \"mozfullscreenchange\",\r\n \"mozfullscreenerror\"\r\n ],\r\n [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"]\r\n ];\r\n\r\n var ret = {};\r\n\r\n for (var i = 0; i < fnMap.length; i++) {\r\n var val = fnMap[i];\r\n\r\n if (val && val[1] in document) {\r\n for (var j = 0; j < val.length; j++) {\r\n ret[fnMap[0][j]] = val[j];\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n return false;\r\n })();\r\n\r\n if (fn) {\r\n var FullScreen = {\r\n request: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\r\n },\r\n exit: function () {\r\n document[fn.exitFullscreen]();\r\n },\r\n toggle: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n if (this.isFullscreen()) {\r\n this.exit();\r\n } else {\r\n this.request(elem);\r\n }\r\n },\r\n isFullscreen: function () {\r\n return Boolean(document[fn.fullscreenElement]);\r\n },\r\n enabled: function () {\r\n return Boolean(document[fn.fullscreenEnabled]);\r\n }\r\n };\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n fullScreen: '\"\r\n },\r\n fullScreen: {\r\n autoStart: false\r\n }\r\n });\r\n\r\n $(document).on(fn.fullscreenchange, function () {\r\n var isFullscreen = FullScreen.isFullscreen(),\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n // If image is zooming, then force to stop and reposition properly\r\n if (instance.current && instance.current.type === \"image\" && instance.isAnimating) {\r\n instance.isAnimating = false;\r\n\r\n instance.update(true, true, 0);\r\n\r\n if (!instance.isComplete) {\r\n instance.complete();\r\n }\r\n }\r\n\r\n instance.trigger(\"onFullscreenChange\", isFullscreen);\r\n\r\n instance.$refs.container.toggleClass(\"fancybox-is-fullscreen\", isFullscreen);\r\n\r\n instance.$refs.toolbar\r\n .find(\"[data-fancybox-fullscreen]\")\r\n .toggleClass(\"fancybox-button--fsenter\", !isFullscreen)\r\n .toggleClass(\"fancybox-button--fsexit\", isFullscreen);\r\n }\r\n });\r\n }\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var $container;\r\n\r\n if (!fn) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();\r\n\r\n return;\r\n }\r\n\r\n if (instance && instance.group[instance.currIndex].opts.fullScreen) {\r\n $container = instance.$refs.container;\r\n\r\n $container.on(\"click.fb-fullscreen\", \"[data-fancybox-fullscreen]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n FullScreen.toggle();\r\n });\r\n\r\n if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\r\n FullScreen.request();\r\n }\r\n\r\n // Expose API\r\n instance.FullScreen = FullScreen;\r\n } else if (instance) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n // \"F\"\r\n if (instance && instance.FullScreen && keycode === 70) {\r\n keypress.preventDefault();\r\n\r\n instance.FullScreen.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n if (instance && instance.FullScreen && instance.$refs.container.hasClass(\"fancybox-is-fullscreen\")) {\r\n FullScreen.exit();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var CLASS = \"fancybox-thumbs\",\r\n CLASS_ACTIVE = CLASS + \"-active\";\r\n\r\n // Make sure there are default values\r\n $.fancybox.defaults = $.extend(\r\n true, {\r\n btnTpl: {\r\n thumbs: '\"\r\n },\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n }\r\n },\r\n $.fancybox.defaults\r\n );\r\n\r\n var FancyThumbs = function (instance) {\r\n this.init(instance);\r\n };\r\n\r\n $.extend(FancyThumbs.prototype, {\r\n $button: null,\r\n $grid: null,\r\n $list: null,\r\n isVisible: false,\r\n isActive: false,\r\n\r\n init: function (instance) {\r\n var self = this,\r\n group = instance.group,\r\n enabled = 0;\r\n\r\n self.instance = instance;\r\n self.opts = group[instance.currIndex].opts.thumbs;\r\n\r\n instance.Thumbs = self;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-thumbs]\");\r\n\r\n // Enable thumbs if at least two group items have thumbnails\r\n for (var i = 0, len = group.length; i < len; i++) {\r\n if (group[i].thumb) {\r\n enabled++;\r\n }\r\n\r\n if (enabled > 1) {\r\n break;\r\n }\r\n }\r\n\r\n if (enabled > 1 && !!self.opts) {\r\n self.$button.removeAttr(\"style\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n self.isActive = true;\r\n } else {\r\n self.$button.hide();\r\n }\r\n },\r\n\r\n create: function () {\r\n var self = this,\r\n instance = self.instance,\r\n parentEl = self.opts.parentEl,\r\n list = [],\r\n src;\r\n\r\n if (!self.$grid) {\r\n // Create main element\r\n self.$grid = $('
        ').appendTo(\r\n instance.$refs.container\r\n .find(parentEl)\r\n .addBack()\r\n .filter(parentEl)\r\n );\r\n\r\n // Add \"click\" event that performs gallery navigation\r\n self.$grid.on(\"click\", \"a\", function () {\r\n instance.jumpTo($(this).attr(\"data-index\"));\r\n });\r\n }\r\n\r\n // Build the list\r\n if (!self.$list) {\r\n self.$list = $('
        ').appendTo(self.$grid);\r\n }\r\n\r\n $.each(instance.group, function (i, item) {\r\n src = item.thumb;\r\n\r\n if (!src && item.type === \"image\") {\r\n src = item.src;\r\n }\r\n\r\n list.push(\r\n '\"\r\n );\r\n });\r\n\r\n self.$list[0].innerHTML = list.join(\"\");\r\n\r\n if (self.opts.axis === \"x\") {\r\n // Set fixed width for list element to enable horizontal scrolling\r\n self.$list.width(\r\n parseInt(self.$grid.css(\"padding-right\"), 10) +\r\n instance.group.length *\r\n self.$list\r\n .children()\r\n .eq(0)\r\n .outerWidth(true)\r\n );\r\n }\r\n },\r\n\r\n focus: function (duration) {\r\n var self = this,\r\n $list = self.$list,\r\n $grid = self.$grid,\r\n thumb,\r\n thumbPos;\r\n\r\n if (!self.instance.current) {\r\n return;\r\n }\r\n\r\n thumb = $list\r\n .children()\r\n .removeClass(CLASS_ACTIVE)\r\n .filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n .addClass(CLASS_ACTIVE);\r\n\r\n thumbPos = thumb.position();\r\n\r\n // Check if need to scroll to make current thumb visible\r\n if (self.opts.axis === \"y\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\r\n $list.stop().animate({\r\n scrollTop: $list.scrollTop() + thumbPos.top\r\n },\r\n duration\r\n );\r\n } else if (\r\n self.opts.axis === \"x\" &&\r\n (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\r\n ) {\r\n $list\r\n .parent()\r\n .stop()\r\n .animate({\r\n scrollLeft: thumbPos.left\r\n },\r\n duration\r\n );\r\n }\r\n },\r\n\r\n update: function () {\r\n var that = this;\r\n that.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\", this.isVisible);\r\n\r\n if (that.isVisible) {\r\n if (!that.$grid) {\r\n that.create();\r\n }\r\n\r\n that.instance.trigger(\"onThumbsShow\");\r\n\r\n that.focus(0);\r\n } else if (that.$grid) {\r\n that.instance.trigger(\"onThumbsHide\");\r\n }\r\n\r\n // Update content position\r\n that.instance.update();\r\n },\r\n\r\n hide: function () {\r\n this.isVisible = false;\r\n this.update();\r\n },\r\n\r\n show: function () {\r\n this.isVisible = true;\r\n this.update();\r\n },\r\n\r\n toggle: function () {\r\n this.isVisible = !this.isVisible;\r\n this.update();\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var Thumbs;\r\n\r\n if (instance && !instance.Thumbs) {\r\n Thumbs = new FancyThumbs(instance);\r\n\r\n if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\r\n Thumbs.show();\r\n }\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, item, firstRun) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible) {\r\n Thumbs.focus(firstRun ? 0 : 250);\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n // \"G\"\r\n if (Thumbs && Thumbs.isActive && keycode === 71) {\r\n keypress.preventDefault();\r\n\r\n Thumbs.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\r\n Thumbs.$grid.hide();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n share: '\"\r\n },\r\n share: {\r\n url: function (instance, item) {\r\n return (\r\n (!instance.currentHash && !(item.type === \"inline\" || item.type === \"html\") ? item.origSrc || item.src : false) || window.location\r\n );\r\n },\r\n tpl: '
        ' +\r\n \"

        {{SHARE}}

        \" +\r\n \"

        \" +\r\n '' +\r\n '' +\r\n \"Facebook\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Twitter\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Pinterest\" +\r\n \"\" +\r\n \"

        \" +\r\n '

        ' +\r\n \"
        \"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);"],"names":["window","document","$","undefined","console","info","stuff","fn","fancybox","div","buttonStr","focusStr","$pressed","defaults","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","data","iframe","tpl","css","attr","scrolling","video","format","autoStart","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","hideScrollbar","autoFocus","backFocus","trapFocus","fullScreen","touch","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","event","type","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","$W","$D","called","requestAFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","transitionEnd","t","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","length","offsetHeight","mergeOpts","opts1","opts2","rez","extend","each","key","value","isArray","FancyBox","content","opts","index","self","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","prototype","$container","firstItemOpts","addClass","getInstance","body","scrollHeight","innerHeight","append","innerWidth","documentElement","clientWidth","translate","replace","appendTo","$refs","container","forEach","item","find","trigger","activate","jumpTo","obj","str","arr","match","n","items","makeArray","i","$item","found","src","srcParts","options","$orig","contentType","charAt","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","Object","keys","updateControls","Thumbs","isActive","create","focus","addEvents","removeEvents","on","e","stopPropagation","preventDefault","previous","next","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","target","is","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","off","clearInterval","duration","pos","isMoved","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","$slide","loadSlide","getTranslate","slide","stop","isComplete","removeClass","left","width","className","join","leftPos","setTranslate","top","animate","transform","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","minRatio","aspectRatio","parseFloat","Math","min","floor","ratio","adjustCaption","adjustLayout","add","navigation","toggleClass","get","clientHeight","centerSlide","siblings","parent","children","hasClass","abs","nextWidth","nextHeight","canPan","isZoomable","Guestures","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","url","success","textStatus","error","jqXHR","one","abort","ghost","$img","$image","checkSrcset","onerror","remove","$ghost","onload","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","map","ret","trim","substring","postfix","sort","a","b","j","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","round","max","hideLoading","readyState","imgWidth","imgHeight","$iframe","Date","getTime","isReady","$body","frameWidth","frameHeight","contents","ignore","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","hasOwnProperty","parents","$placeholder","insertAfter","html","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","button","$clone","preventOverlap","$caption","captionH","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","thumbPos","btw","brw","bbw","blw","elem","elemCenter","ownerDocument","getBoundingClientRect","offsetWidth","elementFromPoint","inViewport","Document","exitFullscreen","webkitExitFullscreen","scrollTop","scrollLeft","prev","focusableItems","focusedItemIndex","focusableStr","activeElement","instance","isVisible","d","domRect","done","cleanUp","$focus","scrollX","scrollY","name","args","Array","slice","call","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","open","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","position","to","leaveAnimationName","from","propertyName","callCallback","selector","_run","$target","isDefaultPrevented","currentTarget","jQuery","youtube","matcher","params","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","indexOf","gmap_search","param","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","p1","s","origSrc","contentSource","VideoAPILoader","class","loading","loaded","load","vendor","script","_this","onYouTubeIframeAPIReady","appendChild","YT","Player","events","onStateChange","Vimeo","getPointerXY","result","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","ontouchstart","isTouchDevice","offset","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","addEventListener","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","removeEventListener","ontouchmove","newPoints","onSwipe","onPan","onZoom","ontouchend","angle","swiping","sliderLastPos","atan2","PI","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","velocityX","velocityY","endPanning","endZooming","endSwiping","len","canAdvance","reset","where","tapX","tapY","process","prefix","action","addBack","progress","timer","$button","toggle","$progress","inner","set","force","clear","removeAttr","keypress","hidden","fnMap","val","FullScreen","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","CLASS","CLASS_ACTIVE","FancyThumbs","$grid","$list","list","innerHTML","that","share","currentHash","location","string","entityMap","encodeURIComponent","String","text","shareInstance","shareCurrent","click","href","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","history","title","pathname","search","hasCreatedHistory","back","replaceState","fb","reverse","tmp","prevTime","currTime","deltaY","deltaX","wheelDelta","detail"],"sourceRoot":""} \ No newline at end of file diff --git a/js/249.js b/js/249.js deleted file mode 100644 index 48fbac60..00000000 --- a/js/249.js +++ /dev/null @@ -1,2 +0,0 @@ -(globalThis.webpackChunksakurairo_scripts=globalThis.webpackChunksakurairo_scripts||[]).push([[249],{983:e=>{e.exports=function(e){var t,n=[].forEach,l=[].some,o=document.body,s=!0,i=" ";function r(t,l){var o=l.appendChild(function(t){var l=document.createElement("li"),o=document.createElement("a");e.listItemClass&&l.setAttribute("class",e.listItemClass);e.onClick&&(o.onclick=e.onClick);e.includeTitleTags&&o.setAttribute("title",t.textContent);e.includeHtml&&t.childNodes.length?n.call(t.childNodes,(function(e){o.appendChild(e.cloneNode(!0))})):o.textContent=t.textContent;return o.setAttribute("href",e.basePath+"#"+t.id),o.setAttribute("class",e.linkClass+i+"node-name--"+t.nodeName+i+e.extraLinkClasses),l.appendChild(o),l}(t));if(t.children.length){var s=a(t.isCollapsed);t.children.forEach((function(e){r(e,s)})),o.appendChild(s)}}function a(t){var n=e.orderedList?"ol":"ul",l=document.createElement(n),o=e.listClass+i+e.extraListClasses;return t&&(o=(o=o+i+e.collapsibleClass)+i+e.isCollapsedClass),l.setAttribute("class",o),l}function c(t){var n=0;return null!==t&&(n=t.offsetTop,e.hasInnerContainers&&(n+=c(t.offsetParent))),n}function d(t){return t&&-1!==t.className.indexOf(e.collapsibleClass)&&-1!==t.className.indexOf(e.isCollapsedClass)?(t.className=t.className.split(i+e.isCollapsedClass).join(""),d(t.parentNode.parentNode)):t}return{enableTocAnimation:function(){s=!0},disableTocAnimation:function(t){var n=t.target||t.srcElement;"string"==typeof n.className&&-1!==n.className.indexOf(e.linkClass)&&(s=!1)},render:function(e,n){var l=a(!1);if(n.forEach((function(e){r(e,l)})),null!==(t=e||t))return t.firstChild&&t.removeChild(t.firstChild),0===n.length?t:t.appendChild(l)},updateToc:function(r){var a;a=e.scrollContainer&&document.querySelector(e.scrollContainer)?document.querySelector(e.scrollContainer).scrollTop:document.documentElement.scrollTop||o.scrollTop,e.positionFixedSelector&&function(){var n;n=e.scrollContainer&&document.querySelector(e.scrollContainer)?document.querySelector(e.scrollContainer).scrollTop:document.documentElement.scrollTop||o.scrollTop;var l=document.querySelector(e.positionFixedSelector);"auto"===e.fixedSidebarOffset&&(e.fixedSidebarOffset=t.offsetTop),n>e.fixedSidebarOffset?-1===l.className.indexOf(e.positionFixedClass)&&(l.className+=i+e.positionFixedClass):l.className=l.className.split(i+e.positionFixedClass).join("")}();var u,f=r;if(s&&null!==t&&f.length>0){l.call(f,(function(t,n){return c(t)>a+e.headingsOffset+10?(u=f[0===n?n:n-1],!0):n===f.length-1?(u=f[f.length-1],!0):void 0}));var m=t.querySelector("."+e.activeLinkClass),h=t.querySelector("."+e.linkClass+".node-name--"+u.nodeName+'[href="'+e.basePath+"#"+u.id.replace(/([ #;&,.+*~':"!^$[\]()=>|/\\@])/g,"\\$1")+'"]');if(m===h)return;var p=t.querySelectorAll("."+e.linkClass);n.call(p,(function(t){t.className=t.className.split(i+e.activeLinkClass).join("")}));var C=t.querySelectorAll("."+e.listItemClass);n.call(C,(function(t){t.className=t.className.split(i+e.activeListItemClass).join("")})),h&&-1===h.className.indexOf(e.activeLinkClass)&&(h.className+=i+e.activeLinkClass);var g=h&&h.parentNode;g&&-1===g.className.indexOf(e.activeListItemClass)&&(g.className+=i+e.activeListItemClass);var v=t.querySelectorAll("."+e.listClass+"."+e.collapsibleClass);n.call(v,(function(t){-1===t.className.indexOf(e.isCollapsedClass)&&(t.className+=i+e.isCollapsedClass)})),h&&h.nextSibling&&-1!==h.nextSibling.className.indexOf(e.isCollapsedClass)&&(h.nextSibling.className=h.nextSibling.className.split(i+e.isCollapsedClass).join("")),d(h&&h.parentNode.parentNode)}}}}},7079:e=>{e.exports={tocSelector:".js-toc",contentSelector:".js-toc-content",headingSelector:"h1, h2, h3",ignoreSelector:".js-toc-ignore",hasInnerContainers:!1,linkClass:"toc-link",extraLinkClasses:"",activeLinkClass:"is-active-link",listClass:"toc-list",extraListClasses:"",isCollapsedClass:"is-collapsed",collapsibleClass:"is-collapsible",listItemClass:"toc-list-item",activeListItemClass:"is-active-li",collapseDepth:0,scrollSmooth:!0,scrollSmoothDuration:420,scrollSmoothOffset:0,scrollEndCallback:function(e){},headingsOffset:1,throttleTimeout:50,positionFixedSelector:null,positionFixedClass:"is-position-fixed",fixedSidebarOffset:"auto",includeHtml:!1,includeTitleTags:!1,onClick:function(e){},orderedList:!0,scrollContainer:null,skipRendering:!1,headingLabelCallback:!1,ignoreHiddenElements:!1,headingObjectCallback:null,basePath:"",disableTocScrollSync:!1,tocScrollOffset:0}},249:(e,t,n)=>{var l,o,s,i;i=void 0!==n.g?n.g:window||n.g,o=[],l=function(e){var t,l,o,s=n(7079),i={},r={},a=n(983),c=n(34),d=n(7158),u=!!(e&&e.document&&e.document.querySelector&&e.addEventListener);if("undefined"!=typeof window||u){var f=Object.prototype.hasOwnProperty;return r.destroy=function(){var e=C(i);null!==e&&(i.skipRendering||e&&(e.innerHTML=""),i.scrollContainer&&document.querySelector(i.scrollContainer)?(document.querySelector(i.scrollContainer).removeEventListener("scroll",this._scrollListener,!1),document.querySelector(i.scrollContainer).removeEventListener("resize",this._scrollListener,!1),t&&document.querySelector(i.scrollContainer).removeEventListener("click",this._clickListener,!1)):(document.removeEventListener("scroll",this._scrollListener,!1),document.removeEventListener("resize",this._scrollListener,!1),t&&document.removeEventListener("click",this._clickListener,!1)))},r.init=function(e){if(u){i=m(s,e||{}),this.options=i,this.state={},i.scrollSmooth&&(i.duration=i.scrollSmoothDuration,i.offset=i.scrollSmoothOffset,r.scrollSmooth=n(6208).initSmoothScrolling(i)),t=a(i),l=c(i),this._buildHtml=t,this._parseContent=l,this._headingsArray=o,r.destroy();var f=p(i);if(null!==f){var g=C(i);if(null!==g&&null!==(o=l.selectHeadings(f,i.headingSelector))){var v=l.nestHeadingsArray(o).nest;i.skipRendering||t.render(g,v),this._scrollListener=h((function(e){t.updateToc(o),!i.disableTocScrollSync&&d(i);var n=e&&e.target&&e.target.scrollingElement&&0===e.target.scrollingElement.scrollTop;(e&&(0===e.eventPhase||null===e.currentTarget)||n)&&(t.updateToc(o),i.scrollEndCallback&&i.scrollEndCallback(e))}),i.throttleTimeout),this._scrollListener(),i.scrollContainer&&document.querySelector(i.scrollContainer)?(document.querySelector(i.scrollContainer).addEventListener("scroll",this._scrollListener,!1),document.querySelector(i.scrollContainer).addEventListener("resize",this._scrollListener,!1)):(document.addEventListener("scroll",this._scrollListener,!1),document.addEventListener("resize",this._scrollListener,!1));var S=null;return this._clickListener=h((function(e){i.scrollSmooth&&t.disableTocAnimation(e),t.updateToc(o),S&&clearTimeout(S),S=setTimeout((function(){t.enableTocAnimation()}),i.scrollSmoothDuration)}),i.throttleTimeout),i.scrollContainer&&document.querySelector(i.scrollContainer)?document.querySelector(i.scrollContainer).addEventListener("click",this._clickListener,!1):document.addEventListener("click",this._clickListener,!1),this}}}},r.refresh=function(e){r.destroy(),r.init(e||this.options)},e.tocbot=r,r}function m(){for(var e={},t=0;t{e.exports=function(e){var t=[].reduce;function n(e){return e[e.length-1]}function l(e){return+e.nodeName.toUpperCase().replace("H","")}function o(t){if(!(t instanceof window.HTMLElement))return t;if(e.ignoreHiddenElements&&(!t.offsetHeight||!t.offsetParent))return null;const n=t.getAttribute("data-heading-label")||(e.headingLabelCallback?String(e.headingLabelCallback(t.textContent)):t.textContent.trim());var o={id:t.id,children:[],nodeName:t.nodeName,headingLevel:l(t),textContent:n};return e.includeHtml&&(o.childNodes=t.childNodes),e.headingObjectCallback?e.headingObjectCallback(o,t):o}return{nestHeadingsArray:function(l){return t.call(l,(function(t,l){var s=o(l);return s&&function(t,l){for(var s=o(t),i=s.headingLevel,r=l,a=n(r),c=i-(a?a.headingLevel:0);c>0&&(!(a=n(r))||i!==a.headingLevel);)a&&void 0!==a.children&&(r=a.children),c--;i>=e.collapseDepth&&(s.isCollapsed=!0),r.push(s)}(s,t.nest),t}),{nest:[]})},selectHeadings:function(t,n){var l=n;e.ignoreSelector&&(l=n.split(",").map((function(t){return t.trim()+":not("+e.ignoreSelector+")"})));try{return t.querySelectorAll(l)}catch(e){return console.warn("Headers not found with selector: "+l),null}}}}},6208:(e,t)=>{t.initSmoothScrolling=function(e){var t=e.duration,n=e.offset,l=location.hash?o(location.href):location.href;function o(e){return e.slice(0,e.lastIndexOf("#"))}document.body.addEventListener("click",(function(s){var i;"a"!==(i=s.target).tagName.toLowerCase()||!(i.hash.length>0||"#"===i.href.charAt(i.href.length-1))||o(i.href)!==l&&o(i.href)+"#"!==l||s.target.className.indexOf("no-smooth-scroll")>-1||"#"===s.target.href.charAt(s.target.href.length-2)&&"!"===s.target.href.charAt(s.target.href.length-1)||-1===s.target.className.indexOf(e.linkClass)||function(e,t){var n,l,o=window.pageYOffset,s={duration:t.duration,offset:t.offset||0,callback:t.callback,easing:t.easing||u},i=document.querySelector('[id="'+decodeURI(e).split("#").join("")+'"]')||document.querySelector('[id="'+e.split("#").join("")+'"]'),r="string"==typeof e?s.offset+(e?i&&i.getBoundingClientRect().top||0:-(document.documentElement.scrollTop||document.body.scrollTop)):e,a="function"==typeof s.duration?s.duration(r):s.duration;function c(e){l=e-n,window.scrollTo(0,s.easing(l,o,r,a)),l{e.exports=function(e){var t=e.tocElement||document.querySelector(e.tocSelector);if(t&&t.scrollHeight>t.clientHeight){var n=t.querySelector("."+e.activeListItemClass);n&&(t.scrollTop=n.offsetTop-e.tocScrollOffset)}}}}]); -//# sourceMappingURL=249.js.map \ No newline at end of file diff --git a/js/249.js.map b/js/249.js.map deleted file mode 100644 index 42378ff6..00000000 --- a/js/249.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"249.js","mappings":"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","sources":["webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.0/node_modules/tocbot/src/js/build-html.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.0/node_modules/tocbot/src/js/default-options.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.0/node_modules/tocbot/src/js/index.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.0/node_modules/tocbot/src/js/parse-content.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.0/node_modules/tocbot/src/js/scroll-smooth/index.js","webpack://sakurairo-scripts/./node_modules/.pnpm/tocbot@4.21.0/node_modules/tocbot/src/js/update-toc-scroll.js"],"sourcesContent":["/* eslint no-var: off */\n\n/**\n * This file is responsible for building the DOM and updating DOM state.\n *\n * @author Tim Scanlin\n */\n\nmodule.exports = function (options) {\n var forEach = [].forEach\n var some = [].some\n var body = document.body\n var tocElement\n var currentlyHighlighting = true\n var SPACE_CHAR = ' '\n\n /**\n * Create link and list elements.\n * @param {Object} d\n * @param {HTMLElement} container\n * @return {HTMLElement}\n */\n function createEl (d, container) {\n var link = container.appendChild(createLink(d))\n if (d.children.length) {\n var list = createList(d.isCollapsed)\n d.children.forEach(function (child) {\n createEl(child, list)\n })\n link.appendChild(list)\n }\n }\n\n /**\n * Render nested heading array data into a given element.\n * @param {HTMLElement} parent Optional. If provided updates the {@see tocElement} to match.\n * @param {Array} data\n * @return {HTMLElement}\n */\n function render (parent, data) {\n var collapsed = false\n var container = createList(collapsed)\n\n data.forEach(function (d) {\n createEl(d, container)\n })\n\n // Return if no TOC element is provided or known.\n tocElement = parent || tocElement\n if (tocElement === null) {\n return\n }\n\n // Remove existing child if it exists.\n if (tocElement.firstChild) {\n tocElement.removeChild(tocElement.firstChild)\n }\n\n // Just return the parent and don't append the list if no links are found.\n if (data.length === 0) {\n return tocElement\n }\n\n // Append the Elements that have been created\n return tocElement.appendChild(container)\n }\n\n /**\n * Create link element.\n * @param {Object} data\n * @return {HTMLElement}\n */\n function createLink (data) {\n var item = document.createElement('li')\n var a = document.createElement('a')\n if (options.listItemClass) {\n item.setAttribute('class', options.listItemClass)\n }\n\n if (options.onClick) {\n a.onclick = options.onClick\n }\n\n if (options.includeTitleTags) {\n a.setAttribute('title', data.textContent)\n }\n\n if (options.includeHtml && data.childNodes.length) {\n forEach.call(data.childNodes, function (node) {\n a.appendChild(node.cloneNode(true))\n })\n } else {\n // Default behavior.\n a.textContent = data.textContent\n }\n a.setAttribute('href', options.basePath + '#' + data.id)\n a.setAttribute('class', options.linkClass +\n SPACE_CHAR + 'node-name--' + data.nodeName +\n SPACE_CHAR + options.extraLinkClasses)\n item.appendChild(a)\n return item\n }\n\n /**\n * Create list element.\n * @param {Boolean} isCollapsed\n * @return {HTMLElement}\n */\n function createList (isCollapsed) {\n var listElement = (options.orderedList) ? 'ol' : 'ul'\n var list = document.createElement(listElement)\n var classes = options.listClass + SPACE_CHAR + options.extraListClasses\n if (isCollapsed) {\n // No plus/equals here fixes compilcation issue.\n classes = classes + SPACE_CHAR + options.collapsibleClass\n classes = classes + SPACE_CHAR + options.isCollapsedClass\n }\n list.setAttribute('class', classes)\n return list\n }\n\n /**\n * Update fixed sidebar class.\n * @return {HTMLElement}\n */\n function updateFixedSidebarClass () {\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n var top\n top = document.querySelector(options.scrollContainer).scrollTop\n } else {\n top = document.documentElement.scrollTop || body.scrollTop\n }\n var posFixedEl = document.querySelector(options.positionFixedSelector)\n\n if (options.fixedSidebarOffset === 'auto') {\n options.fixedSidebarOffset = tocElement.offsetTop\n }\n\n if (top > options.fixedSidebarOffset) {\n if (posFixedEl.className.indexOf(options.positionFixedClass) === -1) {\n posFixedEl.className += SPACE_CHAR + options.positionFixedClass\n }\n } else {\n posFixedEl.className = posFixedEl.className.split(SPACE_CHAR + options.positionFixedClass).join('')\n }\n }\n\n /**\n * Get top position of heading\n * @param {HTMLElement} obj\n * @return {int} position\n */\n function getHeadingTopPos (obj) {\n var position = 0\n if (obj !== null) {\n position = obj.offsetTop\n if (options.hasInnerContainers) { position += getHeadingTopPos(obj.offsetParent) }\n }\n return position\n }\n\n /**\n * Update TOC highlighting and collapsed groupings.\n */\n function updateToc (headingsArray) {\n // If a fixed content container was set\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n var top\n top = document.querySelector(options.scrollContainer).scrollTop\n } else {\n top = document.documentElement.scrollTop || body.scrollTop\n }\n\n // Add fixed class at offset\n if (options.positionFixedSelector) {\n updateFixedSidebarClass()\n }\n\n // Get the top most heading currently visible on the page so we know what to highlight.\n var headings = headingsArray\n var topHeader\n // Using some instead of each so that we can escape early.\n if (currentlyHighlighting &&\n tocElement !== null &&\n headings.length > 0) {\n some.call(headings, function (heading, i) {\n if (getHeadingTopPos(heading) > top + options.headingsOffset + 10) {\n // Don't allow negative index value.\n var index = (i === 0) ? i : i - 1\n topHeader = headings[index]\n return true\n } else if (i === headings.length - 1) {\n // This allows scrolling for the last heading on the page.\n topHeader = headings[headings.length - 1]\n return true\n }\n })\n\n var oldActiveTocLink = tocElement.querySelector('.' + options.activeLinkClass)\n var activeTocLink = tocElement\n .querySelector('.' + options.linkClass +\n '.node-name--' + topHeader.nodeName +\n '[href=\"' + options.basePath + '#' + topHeader.id.replace(/([ #;&,.+*~':\"!^$[\\]()=>|/\\\\@])/g, '\\\\$1') + '\"]')\n // Performance improvement to only change the classes\n // for the toc if a new link should be highlighted.\n if (oldActiveTocLink === activeTocLink) {\n return\n }\n\n // Remove the active class from the other tocLinks.\n var tocLinks = tocElement\n .querySelectorAll('.' + options.linkClass)\n forEach.call(tocLinks, function (tocLink) {\n tocLink.className = tocLink.className.split(SPACE_CHAR + options.activeLinkClass).join('')\n })\n var tocLis = tocElement\n .querySelectorAll('.' + options.listItemClass)\n forEach.call(tocLis, function (tocLi) {\n tocLi.className = tocLi.className.split(SPACE_CHAR + options.activeListItemClass).join('')\n })\n\n // Add the active class to the active tocLink.\n if (activeTocLink && activeTocLink.className.indexOf(options.activeLinkClass) === -1) {\n activeTocLink.className += SPACE_CHAR + options.activeLinkClass\n }\n var li = activeTocLink && activeTocLink.parentNode\n if (li && li.className.indexOf(options.activeListItemClass) === -1) {\n li.className += SPACE_CHAR + options.activeListItemClass\n }\n\n var tocLists = tocElement\n .querySelectorAll('.' + options.listClass + '.' + options.collapsibleClass)\n\n // Collapse the other collapsible lists.\n forEach.call(tocLists, function (list) {\n if (list.className.indexOf(options.isCollapsedClass) === -1) {\n list.className += SPACE_CHAR + options.isCollapsedClass\n }\n })\n\n // Expand the active link's collapsible list and its sibling if applicable.\n if (activeTocLink && activeTocLink.nextSibling && activeTocLink.nextSibling.className.indexOf(options.isCollapsedClass) !== -1) {\n activeTocLink.nextSibling.className = activeTocLink.nextSibling.className.split(SPACE_CHAR + options.isCollapsedClass).join('')\n }\n removeCollapsedFromParents(activeTocLink && activeTocLink.parentNode.parentNode)\n }\n }\n\n /**\n * Remove collapsed class from parent elements.\n * @param {HTMLElement} element\n * @return {HTMLElement}\n */\n function removeCollapsedFromParents (element) {\n if (element && element.className.indexOf(options.collapsibleClass) !== -1 && element.className.indexOf(options.isCollapsedClass) !== -1) {\n element.className = element.className.split(SPACE_CHAR + options.isCollapsedClass).join('')\n return removeCollapsedFromParents(element.parentNode.parentNode)\n }\n return element\n }\n\n /**\n * Disable TOC Animation when a link is clicked.\n * @param {Event} event\n */\n function disableTocAnimation (event) {\n var target = event.target || event.srcElement\n if (typeof target.className !== 'string' || target.className.indexOf(options.linkClass) === -1) {\n return\n }\n // Bind to tocLink clicks to temporarily disable highlighting\n // while smoothScroll is animating.\n currentlyHighlighting = false\n }\n\n /**\n * Enable TOC Animation.\n */\n function enableTocAnimation () {\n currentlyHighlighting = true\n }\n\n return {\n enableTocAnimation,\n disableTocAnimation,\n render,\n updateToc\n }\n}\n","module.exports = {\n // Where to render the table of contents.\n tocSelector: '.js-toc',\n // Where to grab the headings to build the table of contents.\n contentSelector: '.js-toc-content',\n // Which headings to grab inside of the contentSelector element.\n headingSelector: 'h1, h2, h3',\n // Headings that match the ignoreSelector will be skipped.\n ignoreSelector: '.js-toc-ignore',\n // For headings inside relative or absolute positioned containers within content\n hasInnerContainers: false,\n // Main class to add to links.\n linkClass: 'toc-link',\n // Extra classes to add to links.\n extraLinkClasses: '',\n // Class to add to active links,\n // the link corresponding to the top most heading on the page.\n activeLinkClass: 'is-active-link',\n // Main class to add to lists.\n listClass: 'toc-list',\n // Extra classes to add to lists.\n extraListClasses: '',\n // Class that gets added when a list should be collapsed.\n isCollapsedClass: 'is-collapsed',\n // Class that gets added when a list should be able\n // to be collapsed but isn't necessarily collapsed.\n collapsibleClass: 'is-collapsible',\n // Class to add to list items.\n listItemClass: 'toc-list-item',\n // Class to add to active list items.\n activeListItemClass: 'is-active-li',\n // How many heading levels should not be collapsed.\n // For example, number 6 will show everything since\n // there are only 6 heading levels and number 0 will collapse them all.\n // The sections that are hidden will open\n // and close as you scroll to headings within them.\n collapseDepth: 0,\n // Smooth scrolling enabled.\n scrollSmooth: true,\n // Smooth scroll duration.\n scrollSmoothDuration: 420,\n // Smooth scroll offset.\n scrollSmoothOffset: 0,\n // Callback for scroll end.\n scrollEndCallback: function (e) {},\n // Headings offset between the headings and the top of the document (this is meant for minor adjustments).\n headingsOffset: 1,\n // Timeout between events firing to make sure it's\n // not too rapid (for performance reasons).\n throttleTimeout: 50,\n // Element to add the positionFixedClass to.\n positionFixedSelector: null,\n // Fixed position class to add to make sidebar fixed after scrolling\n // down past the fixedSidebarOffset.\n positionFixedClass: 'is-position-fixed',\n // fixedSidebarOffset can be any number but by default is set\n // to auto which sets the fixedSidebarOffset to the sidebar\n // element's offsetTop from the top of the document on init.\n fixedSidebarOffset: 'auto',\n // includeHtml can be set to true to include the HTML markup from the\n // heading node instead of just including the textContent.\n includeHtml: false,\n // includeTitleTags automatically sets the html title tag of the link\n // to match the title. This can be useful for SEO purposes or\n // when truncating titles.\n includeTitleTags: false,\n // onclick function to apply to all links in toc. will be called with\n // the event as the first parameter, and this can be used to stop,\n // propagation, prevent default or perform action\n onClick: function (e) {},\n // orderedList can be set to false to generate unordered lists (ul)\n // instead of ordered lists (ol)\n orderedList: true,\n // If there is a fixed article scroll container, set to calculate titles' offset\n scrollContainer: null,\n // prevent ToC DOM rendering if it's already rendered by an external system\n skipRendering: false,\n // Optional callback to change heading labels.\n // For example it can be used to cut down and put ellipses on multiline headings you deem too long.\n // Called each time a heading is parsed. Expects a string and returns the modified label to display.\n // Additionally, the attribute `data-heading-label` may be used on a heading to specify\n // a shorter string to be used in the TOC.\n // function (string) => string\n headingLabelCallback: false,\n // ignore headings that are hidden in DOM\n ignoreHiddenElements: false,\n // Optional callback to modify properties of parsed headings.\n // The heading element is passed in node parameter and information parsed by default parser is provided in obj parameter.\n // Function has to return the same or modified obj.\n // The heading will be excluded from TOC if nothing is returned.\n // function (object, HTMLElement) => object | void\n headingObjectCallback: null,\n // Set the base path, useful if you use a `base` tag in `head`.\n basePath: '',\n // Only takes affect when `tocSelector` is scrolling,\n // keep the toc scroll position in sync with the content.\n disableTocScrollSync: false,\n // Offset for the toc scroll (top) position when scrolling the page.\n // Only effective if `disableTocScrollSync` is false.\n tocScrollOffset: 0,\n}\n","/* eslint no-var: off */\n/**\n * Tocbot\n * Tocbot creates a table of contents based on HTML headings on a page,\n * this allows users to easily jump to different sections of the document.\n * Tocbot was inspired by tocify (http://gregfranko.com/jquery.tocify.js/).\n * The main differences are that it works natively without any need for jquery or jquery UI).\n *\n * @author Tim Scanlin\n */\n\n/* globals define */\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory(root))\n } else if (typeof exports === 'object') {\n module.exports = factory(root)\n } else {\n root.tocbot = factory(root)\n }\n})(typeof global !== 'undefined' ? global : window || global, function (root) {\n 'use strict'\n\n // Default options.\n var defaultOptions = require('./default-options.js')\n // Object to store current options.\n var options = {}\n // Object for public APIs.\n var tocbot = {}\n\n var BuildHtml = require('./build-html.js')\n var ParseContent = require('./parse-content.js')\n var updateTocScroll = require('./update-toc-scroll.js')\n // Keep these variables at top scope once options are passed in.\n var buildHtml\n var parseContent\n\n // Just return if its not a browser.\n var supports = !!root && !!root.document && !!root.document.querySelector && !!root.addEventListener // Feature test\n if (typeof window === 'undefined' && !supports) {\n return\n }\n var headingsArray\n\n // From: https://github.com/Raynos/xtend\n var hasOwnProperty = Object.prototype.hasOwnProperty\n function extend () {\n var target = {}\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n return target\n }\n\n // From: https://remysharp.com/2010/07/21/throttling-function-calls\n function throttle (fn, threshold, scope) {\n threshold || (threshold = 250)\n var last\n var deferTimer\n return function () {\n var context = scope || this\n var now = +new Date()\n var args = arguments\n if (last && now < last + threshold) {\n // hold on to it\n clearTimeout(deferTimer)\n deferTimer = setTimeout(function () {\n last = now\n fn.apply(context, args)\n }, threshold)\n } else {\n last = now\n fn.apply(context, args)\n }\n }\n }\n\n function getContentElement (options) {\n try {\n return options.contentElement || document.querySelector(options.contentSelector)\n } catch (e) {\n console.warn('Contents element not found: ' + options.contentSelector) // eslint-disable-line\n return null\n }\n }\n\n function getTocElement (options) {\n try {\n return options.tocElement || document.querySelector(options.tocSelector)\n } catch (e) {\n console.warn('TOC element not found: ' + options.tocSelector) // eslint-disable-line\n return null\n }\n }\n\n /**\n * Destroy tocbot.\n */\n tocbot.destroy = function () {\n var tocElement = getTocElement(options)\n if (tocElement === null) {\n return\n }\n\n if (!options.skipRendering) {\n // Clear HTML.\n if (tocElement) {\n tocElement.innerHTML = ''\n }\n }\n\n // Remove event listeners.\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).removeEventListener('scroll', this._scrollListener, false)\n document.querySelector(options.scrollContainer).removeEventListener('resize', this._scrollListener, false)\n if (buildHtml) {\n document.querySelector(options.scrollContainer).removeEventListener('click', this._clickListener, false)\n }\n } else {\n document.removeEventListener('scroll', this._scrollListener, false)\n document.removeEventListener('resize', this._scrollListener, false)\n if (buildHtml) {\n document.removeEventListener('click', this._clickListener, false)\n }\n }\n }\n\n /**\n * Initialize tocbot.\n * @param {object} customOptions\n */\n tocbot.init = function (customOptions) {\n // feature test\n if (!supports) {\n return\n }\n\n // Merge defaults with user options.\n // Set to options variable at the top.\n options = extend(defaultOptions, customOptions || {})\n this.options = options\n this.state = {}\n\n // Init smooth scroll if enabled (default).\n if (options.scrollSmooth) {\n options.duration = options.scrollSmoothDuration\n options.offset = options.scrollSmoothOffset\n tocbot.scrollSmooth = require('./scroll-smooth').initSmoothScrolling(options)\n }\n\n // Pass options to these modules.\n buildHtml = BuildHtml(options)\n parseContent = ParseContent(options)\n\n // For testing purposes.\n this._buildHtml = buildHtml\n this._parseContent = parseContent\n this._headingsArray = headingsArray\n\n // Destroy it if it exists first.\n tocbot.destroy()\n\n var contentElement = getContentElement(options)\n if (contentElement === null) {\n return\n }\n\n var tocElement = getTocElement(options)\n if (tocElement === null) {\n return\n }\n\n // Get headings array.\n headingsArray = parseContent.selectHeadings(contentElement, options.headingSelector)\n // Return if no headings are found.\n if (headingsArray === null) {\n return\n }\n\n // Build nested headings array.\n var nestedHeadingsObj = parseContent.nestHeadingsArray(headingsArray)\n var nestedHeadings = nestedHeadingsObj.nest\n\n // Render.\n if (!options.skipRendering) {\n buildHtml.render(tocElement, nestedHeadings)\n }\n\n // Update Sidebar and bind listeners.\n this._scrollListener = throttle(function (e) {\n buildHtml.updateToc(headingsArray)\n !options.disableTocScrollSync && updateTocScroll(options)\n var isTop = e && e.target && e.target.scrollingElement && e.target.scrollingElement.scrollTop === 0\n if ((e && (e.eventPhase === 0 || e.currentTarget === null)) || isTop) {\n buildHtml.updateToc(headingsArray)\n if (options.scrollEndCallback) {\n options.scrollEndCallback(e)\n }\n }\n }, options.throttleTimeout)\n this._scrollListener()\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).addEventListener('scroll', this._scrollListener, false)\n document.querySelector(options.scrollContainer).addEventListener('resize', this._scrollListener, false)\n } else {\n document.addEventListener('scroll', this._scrollListener, false)\n document.addEventListener('resize', this._scrollListener, false)\n }\n\n // Bind click listeners to disable animation.\n var timeout = null\n this._clickListener = throttle(function (event) {\n if (options.scrollSmooth) {\n buildHtml.disableTocAnimation(event)\n }\n buildHtml.updateToc(headingsArray)\n // Timeout to re-enable the animation.\n timeout && clearTimeout(timeout)\n timeout = setTimeout(function () {\n buildHtml.enableTocAnimation()\n }, options.scrollSmoothDuration)\n }, options.throttleTimeout)\n\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).addEventListener('click', this._clickListener, false)\n } else {\n document.addEventListener('click', this._clickListener, false)\n }\n\n return this\n }\n\n /**\n * Refresh tocbot.\n */\n tocbot.refresh = function (customOptions) {\n tocbot.destroy()\n tocbot.init(customOptions || this.options)\n }\n\n // Make tocbot available globally.\n root.tocbot = tocbot\n\n return tocbot\n})\n","/* eslint no-var: off */\n/**\n * This file is responsible for parsing the content from the DOM and making\n * sure data is nested properly.\n *\n * @author Tim Scanlin\n */\n\nmodule.exports = function parseContent (options) {\n var reduce = [].reduce\n\n /**\n * Get the last item in an array and return a reference to it.\n * @param {Array} array\n * @return {Object}\n */\n function getLastItem (array) {\n return array[array.length - 1]\n }\n\n /**\n * Get heading level for a heading dom node.\n * @param {HTMLElement} heading\n * @return {Number}\n */\n function getHeadingLevel (heading) {\n return +heading.nodeName.toUpperCase().replace('H', '')\n }\n\n /**\n * Get important properties from a heading element and store in a plain object.\n * @param {HTMLElement} heading\n * @return {Object}\n */\n function getHeadingObject (heading) {\n // each node is processed twice by this method because nestHeadingsArray() and addNode() calls it\n // first time heading is real DOM node element, second time it is obj\n // that is causing problem so I am processing only original DOM node\n if (!(heading instanceof window.HTMLElement)) return heading\n\n if (options.ignoreHiddenElements && (!heading.offsetHeight || !heading.offsetParent)) {\n return null\n }\n\n const headingLabel = heading.getAttribute('data-heading-label') ||\n (options.headingLabelCallback ? String(options.headingLabelCallback(heading.textContent)) : heading.textContent.trim())\n var obj = {\n id: heading.id,\n children: [],\n nodeName: heading.nodeName,\n headingLevel: getHeadingLevel(heading),\n textContent: headingLabel\n }\n\n if (options.includeHtml) {\n obj.childNodes = heading.childNodes\n }\n\n if (options.headingObjectCallback) {\n return options.headingObjectCallback(obj, heading)\n }\n\n return obj\n }\n\n /**\n * Add a node to the nested array.\n * @param {Object} node\n * @param {Array} nest\n * @return {Array}\n */\n function addNode (node, nest) {\n var obj = getHeadingObject(node)\n var level = obj.headingLevel\n var array = nest\n var lastItem = getLastItem(array)\n var lastItemLevel = lastItem\n ? lastItem.headingLevel\n : 0\n var counter = level - lastItemLevel\n\n while (counter > 0) {\n lastItem = getLastItem(array)\n // Handle case where there are multiple h5+ in a row.\n if (lastItem && level === lastItem.headingLevel) {\n break\n } else if (lastItem && lastItem.children !== undefined) {\n array = lastItem.children\n }\n counter--\n }\n\n if (level >= options.collapseDepth) {\n obj.isCollapsed = true\n }\n\n array.push(obj)\n return array\n }\n\n /**\n * Select headings in content area, exclude any selector in options.ignoreSelector\n * @param {HTMLElement} contentElement\n * @param {Array} headingSelector\n * @return {Array}\n */\n function selectHeadings (contentElement, headingSelector) {\n var selectors = headingSelector\n if (options.ignoreSelector) {\n selectors = headingSelector.split(',')\n .map(function mapSelectors (selector) {\n return selector.trim() + ':not(' + options.ignoreSelector + ')'\n })\n }\n try {\n return contentElement.querySelectorAll(selectors)\n } catch (e) {\n console.warn('Headers not found with selector: ' + selectors); // eslint-disable-line\n return null\n }\n }\n\n /**\n * Nest headings array into nested arrays with 'children' property.\n * @param {Array} headingsArray\n * @return {Object}\n */\n function nestHeadingsArray (headingsArray) {\n return reduce.call(headingsArray, function reducer (prev, curr) {\n var currentHeading = getHeadingObject(curr)\n if (currentHeading) {\n addNode(currentHeading, prev.nest)\n }\n return prev\n }, {\n nest: []\n })\n }\n\n return {\n nestHeadingsArray,\n selectHeadings\n }\n}\n","/* eslint no-var: off */\n/* globals location, requestAnimationFrame */\n\nexports.initSmoothScrolling = initSmoothScrolling\n\nfunction initSmoothScrolling (options) {\n // if (isCssSmoothSCrollSupported()) { return }\n\n var duration = options.duration\n var offset = options.offset\n\n var pageUrl = location.hash\n ? stripHash(location.href)\n : location.href\n\n delegatedLinkHijacking()\n\n function delegatedLinkHijacking () {\n document.body.addEventListener('click', onClick, false)\n\n function onClick (e) {\n if (\n !isInPageLink(e.target) ||\n e.target.className.indexOf('no-smooth-scroll') > -1 ||\n (e.target.href.charAt(e.target.href.length - 2) === '#' &&\n e.target.href.charAt(e.target.href.length - 1) === '!') ||\n e.target.className.indexOf(options.linkClass) === -1) {\n return\n }\n\n // Don't prevent default or hash doesn't change.\n // e.preventDefault()\n\n jump(e.target.hash, {\n duration,\n offset,\n callback: function () {\n setFocus(e.target.hash)\n }\n })\n }\n }\n\n function isInPageLink (n) {\n return n.tagName.toLowerCase() === 'a' &&\n (n.hash.length > 0 || n.href.charAt(n.href.length - 1) === '#') &&\n (stripHash(n.href) === pageUrl || stripHash(n.href) + '#' === pageUrl)\n }\n\n function stripHash (url) {\n return url.slice(0, url.lastIndexOf('#'))\n }\n\n // function isCssSmoothSCrollSupported () {\n // return 'scrollBehavior' in document.documentElement.style\n // }\n\n // Adapted from:\n // https://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/\n function setFocus (hash) {\n var element = document.getElementById(hash.substring(1))\n\n if (element) {\n if (!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)) {\n element.tabIndex = -1\n }\n\n element.focus()\n }\n }\n}\n\nfunction jump (target, options) {\n var start = window.pageYOffset\n var opt = {\n duration: options.duration,\n offset: options.offset || 0,\n callback: options.callback,\n easing: options.easing || easeInOutQuad\n }\n // This makes ids that start with a number work: ('[id=\"' + decodeURI(target).split('#').join('') + '\"]')\n // DecodeURI for nonASCII hashes, they was encoded, but id was not encoded, it lead to not finding the tgt element by id.\n // And this is for IE: document.body.scrollTop\n // Handle decoded and non-decoded URIs since sometimes URLs automatically transform them (support for internation chars).\n var tgt = document.querySelector('[id=\"' + decodeURI(target).split('#').join('') + '\"]') ||\n document.querySelector('[id=\"' + (target).split('#').join('') + '\"]')\n var distance = typeof target === 'string'\n ? opt.offset + (\n target\n ? (tgt && tgt.getBoundingClientRect().top) || 0 // handle non-existent links better.\n : -(document.documentElement.scrollTop || document.body.scrollTop))\n : target\n var duration = typeof opt.duration === 'function'\n ? opt.duration(distance)\n : opt.duration\n var timeStart\n var timeElapsed\n\n requestAnimationFrame(function (time) { timeStart = time; loop(time) })\n function loop (time) {\n timeElapsed = time - timeStart\n\n window.scrollTo(0, opt.easing(timeElapsed, start, distance, duration))\n\n if (timeElapsed < duration) { requestAnimationFrame(loop) } else { end() }\n }\n\n function end () {\n window.scrollTo(0, start + distance)\n\n if (typeof opt.callback === 'function') { opt.callback() }\n }\n\n // Robert Penner's easeInOutQuad - http://robertpenner.com/easing/\n function easeInOutQuad (t, b, c, d) {\n t /= d / 2\n if (t < 1) return c / 2 * t * t + b\n t--\n return -c / 2 * (t * (t - 2) - 1) + b\n }\n}\n","/* eslint no-var: off */\n\nmodule.exports = function updateTocScroll (options) {\n var toc = options.tocElement || document.querySelector(options.tocSelector)\n if (toc && toc.scrollHeight > toc.clientHeight) {\n var activeItem = toc.querySelector('.' + options.activeListItemClass)\n if (activeItem) {\n toc.scrollTop = activeItem.offsetTop - options.tocScrollOffset\n }\n }\n}\n"],"names":["module","exports","options","tocElement","forEach","some","body","document","currentlyHighlighting","SPACE_CHAR","createEl","d","container","link","appendChild","data","item","createElement","a","listItemClass","setAttribute","onClick","onclick","includeTitleTags","textContent","includeHtml","childNodes","length","call","node","cloneNode","basePath","id","linkClass","nodeName","extraLinkClasses","createLink","children","list","createList","isCollapsed","child","listElement","classes","listClass","extraListClasses","collapsibleClass","isCollapsedClass","getHeadingTopPos","obj","position","offsetTop","hasInnerContainers","offsetParent","removeCollapsedFromParents","element","className","indexOf","split","join","parentNode","enableTocAnimation","disableTocAnimation","event","target","srcElement","render","parent","firstChild","removeChild","updateToc","headingsArray","top","scrollContainer","querySelector","scrollTop","documentElement","positionFixedSelector","posFixedEl","fixedSidebarOffset","positionFixedClass","updateFixedSidebarClass","topHeader","headings","heading","i","headingsOffset","oldActiveTocLink","activeLinkClass","activeTocLink","replace","tocLinks","querySelectorAll","tocLink","tocLis","tocLi","activeListItemClass","li","tocLists","nextSibling","tocSelector","contentSelector","headingSelector","ignoreSelector","collapseDepth","scrollSmooth","scrollSmoothDuration","scrollSmoothOffset","scrollEndCallback","e","throttleTimeout","orderedList","skipRendering","headingLabelCallback","ignoreHiddenElements","headingObjectCallback","disableTocScrollSync","tocScrollOffset","root","g","window","buildHtml","parseContent","defaultOptions","tocbot","BuildHtml","ParseContent","updateTocScroll","supports","addEventListener","hasOwnProperty","Object","prototype","destroy","getTocElement","innerHTML","removeEventListener","this","_scrollListener","_clickListener","init","customOptions","extend","state","duration","offset","_buildHtml","_parseContent","_headingsArray","contentElement","getContentElement","selectHeadings","nestedHeadings","nestHeadingsArray","nest","throttle","isTop","scrollingElement","eventPhase","currentTarget","timeout","clearTimeout","setTimeout","refresh","arguments","source","key","fn","threshold","scope","last","deferTimer","context","now","Date","args","apply","console","warn","reduce","getLastItem","array","getHeadingLevel","toUpperCase","getHeadingObject","HTMLElement","offsetHeight","headingLabel","getAttribute","String","trim","headingLevel","prev","curr","currentHeading","level","lastItem","counter","undefined","push","addNode","selectors","map","selector","initSmoothScrolling","pageUrl","location","hash","stripHash","href","url","slice","lastIndexOf","n","tagName","toLowerCase","charAt","timeStart","timeElapsed","start","pageYOffset","opt","callback","easing","easeInOutQuad","tgt","decodeURI","distance","getBoundingClientRect","loop","time","scrollTo","requestAnimationFrame","end","t","b","c","jump","getElementById","substring","test","tabIndex","focus","toc","scrollHeight","clientHeight","activeItem"],"sourceRoot":""} \ No newline at end of file diff --git a/js/2692.js b/js/2692.js new file mode 100644 index 00000000..85e15d7c --- /dev/null +++ b/js/2692.js @@ -0,0 +1,3 @@ +/*! For license information please see 2692.js.LICENSE.txt */ +(globalThis.webpackChunksakurairo_scripts=globalThis.webpackChunksakurairo_scripts||[]).push([[2692],{2692:function(e,t){var n,r,i;r="undefined"!=typeof window?window:this,i=function(r,i){var o=[],a=Object.getPrototypeOf,s=o.slice,u=o.flat?function(e){return o.flat.call(e)}:function(e){return o.concat.apply([],e)},l=o.push,c=o.indexOf,f={},p=f.toString,d=f.hasOwnProperty,h=d.toString,g=h.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},m=function(e){return null!=e&&e===e.window},x=r.document,b={type:!0,src:!0,nonce:!0,noModule:!0};function w(e,t,n){var r,i,o=(n=n||x).createElement("script");if(o.text=e,t)for(r in b)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[p.call(e)]||"object":typeof e}var C="3.7.1",k=/HTML$/i,S=function(e,t){return new S.fn.init(e,t)};function E(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!y(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function j(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}S.fn=S.prototype={jquery:C,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(e){return this.pushStack(S.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(S.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+q+")"+q+"*"),$=new RegExp(q+"|>"),B=new RegExp(R),_=new RegExp("^"+H+"$"),z={ID:new RegExp("^#("+H+")"),CLASS:new RegExp("^\\.("+H+")"),TAG:new RegExp("^("+H+"|[*])"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+R),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+q+"*(even|odd|(([+-]|)(\\d*)n|)"+q+"*(?:([+-]|)"+q+"*(\\d+)|))"+q+"*\\)|)","i"),bool:new RegExp("^(?:"+E+")$","i"),needsContext:new RegExp("^"+q+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+q+"*((?:-\\d)?\\d*)"+q+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,U=/^h\d$/i,V=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/[+~]/,Y=new RegExp("\\\\[\\da-fA-F]{1,6}"+q+"?|\\\\([^\\r\\n\\f])","g"),Q=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},J=function(){ue()},K=pe((function(e){return!0===e.disabled&&j(e,"fieldset")}),{dir:"parentNode",next:"legend"});try{g.apply(o=s.call(P.childNodes),P.childNodes),o[P.childNodes.length].nodeType}catch(e){g={apply:function(e,t){M.apply(e,s.call(t))},call:function(e){M.apply(e,s.call(arguments,1))}}}function Z(e,t,n,r){var i,o,a,s,l,c,d,h=t&&t.ownerDocument,m=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==m&&9!==m&&11!==m)return n;if(!r&&(ue(t),t=t||u,f)){if(11!==m&&(l=V.exec(e)))if(i=l[1]){if(9===m){if(!(a=t.getElementById(i)))return n;if(a.id===i)return g.call(n,a),n}else if(h&&(a=h.getElementById(i))&&Z.contains(t,a)&&a.id===i)return g.call(n,a),n}else{if(l[2])return g.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&t.getElementsByClassName)return g.apply(n,t.getElementsByClassName(i)),n}if(!(C[e+" "]||p&&p.test(e))){if(d=e,h=t,1===m&&($.test(e)||F.test(e))){for((h=G.test(e)&&se(t.parentNode)||t)==t&&v.scope||((s=t.getAttribute("id"))?s=S.escapeSelector(s):t.setAttribute("id",s=y)),o=(c=ce(e)).length;o--;)c[o]=(s?"#"+s:":scope")+" "+fe(c[o]);d=c.join(",")}try{return g.apply(n,h.querySelectorAll(d)),n}catch(t){C(e,!0)}finally{s===y&&t.removeAttribute("id")}}}return me(e.replace(L,"$1"),t,n,r)}function ee(){var e=[];return function n(r,i){return e.push(r+" ")>t.cacheLength&&delete n[e.shift()],n[r+" "]=i}}function te(e){return e[y]=!0,e}function ne(e){var t=u.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function re(e){return function(t){return j(t,"input")&&t.type===e}}function ie(e){return function(t){return(j(t,"input")||j(t,"button"))&&t.type===e}}function oe(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&K(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ae(e){return te((function(t){return t=+t,te((function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}function se(e){return e&&void 0!==e.getElementsByTagName&&e}function ue(e){var n,r=e?e.ownerDocument||e:P;return r!=u&&9===r.nodeType&&r.documentElement?(l=(u=r).documentElement,f=!S.isXMLDoc(u),h=l.matches||l.webkitMatchesSelector||l.msMatchesSelector,l.msMatchesSelector&&P!=u&&(n=u.defaultView)&&n.top!==n&&n.addEventListener("unload",J),v.getById=ne((function(e){return l.appendChild(e).id=S.expando,!u.getElementsByName||!u.getElementsByName(S.expando).length})),v.disconnectedMatch=ne((function(e){return h.call(e,"*")})),v.scope=ne((function(){return u.querySelectorAll(":scope")})),v.cssHas=ne((function(){try{return u.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}})),v.getById?(t.filter.ID=function(e){var t=e.replace(Y,Q);return function(e){return e.getAttribute("id")===t}},t.find.ID=function(e,t){if(void 0!==t.getElementById&&f){var n=t.getElementById(e);return n?[n]:[]}}):(t.filter.ID=function(e){var t=e.replace(Y,Q);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},t.find.ID=function(e,t){if(void 0!==t.getElementById&&f){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),t.find.TAG=function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},t.find.CLASS=function(e,t){if(void 0!==t.getElementsByClassName&&f)return t.getElementsByClassName(e)},p=[],ne((function(e){var t;l.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||p.push("\\["+q+"*(?:value|"+E+")"),e.querySelectorAll("[id~="+y+"-]").length||p.push("~="),e.querySelectorAll("a#"+y+"+*").length||p.push(".#.+[+~]"),e.querySelectorAll(":checked").length||p.push(":checked"),(t=u.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),l.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&p.push(":enabled",":disabled"),(t=u.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||p.push("\\["+q+"*name"+q+"*="+q+"*(?:''|\"\")")})),v.cssHas||p.push(":has"),p=p.length&&new RegExp(p.join("|")),k=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!v.sortDetached&&t.compareDocumentPosition(e)===n?e===u||e.ownerDocument==P&&Z.contains(P,e)?-1:t===u||t.ownerDocument==P&&Z.contains(P,t)?1:i?c.call(i,e)-c.call(i,t):0:4&n?-1:1)},u):u}for(e in Z.matches=function(e,t){return Z(e,null,null,t)},Z.matchesSelector=function(e,t){if(ue(e),f&&!C[t+" "]&&(!p||!p.test(t)))try{var n=h.call(e,t);if(n||v.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){C(t,!0)}return Z(t,u,null,[e]).length>0},Z.contains=function(e,t){return(e.ownerDocument||e)!=u&&ue(e),S.contains(e,t)},Z.attr=function(e,n){(e.ownerDocument||e)!=u&&ue(e);var r=t.attrHandle[n.toLowerCase()],i=r&&d.call(t.attrHandle,n.toLowerCase())?r(e,n,!f):void 0;return void 0!==i?i:e.getAttribute(n)},Z.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},S.uniqueSort=function(e){var t,n=[],r=0,o=0;if(a=!v.sortStable,i=!v.sortStable&&s.call(e,0),D.call(e,k),a){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)N.call(e,n[r],1)}return i=null,e},S.fn.uniqueSort=function(){return this.pushStack(S.uniqueSort(s.apply(this)))},t=S.expr={cacheLength:50,createPseudo:te,match:z,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Y,Q),e[3]=(e[3]||e[4]||e[5]||"").replace(Y,Q),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||Z.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&Z.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return z.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&B.test(n)&&(t=ce(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Y,Q).toLowerCase();return"*"===e?function(){return!0}:function(e){return j(e,t)}},CLASS:function(e){var t=b[e+" "];return t||(t=new RegExp("(^|"+q+")"+e+"("+q+"|$)"))&&b(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=Z.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(I," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),x=!u&&!s,b=!1;if(g){if(o){for(;h;){for(f=t;f=f[h];)if(s?j(f,v):1===f.nodeType)return!1;d=h="only"===e&&!d&&"nextSibling"}return!0}if(d=[a?g.firstChild:g.lastChild],a&&x){for(b=(p=(l=(c=g[y]||(g[y]={}))[e]||[])[0]===m&&l[1])&&l[2],f=p&&g.childNodes[p];f=++p&&f&&f[h]||(b=p=0)||d.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[m,p,b];break}}else if(x&&(b=p=(l=(c=t[y]||(t[y]={}))[e]||[])[0]===m&&l[1]),!1===b)for(;(f=++p&&f&&f[h]||(b=p=0)||d.pop())&&(!(s?j(f,v):1===f.nodeType)||!++b||(x&&((c=f[y]||(f[y]={}))[e]=[m,b]),f!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,n){var r,i=t.pseudos[e]||t.setFilters[e.toLowerCase()]||Z.error("unsupported pseudo: "+e);return i[y]?i(n):i.length>1?(r=[e,e,"",n],t.setFilters.hasOwnProperty(e.toLowerCase())?te((function(e,t){for(var r,o=i(e,n),a=o.length;a--;)e[r=c.call(e,o[a])]=!(t[r]=o[a])})):function(e){return i(e,0,r)}):i}},pseudos:{not:te((function(e){var t=[],n=[],r=ye(e.replace(L,"$1"));return r[y]?te((function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}})),has:te((function(e){return function(t){return Z(e,t).length>0}})),contains:te((function(e){return e=e.replace(Y,Q),function(t){return(t.textContent||S.text(t)).indexOf(e)>-1}})),lang:te((function(e){return _.test(e||"")||Z.error("unsupported lang: "+e),e=e.replace(Y,Q).toLowerCase(),function(t){var n;do{if(n=f?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(e){var t=r.location&&r.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===l},focus:function(e){return e===function(){try{return u.activeElement}catch(e){}}()&&u.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:oe(!1),disabled:oe(!0),checked:function(e){return j(e,"input")&&!!e.checked||j(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!t.pseudos.empty(e)},header:function(e){return U.test(e.nodeName)},input:function(e){return X.test(e.nodeName)},button:function(e){return j(e,"input")&&"button"===e.type||j(e,"button")},text:function(e){var t;return j(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ae((function(){return[0]})),last:ae((function(e,t){return[t-1]})),eq:ae((function(e,t,n){return[n<0?n+t:n]})),even:ae((function(e,t){for(var n=0;nt?t:n;--r>=0;)e.push(r);return e})),gt:ae((function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function he(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s-1&&(o[l]=!(a[l]=p))}}else d=he(d===a?d.splice(y,d.length):d),i?i(null,a,d,u):g.apply(a,d)}))}function ve(e){for(var r,i,o,a=e.length,s=t.relative[e[0].type],u=s||t.relative[" "],l=s?1:0,f=pe((function(e){return e===r}),u,!0),p=pe((function(e){return c.call(r,e)>-1}),u,!0),d=[function(e,t,i){var o=!s&&(i||t!=n)||((r=t).nodeType?f(e,t,i):p(e,t,i));return r=null,o}];l1&&de(d),l>1&&fe(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(L,"$1"),i,l0,o=e.length>0,a=function(a,s,l,c,p){var d,h,v,y=0,x="0",b=a&&[],w=[],T=n,C=a||o&&t.find.TAG("*",p),k=m+=null==T?1:Math.random()||.1,E=C.length;for(p&&(n=s==u||s||p);x!==E&&null!=(d=C[x]);x++){if(o&&d){for(h=0,s||d.ownerDocument==u||(ue(d),l=!f);v=e[h++];)if(v(d,s||u,l)){g.call(c,d);break}p&&(m=k)}i&&((d=!v&&d)&&y--,a&&b.push(d))}if(y+=x,i&&x!==y){for(h=0;v=r[h++];)v(b,w,s,l);if(a){if(y>0)for(;x--;)b[x]||w[x]||(w[x]=A.call(c));w=he(w)}g.apply(c,w),p&&!a&&w.length>0&&y+r.length>1&&S.uniqueSort(c)}return p&&(m=k,n=T),b};return i?te(a):a}(a,o)),s.selector=e}return s}function me(e,n,r,i){var o,a,s,u,l,c="function"==typeof e&&e,p=!i&&ce(e=c.selector||e);if(r=r||[],1===p.length){if((a=p[0]=p[0].slice(0)).length>2&&"ID"===(s=a[0]).type&&9===n.nodeType&&f&&t.relative[a[1].type]){if(!(n=(t.find.ID(s.matches[0].replace(Y,Q),n)||[])[0]))return r;c&&(n=n.parentNode),e=e.slice(a.shift().value.length)}for(o=z.needsContext.test(e)?0:a.length;o--&&(s=a[o],!t.relative[u=s.type]);)if((l=t.find[u])&&(i=l(s.matches[0].replace(Y,Q),G.test(a[0].type)&&se(n.parentNode)||n))){if(a.splice(o,1),!(e=i.length&&fe(a)))return g.apply(r,i),r;break}}return(c||ye(e,p))(i,n,!f,r,!n||G.test(e)&&se(n.parentNode)||n),r}le.prototype=t.filters=t.pseudos,t.setFilters=new le,v.sortStable=y.split("").sort(k).join("")===y,ue(),v.sortDetached=ne((function(e){return 1&e.compareDocumentPosition(u.createElement("fieldset"))})),S.find=Z,S.expr[":"]=S.expr.pseudos,S.unique=S.uniqueSort,Z.compile=ye,Z.select=me,Z.setDocument=ue,Z.tokenize=ce,Z.escape=S.escapeSelector,Z.getText=S.text,Z.isXML=S.isXMLDoc,Z.selectors=S.expr,Z.support=S.support,Z.uniqueSort=S.uniqueSort}();var R=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},I=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},W=S.expr.match.needsContext,F=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function $(e,t,n){return y(t)?S.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?S.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?S.grep(e,(function(e){return c.call(t,e)>-1!==n})):S.filter(t,e,n)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,(function(e){return 1===e.nodeType})))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter((function(){for(t=0;t1?S.uniqueSort(n):n},filter:function(e){return this.pushStack($(this,e||[],!1))},not:function(e){return this.pushStack($(this,e||[],!0))},is:function(e){return!!$(this,"string"==typeof e&&W.test(e)?S(e):e||[],!1).length}});var B,_=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||B,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:_.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:x,!0)),F.test(r[1])&&S.isPlainObject(t))for(r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=x.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,B=S(x);var z=/^(?:parents|prev(?:Until|All))/,X={children:!0,contents:!0,next:!0,prev:!0};function U(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?c.call(S(e),this[0]):c.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return R(e,"parentNode")},parentsUntil:function(e,t,n){return R(e,"parentNode",n)},next:function(e){return U(e,"nextSibling")},prev:function(e){return U(e,"previousSibling")},nextAll:function(e){return R(e,"nextSibling")},prevAll:function(e){return R(e,"previousSibling")},nextUntil:function(e,t,n){return R(e,"nextSibling",n)},prevUntil:function(e,t,n){return R(e,"previousSibling",n)},siblings:function(e){return I((e.parentNode||{}).firstChild,e)},children:function(e){return I(e.firstChild)},contents:function(e){return null!=e.contentDocument&&a(e.contentDocument)?e.contentDocument:(j(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},(function(e,t){S.fn[e]=function(n,r){var i=S.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=S.filter(r,i)),this.length>1&&(X[e]||S.uniqueSort(i),z.test(e)&&i.reverse()),this.pushStack(i)}}));var V=/[^\x20\t\r\n\f]+/g;function G(e){return e}function Y(e){throw e}function Q(e,t,n,r){var i;try{e&&y(i=e.promise)?i.call(e).done(t).fail(n):e&&y(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return S.each(e.match(V)||[],(function(e,n){t[n]=!0})),t}(e):S.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?S.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},S.extend({Deferred:function(e){var t=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return S.Deferred((function(n){S.each(t,(function(t,r){var i=y(e[r[4]])&&e[r[4]];o[r[1]]((function(){var e=i&&i.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,i?[e]:arguments)}))})),e=null})).promise()},then:function(e,n,i){var o=0;function a(e,t,n,i){return function(){var s=this,u=arguments,l=function(){var r,l;if(!(e=o&&(n!==Y&&(s=void 0,u=[r]),t.rejectWith(s,u))}};e?c():(S.Deferred.getErrorHook?c.error=S.Deferred.getErrorHook():S.Deferred.getStackHook&&(c.error=S.Deferred.getStackHook()),r.setTimeout(c))}}return S.Deferred((function(r){t[0][3].add(a(0,r,y(i)?i:G,r.notifyWith)),t[1][3].add(a(0,r,y(e)?e:G)),t[2][3].add(a(0,r,y(n)?n:Y))})).promise()},promise:function(e){return null!=e?S.extend(e,i):i}},o={};return S.each(t,(function(e,r){var a=r[2],s=r[5];i[r[1]]=a.add,s&&a.add((function(){n=s}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(r[3].fire),o[r[0]]=function(){return o[r[0]+"With"](this===o?void 0:this,arguments),this},o[r[0]+"With"]=a.fireWith})),i.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=s.call(arguments),o=S.Deferred(),a=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?s.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(Q(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||y(i[n]&&i[n].then)))return o.then();for(;n--;)Q(i[n],a(n),o.reject);return o.promise()}});var J=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){r.console&&r.console.warn&&e&&J.test(e.name)&&r.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){r.setTimeout((function(){throw e}))};var K=S.Deferred();function Z(){x.removeEventListener("DOMContentLoaded",Z),r.removeEventListener("load",Z),S.ready()}S.fn.ready=function(e){return K.then(e).catch((function(e){S.readyException(e)})),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0,!0!==e&&--S.readyWait>0||K.resolveWith(x,[S]))}}),S.ready.then=K.then,"complete"===x.readyState||"loading"!==x.readyState&&!x.documentElement.doScroll?r.setTimeout(S.ready):(x.addEventListener("DOMContentLoaded",Z),r.addEventListener("load",Z));var ee=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===T(n))for(s in i=!0,n)ee(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,y(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each((function(){ue.remove(this,e)}))}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=se.get(e,t),n&&(!r||Array.isArray(n)?r=se.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,(function(){S.dequeue(e,t)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return se.get(e,n)||se.access(e,n,{empty:S.Callbacks("once memory").add((function(){se.remove(e,[t+"queue",n])}))})}}),S.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,je=/^$|^module$|\/(?:java|ecma)script/i;Ce=x.createDocumentFragment().appendChild(x.createElement("div")),(ke=x.createElement("input")).setAttribute("type","radio"),ke.setAttribute("checked","checked"),ke.setAttribute("name","t"),Ce.appendChild(ke),v.checkClone=Ce.cloneNode(!0).cloneNode(!0).lastChild.checked,Ce.innerHTML="",v.noCloneChecked=!!Ce.cloneNode(!0).lastChild.defaultValue,Ce.innerHTML="",v.option=!!Ce.lastChild;var Ae={thead:[1,"","
        "],col:[2,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],_default:[0,"",""]};function De(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&j(e,t)?S.merge([e],n):n}function Ne(e,t){for(var n=0,r=e.length;n",""]);var qe=/<|&#?\w+;/;function Le(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d-1)i&&i.push(o);else if(l=ve(o),a=De(f.appendChild(o),"script"),l&&Ne(a),n)for(c=0;o=a[c++];)je.test(o.type||"")&&n.push(o);return f}var He=/^([^.]*)(?:\.(.+)|)/;function Oe(){return!0}function Pe(){return!1}function Me(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Me(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Pe;else if(!i)return e;return 1===o&&(a=i,i=function(e){return S().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=S.guid++)),e.each((function(){S.event.add(this,t,i,r,n)}))}function Re(e,t,n){n?(se.set(e,t,!1),S.event.add(e,t,{namespace:!1,handler:function(e){var n,r=se.get(this,t);if(1&e.isTrigger&&this[t]){if(r)(S.event.special[t]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),se.set(this,t,r),this[t](),n=se.get(this,t),se.set(this,t,!1),r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n}else r&&(se.set(this,t,S.event.trigger(r[0],r.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Oe)}})):void 0===se.get(e,t)&&S.event.add(e,t,Oe)}S.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=se.get(e);if(oe(e))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(ge,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(t){return void 0!==S&&S.event.triggered!==t.type?S.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(V)||[""]).length;l--;)d=g=(s=He.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=se.hasData(e)&&se.get(e);if(v&&(u=v.events)){for(l=(t=(t||"").match(V)||[""]).length;l--;)if(d=g=(s=He.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){for(f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&se.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(se.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\s*$/g;function $e(e,t){return j(e,"table")&&j(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Be(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function _e(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function ze(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(se.hasData(e)&&(s=se.get(e).events))for(i in se.remove(t,"handle events"),s)for(n=0,r=s[i].length;n1&&"string"==typeof h&&!v.checkClone&&We.test(h))return e.each((function(i){var o=e.eq(i);g&&(t[0]=h.call(this,i,o.html())),Ue(o,t,n,r)}));if(p&&(o=(i=Le(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=(a=S.map(De(i,"script"),Be)).length;f0&&Ne(a,!u&&De(e,"script")),s},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(oe(n)){if(t=n[se.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[se.expando]=void 0}n[ue.expando]&&(n[ue.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Ve(this,e,!0)},remove:function(e){return Ve(this,e)},text:function(e){return ee(this,(function(e){return void 0===e?S.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ue(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||$e(this,e).appendChild(e)}))},prepend:function(){return Ue(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=$e(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ue(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ue(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(De(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return S.clone(this,e,t)}))},html:function(e){return ee(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ie.test(e)&&!Ae[(Ee.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ct(e,t,n){var r=Qe(e),i=(!v.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Ze(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Ge.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&j(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+lt(e,t,n||(i?"border":"content"),o,r,a)+"px"}function ft(e,t,n,r,i){return new ft.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ze(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=ie(t),u=Ye.test(t),l=e.style;if(u||(t=it(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=de.exec(n))&&i[1]&&(n=xe(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=ie(t);return Ye.test(t)||(t=it(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ze(e,t,r)),"normal"===i&&t in st&&(i=st[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],(function(e,t){S.cssHooks[t]={get:function(e,n,r){if(n)return!ot.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ct(e,t,r):Je(e,at,(function(){return ct(e,t,r)}))},set:function(e,n,r){var i,o=Qe(e),a=!v.scrollboxSize()&&"absolute"===o.position,s=(a||r)&&"border-box"===S.css(e,"boxSizing",!1,o),u=r?lt(e,t,r,s,o):0;return s&&a&&(u-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-lt(e,t,"border",!1,o)-.5)),u&&(i=de.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=S.css(e,t)),ut(0,n,u)}}})),S.cssHooks.marginLeft=et(v.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(Ze(e,"marginLeft"))||e.getBoundingClientRect().left-Je(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),S.each({margin:"",padding:"",border:"Width"},(function(e,t){S.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+he[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(S.cssHooks[e+t].set=ut)})),S.fn.extend({css:function(e,t){return ee(this,(function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Qe(e),i=t.length;a1)}}),S.Tween=ft,ft.prototype={constructor:ft,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=ft.propHooks[this.prop];return e&&e.get?e.get(this):ft.propHooks._default.get(this)},run:function(e){var t,n=ft.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ft.propHooks._default.set(this),this}},ft.prototype.init.prototype=ft.prototype,ft.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[it(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}},ft.propHooks.scrollTop=ft.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=ft.prototype.init,S.fx.step={};var pt,dt,ht=/^(?:toggle|show|hide)$/,gt=/queueHooks$/;function vt(){dt&&(!1===x.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(vt):r.setTimeout(vt,S.fx.interval),S.fx.tick())}function yt(){return r.setTimeout((function(){pt=void 0})),pt=Date.now()}function mt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=he[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function xt(e,t,n){for(var r,i=(bt.tweeners[t]||[]).concat(bt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each((function(){S.removeAttr(this,e)}))}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?wt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&j(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(V);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),wt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=Tt[t]||S.find.attr;Tt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=Tt[a],Tt[a]=i,i=null!=n(e,t,r)?a:null,Tt[a]=o),i}}));var Ct=/^(?:input|select|textarea|button)$/i,kt=/^(?:a|area)$/i;function St(e){return(e.match(V)||[]).join(" ")}function Et(e){return e.getAttribute&&e.getAttribute("class")||""}function jt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(V)||[]}S.fn.extend({prop:function(e,t){return ee(this,S.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[S.propFix[e]||e]}))}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):Ct.test(e.nodeName)||kt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){S.propFix[this.toLowerCase()]=this})),S.fn.extend({addClass:function(e){var t,n,r,i,o,a;return y(e)?this.each((function(t){S(this).addClass(e.call(this,t,Et(this)))})):(t=jt(e)).length?this.each((function(){if(r=Et(this),n=1===this.nodeType&&" "+St(r)+" "){for(o=0;o-1;)n=n.replace(" "+i+" "," ");a=St(n),r!==a&&this.setAttribute("class",a)}})):this:this.attr("class","")},toggleClass:function(e,t){var n,r,i,o,a=typeof e,s="string"===a||Array.isArray(e);return y(e)?this.each((function(n){S(this).toggleClass(e.call(this,n,Et(this),t),t)})):"boolean"==typeof t&&s?t?this.addClass(e):this.removeClass(e):(n=jt(e),this.each((function(){if(s)for(o=S(this),i=0;i-1)return!0;return!1}});var At=/\r/g;S.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=y(e),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,S(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=S.map(i,(function(e){return null==e?"":e+""}))),(t=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))}))):i?(t=S.valHooks[i.type]||S.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(At,""):null==n?"":n:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:St(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],(function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=S.inArray(S(e).val(),t)>-1}},v.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}));var Dt=r.location,Nt={guid:Date.now()},qt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new r.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,(function(e){return e.textContent})).join("\n"):e)),t};var Lt=/^(?:focusinfocus|focusoutblur)$/,Ht=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,i){var o,a,s,u,l,c,f,p,h=[n||x],g=d.call(e,"type")?e.type:e,v=d.call(e,"namespace")?e.namespace.split("."):[];if(a=p=s=n=n||x,3!==n.nodeType&&8!==n.nodeType&&!Lt.test(g+S.event.triggered)&&(g.indexOf(".")>-1&&(v=g.split("."),g=v.shift(),v.sort()),l=g.indexOf(":")<0&&"on"+g,(e=e[S.expando]?e:new S.Event(g,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=v.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),f=S.event.special[g]||{},i||!f.trigger||!1!==f.trigger.apply(n,t))){if(!i&&!f.noBubble&&!m(n)){for(u=f.delegateType||g,Lt.test(u+g)||(a=a.parentNode);a;a=a.parentNode)h.push(a),s=a;s===(n.ownerDocument||x)&&h.push(s.defaultView||s.parentWindow||r)}for(o=0;(a=h[o++])&&!e.isPropagationStopped();)p=a,e.type=o>1?u:f.bindType||g,(c=(se.get(a,"events")||Object.create(null))[e.type]&&se.get(a,"handle"))&&c.apply(a,t),(c=l&&a[l])&&c.apply&&oe(a)&&(e.result=c.apply(a,t),!1===e.result&&e.preventDefault());return e.type=g,i||e.isDefaultPrevented()||f._default&&!1!==f._default.apply(h.pop(),t)||!oe(n)||l&&y(n[g])&&!m(n)&&((s=n[l])&&(n[l]=null),S.event.triggered=g,e.isPropagationStopped()&&p.addEventListener(g,Ht),n[g](),e.isPropagationStopped()&&p.removeEventListener(g,Ht),S.event.triggered=void 0,s&&(n[l]=s)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each((function(){S.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}});var Ot=/\[\]$/,Pt=/\r?\n/g,Mt=/^(?:submit|button|image|reset|file)$/i,Rt=/^(?:input|select|textarea|keygen)/i;function It(e,t,n,r){var i;if(Array.isArray(t))S.each(t,(function(t,i){n||Ot.test(e)?r(e,i):It(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)}));else if(n||"object"!==T(t))r(e,t);else for(i in t)It(e+"["+i+"]",t[i],n,r)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=y(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,(function(){i(this.name,this.value)}));else for(n in e)It(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Rt.test(this.nodeName)&&!Mt.test(e)&&(this.checked||!Se.test(e))})).map((function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,(function(e){return{name:t.name,value:e.replace(Pt,"\r\n")}})):{name:t.name,value:n.replace(Pt,"\r\n")}})).get()}});var Wt=/%20/g,Ft=/#.*$/,$t=/([?&])_=[^&]*/,Bt=/^(.*?):[ \t]*([^\r\n]*)$/gm,_t=/^(?:GET|HEAD)$/,zt=/^\/\//,Xt={},Ut={},Vt="*/".concat("*"),Gt=x.createElement("a");function Yt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(V)||[];if(y(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Qt(e,t,n,r){var i={},o=e===Ut;function a(s){var u;return i[s]=!0,S.each(e[s]||[],(function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)})),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function Jt(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Gt.href=Dt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Dt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Vt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Jt(Jt(e,S.ajaxSettings),t):Jt(S.ajaxSettings,e)},ajaxPrefilter:Yt(Xt),ajaxTransport:Yt(Ut),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var n,i,o,a,s,u,l,c,f,p,d=S.ajaxSetup({},t),h=d.context||d,g=d.context&&(h.nodeType||h.jquery)?S(h):S.event,v=S.Deferred(),y=S.Callbacks("once memory"),m=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Bt.exec(o);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)m[t]=[m[t],e[t]];return this},abort:function(e){var t=e||T;return n&&n.abort(t),k(0,t),this}};if(v.promise(C),d.url=((e||d.url||Dt.href)+"").replace(zt,Dt.protocol+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(V)||[""],null==d.crossDomain){u=x.createElement("a");try{u.href=d.url,u.href=u.href,d.crossDomain=Gt.protocol+"//"+Gt.host!=u.protocol+"//"+u.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=S.param(d.data,d.traditional)),Qt(Xt,d,t,C),l)return C;for(f in(c=S.event&&d.global)&&0==S.active++&&S.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!_t.test(d.type),i=d.url.replace(Ft,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(Wt,"+")):(p=d.url.slice(i.length),d.data&&(d.processData||"string"==typeof d.data)&&(i+=(qt.test(i)?"&":"?")+d.data,delete d.data),!1===d.cache&&(i=i.replace($t,"$1"),p=(qt.test(i)?"&":"?")+"_="+Nt.guid+++p),d.url=i+p),d.ifModified&&(S.lastModified[i]&&C.setRequestHeader("If-Modified-Since",S.lastModified[i]),S.etag[i]&&C.setRequestHeader("If-None-Match",S.etag[i])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Vt+"; q=0.01":""):d.accepts["*"]),d.headers)C.setRequestHeader(f,d.headers[f]);if(d.beforeSend&&(!1===d.beforeSend.call(h,C,d)||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),n=Qt(Ut,d,t,C)){if(C.readyState=1,c&&g.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(s=r.setTimeout((function(){C.abort("timeout")}),d.timeout));try{l=!1,n.send(b,k)}catch(e){if(l)throw e;k(-1,e)}}else k(-1,"No Transport");function k(e,t,a,u){var f,p,x,b,w,T=t;l||(l=!0,s&&r.clearTimeout(s),n=void 0,o=u||"",C.readyState=e>0?4:0,f=e>=200&&e<300||304===e,a&&(b=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(d,C,a)),!f&&S.inArray("script",d.dataTypes)>-1&&S.inArray("json",d.dataTypes)<0&&(d.converters["text script"]=function(){}),b=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(d,b,C,f),f?(d.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(S.lastModified[i]=w),(w=C.getResponseHeader("etag"))&&(S.etag[i]=w)),204===e||"HEAD"===d.type?T="nocontent":304===e?T="notmodified":(T=b.state,p=b.data,f=!(x=b.error))):(x=T,!e&&T||(T="error",e<0&&(e=0))),C.status=e,C.statusText=(t||T)+"",f?v.resolveWith(h,[p,T,C]):v.rejectWith(h,[C,T,x]),C.statusCode(m),m=void 0,c&&g.trigger(f?"ajaxSuccess":"ajaxError",[C,d,f?p:x]),y.fireWith(h,[C,T]),c&&(g.trigger("ajaxComplete",[C,d]),--S.active||S.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],(function(e,t){S[t]=function(e,n,r,i){return y(n)&&(i=i||r,r=n,n=void 0),S.ajax(S.extend({url:e,type:t,dataType:i,data:n,success:r},S.isPlainObject(e)&&e))}})),S.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return y(e)?this.each((function(t){S(this).wrapInner(e.call(this,t))})):this.each((function(){var t=S(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=y(e);return this.each((function(n){S(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){S(this).replaceWith(this.childNodes)})),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(e){}};var Kt={0:200,1223:204},Zt=S.ajaxSettings.xhr();v.cors=!!Zt&&"withCredentials"in Zt,v.ajax=Zt=!!Zt,S.ajaxTransport((function(e){var t,n;if(v.cors||Zt&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(a,i[a]);t=function(e){return function(){t&&(t=n=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Kt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),n=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&r.setTimeout((function(){t&&n()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),S.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),S.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,i){t=S("