mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
Initial release of Discourse
This commit is contained in:
23
app/assets/javascripts/admin/templates/admin.js.handlebars
Normal file
23
app/assets/javascripts/admin/templates/admin.js.handlebars
Normal 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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}}
|
||||
—
|
||||
{{/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>
|
||||
49
app/assets/javascripts/admin/templates/flags.js.handlebars
Normal file
49
app/assets/javascripts/admin/templates/flags.js.handlebars
Normal 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>
|
||||
@@ -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}}
|
||||
168
app/assets/javascripts/admin/templates/user.js.handlebars
Normal file
168
app/assets/javascripts/admin/templates/user.js.handlebars
Normal 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>
|
||||
|
||||
@@ -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> </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> </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}}
|
||||
Reference in New Issue
Block a user