diff --git a/classes/article.php b/classes/article.php index d6387107a..974f9114f 100755 --- a/classes/article.php +++ b/classes/article.php @@ -534,7 +534,7 @@ class Article extends Handler_Protected { $rv .= "
"; } - $rv .= "
". + $rv .= "
". "" . __('Attachments').""; $rv .= "
"; diff --git a/classes/feeds.php b/classes/feeds.php index 292c9e0d4..41251a408 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -54,7 +54,7 @@ class Feeds extends Handler_Protected { $reply .= ""; $reply .= ""; $reply .= " "; - $reply .= " + dojoType="fox.form.Select" size="3"> @@ -734,7 +734,7 @@ class Feeds extends Handler_Protected { print "
"; print ""; print_select("search_language", get_pref('DEFAULT_SEARCH_LANGUAGE'), Pref_Feeds::get_ts_languages(), - "dojoType='dijit.form.Select' title=\"".__('Used for word stemming')."\""); + "dojoType='fox.form.Select' title=\"".__('Used for word stemming')."\""); print "
"; } diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index b90fd5848..fbbbdb4f4 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -571,7 +571,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_feed_cat_select("cat_id", $cat_id, - 'dojoType="dijit.form.Select"'); + 'dojoType="fox.form.Select"'); print ""; } @@ -602,7 +602,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_select("feed_language", $feed_language, $this::get_ts_languages(), - 'dojoType="dijit.form.Select"'); + 'dojoType="fox.form.Select"'); print ""; } @@ -621,7 +621,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_select_hash("update_interval", $update_interval, $update_intervals, - 'dojoType="dijit.form.Select"'); + 'dojoType="fox.form.Select"'); print ""; @@ -634,7 +634,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_select_hash("purge_interval", $purge_interval, $purge_intervals, - 'dojoType="dijit.form.Select" ' . + 'dojoType="fox.form.Select" ' . ((FORCE_ARTICLE_PURGE == 0) ? "" : 'disabled="1"')); print ""; @@ -826,7 +826,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_feed_cat_select("cat_id", false, - 'disabled="1" dojoType="dijit.form.Select"'); + 'disabled="1" dojoType="fox.form.Select"'); $this->batch_edit_cbox("cat_id"); @@ -840,7 +840,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_select("feed_language", "", $this::get_ts_languages(), - 'disabled="1" dojoType="dijit.form.Select"'); + 'disabled="1" dojoType="fox.form.Select"'); $this->batch_edit_cbox("feed_language"); @@ -859,7 +859,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_select_hash("update_interval", "", $update_intervals, - 'disabled="1" dojoType="dijit.form.Select"'); + 'disabled="1" dojoType="fox.form.Select"'); $this->batch_edit_cbox("update_interval"); @@ -874,7 +874,7 @@ class Pref_Feeds extends Handler_Protected { print " "; print_select_hash("purge_interval", "", $purge_intervals, - 'disabled="1" dojoType="dijit.form.Select"'); + 'disabled="1" dojoType="fox.form.Select"'); $this->batch_edit_cbox("purge_interval"); @@ -1208,7 +1208,7 @@ class Pref_Feeds extends Handler_Protected { print '
'; - print "
"; #toolbar + print "
"; #toolbar print "
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
".__('None')."
"; print "
"; - print "
". + print "
". "" . __('Feeds').""; print "
"; print "
"; if (get_pref('ENABLE_FEED_CATS')) { - print "
". + print "
". "" . __('Categories').""; print "
"; print "
execute([$_SESSION['uid']]); - print "
"; - print "
". + print "
"; + print "
". "" . __('Select').""; print "
"; print "
execute([$_SESSION['uid']]); - print "
"; - print "
". + print "
"; + print "
". "" . __('Select').""; print "
"; print "
"; print " "; - print_feed_cat_select("cat", false, 'dojoType="dijit.form.Select"'); + print_feed_cat_select("cat", false, 'dojoType="fox.form.Select"'); print ""; } diff --git a/classes/pref/filters.php b/classes/pref/filters.php index 37a7236ee..041951b35 100755 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -354,9 +354,9 @@ class Pref_Filters extends Handler_Protected { print "
".__("Match")."
"; print "
"; - print "
"; + print "
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
"; - print "
"; + print "
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
"; print "
"; - print "
"; + print "
"; if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_filter_search"] = $filter_search; @@ -772,7 +772,7 @@ class Pref_Filters extends Handler_Protected { __('Search')."
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
".__("Match").""; print "
"; - print "
"; + print "
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
"; - print "
"; + print "
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
"; print " "; print_select_hash("filter_type", $filter_type, $filter_types, - 'dojoType="dijit.form.Select"'); + 'dojoType="fox.form.Select"'); print " "; print ""; @@ -1042,7 +1042,7 @@ class Pref_Filters extends Handler_Protected { print "
"; - print ""; $issel = $value == "default.php" ? "selected='selected'" : ""; print ""; @@ -618,11 +618,11 @@ class Pref_Prefs extends Handler_Protected { global $update_intervals_nodefault; print_select_hash($pref_name, $value, $update_intervals_nodefault, - 'dojoType="dijit.form.Select"'); + 'dojoType="fox.form.Select"'); } else if ($pref_name == "DEFAULT_SEARCH_LANGUAGE") { print_select($pref_name, $value, Pref_Feeds::get_ts_languages(), - 'dojoType="dijit.form.Select"'); + 'dojoType="fox.form.Select"'); } else if ($type_name == "bool") { @@ -715,7 +715,7 @@ class Pref_Prefs extends Handler_Protected { print_hidden("op", "pref-prefs"); print_hidden("method", "saveconfig"); - print "
+ print "
".__('Save configuration')."
"; + print "
"; - print "
". + print "
". "" . __('Select').""; print "
"; print "
"; print "
"; - print "
"; + print "
"; $user_search = trim(clean($_REQUEST["search"])); @@ -336,7 +336,7 @@ class Pref_Users extends Handler_Protected { $sort = "login"; } - print "
". + print "
". "" . __('Select').""; print "
"; print "
-
+
@@ -170,7 +170,7 @@ + dojoType="fox.form.Select" name="order_by"> @@ -190,7 +190,7 @@ -
+
@@ -215,7 +215,7 @@ } ?> -
+
menu
diff --git a/js/FeedTree.js b/js/FeedTree.js index 976848d28..99685a781 100755 --- a/js/FeedTree.js +++ b/js/FeedTree.js @@ -2,7 +2,10 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dijit/Tree", "dijit/Menu"], function (declare, domConstruct) { return declare("fox.FeedTree", dijit.Tree, { - _onKeyPress: function(/* Event */ e) { + _onContainerKeydown: function(/* Event */ e) { + return; // Stop dijit.Tree from interpreting keystrokes + }, + _onContainerKeypress: function(/* Event */ e) { return; // Stop dijit.Tree from interpreting keystrokes }, _createTreeNode: function(args) { diff --git a/js/Toolbar.js b/js/Toolbar.js new file mode 100755 index 000000000..6d2c20058 --- /dev/null +++ b/js/Toolbar.js @@ -0,0 +1,14 @@ +/* global dijit */ +define(["dojo/_base/declare", "dijit/Toolbar"], function (declare) { + return declare("fox.Toolbar", dijit.Toolbar, { + _onContainerKeydown: function(/* Event */ e) { + return; // Stop dijit.Toolbar from interpreting keystrokes + }, + _onContainerKeypress: function(/* Event */ e) { + return; // Stop dijit.Toolbar from interpreting keystrokes + }, + focus: function() { + return; // Stop dijit.Toolbar from focusing the first child on click + }, + }); +}); diff --git a/js/form/ComboButton.js b/js/form/ComboButton.js new file mode 100755 index 000000000..1084cda9c --- /dev/null +++ b/js/form/ComboButton.js @@ -0,0 +1,12 @@ +/* global dijit */ +define(["dojo/_base/declare", "dijit/form/ComboButton"], function (declare) { + return declare("fox.form.ComboButton", dijit.form.ComboButton, { + startup: function() { + this.inherited(arguments); + this.dropDown.autoFocus = true; // Allow dropdown menu to be focused on click + }, + focus: function() { + return; // Stop dijit.form.ComboButton from keeping focus after closing the menu + }, + }); +}); diff --git a/js/form/DropDownButton.js b/js/form/DropDownButton.js new file mode 100755 index 000000000..0c182772a --- /dev/null +++ b/js/form/DropDownButton.js @@ -0,0 +1,12 @@ +/* global dijit */ +define(["dojo/_base/declare", "dijit/form/DropDownButton"], function (declare) { + return declare("fox.form.DropDownButton", dijit.form.DropDownButton, { + startup: function() { + this.inherited(arguments); + this.dropDown.autoFocus = true; // Allow dropdown menu to be focused on click + }, + focus: function() { + return; // Stop dijit.form.DropDownButton from keeping focus after closing the menu + }, + }); +}); diff --git a/js/form/Select.js b/js/form/Select.js new file mode 100755 index 000000000..c62db1821 --- /dev/null +++ b/js/form/Select.js @@ -0,0 +1,8 @@ +/* global dijit */ +define(["dojo/_base/declare", "dijit/form/Select"], function (declare) { + return declare("fox.form.Select", dijit.form.Select, { + focus: function() { + return; // Stop dijit.form.Select from keeping focus after closing the menu + }, + }); +}); diff --git a/js/prefs.js b/js/prefs.js index ae6286330..844ce8c8a 100755 --- a/js/prefs.js +++ b/js/prefs.js @@ -53,7 +53,11 @@ require(["dojo/_base/kernel", "fox/PrefFilterStore", "fox/PrefFeedTree", "fox/PrefFilterTree", - "fox/PrefLabelTree"], function (dojo, declare, ready, parser, AppBase) { + "fox/PrefLabelTree", + "fox/Toolbar", + "fox/form/Select", + "fox/form/ComboButton", + "fox/form/DropDownButton"], function (dojo, declare, ready, parser, AppBase) { ready(function () { try { @@ -118,6 +122,10 @@ require(["dojo/_base/kernel", hotkeyHandler: function (event) { if (event.target.nodeName == "INPUT" || event.target.nodeName == "TEXTAREA") return; + // Arrow buttons and escape are not reported via keypress, handle them via keydown. + // escape = 27, left = 37, up = 38, right = 39, down = 40 + if (event.type == "keydown" && event.which != 27 && (event.which < 37 || event.which > 40)) return; + const action_name = App.keyeventToAction(event); if (action_name) { diff --git a/js/tt-rss.js b/js/tt-rss.js index eaedecd22..bf0434a95 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -54,7 +54,11 @@ require(["dojo/_base/kernel", "fox/Headlines", "fox/Article", "fox/FeedStoreModel", - "fox/FeedTree"], function (dojo, declare, ready, parser, AppBase) { + "fox/FeedTree", + "fox/Toolbar", + "fox/form/Select", + "fox/form/ComboButton", + "fox/form/DropDownButton"], function (dojo, declare, ready, parser, AppBase) { ready(function () { try { @@ -203,7 +207,7 @@ require(["dojo/_base/kernel", isCombinedMode: function() { return App.getInitParam("combined_display_mode"); }, - hotkeyHandler(event) { + hotkeyHandler: function(event) { if (event.target.nodeName == "INPUT" || event.target.nodeName == "TEXTAREA") return; // Arrow buttons and escape are not reported via keypress, handle them via keydown.