diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 0904ba41e..2de4ff84f 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -175,7 +175,8 @@ module ApplicationHelper
end
def body_attributes(user = CurrentUser.user)
- attributes = [:id, :name, :level, :level_string, :theme, :can_approve_posts?, :can_upload_free?]
+ attributes = user.api_attributes
+ attributes -= [:custom_style, :blacklisted_tags, :favorite_tags]
attributes += User::Roles.map { |role| :"is_#{role}?" }
controller_param = params[:controller].parameterize.dasherize
diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js
index da34763a3..1ed58eb97 100644
--- a/app/javascript/packs/application.js
+++ b/app/javascript/packs/application.js
@@ -31,6 +31,7 @@ importAll(require.context('../src/styles', true, /\.s?css(?:\.erb)?$/));
export { default as Autocomplete } from '../src/javascripts/autocomplete.js.erb';
export { default as Blacklist } from '../src/javascripts/blacklists.js';
export { default as Comment } from '../src/javascripts/comments.js';
+export { default as CurrentUser } from '../src/javascripts/current_user.js';
export { default as Dtext } from '../src/javascripts/dtext.js';
export { default as Note } from '../src/javascripts/notes.js';
export { default as Post } from '../src/javascripts/posts.js.erb';
diff --git a/app/javascript/src/javascripts/autocomplete.js.erb b/app/javascript/src/javascripts/autocomplete.js.erb
index c4a07a83e..be27667c0 100644
--- a/app/javascript/src/javascripts/autocomplete.js.erb
+++ b/app/javascript/src/javascripts/autocomplete.js.erb
@@ -1,4 +1,4 @@
-import Utility from './utility'
+import CurrentUser from './current_user'
import SavedSearch from './saved_searches'
let Autocomplete = {};
@@ -14,7 +14,7 @@ Autocomplete.METATAGS_REGEX = Autocomplete.METATAGS.concat(Object.keys(Autocompl
Autocomplete.TERM_REGEX = new RegExp(`([-~]*)(?:(${Autocomplete.METATAGS_REGEX}):)?(\\S*)$`, "i");
Autocomplete.initialize_all = function() {
- if (Utility.meta("enable-auto-complete") === "true") {
+ if (CurrentUser.data("enable-auto-complete")) {
$.widget("ui.autocomplete", $.ui.autocomplete, {
options: {
delay: 0,
@@ -355,7 +355,7 @@ Autocomplete.render_item = function(list, item) {
} else if (item.type === "user") {
var level_class = "user-" + item.level.toLowerCase();
$link.addClass(level_class);
- if (Utility.meta("style-usernames") === "true") {
+ if (CurrentUser.data("style-usernames")) {
$link.addClass("with-style");
}
} else if (item.type === "pool") {
diff --git a/app/javascript/src/javascripts/common.js b/app/javascript/src/javascripts/common.js
index 6d611bd3d..c03552164 100644
--- a/app/javascript/src/javascripts/common.js
+++ b/app/javascript/src/javascripts/common.js
@@ -1,5 +1,5 @@
import Cookie from './cookie'
-import Utility from './utility'
+import CurrentUser from './current_user'
$(function() {
$("#hide-upgrade-account-notice").on("click.danbooru", function(e) {
@@ -21,16 +21,10 @@ $(function() {
e.preventDefault();
});
- $("#desktop-version-link a").on("click.danbooru", function(e) {
+ $("#desktop-version-link a").on("click.danbooru", async function(e) {
e.preventDefault();
- $.ajax("/users/" + Utility.meta("current-user-id") + ".json", {
- method: "PUT",
- data: {
- "user[disable_responsive_mode]": "true"
- }
- }).then(function() {
- location.reload();
- });
+ await CurrentUser.update({ disable_responsive_mode: true });
+ location.reload();
});
});
diff --git a/app/javascript/src/javascripts/current_user.js b/app/javascript/src/javascripts/current_user.js
new file mode 100644
index 000000000..286253e03
--- /dev/null
+++ b/app/javascript/src/javascripts/current_user.js
@@ -0,0 +1,14 @@
+let CurrentUser = {};
+
+CurrentUser.data = function(key) {
+ return $("body").data(`user-${key}`);
+};
+
+CurrentUser.update = function(settings) {
+ return $.ajax(`/users/${CurrentUser.data("id")}.json`, {
+ method: "PUT",
+ data: { user: settings }
+ });
+};
+
+export default CurrentUser;
diff --git a/app/javascript/src/javascripts/notes.js b/app/javascript/src/javascripts/notes.js
index c6131e8fc..615de3c50 100644
--- a/app/javascript/src/javascripts/notes.js
+++ b/app/javascript/src/javascripts/notes.js
@@ -1,3 +1,4 @@
+import CurrentUser from './current_user'
import Utility from './utility'
let Note = {
@@ -348,7 +349,7 @@ let Note = {
e.stopPropagation();
});
- if (Utility.meta("current-user-name") !== "Anonymous") {
+ if (CurrentUser.data("is-anonymous") === false) {
$note_body.on("click.danbooru", function(e) {
if (e.target.tagName !== "A") {
var $note_body_inner = $(e.currentTarget);
@@ -573,7 +574,7 @@ let Note = {
start: function(e) {
e.preventDefault();
- if (Utility.meta("current-user-id") === "") {
+ if (CurrentUser.data("is-anonymous")) {
Utility.notice("You must be logged in to edit notes");
return;
}
diff --git a/app/javascript/src/javascripts/post_mode_menu.js b/app/javascript/src/javascripts/post_mode_menu.js
index f98732605..b1f456b1a 100644
--- a/app/javascript/src/javascripts/post_mode_menu.js
+++ b/app/javascript/src/javascripts/post_mode_menu.js
@@ -1,7 +1,8 @@
-import Utility from './utility'
import Cookie from './cookie'
-import Post from './posts.js.erb'
+import CurrentUser from './current_user'
import Favorite from './favorites'
+import Post from './posts.js.erb'
+import Utility from './utility'
let PostModeMenu = {};
@@ -91,7 +92,7 @@ PostModeMenu.initialize_edit_form = function() {
PostModeMenu.close_edit_form = function() {
$("#quick-edit-div").slideUp("fast");
- if (Utility.meta("enable-auto-complete") === "true") {
+ if (CurrentUser.data("enable-auto-complete")) {
$("#post_tag_string").data("uiAutocomplete").close();
}
}
diff --git a/app/javascript/src/javascripts/post_tooltips.js b/app/javascript/src/javascripts/post_tooltips.js
index d504adbab..58a1e4577 100644
--- a/app/javascript/src/javascripts/post_tooltips.js
+++ b/app/javascript/src/javascripts/post_tooltips.js
@@ -1,3 +1,4 @@
+import CurrentUser from './current_user'
import Utility from './utility'
require('qtip2');
@@ -99,25 +100,21 @@ PostTooltip.hide = function (event) {
};
PostTooltip.disabled = function (event) {
- return PostTooltip.isTouching || Utility.meta("disable-post-tooltips") === "true";
+ return PostTooltip.isTouching || CurrentUser.data("disable-post-tooltips");
};
-PostTooltip.on_disable_tooltips = function (event) {
+PostTooltip.on_disable_tooltips = async function (event) {
event.preventDefault();
$(event.target).parents(".qtip").qtip("hide");
- if (Utility.meta("current-user-id") === "") {
- Utility.notice('Login to disable tooltips permanently');
+ if (CurrentUser.data("is-anonymous")) {
+ Utility.notice('You must login to disable tooltips');
return;
}
- $.ajax("/users/" + Utility.meta("current-user-id") + ".json", {
- method: "PUT",
- data: { "user[disable_post_tooltips]": "true" },
- }).then(function() {
- Utility.notice("Tooltips disabled; check your account settings to re-enable.");
- location.reload();
- });
+ await CurrentUser.update({ disable_post_tooltips: true });
+ Utility.notice("Tooltips disabled; check your account settings to re-enable.");
+ location.reload();
};
$(document).ready(PostTooltip.initialize);
diff --git a/app/javascript/src/javascripts/posts.js.erb b/app/javascript/src/javascripts/posts.js.erb
index 7334e8cc8..d7fad487b 100644
--- a/app/javascript/src/javascripts/posts.js.erb
+++ b/app/javascript/src/javascripts/posts.js.erb
@@ -1,3 +1,4 @@
+import CurrentUser from './current_user'
import Utility from './utility'
import Hammer from 'hammerjs'
import Cookie from './cookie'
@@ -49,7 +50,7 @@ Post.initialize_all = function() {
}
Post.initialize_gestures = function() {
- if (Utility.meta("disable-mobile-gestures") === "true") {
+ if (CurrentUser.data("disable-mobile-gestures")) {
return;
}
var $body = $("body");
@@ -117,7 +118,7 @@ Post.open_edit_dialog = function() {
of: window
},
drag: function(e, ui) {
- if (Utility.meta("enable-auto-complete") === "true") {
+ if (CurrentUser.data("enable-auto-complete")) {
$tag_string.data("uiAutocomplete").close();
}
},
@@ -591,7 +592,7 @@ Post.initialize_saved_searches = function() {
$("#save-search").on("click.danbooru", function(e) {
$("#save-search-dialog #saved_search_query").val($("#tags").val());
- if (Utility.meta("disable-labeled-saved-searches") === "false") {
+ if (CurrentUser.data("disable-categorized-saved-searches") === false) {
$("#save-search-dialog").dialog("open");
} else {
$.post(
diff --git a/app/javascript/src/javascripts/utility.js b/app/javascript/src/javascripts/utility.js
index 20dfb54ec..72bb4325b 100644
--- a/app/javascript/src/javascripts/utility.js
+++ b/app/javascript/src/javascripts/utility.js
@@ -1,3 +1,5 @@
+import CurrentUser from "./current_user";
+
let Utility = {};
Utility.delay = function(milliseconds) {
@@ -66,7 +68,7 @@ Utility.dialog = function(title, html) {
}
Utility.keydown = function(keys, namespace, handler) {
- if (Utility.meta("enable-js-navigation") === "true") {
+ if (CurrentUser.data("enable-post-navigation")) {
$(document).on("keydown.danbooru." + namespace, null, keys, handler);
}
};