From 56f3a4822e4537d1967a5404398e11be7960d240 Mon Sep 17 00:00:00 2001 From: spez Date: Wed, 3 Jun 2009 13:46:43 -0700 Subject: [PATCH] Replaced : with , in recentclicks cookie. Make reddit_base use the same fullname validating code as GET_widget. Don't update recentclicks cookie when clicking on subreddits. Prefix non-logged-in cookies with a _ in JS to match what we do on the server side. --- r2/r2/controllers/reddit_base.py | 6 +++--- r2/r2/controllers/validator/validator.py | 21 ++++++++++++--------- r2/r2/public/static/js/jquery.reddit.js | 2 +- r2/r2/public/static/js/reddit.js | 11 ++++++----- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py index fefc24a02..0327f14f4 100644 --- a/r2/r2/controllers/reddit_base.py +++ b/r2/r2/controllers/reddit_base.py @@ -140,7 +140,7 @@ def set_user_cookie(name, val): uname = c.user.name if c.user_is_loggedin else "" c.cookies[uname + '_' + name] = Cookie(value = val) -valid_click_cookie = re.compile(r'(:?t[0-9]+_[a-zA-Z0-9]+)+').match +valid_click_cookie = fullname_regex(Link, True).match def set_recent_clicks(): c.recent_clicks = [] if not c.user_is_loggedin: @@ -149,11 +149,11 @@ def set_recent_clicks(): click_cookie = read_user_cookie('recentclicks') if click_cookie: if valid_click_cookie(click_cookie): - names = [ x for x in UniqueIterator(click_cookie.split(':')) if x ] + names = [ x for x in UniqueIterator(click_cookie.split(',')) if x ] if len(click_cookie) > 1000: names = names[:20] - set_user_cookie('recentclicks', ':'.join(names)) + set_user_cookie('recentclicks', ','.join(names)) #eventually this will look at the user preference names = names[:5] c.recent_clicks = Link._by_fullname(names, data = True, diff --git a/r2/r2/controllers/validator/validator.py b/r2/r2/controllers/validator/validator.py index f61db59ae..6b9abfabb 100644 --- a/r2/r2/controllers/validator/validator.py +++ b/r2/r2/controllers/validator/validator.py @@ -349,19 +349,22 @@ class VAccountByName(VRequired): except NotFound: pass return self.error() +def fullname_regex(thing_cls = None, multiple = False): + pattern = Thing._type_prefix + if thing_cls: + pattern += utils.to36(thing_cls._type_id) + else: + pattern += r"[0-9a-z]+" + pattern += r"_[0-9a-z]+" + if multiple: + pattern = r"(%s *,? *)+" % pattern + return re.compile(r"^" + pattern + r"$") + class VByName(Validator): splitter = re.compile('[ ,]+') def __init__(self, param, thing_cls = None, multiple = False, error = errors.NO_THING_ID, **kw): - pattern = Thing._type_prefix - if thing_cls: - pattern += utils.to36(thing_cls._type_id) - else: - pattern += r"[0-9a-z]+" - pattern += r"_[0-9a-z]+" - if multiple: - pattern = r"(%s *,? *)+" % pattern - self.re = re.compile(r"^" + pattern + r"$") + self.re = fullname_regex(thing_cls, multiple) self.multiple = multiple self._error = error diff --git a/r2/r2/public/static/js/jquery.reddit.js b/r2/r2/public/static/js/jquery.reddit.js index 029d0dbed..eb1d08c5f 100644 --- a/r2/r2/public/static/js/jquery.reddit.js +++ b/r2/r2/public/static/js/jquery.reddit.js @@ -600,7 +600,7 @@ $.default_cookie_domain = function(domain) { return default_cookie_domain; }; -var cookie_name_prefix = ""; +var cookie_name_prefix = "_"; $.cookie_name_prefix = function(name) { if($.defined(name)) cookie_name_prefix = name + "_"; diff --git a/r2/r2/public/static/js/reddit.js b/r2/r2/public/static/js/reddit.js index 3fdd9f908..400814bb8 100644 --- a/r2/r2/public/static/js/reddit.js +++ b/r2/r2/public/static/js/reddit.js @@ -473,12 +473,12 @@ function add_thing_id_to_cookie(id, cookie_name) { return; } - cookie.data = id + ':' + cookie.data; + cookie.data = id + ',' + cookie.data; if(cookie.data.length > 1000) { - var fullnames = cookie.data.split(':'); + var fullnames = cookie.data.split(','); fullnames = $.uniq(fullnames, 20); - cookie.data = fullnames.join(':'); + cookie.data = fullnames.join(','); } $.cookie_write(cookie); @@ -487,7 +487,7 @@ function add_thing_id_to_cookie(id, cookie_name) { function clicked_items() { var cookie = $.cookie_read('recentclicks'); if(cookie && cookie.data) { - var fullnames = cookie.data.split(":"); + var fullnames = cookie.data.split(","); /* don't return empty ones */ for(var i=fullnames.length-1; i >= 0; i--) { if(!fullnames[i] || !fullnames[i].length) { @@ -533,7 +533,8 @@ function updateEventHandlers(thing) { .filter(":visible").trigger("onshow"); /* click on a title.. */ - $(thing).find("a.title, a.comments").mousedown(function() { + $(thing).filter(".link, .linkcompressed") + .find("a.title, a.comments").mousedown(function() { /* the site is either stored in the sr dict, or we are on * an sr and it is the current one */ var sr = reddit.sr[$(this).thing_id()] || reddit.cur_site;