From b03409c2a022f82e6ffc9bc9a07e6e84a2436b99 Mon Sep 17 00:00:00 2001 From: StandardNotes CI Date: Wed, 29 Jun 2022 17:33:54 +0000 Subject: [PATCH] chore(release): components --- .../dist/dist.js | 2 +- .../dist/dist.js.map | 2 +- packages/components/dist/zips/checksums.json | 6 +++--- .../zips/org.standardnotes.plus-editor.zip | Bin 187459 -> 187656 bytes 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js b/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js index 79ecd5756..3cd9fc4da 100644 --- a/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js +++ b/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js @@ -1,2 +1,2 @@ -document.addEventListener("DOMContentLoaded",(function(){let e,t,n,o,i,a=!1,r=!0,s=!1;const l=["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"].join(", ");function c(){if(t){const i=t;e.saveItemWithPresave(i,(()=>{o=$("#summernote").summernote("code"),i.clientData=n,i.content.text=o,i.content.preview_plain=function(e,t=90){return e.length<=t?e:e.substring(0,t)+"..."}(function(e){const t=document.implementation.createHTMLDocument("New").body;return t.innerHTML=e,t.textContent||t.innerText||""}(o)),i.content.preview_html=null}))}}function u(){return e.getComponentDataValueForKey("notes")||{}}$("#summernote").summernote({height:500,minHeight:null,maxHeight:null,focus:!0,tabDisable:!0,showDomainOnlyForAutolink:!1,toolbar:[["para",["style"]],["style",["bold","italic","underline","strikethrough","clear"]],["fontsize",["fontsize","fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["height",["height"]],["insert",["table","link","hr","picture","video"]],["misc",["codeview","help"]]],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Monospace","Roboto","system-ui","Tahoma","Times New Roman","Verdana"],callbacks:{onInit:function(){},onImageUpload:function(){alert("Until we can encrypt image files, uploads are not currently supported. We recommend using the Image button in the toolbar and copying an image URL instead.")}}}),$("#summernote").on("summernote.change",(function(){document.querySelectorAll(l).forEach((e=>e.setAttribute("dir","auto"))),a||c()})),$("textarea.note-codable").on("input",(()=>{c()})),e=new ComponentRelay({initialPermissions:[{name:"stream-context-item"}],targetWindow:window,onReady:()=>{const t=e.platform;t&&document.body.classList.add(t)}}),e.streamContextItem((l=>{!function(l){if(l.uuid!==i&&(o=null,r=!0,i=l.uuid),t=l,l.isMetadataUpdate)return;n=l.clientData;let c=l.content.text;if($(".note-editable").attr("spellcheck",JSON.stringify(l.content.spellcheck)),c==o)return;const m=$("#summernote");if(m){a=!0;const t=/<[a-z][\s\S]*>/i.test(c);s||(m.summernote("fullscreen.toggle"),s=!0),r&&!t&&(c=((c||"")+"").replace(/\t/g," ").replace(/\r\n|\r|\n/g,"
"));let n=!1;if(function(e){const t=(new DOMParser).parseFromString(`${e}`,"text/html");return Array.from(t.body.childNodes).some((e=>"SCRIPT"==e.nodeName))}(c)){const t=u()[i];t?n=t.trustUnsafeContent||!1:new Promise((e=>{new Stylekit.SKAlert({title:null,text:"We’ve detected that this note contains a script or code snippet which may be unsafe to execute. Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.",buttons:[{text:"Cancel",style:"neutral",action:function(){e(!1)}},{text:"Continue",style:"danger",action:function(){e(!0)}}]}).present()})).then((t=>{t&&(function(t,n){const o=u();o[i]={trustUnsafeContent:n},e.setComponentDataValueForKey("notes",o)}(0,t),n=t)}))}else n=!0;if(!n)return m.summernote("code",""),void m.summernote("disable");m.summernote("enable"),m.summernote("code",c),r&&(m.summernote("commit"),r=!1),a=!1}}(l)}))})); +document.addEventListener("DOMContentLoaded",(function(){let e,t,n,o,i,a=!1,r=!0,s=!1;const l=["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"].join(", ");function c(){if(t){const i=t;e.saveItemWithPresave(i,(()=>{o=$("#summernote").summernote("code"),i.clientData=n,i.content.text=o,i.content.preview_plain=function(e,t=90){return e.length<=t?e:e.substring(0,t)+"..."}(function(e){const t=document.implementation.createHTMLDocument("New").body;return t.innerHTML=e,t.textContent||t.innerText||""}(o)),i.content.preview_html=null}))}}function d(){return e.getComponentDataValueForKey("notes")||{}}$("#summernote").summernote({height:500,minHeight:null,maxHeight:null,focus:!0,tabDisable:!0,showDomainOnlyForAutolink:!1,toolbar:[["para",["style"]],["style",["bold","italic","underline","strikethrough","clear"]],["fontsize",["fontsize","fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["height",["height"]],["insert",["table","link","hr","picture","video"]],["misc",["codeview","help"]]],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Monospace","Roboto","system-ui","Tahoma","Times New Roman","Verdana"],callbacks:{onInit:function(){},onImageUpload:function(){alert("Embedding encrypted images directly inside the editor is not presently supported. You can attach files to be outside the editor instead. For embedding images directly inside this note, use the Image button in the toolbar and insert the URL of an image hosted externally (outside of Standard Notes). For more information, visit https://standardnotes.com/help/36/how-do-i-attach-encrypted-files-to-my-notes.")}}}),$("#summernote").on("summernote.change",(function(){document.querySelectorAll(l).forEach((e=>e.setAttribute("dir","auto"))),a||c()})),$("textarea.note-codable").on("input",(()=>{c()})),e=new ComponentRelay({initialPermissions:[{name:"stream-context-item"}],targetWindow:window,onReady:()=>{const t=e.platform;t&&document.body.classList.add(t)}}),e.streamContextItem((l=>{!function(l){if(l.uuid!==i&&(o=null,r=!0,i=l.uuid),t=l,l.isMetadataUpdate)return;n=l.clientData;let c=l.content.text;if($(".note-editable").attr("spellcheck",JSON.stringify(l.content.spellcheck)),c==o)return;const u=$("#summernote");if(u){a=!0;const t=/<[a-z][\s\S]*>/i.test(c);s||(u.summernote("fullscreen.toggle"),s=!0),r&&!t&&(c=((c||"")+"").replace(/\t/g," ").replace(/\r\n|\r|\n/g,"
"));let n=!1;if(function(e){const t=(new DOMParser).parseFromString(`${e}`,"text/html");return Array.from(t.body.childNodes).some((e=>"SCRIPT"==e.nodeName))}(c)){const t=d()[i];t?n=t.trustUnsafeContent||!1:new Promise((e=>{new Stylekit.SKAlert({title:null,text:"We’ve detected that this note contains a script or code snippet which may be unsafe to execute. Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.",buttons:[{text:"Cancel",style:"neutral",action:function(){e(!1)}},{text:"Continue",style:"danger",action:function(){e(!0)}}]}).present()})).then((t=>{t&&(function(t,n){const o=d();o[i]={trustUnsafeContent:n},e.setComponentDataValueForKey("notes",o)}(0,t),n=t)}))}else n=!0;if(!n)return u.summernote("code",""),void u.summernote("disable");u.summernote("enable"),u.summernote("code",c),r&&(u.summernote("commit"),r=!1),a=!1}}(l)}))})); //# sourceMappingURL=dist.js.map \ No newline at end of file diff --git a/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js.map b/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js.map index 4db162535..8097ecd20 100644 --- a/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js.map +++ b/packages/components/dist/assets/org.standardnotes.plus-editor/dist/dist.js.map @@ -1 +1 @@ -{"version":3,"file":"dist.js","mappings":"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","sources":["webpack://@standardnotes/rich-text/./src/main.js"],"sourcesContent":["document.addEventListener('DOMContentLoaded', function () {\n let componentRelay;\n let workingNote, clientData;\n let lastValue, lastUUID;\n let ignoreTextChange = false;\n let newNoteLoad = true,\n didToggleFullScreen = false;\n\n const blockString = [\n 'address', 'article', 'aside', 'blockquote', 'details', 'dialog', 'dd',\n 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr',\n 'li', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul',\n ].join(', ');\n\n function loadComponentRelay() {\n const initialPermissions = [\n {\n name: 'stream-context-item'\n }\n ];\n\n componentRelay = new ComponentRelay({\n initialPermissions,\n targetWindow: window,\n onReady: () => {\n const platform = componentRelay.platform;\n if (platform) {\n document.body.classList.add(platform);\n }\n }\n });\n\n componentRelay.streamContextItem((note) => {\n onReceivedNote(note);\n });\n }\n\n function strip(html) {\n const tmp = document.implementation.createHTMLDocument('New').body;\n tmp.innerHTML = html;\n return tmp.textContent || tmp.innerText || '';\n }\n\n function truncateString(string, limit = 90) {\n if (string.length <= limit) {\n return string;\n } else {\n return string.substring(0, limit) + '...';\n }\n }\n\n function save() {\n if (workingNote) {\n // Be sure to capture this object as a variable, as workingNote may be\n // reassigned in `streamContextItem`, so by the time you modify it in\n // the presave block, it may not be the same object anymore, so the\n // presave values will not be applied to the right object, and it will\n // save incorrectly.\n const note = workingNote;\n\n componentRelay.saveItemWithPresave(note, () => {\n lastValue = $('#summernote').summernote('code');\n note.clientData = clientData;\n\n note.content.text = lastValue;\n note.content.preview_plain = truncateString(strip(lastValue));\n note.content.preview_html = null;\n });\n }\n }\n\n function onReceivedNote(note) {\n if (note.uuid !== lastUUID) {\n // Note changed, reset last values\n lastValue = null;\n newNoteLoad = true;\n lastUUID = note.uuid;\n }\n\n workingNote = note;\n\n // Only update UI on non-metadata updates.\n if (note.isMetadataUpdate) {\n return;\n }\n\n clientData = note.clientData;\n let newText = note.content.text;\n\n $('.note-editable').attr('spellcheck', JSON.stringify(note.content.spellcheck));\n\n if (newText == lastValue) {\n return;\n }\n\n const summernote = $('#summernote');\n if (summernote) {\n ignoreTextChange = true;\n const isHtml = /<[a-z][\\s\\S]*>/i.test(newText);\n\n if (!didToggleFullScreen) {\n summernote.summernote('fullscreen.toggle');\n didToggleFullScreen = true;\n }\n\n if (newNoteLoad && !isHtml) {\n newText = textToHTML(newText);\n }\n\n let renderNote = false;\n const isUnsafeContent = checkIfUnsafeContent(newText);\n\n if (isUnsafeContent) {\n const currentNotePreferences = getCurrentNotePreferences();\n if (!currentNotePreferences) {\n showUnsafeContentAlert().then((result) => {\n if (result) {\n setNotePreferences('trustUnsafeContent', result);\n renderNote = result;\n }\n });\n } else {\n renderNote = currentNotePreferences.trustUnsafeContent || false;\n }\n } else {\n renderNote = true;\n }\n\n /**\n * If the user decides not to continue rendering the note,\n * clear the editor and disable it.\n */\n if (!renderNote) {\n summernote.summernote('code', '');\n summernote.summernote('disable');\n return;\n }\n\n summernote.summernote('enable');\n summernote.summernote('code', newText);\n\n if (newNoteLoad) {\n // Clears history but keeps note contents. Note that this line will\n // trigger a summernote.change event, so be sure to do this inside a\n // `ignoreTextChange` block.\n summernote.summernote('commit');\n newNoteLoad = false;\n }\n\n ignoreTextChange = false;\n }\n }\n\n function getNotePreferences() {\n return componentRelay.getComponentDataValueForKey('notes') || {};\n }\n\n function getCurrentNotePreferences() {\n const notesPreferences = getNotePreferences();\n return notesPreferences[lastUUID];\n }\n\n function setNotePreferences(key, value) {\n const notesPreferences = getNotePreferences();\n notesPreferences[lastUUID] = {\n [key]: value\n };\n componentRelay.setComponentDataValueForKey('notes', notesPreferences);\n }\n\n /**\n * Checks if the content contains at least one script tag.\n */\n function checkIfUnsafeContent(content) {\n const doc = new DOMParser().parseFromString(`${content}`, 'text/html');\n return Array.from(doc.body.childNodes).some(node => node.nodeName == 'SCRIPT');\n }\n\n function showUnsafeContentAlert() {\n const text = 'We’ve detected that this note contains a script or code snippet which may be unsafe to execute. ' +\n 'Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. ' +\n 'Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.';\n\n return new Promise((resolve) => {\n const alert = new Stylekit.SKAlert({\n title: null,\n text,\n buttons: [\n {\n text: 'Cancel',\n style: 'neutral',\n action: function() {\n resolve(false);\n },\n },\n {\n text: 'Continue',\n style: 'danger',\n action: function() {\n resolve(true);\n },\n },\n ]\n });\n alert.present();\n });\n }\n\n function loadEditor() {\n $('#summernote').summernote({\n height: 500, // set editor height\n minHeight: null, // set minimum height of editor\n maxHeight: null, // set maximum height of editor\n focus: true, // set focus to editable area after initializing summernote\n tabDisable: true, // set tab interaction to note only\n showDomainOnlyForAutolink: false, // set autolink to preserve whole link\n toolbar: [\n // [groupName, [list of button]]\n ['para', ['style']],\n ['style', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n ['fontsize', ['fontsize', 'fontname']],\n ['color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['height', ['height']],\n ['insert', ['table', 'link', 'hr', 'picture', 'video']],\n ['misc', ['codeview', 'help']]\n ],\n fontNames: [\n 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Monospace',\n 'Roboto', 'system-ui', 'Tahoma', 'Times New Roman', 'Verdana'\n ],\n callbacks: {\n onInit: function () {},\n onImageUpload: function () {\n alert('Until we can encrypt image files, uploads are not currently '\n + 'supported. We recommend using the Image button in the toolbar '\n + 'and copying an image URL instead.');\n }\n }\n });\n\n // summernote.change\n $('#summernote').on('summernote.change', function () {\n // Add RTL support when block-level elements are detect onchange.\n document.querySelectorAll(blockString)\n .forEach(element => element.setAttribute('dir', 'auto'));\n\n if (!ignoreTextChange) {\n save();\n }\n });\n\n $('textarea.note-codable').on('input', () => {\n save();\n });\n }\n\n loadEditor();\n loadComponentRelay();\n\n function textToHTML(text) {\n return ((text || '') + '')\n .replace(/\\t/g, ' ')\n .replace(/\\r\\n|\\r|\\n/g, '
');\n }\n});\n"],"names":["document","addEventListener","componentRelay","workingNote","clientData","lastValue","lastUUID","ignoreTextChange","newNoteLoad","didToggleFullScreen","blockString","join","save","note","saveItemWithPresave","$","summernote","content","text","preview_plain","string","limit","length","substring","truncateString","html","tmp","implementation","createHTMLDocument","body","innerHTML","textContent","innerText","strip","preview_html","getNotePreferences","getComponentDataValueForKey","height","minHeight","maxHeight","focus","tabDisable","showDomainOnlyForAutolink","toolbar","fontNames","callbacks","onInit","onImageUpload","alert","on","querySelectorAll","forEach","element","setAttribute","ComponentRelay","initialPermissions","name","targetWindow","window","onReady","platform","classList","add","streamContextItem","uuid","isMetadataUpdate","newText","attr","JSON","stringify","spellcheck","isHtml","test","replace","renderNote","doc","DOMParser","parseFromString","Array","from","childNodes","some","node","nodeName","checkIfUnsafeContent","currentNotePreferences","trustUnsafeContent","Promise","resolve","Stylekit","SKAlert","title","buttons","style","action","present","then","result","key","value","notesPreferences","setComponentDataValueForKey","setNotePreferences","onReceivedNote"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"dist.js","mappings":"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","sources":["webpack://@standardnotes/rich-text/./src/main.js"],"sourcesContent":["document.addEventListener('DOMContentLoaded', function () {\n let componentRelay;\n let workingNote, clientData;\n let lastValue, lastUUID;\n let ignoreTextChange = false;\n let newNoteLoad = true,\n didToggleFullScreen = false;\n\n const blockString = [\n 'address', 'article', 'aside', 'blockquote', 'details', 'dialog', 'dd',\n 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr',\n 'li', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul',\n ].join(', ');\n\n function loadComponentRelay() {\n const initialPermissions = [\n {\n name: 'stream-context-item'\n }\n ];\n\n componentRelay = new ComponentRelay({\n initialPermissions,\n targetWindow: window,\n onReady: () => {\n const platform = componentRelay.platform;\n if (platform) {\n document.body.classList.add(platform);\n }\n }\n });\n\n componentRelay.streamContextItem((note) => {\n onReceivedNote(note);\n });\n }\n\n function strip(html) {\n const tmp = document.implementation.createHTMLDocument('New').body;\n tmp.innerHTML = html;\n return tmp.textContent || tmp.innerText || '';\n }\n\n function truncateString(string, limit = 90) {\n if (string.length <= limit) {\n return string;\n } else {\n return string.substring(0, limit) + '...';\n }\n }\n\n function save() {\n if (workingNote) {\n // Be sure to capture this object as a variable, as workingNote may be\n // reassigned in `streamContextItem`, so by the time you modify it in\n // the presave block, it may not be the same object anymore, so the\n // presave values will not be applied to the right object, and it will\n // save incorrectly.\n const note = workingNote;\n\n componentRelay.saveItemWithPresave(note, () => {\n lastValue = $('#summernote').summernote('code');\n note.clientData = clientData;\n\n note.content.text = lastValue;\n note.content.preview_plain = truncateString(strip(lastValue));\n note.content.preview_html = null;\n });\n }\n }\n\n function onReceivedNote(note) {\n if (note.uuid !== lastUUID) {\n // Note changed, reset last values\n lastValue = null;\n newNoteLoad = true;\n lastUUID = note.uuid;\n }\n\n workingNote = note;\n\n // Only update UI on non-metadata updates.\n if (note.isMetadataUpdate) {\n return;\n }\n\n clientData = note.clientData;\n let newText = note.content.text;\n\n $('.note-editable').attr('spellcheck', JSON.stringify(note.content.spellcheck));\n\n if (newText == lastValue) {\n return;\n }\n\n const summernote = $('#summernote');\n if (summernote) {\n ignoreTextChange = true;\n const isHtml = /<[a-z][\\s\\S]*>/i.test(newText);\n\n if (!didToggleFullScreen) {\n summernote.summernote('fullscreen.toggle');\n didToggleFullScreen = true;\n }\n\n if (newNoteLoad && !isHtml) {\n newText = textToHTML(newText);\n }\n\n let renderNote = false;\n const isUnsafeContent = checkIfUnsafeContent(newText);\n\n if (isUnsafeContent) {\n const currentNotePreferences = getCurrentNotePreferences();\n if (!currentNotePreferences) {\n showUnsafeContentAlert().then((result) => {\n if (result) {\n setNotePreferences('trustUnsafeContent', result);\n renderNote = result;\n }\n });\n } else {\n renderNote = currentNotePreferences.trustUnsafeContent || false;\n }\n } else {\n renderNote = true;\n }\n\n /**\n * If the user decides not to continue rendering the note,\n * clear the editor and disable it.\n */\n if (!renderNote) {\n summernote.summernote('code', '');\n summernote.summernote('disable');\n return;\n }\n\n summernote.summernote('enable');\n summernote.summernote('code', newText);\n\n if (newNoteLoad) {\n // Clears history but keeps note contents. Note that this line will\n // trigger a summernote.change event, so be sure to do this inside a\n // `ignoreTextChange` block.\n summernote.summernote('commit');\n newNoteLoad = false;\n }\n\n ignoreTextChange = false;\n }\n }\n\n function getNotePreferences() {\n return componentRelay.getComponentDataValueForKey('notes') || {};\n }\n\n function getCurrentNotePreferences() {\n const notesPreferences = getNotePreferences();\n return notesPreferences[lastUUID];\n }\n\n function setNotePreferences(key, value) {\n const notesPreferences = getNotePreferences();\n notesPreferences[lastUUID] = {\n [key]: value\n };\n componentRelay.setComponentDataValueForKey('notes', notesPreferences);\n }\n\n /**\n * Checks if the content contains at least one script tag.\n */\n function checkIfUnsafeContent(content) {\n const doc = new DOMParser().parseFromString(`${content}`, 'text/html');\n return Array.from(doc.body.childNodes).some(node => node.nodeName == 'SCRIPT');\n }\n\n function showUnsafeContentAlert() {\n const text = 'We’ve detected that this note contains a script or code snippet which may be unsafe to execute. ' +\n 'Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. ' +\n 'Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.';\n\n return new Promise((resolve) => {\n const alert = new Stylekit.SKAlert({\n title: null,\n text,\n buttons: [\n {\n text: 'Cancel',\n style: 'neutral',\n action: function() {\n resolve(false);\n },\n },\n {\n text: 'Continue',\n style: 'danger',\n action: function() {\n resolve(true);\n },\n },\n ]\n });\n alert.present();\n });\n }\n\n function loadEditor() {\n $('#summernote').summernote({\n height: 500, // set editor height\n minHeight: null, // set minimum height of editor\n maxHeight: null, // set maximum height of editor\n focus: true, // set focus to editable area after initializing summernote\n tabDisable: true, // set tab interaction to note only\n showDomainOnlyForAutolink: false, // set autolink to preserve whole link\n toolbar: [\n // [groupName, [list of button]]\n ['para', ['style']],\n ['style', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n ['fontsize', ['fontsize', 'fontname']],\n ['color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['height', ['height']],\n ['insert', ['table', 'link', 'hr', 'picture', 'video']],\n ['misc', ['codeview', 'help']]\n ],\n fontNames: [\n 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Monospace',\n 'Roboto', 'system-ui', 'Tahoma', 'Times New Roman', 'Verdana'\n ],\n callbacks: {\n onInit: function () {},\n onImageUpload: function () {\n alert('Embedding encrypted images directly inside the editor is not presently supported. You can attach files to be outside the editor instead. For embedding images directly inside this note, use the Image button in the toolbar and insert the URL of an image hosted externally (outside of Standard Notes). For more information, visit https://standardnotes.com/help/36/how-do-i-attach-encrypted-files-to-my-notes.');\n }\n }\n });\n\n // summernote.change\n $('#summernote').on('summernote.change', function () {\n // Add RTL support when block-level elements are detect onchange.\n document.querySelectorAll(blockString)\n .forEach(element => element.setAttribute('dir', 'auto'));\n\n if (!ignoreTextChange) {\n save();\n }\n });\n\n $('textarea.note-codable').on('input', () => {\n save();\n });\n }\n\n loadEditor();\n loadComponentRelay();\n\n function textToHTML(text) {\n return ((text || '') + '')\n .replace(/\\t/g, ' ')\n .replace(/\\r\\n|\\r|\\n/g, '
');\n }\n});\n"],"names":["document","addEventListener","componentRelay","workingNote","clientData","lastValue","lastUUID","ignoreTextChange","newNoteLoad","didToggleFullScreen","blockString","join","save","note","saveItemWithPresave","$","summernote","content","text","preview_plain","string","limit","length","substring","truncateString","html","tmp","implementation","createHTMLDocument","body","innerHTML","textContent","innerText","strip","preview_html","getNotePreferences","getComponentDataValueForKey","height","minHeight","maxHeight","focus","tabDisable","showDomainOnlyForAutolink","toolbar","fontNames","callbacks","onInit","onImageUpload","alert","on","querySelectorAll","forEach","element","setAttribute","ComponentRelay","initialPermissions","name","targetWindow","window","onReady","platform","classList","add","streamContextItem","uuid","isMetadataUpdate","newText","attr","JSON","stringify","spellcheck","isHtml","test","replace","renderNote","doc","DOMParser","parseFromString","Array","from","childNodes","some","node","nodeName","checkIfUnsafeContent","currentNotePreferences","trustUnsafeContent","Promise","resolve","Stylekit","SKAlert","title","buttons","style","action","present","then","result","key","value","notesPreferences","setComponentDataValueForKey","setNotePreferences","onReceivedNote"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/components/dist/zips/checksums.json b/packages/components/dist/zips/checksums.json index 2310d726e..8027996f8 100644 --- a/packages/components/dist/zips/checksums.json +++ b/packages/components/dist/zips/checksums.json @@ -45,9 +45,9 @@ "binary": "deaece4cd37801f796eca2bf37fcccabfc6ddc43581630aa9ed04b9b0f7a7762" }, "org.standardnotes.plus-editor": { - "version": "1.6.6", - "base64": "89cceec289f023b68fc5a76832730a145ebac612da9b33610de48c2f0353da0e", - "binary": "a728c207ccf79c41852f00afeda2ed3384485bbd616c2abaca06ab317ea1ec79" + "version": "1.7.0", + "base64": "a63f79a3b6398ab13f8a4e106bbfc06312d31336967bbc5d2aa16c0c94ee08bb", + "binary": "fd258ce43577024cbe297904963b1beabe239d053b7666b7e469cf1aaf0abd8d" }, "org.standardnotes.simple-markdown-editor": { "version": "1.4.7", diff --git a/packages/components/dist/zips/org.standardnotes.plus-editor.zip b/packages/components/dist/zips/org.standardnotes.plus-editor.zip index 601e6df508f3021ba9f74adce3d0bf7e082fb5e5..10e470988a1399a28f5b88370251b54f4036814a 100644 GIT binary patch delta 7610 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 delta 7413 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 jmv83w->fa!?A)E5)RYhq|I