ghost 5.23.0 → 5.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/components/{tryghost-adapter-manager-5.23.0.tgz → tryghost-adapter-manager-5.24.0.tgz} +0 -0
  2. package/components/{tryghost-api-framework-5.23.0.tgz → tryghost-api-framework-5.24.0.tgz} +0 -0
  3. package/components/{tryghost-api-version-compatibility-service-5.23.0.tgz → tryghost-api-version-compatibility-service-5.24.0.tgz} +0 -0
  4. package/components/tryghost-audience-feedback-5.24.0.tgz +0 -0
  5. package/components/{tryghost-bootstrap-socket-5.23.0.tgz → tryghost-bootstrap-socket-5.24.0.tgz} +0 -0
  6. package/components/{tryghost-constants-5.23.0.tgz → tryghost-constants-5.24.0.tgz} +0 -0
  7. package/components/{tryghost-custom-theme-settings-service-5.23.0.tgz → tryghost-custom-theme-settings-service-5.24.0.tgz} +0 -0
  8. package/components/{tryghost-data-generator-5.23.0.tgz → tryghost-data-generator-5.24.0.tgz} +0 -0
  9. package/components/tryghost-domain-events-5.24.0.tgz +0 -0
  10. package/components/{tryghost-email-analytics-provider-mailgun-5.23.0.tgz → tryghost-email-analytics-provider-mailgun-5.24.0.tgz} +0 -0
  11. package/components/tryghost-email-analytics-service-5.24.0.tgz +0 -0
  12. package/components/tryghost-email-content-generator-5.24.0.tgz +0 -0
  13. package/components/tryghost-email-events-5.24.0.tgz +0 -0
  14. package/components/tryghost-email-service-5.24.0.tgz +0 -0
  15. package/components/{tryghost-email-suppression-list-5.23.0.tgz → tryghost-email-suppression-list-5.24.0.tgz} +0 -0
  16. package/components/tryghost-express-dynamic-redirects-5.24.0.tgz +0 -0
  17. package/components/tryghost-extract-api-key-5.24.0.tgz +0 -0
  18. package/components/{tryghost-html-to-plaintext-5.23.0.tgz → tryghost-html-to-plaintext-5.24.0.tgz} +0 -0
  19. package/components/{tryghost-job-manager-5.23.0.tgz → tryghost-job-manager-5.24.0.tgz} +0 -0
  20. package/components/tryghost-link-redirects-5.24.0.tgz +0 -0
  21. package/components/tryghost-link-replacer-5.24.0.tgz +0 -0
  22. package/components/tryghost-link-tracking-5.24.0.tgz +0 -0
  23. package/components/{tryghost-magic-link-5.23.0.tgz → tryghost-magic-link-5.24.0.tgz} +0 -0
  24. package/components/tryghost-mailgun-client-5.24.0.tgz +0 -0
  25. package/components/{tryghost-member-attribution-5.23.0.tgz → tryghost-member-attribution-5.24.0.tgz} +0 -0
  26. package/components/tryghost-member-events-5.24.0.tgz +0 -0
  27. package/components/tryghost-members-api-5.24.0.tgz +0 -0
  28. package/components/{tryghost-members-csv-5.23.0.tgz → tryghost-members-csv-5.24.0.tgz} +0 -0
  29. package/components/tryghost-members-events-service-5.24.0.tgz +0 -0
  30. package/components/tryghost-members-importer-5.24.0.tgz +0 -0
  31. package/components/{tryghost-members-offers-5.23.0.tgz → tryghost-members-offers-5.24.0.tgz} +0 -0
  32. package/components/{tryghost-members-payments-5.23.0.tgz → tryghost-members-payments-5.24.0.tgz} +0 -0
  33. package/components/{tryghost-members-ssr-5.23.0.tgz → tryghost-members-ssr-5.24.0.tgz} +0 -0
  34. package/components/{tryghost-members-stripe-service-5.23.0.tgz → tryghost-members-stripe-service-5.24.0.tgz} +0 -0
  35. package/components/tryghost-minifier-5.24.0.tgz +0 -0
  36. package/components/tryghost-mw-api-version-mismatch-5.24.0.tgz +0 -0
  37. package/components/tryghost-mw-cache-control-5.24.0.tgz +0 -0
  38. package/components/tryghost-mw-error-handler-5.24.0.tgz +0 -0
  39. package/components/tryghost-mw-session-from-token-5.24.0.tgz +0 -0
  40. package/components/tryghost-mw-update-user-last-seen-5.24.0.tgz +0 -0
  41. package/components/tryghost-mw-vhost-5.24.0.tgz +0 -0
  42. package/components/tryghost-oembed-service-5.24.0.tgz +0 -0
  43. package/components/tryghost-package-json-5.24.0.tgz +0 -0
  44. package/components/tryghost-referrers-5.24.0.tgz +0 -0
  45. package/components/{tryghost-security-5.23.0.tgz → tryghost-security-5.24.0.tgz} +0 -0
  46. package/components/{tryghost-session-service-5.23.0.tgz → tryghost-session-service-5.24.0.tgz} +0 -0
  47. package/components/tryghost-settings-path-manager-5.24.0.tgz +0 -0
  48. package/components/tryghost-staff-service-5.24.0.tgz +0 -0
  49. package/components/{tryghost-stats-service-5.23.0.tgz → tryghost-stats-service-5.24.0.tgz} +0 -0
  50. package/components/{tryghost-tiers-5.23.0.tgz → tryghost-tiers-5.24.0.tgz} +0 -0
  51. package/components/{tryghost-update-check-service-5.23.0.tgz → tryghost-update-check-service-5.24.0.tgz} +0 -0
  52. package/components/tryghost-verification-trigger-5.24.0.tgz +0 -0
  53. package/components/tryghost-version-notifications-data-service-5.24.0.tgz +0 -0
  54. package/core/boot.js +2 -0
  55. package/core/built/admin/assets/{chunk.143.3dccaccd501e94a38af6.js → chunk.143.dd395a3e804fef2c3b21.js} +14 -14
  56. package/core/built/admin/assets/{chunk.178.f3466350ec3bacc7baa6.js → chunk.178.ec67ba4dc75bcec75c6f.js} +4 -4
  57. package/core/built/admin/assets/chunk.507.71dd4bfc4ccb354cc629.js +267 -0
  58. package/core/built/admin/assets/{chunk.613.695f31829550fb00d43c.js → chunk.613.6bbcc18224567657fc2e.js} +3089 -3074
  59. package/core/built/admin/assets/{chunk.613.695f31829550fb00d43c.js.LICENSE.txt → chunk.613.6bbcc18224567657fc2e.js.LICENSE.txt} +0 -0
  60. package/core/built/admin/assets/{ghost-64c5f32d4052347eed1ae73909b526ef.js → ghost-34bc21923675def87aa2516f72ca15d7.js} +99 -98
  61. package/core/built/admin/assets/{ghost-dark-681daaaef962911f5bcfdd51d7b4efdd.css → ghost-dark-a2076b08f23a9e6340072bc7b06ec9e7.css} +1 -1
  62. package/core/built/admin/assets/{ghost-bbf3150c788d19852f14fc518b8ebb93.css → ghost-f428683b68c0eea9042acc7c021641e0.css} +1 -1
  63. package/core/built/admin/assets/{vendor-45c4a02c5360deeb66a0438a8bc7c18e.js → vendor-04415b2b8a59aa9567dfa5d819ada71c.js} +315 -307
  64. package/core/built/admin/index.html +6 -6
  65. package/core/cli/record-test.js +47 -0
  66. package/core/frontend/apps/amp/lib/helpers/amp_content.js +5 -1
  67. package/core/server/api/endpoints/email-previews.js +10 -2
  68. package/core/server/api/endpoints/emails.js +20 -14
  69. package/core/server/data/importer/email-template.js +2 -2
  70. package/core/server/data/importer/import-manager.js +2 -1
  71. package/core/server/data/migrations/versions/5.24/2022-11-21-09-32-add-source-columns-to-emails-table.js +17 -0
  72. package/core/server/data/migrations/versions/5.24/2022-11-21-15-03-populate-source-column-with-html-for-emails.js +19 -0
  73. package/core/server/data/migrations/versions/5.24/2022-11-21-15-57-add-error-columns-for-email-batches.js +22 -0
  74. package/core/server/data/schema/schema.js +11 -0
  75. package/core/server/models/email.js +2 -1
  76. package/core/server/services/email-service/index.js +3 -0
  77. package/core/server/services/email-service/wrapper.js +64 -0
  78. package/core/server/services/email-suppression-list/service.js +11 -5
  79. package/core/server/services/mega/mega.js +16 -2
  80. package/core/server/services/members/middleware.js +18 -2
  81. package/core/server/services/members/service.js +1 -1
  82. package/core/server/services/members/utils.js +7 -0
  83. package/core/server/services/posts/posts-service.js +19 -6
  84. package/core/server/web/members/app.js +12 -9
  85. package/core/shared/sentry.js +25 -3
  86. package/ghost.js +1 -0
  87. package/package.json +108 -105
  88. package/playwright.config.js +19 -8
  89. package/yarn.lock +237 -277
  90. package/components/tryghost-audience-feedback-5.23.0.tgz +0 -0
  91. package/components/tryghost-domain-events-5.23.0.tgz +0 -0
  92. package/components/tryghost-email-analytics-service-5.23.0.tgz +0 -0
  93. package/components/tryghost-email-content-generator-5.23.0.tgz +0 -0
  94. package/components/tryghost-express-dynamic-redirects-5.23.0.tgz +0 -0
  95. package/components/tryghost-extract-api-key-5.23.0.tgz +0 -0
  96. package/components/tryghost-link-redirects-5.23.0.tgz +0 -0
  97. package/components/tryghost-link-replacer-5.23.0.tgz +0 -0
  98. package/components/tryghost-link-tracking-5.23.0.tgz +0 -0
  99. package/components/tryghost-mailgun-client-5.23.0.tgz +0 -0
  100. package/components/tryghost-member-events-5.23.0.tgz +0 -0
  101. package/components/tryghost-members-api-5.23.0.tgz +0 -0
  102. package/components/tryghost-members-events-service-5.23.0.tgz +0 -0
  103. package/components/tryghost-members-importer-5.23.0.tgz +0 -0
  104. package/components/tryghost-minifier-5.23.0.tgz +0 -0
  105. package/components/tryghost-mw-api-version-mismatch-5.23.0.tgz +0 -0
  106. package/components/tryghost-mw-cache-control-5.23.0.tgz +0 -0
  107. package/components/tryghost-mw-error-handler-5.23.0.tgz +0 -0
  108. package/components/tryghost-mw-session-from-token-5.23.0.tgz +0 -0
  109. package/components/tryghost-mw-update-user-last-seen-5.23.0.tgz +0 -0
  110. package/components/tryghost-mw-vhost-5.23.0.tgz +0 -0
  111. package/components/tryghost-oembed-service-5.23.0.tgz +0 -0
  112. package/components/tryghost-package-json-5.23.0.tgz +0 -0
  113. package/components/tryghost-referrers-5.23.0.tgz +0 -0
  114. package/components/tryghost-settings-path-manager-5.23.0.tgz +0 -0
  115. package/components/tryghost-staff-service-5.23.0.tgz +0 -0
  116. package/components/tryghost-verification-trigger-5.23.0.tgz +0 -0
  117. package/components/tryghost-version-notifications-data-service-5.23.0.tgz +0 -0
  118. package/core/built/admin/assets/chunk.174.3a133d51d9b45097c101.js +0 -245
@@ -710,13 +710,13 @@ function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0
710
710
  const r=Ember.HTMLBars.template({id:"PrMKoXEs",block:'{"symbols":[],"statements":[[10,"input"],[14,0,"gh-input gh-input-file q"],[14,"data-url","upload"],[14,3,"importfile"],[15,"accept",[31,[[32,0,["acceptEncoding"]]]]],[14,4,"file"],[12],[13],[2,"\\n"],[11,"button"],[24,1,"startupload"],[24,0,"gh-btn gh-btn-hover-blue"],[16,"disabled",[32,0,["uploadButtonDisabled"]]],[24,4,"submit"],[4,[38,0],[[32,0],"upload"],null],[12],[2,"\\n "],[10,"span"],[12],[1,[32,0,["uploadButtonText"]]],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["action"]}',moduleName:"ghost-admin/components/gh-file-upload.hbs"})
