+ ${ this.data.description ? this.data.description : '' } +
+ +${renderedValue}
+ `;
+ container.append(detailItem);
+ }
+ });
+
+ // hide the details area if empty
+ container.hidden = !container.children.length;
+ }
+
+ renderPanelButtons(container) {
+ const createButton = CRM.riverlea.createButton;
+
+ // note: we stash these buttons as instance properties so they can be
+ // updated in renderState
+ this.setPreview = createButton('Preview', 'btn-set-preview', 'eye', () => this.streamList.updateSetting('preview', this.streamName));
+ this.setBackend = createButton('Set for Backend', 'btn-set-backend', 'briefcase', () => this.streamList.confirmThenUpdate('backend', this.streamName, this.data.label));
+ this.setFrontend = createButton('Set for Frontend', 'btn-set-frontend', 'shop', () => this.streamList.confirmThenUpdate('frontend', this.streamName, this.data.label));
+
+ container.append(this.setPreview, this.setBackend, this.setFrontend);
+ }
+
+ renderHeaderButtons(container) {
+ const createButton = CRM.riverlea.createButton;
+
+ const cloneBtn = createButton('Clone', 'btn-clone', 'copy', () => this.streamList.clone(this.streamName).then(() => CRM.alert(ts('Stream cloned'), '', 'success')));
+ container.append(cloneBtn);
+
+ if (!this.data.is_reserved) {
+ const editBtn = createButton('Edit', 'btn-update', 'pen', () => this.streamList.openEditorDialog(this.streamName, this.data));
+
+ const deleteBtn = createButton('Delete', 'btn-delete', 'trash',
+ () => CRM.confirm({
+ message: ts(`Are you sure you want to delete %1?`, {1: this.data.label})
+ })
+ .on('crmConfirm:yes', () => this.streamList.delete(this.streamName))
+ );
+
+ container.append(editBtn, deleteBtn);
+ }
+
+ }
+
+ setState(prop, value) {
+ this.state[prop] = value;
+ if (this.rendered) {
+ this.renderState();
+ }
+ }
+
+ renderState() {
+ const updateButtonState = (button, is_disabled) => {
+ button.disabled = is_disabled;
+ button.classList.toggle('btn-stream-selected', is_disabled);
+ };
+
+ updateButtonState(this.setPreview, this.state.is_preview);
+ updateButtonState(this.setBackend, this.state.is_backend);
+ updateButtonState(this.setFrontend, this.state.is_frontend);
+
+ this.classList.toggle('is-set-preview', this.state.is_preview);
+ this.classList.toggle('is-set-backend', this.state.is_backend);
+ this.classList.toggle('is-set-frontend', this.state.is_frontend);
+ }
+
+ fetchAndRender() {
+ CRM.api4('RiverleaStream', 'get', {
+ where: [['name', '=', this.streamName]],
+ })
+ .then((records) => {
+ if (!records.length) {
+ throw new Error('Failed to refetch stream data for ' + this.streamName);
+ }
+ return records[0];
+ })
+ .then((record) => this.data = record)
+ .then(() => this.render());
+ }
+ }
+
+ customElements.define('civi-riverlea-stream-card', CiviRiverleaStreamCard);
+
+})(CRM);
+
+
diff --git a/ext/riverlea/js/utils.js b/ext/riverlea/js/utils.js
new file mode 100644
index 000000000000..b21a6384b247
--- /dev/null
+++ b/ext/riverlea/js/utils.js
@@ -0,0 +1,18 @@
+(function (CRM) {
+
+ CRM.riverlea = CRM.riverlea || {};
+
+ // TODO: move to a general CRM util?
+ CRM.riverlea.createButton = (label, btnClass, icon, clickHandler) => {
+ const button = document.createElement('button');
+ button.type = 'button';
+ button.classList.add('btn', btnClass);
+ button.innerHTML = `${ts(label)}`;
+ button.onclick = clickHandler;
+
+ return button;
+ };
+
+})(CRM);
+
+
diff --git a/ext/riverlea/managed/navigationmenu.mgd.php b/ext/riverlea/managed/Navigation_ThemeSettings.mgd.php
similarity index 61%
rename from ext/riverlea/managed/navigationmenu.mgd.php
rename to ext/riverlea/managed/Navigation_ThemeSettings.mgd.php
index 1ed3e54afc56..d21e7cc2715f 100644
--- a/ext/riverlea/managed/navigationmenu.mgd.php
+++ b/ext/riverlea/managed/Navigation_ThemeSettings.mgd.php
@@ -4,18 +4,17 @@
return [
[
- 'name' => 'riverlea_settings',
+ 'name' => 'Navigation_ThemeSettings',
'entity' => 'Navigation',
'cleanup' => 'always',
'update' => 'unmodified',
'params' => [
'version' => 4,
'values' => [
- 'label' => E::ts('Riverlea Settings'),
- 'name' => 'riverlea_settings',
- 'url' => 'civicrm/admin/setting/riverlea',
- 'permission' => 'administer riverlea',
- 'permission_operator' => 'OR',
+ 'label' => E::ts('Theme Settings'),
+ 'name' => 'ThemeSettings',
+ 'url' => 'civicrm/admin/theme',
+ 'permission' => 'administer CiviCRM',
'parent_id.name' => 'Customize Data and Screens',
'is_active' => TRUE,
'has_separator' => 0,
diff --git a/ext/riverlea/settings/riverlea.setting.php b/ext/riverlea/settings/riverlea.setting.php
index 1b080340928e..979cc68983a5 100644
--- a/ext/riverlea/settings/riverlea.setting.php
+++ b/ext/riverlea/settings/riverlea.setting.php
@@ -20,9 +20,7 @@
'dark' => E::ts('Always use dark mode'),
],
'settings_pages' => [
- 'riverlea' => ['weight' => 100],
- // show alongside backend theme selector on Display settings page
- 'display' => ['section' => 'theme', 'weight' => 20],
+ 'theme' => ['weight' => 110],
],
],
'riverlea_dark_mode_frontend' => [
@@ -42,35 +40,7 @@
'dark' => E::ts('Always use dark mode'),
],
'settings_pages' => [
- 'riverlea' => ['weight' => 110],
- // show alongside frontend theme selector on Display settings page
- 'display' => ['section' => 'theme', 'weight' => 40],
- ],
- ],
- 'riverlea_font_size' => [
- 'name' => 'riverlea_font_size',
- 'group' => 'riverlea',
- 'default' => '1',
- 'type' => 'String',
- 'html_type' => 'select',
- 'add' => 1.0,
- 'options' => [
- '0.75' => E::ts('Smallest'),
- '0.875' => E::ts('Small'),
- '1' => E::ts('Default'),
- '1.125' => E::ts('Big'),
- '1.5' => E::ts('Bigger'),
- ],
- 'on_change' => [
- '\\Civi\\Riverlea\\StyleLoader::onChangeFontsize',
- ],
- 'validate_callback' => '\\Civi\\Riverlea\\StyleLoader::validateFontsize',
- 'title' => E::ts('Font size'),
- 'is_domain' => 1,
- 'is_contact' => 0,
- 'help_text' => E::ts('For systems where 1rem = 16px (which is the default in RiverLea and all browsers) these sizes represent: Smallest 12px, Small 14px, Default 16px, Big 18px, Bigger 24px.'),
- 'settings_pages' => [
- 'riverlea' => ['weight' => 500],
+ 'theme' => ['weight' => 210],
],
],
];
diff --git a/ext/riverlea/templates/Civi/Riverlea/Page/ThemeAdmin.tpl b/ext/riverlea/templates/Civi/Riverlea/Page/ThemeAdmin.tpl
new file mode 100644
index 000000000000..4ad3662bc471
--- /dev/null
+++ b/ext/riverlea/templates/Civi/Riverlea/Page/ThemeAdmin.tpl
@@ -0,0 +1,19 @@
+