aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/pretty-json/index.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'atom/packages/pretty-json/index.coffee')
-rw-r--r--atom/packages/pretty-json/index.coffee61
1 files changed, 61 insertions, 0 deletions
diff --git a/atom/packages/pretty-json/index.coffee b/atom/packages/pretty-json/index.coffee
new file mode 100644
index 0000000..176dcfb
--- /dev/null
+++ b/atom/packages/pretty-json/index.coffee
@@ -0,0 +1,61 @@
+stringify = require("json-stable-stringify")
+uglify = require("jsonminify")
+formatter = {}
+
+prettify = (editor, sorted) ->
+ wholeFile = editor.getGrammar().name == 'JSON'
+
+ if wholeFile
+ text = editor.getText()
+ editor.setText(formatter.pretty(text, sorted))
+ else
+ text = editor.replaceSelectedText({}, (text) ->
+ formatter.pretty(text, sorted)
+ )
+
+minify = (editor, sorted) ->
+ wholeFile = editor.getGrammar().name == 'JSON'
+
+ if wholeFile
+ text = editor.getText()
+ editor.setText(formatter.minify(text))
+ else
+ text = editor.replaceSelectedText({}, (text) ->
+ formatter.minify(text);
+ )
+
+formatter.pretty = (text, sorted) ->
+ editorSettings = atom.config.get('editor')
+ if editorSettings.softTabs?
+ space = Array(editorSettings.tabLength + 1).join(" ")
+ else
+ space = "\t"
+
+ try
+ parsed = JSON.parse(text)
+ if sorted
+ return stringify(parsed, { space: space })
+ else
+ return JSON.stringify(parsed, null, space)
+ catch error
+ text
+
+formatter.minify = (text) ->
+ try
+ JSON.parse(text)
+ uglify(text);
+ catch error
+ text;
+
+module.exports =
+ activate: ->
+ atom.commands.add 'atom-workspace',
+ 'pretty-json:prettify': ->
+ editor = atom.workspace.getActiveTextEditor()
+ prettify(editor)
+ 'pretty-json:sort-and-prettify': ->
+ editor = atom.workspace.getActiveTextEditor()
+ prettify(editor, true)
+ 'pretty-json:minify': ->
+ editor = atom.workspace.getActiveTextEditor()
+ minify(editor, true)