diff --git a/components/editor/init.js b/components/editor/init.js index 4475a56..9df0019 100755 --- a/components/editor/init.js +++ b/components/editor/init.js @@ -337,6 +337,8 @@ rootContainer: null, + fileExtensionTextMode: {}, + init: function(){ this.createSplitMenu(); this.createModeMenu(); @@ -747,58 +749,57 @@ ///////////////////////////////////////////////////////////////// // - // Select file mode by extension + // Select file mode by extension case insensitive // // Parameters: - // e - {String} File extension + // e - {String} File extension // ///////////////////////////////////////////////////////////////// selectMode: function(e) { - switch (e) { - case 'html': - case 'htm': - case 'tpl': - return 'html'; - case 'js': - return 'javascript'; - case 'css': - return 'css'; - case 'scss': - case 'sass': - return 'scss'; - case 'less': - return 'less'; - case 'php': - case 'php5': - case 'phtml': - return 'php'; - case 'json': - return 'json'; - case 'xml': - return 'xml'; - case 'sql': - return 'sql'; - case 'md': - return 'markdown'; - case 'c': - case 'cpp': - case 'h': - case 'hpp': - return 'c_cpp'; - case 'py': - return 'python'; - case 'rb': - return 'ruby'; - case 'jade': - return 'jade'; - case 'coffee': - return 'coffee'; - default: + if(typeof(e) != 'string'){ + return 'text'; + } + e = e.toLowerCase(); + + if(e in this.fileExtensionTextMode){ + return this.fileExtensionTextMode[e]; + }else{ return 'text'; } }, + ///////////////////////////////////////////////////////////////// + // + // Add an text mode for an extension + // + // Parameters: + // extension - {String} File Extension + // mode - {String} TextMode for this extension + // + ///////////////////////////////////////////////////////////////// + + addFileExtensionTextMode: function(extension, mode){ + if(typeof(extension) != 'string' || typeof(mode) != 'string'){ + if (console){ + console.warn('wrong usage of addFileExtensionTextMode, both parameters need to be string'); + } + return; + } + mode = mode.toLowerCase(); + this.fileExtensionTextMode[extension] = mode; + }, + + ///////////////////////////////////////////////////////////////// + // + // clear all extension-text mode joins + // + ///////////////////////////////////////////////////////////////// + + clearFileExtensionTextMode: function(){ + this.fileExtensionTextMode = {}; + }, + ///////////////////////////////////////////////////////////////// // // Set the editor mode diff --git a/components/fileExtTextMode/defaultValues.php b/components/fileExtTextMode/defaultValues.php new file mode 100644 index 0000000..dcf71c2 --- /dev/null +++ b/components/fileExtTextMode/defaultValues.php @@ -0,0 +1,107 @@ + 'html', + 'htm' => 'html', + 'tpl' => 'html', + 'js' => 'javascript', + 'css' => 'css', + 'scss' => 'scss', + 'sass' => 'scss', + 'less' => 'less', + 'php' => 'php', + 'php4' => 'php', + 'php5' => 'php', + 'phtml' => 'php', + 'json' => 'json', + 'xml' => 'xml', + 'sql' => 'sql', + 'md' => 'markdown', + 'c' => 'c_cpp', + 'cpp' => 'c_cpp', + 'h' => 'c_cpp', + 'hpp' => 'c_cpp', + 'py' => 'python', + 'rb' => 'ruby', + 'jade' => 'jade', + 'coffee' => 'coffee'); + +$availiableTextModes = array( + 'abap', + 'asciidoc', + 'c9search', + 'c_cpp', + 'clojure', + 'coffee', + 'coldfusion', + 'csharp', + 'css', + 'curly', + 'dart', + 'diff', + 'django', + 'dot', + 'ftl', + 'glsl', + 'golang', + 'groovy', + 'haml', + 'haxe', + 'html', + 'jade', + 'java', + 'javascript', + 'json', + 'jsp', + 'jsx', + 'latex', + 'less', + 'liquid', + 'lisp', + 'livescript', + 'logiql', + 'lsl', + 'lua', + 'luapage', + 'lucene', + 'makefile', + 'markdown', + 'mushcode', + 'objectivec', + 'ocaml', + 'pascal', + 'perl', + 'pgsql', + 'php', + 'powershell', + 'python', + 'r', + 'rdoc', + 'rhtml', + 'ruby', + 'sass', + 'scad', + 'scala', + 'scheme', + 'scss', + 'sh', + 'sql', + 'stylus', + 'svg', + 'tcl', + 'tex', + 'text', + 'textile', + 'tmsnippet', + 'toml', + 'typescript', + 'vbscript', + 'velocity', + 'xml', + 'xquery', + 'yaml' + ); + +?> \ No newline at end of file diff --git a/components/fileExtTextMode/fileExtTextModeForm.php b/components/fileExtTextMode/fileExtTextModeForm.php new file mode 100644 index 0000000..a4be119 --- /dev/null +++ b/components/fileExtTextMode/fileExtTextModeForm.php @@ -0,0 +1,56 @@ +'."\n"; + foreach($availiableTextModes as $textmode){ + $ret .= ' '."\n"; + } + + $ret .= ''."\n"; + + return $ret; +} + +$ext = false; +//ignore warnings +$ext = @Common::getJSON('fileExtensions.php'); + +if(!is_array($ext)){ + //default extensions + $ext = $defaultExtensions; +} + +if(!@ksort($ext) || !@ksort($availiableTextModes)){ + die(json_encode(array('status' => 'error', 'msg' => 'Internal PHP error.') )); +} + +//echo '
'."\n"; +?> \ No newline at end of file diff --git a/components/fileExtTextMode/getFileExtTextModes.php b/components/fileExtTextMode/getFileExtTextModes.php new file mode 100644 index 0000000..20109a9 --- /dev/null +++ b/components/fileExtTextMode/getFileExtTextModes.php @@ -0,0 +1,19 @@ + 'success', 'msg' => 'Extensions send', 'extensions' => $ext)); + +?> \ No newline at end of file diff --git a/components/fileExtTextMode/init.js b/components/fileExtTextMode/init.js new file mode 100644 index 0000000..b878a3c --- /dev/null +++ b/components/fileExtTextMode/init.js @@ -0,0 +1,167 @@ +var debug; +(function(global, $) { + + $(function() { + codiad.fileExtTextMode.init(); + }); + + global.codiad.fileExtTextMode = { + + pluginDir:'components/FileExtTextMode/', + + availableTextModes :[ + 'abap', + 'asciidoc', + 'c9search', + 'c_cpp', + 'clojure', + 'coffee', + 'coldfusion', + 'csharp', + 'css', + 'curly', + 'dart', + 'diff', + 'django', + 'dot', + 'ftl', + 'glsl', + 'golang', + 'groovy', + 'haml', + 'haxe', + 'html', + 'jade', + 'java', + 'javascript', + 'json', + 'jsp', + 'jsx', + 'latex', + 'less', + 'liquid', + 'lisp', + 'livescript', + 'logiql', + 'lsl', + 'lua', + 'luapage', + 'lucene', + 'makefile', + 'markdown', + 'mushcode', + 'objectivec', + 'ocaml', + 'pascal', + 'perl', + 'pgsql', + 'php', + 'powershell', + 'python', + 'r', + 'rdoc', + 'rhtml', + 'ruby', + 'sass', + 'scad', + 'scala', + 'scheme', + 'scss', + 'sh', + 'sql', + 'stylus', + 'svg', + 'tcl', + 'tex', + 'text', + 'textile', + 'tmsnippet', + 'toml', + 'typescript', + 'vbscript', + 'velocity', + 'xml', + 'xquery', + 'yaml' + ], + + init : function() { + this.initEditorFileExtensionTextModes(); + }, + + formWidth : 300, + + open : function() { + codiad.modal.load(this.formWidth, + this.pluginDir+'fileExtTextModeForm.php'); + codiad.modal.hideOverlay(); + }, + + sendForm : function(){ + var $div = $('#FileExtTextModeDiv'); + var extensions = $div.find('.FileExtension'); + var formData = {'extension[]' : [], 'textMode[]' : []}; + for(var i = 0; i < extensions.size(); ++i){ + formData['extension[]'].push(extensions[i].value); + } + + var textMode = $div.find('.textMode'); + for(var i = 0; i < textMode.size(); ++i){ + formData['textMode[]'].push(textMode[i].value); + } + + $.post(this.pluginDir+'process.php', formData, codiad.fileExtTextMode.setEditorFileExtensionTextModes); + + codiad.modal.unload(); + }, + + addFieldToForm : function(){ + var $div = $('#FileExtTextModeDiv'); + + var code = ' '; + code += '