Skip to content

Commit

Permalink
Merge pull request #188 from JerryI/default
Browse files Browse the repository at this point in the history
Major update
  • Loading branch information
JerryI committed May 30, 2024
2 parents d1167c0 + 6fb2b52 commit c0198b0
Show file tree
Hide file tree
Showing 24 changed files with 8,323 additions and 130 deletions.
Binary file modified .DS_Store
Binary file not shown.
6 changes: 5 additions & 1 deletion Assets/Styles/Custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,14 @@
--editor-bracket-7-a: #008dc1;
}

.bg-d9 {
/*.bg-d9 {
background: #d9d9d9;
}*/
.bg-d9 {
background: rgb(0 0 0 / 2%);
}


.bg-239 {
background: rgb(239,239,239)
}
Expand Down
5 changes: 5 additions & 0 deletions Assets/Styles/Optimized.css
Original file line number Diff line number Diff line change
Expand Up @@ -3288,6 +3288,11 @@ select {
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.dark\:hue-rotate-180 {
--tw-hue-rotate: hue-rotate(180deg);
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.dark\:invert {
--tw-invert: invert(100%);
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
Expand Down
14 changes: 13 additions & 1 deletion Components/FakeMenu.wlx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ With[{Layout =
<div class="py-0 px-2" role="none">
<button data-name="new" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">
New Notebook
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Ctrl+N</kbd></span>
</button>
<button data-name="openFile" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">
Open File
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Ctrl+O</kbd></span>
</button>
<button data-name="openFolder" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">
Open Folder
Expand All @@ -15,6 +17,7 @@ With[{Layout =
<div class="py-0 px-2" role="none">
<button data-name="Save" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">
Save
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Ctrl+S</kbd></span>
</button>
<button data-name="SaveAs" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Expand All @@ -38,14 +41,22 @@ With[{Layout =
<button data-name="abort" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Abort
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Alt+.</kbd></span>
</button>
<button data-name="evalInit" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Evaluate initialization cells
</button>
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Alt+I</kbd></span>
</button>
<button data-name="togglecells" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Show/Hide cell
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Ctrl+W</kbd></span>
</button>
<button data-name="clearoutputs" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Clear outputs
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans">Alt+U</kbd></span>
</button>
</div>

Expand All @@ -66,6 +77,7 @@ With[{Layout =
<button data-name="zoomIn" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Zoom in

</button>
<button data-name="zoomOut" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Expand Down
15 changes: 13 additions & 2 deletions Components/FakeMenuBrowser.wlx
Original file line number Diff line number Diff line change
@@ -1,30 +1,41 @@
Component[OptionsPattern[]] :=
With[{
Event = OptionValue["Event"]
Event = OptionValue["Event"],
AltKey = Switch[OptionValue["Navigator"], "OSX", "&#8984;", "Windows", "Alt+", "Linux", "Alt+", _, "&#8984;/Alt+"],
ToggleKey = Switch[OptionValue["Navigator"], "OSX", "&#8984;+2", "Windows", "Ctrl+W", "Linux", "Ctrl+W", _, "&#8984;+2/Ctrl+W"],
MetaKey = Switch[OptionValue["Navigator"], "OSX", "&#8984;", "Windows", "Ctrl+", "Linux", "Ctrl+", _, "&#8984;/Ctrl+"]
},
With[{Layout =
{
<div class="py-0 px-2" role="none">
<button data-name="NewNotebook" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">
New Notebook
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans"><MetaKey/>N</kbd></span>
</button>
</div>
,
<div class="py-0 px-2" role="none">
<button data-name="Save" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">
Save
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans"><MetaKey/>S</kbd></span>
</button>
</div>
,
<div class="py-0 px-2" role="none">
<button data-name="Abort" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Abort
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans"><AltKey/>.</kbd></span>
</button>
<button data-name="EvaluateInitCells" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Evaluate initialization cells
</button>
</button>
<button data-name="ToggleCells" class="block w-full text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Show/Hide cell
<span class="ml-auto flex-none text-xs text-gray-400"><kbd class="font-sans"><ToggleKey/></kbd></span>
</button>
<button data-name="ClearOutputs" class="block w-full hover:bg-teal-400 hover:text-white text-black group flex items-center px-1 my-1 py-1 rounded text-sm leading-4 dark:text-gray-400" role="menuitem" tabindex="-1">

Clear outputs
Expand Down
4 changes: 2 additions & 2 deletions Components/Topbar.wlx
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,11 @@ Component[OptionsPattern[]] := With[{

</NotebookOnly>
</div>
<div class="grow h-full" style="-webkit-app-region: drag"></div>
<div class="grow h-full" style="-webkit-app-region: drag; max-width:300px"></div>

<ExtensionTemplates Template={"AppTopBar"} Path={Path} Parameters={parameters} Modals={modals} AppEvent={AppEvent} Controls={Controls} Messanger={messages}/>

<div class="grow h-full" style="-webkit-app-region: drag"></div>
<div class="grow h-full" style="-webkit-app-region: drag; max-width:300px"></div>
<div class="my-auto ml-auto border-l border-gray-300 dark:border-gray-500 pl-1" style="padding-top: 0.2em">
<NotebookOnly Path={Path}>
<List>
Expand Down
Binary file modified Demos/.DS_Store
Binary file not shown.
107 changes: 48 additions & 59 deletions Demos/05 - Interaction/Crossbar.wln
Original file line number Diff line number Diff line change
@@ -1,119 +1,108 @@
<|"Notebook" -> <|"ReadOnly"->True, "FocusedCell" -> CellObj[JerryI`Notebook`CellObj`$257],
<|"Notebook" -> <|"FocusedCell" -> CellObj[JerryI`Notebook`CellObj`$267],
"Objects" -> <||>, "Path" -> "/users/kirill/Github/wolfram-js-frontend-dev\
/Examples/Dynamics/Interaction/Crossbar.wln"|>,
/Demos/05 - Interaction/Crossbar.wln", "ReadOnly" -> False|>,
"Cells" -> {<|"Data" -> ".md\n# Crossbar example\nA static and dynamic way \
of appending tool onto your plot", "Display" -> "codemirror",
"Hash" -> "fa34f6f2-e40d-4d82-80a7-cfb71f26876c", "Invisible" -> False,
"Hash" -> "0ae72d60-9318-4ef0-a751-a991c0188df1", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <|"Hidden" -> True|>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "# Crossbar example\nA static and dynamic way of appending \
tool onto your plot", "Display" -> "markdown",
"Hash" -> "502f1bbc-76d7-4865-8eca-50f26c5e2a5c", "Invisible" -> False,
"Hash" -> "8d167788-657d-4697-8643-90eb7bba580a", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Output", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> ".md\n## Static way\nDefine some global variables and add \
graphics to our plot directly", "Display" -> "codemirror",
"Hash" -> "d4e40827-ecc1-4247-bc61-a4dcd5d94de2", "Invisible" -> False,
"Hash" -> "0be070ef-41ff-4712-9b57-9881d7266212", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <|"Hidden" -> True|>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "## Static way\nDefine some global variables and add graphics \
to our plot directly", "Display" -> "markdown",
"Hash" -> "5b89c28f-164d-4a3c-ab14-ea4aa9f06019", "Invisible" -> False,
"Hash" -> "73a63e24-dd2a-4e3a-8188-f6ffb9e65abe", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Output", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
<|"Data" -> "point = {0.,0.};\n\n(* plot some dummy function \
*)\nPlot[Sinc[x], {x,-10,10}, Epilog->{\n Red,\n\n (* crossbar *)\n \
Line[With[{p = point[[1]]},\n {{p, -10}, {p, 10}}\n ] // Offload],\n\n \
Line[With[{p = point[[2]]},\n {{-10, p}, {10, p}}\n ] // Offload],\n\n \
(* draggable point *)\t\n PointSize[0.05], Blue, EventHandler[Point[point], \
{\n \"drag\" -> Function[xy, point = xy]\n }]\n}]",
"Display" -> "codemirror", "Hash" ->
"11dff947-c674-4056-b97e-4e1bb82e12e9", "Invisible" -> False,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "point = {0.,0.};\ntext = \" \";\n\n(* plot some dummy \
function *)\nPlot[Sinc[x], {x,-10,10}, Epilog->{\n Red,\n\n (* crossbar \
*)\n Line[With[{p = point[[1]]},\n {{p, -10}, {p, 10}}\n ] // \
Offload],\n\n Line[With[{p = point[[2]]},\n {{-10, p}, {10, p}}\n ] // \
Offload],\n\n\n EventHandler[Graphics`Canvas[], {\n \"mousemove\" -> \
Function[xy, \n\t point = xy;\n\t text = ToString[Round[xy, \
0.01]];\n\t]\n }]\n}]\n", "Display" -> "codemirror",
"Hash" -> "c52a2325-09c6-4ee3-a548-30a349a116e3", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
<|"Data" -> "TextView[point // Offload]", "Display" -> "codemirror",
"Hash" -> "830ab802-394c-4d5a-abfe-6001470651dd", "Invisible" -> False,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "TextView[text // Offload]", "Display" -> "codemirror",
"Hash" -> "c03c3987-9d95-4191-af0a-f6300bfe99ff", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
<|"Data" -> ".md\nTry to drag a blue dot", "Display" -> "codemirror",
"Hash" -> "fb4e3f82-57c0-43e2-be95-cc752026f0d0", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <|"Hidden" -> True|>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
<|"Data" -> "Try to drag a blue dot", "Display" -> "markdown",
"Hash" -> "0a026eb0-446d-4c72-aac3-b2d0abb31eef", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Output", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> " ", "Display" -> "codemirror",
"Hash" -> "28316d28-74c9-40d3-85c3-3c1e2bd4b532", "Invisible" -> False,
"Hash" -> "115d79fc-5302-41b9-8375-f82a207e3739", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> ".md\n## Dynamic way\nAppend to any plot using `MetaMarker`",
"Display" -> "codemirror", "Hash" ->
"371c7047-5883-4b31-984c-3271744014af", "Invisible" -> False,
"3bf49bdc-8494-4002-ab17-ea7abef2ecd5", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <|"Hidden" -> True|>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "## Dynamic way\nAppend to any plot using `MetaMarker`",
"Display" -> "markdown", "Hash" ->
"c8466331-378a-4520-b4e7-9cbe09fc8843", "Invisible" -> False,
"3eace3c2-2215-4ebf-9be8-6141417dbfe8", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Output", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "placeCrossbar[meta_String, pos_:{0.,0.}] := \
LeakyModule[{point = pos, text = \"\"},\n FrontSubmit[{\n Red,\n\n (* \
crossbar *)\n Line[With[{p = point[[1]]},\n {{p, -10}, {p, 10}}\n \
] // Offload],\n\n Line[With[{p = point[[2]]},\n {{-10, p}, {10, \
p}}\n ] // Offload],\n\n (* draggable point *)\t\n PointSize[0.05], \
Blue, EventHandler[Point[point], {\n \"drag\" -> Function[xy, \n \t \
point = xy;\n \t text = ToString[Round[xy, 0.01]];\n \t]\n }]\n }, \
MetaMarker[meta]];\n \n TextView[text // Offload]\n]",
"Display" -> "codemirror", "Hash" ->
"c8c167e1-a402-4e27-91a5-a27b7935e021", "Invisible" -> False,
p}}\n ] // Offload],\n\n EventHandler[Graphics`Canvas[], {\n \
\"mousemove\" -> Function[xy, \n\t point = xy;\n\t text = \
ToString[Round[xy, 0.01]];\n\t]\n }]\n }, MetaMarker[meta]];\n \n \
TextView[text // Offload]\n]", "Display" -> "codemirror",
"Hash" -> "aefbbd08-25b4-4884-a8b7-45c013e83c80", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> ".md\nAnd now an example", "Display" -> "codemirror",
"Hash" -> "1495c425-b7cd-4dba-87d3-90d624a203d3", "Invisible" -> False,
"Hash" -> "8c09d954-e8ee-4342-9085-b7a46e8170ac", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <|"Hidden" -> True|>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "And now an example", "Display" -> "markdown",
"Hash" -> "857c849f-65e0-436e-aa0d-45aa5ecba35e", "Invisible" -> False,
"Hash" -> "853fa98f-9115-4228-87ee-0011906e9552", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Output", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "\n(* plot some dummy function *)\nPlot[Sinc[x], {x,-10,10}, \
Epilog->{MetaMarker[\"plt\"]}]", "Display" -> "codemirror",
"Hash" -> "2a65d9b0-1240-4516-8952-9ca3af8d48e9", "Invisible" -> False,
"Hash" -> "da66a6e1-0d07-441c-8837-8d28654008b9", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>, <|"Data" -> ".md\nappend",
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>, <|"Data" -> ".md\nappend",
"Display" -> "codemirror", "Hash" ->
"3d16e2db-33eb-4872-9170-81809a39f0b1", "Invisible" -> False,
"c799cc0c-df0e-44e9-a6cb-fe9f0bc9a467", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <|"Hidden" -> True|>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>, <|"Data" -> "append",
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>, <|"Data" -> "append",
"Display" -> "markdown", "Hash" ->
"59b102b0-880a-45fe-ae8b-784397c0ce1a", "Invisible" -> False,
"6a8e1d3f-90ee-4f3f-8fd0-65a0b75ede3d", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Output", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> "placeCrossbar[\"plt\"]", "Display" -> "codemirror",
"Hash" -> "f462bacd-139a-44f0-805d-79e02acc4448", "Invisible" -> False,
"Hash" -> "48bcd737-f9f8-4f6c-8f90-48ad2fdf4048", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>,
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>,
<|"Data" -> " ", "Display" -> "codemirror",
"Hash" -> "7bfd1a49-8c50-4b71-bb43-aa279bbf319d", "Invisible" -> False,
"Hash" -> "c1b61a02-520f-4f09-8578-49dd021ffd3b", "Invisible" -> False,
"MetaOnly" -> False, "Props" -> <||>, "State" -> "Idle",
"Type" -> "Input", "UID" -> Null, "Notebook" ->
"ddbceb1d-95a3-4cad-ae61-f0d7323e3eae"|>}, "serializer" -> "jsfn4"|>
"ac8d311d-243b-4655-9444-3af6fa9a7a05"|>}, "serializer" -> "jsfn4"|>
Loading

0 comments on commit c0198b0

Please sign in to comment.