diff --git a/src/public/app/services/keyboard_actions.js b/src/public/app/services/keyboard_actions.js
index 87d2c7df6..fecebca3f 100644
--- a/src/public/app/services/keyboard_actions.js
+++ b/src/public/app/services/keyboard_actions.js
@@ -16,6 +16,10 @@ const keyboardActionsLoaded = server.get('keyboard-actions').then(actions => {
return actions;
});
+async function getActions() {
+ return await keyboardActionsLoaded;
+}
+
async function getActionsForScope(scope) {
const actions = await keyboardActionsLoaded;
@@ -115,6 +119,7 @@ export default {
setElementActionHandler,
updateDisplayedShortcuts,
setupActionsForElement,
+ getActions,
getActionsForScope,
getAction
};
diff --git a/src/public/app/widgets/containers/ribbon_container.js b/src/public/app/widgets/containers/ribbon_container.js
index 7e8d889c9..99254da1d 100644
--- a/src/public/app/widgets/containers/ribbon_container.js
+++ b/src/public/app/widgets/containers/ribbon_container.js
@@ -1,4 +1,5 @@
import NoteContextAwareWidget from "../note_context_aware_widget.js";
+import keyboardActionsService from "../../services/keyboard_actions.js";
const TPL = `
@@ -208,7 +209,8 @@ export default class RibbonContainer extends NoteContextAwareWidget {
.attr('data-ribbon-component-name', ribbonWidget.name)
.append($('')
.addClass(ret.icon)
- .attr("title", ret.title))
+ .attr("data-title", ret.title)
+ .attr('data-toggle-command', ribbonWidget.toggleCommand))
.append(" ")
.append($('').text(ret.title));
@@ -224,7 +226,22 @@ export default class RibbonContainer extends NoteContextAwareWidget {
}
}
- this.$tabContainer.find('.ribbon-tab-title-icon').tooltip();
+ keyboardActionsService.getActions().then(actions => {
+ this.$tabContainer.find('.ribbon-tab-title-icon').tooltip({
+ title: function() {
+ const toggleCommandName = $(this).attr("data-toggle-command");
+ const action = actions.find(act => act.actionName === toggleCommandName);
+ const title = $(this).attr("data-title");
+
+ if (action && action.effectiveShortcuts.length > 0) {
+ return `${title} (${action.effectiveShortcuts.join(", ")})`;
+ }
+ else {
+ return title;
+ }
+ }
+ });
+ });
if (!$ribbonTabToActivate) {
$ribbonTabToActivate = $lastActiveRibbon;
diff --git a/src/public/app/widgets/ribbon_widgets/basic_properties.js b/src/public/app/widgets/ribbon_widgets/basic_properties.js
index d79458c0a..805ba3750 100644
--- a/src/public/app/widgets/ribbon_widgets/basic_properties.js
+++ b/src/public/app/widgets/ribbon_widgets/basic_properties.js
@@ -50,6 +50,10 @@ export default class BasicPropertiesWidget extends NoteContextAwareWidget {
return "basicProperties";
}
+ get toggleCommand() {
+ return "toggleRibbonBasicProperties";
+ }
+
isEnabled() {
return this.note && (this.note.type === 'text' || this.note.type === 'code');
}
diff --git a/src/public/app/widgets/ribbon_widgets/book_properties.js b/src/public/app/widgets/ribbon_widgets/book_properties.js
index a4eaf996f..01a69f20b 100644
--- a/src/public/app/widgets/ribbon_widgets/book_properties.js
+++ b/src/public/app/widgets/ribbon_widgets/book_properties.js
@@ -46,6 +46,10 @@ export default class BookPropertiesWidget extends NoteContextAwareWidget {
return "bookProperties";
}
+ get toggleCommand() {
+ return "toggleRibbonTabBookProperties";
+ }
+
isEnabled() {
return this.note && this.note.type === 'book';
}
diff --git a/src/public/app/widgets/ribbon_widgets/file_properties.js b/src/public/app/widgets/ribbon_widgets/file_properties.js
index d40360521..52fd88158 100644
--- a/src/public/app/widgets/ribbon_widgets/file_properties.js
+++ b/src/public/app/widgets/ribbon_widgets/file_properties.js
@@ -59,6 +59,10 @@ export default class FilePropertiesWidget extends NoteContextAwareWidget {
return "fileProperties";
}
+ get toggleCommand() {
+ return "toggleRibbonTabFileProperties";
+ }
+
isEnabled() {
return this.note && this.note.type === 'file';
}
diff --git a/src/public/app/widgets/ribbon_widgets/image_properties.js b/src/public/app/widgets/ribbon_widgets/image_properties.js
index 447a31e33..838325d0e 100644
--- a/src/public/app/widgets/ribbon_widgets/image_properties.js
+++ b/src/public/app/widgets/ribbon_widgets/image_properties.js
@@ -41,6 +41,10 @@ export default class ImagePropertiesWidget extends NoteContextAwareWidget {
return "imageProperties";
}
+ get toggleCommand() {
+ return "toggleRibbonTabImageProperties";
+ }
+
isEnabled() {
return this.note && this.note.type === 'image';
}
diff --git a/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js b/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js
index 3f32bfa00..c1a041bdb 100644
--- a/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js
+++ b/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js
@@ -25,6 +25,10 @@ export default class InheritedAttributesWidget extends NoteContextAwareWidget {
return "inheritedAttributes";
}
+ get toggleCommand() {
+ return "toggleRibbonTabInheritedAttributes";
+ }
+
constructor() {
super();
diff --git a/src/public/app/widgets/ribbon_widgets/link_map.js b/src/public/app/widgets/ribbon_widgets/link_map.js
index 2418a77ec..bba5b978f 100644
--- a/src/public/app/widgets/ribbon_widgets/link_map.js
+++ b/src/public/app/widgets/ribbon_widgets/link_map.js
@@ -42,6 +42,10 @@ export default class LinkMapWidget extends NoteContextAwareWidget {
return "linkMap";
}
+ get toggleCommand() {
+ return "toggleRibbonTabLinkMap";
+ }
+
isEnabled() {
return this.note;
}
diff --git a/src/public/app/widgets/ribbon_widgets/note_info_widget.js b/src/public/app/widgets/ribbon_widgets/note_info_widget.js
index 659711a57..18927f8ed 100644
--- a/src/public/app/widgets/ribbon_widgets/note_info_widget.js
+++ b/src/public/app/widgets/ribbon_widgets/note_info_widget.js
@@ -66,6 +66,10 @@ export default class NoteInfoWidget extends NoteContextAwareWidget {
return "noteInfo";
}
+ get toggleCommand() {
+ return "toggleRibbonTabNoteInfo";
+ }
+
isEnabled() {
return this.note;
}
diff --git a/src/public/app/widgets/ribbon_widgets/note_paths.js b/src/public/app/widgets/ribbon_widgets/note_paths.js
index eb622c74c..3e22657a0 100644
--- a/src/public/app/widgets/ribbon_widgets/note_paths.js
+++ b/src/public/app/widgets/ribbon_widgets/note_paths.js
@@ -40,6 +40,10 @@ export default class NotePathsWidget extends NoteContextAwareWidget {
return "notePaths";
}
+ get toggleCommand() {
+ return "toggleRibbonTabNotePaths";
+ }
+
isEnabled() {
return this.note;
}
diff --git a/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js b/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js
index 89fd36050..2088b24fc 100644
--- a/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js
+++ b/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js
@@ -26,6 +26,10 @@ export default class OwnedAttributeListWidget extends NoteContextAwareWidget {
return "ownedAttributes";
}
+ get toggleCommand() {
+ return "toggleRibbonTabOwnedAttributes";
+ }
+
constructor() {
super();
diff --git a/src/public/app/widgets/ribbon_widgets/promoted_attributes.js b/src/public/app/widgets/ribbon_widgets/promoted_attributes.js
index 9626b498f..533b49df5 100644
--- a/src/public/app/widgets/ribbon_widgets/promoted_attributes.js
+++ b/src/public/app/widgets/ribbon_widgets/promoted_attributes.js
@@ -39,6 +39,10 @@ export default class PromotedAttributesWidget extends NoteContextAwareWidget {
return "promotedAttributes";
}
+ get toggleCommand() {
+ return "toggleRibbonTabPromotedAttributes";
+ }
+
doRender() {
this.$widget = $(TPL);
this.contentSized();
diff --git a/src/public/app/widgets/ribbon_widgets/similar_notes.js b/src/public/app/widgets/ribbon_widgets/similar_notes.js
index 7a65d35bc..55f0abd2d 100644
--- a/src/public/app/widgets/ribbon_widgets/similar_notes.js
+++ b/src/public/app/widgets/ribbon_widgets/similar_notes.js
@@ -35,6 +35,10 @@ export default class SimilarNotesWidget extends NoteContextAwareWidget {
return "similarNotes";
}
+ get toggleCommand() {
+ return "toggleRibbonTabSimilarNotes";
+ }
+
isEnabled() {
return super.isEnabled()
&& this.note.type !== 'search'