1import{i as e,t}from"./jquery-CY-EeEkZ.js";import{n}from"./ModuleRegistry-1bH4USOv.js";import{i as r,r as i}from"./Toast-C-vNzj6O.js";import{n as a,r as o,t as s}from"./ThumbnailEngine-Slv-c0D6.js";var c=e(t()),l,u=class{static loadPostData(e=window.___deferred_posts||{}){if(typeof e!=`object`||Object.keys(e).length===0)return;let t=[];for(let[n,r]of Object.entries(e)){let e=parseInt(n,10);if(!e||!r)continue;let i=o.fromDeferredPosts(e,r,!0);i&&t.push(i)}a.loadDeferredPosts(t),a.recalculateMatchedPosts(),a.updatePostVisibility(),a.updateThumbnailStyles(),this.Logger.log(`Loaded post data`,` 2 ⤷ Processed: `+t.length+` / `+Object.keys(e).length,` 3 ⤷ In cache: `+o.stats().cachedPosts),window.___deferred_posts={}}static renderDTextThumbnails(){let e=0;for(let t of(0,c.default)(`.thumb-placeholder-link`)){let n=(0,c.default)(t),r=n.data(`id`);if(!r)continue;let i=o.get(r);if(!i)continue;let a=s.render(i,{showStatistics:!1,inline:!0,native:!0});a&&(n.replaceWith(a),e++)}let t=(0,c.default)(`.thumb-placeholder-link`).removeClass(`thumb-placeholder-link`);this.Logger.log(`Rendered DText thumbnails`,` 4 ⤷ Count: `+e,` 5 ⤷ Unrendered: `+t.length)}static renderUserAvatars(){let e=0;for(let t of(0,c.default)(`article.thumbnail.avatar.placeholder`)){let n=(0,c.default)(t);if(n.hasClass(`no-render`))continue;let r=n.data(`id`);if(!r)continue;let i=o.get(r);if(!i)continue;let a,l;if(!i.isDeleted&&n.data(`has-cropped-avatar`)){let e=n.data(`user-id`)||`0`,t=n.data(`user-hash`)||`0`;a=`/data/avatars/${e}.jpg?t=${t}`,l=`/data/avatars/${e}.webp?t=${t}`}let u=s.render(i,{showStatistics:!1,showTypeBadges:!1,inline:!0,jpegUrl:a,webpUrl:l,classes:`avatar`});u&&(n.data(`initial`)&&u.find(`a.thm-link`).attr(`data-initial`,n.data(`initial`)),n.replaceWith(u),e++)}this.Logger.log(`Rendered avatars`,` 6 ⤷ Count: `+e)}};l=u,l.Logger=new n(`Deferred`),(0,c.default)(()=>{u.loadPostData(),u.renderDTextThumbnails(),u.renderUserAvatars(),(0,c.default)(window).on(`e621:add_deferred_posts`,(e,t)=>{u.loadPostData(t),u.renderDTextThumbnails(),u.renderUserAvatars()})});var d,f=class e{constructor(e){this.isVueComponent=!1,this.created=!1,this._definedStates=[`write`,`preview`],this._parsedInputCache=null,this.Logger=new n(`DText`),this.$wrapper=e,this.$textarea=e.find(`textarea.dtext-formatter-input`),this.allowColor=e.data(`color`)||!1,this.characterLimit=e.data(`limit`)||null,e.data(`instance`,this),this.isVueComponent=this.$textarea.hasClass(`dtext-vue`),this.create()}create(){if(this.created)return;let e=this.buildTabButtons(),t=this.buildFormattingButtons(),n=this.buildPreviewArea(),r=this.buildCounterArea();this.$wrapper.append([e,t,n,r]).removeClass(`pending`),this.created=!0}destroy(){this.created&&(this._parsedInputCache=null,this.$textarea.off(`input.dtext_formatter`),this.$wrapper.find(`.dtext-formatter-footer`).remove(),this.$wrapper.find(`.dtext-formatter-preview`).remove(),this.$wrapper.find(`.dtext-formatter-buttons`).remove(),this.$wrapper.find(`.dtext-formatter-tabs`).remove(),this.$wrapper.removeAttr(`data-state`),this.$wrapper.addClass(`pending`),this.created=!1)}buildTabButtons(){let e=(0,c.default)(`<div>`).addClass(`dtext-formatter-tabs`).on(`click`,`button.dtext-formatter-tab`,e=>{this.state=(0,c.default)(e.currentTarget).attr(`action`)});for(let t of[`Write`,`Preview`])(0,c.default)(`<button>`).addClass(`dtext-formatter-tab`).text(t).attr({type:`button`,action:t.toLowerCase()}).appendTo(e);return e}buildFormattingButtons(){let t=(0,c.default)(`<div>`).addClass(`dtext-formatter-buttons`).on(`click`,`button.dtext-formatter-button`,e=>{this.handleFormattingButtonClick((0,c.default)(e.currentTarget))});for(let n of e.ButtonOrder){if(n===null){(0,c.default)(`<div>`).addClass(`dtext-formatter-button-separator`).appendTo(t);continue}let i=e.ButtonDefinitions[n];i&&(0,c.default)(`<button>`).addClass(`dtext-formatter-button`).attr({type:`button`,title:i.title,"data-dtext":i.dtext,"aria-label":i.title}).appendTo(t).append(r.render(i.icon))}return t}handleFormattingButtonClick(e){var t,n;let r=e.data(`dtext`);if(!r||typeof r!=`string`)return;let i=this.$textarea.get(0);if(!i||typeof i.setSelectionRange!=`function`)return;let a=Math.max(0,(t=i.selectionStart)==null?0:t),o=Math.max(a,(n=i.selectionEnd)==null?0:n),s=this.$textarea.val(),c=s.substring(a,o),l=r.replace(`%selection%`,c),u=s.substring(0,a)+l+s.substring(o);this.$textarea.val(u);let d=r.indexOf(`%selection%`);if(d!==-1){let e=a+d,t=e+c.length;i.setSelectionRange(e,t)}else{let e=a+l.length;i.setSelectionRange(e,e)}this.isVueComponent&&this.triggerVueCompatibleEvent(this.$textarea),this.$textarea.trigger(`input.dtext_formatter`).focus()}triggerVueCompatibleEvent(e){e[0].dispatchEvent(new Event(`input`,{bubbles:!0}))}buildPreviewArea(){return this.$preview=(0,c.default)(`<div>`).addClass(`dtext-formatter-preview`),this.$preview}buildCounterArea(){let e=(0,c.default)(`<div>`).addClass(`dtext-formatter-footer`);(0,c.default)(`<span>`).addClass(`dtext-formatter-hint`).html(`<a href="/help/dtext" target="_blank" rel="noopener" tabindex="-1">DText</a> formatting supported.`).appendTo(e);let t=(0,c.default)(`<span>`).addClass(`dtext-formatter-counter`).appendTo(e);return this.$textarea.on(`input.dtext_formatter`,()=>{let e=this.$textarea.val().length;t.text(this.characterLimit?`${e} / ${this.characterLimit}`:`${e}`)}),this.$textarea.val().length>0&&this.$textarea.trigger(`input.dtext_formatter`),e}get state(){return this.$wrapper.attr(`data-state`)||`write`}set state(e){this._definedStates.includes(e)&&(this.$wrapper.attr(`data-state`,e),e===`preview`?(this.$preview.height(this.$textarea.height()),this.updatePreview()):(this.$textarea.height(this.$preview.height()),this.$preview.attr(`loading`,`false`)))}async updatePreview(){if(!this.$preview)return;let e=this.$textarea.val().trim();if(!e){this.$preview.empty(),this._parsedInputCache=null;return}if(this._parsedInputCache===e)return;this._parsedInputCache=e;let t=o.prune(this.$preview.find(`article.thumbnail`));this.Logger.log(`Pruned ${t} thumbnails from preview.`),this.$preview.html(``).attr(`loading`,`true`),i.add(()=>{c.default.ajax(`/dtext_preview.json`,{type:`post`,dataType:`json`,data:{body:e,allow_color:this.allowColor},success:t=>{this.Logger.log(`Preview response received`,t),!(this.$preview.attr(`loading`)!==`true`||this._parsedInputCache!==e)&&(this.$preview.attr(`loading`,`false`).html(t.html),u.loadPostData(t.posts),u.renderDTextThumbnails())}
6,error:(e,t,n)=>{console.error(`DText preview error:`,n),this.$preview.attr(`loading`,`false`).text(`Unable to fetch DText preview.`),this._parsedInputCache=null}})},{name:`DText.update_preview`})}static buildFromTextarea(t){let n=(0,c.default)(`<div>`).addClass(`dtext-formatter pending`).attr({"data-color":t.data(`color`)||!1,"data-limit":t.data(`limit`)||null}).insertAfter(t);return t.addClass(`dtext-formatter-input`).appendTo(n),new e(n)}};d=f,d.ButtonDefinitions={bold:{dtext:`[b]%selection%[/b]`,icon:`bold`,title:`Bold`},italic:{dtext:`[i]%selection%[/i]`,icon:`italic`,title:`Italic`},underline:{dtext:`[u]%selection%[/u]`,icon:`underline`,title:`Underline`},strikethrough:{dtext:`[s]%selection%[/s]`,icon:`strikethrough`,title:`Strikethrough`},heading:{dtext:`h2. %selection%`,icon:`heading`,title:`Heading`},spoiler:{dtext:`[spoiler]%selection%[/spoiler]`,icon:`spoiler`,title:`Spoiler`},code:{dtext:`[code]%selection%[/code]`,icon:`code`,title:`Code`},quote:{dtext:`[quote]%selection%[/quote]`,icon:`quote`,title:`Quote`}},d.ButtonOrder=[`bold`,`italic`,`underline`,`strikethrough`,null,`heading`,`spoiler`,`code`,`quote`];export{u as n,f as t};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.