')
+ for (var i = 0; i < spans.length; i++) {
+ if (i > 0) {
+ $new_summary.append(", ")
+ }
+ $new_summary.append(spans[i])
+ }
+ $new_summary.toggleClass("edited", this.$menu != null)
+ this.$el.find(".permission-summary").replaceWith($new_summary)
+
+ if (new_perms && this.$permissions_field) {
+ this.$permissions_field.val(this._serializePerms(new_perms))
+ }
+ },
+
+ onCommit: function(perms) {
+ this.$el.find('input[name="permissions"]').val(perms)
+ this.original_perms = this._parsePerms(perms)
+ this.hide()
+ }
+})
+
+r.ui.init = function() {
+ r.ui.HelpBubble.init()
+ r.ui.PermissionEditor.init()
+}
diff --git a/r2/r2/templates/moderatorpermissions.html b/r2/r2/templates/moderatorpermissions.html
new file mode 100644
index 000000000..c84880723
--- /dev/null
+++ b/r2/r2/templates/moderatorpermissions.html
@@ -0,0 +1,57 @@
+## 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 reddit Inc.
+##
+## All portions of the code written by reddit are Copyright (c) 2006-2012
+## reddit Inc. All Rights Reserved.
+###############################################################################
+
+<%namespace file="utils.html" import="error_field"/>
+
+<%def name="form_content()">
+ %if not thing.embedded:
+
+ %endif
+
+
+ %if not thing.embedded:
+ ${error_field("USER_DOESNT_EXIST", "name")}
+ ${error_field("NO_USER", "name")}
+ %endif
+ ${error_field("INVALID_PERMISSION_TYPE", "type")}
+ ${error_field("INVALID_PERMISSIONS", "permissions")}
+ %if not thing.embedded:
+
+ %endif
+%def>
+
+
+ %if thing.embedded:
+ ${form_content()}
+ %else:
+
+ %endif
+
+
+
diff --git a/r2/r2/templates/userlist.html b/r2/r2/templates/userlist.html
index b083a4b88..10a4d27bb 100644
--- a/r2/r2/templates/userlist.html
+++ b/r2/r2/templates/userlist.html
@@ -24,6 +24,8 @@
<% from r2.lib.template_helpers import static %>
<%def name="add_form(title, dest, add_type, container_name, verb=None)">
+ <% from r2.models import ModeratorPermissionSet %>
+ <% from r2.lib.pages import ModeratorPermissions %>