123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package hide.view;
- class Script extends FileView {
- var editor : monaco.ScriptEditor;
- var script : hide.comp.ScriptEditor;
- var originData : String;
- var lang : String;
- function getScriptChecker() {
- if( extension != "hx" )
- return null;
- return new hide.comp.ScriptEditor.ScriptChecker(config,"hx");
- }
- override function buildTabMenu():Array<hide.comp.ContextMenu.ContextMenuItem> {
- var arr = super.buildTabMenu();
- if( lang == "xml" ) {
- arr.push({ label : "Count Words", click : function() {
- var x = try Xml.parse(editor.getValue()) catch( e : Dynamic ) { ide.error(e); return; };
- var count = 0;
- var cats = [];
- var hcats = new Map();
- var firstElement = true;
- function countRec(x:Xml,category:{name:String,count:Int}) {
- switch( x.nodeType ) {
- case CData, PCData:
- var text = StringTools.trim(~/[^a-zA-Z0-9]+/g.replace(" ",x.nodeValue));
- if( text != "" ) {
- var n = text.split(" ").length;
- count += n;
- if( category != null ) category.count += n;
- }
- case Document:
- for( x in x )
- countRec(x, category);
- case Element:
- if( firstElement )
- firstElement = false;
- else if( category == null ) {
- var name = x.get("name");
- if( name == null ) name = "Other";
- category = hcats.get(name);
- if( category == null ) {
- category = { name : name, count : 0 };
- hcats.set(name, category);
- cats.push(category);
- }
- }
- for( x in x )
- countRec(x,category);
- default:
- }
- }
- countRec(x,null);
- cats.sort(function(c1,c2) return c2.count - c1.count);
- var txt = ["Words : " + count];
- if( cats.length > 1 && cats.length < 30 ) {
- txt.push("");
- for( c in cats )
- txt.push(c.name+": "+c.count);
- }
- ide.message(txt.join("\n"));
- }});
- }
- return arr;
- }
- override function onDisplay() {
- element.addClass("script-editor");
- lang = switch( extension ) {
- case "js", "hx": "javascript";
- case "json": "json";
- case "xml": "xml";
- case "html": "html";
- default: "text";
- }
- originData = sys.io.File.getContent(getPath());
- var checker = getScriptChecker();
- if( checker != null ) {
- script = new hide.comp.ScriptEditor(originData, checker, element);
- script.onSave = function() onSave(script.code);
- script.onChanged = function() {
- modified = script.code != originData;
- script.doCheckScript();
- }
- } else {
- editor = monaco.ScriptEditor.create(element[0],{
- value : originData,
- language : lang,
- automaticLayout : true,
- wordWrap : true,
- theme : "vs-dark",
- });
- editor.addCommand(monaco.KeyCode.KEY_S | monaco.KeyMod.CtrlCmd, function() {
- onSave(editor.getValue({preserveBOM:true}));
- });
- editor.onDidChangeModelContent(function() {
- var cur = editor.getValue({preserveBOM:true});
- modified = cur != originData;
- });
- }
- }
- function onSave(data) {
- originData = data;
- modified = false;
- skipNextChange = true;
- sys.io.File.saveContent(getPath(), originData);
- }
- static var _ = {
- FileTree.registerExtension(Script,["js","hx"],{ icon : "file-code-o" });
- FileTree.registerExtension(Script,["xml","html"],{ icon : "code" });
- FileTree.registerExtension(Script,["json"],{ icon : "gears" });
- };
- }
|