From 51432622ef9b9469d23633ba550c68e309355aae Mon Sep 17 00:00:00 2001 From: hallgren Date: Wed, 22 Feb 2012 14:12:31 +0000 Subject: [PATCH] gfse: some refactoring --- src/www/gfse/editor.js | 46 +++++++++++++++----------------------- src/www/minibar/support.js | 26 ++++++++++++++++----- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/www/gfse/editor.js b/src/www/gfse/editor.js index 60abf2142..9748fa79d 100644 --- a/src/www/gfse/editor.js +++ b/src/www/gfse/editor.js @@ -14,7 +14,7 @@ function initial_view() { function draw_grammar_list() { local.put("current",0); - editor.innerHTML=""; + clear(editor); var uploaded=local.get("dir") && local.get("json_uploaded"); var cloud_upload= a(jsurl("upload_json()"), @@ -122,8 +122,7 @@ function open_grammar(i) { } function close_grammar(g) { - var o=compiler_output; - if(o) o.innerHTML=""; + clear(compiler_output); save_grammar(g); draw_grammar_list(); } @@ -135,8 +134,7 @@ function save_grammar(g) { } function edit_grammar(g) { - editor.innerHTML=""; - editor.appendChild(draw_grammar(g)); + replaceChildren(editor,draw_grammar(g)); } @@ -185,7 +183,7 @@ function draw_plainbutton(g,files) { function show_compile_error(res) { var dst=compiler_output if(dst) { - dst.innerHTML=""; + clear(dst); var minibarlink=a(res.minibar_url,[text("Minibar")]) if(res.errorcode=="OK") dst.appendChild(wrap("h3",text("OK"))) @@ -200,7 +198,7 @@ function show_compile_error(res) { function compile_button(g) { function compile() { - if(compiler_output) compiler_output.innerHTML="

Compiling...

"; + replaceInnerHTML(compiler_output,"

Compiling...

"); upload(g,show_compile_error); } var b=button("Compile",compile); @@ -215,7 +213,7 @@ function minibar_button(g,files) { show_compile_error(res); if(res.errorcode=="OK") { //location.href=res.minibar_url; - files.innerHTML=""; + clear(files); files.appendChild(div_id("minibar")); var online_options={grammars_url: local.get("dir")+"/", grammar_list: [g.basename+".pgf"]} @@ -237,7 +235,7 @@ function minibar_button(g,files) { } } function compile() { - if(compiler_output) compiler_output.innerHTML="

Compiling...

"; + replaceInnerHTML(compiler_output,"

Compiling...

"); upload(g,goto_minibar); } var b=button("Minibar",compile); @@ -262,7 +260,7 @@ function concname(code) { return langname[code] || code; } function add_concrete(g,el) { var file=element("file"); - file.innerHTML=""; + clear(file); var dc={}; for(var i in g.concretes) dc[g.concretes[i].langcode]=true; @@ -414,7 +412,7 @@ function delete_extends(g,ix) { function add_extends(g,el) { var file=element("file"); - file.innerHTML=""; + clear(file) var gs=cached_grammar_array_byname(); var list=[] for(var i in gs) { @@ -472,13 +470,14 @@ function draw_abstract(g) { function text_mode(g,file) { var path=g.basename+".gf" function switch_to_guided_mode() { + clear(compiler_output); edit_grammar(g); // !! } function store_parsed(parse_results) { var dst=compiler_output; var msg=parse_results[path]; - if(dst) dst.innerHTML="" - console.log(msg) + clear(dst) + //console.log(msg) if(dst && msg.error) dst.appendChild(span_class("error_message", text(msg.location+": "+msg.error))) @@ -492,18 +491,18 @@ function text_mode(g,file) { timestamp(g.abstract); save_grammar(g); } - else if(dst) dst.innerHTML="unexpected parse result"; + else replaceInnerHTML(dst,"unexpected parse result"); } var last_source=show_abstract(g); function parse(source) { if(source!=last_source) { if(navigator.onLine) { - //compiler_output.innerHTML=""; + //clear(compiler_output) // makes the page "jumpy" last_source=source; check_module(path,source,store_parsed) } - else if(compiler_output) - compiler_output.innerHTML="Offline, edits will not be saved" + else replaceInnerHTML(compiler_output, + "Offline, edits will not be saved") } } function switch_to_text_mode() { @@ -515,7 +514,7 @@ function text_mode(g,file) { timeout=setTimeout(function(){parse(ta.value)},400) } var mode_button=div_class("right",[button("Guided mode",switch_to_guided_mode)]) - file.innerHTML=""; + clear(file) appendChildren(file,[mode_button,ta]) ta.focus(); } @@ -739,7 +738,7 @@ function add_open(ci) { } if(list.length>0) { var file=element("file"); - file.innerHTML=""; + clear(file) file.appendChild(p(text("Pick a resource library module to open:"))); file.appendChild(node("ul",{},list)); } @@ -1326,15 +1325,6 @@ function table(rows) { return node("table",{},rows); } function td_right(cs) { return node("td",{"class":"right"},cs); } function jsurl(js) { return "javascript:"+js; } -function hidden(name,value) { - return node("input",{type:"hidden",name:name,value:value},[]) -} - -function insertBefore(el,ref) { ref.parentNode.insertBefore(el,ref); } - -function insertAfter(el,ref) { - ref.parentNode.insertBefore(el,ref.nextSibling); -} /* -------------------------------------------------------------------------- */ function download_from_cloud() { diff --git a/src/www/minibar/support.js b/src/www/minibar/support.js index 962426d53..08327d102 100644 --- a/src/www/minibar/support.js +++ b/src/www/minibar/support.js @@ -128,7 +128,7 @@ function text(s) { return document.createTextNode(s); } function node(tag,as,ds) { var n=document.createElement(tag); for(var a in as) n.setAttribute(a,as[a]); - for(var i in ds) n.appendChild(ds[i]); + if(ds) for(var i in ds) n.appendChild(ds[i]); return n; } @@ -147,9 +147,7 @@ function span_id(id) { return empty_id("span",id); } function wrap(tag,contents) { return node(tag,{},[contents]); } function wrap_class(tag,cls,contents) { - var el=empty_class(tag,cls); - if(contents) el.appendChild(contents); - return el; + return node(tag,{"class":cls},contents ? [contents] : []) } function span_class(cls,contents) { return wrap_class("span",cls,contents); } @@ -177,6 +175,20 @@ function option(label,value) { return node("option",{"value":value},[text(label)]); } +function hidden(name,value) { + return node("input",{type:"hidden",name:name,value:value},[]) +} + +function tda(cs) { return node("td",{},cs); } + +function img(src) { return empty("img","src",src); } + +/* --- Document modification ------------------------------------------------ */ + +function clear(el) { replaceInnerHTML(el,""); } +function replaceInnerHTML(el,html) { if(el) el.innerHTML=html; } +function replaceChildren(el,newchild) { clear(el); el.appendChild(newchild); } + function appendChildren(el,ds) { for(var i in ds) el.appendChild(ds[i]); return el; @@ -186,9 +198,11 @@ function insertFirst(parent,child) { parent.insertBefore(child,parent.firstChild); } -function tda(cs) { return node("td",{},cs); } +function insertBefore(el,ref) { ref.parentNode.insertBefore(el,ref); } -function img(src) { return empty("img","src",src); } +function insertAfter(el,ref) { + ref.parentNode.insertBefore(el,ref.nextSibling); +} /* --- Debug ---------------------------------------------------------------- */