diff --git a/fileicons/dace-hollow.svg b/fileicons/dace-hollow.svg new file mode 100644 index 0000000..556db14 --- /dev/null +++ b/fileicons/dace-hollow.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/fileicons/sdfg-icon-theme.json b/fileicons/sdfg-icon-theme.json new file mode 100644 index 0000000..9fc6b43 --- /dev/null +++ b/fileicons/sdfg-icon-theme.json @@ -0,0 +1,2038 @@ +{ + "information_for_contributors": [ + "This file has been generated from data in https://github.com/jesseweed/seti-ui", + "- icon definitions: https://github.com/jesseweed/seti-ui/blob/master/styles/_fonts/seti.less", + "- icon colors: https://github.com/jesseweed/seti-ui/blob/master/styles/ui-variables.less", + "- file associations: https://github.com/jesseweed/seti-ui/blob/master/styles/components/icons/mapping.less", + "If you want to provide a fix or improvement, please create a pull request against the jesseweed/seti-ui repository.", + "Once accepted there, we are happy to receive an update request." + ], + "fonts": [ + { + "id": "seti", + "src": [ + { + "path": "./seti.woff", + "format": "woff" + } + ], + "weight": "normal", + "style": "normal", + "size": "150%" + } + ], + "iconDefinitions": { + "_sdfg_file": { + "iconPath": "./sdfg.svg" + }, + "_R_light": { + "fontCharacter": "\\E001", + "fontColor": "#498ba7" + }, + "_R": { + "fontCharacter": "\\E001", + "fontColor": "#519aba" + }, + "_argdown_light": { + "fontCharacter": "\\E003", + "fontColor": "#498ba7" + }, + "_argdown": { + "fontCharacter": "\\E003", + "fontColor": "#519aba" + }, + "_asm_light": { + "fontCharacter": "\\E004", + "fontColor": "#b8383d" + }, + "_asm": { + "fontCharacter": "\\E004", + "fontColor": "#cc3e44" + }, + "_audio_light": { + "fontCharacter": "\\E005", + "fontColor": "#9068b0" + }, + "_audio": { + "fontCharacter": "\\E005", + "fontColor": "#a074c4" + }, + "_babel_light": { + "fontCharacter": "\\E006", + "fontColor": "#b7b73b" + }, + "_babel": { + "fontCharacter": "\\E006", + "fontColor": "#cbcb41" + }, + "_bower_light": { + "fontCharacter": "\\E007", + "fontColor": "#cc6d2e" + }, + "_bower": { + "fontCharacter": "\\E007", + "fontColor": "#e37933" + }, + "_bsl_light": { + "fontCharacter": "\\E008", + "fontColor": "#b8383d" + }, + "_bsl": { + "fontCharacter": "\\E008", + "fontColor": "#cc3e44" + }, + "_c_light": { + "fontCharacter": "\\E00A", + "fontColor": "#498ba7" + }, + "_c": { + "fontCharacter": "\\E00A", + "fontColor": "#519aba" + }, + "_c-sharp_light": { + "fontCharacter": "\\E009", + "fontColor": "#498ba7" + }, + "_c-sharp": { + "fontCharacter": "\\E009", + "fontColor": "#519aba" + }, + "_c_1_light": { + "fontCharacter": "\\E00A", + "fontColor": "#9068b0" + }, + "_c_1": { + "fontCharacter": "\\E00A", + "fontColor": "#a074c4" + }, + "_c_2_light": { + "fontCharacter": "\\E00A", + "fontColor": "#b7b73b" + }, + "_c_2": { + "fontCharacter": "\\E00A", + "fontColor": "#cbcb41" + }, + "_cake_light": { + "fontCharacter": "\\E00B", + "fontColor": "#b8383d" + }, + "_cake": { + "fontCharacter": "\\E00B", + "fontColor": "#cc3e44" + }, + "_cake_php_light": { + "fontCharacter": "\\E00C", + "fontColor": "#b8383d" + }, + "_cake_php": { + "fontCharacter": "\\E00C", + "fontColor": "#cc3e44" + }, + "_clock_light": { + "fontCharacter": "\\E010", + "fontColor": "#498ba7" + }, + "_clock": { + "fontCharacter": "\\E010", + "fontColor": "#519aba" + }, + "_clock_1_light": { + "fontCharacter": "\\E010", + "fontColor": "#627379" + }, + "_clock_1": { + "fontCharacter": "\\E010", + "fontColor": "#6d8086" + }, + "_clojure_light": { + "fontCharacter": "\\E011", + "fontColor": "#7fae42" + }, + "_clojure": { + "fontCharacter": "\\E011", + "fontColor": "#8dc149" + }, + "_clojure_1_light": { + "fontCharacter": "\\E011", + "fontColor": "#498ba7" + }, + "_clojure_1": { + "fontCharacter": "\\E011", + "fontColor": "#519aba" + }, + "_code-climate_light": { + "fontCharacter": "\\E012", + "fontColor": "#7fae42" + }, + "_code-climate": { + "fontCharacter": "\\E012", + "fontColor": "#8dc149" + }, + "_code-search_light": { + "fontCharacter": "\\E013", + "fontColor": "#9068b0" + }, + "_code-search": { + "fontCharacter": "\\E013", + "fontColor": "#a074c4" + }, + "_coffee_light": { + "fontCharacter": "\\E014", + "fontColor": "#b7b73b" + }, + "_coffee": { + "fontCharacter": "\\E014", + "fontColor": "#cbcb41" + }, + "_coldfusion_light": { + "fontCharacter": "\\E016", + "fontColor": "#498ba7" + }, + "_coldfusion": { + "fontCharacter": "\\E016", + "fontColor": "#519aba" + }, + "_config_light": { + "fontCharacter": "\\E017", + "fontColor": "#627379" + }, + "_config": { + "fontCharacter": "\\E017", + "fontColor": "#6d8086" + }, + "_cpp_light": { + "fontCharacter": "\\E018", + "fontColor": "#498ba7" + }, + "_cpp": { + "fontCharacter": "\\E018", + "fontColor": "#519aba" + }, + "_cpp_1_light": { + "fontCharacter": "\\E018", + "fontColor": "#9068b0" + }, + "_cpp_1": { + "fontCharacter": "\\E018", + "fontColor": "#a074c4" + }, + "_cpp_2_light": { + "fontCharacter": "\\E018", + "fontColor": "#b7b73b" + }, + "_cpp_2": { + "fontCharacter": "\\E018", + "fontColor": "#cbcb41" + }, + "_crystal_light": { + "fontCharacter": "\\E019", + "fontColor": "#bfc2c1" + }, + "_crystal": { + "fontCharacter": "\\E019", + "fontColor": "#d4d7d6" + }, + "_crystal_embedded_light": { + "fontCharacter": "\\E01A", + "fontColor": "#bfc2c1" + }, + "_crystal_embedded": { + "fontCharacter": "\\E01A", + "fontColor": "#d4d7d6" + }, + "_css_light": { + "fontCharacter": "\\E01B", + "fontColor": "#498ba7" + }, + "_css": { + "fontCharacter": "\\E01B", + "fontColor": "#519aba" + }, + "_csv_light": { + "fontCharacter": "\\E01C", + "fontColor": "#7fae42" + }, + "_csv": { + "fontCharacter": "\\E01C", + "fontColor": "#8dc149" + }, + "_d_light": { + "fontCharacter": "\\E01D", + "fontColor": "#b8383d" + }, + "_d": { + "fontCharacter": "\\E01D", + "fontColor": "#cc3e44" + }, + "_dart_light": { + "fontCharacter": "\\E01E", + "fontColor": "#498ba7" + }, + "_dart": { + "fontCharacter": "\\E01E", + "fontColor": "#519aba" + }, + "_db_light": { + "fontCharacter": "\\E01F", + "fontColor": "#dd4b78" + }, + "_db": { + "fontCharacter": "\\E01F", + "fontColor": "#f55385" + }, + "_default_light": { + "fontCharacter": "\\E020", + "fontColor": "#bfc2c1" + }, + "_default": { + "fontCharacter": "\\E020", + "fontColor": "#d4d7d6" + }, + "_docker_light": { + "fontCharacter": "\\E022", + "fontColor": "#498ba7" + }, + "_docker": { + "fontCharacter": "\\E022", + "fontColor": "#519aba" + }, + "_docker_1_light": { + "fontCharacter": "\\E022", + "fontColor": "#455155" + }, + "_docker_1": { + "fontCharacter": "\\E022", + "fontColor": "#4d5a5e" + }, + "_docker_2_light": { + "fontCharacter": "\\E022", + "fontColor": "#7fae42" + }, + "_docker_2": { + "fontCharacter": "\\E022", + "fontColor": "#8dc149" + }, + "_docker_3_light": { + "fontCharacter": "\\E022", + "fontColor": "#dd4b78" + }, + "_docker_3": { + "fontCharacter": "\\E022", + "fontColor": "#f55385" + }, + "_ejs_light": { + "fontCharacter": "\\E024", + "fontColor": "#b7b73b" + }, + "_ejs": { + "fontCharacter": "\\E024", + "fontColor": "#cbcb41" + }, + "_elixir_light": { + "fontCharacter": "\\E025", + "fontColor": "#9068b0" + }, + "_elixir": { + "fontCharacter": "\\E025", + "fontColor": "#a074c4" + }, + "_elixir_script_light": { + "fontCharacter": "\\E026", + "fontColor": "#9068b0" + }, + "_elixir_script": { + "fontCharacter": "\\E026", + "fontColor": "#a074c4" + }, + "_elm_light": { + "fontCharacter": "\\E027", + "fontColor": "#498ba7" + }, + "_elm": { + "fontCharacter": "\\E027", + "fontColor": "#519aba" + }, + "_eslint_light": { + "fontCharacter": "\\E029", + "fontColor": "#9068b0" + }, + "_eslint": { + "fontCharacter": "\\E029", + "fontColor": "#a074c4" + }, + "_eslint_1_light": { + "fontCharacter": "\\E029", + "fontColor": "#455155" + }, + "_eslint_1": { + "fontCharacter": "\\E029", + "fontColor": "#4d5a5e" + }, + "_ethereum_light": { + "fontCharacter": "\\E02A", + "fontColor": "#498ba7" + }, + "_ethereum": { + "fontCharacter": "\\E02A", + "fontColor": "#519aba" + }, + "_f-sharp_light": { + "fontCharacter": "\\E02B", + "fontColor": "#498ba7" + }, + "_f-sharp": { + "fontCharacter": "\\E02B", + "fontColor": "#519aba" + }, + "_favicon_light": { + "fontCharacter": "\\E02C", + "fontColor": "#b7b73b" + }, + "_favicon": { + "fontCharacter": "\\E02C", + "fontColor": "#cbcb41" + }, + "_firebase_light": { + "fontCharacter": "\\E02D", + "fontColor": "#cc6d2e" + }, + "_firebase": { + "fontCharacter": "\\E02D", + "fontColor": "#e37933" + }, + "_firefox_light": { + "fontCharacter": "\\E02E", + "fontColor": "#cc6d2e" + }, + "_firefox": { + "fontCharacter": "\\E02E", + "fontColor": "#e37933" + }, + "_font_light": { + "fontCharacter": "\\E030", + "fontColor": "#b8383d" + }, + "_font": { + "fontCharacter": "\\E030", + "fontColor": "#cc3e44" + }, + "_git_light": { + "fontCharacter": "\\E031", + "fontColor": "#3b4b52" + }, + "_git": { + "fontCharacter": "\\E031", + "fontColor": "#41535b" + }, + "_go_light": { + "fontCharacter": "\\E035", + "fontColor": "#498ba7" + }, + "_go": { + "fontCharacter": "\\E035", + "fontColor": "#519aba" + }, + "_go2_light": { + "fontCharacter": "\\E036", + "fontColor": "#498ba7" + }, + "_go2": { + "fontCharacter": "\\E036", + "fontColor": "#519aba" + }, + "_gradle_light": { + "fontCharacter": "\\E037", + "fontColor": "#7fae42" + }, + "_gradle": { + "fontCharacter": "\\E037", + "fontColor": "#8dc149" + }, + "_grails_light": { + "fontCharacter": "\\E038", + "fontColor": "#7fae42" + }, + "_grails": { + "fontCharacter": "\\E038", + "fontColor": "#8dc149" + }, + "_graphql_light": { + "fontCharacter": "\\E039", + "fontColor": "#dd4b78" + }, + "_graphql": { + "fontCharacter": "\\E039", + "fontColor": "#f55385" + }, + "_grunt_light": { + "fontCharacter": "\\E03A", + "fontColor": "#cc6d2e" + }, + "_grunt": { + "fontCharacter": "\\E03A", + "fontColor": "#e37933" + }, + "_gulp_light": { + "fontCharacter": "\\E03B", + "fontColor": "#b8383d" + }, + "_gulp": { + "fontCharacter": "\\E03B", + "fontColor": "#cc3e44" + }, + "_haml_light": { + "fontCharacter": "\\E03D", + "fontColor": "#b8383d" + }, + "_haml": { + "fontCharacter": "\\E03D", + "fontColor": "#cc3e44" + }, + "_happenings_light": { + "fontCharacter": "\\E03E", + "fontColor": "#498ba7" + }, + "_happenings": { + "fontCharacter": "\\E03E", + "fontColor": "#519aba" + }, + "_haskell_light": { + "fontCharacter": "\\E03F", + "fontColor": "#9068b0" + }, + "_haskell": { + "fontCharacter": "\\E03F", + "fontColor": "#a074c4" + }, + "_haxe_light": { + "fontCharacter": "\\E040", + "fontColor": "#cc6d2e" + }, + "_haxe": { + "fontCharacter": "\\E040", + "fontColor": "#e37933" + }, + "_haxe_1_light": { + "fontCharacter": "\\E040", + "fontColor": "#b7b73b" + }, + "_haxe_1": { + "fontCharacter": "\\E040", + "fontColor": "#cbcb41" + }, + "_haxe_2_light": { + "fontCharacter": "\\E040", + "fontColor": "#498ba7" + }, + "_haxe_2": { + "fontCharacter": "\\E040", + "fontColor": "#519aba" + }, + "_haxe_3_light": { + "fontCharacter": "\\E040", + "fontColor": "#9068b0" + }, + "_haxe_3": { + "fontCharacter": "\\E040", + "fontColor": "#a074c4" + }, + "_heroku_light": { + "fontCharacter": "\\E041", + "fontColor": "#9068b0" + }, + "_heroku": { + "fontCharacter": "\\E041", + "fontColor": "#a074c4" + }, + "_hex_light": { + "fontCharacter": "\\E042", + "fontColor": "#b8383d" + }, + "_hex": { + "fontCharacter": "\\E042", + "fontColor": "#cc3e44" + }, + "_html_light": { + "fontCharacter": "\\E043", + "fontColor": "#498ba7" + }, + "_html": { + "fontCharacter": "\\E043", + "fontColor": "#519aba" + }, + "_html_1_light": { + "fontCharacter": "\\E043", + "fontColor": "#7fae42" + }, + "_html_1": { + "fontCharacter": "\\E043", + "fontColor": "#8dc149" + }, + "_html_2_light": { + "fontCharacter": "\\E043", + "fontColor": "#b7b73b" + }, + "_html_2": { + "fontCharacter": "\\E043", + "fontColor": "#cbcb41" + }, + "_html_3_light": { + "fontCharacter": "\\E043", + "fontColor": "#cc6d2e" + }, + "_html_3": { + "fontCharacter": "\\E043", + "fontColor": "#e37933" + }, + "_html_erb_light": { + "fontCharacter": "\\E044", + "fontColor": "#b8383d" + }, + "_html_erb": { + "fontCharacter": "\\E044", + "fontColor": "#cc3e44" + }, + "_ignored_light": { + "fontCharacter": "\\E045", + "fontColor": "#3b4b52" + }, + "_ignored": { + "fontCharacter": "\\E045", + "fontColor": "#41535b" + }, + "_illustrator_light": { + "fontCharacter": "\\E046", + "fontColor": "#b7b73b" + }, + "_illustrator": { + "fontCharacter": "\\E046", + "fontColor": "#cbcb41" + }, + "_image_light": { + "fontCharacter": "\\E047", + "fontColor": "#9068b0" + }, + "_image": { + "fontCharacter": "\\E047", + "fontColor": "#a074c4" + }, + "_info_light": { + "fontCharacter": "\\E048", + "fontColor": "#498ba7" + }, + "_info": { + "fontCharacter": "\\E048", + "fontColor": "#519aba" + }, + "_ionic_light": { + "fontCharacter": "\\E049", + "fontColor": "#498ba7" + }, + "_ionic": { + "fontCharacter": "\\E049", + "fontColor": "#519aba" + }, + "_jade_light": { + "fontCharacter": "\\E04A", + "fontColor": "#b8383d" + }, + "_jade": { + "fontCharacter": "\\E04A", + "fontColor": "#cc3e44" + }, + "_java_light": { + "fontCharacter": "\\E04B", + "fontColor": "#b8383d" + }, + "_java": { + "fontCharacter": "\\E04B", + "fontColor": "#cc3e44" + }, + "_javascript_light": { + "fontCharacter": "\\E04C", + "fontColor": "#b7b73b" + }, + "_javascript": { + "fontCharacter": "\\E04C", + "fontColor": "#cbcb41" + }, + "_javascript_1_light": { + "fontCharacter": "\\E04C", + "fontColor": "#cc6d2e" + }, + "_javascript_1": { + "fontCharacter": "\\E04C", + "fontColor": "#e37933" + }, + "_javascript_2_light": { + "fontCharacter": "\\E04C", + "fontColor": "#498ba7" + }, + "_javascript_2": { + "fontCharacter": "\\E04C", + "fontColor": "#519aba" + }, + "_jenkins_light": { + "fontCharacter": "\\E04D", + "fontColor": "#b8383d" + }, + "_jenkins": { + "fontCharacter": "\\E04D", + "fontColor": "#cc3e44" + }, + "_jinja_light": { + "fontCharacter": "\\E04E", + "fontColor": "#b8383d" + }, + "_jinja": { + "fontCharacter": "\\E04E", + "fontColor": "#cc3e44" + }, + "_json_light": { + "fontCharacter": "\\E050", + "fontColor": "#b7b73b" + }, + "_json": { + "fontCharacter": "\\E050", + "fontColor": "#cbcb41" + }, + "_json_1_light": { + "fontCharacter": "\\E050", + "fontColor": "#7fae42" + }, + "_json_1": { + "fontCharacter": "\\E050", + "fontColor": "#8dc149" + }, + "_julia_light": { + "fontCharacter": "\\E051", + "fontColor": "#9068b0" + }, + "_julia": { + "fontCharacter": "\\E051", + "fontColor": "#a074c4" + }, + "_karma_light": { + "fontCharacter": "\\E052", + "fontColor": "#7fae42" + }, + "_karma": { + "fontCharacter": "\\E052", + "fontColor": "#8dc149" + }, + "_kotlin_light": { + "fontCharacter": "\\E053", + "fontColor": "#cc6d2e" + }, + "_kotlin": { + "fontCharacter": "\\E053", + "fontColor": "#e37933" + }, + "_less_light": { + "fontCharacter": "\\E054", + "fontColor": "#498ba7" + }, + "_less": { + "fontCharacter": "\\E054", + "fontColor": "#519aba" + }, + "_license_light": { + "fontCharacter": "\\E055", + "fontColor": "#b7b73b" + }, + "_license": { + "fontCharacter": "\\E055", + "fontColor": "#cbcb41" + }, + "_license_1_light": { + "fontCharacter": "\\E055", + "fontColor": "#cc6d2e" + }, + "_license_1": { + "fontCharacter": "\\E055", + "fontColor": "#e37933" + }, + "_license_2_light": { + "fontCharacter": "\\E055", + "fontColor": "#b8383d" + }, + "_license_2": { + "fontCharacter": "\\E055", + "fontColor": "#cc3e44" + }, + "_liquid_light": { + "fontCharacter": "\\E056", + "fontColor": "#7fae42" + }, + "_liquid": { + "fontCharacter": "\\E056", + "fontColor": "#8dc149" + }, + "_livescript_light": { + "fontCharacter": "\\E057", + "fontColor": "#498ba7" + }, + "_livescript": { + "fontCharacter": "\\E057", + "fontColor": "#519aba" + }, + "_lock_light": { + "fontCharacter": "\\E058", + "fontColor": "#7fae42" + }, + "_lock": { + "fontCharacter": "\\E058", + "fontColor": "#8dc149" + }, + "_lua_light": { + "fontCharacter": "\\E059", + "fontColor": "#498ba7" + }, + "_lua": { + "fontCharacter": "\\E059", + "fontColor": "#519aba" + }, + "_makefile_light": { + "fontCharacter": "\\E05A", + "fontColor": "#cc6d2e" + }, + "_makefile": { + "fontCharacter": "\\E05A", + "fontColor": "#e37933" + }, + "_makefile_1_light": { + "fontCharacter": "\\E05A", + "fontColor": "#9068b0" + }, + "_makefile_1": { + "fontCharacter": "\\E05A", + "fontColor": "#a074c4" + }, + "_makefile_2_light": { + "fontCharacter": "\\E05A", + "fontColor": "#627379" + }, + "_makefile_2": { + "fontCharacter": "\\E05A", + "fontColor": "#6d8086" + }, + "_makefile_3_light": { + "fontCharacter": "\\E05A", + "fontColor": "#498ba7" + }, + "_makefile_3": { + "fontCharacter": "\\E05A", + "fontColor": "#519aba" + }, + "_markdown_light": { + "fontCharacter": "\\E05B", + "fontColor": "#498ba7" + }, + "_markdown": { + "fontCharacter": "\\E05B", + "fontColor": "#519aba" + }, + "_maven_light": { + "fontCharacter": "\\E05C", + "fontColor": "#b8383d" + }, + "_maven": { + "fontCharacter": "\\E05C", + "fontColor": "#cc3e44" + }, + "_mdo_light": { + "fontCharacter": "\\E05D", + "fontColor": "#b8383d" + }, + "_mdo": { + "fontCharacter": "\\E05D", + "fontColor": "#cc3e44" + }, + "_mustache_light": { + "fontCharacter": "\\E05E", + "fontColor": "#cc6d2e" + }, + "_mustache": { + "fontCharacter": "\\E05E", + "fontColor": "#e37933" + }, + "_npm_light": { + "fontCharacter": "\\E060", + "fontColor": "#3b4b52" + }, + "_npm": { + "fontCharacter": "\\E060", + "fontColor": "#41535b" + }, + "_npm_1_light": { + "fontCharacter": "\\E060", + "fontColor": "#b8383d" + }, + "_npm_1": { + "fontCharacter": "\\E060", + "fontColor": "#cc3e44" + }, + "_npm_ignored_light": { + "fontCharacter": "\\E061", + "fontColor": "#3b4b52" + }, + "_npm_ignored": { + "fontCharacter": "\\E061", + "fontColor": "#41535b" + }, + "_nunjucks_light": { + "fontCharacter": "\\E062", + "fontColor": "#7fae42" + }, + "_nunjucks": { + "fontCharacter": "\\E062", + "fontColor": "#8dc149" + }, + "_ocaml_light": { + "fontCharacter": "\\E063", + "fontColor": "#cc6d2e" + }, + "_ocaml": { + "fontCharacter": "\\E063", + "fontColor": "#e37933" + }, + "_odata_light": { + "fontCharacter": "\\E064", + "fontColor": "#cc6d2e" + }, + "_odata": { + "fontCharacter": "\\E064", + "fontColor": "#e37933" + }, + "_pddl_light": { + "fontCharacter": "\\E065", + "fontColor": "#9068b0" + }, + "_pddl": { + "fontCharacter": "\\E065", + "fontColor": "#a074c4" + }, + "_pdf_light": { + "fontCharacter": "\\E066", + "fontColor": "#b8383d" + }, + "_pdf": { + "fontCharacter": "\\E066", + "fontColor": "#cc3e44" + }, + "_perl_light": { + "fontCharacter": "\\E067", + "fontColor": "#498ba7" + }, + "_perl": { + "fontCharacter": "\\E067", + "fontColor": "#519aba" + }, + "_photoshop_light": { + "fontCharacter": "\\E068", + "fontColor": "#498ba7" + }, + "_photoshop": { + "fontCharacter": "\\E068", + "fontColor": "#519aba" + }, + "_php_light": { + "fontCharacter": "\\E069", + "fontColor": "#9068b0" + }, + "_php": { + "fontCharacter": "\\E069", + "fontColor": "#a074c4" + }, + "_plan_light": { + "fontCharacter": "\\E06A", + "fontColor": "#7fae42" + }, + "_plan": { + "fontCharacter": "\\E06A", + "fontColor": "#8dc149" + }, + "_platformio_light": { + "fontCharacter": "\\E06B", + "fontColor": "#cc6d2e" + }, + "_platformio": { + "fontCharacter": "\\E06B", + "fontColor": "#e37933" + }, + "_powershell_light": { + "fontCharacter": "\\E06C", + "fontColor": "#498ba7" + }, + "_powershell": { + "fontCharacter": "\\E06C", + "fontColor": "#519aba" + }, + "_prolog_light": { + "fontCharacter": "\\E06E", + "fontColor": "#cc6d2e" + }, + "_prolog": { + "fontCharacter": "\\E06E", + "fontColor": "#e37933" + }, + "_pug_light": { + "fontCharacter": "\\E06F", + "fontColor": "#b8383d" + }, + "_pug": { + "fontCharacter": "\\E06F", + "fontColor": "#cc3e44" + }, + "_puppet_light": { + "fontCharacter": "\\E070", + "fontColor": "#b7b73b" + }, + "_puppet": { + "fontCharacter": "\\E070", + "fontColor": "#cbcb41" + }, + "_python_light": { + "fontCharacter": "\\E071", + "fontColor": "#498ba7" + }, + "_python": { + "fontCharacter": "\\E071", + "fontColor": "#519aba" + }, + "_react_light": { + "fontCharacter": "\\E073", + "fontColor": "#498ba7" + }, + "_react": { + "fontCharacter": "\\E073", + "fontColor": "#519aba" + }, + "_react_1_light": { + "fontCharacter": "\\E073", + "fontColor": "#cc6d2e" + }, + "_react_1": { + "fontCharacter": "\\E073", + "fontColor": "#e37933" + }, + "_react_2_light": { + "fontCharacter": "\\E073", + "fontColor": "#b7b73b" + }, + "_react_2": { + "fontCharacter": "\\E073", + "fontColor": "#cbcb41" + }, + "_reasonml_light": { + "fontCharacter": "\\E074", + "fontColor": "#b8383d" + }, + "_reasonml": { + "fontCharacter": "\\E074", + "fontColor": "#cc3e44" + }, + "_rmd_light": { + "fontColor": "#498ba7" + }, + "_rmd": { + "fontColor": "#519aba" + }, + "_rollup_light": { + "fontCharacter": "\\E075", + "fontColor": "#b8383d" + }, + "_rollup": { + "fontCharacter": "\\E075", + "fontColor": "#cc3e44" + }, + "_ruby_light": { + "fontCharacter": "\\E076", + "fontColor": "#b8383d" + }, + "_ruby": { + "fontCharacter": "\\E076", + "fontColor": "#cc3e44" + }, + "_rust_light": { + "fontCharacter": "\\E077", + "fontColor": "#627379" + }, + "_rust": { + "fontCharacter": "\\E077", + "fontColor": "#6d8086" + }, + "_salesforce_light": { + "fontCharacter": "\\E078", + "fontColor": "#498ba7" + }, + "_salesforce": { + "fontCharacter": "\\E078", + "fontColor": "#519aba" + }, + "_sass_light": { + "fontCharacter": "\\E079", + "fontColor": "#dd4b78" + }, + "_sass": { + "fontCharacter": "\\E079", + "fontColor": "#f55385" + }, + "_sbt_light": { + "fontCharacter": "\\E07A", + "fontColor": "#498ba7" + }, + "_sbt": { + "fontCharacter": "\\E07A", + "fontColor": "#519aba" + }, + "_scala_light": { + "fontCharacter": "\\E07B", + "fontColor": "#b8383d" + }, + "_scala": { + "fontCharacter": "\\E07B", + "fontColor": "#cc3e44" + }, + "_shell_light": { + "fontCharacter": "\\E07E", + "fontColor": "#455155" + }, + "_shell": { + "fontCharacter": "\\E07E", + "fontColor": "#4d5a5e" + }, + "_slim_light": { + "fontCharacter": "\\E07F", + "fontColor": "#cc6d2e" + }, + "_slim": { + "fontCharacter": "\\E07F", + "fontColor": "#e37933" + }, + "_smarty_light": { + "fontCharacter": "\\E080", + "fontColor": "#b7b73b" + }, + "_smarty": { + "fontCharacter": "\\E080", + "fontColor": "#cbcb41" + }, + "_spring_light": { + "fontCharacter": "\\E081", + "fontColor": "#7fae42" + }, + "_spring": { + "fontCharacter": "\\E081", + "fontColor": "#8dc149" + }, + "_stylelint_light": { + "fontCharacter": "\\E082", + "fontColor": "#bfc2c1" + }, + "_stylelint": { + "fontCharacter": "\\E082", + "fontColor": "#d4d7d6" + }, + "_stylelint_1_light": { + "fontCharacter": "\\E082", + "fontColor": "#455155" + }, + "_stylelint_1": { + "fontCharacter": "\\E082", + "fontColor": "#4d5a5e" + }, + "_stylus_light": { + "fontCharacter": "\\E083", + "fontColor": "#7fae42" + }, + "_stylus": { + "fontCharacter": "\\E083", + "fontColor": "#8dc149" + }, + "_sublime_light": { + "fontCharacter": "\\E084", + "fontColor": "#cc6d2e" + }, + "_sublime": { + "fontCharacter": "\\E084", + "fontColor": "#e37933" + }, + "_svg_light": { + "fontCharacter": "\\E085", + "fontColor": "#9068b0" + }, + "_svg": { + "fontCharacter": "\\E085", + "fontColor": "#a074c4" + }, + "_svg_1_light": { + "fontCharacter": "\\E085", + "fontColor": "#498ba7" + }, + "_svg_1": { + "fontCharacter": "\\E085", + "fontColor": "#519aba" + }, + "_swift_light": { + "fontCharacter": "\\E086", + "fontColor": "#cc6d2e" + }, + "_swift": { + "fontCharacter": "\\E086", + "fontColor": "#e37933" + }, + "_terraform_light": { + "fontCharacter": "\\E087", + "fontColor": "#9068b0" + }, + "_terraform": { + "fontCharacter": "\\E087", + "fontColor": "#a074c4" + }, + "_tex_light": { + "fontCharacter": "\\E088", + "fontColor": "#498ba7" + }, + "_tex": { + "fontCharacter": "\\E088", + "fontColor": "#519aba" + }, + "_tex_1_light": { + "fontCharacter": "\\E088", + "fontColor": "#b7b73b" + }, + "_tex_1": { + "fontCharacter": "\\E088", + "fontColor": "#cbcb41" + }, + "_tex_2_light": { + "fontCharacter": "\\E088", + "fontColor": "#cc6d2e" + }, + "_tex_2": { + "fontCharacter": "\\E088", + "fontColor": "#e37933" + }, + "_tex_3_light": { + "fontCharacter": "\\E088", + "fontColor": "#bfc2c1" + }, + "_tex_3": { + "fontCharacter": "\\E088", + "fontColor": "#d4d7d6" + }, + "_todo": { + "fontCharacter": "\\E08A" + }, + "_tsconfig_light": { + "fontCharacter": "\\E08B", + "fontColor": "#498ba7" + }, + "_tsconfig": { + "fontCharacter": "\\E08B", + "fontColor": "#519aba" + }, + "_twig_light": { + "fontCharacter": "\\E08C", + "fontColor": "#7fae42" + }, + "_twig": { + "fontCharacter": "\\E08C", + "fontColor": "#8dc149" + }, + "_typescript_light": { + "fontCharacter": "\\E08D", + "fontColor": "#498ba7" + }, + "_typescript": { + "fontCharacter": "\\E08D", + "fontColor": "#519aba" + }, + "_typescript_1_light": { + "fontCharacter": "\\E08D", + "fontColor": "#b7b73b" + }, + "_typescript_1": { + "fontCharacter": "\\E08D", + "fontColor": "#cbcb41" + }, + "_vala_light": { + "fontCharacter": "\\E08E", + "fontColor": "#627379" + }, + "_vala": { + "fontCharacter": "\\E08E", + "fontColor": "#6d8086" + }, + "_video_light": { + "fontCharacter": "\\E08F", + "fontColor": "#dd4b78" + }, + "_video": { + "fontCharacter": "\\E08F", + "fontColor": "#f55385" + }, + "_vue_light": { + "fontCharacter": "\\E090", + "fontColor": "#7fae42" + }, + "_vue": { + "fontCharacter": "\\E090", + "fontColor": "#8dc149" + }, + "_wasm_light": { + "fontCharacter": "\\E091", + "fontColor": "#9068b0" + }, + "_wasm": { + "fontCharacter": "\\E091", + "fontColor": "#a074c4" + }, + "_wat_light": { + "fontCharacter": "\\E092", + "fontColor": "#9068b0" + }, + "_wat": { + "fontCharacter": "\\E092", + "fontColor": "#a074c4" + }, + "_webpack_light": { + "fontCharacter": "\\E093", + "fontColor": "#498ba7" + }, + "_webpack": { + "fontCharacter": "\\E093", + "fontColor": "#519aba" + }, + "_wgt_light": { + "fontCharacter": "\\E094", + "fontColor": "#498ba7" + }, + "_wgt": { + "fontCharacter": "\\E094", + "fontColor": "#519aba" + }, + "_windows_light": { + "fontCharacter": "\\E095", + "fontColor": "#498ba7" + }, + "_windows": { + "fontCharacter": "\\E095", + "fontColor": "#519aba" + }, + "_word_light": { + "fontCharacter": "\\E096", + "fontColor": "#498ba7" + }, + "_word": { + "fontCharacter": "\\E096", + "fontColor": "#519aba" + }, + "_xls_light": { + "fontCharacter": "\\E097", + "fontColor": "#7fae42" + }, + "_xls": { + "fontCharacter": "\\E097", + "fontColor": "#8dc149" + }, + "_xml_light": { + "fontCharacter": "\\E098", + "fontColor": "#cc6d2e" + }, + "_xml": { + "fontCharacter": "\\E098", + "fontColor": "#e37933" + }, + "_yarn_light": { + "fontCharacter": "\\E099", + "fontColor": "#498ba7" + }, + "_yarn": { + "fontCharacter": "\\E099", + "fontColor": "#519aba" + }, + "_yml_light": { + "fontCharacter": "\\E09A", + "fontColor": "#9068b0" + }, + "_yml": { + "fontCharacter": "\\E09A", + "fontColor": "#a074c4" + }, + "_zip_light": { + "fontCharacter": "\\E09B", + "fontColor": "#b8383d" + }, + "_zip": { + "fontCharacter": "\\E09B", + "fontColor": "#cc3e44" + }, + "_zip_1_light": { + "fontCharacter": "\\E09B", + "fontColor": "#627379" + }, + "_zip_1": { + "fontCharacter": "\\E09B", + "fontColor": "#6d8086" + } + }, + "file": "_default", + "fileExtensions": { + "sdfg": "_sdfg_file", + "bsl": "_bsl", + "mdo": "_mdo", + "asm": "_asm", + "s": "_asm", + "h": "_c_1", + "aspx": "_html", + "ascx": "_html_1", + "asax": "_html_2", + "master": "_html_2", + "hh": "_cpp_1", + "hpp": "_cpp_1", + "hxx": "_cpp_1", + "edn": "_clojure_1", + "cfc": "_coldfusion", + "cfm": "_coldfusion", + "litcoffee": "_coffee", + "config": "_config", + "cfg": "_config", + "conf": "_config", + "cr": "_crystal", + "ecr": "_crystal_embedded", + "slang": "_crystal_embedded", + "cson": "_json", + "css.map": "_css", + "sss": "_css", + "csv": "_csv", + "xls": "_xls", + "xlsx": "_xls", + "cake": "_cake", + "ctp": "_cake_php", + "d": "_d", + "doc": "_word", + "docx": "_word", + "ejs": "_ejs", + "ex": "_elixir", + "exs": "_elixir_script", + "elm": "_elm", + "ico": "_favicon", + "gitignore": "_git", + "gitconfig": "_git", + "gitkeep": "_git", + "gitattributes": "_git", + "gitmodules": "_git", + "slide": "_go", + "article": "_go", + "gradle": "_gradle", + "gsp": "_grails", + "gql": "_graphql", + "graphql": "_graphql", + "haml": "_haml", + "hs": "_haskell", + "lhs": "_haskell", + "hx": "_haxe", + "hxs": "_haxe_1", + "hxp": "_haxe_2", + "hxml": "_haxe_3", + "class": "_java", + "classpath": "_java", + "properties": "_java", + "js.map": "_javascript", + "spec.js": "_javascript_1", + "test.js": "_javascript_1", + "es": "_javascript", + "es5": "_javascript", + "es7": "_javascript", + "jinja": "_jinja", + "jinja2": "_jinja", + "jl": "_julia", + "kt": "_kotlin", + "kts": "_kotlin", + "dart": "_dart", + "liquid": "_liquid", + "ls": "_livescript", + "argdown": "_argdown", + "ad": "_argdown", + "mustache": "_mustache", + "stache": "_mustache", + "njk": "_nunjucks", + "nunjucks": "_nunjucks", + "nunjs": "_nunjucks", + "nunj": "_nunjucks", + "njs": "_nunjucks", + "nj": "_nunjucks", + "npm-debug.log": "_npm", + "npmignore": "_npm_1", + "npmrc": "_npm_1", + "ml": "_ocaml", + "mli": "_ocaml", + "cmx": "_ocaml", + "cmxa": "_ocaml", + "odata": "_odata", + "php.inc": "_php", + "pddl": "_pddl", + "plan": "_plan", + "happenings": "_happenings", + "pug": "_pug", + "pp": "_puppet", + "epp": "_puppet", + "spec.jsx": "_react_1", + "test.jsx": "_react_1", + "cjsx": "_react", + "spec.tsx": "_react_2", + "test.tsx": "_react_2", + "re": "_reasonml", + "r": "_R", + "rmd": "_rmd", + "erb": "_html_erb", + "erb.html": "_html_erb", + "html.erb": "_html_erb", + "sass": "_sass", + "springbeans": "_spring", + "slim": "_slim", + "smarty.tpl": "_smarty", + "sbt": "_sbt", + "scala": "_scala", + "sol": "_ethereum", + "styl": "_stylus", + "tf": "_terraform", + "tf.json": "_terraform", + "tfvars": "_terraform", + "tex": "_tex", + "sty": "_tex_1", + "dtx": "_tex_2", + "ins": "_tex_3", + "toml": "_config", + "twig": "_twig", + "spec.ts": "_typescript_1", + "test.ts": "_typescript_1", + "vala": "_vala", + "vapi": "_vala", + "vue": "_vue", + "wasm": "_wasm", + "wat": "_wat", + "pro": "_prolog", + "jar": "_zip", + "zip": "_zip_1", + "wgt": "_wgt", + "ai": "_illustrator", + "psd": "_photoshop", + "pdf": "_pdf", + "eot": "_font", + "ttf": "_font", + "woff": "_font", + "woff2": "_font", + "gif": "_image", + "jpg": "_image", + "jpeg": "_image", + "png": "_image", + "pxm": "_image", + "svg": "_svg", + "svgx": "_image", + "sublime-project": "_sublime", + "sublime-workspace": "_sublime", + "component": "_salesforce", + "cls": "_salesforce", + "fish": "_shell", + "mov": "_video", + "ogv": "_video", + "webm": "_video", + "avi": "_video", + "mpg": "_video", + "mp4": "_video", + "mp3": "_audio", + "ogg": "_audio", + "wav": "_audio", + "flac": "_audio", + "3ds": "_svg_1", + "3dm": "_svg_1", + "stl": "_svg_1", + "obj": "_svg_1", + "dae": "_svg_1", + "babelrc": "_babel", + "babelrc.js": "_babel", + "babelrc.cjs": "_babel", + "bowerrc": "_bower", + "dockerignore": "_docker_1", + "codeclimate.yml": "_code-climate", + "eslintrc": "_eslint", + "eslintrc.js": "_eslint", + "eslintrc.yaml": "_eslint", + "eslintrc.yml": "_eslint", + "eslintrc.json": "_eslint", + "eslintignore": "_eslint_1", + "firebaserc": "_firebase", + "jshintrc": "_javascript_2", + "jscsrc": "_javascript_2", + "stylelintrc": "_stylelint", + "stylelintrc.json": "_stylelint", + "stylelintrc.yaml": "_stylelint", + "stylelintrc.yml": "_stylelint", + "stylelintrc.js": "_stylelint", + "stylelintignore": "_stylelint_1", + "direnv": "_config", + "env": "_config", + "static": "_config", + "editorconfig": "_config", + "slugignore": "_config", + "tmp": "_clock_1", + "htaccess": "_config", + "key": "_lock", + "cert": "_lock", + "ds_store": "_ignored" + }, + "fileNames": { + "mix": "_hex", + "karma.conf.js": "_karma", + "karma.conf.coffee": "_karma", + "readme.md": "_info", + "changelog.md": "_clock", + "changelog": "_clock", + "changes.md": "_clock", + "version.md": "_clock", + "version": "_clock", + "mvnw": "_maven", + "swagger.json": "_json_1", + "swagger.yml": "_json_1", + "swagger.yaml": "_json_1", + "mime.types": "_config", + "jenkinsfile": "_jenkins", + "babel.config.js": "_babel", + "babel.config.json": "_babel", + "babel.config.cjs": "_babel", + "bower.json": "_bower", + "docker-healthcheck": "_docker_2", + "docker-compose.yml": "_docker_3", + "docker-compose.yaml": "_docker_3", + "docker-compose.override.yml": "_docker_3", + "docker-compose.override.yaml": "_docker_3", + "firebase.json": "_firebase", + "geckodriver": "_firefox", + "gruntfile.js": "_grunt", + "gruntfile.babel.js": "_grunt", + "gruntfile.coffee": "_grunt", + "gulpfile": "_gulp", + "gulpfile.js": "_gulp", + "ionic.config.json": "_ionic", + "ionic.project": "_ionic", + "platformio.ini": "_platformio", + "rollup.config.js": "_rollup", + "sass-lint.yml": "_sass", + "stylelint.config.js": "_stylelint", + "yarn.clean": "_yarn", + "yarn.lock": "_yarn", + "webpack.config.js": "_webpack", + "webpack.config.build.js": "_webpack", + "webpack.common.js": "_webpack", + "webpack.dev.js": "_webpack", + "webpack.prod.js": "_webpack", + "license": "_license", + "licence": "_license", + "copying": "_license", + "compiling": "_license_1", + "contributing": "_license_2", + "qmakefile": "_makefile_1", + "omakefile": "_makefile_2", + "cmakelists.txt": "_makefile_3", + "procfile": "_heroku", + "todo": "_todo", + "npm-debug.log": "_npm_ignored" + }, + "languageIds": { + "bat": "_windows", + "clojure": "_clojure", + "coffeescript": "_coffee", + "jsonc": "_json", + "c": "_c", + "cpp": "_cpp", + "csharp": "_c-sharp", + "css": "_css", + "dockerfile": "_docker", + "fsharp": "_f-sharp", + "go": "_go2", + "groovy": "_grails", + "handlebars": "_mustache", + "html": "_html_3", + "java": "_java", + "javascriptreact": "_react", + "javascript": "_javascript", + "json": "_json", + "less": "_less", + "lua": "_lua", + "makefile": "_makefile", + "markdown": "_markdown", + "objective-c": "_c_2", + "objective-cpp": "_cpp_2", + "perl": "_perl", + "php": "_php", + "powershell": "_powershell", + "jade": "_jade", + "python": "_python", + "r": "_R", + "razor": "_html", + "ruby": "_ruby", + "rust": "_rust", + "scss": "_sass", + "search-result": "_code-search", + "shellscript": "_shell", + "sql": "_db", + "swift": "_swift", + "typescript": "_typescript", + "typescriptreact": "_react", + "xml": "_xml", + "yaml": "_yml", + "argdown": "_argdown", + "elm": "_elm", + "ocaml": "_ocaml", + "nunjucks": "_nunjucks", + "mustache": "_mustache", + "erb": "_html_erb", + "terraform": "_terraform", + "vue": "_vue", + "sass": "_sass", + "kotlin": "_kotlin", + "jinja": "_jinja", + "haxe": "_haxe", + "haskell": "_haskell", + "gradle": "_gradle", + "elixir": "_elixir", + "haml": "_haml", + "stylus": "_stylus", + "vala": "_vala", + "todo": "_todo", + "postcss": "_css", + "django-html": "_html_3" + }, + "light": { + "file": "_default_light", + "fileExtensions": { + "bsl": "_bsl_light", + "mdo": "_mdo_light", + "asm": "_asm_light", + "s": "_asm_light", + "h": "_c_1_light", + "aspx": "_html_light", + "ascx": "_html_1_light", + "asax": "_html_2_light", + "master": "_html_2_light", + "hh": "_cpp_1_light", + "hpp": "_cpp_1_light", + "hxx": "_cpp_1_light", + "edn": "_clojure_1_light", + "cfc": "_coldfusion_light", + "cfm": "_coldfusion_light", + "litcoffee": "_coffee_light", + "config": "_config_light", + "cfg": "_config_light", + "conf": "_config_light", + "cr": "_crystal_light", + "ecr": "_crystal_embedded_light", + "slang": "_crystal_embedded_light", + "cson": "_json_light", + "css.map": "_css_light", + "sss": "_css_light", + "csv": "_csv_light", + "xls": "_xls_light", + "xlsx": "_xls_light", + "cake": "_cake_light", + "ctp": "_cake_php_light", + "d": "_d_light", + "doc": "_word_light", + "docx": "_word_light", + "ejs": "_ejs_light", + "ex": "_elixir_light", + "exs": "_elixir_script_light", + "elm": "_elm_light", + "ico": "_favicon_light", + "gitignore": "_git_light", + "gitconfig": "_git_light", + "gitkeep": "_git_light", + "gitattributes": "_git_light", + "gitmodules": "_git_light", + "slide": "_go_light", + "article": "_go_light", + "gradle": "_gradle_light", + "gsp": "_grails_light", + "gql": "_graphql_light", + "graphql": "_graphql_light", + "haml": "_haml_light", + "hs": "_haskell_light", + "lhs": "_haskell_light", + "hx": "_haxe_light", + "hxs": "_haxe_1_light", + "hxp": "_haxe_2_light", + "hxml": "_haxe_3_light", + "class": "_java_light", + "classpath": "_java_light", + "properties": "_java_light", + "js.map": "_javascript_light", + "spec.js": "_javascript_1_light", + "test.js": "_javascript_1_light", + "es": "_javascript_light", + "es5": "_javascript_light", + "es7": "_javascript_light", + "jinja": "_jinja_light", + "jinja2": "_jinja_light", + "jl": "_julia_light", + "kt": "_kotlin_light", + "kts": "_kotlin_light", + "dart": "_dart_light", + "liquid": "_liquid_light", + "ls": "_livescript_light", + "argdown": "_argdown_light", + "ad": "_argdown_light", + "mustache": "_mustache_light", + "stache": "_mustache_light", + "njk": "_nunjucks_light", + "nunjucks": "_nunjucks_light", + "nunjs": "_nunjucks_light", + "nunj": "_nunjucks_light", + "njs": "_nunjucks_light", + "nj": "_nunjucks_light", + "npm-debug.log": "_npm_light", + "npmignore": "_npm_1_light", + "npmrc": "_npm_1_light", + "ml": "_ocaml_light", + "mli": "_ocaml_light", + "cmx": "_ocaml_light", + "cmxa": "_ocaml_light", + "odata": "_odata_light", + "php.inc": "_php_light", + "pddl": "_pddl_light", + "plan": "_plan_light", + "happenings": "_happenings_light", + "pug": "_pug_light", + "pp": "_puppet_light", + "epp": "_puppet_light", + "spec.jsx": "_react_1_light", + "test.jsx": "_react_1_light", + "cjsx": "_react_light", + "spec.tsx": "_react_2_light", + "test.tsx": "_react_2_light", + "re": "_reasonml_light", + "r": "_R_light", + "rmd": "_rmd_light", + "erb": "_html_erb_light", + "erb.html": "_html_erb_light", + "html.erb": "_html_erb_light", + "sass": "_sass_light", + "springbeans": "_spring_light", + "slim": "_slim_light", + "smarty.tpl": "_smarty_light", + "sbt": "_sbt_light", + "scala": "_scala_light", + "sol": "_ethereum_light", + "styl": "_stylus_light", + "tf": "_terraform_light", + "tf.json": "_terraform_light", + "tfvars": "_terraform_light", + "tex": "_tex_light", + "sty": "_tex_1_light", + "dtx": "_tex_2_light", + "ins": "_tex_3_light", + "toml": "_config_light", + "twig": "_twig_light", + "spec.ts": "_typescript_1_light", + "test.ts": "_typescript_1_light", + "vala": "_vala_light", + "vapi": "_vala_light", + "vue": "_vue_light", + "wasm": "_wasm_light", + "wat": "_wat_light", + "pro": "_prolog_light", + "jar": "_zip_light", + "zip": "_zip_1_light", + "wgt": "_wgt_light", + "ai": "_illustrator_light", + "psd": "_photoshop_light", + "pdf": "_pdf_light", + "eot": "_font_light", + "ttf": "_font_light", + "woff": "_font_light", + "woff2": "_font_light", + "gif": "_image_light", + "jpg": "_image_light", + "jpeg": "_image_light", + "png": "_image_light", + "pxm": "_image_light", + "svg": "_svg_light", + "svgx": "_image_light", + "sublime-project": "_sublime_light", + "sublime-workspace": "_sublime_light", + "component": "_salesforce_light", + "cls": "_salesforce_light", + "fish": "_shell_light", + "mov": "_video_light", + "ogv": "_video_light", + "webm": "_video_light", + "avi": "_video_light", + "mpg": "_video_light", + "mp4": "_video_light", + "mp3": "_audio_light", + "ogg": "_audio_light", + "wav": "_audio_light", + "flac": "_audio_light", + "3ds": "_svg_1_light", + "3dm": "_svg_1_light", + "stl": "_svg_1_light", + "obj": "_svg_1_light", + "dae": "_svg_1_light", + "babelrc": "_babel_light", + "babelrc.js": "_babel_light", + "babelrc.cjs": "_babel_light", + "bowerrc": "_bower_light", + "dockerignore": "_docker_1_light", + "codeclimate.yml": "_code-climate_light", + "eslintrc": "_eslint_light", + "eslintrc.js": "_eslint_light", + "eslintrc.yaml": "_eslint_light", + "eslintrc.yml": "_eslint_light", + "eslintrc.json": "_eslint_light", + "eslintignore": "_eslint_1_light", + "firebaserc": "_firebase_light", + "jshintrc": "_javascript_2_light", + "jscsrc": "_javascript_2_light", + "stylelintrc": "_stylelint_light", + "stylelintrc.json": "_stylelint_light", + "stylelintrc.yaml": "_stylelint_light", + "stylelintrc.yml": "_stylelint_light", + "stylelintrc.js": "_stylelint_light", + "stylelintignore": "_stylelint_1_light", + "direnv": "_config_light", + "env": "_config_light", + "static": "_config_light", + "editorconfig": "_config_light", + "slugignore": "_config_light", + "tmp": "_clock_1_light", + "htaccess": "_config_light", + "key": "_lock_light", + "cert": "_lock_light", + "ds_store": "_ignored_light" + }, + "languageIds": { + "bat": "_windows_light", + "clojure": "_clojure_light", + "coffeescript": "_coffee_light", + "jsonc": "_json_light", + "c": "_c_light", + "cpp": "_cpp_light", + "csharp": "_c-sharp_light", + "css": "_css_light", + "dockerfile": "_docker_light", + "fsharp": "_f-sharp_light", + "go": "_go2_light", + "groovy": "_grails_light", + "handlebars": "_mustache_light", + "html": "_html_3_light", + "java": "_java_light", + "javascriptreact": "_react_light", + "javascript": "_javascript_light", + "json": "_json_light", + "less": "_less_light", + "lua": "_lua_light", + "makefile": "_makefile_light", + "markdown": "_markdown_light", + "objective-c": "_c_2_light", + "objective-cpp": "_cpp_2_light", + "perl": "_perl_light", + "php": "_php_light", + "powershell": "_powershell_light", + "jade": "_jade_light", + "python": "_python_light", + "r": "_R_light", + "razor": "_html_light", + "ruby": "_ruby_light", + "rust": "_rust_light", + "scss": "_sass_light", + "search-result": "_code-search_light", + "shellscript": "_shell_light", + "sql": "_db_light", + "swift": "_swift_light", + "typescript": "_typescript_light", + "typescriptreact": "_react_light", + "xml": "_xml_light", + "yaml": "_yml_light", + "argdown": "_argdown_light", + "elm": "_elm_light", + "ocaml": "_ocaml_light", + "nunjucks": "_nunjucks_light", + "mustache": "_mustache_light", + "erb": "_html_erb_light", + "terraform": "_terraform_light", + "vue": "_vue_light", + "sass": "_sass_light", + "kotlin": "_kotlin_light", + "jinja": "_jinja_light", + "haxe": "_haxe_light", + "haskell": "_haskell_light", + "gradle": "_gradle_light", + "elixir": "_elixir_light", + "haml": "_haml_light", + "stylus": "_stylus_light", + "vala": "_vala_light", + "postcss": "_css_light", + "django-html": "_html_3_light" + }, + "fileNames": { + "mix": "_hex_light", + "karma.conf.js": "_karma_light", + "karma.conf.coffee": "_karma_light", + "readme.md": "_info_light", + "changelog.md": "_clock_light", + "changelog": "_clock_light", + "changes.md": "_clock_light", + "version.md": "_clock_light", + "version": "_clock_light", + "mvnw": "_maven_light", + "swagger.json": "_json_1_light", + "swagger.yml": "_json_1_light", + "swagger.yaml": "_json_1_light", + "mime.types": "_config_light", + "jenkinsfile": "_jenkins_light", + "babel.config.js": "_babel_light", + "babel.config.json": "_babel_light", + "babel.config.cjs": "_babel_light", + "bower.json": "_bower_light", + "docker-healthcheck": "_docker_2_light", + "docker-compose.yml": "_docker_3_light", + "docker-compose.yaml": "_docker_3_light", + "docker-compose.override.yml": "_docker_3_light", + "docker-compose.override.yaml": "_docker_3_light", + "firebase.json": "_firebase_light", + "geckodriver": "_firefox_light", + "gruntfile.js": "_grunt_light", + "gruntfile.babel.js": "_grunt_light", + "gruntfile.coffee": "_grunt_light", + "gulpfile": "_gulp_light", + "gulpfile.js": "_gulp_light", + "ionic.config.json": "_ionic_light", + "ionic.project": "_ionic_light", + "platformio.ini": "_platformio_light", + "rollup.config.js": "_rollup_light", + "sass-lint.yml": "_sass_light", + "stylelint.config.js": "_stylelint_light", + "yarn.clean": "_yarn_light", + "yarn.lock": "_yarn_light", + "webpack.config.js": "_webpack_light", + "webpack.config.build.js": "_webpack_light", + "webpack.common.js": "_webpack_light", + "webpack.dev.js": "_webpack_light", + "webpack.prod.js": "_webpack_light", + "license": "_license_light", + "licence": "_license_light", + "copying": "_license_light", + "compiling": "_license_1_light", + "contributing": "_license_2_light", + "qmakefile": "_makefile_1_light", + "omakefile": "_makefile_2_light", + "cmakelists.txt": "_makefile_3_light", + "procfile": "_heroku_light", + "npm-debug.log": "_npm_ignored_light" + } + }, + "version": "https://github.com/jesseweed/seti-ui/commit/8f22764c37feb7f706465f5186132111a2401b6b" +} \ No newline at end of file diff --git a/fileicons/sdfg.svg b/fileicons/sdfg.svg new file mode 100644 index 0000000..e3f3e0f --- /dev/null +++ b/fileicons/sdfg.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/fileicons/seti.woff b/fileicons/seti.woff new file mode 100644 index 0000000..b4b8366 Binary files /dev/null and b/fileicons/seti.woff differ diff --git a/media/renderer.js b/media/renderer.js index a21c42b..ec16a96 100644 --- a/media/renderer.js +++ b/media/renderer.js @@ -24,11 +24,11 @@ class CanvasManager { this._destroying = false; - this.scale_origin = {x: 0, y: 0}; + this.scale_origin = { x: 0, y: 0 }; this.contention = 0; - this._svg = document.createElementNS("http://www.w3.org/2000/svg",'svg'); + this._svg = document.createElementNS("http://www.w3.org/2000/svg", 'svg'); this.user_transform = this._svg.createSVGMatrix(); @@ -40,8 +40,8 @@ class CanvasManager { } svgPoint(x, y) { - let pt = this._svg.createSVGPoint(); - pt.x=x; pt.y=y; + let pt = this._svg.createSVGPoint(); + pt.x = x; pt.y = y; return pt; } @@ -61,7 +61,7 @@ class CanvasManager { This is made for "easy" transforms and does not support saving/restoring */ - let svg = document.createElementNS("http://www.w3.org/2000/svg",'svg'); + let svg = document.createElementNS("http://www.w3.org/2000/svg", 'svg'); this.ctx._custom_transform_matrix = svg.createSVGMatrix(); // Save/Restore is not supported. @@ -70,50 +70,50 @@ class CanvasManager { }; let _ctx = this.ctx; let scale_func = _ctx.scale; - _ctx.scale = function(sx,sy) { - _ctx._custom_transform_matrix = _ctx._custom_transform_matrix.scaleNonUniform(sx,sy); + _ctx.scale = function (sx, sy) { + _ctx._custom_transform_matrix = _ctx._custom_transform_matrix.scaleNonUniform(sx, sy); checker(); return scale_func.call(_ctx, sx, sy); }; let translate_func = _ctx.translate; - _ctx.translate = function(sx,sy) { - _ctx._custom_transform_matrix = _ctx._custom_transform_matrix.translate(sx,sy); + _ctx.translate = function (sx, sy) { + _ctx._custom_transform_matrix = _ctx._custom_transform_matrix.translate(sx, sy); checker(); return translate_func.call(_ctx, sx, sy); }; let rotate_func = _ctx.rotate; - _ctx.rotate = function(r) { + _ctx.rotate = function (r) { _ctx._custom_transform_matrix = _ctx._custom_transform_matrix.rotate(r * 180.0 / Math.PI); checker(); return rotate_func.call(_ctx, r); }; let transform_func = _ctx.scale; - _ctx.transform = function(a,b,c,d,e,f){ - let m2 = svg.createSVGMatrix(); - m2.a=a; m2.b=b; m2.c=c; m2.d=d; m2.e=e; m2.f=f; + _ctx.transform = function (a, b, c, d, e, f) { + let m2 = svg.createSVGMatrix(); + m2.a = a; m2.b = b; m2.c = c; m2.d = d; m2.e = e; m2.f = f; _ctx._custom_transform_matrix = _ctx._custom_transform_matrix.multiply(m2); checker(); - return transform_func.call(_ctx,a,b,c,d,e,f); - }; + return transform_func.call(_ctx, a, b, c, d, e, f); + }; let setTransform_func = _ctx.setTransform; - _ctx.setTransform = function(a,b,c,d,e,f){ - _ctx._custom_transform_matrix.a = a; - _ctx._custom_transform_matrix.b = b; - _ctx._custom_transform_matrix.c = c; - _ctx._custom_transform_matrix.d = d; - _ctx._custom_transform_matrix.e = e; + _ctx.setTransform = function (a, b, c, d, e, f) { + _ctx._custom_transform_matrix.a = a; + _ctx._custom_transform_matrix.b = b; + _ctx._custom_transform_matrix.c = c; + _ctx._custom_transform_matrix.d = d; + _ctx._custom_transform_matrix.e = e; _ctx._custom_transform_matrix.f = f; checker(); - return setTransform_func.call(_ctx,a,b,c,d,e,f); - }; + return setTransform_func.call(_ctx, a, b, c, d, e, f); + }; - _ctx.custom_inverseTransformMultiply = function(x,y){ - let pt = svg.createSVGPoint(); - pt.x=x; pt.y=y; + _ctx.custom_inverseTransformMultiply = function (x, y) { + let pt = svg.createSVGPoint(); + pt.x = x; pt.y = y; checker(); - return pt.matrixTransform(_ctx._custom_transform_matrix.inverse()); - } + return pt.matrixTransform(_ctx._custom_transform_matrix.inverse()); + } } destroy() { @@ -123,7 +123,7 @@ class CanvasManager { addDrawable(obj) { this.drawables.push(obj); - this.indices.push({"c": CanvasManager.counter(), "d": obj}); + this.indices.push({ "c": CanvasManager.counter(), "d": obj }); } removeDrawable(drawable) { @@ -131,16 +131,16 @@ class CanvasManager { } clearDrawables() { - for(let x of this.drawables) { + for (let x of this.drawables) { x.destroy(); } this.drawables = []; this.indices = []; } - scale(diff, x=0, y=0) { + scale(diff, x = 0, y = 0) { this.stopAnimation(); - if(this.request_scale || this.contention > 0) { + if (this.request_scale || this.contention > 0) { return; } this.contention++; @@ -155,7 +155,7 @@ class CanvasManager { this.user_transform = this.user_transform.scale(sv, sv, 1, 0, 0, 0); this.scalef *= sv; this.user_transform = this.user_transform.translate(-pt.x, -pt.y); - + this.contention--; } @@ -172,31 +172,31 @@ class CanvasManager { if (rect.width > rect.height) { scale = canvas_w / rect.width; tx = -rect.x; - ty = -rect.y - (rect.height/2) + (canvas_h / scale / 2); + ty = -rect.y - (rect.height / 2) + (canvas_h / scale / 2); // Now other dimension does not fit, scale it as well if (rect.height * scale > canvas_h) { scale = canvas_h / rect.height; - tx = -rect.x - (rect.width/2) + (canvas_w / scale / 2); + tx = -rect.x - (rect.width / 2) + (canvas_w / scale / 2); ty = -rect.y; } } else { scale = canvas_h / rect.height; - tx = -rect.x - (rect.width/2) + (canvas_w / scale / 2); + tx = -rect.x - (rect.width / 2) + (canvas_w / scale / 2); ty = -rect.y; - + // Now other dimension does not fit, scale it as well if (rect.width * scale > canvas_w) { scale = canvas_w / rect.width; tx = -rect.x; - ty = -rect.y - (rect.height/2) + (canvas_h / scale / 2); + ty = -rect.y - (rect.height / 2) + (canvas_h / scale / 2); } } // Uniform scaling this.user_transform = this.user_transform.scale(scale, scale, 1, 0, 0, 0); this.user_transform = this.user_transform.translate(tx, ty); - this.scale_origin = {x: 0, y: 0}; + this.scale_origin = { x: 0, y: 0 }; this.scalef = 1.0; } @@ -215,7 +215,7 @@ class CanvasManager { * @param {*} state_parent_list List of parent elements to SDFG states */ translate_element(el, old_mousepos, new_mousepos, entire_graph, sdfg_list, - state_parent_list) { + state_parent_list) { this.stopAnimation(); // Edges connected to the moving element @@ -285,14 +285,14 @@ class CanvasManager { new_mousepos.x <= parent_left_border) { dx = min_x - el.points[1].x; } else if (target_x >= max_x || - new_mousepos.x >= parent_rigth_border) { + new_mousepos.x >= parent_rigth_border) { dx = max_x - el.points[1].x; } if (target_y <= min_y || new_mousepos.y <= parent_top_border) { dy = min_y - el.points[1].y; } else if (target_y >= max_y || - new_mousepos.y >= parent_bottom_border) { + new_mousepos.y >= parent_bottom_border) { dy = max_y - el.points[1].y; } } else { @@ -302,14 +302,14 @@ class CanvasManager { new_mousepos.x <= parent_left_border) { dx = min_x - el.x; } else if (target_x >= max_x || - new_mousepos.x >= parent_rigth_border) { + new_mousepos.x >= parent_rigth_border) { dx = max_x - el.x; } if (target_y <= min_y || new_mousepos.y <= parent_top_border) { dy = min_y - el.y; } else if (target_y >= max_y || - new_mousepos.y >= parent_bottom_border) { + new_mousepos.y >= parent_bottom_border) { dy = max_y - el.y; } } @@ -426,7 +426,7 @@ class CanvasManager { } draw(now = null) { - if(this._destroying) + if (this._destroying) return; let dt = now - this.prev_time; @@ -435,7 +435,7 @@ class CanvasManager { if (now) this.prev_time = now; - if(this.contention > 0) return; + if (this.contention > 0) return; this.contention += 1; let ctx = this.ctx; @@ -443,9 +443,11 @@ class CanvasManager { ctx.save(); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); + ctx.fillStyle = this.renderer.bgcolor; + ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height); ctx.restore(); - if(this.request_scale && this.contention == 1) { + if (this.request_scale && this.contention == 1) { // Reset the translation this.applyUserTransform(); this.request_scale = false; @@ -469,9 +471,9 @@ class CanvasManager { } function getQuadraticAngle(t, sx, sy, cp1x, cp1y, ex, ey) { - let dx = 2*(1-t)*(cp1x-sx) + 2*t*(ex-cp1x); - let dy = 2*(1-t)*(cp1y-sy) + 2*t*(ey-cp1y); - return -Math.atan2(dx, dy) + 0.5*Math.PI; + let dx = 2 * (1 - t) * (cp1x - sx) + 2 * t * (ex - cp1x); + let dy = 2 * (1 - t) * (cp1y - sy) + 2 * t * (ey - cp1y); + return -Math.atan2(dx, dy) + 0.5 * Math.PI; } function calculateBoundingBox(g) { @@ -491,13 +493,13 @@ function calculateBoundingBox(g) { } function boundingBox(elements) { - let bb = {x1: null, y1: null, x2: null, y2: null}; + let bb = { x1: null, y1: null, x2: null, y2: null }; elements.forEach(function (v) { let topleft = v.topleft(); if (bb.x1 === null || topleft.x < bb.x1) bb.x1 = topleft.x; if (bb.y1 === null || topleft.y < bb.y1) bb.y1 = topleft.y; - + let x2 = v.x + v.width / 2.0; let y2 = v.y + v.height / 2.0; @@ -505,7 +507,7 @@ function boundingBox(elements) { if (bb.y2 === null || y2 > bb.y2) bb.y2 = y2; }); - return {x: bb.x1, y: bb.y1, width: bb.x2 - bb.x1, height: bb.y2 - bb.y1}; + return { x: bb.x1, y: bb.y1, width: bb.x2 - bb.x1, height: bb.y2 - bb.y1 }; } function calculateEdgeBoundingBox(edge) { @@ -523,8 +525,10 @@ function calculateEdgeBoundingBox(edge) { bb.y2 = p.y > bb.y2 ? p.y : bb.y2; }); - bb = {'x': bb.x1, 'y': bb.y1, 'width': (bb.x2 - bb.x1), - 'height': (bb.y2 - bb.y1)}; + bb = { + 'x': bb.x1, 'y': bb.y1, 'width': (bb.x2 - bb.x1), + 'height': (bb.y2 - bb.y1) + }; if (bb.width <= 5) { bb.width = 10; bb.x -= 5; @@ -541,14 +545,14 @@ function calculateNodeSize(sdfg_state, node, ctx) { let inconnsize = 2 * LINEHEIGHT * node.attributes.layout.in_connectors.length - LINEHEIGHT; let outconnsize = 2 * LINEHEIGHT * node.attributes.layout.out_connectors.length - LINEHEIGHT; let maxwidth = Math.max(labelsize, inconnsize, outconnsize); - let maxheight = 2*LINEHEIGHT; - maxheight += 4*LINEHEIGHT; + let maxheight = 2 * LINEHEIGHT; + maxheight += 4 * LINEHEIGHT; let size = { width: maxwidth, height: maxheight } // add something to the size based on the shape of the node if (node.type === "AccessNode") { - size.height -= 4*LINEHEIGHT; + size.height -= 4 * LINEHEIGHT; size.width += size.height; } else if (node.type.endsWith("Entry")) { @@ -572,7 +576,7 @@ function calculateNodeSize(sdfg_state, node, ctx) { size.height /= 1.75; } else if (node.type === "Reduce") { - size.height -= 4*LINEHEIGHT; + size.height -= 4 * LINEHEIGHT; size.width *= 2; size.height = size.width / 3.0; } @@ -584,7 +588,7 @@ function calculateNodeSize(sdfg_state, node, ctx) { // Layout SDFG elements (states, nodes, scopes, nested SDFGs) function relayout_sdfg(ctx, sdfg, sdfg_list, state_parent_list) { - let STATE_MARGIN = 4*LINEHEIGHT; + let STATE_MARGIN = 4 * LINEHEIGHT; // Layout the SDFG as a dagre graph let g = new dagre.graphlib.Graph(); @@ -606,11 +610,13 @@ function relayout_sdfg(ctx, sdfg, sdfg_list, state_parent_list) { state_parent_list); stateinfo = calculateBoundingBox(state_g); } - stateinfo.width += 2*STATE_MARGIN; - stateinfo.height += 2*STATE_MARGIN; - g.setNode(state.id, new State({state: state, - layout: stateinfo, - graph: state_g}, state.id, sdfg)); + stateinfo.width += 2 * STATE_MARGIN; + stateinfo.height += 2 * STATE_MARGIN; + g.setNode(state.id, new State({ + state: state, + layout: stateinfo, + graph: state_g + }, state.id, sdfg)); }); sdfg.edges.forEach((edge, id) => { @@ -655,8 +661,10 @@ function relayout_sdfg(ctx, sdfg, sdfg_list, state_parent_list) { let state = g.node(sid); let topleft = state.topleft(); - offset_state(s, state, {x: topleft.x + STATE_MARGIN, - y: topleft.y + STATE_MARGIN}); + offset_state(s, state, { + x: topleft.x + STATE_MARGIN, + y: topleft.y + STATE_MARGIN + }); }); let bb = calculateBoundingBox(g); @@ -671,10 +679,10 @@ function relayout_sdfg(ctx, sdfg, sdfg_list, state_parent_list) { function relayout_state(ctx, sdfg_state, sdfg, sdfg_list, state_parent_list) { // layout the state as a dagre graph - let g = new dagre.graphlib.Graph({multigraph: true}); + let g = new dagre.graphlib.Graph({ multigraph: true }); // Set an object for the graph label - g.setGraph({ranksep: 30}); + g.setGraph({ ranksep: 30 }); g.setDefaultEdgeLabel(function (u, v) { return {}; }); @@ -708,12 +716,12 @@ function relayout_state(ctx, sdfg_state, sdfg, sdfg_list, state_parent_list) { if (node.type === "NestedSDFG") { nested_g = relayout_sdfg(ctx, node.attributes.sdfg, sdfg_list, state_parent_list); let sdfginfo = calculateBoundingBox(nested_g); - node.attributes.layout.width = sdfginfo.width + 2*LINEHEIGHT; - node.attributes.layout.height = sdfginfo.height + 2*LINEHEIGHT; + node.attributes.layout.width = sdfginfo.width + 2 * LINEHEIGHT; + node.attributes.layout.height = sdfginfo.height + 2 * LINEHEIGHT; } // Dynamically create node type - let obj = new SDFGElements[node.type]({node: node, graph: nested_g}, node.id, sdfg, sdfg_state.id); + let obj = new SDFGElements[node.type]({ node: node, graph: nested_g }, node.id, sdfg, sdfg_state.id); // If it's a nested SDFG, we need to record the node as all of its // state's parent node @@ -723,7 +731,7 @@ function relayout_state(ctx, sdfg_state, sdfg, sdfg_list, state_parent_list) { // Add input connectors let i = 0; for (let cname of node.attributes.layout.in_connectors) { - let conn = new Connector({name: cname}, i, sdfg, node.id); + let conn = new Connector({ name: cname }, i, sdfg, node.id); obj.in_connectors.push(conn); i += 1; } @@ -731,7 +739,7 @@ function relayout_state(ctx, sdfg_state, sdfg, sdfg_list, state_parent_list) { // Add output connectors -- if collapsed, uses exit node connectors i = 0; for (let cname of node.attributes.layout.out_connectors) { - let conn = new Connector({name: cname}, i, sdfg, node.id); + let conn = new Connector({ name: cname }, i, sdfg, node.id); obj.out_connectors.push(conn); i += 1; } @@ -766,26 +774,26 @@ function relayout_state(ctx, sdfg_state, sdfg, sdfg_list, state_parent_list) { // Layout connectors and nested SDFGs - sdfg_state.nodes.forEach(function (node, id) { + sdfg_state.nodes.forEach(function (node, id) { let gnode = g.node(id); if (!gnode) return; let topleft = gnode.topleft(); - + // Offset nested SDFG if (node.type === "NestedSDFG") { offset_sdfg(node.attributes.sdfg, gnode.data.graph, { - x: topleft.x + LINEHEIGHT, + x: topleft.x + LINEHEIGHT, y: topleft.y + LINEHEIGHT }); } // Connector management - let SPACING = LINEHEIGHT; + let SPACING = LINEHEIGHT; let iconn_length = (LINEHEIGHT + SPACING) * node.attributes.layout.in_connectors.length - SPACING; let oconn_length = (LINEHEIGHT + SPACING) * node.attributes.layout.out_connectors.length - SPACING; - let iconn_x = gnode.x - iconn_length / 2.0 + LINEHEIGHT/2.0; - let oconn_x = gnode.x - oconn_length / 2.0 + LINEHEIGHT/2.0; - + let iconn_x = gnode.x - iconn_length / 2.0 + LINEHEIGHT / 2.0; + let oconn_x = gnode.x - oconn_length / 2.0 + LINEHEIGHT / 2.0; + for (let c of gnode.in_connectors) { c.width = LINEHEIGHT; c.height = LINEHEIGHT; @@ -834,7 +842,7 @@ function relayout_state(ctx, sdfg_state, sdfg, sdfg_list, state_parent_list) { if (dst_conn !== null) gedge.points[n] = dagre.util.intersectRect(dst_conn, gedge.points[0]); - if (gedge.points.length == 3 && gedge.points[0].x == gedge.points[n].x) + if (gedge.points.length == 3 && gedge.points[0].x == gedge.points[n].x) gedge.points = [gedge.points[0], gedge.points[n]]; let bb = calculateEdgeBoundingBox(gedge); @@ -904,13 +912,14 @@ class SDFGRenderer { } view_settings() { - return {inclusive_ranges: this.inclusive_ranges}; + return { inclusive_ranges: this.inclusive_ranges }; } // Initializes the DOM init_elements() { this.canvas = document.createElement('canvas'); + this.canvas.style = 'background-color: inherit'; this.container.append(this.canvas); // Add buttons @@ -937,13 +946,13 @@ class SDFGRenderer { cmenu.addOption("Save view as PDF", x => that.save_as_pdf()); cmenu.addOption("Save all as PDF", x => that.save_as_pdf(true)); } - cmenu.addCheckableOption("Inclusive ranges", that.inclusive_ranges, (x, checked) => {that.inclusive_ranges = checked;}); + cmenu.addCheckableOption("Inclusive ranges", that.inclusive_ranges, (x, checked) => { that.inclusive_ranges = checked; }); that.menu = cmenu; that.menu.show(rect.left, rect.bottom); }; d.title = 'Menu'; this.toolbar.appendChild(d); - } catch (ex) {} + } catch (ex) { } // Zoom to fit d = document.createElement('button'); @@ -1004,8 +1013,9 @@ class SDFGRenderer { // Resize event for container let observer = new MutationObserver((mutations) => { this.onresize(); this.draw_async(); }); observer.observe(this.container, { attributes: true }); - // Also listen to resize events coming from the window - window.addEventListener('resize', () => { this.onresize(); this.draw_async(); }); + + // Set inherited properties + this.bgcolor = window.getComputedStyle(this.canvas).backgroundColor; // Create the initial SDFG layout this.relayout(); @@ -1040,7 +1050,7 @@ class SDFGRenderer { // Mouse handler event types for (let evtype of ['mousedown', 'mousemove', 'mouseup', 'touchstart', 'touchmove', 'touchend', - 'wheel', 'click', 'dblclick', 'contextmenu']) { + 'wheel', 'click', 'dblclick', 'contextmenu']) { canvas.addEventListener(evtype, x => { let cancelled = this.on_mouse_event(x, comp_x, comp_y, evtype); if (cancelled) @@ -1052,11 +1062,10 @@ class SDFGRenderer { } onresize() { - // Set canvas background and size - this.canvas.style.backgroundColor = "#ffffff"; + // Set canvas size this.canvas.style.width = '99%'; this.canvas.style.height = '99%'; - this.canvas.width = this.canvas.offsetWidth; + this.canvas.width = this.canvas.offsetWidth; this.canvas.height = this.canvas.offsetHeight; } @@ -1072,10 +1081,10 @@ class SDFGRenderer { // Change translation and scale such that the chosen elements // (or entire graph if null) is in view - zoom_to_view(elements=null) { + zoom_to_view(elements = null) { if (!elements || elements.length == 0) elements = this.graph.nodes().map(x => this.graph.node(x)); - + let bb = boundingBox(elements); this.canvas_manager.set_view(bb); @@ -1124,12 +1133,12 @@ class SDFGRenderer { blobStream; canvas2pdf.PdfContext; return true; - } catch(e) { + } catch (e) { return false; } } - save_as_pdf(save_all=false) { + save_as_pdf(save_all = false) { let stream = blobStream(); // Compute document size @@ -1180,7 +1189,7 @@ class SDFGRenderer { let endy = this.canvas_manager.mapPixelToCoordsY(this.canvas.height); let curw = endx - curx, curh = endy - cury; - this.visible_rect = {x: curx, y: cury, w: curw, h: curh}; + this.visible_rect = { x: curx, y: cury, w: curw, h: curh }; this.on_pre_draw(); @@ -1194,18 +1203,20 @@ class SDFGRenderer { on_post_draw() { try { this.ctx.end(); - } catch (ex) {} - + } catch (ex) { } + if (this.tooltip) { let br = this.canvas.getBoundingClientRect(); - let pos = {x: this.realmousepos.x - br.x, - y: this.realmousepos.y - br.y}; + let pos = { + x: this.realmousepos.x - br.x, + y: this.realmousepos.y - br.y + }; // Clear style and contents this.tooltip_container.style = ''; this.tooltip_container.innerHTML = ''; this.tooltip_container.style.display = 'block'; - + // Invoke custom container this.tooltip(this.tooltip_container); @@ -1241,10 +1252,10 @@ class SDFGRenderer { g.nodes().forEach(state_id => { let state = g.node(state_id); if (!state) return; - + if (state.intersect(x, y, w, h)) { // States - func('states', {sdfg: sdfg_name, id: state_id}, state); + func('states', { sdfg: sdfg_name, id: state_id }, state); if (state.data.state.attributes.is_collapsed) return; @@ -1256,7 +1267,7 @@ class SDFGRenderer { let node = ng.node(node_id); if (node.intersect(x, y, w, h)) { // Selected nodes - func('nodes', {sdfg: sdfg_name, state: state_id, id: node_id}, node); + func('nodes', { sdfg: sdfg_name, state: state_id, id: node_id }, node); // If nested SDFG, traverse recursively if (node.data.node.type === "NestedSDFG") @@ -1265,13 +1276,17 @@ class SDFGRenderer { // Connectors node.in_connectors.forEach((c, i) => { if (c.intersect(x, y, w, h)) - func('connectors', {sdfg: sdfg_name, state: state_id, node: node_id, - connector: i, conntype: "in"}, c); + func('connectors', { + sdfg: sdfg_name, state: state_id, node: node_id, + connector: i, conntype: "in" + }, c); }); node.out_connectors.forEach((c, i) => { if (c.intersect(x, y, w, h)) - func('connectors', {sdfg: sdfg_name, state: state_id, node: node_id, - connector: i, conntype: "out"}, c); + func('connectors', { + sdfg: sdfg_name, state: state_id, node: node_id, + connector: i, conntype: "out" + }, c); }); }); @@ -1279,7 +1294,7 @@ class SDFGRenderer { ng.edges().forEach(edge_id => { let edge = ng.edge(edge_id); if (edge.intersect(x, y, w, h)) { - func('edges', {sdfg: sdfg_name, state: state_id, id: edge.id}, edge); + func('edges', { sdfg: sdfg_name, state: state_id, id: edge.id }, edge); } }); } @@ -1289,7 +1304,7 @@ class SDFGRenderer { g.edges().forEach(isedge_id => { let isedge = g.edge(isedge_id); if (isedge.intersect(x, y, w, h)) { - func('isedges', {sdfg: sdfg_name, id: isedge.id}, isedge); + func('isedges', { sdfg: sdfg_name, id: isedge.id }, isedge); } }); } @@ -1303,11 +1318,11 @@ class SDFGRenderer { function traverse_recursive(sdfg) { sdfg.nodes.forEach((state, state_id) => { // States - func('states', {sdfg: sdfg, id: state_id}, state); + func('states', { sdfg: sdfg, id: state_id }, state); state.nodes.forEach((node, node_id) => { // Nodes - func('nodes', {sdfg: sdfg, state: state_id, id: node_id}, node); + func('nodes', { sdfg: sdfg, state: state_id, id: node_id }, node); // If nested SDFG, traverse recursively if (node.type === "NestedSDFG") @@ -1316,13 +1331,13 @@ class SDFGRenderer { // Edges state.edges.forEach((edge, edge_id) => { - func('edges', {sdfg: sdfg, state: state_id, id: edge_id}, edge); + func('edges', { sdfg: sdfg, state: state_id, id: edge_id }, edge); }); }); // Selected inter-state edges sdfg.edges.forEach((isedge, isedge_id) => { - func('isedges', {sdfg: sdfg, id: isedge_id}, isedge); + func('isedges', { sdfg: sdfg, id: isedge_id }, isedge); }); } @@ -1338,7 +1353,7 @@ class SDFGRenderer { if (!state) return; // States - func('states', {sdfg: sdfg_name, id: state_id}, state, state.intersect(x, y, w, h)); + func('states', { sdfg: sdfg_name, id: state_id }, state, state.intersect(x, y, w, h)); if (state.data.state.attributes.is_collapsed) return; @@ -1349,7 +1364,7 @@ class SDFGRenderer { ng.nodes().forEach(node_id => { let node = ng.node(node_id); // Selected nodes - func('nodes', {sdfg: sdfg_name, state: state_id, id: node_id}, node, node.intersect(x, y, w, h)); + func('nodes', { sdfg: sdfg_name, state: state_id, id: node_id }, node, node.intersect(x, y, w, h)); // If nested SDFG, traverse recursively if (node.data.node.type === "NestedSDFG") @@ -1357,26 +1372,30 @@ class SDFGRenderer { // Connectors node.in_connectors.forEach((c, i) => { - func('connectors', {sdfg: sdfg_name, state: state_id, node: node_id, - connector: i, conntype: "in"}, c, c.intersect(x, y, w, h)); + func('connectors', { + sdfg: sdfg_name, state: state_id, node: node_id, + connector: i, conntype: "in" + }, c, c.intersect(x, y, w, h)); }); node.out_connectors.forEach((c, i) => { - func('connectors', {sdfg: sdfg_name, state: state_id, node: node_id, - connector: i, conntype: "out"}, c, c.intersect(x, y, w, h)); + func('connectors', { + sdfg: sdfg_name, state: state_id, node: node_id, + connector: i, conntype: "out" + }, c, c.intersect(x, y, w, h)); }); }); // Selected edges ng.edges().forEach(edge_id => { let edge = ng.edge(edge_id); - func('edges', {sdfg: sdfg_name, state: state_id, id: edge.id}, edge, edge.intersect(x, y, w, h)); + func('edges', { sdfg: sdfg_name, state: state_id, id: edge.id }, edge, edge.intersect(x, y, w, h)); }); }); // Selected inter-state edges g.edges().forEach(isedge_id => { let isedge = g.edge(isedge_id); - func('isedges', {sdfg: sdfg_name, id: isedge.id}, isedge, isedge.intersect(x, y, w, h)); + func('isedges', { sdfg: sdfg_name, id: isedge.id }, isedge, isedge.intersect(x, y, w, h)); }); } @@ -1423,7 +1442,7 @@ class SDFGRenderer { }; } - on_mouse_event(event, comp_x_func, comp_y_func, evtype="click") { + on_mouse_event(event, comp_x_func, comp_y_func, evtype = "click") { let dirty = false; // Whether to redraw at the end if (evtype === "mousedown" || evtype === "touchstart") { @@ -1439,8 +1458,8 @@ class SDFGRenderer { } else if (evtype === "mousemove") { // Calculate the change in mouse position in canvas coordinates let old_mousepos = this.mousepos; - this.mousepos = {x: comp_x_func(event), y: comp_y_func(event)}; - this.realmousepos = {x: event.clientX, y: event.clientY}; + this.mousepos = { x: comp_x_func(event), y: comp_y_func(event) }; + this.realmousepos = { x: event.clientX, y: event.clientY }; if (this.drag_start && event.buttons & 1) { // Only accept the primary mouse button as dragging source @@ -1487,7 +1506,7 @@ class SDFGRenderer { this.drag_start = event; } else if (event.touches.length == 1) { // Move/drag this.canvas_manager.translate(event.touches[0].clientX - this.drag_start.touches[0].clientX, - event.touches[0].clientY - this.drag_start.touches[0].clientY); + event.touches[0].clientY - this.drag_start.touches[0].clientY); this.drag_start = event; // Mark for redraw @@ -1510,10 +1529,10 @@ class SDFGRenderer { // First, translate according to movement of center point this.canvas_manager.translate(newCenter[0] - oldCenter[0], - newCenter[1] - oldCenter[1]); + newCenter[1] - oldCenter[1]); // Then scale this.canvas_manager.scale(currentDistance / initialDistance, - newCenter[0], newCenter[1]); + newCenter[0], newCenter[1]); this.drag_start = event; @@ -1543,7 +1562,7 @@ class SDFGRenderer { let elements = elements_under_cursor.elements; let total_elements = elements_under_cursor.total_elements; let foreground_elem = elements_under_cursor.foreground_elem; - + // Change mouse cursor accordingly if (total_elements > 0) { if (this.move_mode && this.drag_start) @@ -1563,7 +1582,7 @@ class SDFGRenderer { this.for_all_elements(this.mousepos.x, this.mousepos.y, 0, 0, (type, e, obj, intersected) => { if (intersected && obj.stroke_color === null) obj.stroke_color = 'green'; - else if(!intersected && obj.stroke_color === 'green') + else if (!intersected && obj.stroke_color === 'green') obj.stroke_color = null; }); @@ -1597,8 +1616,8 @@ class SDFGRenderer { } if (this.external_mouse_handler) - dirty |= this.external_mouse_handler(evtype, event, {x: comp_x_func(event), y: comp_y_func(event)}, elements, - this, foreground_elem); + dirty |= this.external_mouse_handler(evtype, event, { x: comp_x_func(event), y: comp_y_func(event) }, elements, + this, foreground_elem); if (dirty) this.draw_async(); diff --git a/package-lock.json b/package-lock.json index adb779e..a223ed4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sdfv", - "version": "0.1.2", + "version": "0.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -84,9 +84,9 @@ "dev": true }, "@types/vscode": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.45.0.tgz", - "integrity": "sha512-b0Gyir7sPBCqiKLygAhn/AYVfzWD+SMPkWltBrIuPEyTOxSU1wVApWY/FcxYO2EWTRacoubTl4+gvZf86RkecA==", + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.45.1.tgz", + "integrity": "sha512-0NO9qrrEJBO8FsqHCrFMgR2suKnwCsKBWvRSb2OzH5gs4i3QO5AhEMQYrSzDbU/wLPt7N617/rN9lPY213gmwg==", "dev": true }, "@typescript-eslint/eslint-plugin": { diff --git a/package.json b/package.json index e3d0b3e..afd470b 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,13 @@ ], "priority": "default" } + ], + "iconThemes": [ + { + "id": "sdfgicon", + "label": "Seti + SDFG Extension", + "path": "./fileicons/sdfg-icon-theme.json" + } ] }, "scripts": { @@ -48,7 +55,7 @@ "@types/glob": "^7.1.1", "@types/mocha": "^7.0.1", "@types/node": "^12.12.39", - "@types/vscode": "^1.45.0", + "@types/vscode": "^1.45.1", "@typescript-eslint/eslint-plugin": "^2.33.0", "@typescript-eslint/parser": "^2.33.0", "eslint": "^6.8.0", @@ -58,4 +65,4 @@ "vscode-test": "^1.3.0" }, "dependencies": {} -} +} \ No newline at end of file diff --git a/src/sdfg_viewer.ts b/src/sdfg_viewer.ts index e9cd10f..8f88f5b 100644 --- a/src/sdfg_viewer.ts +++ b/src/sdfg_viewer.ts @@ -74,7 +74,7 @@ export class SdfgViewerProvider implements vscode.CustomTextEditorProvider { * @returns HTML to be displayed */ private getHtml(webview: vscode.Webview, - document: vscode.TextDocument): string { + document: vscode.TextDocument): string { // Load the base HTML we want to display in the webview/editor. const fpBaseHtml: vscode.Uri = vscode.Uri.file(path.join( this.context.extensionPath, 'media', 'sdfv_base_layout.html'