Allow number config parameter control to input decimals
Fix#379: Check pattern if provided (fix #
Fix#391: Time of day parameter format
Fix#333: Decimal handling & FP issues with oh-stepper, oh-slider
+ fix parameter types, add unit parameter to oh-slider
Signed-off-by: Yannick Schaus <github@schaus.net>
Add `searchbar-ignore` class to link skeletons to prevent
the height of the accordion to be initialized at 0px.
Should fix#401.
Add filters to display only linked or unlinked channels.
Closes#395.
Hide item linking controls for trigger channels.
Closes#390.
Add option to select/unselect all checkboxes when in
multiple links mode. This will take the linked/unlinked
filter into account, and the advanced toggle, but not
the name filter.
Closes#377.
Signed-off-by: Yannick Schaus <github@schaus.net>
The list of (installed and uninstalled) bindings is not sorted.
As a result it depends on what the rest api returns.
In this case the bindings with lowercase first character are placed after the bindings with uppercase.
To fix this after the filter a sort is added.
Signed-off-by: Hilbrand Bouwkamp <hilbrand@h72.nl>
This prevents infinite loops and other side effects.
Add an option to explicitely retrigger another autocompletion.
Signed-off-by: Yannick Schaus <github@schaus.net>
Merge the 'Info' & 'Config' tabs of the thing details
page into a single 'Thing' tab, and add a 'Code' tab
allowing to edit the relevant parts of the thing in
YAML, with partial autocompletion:
- general parameters: label, location...
- bridge
- configuration parameters
- extensible channels
Remove the unmaintained textual translation button & popup.
Styling tweaks.
Move validation buttons in add/create dialogs from the navbar
to bigger buttons at the bottom of the page:
- add thing
- add channel
- add link
- add item
Change label for no profile from 'No Profile (Default)' to
'(No Profile)'. Closes #
Async import of parameter-location in setup wizard
This prevents the location picker and Leaflet from being
put in the entry point bundle by webpack.
Don't autocomplete single choice without showing the hint menu
Signed-off-by: Yannick Schaus <github@schaus.net>
Add some autocomplete ("hint" in CodeMirror jargon) logic to YAML
editors for UI components and rules. Might be expanded to other entities
in the future.
Add CM lint plugin & move YAML errors to gutter
Allow switching to run mode from Code tab in editors.
Styling fixes in widget editor.
Convert remaining popups to routables: ensures the back button/gesture
doesn't mess up navigation.
Describe system library widgets
Switch slot config popup to tab design
Always stay on page when creating or editing rules, pages, sitemaps, widgets
(Closes #340.)
Signed-off-by: Yannick Schaus <github@schaus.net>
Upgrades the compiler and its dependencies so the compiler results of Maven builds are more similar to those generated in recent Eclipse versions.
Signed-off-by: Wouter Born <github@maindrain.net>
This introduces a way to set page-local or widget-local
variables to allow more complex scenarios in pages & custom
widget development.
Variables can be used using several methods:
- the "variable" config parameter of oh-gauge (read-only),
oh-input (new), oh-knob, oh-slider, oh-stepper, oh-toggle
will accept a variable name and control it instead of
sending commands to items if set. The "item" parameter can
still be set to set the widget to the item's state, when
the variable has no value.
- the "vars" object available in expressions (for example
`=vars.var1` will evaluate to the value of the variable `var1`.
- the "variable" action allows to set an fixed or computed
(using an expression) value to a variable.
Variables set directly by widgets on a page will propagate
to all components to the page, including personal widgets.
However, variables set within a personal widget will be scoped
to that personal widget only - except when there's already an
inherited variable with the same name.
oh-button & oh-link have a special parameter "clearVariable"
which allows to unset a version when clicked, after performing
the action. This is useful when "validating" a variable e.g.
set a command to an item with the variable value then reset it.
Additionally, allow to specify actions from props:
Every time an action is available to configure,
a special `{prefix}actionPropsParameterGroup` can be specified.
({prefix} is usually empty)
It tells the action processing method to take the action
configuration from props defined in a certain parameter group
in the context instead of the current component's config.
Additionally, action config parameters will be injected to
parameter groups with an 'action' context.
Example:
```
uid: widget_201d55a19d
tags: []
props:
parameters:
- label: Icon
name: icon
required: false
type: TEXT
parameterGroups:
- name: action
context: action
label: Click Action
timestamp: Sep 27, 2020, 5:31:10 PM
component: oh-icon
config:
icon: =props.icon || 'lightbulb'
actionPropsParameterGroup: action
width: 100
style:
filter: grayscale()
class:
- margin
- padding
- elevation-10
- card
```
Other fixes:
- Allow oh-image to perform an action when clicked directly.
- Pass config parameters to oh-icon & allow actions.
- Allow oh-sheet to take its title from a widget label.
- Pass styles applied to oh-trend to vue-trend.
- Check for context before resolving config.
- Styling fixes: Align blocks better throughout the app in config screens.
- Disable popup workaround as it seems to work now.
- Routable widget config & code popup in all page designers.
Signed-off-by: Yannick Schaus <github@schaus.net>
For config parameters with options and limitToOptions=false,
currently implemented as a text field with autocomplete.
Display & allow filtering on the label, and display all
the available options on open.
Fixes#357.
Don't perform the initial validation pass on config sheet.
Adds a mention in the description for required fields instead.
Closes#353.
Signed-off-by: Yannick Schaus <github@schaus.net>
Reported in https://community.openhab.org/t/oh3-creating-channels-in-mqtt-thing-not-possible/105637.
If the user is in another tab than "Config" of the thing details page, any attempt to save will fail because the config sheet is not present (due to a `v-if="currentTab === 'config'"`) so the attempt to validate the fields leads to an exception.
This makes sure that the config sheet is always in the DOM.
Signed-off-by: Yannick Schaus <github@schaus.net>
This introduces a new first-level class of widgets in the
standard library: cells.
They are heavily inspired by
https://developer.android.com/preview/features/device-control
and can either perform an action on a click/short tap, like
toggling a switch or perform something stateless like opening
a modal, navigating, running a rule...
It will also expand on a long tap (if the device doesn't support
touch, right-click is supported and there's a dedicated button)
If no short tap/click action is configured it will default to
expanding the cell unless there are no additional controls to show.
Ways to alter the design of the cell button (when not expanded)
and the expanded controls, eventually with personal widgets
configured in the developer tools, are also available.
This will allow the community to develop specialized widgets
for e.g. thermostats, weather forecasts etc.
A series of cells tailored to common scenarios (toggle +
dimmer or color picker) and maybe a few more are provided.
There's be a way to define the default cell widget for an
item using the "cellWidget" metadata namespace, in the same
manner as the existing default standalone and list item widgets.
The container, oh-cells, can be added to a block in a layout
page, instead of a regular row. It will automatically arrange
the cells, which have a fixed height and are all of the same
size.
Other unrelated changes introduced with this commit:
- Move the widget preview from the bottom sheet to the page
in metadata editor for default widgets.
- Add oh-trend to system library, replace trend component
with oh-trend in oh-label-card
- Show message when action not performed in editor
- Refactor config eval, allow expressions in objects
- Add Number in the evaluation context.
- Process visible, visibleTo parameters separately
(this prevents evaluating the entire config if the
only parameter to evaluate is "visible" (in
generic-widget-component for non-f7 components).
- Describe parameters for trend lines
- Move oh-icon to system library
Signed-off-by: Yannick Schaus <github@schaus.net>
Include these mixins to have a consistent badge color & text
in all thing & rule representations (except on the details pages
headers where the status & status details are still displayed as-is).
Fixes#342.
Convert thing details page styles to Stylus + cleanups.
Tweak thing properties label lengths & overflow.
Fixes#347.
Signed-off-by: Yannick Schaus <github@schaus.net>
Perform the validation of all configuration parameters
when they are displayed (for instance this will show the
"Please fill out this field" message on all required
parameters immediately when the sheet is displayed).
Validate ID and label inputs on general thing settings.
Validate configuration on thing creation or update, and
profile configuration on link add/edit, and refuse to
save if there are invalid parameters.
Closes#267.
Signed-off-by: Yannick Schaus <github@schaus.net>
Only allow a single item to be picked when choosing "Add from Model"
to add a widget to a oh-grid-col.
Fixes#345.
Signed-off-by: Yannick Schaus <github@schaus.net>
On both textual item definitions and sitemap parsers.
This is easier than supporting tabs in the grammars.
Fixes#325.
Signed-off-by: Yannick Schaus <github@schaus.net>
Upgrades the Travis CI build environment to Ubuntu 20.04 (Focal Fossa).
Also fixes the following Travis configuration validation warnings:
* deprecated key sudo (The key `sudo` has no effect anymore.)
* missing os, using the default linux
Also updates the caching config:
* $HOME/.p2 has no content since the bnd migration
* bundles/org.openhab.ui.homebuilder/npm_cache is not useful to cache because the POM has a configuration to clean the dir during builds
Signed-off-by: Wouter Born <github@maindrain.net>
This PR moves the storage backend for HABPanel's panel registry
from the service configuration to the "habpanel:panelconf" UI
components namespace, so they're accessible without authorization.
The panel registry object format is converted back and forth to
the UI components format during loading/saving.
To save, it tries to find a refresh token from the main UI stored
in LocalStorage and uses it to get access tokens - a new access
token is requested for each save. Whether or not implementing a
complete OAuth2 authorization code flow (given the refresh token
if there for use as it's the same origin as the main UI, and users
can be taught to first sign in with the main UI to be able to edit
HABPanel) can be debated and is still t.b.d.
(The code to load the configuration with the service config, like
in OH2, has been left but it is not loaded. It will also work
because it tries to get access tokens as well.)
The other options that were formally in the service configuration
have been changed as well:
- the "initial panel configuration" is now a "default"/"starred"
flag on the panel configuration itself, it can be set within
HABPanel itself (the "star" icon after the panel config name in
Settings), only one should normally be starred at any given time,
but it's not enforced - it's the admin responsibility to ensure
that.
- the "lock editing" is now tied to the presence of the refresh
token; this means, signing out in the main UI will automatically
disable the editing features in HABPanel because there's no more
possibility to get an access token to save.
Similarly, the locale is taken from /rest/ instead of the i18n
service directly.
Some missing translations have been added and some changed.
Signed-off-by: Yannick Schaus <github@schaus.net>
* [Main UI] proper handling when behind a reverse proxy auth
- This makes a check for the presence of a non-HttpOnly
`X-OPENHAB-AUTH-HEADER` cookie; if found, pass the current
access_token in the `X-OPENHAB-TOKEN` HTTP header instead of
the `Authorization` header as Bearer credentials.
This is explicitely supported by the backend and mitigates
the collisions with authorization schemes set by proxies like
openHAB Cloud.
- Add crossorigin="use-credentials" to the links in index.html
This allows the app to fetch icons and the app manifest
and others properly when credentials are needed by a proxy.
Signed-off-by: Yannick Schaus <github@schaus.net>
Notable upgrades include:
- Framework7 to 5.7.12
- ECharts to 4.9.0
- Leaflet to 1.7.1
Includes a fix for https://github.com/framework7io/framework7/issues/3698
thus should fix#311 (spellcheck is disabled
by default in all searchbars so no changes
needed).
Fix for default charts axis pointer in dark mode,
duplicate labels in rule status chip.
Signed-off-by: Yannick Schaus <github@schaus.net>
Handle the left recursion properly in the grammar, so that lists of more than 2 tags, group names or metadata don't cause an ambiguity leading to exponential parsing times.
Fixes#321.
Signed-off-by: Yannick Schaus <github@schaus.net>
Add 2 additional widget actions:
- "rule": Run a rule immediately
- "photos": Open a photo browser to view images & videos in fullscreen.
Also make the default widgets (standalone & list item) for
Image items perform this action.
Other improvements:
- Described the "options" action;
- Allowed the "options" action to retrieve command options from
the target item's command description dynamically (default
if explicit options are omitted);
- Default widgets for non-read-only items with command options
don't specify them in the widget config anymore; this allows
the list of options to remain current if the options are
dynamic without reconfiguring the widget;
- Add a "feedback" parameter to actions performing commands or
running rules to let the user show a toast notification when
the action has been performed;
- Removed the parameter description leftover from the actions
mixin file;
- Styling fixes for clickable oh-image-card
Signed-off-by: Yannick Schaus <github@schaus.net>
This launches a setup wizard when openHAB is started for the
first time. It allows to:
- set some regional settings (language, region, timezone)
- set the location, optionally with the help of the browser Location API
- install an initial set of add-ons
It is also possible to skip any of these steps, or the setup wizard
altogether. Regardless, the "overview" layout page will be created
so that it can act as a detection mechanism to determine whether the
setup wizard has already run or not, and prevent it from being shown
a second time. Therefore, deleting the overview page has been made
impossible in the UI's pages list.
Signed-off-by: Yannick Schaus <github@schaus.net>
- Added viewBox property to the none.svg file. This property is necessary to ensure error-free processing in the subsequent process.
- Replaced the svgcleaner tool with scour, which in our case not only produces better lossless compression results, but also automatically corrects the corrupted files. (all svg files, svgcleaner: 837.092 Byte -> scour: 794.586 Byte, -5.07%)
- Replaced pngout by optipng since pngout is is closed source, it's license prohibits bundled distribution and optipng delivers better lossless compression results) (all png files, pngout: 514.752 Byte -> optipng: 494.134 Byte, -4.01%)
- Added the pngquant tool for lossy compression to further reduce the size of the png files without noticeable loss of quality. (all png files, before: 494.134 Byte -> after: 236.338 Byte, -109.08%)
The conversion script has been refactored and renamed in order to use the new tooling.
Dockerfile has been added to execute the script platform independent.
The script as well as the new tooling can be tested most easily with the provided docker container. Just execute the following command in the bundles/org.openhab.ui.iconset.classic directory:
docker run --rm -it -v ${PWD}/src/main/resources/icons:/workdir $(docker build -q .) ./.convert.sh
Signed-off-by: Philipp Waller <1090452+philippwaller@users.noreply.github.com>
* [WIP] Widget definition API overhaul
This changes the way a widget component is described from a simple
object in the default export in SFCs to a function that will only
be evaluated when needed; this should improve performance a bit
when the widget isn't being edited, and allows to use helper functions
to build the parameters in a more concise way. More logic can be
introduced when building these definitions i.e. i18n: translating
them in the currently active language.
All widget definitions can also be considered to be assets rather than
code (even if there's some logic in their building) so they've been
moved to the assets/definitions/widgets folder and simply imported in
the component's SFC; this allows to re-use parameters in a cleaner
way - for instance, the toggle card and toggle list item of the
standard library accept the same parameters coming from the toggle
widget from the system library, also all cards/list items support a
common set of parameters related to the card/list item themselves.
Signed-off-by: Yannick Schaus <github@schaus.net>
Pre-fill config parameters controls with the default
value if provided in the config description.
Display thing configuration parameter status info.
Fixes#285.
Fixes#293.
Signed-off-by: Yannick Schaus <github@schaus.net>