Skip to content

Commit

Permalink
fix instances + add plugin custom page + format
Browse files Browse the repository at this point in the history
* fix instances services adding condition for actions buttons
* update main.py to retrieve plugins page and update sidebar component to handle it + add default values to check
* start formatting settings data for services : add a only_multisite param to get only plugins with at least one multisite settings + update modes builder
  • Loading branch information
syrk4web committed Aug 8, 2024
1 parent c61f0d1 commit 997392d
Show file tree
Hide file tree
Showing 23 changed files with 174 additions and 53 deletions.
2 changes: 1 addition & 1 deletion src/ui/builder/advanced_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def advanced_mode_builder(templates: list[dict], plugins: list, global_config: d
{
"type": "Templates",
"data": {
"templates": get_forms(templates, plugins, settings, ("advanced",), is_new),
"templates": get_forms(templates, plugins, settings, ("advanced",), is_new, True),
"operation": "new" if is_new else "edit",
"oldServerName": service_name if service_name else "",
},
Expand Down
2 changes: 1 addition & 1 deletion src/ui/builder/easy_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def easy_mode_builder(templates: list[dict], plugins: list, global_config: dict,
{
"type": "Templates",
"data": {
"templates": get_forms(templates, plugins, settings, ("easy",), is_new),
"templates": get_forms(templates, plugins, settings, ("easy",), is_new, True),
"operation": "new" if is_new else "edit",
"oldServerName": service_name if service_name else "",
},
Expand Down
2 changes: 1 addition & 1 deletion src/ui/builder/raw_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def raw_mode_builder(templates: list[dict], plugins: list, global_config: dict,
{
"type": "Templates",
"data": {
"templates": get_forms(templates, plugins, settings, ("raw",), is_new),
"templates": get_forms(templates, plugins, settings, ("raw",), is_new, True),
"operation": "new" if is_new else "edit",
"oldServerName": service_name if service_name else "",
},
Expand Down
42 changes: 37 additions & 5 deletions src/ui/builder/utils/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,65 @@ def get_service_settings(service_name: str, global_config: dict, total_config: d
return global_config


def get_forms(templates: list = [], plugins: list = [], settings: dict = {}, render_forms: tuple = ("advanced", "easy", "raw"), is_new: bool = False) -> dict:
def get_plugins_multisite(plugins: list) -> list:
# loop on plugins with list index
plugins_multisite = []
for index, plugin in enumerate(plugins):
multisite_settings = {}
# loop on settings
for setting, value in plugin.get("settings").items():
# check if setting is multisite
if value.get("context") != "multisite":
continue
# add multisite key to plugin
multisite_settings[setting] = value

# add multisite settings to plugin
if len(multisite_settings):
plugin_multisite = copy.deepcopy(plugin)
plugin_multisite["settings"] = multisite_settings
plugins_multisite.append(plugin_multisite)

return plugins


def get_forms(
templates: list = [],
plugins: list = [],
settings: dict = {},
render_forms: tuple = ("advanced", "easy", "raw"),
is_new: bool = False,
only_multisite: bool = False,
) -> dict:
"""
Will generate every needed form using templates, plugins and settings.
We will run on each plugins, set template value if one, and override by the custom settings value if exists.
We will format to fit each form type (easy, advanced, raw) in case
"""
# Copy of the plugins, and get the plugins by context if needed
# In services page, we want only multisite settings, but in global config we want both
plugins_base = get_plugins_multisite(plugins) if only_multisite else copy.deepcopy(plugins)

# Update SERVER_NAME to be empty if new
if is_new and "SERVER_NAME" in settings:
settings["SERVER_NAME"]["value"] = ""

if is_new and not "SERVER_NAME" in settings:
settings["SERVER_NAME"] = {"value": "", "method": "ui", "global": True}
settings["SERVER_NAME"] = {"value": "", "method": "ui", "global": False}

forms = {}
for form in render_forms:
forms[form] = {}

for template in templates:
if "advanced" in forms:
forms["advanced"][template.get("name")] = set_advanced(template, plugins, settings, is_new)
forms["advanced"][template.get("name")] = set_advanced(template, plugins_base, settings, is_new)

if "raw" in forms:
forms["raw"][template.get("name")] = set_raw(template, plugins, settings, is_new)
forms["raw"][template.get("name")] = set_raw(template, plugins_base, settings, is_new)

if "easy" in forms:
forms["easy"][template.get("name")] = set_easy(template, plugins, settings, is_new)
forms["easy"][template.get("name")] = set_easy(template, plugins_base, settings, is_new)

return forms

Expand Down
6 changes: 3 additions & 3 deletions src/ui/client/dashboard/components/Dashboard/Menu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ onBeforeMount(() => {
? JSON.parse(dataEl.getAttribute(dataAtt))
: {};
menu.username = data?.username || "";
menu.pagePlugins = data?.plugins_page || [];
});
</script>
Expand Down Expand Up @@ -365,13 +366,12 @@ onBeforeMount(() => {
:tabindex="
menu.isDesktop ? menuIndex : menu.isActive ? menuIndex : '-1'
"
target="_blank"
class="menu-page-plugin-anchor"
:href="`/plugins?plugin_id=${plugin.id}`"
:href="`plugins/${plugin.id}`"
>
<div aria-hidden="true" class="menu-page-plugin-svg-container">
<Icons
:iconName="plugin.type === 'pro' ? 'crown' : 'free'"
:iconName="plugin.type === 'pro' ? 'crown' : 'document'"
:color="plugin.type === 'pro' ? 'amber' : 'dark'"
/>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/ui/client/dashboard/components/Widget/ButtonGroup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const groupEl = ref(null);
onMounted(() => {
group.class =
props.boutonGroupClass || groupEl.value.closest("[data-is]")
props.boutonGroupClass || groupEl?.value?.closest("[data-is]")
? `button-group-${groupEl.value
.closest("[data-is]")
.getAttribute("data-is")}`
Expand Down
2 changes: 1 addition & 1 deletion src/ui/client/dashboard/components/Widget/Instance.vue
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,6 @@ const props = defineProps({
<Status :id="props.title" :status="props.status" />
<Title type="card" :title="props.title" />
<ListPairs :pairs="props.pairs" />
<ButtonGroup :buttons="props.buttons" />
<ButtonGroup v-if="props.buttons.length > 0" :buttons="props.buttons" />
</Container>
</template>
2 changes: 1 addition & 1 deletion src/ui/client/dashboard/components/Widget/Text.vue
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const textIconEl = ref(null);
onMounted(() => {
// Check if next sibling is a
const renderEl = textEl.value || textIconEl.value || null;
const isVoid = renderEl.closest('[data-is="void"]') ? "void" : "";
const isVoid = renderEl?.closest('[data-is="void"]') ? "void" : "";
text.class =
props.textClass || renderEl.closest("[data-is]")
? `text-${
Expand Down
19 changes: 12 additions & 7 deletions src/ui/client/dashboard/pages/bans/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,18 @@
<title>BunkerWeb | Bans</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'>
</div>
<div class="hidden"
data-server-builder='[{"type":"card","containerColumns":{"pc":6,"tablet":6,"mobile":12},"widgets":[{"type":"Instance","data":{"details":[{"key":"instances_hostname","value":"bunkerweb"},{"key":"instances_type","value":"manual"},{"key":"instances_status","value":"instances_active"}],"status":"success","title":"bunkerweb","buttons":[{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"reload","data-submit-form":"true"},"text":"action_reload","color":"warning","size":"normal"},{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"stop","data-submit-form":"true"},"text":"action_stop","color":"error","size":"normal"}]}}]}]'>
</div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
></div>
<div
class="hidden"
data-server-builder='[{"type":"card","containerColumns":{"pc":6,"tablet":6,"mobile":12},"widgets":[{"type":"Instance","data":{"details":[{"key":"instances_hostname","value":"bunkerweb"},{"key":"instances_type","value":"manual"},{"key":"instances_status","value":"instances_active"}],"status":"success","title":"bunkerweb","buttons":[{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"reload","data-submit-form":"true"},"text":"action_reload","color":"warning","size":"normal"},{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"stop","data-submit-form":"true"},"text":"action_stop","color":"error","size":"normal"}]}}]}]'
></div>
<div id="app"></div>
<script type="module" src="bans.js"></script>
</body>
Expand Down
10 changes: 8 additions & 2 deletions src/ui/client/dashboard/pages/dashboard/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@
<title>BunkerWeb | DASHBOARD</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div class="hidden" data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
></div>
<div id="app"></div>
<script type="module" src="dashboard.js"></script>
</body>
Expand Down
5 changes: 4 additions & 1 deletion src/ui/client/dashboard/pages/global-config/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
<title>BunkerWeb | Global config</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
Expand Down
5 changes: 4 additions & 1 deletion src/ui/client/dashboard/pages/home/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
<title>BunkerWeb | Home</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "success", "message" : "Success feedback"}, {"type" : "error", "title" : "error", "message" : "Error feedback"}, {"type" : "warning", "title" : "warning", "message" : "Warning feedback"}, {"type" : "info", "title" : "info", "message" : "Info feedback"}]'
Expand Down
7 changes: 5 additions & 2 deletions src/ui/client/dashboard/pages/instances/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@
<title>BunkerWeb | Instances</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
></div>
<div
class="hidden"
data-server-builder="W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX0sIHsidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfaG9zdG5hbWUiLCAidmFsdWUiOiAiYnVua2Vyd2ViIn0sIHsia2V5IjogImluc3RhbmNlc190eXBlIiwgInZhbHVlIjogIm1hbnVhbCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfc3RhdHVzIiwgInZhbHVlIjogImluc3RhbmNlc19hY3RpdmUifV0sICJzdGF0dXMiOiAic3VjY2VzcyIsICJ0aXRsZSI6ICJidW5rZXJ3ZWIiLCAiYnV0dG9ucyI6IFt7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJyZWxvYWRcIiB9In0sICJ0ZXh0IjogImFjdGlvbl9yZWxvYWQiLCAiY29sb3IiOiAid2FybmluZyJ9LCB7ImF0dHJzIjogeyJkYXRhLXN1Ym1pdC1mb3JtIjogIntcIklOU1RBTkNFX0lEXCIgOiBcImJ1bmtlcndlYlwiLCBcIm9wZXJhdGlvblwiIDogXCJzdG9wXCIgfSJ9LCAidGV4dCI6ICJhY3Rpb25fc3RvcCIsICJjb2xvciI6ICJlcnJvciJ9XX19XX1d"
data-server-builder="W3sidHlwZSI6ICJjYXJkIiwgImNvbnRhaW5lckNvbHVtbnMiOiB7InBjIjogNiwgInRhYmxldCI6IDYsICJtb2JpbGUiOiAxMn0sICJ3aWRnZXRzIjogW3sidHlwZSI6ICJJbnN0YW5jZSIsICJkYXRhIjogeyJwYWlycyI6IFt7ImtleSI6ICJpbnN0YW5jZXNfbmFtZSIsICJ2YWx1ZSI6ICJzdGF0aWMgaW5zdGFuY2UifSwgeyJrZXkiOiAiaW5zdGFuY2VzX2hvc3RuYW1lIiwgInZhbHVlIjogImJ1bmtlcndlYiJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfdHlwZSIsICJ2YWx1ZSI6ICJzdGF0aWMifSwgeyJrZXkiOiAiaW5zdGFuY2VzX21ldGhvZCIsICJ2YWx1ZSI6ICJtYW51YWwifSwgeyJrZXkiOiAiaW5zdGFuY2VzX2NyZWF0aW9uX2RhdGUiLCAidmFsdWUiOiAiMDgtMDgtMjAyNCAwOTo0Njo1OCJ9LCB7ImtleSI6ICJpbnN0YW5jZXNfbGFzdF9zZWVuIiwgInZhbHVlIjogIjA4LTA4LTIwMjQgMDk6NDY6NTgifV0sICJzdGF0dXMiOiAiZXJyb3IiLCAidGl0bGUiOiAiYnVua2Vyd2ViIiwgImJ1dHRvbnMiOiBbXX19XX1d"
></div>
<div id="app"></div>
<script type="module" src="instances.js"></script>
Expand Down
5 changes: 4 additions & 1 deletion src/ui/client/dashboard/pages/jobs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
<title>BunkerWeb | Jobs</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
Expand Down
5 changes: 4 additions & 1 deletion src/ui/client/dashboard/pages/logs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
<title>BunkerWeb | Logs</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
Expand Down
5 changes: 4 additions & 1 deletion src/ui/client/dashboard/pages/modes/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
<title>BunkerWeb | Modes</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
Expand Down
19 changes: 12 additions & 7 deletions src/ui/client/dashboard/pages/plugins/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,18 @@
<title>BunkerWeb | Plugins</title>
</head>
<body>
<div class="hidden" data-server-global='{"username" : "admin"}'></div>
<div class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'>
</div>
<div class="hidden"
data-server-builder='[{"type":"card","containerColumns":{"pc":6,"tablet":6,"mobile":12},"widgets":[{"type":"Instance","data":{"details":[{"key":"instances_hostname","value":"bunkerweb"},{"key":"instances_type","value":"manual"},{"key":"instances_status","value":"instances_active"}],"status":"success","title":"bunkerweb","buttons":[{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"reload","data-submit-form":"true"},"text":"action_reload","color":"warning","size":"normal"},{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"stop","data-submit-form":"true"},"text":"action_stop","color":"error","size":"normal"}]}}]}]'>
</div>
<div
class="hidden"
data-server-global='{"username" : "admin", "plugins_page": [{"id" : "antibot", "name": "Antibot"}, {"id": "backup", "name" : "backup"}]}'
></div>
<div
class="hidden"
data-server-flash='[{"type" : "success", "title" : "title", "message" : "Success feedback"}, {"type" : "error", "title" : "title", "message" : "Error feedback"}, {"type" : "warning", "title" : "title", "message" : "Warning feedback"}, {"type" : "info", "title" : "title", "message" : "Info feedback"}]'
></div>
<div
class="hidden"
data-server-builder='[{"type":"card","containerColumns":{"pc":6,"tablet":6,"mobile":12},"widgets":[{"type":"Instance","data":{"details":[{"key":"instances_hostname","value":"bunkerweb"},{"key":"instances_type","value":"manual"},{"key":"instances_status","value":"instances_active"}],"status":"success","title":"bunkerweb","buttons":[{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"reload","data-submit-form":"true"},"text":"action_reload","color":"warning","size":"normal"},{"attrs":{"data-form-INSTANCE_ID":"bunkerweb","data-form-operation":"stop","data-submit-form":"true"},"text":"action_stop","color":"error","size":"normal"}]}}]}]'
></div>
<div id="app"></div>
<script type="module" src="plugins.js"></script>
</body>
Expand Down
Loading

0 comments on commit 997392d

Please sign in to comment.