@standardnotes/classic-code-editor 1.6.1 → 1.6.12
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.
- package/CHANGELOG.md +46 -0
- package/dist/lib/component-relay.js +1 -1
- package/dist/main.css +1 -1
- package/dist/main.css.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/index.html +4 -7
- package/package.json +8 -3
- package/src/main.js +11 -3
- package/src/main.scss +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,52 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.6.12](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.11...@standardnotes/classic-code-editor@1.6.12) (2026-01-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
9
|
+
|
|
10
|
+
## [1.6.11](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.10...@standardnotes/classic-code-editor@1.6.11) (2026-01-16)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
13
|
+
|
|
14
|
+
## [1.6.10](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.9...@standardnotes/classic-code-editor@1.6.10) (2026-01-16)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
17
|
+
|
|
18
|
+
## [1.6.9](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.8...@standardnotes/classic-code-editor@1.6.9) (2026-01-15)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
21
|
+
|
|
22
|
+
## [1.6.8](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.7...@standardnotes/classic-code-editor@1.6.8) (2026-01-15)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
25
|
+
|
|
26
|
+
## [1.6.7](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.6...@standardnotes/classic-code-editor@1.6.7) (2026-01-14)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
29
|
+
|
|
30
|
+
## [1.6.6](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.5...@standardnotes/classic-code-editor@1.6.6) (2026-01-14)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
33
|
+
|
|
34
|
+
## [1.6.5](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.4...@standardnotes/classic-code-editor@1.6.5) (2026-01-13)
|
|
35
|
+
|
|
36
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
37
|
+
|
|
38
|
+
## [1.6.4](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.3...@standardnotes/classic-code-editor@1.6.4) (2026-01-13)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
41
|
+
|
|
42
|
+
## [1.6.3](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.2...@standardnotes/classic-code-editor@1.6.3) (2026-01-13)
|
|
43
|
+
|
|
44
|
+
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
45
|
+
|
|
46
|
+
## [1.6.2](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.1...@standardnotes/classic-code-editor@1.6.2) (2025-06-24)
|
|
47
|
+
|
|
48
|
+
### Bug Fixes
|
|
49
|
+
|
|
50
|
+
* code editor fixes ([#46](https://github.com/standardnotes/plugins/issues/46)) ([7517720](https://github.com/standardnotes/plugins/commit/751772055918b28765ac5b8f0cc748b8a816e69c))
|
|
51
|
+
|
|
6
52
|
## [1.6.1](https://github.com/standardnotes/plugins/compare/@standardnotes/classic-code-editor@1.6.0...@standardnotes/classic-code-editor@1.6.1) (2023-11-18)
|
|
7
53
|
|
|
8
54
|
**Note:** Version bump only for package @standardnotes/classic-code-editor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("ComponentRelay",[],t):"object"==typeof exports?exports.ComponentRelay=t():e.ComponentRelay=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var s in n)e.o(n,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:n[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};let n;var s;e.d(t,{default:()=>k}),function(e){e[e.Web=1]="Web",e[e.Desktop=2]="Desktop",e[e.Mobile=3]="Mobile"}(n||(n={}));var i=new Uint8Array(16);function o(){if(!s&&!(s="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return s(i)}const a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,r=function(e){return"string"==typeof e&&a.test(e)};for(var m=[],c=0;c<256;++c)m.push((c+256).toString(16).substr(1));const h=e=>{var t;const s={[n.Web]:"web",[n.Desktop]:"desktop",[n.Mobile]:"mobile"};return null!==(t=s[e])&&void 0!==t?t:s[n.Web]},d=()=>{};class p{static get isSupported(){return!(!window.console&&!console)}static get info(){return p.isSupported&&this.enabled?console.log.bind(console):d}static get error(){return p.isSupported?console.error.bind(console):d}}var l,u;let v,g,f;function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,s)}return n}function b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}(u="enabled")in(l=p)?Object.defineProperty(l,u,{value:!1,enumerable:!0,configurable:!0,writable:!0}):l[u]=!1,function(e){e.Shift="Shift",e.Ctrl="Control",e.Meta="Meta"}(v||(v={})),function(e){e.Component="component"}(g||(g={})),function(e){e.SetSize="set-size",e.StreamItems="stream-items",e.StreamContextItem="stream-context-item",e.SaveItems="save-items",e.CreateItem="create-item",e.CreateItems="create-items",e.DeleteItems="delete-items",e.SetComponentData="set-component-data",e.RequestPermissions="request-permissions",e.DuplicateItem="duplicate-item",e.ComponentRegistered="component-registered",e.ActivateThemes="themes",e.Reply="reply",e.ThemesActivated="themes-activated",e.KeyDown="key-down",e.KeyUp="key-up",e.Click="click"}(f||(f={}));class k{constructor(e){var t,n;if(S(this,"contentWindow",void 0),S(this,"component",{activeThemes:[],acceptsThemes:!0}),S(this,"sentMessages",[]),S(this,"messageQueue",[]),S(this,"lastStreamedItem",void 0),S(this,"pendingSaveItems",void 0),S(this,"pendingSaveTimeout",void 0),S(this,"pendingSaveParams",void 0),S(this,"messageHandler",void 0),S(this,"keyDownEventListener",void 0),S(this,"keyUpEventListener",void 0),S(this,"clickEventListener",void 0),S(this,"concernTimeouts",[]),S(this,"options",void 0),S(this,"params",void 0),!e||!e.targetWindow)throw new Error("contentWindow must be a valid Window object.");this.params=e,this.options=e.options||{},null==this.options.coallesedSaving&&(this.options.coallesedSaving=!0),null==this.options.coallesedSavingDelay&&(this.options.coallesedSavingDelay=250),null!=this.options.acceptsThemes&&(this.component.acceptsThemes=null===(n=this.options.acceptsThemes)||void 0===n||n),p.enabled=null!==(t=this.options.debug)&&void 0!==t&&t,this.contentWindow=e.targetWindow,this.registerMessageHandler(),this.registerKeyboardEventListeners(),this.registerMouseEventListeners()}deinit(){this.params.onReady=void 0,this.component={acceptsThemes:!0,activeThemes:[]},this.messageQueue=[],this.sentMessages=[],this.lastStreamedItem=void 0,this.pendingSaveItems=void 0,this.pendingSaveTimeout=void 0,this.pendingSaveParams=void 0,this.messageHandler&&(this.contentWindow.document.removeEventListener("message",this.messageHandler),this.contentWindow.removeEventListener("message",this.messageHandler)),this.keyDownEventListener&&this.contentWindow.removeEventListener("keydown",this.keyDownEventListener),this.keyUpEventListener&&this.contentWindow.removeEventListener("keyup",this.keyUpEventListener),this.clickEventListener&&this.contentWindow.removeEventListener("click",this.clickEventListener)}registerMessageHandler(){this.messageHandler=e=>{if(p.info("Components API Message received:",e.data),document.referrer&&new URL(document.referrer).origin!==new URL(e.origin).origin)return;const{data:t}=e,n=(e=>{if("string"!=typeof e)return!1;try{const t=JSON.parse(e),n=Object.prototype.toString.call(t);return"[object Object]"===n||"[object Array]"===n}catch(e){return!1}})(t)?JSON.parse(t):t;if(n){if(void 0===this.component.origin&&n.action===f.ComponentRegistered)this.component.origin=e.origin;else if(e.origin!==this.component.origin)return;this.handleMessage(n)}else p.error("Invalid data received. Skipping...")},this.contentWindow.document.addEventListener("message",this.messageHandler,!1),this.contentWindow.addEventListener("message",this.messageHandler,!1),p.info("Waiting for messages...")}registerKeyboardEventListeners(){this.keyDownEventListener=e=>{p.info("A key has been pressed: ".concat(e.key)),e.ctrlKey?this.keyDownEvent(v.Ctrl):e.shiftKey?this.keyDownEvent(v.Shift):(e.metaKey||"Meta"===e.key)&&this.keyDownEvent(v.Meta)},this.keyUpEventListener=e=>{p.info("A key has been released: ".concat(e.key)),"Control"===e.key?this.keyUpEvent(v.Ctrl):"Shift"===e.key?this.keyUpEvent(v.Shift):"Meta"===e.key&&this.keyUpEvent(v.Meta)},this.contentWindow.addEventListener("keydown",this.keyDownEventListener,!1),this.contentWindow.addEventListener("keyup",this.keyUpEventListener,!1)}registerMouseEventListeners(){this.clickEventListener=e=>{p.info("A click has been performed."),this.mouseClickEvent()},this.contentWindow.addEventListener("click",this.clickEventListener,!1)}handleMessage(e){switch(e.action){case f.ComponentRegistered:this.component.sessionKey=e.sessionKey,e.componentData&&(this.component.data=e.componentData),this.onReady(e.data),p.info("Component successfully registered with payload:",e);break;case f.ActivateThemes:this.activateThemes(e.data.themes);break;default:{var t,n;if(!e.original)return;const s=null===(t=this.sentMessages)||void 0===t?void 0:t.filter((t=>{var n;return t.messageId===(null===(n=e.original)||void 0===n?void 0:n.messageId)}))[0];if(!s){const e=this.contentWindow.document.title,t=("The extension '".concat(e,"' is attempting to communicate with Standard Notes, ")+"but an error is preventing it from doing so. Please restart this extension and try again.").replace(" "," ");return void p.info(t)}null==s||null===(n=s.callback)||void 0===n||n.call(s,e.data);break}}}onReady(e){this.component.environment=e.environment,this.component.platform=e.platform,this.component.uuid=e.uuid;for(const e of this.messageQueue)this.postMessage(e.action,e.data,e.callback);this.messageQueue=[],p.info("Data passed to onReady:",e),this.activateThemes(e.activeThemeUrls||[]),this.postMessage(f.ThemesActivated,{}),this.params.onReady&&this.params.onReady()}getSelfComponentUUID(){return this.component.uuid}isRunningInDesktopApplication(){return this.component.environment===h(n.Desktop)}isRunningInMobileApplication(){return this.component.environment===h(n.Mobile)}getComponentDataValueForKey(e){if(this.component.data)return this.component.data[e]}setComponentDataValueForKey(e,t){if(!this.component.data)throw new Error("The component has not been initialized.");if(!e||e&&0===e.length)throw new Error("The key for the data value should be a valid string.");this.component.data=b(b({},this.component.data),{},{[e]:t}),this.postMessage(f.SetComponentData,{componentData:this.component.data})}clearComponentData(){this.component.data={},this.postMessage(f.SetComponentData,{componentData:this.component.data})}postMessage(e,t,n){if(!this.component.sessionKey)return void this.messageQueue.push({action:e,data:t,api:g.Component,callback:n});e===f.SaveItems&&(t.height=this.params.handleRequestForContentHeight());const s={action:e,data:t,messageId:this.generateUUID(),sessionKey:this.component.sessionKey,api:g.Component},i=JSON.parse(JSON.stringify(s));let o;i.callback=n,this.sentMessages.push(i),o=this.isRunningInMobileApplication()?JSON.stringify(s):s,p.info("Posting message:",o),this.contentWindow.parent.postMessage(o,this.component.origin)}activateThemes(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(!this.component.acceptsThemes)return;p.info("Incoming themes:",e);const{activeThemes:t}=this.component;if(t&&t.sort().toString()==e.sort().toString())return;let n=e;const s=[];for(const i of t)e.includes(i)?n=n.filter((e=>e!==i)):s.push(i);p.info("Deactivating themes:",s),p.info("Activating themes:",n);for(const e of s)this.deactivateTheme(e);this.component.activeThemes=e;for(const e of n){if(!e)continue;const t=this.contentWindow.document.createElement("link");t.id=btoa(e),t.href=e,t.type="text/css",t.rel="stylesheet",t.media="screen,print",t.className="custom-theme",this.contentWindow.document.getElementsByTagName("head")[0].appendChild(t)}this.params.onThemesChange&&this.params.onThemesChange()}themeElementForUrl(e){return Array.from(this.contentWindow.document.getElementsByClassName("custom-theme")).slice().find((t=>t.id==btoa(e)))}deactivateTheme(e){const t=this.themeElementForUrl(e);t&&t.parentNode&&(t.setAttribute("disabled","true"),t.parentNode.removeChild(t))}generateUUID(){return function(e,t,n){var s=(e=e||{}).random||(e.rng||o)();return s[6]=15&s[6]|64,s[8]=63&s[8]|128,function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(m[e[t+0]]+m[e[t+1]]+m[e[t+2]]+m[e[t+3]]+"-"+m[e[t+4]]+m[e[t+5]]+"-"+m[e[t+6]]+m[e[t+7]]+"-"+m[e[t+8]]+m[e[t+9]]+"-"+m[e[t+10]]+m[e[t+11]]+m[e[t+12]]+m[e[t+13]]+m[e[t+14]]+m[e[t+15]]).toLowerCase();if(!r(n))throw TypeError("Stringified UUID is invalid");return n}(s)}()}get platform(){return this.component.platform}get environment(){return this.component.environment}streamItems(e,t){this.postMessage(f.StreamItems,{content_types:e},(e=>{t(e.items)}))}streamContextItem(e){this.postMessage(f.StreamContextItem,{},(t=>{const{item:n}=t;(!this.lastStreamedItem||this.lastStreamedItem.uuid!==n.uuid)&&this.pendingSaveTimeout&&(clearTimeout(this.pendingSaveTimeout),this.performSavingOfItems(this.pendingSaveParams),this.pendingSaveTimeout=void 0,this.pendingSaveParams=void 0),this.lastStreamedItem=n,e(this.lastStreamedItem)}))}createItem(e,t){this.postMessage(f.CreateItem,{item:this.jsonObjectForItem(e)},(e=>{let{item:n}=e;!n&&e.items&&e.items.length>0&&(n=e.items[0]),t&&t(n)}))}createItems(e,t){const n=e.map((e=>this.jsonObjectForItem(e)));this.postMessage(f.CreateItems,{items:n},(e=>{t&&t(e.items)}))}deleteItem(e,t){this.deleteItems([e],t)}deleteItems(e,t){const n={items:e.map((e=>this.jsonObjectForItem(e)))};this.postMessage(f.DeleteItems,n,(e=>{t&&t(e)}))}sendCustomEvent(e,t,n){this.postMessage(e,t,(e=>{n&&n(e)}))}saveItem(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.saveItems([e],t,n)}saveItemWithPresave(e,t,n){this.saveItemsWithPresave([e],t,n)}saveItemsWithPresave(e,t,n){this.saveItems(e,n,!1,t)}performSavingOfItems(e){let{items:t,presave:n,callback:s}=e;const i=setTimeout((()=>{this.concernTimeouts.forEach((e=>clearTimeout(e))),alert("This editor is unable to communicate with Standard Notes. Your changes may not be saved. Please backup your changes, then restart the application and try again.")}),5e3);this.concernTimeouts.push(i),n&&n();const o=[];for(const e of t)o.push(this.jsonObjectForItem(e));this.postMessage(f.SaveItems,{items:o},(()=>{this.concernTimeouts.forEach((e=>clearTimeout(e))),null==s||s()}))}saveItems(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3?arguments[3]:void 0;if(this.pendingSaveItems||(this.pendingSaveItems=[]),this.options.coallesedSaving&&!n){this.pendingSaveTimeout&&clearTimeout(this.pendingSaveTimeout);const n=e.map((e=>e.uuid)),i=this.pendingSaveItems.filter((e=>!n.includes(e.uuid)));this.pendingSaveItems=i.concat(e),this.pendingSaveParams={items:this.pendingSaveItems,presave:s,callback:t},this.pendingSaveTimeout=setTimeout((()=>{this.performSavingOfItems(this.pendingSaveParams),this.pendingSaveItems=[],this.pendingSaveTimeout=void 0,this.pendingSaveParams=null}),this.options.coallesedSavingDelay)}else this.performSavingOfItems({items:e,presave:s,callback:t})}setSize(e,t){this.postMessage(f.SetSize,{type:"container",width:e,height:t})}keyDownEvent(e){this.postMessage(f.KeyDown,{keyboardModifier:e})}keyUpEvent(e){this.postMessage(f.KeyUp,{keyboardModifier:e})}mouseClickEvent(){this.postMessage(f.Click,{})}jsonObjectForItem(e){const t=Object.assign({},e);return t.children=null,t.parent=null,t}getItemAppDataValue(e,t){var n,s;const i=null==e||null===(n=e.content)||void 0===n||null===(s=n.appData)||void 0===s?void 0:s["org.standardnotes.sn"];return null==i?void 0:i[t]}}return t.default})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("ComponentRelay",[],t):"object"==typeof exports?exports.ComponentRelay=t():e.ComponentRelay=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var s in n)e.o(n,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:n[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};let n;var s;e.d(t,{default:()=>k}),function(e){e[e.Web=1]="Web",e[e.Desktop=2]="Desktop",e[e.Mobile=3]="Mobile"}(n||(n={}));var i=new Uint8Array(16);function o(){if(!s&&!(s="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return s(i)}const a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,r=function(e){return"string"==typeof e&&a.test(e)};for(var m=[],c=0;c<256;++c)m.push((c+256).toString(16).substr(1));const h=e=>{var t;const s={[n.Web]:"web",[n.Desktop]:"desktop",[n.Mobile]:"mobile"};return null!==(t=s[e])&&void 0!==t?t:s[n.Web]},d=()=>{};class p{static get isSupported(){return!(!window.console&&!console)}static get info(){return p.isSupported&&this.enabled?console.log.bind(console):d}static get error(){return p.isSupported?console.error.bind(console):d}}var l,u;let v,g,f;function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,s)}return n}function b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}(u="enabled")in(l=p)?Object.defineProperty(l,u,{value:!1,enumerable:!0,configurable:!0,writable:!0}):l[u]=!1,function(e){e.Shift="Shift",e.Ctrl="Control",e.Meta="Meta"}(v||(v={})),function(e){e.Component="component"}(g||(g={})),function(e){e.SetSize="set-size",e.StreamItems="stream-items",e.StreamContextItem="stream-context-item",e.SaveItems="save-items",e.CreateItem="create-item",e.CreateItems="create-items",e.DeleteItems="delete-items",e.SetComponentData="set-component-data",e.RequestPermissions="request-permissions",e.DuplicateItem="duplicate-item",e.ComponentRegistered="component-registered",e.ActivateThemes="themes",e.Reply="reply",e.ThemesActivated="themes-activated",e.KeyDown="key-down",e.KeyUp="key-up",e.Click="click"}(f||(f={}));class k{constructor(e){var t,n;if(S(this,"contentWindow",void 0),S(this,"component",{activeThemes:[],acceptsThemes:!0}),S(this,"sentMessages",[]),S(this,"messageQueue",[]),S(this,"lastStreamedItem",void 0),S(this,"pendingSaveItems",void 0),S(this,"pendingSaveTimeout",void 0),S(this,"pendingSaveParams",void 0),S(this,"messageHandler",void 0),S(this,"keyDownEventListener",void 0),S(this,"keyUpEventListener",void 0),S(this,"clickEventListener",void 0),S(this,"concernTimeouts",[]),S(this,"options",void 0),S(this,"params",void 0),!e||!e.targetWindow)throw new Error("contentWindow must be a valid Window object.");this.params=e,this.options=e.options||{},null==this.options.coallesedSaving&&(this.options.coallesedSaving=!0),null==this.options.coallesedSavingDelay&&(this.options.coallesedSavingDelay=250),null!=this.options.acceptsThemes&&(this.component.acceptsThemes=null===(n=this.options.acceptsThemes)||void 0===n||n),p.enabled=null!==(t=this.options.debug)&&void 0!==t&&t,this.contentWindow=e.targetWindow,this.registerMessageHandler(),this.registerKeyboardEventListeners(),this.registerMouseEventListeners()}deinit(){this.params.onReady=void 0,this.component={acceptsThemes:!0,activeThemes:[]},this.messageQueue=[],this.sentMessages=[],this.lastStreamedItem=void 0,this.pendingSaveItems=void 0,this.pendingSaveTimeout=void 0,this.pendingSaveParams=void 0,this.messageHandler&&(this.contentWindow.document.removeEventListener("message",this.messageHandler),this.contentWindow.removeEventListener("message",this.messageHandler)),this.keyDownEventListener&&this.contentWindow.removeEventListener("keydown",this.keyDownEventListener),this.keyUpEventListener&&this.contentWindow.removeEventListener("keyup",this.keyUpEventListener),this.clickEventListener&&this.contentWindow.removeEventListener("click",this.clickEventListener)}registerMessageHandler(){this.messageHandler=e=>{if(p.info("Components API Message received:",e.data),document.referrer&&new URL(document.referrer).origin!==new URL(e.origin).origin)return;const{data:t}=e,n=(e=>{if("string"!=typeof e)return!1;try{const t=JSON.parse(e),n=Object.prototype.toString.call(t);return"[object Object]"===n||"[object Array]"===n}catch(e){return!1}})(t)?JSON.parse(t):t;if(n){if(void 0===this.component.origin&&n.action===f.ComponentRegistered)this.component.origin=e.origin;else if(e.origin!==this.component.origin)return;this.handleMessage(n)}else p.error("Invalid data received. Skipping...")},this.contentWindow.document.addEventListener("message",this.messageHandler,!1),this.contentWindow.addEventListener("message",this.messageHandler,!1),p.info("Waiting for messages...")}registerKeyboardEventListeners(){this.keyDownEventListener=e=>{p.info("A key has been pressed: ".concat(e.key)),e.ctrlKey?this.keyDownEvent(v.Ctrl):e.shiftKey?this.keyDownEvent(v.Shift):(e.metaKey||"Meta"===e.key)&&this.keyDownEvent(v.Meta)},this.keyUpEventListener=e=>{p.info("A key has been released: ".concat(e.key)),"Control"===e.key?this.keyUpEvent(v.Ctrl):"Shift"===e.key?this.keyUpEvent(v.Shift):"Meta"===e.key&&this.keyUpEvent(v.Meta)},this.contentWindow.addEventListener("keydown",this.keyDownEventListener,!1),this.contentWindow.addEventListener("keyup",this.keyUpEventListener,!1)}registerMouseEventListeners(){this.clickEventListener=e=>{p.info("A click has been performed."),this.mouseClickEvent()},this.contentWindow.addEventListener("click",this.clickEventListener,!1)}handleMessage(e){switch(e.action){case f.ComponentRegistered:this.component.sessionKey=e.sessionKey,e.componentData&&(this.component.data=e.componentData),this.onReady(e.data),p.info("Component successfully registered with payload:",e);break;case f.ActivateThemes:this.activateThemes(e.data.themes);break;default:{var t,n;if(!e.original)return;const s=null===(t=this.sentMessages)||void 0===t?void 0:t.filter((t=>{var n;return t.messageId===(null===(n=e.original)||void 0===n?void 0:n.messageId)}))[0];if(!s){const e=this.contentWindow.document.title,t=("The extension '".concat(e,"' is attempting to communicate with Standard Notes, ")+"but an error is preventing it from doing so. Please restart this extension and try again.").replace(" "," ");return void p.info(t)}null==s||null===(n=s.callback)||void 0===n||n.call(s,e.data);break}}}onReady(e){this.component.environment=e.environment,this.component.platform=e.platform,this.component.uuid=e.uuid;for(const e of this.messageQueue)this.postMessage(e.action,e.data,e.callback);this.messageQueue=[],p.info("Data passed to onReady:",e),this.activateThemes(e.activeThemeUrls||[]),this.postMessage(f.ThemesActivated,{}),this.params.onReady&&this.params.onReady()}getSelfComponentUUID(){return this.component.uuid}isRunningInDesktopApplication(){return this.component.environment===h(n.Desktop)}isRunningInMobileApplication(){return this.component.environment===h(n.Mobile)}getComponentDataValueForKey(e){if(this.component.data)return this.component.data[e]}setComponentDataValueForKey(e,t){if(!this.component.data)throw new Error("The component has not been initialized.");if(!e||e&&0===e.length)throw new Error("The key for the data value should be a valid string.");this.component.data=b(b({},this.component.data),{},{[e]:t}),this.postMessage(f.SetComponentData,{componentData:this.component.data})}clearComponentData(){this.component.data={},this.postMessage(f.SetComponentData,{componentData:this.component.data})}postMessage(e,t,n){if(!this.component.sessionKey)return void this.messageQueue.push({action:e,data:t,api:g.Component,callback:n});e===f.SaveItems&&(t.height=this.params.handleRequestForContentHeight());const s={action:e,data:t,messageId:this.generateUUID(),sessionKey:this.component.sessionKey,api:g.Component},i=JSON.parse(JSON.stringify(s));let o;i.callback=n,this.sentMessages.push(i),o=this.isRunningInMobileApplication()?JSON.stringify(s):s,p.info("Posting message:",o);const a=this.component.origin&&"null"!==this.component.origin?this.component.origin:"*";this.contentWindow.parent.postMessage(o,a)}activateThemes(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(!this.component.acceptsThemes)return;p.info("Incoming themes:",e);const{activeThemes:t}=this.component;if(t&&t.sort().toString()==e.sort().toString())return;let n=e;const s=[];for(const i of t)e.includes(i)?n=n.filter((e=>e!==i)):s.push(i);p.info("Deactivating themes:",s),p.info("Activating themes:",n);for(const e of s)this.deactivateTheme(e);this.component.activeThemes=e;for(const e of n){if(!e)continue;const t=this.contentWindow.document.createElement("link");t.id=btoa(e),t.href=e,t.type="text/css",t.rel="stylesheet",t.media="screen,print",t.className="custom-theme",this.contentWindow.document.getElementsByTagName("head")[0].appendChild(t)}this.params.onThemesChange&&this.params.onThemesChange()}themeElementForUrl(e){return Array.from(this.contentWindow.document.getElementsByClassName("custom-theme")).slice().find((t=>t.id==btoa(e)))}deactivateTheme(e){const t=this.themeElementForUrl(e);t&&t.parentNode&&(t.setAttribute("disabled","true"),t.parentNode.removeChild(t))}generateUUID(){return function(e,t,n){var s=(e=e||{}).random||(e.rng||o)();return s[6]=15&s[6]|64,s[8]=63&s[8]|128,function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(m[e[t+0]]+m[e[t+1]]+m[e[t+2]]+m[e[t+3]]+"-"+m[e[t+4]]+m[e[t+5]]+"-"+m[e[t+6]]+m[e[t+7]]+"-"+m[e[t+8]]+m[e[t+9]]+"-"+m[e[t+10]]+m[e[t+11]]+m[e[t+12]]+m[e[t+13]]+m[e[t+14]]+m[e[t+15]]).toLowerCase();if(!r(n))throw TypeError("Stringified UUID is invalid");return n}(s)}()}get platform(){return this.component.platform}get environment(){return this.component.environment}streamItems(e,t){this.postMessage(f.StreamItems,{content_types:e},(e=>{t(e.items)}))}streamContextItem(e){this.postMessage(f.StreamContextItem,{},(t=>{const{item:n}=t;(!this.lastStreamedItem||this.lastStreamedItem.uuid!==n.uuid)&&this.pendingSaveTimeout&&(clearTimeout(this.pendingSaveTimeout),this.performSavingOfItems(this.pendingSaveParams),this.pendingSaveTimeout=void 0,this.pendingSaveParams=void 0),this.lastStreamedItem=n,e(this.lastStreamedItem)}))}createItem(e,t){this.postMessage(f.CreateItem,{item:this.jsonObjectForItem(e)},(e=>{let{item:n}=e;!n&&e.items&&e.items.length>0&&(n=e.items[0]),t&&t(n)}))}createItems(e,t){const n=e.map((e=>this.jsonObjectForItem(e)));this.postMessage(f.CreateItems,{items:n},(e=>{t&&t(e.items)}))}deleteItem(e,t){this.deleteItems([e],t)}deleteItems(e,t){const n={items:e.map((e=>this.jsonObjectForItem(e)))};this.postMessage(f.DeleteItems,n,(e=>{t&&t(e)}))}sendCustomEvent(e,t,n){this.postMessage(e,t,(e=>{n&&n(e)}))}saveItem(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.saveItems([e],t,n)}saveItemWithPresave(e,t,n){this.saveItemsWithPresave([e],t,n)}saveItemsWithPresave(e,t,n){this.saveItems(e,n,!1,t)}performSavingOfItems(e){let{items:t,presave:n,callback:s}=e;const i=setTimeout((()=>{this.concernTimeouts.forEach((e=>clearTimeout(e))),alert("This editor is unable to communicate with Standard Notes. Your changes may not be saved. Please backup your changes, then restart the application and try again.")}),5e3);this.concernTimeouts.push(i),n&&n();const o=[];for(const e of t)o.push(this.jsonObjectForItem(e));this.postMessage(f.SaveItems,{items:o},(()=>{this.concernTimeouts.forEach((e=>clearTimeout(e))),null==s||s()}))}saveItems(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3?arguments[3]:void 0;if(this.pendingSaveItems||(this.pendingSaveItems=[]),this.options.coallesedSaving&&!n){this.pendingSaveTimeout&&clearTimeout(this.pendingSaveTimeout);const n=e.map((e=>e.uuid)),i=this.pendingSaveItems.filter((e=>!n.includes(e.uuid)));this.pendingSaveItems=i.concat(e),this.pendingSaveParams={items:this.pendingSaveItems,presave:s,callback:t},this.pendingSaveTimeout=setTimeout((()=>{this.performSavingOfItems(this.pendingSaveParams),this.pendingSaveItems=[],this.pendingSaveTimeout=void 0,this.pendingSaveParams=null}),this.options.coallesedSavingDelay)}else this.performSavingOfItems({items:e,presave:s,callback:t})}setSize(e,t){this.postMessage(f.SetSize,{type:"container",width:e,height:t})}keyDownEvent(e){this.postMessage(f.KeyDown,{keyboardModifier:e})}keyUpEvent(e){this.postMessage(f.KeyUp,{keyboardModifier:e})}mouseClickEvent(){this.postMessage(f.Click,{})}jsonObjectForItem(e){const t=Object.assign({},e);return t.children=null,t.parent=null,t}getItemAppDataValue(e,t){var n,s;const i=null==e||null===(n=e.content)||void 0===n||null===(s=n.appData)||void 0===s?void 0:s["org.standardnotes.sn"];return null==i?void 0:i[t]}}return t.default})()));
|
package/dist/main.css
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
body,html{font-family:sans-serif;height:100%;margin:0;font-size:var(--sn-stylekit-base-font-size)}.wrapper{display:flex;flex-direction:column;position:relative;height:100%;overflow-x:hidden}.CodeMirror{background-color:var(--sn-stylekit-editor-background-color) !important;color:var(--sn-stylekit-editor-foreground-color) !important;border:0 !important;font-family:var(--sn-stylekit-monospace-font);-webkit-overflow-scrolling:touch;font-size:calc(var(--sn-stylekit-font-size-editor) - .1rem);flex:1 1 auto;width:100%;height:100%;resize:none}.CodeMirror .cm-header{color:var(--sn-stylekit-editor-foreground-color)}.CodeMirror .cm-formatting-header,.CodeMirror .cm-formatting-strong,.CodeMirror .cm-formatting-em{opacity:.2}.CodeMirror .cm-variable,.CodeMirror .cm-variable-1,.CodeMirror .cm-variable-2,.CodeMirror .cm-variable-3,.CodeMirror .cm-string-2{color:var(--sn-stylekit-info-color) !important}.CodeMirror .cm-variable.CodeMirror-selectedtext,.CodeMirror .cm-variable-1.CodeMirror-selectedtext,.CodeMirror .cm-variable-2.CodeMirror-selectedtext,.CodeMirror .cm-variable-3.CodeMirror-selectedtext,.CodeMirror .cm-string-2.CodeMirror-selectedtext{color:var(--sn-stylekit-info-contrast-color) !important;background:rgba(0,0,0,0)}.CodeMirror .cm-qualifier,.CodeMirror .cm-meta{color:var(--sn-stylekit-neutral-color) !important}.CodeMirror .cm-error{color:var(--sn-stylekit-danger-color) !important}.CodeMirror .cm-def,.CodeMirror .cm-atom{color:var(--sn-stylekit-success-color)}.CodeMirror .CodeMirror-linenumber{color:var(--sn-stylekit-neutral-color) !important;opacity:.5}.CodeMirror-cursor{border-color:var(--sn-stylekit-info-color) !important}.CodeMirror-cursors{z-index:10 !important}.CodeMirror-selected{background:var(--sn-stylekit-info-color) !important}.CodeMirror-gutters{background-color:var(--sn-stylekit-background-color) !important;color:var(--sn-stylekit-editor-foreground-color) !important;border-color:var(--sn-stylekit-border-color) !important}.cm-header-1{font-size:150%}.cm-header-2{font-size:130%}.cm-header-3{font-size:120%}.cm-header-4{font-size:110%}.cm-header-5{font-size:100%}.cm-header-6{font-size:90%}.CodeMirror .cm-quote{color:var(--sn-stylekit-foreground-color);opacity:.6}.cm-fat-cursor .CodeMirror-line>span[role=presentation]{caret-color:rgba(0,0,0,0)}
|
|
1
|
+
body,html{font-family:sans-serif;height:100%;margin:0;font-size:var(--sn-stylekit-base-font-size)}.wrapper{display:flex;flex-direction:column;position:relative;height:100%;overflow-x:hidden}.CodeMirror{background-color:var(--sn-stylekit-editor-background-color) !important;color:var(--sn-stylekit-editor-foreground-color) !important;border:0 !important;font-family:var(--sn-stylekit-monospace-font);-webkit-overflow-scrolling:touch;font-size:calc(var(--sn-stylekit-font-size-editor) - .1rem);flex:1 1 auto;width:100%;height:100%;resize:none}.CodeMirror .cm-header{color:var(--sn-stylekit-editor-foreground-color)}.CodeMirror .cm-formatting-header,.CodeMirror .cm-formatting-strong,.CodeMirror .cm-formatting-em{opacity:.2}.CodeMirror .cm-variable,.CodeMirror .cm-variable-1,.CodeMirror .cm-variable-2,.CodeMirror .cm-variable-3,.CodeMirror .cm-string-2{color:var(--sn-stylekit-info-color) !important}.CodeMirror .cm-variable.CodeMirror-selectedtext,.CodeMirror .cm-variable-1.CodeMirror-selectedtext,.CodeMirror .cm-variable-2.CodeMirror-selectedtext,.CodeMirror .cm-variable-3.CodeMirror-selectedtext,.CodeMirror .cm-string-2.CodeMirror-selectedtext{color:var(--sn-stylekit-info-contrast-color) !important;background:rgba(0,0,0,0)}.CodeMirror .cm-qualifier,.CodeMirror .cm-meta{color:var(--sn-stylekit-neutral-color) !important}.CodeMirror .cm-error{color:var(--sn-stylekit-danger-color) !important}.CodeMirror .cm-def,.CodeMirror .cm-atom{color:var(--sn-stylekit-success-color)}.CodeMirror .CodeMirror-linenumber{color:var(--sn-stylekit-neutral-color) !important;opacity:.5}.CodeMirror-cursor{border-color:var(--sn-stylekit-info-color) !important}.CodeMirror-cursors{z-index:10 !important}.CodeMirror-selected{background:var(--sn-stylekit-info-color) !important}.CodeMirror-gutters{background-color:var(--sn-stylekit-background-color) !important;color:var(--sn-stylekit-editor-foreground-color) !important;border-color:var(--sn-stylekit-border-color) !important}.cm-header-1{font-size:150%}.cm-header-2{font-size:130%}.cm-header-3{font-size:120%}.cm-header-4{font-size:110%}.cm-header-5{font-size:100%}.cm-header-6{font-size:90%}.CodeMirror .cm-quote{color:var(--sn-stylekit-foreground-color);opacity:.6}.cm-fat-cursor .CodeMirror-line>span[role=presentation]{caret-color:rgba(0,0,0,0)}#bar{width:inherit}
|
|
2
2
|
|
|
3
3
|
/*# sourceMappingURL=main.css.map*/
|
package/dist/main.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.css","mappings":"AAAA,UACE,uBACA,YACA,SACA,4CAGF,SACE,aACA,sBACA,kBACA,YAGA,kBAGF,YACE,uEACA,4DACA,oBACA,8CACA,iCAGA,4DAEA,cACA,WACA,YACA,YAEA,uBACE,iDAIF,kGACE,WAGF,mIACE,+CAEA,2PACE,wDACA,yBAIJ,+CACE,kDAGF,sBACE,iDAOF,yCACE,uCAGF,mCACE,kDACA,WAIJ,mBACE,sDAGF,oBACE,sBAGF,qBACE,oDAGF,oBACE,gEACA,4DACA,wDAGF,4BACA,4BACA,4BACA,4BACA,4BACA,2BAEA,sBACE,0CACA,WAGF,wDACE,
|
|
1
|
+
{"version":3,"file":"main.css","mappings":"AAAA,UACE,uBACA,YACA,SACA,4CAGF,SACE,aACA,sBACA,kBACA,YAGA,kBAGF,YACE,uEACA,4DACA,oBACA,8CACA,iCAGA,4DAEA,cACA,WACA,YACA,YAEA,uBACE,iDAIF,kGACE,WAGF,mIACE,+CAEA,2PACE,wDACA,yBAIJ,+CACE,kDAGF,sBACE,iDAOF,yCACE,uCAGF,mCACE,kDACA,WAIJ,mBACE,sDAGF,oBACE,sBAGF,qBACE,oDAGF,oBACE,gEACA,4DACA,wDAGF,4BACA,4BACA,4BACA,4BACA,4BACA,2BAEA,sBACE,0CACA,WAGF,wDACE,0BAGF,KACE,c","sources":["webpack://@standardnotes/classic-code-editor/./src/main.scss"],"sourcesContent":["body, html {\n font-family: sans-serif;\n height: 100%;\n margin: 0;\n font-size: var(--sn-stylekit-base-font-size);\n}\n\n.wrapper {\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n\n // Fixes unnecessary horizontal scrolling on Windows\n overflow-x: hidden;\n}\n\n.CodeMirror {\n background-color: var(--sn-stylekit-editor-background-color) !important;\n color: var(--sn-stylekit-editor-foreground-color) !important;\n border: 0 !important;\n font-family: var(--sn-stylekit-monospace-font);\n -webkit-overflow-scrolling: touch;\n\n // code doesn't look good at normal text size, better to be a bit smaller\n font-size: calc(var(--sn-stylekit-font-size-editor) - 0.1rem);\n\n flex: 1 1 auto;\n width: 100%;\n height: 100%;\n resize: none;\n\n .cm-header {\n color: var(--sn-stylekit-editor-foreground-color);\n }\n\n // Faded Markdown syntax\n .cm-formatting-header, .cm-formatting-strong, .cm-formatting-em {\n opacity: 0.2;\n }\n\n .cm-variable, .cm-variable-1, .cm-variable-2, .cm-variable-3, .cm-string-2 {\n color: var(--sn-stylekit-info-color) !important;\n\n &.CodeMirror-selectedtext {\n color: var(--sn-stylekit-info-contrast-color) !important;\n background: transparent;\n }\n }\n\n .cm-qualifier, .cm-meta {\n color: var(--sn-stylekit-neutral-color) !important;\n }\n\n .cm-error {\n color: var(--sn-stylekit-danger-color) !important;\n }\n\n .cm-property {\n\n }\n\n .cm-def, .cm-atom {\n color: var(--sn-stylekit-success-color);\n }\n\n .CodeMirror-linenumber {\n color: var(--sn-stylekit-neutral-color) !important;\n opacity: 0.5;\n }\n}\n\n.CodeMirror-cursor {\n border-color: var(--sn-stylekit-info-color) !important;\n}\n\n.CodeMirror-cursors {\n z-index: 10 !important; // In Markdown mode, cursor is hidden behind code blocks\n}\n\n.CodeMirror-selected {\n background: var(--sn-stylekit-info-color) !important;\n}\n\n.CodeMirror-gutters {\n background-color: var(--sn-stylekit-background-color) !important;\n color: var(--sn-stylekit-editor-foreground-color) !important;\n border-color: var(--sn-stylekit-border-color) !important;\n}\n\n.cm-header-1 { font-size: 150%; }\n.cm-header-2 { font-size: 130%; }\n.cm-header-3 { font-size: 120%; }\n.cm-header-4 { font-size: 110%; }\n.cm-header-5 { font-size: 100%; }\n.cm-header-6 { font-size: 90%; }\n\n.CodeMirror .cm-quote {\n color: var(--sn-stylekit-foreground-color);\n opacity: 0.6;\n}\n\n.cm-fat-cursor .CodeMirror-line > span[role=\"presentation\"] {\n caret-color: transparent;\n}\n\n#bar {\n width: inherit;\n}\n"],"names":[],"sourceRoot":""}
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
document.addEventListener("DOMContentLoaded",(function(){const e=CodeMirror.modeInfo.reduce((function(e,t){return e[t.mode]?e[t.mode].push(t):e[t.mode]=[t],e}),{}),t=CodeMirror.modeInfo.reduce((function(e,t){return e[t.name]={mode:t.mode,mime:t.mime},e}),{}),n=Object.keys(t);let o,i,a,
|
|
1
|
+
CodeMirror.modeURL="dist/codemirror/mode/%N/%N.js",document.addEventListener("DOMContentLoaded",(function(){const e=CodeMirror.modeInfo.reduce((function(e,t){return e[t.mode]?e[t.mode].push(t):e[t.mode]=[t],e}),{}),t=CodeMirror.modeInfo.reduce((function(e,t){return e[t.name]={mode:t.mode,mime:t.mime},e}),{}),n=Object.keys(t);let o,d,i,a,m,c,r,s=!1,l=!0;function u(){if(d){let e=d;o.saveItemWithPresave(e,(()=>{a=c.getValue(),e.content.text=a,e.clientData=i,e.content.preview_plain=null,e.content.preview_html=null}))}}function f(o){if(!o)return;const d=function(n){const o=function(e){return e?{name:e.name,mode:e.mode,mime:e.mime}:null},d=/.+\.([^.]+)$/.exec(n),i=/\//.test(n);if(d)return o(CodeMirror.findModeByExtension(d[1]));if(i)return o(CodeMirror.findModeByMIME(i[1]));if(t[n])return{name:n,mode:t[n].mode,mime:t[n].mime};if(e[n]){const t=e[n][0];return{name:t.name,mode:t.mode,mime:t.mime}}return{name:n,mode:n,mime:n}}(o);d?(c.setOption("mode",d.mime),CodeMirror.autoLoadMode(c,d.mode),i&&(i.mode=d.name),document.getElementById("language-select").selectedIndex=n.indexOf(d.name)):console.error("Could not find a mode corresponding to "+o)}window.setKeyMap=function(e){c.setOption("keyMap",e),function(e){const t=document.getElementById("toggle-vim-mode-button"),n="vim"===e?"Disable":"Enable",o="vim"===e?"danger":"success";t.innerHTML=`${n} Vim mode`,t.classList.remove("danger"),t.classList.remove("success"),t.classList.add(o)}(e)},document.getElementById("language-select").addEventListener("change",(function(){f(n[r.selectedIndex]),u()})),document.getElementById("default-label").addEventListener("click",(function(){const e=n[r.selectedIndex];o.setComponentDataValueForKey("language",e);const t=document.getElementById("default-label"),d=t.innerHTML;t.innerHTML="Success",t.classList.add("success"),setTimeout((function(){t.classList.remove("success"),t.innerHTML=d}),750)})),document.getElementById("toggle-vim-mode-button").addEventListener("click",(function(){let e;e="default"===(o.getComponentDataValueForKey("keyMap")??"default")?"vim":"default",window.setKeyMap(e),o.setComponentDataValueForKey("keyMap",e)})),o=new ComponentRelay({targetWindow:window,onReady:()=>{const e=o.platform;e&&document.body.classList.add(e),function(){CodeMirror.commands.save=function(){u()},c=CodeMirror.fromTextArea(document.getElementById("code"),{extraKeys:{"Alt-F":"findPersistent"},lineNumbers:!0,styleSelectedText:!0,lineWrapping:!0,inputStyle:"mobile"===(o.environment??"web")?"textarea":"contenteditable"}),c.setSize("100%","100%"),function(){r=document.getElementById("language-select");for(let e=0;e<n.length;e++){const t=document.createElement("option");t.value=e,t.innerHTML=n[e],r.appendChild(t)}}(),c.on("change",(function(){s||u()}));c.on("cursorActivity",(function(e){"mobile"===o.environment&&(e=>{setTimeout((()=>e.scrollIntoView()),200)})(e)}));const e=o.getComponentDataValueForKey("keyMap")??"default";window.setKeyMap(e)}()},handleRequestForContentHeight:()=>{const e=document.getElementsByClassName("CodeMirror-code")[0]?.scrollHeight;return 50+e}}),o.streamContextItem((e=>{!function(e){if(e.uuid!==m&&(a=null,l=!0,m=e.uuid),d=e,e.isMetadataUpdate)return;i=e.clientData;let t=i.mode;t||(t=o.getComponentDataValueForKey("language")??"JavaScript"),f(t),c&&(e.content.text!==a&&(s=!0,c.getDoc().setValue(d.content.text),s=!1),l&&(l=!1,c.getDoc().clearHistory()),c.setOption("spellcheck",d.content.spellcheck))}(e)}))}));
|
|
2
2
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","mappings":"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","sources":["webpack://@standardnotes/classic-code-editor/./src/main.js"],"sourcesContent":["document.addEventListener('DOMContentLoaded', function () {\n const modeByModeMode = CodeMirror.modeInfo.reduce(function (acc, m) {\n if (acc[m.mode]) {\n acc[m.mode].push(m)\n } else {\n acc[m.mode] = [m]\n }\n return acc\n }, {})\n\n const modeModeAndMimeByName = CodeMirror.modeInfo.reduce(function (acc, m) {\n acc[m.name] = { mode: m.mode, mime: m.mime }\n return acc\n }, {})\n\n const modes = Object.keys(modeModeAndMimeByName)\n\n let componentRelay\n let workingNote, clientData\n let lastValue, lastUUID\n let editor, select\n let ignoreTextChange = false\n let initialLoad = true\n\n function loadComponentRelay() {\n componentRelay = new ComponentRelay({\n targetWindow: window,\n onReady: () => {\n const platform = componentRelay.platform\n if (platform) {\n document.body.classList.add(platform)\n }\n loadEditor()\n },\n handleRequestForContentHeight: () => {\n const baseHeight = 50\n const scrollHeight = document.getElementsByClassName('CodeMirror-code')[0]?.scrollHeight\n return baseHeight + scrollHeight\n },\n })\n\n componentRelay.streamContextItem((note) => {\n onReceivedNote(note)\n })\n }\n\n function saveNote() {\n if (workingNote) {\n // Be sure to capture this object as a variable, as this.note may be reassigned in `streamContextItem`, so by the time\n // you modify it in the presave block, it may not be the same object anymore, so the presave values will not be applied to\n // the right object, and it will save incorrectly.\n let note = workingNote\n\n componentRelay.saveItemWithPresave(note, () => {\n lastValue = editor.getValue()\n note.content.text = lastValue\n note.clientData = clientData\n\n note.content.preview_plain = null\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 initialLoad = true\n lastUUID = note.uuid\n }\n\n workingNote = note\n // Only update UI on non-metadata updates.\n if (note.isMetadataUpdate) {\n return\n }\n\n clientData = note.clientData\n let mode = clientData.mode\n\n if (!mode) {\n // Assign editor's default mode from component settings\n mode = componentRelay.getComponentDataValueForKey('language') ?? 'JavaScript'\n }\n\n changeMode(mode)\n\n if (editor) {\n if (note.content.text !== lastValue) {\n ignoreTextChange = true\n editor.getDoc().setValue(workingNote.content.text)\n ignoreTextChange = false\n }\n\n if (initialLoad) {\n initialLoad = false\n editor.getDoc().clearHistory()\n }\n\n editor.setOption('spellcheck', workingNote.content.spellcheck)\n }\n }\n\n function loadEditor() {\n // Handler for the save command that is mapped to the :w (write) Vim key binding.\n CodeMirror.commands.save = function () {\n saveNote()\n }\n editor = CodeMirror.fromTextArea(document.getElementById('code'), {\n extraKeys: {\n 'Alt-F': 'findPersistent',\n },\n lineNumbers: true,\n styleSelectedText: true,\n lineWrapping: true,\n inputStyle: getInputStyleForEnvironment(),\n })\n editor.setSize('100%', '100%')\n\n createSelectElements()\n\n editor.on('change', function () {\n if (ignoreTextChange) {\n return\n }\n saveNote()\n })\n\n /**\n * Scrolls the cursor into view, so the soft keyboard on mobile devices\n * doesn't overlap the cursor. A short delay is added to prevent scrolling\n * before the keyboard is shown.\n */\n const scrollCursorIntoView = (editor) => {\n setTimeout(() => editor.scrollIntoView(), 200)\n }\n\n editor.on('cursorActivity', function (editor) {\n if (componentRelay.environment !== 'mobile') {\n return\n }\n scrollCursorIntoView(editor)\n })\n\n const initialKeyMap = componentRelay.getComponentDataValueForKey('keyMap') ?? 'default'\n window.setKeyMap(initialKeyMap)\n }\n\n function createSelectElements() {\n select = document.getElementById('language-select')\n for (let index = 0; index < modes.length; index++) {\n const option = document.createElement('option')\n option.value = index\n option.innerHTML = modes[index]\n select.appendChild(option)\n }\n }\n\n // Editor Modes\n window.setKeyMap = function (keymap) {\n editor.setOption('keyMap', keymap)\n updateVimStatus(keymap)\n }\n\n window.onLanguageSelect = function () {\n const language = modes[select.selectedIndex]\n changeMode(language)\n saveNote()\n }\n\n window.setDefaultLanguage = function () {\n const language = modes[select.selectedIndex]\n\n // assign default language for this editor when entering notes\n componentRelay.setComponentDataValueForKey('language', language)\n\n // show a confirmation message\n const message = document.getElementById('default-label')\n const original = message.innerHTML\n message.innerHTML = 'Success'\n message.classList.add('success')\n\n setTimeout(function () {\n message.classList.remove('success')\n message.innerHTML = original\n }, 750)\n }\n\n function inputModeToMode(inputMode) {\n const convertCodeMirrorMode = function (codeMirrorMode) {\n if (codeMirrorMode) {\n return {\n name: codeMirrorMode.name,\n mode: codeMirrorMode.mode,\n mime: codeMirrorMode.mime,\n }\n } else {\n return null\n }\n }\n\n const extension = /.+\\.([^.]+)$/.exec(inputMode)\n const mime = /\\//.test(inputMode)\n\n if (extension) {\n return convertCodeMirrorMode(CodeMirror.findModeByExtension(extension[1]))\n } else if (mime) {\n return convertCodeMirrorMode(CodeMirror.findModeByMIME(mime[1]))\n } else if (modeModeAndMimeByName[inputMode]) {\n return {\n name: inputMode,\n mode: modeModeAndMimeByName[inputMode].mode,\n mime: modeModeAndMimeByName[inputMode].mime,\n }\n } else if (modeByModeMode[inputMode]) {\n const firstMode = modeByModeMode[inputMode][0]\n return {\n name: firstMode.name,\n mode: firstMode.mode,\n mime: firstMode.mime,\n }\n } else {\n return {\n name: inputMode,\n mode: inputMode,\n mime: inputMode,\n }\n }\n }\n\n function changeMode(inputMode) {\n if (!inputMode) {\n return\n }\n\n const mode = inputModeToMode(inputMode)\n\n if (mode) {\n editor.setOption('mode', mode.mime)\n CodeMirror.autoLoadMode(editor, mode.mode)\n if (clientData) {\n clientData.mode = mode.name\n }\n document.getElementById('language-select').selectedIndex = modes.indexOf(mode.name)\n } else {\n console.error('Could not find a mode corresponding to ' + inputMode)\n }\n }\n\n function updateVimStatus(keyMap) {\n const toggleButton = document.getElementById('toggle-vim-mode-button')\n\n const newAction = keyMap === 'vim' ? 'Disable' : 'Enable'\n const buttonClass = keyMap === 'vim' ? 'danger' : 'success'\n\n toggleButton.innerHTML = `${newAction} Vim mode`\n toggleButton.classList.remove('danger')\n toggleButton.classList.remove('success')\n toggleButton.classList.add(buttonClass)\n }\n\n window.toggleVimMode = function () {\n let newKeyMap\n\n const currentKeyMap = componentRelay.getComponentDataValueForKey('keyMap') ?? 'default'\n if (currentKeyMap === 'default') {\n newKeyMap = 'vim'\n } else {\n newKeyMap = 'default'\n }\n\n window.setKeyMap(newKeyMap)\n componentRelay.setComponentDataValueForKey('keyMap', newKeyMap)\n }\n\n function getInputStyleForEnvironment() {\n const environment = componentRelay.environment ?? 'web'\n return environment === 'mobile' ? 'textarea' : 'contenteditable'\n }\n\n loadComponentRelay()\n})\n"],"names":["document","addEventListener","modeByModeMode","CodeMirror","modeInfo","reduce","acc","m","mode","push","modeModeAndMimeByName","name","mime","modes","Object","keys","componentRelay","workingNote","clientData","lastValue","lastUUID","editor","select","ignoreTextChange","initialLoad","saveNote","note","saveItemWithPresave","getValue","content","text","preview_plain","preview_html","changeMode","inputMode","convertCodeMirrorMode","codeMirrorMode","extension","exec","test","findModeByExtension","findModeByMIME","firstMode","inputModeToMode","setOption","autoLoadMode","getElementById","selectedIndex","indexOf","console","error","window","setKeyMap","keymap","keyMap","toggleButton","newAction","buttonClass","innerHTML","classList","remove","add","updateVimStatus","onLanguageSelect","setDefaultLanguage","language","setComponentDataValueForKey","message","original","setTimeout","toggleVimMode","newKeyMap","getComponentDataValueForKey","ComponentRelay","targetWindow","onReady","platform","body","commands","save","fromTextArea","extraKeys","lineNumbers","styleSelectedText","lineWrapping","inputStyle","environment","setSize","index","length","option","createElement","value","appendChild","createSelectElements","on","scrollIntoView","scrollCursorIntoView","initialKeyMap","loadEditor","handleRequestForContentHeight","scrollHeight","getElementsByClassName","streamContextItem","uuid","isMetadataUpdate","getDoc","setValue","clearHistory","spellcheck","onReceivedNote"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main.js","mappings":"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","sources":["webpack://@standardnotes/classic-code-editor/./src/main.js"],"sourcesContent":["CodeMirror.modeURL = \"dist/codemirror/mode/%N/%N.js\";\n\ndocument.addEventListener('DOMContentLoaded', function () {\n const modeByModeMode = CodeMirror.modeInfo.reduce(function (acc, m) {\n if (acc[m.mode]) {\n acc[m.mode].push(m)\n } else {\n acc[m.mode] = [m]\n }\n return acc\n }, {})\n\n const modeModeAndMimeByName = CodeMirror.modeInfo.reduce(function (acc, m) {\n acc[m.name] = { mode: m.mode, mime: m.mime }\n return acc\n }, {})\n\n const modes = Object.keys(modeModeAndMimeByName)\n\n let componentRelay\n let workingNote, clientData\n let lastValue, lastUUID\n let editor, select\n let ignoreTextChange = false\n let initialLoad = true\n\n function loadComponentRelay() {\n componentRelay = new ComponentRelay({\n targetWindow: window,\n onReady: () => {\n const platform = componentRelay.platform\n if (platform) {\n document.body.classList.add(platform)\n }\n loadEditor()\n },\n handleRequestForContentHeight: () => {\n const baseHeight = 50\n const scrollHeight = document.getElementsByClassName('CodeMirror-code')[0]?.scrollHeight\n return baseHeight + scrollHeight\n },\n })\n\n componentRelay.streamContextItem((note) => {\n onReceivedNote(note)\n })\n }\n\n function saveNote() {\n if (workingNote) {\n // Be sure to capture this object as a variable, as this.note may be reassigned in `streamContextItem`, so by the time\n // you modify it in the presave block, it may not be the same object anymore, so the presave values will not be applied to\n // the right object, and it will save incorrectly.\n let note = workingNote\n\n componentRelay.saveItemWithPresave(note, () => {\n lastValue = editor.getValue()\n note.content.text = lastValue\n note.clientData = clientData\n\n note.content.preview_plain = null\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 initialLoad = true\n lastUUID = note.uuid\n }\n\n workingNote = note\n // Only update UI on non-metadata updates.\n if (note.isMetadataUpdate) {\n return\n }\n\n clientData = note.clientData\n let mode = clientData.mode\n\n if (!mode) {\n // Assign editor's default mode from component settings\n mode = componentRelay.getComponentDataValueForKey('language') ?? 'JavaScript'\n }\n\n changeMode(mode)\n\n if (editor) {\n if (note.content.text !== lastValue) {\n ignoreTextChange = true\n editor.getDoc().setValue(workingNote.content.text)\n ignoreTextChange = false\n }\n\n if (initialLoad) {\n initialLoad = false\n editor.getDoc().clearHistory()\n }\n\n editor.setOption('spellcheck', workingNote.content.spellcheck)\n }\n }\n\n function loadEditor() {\n // Handler for the save command that is mapped to the :w (write) Vim key binding.\n CodeMirror.commands.save = function () {\n saveNote()\n }\n editor = CodeMirror.fromTextArea(document.getElementById('code'), {\n extraKeys: {\n 'Alt-F': 'findPersistent',\n },\n lineNumbers: true,\n styleSelectedText: true,\n lineWrapping: true,\n inputStyle: getInputStyleForEnvironment(),\n })\n editor.setSize('100%', '100%')\n\n createSelectElements()\n\n editor.on('change', function () {\n if (ignoreTextChange) {\n return\n }\n saveNote()\n })\n\n /**\n * Scrolls the cursor into view, so the soft keyboard on mobile devices\n * doesn't overlap the cursor. A short delay is added to prevent scrolling\n * before the keyboard is shown.\n */\n const scrollCursorIntoView = (editor) => {\n setTimeout(() => editor.scrollIntoView(), 200)\n }\n\n editor.on('cursorActivity', function (editor) {\n if (componentRelay.environment !== 'mobile') {\n return\n }\n scrollCursorIntoView(editor)\n })\n\n const initialKeyMap = componentRelay.getComponentDataValueForKey('keyMap') ?? 'default'\n window.setKeyMap(initialKeyMap)\n }\n\n function createSelectElements() {\n select = document.getElementById('language-select')\n for (let index = 0; index < modes.length; index++) {\n const option = document.createElement('option')\n option.value = index\n option.innerHTML = modes[index]\n select.appendChild(option)\n }\n }\n\n // Editor Modes\n window.setKeyMap = function (keymap) {\n editor.setOption('keyMap', keymap)\n updateVimStatus(keymap)\n }\n\n function onLanguageSelect() {\n const language = modes[select.selectedIndex]\n changeMode(language)\n saveNote()\n }\n\n document.getElementById('language-select').addEventListener('change', onLanguageSelect)\n\n function setDefaultLanguage() {\n const language = modes[select.selectedIndex]\n\n // assign default language for this editor when entering notes\n componentRelay.setComponentDataValueForKey('language', language)\n\n // show a confirmation message\n const message = document.getElementById('default-label')\n const original = message.innerHTML\n message.innerHTML = 'Success'\n message.classList.add('success')\n\n setTimeout(function () {\n message.classList.remove('success')\n message.innerHTML = original\n }, 750)\n }\n\n document.getElementById('default-label').addEventListener('click', setDefaultLanguage)\n\n function inputModeToMode(inputMode) {\n const convertCodeMirrorMode = function (codeMirrorMode) {\n if (codeMirrorMode) {\n return {\n name: codeMirrorMode.name,\n mode: codeMirrorMode.mode,\n mime: codeMirrorMode.mime,\n }\n } else {\n return null\n }\n }\n\n const extension = /.+\\.([^.]+)$/.exec(inputMode)\n const mime = /\\//.test(inputMode)\n\n if (extension) {\n return convertCodeMirrorMode(CodeMirror.findModeByExtension(extension[1]))\n } else if (mime) {\n return convertCodeMirrorMode(CodeMirror.findModeByMIME(mime[1]))\n } else if (modeModeAndMimeByName[inputMode]) {\n return {\n name: inputMode,\n mode: modeModeAndMimeByName[inputMode].mode,\n mime: modeModeAndMimeByName[inputMode].mime,\n }\n } else if (modeByModeMode[inputMode]) {\n const firstMode = modeByModeMode[inputMode][0]\n return {\n name: firstMode.name,\n mode: firstMode.mode,\n mime: firstMode.mime,\n }\n } else {\n return {\n name: inputMode,\n mode: inputMode,\n mime: inputMode,\n }\n }\n }\n\n function changeMode(inputMode) {\n if (!inputMode) {\n return\n }\n\n const mode = inputModeToMode(inputMode)\n\n if (mode) {\n editor.setOption('mode', mode.mime)\n CodeMirror.autoLoadMode(editor, mode.mode)\n if (clientData) {\n clientData.mode = mode.name\n }\n document.getElementById('language-select').selectedIndex = modes.indexOf(mode.name)\n } else {\n console.error('Could not find a mode corresponding to ' + inputMode)\n }\n }\n\n function updateVimStatus(keyMap) {\n const toggleButton = document.getElementById('toggle-vim-mode-button')\n\n const newAction = keyMap === 'vim' ? 'Disable' : 'Enable'\n const buttonClass = keyMap === 'vim' ? 'danger' : 'success'\n\n toggleButton.innerHTML = `${newAction} Vim mode`\n toggleButton.classList.remove('danger')\n toggleButton.classList.remove('success')\n toggleButton.classList.add(buttonClass)\n }\n\n function toggleVimMode() {\n let newKeyMap\n\n const currentKeyMap = componentRelay.getComponentDataValueForKey('keyMap') ?? 'default'\n if (currentKeyMap === 'default') {\n newKeyMap = 'vim'\n } else {\n newKeyMap = 'default'\n }\n\n window.setKeyMap(newKeyMap)\n componentRelay.setComponentDataValueForKey('keyMap', newKeyMap)\n }\n\n document.getElementById('toggle-vim-mode-button').addEventListener('click', toggleVimMode)\n\n function getInputStyleForEnvironment() {\n const environment = componentRelay.environment ?? 'web'\n return environment === 'mobile' ? 'textarea' : 'contenteditable'\n }\n\n loadComponentRelay()\n})\n"],"names":["CodeMirror","modeURL","document","addEventListener","modeByModeMode","modeInfo","reduce","acc","m","mode","push","modeModeAndMimeByName","name","mime","modes","Object","keys","componentRelay","workingNote","clientData","lastValue","lastUUID","editor","select","ignoreTextChange","initialLoad","saveNote","note","saveItemWithPresave","getValue","content","text","preview_plain","preview_html","changeMode","inputMode","convertCodeMirrorMode","codeMirrorMode","extension","exec","test","findModeByExtension","findModeByMIME","firstMode","inputModeToMode","setOption","autoLoadMode","getElementById","selectedIndex","indexOf","console","error","window","setKeyMap","keymap","keyMap","toggleButton","newAction","buttonClass","innerHTML","classList","remove","add","updateVimStatus","language","setComponentDataValueForKey","message","original","setTimeout","newKeyMap","getComponentDataValueForKey","ComponentRelay","targetWindow","onReady","platform","body","commands","save","fromTextArea","extraKeys","lineNumbers","styleSelectedText","lineWrapping","inputStyle","environment","setSize","index","length","option","createElement","value","appendChild","createSelectElements","on","scrollIntoView","scrollCursorIntoView","initialKeyMap","loadEditor","handleRequestForContentHeight","scrollHeight","getElementsByClassName","streamContextItem","uuid","isMetadataUpdate","getDoc","setValue","clearHistory","spellcheck","onReceivedNote"],"sourceRoot":""}
|
package/index.html
CHANGED
|
@@ -28,32 +28,29 @@
|
|
|
28
28
|
<script src="dist/lib/component-relay.js"></script>
|
|
29
29
|
<!-- Required for styling selected text -->
|
|
30
30
|
<script src="dist/codemirror/addon/selection/mark-selection.js"></script>
|
|
31
|
-
<script>
|
|
32
|
-
CodeMirror.modeURL = "dist/codemirror/mode/%N/%N.js";
|
|
33
|
-
</script>
|
|
34
31
|
</head>
|
|
35
32
|
|
|
36
33
|
<body class="sn-component">
|
|
37
34
|
<div class="wrapper">
|
|
38
35
|
<textarea id="code" name="code"></textarea>
|
|
39
36
|
<div>
|
|
40
|
-
<div class="sk-app-bar no-edges no-bottom-edge"
|
|
37
|
+
<div id="bar" class="sk-app-bar no-edges no-bottom-edge">
|
|
41
38
|
<div class="left">
|
|
42
39
|
<div class="sk-app-bar-item no-pointer">
|
|
43
40
|
<span class="sk-p">Language:</span>
|
|
44
41
|
</div>
|
|
45
42
|
<div class="sk-app-bar-item no-pointer">
|
|
46
|
-
<select id="language-select"
|
|
43
|
+
<select id="language-select"></select>
|
|
47
44
|
</div>
|
|
48
45
|
<div class="sk-app-bar-item">
|
|
49
|
-
<span id="default-label" class="sk-label"
|
|
46
|
+
<span id="default-label" class="sk-label">Set as Default</span>
|
|
50
47
|
</div>
|
|
51
48
|
</div>
|
|
52
49
|
<div class="center"></div>
|
|
53
50
|
<div class="right">
|
|
54
51
|
<div class="sk-app-bar-item no-pointer border"></div>
|
|
55
52
|
<div class="sk-app-bar-item">
|
|
56
|
-
<span id="toggle-vim-mode-button" class="sk-label"
|
|
53
|
+
<span id="toggle-vim-mode-button" class="sk-label">Enable Vim mode</span>
|
|
57
54
|
</div>
|
|
58
55
|
</div>
|
|
59
56
|
</div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@standardnotes/classic-code-editor",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.12",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/standardnotes/plugins",
|
|
7
|
+
"directory": "packages/org.standardnotes.code-editor"
|
|
8
|
+
},
|
|
4
9
|
"publishConfig": {
|
|
5
10
|
"access": "public"
|
|
6
11
|
},
|
|
@@ -27,7 +32,7 @@
|
|
|
27
32
|
"showInGallery": true
|
|
28
33
|
},
|
|
29
34
|
"dependencies": {
|
|
30
|
-
"@standardnotes/component-relay": "standardnotes/component-relay#
|
|
35
|
+
"@standardnotes/component-relay": "standardnotes/component-relay#893561d2dc72cd3c66f071b3a509b8b7dcd721de"
|
|
31
36
|
},
|
|
32
37
|
"devDependencies": {
|
|
33
38
|
"@babel/cli": "^7.12.10",
|
|
@@ -46,5 +51,5 @@
|
|
|
46
51
|
"webpack-cli": "*",
|
|
47
52
|
"webpack-merge": "^5.8.0"
|
|
48
53
|
},
|
|
49
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "850e5e2b4d7c9730c94b285c17442478ee0cff0c"
|
|
50
55
|
}
|
package/src/main.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
CodeMirror.modeURL = "dist/codemirror/mode/%N/%N.js";
|
|
2
|
+
|
|
1
3
|
document.addEventListener('DOMContentLoaded', function () {
|
|
2
4
|
const modeByModeMode = CodeMirror.modeInfo.reduce(function (acc, m) {
|
|
3
5
|
if (acc[m.mode]) {
|
|
@@ -163,13 +165,15 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
|
163
165
|
updateVimStatus(keymap)
|
|
164
166
|
}
|
|
165
167
|
|
|
166
|
-
|
|
168
|
+
function onLanguageSelect() {
|
|
167
169
|
const language = modes[select.selectedIndex]
|
|
168
170
|
changeMode(language)
|
|
169
171
|
saveNote()
|
|
170
172
|
}
|
|
171
173
|
|
|
172
|
-
|
|
174
|
+
document.getElementById('language-select').addEventListener('change', onLanguageSelect)
|
|
175
|
+
|
|
176
|
+
function setDefaultLanguage() {
|
|
173
177
|
const language = modes[select.selectedIndex]
|
|
174
178
|
|
|
175
179
|
// assign default language for this editor when entering notes
|
|
@@ -187,6 +191,8 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
|
187
191
|
}, 750)
|
|
188
192
|
}
|
|
189
193
|
|
|
194
|
+
document.getElementById('default-label').addEventListener('click', setDefaultLanguage)
|
|
195
|
+
|
|
190
196
|
function inputModeToMode(inputMode) {
|
|
191
197
|
const convertCodeMirrorMode = function (codeMirrorMode) {
|
|
192
198
|
if (codeMirrorMode) {
|
|
@@ -260,7 +266,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
|
260
266
|
toggleButton.classList.add(buttonClass)
|
|
261
267
|
}
|
|
262
268
|
|
|
263
|
-
|
|
269
|
+
function toggleVimMode() {
|
|
264
270
|
let newKeyMap
|
|
265
271
|
|
|
266
272
|
const currentKeyMap = componentRelay.getComponentDataValueForKey('keyMap') ?? 'default'
|
|
@@ -274,6 +280,8 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
|
274
280
|
componentRelay.setComponentDataValueForKey('keyMap', newKeyMap)
|
|
275
281
|
}
|
|
276
282
|
|
|
283
|
+
document.getElementById('toggle-vim-mode-button').addEventListener('click', toggleVimMode)
|
|
284
|
+
|
|
277
285
|
function getInputStyleForEnvironment() {
|
|
278
286
|
const environment = componentRelay.environment ?? 'web'
|
|
279
287
|
return environment === 'mobile' ? 'textarea' : 'contenteditable'
|