mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-02-18 02:11:32 -05:00
* Activate negative-result caching for HardCache chain
* begin migration to pylibmc:
* Add pylibmc to the list of required packages in preparation for the replacement of the memcached library
* Start using pylibmc for the rendercaches
* Tweak the computation of the normalized hot page to be a bit faster when the precomputer is available, by relying on the precomputer's internal permacached structure.
* Default to a SelfEmptyingCache for scripts run from `paster run'. Note that processes that run forever are still responsible for resetting their local-caches, but this can now be done with g.reset_caches()
* threaded messaging patch part 1: backend changes only. This will allow migrate.py to be run to move new onto inbox and will start tracking message trees for users.
* Specify some queries to run at most once per day
* Refactored safemarkdown() and added soup testing
Additions:
* Added _byID_rel()
* Made error messages more verbose for:
1. byID lookups of too-big thing_ids
2. memcache failures
3. Solr Nones
* Award._all_awards() now sorts by date
* Trophy.by_{account,award}() now cache properly
* new feedback page with helpful links
* Try to reduce the length of the query-queue by not adding known-long queries at all, rather than adding them and skipping them
* whitespace clean up
* simplify the 'why did my CC get denied' email checking.
* added missing translation strings and users now get PMs when they are added as translators
Bugfixes:
* Fix a bug in unsaving
* BeautifulSoup stopped hosting 3.0.7a, but 3.0.8 still uses the good parser
* Better search error handling
* Properly reset the cache-chains (incl. the hardcache; d'oh!) per-request
* Fix an attribute error on listings where some items have author_ids and some don't
* Bug when forcing recalculation of memoized functions
* the subreddit creation and edit form aren't dealing with errors properly
* buttons fix
120 lines
3.4 KiB
HTML
120 lines
3.4 KiB
HTML
## The contents of this file are subject to the Common Public Attribution
|
|
## License Version 1.0. (the "License"); you may not use this file except in
|
|
## compliance with the License. You may obtain a copy of the License at
|
|
## http://code.reddit.com/LICENSE. The License is based on the Mozilla Public
|
|
## License Version 1.1, but Sections 14 and 15 have been added to cover use of
|
|
## software over a computer network and provide for limited attribution for the
|
|
## Original Developer. In addition, Exhibit A has been modified to be consistent
|
|
## with Exhibit B.
|
|
##
|
|
## Software distributed under the License is distributed on an "AS IS" basis,
|
|
## WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
## the specific language governing rights and limitations under the License.
|
|
##
|
|
## The Original Code is Reddit.
|
|
##
|
|
## The Original Developer is the Initial Developer. The Initial Developer of the
|
|
## Original Code is CondeNet, Inc.
|
|
##
|
|
## All portions of the code written by CondeNet are Copyright (c) 2006-2010
|
|
## CondeNet, Inc. All Rights Reserved.
|
|
###############################################################################
|
|
|
|
<%namespace file="printablebuttons.html" import="ynbutton" />
|
|
|
|
<%def name="trophy_info(trophy, center)">
|
|
<td class="trophy-info"
|
|
%if center:
|
|
colspan="2"
|
|
%endif
|
|
>
|
|
<div>
|
|
%if hasattr(trophy, "url"):
|
|
<a href="${trophy.url}">
|
|
%endif
|
|
<img class="trophy-icon" src="${trophy._thing2.imgurl % 40}" />
|
|
<br/>
|
|
<span class="trophy-name">${trophy._thing2.title}</span>
|
|
<br/>
|
|
%if hasattr(trophy, "description"):
|
|
<span class="trophy-description">${trophy.description}</span>
|
|
<br/>
|
|
%endif
|
|
%if hasattr(trophy, "url"):
|
|
</a>
|
|
%endif
|
|
%if c.user_is_admin:
|
|
${ynbutton(_("remove"), _("removed"), "removetrophy", "hide_thing",
|
|
hidden_data=dict(trophy_fn=trophy._id36))}
|
|
%endif
|
|
</div>
|
|
</td>
|
|
</%def>
|
|
|
|
%if c.user_is_admin and thing.cup_info:
|
|
<div class="cup-info-box">
|
|
cup:
|
|
 
|
|
<img src="${thing.cup_info['img_url']}" alt="[image not found]" />
|
|
<br/>
|
|
«
|
|
<tt>${thing.cup_info["label_template"] % dict(user=thing.user.name)}</tt>
|
|
»
|
|
<br/>
|
|
show cup until:
|
|
${thing.cup_info["expiration"].astimezone(g.display_tz).strftime("%Y-%m-%d %H:%M:%S %Z")}
|
|
 
|
|
${ynbutton(_("remove"), _("removed"), "removecup", "hide_thing",
|
|
hidden_data=dict(account=thing.user.name))}
|
|
</div>
|
|
%endif
|
|
|
|
## for now
|
|
%if not thing.trophies:
|
|
<div class="dust">${_("dust")}</div>
|
|
%endif
|
|
|
|
<%def name="trophy_table(trophies, header='')">
|
|
|
|
${unsafe(header)}
|
|
|
|
<table class="trophy-table">
|
|
%for i, trophy in enumerate(trophies):
|
|
%if i % 2 == 0:
|
|
<tr>
|
|
%endif
|
|
|
|
${trophy_info(trophy, i == len(trophies) - 1)}
|
|
|
|
%if i % 2 == 1:
|
|
</tr>
|
|
%endif
|
|
%endfor
|
|
|
|
%if len(trophies) % 2 == 1:
|
|
</tr>
|
|
%endif
|
|
</table>
|
|
</%def>
|
|
|
|
${trophy_table(thing.trophies)}
|
|
|
|
%if thing.dupe_trophies:
|
|
<p>
|
|
(
|
|
<a href="javascript:void(0)"
|
|
onclick="$('.dupe-trophies').show();$(this).parent().hide();return false">
|
|
${_("%d more") % len(thing.dupe_trophies)}
|
|
</a>
|
|
)
|
|
</p>
|
|
|
|
<div class="dupe-trophies" style="display: none">
|
|
${trophy_table(thing.dupe_trophies)}
|
|
</div>
|
|
%endif
|
|
|
|
%if c.user_is_admin and thing.invisible_trophies:
|
|
${trophy_table(thing.invisible_trophies, "<p>Invisibles:</p>")}
|
|
%endif
|