helpers to
* generate a color from a string consistently
* generate a html tag for a tag
* related css classes
contrast is calculated according to SAPC draft:
https://github.com/Myndex/SAPC-APCA
which is likely to become a w3c guideline in the future and seems
to be a better algorithm for this
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
As counter-part to `onGetValue`, which is for form assembly, add the
`onSetValues` helper that allows to hook into setting the values on
the fields, for example if one needs to transform a `disabled` to
`enable`.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Regex parses a cpuset via 2 matches. Find number(s) or range(s) folowed
by a comma, then, find a single number or a single range not followed
by a comma. E.g., 0-1,4-5,6,7,10,11,14-15
CpuSet function first checks regex, then ensures left num <= right num
Signed-off-by: Daniel Bowder <daniel@bowdernet.com>
The text needs to be defined in the wait() call as otherwise the
Ext.Progressbar will show a percentage that is not correct anyway but
just reflects where the animated progress bar itself is.
Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
`proxmoxMail` used its own regex pattern to validate emails. that
meant certain email addresses were rejected by the front-end that
were accepted by the backend that uses the functionality from
`pve-common`. examples include the following:
- "user@host.test-tld"
- "user-@host.testtld"
- "user@host"
reported on the forum: https://forum.proxmox.com/threads/gui-bugulance-using-the-user-add-gui-interface.114743/
Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
When the up or down arrow key on the keyboard was pressed while a
number text field (or any one descending from Ext.form.field.Spinner)
was selected, the up and down callbacks for that text fields KeyNav
were called twice. Therefore, the value in the text field would always
incorrectly increment/decrement by step * 2.
The problem was an overwrite for the onRender() method of the Spinner
class, which caused the callbacks for pressing an arrow key to be
registered for a second time. Simply not doing that in the overwritten
onRender() method fixes the problem.
The redundant declarations for spinUpEl and spinDownEl were removed as
well. Additionally, the 'mousewheel' event handler, registered in the
overwritten (but still executed) parent function, is unregistered now,
as it could lead to unintended side effects in browsers which still
implement this event.
Signed-off-by: Daniel Tschlatscher <d.tschlatscher@proxmox.com>
To avoid to much layout jumping if the whole button disappears
(changes height of footer bar too), rather explain to the user the
why and what they can do instead.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
this commit adds a label showing the currently selected entry in the
file browser and merges the "Download .tar.zst" and "Download .zip"
button into one menu button.
Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
as UX was pretty poort, one could only see one and a half privileges
of the role, the rest overflowed and was hidden. While the column
could be resized, doing so would make the role name column shrink
automatically, and it really shouldn't be required in the first
place.
This is a very important selector and all privs of a role must be
visible when opening without any manual user interaction required.
So increase the width to 500px, make the priv colum take more
relative space and enable cellWrap to avoid hidden overflow.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
for the file restore, we return a 503 error when we were not finished
mounting a disk in the restore vm, so ignore that error and try again
(up to 10 times) so a file listing now has a "real" timeout of
up to 300 seconds (30s pveproxy timeout * 10) instead of only 30,
which should be enough for most situations.
we also increase the proxy timeout to 60 seconds, since if one has many
disks, all of them will try to load at the same time, but the browser
has a maximum request limit and will stall+queue the remaining ones. so
those will not run into the extjs timeout when we increase it here.
for older backends without the new 503 returning feature, the calls
will still run into a pveproxy timeout anyway.
we also have to reimplement the 'monStoreErrors' functionality to
get a slightly different behaviour:
we disable the default extj loadMask of the treepanel and set it
ourselves. then on 503 we leave it up, and only remove it on success
or error (for non initial loads)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
text is not needed with the AltText button.
Signed-off-by: Matthias Heiserer <m.heiserer@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
The same code is used once in widget toolkit and twice in PVE already,
so it makes sense to add it as a separate button.
Signed-off-by: Matthias Heiserer <m.heiserer@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
Sometimes, total can be zero (e.g. for swap when it's not used), which
leads to the usage being NaN. This led to the progressbar not being
updated for InfoWidgets, leaving a spurious '0%' as text.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
refactor them to make them more flexible and, thus, usable in pbs.
adds parameters for enabling the TBar, setting the help section in the
editing dialog and cleans up the code in some places
Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
move them here from pve so we can maintain them across several
products
Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
[ T: also rename class/xtypes to avoid temporary breakage ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
the baseline for the text was seriously off, the text had
(relatively) much more space below than above, which looks off for
buttons with an actual background
Instead of centering with margin/padding explicitly, do so with the
flex layout model.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
only show it when enabled in config (so that we can hide it where
that is not supported, which is in PVE right now)
also changes the text between 'Download' and 'Download .zip' depending
if the selected entry is a directory or not
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
having window as this scope has zero benefits and while one could
already try to get the local scope via some Ext.ComponentQuery query
its just nicer to have it easily available.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
firing 'refresh' in 'clearLocalFilter' was wrong, since that triggers
too often, for example when selecting an entry (since the field lost
focus). This lead to the picker refreshing and not registering the
click and thus not selecting the desired entry.
Instead refresh the view when we really need it: when the picker is shown.
The filter is already gone, but the picker grid does not know this yet,
so we fire the event then.
Fixes: 7e47328 ("Combogrid: clear filter on blur")
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
they can not be removed nor are they visible, so don't count them.
When having a prefilter, we now don't show anymore that there is an
active filter, and don't enable the button anymore.
This is the case for vms for example (vmid is a prefilter).
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
otherwise firefox complains with a deprecation warning that the secure-flag
is not set but SameSite to 'None'. Since we cannot know how firefox will
behave once that behaviour is no longer supported, add the secure flag
now.
Note: ExtJS also clears by setting the cookie with an empty value,
there's no browser supported clear api.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
to avoid copying the same thing to three different product's GUIs
this year..
cherry-picked from stable-6 as we can have this in the master branch
full time
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Previously, deselecting and reselecting the input field
led to the previous filter still being applied, although the
input field was cleared.
Signed-off-by: Matthias Heiserer <m.heiserer@proxmox.com>
if a task did not produce output yet, we always get a single line
with "no output". our heuristic in the gui counts the total lines +
the current position. so to update the first output correctly, we
have to update every time in case we only have one line.
Otherwise, we only update on the second line, which is bad
in case the only line we ever get is the result.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
some devices (e.g. vms via novnc, and some laptops) get the pointerType
'pen' under chromium.
the DragZone handler tries to ignore touch input for that by
checking for "=== 'mouse'" which does not include 'pen'
so override that to handle it when the pointerType !== 'touch'
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
found with `codespell`, mostly comments but also a fn parameter and
an error in an exception message
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Ext.util.Sorter does not have an 'order' property, so 'order: DESC'
didn't have an effect. The default is 'ASC' and it is arguably the
preferred direction for realm anyways.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
by not using a smaller font size and using the pmx-hint class. Also
don't align to the middle, as everything else is left-aligned.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
If there are mirrors and log/special vdevs it just feels too small.
It also doesn't help if there are errors in the upper part taking up
space. Make it 600, which was used in PVE before.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
There are cases where we directly throw a string error
(particularly, when navigator.credentials.create() fails,
for example when trying to register the same WA device to
the same user twice), which would end up with the WA window
simply not closing before.
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Else it may be to confusing for users to see TFA types they cannot
configure anymore (or never could, in the PBS/PMG case).
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
if the user scrolls down make 2/3 of the buffer load the downward
(newer) buffer and only 1/3 the upward (older), and vice versa, if
the user scrolls up load 2/3 of the older messages vs. 1/3 of newer
ones.
If the user scrolls around frantically we're roughly as good as
previously and in all other cases we're better now.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
by updating the start to 'total-limit' if we follow the task log live.
to do that, we decouple the 'scroll' event from updating the 'start'
parameter and call that directly after we scrolled down.
to not trigger the scroll event multiple times, suspend the scroll event
while doing that.
while we're touching those lines, remove the 'setTimeout' workaround
for touchscreens, since it seems to work fine since extjs 7.0
this also fixes the issue that the scroll event is not called sometimes
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
if the total we got was bigger than the last line number, we appended
empty lines at the end of the panel, to which we scrolled
the only time we need to do that is when we do not follow the task log
'live' but when we are elsewhere (to keep the scroll position/size)
so give the lines directly to 'updateView' and let it decide
if we append the empty lines at the end
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
calling updateParams here lead to making an api call with the default
timespan (last 3 days) on pbs/pmg when going to the 'administration'
panel, even though it would never be shown since on tab activate we would
show the 'live mode' which does not use the timespan
on pve this did not happen since the journalview is on its own page and
the change to livemode triggered too fast..
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Add years and skip showing minute scale once we got over a year,
that's just not relevant anymore at that scale..
Months are just not an ideal thing to show, as they have different
lengths too (leap years have similar issue, but they differ 0.27%
from a normal year, while shortest to longest month is 10.7%
difference!)
Weeks could be done though, they're fixed at 7 days, but for now I
want to avoid unwieldy day numbers like 2634 d as that's just hard to
frame correctly. Also adding years now does not makes adding weeks in
the future impossible anyway..
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
the change from extjs 6.0.1 to 7.0.0 removed 'onDestroy' but brought
us 'doDestroy' for stores
we did not notice since 'onDestroy' was a private method and thus
the changelog did not mention this (doDestroy is a public method meant
exactly for our use case)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
to avoid that they have a yubikey in their hands and think they need
to use Yubico/YubiCloud otp for it to work..
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
copied from pbs with s/pbs/pmx/ and s/PBS/Proxmox/
DELETE call changed from using a body to url parameters,
since pve doesn't support a body there currently, and pbs
doesn't care
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Explain the use-case, the difference to normal binds, and give an
example that contains all features that can be used with explanations.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
quote from extjs docs (AbstractChart.js):
If you do have a chart inside a scrollable view, even if it has no
interactions, you have to set its touchAction config to the following:
touchAction: {
panX: true,
panY: true
}
Otherwise, if a touch action started on a chart,
a swipe will not scroll the view.
Since we have RRDCharts always in a scrollable view, and it does not seem to
hurt non-touchscreens, enable it by default so that users on touchscreens
can scroll it.
Reported by users in the forum:
https://forum.proxmox.com/threads/minor-but-annoying-ipad-swipe-bug.93686
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
adapted from PMG, because it has an additional fix to avoid setting
undefined in the view model, which still affects PBS (see pmg-gui
commit 774418f08b10c651357d11ccb161ac075e1ae905).
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
While refactoring, we forgot to replace the 'localhost' URL (which is
valid for PMG/PBS) with the actual nodename we have in Proxmox VE.
Do this by setting the correct URL in the viewModel right at the
start of the initComponent
We now also have the possibility to overwrite the url if we want
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
we want that component in all projects, PVE and PBS have the code
duplicated for now, as PMG is about to receive this too I rather want
to use the chance add add it here for actual reuse.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
fix an issue where the stop or restart button stays enabled for
elements in 'startOnlyServices' after switching selection from a
service that was not restricted to start-only
note: front-end change only as the backend already refused to stop a
start-only service.
Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
necessary for pbs. also give an option to use the type as url path
e.g. /config/access/<TYPE>/<ID>
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
mostly copied from pve, but includes a realm displayeditfield
as well as the comment field
in contrast to the inputpanel in PVE, this is not extended
from a base input panel (where in pve the comment/realm/default/etc.
fields come from)
we do this, since not all products can define a default or tfa
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
added the following (necessary) changes:
* use Proxmox.Utils.authSchema
* omit the sync button/handler, but add a possibilty to add extra buttons
* check for an 'edit' property in the authSchema for enabling editing
* removed the onlineHelp property
* removed 'TFA' column (can be added by the caller)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
like we do for the task_descriptions.
This way we can have a basic config that is true for all products
and override where necessary
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
basically a straight copy, with the exception that it references
Proxmox.Utils.authSchema instead of PVE.Utils.authSchema
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
The warning still shows up for the disabled repository itself, but
having a disabled repository with a bad suite is not problematic for
the configuration status as a whole.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
which avoids the all-caps "WARNINGS:" and uses the localized version.
The call was thrown out by the big overhaul in
9e059d560c.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
alows to make the code simpler too, but we need to instantiate the
selection model explicitly, as we use a bit of a weird layout here to
be able to show the pending changes at the bottom, if any, so the
main gridpanel is not the parent of the toolbar buttons, so the
std-remove button does not automatically finds the selection model
when searching in the parent
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
that does two things,
show the user that some filters are active (even if filters are collapsed),
and let the user to reset the filters all at once
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
since we use a buffered store on a grid, we cannot use our
normal monStoreErrors from Utils (The store on the grid is a memorystore
without our 'proxmox' proxy, and the store in the viewmodel is not
initialized yet in the init)
simply set the mask in the already existing 'updateLayout' function
which is exactly the right place for the buffered store load
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
since we use a remotefilter on a bufferedstore, the only event where
we can check if the selected element is still there is the 'refresh'
event. Simply deselect if the seleceted element is not in the store
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
No need then and if we'd call into update we'd still generate new
elements which is annoying for debugging and extra DOM work we can
avoid.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
not all of those are really problematic, but it's always easier to
start out stricter than required and see if any user even would use
those.
It seems that we should probably switch to a white-list approach...
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
The href, and in some browser also the src attrs on img, or a tags
can be made to execute JS rather easily, catch thoseand just remove
the attr if, after creating an URL object from it, it does not looks
like it's a http(s) request.
Further, filter out the style tag completely, as that can be misused
too, even if only to break cosmetics.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
As pruning means content an user wrote into the box, even if with
malicious intend, gets hidden and that can be quite confusing..
So rather get the outerHTML, transform it with ExtJS's htmlEncode and
set it again.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Anything where more instances can exist, even if only for a very
short time, must NOT use `id` as that needs to be unique in all
current instances of components/elements of the whole gui.
Here it broke most of the gui when switching between node, as the new
nodes repo gui was instantiated before the old ones was completely
destroyed, so there where (at least) two elements with the same id ->
💥 boom.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
It feels quite weird to have the last warning text duplicated, the
left health icon should be a very concise summary only.
allow one to force it by setting important, but that's not yet used
anywhere.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
instead of having a title bar and a seperate error grid,
add an always visible panel that displays the status (ok, warning, errors)
which also contains the error grid (if necessary, ala ceph summary)
this makes the panel more consistent to use and it is immediatly
visible if something is wrong
this also adds a test for the 'test' repositories, as well as a test
for not correctly configured suites
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
The debian one higher than wide and it seems, contrary to my belief,
the background-size is not taken for both, height and width if only
one param is set, but rather the second paramet height then defaults
to `auto` which Firefox and Chromium handle different in this case.
Set both to make this fixed.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
so there is a 'result' property, which the window expects.
Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
isValid is a boolean not a callback, so won't really work and just
set the state once.
Use the `validator` and first call into the parents helper, then do
our logic and return a string with an explanation in the expected
invalid case.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
As in that case it's actually safe, so rather show as warning, albeit
even info/notice like would probably be enough, but still, it is not
a configuration that is wanted permanently.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
We have some longer descriptions so the default width looks crammed.
Also, avoid a intermediate variable which is only used once without
any change.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
by iterating only once over the info array and adding them directly
to the records this way we can avoid iterating over the records
again
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
we already have a viewmodel we can use, and so the handler does
not have to navigate the component tree up/down
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
having double borders does not look so nice, separate them with a bit
of padding
also change the warning panel to a simple header
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Used svgcleaner[0] with the following safe[1] command:
```
svgcleaner INPUT.svg OUTPUT.svg --indent 1 --resolve-use no \
--convert-shapes no --group-by-style no --join-arcto-flags no \
--join-style-attributes no --remove-comments no --remove-declarations no \
--remove-invisible-elements no --remove-metadata no \
--remove-nonsvg-attributes no --remove-nonsvg-elements no \
--remove-text-attributes no --remove-title no \
--remove-unreferenced-ids no --trim-ids no --ungroup-groups no \
--list-separator comma
```
Resulting size reductions:
Debian 22.51% smaller
Proxmox 51.00% smaller
Note that the Debian one had a small issue with a unused variable set
which I reported[2] and cleaned up manually for now.
[0]: https://github.com/RazrFalcon/svgcleaner
[1]: https://commons.wikimedia.org/wiki/User:JoKalliauer/Optimization#svgcleaner
[2]: https://github.com/RazrFalcon/svgcleaner/issues/240
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
also add a new 'pmx-itype-icon' helper class for the classic bg
repeat/position option to allow more easier reuse
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
this copies most of the task grid from pbs, but adds handling so that
users can add aribtrary filter fields
the filter fields always present are:
* since
* until
* task type
* task status
other filters fields can be added by giving an 'extraFilter' array
which must contain widget definitions that emit a 'change' event.
this is then used to update the filters for the api call
also you can add a 'preFilter' object, that sets the filter parameter
only once at the beginning
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Not only into those with an xtype one, as we can either have a
implicit default xtype (e.g., in tbars for buttons, or set explicitly
via the `defaults` mechanism) or want to apply cbinds to stores or
other objects.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
product defaults to PVE. It is added in the warnings and should be
set by any instance correctly.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
else the repo/header difference is not that big, and it gets a bit
hard to read as it feels a bit monotonic
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>