711
711
  let a=(t=Ember._action,i=class extends Ember.Component{constructor(){super(...arguments),n(this,"_file",null),n(this,"acceptEncoding",null),n(this,"uploadButtonText","Text"),n(this,"uploadButtonDisabled",!0),n(this,"shouldResetForm",!0)}onUpload(){}onAdd(){}upload(){!this.uploadButtonDisabled&&this._file&&this.onUpload(this._file),this.set("uploadButtonDisabled",!0),this.shouldResetForm&&this.element.closest("form").reset()}change(e){this.set("uploadButtonDisabled",!1),this.onAdd(),this._file=e.target.files[0]}},s=i.prototype,o="upload",l=[t],u=Object.getOwnPropertyDescriptor(i.prototype,"upload"),c=i.prototype,d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=l.slice().reverse().reduce((function(e,t){return t(s,o,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,o,d),d=null),i)
712
712
  var s,o,l,u,c,d
713
- e.default=a,Ember._setComponentTemplate(r,a)})),define("ghost-admin/components/gh-file-uploader",["exports","ghost-admin/services/ajax"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
714
- const i=Ember.HTMLBars.template({id:"RUBc85Dc",block:'{"symbols":[],"statements":[[6,[37,1],[[32,0,["file"]]],null,[["default","else"],[{"statements":[[6,[37,1],[[32,0,["failureMessage"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"failed"],[12],[2,"\\n "],[1,[32,0,["failureMessage"]]],[2,"\\n "],[8,"gh-file-input",[[24,0,"try-again"]],[["@multiple","@alt","@action","@accept"],[false,[32,0,["labelText"]],[30,[36,0],[[32,0],"retry"],null],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[14,0,"red fw5 nl1"],[12],[2,"Try again"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"progress"],[12],[2,"\\n "],[10,"div"],[14,0,"bar"],[15,5,[32,0,["progressStyle"]]],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"upload-form"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@alt","@action","@accept"],[false,[32,0,["labelText"]],[30,[36,0],[[32,0],"fileSelected"],null],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"description"],[12],[1,[32,0,["labelText"]]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["action","if"]}',moduleName:"ghost-admin/components/gh-file-uploader.hbs"}),n={accept:["text/csv"],extensions:["csv"]}
715
- var r=Ember._setComponentTemplate(i,Ember.Component.extend({ajax:Ember.inject.service(),eventBus:Ember.inject.service(),notifications:Ember.inject.service(),tagName:"section",classNames:["gh-image-uploader"],classNameBindings:["dragClass"],labelText:"Select or drag-and-drop a file",url:null,paramName:"file",accept:null,extensions:null,validate:null,file:null,response:null,dragClass:null,failureMessage:null,uploadPercentage:0,fileSelected:()=>{},uploadStarted:()=>{},uploadFinished:()=>{},uploadSuccess:()=>{},uploadFailed:()=>{},formData:Ember.computed("file",(function(){let e=this.paramName,t=this.file,i=new FormData
713
+ e.default=a,Ember._setComponentTemplate(r,a)})),define("ghost-admin/components/gh-file-uploader",["exports","ghost-admin/services/notifications","ghost-admin/services/ajax"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
714
+ const n=Ember.HTMLBars.template({id:"RUBc85Dc",block:'{"symbols":[],"statements":[[6,[37,1],[[32,0,["file"]]],null,[["default","else"],[{"statements":[[6,[37,1],[[32,0,["failureMessage"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"failed"],[12],[2,"\\n "],[1,[32,0,["failureMessage"]]],[2,"\\n "],[8,"gh-file-input",[[24,0,"try-again"]],[["@multiple","@alt","@action","@accept"],[false,[32,0,["labelText"]],[30,[36,0],[[32,0],"retry"],null],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[14,0,"red fw5 nl1"],[12],[2,"Try again"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"progress"],[12],[2,"\\n "],[10,"div"],[14,0,"bar"],[15,5,[32,0,["progressStyle"]]],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"upload-form"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@alt","@action","@accept"],[false,[32,0,["labelText"]],[30,[36,0],[[32,0],"fileSelected"],null],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"description"],[12],[1,[32,0,["labelText"]]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["action","if"]}',moduleName:"ghost-admin/components/gh-file-uploader.hbs"}),r={accept:["text/csv"],extensions:["csv"]}
715
+ var a=Ember._setComponentTemplate(n,Ember.Component.extend({ajax:Ember.inject.service(),eventBus:Ember.inject.service(),notifications:Ember.inject.service(),tagName:"section",classNames:["gh-image-uploader"],classNameBindings:["dragClass"],labelText:"Select or drag-and-drop a file",url:null,paramName:"file",accept:null,extensions:null,validate:null,file:null,response:null,dragClass:null,failureMessage:null,uploadPercentage:0,fileSelected:()=>{},uploadStarted:()=>{},uploadFinished:()=>{},uploadSuccess:()=>{},uploadFailed:()=>{},formData:Ember.computed("file",(function(){let e=this.paramName,t=this.file,i=new FormData
716
716
  return i.append(e,t),i})),progressStyle:Ember.computed("uploadPercentage",(function(){let e=this.uploadPercentage,t=""
717
717
  return t=e>0?`${e}%`:"0",Ember.String.htmlSafe(`width: ${t}`)})),init(){this._super(...arguments)
718
718
  let e=this.listenTo
719
- this.accept=this.accept||n.accept,this.extensions=this.extensions||n.extensions,this._uploadEventHandler=function(e){e&&this.set("file",e),this.send("upload")},e&&this.eventBus.subscribe(`${e}:upload`,this,this._uploadEventHandler)},didReceiveAttrs(){this._super(...arguments)
719
+ this.accept=this.accept||r.accept,this.extensions=this.extensions||r.extensions,this._uploadEventHandler=function(e){e&&this.set("file",e),this.send("upload")},e&&this.eventBus.subscribe(`${e}:upload`,this,this._uploadEventHandler)},didReceiveAttrs(){this._super(...arguments)
720
720
  let e=this.accept,t=this.extensions
721
721
  this._accept=Ember.isBlank(e)||Ember.isArray(e)?e:e.split(","),this._extensions=Ember.isBlank(t)||Ember.isArray(t)?t:t.split(",")},willDestroyElement(){let e=this.listenTo
722
722
  this._super(...arguments),e&&this.eventBus.unsubscribe(`${e}:upload`,this,this._uploadEventHandler)},actions:{fileSelected(e,t){let[i]=Array.from(e),n=this._validate(i)
@@ -724,9 +724,9 @@ this.set("file",i),this.fileSelected(i),!0===n?Ember.run.schedule("actions",this
724
724
  e.dataTransfer.dropEffect="move"===t||"linkMove"===t?"move":"copy"}e.stopPropagation(),e.preventDefault(),this.set("dragClass","-drag-over")}},dragLeave(e){e.preventDefault(),this.set("dragClass",null)},drop(e){e.preventDefault(),this.set("dragClass",null),e.dataTransfer.files&&this.send("fileSelected",e.dataTransfer.files)},generateRequest(){let e=this.ajax,t=this.formData,i=this.url
725
725
  this.uploadStarted(),e.post(i,{data:t,processData:!1,contentType:!1,dataType:"text",xhr:()=>{let e=new window.XMLHttpRequest
726
726
  return e.upload.addEventListener("progress",(e=>{this._uploadProgress(e)}),!1),e}}).then((e=>{this._uploadSuccess(JSON.parse(e))})).catch((e=>{this._uploadFailed(e)})).finally((()=>{this.uploadFinished()}))},_uploadProgress(e){!e.lengthComputable||this.isDestroyed||this.isDestroying||Ember.run((()=>{let t=Math.round(e.loaded/e.total*100)
727
- this.set("uploadPercentage",t)}))},_uploadSuccess(e){this.uploadSuccess(e),this.send("reset")},_uploadFailed(e){let i;(0,t.isVersionMismatchError)(e)&&this.notifications.showAPIError(e),i=(0,t.isUnsupportedMediaTypeError)(e)?"The file type you uploaded is not supported.":(0,t.isRequestEntityTooLargeError)(e)?"The file you uploaded was larger than the maximum file size your server allows.":e.payload&&e.payload.errors&&!Ember.isBlank(e.payload.errors[0].message)?Ember.String.htmlSafe(e.payload.errors[0].message):"Something went wrong :(",this.set("failureMessage",i),this.uploadFailed(e)},_validate(e){return this.validate?this.validate(e):this._defaultValidator(e)},_defaultValidator(e){let[,i]=/(?:\.([^.]+))?$/.exec(e.name),n=this._extensions
728
- return!(!i||-1===n.indexOf(i.toLowerCase()))||new t.UnsupportedMediaTypeError}}))
729
- e.default=r})),define("ghost-admin/components/gh-font-selector",["exports","@glimmer/component"],(function(e,t){var i,n
727
+ this.set("uploadPercentage",t)}))},_uploadSuccess(e){this.uploadSuccess(e),this.send("reset")},_uploadFailed(e){let n;(0,i.isVersionMismatchError)(e)&&this.notifications.showAPIError(e),(0,i.isUnsupportedMediaTypeError)(e)?n="The file type you uploaded is not supported.":(0,i.isRequestEntityTooLargeError)(e)?n="The file you uploaded was larger than the maximum file size your server allows.":e.payload&&e.payload.errors&&!Ember.isBlank(e.payload.errors[0].message)?n=Ember.String.htmlSafe(e.payload.errors[0].message):(console.error(e),n=t.GENERIC_ERROR_MESSAGE),this.set("failureMessage",n),this.uploadFailed(e)},_validate(e){return this.validate?this.validate(e):this._defaultValidator(e)},_defaultValidator(e){let[,t]=/(?:\.([^.]+))?$/.exec(e.name),n=this._extensions
728
+ return!(!t||-1===n.indexOf(t.toLowerCase()))||new i.UnsupportedMediaTypeError}}))
729
+ e.default=a})),define("ghost-admin/components/gh-font-selector",["exports","@glimmer/component"],(function(e,t){var i,n
730
730
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
731
731
  const r=Ember.HTMLBars.template({id:"PVCdVgGU",block:'{"symbols":["option"],"statements":[[8,"power-select",[],[["@options","@selected","@onChange","@disabled","@renderInPlace","@triggerClass","@dropdownClass"],[[32,0,["options"]],[32,0,["selectedOption"]],[32,0,["selectOption"]],[30,[36,0],[[32,0,["settings","membersSignupAccess"]],"none"],null],true,"gh-setting-dropdown","gh-setting-dropdown-list"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[15,0,[31,["gh-radio-label ",[30,[36,1],[[32,1,["value"]]],null]]]],[12],[2,"\\n "],[10,"div"],[14,0,"description"],[12],[2,"\\n "],[10,"h4"],[12],[1,[32,1,["name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["eq","dasherize"]}',moduleName:"ghost-admin/components/gh-font-selector.hbs"})
732
732
  let a=(i=Ember._action,n=class extends t.default{get options(){return[{name:"Elegant serif",description:"Beautiful lines with great readability",value:"serif"},{name:"Clean sans-serif",description:"A more minimal style with sharp lines",value:"sans_serif"}]}get selectedOption(){return this.options.find((e=>e.value===this.args.selected))}selectOption(e){this.args.onChange(e.value)}},s=n.prototype,o="selectOption",l=[i],u=Object.getOwnPropertyDescriptor(n.prototype,"selectOption"),c=n.prototype,d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=l.slice().reverse().reduce((function(e,t){return t(s,o,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,o,d),d=null),n)
@@ -745,21 +745,21 @@ return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumera
745
745
  const l=Ember.HTMLBars.template({id:"Lp0HjOlk",block:'{"symbols":["&attrs","@html"],"statements":[[11,"div"],[17,1],[4,[38,0],[[32,0,["replaceIframeContents"]]],null],[4,[38,1],[[32,0,["replaceIframeContents"]],[32,2]],null],[12],[2,"\\n "],[11,"iframe"],[24,0,"w-100 h-100"],[4,[38,0],[[32,0,["registerIframe"]]],null],[4,[38,2],["load",[32,0,["didLoad"]]],null],[12],[13],[2,"\\n "],[11,"iframe"],[24,0,"w-100 h-100"],[4,[38,0],[[32,0,["registerIframe"]]],null],[4,[38,2],["load",[32,0,["didLoad"]]],null],[12],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["did-insert","did-update","on"]}',moduleName:"ghost-admin/components/gh-html-iframe.hbs"})
746
746
  let u=(i=Ember._action,n=Ember._action,r=Ember._action,a=class extends t.default{constructor(){super(...arguments),s(this,"iframes",[]),s(this,"renderedIframe",0),s(this,"toRenderIframe",1)}get hiddenIframeStyle(){return"position: absolute; visibility: hidden; border: none;"}get visibleIframeStyle(){return"border: none;"}replaceIframeContents(){const e=this.iframes[this.toRenderIframe]
747
747
  e&&this.args.html&&(e.contentWindow.document.open(),e.contentWindow.document.write(this.args.html),e.contentWindow.document.close(),this.swapTimeout=setTimeout((()=>{this.swapIframes(e)}),500))}registerIframe(e){this.iframes.push(e),0===this.iframes.indexOf(e)&&(e.style=this.visibleIframeStyle,this.replaceIframeContents()),1===this.iframes.indexOf(e)&&(e.style=this.hiddenIframeStyle)}didLoad(e){this.isDestroyed||this.isDestroying||this.swapIframes(e.target)}swapIframes(e){if(!this.isDestroyed&&!this.isDestroying&&(window.clearTimeout(this.swapTimeout),this.iframes.indexOf(e)!==this.renderedIframe)){let e=this.iframes[this.renderedIframe].contentDocument.body.scrollTop
748
- this._lastPageId!==this.args.pageId&&(e=0),this._lastPageId=this.args.pageId,this.iframes[this.toRenderIframe].contentDocument.body.scrollTop=e,this.iframes[this.toRenderIframe].style=this.visibleIframeStyle,this.renderedIframe=this.toRenderIframe,this.toRenderIframe=0===this.toRenderIframe?1:0,this.iframes[this.toRenderIframe].style=this.hiddenIframeStyle}}},o(a.prototype,"replaceIframeContents",[i],Object.getOwnPropertyDescriptor(a.prototype,"replaceIframeContents"),a.prototype),o(a.prototype,"registerIframe",[n],Object.getOwnPropertyDescriptor(a.prototype,"registerIframe"),a.prototype),o(a.prototype,"didLoad",[r],Object.getOwnPropertyDescriptor(a.prototype,"didLoad"),a.prototype),a)
748
+ this._lastPageId!==this.args.pageId&&(e=0),this._lastPageId=this.args.pageId,this.iframes[this.toRenderIframe].contentDocument.body&&(this.iframes[this.toRenderIframe].contentDocument.body.scrollTop=e),this.iframes[this.toRenderIframe].style=this.visibleIframeStyle,this.renderedIframe=this.toRenderIframe,this.toRenderIframe=0===this.toRenderIframe?1:0,this.iframes[this.toRenderIframe].style=this.hiddenIframeStyle}}},o(a.prototype,"replaceIframeContents",[i],Object.getOwnPropertyDescriptor(a.prototype,"replaceIframeContents"),a.prototype),o(a.prototype,"registerIframe",[n],Object.getOwnPropertyDescriptor(a.prototype,"registerIframe"),a.prototype),o(a.prototype,"didLoad",[r],Object.getOwnPropertyDescriptor(a.prototype,"didLoad"),a.prototype),a)
749
749
  e.default=u,Ember._setComponentTemplate(l,u)})),define("ghost-admin/components/gh-image-uploader-with-preview",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
750
750
  const t=Ember.HTMLBars.template({id:"dgJDQBjV",block:'{"symbols":["@text","@altText","@allowUnsplash","@update","@uploadStarted","@uploadFinished","@image","@remove"],"statements":[[6,[37,4],[[32,7]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-image-uploader -with-image"],[12],[2,"\\n "],[10,"div"],[12],[10,"img"],[15,"src",[32,7]],[12],[13],[13],[2,"\\n "],[11,"a"],[24,0,"image-delete"],[24,"title","Delete"],[4,[38,2],["click",[30,[36,1],[[32,8],""],null]],null],[12],[2,"\\n "],[1,[30,[36,3],["trash"],null]],[2,"\\n "],[10,"span"],[14,0,"hidden"],[12],[2,"Delete"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"gh-image-uploader",[],[["@text","@altText","@allowUnsplash","@update","@uploadStarted","@uploadFinished"],[[32,1],[32,2],[32,3],[32,4],[30,[36,0],[[32,5]],null],[30,[36,0],[[32,6]],null]]],null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["optional","fn","on","svg-jar","if"]}',moduleName:"ghost-admin/components/gh-image-uploader-with-preview.hbs"})
751
751
  var i=Ember._setComponentTemplate(t,Ember._templateOnlyComponent())
752
- e.default=i})),define("ghost-admin/components/gh-image-uploader",["exports","ghost-admin/utils/ghost-paths","ghost-admin/services/ajax","ghost-admin/decorators/inject"],(function(e,t,i,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.IMAGE_PARAMS=e.IMAGE_MIME_TYPES=e.IMAGE_EXTENSIONS=e.ICON_PARAMS=e.ICON_MIME_TYPES=e.ICON_EXTENSIONS=void 0
753
- const r=Ember.HTMLBars.template({id:"uoI/bA/P",block:'{"symbols":[],"statements":[[6,[37,4],[[32,0,["file"]]],null,[["default","else"],[{"statements":[[6,[37,4],[[32,0,["failureMessage"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"failed"],[12],[1,[32,0,["failureMessage"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[14,0,"progress-container"],[12],[2,"\\n "],[10,"div"],[14,0,"progress"],[12],[2,"\\n "],[10,"div"],[15,0,[31,["bar ",[30,[36,4],[[32,0,["failureMessage"]],"fail"],null]]]],[15,5,[32,0,["progressStyle"]]],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[32,0,["failureMessage"]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn gh-btn-green"],[24,4,"button"],[4,[38,0],[[32,0],"reset"],null],[12],[10,"span"],[12],[2,"Try Again"],[13],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"upload-form"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@alt","@action","@accept"],[false,[32,0,["description"]],[30,[36,0],[[32,0],"fileSelected"],null],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"gh-btn gh-btn-white"],[12],[10,"span"],[12],[1,[32,0,["description"]]],[13],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"],[6,[37,4],[[30,[36,3],[[32,0,["allowUnsplash"]],[32,0,["settings","unsplash"]]],null]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,0,"gh-image-uploader-unsplash"],[4,[38,0],[[32,0],[30,[36,1],["_showUnsplash",[32,0]],null]],null],[12],[2,"\\n "],[1,[30,[36,2],["unsplash"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[32,0,["_showUnsplash"]]],null,[["default"],[{"statements":[[2," "],[8,"gh-unsplash",[],[["@select","@close"],[[30,[36,0],[[32,0],"addUnsplashPhoto"],null],[30,[36,0],[[32,0],[30,[36,1],["_showUnsplash",[32,0]],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["action","toggle","svg-jar","and","if"]}',moduleName:"ghost-admin/components/gh-image-uploader.hbs"}),a="image/gif,image/jpg,image/jpeg,image/png,image/svg+xml,image/webp"
754
- e.IMAGE_MIME_TYPES=a
755
- const s=["gif","jpg","jpeg","png","svg","svgz","webp"]
756
- e.IMAGE_EXTENSIONS=s
757
- const o={purpose:"image"}
758
- e.IMAGE_PARAMS=o
752
+ e.default=i})),define("ghost-admin/components/gh-image-uploader",["exports","ghost-admin/utils/ghost-paths","ghost-admin/services/notifications","ghost-admin/services/ajax","ghost-admin/decorators/inject"],(function(e,t,i,n,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.IMAGE_PARAMS=e.IMAGE_MIME_TYPES=e.IMAGE_EXTENSIONS=e.ICON_PARAMS=e.ICON_MIME_TYPES=e.ICON_EXTENSIONS=void 0
753
+ const a=Ember.HTMLBars.template({id:"uoI/bA/P",block:'{"symbols":[],"statements":[[6,[37,4],[[32,0,["file"]]],null,[["default","else"],[{"statements":[[6,[37,4],[[32,0,["failureMessage"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"failed"],[12],[1,[32,0,["failureMessage"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[14,0,"progress-container"],[12],[2,"\\n "],[10,"div"],[14,0,"progress"],[12],[2,"\\n "],[10,"div"],[15,0,[31,["bar ",[30,[36,4],[[32,0,["failureMessage"]],"fail"],null]]]],[15,5,[32,0,["progressStyle"]]],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[32,0,["failureMessage"]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn gh-btn-green"],[24,4,"button"],[4,[38,0],[[32,0],"reset"],null],[12],[10,"span"],[12],[2,"Try Again"],[13],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"upload-form"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@alt","@action","@accept"],[false,[32,0,["description"]],[30,[36,0],[[32,0],"fileSelected"],null],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"gh-btn gh-btn-white"],[12],[10,"span"],[12],[1,[32,0,["description"]]],[13],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"],[6,[37,4],[[30,[36,3],[[32,0,["allowUnsplash"]],[32,0,["settings","unsplash"]]],null]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,0,"gh-image-uploader-unsplash"],[4,[38,0],[[32,0],[30,[36,1],["_showUnsplash",[32,0]],null]],null],[12],[2,"\\n "],[1,[30,[36,2],["unsplash"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[32,0,["_showUnsplash"]]],null,[["default"],[{"statements":[[2," "],[8,"gh-unsplash",[],[["@select","@close"],[[30,[36,0],[[32,0],"addUnsplashPhoto"],null],[30,[36,0],[[32,0],[30,[36,1],["_showUnsplash",[32,0]],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["action","toggle","svg-jar","and","if"]}',moduleName:"ghost-admin/components/gh-image-uploader.hbs"}),s="image/gif,image/jpg,image/jpeg,image/png,image/svg+xml,image/webp"
754
+ e.IMAGE_MIME_TYPES=s
755
+ const o=["gif","jpg","jpeg","png","svg","svgz","webp"]
756
+ e.IMAGE_EXTENSIONS=o
757
+ const l={purpose:"image"}
758
+ e.IMAGE_PARAMS=l
759
759
  e.ICON_EXTENSIONS=["gif","ico","jpg","jpeg","png","svg","svgz","webp"]
760
760
  e.ICON_MIME_TYPES="image/x-icon,image/vnd.microsoft.icon,image/gif,image/jpg,image/jpeg,image/png,image/svg+xml,image/webp"
761
761
  e.ICON_PARAMS={purpose:"icon"}
762
- var l=Ember._setComponentTemplate(r,Ember.Component.extend({ajax:Ember.inject.service(),notifications:Ember.inject.service(),settings:Ember.inject.service(),tagName:"section",classNames:["gh-image-uploader"],classNameBindings:["dragClass"],image:null,text:"",altText:"",saveButton:!0,accept:"",extensions:null,uploadUrl:null,paramName:"file",paramsHash:null,resourceName:"images",validate:null,allowUnsplash:!1,dragClass:null,failureMessage:null,file:null,url:null,uploadPercentage:0,_defaultAccept:a,_defaultExtensions:s,_defaultUploadUrl:"/images/upload/",_defaultParamsHash:o,_showUnsplash:!1,fileSelected:()=>{},update:()=>{},uploadStarted:()=>{},uploadFinished:()=>{},uploadSuccess:()=>{},uploadFailed:()=>{},config:(0,n.inject)(),formData:Ember.computed("file",(function(){let e=this.file,t=new FormData
762
+ var u=Ember._setComponentTemplate(a,Ember.Component.extend({ajax:Ember.inject.service(),notifications:Ember.inject.service(),settings:Ember.inject.service(),tagName:"section",classNames:["gh-image-uploader"],classNameBindings:["dragClass"],image:null,text:"",altText:"",saveButton:!0,accept:"",extensions:null,uploadUrl:null,paramName:"file",paramsHash:null,resourceName:"images",validate:null,allowUnsplash:!1,dragClass:null,failureMessage:null,file:null,url:null,uploadPercentage:0,_defaultAccept:s,_defaultExtensions:o,_defaultUploadUrl:"/images/upload/",_defaultParamsHash:l,_showUnsplash:!1,fileSelected:()=>{},update:()=>{},uploadStarted:()=>{},uploadFinished:()=>{},uploadSuccess:()=>{},uploadFailed:()=>{},config:(0,r.inject)(),formData:Ember.computed("file",(function(){let e=this.file,t=new FormData
763
763
  return t.append(this.paramName,e),Object.keys(this.paramsHash||{}).forEach((e=>{t.append(e,this.paramsHash[e])})),t})),description:Ember.computed("text","altText",(function(){let e=this.altText
764
764
  return this.text||(e?`Upload image of "${e}"`:"Upload an image")})),progressStyle:Ember.computed("uploadPercentage",(function(){let e=this.uploadPercentage,t=""
765
765
  return t=e>0?`${e}%`:"0",Ember.String.htmlSafe(`width: ${t}`)})),init(){this._super(...arguments),this.accept||this.set("accept",this._defaultAccept),this.extensions||this.set("extensions",this._defaultExtensions),this.uploadUrl||this.set("uploadUrl",this._defaultUploadUrl),this.paramsHash||this.set("paramsHash",this._defaultParamsHash)},didReceiveAttrs(){this._super(...arguments)
@@ -772,13 +772,13 @@ e.dataTransfer.dropEffect="move"===t||"linkMove"===t?"move":"copy"}e.stopPropaga
772
772
  this.isDestroyed||this.isDestroying||this.set("uploadPercentage",t)}))},_uploadSuccess(e){let t,i
773
773
  try{t=JSON.parse(e)}catch(n){if(!(n instanceof SyntaxError))throw n}if(t){let e=Ember.get(t,this.resourceName)
774
774
  e&&Ember.isArray(e)&&e[0]&&(i=Ember.get(e[0],"url"))}this.set("url",i),this.send("saveUrl"),this.send("reset"),this.uploadSuccess(i)},_uploadFailed(e){let t
775
- if((0,i.isVersionMismatchError)(e)&&this.notifications.showAPIError(e),(0,i.isUnsupportedMediaTypeError)(e)){let e=this.extensions.join(", .").toUpperCase()
776
- e=`.${e}`,t=`The image type you uploaded is not supported. Please use ${e}`}else(0,i.isRequestEntityTooLargeError)(e)?t="The image you uploaded was larger than the maximum file size your server allows.":Ember.isBlank(e.payload?.errors?.[0]?.message)?(t="Something went wrong :(",console.error(e)):t=e.payload.errors[0].message
775
+ if((0,n.isVersionMismatchError)(e)&&this.notifications.showAPIError(e),(0,n.isUnsupportedMediaTypeError)(e)){let e=this.extensions.join(", .").toUpperCase()
776
+ e=`.${e}`,t=`The image type you uploaded is not supported. Please use ${e}`}else(0,n.isRequestEntityTooLargeError)(e)?t="The image you uploaded was larger than the maximum file size your server allows.":Ember.isBlank(e.payload?.errors?.[0]?.message)?(console.error(e),t=i.GENERIC_ERROR_MESSAGE):t=e.payload.errors[0].message
777
777
  this.set("failureMessage",t),this.uploadFailed(e)},generateRequest(){let e=this.ajax,i=this.formData,n=this.uploadUrl,r=`${(0,t.default)().apiRoot}${n}`
778
778
  this.uploadStarted(),e.post(r,{data:i,processData:!1,contentType:!1,dataType:"text",xhr:()=>{let e=new window.XMLHttpRequest
779
- return e.upload.addEventListener("progress",(e=>{this._uploadProgress(e)}),!1),e}}).then((e=>{this._uploadSuccess(e)})).catch((e=>{this._uploadFailed(e)})).finally((()=>{this.uploadFinished()}))},_validate(e){return this.validate?this.validate(e):this._defaultValidator(e)},_defaultValidator(e){let t=this.extensions,[,n]=/(?:\.([^.]+))?$/.exec(e.name)
780
- return Ember.isArray(t)||(t=t.split(",")),!(!n||-1===t.indexOf(n.toLowerCase()))||new i.UnsupportedMediaTypeError}}))
781
- e.default=l})),define("ghost-admin/components/gh-infinity-loader",["exports","ember-infinity/components/infinity-loader"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
779
+ return e.upload.addEventListener("progress",(e=>{this._uploadProgress(e)}),!1),e}}).then((e=>{this._uploadSuccess(e)})).catch((e=>{this._uploadFailed(e)})).finally((()=>{this.uploadFinished()}))},_validate(e){return this.validate?this.validate(e):this._defaultValidator(e)},_defaultValidator(e){let t=this.extensions,[,i]=/(?:\.([^.]+))?$/.exec(e.name)
780
+ return Ember.isArray(t)||(t=t.split(",")),!(!i||-1===t.indexOf(i.toLowerCase()))||new n.UnsupportedMediaTypeError}}))
781
+ e.default=u})),define("ghost-admin/components/gh-infinity-loader",["exports","ember-infinity/components/infinity-loader"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
782
782
  const i=Ember.HTMLBars.template({id:"LSg2nsN+",block:'{"symbols":["&default"],"statements":[[6,[37,0],[[32,0,["isVisible"]]],null,[["default"],[{"statements":[[2," "],[11,"div"],[16,0,[31,[[32,0,["loaderClassNames"]],[30,[36,0],[[32,0,["viewportEntered"]]," in-viewport"],null],[30,[36,0],[[32,0,["isDoneLoading"]]," reached-infinity"],null]]]],[4,[38,1],[[32,0,["didInsertLoader"]],[32,0]],null],[12],[2,"\\n\\n"],[6,[37,0],[[27,[32,1]]],null,[["default","else"],[{"statements":[[2," "],[18,1,[[32,0,["infinityModelContent"]]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,0],[[32,0,["isDoneLoading"]]],null,[["default","else"],[{"statements":[],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"gh-loading-spinner"],[12],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if","did-insert"]}',moduleName:"ghost-admin/components/gh-infinity-loader.hbs"})
783
783
  class n extends t.default{}e.default=n,Ember._setComponentTemplate(i,n)})),define("ghost-admin/components/gh-input-with-select/index",["exports","@glimmer/component","ember-power-select/utils/group-utils"],(function(e,t,i){var n,r,a,s,o
784
784
  function l(e,t,i,n,r){var a={}
@@ -1398,9 +1398,7 @@ t<=540?i=1:t<=940&&(i=2),this.unsplash.changeColumnCount(i)}},g=k(b.prototype,"u
1398
1398
  e.default=O,Ember._setComponentTemplate(E,O)})),define("ghost-admin/components/gh-uploader",["exports","ghost-admin/utils/ghost-paths","ghost-admin/components/gh-image-uploader","ember-concurrency"],(function(e,t,i,n){function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1399
1399
  const a=Ember.HTMLBars.template({id:"hB0rEz8l",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,2],null,[["cancel","errors","files","isUploading","progressBar","setFiles","registerFileInput","triggerFileDialog","imageExtensions","imageMimeTypes","iconExtensions","iconMimeTypes"],[[30,[36,0],[[32,0],"cancel"],null],[32,0,["errors"]],[32,0,["files"]],[32,0,["_uploadFiles","isRunning"]],[30,[36,1],["gh-progress-bar"],[["percentage"],[[32,0,["uploadPercentage"]]]]],[30,[36,0],[[32,0],"setFiles"],null],[30,[36,0],[[32,0],"registerFileInput"],null],[30,[36,0],[[32,0],"triggerFileDialog"],null],[32,0,["imageExtensions"]],[32,0,["imageMimeTypes"]],[32,0,["iconExtensions"]],[32,0,["iconMimeTypes"]]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["action","component","hash"]}',moduleName:"ghost-admin/components/gh-uploader.hbs"})
1400
1400
  class s extends Ember.Object{constructor(){super(...arguments),r(this,"file",null),r(this,"total",0),r(this,"loaded",0)}init(){super.init(...arguments),this.total=this.file&&this.file.size||0}update(e){let{loaded:t,total:i}=e
1401
- this.total=i,this.loaded=t}}var o=Ember._setComponentTemplate(a,Ember.Component.extend({ajax:Ember.inject.service(),tagName:"",accept:"",extensions:"",files:null,paramName:"file",paramsHash:null,resourceName:"images",uploadUrl:null,requestMethod:"post",errors:null,totalSize:0,uploadedSize:0,uploadPercentage:0,uploadUrls:null,_defaultUploadUrl:"/images/upload/",_files:null,_uploadTrackers:null,onCancel(){},onComplete(){},onFailed(){},onStart(){},onUploadStart(){},onUploadFailure(){},onUploadSuccess(){},init(){this._super(...arguments),this.set("errors",[]),this.set("uploadUrls",[]),this._uploadTrackers=[],this.paramsHash||this.set("paramsHash",{purpose:"image"}),this.set("imageExtensions",i.IMAGE_EXTENSIONS),this.set("imageMimeTypes",i.IMAGE_MIME_TYPES),this.set("iconExtensions",i.ICON_EXTENSIONS),this.set("iconMimeTypes",i.ICON_MIME_TYPES)},didReceiveAttrs(){this._super(...arguments),this.uploadUrl||this.set("uploadUrl",this._defaultUploadUrl)
1402
- let e=this.files
1403
- this._setFiles(e)},actions:{registerFileInput(e){this.fileInput=e},triggerFileDialog(){this.fileInput?this.fileInput.click():console.error("When using uploader.triggerFileDialog you must call uploader.registerFileInput first")},setFiles(e,t){this._setFiles(e),t&&(this.fileInput=t())},cancel(){this._reset(),this.onCancel()}},_setFiles(e){this.set("files",e),e&&e!==this._files&&(this.get("_uploadFiles.isRunning")&&console.error("Adding new files whilst an upload is in progress is not supported."),this._files=e,this._validate()&&this._uploadFiles.perform(e))},_validate(){let e=this.files,t=this.validate||this._defaultValidator.bind(this),i=[],n=[]
1401
+ this.total=i,this.loaded=t}}var o=Ember._setComponentTemplate(a,Ember.Component.extend({ajax:Ember.inject.service(),tagName:"",accept:"",extensions:"",files:null,paramName:"file",paramsHash:null,resourceName:"images",uploadUrl:null,requestMethod:"post",errors:null,totalSize:0,uploadedSize:0,uploadPercentage:0,uploadUrls:null,_defaultUploadUrl:"/images/upload/",_files:null,_uploadTrackers:null,onCancel(){},onComplete(){},onFailed(){},onStart(){},onUploadStart(){},onUploadFailure(){},onUploadSuccess(){},init(){this._super(...arguments),this.set("errors",[]),this.set("uploadUrls",[]),this._uploadTrackers=[],this.paramsHash||this.set("paramsHash",{purpose:"image"}),this.set("imageExtensions",i.IMAGE_EXTENSIONS),this.set("imageMimeTypes",i.IMAGE_MIME_TYPES),this.set("iconExtensions",i.ICON_EXTENSIONS),this.set("iconMimeTypes",i.ICON_MIME_TYPES)},didReceiveAttrs(){this._super(...arguments),this.uploadUrl||this.set("uploadUrl",this._defaultUploadUrl),this.files?.length&&this._setFiles(this.files)},actions:{registerFileInput(e){this.fileInput=e},triggerFileDialog(){this.fileInput?this.fileInput.click():console.error("When using uploader.triggerFileDialog you must call uploader.registerFileInput first")},setFiles(e,t){this._setFiles(e),t&&(this.fileInput=t())},cancel(){this._reset(),this.onCancel()}},_setFiles(e){this.set("files",e),e&&e!==this._files&&(this.get("_uploadFiles.isRunning")&&console.error("Adding new files whilst an upload is in progress is not supported."),this._files=e,this._validate()&&this._uploadFiles.perform(e))},_validate(){let e=this.files,t=this.validate||this._defaultValidator.bind(this),i=[],n=[]
1404
1402
  for(let r=0;r<e.length;r+=1){let a=e[r],s=t(a)
1405
1403
  !0===s?i.push(a):n.push({fileName:a.name,message:s})}return!!Ember.isEmpty(n)||(this.set("errors",n),this.onFailed(n),!1)},_defaultValidator(e){let t=this.extensions,[,i]=/(?:\.([^.]+))?$/.exec(e.name)
1406
1404
  if(!t)return!0
@@ -1493,12 +1491,13 @@ default:return e}}}}(),h=e=>{const{KoenigComposer:t}=m.read()
1493
1491
  return n.default.createElement(t,e)},b=e=>{const{KoenigEditor:t}=m.read()
1494
1492
  return n.default.createElement(t,e)}
1495
1493
  let g=(s=Ember._action,o=class extends i.default{constructor(){var e,t,i,a
1496
- super(...arguments),e=this,t="config",a=this,(i=l)&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(a):void 0}),c(this,"ReactComponent",(()=>{const[e]=n.default.useState(0)
1497
- return n.default.createElement("div",{className:["koenig-react-editor",this.args.className].filter(Boolean).join(" ")},n.default.createElement(p,null,n.default.createElement(n.Suspense,{fallback:n.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},n.default.createElement(h,{initialEditorState:this.args.lexical,onError:this.onError,imageUploadFunction:{imageUploader:async function(e){const t=new FormData
1498
- t.append("file",e[0])
1499
- const i=`${(0,r.default)().apiRoot}/images/upload/`,n=await function(e,t){return new Promise(((i,n)=>{const r=new XMLHttpRequest
1500
- r.open("POST",t),r.onload=()=>i(r.response),r.onerror=()=>n(r.statusText),r.send(e)}))}(t,i),a=JSON.parse(n)?.images?.[0].url
1501
- return{src:a}},uploadProgressPercentage:e}},n.default.createElement(b,{onChange:this.args.onChange})))))}))}onError(e){console.error(e),this.config.sentry_dsn&&t.captureException(e,{tags:{lexical:!0}})}},l=u(o.prototype,"config",[a.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(o.prototype,"onError",[s],Object.getOwnPropertyDescriptor(o.prototype,"onError"),o.prototype),o)
1494
+ super(...arguments),e=this,t="config",a=this,(i=l)&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(a):void 0}),c(this,"ReactComponent",(()=>{const[e,t]=n.default.useState(0)
1495
+ return n.default.createElement("div",{className:["koenig-react-editor",this.args.className].filter(Boolean).join(" ")},n.default.createElement(p,null,n.default.createElement(n.Suspense,{fallback:n.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},n.default.createElement(h,{initialEditorState:this.args.lexical,onError:this.onError,imageUploadFunction:{imageUploader:async function(e){const i=new FormData
1496
+ i.append("file",e[0])
1497
+ const n=`${(0,r.default)().apiRoot}/images/upload/`,a=await function(e,i){return new Promise(((n,r)=>{const a=new XMLHttpRequest
1498
+ a.open("POST",i),a.upload.onprogress=e=>{(e=>{const i=e.loaded/e.total*100
1499
+ t(i),100===i&&t(0)})(e)},a.onload=()=>n(a.response),a.onerror=()=>r(a.statusText),a.send(e)}))}(i,n),s=JSON.parse(a)?.images?.[0].url
1500
+ return{src:s}},uploadProgress:e}},n.default.createElement(b,{onChange:this.args.onChange})))))}))}onError(e){console.error(e),this.config.sentry_dsn&&t.captureException(e,{tags:{lexical:!0}})}},l=u(o.prototype,"config",[a.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(o.prototype,"onError",[s],Object.getOwnPropertyDescriptor(o.prototype,"onError"),o.prototype),o)
1502
1501
  e.default=g,Ember._setComponentTemplate(d,g)})),define("ghost-admin/components/koenig-lexical-sandbox",["exports","@glimmer/component","react"],(function(e,t,i){function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1503
1502
  const r=Ember.HTMLBars.template({id:"YDbbj5g/",block:'{"symbols":[],"statements":[[11,"div"],[4,[38,0],[[32,0,["ReactComponent"]]],null],[12],[13]],"hasEval":false,"upvars":["react-render"]}',moduleName:"ghost-admin/components/koenig-lexical-sandbox.hbs"})
1504
1503
  class a extends i.default.Component{constructor(){super(...arguments),n(this,"state",{hasError:!1})}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?i.default.createElement("p",null,"Loading has failed. Try refreshing the browser!"):this.props.children}}const s=function(){let e,t="pending"
@@ -1556,7 +1555,7 @@ e.target.querySelector("span").style.transform="translateX(0)",t.classList.remov
1556
1555
  e.default=l,Ember._setComponentTemplate(o,l)})),define("ghost-admin/components/member/newsletter-preference",["exports","@glimmer/component","moment-timezone"],(function(e,t,i){var n,r,a,s
1557
1556
  function o(e,t,i,n,r){var a={}
1558
1557
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1559
- const l=Ember.HTMLBars.template({id:"36Lh9qFF",block:'{"symbols":["newsletter"],"statements":[[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Newsletters"],[13],[2,"\\n"],[10,"div"],[15,0,[31,["gh-main-section-content grey ",[30,[36,2],[[30,[36,3],["suppressionList"],null],"gh-member-newsletter-section"],null]]]],[12],[2,"\\n "],[10,"div"],[14,0,"gh-member-newsletters"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[32,0,["newsletters"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-member-newsletter-row"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-member-newsletter-title"],[12],[1,[32,1,["name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[15,0,[31,["for-switch ",[30,[36,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[32,0,["suppressionData","suppressed"]]],null],"disabled"],null]]]],[12],[2,"\\n "],[10,"label"],[14,0,"switch"],[15,"for",[32,1,["forId"]]],[12],[2,"\\n "],[8,"input",[[16,1,[32,1,["forId"]]],[24,3,"subscribed"],[4,[38,6],["click",[30,[36,5],[[32,0,["updateNewsletterPreference"]],[32,1]],null]],null]],[["@checked","@type"],[[32,1,["subscribed"]],"checkbox"]],null],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n\\n"],[6,[37,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[32,0,["suppressionData","suppressed"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-member-newsletter-footer red"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"fail"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,0],["event-email-delivery-failed"],[["class"],["gh-member-newsletter-footer-icon"]]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"spam"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,0],["event-email-delivery-spam"],[["class"],["gh-member-newsletter-footer-icon"]]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[10,"div"],[14,0,"gh-member-newsletter-footer-text"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"fail"],null]],null,[["default"],[{"statements":[[2," Member email was suppressed due to it bouncing on "],[1,[32,0,["suppressionData","date"]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"spam"],null]],null,[["default"],[{"statements":[[2," Member email was suppressed due to a spam complaint on "],[1,[32,0,["suppressionData","date"]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[10,"a"],[14,0,"midgrey"],[14,6,"javascript:void(0)"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Learn more"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[30,[36,9],[[32,0,["suppressionData","suppressed"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-member-newsletter-footer midgrey"],[12],[2,"\\n If disabled, member will "],[10,"i"],[12],[2,"not"],[13],[2," receive newsletter emails\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["svg-jar","eq","if","feature","and","fn","on","-track-array","each","not"]}',moduleName:"ghost-admin/components/member/newsletter-preference.hbs"})
1558
+ const l=Ember.HTMLBars.template({id:"tBBG00BX",block:'{"symbols":["newsletter"],"statements":[[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Newsletters"],[13],[2,"\\n"],[10,"div"],[15,0,[31,["gh-main-section-content grey ",[30,[36,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[30,[36,9],[[32,0,["suppressionData","suppressed"]]],null]],null],"gh-member-newsletter-section"],null]]]],[12],[2,"\\n"],[6,[37,10],[[32,0,["suppressionData","suppressed"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-member-newsletters"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[32,0,["newsletters"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-member-newsletter-row"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-member-newsletter-title"],[12],[1,[32,1,["name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[15,0,[31,["for-switch ",[30,[36,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[32,0,["suppressionData","suppressed"]]],null],"disabled"],null]]]],[12],[2,"\\n "],[10,"label"],[14,0,"switch"],[15,"for",[32,1,["forId"]]],[12],[2,"\\n "],[8,"input",[[16,1,[32,1,["forId"]]],[24,3,"subscribed"],[4,[38,6],["click",[30,[36,5],[[32,0,["updateNewsletterPreference"]],[32,1]],null]],null]],[["@checked","@type"],[[32,1,["subscribed"]],"checkbox"]],null],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[32,0,["suppressionData","suppressed"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-members-no-data gh-member-newsletter-no-data"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"fail"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,0],["suppression-notice-bounced"],[["class"],["gh-member-newsletter-icon"]]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"spam"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,0],["suppression-notice-flagged"],[["class"],["gh-member-newsletter-icon"]]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[10,"h4"],[12],[2,"Email disabled"],[13],[2,"\\n\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"fail"],null]],null,[["default"],[{"statements":[[2," Bounced on "],[1,[32,0,["suppressionData","date"]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,0,["suppressionData","reason"]],"spam"],null]],null,[["default"],[{"statements":[[2," Flagged as spam on "],[1,[32,0,["suppressionData","date"]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[10,"a"],[14,0,"midgrey"],[14,6,"javascript:void(0)"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Learn more"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,4],[[30,[36,3],["suppressionList"],null],[30,[36,9],[[32,0,["suppressionData","suppressed"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-member-newsletter-footer midgrey"],[12],[2,"\\n If disabled, member will "],[10,"em"],[12],[2,"not"],[13],[2," receive newsletter emails\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["svg-jar","eq","if","feature","and","fn","on","-track-array","each","not","unless"]}',moduleName:"ghost-admin/components/member/newsletter-preference.hbs"})
1560
1559
  let u=(n=Ember._tracked,r=Ember._action,a=class extends t.default{constructor(){var e,t,i,n
1561
1560
  super(...arguments),e=this,t="filterValue",n=this,(i=s)&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}get newsletters(){return this.args.newsletters?.length>0?this.args.newsletters.map((e=>({name:e.name,description:e.description,subscribed:!!this.args.member?.newsletters?.find((t=>t.id===e.id)),id:e.id,forId:`${e.id}-checkbox`}))):[]}get suppressionData(){const{emailSuppression:e}=this.args.member,t=e?.info?.timestamp,n=t?(0,i.default)(new Date(t)).format("D MMM YYYY"):null
1562
1561
  return{suppressed:e?.suppressed,reason:e?.info?.reason,date:n}}updateNewsletterPreference(e,t){let i=[]
@@ -1571,15 +1570,14 @@ super(...arguments),e=this,t="showDetails",n=this,(i=a)&&Object.defineProperty(e
1571
1570
  e.default=l,Ember._setComponentTemplate(o,l)})),define("ghost-admin/components/members-activity/event-type-filter",["exports","@glimmer/component"],(function(e,t){var i,n,r,a,s,o
1572
1571
  function l(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function u(e,t,i,n,r){var a={}
1573
1572
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1574
- const c=Ember.HTMLBars.template({id:"m8MErMk8",block:'{"symbols":["dd","type","idx","@excludedEvents"],"statements":[[8,"gh-basic-dropdown",[],[["@verticalPosition"],["below"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Trigger"]],[[24,0,"gh-btn gh-btn-icon gh-btn-action-icon"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[15,0,[30,[36,2],[[32,4],"gh-btn-label-green"],null]],[12],[2,"\\n "],[1,[30,[36,3],["filter"],null]],[2,"\\n Filter events\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1,["Content"]],[[24,0,"gh-member-activity-actions-menu dropdown-menu dropdown-triangle-top-right"]],[[],[]],[["default"],[{"statements":[[2,"\\n"],[2," "],[10,"ul"],[14,0,"ember-power-select-options"],[14,"role","listbox"],[12],[2,"\\n"],[6,[37,5],[[30,[36,4],[[30,[36,4],[[32,0,["eventTypes"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,0,"form-group ember-power-select-option mb0 for-checkbox"],[12],[2,"\\n "],[10,"label"],[14,0,"checkbox"],[15,"for",[31,["type-",[32,3]]]],[12],[2,"\\n "],[11,"input"],[16,"checked",[32,2,["isSelected"]]],[16,1,[31,["type-",[32,3]]]],[24,3,"eventTypes"],[24,0,"gh-input post-settings-featured"],[24,4,"checkbox"],[4,[38,1],["input",[30,[36,0],[[32,0,["toggleEventType"]],[32,2,["event"]]],null]],null],[12],[13],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component"],[12],[13],[2,"\\n "],[10,"p"],[12],[1,[32,2,["name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2,3]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["fn","on","if","svg-jar","-track-array","each"]}',moduleName:"ghost-admin/components/members-activity/event-type-filter.hbs"})
1575
- let d=(i=Ember.inject.service,n=Ember.inject.service,r=Ember._action,a=class extends t.default{constructor(){super(...arguments),l(this,"settings",s,this),l(this,"feature",o,this)}get availableEventTypes(){const e=[...(t=this.feature,[{event:"signup_event",icon:"event-filter-signup",name:"Signups"},{event:"login_event",icon:"event-filter-login",name:"Logins"},{event:"subscription_event",icon:"event-filter-subscription",name:"Paid subscriptions"},{event:"payment_event",icon:"event-filter-payment",name:"Payments"},{event:"newsletter_event",icon:"event-filter-newsletter",name:"Email subscriptions"},{event:"email_opened_event",icon:"event-filter-email-opened",name:"Email opens"},{event:"email_delivered_event",icon:"event-filter-email-delivered",name:"Email deliveries"},{event:"email_failed_event",icon:"event-filter-email-failed",name:t.suppressionList?"Email bounces":"Email failures"}])]
1576
- var t
1577
- return this.feature.suppressionList&&e.push({event:"email_complaint_event",icon:"event-filter-email-spam",name:"Email spam"}),"off"!==this.settings.commentsEnabled&&e.push({event:"comment_event",icon:"event-comment",name:"Comments"}),this.settings.emailTrackClicks&&e.push({event:"click_event",icon:"event-click",name:"Clicked link"}),this.feature.audienceFeedback&&e.push({event:"feedback_event",icon:"event-more-like-this",name:"Feedback"}),this.args.hiddenEvents?.length?e.filter((e=>!this.args.hiddenEvents.includes(e.event))):e}get eventTypes(){const e=(this.args.excludedEvents||"").split(",")
1578
- return this.availableEventTypes.map((t=>({event:t.event,icon:t.icon,name:t.name,isSelected:!e.includes(t.event)})))}toggleEventType(e){const t=new Set(this.eventTypes.reject((e=>e.isSelected)).map((e=>e.event)))
1573
+ const c=Ember.HTMLBars.template({id:"p2zjVyAd",block:'{"symbols":["dd","type","idx","@excludedEvents"],"statements":[[8,"gh-basic-dropdown",[],[["@verticalPosition"],["below"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Trigger"]],[[24,0,"gh-btn gh-btn-icon gh-btn-action-icon"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[15,0,[30,[36,0],[[32,4],"gh-btn-label-green"],null]],[12],[2,"\\n "],[1,[30,[36,1],["filter"],null]],[2,"\\n Filter events\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1,["Content"]],[[16,0,[31,["gh-member-activity-actions-menu dropdown-menu dropdown-triangle-top-right ",[30,[36,0],[[30,[36,4],["suppressionList"],null],"gh-member-activity-actions-menu--suppression"],null]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n"],[2," "],[10,"ul"],[14,0,"ember-power-select-options"],[14,"role","listbox"],[12],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,0,["eventTypes"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,0],[[30,[36,5],[[30,[36,4],["suppressionList"],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,0,"form-group ember-power-select-option mb0 for-checkbox"],[12],[2,"\\n "],[10,"label"],[14,0,"checkbox"],[15,"for",[31,["type-",[32,3]]]],[12],[2,"\\n "],[11,"input"],[16,"checked",[32,2,["isSelected"]]],[16,1,[31,["type-",[32,3]]]],[24,3,"eventTypes"],[24,0,"gh-input post-settings-featured"],[24,4,"checkbox"],[4,[38,3],["input",[30,[36,2],[[32,0,["toggleEventType"]],[32,2,["event"]]],null]],null],[12],[13],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component"],[12],[13],[2,"\\n "],[10,"p"],[12],[1,[32,2,["name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,0],[[30,[36,4],["suppressionList"],null]],null,[["default"],[{"statements":[[6,[37,0],[[32,2,["divider"]]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,0,"gh-member-activity-actions-menu-divider"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"li"],[14,0,"ember-power-select-option mb0 gh-member-activity-actions-menu-item"],[12],[2,"\\n "],[10,"label"],[15,"for",[31,["type-",[32,3]]]],[12],[2,"\\n "],[1,[30,[36,1],[[32,2,["icon"]]],[["class"],["gh-member-activity-actions-menu-icon"]]]],[2,"\\n "],[10,"span"],[12],[1,[32,2,["name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch x-small"],[12],[2,"\\n "],[10,"label"],[14,0,"switch"],[15,"for",[31,["type-",[32,3]]]],[12],[2,"\\n "],[11,"input"],[16,"checked",[32,2,["isSelected"]]],[16,1,[31,["type-",[32,3]]]],[24,3,"eventTypes"],[24,0,"gh-input post-settings-featured"],[24,4,"checkbox"],[4,[38,3],["input",[30,[36,2],[[32,0,["toggleEventType"]],[32,2,["event"]]],null]],null],[12],[13],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2,3]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["if","svg-jar","fn","on","feature","not","-track-array","each"]}',moduleName:"ghost-admin/components/members-activity/event-type-filter.hbs"}),d=[{event:"signup_event",icon:"filter-dropdown-signups",name:"Signups"},{event:"login_event",icon:"filter-dropdown-logins",name:"Logins"},{event:"subscription_event",icon:"filter-dropdown-paid-subscriptions",name:"Paid subscriptions"},{event:"payment_event",icon:"filter-dropdown-payments",name:"Payments"},{event:"newsletter_event",icon:"filter-dropdown-email-subscriptions",name:"Email subscriptions"},{event:"email_opened_event",icon:"filter-dropdown-email-opened",name:"Email opens"},{event:"email_delivered_event",icon:"filter-dropdown-email-received",name:"Email deliveries"},{event:"email_failed_event",icon:"filter-dropdown-email-bounced",name:"Email failures"}],p=[{event:"signup_event",icon:"filter-dropdown-signups",name:"Signups",group:"auth"},{event:"login_event",icon:"filter-dropdown-logins",name:"Logins",group:"auth"},{event:"subscription_event",icon:"filter-dropdown-paid-subscriptions",name:"Paid subscriptions",group:"payments"},{event:"payment_event",icon:"filter-dropdown-payments",name:"Payments",group:"payments"},{event:"newsletter_event",icon:"filter-dropdown-email-subscriptions",name:"Email subscriptions",group:"emails"},{event:"email_opened_event",icon:"filter-dropdown-email-opened",name:"Email opened",group:"emails"},{event:"email_delivered_event",icon:"filter-dropdown-email-received",name:"Email received",group:"emails"},{event:"email_complaint_event",icon:"filter-dropdown-email-flagged-as-spam",name:"Email flagged as spam",group:"emails"},{event:"email_failed_event",icon:"filter-dropdown-email-bounced",name:"Email bounced",group:"emails"}]
1574
+ let m=(i=Ember.inject.service,n=Ember.inject.service,r=Ember._action,a=class extends t.default{constructor(){super(...arguments),l(this,"settings",s,this),l(this,"feature",o,this)}get availableEventTypes(){const e=this.feature.suppressionList?[...p]:[...d]
1575
+ return"off"!==this.settings.commentsEnabled&&e.push({event:"comment_event",icon:"filter-dropdown-comments",name:"Comments",group:"others"}),this.feature.audienceFeedback&&e.push({event:"feedback_event",icon:"filter-dropdown-feedback",name:"Feedback",group:"others"}),this.settings.emailTrackClicks&&e.push({event:"click_event",icon:"filter-dropdown-clicked-in-email",name:"Clicked link in email",group:"others"}),this.args.hiddenEvents?.length?e.filter((e=>!this.args.hiddenEvents.includes(e.event))):e}get eventTypes(){const e=(this.args.excludedEvents||"").split(",")
1576
+ return this.availableEventTypes.map(((t,i)=>({event:t.event,icon:t.icon,name:t.name,divider:this.needDivider(t,this.availableEventTypes[i-1]),isSelected:!e.includes(t.event)})))}needDivider(e,t){return!(!e?.group||!t?.group)&&e.group!==t.group}toggleEventType(e){const t=new Set(this.eventTypes.reject((e=>e.isSelected)).map((e=>e.event)))
1579
1577
  t.has(e)?t.delete(e):t.add(e)
1580
1578
  const i=Array.from(t).join(",")
1581
1579
  this.args.onChange(i||null)}},s=u(a.prototype,"settings",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=u(a.prototype,"feature",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(a.prototype,"toggleEventType",[r],Object.getOwnPropertyDescriptor(a.prototype,"toggleEventType"),a.prototype),a)
1582
- e.default=d,Ember._setComponentTemplate(c,d)})),define("ghost-admin/components/members-activity/member-filter-trigger",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1580
+ e.default=m,Ember._setComponentTemplate(c,m)})),define("ghost-admin/components/members-activity/member-filter-trigger",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1583
1581
  const t=Ember.HTMLBars.template({id:"lWb3OU/5",block:'{"symbols":[],"statements":[[10,"div"],[14,0,"gh-btn"],[12],[10,"span"],[12],[2,"Filter member "],[1,[30,[36,0],["arrow-down-small"],null]],[13],[13],[2,"\\n"]],"hasEval":false,"upvars":["svg-jar"]}',moduleName:"ghost-admin/components/members-activity/member-filter-trigger.hbs"})
1584
1582
  var i=Ember._setComponentTemplate(t,Ember._templateOnlyComponent())
1585
1583
  e.default=i})),define("ghost-admin/components/members-activity/member-filter",["exports","@glimmer/component","ember-concurrency"],(function(e,t,i){var n,r,a,s
@@ -1780,12 +1778,12 @@ e.default=b,Ember._setComponentTemplate(h,b)})),define("ghost-admin/components/m
1780
1778
  const a=Ember.HTMLBars.template({id:"ojIFrqO/",block:'{"symbols":[],"statements":[[10,"header"],[14,0,"modal-header flex justify-center"],[12],[2,"\\n "],[10,"h1"],[14,5,"margin: 0;"],[12],[2,"Impersonate"],[13],[2,"\\n"],[13],[2,"\\n"],[11,"a"],[24,0,"close"],[24,6,""],[24,"role","button"],[24,"title","Close"],[4,[38,0],[[32,0],"closeModal"],null],[4,[38,0],[[32,0],[30,[36,1],[[32,0,["noop"]]],null]],[["on"],["mouseDown"]]],[12],[2,"\\n "],[1,[30,[36,2],["close"],null]],[10,"span"],[14,0,"hidden"],[12],[2,"Close"],[13],[2,"\\n"],[13],[2,"\\n\\n"],[10,"div"],[14,0,"modal-body"],[12],[2,"\\n "],[10,"div"],[14,0,"flex items-center justify-center mt4 mb4"],[12],[2,"\\n "],[8,"gh-member-avatar",[],[["@member","@sizeClass","@containerClass"],[[32,0,["member"]],[30,[36,3],[[32,0,["member","name"]],"f-headline fw4 lh-zero tracked-1","f-headline fw4 lh-zero tracked-1"],null],"w25 h25 gh-member-detail-avatar"]],null],[2,"\\n "],[13],[2,"\\n\\n "],[10,"p"],[14,0,"tc pl4 pr4"],[12],[2,"\\n This is an authentication link to sign into "],[10,"strong"],[12],[1,[32,0,["config","blogTitle"]]],[13],[2," as "],[10,"strong"],[12],[1,[32,0,["member","email"]]],[13],[2,", you can send it to them if they need it, or use it to sign into their account for customer support.\\n "],[13],[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-input-group"],[12],[2,"\\n "],[8,"gh-text-input",[],[["@id","@name","@disabled","@value","@placeholder"],["member-signin-url","member-signin-url",true,[30,[36,4],[[32,0,["signinUrl"]]],null],[31,[[32,0,["config","blogUrl"]],"/members/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]]]],null],[2,"\\n"],[6,[37,3],[[32,0,["signinUrl"]]],null,[["default","else"],[{"statements":[[2," "],[8,"gh-task-button",[],[["@buttonText","@task","@successText","@class"],["Copy link",[32,0,["copySigninUrl"]],"Link copied","gh-btn gh-btn-black gh-btn-icon"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"gh-task-button",[],[["@buttonText","@task","@successText","@disabled","@class"],["Copy link",[32,0,["copySigninUrl"]],"Link copied","true","gh-btn gh-btn-black gh-btn-icon"]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n\\n"],[10,"div"],[12],[2,"\\n "],[10,"p"],[14,0,"tc pt4 mb2"],[12],[2,"This link is only valid for the next "],[10,"strong"],[12],[2,"24 hours"],[13],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["action","optional","svg-jar","if","readonly"]}',moduleName:"ghost-admin/components/modal-impersonate-member.hbs"})
1781
1779
  var s=Ember._setComponentTemplate(a,t.default.extend({store:Ember.inject.service(),classNames:"modal-impersonate-member",signinUrl:null,config:(0,n.inject)(),member:Ember.computed.alias("model"),didInsertElement(){this._super(...arguments),this._signinUrlUpdateTask.perform()},actions:{confirm(){}},copySigninUrl:(0,r.task)((function*(){return(0,i.default)(this.signinUrl),yield(0,r.timeout)(1e3),!0})),_signinUrlUpdateTask:(0,r.task)((function*(){const e=yield this.member.fetchSigninUrl.perform()
1782
1780
  this.set("signinUrl",e.url)})).drop()}))
1783
- e.default=s})),define("ghost-admin/components/modal-import-content",["exports","ghost-admin/components/modal-base","ghost-admin/utils/ghost-paths","ghost-admin/decorators/inject","ghost-admin/services/ajax"],(function(e,t,i,n,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1784
- const a=Ember.HTMLBars.template({id:"ErVKCKdj",block:'{"symbols":["@close"],"statements":[[10,"div"],[14,0,"gh-content-import-wrapper"],[12],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"INIT"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header"],[12],[2,"\\n "],[10,"h1"],[12],[2,"Import content"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"UPLOADING"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header"],[12],[2,"\\n "],[10,"h1"],[12],[2,"Uploading"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"PROCESSING"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header icon-center"],[12],[2,"\\n "],[1,[30,[36,3],["import-in-progress"],[["class"],["gh-import-content-icon"]]]],[2,"\\n "],[10,"h1"],[12],[2,"Import in progress"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"ERROR"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header"],[12],[2,"\\n "],[10,"h1"],[12],[1,[32,0,["errorHeader"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[11,"button"],[24,0,"close"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[1,[30,[36,3],["close"],null]],[2,"\\n "],[10,"span"],[14,0,"hidden"],[12],[2,"Close"],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"modal-body"],[12],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"INIT"],null]],null,[["default"],[{"statements":[[2," "],[8,"modal-import-content/content-file-select",[],[["@setFile"],[[30,[36,0],[[32,0],"setFile"],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"UPLOADING"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-import-content-spinner"],[12],[2,"\\n "],[8,"gh-loading-spinner",[],[[],[]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"PROCESSING"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-content-import-resultcontainer"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-content-import-result-summary"],[12],[2,"\\n "],[10,"p"],[12],[2,"Your import is being processed, and you\'ll receive a confirmation email as soon as it\'s complete. Usually this only takes a few minutes, but larger imports may take longer."],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"ERROR"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"failed flex items-start gh-content-upload-errorcontainer error"],[12],[2,"\\n "],[10,"div"],[14,0,"mr2"],[12],[1,[30,[36,3],["warning"],[["class"],["nudge-top--2 w4 h4 fill-red"]]]],[13],[2,"\\n "],[10,"p"],[14,0,"ma0 pa0"],[12],[1,[32,0,["errorMessage"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"modal-footer"],[12],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"INIT"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Close"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"UPLOADING"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Cancel"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"PROCESSING"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn gh-btn-black"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Got it"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"ERROR"],null]],null,[["default"],[{"statements":[[6,[37,1],[[32,0,["showTryAgainButton"]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,0],[[32,0],"reset"],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Try again"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[11,"button"],[24,0,"gh-btn gh-btn-black"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"OK"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["action","if","on","svg-jar","eq"]}',moduleName:"ghost-admin/components/modal-import-content.hbs"})
1785
- var s=Ember._setComponentTemplate(a,t.default.extend({ajax:Ember.inject.service(),notifications:Ember.inject.service(),store:Ember.inject.service(),state:"INIT",file:null,paramName:"importfile",importResponse:null,errorMessage:null,errorHeader:null,showTryAgainButton:!0,confirm:()=>{},config:(0,n.inject)(),uploadUrl:Ember.computed((function(){return`${(0,i.default)().apiRoot}/db`})),formData:Ember.computed("file",(function(){let e=new FormData
1781
+ e.default=s})),define("ghost-admin/components/modal-import-content",["exports","ghost-admin/components/modal-base","ghost-admin/utils/ghost-paths","ghost-admin/services/notifications","ghost-admin/decorators/inject","ghost-admin/services/ajax"],(function(e,t,i,n,r,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1782
+ const s=Ember.HTMLBars.template({id:"ErVKCKdj",block:'{"symbols":["@close"],"statements":[[10,"div"],[14,0,"gh-content-import-wrapper"],[12],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"INIT"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header"],[12],[2,"\\n "],[10,"h1"],[12],[2,"Import content"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"UPLOADING"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header"],[12],[2,"\\n "],[10,"h1"],[12],[2,"Uploading"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"PROCESSING"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header icon-center"],[12],[2,"\\n "],[1,[30,[36,3],["import-in-progress"],[["class"],["gh-import-content-icon"]]]],[2,"\\n "],[10,"h1"],[12],[2,"Import in progress"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"ERROR"],null]],null,[["default"],[{"statements":[[2," "],[10,"header"],[14,0,"modal-header"],[12],[2,"\\n "],[10,"h1"],[12],[1,[32,0,["errorHeader"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[11,"button"],[24,0,"close"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[1,[30,[36,3],["close"],null]],[2,"\\n "],[10,"span"],[14,0,"hidden"],[12],[2,"Close"],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"modal-body"],[12],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"INIT"],null]],null,[["default"],[{"statements":[[2," "],[8,"modal-import-content/content-file-select",[],[["@setFile"],[[30,[36,0],[[32,0],"setFile"],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"UPLOADING"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-import-content-spinner"],[12],[2,"\\n "],[8,"gh-loading-spinner",[],[[],[]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"PROCESSING"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-content-import-resultcontainer"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-content-import-result-summary"],[12],[2,"\\n "],[10,"p"],[12],[2,"Your import is being processed, and you\'ll receive a confirmation email as soon as it\'s complete. Usually this only takes a few minutes, but larger imports may take longer."],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"ERROR"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"failed flex items-start gh-content-upload-errorcontainer error"],[12],[2,"\\n "],[10,"div"],[14,0,"mr2"],[12],[1,[30,[36,3],["warning"],[["class"],["nudge-top--2 w4 h4 fill-red"]]]],[13],[2,"\\n "],[10,"p"],[14,0,"ma0 pa0"],[12],[1,[32,0,["errorMessage"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"modal-footer"],[12],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"INIT"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Close"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"UPLOADING"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Cancel"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"PROCESSING"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn gh-btn-black"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Got it"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["state"]],"ERROR"],null]],null,[["default"],[{"statements":[[6,[37,1],[[32,0,["showTryAgainButton"]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,0],[[32,0],"reset"],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Try again"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[11,"button"],[24,0,"gh-btn gh-btn-black"],[24,4,"button"],[4,[38,2],["click",[32,1]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"OK"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["action","if","on","svg-jar","eq"]}',moduleName:"ghost-admin/components/modal-import-content.hbs"})
1783
+ var o=Ember._setComponentTemplate(s,t.default.extend({ajax:Ember.inject.service(),notifications:Ember.inject.service(),store:Ember.inject.service(),state:"INIT",file:null,paramName:"importfile",importResponse:null,errorMessage:null,errorHeader:null,showTryAgainButton:!0,confirm:()=>{},config:(0,r.inject)(),uploadUrl:Ember.computed((function(){return`${(0,i.default)().apiRoot}/db`})),formData:Ember.computed("file",(function(){let e=new FormData
1786
1784
  return e.append(this.paramName,this.file),e})),actions:{setFile(e){this.set("file",e),this.generateRequest()},reset(){this.set("errorMessage",null),this.set("errorHeader",null),this.set("file",null),this.set("state","INIT"),this.set("showTryAgainButton",!0)},closeModal(){"UPLOADING"!==this.state&&this._super(...arguments)},confirm(){}},generateRequest(){let e=this.ajax,t=this.formData,i=this.uploadUrl
1787
- this.set("state","UPLOADING"),e.post(i,{data:t,processData:!1,contentType:!1,dataType:"text"}).then((()=>{this.set("state","PROCESSING")})).catch((e=>{this._uploadError(e),this.set("state","ERROR")}))},_uploadError(e){let t;(0,r.isVersionMismatchError)(e)&&this.notifications.showAPIError(e),(0,r.isUnsupportedMediaTypeError)(e)?t="The file type you uploaded is not supported.":(0,r.isRequestEntityTooLargeError)(e)?t="The file you uploaded was larger than the maximum file size your server allows.":(console.error(e),t="Something went wrong :("),this.set("errorMessage",t),this.set("errorHeader","Import error")}}))
1788
- e.default=s})),define("ghost-admin/components/modal-import-content/content-file-select",["exports","@glimmer/component","ghost-admin/services/ajax"],(function(e,t,i){var n,r,a,s,o,l,u,c,d
1785
+ this.set("state","UPLOADING"),e.post(i,{data:t,processData:!1,contentType:!1,dataType:"text"}).then((()=>{this.set("state","PROCESSING")})).catch((e=>{this._uploadError(e),this.set("state","ERROR")}))},_uploadError(e){let t;(0,a.isVersionMismatchError)(e)&&this.notifications.showAPIError(e),(0,a.isUnsupportedMediaTypeError)(e)?t="The file type you uploaded is not supported.":(0,a.isRequestEntityTooLargeError)(e)?t="The file you uploaded was larger than the maximum file size your server allows.":(console.error(e),t=n.GENERIC_ERROR_MESSAGE),this.set("errorMessage",t),this.set("errorHeader","Import error")}}))
1786
+ e.default=o})),define("ghost-admin/components/modal-import-content/content-file-select",["exports","@glimmer/component","ghost-admin/services/ajax"],(function(e,t,i){var n,r,a,s,o,l,u,c,d
1789
1787
  function p(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function m(e,t,i,n,r){var a={}
1790
1788
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1791
1789
  const h=Ember.HTMLBars.template({id:"V3neK0k/",block:'{"symbols":[],"statements":[[6,[37,1],[[32,0,["error"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"failed flex items-start gh-content-upload-errorcontainer error"],[12],[2,"\\n "],[10,"div"],[14,0,"mr2"],[12],[1,[30,[36,0],["warning"],[["class"],["nudge-top--2 w4 h4 fill-red"]]]],[13],[2,"\\n "],[10,"p"],[14,0,"ma0 pa0"],[12],[1,[32,0,["error","message"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[10,"div"],[14,0,"upload-form br3"],[12],[2,"\\n "],[11,"section"],[16,0,[31,["gh-image-uploader gh-content-import-uploader ",[32,0,["dragClass"]]]]],[4,[38,2],["drop",[32,0,["drop"]]],null],[4,[38,2],["dragover",[32,0,["dragOver"]]],null],[4,[38,2],["dragleave",[32,0,["dragLeave"]]],null],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@alt","@action","@accept"],[false,[32,0,["labelText"]],[32,0,["fileSelected"]],[32,0,["accept"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"flex flex-column items-center"],[12],[2,"\\n "],[1,[30,[36,0],["upload"],null]],[2,"\\n "],[10,"div"],[14,0,"description"],[12],[1,[32,0,["labelText"]]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["svg-jar","if","on"]}',moduleName:"ghost-admin/components/modal-import-content/content-file-select.hbs"})
@@ -2143,7 +2141,7 @@ let A=(n=Ember.inject.service,r=Ember.inject.service,a=Ember.inject.service,s=Em
2143
2141
  t=this.links?.length?this.links.map((t=>{let i=e.find((e=>e.link.link_id===t.link.link_id))
2144
2142
  return i?{...i,link:{...i.link,originalTo:i.link.to,to:this.utils.cleanTrackedUrl(i.link.to,!1),title:this.utils.cleanTrackedUrl(i.link.to,!0)}}:t})):e.map((e=>({...e,link:{...e.link,originalTo:e.link.to,to:this.utils.cleanTrackedUrl(e.link.to,!1),title:this.utils.cleanTrackedUrl(e.link.to,!0)}})))
2145
2143
  const i=t.reduce(((e,t)=>(e[t.link.title]?(e[t.link.title].count||(e[t.link.title].count={clicks:0}),e[t.link.title].count.clicks||(e[t.link.title].count.clicks=0),e[t.link.title].count.clicks+=t.count?.clicks??0):e[t.link.title]=t,e)),{})
2146
- this.links=Object.values(i)}async fetchReferrersStats(){return this._fetchReferrersStats.isRunning?this._fetchReferrersStats.last:this._fetchReferrersStats.perform()}async fetchLinks(){return this._fetchLinks.isRunning?this._fetchLinks.last:this._fetchLinks.perform()}*_updateLinks(e,t){let i
2144
+ this.links=Object.values(i)}async fetchReferrersStats(){try{return this._fetchReferrersStats.isRunning?this._fetchReferrersStats.last:this._fetchReferrersStats.perform()}catch(e){if(!(0,i.didCancel)(e))throw e}}async fetchLinks(){return this._fetchLinks.isRunning?this._fetchLinks.last:this._fetchLinks.perform()}*_updateLinks(e,t){let i
2147
2145
  this.updateLinkId=e,this.links=this.links?.map((n=>n.link.link_id===e?(i=new URL(n.link.originalTo),{...n,link:{...n.link,to:this.utils.cleanTrackedUrl(t,!1),title:this.utils.cleanTrackedUrl(t,!0)}}):n))
2148
2146
  const n=`post_id:${this.post.id}+to:'${i}'`
2149
2147
  let r=this.ghostPaths.url.api("links/bulk")+`?filter=${encodeURIComponent(n)}`
@@ -2180,7 +2178,7 @@ let A=(n=Ember.inject.service,r=Ember.inject.service,a=Ember.inject.service,s=Em
2180
2178
  t=this.links?.length?this.links.map((t=>{let i=e.find((e=>e.link.link_id===t.link.link_id))
2181
2179
  return i?{...i,link:{...i.link,originalTo:i.link.to,to:this.utils.cleanTrackedUrl(i.link.to,!1),title:this.utils.cleanTrackedUrl(i.link.to,!0)}}:t})):e.map((e=>({...e,link:{...e.link,originalTo:e.link.to,to:this.utils.cleanTrackedUrl(e.link.to,!1),title:this.utils.cleanTrackedUrl(e.link.to,!0)}})))
2182
2180
  const i=t.reduce(((e,t)=>(e[t.link.title]?e[t.link.title].clicks+=t.clicks:e[t.link.title]=t,e)),{})
2183
- this.links=Object.values(i)}async fetchReferrersStats(){return this._fetchReferrersStats.isRunning?this._fetchReferrersStats.last:this._fetchReferrersStats.perform()}async fetchLinks(){return this._fetchLinks.isRunning?this._fetchLinks.last:this._fetchLinks.perform()}*_updateLinks(e,t){let i
2181
+ this.links=Object.values(i)}async fetchReferrersStats(){try{return this._fetchReferrersStats.isRunning?this._fetchReferrersStats.last:this._fetchReferrersStats.perform()}catch(e){if(!(0,i.didCancel)(e))throw e}}async fetchLinks(){return this._fetchLinks.isRunning?this._fetchLinks.last:this._fetchLinks.perform()}*_updateLinks(e,t){let i
2184
2182
  this.updateLinkId=e,this.links=this.links?.map((n=>n.link.link_id===e?(i=new URL(n.link.originalTo),{...n,link:{...n.link,to:this.utils.cleanTrackedUrl(t,!1),title:this.utils.cleanTrackedUrl(t,!0)}}):n))
2185
2183
  const n=`post_id:${this.post.id}+to:'${i}'`
2186
2184
  let r=this.ghostPaths.url.api("links/bulk")+`?filter=${encodeURIComponent(n)}`
@@ -2527,19 +2525,19 @@ return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumera
2527
2525
  const c=[{name:"7 Days",value:7},{name:"30 Days",value:31},{name:"90 Days",value:91}]
2528
2526
  let d=(i=Ember.inject.service,n=Ember.inject.service,r=Ember._action,a=class extends Ember.Controller{constructor(){super(...arguments),l(this,"dashboardStats",s,this),l(this,"membersUtils",o,this),function(e,t,i){t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i}(this,"daysOptions",c)}*loadSiteStatusTask(){return yield this.dashboardStats.loadSiteStatus(),{}}onDaysChange(e){this.days=e.value}get days(){return this.dashboardStats.chartDays}set days(e){this.dashboardStats.chartDays=e}get selectedDaysOption(){return this.daysOptions.find((e=>e.value===this.days))}get isLoading(){return null===this.dashboardStats.siteStatus}get totalMembers(){return this.dashboardStats.memberCounts?.total??0}get isTotalMembersZero(){return this.dashboardStats.memberCounts&&0===this.totalMembers}get hasPaidTiers(){return this.dashboardStats.siteStatus?.hasPaidTiers}get areNewslettersEnabled(){return this.dashboardStats.siteStatus?.newslettersEnabled}get areMembersEnabled(){return this.dashboardStats.siteStatus?.membersEnabled}},s=u(a.prototype,"dashboardStats",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=u(a.prototype,"membersUtils",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(a.prototype,"loadSiteStatusTask",[t.task],Object.getOwnPropertyDescriptor(a.prototype,"loadSiteStatusTask"),a.prototype),u(a.prototype,"onDaysChange",[r],Object.getOwnPropertyDescriptor(a.prototype,"onDaysChange"),a.prototype),a)
2529
2527
  e.default=d})),define("ghost-admin/controllers/designsandbox",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2530
- class t extends Ember.Controller{}e.default=t})),define("ghost-admin/controllers/editor",["exports","ghost-admin/components/modals/editor/confirm-leave","ghost-admin/components/modals/delete-post","ghost-admin/components/editor/modals/delete-snippet","ghost-admin/models/post","ghost-admin/components/modals/limits/publish-limit","ghost-admin/components/editor/modals/re-authenticate","ghost-admin/components/editor/modals/update-snippet","ghost-admin/utils/bound-one-way","ghost-admin/config/environment","ghost-admin/utils/isNumber","moment-timezone","ember-concurrency","ghost-admin/decorators/inject","ghost-admin/services/ajax","ember-ajax/errors"],(function(e,t,i,n,r,a,s,o,l,u,c,d,p,m,h,b){var g,f,v,y,w,k,E,O,P,_,j,T,z,x,S,C,M,D,A,I,R,L,N,U,F,B,V,H,q,$,Y,W,G,K,Z,J,X,Q,ee,te,ie,ne,re,ae,se,oe,le,ue,ce,de,pe,me,he,be,ge,fe,ve,ye,we,ke,Ee,Oe,Pe,_e,je
2531
- function Te(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function ze(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function xe(e,t,i,n,r){var a={}
2532
- return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2533
- const Se="(Untitled)"
2534
- let Ce=["post.scratch","post.titleScratch","post.hasDirtyAttributes","post.tags.[]","post.isError"]
2535
- r.default.eachAttribute((function(e){Ce.push(`post.${e}`)}))
2536
- const Me={errors:{post:{published:{published:"Update failed",draft:"Saving failed",scheduled:"Scheduling failed"},draft:{published:"Publish failed",draft:"Saving failed",scheduled:"Scheduling failed"},scheduled:{scheduled:"Update failed",draft:"Unscheduling failed",published:"Publish failed"}}},success:{post:{published:{published:"Updated",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},draft:{published:"Published",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},scheduled:{scheduled:"Updated",draft:"Unscheduled",published:"Published",sent:"Sent"},sent:{sent:"Updated"}}}}
2537
- let De=(g=Ember.inject.controller,f=Ember.inject.service,v=Ember.inject.service,y=Ember.inject.service,w=Ember.inject.service,k=Ember.inject.service,E=Ember.inject.service,O=Ember.inject.service,P=Ember.inject.service,_=Ember.inject.service,j=Ember.computed.alias("model"),T=(0,l.default)("post.isPublished"),z=(0,l.default)("post.isScheduled"),x=(0,p.taskGroup)().enqueue(),S=Ember.computed.mapBy("post.tags","name"),C=Ember.computed(...Ce),M=Ember.computed,D=Ember.computed("_snippets.@each.{name,isNew}"),A=Ember.computed("session.user.{isAdmin,isEditor}"),I=Ember.computed("_autosaveTask.isRunning","_timedSaveTask.isRunning"),R=Ember.computed("post.isDraft"),L=Ember._action,N=Ember._action,U=Ember._action,F=Ember._action,B=Ember._action,V=Ember._action,H=Ember._action,q=Ember._action,$=Ember._action,Y=Ember._action,W=Ember._action,G=Ember._action,K=Ember._action,Z=Ember._action,J=Ember._action,X=Ember._action,Q=Ember._action,ee=Ember._action,te=Ember._action,ie=(0,p.task)({group:"saveTasks"}),ne=(0,p.task)({group:"saveTasks"}),re=(0,p.task)({group:"saveTasks"}),ae=Ember._action,se=(0,p.task)((function*(){if(this._canAutosave){if(this.get("post.isNew"))return this.autosaveTask.perform()
2538
- yield(0,p.timeout)(3e3),this.autosaveTask.perform()}})).restartable(),oe=(0,p.task)((function*(){if(this._canAutosave)for(;"test"!==u.default.environment;)yield(0,p.timeout)(6e4),this.autosaveTask.perform()})).drop(),le=class extends Ember.Controller{constructor(){super(...arguments),Te(this,"application",ue,this),Te(this,"feature",ce,this),Te(this,"membersCountCache",de,this),Te(this,"modals",pe,this),Te(this,"notifications",me,this),Te(this,"router",he,this),Te(this,"slugGenerator",be,this),Te(this,"session",ge,this),Te(this,"settings",fe,this),Te(this,"ui",ve,this),Te(this,"config",ye,this),ze(this,"shouldFocusTitle",!1),ze(this,"showSettingsMenu",!1),ze(this,"fromAnalytics",!1),ze(this,"wordcount",null),ze(this,"_leaveConfirmed",!1),ze(this,"_previousTagNames",null),Te(this,"post",we,this),Te(this,"willPublish",ke,this),Te(this,"willSchedule",Ee,this),Te(this,"saveTasks",Oe,this),Te(this,"_tagNames",Pe,this),Te(this,"_autosaveTask",_e,this),Te(this,"_timedSaveTask",je,this)}get hasDirtyAttributes(){return this._hasDirtyAttributes()}set hasDirtyAttributes(e){return e}get _snippets(){return this.store.peekAll("snippet")}get snippets(){return this._snippets.reject((e=>e.get("isNew"))).sort(((e,t)=>e.name.localeCompare(t.name)))}get canManageSnippets(){let{user:e}=this.session
2528
+ class t extends Ember.Controller{}e.default=t})),define("ghost-admin/controllers/editor",["exports","ghost-admin/components/modals/editor/confirm-leave","ghost-admin/components/modals/delete-post","ghost-admin/components/editor/modals/delete-snippet","ghost-admin/models/post","ghost-admin/components/modals/limits/publish-limit","ghost-admin/components/editor/modals/re-authenticate","ghost-admin/components/editor/modals/update-snippet","ghost-admin/utils/bound-one-way","ghost-admin/config/environment","ghost-admin/utils/isNumber","moment-timezone","ghost-admin/services/notifications","ember-concurrency","ghost-admin/decorators/inject","ghost-admin/services/ajax","ember-ajax/errors"],(function(e,t,i,n,r,a,s,o,l,u,c,d,p,m,h,b,g){var f,v,y,w,k,E,O,P,_,j,T,z,x,S,C,M,D,A,I,R,L,N,U,F,B,V,H,q,$,Y,W,G,K,Z,J,X,Q,ee,te,ie,ne,re,ae,se,oe,le,ue,ce,de,pe,me,he,be,ge,fe,ve,ye,we,ke,Ee,Oe,Pe,_e,je,Te
2529
+ function ze(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function xe(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Se(e,t,i,n,r){var a={}
2530
+ return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2531
+ const Ce="(Untitled)"
2532
+ let Me=["post.scratch","post.titleScratch","post.hasDirtyAttributes","post.tags.[]","post.isError"]
2533
+ r.default.eachAttribute((function(e){Me.push(`post.${e}`)}))
2534
+ const De={errors:{post:{published:{published:"Update failed",draft:"Saving failed",scheduled:"Scheduling failed"},draft:{published:"Publish failed",draft:"Saving failed",scheduled:"Scheduling failed"},scheduled:{scheduled:"Update failed",draft:"Unscheduling failed",published:"Publish failed"}}},success:{post:{published:{published:"Updated",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},draft:{published:"Published",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},scheduled:{scheduled:"Updated",draft:"Unscheduled",published:"Published",sent:"Sent"},sent:{sent:"Updated"}}}}
2535
+ let Ae=(f=Ember.inject.controller,v=Ember.inject.service,y=Ember.inject.service,w=Ember.inject.service,k=Ember.inject.service,E=Ember.inject.service,O=Ember.inject.service,P=Ember.inject.service,_=Ember.inject.service,j=Ember.inject.service,T=Ember.computed.alias("model"),z=(0,l.default)("post.isPublished"),x=(0,l.default)("post.isScheduled"),S=(0,m.taskGroup)().enqueue(),C=Ember.computed.mapBy("post.tags","name"),M=Ember.computed(...Me),D=Ember.computed,A=Ember.computed("_snippets.@each.{name,isNew}"),I=Ember.computed("session.user.{isAdmin,isEditor}"),R=Ember.computed("_autosaveTask.isRunning","_timedSaveTask.isRunning"),L=Ember.computed("post.isDraft"),N=Ember._action,U=Ember._action,F=Ember._action,B=Ember._action,V=Ember._action,H=Ember._action,q=Ember._action,$=Ember._action,Y=Ember._action,W=Ember._action,G=Ember._action,K=Ember._action,Z=Ember._action,J=Ember._action,X=Ember._action,Q=Ember._action,ee=Ember._action,te=Ember._action,ie=Ember._action,ne=(0,m.task)({group:"saveTasks"}),re=(0,m.task)({group:"saveTasks"}),ae=(0,m.task)({group:"saveTasks"}),se=Ember._action,oe=(0,m.task)((function*(){if(this._canAutosave){if(this.get("post.isNew"))return this.autosaveTask.perform()
2536
+ yield(0,m.timeout)(3e3),this.autosaveTask.perform()}})).restartable(),le=(0,m.task)((function*(){if(this._canAutosave)for(;"test"!==u.default.environment;)yield(0,m.timeout)(6e4),this.autosaveTask.perform()})).drop(),ue=class extends Ember.Controller{constructor(){super(...arguments),ze(this,"application",ce,this),ze(this,"feature",de,this),ze(this,"membersCountCache",pe,this),ze(this,"modals",me,this),ze(this,"notifications",he,this),ze(this,"router",be,this),ze(this,"slugGenerator",ge,this),ze(this,"session",fe,this),ze(this,"settings",ve,this),ze(this,"ui",ye,this),ze(this,"config",we,this),xe(this,"shouldFocusTitle",!1),xe(this,"showSettingsMenu",!1),xe(this,"fromAnalytics",!1),xe(this,"wordcount",null),xe(this,"_leaveConfirmed",!1),xe(this,"_previousTagNames",null),ze(this,"post",ke,this),ze(this,"willPublish",Ee,this),ze(this,"willSchedule",Oe,this),ze(this,"saveTasks",Pe,this),ze(this,"_tagNames",_e,this),ze(this,"_autosaveTask",je,this),ze(this,"_timedSaveTask",Te,this)}get hasDirtyAttributes(){return this._hasDirtyAttributes()}set hasDirtyAttributes(e){return e}get _snippets(){return this.store.peekAll("snippet")}get snippets(){return this._snippets.reject((e=>e.get("isNew"))).sort(((e,t)=>e.name.localeCompare(t.name)))}get canManageSnippets(){let{user:e}=this.session
2539
2537
  return!(!e.get("isAdmin")&&!e.get("isEditor"))}get _autosaveRunning(){let e=this.get("_autosaveTask.isRunning"),t=this.get("_timedSaveTask.isRunning")
2540
2538
  return e||t}get _canAutosave(){return"test"!==u.default.environment&&this.get("post.isDraft")}updateScratch(e){this.set("post.scratch",e),this._autosaveTask.perform(),this._timedSaveTask.perform()}updateTitleScratch(e){this.set("post.titleScratch",e)}setSaveType(e){"publish"===e?(this.set("willPublish",!0),this.set("willSchedule",!1)):"draft"===e?(this.set("willPublish",!1),this.set("willSchedule",!1)):"schedule"===e&&(this.set("willSchedule",!0),this.set("willPublish",!1))}save(e){return this.saveTask.perform(e)}cancelAutosave(){this._autosaveTask.cancelAll(),this._timedSaveTask.cancelAll()}leaveEditor(){let e=this.leaveEditorTransition
2541
2539
  if(e)return this.reset(),e.retry()
2542
- this.notifications.showAlert("Sorry, there was an error in the application. Please let the Ghost team know what happened.",{type:"error"})}openDeletePostModal(){this.get("post.isNew")||this.modals.open(i.default,{post:this.post})}openUpgradeModal(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
2540
+ this.notifications.showAlert(p.GENERIC_ERROR_MESSAGE,{type:"error"})}openDeletePostModal(){this.get("post.isNew")||this.modals.open(i.default,{post:this.post})}openUpgradeModal(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
2543
2541
  this.modals.open(a.default,{message:e.message,details:e.details})}setKoenigEditor(e){this._koenig=e,this.post.isDraft&&this._koenig.cleanup()}updateWordCount(e){this.set("wordCount",e)}setFeatureImage(e){this.post.set("featureImage",e),this.post.isDraft&&this.autosaveTask.perform()}clearFeatureImage(){this.post.set("featureImage",null),this.post.set("featureImageAlt",null),this.post.set("featureImageCaption",null),this.post.isDraft&&this.autosaveTask.perform()}setFeatureImageAlt(e){this.post.set("featureImageAlt",e),this.post.isDraft&&this.autosaveTask.perform()}setFeatureImageCaption(e){this.post.set("featureImageCaption",e),this.post.isDraft&&this.autosaveTask.perform()}toggleSettingsMenu(){this.set("showSettingsMenu",!this.showSettingsMenu)}closeSettingsMenu(){this.set("showSettingsMenu",!1)}saveSnippet(e){let t=this.store.createRecord("snippet",e)
2544
2542
  return t.save().then((()=>(this.notifications.closeAlerts("snippet.save"),this.notifications.showNotification(`Snippet saved as "${e.name}"`,{type:"success"}),t))).catch((e=>{throw t.errors.isEmpty||this.notifications.showAlert(`Snippet save failed: ${t.errors.messages.join(". ")}`,{type:"error",key:"snippet.save"}),t.rollbackAttributes(),e}))}async confirmUpdateSnippet(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}
2545
2543
  await this.modals.open(o.default,{snippet:e,updatedProperties:t})}async confirmDeleteSnippet(e){await this.modals.open(n.default,{snippet:e})}*autosaveTask(){if(!this.get("saveTask.isRunning"))return yield this.saveTask.perform({silent:!0,backgroundSave:!0})}*saveTask(){let e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=this.get("post.status"),n=this.get("post.isNew")
@@ -2547,10 +2545,10 @@ if(this.cancelAutosave(),!t.backgroundSave||this.hasDirtyAttributes){e=t.backgro
2547
2545
  try{let e=yield this._savePostTask.perform(t)
2548
2546
  return e.set("statusScratch",null),this.notifications.clearAll(),t.silent||this._showSaveNotification(i,e.get("status"),!!n),n&&e.get("id")?(this.leaveEditorTransition||this.replaceRoute("editor.edit",e),!0):e}catch(r){if(!this.session.isAuthenticated&&(yield this.modals.open(s.default),this.session.isAuthenticated))return void this.saveTask.perform(t)
2549
2547
  if(this.set("post.status",i),void 0===r&&0===this.post.errors.length)return
2550
- if((0,h.isHostLimitError)(r))return this.post.rollbackAttributes(),void this.openUpgradeModal(r.payload.errors[0])
2551
- if(r&&!(0,b.isInvalidError)(r))return void this.send("error",r)
2548
+ if((0,b.isHostLimitError)(r))return this.post.rollbackAttributes(),void this.openUpgradeModal(r.payload.errors[0])
2549
+ if(r&&!(0,g.isInvalidError)(r))return void this.send("error",r)
2552
2550
  if(!t.silent){let e=r||this.get("post.errors.messages")
2553
- throw void this._showErrorAlert(i,this.get("post.status"),e)}return this.post}}}*beforeSaveTask(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).backgroundSave||this._koenig&&(this._koenig.cleanup(),this.set("hasDirtyAttributes",!0)),this.set("post.mobiledoc",JSON.parse(JSON.stringify(this.post.scratch||null))),this.get("post.titleScratch").trim()||this.set("post.titleScratch",Se),this.set("post.title",this.get("post.titleScratch")),this.set("post.customExcerpt",this.get("post.customExcerptScratch")),this.set("post.footerInjection",this.get("post.footerExcerptScratch")),this.set("post.headerInjection",this.get("post.headerExcerptScratch")),this.set("post.metaTitle",this.get("post.metaTitleScratch")),this.set("post.metaDescription",this.get("post.metaDescriptionScratch")),this.set("post.ogTitle",this.get("post.ogTitleScratch")),this.set("post.ogDescription",this.get("post.ogDescriptionScratch")),this.set("post.twitterTitle",this.get("post.twitterTitleScratch")),this.set("post.twitterDescription",this.get("post.twitterDescriptionScratch")),this.set("post.emailSubject",this.get("post.emailSubjectScratch")),this.get("post.slug")||(this.saveTitleTask.cancelAll(),yield this.generateSlugTask.perform())}*updateSlugTask(e){let t,i,n=this.get("post.slug")
2551
+ throw void this._showErrorAlert(i,this.get("post.status"),e)}return this.post}}}*beforeSaveTask(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).backgroundSave||this._koenig&&(this._koenig.cleanup(),this.set("hasDirtyAttributes",!0)),this.set("post.mobiledoc",JSON.parse(JSON.stringify(this.post.scratch||null))),this.get("post.titleScratch").trim()||this.set("post.titleScratch",Ce),this.set("post.title",this.get("post.titleScratch")),this.set("post.customExcerpt",this.get("post.customExcerptScratch")),this.set("post.footerInjection",this.get("post.footerExcerptScratch")),this.set("post.headerInjection",this.get("post.headerExcerptScratch")),this.set("post.metaTitle",this.get("post.metaTitleScratch")),this.set("post.metaDescription",this.get("post.metaDescriptionScratch")),this.set("post.ogTitle",this.get("post.ogTitleScratch")),this.set("post.ogDescription",this.get("post.ogDescriptionScratch")),this.set("post.twitterTitle",this.get("post.twitterTitleScratch")),this.set("post.twitterDescription",this.get("post.twitterDescriptionScratch")),this.set("post.emailSubject",this.get("post.emailSubjectScratch")),this.get("post.slug")||(this.saveTitleTask.cancelAll(),yield this.generateSlugTask.perform())}*updateSlugTask(e){let t,i,n=this.get("post.slug")
2554
2552
  if(t=e||n,t=t&&t.trim(),!t||n===t)return void this.set("slugValue",n)
2555
2553
  if(i=yield this.slugGenerator.generateSlug("post",t),i===n)return
2556
2554
  let r=i.split("-"),a=Number(r.pop())
@@ -2560,13 +2558,13 @@ if(e){let t=this.get("post.status")
2560
2558
  this._showErrorAlert(t,t,e)}throw e}}*_savePostTask(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{post:t}=this
2561
2559
  const i=this.post.emailOnly
2562
2560
  Object.prototype.hasOwnProperty.call(e,"emailOnly")&&this.post.set("emailOnly",e.emailOnly)
2563
- try{yield t.save(e)}catch(n){if(this.post.set("emailOnly",i),(0,h.isServerUnreachableError)(n)){const[e,t]=this.post.changedAttributes().status||[this.post.status,this.post.status]
2561
+ try{yield t.save(e)}catch(n){if(this.post.set("emailOnly",i),(0,b.isServerUnreachableError)(n)){const[e,t]=this.post.changedAttributes().status||[this.post.status,this.post.status]
2564
2562
  throw void this._showErrorAlert(e,t,n)}throw n}return this.afterSave(t),t}afterSave(e){this.notifications.closeAlerts("post.save"),e.updateTags(),this._previousTagNames=this._tagNames,e.scratch||e.set("scratch",JSON.parse(JSON.stringify(e.get("mobiledoc"))))
2565
2563
  let t=e.get("titleScratch")===e.get("title"),i=JSON.stringify(e.get("scratch"))===JSON.stringify(e.get("mobiledoc"))
2566
2564
  t&&i&&this.set("hasDirtyAttributes",!1)}*saveTitleTask(){let e=this.post,t=e.get("title"),i=e.get("titleScratch").trim()
2567
- t&&i&&i===t||!t&&!i||(this.set("hasDirtyAttributes",!0),(e.get("isNew")&&!t||t===Se)&&(yield this.generateSlugTask.perform()),this.get("post.isDraft")&&(yield this.autosaveTask.perform()),this.ui.updateDocumentTitle())}*generateSlugTask(){let e=this.get("post.titleScratch")
2568
- if(e!==Se||!this.get("post.slug"))try{let t=yield this.slugGenerator.generateSlug("post",e)
2569
- Ember.isBlank(t)||this.set("post.slug",t)}catch(t){(0,h.isVersionMismatchError)(t)&&this.notifications.showAPIError(t)}}*backgroundLoaderTask(){yield this.store.query("snippet",{limit:"all"})}setPost(e){e!==this.post?(this.reset(),this.set("post",e),this.backgroundLoaderTask.perform(),this.set("shouldFocusTitle",e.get("isNew")),e.set("titleScratch",e.get("title")),e.set("scratch",e.get("mobiledoc")),this._previousTagNames=this._tagNames,window.onbeforeunload=()=>{if(this.hasDirtyAttributes)return"==============================\n\nHey there! It looks like you're in the middle of writing something and you haven't saved all of your content.\n\nSave before you go!\n\n=============================="}):this.set("shouldFocusTitle",e.get("isNew"))}async willTransition(e){let i=this.post
2565
+ t&&i&&i===t||!t&&!i||(this.set("hasDirtyAttributes",!0),(e.get("isNew")&&!t||t===Ce)&&(yield this.generateSlugTask.perform()),this.get("post.isDraft")&&(yield this.autosaveTask.perform()),this.ui.updateDocumentTitle())}*generateSlugTask(){let e=this.get("post.titleScratch")
2566
+ if(e!==Ce||!this.get("post.slug"))try{let t=yield this.slugGenerator.generateSlug("post",e)
2567
+ Ember.isBlank(t)||this.set("post.slug",t)}catch(t){(0,b.isVersionMismatchError)(t)&&this.notifications.showAPIError(t)}}*backgroundLoaderTask(){yield this.store.query("snippet",{limit:"all"})}setPost(e){e!==this.post?(this.reset(),this.set("post",e),this.backgroundLoaderTask.perform(),this.set("shouldFocusTitle",e.get("isNew")),e.set("titleScratch",e.get("title")),e.set("scratch",e.get("mobiledoc")),this._previousTagNames=this._tagNames,window.onbeforeunload=()=>{if(this.hasDirtyAttributes)return"==============================\n\nHey there! It looks like you're in the middle of writing something and you haven't saved all of your content.\n\nSave before you go!\n\n=============================="}):this.set("shouldFocusTitle",e.get("isNew"))}async willTransition(e){let i=this.post
2570
2568
  if(!i)return
2571
2569
  this._koenig&&i.isDraft&&this._koenig.cleanup()
2572
2570
  let n=this.hasDirtyAttributes,r=i.getProperties("isDeleted","isSaving","hasDirtyAttributes","isNew"),a="editor.new"===this.router.currentRouteName&&"editor.edit"===e.targetName&&e.intent.contexts&&e.intent.contexts[0]&&e.intent.contexts[0].id===i.id,s=r.isDeleted&&(r.isSaving||!r.hasDirtyAttributes)
@@ -2586,19 +2584,19 @@ if(r||n){let e=JSON.stringify(n),t=JSON.stringify(r)
2586
2584
  if(t!==e)return this._leaveModalReason={reason:"mobiledoc is different",context:{current:e,scratch:t}},!0}if(e.get("isNew")){let t=Object.keys(e.changedAttributes())
2587
2585
  return t.length&&(this._leaveModalReason={reason:"post.changedAttributes.length > 0",context:e.changedAttributes()}),!!t.length}let{hasDirtyAttributes:a}=e
2588
2586
  return a&&(this._leaveModalReason={reason:"post.hasDirtyAttributes === true",context:e.changedAttributes()}),a}_showSaveNotification(e,t,i){if("scheduled"===t)return this._showScheduledNotification(i)
2589
- let n,r,a,s=this.notifications,o=Me.success.post[e][t]
2587
+ let n,r,a,s=this.notifications,o=De.success.post[e][t]
2590
2588
  "published"!==t&&"scheduled"!==t||(r=Ember.String.capitalize(this.get("post.displayName")),a=this.get("post.url"),n=`<a href="${a}" target="_blank">View ${r}</a>`),s.showNotification(o,{type:"success",actions:n&&Ember.String.htmlSafe(n),delayed:i})}async _showScheduledNotification(e){let{publishedAtUTC:t,previewUrl:i,emailOnly:n,newsletter:r}=this.post,a=d.default.tz(t,this.settings.timezone),s=n?["Will be sent"]:["Will be published"]
2591
2589
  if(r){const e=await this.membersCountCache.countString(this.post.fullRecipientFilter,{newsletter:r})
2592
2590
  s.push(`${n?"":"and delivered "}to <span><strong>${e}</strong></span>`)}s.push(`on <span><strong>${a.format("MMM Do")}</strong></span>`),s.push(`at <span><strong>${a.format("HH:mm")}</strong>`),0===a.utcOffset()?s.push("(UTC)</span>"):s.push(`(UTC${a.format("Z").replace(/([+-])0/,"$1").replace(/:00/,"")})</span>`),s=Ember.String.htmlSafe(s.join(" "))
2593
2591
  let o=Ember.String.htmlSafe(`<a href="${i}" target="_blank">View Preview</a>`)
2594
- return this.notifications.showNotification("Scheduled",{description:s,actions:o,type:"success",delayed:e})}_showErrorAlert(e,t,i,n){let r,a=Me.errors.post[e][t],s=this.notifications
2595
- if((0,h.isServerUnreachableError)(i))r="Unable to connect, please check your internet connection and try again"
2592
+ return this.notifications.showNotification("Scheduled",{description:s,actions:o,type:"success",delayed:e})}_showErrorAlert(e,t,i,n){let r,a=De.errors.post[e][t],s=this.notifications
2593
+ if((0,b.isServerUnreachableError)(i))r="Unable to connect, please check your internet connection and try again"
2596
2594
  else if(i&&(o=i,"[object String]"===toString.call(o)))r=i
2597
2595
  else if(i&&Ember.isArray(i))r=i[0]
2598
2596
  else{if(i&&i.payload&&i.payload.errors&&i.payload.errors[0].message)return this.notifications.showAPIError(i,{key:"post.save"})
2599
2597
  r="Unknown Error"}var o
2600
- a+=`: ${r}`,a=Ember.String.htmlSafe(a),s.showAlert(a,{type:"error",delayed:n,key:"post.save"})}},ue=xe(le.prototype,"application",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ce=xe(le.prototype,"feature",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=xe(le.prototype,"membersCountCache",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=xe(le.prototype,"modals",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=xe(le.prototype,"notifications",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=xe(le.prototype,"router",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=xe(le.prototype,"slugGenerator",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=xe(le.prototype,"session",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=xe(le.prototype,"settings",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=xe(le.prototype,"ui",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=xe(le.prototype,"config",[m.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),we=xe(le.prototype,"post",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ke=xe(le.prototype,"willPublish",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Ee=xe(le.prototype,"willSchedule",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Oe=xe(le.prototype,"saveTasks",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Pe=xe(le.prototype,"_tagNames",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),xe(le.prototype,"hasDirtyAttributes",[C],Object.getOwnPropertyDescriptor(le.prototype,"hasDirtyAttributes"),le.prototype),xe(le.prototype,"_snippets",[M],Object.getOwnPropertyDescriptor(le.prototype,"_snippets"),le.prototype),xe(le.prototype,"snippets",[D],Object.getOwnPropertyDescriptor(le.prototype,"snippets"),le.prototype),xe(le.prototype,"canManageSnippets",[A],Object.getOwnPropertyDescriptor(le.prototype,"canManageSnippets"),le.prototype),xe(le.prototype,"_autosaveRunning",[I],Object.getOwnPropertyDescriptor(le.prototype,"_autosaveRunning"),le.prototype),xe(le.prototype,"_canAutosave",[R],Object.getOwnPropertyDescriptor(le.prototype,"_canAutosave"),le.prototype),xe(le.prototype,"updateScratch",[L],Object.getOwnPropertyDescriptor(le.prototype,"updateScratch"),le.prototype),xe(le.prototype,"updateTitleScratch",[N],Object.getOwnPropertyDescriptor(le.prototype,"updateTitleScratch"),le.prototype),xe(le.prototype,"setSaveType",[U],Object.getOwnPropertyDescriptor(le.prototype,"setSaveType"),le.prototype),xe(le.prototype,"save",[F],Object.getOwnPropertyDescriptor(le.prototype,"save"),le.prototype),xe(le.prototype,"cancelAutosave",[B],Object.getOwnPropertyDescriptor(le.prototype,"cancelAutosave"),le.prototype),xe(le.prototype,"leaveEditor",[V],Object.getOwnPropertyDescriptor(le.prototype,"leaveEditor"),le.prototype),xe(le.prototype,"openDeletePostModal",[H],Object.getOwnPropertyDescriptor(le.prototype,"openDeletePostModal"),le.prototype),xe(le.prototype,"openUpgradeModal",[q],Object.getOwnPropertyDescriptor(le.prototype,"openUpgradeModal"),le.prototype),xe(le.prototype,"setKoenigEditor",[$],Object.getOwnPropertyDescriptor(le.prototype,"setKoenigEditor"),le.prototype),xe(le.prototype,"updateWordCount",[Y],Object.getOwnPropertyDescriptor(le.prototype,"updateWordCount"),le.prototype),xe(le.prototype,"setFeatureImage",[W],Object.getOwnPropertyDescriptor(le.prototype,"setFeatureImage"),le.prototype),xe(le.prototype,"clearFeatureImage",[G],Object.getOwnPropertyDescriptor(le.prototype,"clearFeatureImage"),le.prototype),xe(le.prototype,"setFeatureImageAlt",[K],Object.getOwnPropertyDescriptor(le.prototype,"setFeatureImageAlt"),le.prototype),xe(le.prototype,"setFeatureImageCaption",[Z],Object.getOwnPropertyDescriptor(le.prototype,"setFeatureImageCaption"),le.prototype),xe(le.prototype,"toggleSettingsMenu",[J],Object.getOwnPropertyDescriptor(le.prototype,"toggleSettingsMenu"),le.prototype),xe(le.prototype,"closeSettingsMenu",[X],Object.getOwnPropertyDescriptor(le.prototype,"closeSettingsMenu"),le.prototype),xe(le.prototype,"saveSnippet",[Q],Object.getOwnPropertyDescriptor(le.prototype,"saveSnippet"),le.prototype),xe(le.prototype,"confirmUpdateSnippet",[ee],Object.getOwnPropertyDescriptor(le.prototype,"confirmUpdateSnippet"),le.prototype),xe(le.prototype,"confirmDeleteSnippet",[te],Object.getOwnPropertyDescriptor(le.prototype,"confirmDeleteSnippet"),le.prototype),xe(le.prototype,"autosaveTask",[p.dropTask],Object.getOwnPropertyDescriptor(le.prototype,"autosaveTask"),le.prototype),xe(le.prototype,"saveTask",[ie],Object.getOwnPropertyDescriptor(le.prototype,"saveTask"),le.prototype),xe(le.prototype,"beforeSaveTask",[p.task],Object.getOwnPropertyDescriptor(le.prototype,"beforeSaveTask"),le.prototype),xe(le.prototype,"updateSlugTask",[ne],Object.getOwnPropertyDescriptor(le.prototype,"updateSlugTask"),le.prototype),xe(le.prototype,"savePostTask",[re],Object.getOwnPropertyDescriptor(le.prototype,"savePostTask"),le.prototype),xe(le.prototype,"_savePostTask",[p.task],Object.getOwnPropertyDescriptor(le.prototype,"_savePostTask"),le.prototype),xe(le.prototype,"afterSave",[ae],Object.getOwnPropertyDescriptor(le.prototype,"afterSave"),le.prototype),xe(le.prototype,"saveTitleTask",[p.task],Object.getOwnPropertyDescriptor(le.prototype,"saveTitleTask"),le.prototype),xe(le.prototype,"generateSlugTask",[p.enqueueTask],Object.getOwnPropertyDescriptor(le.prototype,"generateSlugTask"),le.prototype),xe(le.prototype,"backgroundLoaderTask",[p.restartableTask],Object.getOwnPropertyDescriptor(le.prototype,"backgroundLoaderTask"),le.prototype),_e=xe(le.prototype,"_autosaveTask",[se],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),je=xe(le.prototype,"_timedSaveTask",[oe],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le)
2601
- e.default=De})),define("ghost-admin/controllers/editor/edit-loading",["exports"],(function(e){var t,i,n
2598
+ a+=`: ${r}`,a=Ember.String.htmlSafe(a),s.showAlert(a,{type:"error",delayed:n,key:"post.save"})}},ce=Se(ue.prototype,"application",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=Se(ue.prototype,"feature",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=Se(ue.prototype,"membersCountCache",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=Se(ue.prototype,"modals",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=Se(ue.prototype,"notifications",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=Se(ue.prototype,"router",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=Se(ue.prototype,"slugGenerator",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=Se(ue.prototype,"session",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=Se(ue.prototype,"settings",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=Se(ue.prototype,"ui",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),we=Se(ue.prototype,"config",[h.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ke=Se(ue.prototype,"post",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Ee=Se(ue.prototype,"willPublish",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Oe=Se(ue.prototype,"willSchedule",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Pe=Se(ue.prototype,"saveTasks",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_e=Se(ue.prototype,"_tagNames",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Se(ue.prototype,"hasDirtyAttributes",[M],Object.getOwnPropertyDescriptor(ue.prototype,"hasDirtyAttributes"),ue.prototype),Se(ue.prototype,"_snippets",[D],Object.getOwnPropertyDescriptor(ue.prototype,"_snippets"),ue.prototype),Se(ue.prototype,"snippets",[A],Object.getOwnPropertyDescriptor(ue.prototype,"snippets"),ue.prototype),Se(ue.prototype,"canManageSnippets",[I],Object.getOwnPropertyDescriptor(ue.prototype,"canManageSnippets"),ue.prototype),Se(ue.prototype,"_autosaveRunning",[R],Object.getOwnPropertyDescriptor(ue.prototype,"_autosaveRunning"),ue.prototype),Se(ue.prototype,"_canAutosave",[L],Object.getOwnPropertyDescriptor(ue.prototype,"_canAutosave"),ue.prototype),Se(ue.prototype,"updateScratch",[N],Object.getOwnPropertyDescriptor(ue.prototype,"updateScratch"),ue.prototype),Se(ue.prototype,"updateTitleScratch",[U],Object.getOwnPropertyDescriptor(ue.prototype,"updateTitleScratch"),ue.prototype),Se(ue.prototype,"setSaveType",[F],Object.getOwnPropertyDescriptor(ue.prototype,"setSaveType"),ue.prototype),Se(ue.prototype,"save",[B],Object.getOwnPropertyDescriptor(ue.prototype,"save"),ue.prototype),Se(ue.prototype,"cancelAutosave",[V],Object.getOwnPropertyDescriptor(ue.prototype,"cancelAutosave"),ue.prototype),Se(ue.prototype,"leaveEditor",[H],Object.getOwnPropertyDescriptor(ue.prototype,"leaveEditor"),ue.prototype),Se(ue.prototype,"openDeletePostModal",[q],Object.getOwnPropertyDescriptor(ue.prototype,"openDeletePostModal"),ue.prototype),Se(ue.prototype,"openUpgradeModal",[$],Object.getOwnPropertyDescriptor(ue.prototype,"openUpgradeModal"),ue.prototype),Se(ue.prototype,"setKoenigEditor",[Y],Object.getOwnPropertyDescriptor(ue.prototype,"setKoenigEditor"),ue.prototype),Se(ue.prototype,"updateWordCount",[W],Object.getOwnPropertyDescriptor(ue.prototype,"updateWordCount"),ue.prototype),Se(ue.prototype,"setFeatureImage",[G],Object.getOwnPropertyDescriptor(ue.prototype,"setFeatureImage"),ue.prototype),Se(ue.prototype,"clearFeatureImage",[K],Object.getOwnPropertyDescriptor(ue.prototype,"clearFeatureImage"),ue.prototype),Se(ue.prototype,"setFeatureImageAlt",[Z],Object.getOwnPropertyDescriptor(ue.prototype,"setFeatureImageAlt"),ue.prototype),Se(ue.prototype,"setFeatureImageCaption",[J],Object.getOwnPropertyDescriptor(ue.prototype,"setFeatureImageCaption"),ue.prototype),Se(ue.prototype,"toggleSettingsMenu",[X],Object.getOwnPropertyDescriptor(ue.prototype,"toggleSettingsMenu"),ue.prototype),Se(ue.prototype,"closeSettingsMenu",[Q],Object.getOwnPropertyDescriptor(ue.prototype,"closeSettingsMenu"),ue.prototype),Se(ue.prototype,"saveSnippet",[ee],Object.getOwnPropertyDescriptor(ue.prototype,"saveSnippet"),ue.prototype),Se(ue.prototype,"confirmUpdateSnippet",[te],Object.getOwnPropertyDescriptor(ue.prototype,"confirmUpdateSnippet"),ue.prototype),Se(ue.prototype,"confirmDeleteSnippet",[ie],Object.getOwnPropertyDescriptor(ue.prototype,"confirmDeleteSnippet"),ue.prototype),Se(ue.prototype,"autosaveTask",[m.dropTask],Object.getOwnPropertyDescriptor(ue.prototype,"autosaveTask"),ue.prototype),Se(ue.prototype,"saveTask",[ne],Object.getOwnPropertyDescriptor(ue.prototype,"saveTask"),ue.prototype),Se(ue.prototype,"beforeSaveTask",[m.task],Object.getOwnPropertyDescriptor(ue.prototype,"beforeSaveTask"),ue.prototype),Se(ue.prototype,"updateSlugTask",[re],Object.getOwnPropertyDescriptor(ue.prototype,"updateSlugTask"),ue.prototype),Se(ue.prototype,"savePostTask",[ae],Object.getOwnPropertyDescriptor(ue.prototype,"savePostTask"),ue.prototype),Se(ue.prototype,"_savePostTask",[m.task],Object.getOwnPropertyDescriptor(ue.prototype,"_savePostTask"),ue.prototype),Se(ue.prototype,"afterSave",[se],Object.getOwnPropertyDescriptor(ue.prototype,"afterSave"),ue.prototype),Se(ue.prototype,"saveTitleTask",[m.task],Object.getOwnPropertyDescriptor(ue.prototype,"saveTitleTask"),ue.prototype),Se(ue.prototype,"generateSlugTask",[m.enqueueTask],Object.getOwnPropertyDescriptor(ue.prototype,"generateSlugTask"),ue.prototype),Se(ue.prototype,"backgroundLoaderTask",[m.restartableTask],Object.getOwnPropertyDescriptor(ue.prototype,"backgroundLoaderTask"),ue.prototype),je=Se(ue.prototype,"_autosaveTask",[oe],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Te=Se(ue.prototype,"_timedSaveTask",[le],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue)
2599
+ e.default=Ae})),define("ghost-admin/controllers/editor/edit-loading",["exports"],(function(e){var t,i,n
2602
2600
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2603
2601
  let r=(t=Ember.inject.service,i=class extends Ember.Controller{constructor(){var e,t,i,r
2604
2602
  super(...arguments),e=this,t="ui",r=this,(i=n)&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}},a=i.prototype,s="ui",o=[t],l={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(l).forEach((function(e){c[e]=l[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=o.slice().reverse().reduce((function(e,t){return t(a,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(a,s,c),c=null),n=c,i)
@@ -2616,19 +2614,19 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2616
2614
  let r=(t=Ember._tracked,i=class extends Ember.Controller{constructor(){var e,t,i,r
2617
2615
  super(...arguments),function(e,t,i){t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i}(this,"queryParams",["firstStart"]),e=this,t="firstStart",r=this,(i=n)&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}},a=i.prototype,s="firstStart",o=[t],l={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}},c={},Object.keys(l).forEach((function(e){c[e]=l[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=o.slice().reverse().reduce((function(e,t){return t(a,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(a,s,c),c=null),n=c,i)
2618
2616
  var a,s,o,l,u,c
2619
- e.default=r})),define("ghost-admin/controllers/lexical-editor",["exports","ghost-admin/components/modals/editor/confirm-leave","ghost-admin/components/modals/delete-post","ghost-admin/components/editor/modals/delete-snippet","ghost-admin/models/post","ghost-admin/components/modals/limits/publish-limit","ghost-admin/components/editor/modals/re-authenticate","ghost-admin/components/editor/modals/update-snippet","ghost-admin/utils/bound-one-way","ghost-admin/config/environment","ghost-admin/utils/isNumber","moment-timezone","ember-concurrency","ghost-admin/decorators/inject","ghost-admin/services/ajax","ember-ajax/errors"],(function(e,t,i,n,r,a,s,o,l,u,c,d,p,m,h,b){var g,f,v,y,w,k,E,O,P,_,j,T,z,x,S,C,M,D,A,I,R,L,N,U,F,B,V,H,q,$,Y,W,G,K,Z,J,X,Q,ee,te,ie,ne,re,ae,se,oe,le,ue,ce,de,pe,me,he,be,ge,fe,ve,ye,we,ke,Ee,Oe,Pe,_e,je
2620
- function Te(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function ze(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function xe(e,t,i,n,r){var a={}
2621
- return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2622
- const Se="(Untitled)"
2623
- let Ce=["post.lexicalScratch","post.titleScratch","post.hasDirtyAttributes","post.tags.[]","post.isError"]
2624
- r.default.eachAttribute((function(e){Ce.push(`post.${e}`)}))
2625
- const Me={errors:{post:{published:{published:"Update failed",draft:"Saving failed",scheduled:"Scheduling failed"},draft:{published:"Publish failed",draft:"Saving failed",scheduled:"Scheduling failed"},scheduled:{scheduled:"Update failed",draft:"Unscheduling failed",published:"Publish failed"}}},success:{post:{published:{published:"Updated",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},draft:{published:"Published",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},scheduled:{scheduled:"Updated",draft:"Unscheduled",published:"Published",sent:"Sent"},sent:{sent:"Updated"}}}}
2626
- let De=(g=Ember.inject.controller,f=Ember.inject.service,v=Ember.inject.service,y=Ember.inject.service,w=Ember.inject.service,k=Ember.inject.service,E=Ember.inject.service,O=Ember.inject.service,P=Ember.inject.service,_=Ember.inject.service,j=Ember.computed.alias("model"),T=(0,l.default)("post.isPublished"),z=(0,l.default)("post.isScheduled"),x=(0,p.taskGroup)().enqueue(),S=Ember.computed.mapBy("post.tags","name"),C=Ember.computed(...Ce),M=Ember.computed,D=Ember.computed("_snippets.@each.{name,isNew}"),A=Ember.computed("session.user.{isAdmin,isEditor}"),I=Ember.computed("_autosaveTask.isRunning","_timedSaveTask.isRunning"),R=Ember.computed("post.isDraft"),L=Ember._action,N=Ember._action,U=Ember._action,F=Ember._action,B=Ember._action,V=Ember._action,H=Ember._action,q=Ember._action,$=Ember._action,Y=Ember._action,W=Ember._action,G=Ember._action,K=Ember._action,Z=Ember._action,J=Ember._action,X=Ember._action,Q=Ember._action,ee=Ember._action,te=Ember._action,ie=(0,p.task)({group:"saveTasks"}),ne=(0,p.task)({group:"saveTasks"}),re=(0,p.task)({group:"saveTasks"}),ae=Ember._action,se=(0,p.task)((function*(){if(this._canAutosave){if(this.get("post.isNew"))return this.autosaveTask.perform()
2627
- yield(0,p.timeout)(3e3),this.autosaveTask.perform()}})).restartable(),oe=(0,p.task)((function*(){if(this._canAutosave)for(;"test"!==u.default.environment;)yield(0,p.timeout)(6e4),this.autosaveTask.perform()})).drop(),le=class extends Ember.Controller{constructor(){super(...arguments),Te(this,"application",ue,this),Te(this,"feature",ce,this),Te(this,"membersCountCache",de,this),Te(this,"modals",pe,this),Te(this,"notifications",me,this),Te(this,"router",he,this),Te(this,"slugGenerator",be,this),Te(this,"session",ge,this),Te(this,"settings",fe,this),Te(this,"ui",ve,this),Te(this,"config",ye,this),ze(this,"shouldFocusTitle",!1),ze(this,"showSettingsMenu",!1),ze(this,"fromAnalytics",!1),ze(this,"wordcount",null),ze(this,"_leaveConfirmed",!1),ze(this,"_previousTagNames",null),Te(this,"post",we,this),Te(this,"willPublish",ke,this),Te(this,"willSchedule",Ee,this),Te(this,"saveTasks",Oe,this),Te(this,"_tagNames",Pe,this),Te(this,"_autosaveTask",_e,this),Te(this,"_timedSaveTask",je,this)}get hasDirtyAttributes(){return this._hasDirtyAttributes()}set hasDirtyAttributes(e){return e}get _snippets(){return this.store.peekAll("snippet")}get snippets(){return this._snippets.reject((e=>e.get("isNew"))).sort(((e,t)=>e.name.localeCompare(t.name)))}get canManageSnippets(){let{user:e}=this.session
2617
+ e.default=r})),define("ghost-admin/controllers/lexical-editor",["exports","ghost-admin/components/modals/editor/confirm-leave","ghost-admin/components/modals/delete-post","ghost-admin/components/editor/modals/delete-snippet","ghost-admin/models/post","ghost-admin/components/modals/limits/publish-limit","ghost-admin/components/editor/modals/re-authenticate","ghost-admin/components/editor/modals/update-snippet","ghost-admin/utils/bound-one-way","ghost-admin/config/environment","ghost-admin/utils/isNumber","moment-timezone","ghost-admin/services/notifications","ember-concurrency","ghost-admin/decorators/inject","ghost-admin/services/ajax","ember-ajax/errors"],(function(e,t,i,n,r,a,s,o,l,u,c,d,p,m,h,b,g){var f,v,y,w,k,E,O,P,_,j,T,z,x,S,C,M,D,A,I,R,L,N,U,F,B,V,H,q,$,Y,W,G,K,Z,J,X,Q,ee,te,ie,ne,re,ae,se,oe,le,ue,ce,de,pe,me,he,be,ge,fe,ve,ye,we,ke,Ee,Oe,Pe,_e,je,Te
2618
+ function ze(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function xe(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Se(e,t,i,n,r){var a={}
2619
+ return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2620
+ const Ce="(Untitled)"
2621
+ let Me=["post.lexicalScratch","post.titleScratch","post.hasDirtyAttributes","post.tags.[]","post.isError"]
2622
+ r.default.eachAttribute((function(e){Me.push(`post.${e}`)}))
2623
+ const De={errors:{post:{published:{published:"Update failed",draft:"Saving failed",scheduled:"Scheduling failed"},draft:{published:"Publish failed",draft:"Saving failed",scheduled:"Scheduling failed"},scheduled:{scheduled:"Update failed",draft:"Unscheduling failed",published:"Publish failed"}}},success:{post:{published:{published:"Updated",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},draft:{published:"Published",draft:"Saved",scheduled:"Scheduled",sent:"Sent"},scheduled:{scheduled:"Updated",draft:"Unscheduled",published:"Published",sent:"Sent"},sent:{sent:"Updated"}}}}
2624
+ let Ae=(f=Ember.inject.controller,v=Ember.inject.service,y=Ember.inject.service,w=Ember.inject.service,k=Ember.inject.service,E=Ember.inject.service,O=Ember.inject.service,P=Ember.inject.service,_=Ember.inject.service,j=Ember.inject.service,T=Ember.computed.alias("model"),z=(0,l.default)("post.isPublished"),x=(0,l.default)("post.isScheduled"),S=(0,m.taskGroup)().enqueue(),C=Ember.computed.mapBy("post.tags","name"),M=Ember.computed(...Me),D=Ember.computed,A=Ember.computed("_snippets.@each.{name,isNew}"),I=Ember.computed("session.user.{isAdmin,isEditor}"),R=Ember.computed("_autosaveTask.isRunning","_timedSaveTask.isRunning"),L=Ember.computed("post.isDraft"),N=Ember._action,U=Ember._action,F=Ember._action,B=Ember._action,V=Ember._action,H=Ember._action,q=Ember._action,$=Ember._action,Y=Ember._action,W=Ember._action,G=Ember._action,K=Ember._action,Z=Ember._action,J=Ember._action,X=Ember._action,Q=Ember._action,ee=Ember._action,te=Ember._action,ie=Ember._action,ne=(0,m.task)({group:"saveTasks"}),re=(0,m.task)({group:"saveTasks"}),ae=(0,m.task)({group:"saveTasks"}),se=Ember._action,oe=(0,m.task)((function*(){if(this._canAutosave){if(this.get("post.isNew"))return this.autosaveTask.perform()
2625
+ yield(0,m.timeout)(3e3),this.autosaveTask.perform()}})).restartable(),le=(0,m.task)((function*(){if(this._canAutosave)for(;"test"!==u.default.environment;)yield(0,m.timeout)(6e4),this.autosaveTask.perform()})).drop(),ue=class extends Ember.Controller{constructor(){super(...arguments),ze(this,"application",ce,this),ze(this,"feature",de,this),ze(this,"membersCountCache",pe,this),ze(this,"modals",me,this),ze(this,"notifications",he,this),ze(this,"router",be,this),ze(this,"slugGenerator",ge,this),ze(this,"session",fe,this),ze(this,"settings",ve,this),ze(this,"ui",ye,this),ze(this,"config",we,this),xe(this,"shouldFocusTitle",!1),xe(this,"showSettingsMenu",!1),xe(this,"fromAnalytics",!1),xe(this,"wordcount",null),xe(this,"_leaveConfirmed",!1),xe(this,"_previousTagNames",null),ze(this,"post",ke,this),ze(this,"willPublish",Ee,this),ze(this,"willSchedule",Oe,this),ze(this,"saveTasks",Pe,this),ze(this,"_tagNames",_e,this),ze(this,"_autosaveTask",je,this),ze(this,"_timedSaveTask",Te,this)}get hasDirtyAttributes(){return this._hasDirtyAttributes()}set hasDirtyAttributes(e){return e}get _snippets(){return this.store.peekAll("snippet")}get snippets(){return this._snippets.reject((e=>e.get("isNew"))).sort(((e,t)=>e.name.localeCompare(t.name)))}get canManageSnippets(){let{user:e}=this.session
2628
2626
  return!(!e.get("isAdmin")&&!e.get("isEditor"))}get _autosaveRunning(){let e=this.get("_autosaveTask.isRunning"),t=this.get("_timedSaveTask.isRunning")
2629
2627
  return e||t}get _canAutosave(){return"test"!==u.default.environment&&this.get("post.isDraft")}updateScratch(e){this.set("post.lexicalScratch",JSON.stringify(e)),this._autosaveTask.perform(),this._timedSaveTask.perform()}updateTitleScratch(e){this.set("post.titleScratch",e)}setSaveType(e){"publish"===e?(this.set("willPublish",!0),this.set("willSchedule",!1)):"draft"===e?(this.set("willPublish",!1),this.set("willSchedule",!1)):"schedule"===e&&(this.set("willSchedule",!0),this.set("willPublish",!1))}save(e){return this.saveTask.perform(e)}cancelAutosave(){this._autosaveTask.cancelAll(),this._timedSaveTask.cancelAll()}leaveEditor(){let e=this.leaveEditorTransition
2630
2628
  if(e)return this.reset(),e.retry()
2631
- this.notifications.showAlert("Sorry, there was an error in the application. Please let the Ghost team know what happened.",{type:"error"})}openDeletePostModal(){this.get("post.isNew")||this.modals.open(i.default,{post:this.post})}openUpgradeModal(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
2629
+ this.notifications.showAlert(p.GENERIC_ERROR_MESSAGE,{type:"error"})}openDeletePostModal(){this.get("post.isNew")||this.modals.open(i.default,{post:this.post})}openUpgradeModal(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
2632
2630
  this.modals.open(a.default,{message:e.message,details:e.details})}setKoenigEditor(e){this._koenig=e}updateWordCount(e){this.set("wordCount",e)}setFeatureImage(e){this.post.set("featureImage",e),this.post.isDraft&&this.autosaveTask.perform()}clearFeatureImage(){this.post.set("featureImage",null),this.post.set("featureImageAlt",null),this.post.set("featureImageCaption",null),this.post.isDraft&&this.autosaveTask.perform()}setFeatureImageAlt(e){this.post.set("featureImageAlt",e),this.post.isDraft&&this.autosaveTask.perform()}setFeatureImageCaption(e){this.post.set("featureImageCaption",e),this.post.isDraft&&this.autosaveTask.perform()}toggleSettingsMenu(){this.set("showSettingsMenu",!this.showSettingsMenu)}closeSettingsMenu(){this.set("showSettingsMenu",!1)}saveSnippet(e){let t=this.store.createRecord("snippet",e)
2633
2631
  return t.save().then((()=>(this.notifications.closeAlerts("snippet.save"),this.notifications.showNotification(`Snippet saved as "${e.name}"`,{type:"success"}),t))).catch((e=>{throw t.errors.isEmpty||this.notifications.showAlert(`Snippet save failed: ${t.errors.messages.join(". ")}`,{type:"error",key:"snippet.save"}),t.rollbackAttributes(),e}))}async confirmUpdateSnippet(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}
2634
2632
  await this.modals.open(o.default,{snippet:e,updatedProperties:t})}async confirmDeleteSnippet(e){await this.modals.open(n.default,{snippet:e})}*autosaveTask(){if(!this.get("saveTask.isRunning"))return yield this.saveTask.perform({silent:!0,backgroundSave:!0})}*saveTask(){let e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=this.get("post.status"),n=this.get("post.isNew")
@@ -2636,10 +2634,10 @@ if(this.cancelAutosave(),!t.backgroundSave||this.hasDirtyAttributes){e=t.backgro
2636
2634
  try{let e=yield this._savePostTask.perform(t)
2637
2635
  return e.set("statusScratch",null),this.notifications.clearAll(),t.silent||this._showSaveNotification(i,e.get("status"),!!n),n&&e.get("id")?(this.leaveEditorTransition||this.replaceRoute("lexical-editor.edit",e),!0):e}catch(r){if(!this.session.isAuthenticated&&(yield this.modals.open(s.default),this.session.isAuthenticated))return void this.saveTask.perform(t)
2638
2636
  if(this.set("post.status",i),void 0===r&&0===this.post.errors.length)return
2639
- if((0,h.isHostLimitError)(r))return this.post.rollbackAttributes(),void this.openUpgradeModal(r.payload.errors[0])
2640
- if(r&&!(0,b.isInvalidError)(r))return void this.send("error",r)
2637
+ if((0,b.isHostLimitError)(r))return this.post.rollbackAttributes(),void this.openUpgradeModal(r.payload.errors[0])
2638
+ if(r&&!(0,g.isInvalidError)(r))return void this.send("error",r)
2641
2639
  if(!t.silent){let e=r||this.get("post.errors.messages")
2642
- throw void this._showErrorAlert(i,this.get("post.status"),e)}return this.post}}}*beforeSaveTask(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).backgroundSave,this.set("post.lexical",this.post.lexicalScratch||null),this.get("post.titleScratch").trim()||this.set("post.titleScratch",Se),this.set("post.title",this.get("post.titleScratch")),this.set("post.customExcerpt",this.get("post.customExcerptScratch")),this.set("post.footerInjection",this.get("post.footerExcerptScratch")),this.set("post.headerInjection",this.get("post.headerExcerptScratch")),this.set("post.metaTitle",this.get("post.metaTitleScratch")),this.set("post.metaDescription",this.get("post.metaDescriptionScratch")),this.set("post.ogTitle",this.get("post.ogTitleScratch")),this.set("post.ogDescription",this.get("post.ogDescriptionScratch")),this.set("post.twitterTitle",this.get("post.twitterTitleScratch")),this.set("post.twitterDescription",this.get("post.twitterDescriptionScratch")),this.set("post.emailSubject",this.get("post.emailSubjectScratch")),this.get("post.slug")||(this.saveTitleTask.cancelAll(),yield this.generateSlugTask.perform())}*updateSlugTask(e){let t,i,n=this.get("post.slug")
2640
+ throw void this._showErrorAlert(i,this.get("post.status"),e)}return this.post}}}*beforeSaveTask(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).backgroundSave,this.set("post.lexical",this.post.lexicalScratch||null),this.get("post.titleScratch").trim()||this.set("post.titleScratch",Ce),this.set("post.title",this.get("post.titleScratch")),this.set("post.customExcerpt",this.get("post.customExcerptScratch")),this.set("post.footerInjection",this.get("post.footerExcerptScratch")),this.set("post.headerInjection",this.get("post.headerExcerptScratch")),this.set("post.metaTitle",this.get("post.metaTitleScratch")),this.set("post.metaDescription",this.get("post.metaDescriptionScratch")),this.set("post.ogTitle",this.get("post.ogTitleScratch")),this.set("post.ogDescription",this.get("post.ogDescriptionScratch")),this.set("post.twitterTitle",this.get("post.twitterTitleScratch")),this.set("post.twitterDescription",this.get("post.twitterDescriptionScratch")),this.set("post.emailSubject",this.get("post.emailSubjectScratch")),this.get("post.slug")||(this.saveTitleTask.cancelAll(),yield this.generateSlugTask.perform())}*updateSlugTask(e){let t,i,n=this.get("post.slug")
2643
2641
  if(t=e||n,t=t&&t.trim(),!t||n===t)return void this.set("slugValue",n)
2644
2642
  if(i=yield this.slugGenerator.generateSlug("post",t),i===n)return
2645
2643
  let r=i.split("-"),a=Number(r.pop())
@@ -2649,13 +2647,13 @@ if(e){let t=this.get("post.status")
2649
2647
  this._showErrorAlert(t,t,e)}throw e}}*_savePostTask(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{post:t}=this
2650
2648
  const i=this.post.emailOnly
2651
2649
  Object.prototype.hasOwnProperty.call(e,"emailOnly")&&this.post.set("emailOnly",e.emailOnly)
2652
- try{yield t.save(e)}catch(n){if(this.post.set("emailOnly",i),(0,h.isServerUnreachableError)(n)){const[e,t]=this.post.changedAttributes().status||[this.post.status,this.post.status]
2650
+ try{yield t.save(e)}catch(n){if(this.post.set("emailOnly",i),(0,b.isServerUnreachableError)(n)){const[e,t]=this.post.changedAttributes().status||[this.post.status,this.post.status]
2653
2651
  throw void this._showErrorAlert(e,t,n)}throw n}return this.afterSave(t),t}afterSave(e){this.notifications.closeAlerts("post.save"),e.updateTags(),this._previousTagNames=this._tagNames,e.lexicalScratch||e.set("lexicalScratch",e.get("lexical"))
2654
2652
  let t=e.get("titleScratch")===e.get("title"),i=e.get("lexicalScratch")===e.get("lexical")
2655
2653
  t&&i&&this.set("hasDirtyAttributes",!1)}*saveTitleTask(){let e=this.post,t=e.get("title"),i=e.get("titleScratch").trim()
2656
- t&&i&&i===t||!t&&!i||(this.set("hasDirtyAttributes",!0),(e.get("isNew")&&!t||t===Se)&&(yield this.generateSlugTask.perform()),this.get("post.isDraft")&&(yield this.autosaveTask.perform()),this.ui.updateDocumentTitle())}*generateSlugTask(){let e=this.get("post.titleScratch")
2657
- if(e!==Se||!this.get("post.slug"))try{let t=yield this.slugGenerator.generateSlug("post",e)
2658
- Ember.isBlank(t)||this.set("post.slug",t)}catch(t){(0,h.isVersionMismatchError)(t)&&this.notifications.showAPIError(t)}}*backgroundLoaderTask(){yield this.store.query("snippet",{limit:"all"})}setPost(e){e!==this.post?(this.reset(),this.set("post",e),this.backgroundLoaderTask.perform(),this.set("shouldFocusTitle",e.get("isNew")),e.set("titleScratch",e.get("title")),e.set("lexicalScratch",e.get("lexical")),this._previousTagNames=this._tagNames,window.onbeforeunload=()=>{if(this.hasDirtyAttributes)return"==============================\n\nHey there! It looks like you're in the middle of writing something and you haven't saved all of your content.\n\nSave before you go!\n\n=============================="}):this.set("shouldFocusTitle",e.get("isNew"))}async willTransition(e){let i=this.post
2654
+ t&&i&&i===t||!t&&!i||(this.set("hasDirtyAttributes",!0),(e.get("isNew")&&!t||t===Ce)&&(yield this.generateSlugTask.perform()),this.get("post.isDraft")&&(yield this.autosaveTask.perform()),this.ui.updateDocumentTitle())}*generateSlugTask(){let e=this.get("post.titleScratch")
2655
+ if(e!==Ce||!this.get("post.slug"))try{let t=yield this.slugGenerator.generateSlug("post",e)
2656
+ Ember.isBlank(t)||this.set("post.slug",t)}catch(t){(0,b.isVersionMismatchError)(t)&&this.notifications.showAPIError(t)}}*backgroundLoaderTask(){yield this.store.query("snippet",{limit:"all"})}setPost(e){e!==this.post?(this.reset(),this.set("post",e),this.backgroundLoaderTask.perform(),this.set("shouldFocusTitle",e.get("isNew")),e.set("titleScratch",e.get("title")),e.set("lexicalScratch",e.get("lexical")),this._previousTagNames=this._tagNames,window.onbeforeunload=()=>{if(this.hasDirtyAttributes)return"==============================\n\nHey there! It looks like you're in the middle of writing something and you haven't saved all of your content.\n\nSave before you go!\n\n=============================="}):this.set("shouldFocusTitle",e.get("isNew"))}async willTransition(e){let i=this.post
2659
2657
  if(!i)return
2660
2658
  let n=this.hasDirtyAttributes,r=i.getProperties("isDeleted","isSaving","hasDirtyAttributes","isNew"),a="lexical-editor.new"===this.router.currentRouteName&&"lexical-editor.edit"===e.targetName&&e.intent.contexts&&e.intent.contexts[0]&&e.intent.contexts[0].id===i.id,s=r.isDeleted&&(r.isSaving||!r.hasDirtyAttributes)
2661
2659
  if(!this._leaveConfirmed&&!a&&!s&&n){if(e.abort(),this.saveTasks.isRunning)return await this.saveTasks.last,e.retry()
@@ -2674,19 +2672,19 @@ if((r||n)&&r!==n)return this._leaveModalReason={reason:"lexical is different",co
2674
2672
  if(e.get("isNew")){let t=Object.keys(e.changedAttributes())
2675
2673
  return t.length&&(this._leaveModalReason={reason:"post.changedAttributes.length > 0",context:e.changedAttributes()}),!!t.length}let{hasDirtyAttributes:a}=e
2676
2674
  return a&&(this._leaveModalReason={reason:"post.hasDirtyAttributes === true",context:e.changedAttributes()}),a}_showSaveNotification(e,t,i){if("scheduled"===t)return this._showScheduledNotification(i)
2677
- let n,r,a,s=this.notifications,o=Me.success.post[e][t]
2675
+ let n,r,a,s=this.notifications,o=De.success.post[e][t]
2678
2676
  "published"!==t&&"scheduled"!==t||(r=Ember.String.capitalize(this.get("post.displayName")),a=this.get("post.url"),n=`<a href="${a}" target="_blank">View ${r}</a>`),s.showNotification(o,{type:"success",actions:n&&Ember.String.htmlSafe(n),delayed:i})}async _showScheduledNotification(e){let{publishedAtUTC:t,previewUrl:i,emailOnly:n,newsletter:r}=this.post,a=d.default.tz(t,this.settings.timezone),s=n?["Will be sent"]:["Will be published"]
2679
2677
  if(r){const e=await this.membersCountCache.countString(this.post.fullRecipientFilter,{newsletter:r})
2680
2678
  s.push(`${n?"":"and delivered "}to <span><strong>${e}</strong></span>`)}s.push(`on <span><strong>${a.format("MMM Do")}</strong></span>`),s.push(`at <span><strong>${a.format("HH:mm")}</strong>`),0===a.utcOffset()?s.push("(UTC)</span>"):s.push(`(UTC${a.format("Z").replace(/([+-])0/,"$1").replace(/:00/,"")})</span>`),s=Ember.String.htmlSafe(s.join(" "))
2681
2679
  let o=Ember.String.htmlSafe(`<a href="${i}" target="_blank">View Preview</a>`)
2682
- return this.notifications.showNotification("Scheduled",{description:s,actions:o,type:"success",delayed:e})}_showErrorAlert(e,t,i,n){let r,a=Me.errors.post[e][t],s=this.notifications
2683
- if((0,h.isServerUnreachableError)(i))r="Unable to connect, please check your internet connection and try again"
2680
+ return this.notifications.showNotification("Scheduled",{description:s,actions:o,type:"success",delayed:e})}_showErrorAlert(e,t,i,n){let r,a=De.errors.post[e][t],s=this.notifications
2681
+ if((0,b.isServerUnreachableError)(i))r="Unable to connect, please check your internet connection and try again"
2684
2682
  else if(i&&(o=i,"[object String]"===toString.call(o)))r=i
2685
2683
  else if(i&&Ember.isArray(i))r=i[0]
2686
2684
  else{if(i&&i.payload&&i.payload.errors&&i.payload.errors[0].message)return this.notifications.showAPIError(i,{key:"post.save"})
2687
2685
  r="Unknown Error"}var o
2688
- a+=`: ${r}`,a=Ember.String.htmlSafe(a),s.showAlert(a,{type:"error",delayed:n,key:"post.save"})}},ue=xe(le.prototype,"application",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ce=xe(le.prototype,"feature",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=xe(le.prototype,"membersCountCache",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=xe(le.prototype,"modals",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=xe(le.prototype,"notifications",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=xe(le.prototype,"router",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=xe(le.prototype,"slugGenerator",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=xe(le.prototype,"session",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=xe(le.prototype,"settings",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=xe(le.prototype,"ui",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=xe(le.prototype,"config",[m.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),we=xe(le.prototype,"post",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ke=xe(le.prototype,"willPublish",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Ee=xe(le.prototype,"willSchedule",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Oe=xe(le.prototype,"saveTasks",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Pe=xe(le.prototype,"_tagNames",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),xe(le.prototype,"hasDirtyAttributes",[C],Object.getOwnPropertyDescriptor(le.prototype,"hasDirtyAttributes"),le.prototype),xe(le.prototype,"_snippets",[M],Object.getOwnPropertyDescriptor(le.prototype,"_snippets"),le.prototype),xe(le.prototype,"snippets",[D],Object.getOwnPropertyDescriptor(le.prototype,"snippets"),le.prototype),xe(le.prototype,"canManageSnippets",[A],Object.getOwnPropertyDescriptor(le.prototype,"canManageSnippets"),le.prototype),xe(le.prototype,"_autosaveRunning",[I],Object.getOwnPropertyDescriptor(le.prototype,"_autosaveRunning"),le.prototype),xe(le.prototype,"_canAutosave",[R],Object.getOwnPropertyDescriptor(le.prototype,"_canAutosave"),le.prototype),xe(le.prototype,"updateScratch",[L],Object.getOwnPropertyDescriptor(le.prototype,"updateScratch"),le.prototype),xe(le.prototype,"updateTitleScratch",[N],Object.getOwnPropertyDescriptor(le.prototype,"updateTitleScratch"),le.prototype),xe(le.prototype,"setSaveType",[U],Object.getOwnPropertyDescriptor(le.prototype,"setSaveType"),le.prototype),xe(le.prototype,"save",[F],Object.getOwnPropertyDescriptor(le.prototype,"save"),le.prototype),xe(le.prototype,"cancelAutosave",[B],Object.getOwnPropertyDescriptor(le.prototype,"cancelAutosave"),le.prototype),xe(le.prototype,"leaveEditor",[V],Object.getOwnPropertyDescriptor(le.prototype,"leaveEditor"),le.prototype),xe(le.prototype,"openDeletePostModal",[H],Object.getOwnPropertyDescriptor(le.prototype,"openDeletePostModal"),le.prototype),xe(le.prototype,"openUpgradeModal",[q],Object.getOwnPropertyDescriptor(le.prototype,"openUpgradeModal"),le.prototype),xe(le.prototype,"setKoenigEditor",[$],Object.getOwnPropertyDescriptor(le.prototype,"setKoenigEditor"),le.prototype),xe(le.prototype,"updateWordCount",[Y],Object.getOwnPropertyDescriptor(le.prototype,"updateWordCount"),le.prototype),xe(le.prototype,"setFeatureImage",[W],Object.getOwnPropertyDescriptor(le.prototype,"setFeatureImage"),le.prototype),xe(le.prototype,"clearFeatureImage",[G],Object.getOwnPropertyDescriptor(le.prototype,"clearFeatureImage"),le.prototype),xe(le.prototype,"setFeatureImageAlt",[K],Object.getOwnPropertyDescriptor(le.prototype,"setFeatureImageAlt"),le.prototype),xe(le.prototype,"setFeatureImageCaption",[Z],Object.getOwnPropertyDescriptor(le.prototype,"setFeatureImageCaption"),le.prototype),xe(le.prototype,"toggleSettingsMenu",[J],Object.getOwnPropertyDescriptor(le.prototype,"toggleSettingsMenu"),le.prototype),xe(le.prototype,"closeSettingsMenu",[X],Object.getOwnPropertyDescriptor(le.prototype,"closeSettingsMenu"),le.prototype),xe(le.prototype,"saveSnippet",[Q],Object.getOwnPropertyDescriptor(le.prototype,"saveSnippet"),le.prototype),xe(le.prototype,"confirmUpdateSnippet",[ee],Object.getOwnPropertyDescriptor(le.prototype,"confirmUpdateSnippet"),le.prototype),xe(le.prototype,"confirmDeleteSnippet",[te],Object.getOwnPropertyDescriptor(le.prototype,"confirmDeleteSnippet"),le.prototype),xe(le.prototype,"autosaveTask",[p.dropTask],Object.getOwnPropertyDescriptor(le.prototype,"autosaveTask"),le.prototype),xe(le.prototype,"saveTask",[ie],Object.getOwnPropertyDescriptor(le.prototype,"saveTask"),le.prototype),xe(le.prototype,"beforeSaveTask",[p.task],Object.getOwnPropertyDescriptor(le.prototype,"beforeSaveTask"),le.prototype),xe(le.prototype,"updateSlugTask",[ne],Object.getOwnPropertyDescriptor(le.prototype,"updateSlugTask"),le.prototype),xe(le.prototype,"savePostTask",[re],Object.getOwnPropertyDescriptor(le.prototype,"savePostTask"),le.prototype),xe(le.prototype,"_savePostTask",[p.task],Object.getOwnPropertyDescriptor(le.prototype,"_savePostTask"),le.prototype),xe(le.prototype,"afterSave",[ae],Object.getOwnPropertyDescriptor(le.prototype,"afterSave"),le.prototype),xe(le.prototype,"saveTitleTask",[p.task],Object.getOwnPropertyDescriptor(le.prototype,"saveTitleTask"),le.prototype),xe(le.prototype,"generateSlugTask",[p.enqueueTask],Object.getOwnPropertyDescriptor(le.prototype,"generateSlugTask"),le.prototype),xe(le.prototype,"backgroundLoaderTask",[p.restartableTask],Object.getOwnPropertyDescriptor(le.prototype,"backgroundLoaderTask"),le.prototype),_e=xe(le.prototype,"_autosaveTask",[se],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),je=xe(le.prototype,"_timedSaveTask",[oe],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le)
2689
- e.default=De})),define("ghost-admin/controllers/lexical-editor/edit-loading",["exports"],(function(e){var t,i,n
2686
+ a+=`: ${r}`,a=Ember.String.htmlSafe(a),s.showAlert(a,{type:"error",delayed:n,key:"post.save"})}},ce=Se(ue.prototype,"application",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=Se(ue.prototype,"feature",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=Se(ue.prototype,"membersCountCache",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=Se(ue.prototype,"modals",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=Se(ue.prototype,"notifications",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=Se(ue.prototype,"router",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=Se(ue.prototype,"slugGenerator",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=Se(ue.prototype,"session",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=Se(ue.prototype,"settings",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=Se(ue.prototype,"ui",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),we=Se(ue.prototype,"config",[h.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ke=Se(ue.prototype,"post",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Ee=Se(ue.prototype,"willPublish",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Oe=Se(ue.prototype,"willSchedule",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Pe=Se(ue.prototype,"saveTasks",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_e=Se(ue.prototype,"_tagNames",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Se(ue.prototype,"hasDirtyAttributes",[M],Object.getOwnPropertyDescriptor(ue.prototype,"hasDirtyAttributes"),ue.prototype),Se(ue.prototype,"_snippets",[D],Object.getOwnPropertyDescriptor(ue.prototype,"_snippets"),ue.prototype),Se(ue.prototype,"snippets",[A],Object.getOwnPropertyDescriptor(ue.prototype,"snippets"),ue.prototype),Se(ue.prototype,"canManageSnippets",[I],Object.getOwnPropertyDescriptor(ue.prototype,"canManageSnippets"),ue.prototype),Se(ue.prototype,"_autosaveRunning",[R],Object.getOwnPropertyDescriptor(ue.prototype,"_autosaveRunning"),ue.prototype),Se(ue.prototype,"_canAutosave",[L],Object.getOwnPropertyDescriptor(ue.prototype,"_canAutosave"),ue.prototype),Se(ue.prototype,"updateScratch",[N],Object.getOwnPropertyDescriptor(ue.prototype,"updateScratch"),ue.prototype),Se(ue.prototype,"updateTitleScratch",[U],Object.getOwnPropertyDescriptor(ue.prototype,"updateTitleScratch"),ue.prototype),Se(ue.prototype,"setSaveType",[F],Object.getOwnPropertyDescriptor(ue.prototype,"setSaveType"),ue.prototype),Se(ue.prototype,"save",[B],Object.getOwnPropertyDescriptor(ue.prototype,"save"),ue.prototype),Se(ue.prototype,"cancelAutosave",[V],Object.getOwnPropertyDescriptor(ue.prototype,"cancelAutosave"),ue.prototype),Se(ue.prototype,"leaveEditor",[H],Object.getOwnPropertyDescriptor(ue.prototype,"leaveEditor"),ue.prototype),Se(ue.prototype,"openDeletePostModal",[q],Object.getOwnPropertyDescriptor(ue.prototype,"openDeletePostModal"),ue.prototype),Se(ue.prototype,"openUpgradeModal",[$],Object.getOwnPropertyDescriptor(ue.prototype,"openUpgradeModal"),ue.prototype),Se(ue.prototype,"setKoenigEditor",[Y],Object.getOwnPropertyDescriptor(ue.prototype,"setKoenigEditor"),ue.prototype),Se(ue.prototype,"updateWordCount",[W],Object.getOwnPropertyDescriptor(ue.prototype,"updateWordCount"),ue.prototype),Se(ue.prototype,"setFeatureImage",[G],Object.getOwnPropertyDescriptor(ue.prototype,"setFeatureImage"),ue.prototype),Se(ue.prototype,"clearFeatureImage",[K],Object.getOwnPropertyDescriptor(ue.prototype,"clearFeatureImage"),ue.prototype),Se(ue.prototype,"setFeatureImageAlt",[Z],Object.getOwnPropertyDescriptor(ue.prototype,"setFeatureImageAlt"),ue.prototype),Se(ue.prototype,"setFeatureImageCaption",[J],Object.getOwnPropertyDescriptor(ue.prototype,"setFeatureImageCaption"),ue.prototype),Se(ue.prototype,"toggleSettingsMenu",[X],Object.getOwnPropertyDescriptor(ue.prototype,"toggleSettingsMenu"),ue.prototype),Se(ue.prototype,"closeSettingsMenu",[Q],Object.getOwnPropertyDescriptor(ue.prototype,"closeSettingsMenu"),ue.prototype),Se(ue.prototype,"saveSnippet",[ee],Object.getOwnPropertyDescriptor(ue.prototype,"saveSnippet"),ue.prototype),Se(ue.prototype,"confirmUpdateSnippet",[te],Object.getOwnPropertyDescriptor(ue.prototype,"confirmUpdateSnippet"),ue.prototype),Se(ue.prototype,"confirmDeleteSnippet",[ie],Object.getOwnPropertyDescriptor(ue.prototype,"confirmDeleteSnippet"),ue.prototype),Se(ue.prototype,"autosaveTask",[m.dropTask],Object.getOwnPropertyDescriptor(ue.prototype,"autosaveTask"),ue.prototype),Se(ue.prototype,"saveTask",[ne],Object.getOwnPropertyDescriptor(ue.prototype,"saveTask"),ue.prototype),Se(ue.prototype,"beforeSaveTask",[m.task],Object.getOwnPropertyDescriptor(ue.prototype,"beforeSaveTask"),ue.prototype),Se(ue.prototype,"updateSlugTask",[re],Object.getOwnPropertyDescriptor(ue.prototype,"updateSlugTask"),ue.prototype),Se(ue.prototype,"savePostTask",[ae],Object.getOwnPropertyDescriptor(ue.prototype,"savePostTask"),ue.prototype),Se(ue.prototype,"_savePostTask",[m.task],Object.getOwnPropertyDescriptor(ue.prototype,"_savePostTask"),ue.prototype),Se(ue.prototype,"afterSave",[se],Object.getOwnPropertyDescriptor(ue.prototype,"afterSave"),ue.prototype),Se(ue.prototype,"saveTitleTask",[m.task],Object.getOwnPropertyDescriptor(ue.prototype,"saveTitleTask"),ue.prototype),Se(ue.prototype,"generateSlugTask",[m.enqueueTask],Object.getOwnPropertyDescriptor(ue.prototype,"generateSlugTask"),ue.prototype),Se(ue.prototype,"backgroundLoaderTask",[m.restartableTask],Object.getOwnPropertyDescriptor(ue.prototype,"backgroundLoaderTask"),ue.prototype),je=Se(ue.prototype,"_autosaveTask",[oe],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Te=Se(ue.prototype,"_timedSaveTask",[le],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue)
2687
+ e.default=Ae})),define("ghost-admin/controllers/lexical-editor/edit-loading",["exports"],(function(e){var t,i,n
2690
2688
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
2691
2689
  let r=(t=Ember.inject.service,i=class extends Ember.Controller{constructor(){var e,t,i,r
2692
2690
  super(...arguments),e=this,t="ui",r=this,(i=n)&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}},a=i.prototype,s="ui",o=[t],l={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(l).forEach((function(e){c[e]=l[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=o.slice().reverse().reduce((function(e,t){return t(a,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(a,s,c),c=null),n=c,i)
@@ -3089,7 +3087,8 @@ function M(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,config
3089
3087
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3090
3088
  const A="showPrevious",I="showNext"
3091
3089
  let R=(a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember._tracked,u=Ember._tracked,c=Ember._tracked,d=Ember._tracked,p=Ember._tracked,m=Ember._tracked,h=Ember._tracked,b=Ember._tracked,g=Ember._tracked,f=Ember._action,v=Ember._action,y=class extends i.Resource{constructor(){super(...arguments),M(this,"ajax",w,this),M(this,"ghostPaths",k,this),M(this,"store",E,this),M(this,"data",O,this),M(this,"isLoading",P,this),M(this,"isError",_,this),M(this,"errorMessage",j,this),M(this,"hasReachedStart",T,this),M(this,"hasReachedEnd",z,this),M(this,"shownEvents",x,this),M(this,"totalEvents",S,this),M(this,"eventsBookmarks",C,this)}get value(){return{isLoading:this.isLoading,isError:this.isError,errorMessage:this.errorMessage,data:this.data,loadNextPage:this.loadNextPage,loadPreviousPage:this.loadPreviousPage,hasReachedStart:this.hasReachedStart,hasReachedEnd:this.hasReachedEnd,totalEvents:this.totalEvents,shownEvents:this.shownEvents,previousEvents:this.getAmountOfPreviousEvents()}}getAmountOfPreviousEvents(){return this.shownEvents-this.data.length+1}async setup(){let e=`data.created_at:<'${t.default.utc().format("YYYY-MM-DD HH:mm:ss")}'`
3092
- this.eventsBookmarks.push(e),this.args.named.filter&&(e+=`+${this.args.named.filter}`),await this.loadEventsTask.perform({filter:e},I)}loadNextPage(){if(this.hasReachedEnd)return
3090
+ this.eventsBookmarks.push(e),this.args.named.filter&&(e+=`+${this.args.named.filter}`)
3091
+ try{await this.loadEventsTask.perform({filter:e},I)}catch(i){if(!(0,r.didCancel)(i))throw i}}loadNextPage(){if(this.hasReachedEnd)return
3093
3092
  const e=this.data[this.data.length-1],i=t.default.utc(e.data.created_at).format("YYYY-MM-DD HH:mm:ss")
3094
3093
  let n=`(data.created_at:<'${i}',(data.created_at:'${i}'+id:<'${e.data.id}'))`
3095
3094
  this.eventsBookmarks.push(n),this.args.named.filter&&(n+=`+${this.args.named.filter}`),this.loadEventsTask.perform({filter:n},I)}loadPreviousPage(){if(this.hasReachedStart)return
@@ -3207,7 +3206,8 @@ function O(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,config
3207
3206
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3208
3207
  let _=(a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember._tracked,u=Ember._tracked,c=Ember._tracked,d=Ember._tracked,p=Ember._tracked,m=Ember._action,h=class extends i.Resource{constructor(){super(...arguments),O(this,"ajax",b,this),O(this,"ghostPaths",g,this),O(this,"store",f,this),O(this,"data",v,this),O(this,"isLoading",y,this),O(this,"isError",w,this),O(this,"errorMessage",k,this),O(this,"hasReachedEnd",E,this),function(e,t,i){t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i}(this,"cursor",null)}get value(){return{isLoading:this.isLoading,isError:this.isError,errorMessage:this.errorMessage,data:this.data,loadNextPage:this.loadNextPage,hasReachedEnd:this.hasReachedEnd}}async setup(){this.cursor=t.default.utc().format("YYYY-MM-DD HH:mm:ss")
3209
3208
  let e=`created_at:<'${this.cursor}'`
3210
- this.args.named.filter&&(e+=`+${this.args.named.filter}`),await this.loadEventsTask.perform({filter:e})}loadNextPage(){const e=this.data[this.data.length-1]
3209
+ this.args.named.filter&&(e+=`+${this.args.named.filter}`)
3210
+ try{await this.loadEventsTask.perform({filter:e})}catch(i){if(!(0,r.didCancel)(i))throw i}}loadNextPage(){const e=this.data[this.data.length-1]
3211
3211
  if(!e?.created_at)return void(this.hasReachedEnd=!0)
3212
3212
  const i=t.default.utc(e.created_at).format("YYYY-MM-DD HH:mm:ss")
3213
3213
  if(i===this.cursor)return void(this.hasReachedEnd=!0)
@@ -3281,7 +3281,8 @@ function T(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,config
3281
3281
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3282
3282
  let x=(a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember.inject.service,u=Ember._tracked,c=Ember._tracked,d=Ember._tracked,p=Ember._tracked,m=Ember._tracked,h=Ember._tracked,b=Ember._action,g=class extends i.Resource{constructor(){super(...arguments),T(this,"ajax",f,this),T(this,"ghostPaths",v,this),T(this,"store",y,this),T(this,"feature",w,this),T(this,"data",k,this),T(this,"isLoading",E,this),T(this,"isError",O,this),T(this,"errorMessage",P,this),T(this,"hasReachedEnd",_,this),T(this,"hasMultipleNewsletters",j,this),function(e,t,i){t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i}(this,"cursor",null)}get value(){return{isLoading:this.isLoading,isError:this.isError,errorMessage:this.errorMessage,data:this.data,loadNextPage:this.loadNextPage,hasReachedEnd:this.hasReachedEnd,hasMultipleNewsletters:this.hasMultipleNewsletters}}async setup(){this.cursor=t.default.utc().format("YYYY-MM-DD HH:mm:ss")
3283
3283
  let e=`data.created_at:<'${this.cursor}'`
3284
- this.args.named.filter&&(e+=`+${this.args.named.filter}`),await this.loadEventsTask.perform({filter:e}),await this.loadMultipleNewslettersTask.perform()}loadNextPage(){const e=this.data[this.data.length-1]
3284
+ this.args.named.filter&&(e+=`+${this.args.named.filter}`)
3285
+ try{await this.loadEventsTask.perform({filter:e}),await this.loadMultipleNewslettersTask.perform()}catch(i){if(!(0,r.didCancel)(i))throw i}}loadNextPage(){const e=this.data[this.data.length-1]
3285
3286
  if(!e?.data?.created_at)return void(this.hasReachedEnd=!0)
3286
3287
  const i=t.default.utc(e.data.created_at).format("YYYY-MM-DD HH:mm:ss")
3287
3288
  if(i===this.cursor)return void(this.hasReachedEnd=!0)
@@ -3354,7 +3355,7 @@ return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumera
3354
3355
  let m=(r=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=class extends Ember.Helper{constructor(){super(...arguments),d(this,"feature",l,this),d(this,"utils",u,this),d(this,"membersUtils",c,this)}compute(e){let[i,n]=e
3355
3356
  const r=i.data.member.name||i.data.member.email,a=this.getIcon(i),s=this.getAction(i,n),o=this.getInfo(i),l=this.getDescription(i),u=this.getJoin(i),c=this.getObject(i),d=this.getURL(i),p=(0,t.default)(i.data.created_at),m=this.getSource(i)
3356
3357
  return{memberId:i.data.member_id??i.data.member?.id,member:i.data.member,emailId:i.data.email_id,email:i.data.email,icon:a,subject:r,action:s,join:u,object:c,source:m,info:o,description:l,url:d,timestamp:p}}getIcon(e){let t
3357
- return"login_event"===e.type&&(t="logged-in"),"payment_event"===e.type&&(t="subscriptions"),"newsletter_event"===e.type&&(t=e.data.subscribed?"subscribed-to-email":"unsubscribed-from-email"),"subscription_event"===e.type&&(t="subscriptions","canceled"===e.data.type&&(t="canceled-subscription")),("signup_event"===e.type||"subscription_event"===e.type&&"created"===e.data.type&&e.data.signup)&&(t="signed-up"),"email_opened_event"===e.type&&(t="opened-email"),"email_delivered_event"!==e.type&&"email_sent_event"!==e.type||(t="received-email"),"email_failed_event"===e.type&&(t="email-delivery-failed"),"email_complaint_event"===e.type&&(t="email-delivery-spam"),"comment_event"===e.type&&(t="comment"),"click_event"!==e.type&&"aggregated_click_event"!==e.type||(t="click"),"feedback_event"===e.type&&(t=1===e.data.score?"more-like-this":"less-like-this"),"event-"+t+(this.feature.get("memberAttribution")?"--feature-attribution":"")}getAction(e,t){if("signup_event"===e.type||"subscription_event"===e.type&&"created"===e.data.type&&e.data.signup)return"signed up"
3358
+ return"login_event"===e.type&&(t="logged-in"),"payment_event"===e.type&&(t="subscriptions"),"newsletter_event"===e.type&&(t=e.data.subscribed?"subscribed-to-email":"unsubscribed-from-email"),"subscription_event"===e.type&&(t="subscriptions","canceled"===e.data.type&&(t="canceled-subscription")),("signup_event"===e.type||"subscription_event"===e.type&&"created"===e.data.type&&e.data.signup)&&(t="signed-up"),"email_opened_event"===e.type&&(t="opened-email"),"email_delivered_event"!==e.type&&"email_sent_event"!==e.type||(t="received-email"),"email_failed_event"===e.type&&(t="email-delivery-failed"),"email_complaint_event"===e.type&&(t="email-delivery-spam"),"comment_event"===e.type&&(t="comment"),"click_event"!==e.type&&"aggregated_click_event"!==e.type||(t="click"),"feedback_event"===e.type&&(t=1===e.data.score?"more-like-this":"less-like-this"),"event-"+t}getAction(e,t){if("signup_event"===e.type||"subscription_event"===e.type&&"created"===e.data.type&&e.data.signup)return"signed up"
3358
3359
  if("login_event"===e.type)return"logged in"
3359
3360
  if("payment_event"===e.type)return"made payment"
3360
3361
  if("newsletter_event"===e.type){let i="newsletter"
@@ -3694,7 +3695,7 @@ if((0,o.isNotFoundError)(e)){t&&t.abort()
3694
3695
  let e=t.to,i=this.router,n=[]
3695
3696
  for(let t of Object.keys(e.params))n.push(e.params[t])
3696
3697
  let r=i.urlFor(e.name,...n).replace(/^#\//,"").replace(/^\//,"").replace(/^ghost\//,"")
3697
- return this.replaceWith("error404",r)}return(!(0,l.isVersionMismatchError)(e)||(t&&t.abort(),this.upgradeStatus.requireUpgrade(),!this._appLoaded))&&((!(0,l.isMaintenanceError)(e)||(t&&t.abort(),this.upgradeStatus.maintenanceAlert(),!this._appLoaded))&&!(((0,o.isAjaxError)(e)||e&&e.payload&&Ember.isArray(e.payload.errors))&&(this.notifications.showAPIError(e),!t)))}},willDestroy(){this.ui.cleanupBodyDragHandlers()},async prepareApp(){if(await this.configManager.fetchUnauthenticated(),this.config.sentry_dsn&&(0,a.InitSentryForEmber)({dsn:this.config.sentry_dsn,environment:this.config.sentry_env,release:`ghost@${this.config.version}`,beforeSend:e=>(e.tags=e.tags||{},e.tags.shown_to_user=e.tags.shown_to_user||!1,e.tags.grammarly=!!document.querySelector("[data-gr-ext-installed]"),e)}),this.session.isAuthenticated){try{await this.session.populateUser()}catch(e){await this.session.invalidate()}await this.session.postAuthPreparation()}this.config.hostSettings?.forceUpgrade&&this.billing.openBillingWindow(this.router.currentURL,"/pro")}})
3698
+ return this.replaceWith("error404",r)}return(!(0,l.isVersionMismatchError)(e)||(t&&t.abort(),this.upgradeStatus.requireUpgrade(),!this._appLoaded))&&((!(0,l.isMaintenanceError)(e)||(t&&t.abort(),this.upgradeStatus.maintenanceAlert(),!this._appLoaded))&&!(((0,o.isAjaxError)(e)||e&&e.payload&&Ember.isArray(e.payload.errors))&&(this.notifications.showAPIError(e),!t)))}},willDestroy(){this.ui.cleanupBodyDragHandlers()},async prepareApp(){if(await this.configManager.fetchUnauthenticated(),this.config.sentry_dsn&&(0,a.InitSentryForEmber)({dsn:this.config.sentry_dsn,environment:this.config.sentry_env,release:`ghost@${this.config.version}`,beforeSend:e=>(e.tags=e.tags||{},e.tags.shown_to_user=e.tags.shown_to_user||!1,e.tags.grammarly=!!document.querySelector("[data-gr-ext-installed]"),e),ignoreErrors:[/^TransitionAborted$/]}),this.session.isAuthenticated){try{await this.session.populateUser()}catch(e){await this.session.invalidate()}await this.session.postAuthPreparation()}this.config.hostSettings?.forceUpgrade&&this.billing.openBillingWindow(this.router.currentURL,"/pro")}})
3698
3699
  e.default=c})),define("ghost-admin/routes/authenticated",["exports"],(function(e){var t,i,n
3699
3700
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3700
3701
  let r=(t=Ember.inject.service,i=class extends Ember.Route{constructor(){var e,t,i,r
@@ -4335,7 +4336,7 @@ try{return JSON.parse(e)||{}}catch(t){return{}}}get accessibility(){let e=this.g
4335
4336
  try{return JSON.parse(e)||{}}catch(t){return{}}}fetch(){return this.settings.fetch().then((()=>(this.set("_user",this.session.user),this._setAdminTheme().then((()=>!0)))))}update(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.user?"accessibility":"labs",r=this.get(i.user?"_user":"settings"),a=this.get(n)
4336
4337
  return Ember.set(a,e,t),i.requires&&!0===t&&i.requires.forEach((e=>{Ember.set(a,e,!0)})),r.set(n,JSON.stringify(a)),r.save().then((()=>(this.notifyPropertyChange(n),this.get(`${n}.${e}`)))).catch((t=>{if(r.rollbackAttributes(),this.notifyPropertyChange(n),!t)throw new Ember.Error(`Validation of the feature service ${i.user?"user":"settings"} model failed when updating ${n}.`)
4337
4338
  return this.notifications.showAPIError(t),this.get(`${n}.${e}`)}))}_setAdminTheme(e){let i=e
4338
- return void 0===i&&(i=e||this.nightShift),this.lazyLoader.loadStyle("dark","assets/ghost-dark-681daaaef962911f5bcfdd51d7b4efdd.css",!0).then((()=>{(0,t.default)("link[title=dark]").prop("disabled",!i)})).catch((()=>{(0,t.default)("link[title=dark]").prop("disabled",!0)}))}},k=N(w.prototype,"lazyLoader",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=N(w.prototype,"notifications",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=N(w.prototype,"session",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=N(w.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=N(w.prototype,"store",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=N(w.prototype,"config",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=N(w.prototype,"emailAnalytics",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=N(w.prototype,"nightShift",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=N(w.prototype,"urlCache",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=N(w.prototype,"beforeAfterCard",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=N(w.prototype,"memberAttribution",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=N(w.prototype,"sourceAttribution",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=N(w.prototype,"lexicalEditor",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=N(w.prototype,"audienceFeedback",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=N(w.prototype,"suppressionList",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=N(w.prototype,"emailStability",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N(w.prototype,"labs",[v],Object.getOwnPropertyDescriptor(w.prototype,"labs"),w.prototype),N(w.prototype,"accessibility",[y],Object.getOwnPropertyDescriptor(w.prototype,"accessibility"),w.prototype),w)
4339
+ return void 0===i&&(i=e||this.nightShift),this.lazyLoader.loadStyle("dark","assets/ghost-dark-a2076b08f23a9e6340072bc7b06ec9e7.css",!0).then((()=>{(0,t.default)("link[title=dark]").prop("disabled",!i)})).catch((()=>{(0,t.default)("link[title=dark]").prop("disabled",!0)}))}},k=N(w.prototype,"lazyLoader",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=N(w.prototype,"notifications",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=N(w.prototype,"session",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=N(w.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=N(w.prototype,"store",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=N(w.prototype,"config",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=N(w.prototype,"emailAnalytics",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=N(w.prototype,"nightShift",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=N(w.prototype,"urlCache",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=N(w.prototype,"beforeAfterCard",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=N(w.prototype,"memberAttribution",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=N(w.prototype,"sourceAttribution",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=N(w.prototype,"lexicalEditor",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=N(w.prototype,"audienceFeedback",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=N(w.prototype,"suppressionList",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=N(w.prototype,"emailStability",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N(w.prototype,"labs",[v],Object.getOwnPropertyDescriptor(w.prototype,"labs"),w.prototype),N(w.prototype,"accessibility",[y],Object.getOwnPropertyDescriptor(w.prototype,"accessibility"),w.prototype),w)
4339
4340
  e.default=F})),define("ghost-admin/services/frontend",["exports","fetch","validator","ghost-admin/decorators/inject"],(function(e,t,i,n){var r,a,s,o,l,u
4340
4341
  function c(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function d(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function p(e,t,i,n,r){var a={}
4341
4342
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -4485,8 +4486,8 @@ let r=e.message.string||e.message
4485
4486
  this.content=new i.TrackedArray(this.content.reject((e=>(e.message.string||e.message)===r))),t?this.delayedNotifications.push(e):this.content.push(e)}showAlert(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}
4486
4487
  if(i=i||{},!(i.isApiError||i.type&&"error"!==i.type)&&this.config.sentry_dsn){const n=e.string||e,r={ghost:{displayed_message:n,ghost_error_code:i.ghostErrorCode,full_error:e}}
4487
4488
  t.captureMessage(n,{contexts:r,tags:{shown_to_user:!0,source:"showAlert"}})}this.handleNotification({message:e,status:"alert",description:i.description,icon:i.icon,type:i.type,key:i.key,actions:i.actions},i.delayed)}showNotification(e,t){t=t||{},this.handleNotification({message:e,status:"notification",description:t.description,icon:t.icon,type:t.type,key:t.key,actions:t.actions},t.delayed)}showAPIError(e,t){return(0,r.isVersionMismatchError)(e)?this.upgradeStatus.requireUpgrade():(0,r.isMaintenanceError)(e)?this.upgradeStatus.maintenanceAlert():Ember.isArray(e?.payload?.errors)?e.payload.errors.forEach((e=>{this._showAPIError(e,t)})):void this._showAPIError(e,t)}_showAPIError(e,i){(i=i||{}).type=i.type||"error",i.key||Ember.isBlank(e?.title)||(i.key=Ember.String.dasherize(e?.title)),i.key=["api-error",i.key].compact().join(".")
4488
- let n=i.defaultErrorText||"There was a problem on the server, please try again."
4489
- if(e?.name&&b.includes(e.name)?n=g:e instanceof String?n=e:Ember.isBlank(e?.detail)?Ember.isBlank(e?.message)||(n=e.message):n=e.detail,Ember.isBlank(e?.context)||(n=`${n} ${e.context}`),this.config.sentry_dsn){const i=e instanceof Error?e:n
4489
+ let n=i.defaultErrorText||g
4490
+ if(e?.name&&b.includes(e.name)?n=g:e instanceof String?n=e:Ember.isBlank(e?.message)||(n=e.message),Ember.isBlank(e?.context)||e?.context===n||(n=`${n} ${e.context}`),this.config.sentry_dsn){const i=e instanceof Error?e:n
4490
4491
  t.captureException(i,{contexts:{ghost:{ghost_error_code:e.ghostErrorCode,displayed_message:n,full_error:e}},tags:{shown_to_user:!0,source:"showAPIError"}})}i.isApiError=!0,this.showAlert(n,i)}displayDelayed(){this.delayedNotifications.forEach((e=>{this.content.push(e)})),this.delayedNotifications=new i.TrackedArray([])}closeNotification(e){let t=this.content
4491
4492
  "notification"===e.constructor.modelName?(e.deleteRecord(),e.save().finally((()=>{t.removeObject(e)}))):t.removeObject(e)}closeNotifications(e){this._removeItems("notification",e)}closeAlerts(e){this._removeItems("alert",e)}clearAll(){this.content=new i.TrackedArray([])}_removeItems(e,t){if(t){let n=this._getKeyBase(t).replace(".","\\."),r=new RegExp(`^${n}`)
4492
4493
  this.content=new i.TrackedArray(this.content.reject((t=>{let i=t.key
@@ -4942,6 +4943,6 @@ e.default=n}))
4942
4943
  define("ghost-admin/views/application",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4943
4944
  var t=Ember.Component.extend({})
4944
4945
  e.default=t})),define("ghost-admin/config/environment",[],(function(){try{var e="ghost-admin/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),i={default:JSON.parse(decodeURIComponent(t))}
4945
- return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(n){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.23",name:"ghost-admin"})
4946
+ return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(n){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.24",name:"ghost-admin"})
4946
4947
 
4947
- //# sourceMappingURL=ghost-64c5f32d4052347eed1ae73909b526ef.map
4948
+ //# sourceMappingURL=ghost-34bc21923675def87aa2516f72ca15d7.map