From 06019028f62173b20d944f34583678c7d564bdcf Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Fri, 15 Mar 2013 13:51:29 -0700 Subject: [PATCH] `if soda in can`? Really? How about `if can.contains soda` --- 4chan_x.user.js | 110 ++++++++++++++++++++++---------------------- src/features.coffee | 50 ++++++++++---------- src/qr.coffee | 6 +-- 3 files changed, 82 insertions(+), 84 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index d92799455..d72de0c82 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -45,7 +45,6 @@ (function() { var $, $$, Anonymize, ArchiveLink, AutoGIF, Board, Build, Clone, Conf, Config, CustomCSS, DeleteLink, DownloadLink, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, Fourchan, Get, Header, ImageExpand, ImageHover, Keybinds, Main, Menu, Misc, Nav, Notification, Polyfill, Post, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, ReplyHiding, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, __slice = [].slice, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; @@ -1620,9 +1619,9 @@ name = _ref[_i]; input = $("[name=" + name + "]", section); input.value = $.get(name, Conf[name]); - event = name === 'favicon' || name === 'usercss' ? 'change' : 'input'; + event = ['favicon', 'usercss'].contains(name) ? 'change' : 'input'; $.on(input, event, $.cb.value); - if (name !== 'usercss') { + if (!['usercss'].contains(name)) { $.on(input, event, Settings[name]); Settings[name].call(input); } @@ -1785,7 +1784,7 @@ Filter = { filters: {}, init: function() { - var boards, filter, hl, key, op, regexp, stub, top, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4, _ref5; + var boards, filter, hl, key, op, regexp, stub, top, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4; if (g.VIEW === 'catalog' || !Conf['Filter']) { return; } @@ -1802,10 +1801,10 @@ } filter = filter.replace(regexp[0], ''); boards = ((_ref1 = filter.match(/boards:([^;]+)/)) != null ? _ref1[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && !(_ref2 = g.BOARD.ID, __indexOf.call(boards.split(','), _ref2) >= 0)) { + if (boards !== 'global' && !(boards.split(',')).contains(g.BOARD.ID)) { continue; } - if (key === 'uniqueID' || key === 'MD5') { + if (['uniqueID', 'MD5'].contains(key)) { regexp = regexp[1]; } else { try { @@ -1815,10 +1814,10 @@ continue; } } - op = ((_ref3 = filter.match(/[^t]op:(yes|no|only)/)) != null ? _ref3[1] : void 0) || 'yes'; + op = ((_ref2 = filter.match(/[^t]op:(yes|no|only)/)) != null ? _ref2[1] : void 0) || 'yes'; stub = (function() { - var _ref4; - switch ((_ref4 = filter.match(/stub:(yes|no)/)) != null ? _ref4[1] : void 0) { + var _ref3; + switch ((_ref3 = filter.match(/stub:(yes|no)/)) != null ? _ref3[1] : void 0) { case 'yes': return true; case 'no': @@ -1828,8 +1827,8 @@ } })(); if (hl = /highlight/.test(filter)) { - hl = ((_ref4 = filter.match(/highlight:(\w+)/)) != null ? _ref4[1] : void 0) || 'filter-highlight'; - top = ((_ref5 = filter.match(/top:(yes|no)/)) != null ? _ref5[1] : void 0) || 'yes'; + hl = ((_ref3 = filter.match(/highlight:(\w+)/)) != null ? _ref3[1] : void 0) || 'filter-highlight'; + top = ((_ref4 = filter.match(/top:(yes|no)/)) != null ? _ref4[1] : void 0) || 'yes'; top = top === 'yes'; } this.filters[key].push(this.createFilter(regexp, op, stub, hl, top)); @@ -2026,7 +2025,7 @@ var re, save, section, select, ta, tl, type, value; type = this.dataset.type; value = Filter[type](Filter.menu.post); - re = type === 'uniqueID' || type === 'MD5' ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { + re = ['uniqueID', 'MD5'].contains(type) ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { if (c === '\n') { return '\\n'; } else if (c === '\\') { @@ -2035,7 +2034,7 @@ return "\\" + c; } }); - re = type === 'uniqueID' || type === 'MD5' ? "/" + re + "/" : "/^" + re + "$/"; + re = ['uniqueID', 'MD5'].contains(type) ? "/" + re + "/" : "/^" + re + "$/"; if (!Filter.menu.post.isReply) { re += ';op:yes'; } @@ -2565,7 +2564,7 @@ _ref = g.posts; for (ID in _ref) { post = _ref[ID]; - if (__indexOf.call(post.quotes, fullID) >= 0) { + if (post.quotes.contains(fullID)) { recursive.apply(null, [post].concat(__slice.call(args))); } } @@ -2720,8 +2719,8 @@ el: div, order: 40, open: function(post) { - var node, seconds, thread, _ref; - if (post.isDead || !((thread = QR.yourPosts.threads[post.thread]) && (_ref = post.ID, __indexOf.call(thread, _ref) >= 0))) { + var node, seconds, thread; + if (post.isDead || !((thread = QR.yourPosts.threads[post.thread]) && thread.contains(post.ID))) { return false; } DeleteLink.post = post; @@ -2936,12 +2935,12 @@ }); }, keydown: function(e) { - var form, key, notification, notifications, target, thread, threadRoot, _i, _len, _ref; + var form, key, notification, notifications, target, thread, threadRoot, _i, _len; if (!(key = Keybinds.keyCode(e))) { return; } target = e.target; - if ((_ref = target.nodeName) === 'INPUT' || _ref === 'TEXTAREA') { + if (['INPUT', 'TEXTAREA'].contains(target.nodeName)) { if (!/(Esc|Alt|Ctrl|Meta)/.test(key)) { return; } @@ -3596,36 +3595,36 @@ }; }, allQuotelinksLinkingTo: function(post) { - var ID, quote, quotedPost, quotelinks, quoterPost, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3, _ref4; + var ID, quote, quotedPost, quotelinks, quoterPost, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3; quotelinks = []; _ref = g.posts; for (ID in _ref) { quoterPost = _ref[ID]; - if (_ref1 = post.fullID, __indexOf.call(quoterPost.quotes, _ref1) >= 0) { - _ref2 = [quoterPost].concat(quoterPost.clones); - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - quoterPost = _ref2[_i]; + if (quoterPost.quotes.contains(post.fullID)) { + _ref1 = [quoterPost].concat(quoterPost.clones); + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + quoterPost = _ref1[_i]; quotelinks.push.apply(quotelinks, quoterPost.nodes.quotelinks); } } } if (Conf['Quote Backlinks']) { - _ref3 = post.quotes; - for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { - quote = _ref3[_j]; + _ref2 = post.quotes; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + quote = _ref2[_j]; if (!(quotedPost = g.posts[quote])) { continue; } - _ref4 = [quotedPost].concat(quotedPost.clones); - for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) { - quotedPost = _ref4[_k]; + _ref3 = [quotedPost].concat(quotedPost.clones); + for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { + quotedPost = _ref3[_k]; quotelinks.push.apply(quotelinks, __slice.call(quotedPost.nodes.backlinks)); } } } return quotelinks.filter(function(quotelink) { - var board, postID, _ref5; - _ref5 = Get.postDataFromLink(quotelink), board = _ref5.board, postID = _ref5.postID; + var board, postID, _ref4; + _ref4 = Get.postDataFromLink(quotelink), board = _ref4.board, postID = _ref4.postID; return board === post.board.ID && postID === post.ID; }); }, @@ -3666,7 +3665,7 @@ return; } status = req.status; - if (status !== 200 && status !== 304) { + if (![200, 304].contains(status)) { if (url = Redirect.post(board, postID)) { $.cache(url, function() { return Get.archivedPost(this, board, postID, root, context); @@ -3898,7 +3897,7 @@ a.setAttribute('data-postid', ID); } } - if (__indexOf.call(this.quotes, quoteID) < 0) { + if (!this.quotes.contains(quoteID)) { this.quotes.push(quoteID); } if (!a) { @@ -4193,7 +4192,7 @@ for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { quotelink = quotelinks[_i]; _ref = Get.postDataFromLink(quotelink), threadID = _ref.threadID, postID = _ref.postID; - if ((thread = QR.yourPosts.threads[threadID]) && __indexOf.call(thread, postID) >= 0) { + if ((thread = QR.yourPosts.threads[threadID]) && thread.contains(postID)) { $.add(quotelink, $.tn(QuoteYou.text)); } } @@ -4212,7 +4211,7 @@ }); }, node: function() { - var board, op, postID, quotelink, quotelinks, quotes, _i, _j, _len, _len1, _ref, _ref1; + var board, op, postID, quotelink, quotelinks, quotes, _i, _j, _len, _len1, _ref; if (this.isClone && this.thread === this.context.thread) { return; } @@ -4220,19 +4219,19 @@ return; } quotelinks = this.nodes.quotelinks; - if (this.isClone && (_ref = this.thread.fullID, __indexOf.call(quotes, _ref) >= 0)) { + if (this.isClone && quotes.contains(this.thread.fullID)) { for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { quotelink = quotelinks[_i]; quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); } } op = (this.isClone ? this.context : this).thread.fullID; - if (__indexOf.call(quotes, op) < 0) { + if (!quotes.contains(op)) { return; } for (_j = 0, _len1 = quotelinks.length; _j < _len1; _j++) { quotelink = quotelinks[_j]; - _ref1 = Get.postDataFromLink(quotelink), board = _ref1.board, postID = _ref1.postID; + _ref = Get.postDataFromLink(quotelink), board = _ref.board, postID = _ref.postID; if (("" + board + "." + postID) === op) { $.add(quotelink, $.tn(QuoteOP.text)); } @@ -4867,7 +4866,7 @@ innerHTML: " " + type }); input = label.firstElementChild; - if (type === 'Fit width' || type === 'Fit height') { + if (['Fit width', 'Fit height'].contains(type)) { $.on(input, 'change', ImageExpand.cb.setFitness); } if (config) { @@ -4909,8 +4908,7 @@ AutoGIF = { init: function() { - var _ref; - if (g.VIEW === 'catalog' || !Conf['Auto-GIF'] || ((_ref = g.BOARD.ID) === 'gif' || _ref === 'wsg')) { + if (g.VIEW === 'catalog' || !Conf['Auto-GIF'] || ['gif', 'wsg'].contains(g.BOARD.ID)) { return; } return Post.prototype.callbacks.push({ @@ -5071,7 +5069,7 @@ parse: function(req, a, post) { var clone, comment, href, postObj, posts, quote, spoilerRange, status, _i, _j, _len, _len1, _ref; status = req.status; - if (status !== 200 && status !== 304) { + if (![200, 304].contains(status)) { a.textContent = "Error " + req.statusText + " (" + status + ")"; return; } @@ -5220,7 +5218,7 @@ return; } status = req.status; - if (status !== 200 && status !== 304) { + if ([200, 304].contains(status)) { a.textContent = "Error " + req.statusText + " (" + status + ")"; $.off(a, 'click', ExpandThread.cb.toggle); return; @@ -5316,7 +5314,7 @@ } }, addPosts: function(newPosts) { - var ID, post, youInThisThread, yourPosts, _i, _len, _ref; + var ID, post, youInThisThread, yourPosts, _i, _len; if (Conf['Quick Reply']) { yourPosts = QR.yourPosts; youInThisThread = yourPosts.threads[Unread.thread]; @@ -5324,7 +5322,7 @@ for (_i = 0, _len = newPosts.length; _i < _len; _i++) { post = newPosts[_i]; ID = post.ID; - if (ID <= Unread.lastReadPost || post.isHidden || youInThisThread && __indexOf.call(youInThisThread, ID) >= 0) { + if (ID <= Unread.lastReadPost || post.isHidden || youInThisThread && youInThisThread.contains(ID)) { continue; } Unread.posts.push(post); @@ -5333,7 +5331,7 @@ } } if (Conf['Unread Line']) { - Unread.setLine((_ref = Unread.posts[0], __indexOf.call(newPosts, _ref) >= 0)); + Unread.setLine(newPosts.contains(Unread.posts[0])); } Unread.read(); return Unread.update(); @@ -5350,7 +5348,7 @@ _ref2 = yourPosts.threads; for (thread in _ref2) { postIDs = _ref2[thread]; - if (__indexOf.call(postIDs, +quoteID) >= 0) { + if (postIDs.contains(+quoteID)) { Unread.postsQuotingYou.push(post); return; } @@ -5801,12 +5799,12 @@ for (ID in _ref) { post = _ref[ID]; ID = +ID; - if (post.isDead && __indexOf.call(index, ID) >= 0) { + if (post.isDead && index.contains(ID)) { post.resurrect(); - } else if (__indexOf.call(index, ID) < 0) { + } else if (!index.contains(ID)) { post.kill(); deletedPosts.push(post); - } else if (post.file && !post.file.isDead && __indexOf.call(files, ID) < 0) { + } else if (post.file && !post.file.isDead && files.contains(ID)) { post.kill(true); deletedFiles.push(post); } @@ -6349,7 +6347,7 @@ return QR.nodes.fileInput.click(); }, fileInput: function(files) { - var file, length, max, post, _i, _len, _ref, _ref1; + var file, length, max, post, _i, _len; if (this instanceof Element) { files = __slice.call(this.files); QR.nodes.fileInput.value = null; @@ -6366,7 +6364,7 @@ QR.selected.pasteText(file); } else if (file.size > max) { QR.error("File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); - } else if (_ref = file.type, __indexOf.call(QR.mimeTypes, _ref) < 0) { + } else if (!QR.mimeTypes.contains(file.type)) { QR.error('Unsupported file type.'); } else { QR.selected.setFile(file); @@ -6382,7 +6380,7 @@ post.pasteText(file); } else if (file.size > max) { QR.error("" + file.name + ": File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); - } else if (_ref1 = file.type, __indexOf.call(QR.mimeTypes, _ref1) < 0) { + } else if (!QR.mimeTypes.contains(file.type)) { QR.error("" + file.name + ": Unsupported file type."); } else { if ((post = QR.posts[QR.posts.length - 1]).file) { @@ -6957,7 +6955,7 @@ return $.event('QRDialogCreation', null, dialog); }, submit: function(e) { - var callbacks, challenge, err, filetag, m, opts, post, postData, response, textOnly, threadID, _ref, _ref1; + var callbacks, challenge, err, filetag, m, opts, post, postData, response, textOnly, threadID, _ref; if (e != null) { e.preventDefault(); } @@ -6978,7 +6976,7 @@ threadID = QR.nodes.thread.value; if (threadID === 'new') { threadID = null; - if (((_ref = g.BOARD.ID) === 'vg' || _ref === 'q') && !post.sub) { + if (['vg', 'q'].contains(g.BOARD.ID) && !post.sub) { err = 'New threads require a subject.'; } else if (!(post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { err = 'No file selected.'; @@ -6989,7 +6987,7 @@ err = 'No file selected.'; } if (QR.captcha.isEnabled && !err) { - _ref1 = QR.captcha.getOne(), challenge = _ref1.challenge, response = _ref1.response; + _ref = QR.captcha.getOne(), challenge = _ref.challenge, response = _ref.response; if (!response) { err = 'No valid captcha.'; } diff --git a/src/features.coffee b/src/features.coffee index acc730515..ea44915f6 100644 --- a/src/features.coffee +++ b/src/features.coffee @@ -570,12 +570,12 @@ Settings = for name in ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss'] input = $ "[name=#{name}]", section input.value = $.get name, Conf[name] - event = if name in ['favicon', 'usercss'] + event = if ['favicon', 'usercss'].contains name 'change' else 'input' $.on input, event, $.cb.value - unless name in ['usercss'] + unless ['usercss'].contains name $.on input, event, Settings[name] Settings[name].call input $.on $.id('apply-css'), 'click', Settings.usercss @@ -713,10 +713,10 @@ Filter = # and it's not specifically applicable to the current board. # Defaults to global. boards = filter.match(/boards:([^;]+)/)?[1].toLowerCase() or 'global' - if boards isnt 'global' and not (g.BOARD.ID in boards.split ',') + if boards isnt 'global' and not (boards.split ',').contains g.BOARD.ID continue - if key in ['uniqueID', 'MD5'] + if ['uniqueID', 'MD5'].contains key # MD5 filter will use strings instead of regular expressions. regexp = regexp[1] else @@ -915,7 +915,7 @@ Filter = {type} = @dataset # Convert value -> regexp, unless type is MD5 value = Filter[type] Filter.menu.post - re = if type in ['uniqueID', 'MD5'] then value else value.replace /// + re = if ['uniqueID', 'MD5'].contains type then value else value.replace /// / | \\ | \^ @@ -941,7 +941,7 @@ Filter = "\\#{c}" re = - if type in ['uniqueID', 'MD5'] + if ['uniqueID', 'MD5'].contains type "/#{re}/" else "/^#{re}$/" @@ -1341,7 +1341,7 @@ Recursive = apply: (recursive, post, args...) -> {fullID} = post for ID, post of g.posts - if fullID in post.quotes + if post.quotes.contains fullID recursive post, args... return @@ -1454,7 +1454,7 @@ DeleteLink = el: div order: 40 open: (post) -> - return false if post.isDead or !((thread = QR.yourPosts.threads[post.thread]) and post.ID in thread) + return false if post.isDead or !((thread = QR.yourPosts.threads[post.thread]) and thread.contains post.ID) DeleteLink.post = post DeleteLink.cooldown.start post node = div.firstChild @@ -1618,7 +1618,7 @@ Keybinds = keydown: (e) -> return unless key = Keybinds.keyCode e {target} = e - if target.nodeName in ['INPUT', 'TEXTAREA'] + if ['INPUT', 'TEXTAREA'].contains target.nodeName return unless /(Esc|Alt|Ctrl|Meta)/.test key threadRoot = Nav.getThread() @@ -2234,7 +2234,7 @@ Get = # if it did quote this post, # get all their backlinks. for ID, quoterPost of g.posts - if post.fullID in quoterPost.quotes + if quoterPost.quotes.contains post.fullID for quoterPost in [quoterPost].concat quoterPost.clones quotelinks.push.apply quotelinks, quoterPost.nodes.quotelinks # Second: @@ -2285,7 +2285,7 @@ Get = return {status} = req - if status not in [200, 304] + unless [200, 304].contains status # The thread can die by the time we check a quote. if url = Redirect.post board, postID $.cache url, -> @@ -2500,7 +2500,7 @@ Quotify = a.setAttribute 'data-board', board a.setAttribute 'data-postid', ID - unless quoteID in @quotes + unless @quotes.contains quoteID @quotes.push quoteID unless a @@ -2732,7 +2732,7 @@ QuoteYou = for quotelink in quotelinks {threadID, postID} = Get.postDataFromLink quotelink - if (thread = QR.yourPosts.threads[threadID]) and postID in thread + if (thread = QR.yourPosts.threads[threadID]) and thread.contains postID $.add quotelink, $.tn QuoteYou.text return @@ -2753,13 +2753,13 @@ QuoteOP = {quotelinks} = @nodes # rm (OP) from cross-thread quotes. - if @isClone and @thread.fullID in quotes + if @isClone and quotes.contains @thread.fullID for quotelink in quotelinks quotelink.textContent = quotelink.textContent.replace QuoteOP.text, '' op = (if @isClone then @context else @).thread.fullID # add (OP) to quotes quoting this context's OP. - return unless op in quotes + return unless quotes.contains op for quotelink in quotelinks {board, postID} = Get.postDataFromLink quotelink if "#{board}.#{postID}" is op @@ -3243,7 +3243,7 @@ ImageExpand = label = $.el 'label', innerHTML: " #{type}" input = label.firstElementChild - if type in ['Fit width', 'Fit height'] + if ['Fit width', 'Fit height'].contains type $.on input, 'change', ImageExpand.cb.setFitness if config label.title = config[1] @@ -3270,7 +3270,7 @@ RevealSpoilers = AutoGIF = init: -> - return if g.VIEW is 'catalog' or !Conf['Auto-GIF'] or g.BOARD.ID in ['gif', 'wsg'] + return if g.VIEW is 'catalog' or !Conf['Auto-GIF'] or ['gif', 'wsg'].contains g.BOARD.ID Post::callbacks.push name: 'Auto-GIF' @@ -3368,7 +3368,7 @@ ExpandComment = post.nodes.comment = post.nodes.shortComment parse: (req, a, post) -> {status} = req - if status not in [200, 304] + unless [200, 304].contains status a.textContent = "Error #{req.statusText} (#{status})" return @@ -3468,7 +3468,7 @@ ExpandThread = parse: (req, thread, a) -> return if a.textContent[0] is '+' {status} = req - if status not in [200, 304] + if [200, 304].contains status a.textContent = "Error #{req.statusText} (#{status})" $.off a, 'click', ExpandThread.cb.toggle return @@ -3549,13 +3549,13 @@ Unread = youInThisThread = yourPosts.threads[Unread.thread] for post in newPosts {ID} = post - if ID <= Unread.lastReadPost or post.isHidden or youInThisThread and ID in youInThisThread + if ID <= Unread.lastReadPost or post.isHidden or youInThisThread and youInThisThread.contains ID continue Unread.posts.push post Unread.addPostQuotingYou post, yourPosts if yourPosts if Conf['Unread Line'] # Force line on visible threads if there were no unread posts previously. - Unread.setLine Unread.posts[0] in newPosts + Unread.setLine newPosts.contains Unread.posts[0] Unread.read() Unread.update() @@ -3564,7 +3564,7 @@ Unread = [board, quoteID] = quote.split '.' continue unless board is Unread.thread.board.ID for thread, postIDs of yourPosts.threads - if +quoteID in postIDs + if postIDs.contains +quoteID Unread.postsQuotingYou.push post return @@ -3949,12 +3949,12 @@ ThreadUpdater = # giving us false-positive dead posts. # continue if post.isDead ID = +ID - if post.isDead and ID in index + if post.isDead and index.contains ID post.resurrect() - else unless ID in index + else unless index.contains ID post.kill() deletedPosts.push post - else if post.file and !post.file.isDead and ID not in files + else if post.file and !post.file.isDead and files.contains ID post.kill true deletedFiles.push post diff --git a/src/qr.coffee b/src/qr.coffee index 6ac5a1e48..bb25ab9fe 100644 --- a/src/qr.coffee +++ b/src/qr.coffee @@ -329,7 +329,7 @@ QR = QR.selected.pasteText file else if file.size > max QR.error "File too large (file: #{$.bytesToString file.size}, max: #{$.bytesToString max})." - else unless file.type in QR.mimeTypes + else unless QR.mimeTypes.contains file.type QR.error 'Unsupported file type.' else QR.selected.setFile file @@ -342,7 +342,7 @@ QR = post.pasteText file else if file.size > max QR.error "#{file.name}: File too large (file: #{$.bytesToString file.size}, max: #{$.bytesToString max})." - else unless file.type in QR.mimeTypes + else unless QR.mimeTypes.contains file.type QR.error "#{file.name}: Unsupported file type." else if (post = QR.posts[QR.posts.length - 1]).file @@ -823,7 +823,7 @@ QR = # prevent errors if threadID is 'new' threadID = null - if g.BOARD.ID in ['vg', 'q'] and !post.sub + if ['vg', 'q'].contains(g.BOARD.ID) and !post.sub err = 'New threads require a subject.' else unless post.file or textOnly = !!$ 'input[name=textonly]', $.id 'postForm' err = 'No file selected.'