diff --git a/app/javascript/src/javascripts/autocomplete.js.erb b/app/javascript/src/javascripts/autocomplete.js.erb
index 5d6a4e7be..11a0fcb33 100644
--- a/app/javascript/src/javascripts/autocomplete.js.erb
+++ b/app/javascript/src/javascripts/autocomplete.js.erb
@@ -246,6 +246,10 @@ Autocomplete.initialize_wiki_autocomplete = function($fields) {
};
Autocomplete.normal_source = function(term, resp) {
+ if (Utility.is_global_hook_defined("Danbooru.Autocomplete.normal_source")) {
+ return window.Danbooru.Autocomplete.normal_source(term, resp);
+ }
+
var key = "ac-" + term.replace(/\./g,'\uFFFF');
$.ajax({
@@ -432,6 +436,10 @@ Autocomplete.static_metatag_source = function(term, resp, metatag) {
}
Autocomplete.user_source = function(term, resp, metatag) {
+ if (Utility.is_global_hook_defined("Danbooru.Autocomplete.user_source")) {
+ return window.Danbooru.Autocomplete.user_source(term, resp, metatag);
+ }
+
$.ajax({
url: "/users.json",
data: {
@@ -466,6 +474,10 @@ Autocomplete.user_source = function(term, resp, metatag) {
}
Autocomplete.pool_source = function(term, resp, metatag) {
+ if (Utility.is_global_hook_defined("Danbooru.Autocomplete.pool_source")) {
+ return window.Danbooru.Autocomplete.pool_source(term, resp, metatag);
+ }
+
$.ajax({
url: "/pools.json",
data: {
@@ -489,6 +501,10 @@ Autocomplete.pool_source = function(term, resp, metatag) {
}
Autocomplete.favorite_group_source = function(term, resp, metatag) {
+ if (Utility.is_global_hook_defined("Danbooru.Autocomplete.favorite_group_source")) {
+ return window.Danbooru.Autocomplete.favorite_group_source(term, resp, metatag);
+ }
+
$.ajax({
url: "/favorite_groups.json",
data: {
@@ -509,6 +525,10 @@ Autocomplete.favorite_group_source = function(term, resp, metatag) {
}
Autocomplete.saved_search_source = function(term, resp) {
+ if (Utility.is_global_hook_defined("Danbooru.Autocomplete.saved_search_source")) {
+ return window.Danbooru.Autocomplete.saved_search_source(term, resp);
+ }
+
return SavedSearch.labels(term).then(function(labels) {
resp(labels.map(function(label) {
return {
diff --git a/app/javascript/src/javascripts/utility.js b/app/javascript/src/javascripts/utility.js
index 14a9d586d..8dcd85a6e 100644
--- a/app/javascript/src/javascripts/utility.js
+++ b/app/javascript/src/javascripts/utility.js
@@ -138,6 +138,18 @@ Utility.sorttable = function(table) {
});
};
+Utility.is_global_hook_defined = function(path) {
+ let objs = path.split(/\./g);
+ let obj = window;
+ objs.forEach(x => {
+ if (obj) {
+ obj = obj[x]
+ }
+ });
+
+ return typeof obj === 'function';
+}
+
String.prototype.hash = function() {
var hash = 5381, i = this.length;
diff --git a/app/views/layouts/default.html.erb b/app/views/layouts/default.html.erb
index 721f3398d..37a37740c 100644
--- a/app/views/layouts/default.html.erb
+++ b/app/views/layouts/default.html.erb
@@ -72,15 +72,16 @@