From d4bf20121bbc7630a65e2f9b61c6997dac424948 Mon Sep 17 00:00:00 2001 From: Cory Forsyth Date: Thu, 9 Jan 2025 11:12:07 +0100 Subject: [PATCH 01/18] Separate docs-app --- docs-app/.ember-cli | 9 +++ docs-app/.eslintignore | 14 ++++ docs-app/.eslintrc.js | 50 ++++++++++++++ docs-app/.gitignore | 25 +++++++ docs-app/.prettierignore | 13 ++++ docs-app/.prettierrc.js | 12 ++++ docs-app/.template-lintrc.js | 9 +++ docs-app/.watchmanconfig | 3 + docs-app/app/app.js | 12 ++++ docs-app/app/components/.gitkeep | 0 docs-app/app/controllers/.gitkeep | 0 docs-app/app/controllers/application.js | 91 +++++++++++++++++++++++++ docs-app/app/helpers/.gitkeep | 0 docs-app/app/index.html | 28 ++++++++ docs-app/app/models/.gitkeep | 0 docs-app/app/router.js | 9 +++ docs-app/app/routes/.gitkeep | 0 docs-app/app/styles/app.css | 52 ++++++++++++++ docs-app/app/templates/application.hbs | 15 ++++ docs-app/config/deploy.js | 29 ++++++++ docs-app/config/environment.js | 53 ++++++++++++++ docs-app/config/optional-features.json | 6 ++ docs-app/config/targets.js | 18 +++++ docs-app/ember-cli-build.js | 21 ++++++ docs-app/package.json | 83 ++++++++++++++++++++++ docs-app/public/robots.txt | 3 + docs-app/testem.js | 23 +++++++ docs-app/tests/index.html | 40 +++++++++++ docs-app/tests/test-helper.js | 14 ++++ 29 files changed, 632 insertions(+) create mode 100644 docs-app/.ember-cli create mode 100644 docs-app/.eslintignore create mode 100644 docs-app/.eslintrc.js create mode 100644 docs-app/.gitignore create mode 100644 docs-app/.prettierignore create mode 100644 docs-app/.prettierrc.js create mode 100644 docs-app/.template-lintrc.js create mode 100644 docs-app/.watchmanconfig create mode 100644 docs-app/app/app.js create mode 100644 docs-app/app/components/.gitkeep create mode 100644 docs-app/app/controllers/.gitkeep create mode 100644 docs-app/app/controllers/application.js create mode 100644 docs-app/app/helpers/.gitkeep create mode 100644 docs-app/app/index.html create mode 100644 docs-app/app/models/.gitkeep create mode 100644 docs-app/app/router.js create mode 100644 docs-app/app/routes/.gitkeep create mode 100644 docs-app/app/styles/app.css create mode 100644 docs-app/app/templates/application.hbs create mode 100644 docs-app/config/deploy.js create mode 100644 docs-app/config/environment.js create mode 100644 docs-app/config/optional-features.json create mode 100644 docs-app/config/targets.js create mode 100644 docs-app/ember-cli-build.js create mode 100644 docs-app/package.json create mode 100644 docs-app/public/robots.txt create mode 100644 docs-app/testem.js create mode 100644 docs-app/tests/index.html create mode 100644 docs-app/tests/test-helper.js diff --git a/docs-app/.ember-cli b/docs-app/.ember-cli new file mode 100644 index 0000000..ee64cfe --- /dev/null +++ b/docs-app/.ember-cli @@ -0,0 +1,9 @@ +{ + /** + Ember CLI sends analytics information by default. The data is completely + anonymous, but there are times when you might want to disable this behavior. + + Setting `disableAnalytics` to true will prevent any data from being sent. + */ + "disableAnalytics": false +} diff --git a/docs-app/.eslintignore b/docs-app/.eslintignore new file mode 100644 index 0000000..768fab3 --- /dev/null +++ b/docs-app/.eslintignore @@ -0,0 +1,14 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/declarations/ +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ diff --git a/docs-app/.eslintrc.js b/docs-app/.eslintrc.js new file mode 100644 index 0000000..f0c1fd0 --- /dev/null +++ b/docs-app/.eslintrc.js @@ -0,0 +1,50 @@ +'use strict'; + +module.exports = { + root: true, + parser: '@babel/eslint-parser', + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + requireConfigFile: false, + babelOptions: { + plugins: [ + ['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }], + ], + }, + }, + plugins: ['ember'], + extends: [ + 'eslint:recommended', + 'plugin:ember/recommended', + 'plugin:prettier/recommended', + ], + env: { + browser: true, + }, + rules: {}, + overrides: [ + // node files + { + files: [ + './.eslintrc.js', + './.prettierrc.js', + './.stylelintrc.js', + './.template-lintrc.js', + './ember-cli-build.js', + './index.js', + './testem.js', + './blueprints/*/index.js', + './config/**/*.js', + ], + parserOptions: { + sourceType: 'script', + }, + env: { + browser: false, + node: true, + }, + extends: ['plugin:n/recommended'], + }, + ], +}; diff --git a/docs-app/.gitignore b/docs-app/.gitignore new file mode 100644 index 0000000..c40a1b2 --- /dev/null +++ b/docs-app/.gitignore @@ -0,0 +1,25 @@ +# See https://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist/ +/tmp/ + +# dependencies +/bower_components/ +/node_modules/ + +# misc +/.env* +/.pnp* +/.sass-cache +/connect.lock +/coverage/ +/libpeerconnection.log +/npm-debug.log* +/testem.log +/yarn-error.log + +# ember-try +/.node_modules.ember-try/ +/bower.json.ember-try +/package.json.ember-try diff --git a/docs-app/.prettierignore b/docs-app/.prettierignore new file mode 100644 index 0000000..655cb68 --- /dev/null +++ b/docs-app/.prettierignore @@ -0,0 +1,13 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ \ No newline at end of file diff --git a/docs-app/.prettierrc.js b/docs-app/.prettierrc.js new file mode 100644 index 0000000..e5f7b6d --- /dev/null +++ b/docs-app/.prettierrc.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = { + overrides: [ + { + files: '*.{js,ts}', + options: { + singleQuote: true, + }, + }, + ], +}; diff --git a/docs-app/.template-lintrc.js b/docs-app/.template-lintrc.js new file mode 100644 index 0000000..83a1a6a --- /dev/null +++ b/docs-app/.template-lintrc.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = { + extends: 'recommended', + rules: { + 'no-triple-curlies': false, + 'no-invalid-interactive': false, + }, +}; diff --git a/docs-app/.watchmanconfig b/docs-app/.watchmanconfig new file mode 100644 index 0000000..e7834e3 --- /dev/null +++ b/docs-app/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["tmp", "dist"] +} diff --git a/docs-app/app/app.js b/docs-app/app/app.js new file mode 100644 index 0000000..d8e2088 --- /dev/null +++ b/docs-app/app/app.js @@ -0,0 +1,12 @@ +import Application from '@ember/application'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from './config/environment'; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver; +} + +loadInitializers(App, config.modulePrefix); diff --git a/docs-app/app/components/.gitkeep b/docs-app/app/components/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs-app/app/controllers/.gitkeep b/docs-app/app/controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs-app/app/controllers/application.js b/docs-app/app/controllers/application.js new file mode 100644 index 0000000..49c1fe0 --- /dev/null +++ b/docs-app/app/controllers/application.js @@ -0,0 +1,91 @@ +import Controller from '@ember/controller'; +import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; + +const DEFAULT_JSON = { + stringKey: 'stringValue', + numberKey: 123, + numArrayKey: [1, 2, 3], + includeNull: [1, null, 'two', false], + mixedKey: ['one', 2.1234, 'three point four five 6', 7.891], + stringArrayKey: [ + 'one', + 'two', + 'three', + 'stringValue1', + 'stringValue2', + 'stringValue3', + ], + bool: true, + nonBool: false, + objKey: { + foo: 'bar', + baz: 123, + nested: { + more: 'value', + deeper: { + thoughts: [123, 456, 789], + foo: 'bar', + baz: 123, + nested: { + more: 'value', + deeper: { + thoughts: [123, 456, 789], + foo: 'bar', + baz: 123, + nested: { + more: 'value', + deeper: { + thoughts: [123, 456, 789], + stringArrayKey: [ + 'one', + 'two', + 'three', + 'stringValue', + 'stringValue', + 'stringValue', + 'stringValue', + 'stringValue', + ], + }, + }, + }, + }, + }, + }, + }, +}; + +function isParseable(json) { + try { + JSON.parse(json); + return true; + } catch (e) { + return false; + } +} + +export default class ApplicationController extends Controller { + @tracked + sourceJSONStr = JSON.stringify(DEFAULT_JSON, null, 2); + + @tracked + viewJSON = DEFAULT_JSON; + + @tracked + isJSONValid = true; + + @action + updateJSON(evt) { + this.sourceJSONStr = evt.target.value; + this.isJSONValid = isParseable(this.sourceJSONStr); + if (this.isJSONValid) { + this.viewJSON = JSON.parse(this.sourceJSONStr); + } + } + + @action + formatSourceJSONStr() { + this.sourceJSONStr = JSON.stringify(this.viewJSON, null, 2); + } +} diff --git a/docs-app/app/helpers/.gitkeep b/docs-app/app/helpers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs-app/app/index.html b/docs-app/app/index.html new file mode 100644 index 0000000..03e919e --- /dev/null +++ b/docs-app/app/index.html @@ -0,0 +1,28 @@ + + + + + + + Ember JSON Viewer + + + + {{content-for "head"}} + + + + + {{content-for "head-footer"}} + + + + {{content-for "body"}} + + + + + {{content-for "body-footer"}} + + + diff --git a/docs-app/app/models/.gitkeep b/docs-app/app/models/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs-app/app/router.js b/docs-app/app/router.js new file mode 100644 index 0000000..e7c37cd --- /dev/null +++ b/docs-app/app/router.js @@ -0,0 +1,9 @@ +import EmberRouter from '@ember/routing/router'; +import config from 'docs-app/config/environment'; + +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} + +Router.map(function () {}); diff --git a/docs-app/app/routes/.gitkeep b/docs-app/app/routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs-app/app/styles/app.css b/docs-app/app/styles/app.css new file mode 100644 index 0000000..aeb8f43 --- /dev/null +++ b/docs-app/app/styles/app.css @@ -0,0 +1,52 @@ +html { + overflow: hidden; +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +main { + display: grid; + grid-template-areas: + "header header" + "viewer input"; + gap: 5vw; + height: 100vh; + width: 100vw; + padding: 1em; + overflow: hidden; +} + +main #title { + grid-area: header; +} + +main .viewer-wrapper { + grid-area: viewer; + height: 85vh; +} + +main .input-wrapper { + grid-area: input; + display: flex; + flex-direction: column; +} + +.input-wrapper textarea { + margin-top: 1em; + width: 30vw; + height: 70vh; + white-space: pre; + background: #222; + color: #ccc; + transition: background 0.2s linear; + font-size: 14px; + padding: 1em; +} + +.input-wrapper.invalid textarea { + background: rgb(120, 0, 0); +} diff --git a/docs-app/app/templates/application.hbs b/docs-app/app/templates/application.hbs new file mode 100644 index 0000000..86086a2 --- /dev/null +++ b/docs-app/app/templates/application.hbs @@ -0,0 +1,15 @@ +
+

Ember-JSON-Viewer

+ +
+ +
+
+

Paste JSON below:

+