summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar maTh <math-home@web.de> 2021-10-19 15:08:32 +0200
committerGravatar GitHub <noreply@github.com> 2021-10-19 15:08:32 +0200
commit3623a5421df8198651d8e8a9d676f0661c307cf9 (patch)
tree10cb0ddf512aa09a3a8be6c186a1447dca517e9b
parent77e21cb41fe1f2a7a9dc8563b3bfb21fc3262d1a (diff)
enhancement subscription management page (#3893)
* wip * wip2 * i18n * Update app/views/helpers/category/update.phtml Co-authored-by: Frans de Jonge <fransdejonge@gmail.com> * fixed box layout * Revert "i18n" This reverts commit a2e4d8ace661df806997a8310f069a67d71910f4. * i18n This reverts commit 55236930cfc7165ff883ea2a9538d3502b8922eb. Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
-rw-r--r--app/Controllers/subscriptionController.php15
-rw-r--r--app/i18n/cz/sub.php2
-rw-r--r--app/i18n/de/sub.php2
-rw-r--r--app/i18n/en-us/sub.php2
-rw-r--r--app/i18n/en/sub.php2
-rwxr-xr-xapp/i18n/es/sub.php2
-rw-r--r--app/i18n/fr/sub.php2
-rw-r--r--app/i18n/he/sub.php2
-rw-r--r--app/i18n/it/sub.php2
-rw-r--r--app/i18n/ja/sub.php2
-rw-r--r--app/i18n/kr/sub.php2
-rw-r--r--app/i18n/nl/sub.php2
-rw-r--r--app/i18n/oc/sub.php2
-rw-r--r--app/i18n/pl/sub.php2
-rw-r--r--app/i18n/pt-br/sub.php2
-rw-r--r--app/i18n/ru/sub.php2
-rw-r--r--app/i18n/sk/sub.php2
-rw-r--r--app/i18n/tr/sub.php2
-rw-r--r--app/i18n/zh-cn/sub.php2
-rw-r--r--app/views/helpers/category/update.phtml33
-rw-r--r--app/views/subscription/index.phtml37
-rw-r--r--p/scripts/category.js4
-rw-r--r--p/themes/base-theme/template.css7
23 files changed, 85 insertions, 47 deletions
diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php
index 4bb08f495..5a89d0e08 100644
--- a/app/Controllers/subscriptionController.php
+++ b/app/Controllers/subscriptionController.php
@@ -21,6 +21,21 @@ class FreshRSS_subscription_Controller extends Minz_ActionController {
$feedDAO->updateTTL();
$this->view->categories = $catDAO->listSortedCategories(false);
$this->view->default_category = $catDAO->getDefault();
+
+ $signalError = false;
+ foreach ($this->view->categories as $cat) {
+ $feeds = $cat->feeds();
+ foreach ($feeds as $feed) {
+ if ($feed->inError()) {
+ $signalError = true;
+ }
+ }
+ if ($signalError) {
+ break;
+ }
+ }
+
+ $this->view->signalError = $signalError;
}
/**
diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php
index f075cfbac..f1bf41185 100644
--- a/app/i18n/cz/sub.php
+++ b/app/i18n/cz/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => 'Copy the following URL to use it within an external tool.', // TODO - Translation
'title' => 'API', // TODO - Translation
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Kategorie',
+ 'add' => 'Přidat kategorie',
'archiving' => 'Archivace',
'empty' => 'Vyprázdit kategorii',
'information' => 'Informace',
diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php
index d00869ffd..21d1b18db 100644
--- a/app/i18n/de/sub.php
+++ b/app/i18n/de/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Die Erstellung von Kategorien und Feeds wurde verschoben und findet sich ab sofort <a href=\'%s\'>hier</a>. Zusätzlich ist ein Zugriff über den linken Menüpunkt oder über das ✚ Symbol auf der Hauptseite möglich.',
'api' => array(
'documentation' => 'Kopieren Sie die folgende URL, um sie in einem externen Tool zu verwenden.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Kategorie',
+ 'add' => 'Kategorie hinzufügen',
'archiving' => 'Archivierung',
'empty' => 'Leere Kategorie',
'information' => 'Information',
diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php
index 7af715d95..f931b9e64 100644
--- a/app/i18n/en-us/sub.php
+++ b/app/i18n/en-us/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.',
'api' => array(
'documentation' => 'Copy the following URL to use it within an external tool.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Category',
+ 'add' => 'Add a category',
'archiving' => 'Archiving',
'empty' => 'Empty category',
'information' => 'Information',
diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php
index a412884fa..57fdba557 100644
--- a/app/i18n/en/sub.php
+++ b/app/i18n/en/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.',
'api' => array(
'documentation' => 'Copy the following URL to use it within an external tool.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Category',
+ 'add' => 'Add a category',
'archiving' => 'Archiving',
'empty' => 'Empty category',
'information' => 'Information',
diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php
index 8113abe7a..6de8f5f7f 100755
--- a/app/i18n/es/sub.php
+++ b/app/i18n/es/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => 'Copy the following URL to use it within an external tool.', // TODO - Translation
'title' => 'API', // TODO - Translation
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Categoría',
+ 'add' => 'Añadir categoría',
'archiving' => 'Archivo',
'empty' => 'Vaciar categoría',
'information' => 'Información',
diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php
index 8a1323968..4e11351e2 100644
--- a/app/i18n/fr/sub.php
+++ b/app/i18n/fr/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'L\'ajout de flux et de catégories se fait désormais <a href=\'%s\'>ici</a>. Il est possible d\'y accéder depuis le menu de gauche ou depuis l\'icône ✚ présente sur la page principale.',
'api' => array(
'documentation' => 'Copier l’URL suivante dans l’outil qui utilisera l’API.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Catégorie',
+ 'add' => 'Ajouter catégorie',
'archiving' => 'Archivage',
'empty' => 'Catégorie vide',
'information' => 'Informations',
diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php
index 16e55a483..628e941c5 100644
--- a/app/i18n/he/sub.php
+++ b/app/i18n/he/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => 'Copy the following URL to use it within an external tool.', // TODO - Translation
'title' => 'API', // TODO - Translation
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'קטגוריה',
+ 'add' => 'Add a category', // TODO - Translation
'archiving' => 'ארכוב',
'empty' => 'Empty category', // TODO - Translation
'information' => 'מידע',
diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php
index e3af2cfcd..9efb823d6 100644
--- a/app/i18n/it/sub.php
+++ b/app/i18n/it/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => 'Copy the following URL to use it within an external tool.', // TODO - Translation
'title' => 'API', // TODO - Translation
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Categoria',
+ 'add' => 'Aggiungi categoria',
'archiving' => 'Archiviazione',
'empty' => 'Categoria vuota',
'information' => 'Informazioni',
diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php
index 2b265e169..e6bacd0ec 100644
--- a/app/i18n/ja/sub.php
+++ b/app/i18n/ja/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => '<a href=\'%s\'>ここへ</a>フィードとカテゴリは移動されました。また左側のメニューや ✚ アイコンからフィードとカテゴリへ移動できます。',
'api' => array(
'documentation' => '外部ツール内で使うURLをコピーします。',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'カテゴリ',
+ 'add' => 'Add a category', // TODO - Translation
'archiving' => 'アーカイブ',
'empty' => 'からのカテゴリ',
'information' => 'インフォメーション',
diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php
index 21fcf782a..98cef9046 100644
--- a/app/i18n/kr/sub.php
+++ b/app/i18n/kr/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => '외부 도구에서 API를 사용하기 위해서 아래 URL을 사용하세요.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => '카테고리',
+ 'add' => 'Add a category', // TODO - Translation
'archiving' => '보관',
'empty' => '빈 카테고리',
'information' => '정보',
diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php
index 18bde0472..8d5707be1 100644
--- a/app/i18n/nl/sub.php
+++ b/app/i18n/nl/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Het toevoegen van feeds en categorieën is <a href=\'%s\'>hierheen</a> verplaatst. Deze functionaliteit is ook toegankelijk via het menu links en via het ✚ icoon op de hoofdpagina.',
'api' => array(
'documentation' => 'Kopieer de volgende URL om deze in een externe toepassing te gebruiken.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Categorie',
+ 'add' => 'Voeg categorie',
'archiving' => 'Archiveren',
'empty' => 'Lege categorie',
'information' => 'Informatie',
diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php
index e9ba96f35..dc058cbfb 100644
--- a/app/i18n/oc/sub.php
+++ b/app/i18n/oc/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'La creacion de flux e categoria es desplaçada <a href=\'%s\'>aquí</a>. I avètz tanben accès del menú a man esquèrra e de l’icòna ✚ sus la pagina principala.',
'api' => array(
'documentation' => 'Copiatz l’URL seguenta per l’utilizaire dins d’una aisina extèrna.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Categoria',
+ 'add' => 'Ajustar categoria',
'archiving' => 'Archivar',
'empty' => 'Categoria voida',
'information' => 'Informacions',
diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php
index dd9781873..998dc7b4f 100644
--- a/app/i18n/pl/sub.php
+++ b/app/i18n/pl/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Dodawanie nowych kanałów i kategorii zostało przeniesione <a href=\'%s\'>tutaj</a>. Jest również dostępne w menu po lewej stronie, a także za pomocą ikony ✚ dostępnej na głównej stronie.',
'api' => array(
'documentation' => 'Skopiuj następujący URL, by wykorzystać go w zewnętrznym narzędziu.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Kategoria',
+ 'add' => 'Dodaj kategoria',
'archiving' => 'Archiwizacja',
'empty' => 'Pusta kategoria',
'information' => 'Informacje',
diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php
index c4e594279..2f931b815 100644
--- a/app/i18n/pt-br/sub.php
+++ b/app/i18n/pt-br/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Categoria',
+ 'add' => 'Adicionar categoria',
'archiving' => 'Arquivar',
'empty' => 'Categoria vazia',
'information' => 'Informações',
diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php
index 81b768fb0..1607d5bad 100644
--- a/app/i18n/ru/sub.php
+++ b/app/i18n/ru/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Создание лент и категорий перемещено <a href=\'%s\'>сюда</a>. Оно также доступно из меню слева и по нажатию на иконку ✚ на главной странице.',
'api' => array(
'documentation' => 'Скопируйте URL для использования во внешнем инструменте.',
'title' => 'API', // TODO - Translation
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Категория',
+ 'add' => 'Добавить категория',
'archiving' => 'Архивирование',
'empty' => 'Пустая категория',
'information' => 'Информация',
diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php
index 098f09371..ee0da5898 100644
--- a/app/i18n/sk/sub.php
+++ b/app/i18n/sk/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', // TODO - Translation
'api' => array(
'documentation' => 'Skopírujte tento odkaz a použite ho v inom programe.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Kategória',
+ 'add' => 'Pridať kategória',
'archiving' => 'Archiving', // TODO - Translation
'empty' => 'Prázdna kategória',
'information' => 'Informácia',
diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php
index 56a1f7145..644e01a46 100644
--- a/app/i18n/tr/sub.php
+++ b/app/i18n/tr/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => 'Akış ve kategori oluşturma menüsü <a href=\'%s\'>buraya</a> taşındı. Ayrıca sol menüden ve anasayfadaki ✚ simgesinden de ulaşılabilir.',
'api' => array(
'documentation' => 'URL\'yi harici bir araçla kullanmak için kopyala.',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => 'Kategori',
+ 'add' => 'Kategori ekle',
'archiving' => 'Arşiv',
'empty' => 'Boş kategori',
'information' => 'Bilgi',
diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php
index 58ecabf79..daffa70b6 100644
--- a/app/i18n/zh-cn/sub.php
+++ b/app/i18n/zh-cn/sub.php
@@ -1,7 +1,6 @@
<?php
return array(
- 'add' => '订阅源和分类的创建已被移至 <a href=\'%s\'>这里</a>。 也可从左侧菜单或主页的 ✚ 图标访问。',
'api' => array(
'documentation' => '复制以下地址,以供外部工具使用',
'title' => 'API',
@@ -13,6 +12,7 @@ return array(
),
'category' => array(
'_' => '分类',
+ 'add' => 'Add a category', // TODO - Translation
'archiving' => '归档',
'empty' => '空分类',
'information' => '信息',
diff --git a/app/views/helpers/category/update.phtml b/app/views/helpers/category/update.phtml
index a2ab7a938..085b49aa6 100644
--- a/app/views/helpers/category/update.phtml
+++ b/app/views/helpers/category/update.phtml
@@ -7,6 +7,7 @@
<form method="post" action="<?= _url('subscription', 'category', 'id', $this->category->id()) ?>" autocomplete="off">
<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
+
<legend><?= _t('sub.category.information') ?></legend>
<div class="form-group">
<label class="group-name" for="name"><?= _t('sub.category.title') ?></label>
@@ -28,16 +29,8 @@
<div class="form-group form-actions">
<div class="group-controls">
<button class="btn btn-important"><?= _t('gen.action.submit') ?></button>
- <button class="btn btn-attention confirm"
- data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"
- formaction="<?= _url('category', 'empty', 'id', $this->category->id()) ?>"
- formmethod="post"><?= _t('gen.action.empty') ?></button>
- <?php if (!$this->category->isDefault()): ?>
- <button class="btn btn-attention confirm"
- data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"
- formaction="<?= _url('category', 'delete', 'id', $this->category->id()) ?>"
- formmethod="post"><?= _t('gen.action.remove') ?></button>
- <?php endif;?>
+ <button type="reset" class="btn"><?= _t('gen.action.cancel') ?></button>
+
</div>
</div>
@@ -165,5 +158,25 @@
<button type="reset" class="btn"><?= _t('gen.action.cancel') ?></button>
</div>
</div>
+
+ <?php if (!$this->category->isDefault()): ?>
+ <p class="alert alert-warn">
+ <?= _t('sub.feed.moved_category_deleted', $this->default_category->name()) ?>
+ </p>
+ <?php endif;?>
+ <div class="form-group form-actions">
+ <div class="group-controls">
+ <button class="btn btn-attention confirm"
+ data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"
+ formaction="<?= _url('category', 'empty', 'id', $this->category->id()) ?>"
+ formmethod="post"><?= _t('gen.action.empty') ?></button>
+ <?php if (!$this->category->isDefault()): ?>
+ <button class="btn btn-attention confirm"
+ data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"
+ formaction="<?= _url('category', 'delete', 'id', $this->category->id()) ?>"
+ formmethod="post"><?= _t('gen.action.remove') ?></button>
+ <?php endif;?>
+ </div>
+ </div>
</form>
</div>
diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml
index 0d58b5436..fe28ae45d 100644
--- a/app/views/subscription/index.phtml
+++ b/app/views/subscription/index.phtml
@@ -7,25 +7,28 @@
<h1><?= _t('sub.title') ?></h1>
- <p class="alert alert-warn">
- <?= _t('sub.feed.moved_category_deleted', $this->default_category->name()) ?>
- </p>
-
- <p class="alert alert-warn">
- <?= _t('sub.add', _url('subscription', 'add')) ?>
- </p>
-
<?php if ($this->onlyFeedsWithError): ?>
- <p class="alert alert-warn">
+ <div class="link-showAllFeeds-wrapper">
+ <a href="<?= _url('subscription', 'index') ?>">← <?= _t('sub.feed.show.all') ?></a>
+ </div>
+ <p class="alert alert-warn">
<?= _t('sub.feed.showing.error') ?>
</p>
+
<?php endif; ?>
+ <?php if (!$this->onlyFeedsWithError && $this->signalError){ ?>
+ <div>
+ <a class="btn" href="<?= _url('subscription', 'index', 'error', 1) ?>"><?= _i('look') ?> <?= _t('sub.feed.show.error') ?></a>
+ </div>
+ <?php } ?>
+
<form id="controller-category" method="post" aria-hidden="true">
<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
</form>
<?php
+ $signalError = false;
foreach ($this->categories as $cat) {
$feeds = $cat->feeds();
?>
@@ -57,17 +60,19 @@
?>
<li class="item feed disabled" dropzone="move"><div class="alert-warn"><?= _t('sub.category.empty') ?></div></li>
<?php } ?>
+ <li class="item feed">✚ <a href="<?= _url('subscription', 'add') ?>"><?= _t('sub.feed.add') ?></a></li>
</ul>
</div>
<?php } ?>
- <ul>
- <?php if ($this->onlyFeedsWithError): ?>
- <li><a href="<?= _url('subscription', 'index') ?>"><?= _t('sub.feed.show.all') ?></a></li>
- <?php else: ?>
- <li><a href="<?= _url('subscription', 'index', 'error', 1) ?>"><?= _t('sub.feed.show.error') ?></a></li>
- <?php endif; ?>
- </ul>
+ <div class="box visible-semi">
+ <div class="box-title">
+ ✚ <a href="<?= _url('subscription', 'add') ?>"><?= _t('sub.category.add') ?></a>
+ </div>
+ <ul class="box-content">
+ </ul>
+ </div>
+
</div>
<?php $class = $this->displaySlider ? ' class="active"' : ''; ?>
diff --git a/p/scripts/category.js b/p/scripts/category.js
index 3e09fc4c7..2a24bc47d 100644
--- a/p/scripts/category.js
+++ b/p/scripts/category.js
@@ -24,8 +24,8 @@ function dragend_process(t) {
const p = t.parentElement;
t.remove();
- if (p.childElementCount <= 0) {
- p.insertAdjacentHTML('beforeend', '<li class="item feed disabled" dropzone="move"><div class="alert-warn">' + context.i18n.category_empty + '</div></li>');
+ if (p.childElementCount <= 1) {
+ p.insertAdjacentHTML('afterbegin', '<li class="item feed disabled" dropzone="move"><div class="alert-warn">' + context.i18n.category_empty + '</div></li>');
}
}
}
diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css
index c98277a01..ccbb33d3b 100644
--- a/p/themes/base-theme/template.css
+++ b/p/themes/base-theme/template.css
@@ -465,7 +465,7 @@ a.btn {
/*=== Boxes */
.box {
- margin: 20px 10px;
+ margin: 20px 20px 20px 0;
display: inline-block;
max-width: 95%;
width: 20rem;
@@ -473,6 +473,11 @@ a.btn {
vertical-align: top;
}
+.box.visible-semi {
+ border-style: dashed;
+ opacity: 0.5;
+}
+
.box .box-title {
position: relative;
font-size: 1.2rem;