js: replace <meta> tags with <body> data attributes.
Refactor things to store information about the current user as data attributes on the <body> tag rather than as <meta> tags. These <meta> tags are now deprecated and will be eventually removed. * Store all of the current user's API attributes as data attributes on the <body> tag. * Add `CurrentUser.data` for getting data from the <body> tag, and use it instead of `Utility.meta`. * Add `CurrentUser.update` for updating the current user's settings. * Fix a bug with the user named "Anonymous" not being able to edit notes.
This commit is contained in:
@@ -175,7 +175,8 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def body_attributes(user = CurrentUser.user)
|
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}?" }
|
attributes += User::Roles.map { |role| :"is_#{role}?" }
|
||||||
|
|
||||||
controller_param = params[:controller].parameterize.dasherize
|
controller_param = params[:controller].parameterize.dasherize
|
||||||
|
|||||||
@@ -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 Autocomplete } from '../src/javascripts/autocomplete.js.erb';
|
||||||
export { default as Blacklist } from '../src/javascripts/blacklists.js';
|
export { default as Blacklist } from '../src/javascripts/blacklists.js';
|
||||||
export { default as Comment } from '../src/javascripts/comments.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 Dtext } from '../src/javascripts/dtext.js';
|
||||||
export { default as Note } from '../src/javascripts/notes.js';
|
export { default as Note } from '../src/javascripts/notes.js';
|
||||||
export { default as Post } from '../src/javascripts/posts.js.erb';
|
export { default as Post } from '../src/javascripts/posts.js.erb';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import Utility from './utility'
|
import CurrentUser from './current_user'
|
||||||
import SavedSearch from './saved_searches'
|
import SavedSearch from './saved_searches'
|
||||||
|
|
||||||
let Autocomplete = {};
|
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.TERM_REGEX = new RegExp(`([-~]*)(?:(${Autocomplete.METATAGS_REGEX}):)?(\\S*)$`, "i");
|
||||||
|
|
||||||
Autocomplete.initialize_all = function() {
|
Autocomplete.initialize_all = function() {
|
||||||
if (Utility.meta("enable-auto-complete") === "true") {
|
if (CurrentUser.data("enable-auto-complete")) {
|
||||||
$.widget("ui.autocomplete", $.ui.autocomplete, {
|
$.widget("ui.autocomplete", $.ui.autocomplete, {
|
||||||
options: {
|
options: {
|
||||||
delay: 0,
|
delay: 0,
|
||||||
@@ -355,7 +355,7 @@ Autocomplete.render_item = function(list, item) {
|
|||||||
} else if (item.type === "user") {
|
} else if (item.type === "user") {
|
||||||
var level_class = "user-" + item.level.toLowerCase();
|
var level_class = "user-" + item.level.toLowerCase();
|
||||||
$link.addClass(level_class);
|
$link.addClass(level_class);
|
||||||
if (Utility.meta("style-usernames") === "true") {
|
if (CurrentUser.data("style-usernames")) {
|
||||||
$link.addClass("with-style");
|
$link.addClass("with-style");
|
||||||
}
|
}
|
||||||
} else if (item.type === "pool") {
|
} else if (item.type === "pool") {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import Cookie from './cookie'
|
import Cookie from './cookie'
|
||||||
import Utility from './utility'
|
import CurrentUser from './current_user'
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#hide-upgrade-account-notice").on("click.danbooru", function(e) {
|
$("#hide-upgrade-account-notice").on("click.danbooru", function(e) {
|
||||||
@@ -21,16 +21,10 @@ $(function() {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#desktop-version-link a").on("click.danbooru", function(e) {
|
$("#desktop-version-link a").on("click.danbooru", async function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$.ajax("/users/" + Utility.meta("current-user-id") + ".json", {
|
await CurrentUser.update({ disable_responsive_mode: true });
|
||||||
method: "PUT",
|
location.reload();
|
||||||
data: {
|
|
||||||
"user[disable_responsive_mode]": "true"
|
|
||||||
}
|
|
||||||
}).then(function() {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
14
app/javascript/src/javascripts/current_user.js
Normal file
14
app/javascript/src/javascripts/current_user.js
Normal file
@@ -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;
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import CurrentUser from './current_user'
|
||||||
import Utility from './utility'
|
import Utility from './utility'
|
||||||
|
|
||||||
let Note = {
|
let Note = {
|
||||||
@@ -348,7 +349,7 @@ let Note = {
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (Utility.meta("current-user-name") !== "Anonymous") {
|
if (CurrentUser.data("is-anonymous") === false) {
|
||||||
$note_body.on("click.danbooru", function(e) {
|
$note_body.on("click.danbooru", function(e) {
|
||||||
if (e.target.tagName !== "A") {
|
if (e.target.tagName !== "A") {
|
||||||
var $note_body_inner = $(e.currentTarget);
|
var $note_body_inner = $(e.currentTarget);
|
||||||
@@ -573,7 +574,7 @@ let Note = {
|
|||||||
start: function(e) {
|
start: function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
if (Utility.meta("current-user-id") === "") {
|
if (CurrentUser.data("is-anonymous")) {
|
||||||
Utility.notice("You must be logged in to edit notes");
|
Utility.notice("You must be logged in to edit notes");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import Utility from './utility'
|
|
||||||
import Cookie from './cookie'
|
import Cookie from './cookie'
|
||||||
import Post from './posts.js.erb'
|
import CurrentUser from './current_user'
|
||||||
import Favorite from './favorites'
|
import Favorite from './favorites'
|
||||||
|
import Post from './posts.js.erb'
|
||||||
|
import Utility from './utility'
|
||||||
|
|
||||||
let PostModeMenu = {};
|
let PostModeMenu = {};
|
||||||
|
|
||||||
@@ -91,7 +92,7 @@ PostModeMenu.initialize_edit_form = function() {
|
|||||||
|
|
||||||
PostModeMenu.close_edit_form = function() {
|
PostModeMenu.close_edit_form = function() {
|
||||||
$("#quick-edit-div").slideUp("fast");
|
$("#quick-edit-div").slideUp("fast");
|
||||||
if (Utility.meta("enable-auto-complete") === "true") {
|
if (CurrentUser.data("enable-auto-complete")) {
|
||||||
$("#post_tag_string").data("uiAutocomplete").close();
|
$("#post_tag_string").data("uiAutocomplete").close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import CurrentUser from './current_user'
|
||||||
import Utility from './utility'
|
import Utility from './utility'
|
||||||
|
|
||||||
require('qtip2');
|
require('qtip2');
|
||||||
@@ -99,25 +100,21 @@ PostTooltip.hide = function (event) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
PostTooltip.disabled = 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.preventDefault();
|
||||||
$(event.target).parents(".qtip").qtip("hide");
|
$(event.target).parents(".qtip").qtip("hide");
|
||||||
|
|
||||||
if (Utility.meta("current-user-id") === "") {
|
if (CurrentUser.data("is-anonymous")) {
|
||||||
Utility.notice('<a href="/session/new">Login</a> to disable tooltips permanently');
|
Utility.notice('You must <a href="/session/new">login</a> to disable tooltips');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajax("/users/" + Utility.meta("current-user-id") + ".json", {
|
await CurrentUser.update({ disable_post_tooltips: true });
|
||||||
method: "PUT",
|
Utility.notice("Tooltips disabled; check your account settings to re-enable.");
|
||||||
data: { "user[disable_post_tooltips]": "true" },
|
location.reload();
|
||||||
}).then(function() {
|
|
||||||
Utility.notice("Tooltips disabled; check your account settings to re-enable.");
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(PostTooltip.initialize);
|
$(document).ready(PostTooltip.initialize);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import CurrentUser from './current_user'
|
||||||
import Utility from './utility'
|
import Utility from './utility'
|
||||||
import Hammer from 'hammerjs'
|
import Hammer from 'hammerjs'
|
||||||
import Cookie from './cookie'
|
import Cookie from './cookie'
|
||||||
@@ -49,7 +50,7 @@ Post.initialize_all = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Post.initialize_gestures = function() {
|
Post.initialize_gestures = function() {
|
||||||
if (Utility.meta("disable-mobile-gestures") === "true") {
|
if (CurrentUser.data("disable-mobile-gestures")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var $body = $("body");
|
var $body = $("body");
|
||||||
@@ -117,7 +118,7 @@ Post.open_edit_dialog = function() {
|
|||||||
of: window
|
of: window
|
||||||
},
|
},
|
||||||
drag: function(e, ui) {
|
drag: function(e, ui) {
|
||||||
if (Utility.meta("enable-auto-complete") === "true") {
|
if (CurrentUser.data("enable-auto-complete")) {
|
||||||
$tag_string.data("uiAutocomplete").close();
|
$tag_string.data("uiAutocomplete").close();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -591,7 +592,7 @@ Post.initialize_saved_searches = function() {
|
|||||||
$("#save-search").on("click.danbooru", function(e) {
|
$("#save-search").on("click.danbooru", function(e) {
|
||||||
$("#save-search-dialog #saved_search_query").val($("#tags").val());
|
$("#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");
|
$("#save-search-dialog").dialog("open");
|
||||||
} else {
|
} else {
|
||||||
$.post(
|
$.post(
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import CurrentUser from "./current_user";
|
||||||
|
|
||||||
let Utility = {};
|
let Utility = {};
|
||||||
|
|
||||||
Utility.delay = function(milliseconds) {
|
Utility.delay = function(milliseconds) {
|
||||||
@@ -66,7 +68,7 @@ Utility.dialog = function(title, html) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Utility.keydown = function(keys, namespace, handler) {
|
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);
|
$(document).on("keydown.danbooru." + namespace, null, keys, handler);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user