mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: uses forked Mousetrap to avoid leaking listeners (#14198)
This commit is contained in:
parent
e1581f6dfd
commit
95b15acb1e
@ -2,11 +2,6 @@ define("message-bus-client", ["exports"], function (__exports__) {
|
|||||||
__exports__.default = window.MessageBus;
|
__exports__.default = window.MessageBus;
|
||||||
});
|
});
|
||||||
|
|
||||||
define("mousetrap-global-bind", ["exports"], function (__exports__) {
|
|
||||||
// In the Rails app it's applied from the vendored file
|
|
||||||
__exports__.default = {};
|
|
||||||
});
|
|
||||||
|
|
||||||
define("ember-buffered-proxy/proxy", ["exports"], function (__exports__) {
|
define("ember-buffered-proxy/proxy", ["exports"], function (__exports__) {
|
||||||
__exports__.default = window.BufferedProxy;
|
__exports__.default = window.BufferedProxy;
|
||||||
});
|
});
|
||||||
@ -19,8 +14,8 @@ define("xss", ["exports"], function (__exports__) {
|
|||||||
__exports__.default = window.filterXSS;
|
__exports__.default = window.filterXSS;
|
||||||
});
|
});
|
||||||
|
|
||||||
define("mousetrap", ["exports"], function (__exports__) {
|
define("@discourse/itsatrap", ["exports"], function (__exports__) {
|
||||||
__exports__.default = window.Mousetrap;
|
__exports__.default = window.ItsATrap;
|
||||||
});
|
});
|
||||||
|
|
||||||
define("@popperjs/core", ["exports"], function (__exports__) {
|
define("@popperjs/core", ["exports"], function (__exports__) {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import Application from "@ember/application";
|
import Application from "@ember/application";
|
||||||
import Mousetrap from "mousetrap";
|
|
||||||
import { buildResolver } from "discourse-common/resolver";
|
import { buildResolver } from "discourse-common/resolver";
|
||||||
import { isTesting } from "discourse-common/config/environment";
|
import { isTesting } from "discourse-common/config/environment";
|
||||||
|
|
||||||
@ -13,11 +12,6 @@ const Discourse = Application.extend({
|
|||||||
paste: "paste",
|
paste: "paste",
|
||||||
},
|
},
|
||||||
|
|
||||||
reset() {
|
|
||||||
this._super(...arguments);
|
|
||||||
Mousetrap.reset();
|
|
||||||
},
|
|
||||||
|
|
||||||
Resolver: buildResolver("discourse"),
|
Resolver: buildResolver("discourse"),
|
||||||
|
|
||||||
_prepareInitializer(moduleName) {
|
_prepareInitializer(moduleName) {
|
||||||
|
@ -11,7 +11,7 @@ import { AUTO_DELETE_PREFERENCES } from "discourse/models/bookmark";
|
|||||||
import Component from "@ember/component";
|
import Component from "@ember/component";
|
||||||
import I18n from "I18n";
|
import I18n from "I18n";
|
||||||
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
|
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
|
||||||
import Mousetrap from "mousetrap";
|
import ItsATrap from "@discourse/itsatrap";
|
||||||
import { Promise } from "rsvp";
|
import { Promise } from "rsvp";
|
||||||
import { TIME_SHORTCUT_TYPES } from "discourse/lib/time-shortcut";
|
import { TIME_SHORTCUT_TYPES } from "discourse/lib/time-shortcut";
|
||||||
import { action } from "@ember/object";
|
import { action } from "@ember/object";
|
||||||
@ -37,6 +37,7 @@ export default Component.extend({
|
|||||||
_savingBookmarkManually: null,
|
_savingBookmarkManually: null,
|
||||||
_saving: null,
|
_saving: null,
|
||||||
_deleting: null,
|
_deleting: null,
|
||||||
|
_itsatrap: null,
|
||||||
postDetectedLocalDate: null,
|
postDetectedLocalDate: null,
|
||||||
postDetectedLocalTime: null,
|
postDetectedLocalTime: null,
|
||||||
postDetectedLocalTimezone: null,
|
postDetectedLocalTimezone: null,
|
||||||
@ -44,7 +45,6 @@ export default Component.extend({
|
|||||||
userTimezone: null,
|
userTimezone: null,
|
||||||
showOptions: null,
|
showOptions: null,
|
||||||
model: null,
|
model: null,
|
||||||
|
|
||||||
afterSave: null,
|
afterSave: null,
|
||||||
|
|
||||||
@on("init")
|
@on("init")
|
||||||
@ -62,6 +62,7 @@ export default Component.extend({
|
|||||||
prefilledDatetime: null,
|
prefilledDatetime: null,
|
||||||
userTimezone: this.currentUser.resolvedTimezone(this.currentUser),
|
userTimezone: this.currentUser.resolvedTimezone(this.currentUser),
|
||||||
showOptions: false,
|
showOptions: false,
|
||||||
|
_itsatrap: new ItsATrap(),
|
||||||
});
|
});
|
||||||
|
|
||||||
this.registerOnCloseHandler(this._onModalClose.bind(this));
|
this.registerOnCloseHandler(this._onModalClose.bind(this));
|
||||||
@ -123,9 +124,8 @@ export default Component.extend({
|
|||||||
_bindKeyboardShortcuts() {
|
_bindKeyboardShortcuts() {
|
||||||
KeyboardShortcuts.pause();
|
KeyboardShortcuts.pause();
|
||||||
|
|
||||||
this._mousetrap = new Mousetrap();
|
|
||||||
Object.keys(BOOKMARK_BINDINGS).forEach((shortcut) => {
|
Object.keys(BOOKMARK_BINDINGS).forEach((shortcut) => {
|
||||||
this._mousetrap.bind(shortcut, () => {
|
this._itsatrap.bind(shortcut, () => {
|
||||||
let binding = BOOKMARK_BINDINGS[shortcut];
|
let binding = BOOKMARK_BINDINGS[shortcut];
|
||||||
this.send(binding.handler);
|
this.send(binding.handler);
|
||||||
return false;
|
return false;
|
||||||
@ -266,7 +266,9 @@ export default Component.extend({
|
|||||||
|
|
||||||
willDestroyElement() {
|
willDestroyElement() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
this._mousetrap.reset();
|
|
||||||
|
this._itsatrap?.destroy();
|
||||||
|
this.set("_itsatrap", null);
|
||||||
KeyboardShortcuts.unpause();
|
KeyboardShortcuts.unpause();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import { emojiUrlFor, generateCookFunction } from "discourse/lib/text";
|
|||||||
import { later, schedule, scheduleOnce } from "@ember/runloop";
|
import { later, schedule, scheduleOnce } from "@ember/runloop";
|
||||||
import Component from "@ember/component";
|
import Component from "@ember/component";
|
||||||
import I18n from "I18n";
|
import I18n from "I18n";
|
||||||
import Mousetrap from "mousetrap";
|
import ItsATrap from "@discourse/itsatrap";
|
||||||
import { Promise } from "rsvp";
|
import { Promise } from "rsvp";
|
||||||
import { SKIP } from "discourse/lib/autocomplete";
|
import { SKIP } from "discourse/lib/autocomplete";
|
||||||
import { categoryHashtagTriggerRule } from "discourse/lib/category-hashtags";
|
import { categoryHashtagTriggerRule } from "discourse/lib/category-hashtags";
|
||||||
@ -238,7 +238,7 @@ export default Component.extend(TextareaTextManipulation, {
|
|||||||
classNames: ["d-editor"],
|
classNames: ["d-editor"],
|
||||||
ready: false,
|
ready: false,
|
||||||
lastSel: null,
|
lastSel: null,
|
||||||
_mouseTrap: null,
|
_itsatrap: null,
|
||||||
showLink: true,
|
showLink: true,
|
||||||
emojiPickerIsActive: false,
|
emojiPickerIsActive: false,
|
||||||
emojiStore: service("emoji-store"),
|
emojiStore: service("emoji-store"),
|
||||||
@ -278,12 +278,12 @@ export default Component.extend(TextareaTextManipulation, {
|
|||||||
|
|
||||||
scheduleOnce("afterRender", this, this._readyNow);
|
scheduleOnce("afterRender", this, this._readyNow);
|
||||||
|
|
||||||
this._mouseTrap = new Mousetrap(this._textarea);
|
this._itsatrap = new ItsATrap(this._textarea);
|
||||||
const shortcuts = this.get("toolbar.shortcuts");
|
const shortcuts = this.get("toolbar.shortcuts");
|
||||||
|
|
||||||
Object.keys(shortcuts).forEach((sc) => {
|
Object.keys(shortcuts).forEach((sc) => {
|
||||||
const button = shortcuts[sc];
|
const button = shortcuts[sc];
|
||||||
this._mouseTrap.bind(sc, () => {
|
this._itsatrap.bind(sc, () => {
|
||||||
button.action(button);
|
button.action(button);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
@ -335,7 +335,9 @@ export default Component.extend(TextareaTextManipulation, {
|
|||||||
this.appEvents.off("composer:replace-text", this, "_replaceText");
|
this.appEvents.off("composer:replace-text", this, "_replaceText");
|
||||||
}
|
}
|
||||||
|
|
||||||
this._mouseTrap.reset();
|
this._itsatrap?.destroy();
|
||||||
|
this._itsatrap = null;
|
||||||
|
|
||||||
$(this.element.querySelector(".d-editor-preview")).off("click.preview");
|
$(this.element.querySelector(".d-editor-preview")).off("click.preview");
|
||||||
|
|
||||||
if (isTesting()) {
|
if (isTesting()) {
|
||||||
|
@ -21,7 +21,7 @@ import {
|
|||||||
thisWeekend,
|
thisWeekend,
|
||||||
} from "discourse/lib/time-utils";
|
} from "discourse/lib/time-utils";
|
||||||
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
|
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
|
||||||
import Mousetrap from "mousetrap";
|
import ItsATrap from "@discourse/itsatrap";
|
||||||
|
|
||||||
export default Component.extend({
|
export default Component.extend({
|
||||||
statusType: readOnly("topicTimer.status_type"),
|
statusType: readOnly("topicTimer.status_type"),
|
||||||
@ -43,12 +43,13 @@ export default Component.extend({
|
|||||||
"autoCloseAfterLastPost"
|
"autoCloseAfterLastPost"
|
||||||
),
|
),
|
||||||
duration: null,
|
duration: null,
|
||||||
|
_itsatrap: null,
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
||||||
KeyboardShortcuts.pause();
|
KeyboardShortcuts.pause();
|
||||||
this._mousetrap = new Mousetrap();
|
this.set("_itsatrap", new ItsATrap());
|
||||||
|
|
||||||
this.set("duration", this.initialDuration);
|
this.set("duration", this.initialDuration);
|
||||||
},
|
},
|
||||||
@ -65,7 +66,9 @@ export default Component.extend({
|
|||||||
|
|
||||||
willDestroyElement() {
|
willDestroyElement() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
this._mousetrap.reset();
|
|
||||||
|
this._itsatrap.destroy();
|
||||||
|
this.set("_itsatrap", null);
|
||||||
KeyboardShortcuts.unpause();
|
KeyboardShortcuts.unpause();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import PanEvents, {
|
|||||||
import { cancel, later, schedule } from "@ember/runloop";
|
import { cancel, later, schedule } from "@ember/runloop";
|
||||||
import Docking from "discourse/mixins/docking";
|
import Docking from "discourse/mixins/docking";
|
||||||
import MountWidget from "discourse/components/mount-widget";
|
import MountWidget from "discourse/components/mount-widget";
|
||||||
import Mousetrap from "mousetrap";
|
import ItsATrap from "@discourse/itsatrap";
|
||||||
import RerenderOnDoNotDisturbChange from "discourse/mixins/rerender-on-do-not-disturb-change";
|
import RerenderOnDoNotDisturbChange from "discourse/mixins/rerender-on-do-not-disturb-change";
|
||||||
import { observes } from "discourse-common/utils/decorators";
|
import { observes } from "discourse-common/utils/decorators";
|
||||||
import { topicTitleDecorators } from "discourse/components/topic-title";
|
import { topicTitleDecorators } from "discourse/components/topic-title";
|
||||||
@ -24,7 +24,7 @@ const SiteHeaderComponent = MountWidget.extend(
|
|||||||
_panMenuOffset: 0,
|
_panMenuOffset: 0,
|
||||||
_scheduledRemoveAnimate: null,
|
_scheduledRemoveAnimate: null,
|
||||||
_topic: null,
|
_topic: null,
|
||||||
_mousetrap: null,
|
_itsatrap: null,
|
||||||
|
|
||||||
@observes(
|
@observes(
|
||||||
"currentUser.unread_notifications",
|
"currentUser.unread_notifications",
|
||||||
@ -258,8 +258,8 @@ const SiteHeaderComponent = MountWidget.extend(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const header = document.querySelector("header.d-header");
|
const header = document.querySelector("header.d-header");
|
||||||
this._mousetrap = new Mousetrap(header);
|
this._itsatrap = new ItsATrap(header);
|
||||||
this._mousetrap.bind(["right", "left"], (e) => {
|
this._itsatrap.bind(["right", "left"], (e) => {
|
||||||
const activeTab = document.querySelector(".glyphs .menu-link.active");
|
const activeTab = document.querySelector(".glyphs .menu-link.active");
|
||||||
|
|
||||||
if (activeTab) {
|
if (activeTab) {
|
||||||
@ -294,7 +294,8 @@ const SiteHeaderComponent = MountWidget.extend(
|
|||||||
|
|
||||||
cancel(this._scheduledRemoveAnimate);
|
cancel(this._scheduledRemoveAnimate);
|
||||||
|
|
||||||
this._mousetrap.reset();
|
this._itsatrap?.destroy();
|
||||||
|
this._itsatrap = null;
|
||||||
|
|
||||||
document.removeEventListener("click", this._dismissFirstNotification);
|
document.removeEventListener("click", this._dismissFirstNotification);
|
||||||
},
|
},
|
||||||
|
@ -67,6 +67,8 @@ export default Component.extend({
|
|||||||
customDate: null,
|
customDate: null,
|
||||||
customTime: null,
|
customTime: null,
|
||||||
|
|
||||||
|
_itsatrap: null,
|
||||||
|
|
||||||
defaultCustomReminderTime: `0${START_OF_DAY_HOUR}:00`,
|
defaultCustomReminderTime: `0${START_OF_DAY_HOUR}:00`,
|
||||||
|
|
||||||
@on("init")
|
@on("init")
|
||||||
@ -101,7 +103,8 @@ export default Component.extend({
|
|||||||
|
|
||||||
willDestroyElement() {
|
willDestroyElement() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
this.mousetrap.unbind(Object.keys(BINDINGS));
|
|
||||||
|
this._itsatrap.unbind(Object.keys(BINDINGS));
|
||||||
},
|
},
|
||||||
|
|
||||||
parsePrefilledDatetime() {
|
parsePrefilledDatetime() {
|
||||||
@ -143,7 +146,7 @@ export default Component.extend({
|
|||||||
|
|
||||||
_bindKeyboardShortcuts() {
|
_bindKeyboardShortcuts() {
|
||||||
Object.keys(BINDINGS).forEach((shortcut) => {
|
Object.keys(BINDINGS).forEach((shortcut) => {
|
||||||
this.mousetrap.bind(shortcut, () => {
|
this._itsatrap.bind(shortcut, () => {
|
||||||
let binding = BINDINGS[shortcut];
|
let binding = BINDINGS[shortcut];
|
||||||
this.send(binding.handler, ...binding.args);
|
this.send(binding.handler, ...binding.args);
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
|
import KeyboardShortcuts from "discourse/lib/keyboard-shortcuts";
|
||||||
import Mousetrap from "mousetrap";
|
import ItsATrap from "@discourse/itsatrap";
|
||||||
import bindGlobal from "mousetrap-global-bind";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "keyboard-shortcuts",
|
name: "keyboard-shortcuts",
|
||||||
|
|
||||||
initialize(container) {
|
initialize(container) {
|
||||||
// Ensure mousetrap-global-bind is executed
|
KeyboardShortcuts.init(ItsATrap, container);
|
||||||
void bindGlobal;
|
|
||||||
|
|
||||||
KeyboardShortcuts.init(Mousetrap, container);
|
|
||||||
KeyboardShortcuts.bindEvents();
|
KeyboardShortcuts.bindEvents();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -122,10 +122,8 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
teardown() {
|
teardown() {
|
||||||
if (this.keyTrapper) {
|
this.keyTrapper?.destroy();
|
||||||
this.keyTrapper.reset();
|
this.keyTrapper = null;
|
||||||
this.keyTrapper = null;
|
|
||||||
}
|
|
||||||
this.container = null;
|
this.container = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -207,7 +205,7 @@ export default {
|
|||||||
**/
|
**/
|
||||||
addShortcut(shortcut, callback, opts = {}) {
|
addShortcut(shortcut, callback, opts = {}) {
|
||||||
// we trim but leave whitespace between characters, as shortcuts
|
// we trim but leave whitespace between characters, as shortcuts
|
||||||
// like `z z` are valid for Mousetrap
|
// like `z z` are valid for ItsATrap
|
||||||
shortcut = shortcut.trim();
|
shortcut = shortcut.trim();
|
||||||
let newBinding = Object.assign({ handler: callback }, opts);
|
let newBinding = Object.assign({ handler: callback }, opts);
|
||||||
this.bindKey(shortcut, newBinding);
|
this.bindKey(shortcut, newBinding);
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
onTimeSelected=(action "onTimeSelected")
|
onTimeSelected=(action "onTimeSelected")
|
||||||
customOptions=customTimeShortcutOptions
|
customOptions=customTimeShortcutOptions
|
||||||
additionalOptionsToShow=additionalTimeShortcutOptions
|
additionalOptionsToShow=additionalTimeShortcutOptions
|
||||||
mousetrap=_mousetrap
|
_itsatrap=_itsatrap
|
||||||
}}
|
}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="alert alert-info">{{html-safe (i18n "bookmarks.no_timezone" basePath=(base-path))}}</div>
|
<div class="alert alert-info">{{html-safe (i18n "bookmarks.no_timezone" basePath=(base-path))}}</div>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
onTimeSelected=onTimeSelected
|
onTimeSelected=onTimeSelected
|
||||||
customOptions=customTimeShortcutOptions
|
customOptions=customTimeShortcutOptions
|
||||||
hiddenOptions=hiddenTimeShortcutOptions
|
hiddenOptions=hiddenTimeShortcutOptions
|
||||||
mousetrap=_mousetrap
|
_itsatrap=_itsatrap
|
||||||
}}
|
}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if useDuration}}
|
{{#if useDuration}}
|
||||||
|
@ -53,8 +53,6 @@
|
|||||||
"loader.js": "^4.7.0",
|
"loader.js": "^4.7.0",
|
||||||
"message-bus-client": "^3.3.0",
|
"message-bus-client": "^3.3.0",
|
||||||
"messageformat": "0.1.5",
|
"messageformat": "0.1.5",
|
||||||
"mousetrap": "^1.6.5",
|
|
||||||
"mousetrap-global-bind": "^1.1.0",
|
|
||||||
"pretender": "^3.4.7",
|
"pretender": "^3.4.7",
|
||||||
"pretty-text": "^1.0.0",
|
"pretty-text": "^1.0.0",
|
||||||
"qunit": "^2.14.0",
|
"qunit": "^2.14.0",
|
||||||
@ -62,7 +60,8 @@
|
|||||||
"sass": "^1.32.8",
|
"sass": "^1.32.8",
|
||||||
"select-kit": "^1.0.0",
|
"select-kit": "^1.0.0",
|
||||||
"sinon": "^9.2.0",
|
"sinon": "^9.2.0",
|
||||||
"virtual-dom": "^2.1.1"
|
"virtual-dom": "^2.1.1",
|
||||||
|
"@discourse/itsatrap": "^2.0.10"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 12.*",
|
"node": ">= 12.*",
|
||||||
|
@ -25,8 +25,7 @@
|
|||||||
//= require jquery.tagsinput.js
|
//= require jquery.tagsinput.js
|
||||||
//= require jquery.sortable.js
|
//= require jquery.sortable.js
|
||||||
//= require lodash.js
|
//= require lodash.js
|
||||||
//= require mousetrap.js
|
//= require itsatrap.js
|
||||||
//= require mousetrap-global-bind.js
|
|
||||||
//= require rsvp.js
|
//= require rsvp.js
|
||||||
//= require show-html.js
|
//= require show-html.js
|
||||||
//= require uppy.js
|
//= require uppy.js
|
||||||
|
@ -18,8 +18,7 @@
|
|||||||
//= require jquery.tagsinput.js
|
//= require jquery.tagsinput.js
|
||||||
//= require jquery.sortable.js
|
//= require jquery.sortable.js
|
||||||
//= require lodash.js
|
//= require lodash.js
|
||||||
//= require mousetrap.js
|
//= require itsatrap.js
|
||||||
//= require mousetrap-global-bind.js
|
|
||||||
//= require rsvp.js
|
//= require rsvp.js
|
||||||
//= require show-html.js
|
//= require show-html.js
|
||||||
//= require uppy.js
|
//= require uppy.js
|
||||||
|
@ -928,6 +928,11 @@
|
|||||||
exec-sh "^0.3.2"
|
exec-sh "^0.3.2"
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
|
|
||||||
|
"@discourse/itsatrap@^2.0.10":
|
||||||
|
version "2.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@discourse/itsatrap/-/itsatrap-2.0.10.tgz#c7e750eeb32b54e769e952c4ecc472213eb1385a"
|
||||||
|
integrity sha512-Jn1gdiyHMGUsmUfLFf4Q7VnTAv0l7NePbegU6pKhKHEmbzV3FosGxq30fTOYgVyTS1bxqGjlA6LvQttJpv3ROw==
|
||||||
|
|
||||||
"@ember-data/rfc395-data@^0.0.4":
|
"@ember-data/rfc395-data@^0.0.4":
|
||||||
version "0.0.4"
|
version "0.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843"
|
resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843"
|
||||||
@ -8586,16 +8591,6 @@ morgan@^1.10.0:
|
|||||||
on-finished "~2.3.0"
|
on-finished "~2.3.0"
|
||||||
on-headers "~1.0.2"
|
on-headers "~1.0.2"
|
||||||
|
|
||||||
mousetrap-global-bind@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/mousetrap-global-bind/-/mousetrap-global-bind-1.1.0.tgz#cd7de9222bd0646fa2e010d54c84a74c26a88edd"
|
|
||||||
integrity sha1-zX3pIivQZG+i4BDVTISnTCaojt0=
|
|
||||||
|
|
||||||
mousetrap@^1.6.5:
|
|
||||||
version "1.6.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9"
|
|
||||||
integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==
|
|
||||||
|
|
||||||
mout@^1.0.0:
|
mout@^1.0.0:
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d"
|
resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d"
|
||||||
|
@ -123,7 +123,7 @@ def dependencies
|
|||||||
}, {
|
}, {
|
||||||
source: 'markdown-it/dist/markdown-it.js'
|
source: 'markdown-it/dist/markdown-it.js'
|
||||||
}, {
|
}, {
|
||||||
source: 'mousetrap/mousetrap.js'
|
source: '@discourse/itsatrap/itsatrap.js'
|
||||||
}, {
|
}, {
|
||||||
source: 'moment/moment.js'
|
source: 'moment/moment.js'
|
||||||
}, {
|
}, {
|
||||||
@ -138,8 +138,6 @@ def dependencies
|
|||||||
}, {
|
}, {
|
||||||
source: 'moment-timezone-names-translations/locales/.',
|
source: 'moment-timezone-names-translations/locales/.',
|
||||||
destination: 'moment-timezone-names-locale'
|
destination: 'moment-timezone-names-locale'
|
||||||
}, {
|
|
||||||
source: 'mousetrap/plugins/global-bind/mousetrap-global-bind.js'
|
|
||||||
}, {
|
}, {
|
||||||
source: 'resumablejs/resumable.js'
|
source: 'resumablejs/resumable.js'
|
||||||
}, {
|
}, {
|
||||||
|
@ -10,9 +10,9 @@
|
|||||||
"@highlightjs/cdn-assets": "^10.6.0",
|
"@highlightjs/cdn-assets": "^10.6.0",
|
||||||
"@json-editor/json-editor": "^2.5.2",
|
"@json-editor/json-editor": "^2.5.2",
|
||||||
"@popperjs/core": "v2.9.3",
|
"@popperjs/core": "v2.9.3",
|
||||||
"@uppy/core": "^2.0.1",
|
|
||||||
"@uppy/aws-s3": "^2.0.1",
|
"@uppy/aws-s3": "^2.0.1",
|
||||||
"@uppy/aws-s3-multipart": "^2.0.2",
|
"@uppy/aws-s3-multipart": "^2.0.2",
|
||||||
|
"@uppy/core": "^2.0.1",
|
||||||
"@uppy/drop-target": "^1.0.1",
|
"@uppy/drop-target": "^1.0.1",
|
||||||
"@uppy/xhr-upload": "^2.0.1",
|
"@uppy/xhr-upload": "^2.0.1",
|
||||||
"ace-builds": "1.4.12",
|
"ace-builds": "1.4.12",
|
||||||
@ -33,7 +33,6 @@
|
|||||||
"moment": "2.29.1",
|
"moment": "2.29.1",
|
||||||
"moment-timezone": "0.5.31",
|
"moment-timezone": "0.5.31",
|
||||||
"moment-timezone-names-translations": "https://github.com/discourse/moment-timezone-names-translations",
|
"moment-timezone-names-translations": "https://github.com/discourse/moment-timezone-names-translations",
|
||||||
"mousetrap": "https://github.com/discourse/mousetrap#firefox-alt-key",
|
|
||||||
"pikaday": "1.8.0",
|
"pikaday": "1.8.0",
|
||||||
"resumablejs": "1.1.0",
|
"resumablejs": "1.1.0",
|
||||||
"spectrum-colorpicker": "1.8.0",
|
"spectrum-colorpicker": "1.8.0",
|
||||||
@ -42,7 +41,8 @@
|
|||||||
"workbox-expiration": "^4.3.1",
|
"workbox-expiration": "^4.3.1",
|
||||||
"workbox-routing": "^4.3.1",
|
"workbox-routing": "^4.3.1",
|
||||||
"workbox-strategies": "^4.3.1",
|
"workbox-strategies": "^4.3.1",
|
||||||
"workbox-sw": "^4.3.1"
|
"workbox-sw": "^4.3.1",
|
||||||
|
"@discourse/itsatrap": "^2.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arkweid/lefthook": "^0.7.2",
|
"@arkweid/lefthook": "^0.7.2",
|
||||||
|
1159
vendor/assets/javascripts/itsatrap.js
vendored
Normal file
1159
vendor/assets/javascripts/itsatrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,46 +0,0 @@
|
|||||||
/**
|
|
||||||
* adds a bindGlobal method to Mousetrap that allows you to
|
|
||||||
* bind specific keyboard shortcuts that will still work
|
|
||||||
* inside a text input field
|
|
||||||
*
|
|
||||||
* usage:
|
|
||||||
* Mousetrap.bindGlobal('ctrl+s', _saveChanges);
|
|
||||||
*/
|
|
||||||
/* global Mousetrap:true */
|
|
||||||
(function(Mousetrap) {
|
|
||||||
if (! Mousetrap) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var _globalCallbacks = {};
|
|
||||||
var _originalStopCallback = Mousetrap.prototype.stopCallback;
|
|
||||||
|
|
||||||
Mousetrap.prototype.stopCallback = function(e, element, combo, sequence) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
if (self.paused) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _originalStopCallback.call(self, e, element, combo);
|
|
||||||
};
|
|
||||||
|
|
||||||
Mousetrap.prototype.bindGlobal = function(keys, callback, action) {
|
|
||||||
var self = this;
|
|
||||||
self.bind(keys, callback, action);
|
|
||||||
|
|
||||||
if (keys instanceof Array) {
|
|
||||||
for (var i = 0; i < keys.length; i++) {
|
|
||||||
_globalCallbacks[keys[i]] = true;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_globalCallbacks[keys] = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
Mousetrap.init();
|
|
||||||
}) (typeof Mousetrap !== "undefined" ? Mousetrap : undefined);
|
|
1058
vendor/assets/javascripts/mousetrap.js
vendored
1058
vendor/assets/javascripts/mousetrap.js
vendored
File diff suppressed because it is too large
Load Diff
@ -245,6 +245,11 @@
|
|||||||
exec-sh "^0.3.2"
|
exec-sh "^0.3.2"
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
|
|
||||||
|
"@discourse/itsatrap@^2.0.10":
|
||||||
|
version "2.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@discourse/itsatrap/-/itsatrap-2.0.10.tgz#c7e750eeb32b54e769e952c4ecc472213eb1385a"
|
||||||
|
integrity sha512-Jn1gdiyHMGUsmUfLFf4Q7VnTAv0l7NePbegU6pKhKHEmbzV3FosGxq30fTOYgVyTS1bxqGjlA6LvQttJpv3ROw==
|
||||||
|
|
||||||
"@ember-data/rfc395-data@^0.0.4":
|
"@ember-data/rfc395-data@^0.0.4":
|
||||||
version "0.0.4"
|
version "0.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843"
|
resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843"
|
||||||
@ -3116,10 +3121,6 @@ moment@2.29.1:
|
|||||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.0.tgz#fcbef955844d91deb55438613ddcec56e86a3425"
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.0.tgz#fcbef955844d91deb55438613ddcec56e86a3425"
|
||||||
integrity sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA==
|
integrity sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA==
|
||||||
|
|
||||||
"mousetrap@https://github.com/discourse/mousetrap#firefox-alt-key":
|
|
||||||
version "1.6.5"
|
|
||||||
resolved "https://github.com/discourse/mousetrap#cc8e2c0b9229e1a01ce68de4f339b6fd35503041"
|
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
|
Loading…
Reference in New Issue
Block a user