refactoring...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2023-12-24 14:44:35 +03:00
parent b92515dedd
commit 910ba412b4

View File

@ -206,28 +206,17 @@ var attributes = {
// //
// Parse attrs... // Parse attrs...
// .parseBlockAttrs(<text>[, <elem>]) // .parseBlockAttrs(<text>[, <elem>])
// -> <elem> // -> [<elem>, <attrs>, <sys-attrs>]
//
// Parse attrs keeping non-system attrs in .text...
// .parseBlockAttrs(<text>, true[, <elem>])
// -> <elem>
//
// Parse attrs keeping all attrs in .text...
// .parseBlockAttrs(<text>, 'all'[, <elem>])
// -> <elem>
// //
// XXX where should we get .__block_attrs__??? // XXX where should we get .__block_attrs__???
// ...editor (current), plugin, ...??? // ...editor (current), plugin, ...???
// XXX might be a good idea to split out the actual code handler to // XXX might be a good idea to split out the actual code handler to
// be overloadable by other plugins... // be overloadable by other plugins...
parseBlockAttrs: function(editor, text, keep=false, elem={}){ parseBlockAttrs: function(editor, text, elem={}){
if(typeof(keep) == 'object'){
elem = keep
keep = typeof(elem) == 'boolean' ?
elem
: false }
var system = editor.__block_attrs__ var system = editor.__block_attrs__
var clean = text var attrs = ''
var sysattrs = ''
elem.text = text
// XXX for some reason changing the first group into (?<= .. ) // XXX for some reason changing the first group into (?<= .. )
// still eats up the whitespace... // still eats up the whitespace...
// ...putting the same pattern in a normal group and // ...putting the same pattern in a normal group and
@ -235,11 +224,11 @@ var attributes = {
//.replace(/(?<=[\n\h]*)(?:(?:\n|^)\s*\w*\s*::\s*[^\n]*\s*)*$/, //.replace(/(?<=[\n\h]*)(?:(?:\n|^)\s*\w*\s*::\s*[^\n]*\s*)*$/,
.replace(/([\n\t ]*)(?:(?:\n|^)[\t ]*\w+[\t ]*::[\t ]*[^\n]+[\t ]*)+$/, .replace(/([\n\t ]*)(?:(?:\n|^)[\t ]*\w+[\t ]*::[\t ]*[^\n]+[\t ]*)+$/,
function(match, ws){ function(match, ws){
var attrs = match match = match
.trim() .trim()
.split(/(?:[\t ]*::[\t ]*|[\t ]*\n[\t ]*)/g) .split(/(?:[\t ]*::[\t ]*|[\t ]*\n[\t ]*)/g)
while(attrs.length > 0){ while(match.length > 0){
var [name, val] = attrs.splice(0, 2) var [name, val] = match.splice(0, 2)
elem[name] = elem[name] =
val == 'true' ? val == 'true' ?
true true
@ -247,29 +236,38 @@ var attributes = {
false false
: val : val
// keep non-system attrs... // keep non-system attrs...
if(keep if(!(name in system)){
&& !(name in system)){ attrs += `\n${name}::${val}`
ws += `\n${name}::${val}` } } } else {
sysattrs += `\n${name}::${val}` } }
return ws }) return ws })
elem.text = keep == 'all' ? return [
text elem,
: clean attrs,
return elem }, sysattrs,
] },
__parse_code__: function(code, editor, elem){ __parse_code__: function(code, editor, elem){
return this.parseBlockAttrs( var [elem, attrs, system] = this.parseBlockAttrs(editor, code, elem)
editor, // XXX use filter handler here...
code, return editor.__code_attrs__ ?
editor.__code_attrs__, elem.text +'\n'+ attrs
elem) : elem.text },
.text },
__pre_parse__: function(text, editor, elem){ __pre_parse__: function(text, editor, elem){
return this.parseBlockAttrs( var [elem, attrs, system] = this.parseBlockAttrs(editor, text, elem)
editor, // XXX use filter handler here...
text, return editor.__view_attrs__ ?
editor.__view_attrs__, elem.text +'\n'+ attrs
elem) : elem.text },
.text },
// XXX revise naming...
// XXX revise attr order...
__code_attrs__: function(editor, elem, attrs, system){
// XXX
},
__view_attrs__: function(editor, elem, attrs, system){
// XXX
},
} }