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>
it seems that something changed in extjs 7 which does not quite
restore the correct scroll position when the identical content is set
on a component. this means that sometimes, we update the text
with the identical one, but the scroll position is now off, only
to scroll back to the bottom
this causes a flickering everytime we do the api call.
instead, only update the component when the content really changed.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This makes check box lists like the following snipped work:
- [X] Done
- [ ] not done
Further allow the start attr, sometimes generated for ordered lists.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Define our own, rather minimal interface so that we change the parser
under the hood if ever needed, I already did so once during
evaluating this, as first I checked out Snarkdown[0], which is really
nice for the few lines of code it needs, but is a bit to limited for
the use case.
Currently marked[1] is used, provided by the libjs-marked Debian
package.
For now statically link the marked parser in on built time to avoid
the need to add new directories to serve in our pve/pmg/pbs proxies.
This is a bit ugly but can be cleaned up afterwards transparently
too.
We sanitize the produced HTML ourselves (most MD JS parser/renderer
don't do that) by creating a real, but not active, DOM tree and
recursively prune bad nodes/attrs from it and let it spit out HTML
again at the end. While a tad inefficient it really won't matter for
our use case, as the notes/comments we render are only a few KiB of
text and it's done on the client side anyway.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
We do not want to trigger an autoSelect if there's a value set, even
if it isn't found in the store, as that hides the fact that an (now)
invalid valid is configured from the user, which can be confusing if
something is not working, as when editing an object it seems like a
valid value is selected.
Further, if a value is set we mark the field as invalid from the
start, at least if it's neither disabled nor allowed to have a
value which is does not exists in the backing store.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
so that we can reuse it across products
source was 'pbs' since that had the most features (http upgrade check)
a few changes to combine pve/pbs/pmg:
* use an optional 'cliusage' function it it exists to determine CLI usage
* check allowtoken for undefined to see if it is allowed or not
* use 'pmxapi' instead of pbs/pmg/pveapi
* rename all occurrences of 'pve' to 'pmx'
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
not all users of Toolkit.js have the charts lib loaded, which means
the class does not exist then.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
which shows a confirm dialog with the most relevant information before actually
issuing the API call.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Without this the check and the, through the 'install' target
triggered, incremental lint target triggered a full eslint run.
Makes it similar to what PBS did from the beginning of eslint
inclusion..
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
in extjs 7.0, the marker does not have the 'fx' property anymore,
but the now documented 'animation' property does not work as it seems.
instead set the animation settings directly on the chart. The only
downside is that this is now for *all* animations, not only the
fade in of the highlight. (the default duration is 500ms)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
seems to be fixed, at least i could not reproduce here.
If users report this again, we can still revert it if necessary.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
while some scrolling issues where fixed since 6.0.1, some where introduced,
namely:
* for firefox, the correct event to listen to is 'wheel' not 'mousewheel'
* the spinner scroll direction was incorrect
* the boxOverflow scroll direction was incorrect
* the boxOverflow scroll amount was too high
functions were copied from extjs source, eslintified, and adapted
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
the legend is by default of type 'sprite', rever to 'dom'
but we now have to unset the '.legend', else on destruction
extjs tries to destroy it twice
also change the onAfterAnimation listener to 'redraw', since
the original event does not exist anymore, add a buffer to it
so that it is not that heavy
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
add a new class 'x-treelist-pve-nav' so that we can use
ui: 'pve-nav'
instead of
ui: 'nav'
which has some default styling we do not want
also overwrite the font to FontAwesome
(extjs 7.0 uses 'FontAwesome 5 Free' which we do not ship)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
instead of the upstream default of 'async'
we do this since it creates some problems with our callbacks which can
happen during component destruction. The upstream reasoning does not
really makes sense for us normally, since we do not keep any references
around for most things, and thus the garbage collector can claim it.
note that this is only for components, Ext.Base sets it to 'true' by
default and we do not change this since we normally do not extend
from non-components
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
extjs 7.0 gives the responseType to the XMLHTTPRequest (which
is 'json' for a json reader), but that means that the response is
automatically decoded by the browser, with no means to get the original
return back
in our case, for successful api calls it would work, but some of our
errors are plain text, not json, so the decoded json object is 'null'
and we lose the error information
revert the type to 'undefined' which tells the browser not do do any
decoding
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
So that users of this component do not necesacrrily need to add an
initComponent override and make the `me.add_XYZ_row()` there, but
instead can use something like:
gridRows: [
{
xtype: 'text',
name: 'http-proxy',
text: gettext('HTTP proxy'),
defaultValue: Proxmox.Utils.noneText,
vtype: 'HttpProxy',
deleteEmpty: true,
},
],
I avoid using `rows` as config key as that is internally used for
quite a few things, and potentially some existing users (did not
checked all). We can still switch to that easily if it is deemed to
be better...
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
If there is extended information, the variable is overwritten anyways.
Avoid appending an extra space if there is no extended information.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Storage capacity and usage seems to prefer the base ten (SI unit) use
(makes the capacity a bigger number) while memory (RAM) is normally
preferred to use base 2.
So allow both, mostly to allow consistent displaying of metrics.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
60% is just way to low, this probably could be 80% or even 85% too,
in huge setups that normally means that there's still a lot of
resources left, but be conservative for now.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
we may want to replace them someday, at least with an intermediate
widget xtype for unified querying, but it's only going through the
local descendant, which is not that bad size-wise, so don't care..
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE has 2 domain lists, PMG only 1 since it requires the
additional type.
In PBS I do not want to have 2 lists either, since it seems
rather inconvenient to have 2 different ways to access the
same list.
Currently we decide this based on whether we have multiple
certificate types, which in PBS we don't, so we need a
separate option for this.
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
If an error is received upon expanding a node, chances are the rest of
the tree is still valid (i.e. opening a partition fails because it
doesn't contain a supported filesystem). Only show an error box for the
user, but don't mask the component in that case. Additionally, disable
the download button.
Also support an archive set to 'all' to expand all children, useful for
initializing a file-restore VM on initial load.
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Denotes objects like disks ".img.fidx" files, which shouldn't be
downloadable, but should still approximate a directory entry.
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Call a function to decide if we want to mask the component. If the
callback returns true, we assume it has already handled the error (i.e.
shown a messagebox or similar) and skip masking.
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Looks like more change than it actually is, see
`--word-diff=color --word-diff-regex='\w+'`.
The single semantic change is the added space in the render_cpu,
between the maxcpu value and CPU/s text
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
with 2 minor fixups:
* one lint error
* binding of the 'updateValues' function in the event
(we want to avoid breaking this when used in a context where
a controller exists, in that case using a string will only look in
the controller and not in the component itself anymore, so use
the function directly)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
To be replaced by generic additional items specified by the user of the window
or child class. AFAICS there are no existing users of this widget yet, so this
shouldn't break anything.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
The chart axis get initialized really, so changing the segmenter in
initComponent is not possible anymore, we can only alter the chart
base config in the constructor.
Luckily, the actual segmentation happens later, so we can pass a
flag to the y-axis and hook into the segmenter directly by creating
a new one derived from 'Ext.chart.axis.segmenter.Numeric'.
There we override the preferStep and exactStep methods to decide if
we want to calculate with base 10 or base 2.
So add a constructor to RRDChart and set the axis with the respective
segmenter, depending on the powerOfTwo config, up there initially.
Note: that makes overwriting the axes from a caller impossible, but
we do not use that anywhere, and we can control the more important
parts of the axes, like label or units already otherwise, so seems
not really required, and if, its not to hard to solve (either by
always using our new segmenter by default and handle the different
bases there directly, or by adding an explicit do not touch axes
config flag, or the like).
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
ExtJS email validation regex has a length limit of 6 on the TLD.
This breaks some new gTLDs (e.g. .systems)
Override the validation function and verify against the EMAILRE from
PVE::Tools (used for 'e-mail' in JSONSchema)
Reported in our community forum:
https://forum.proxmox.com/threads/acme-account-register-dialog-does-not-accept-gtlds.87305/
Quickly tested (by using test@test.systems(|test)? on my test-installation)
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Sometimes the reset button does not make sense and the isCreate option
does not fit as well because with it, the submit button will be enabled
right away instead of waiting for the form to be valid.
Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
Don't construct any URLs locally, instead have them (and their static
parameters) be passed in. This removes the need to have the datastore.
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
to avoid having capitalized 'WARNINGS' (especially since 'Error' is not) and
support different languages.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
A view model forumla cannot depend on itself, as that is a dependency
cycle.
In this specific case we can just drop the `hasUsage` forumla entry
completely, it is bogus as it was just returning its value, and that
is actually taken care of by the `hasUsage` data binding.
The debug build of ExtJS throws an exception on such cycles, the
release build does not cares to much and seems to do the right thing
already here.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
After the UI hang for tens of seconds for a few thousand elements got
deselected I investigated with Firefox developer tools performance
analysis, where the waterfall view showed that most of the time was
spent in array splicing.
Previously, all removed elements got removed on by one from the
`selected` Ext.util.Collection - which is basically an helper class
around arrays and objects, most of it may have become obsolete with
modern browsers. The single remove resulted into further splicing of
the array, and all in all it resulted in a dramatically increased
complexity, ~ O(n^3).
The "remove one by one" logic comes highly probably from the fact
that users can register a `beforedeselection` listener which can
block a removal of a specific record. But, that's not used by us and
not really something one would often need in practice, but still its
a documented feature of ExtJS grids we want to keep; so go for an
alternative.
So, override `doDeselect` and change the old removal logic to one
that first record those entries which got blocked from removal and
remove them in one go from the "to-be-removed" collection.
Before/After this patch on my FF 86.0.1 with my i9-9900K and
deselecting ~10k records went from ~40s to about 33 ms total, so for
that case we went 1000x faster.
The remaining time is now mostly spend in the event fire/handling
logic, but even with 50k records we spent <<500ms in total, so not
too bad and thus kept as is for now.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Same deal, however, here the PVE code is has a little bug
where changing the plugin type of a domain makes it
disappear, so this also contains some fixups.
Additionally, this now also adds the ability to change a
domain's "usage" (smtp, api or both), so similar to the
uploadButtons info in the Certificates panel, we now have a
domainUsages info. If it is set, the edit window will show a
multiselect combobox, and the panel will show a usage
column.
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Like with the account panel, the 'acmeUrl' base needs to be
specified, otherwise this is copied from PVE
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Copied from PVE with URLs now being based on the 'acmeUrl'
property which should point to the acme/ root containing
/tos, /directories, etc.
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Again, initially copied from PVE but adapted so it can be
used by both. (PVE side still needs to be tested though.)
The 'nodename' property is optional (since on PMG we
currently don't expose them via the UI directly). Instead,
the certificate info URL is required and the 'uploadButtons'
need to be passed, which just contains the certificate
"name", id (filename), url, and whether it is deletable and
whether a GUI reload is required after changing it. If only
1 entry is passed, the button stays a regular button (that
way PVE should still look the same), whereas in PMG we have
a menu to select between API and SMTP certificates.
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Mostly copied from PVE, but the user needs to set the URL
property so their stores can load the data, whereas in PVE
this was hardcoded.
API selector:
needs its url to point to the challenge-schema url
Acme Account selector:
needs its url to point to the acme account index
Acme Plugin selector:
needs its url to point to the plugin index
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
We never use that and it serves no purpose. It probably was meant to
be the upstream config 'storeId' which would add the store to the
Ext.StoreManager. This is unpractical though, since then the store
has to be explicitely destroyed, otherwise the StoreManager retains a
reference and the GC cannot remove the store.
Since donwstream users of the store can simply give the 'storeId'
property anyway if they need to be managed by the StoreManager, drop
the requirement here.
Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
500 px still fit nicely in our minimum requirements of "HD ready"
(1280 x 720 px) and for any slightly longer running task the extra
pixel are really nice, I frequently find myself resizing the height
immediately after a task window opens so lets up the default a bit...
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Using find_next_iface_id we get a valid VLAN name.
This way, inserting a vlan raw device is still required (but everything that is
inserted so far is valid).
Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>
We usually choose default values that are valid input for the field.
interfaceX.1 is rejected by the API.
Instead, use a tooltip to demonstrate possible valid inputs for the field.
Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>
Users certainly have to insert a vlan raw device when the textfield is enabled.
Currently, they only see `invalid network interface name "` when submitting.
Forbidding the blank field shows the problem earlier.
Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>