From 116e9939aacedd5c986501d6449ae0c9be5ce1b0 Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Fri, 11 Jan 2013 10:48:40 -0800 Subject: [PATCH] Get rid of awkward and underused utils.to_js. Buttonlite didn't really do anything with this function since it disabled callback *and* escape. The response wrapper fixes a bug where the callback is a unicode object and since the content object is UTF-8 encoded things go south ("'ascii' codec can't decode byte ..."). This also removes a few scattered imports of the function that were unused. --- r2/r2/controllers/buttons.py | 4 ++-- r2/r2/controllers/reddit_base.py | 7 +++++-- r2/r2/lib/base.py | 1 - r2/r2/lib/pages/pages.py | 2 +- r2/r2/lib/utils/utils.py | 9 --------- 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/r2/r2/controllers/buttons.py b/r2/r2/controllers/buttons.py index ab82d6317..ba3d72ef5 100644 --- a/r2/r2/controllers/buttons.py +++ b/r2/r2/controllers/buttons.py @@ -25,7 +25,7 @@ from r2.lib.pages import (ButtonLite, ButtonDemoPanel, WidgetDemoPanel, Bookmarklets, BoringPage) from r2.lib.pages.things import wrap_links from r2.models import * -from r2.lib.utils import tup, to_js +from r2.lib.utils import tup from r2.lib.validator import * from pylons import c, request, response from pylons.i18n import _ @@ -99,7 +99,7 @@ class ButtonsController(RedditController): bjs = self.get_wrapped_link(url, wrapper = builder_wrapper) response.content_type = "text/javascript" - return to_js(bjs.render(), callback='', escape=False) + return bjs.render() def GET_button_demo_page(self): # no buttons for domain listings -> redirect to top level diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py index e43ba2a3c..f603996da 100644 --- a/r2/r2/controllers/reddit_base.py +++ b/r2/r2/controllers/reddit_base.py @@ -375,9 +375,12 @@ def set_content_type(): if e.has_key('extension'): c.extension = ext = e['extension'] if ext in ('embed', 'wired', 'widget'): + wrapper = request.params.get("callback", "document.write") + wrapper = filters._force_utf8(wrapper) + def to_js(content): - return utils.to_js(content, callback=request.params.get( - "callback", "document.write")) + return wrapper + "(" + utils.string2js(content) + ");" + c.response_wrapper = to_js if ext in ("rss", "api", "json") and request.method.upper() == "GET": user = valid_feed(request.GET.get("user"), diff --git a/r2/r2/lib/base.py b/r2/r2/lib/base.py index 0f4b951c1..4e59d6205 100644 --- a/r2/r2/lib/base.py +++ b/r2/r2/lib/base.py @@ -28,7 +28,6 @@ from pylons import c, g, request, session, config, response from pylons.controllers import WSGIController, Controller from pylons.i18n import N_, _, ungettext, get_lang from paste import httpexceptions -from r2.lib.utils import to_js from r2.lib.filters import spaceCompress, _force_unicode from r2.lib.template_helpers import get_domain from utils import storify, string2js, read_http_date diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index 3fc5957ee..d23e3e16e 100755 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -48,7 +48,7 @@ from r2.lib.menus import NavButton, NamedButton, NavMenu, PageNameNav, JsButton from r2.lib.menus import SubredditButton, SubredditMenu, ModeratorMailButton from r2.lib.menus import OffsiteButton, menu, JsNavMenu from r2.lib.strings import plurals, rand_strings, strings, Score -from r2.lib.utils import title_to_url, query_string, UrlParser, to_js, vote_hash +from r2.lib.utils import title_to_url, query_string, UrlParser, vote_hash from r2.lib.utils import link_duplicates, make_offset_date, median, to36 from r2.lib.utils import trunc_time, timesince, timeuntil, weighted_lottery from r2.lib.template_helpers import add_sr, get_domain, format_number diff --git a/r2/r2/lib/utils/utils.py b/r2/r2/lib/utils/utils.py index 2d9e36f85..39938f381 100644 --- a/r2/r2/lib/utils/utils.py +++ b/r2/r2/lib/utils/utils.py @@ -648,15 +648,6 @@ class UrlParser(object): u.path, u.params, u.query, fragment)) -def to_js(content, callback="document.write", escape=True): - before = after = '' - if callback: - before = callback + "(" - after = ");" - if escape: - content = string2js(content) - return before + content + after - def pload(fname, default = None): "Load a pickled object from a file" try: