DEV: stop relying on global jQuery, import "jquery" instead (#23924)

We'll probably have to keep the globals around for compatibility, but we should always import it ourselves. We'll followup with an updated eslint config to enforce this.
This commit is contained in:
Godfrey Chan 2023-10-17 05:56:59 -07:00 committed by GitHub
parent 070f4e318b
commit 6036001667
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
71 changed files with 131 additions and 55 deletions

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { classNames } from "@ember-decorators/component"; import { classNames } from "@ember-decorators/component";
import { observes, on } from "@ember-decorators/object"; import { observes, on } from "@ember-decorators/object";
import $ from "jquery";
import loadScript from "discourse/lib/load-script"; import loadScript from "discourse/lib/load-script";
import getURL from "discourse-common/lib/get-url"; import getURL from "discourse-common/lib/get-url";
import { bind } from "discourse-common/utils/decorators"; import { bind } from "discourse-common/utils/decorators";

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import EmberObject, { action } from "@ember/object"; import EmberObject, { action } from "@ember/object";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import { classNames } from "@ember-decorators/component"; import { classNames } from "@ember-decorators/component";
import $ from "jquery";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import copyText from "discourse/lib/copy-text"; import copyText from "discourse/lib/copy-text";

View File

@ -1,4 +1,5 @@
import Component from "@ember/component"; import Component from "@ember/component";
import $ from "jquery";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { findRawTemplate } from "discourse-common/lib/raw-templates"; import { findRawTemplate } from "discourse-common/lib/raw-templates";
import discourseComputed, { import discourseComputed, {

View File

@ -1,5 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { alias, not } from "@ember/object/computed"; import { alias, not } from "@ember/object/computed";
import $ from "jquery";
import discourseComputed, { import discourseComputed, {
bind, bind,
observes, observes,

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import { action, get } from "@ember/object"; import { action, get } from "@ember/object";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import $ from "jquery";
import { searchForTerm } from "discourse/lib/search"; import { searchForTerm } from "discourse/lib/search";
import { debounce, observes } from "discourse-common/utils/decorators"; import { debounce, observes } from "discourse-common/utils/decorators";

View File

@ -4,6 +4,7 @@ import EmberObject from "@ember/object";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import { next, schedule, throttle } from "@ember/runloop"; import { next, schedule, throttle } from "@ember/runloop";
import { BasePlugin } from "@uppy/core"; import { BasePlugin } from "@uppy/core";
import $ from "jquery";
import { resolveAllShortUrls } from "pretty-text/upload-short-url"; import { resolveAllShortUrls } from "pretty-text/upload-short-url";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { import {

View File

@ -3,6 +3,7 @@ import { action, computed } from "@ember/object";
import { schedule, scheduleOnce } from "@ember/runloop"; import { schedule, scheduleOnce } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import ItsATrap from "@discourse/itsatrap"; import ItsATrap from "@discourse/itsatrap";
import $ from "jquery";
import { emojiSearch, isSkinTonableEmoji } from "pretty-text/emoji"; import { emojiSearch, isSkinTonableEmoji } from "pretty-text/emoji";
import { translations } from "pretty-text/emoji/data"; import { translations } from "pretty-text/emoji/data";
import { resolveCachedShortUrls } from "pretty-text/upload-short-url"; import { resolveCachedShortUrls } from "pretty-text/upload-short-url";

View File

@ -5,6 +5,7 @@ import { DEBUG } from "@glimmer/env";
import { tracked } from "@glimmer/tracking"; import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import { disableImplicitInjections } from "discourse/lib/implicit-injections"; import { disableImplicitInjections } from "discourse/lib/implicit-injections";
const LEGACY_ERROR = const LEGACY_ERROR =

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import { schedule, scheduleOnce, throttle } from "@ember/runloop"; import { schedule, scheduleOnce, throttle } from "@ember/runloop";
import { isBlank } from "@ember/utils"; import { isBlank } from "@ember/utils";
import $ from "jquery";
import ClickTrack from "discourse/lib/click-track"; import ClickTrack from "discourse/lib/click-track";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";
import { highlightPost } from "discourse/lib/utilities"; import { highlightPost } from "discourse/lib/utilities";

View File

@ -1,5 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import LoadMore from "discourse/mixins/load-more"; import LoadMore from "discourse/mixins/load-more";
import UrlRefresh from "discourse/mixins/url-refresh"; import UrlRefresh from "discourse/mixins/url-refresh";
import { observes, on } from "discourse-common/utils/decorators"; import { observes, on } from "discourse-common/utils/decorators";

View File

@ -1,5 +1,6 @@
import { TextArea } from "@ember/legacy-built-in-components"; import { TextArea } from "@ember/legacy-built-in-components";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import $ from "jquery";
import autosize from "discourse/lib/autosize"; import autosize from "discourse/lib/autosize";
import { observes, on } from "discourse-common/utils/decorators"; import { observes, on } from "discourse-common/utils/decorators";

View File

@ -1,4 +1,5 @@
import Component from "@ember/component"; import Component from "@ember/component";
import $ from "jquery";
export default Component.extend({ export default Component.extend({
classNameBindings: [":featured-topic"], classNameBindings: [":featured-topic"],

View File

@ -1,5 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { action } from "@ember/object"; import { action } from "@ember/object";
import $ from "jquery";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import discourseDebounce from "discourse-common/lib/debounce"; import discourseDebounce from "discourse-common/lib/debounce";
import getURL from "discourse-common/lib/get-url"; import getURL from "discourse-common/lib/get-url";

View File

@ -1,5 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import $ from "jquery";
import { findRawTemplate } from "discourse-common/lib/raw-templates"; import { findRawTemplate } from "discourse-common/lib/raw-templates";
import discourseComputed, { import discourseComputed, {
observes, observes,

View File

@ -1,5 +1,7 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import $ from "jquery";
export default Component.extend({ export default Component.extend({
showInput: false, showInput: false,

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import { on } from "discourse-common/utils/decorators"; import { on } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({

View File

@ -3,6 +3,7 @@ import Component from "@ember/component";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { dependentKeyCompat } from "@ember/object/compat"; import { dependentKeyCompat } from "@ember/object/compat";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import $ from "jquery";
import { filterTypeForMode } from "discourse/lib/filter-mode"; import { filterTypeForMode } from "discourse/lib/filter-mode";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";
import discourseComputed, { observes } from "discourse-common/utils/decorators"; import discourseComputed, { observes } from "discourse-common/utils/decorators";

View File

@ -1,4 +1,5 @@
import Component from "@ember/component"; import Component from "@ember/component";
import $ from "jquery";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({

View File

@ -1,5 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import $ from "jquery";
import Scrolling from "discourse/mixins/scrolling"; import Scrolling from "discourse/mixins/scrolling";
export default Component.extend(Scrolling, { export default Component.extend(Scrolling, {

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import TextField from "discourse/components/text-field"; import TextField from "discourse/components/text-field";
import { applySearchAutocomplete } from "discourse/lib/search"; import { applySearchAutocomplete } from "discourse/lib/search";
import discourseComputed, { on } from "discourse-common/utils/decorators"; import discourseComputed, { on } from "discourse-common/utils/decorators";

View File

@ -1,6 +1,7 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { scheduleOnce } from "@ember/runloop"; import { scheduleOnce } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";
import CleansUp from "discourse/mixins/cleans-up"; import CleansUp from "discourse/mixins/cleans-up";
import discourseComputed, { bind } from "discourse-common/utils/decorators"; import discourseComputed, { bind } from "discourse-common/utils/decorators";

View File

@ -5,6 +5,7 @@ import { on } from "@ember/object/evented";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
import $ from "jquery";
import { topicTitleDecorators } from "discourse/components/topic-title"; import { topicTitleDecorators } from "discourse/components/topic-title";
import { wantsNewWindow } from "discourse/lib/intercept-click"; import { wantsNewWindow } from "discourse/lib/intercept-click";
import DiscourseURL, { groupPath } from "discourse/lib/url"; import DiscourseURL, { groupPath } from "discourse/lib/url";

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import { headerOffset } from "discourse/lib/offset-calculator"; import { headerOffset } from "discourse/lib/offset-calculator";
import SwipeEvents from "discourse/lib/swipe-events"; import SwipeEvents from "discourse/lib/swipe-events";
import discourseDebounce from "discourse-common/lib/debounce"; import discourseDebounce from "discourse-common/lib/debounce";

View File

@ -1,5 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
import $ from "jquery";
import { iconHTML } from "discourse-common/lib/icon-library"; import { iconHTML } from "discourse-common/lib/icon-library";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n"; import I18n from "I18n";

View File

@ -4,6 +4,7 @@ import { or } from "@ember/object/computed";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import $ from "jquery";
import lightbox, { import lightbox, {
cleanupLightboxes, cleanupLightboxes,
setupLightboxes, setupLightboxes,

View File

@ -1,6 +1,7 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { on } from "@ember/object/evented"; import { on } from "@ember/object/evented";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import ClickTrack from "discourse/lib/click-track"; import ClickTrack from "discourse/lib/click-track";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";

View File

@ -4,6 +4,7 @@ import EmberObject, { action } from "@ember/object";
import { notEmpty } from "@ember/object/computed"; import { notEmpty } from "@ember/object/computed";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import $ from "jquery";
import { Promise } from "rsvp"; import { Promise } from "rsvp";
import LoginModal from "discourse/components/modal/login"; import LoginModal from "discourse/components/modal/login";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";

View File

@ -1,4 +1,5 @@
import { scheduleOnce } from "@ember/runloop"; import { scheduleOnce } from "@ember/runloop";
import $ from "jquery";
function _clean(transition) { function _clean(transition) {
if (window.MiniProfiler && transition.from) { if (window.MiniProfiler && transition.from) {

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import interceptClick from "discourse/lib/intercept-click"; import interceptClick from "discourse/lib/intercept-click";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";

View File

@ -1,3 +1,5 @@
import $ from "jquery";
// Append our CSRF token to AJAX requests when necessary. // Append our CSRF token to AJAX requests when necessary.
let installed = false; let installed = false;

View File

@ -1,5 +1,8 @@
import "bootstrap/js/modal";
import bootbox from "bootbox"; import bootbox from "bootbox";
import $ from "jquery";
import autocomplete from "discourse/lib/autocomplete"; import autocomplete from "discourse/lib/autocomplete";
import { caret, caretPosition } from "discourse/lib/caret-position";
import deprecated from "discourse-common/lib/deprecated"; import deprecated from "discourse-common/lib/deprecated";
import { getOwnerWithFallback } from "discourse-common/lib/get-owner"; import { getOwnerWithFallback } from "discourse-common/lib/get-owner";
@ -52,6 +55,10 @@ export default {
// Initialize the autocomplete tool // Initialize the autocomplete tool
$.fn.autocomplete = autocomplete; $.fn.autocomplete = autocomplete;
// Initialize caretPosition
$.fn.caret = caret;
$.fn.caretPosition = caretPosition;
jqueryPluginsConfigured = true; jqueryPluginsConfigured = true;
}, },
}; };

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { handleLogoff } from "discourse/lib/ajax"; import { handleLogoff } from "discourse/lib/ajax";
import userPresent, { onPresenceChange } from "discourse/lib/user-presence"; import userPresent, { onPresenceChange } from "discourse/lib/user-presence";
import { isProduction, isTesting } from "discourse-common/config/environment"; import { isProduction, isTesting } from "discourse-common/config/environment";

View File

@ -1,4 +1,5 @@
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
import $ from "jquery";
import { getOwnerWithFallback } from "discourse-common/lib/get-owner"; import { getOwnerWithFallback } from "discourse-common/lib/get-owner";
import I18n from "I18n"; import I18n from "I18n";

View File

@ -1,4 +1,5 @@
import { run } from "@ember/runloop"; import { run } from "@ember/runloop";
import $ from "jquery";
import { Promise } from "rsvp"; import { Promise } from "rsvp";
import userPresent from "discourse/lib/user-presence"; import userPresent from "discourse/lib/user-presence";
import Session from "discourse/models/session"; import Session from "discourse/models/session";

View File

@ -1,5 +1,6 @@
import { cancel } from "@ember/runloop"; import { cancel } from "@ember/runloop";
import { createPopper } from "@popperjs/core"; import { createPopper } from "@popperjs/core";
import $ from "jquery";
import { isDocumentRTL } from "discourse/lib/text-direction"; import { isDocumentRTL } from "discourse/lib/text-direction";
import { caretPosition, setCaretPosition } from "discourse/lib/utilities"; import { caretPosition, setCaretPosition } from "discourse/lib/utilities";
import Site from "discourse/models/site"; import Site from "discourse/models/site";

View File

@ -1,26 +1,27 @@
// TODO: This code should be moved to lib, it was heavily modified by us over the years, and mostly written by us import $ from "jquery";
// This was heavily modified by us over the years, and mostly written by us
// except for the little snippet from StackOverflow // except for the little snippet from StackOverflow
// //
// http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea // http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea
var clone = null; let clone = null;
$.fn.caret = function(elem) { function getCaret(el) {
var getCaret = function(el) { if (el.selectionStart) {
if (el.selectionStart) { return el.selectionStart;
return el.selectionStart; }
} return 0;
return 0; }
};
export function caret(elem) {
return getCaret(elem || this[0]); return getCaret(elem || this[0]);
}; }
/** /**
This is a jQuery plugin to retrieve the caret position in a textarea retrieve the caret position in a textarea
@module $.fn.caretPosition
**/ **/
$.fn.caretPosition = function(options) { export function caretPosition(options) {
var after, let after,
before, before,
getStyles, getStyles,
guard, guard,
@ -32,17 +33,15 @@ $.fn.caretPosition = function(options) {
p, p,
pPos, pPos,
pos, pos,
span,
styles, styles,
textarea, textarea,
val; val;
if (clone) { if (clone) {
clone.remove(); clone.remove();
} }
span = $("#pos span");
textarea = $(this); textarea = $(this);
getStyles = function(el) { getStyles = function (el) {
if (el.currentStyle) { if (el.currentStyle) {
return el.currentStyle; return el.currentStyle;
} else { } else {
@ -50,7 +49,7 @@ $.fn.caretPosition = function(options) {
} }
}; };
important = function(prop) { important = function (prop) {
return styles.getPropertyValue(prop); return styles.getPropertyValue(prop);
}; };
@ -58,7 +57,7 @@ $.fn.caretPosition = function(options) {
clone = $("<div><p></p></div>").appendTo("body"); clone = $("<div><p></p></div>").appendTo("body");
p = clone.find("p"); p = clone.find("p");
var isRTL = $("html").hasClass("rtl"); let isRTL = $("html").hasClass("rtl");
clone.css({ clone.css({
border: "1px solid black", border: "1px solid black",
padding: important("padding"), padding: important("padding"),
@ -68,7 +67,7 @@ $.fn.caretPosition = function(options) {
"word-wrap": "break-word", "word-wrap": "break-word",
position: "absolute", position: "absolute",
left: isRTL ? "auto" : "-7000px", left: isRTL ? "auto" : "-7000px",
right: isRTL ? "-7000px" : "auto" right: isRTL ? "-7000px" : "auto",
}); });
p.css({ p.css({
@ -78,7 +77,7 @@ $.fn.caretPosition = function(options) {
"letter-spacing": important("letter-spacing"), "letter-spacing": important("letter-spacing"),
"font-family": important("font-family"), "font-family": important("font-family"),
"font-size": important("font-size"), "font-size": important("font-size"),
"line-height": important("line-height") "line-height": important("line-height"),
}); });
clone.width(textarea.width()); clone.width(textarea.width());
@ -87,7 +86,7 @@ $.fn.caretPosition = function(options) {
pos = pos =
options && (options.pos || options.pos === 0) options && (options.pos || options.pos === 0)
? options.pos ? options.pos
: $.caret(textarea[0]); : getCaret(textarea[0]);
val = textarea.val().replace("\r", ""); val = textarea.val().replace("\r", "");
if (options && options.key) { if (options && options.key) {
@ -102,18 +101,20 @@ $.fn.caretPosition = function(options) {
insertSpaceAfterBefore = true; insertSpaceAfterBefore = true;
} }
guard = function(v) { guard = function (v) {
var buf; let buf;
buf = v.replace(/</g, "&lt;"); buf = v.replace(/</g, "&lt;");
buf = buf.replace(/>/g, "&gt;"); buf = buf.replace(/>/g, "&gt;");
buf = buf.replace(/[ ]/g, "&#x200b;&nbsp;&#x200b;"); buf = buf.replace(/[ ]/g, "&#x200b;&nbsp;&#x200b;");
return buf.replace(/\n/g, "<br />"); return buf.replace(/\n/g, "<br />");
}; };
makeCursor = function(pos, klass, color) { makeCursor = function (index, klass, color) {
var l; let l;
l = val.substring(pos, pos + 1); l = val.substring(index, index + 1);
if (l === "\n") return "<br>"; if (l === "\n") {
return "<br>";
}
return ( return (
"<span class='" + "<span class='" +
klass + klass +
@ -152,11 +153,11 @@ $.fn.caretPosition = function(options) {
} }
pPos = p.offset(); pPos = p.offset();
var position = { let position = {
left: pos.left - pPos.left, left: pos.left - pPos.left,
top: pos.top - pPos.top - clone.scrollTop() top: pos.top - pPos.top - clone.scrollTop(),
}; };
clone.remove(); clone.remove();
return position; return position;
}; }

View File

@ -1,5 +1,6 @@
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import { guidFor } from "@ember/object/internals"; import { guidFor } from "@ember/object/internals";
import $ from "jquery";
import { defaultHomepage } from "discourse/lib/utilities"; import { defaultHomepage } from "discourse/lib/utilities";
import { withoutPrefix } from "discourse-common/lib/get-url"; import { withoutPrefix } from "discourse-common/lib/get-url";

View File

@ -1,5 +1,6 @@
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import Evented from "@ember/object/evented"; import Evented from "@ember/object/evented";
import $ from "jquery";
import { isTesting } from "discourse-common/config/environment"; import { isTesting } from "discourse-common/config/environment";
let _skipUpdate; let _skipUpdate;

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { spinnerHTML } from "discourse/helpers/loading-spinner"; import { spinnerHTML } from "discourse/helpers/loading-spinner";
import { SELECTORS } from "discourse/lib/lightbox/constants"; import { SELECTORS } from "discourse/lib/lightbox/constants";
import loadScript from "discourse/lib/load-script"; import loadScript from "discourse/lib/load-script";

View File

@ -1,7 +1,7 @@
// TODO (martin) Delete this after core PR and any other PRs that depend // TODO (martin) Delete this after core PR and any other PRs that depend
// on this file (e.g. discourse-encrypt) are merged. // on this file (e.g. discourse-encrypt) are merged.
import jQuery from "jquery"; import $ from "jquery";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { replaceSpan } from "discourse/lib/category-hashtags"; import { replaceSpan } from "discourse/lib/category-hashtags";
import { TAG_HASHTAG_POSTFIX } from "discourse/lib/tag-hashtags"; import { TAG_HASHTAG_POSTFIX } from "discourse/lib/tag-hashtags";
@ -12,7 +12,7 @@ const tagHashtags = {};
const checkedHashtags = new Set(); const checkedHashtags = new Set();
export function linkSeenHashtags(elem) { export function linkSeenHashtags(elem) {
if (elem instanceof jQuery) { if (elem instanceof $) {
elem = elem[0]; elem = elem[0];
deprecated("linkSeenHashtags now expects a DOM node as first parameter", { deprecated("linkSeenHashtags now expects a DOM node as first parameter", {

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { isTesting } from "discourse-common/config/environment"; import { isTesting } from "discourse-common/config/environment";
let mobileForced = false; let mobileForced = false;

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { h } from "virtual-dom"; import { h } from "virtual-dom";
import { import {
addComposerUploadHandler, addComposerUploadHandler,

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { INPUT_DELAY } from "discourse-common/config/environment"; import { INPUT_DELAY } from "discourse-common/config/environment";
import discourseDebounce from "discourse-common/lib/debounce"; import discourseDebounce from "discourse-common/lib/debounce";
import { helperContext } from "discourse-common/lib/helpers"; import { helperContext } from "discourse-common/lib/helpers";

View File

@ -2,6 +2,7 @@ import { setOwner } from "@ember/application";
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import { next, schedule } from "@ember/runloop"; import { next, schedule } from "@ember/runloop";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import $ from "jquery";
import LockOn from "discourse/lib/lock-on"; import LockOn from "discourse/lib/lock-on";
import offsetCalculator from "discourse/lib/offset-calculator"; import offsetCalculator from "discourse/lib/offset-calculator";
import { defaultHomepage } from "discourse/lib/utilities"; import { defaultHomepage } from "discourse/lib/utilities";

View File

@ -1,4 +1,5 @@
import Handlebars from "handlebars"; import Handlebars from "handlebars";
import $ from "jquery";
import toMarkdown from "discourse/lib/to-markdown"; import toMarkdown from "discourse/lib/to-markdown";
import { capabilities } from "discourse/services/capabilities"; import { capabilities } from "discourse/services/capabilities";
import * as AvatarUtils from "discourse-common/lib/avatar-utils"; import * as AvatarUtils from "discourse-common/lib/avatar-utils";

View File

@ -2,6 +2,7 @@ import { alias, match } from "@ember/object/computed";
import Mixin from "@ember/object/mixin"; import Mixin from "@ember/object/mixin";
import { schedule, throttle } from "@ember/runloop"; import { schedule, throttle } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import { wantsNewWindow } from "discourse/lib/intercept-click"; import { wantsNewWindow } from "discourse/lib/intercept-click";
import { headerOffset } from "discourse/lib/offset-calculator"; import { headerOffset } from "discourse/lib/offset-calculator";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";

View File

@ -1,4 +1,5 @@
import Mixin from "@ember/object/mixin"; import Mixin from "@ember/object/mixin";
import $ from "jquery";
import discourseDebounce from "discourse-common/lib/debounce"; import discourseDebounce from "discourse-common/lib/debounce";
// Small buffer so that very tiny scrolls don't trigger mobile header switch // Small buffer so that very tiny scrolls don't trigger mobile header switch

View File

@ -1,4 +1,5 @@
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import $ from "jquery";
import { Promise } from "rsvp"; import { Promise } from "rsvp";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";

View File

@ -2,6 +2,7 @@ import { action, get } from "@ember/object";
import { cancel, schedule } from "@ember/runloop"; import { cancel, schedule } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import $ from "jquery";
import AddPmParticipants from "discourse/components/modal/add-pm-participants"; import AddPmParticipants from "discourse/components/modal/add-pm-participants";
import ChangeOwnerModal from "discourse/components/modal/change-owner"; import ChangeOwnerModal from "discourse/components/modal/change-owner";
import ChangeTimestampModal from "discourse/components/modal/change-timestamp"; import ChangeTimestampModal from "discourse/components/modal/change-timestamp";

View File

@ -1,4 +1,5 @@
import { action } from "@ember/object"; import { action } from "@ember/object";
import $ from "jquery";
import { Promise } from "rsvp"; import { Promise } from "rsvp";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import DiscourseRoute from "discourse/routes/discourse"; import DiscourseRoute from "discourse/routes/discourse";

View File

@ -1,6 +1,6 @@
import { getOwner } from "@ember/application"; import { getOwner } from "@ember/application";
import Service, { inject as service } from "@ember/service"; import Service, { inject as service } from "@ember/service";
import Ember from "ember"; import $ from "jquery";
import { getAndClearUnhandledThemeErrors } from "discourse/app"; import { getAndClearUnhandledThemeErrors } from "discourse/app";
import { disableImplicitInjections } from "discourse/lib/implicit-injections"; import { disableImplicitInjections } from "discourse/lib/implicit-injections";
import identifySource, { import identifySource, {
@ -108,7 +108,7 @@ function reportToLogster(name, error) {
}; };
// TODO: To be moved out into a logster-provided lib // TODO: To be moved out into a logster-provided lib
Ember.$.ajax(getURL("/logs/report_js_error"), { $.ajax(getURL("/logs/report_js_error"), {
data, data,
type: "POST", type: "POST",
}); });

View File

@ -5,6 +5,7 @@ import Service, { inject as service } from "@ember/service";
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import { observes, on } from "@ember-decorators/object"; import { observes, on } from "@ember-decorators/object";
import $ from "jquery";
import { Promise } from "rsvp"; import { Promise } from "rsvp";
import DiscardDraftModal from "discourse/components/modal/discard-draft"; import DiscardDraftModal from "discourse/components/modal/discard-draft";
import PostEnqueuedModal from "discourse/components/modal/post-enqueued"; import PostEnqueuedModal from "discourse/components/modal/post-enqueued";

View File

@ -3,6 +3,7 @@ import { getOwner } from "@ember/application";
import { action } from "@ember/object"; import { action } from "@ember/object";
import Service, { inject as service } from "@ember/service"; import Service, { inject as service } from "@ember/service";
import { dasherize } from "@ember/string"; import { dasherize } from "@ember/string";
import $ from "jquery";
import { CLOSE_INITIATED_BY_MODAL_SHOW } from "discourse/components/d-modal"; import { CLOSE_INITIATED_BY_MODAL_SHOW } from "discourse/components/d-modal";
import { disableImplicitInjections } from "discourse/lib/implicit-injections"; import { disableImplicitInjections } from "discourse/lib/implicit-injections";
import deprecated from "discourse-common/lib/deprecated"; import deprecated from "discourse-common/lib/deprecated";

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { h } from "virtual-dom"; import { h } from "virtual-dom";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";
import { createWidget } from "discourse/widgets/widget"; import { createWidget } from "discourse/widgets/widget";

View File

@ -1,5 +1,6 @@
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import { hbs } from "ember-cli-htmlbars"; import { hbs } from "ember-cli-htmlbars";
import $ from "jquery";
import { h } from "virtual-dom"; import { h } from "virtual-dom";
import { addExtraUserClasses } from "discourse/helpers/user-avatar"; import { addExtraUserClasses } from "discourse/helpers/user-avatar";
import { wantsNewWindow } from "discourse/lib/intercept-click"; import { wantsNewWindow } from "discourse/lib/intercept-click";

View File

@ -1,4 +1,5 @@
/*eslint no-loop-func:0*/ /*eslint no-loop-func:0*/
import $ from "jquery";
const CLICK_ATTRIBUTE_NAME = "_discourse_click_widget"; const CLICK_ATTRIBUTE_NAME = "_discourse_click_widget";
const DOUBLE_CLICK_ATTRIBUTE_NAME = "_discourse_double_click_widget"; const DOUBLE_CLICK_ATTRIBUTE_NAME = "_discourse_double_click_widget";

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { h } from "virtual-dom"; import { h } from "virtual-dom";
import { addWidgetCleanCallback } from "discourse/components/mount-widget"; import { addWidgetCleanCallback } from "discourse/components/mount-widget";
import { Placeholder } from "discourse/lib/posts-with-placeholders"; import { Placeholder } from "discourse/lib/posts-with-placeholders";

View File

@ -1,3 +1,5 @@
import $ from "jquery";
export default class RawHtml { export default class RawHtml {
constructor(attrs) { constructor(attrs) {
this.html = attrs.html; this.html = attrs.html;

View File

@ -1,3 +1,4 @@
import $ from "jquery";
import { h } from "virtual-dom"; import { h } from "virtual-dom";
import { applyDecorators, createWidget } from "discourse/widgets/widget"; import { applyDecorators, createWidget } from "discourse/widgets/widget";

View File

@ -133,10 +133,7 @@ module.exports = function (defaults) {
}); });
// WARNING: We should only import scripts here if they are not in NPM. // WARNING: We should only import scripts here if they are not in NPM.
// For example: our very specific version of bootstrap-modal.
app.import(vendorJs + "bootbox.js"); app.import(vendorJs + "bootbox.js");
app.import("node_modules/bootstrap/js/modal.js");
app.import(vendorJs + "caret_position.js");
app.import("node_modules/ember-source/dist/ember-template-compiler.js", { app.import("node_modules/ember-source/dist/ember-template-compiler.js", {
type: "test", type: "test",
}); });

View File

@ -1,4 +1,5 @@
import { click, settled, visit, waitFor } from "@ember/test-helpers"; import { click, settled, visit, waitFor } from "@ember/test-helpers";
import $ from "jquery";
import { test } from "qunit"; import { test } from "qunit";
import { acceptance, exists } from "discourse/tests/helpers/qunit-helpers"; import { acceptance, exists } from "discourse/tests/helpers/qunit-helpers";

View File

@ -1,5 +1,6 @@
import { render } from "@ember/test-helpers"; import { render } from "@ember/test-helpers";
import { setupRenderingTest as emberSetupRenderingTest } from "ember-qunit"; import { setupRenderingTest as emberSetupRenderingTest } from "ember-qunit";
import $ from "jquery";
import QUnit, { test } from "qunit"; import QUnit, { test } from "qunit";
import { autoLoadModules } from "discourse/instance-initializers/auto-load-modules"; import { autoLoadModules } from "discourse/instance-initializers/auto-load-modules";
import Session from "discourse/models/session"; import Session from "discourse/models/session";

View File

@ -7,6 +7,7 @@ import {
} from "@ember/test-helpers"; } from "@ember/test-helpers";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import { setupApplicationTest } from "ember-qunit"; import { setupApplicationTest } from "ember-qunit";
import $ from "jquery";
import MessageBus from "message-bus-client"; import MessageBus from "message-bus-client";
import { resetCache as resetOneboxCache } from "pretty-text/oneboxer"; import { resetCache as resetOneboxCache } from "pretty-text/oneboxer";
import QUnit, { module, skip, test } from "qunit"; import QUnit, { module, skip, test } from "qunit";

View File

@ -1,6 +1,6 @@
import { click, fillIn, triggerEvent } from "@ember/test-helpers"; import { click, fillIn, triggerEvent } from "@ember/test-helpers";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import jQuery from "jquery"; import $ from "jquery";
import { exists, query, queryAll } from "discourse/tests/helpers/qunit-helpers"; import { exists, query, queryAll } from "discourse/tests/helpers/qunit-helpers";
function checkSelectKitIsNotExpanded(selector) { function checkSelectKitIsNotExpanded(selector) {
@ -65,7 +65,7 @@ async function keyboardHelper(value, target, selector) {
if (value === "selectAll") { if (value === "selectAll") {
// special casing the only one not working with triggerEvent // special casing the only one not working with triggerEvent
const event = jQuery.Event("keydown"); const event = $.Event("keydown");
event.key = "A"; event.key = "A";
event.keyCode = 65; event.keyCode = 65;
event.metaKey = true; event.metaKey = true;

View File

@ -9,9 +9,10 @@ import {
setApplication, setApplication,
setResolver, setResolver,
} from "@ember/test-helpers"; } from "@ember/test-helpers";
import "bootstrap/js/modal";
import bootbox from "bootbox"; import bootbox from "bootbox";
import { addModuleExcludeMatcher } from "ember-cli-test-loader/test-support/index"; import { addModuleExcludeMatcher } from "ember-cli-test-loader/test-support/index";
import jQuery from "jquery"; import $ from "jquery";
import MessageBus from "message-bus-client"; import MessageBus from "message-bus-client";
import QUnit from "qunit"; import QUnit from "qunit";
import sinon from "sinon"; import sinon from "sinon";
@ -393,7 +394,7 @@ export default function setupTests(config) {
addModuleExcludeMatcher((name) => !shouldLoadModule(name)); addModuleExcludeMatcher((name) => !shouldLoadModule(name));
// forces 0 as duration for all jquery animations // forces 0 as duration for all jquery animations
jQuery.fx.off = true; $.fx.off = true;
setupToolbar(); setupToolbar();
reportMemoryUsageAfterTests(); reportMemoryUsageAfterTests();

View File

@ -1,5 +1,6 @@
import { setupTest } from "ember-qunit"; import { setupTest } from "ember-qunit";
import { compile } from "handlebars"; import { compile } from "handlebars";
import $ from "jquery";
import { module, test } from "qunit"; import { module, test } from "qunit";
import autocomplete from "discourse/lib/autocomplete"; import autocomplete from "discourse/lib/autocomplete";

View File

@ -1,5 +1,6 @@
import { getOwner } from "@ember/application"; import { getOwner } from "@ember/application";
import { setupTest } from "ember-qunit"; import { setupTest } from "ember-qunit";
import $ from "jquery";
import { module, test } from "qunit"; import { module, test } from "qunit";
import { categoryBadgeHTML } from "discourse/helpers/category-link"; import { categoryBadgeHTML } from "discourse/helpers/category-link";
import { helperContext } from "discourse-common/lib/helpers"; import { helperContext } from "discourse-common/lib/helpers";

View File

@ -1,4 +1,5 @@
import { setupTest } from "ember-qunit"; import { setupTest } from "ember-qunit";
import $ from "jquery";
import { module, skip, test } from "qunit"; import { module, skip, test } from "qunit";
import sinon from "sinon"; import sinon from "sinon";
import ClickTrack from "discourse/lib/click-track"; import ClickTrack from "discourse/lib/click-track";

View File

@ -1,4 +1,5 @@
import { computed } from "@ember/object"; import { computed } from "@ember/object";
import $ from "jquery";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { isDevelopment } from "discourse-common/config/environment"; import { isDevelopment } from "discourse-common/config/environment";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";

View File

@ -2,6 +2,7 @@ import Component from "@ember/component";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import $ from "jquery";
import discourseComputed, { observes } from "discourse-common/utils/decorators"; import discourseComputed, { observes } from "discourse-common/utils/decorators";
import I18n from "I18n"; import I18n from "I18n";

View File

@ -1,11 +1,16 @@
/** define("bootbox", ["jquery", "exports"], function (jQuery, __exports__) {
* bootbox.js v3.2.0 if ("bootbox" in window) {
* throw new Error("bootbox unexpectedly loaded twice!");
* http://bootboxjs.com/license.txt }
*/
var bootbox = /**
window.bootbox || * bootbox.js v3.2.0
(function (document, $) { *
* http://bootboxjs.com/license.txt
*/
var bootbox =
window.bootbox ||
(function (document, $) {
/*jshint scripturl:true sub:true */ /*jshint scripturl:true sub:true */
var _locale = "en", var _locale = "en",
@ -705,11 +710,10 @@ var bootbox =
} }
return that; return that;
})(document, window.jQuery); })(document, jQuery);
// @see https://github.com/makeusabrew/bootbox/issues/71 // @see https://github.com/makeusabrew/bootbox/issues/71
window.bootbox = bootbox; window.bootbox = bootbox;
define("bootbox", ["exports"], function (__exports__) {
__exports__.default = window.bootbox; __exports__.default = window.bootbox;
}); });