diff options
| -rwxr-xr-x | app/Controllers/configureController.php | 2 | ||||
| -rw-r--r-- | app/views/configure/queries.phtml | 5 | ||||
| -rw-r--r-- | p/scripts/user.query.js | 48 |
3 files changed, 52 insertions, 3 deletions
diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 5c8814895..6358f48c2 100755 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -275,6 +275,8 @@ class FreshRSS_configure_Controller extends Minz_ActionController { * checking if categories and feeds are still in use. */ public function queriesAction() { + Minz_View::appendScript(Minz_Url::display('/scripts/user.query.js?' . @filemtime(PUBLIC_PATH . '/scripts/user.query.js'))); + $category_dao = FreshRSS_Factory::createCategoryDao(); $feed_dao = FreshRSS_Factory::createFeedDao(); $tag_dao = FreshRSS_Factory::createTagDao(); diff --git a/app/views/configure/queries.phtml b/app/views/configure/queries.phtml index cebd61547..032f18621 100644 --- a/app/views/configure/queries.phtml +++ b/app/views/configure/queries.phtml @@ -3,12 +3,12 @@ <div class="post"> <a href="<?= _url('index', 'index') ?>"><?= _t('gen.action.back_to_rss_feeds') ?></a> - <form method="post" action="<?= _url('configure', 'queries') ?>"> + <form method="post" action="<?= _url('configure', 'queries') ?>" id="configureQueries"> <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" /> <legend><?= _t('conf.query') ?></legend> <?php foreach ($this->queries as $key => $query) { ?> - <div class="form-group" id="query-group-<?= $key ?>"> + <div class="form-group" id="query-group-<?= $key ?>" draggable="true"> <label class="group-name" for="queries_<?= $key ?>_name"> <?= _t('conf.query.number', $key + 1) ?> </label> @@ -77,7 +77,6 @@ <div class="form-group form-actions"> <div class="group-controls"> <button type="submit" class="btn btn-important"><?= _t('gen.action.submit') ?></button> - <button type="reset" class="btn"><?= _t('gen.action.cancel') ?></button> </div> </div> <?php } else { ?> diff --git a/p/scripts/user.query.js b/p/scripts/user.query.js new file mode 100644 index 000000000..c828cef19 --- /dev/null +++ b/p/scripts/user.query.js @@ -0,0 +1,48 @@ +// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0 +"use strict"; +/* jshint esversion:6, strict:global */ + +function init_draggable() { + if (!window.context) { + if (window.console) { + console.log('FreshRSS user query waiting for JS…'); + } + setTimeout(init_draggable, 50); + return; + } + + let source; + const configureQueries = document.querySelector('#configureQueries'); + + configureQueries.addEventListener('dragstart', event => { + source = event.target.closest('[draggable="true"]'); + event.dataTransfer.setData('text/html', source.outerHTML); + event.dataTransfer.effectAllowed = 'move'; + }); + configureQueries.addEventListener('dragover', event => event.preventDefault()); + configureQueries.addEventListener('dragleave', event => event.preventDefault()); + configureQueries.addEventListener('drop', event => { + event.preventDefault(); + event.stopPropagation(); + const dropQuery = event.target.closest('[draggable="true"]'); + if (null === dropQuery) { + source.remove(); + configureQueries.querySelector('legend').insertAdjacentHTML('afterend', event.dataTransfer.getData('text/html')); + } else if (source !== dropQuery) { + source.remove(); + dropQuery.insertAdjacentHTML('afterend', event.dataTransfer.getData('text/html')); + } + }); + + // This is needed to work around a Firefox bug → https://bugzilla.mozilla.org/show_bug.cgi?id=800050 + configureQueries.addEventListener('focusin', event => { + event.target.closest('input[id^="queries_"][id$="_name"]').select(); + }); +} + +if (document.readyState && document.readyState !== 'loading') { + init_draggable(); +} else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', event => init_draggable(), false); +} +// @license-end |
