diff --git a/src/$ColorBox.js b/src/$ColorBox.js index 358eaed..f8c1526 100644 --- a/src/$ColorBox.js +++ b/src/$ColorBox.js @@ -145,9 +145,9 @@ function $ColorBox(){ } const rgb = col.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); function hex(x){ - return ("0" + parseInt(x).toString(16)).slice(-2); + return (`0${parseInt(x).toString(16)}`).slice(-2); } - return rgb ? ("#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3])) : col; + return rgb ? (`#${hex(rgb[1])}${hex(rgb[2])}${hex(rgb[3])}`) : col; } }); $palette.width(Math.ceil(palette.length/2) * width_per_button); diff --git a/src/$Component.js b/src/$Component.js index c14f6ec..220bab4 100644 --- a/src/$Component.js +++ b/src/$Component.js @@ -2,7 +2,7 @@ function $Component(name, orientation, $el){ // A draggable widget that can be undocked into a window const $c = $(E("div")).addClass("component"); - $c.addClass(""+name+"-component"); + $c.addClass(`${name}-component`); $c.append($el); $c.attr("touch-action", "none"); diff --git a/src/$FontBox.js b/src/$FontBox.js index 4569048..7b4f8d7 100644 --- a/src/$FontBox.js +++ b/src/$FontBox.js @@ -63,7 +63,7 @@ function $FontBox(){ width: 16, height: 16, backgroundImage: "url(images/text-tools.png)", - backgroundPosition: xi*-16 + "px 0px" + backgroundPosition: `${xi*-16}px 0px` }); $button.on("click", () => { $button.toggleClass("selected"); diff --git a/src/$MenuBar.js b/src/$MenuBar.js index 1108b7d..2b80dda 100644 --- a/src/$MenuBar.js +++ b/src/$MenuBar.js @@ -13,7 +13,7 @@ function $MenuBar(menus){ $menus.attr("touch-action", "none"); let selecting_menus = false; - const _html = menus_key => menus_key.replace(/&(.)/, m => "" + m[1] + ""); + const _html = menus_key => menus_key.replace(/&(.)/, m => `${m[1]}`); const _hotkey = menus_key => menus_key[menus_key.indexOf("&")+1].toUpperCase(); const close_menus = () => { @@ -175,7 +175,7 @@ function $MenuBar(menus){ const $menu_popup = $MenuPopup(menu_items).appendTo($menu_container); const menu_id = menus_key.replace("&", "").replace(/ /g, "-").toLowerCase(); - $menu_button.addClass("" + menu_id + "-menu-button"); + $menu_button.addClass(`${menu_id}-menu-button`); if(menu_id == "extras"){ // TODO: refactor shared key string, move to function // if localStorage is not available, the default setting is visible diff --git a/src/$ToolBox.js b/src/$ToolBox.js index adaf161..59a13a0 100644 --- a/src/$ToolBox.js +++ b/src/$ToolBox.js @@ -30,7 +30,7 @@ function $ToolBox(tools, is_extras){ width: 16, height: 16, backgroundImage: `url(${theme_folder}/tools.png)`, - backgroundPosition: bx + "px 0px", + backgroundPosition: `${bx}px 0px`, }); }; update_css(); diff --git a/src/OnCanvasObject.js b/src/OnCanvasObject.js index 88409d1..b879c17 100644 --- a/src/OnCanvasObject.js +++ b/src/OnCanvasObject.js @@ -22,8 +22,8 @@ class OnCanvasObject { height: magnification * this.height, }); if (updateStatus) { - $status_position.text(this.x + "," + this.y); - $status_size.text(this.width + "," + this.height); + $status_position.text(`${this.x},${this.y}`); + $status_size.text(`${this.width},${this.height}`); } } destroy() { diff --git a/src/OnCanvasTextBox.js b/src/OnCanvasTextBox.js index 1c864e5..5a9f840 100644 --- a/src/OnCanvasTextBox.js +++ b/src/OnCanvasTextBox.js @@ -11,14 +11,14 @@ class OnCanvasTextBox extends OnCanvasObject { font.background = tool_transparent_mode ? "transparent" : colors.background; this.$editor.css({ fontFamily: font.family, - fontSize: font.size * magnification + "px", + fontSize: `${font.size * magnification}px`, fontWeight: font.bold ? "bold" : "normal", fontStyle: font.italic ? "italic" : "normal", textDecoration: font.underline ? "underline" : "none", writingMode: font.vertical ? "vertical-lr" : "", MsWritingMode: font.vertical ? "vertical-lr" : "", WebkitWritingMode: font.vertical ? "vertical-lr" : "", - lineHeight: font.size * font.line_scale * magnification + "px", + lineHeight: `${font.size * font.line_scale * magnification}px`, color: font.color, background: font.background, }); @@ -106,7 +106,7 @@ class OnCanvasTextBox extends OnCanvasObject { ctx.fillRect(this.x, this.y, this.width, this.height); ctx.fillStyle = font.color; const style_ = (font.bold ? (font.italic ? "italic bold " : "bold ") : (font.italic ? "italic " : "")); - ctx.font = style_ + font.size + "px " + font.family; + ctx.font = `${style_ + font.size}px ${font.family}`; ctx.textBaseline = "top"; const max_width = Math.max(this.width, font.size); draw_text_wrapped(ctx, text, this.x + 1, this.y + 1, max_width, font.size * font.line_scale); @@ -145,12 +145,12 @@ function draw_text_wrapped(ctx, text, x, y, maxWidth, lineHeight) { words[i] = test; } - test = line + words[i] + ' '; + test = `${line + words[i]} `; metrics = ctx.measureText(test); if (metrics.width > maxWidth && i > 0) { ctx.fillText(line, x, y); - line = words[i] + ' '; + line = `${words[i]} `; y += lineHeight; } else { line = test; diff --git a/src/app.js b/src/app.js index 842a97f..dce2278 100644 --- a/src/app.js +++ b/src/app.js @@ -447,7 +447,7 @@ storage.get({ if(window.document_file_path_to_open){ open_from_file_path(document_file_path_to_open, err => { if(err){ - return show_error_message("Failed to open file " + document_file_path_to_open, err); + return show_error_message(`Failed to open file ${document_file_path_to_open}`, err); } }); } @@ -582,7 +582,7 @@ function canvas_pointer_move(e){ } $canvas.on("pointermove", e => { pointer = e2c(e); - $status_position.text(pointer.x + "," + pointer.y); + $status_position.text(`${pointer.x},${pointer.y}`); }); $canvas.on("pointerenter", e => { pointer_over_canvas = true; diff --git a/src/electron-injected.js b/src/electron-injected.js index e748fd9..ed4df30 100644 --- a/src/electron-injected.js +++ b/src/electron-injected.js @@ -63,14 +63,14 @@ window.save_to_file_path = (filePath, formatName, savedCallback) => { // "24-bit Bitmap": "image/bitmap", }[formatName]; if(!mimeType){ - return show_error_message("Can't save as " + formatName + ". Format is not supported."); + return show_error_message(`Can't save as ${formatName}. Format is not supported.`); } // if(mimeType === "image/gif"){ // new GIF(); // } canvas.toBlob(blob => { if(blob.type !== mimeType){ - return show_error_message("Failed to save as " + formatName + " (your browser doesn't support exporting a canvas as \"" + mimeType + "\")"); + return show_error_message(`Failed to save as ${formatName} (your browser doesn't support exporting a canvas as "${mimeType}")`); } sanity_check_blob(blob, () => { blob_to_buffer(blob, (err, buffer) => { @@ -127,7 +127,7 @@ window.systemSaveCanvasAs = (canvas, suggestedFileName, savedCallback) => { } const formatNameMatched = ((filters.find(filter => filter.extensions.includes(extension))) || {}).name; if(!formatNameMatched){ - return show_error_message("Can't save as *." +extension + " - try adding .png to the file name"); + return show_error_message(`Can't save as *.${extension} - try adding .png to the file name`); } save_to_file_path(filePath, formatNameMatched, savedCallback); diff --git a/src/functions.js b/src/functions.js index 8746d18..b0d3fcc 100644 --- a/src/functions.js +++ b/src/functions.js @@ -237,7 +237,7 @@ function reset_canvas_and_history(){ } function update_title(){ - document.title = file_name + " - Paint"; + document.title = `${file_name} - Paint`; } function create_and_trigger_input(attrs, callback){ @@ -305,7 +305,7 @@ function load_image_from_URI(uri, callback){ img.crossOrigin = "Anonymous"; img.onload = function(){ if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth === 0) { - return callback && callback(new Error("Image failed to load; naturalWidth == " + this.naturalWidth)); + return callback && callback(new Error(`Image failed to load; naturalWidth == ${this.naturalWidth}`)); } callback(null, img); }; @@ -347,9 +347,9 @@ function get_image_file_from_FileList_or_show_error(files, user_input_method_ver } if(files.length > 1){ - show_error_message("None of the files " + user_input_method_verb_past_tense + " appear to be images."); + show_error_message(`None of the files ${user_input_method_verb_past_tense} appear to be images.`); }else{ - show_error_message("File " + user_input_method_verb_past_tense + " does not appear to be an image."); + show_error_message(`File ${user_input_method_verb_past_tense} does not appear to be an image.`); } } function open_from_FileList(files, user_input_method_verb_past_tense){ @@ -401,7 +401,7 @@ function file_load_from_url(){ // (but still load from the hash when necessary) // make sure it doesn't overwrite the old session before switching $w.close(); - location.hash = "load:" + encodeURIComponent(uris[0]); + location.hash = `load:${encodeURIComponent(uris[0])}`; } else { show_error_message("Invalid URL. It must include a protocol (https:// or http://)"); } @@ -417,7 +417,7 @@ function file_save(){ deselect(); if(file_name.match(/\.svg$/)){ //TODO: only affect suggested name in save dialog, don't change file_name - file_name = file_name.replace(/\.svg$/, "") + ".png"; + file_name = `${file_name.replace(/\.svg$/, "")}.png`; return file_save_as(); } if(document_file_path){ @@ -434,7 +434,7 @@ function file_save(){ function file_save_as(){ deselect(); - save_canvas_as(canvas, file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "") + ".png", (saved_file_path, saved_file_name) => { + save_canvas_as(canvas, `${file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "")}.png`, (saved_file_path, saved_file_name) => { saved = true; document_file_path = saved_file_path; file_name = saved_file_name; @@ -449,7 +449,7 @@ function are_you_sure(action, canceled){ }else{ const $w = new $FormWindow().addClass("dialogue-window"); $w.title("Paint"); - $w.$main.text("Save changes to "+file_name+"?"); + $w.$main.text(`Save changes to ${file_name}?`); $w.$Button("Save", () => { $w.close(); file_save(); @@ -762,7 +762,7 @@ function render_history_as_gif(){ gif.on("progress", p => { $progress.val(p); - $progress_percent.text(~~(p*100)+"%"); + $progress_percent.text(`${~~(p*100)}%`); }); gif.on("finished", blob => { @@ -784,7 +784,7 @@ function render_history_as_gif(){ $win.$Button("Save", () => { $win.close(); sanity_check_blob(blob, () => { - saveAs(blob, file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "") + " history.gif"); + saveAs(blob, `${file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "")} history.gif`); }); }); $cancel.appendTo($win.$buttons); @@ -869,7 +869,7 @@ function undoable(callback, action){ if(redos.length > 5){ const $w = new $FormWindow().addClass("dialogue-window"); $w.title("Paint"); - $w.$main.html("Discard "+redos.length+" possible redo-able actions?
(Ctrl+Y or Ctrl+Shift+Z to redo)
"); + $w.$main.html(`Discard ${redos.length} possible redo-able actions?
(Ctrl+Y or Ctrl+Shift+Z to redo)
`); $w.$Button(action ? "Discard and Apply" : "Discard", () => { $w.close(); redos.length = 0; @@ -995,7 +995,7 @@ async function edit_copy(execCommandFallback){ if (execCommandFallback) { return try_exec_command("copy"); } else { - throw new Error("The Async Clipboard API is not supported by this browser. " + browserRecommendationForClipboardAccess); + throw new Error(`The Async Clipboard API is not supported by this browser. ${browserRecommendationForClipboardAccess}`); } } navigator.clipboard.writeText(text); @@ -1004,7 +1004,7 @@ async function edit_copy(execCommandFallback){ if (execCommandFallback) { return try_exec_command("copy"); } else { - throw new Error("The Async Clipboard API is not supported by this browser. " + browserRecommendationForClipboardAccess); + throw new Error(`The Async Clipboard API is not supported by this browser. ${browserRecommendationForClipboardAccess}`); } } selection.canvas.toBlob(blob => { @@ -1028,7 +1028,7 @@ function edit_cut(execCommandFallback){ if (execCommandFallback) { return try_exec_command("cut"); } else { - throw new Error("The Async Clipboard API is not supported by this browser. " + browserRecommendationForClipboardAccess); + throw new Error(`The Async Clipboard API is not supported by this browser. ${browserRecommendationForClipboardAccess}`); } } edit_copy(); @@ -1043,7 +1043,7 @@ async function edit_paste(execCommandFallback){ if (execCommandFallback) { return try_exec_command("paste"); } else { - throw new Error("The Async Clipboard API is not supported by this browser. " + browserRecommendationForClipboardAccess); + throw new Error(`The Async Clipboard API is not supported by this browser. ${browserRecommendationForClipboardAccess}`); } } const clipboardText = await navigator.clipboard.readText(); @@ -1054,7 +1054,7 @@ async function edit_paste(execCommandFallback){ if (execCommandFallback) { return try_exec_command("paste"); } else { - throw new Error("The Async Clipboard API is not supported by this browser. " + browserRecommendationForClipboardAccess); + throw new Error(`The Async Clipboard API is not supported by this browser. ${browserRecommendationForClipboardAccess}`); } } try { @@ -1277,7 +1277,7 @@ function image_attributes(){ const $table = $(E("table")).appendTo($main); for(const k in table){ const $tr = $(E("tr")).appendTo($table); - const $key = $(E("td")).appendTo($tr).text(k + ":"); + const $key = $(E("td")).appendTo($tr).text(`${k}:`); const $value = $(E("td")).appendTo($tr).text(table[k]); } @@ -1310,7 +1310,7 @@ function image_attributes(){ $units.append(''); $units.append(''); $units.append(''); - $units.find("[value=" + current_unit + "]").attr({checked: true}); + $units.find(`[value=${current_unit}]`).attr({checked: true}); $units.on("change", () => { const new_unit = $units.find(":checked").val(); $width.val(width_in_px / unit_sizes_in_px[new_unit]); @@ -1321,12 +1321,12 @@ function image_attributes(){ const $colors = $(E("fieldset")).appendTo($main).append('Colors'); $colors.append(''); $colors.append(''); - $colors.find("[value=" + (monochrome ? "monochrome" : "polychrome") + "]").attr({checked: true}); + $colors.find(`[value=${monochrome ? "monochrome" : "polychrome"}]`).attr({checked: true}); const $transparency = $(E("fieldset")).appendTo($main).append('Transparency'); $transparency.append(''); $transparency.append(''); - $transparency.find("[value=" + (transparency ? "transparent" : "opaque") + "]").attr({checked: true}); + $transparency.find(`[value=${transparency ? "transparent" : "opaque"}]`).attr({checked: true}); // Buttons on the right @@ -1470,7 +1470,7 @@ function image_stretch_and_skew(){ const $RowInput = ($table, img_src, label_text, default_value, label_unit) => { const $tr = $(E("tr")).appendTo($table); const $img = $(E("img")).attr({ - src: "images/transforms/" + img_src + ".png" + src: `images/transforms/${img_src}.png` }).css({ marginRight: "20px" }); @@ -1519,7 +1519,7 @@ function save_canvas_as(canvas, fileName, savedCallbackUnreliable){ // TODO: file name + type dialog canvas.toBlob(blob => { sanity_check_blob(blob, () => { - const file_saver = saveAs(blob, file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "") + ".png"); + const file_saver = saveAs(blob, `${file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "")}.png`); file_saver.onwriteend = () => { // this won't fire in chrome savedCallbackUnreliable(); @@ -1554,7 +1554,7 @@ function set_as_wallpaper_centered(c){ c.toBlob(blob => { sanity_check_blob(blob, () => { - saveAs(blob, file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "") + " wallpaper.png"); + saveAs(blob, `${file_name.replace(/\.(bmp|dib|a?png|gif|jpe?g|jpe|jfif|tiff?|webp|raw)$/, "")} wallpaper.png`); }); }); } diff --git a/src/help.js b/src/help.js index 63a3a8f..e08536e 100644 --- a/src/help.js +++ b/src/help.js @@ -70,7 +70,7 @@ function show_help(){ const object = parse_object_params($(li).children("object")); const $item_li = $(E("li")).addClass("page"); $item_li.append($Item(object.Name).on("click", e => { - $iframe.attr({src: "help/" + object.Local}); + $iframe.attr({src: `help/${object.Local}`}); })); $folder_items_ul.append($item_li); }); diff --git a/src/helpers.js b/src/helpers.js index f8c74c0..05284ac 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -24,9 +24,7 @@ const TAU = //////|////// const $G = $(window); function Cursor(cursor_def){ - return "url(images/cursors/" + cursor_def[0] + ".png) " + - cursor_def[1].join(" ") + - ", " + cursor_def[2]; + return `url(images/cursors/${cursor_def[0]}.png) ${cursor_def[1].join(" ")}, ${cursor_def[2]}`; } function E(t){ diff --git a/src/image-manipulation.js b/src/image-manipulation.js index 5adfa88..a46f507 100644 --- a/src/image-manipulation.js +++ b/src/image-manipulation.js @@ -633,12 +633,12 @@ function draw_grid(ctx, scale) { } function begincallback(type) { if (type !== libtess.primitiveType.GL_TRIANGLES) { - console.log('expected TRIANGLES but got type: ' + type); + console.log(`expected TRIANGLES but got type: ${type}`); } } function errorcallback(errno) { console.log('error callback'); - console.log('error number: ' + errno); + console.log(`error number: ${errno}`); } // callback for when segments intersect and must be split function combinecallback(coords, data, weight) { @@ -726,8 +726,7 @@ function draw_grid(ctx, scale) { if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { console.log( - 'Vertex shader failed to compile. Log: ' + - gl.getShaderInfoLog(vertexShader) + `Vertex shader failed to compile. Log: ${gl.getShaderInfoLog(vertexShader)}` ); } @@ -744,8 +743,7 @@ function draw_grid(ctx, scale) { if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { console.log( - 'Fragment shader failed to compile. Log: ' + - gl.getShaderInfoLog(fragmentShader) + `Fragment shader failed to compile. Log: ${gl.getShaderInfoLog(fragmentShader)}` ); } diff --git a/src/imgur.js b/src/imgur.js index b3e7307..cb360c3 100644 --- a/src/imgur.js +++ b/src/imgur.js @@ -89,7 +89,7 @@ function show_imgur_uploader(blob){ req.upload.addEventListener('progress', event => { if(event.lengthComputable){ const progress_value = event.loaded / event.total; - const percentage_text = Math.floor(progress_value * 100) + "%"; + const percentage_text = `${Math.floor(progress_value * 100)}%`; $progress.val(progress_value); $progress_percent.text(percentage_text); } @@ -142,7 +142,7 @@ function show_imgur_uploader(blob){ } }); - req.open("DELETE", "https://api.imgur.com/3/image/" + response.data.deletehash, true); + req.open("DELETE", `https://api.imgur.com/3/image/${response.data.deletehash}`, true); req.setRequestHeader("Authorization", "Client-ID 203da2f300125a1"); req.setRequestHeader("Accept", "application/json"); diff --git a/src/manage-storage.js b/src/manage-storage.js index 18db9a7..d961b8f 100644 --- a/src/manage-storage.js +++ b/src/manage-storage.js @@ -53,7 +53,7 @@ function manage_storage(){ const $img = $(E("img")).attr({src: imgSrc}); const $remove = $(E("button")).text("Remove").addClass("remove-button"); - const href = "#" + k.replace("image#", "local:"); + const href = `#${k.replace("image#", "local:")}`; const $open_link = $(E("a")).attr({href: href, target: "_blank"}).text("Open"); const $thumbnail_open_link = $(E("a")).attr({href: href, target: "_blank"}).addClass("thumbnail-container"); $thumbnail_open_link.append($img); diff --git a/src/menus.js b/src/menus.js index 5fbc0fc..032163e 100644 --- a/src/menus.js +++ b/src/menus.js @@ -446,7 +446,7 @@ const menus = { }else if(name.match(/[./[\]#$]/)){ show_error_message("The session name cannot contain any of ./[]#$"); }else{ - location.hash = "session:" + name; + location.hash = `session:${name}`; } } }, diff --git a/src/sessions.js b/src/sessions.js index a65e1e7..428bdaa 100644 --- a/src/sessions.js +++ b/src/sessions.js @@ -97,8 +97,8 @@ class LocalSession { constructor(session_id) { - const lsid = "image#" + session_id; - log("local storage id: " + lsid); + const lsid = `image#${session_id}`; + log(`local storage id: ${lsid}`); // save image to storage const save_image_to_storage = () => { const save_paused = handle_data_loss(); @@ -178,11 +178,11 @@ }; // The main cursor color - user.color = "hsla(" + user.hue + ", " + user.saturation + "%, " + user.lightness + "%, 1)"; + user.color = `hsla(${user.hue}, ${user.saturation}%, ${user.lightness}%, 1)`; // Unused - user.color_transparent = "hsla(" + user.hue + ", " + user.saturation + "%, " + user.lightness + "%, 0.5)"; + user.color_transparent = `hsla(${user.hue}, ${user.saturation}%, ${user.lightness}%, 0.5)`; // (@TODO) The color used in the toolbar indicating to other users it is selected by this user - user.color_desaturated = "hsla(" + user.hue + ", " + ~~(user.saturation*0.4) + "%, " + user.lightness + "%, 0.8)"; + user.color_desaturated = `hsla(${user.hue}, ${~~(user.saturation*0.4)}%, ${user.lightness}%, 0.8)`; // The image used for other people's cursors @@ -193,10 +193,10 @@ class FireSession { constructor(session_id) { this.id = session_id; - file_name = "[Loading " + this.id + "]"; + file_name = `[Loading ${this.id}]`; update_title(); const on_firebase_loaded = () => { - file_name = "[" + this.id + "]"; + file_name = `[${this.id}]`; update_title(); this.start(); }; @@ -217,7 +217,7 @@ }) .fail(() => { show_error_message("Failed to load Firebase; the document will not load, and changes will not be saved."); - file_name = "[Failed to load " + this.id + "]"; + file_name = `[Failed to load ${this.id}]`; update_title(); }); } @@ -389,7 +389,7 @@ } }, error => { show_error_message("Failed to retrieve data from Firebase. The document will not load, and changes will not be saved.", error); - file_name = "[Failed to load " + this.id + "]"; + file_name = `[Failed to load ${this.id}]`; update_title(); }); // Update the cursor status @@ -417,7 +417,7 @@ $G.off(".session-hook"); // Remove collected Firebase event listeners this._fb_listeners.forEach(({ fb, event_type, callback, error_callback }) => { - log("remove listener for " + fb.path.toString() + " .on " + event_type); + log(`remove listener for ${fb.path.toString()} .on ${event_type}`); fb.off(event_type, callback); }); this._fb_listeners.length = 0; @@ -470,10 +470,10 @@ // @TODO: Ask if you want to save before starting a new session end_current_session(); if(local){ - log("starting a new local session, id: "+session_id); + log(`starting a new local session, id: ${session_id}`); current_session = new LocalSession(session_id); }else{ - log("starting a new Firebase session, id: "+session_id); + log(`starting a new Firebase session, id: ${session_id}`); current_session = new FireSession(session_id); } } @@ -505,7 +505,7 @@ log("switching to new session from #load: URL because of user interaction"); end_current_session(); const new_session_id = generate_session_id(); - location.hash = "local:" + new_session_id; + location.hash = `local:${new_session_id}`; } }); }, 100); @@ -515,7 +515,7 @@ log("no session id in hash"); end_current_session(); const new_session_id = generate_session_id(); - history.replaceState(null, document.title, "#local:" + new_session_id); + history.replaceState(null, document.title, `#local:${new_session_id}`); log("after replaceState", location.hash); update_session_from_location_hash(); } diff --git a/src/storage.js b/src/storage.js index eced6db..a2b8e0f 100644 --- a/src/storage.js +++ b/src/storage.js @@ -4,7 +4,7 @@ ((() => { let isArray, localStore; - isArray = Array.isArray || (a => ("" + a) !== a && {}.toString.call(a) === "[object Array]"); + isArray = Array.isArray || (a => (`${a}`) !== a && {}.toString.call(a) === "[object Array]"); localStore = { get(key, callback) { diff --git a/src/theme.js b/src/theme.js index 6b08c58..5880c99 100644 --- a/src/theme.js +++ b/src/theme.js @@ -1,7 +1,7 @@ (() => { const default_theme = "classic.css"; const theme_storage_key = "jspaint theme"; - const href_for = theme => "styles/themes/" + theme; + const href_for = theme => `styles/themes/${theme}`; let current_theme; try { diff --git a/src/tools.js b/src/tools.js index 7d7465a..e0ae413 100644 --- a/src/tools.js +++ b/src/tools.js @@ -312,7 +312,7 @@ tools = [{ const g = id.data[1]; const b = id.data[2]; const a = id.data[3]; - this.current_color = "rgba("+r+","+g+","+b+","+a/255+")"; + this.current_color = `rgba(${r},${g},${b},${a/255})`; }else{ this.current_color = "white"; }