Initial release of Discourse

This commit is contained in:
Robin Ward
2013-02-05 14:16:51 -05:00
commit 21b5628528
2932 changed files with 143949 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
<div class="container">
<div class="row">
<div class="full-width">
<ul class="nav nav-pills">
<li>{{#linkTo 'admin.dashboard'}}{{i18n admin.dashboard}}{{/linkTo}}</li>
<li>{{#linkTo 'admin.site_settings'}}{{i18n admin.site_settings.title}}{{/linkTo}}</li>
<li>{{#linkTo 'adminUsersList.active'}}{{i18n admin.users.title}}{{/linkTo}}</li>
<li>{{#linkTo 'admin.email_logs'}}{{i18n admin.email_logs.title}}{{/linkTo}}</li>
<li>{{#linkTo 'adminFlags.active'}}{{i18n admin.flags.title}}{{/linkTo}}</li>
<li>{{#linkTo 'admin.customize'}}{{i18n admin.customize.title}}{{/linkTo}}</li>
</ul>
<div class='boxed white admin-content'>
<div class='admin-contents'>
{{outlet}}
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,56 @@
<div class='list'>
<div class='well'>
<ul class='nav nav-list'>
{{#each view.content}}
<li {{bindAttr class="this.selected:active"}}><a {{action selectStyle this target="controller"}}>{{this.description}}</a></li>
{{/each}}
</ul>
</div>
<button {{action newCustomization target="controller"}} class='btn btn-primary'>New</button>
</div>
{{#if content.selectedItem}}
<div class='current-style'>
<div class='admin-controls'>
<ul class="nav nav-pills">
<li {{bindAttr class="view.stylesheetActive:active"}}>
<a {{action selectStylesheet href="true" target="view"}}>{{i18n admin.customize.css}}</a>
</li>
<li {{bindAttr class="view.headerActive:active"}}>
<a {{action selectHeader href="true" target="view"}}>{{i18n admin.customize.header}}</a>
</li>
</ul>
</div>
{{#with content.selectedItem}}
{{view Ember.TextField class="style-name" valueBinding="name"}}
{{#if view.headerActive}}
{{view Discourse.AceEditorView contentBinding="header" mode="html"}}
{{/if}}
{{#if view.stylesheetActive}}
{{view Discourse.AceEditorView contentBinding="stylesheet" mode="css"}}
{{/if}}
{{/with}}
<br>
<div class='status-actions'>
<span>{{i18n admin.customize.override_default}} {{view Ember.Checkbox checkedBinding="content.selectedItem.override_default_style"}}</span>
<span>{{i18n admin.customize.enabled}} {{view Ember.Checkbox checkedBinding="content.selectedItem.enabled"}}</span>
{{#unless content.selectedItem.changed}}
<a class='preview-link' {{bindAttr href="content.selectedItem.previewUrl"}} target='_blank'>{{i18n admin.customize.preview}}</a>
|
<a href="/?preview-style=" target='_blank'>{{i18n admin.customize.undo_preview}}</a><br>
{{/unless}}
</div>
<div class='buttons'>
<button {{action save target="controller"}} {{bindAttr disabled="content.selectedItem.disableSave"}} class='btn btn-primary'>{{i18n admin.customize.save}}</button>
<a {{action delete target="controller"}} class='delete-link'>{{i18n admin.customize.delete}}</a>
<span class='saving'>{{content.savingStatus}}</span>
</div>
</div>
{{/if}}
<div class='clearfix'></div>

View File

@@ -0,0 +1,4 @@
<h3>Welcome to the admin section.</h3>
<p>Not much to see here right now. Why not try the Site Settings?</p>

View File

@@ -0,0 +1,37 @@
<div class='admin-controls'>
<div class='span5 controls'>
{{view Discourse.TextField valueBinding="controller.testEmailAddress" placeholderKey="admin.email_logs.test_email_address"}}
</div>
<div class='span10 controls'>
<button class='btn' {{action sendTestEmail target="controller"}} {{bindAttr disabled="sendTestEmailDisabled"}}>{{i18n admin.email_logs.send_test}}</button>
{{#if controller.sentTestEmail}}<span class='result-message'>{{i18n admin.email_logs.sent_test}}</span>{{/if}}
</div>
</div>
<table class='table'>
<tr>
<th>{{i18n admin.email_logs.sent_at}}</th>
<th>{{i18n user.title}}</th>
<th>{{i18n admin.email_logs.to_address}}</th>
<th>{{i18n admin.email_logs.email_type}}</th>
</tr>
{{#if controller.content.length}}
{{#group}}
{{#collection contentBinding="controller.content" tagName="tbody" itemTagName="tr"}}
<td>{{date view.content.created_at}}</td>
<td>
{{#if view.content.user}}
<a href="/admin/users/{{unbound view.content.user.username_lower}}">{{avatar view.content.user imageSize="tiny"}}</a>
<a href="/admin/users/{{unbound view.content.user.username_lower}}">{{view.content.user.username}}</a>
{{else}}
&mdash;
{{/if}}
</td>
<td><a href='mailto:{{unbound view.content.to_address}}'>{{view.content.to_address}}</a></td>
<td>{{view.content.email_type}}</td>
{{/collection}}
{{/group}}
{{/if}}
</table>

View File

@@ -0,0 +1,49 @@
<div class='admin-controls'>
<div class='span15'>
<ul class="nav nav-pills">
<li>{{#linkTo adminFlags.active}}{{i18n admin.flags.active}}{{/linkTo}}</li>
<li>{{#linkTo adminFlags.old}}{{i18n admin.flags.old}}{{/linkTo}}</li>
</ul>
</div>
</div>
<table class='admin-flags'>
<thead>
<tr>
<th class='user'></th>
<th class='excerpt'></th>
<th class='flaggers'>Flag by</th>
<th class='last-flagged'></th>
<th class='action'></th>
</tr>
</thead>
<tbody>
{{#each content}}
<tr {{bindAttr class="hiddenClass"}}>
<td class='user'>{{avatar user imageSize="small"}}</td>
<td class='excerpt'>{{#if topicHidden}}<i title='this topic is invisible' class='icon icon-eye-close'></i> {{/if}}<h3><a href='{{unbound url}}'>{{title}}</a></h3><br>{{{excerpt}}}
</td>
<td class='flaggers'>{{#each flaggers}}{{avatar this imageSize="small"}}{{/each}}</td>
<td class='last-flagged'>{{date lastFlagged}}</td>
<td class='action'>
{{#if controller.adminActiveFlagsView}}
<button title='dismiss all flags on this post (will unhide hidden posts)' class='btn' {{action clearFlags this}}>Clear Flags</button>
{{/if}}
</td>
</tr>
{{#each messages}}
<tr>
<td></td>
<td class='message'>
<div>{{avatar user imageSize="small"}} {{message}}</div>
</td>
<td></td>
<td></td>
<td></td>
</tr>
{{/each}}
{{/each}}
</tbody>
</table>

View File

@@ -0,0 +1,34 @@
<div class='admin-controls'>
<div class='span15 search controls'>
<label>
{{view Ember.Checkbox checkedBinding="controller.onlyOverridden"}}
{{i18n admin.site_settings.show_overriden}}
</label>
</div>
<div class='span5 controls'>
{{view Discourse.TextField valueBinding="controller.filter" placeholderKey="type_to_filter"}}
</div>
</div>
{{#collection contentBinding="filteredContent" classNames="form-horizontal settings" itemClass="row setting"}}
{{#with view.content}}
<div class='span4 offset1'>
{{unbound setting}}
</div>
<div {{bindAttr class=":span11 overridden:overridden"}}>
{{view Ember.TextField valueBinding="value" classNames="input-xxlarge"}}
<div class='desc'>{{unbound description}}</div>
</div>
{{#if dirty}}
<div class='span3'>
<button class='btn ok' {{action save this target="controller"}}><i class='icon-ok'></i></button>
<button class='btn cancel' {{action cancel this target="controller"}}><i class='icon-remove'></i></button
</div>
{{else}}
{{#if overridden}}
<button class='btn' href='#' {{action resetDefault this target="controller"}}>{{i18n admin.site_settings.reset}}</button>
{{/if}}
{{/if}}
{{/with}}
{{/collection}}

View File

@@ -0,0 +1,168 @@
<section class='details'>
<h1>{{i18n admin.user.basics}}</h1>
<div class='display-row'>
<div class='field'>{{i18n user.username.title}}</div>
<div class='value'>{{content.username}}</div>
<div class='controls'>
<a href="/users/{{unbound content.username_lower}}" class='btn'>
<i class='icon icon-user'></i>
{{i18n admin.user.show_public_profile}}
</a>
{{#if content.can_impersonate}}
<button class='btn' {{action impersonate target="content"}}>
<i class='icon icon-screenshot'></i>
{{i18n admin.user.impersonate}}
</button>
{{/if}}
</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n user.email.title}}</div>
<div class='value'><a href="mailto:{{unbound content.email}}">{{content.email}}</a></div>
</div>
<div class='display-row' style='height: 50px'>
<div class='field'>{{i18n user.avatar.title}}</div>
<div class='value'>{{avatar content imageSize="large"}}</div>
</div>
<div class='display-row' style='height: 50px'>
<div class='field'>{{i18n user.ip_address.title}}</div>
<div class='value'>{{content.ip_address}}</div>
<div class='controls'>
<button class='btn' {{action refreshBrowsers target="content"}}>
{{i18n admin.user.refresh_browsers}}
</button>
</div>
</div>
</section>
<section class='details'>
<h1>{{i18n admin.user.permissions}}</h1>
<div class='display-row'>
<div class='field'>{{i18n admin.users.approved}}</div>
<div class='value'>
{{#if content.approved}}
{{i18n admin.user.approved_by}}
<a href="/admin/users/{{unbound content.approved_by.username_lower}}">{{avatar approved_by imageSize="small"}}</a>
<a href="/admin/users/{{unbound username_lower}}">{{content.approved_by.username}}</a>
{{else}}
{{i18n no_value}}
{{/if}}
</div>
<div class='controls'>
{{#if content.can_approve}}
<button class='btn' {{action approve target="content"}}>
<i class='icon icon-ok'></i>
{{i18n admin.user.approve}}
</button>
{{/if}}
</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.admin}}</div>
<div class='value'>{{content.admin}}</div>
<div class='controls'>
{{#if content.can_revoke_admin}}
<button class='btn' {{action revokeAdmin target="content"}}>
<i class='icon icon-trophy'></i>
{{i18n admin.user.revoke_admin}}
</button>
{{/if}}
{{#if content.can_grant_admin}}
<button class='btn' {{action grantAdmin target="content"}}>
<i class='icon icon-trophy'></i>
{{i18n admin.user.grant_admin}}
</button>
{{/if}}
</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.moderator}}</div>
<div class='value'>{{content.moderator}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n trust_level}}</div>
<div class='value'>{{content.trustLevel.name}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.banned}}</div>
<div class='value'>{{content.is_banned}}</div>
<div class='controls'>
{{#if content.is_banned}}
{{#if content.canBan}}
<button class='btn' {{action unban target="content"}}>
<i class='icon icon-screenshot'></i>
{{i18n admin.user.unban}}
</button>
{{content.banDuration}}
{{/if}}
{{else}}
{{#if content.canBan}}
<button class='btn' {{action ban target="content"}}>
<i class='icon icon-screenshot'></i>
{{i18n admin.user.ban}}
</button>
{{/if}}
{{/if}}
</div>
</div>
</section>
<section class='details'>
<h1>{{i18n admin.user.activity}}</h1>
<div class='display-row'>
<div class='field'>{{i18n created}}</div>
<div class='value'>{{{content.created_at_age}}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.users.last_emailed}}</div>
<div class='value'>{{{content.last_emailed_age}}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n last_seen}}</div>
<div class='value'>{{{content.last_seen_age}}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.like_count}}</div>
<div class='value'>{{content.like_count}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.topics_entered}}</div>
<div class='value'>{{content.topics_entered}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.post_count}}</div>
<div class='value'>{{content.post_count}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.posts_read_count}}</div>
<div class='value'>{{content.posts_read_count}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.flags_given_count}}</div>
<div class='value'>{{content.flags_given_count}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.flags_received_count}}</div>
<div class='value'>{{content.flags_received_count}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.private_topics_count}}</div>
<div class='value'>{{content.private_topics_count}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n admin.user.time_read}}</div>
<div class='value'>{{{content.time_read}}}</div>
</div>
<div class='display-row'>
<div class='field'>{{i18n user.invited.days_visited}}</div>
<div class='value'>{{{content.days_visited}}}</div>
</div>
</section>

View File

@@ -0,0 +1,82 @@
<div class='admin-controls'>
<div class='span15'>
<ul class="nav nav-pills">
<li>{{#linkTo adminUsersList.active}}{{i18n admin.users.active}}{{/linkTo}}</li>
<li>{{#linkTo adminUsersList.new}}{{i18n admin.users.new}}{{/linkTo}}</li>
{{#if Discourse.SiteSettings.must_approve_users}}
<li>{{#linkTo adminUsersList.pending}}{{i18n admin.users.pending}}{{/linkTo}}</li>
{{/if}}
</ul>
</div>
<div class='span5 username controls'>
{{view Discourse.TextField valueBinding="controller.username" placeholderKey="username"}}
</div>
</div>
{{#if hasSelection}}
<div id='selected-controls'>
<button {{action approveUsers target="controller"}} class='btn'>{{countI18n admin.users.approved_selected countBinding="selectedCount"}}</button>
</div>
{{/if}}
{{#if content.length}}
<table class='table'>
<tr>
{{#if showApproval}}
<th>{{view Ember.Checkbox checkedBinding="selectAll"}}</th>
{{/if}}
<th>&nbsp;</th>
<th>{{i18n username}}</th>
<th>{{i18n email}}</th>
<th>{{i18n admin.users.last_emailed}}</th>
<th>{{i18n last_seen}}</th>
<th>{{i18n admin.user.topics_entered}}</th>
<th>{{i18n admin.user.posts_read_count}}</th>
<th>{{i18n admin.user.time_read}}</th>
<th>{{i18n created}}</th>
{{#if showApproval}}
<th>{{i18n admin.users.approved}}</th>
{{/if}}
<th>&nbsp;</th>
</tr>
{{#each content}}
<tr {{bindAttr class="selected"}}>
{{#if controller.showApproval}}
<td>
{{#if can_approve}}
{{view Ember.Checkbox checkedBinding="selected"}}
{{/if}}
</td>
{{/if}}
<td>
<a href="/admin/users/{{unbound username_lower}}">{{avatar this imageSize="small"}}</a>
</td>
<td><a href="/admin/users/{{unbound username_lower}}">{{unbound username}}</a></td>
<td>{{unbound email}}</td>
<td>{{{unbound last_emailed_age}}}</td>
<td>{{{unbound last_seen_age}}}</td>
<td>{{{unbound topics_entered}}}</td>
<td>{{{unbound posts_read_count}}}</td>
<td>{{{unbound time_read}}}</td>
<td>{{{unbound created_at_age}}}</td>
{{#if controller.showApproval}}
<td>
{{#if approved}}
{{i18n yes_value}}
{{else}}
{{i18n no_value}}
{{/if}}
</td>
{{/if}}
<td>{{#if admin}}<i class="icon-trophy"></i>{{/if}}<td>
</tr>
{{/each}}
</table>
{{else}}
<div class='admin-loading'>{{i18n loading}}</div>
{{/if}}