Bugzilla – Attachment 88133 Details for
Bug 22584
Add YAML support for Codemirror
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 22584: Add YAML support for Codemirror
Bug-22584-Add-YAML-support-for-Codemirror.patch (text/plain), 8.64 KB, created by
Katrin Fischer
on 2019-04-17 06:06:55 UTC
(
hide
)
Description:
Bug 22584: Add YAML support for Codemirror
Filename:
MIME Type:
Creator:
Katrin Fischer
Created:
2019-04-17 06:06:55 UTC
Size:
8.64 KB
patch
obsolete
>From 54e666bae87e13112d5390153c816a05ff14f89e Mon Sep 17 00:00:00 2001 >From: Owen Leonard <oleonard@myacpl.org> >Date: Wed, 27 Mar 2019 13:16:34 +0000 >Subject: [PATCH] Bug 22584: Add YAML support for Codemirror > >This patch adds the dependencies required to provide YAML syntax >highlighting in CodeMirror text areas. The OpacHiddenItems system >preference configuration is updated to use a "text/x-yaml" CodeMirror >syntax. > >To test, apply the patch and go to Administration -> System preferences >-> OPAC. > >Expand the OpacHiddenItems preference and test that YAML-formatted text >entry has the correct syntax highlighting. > >Signed-off-by: Michal Denar <black23@gmail.com> > >https://bugs.koha-community.org/show_bug.cgi?id=2700 > >Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> >--- > koha-tmpl/intranet-tmpl/lib/codemirror/yaml.js | 121 +++++++++++++++++++++ > koha-tmpl/intranet-tmpl/lib/codemirror/yaml.min.js | 1 + > .../prog/en/modules/admin/preferences.tt | 1 + > .../prog/en/modules/admin/preferences/opac.pref | 1 + > 4 files changed, 124 insertions(+) > create mode 100644 koha-tmpl/intranet-tmpl/lib/codemirror/yaml.js > create mode 100644 koha-tmpl/intranet-tmpl/lib/codemirror/yaml.min.js > >diff --git a/koha-tmpl/intranet-tmpl/lib/codemirror/yaml.js b/koha-tmpl/intranet-tmpl/lib/codemirror/yaml.js >new file mode 100644 >index 0000000000..5ef333f440 >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/lib/codemirror/yaml.js >@@ -0,0 +1,121 @@ >+/* CodeMirror version: 5.40.2 */ >+// CodeMirror, copyright (c) by Marijn Haverbeke and others >+// Distributed under an MIT license: https://codemirror.net/LICENSE >+ >+(function(mod) { >+ if (typeof exports == "object" && typeof module == "object") // CommonJS >+ mod(require("../../lib/codemirror")); >+ else if (typeof define == "function" && define.amd) // AMD >+ define(["../../lib/codemirror"], mod); >+ else // Plain browser env >+ mod(CodeMirror); >+})(function(CodeMirror) { >+"use strict"; >+ >+CodeMirror.defineMode("yaml", function() { >+ >+ var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; >+ var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); >+ >+ return { >+ token: function(stream, state) { >+ var ch = stream.peek(); >+ var esc = state.escaped; >+ state.escaped = false; >+ /* comments */ >+ if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { >+ stream.skipToEnd(); >+ return "comment"; >+ } >+ >+ if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) >+ return "string"; >+ >+ if (state.literal && stream.indentation() > state.keyCol) { >+ stream.skipToEnd(); return "string"; >+ } else if (state.literal) { state.literal = false; } >+ if (stream.sol()) { >+ state.keyCol = 0; >+ state.pair = false; >+ state.pairStart = false; >+ /* document start */ >+ if(stream.match(/---/)) { return "def"; } >+ /* document end */ >+ if (stream.match(/\.\.\./)) { return "def"; } >+ /* array list item */ >+ if (stream.match(/\s*-\s+/)) { return 'meta'; } >+ } >+ /* inline pairs/lists */ >+ if (stream.match(/^(\{|\}|\[|\])/)) { >+ if (ch == '{') >+ state.inlinePairs++; >+ else if (ch == '}') >+ state.inlinePairs--; >+ else if (ch == '[') >+ state.inlineList++; >+ else >+ state.inlineList--; >+ return 'meta'; >+ } >+ >+ /* list seperator */ >+ if (state.inlineList > 0 && !esc && ch == ',') { >+ stream.next(); >+ return 'meta'; >+ } >+ /* pairs seperator */ >+ if (state.inlinePairs > 0 && !esc && ch == ',') { >+ state.keyCol = 0; >+ state.pair = false; >+ state.pairStart = false; >+ stream.next(); >+ return 'meta'; >+ } >+ >+ /* start of value of a pair */ >+ if (state.pairStart) { >+ /* block literals */ >+ if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; >+ /* references */ >+ if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } >+ /* numbers */ >+ if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } >+ if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } >+ /* keywords */ >+ if (stream.match(keywordRegex)) { return 'keyword'; } >+ } >+ >+ /* pairs (associative arrays) -> key */ >+ if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { >+ state.pair = true; >+ state.keyCol = stream.indentation(); >+ return "atom"; >+ } >+ if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } >+ >+ /* nothing found, continue */ >+ state.pairStart = false; >+ state.escaped = (ch == '\\'); >+ stream.next(); >+ return null; >+ }, >+ startState: function() { >+ return { >+ pair: false, >+ pairStart: false, >+ keyCol: 0, >+ inlinePairs: 0, >+ inlineList: 0, >+ literal: false, >+ escaped: false >+ }; >+ }, >+ lineComment: "#", >+ fold: "indent" >+ }; >+}); >+ >+CodeMirror.defineMIME("text/x-yaml", "yaml"); >+CodeMirror.defineMIME("text/yaml", "yaml"); >+ >+}); >diff --git a/koha-tmpl/intranet-tmpl/lib/codemirror/yaml.min.js b/koha-tmpl/intranet-tmpl/lib/codemirror/yaml.min.js >new file mode 100644 >index 0000000000..4a5e499bf6 >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/lib/codemirror/yaml.min.js >@@ -0,0 +1 @@ >+!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("yaml",function(){var e=new RegExp("\\b(("+["true","false","on","off","yes","no"].join(")|(")+"))$","i");return{token:function(i,t){var r=i.peek(),n=t.escaped;if(t.escaped=!1,"#"==r&&(0==i.pos||/\s/.test(i.string.charAt(i.pos-1))))return i.skipToEnd(),"comment";if(i.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(t.literal&&i.indentation()>t.keyCol)return i.skipToEnd(),"string";if(t.literal&&(t.literal=!1),i.sol()){if(t.keyCol=0,t.pair=!1,t.pairStart=!1,i.match(/---/))return"def";if(i.match(/\.\.\./))return"def";if(i.match(/\s*-\s+/))return"meta"}if(i.match(/^(\{|\}|\[|\])/))return"{"==r?t.inlinePairs++:"}"==r?t.inlinePairs--:"["==r?t.inlineList++:t.inlineList--,"meta";if(t.inlineList>0&&!n&&","==r)return i.next(),"meta";if(t.inlinePairs>0&&!n&&","==r)return t.keyCol=0,t.pair=!1,t.pairStart=!1,i.next(),"meta";if(t.pairStart){if(i.match(/^\s*(\||\>)\s*/))return t.literal=!0,"meta";if(i.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==t.inlinePairs&&i.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(t.inlinePairs>0&&i.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(i.match(e))return"keyword"}return!t.pair&&i.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(t.pair=!0,t.keyCol=i.indentation(),"atom"):t.pair&&i.match(/^:\s*/)?(t.pairStart=!0,"meta"):(t.pairStart=!1,t.escaped="\\"==r,i.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),e.defineMIME("text/x-yaml","yaml"),e.defineMIME("text/yaml","yaml")}); >\ No newline at end of file >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt >index 8e36c71461..205fd2fa28 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt >@@ -171,6 +171,7 @@ > [% Asset.js( "lib/codemirror/css.min.js" ) | $raw %] > [% Asset.js( "lib/codemirror/javascript.min.js" ) | $raw %] > [% Asset.js( "lib/codemirror/xml.min.js" ) | $raw %] >+ [% Asset.js( "lib/codemirror/yaml.min.js" ) | $raw %] > <script> > var Sticky; > $(document).ready(function(){ >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >index c64910746c..96eff49f63 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >@@ -606,6 +606,7 @@ OPAC: > - > - pref: OpacHiddenItems > type: textarea >+ syntax: text/x-yaml > class: code > - Define custom rules to hide specific items from search and view on the OPAC. How to write these rules is documented on the <a href="http://wiki.koha-community.org/wiki/OpacHiddenItems" target="_blank">Koha wiki</a>. > - >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 22584
:
87279
|
87944
| 88133