Merge remote-tracking branch 'origin/master'

Conflicts:
	package.json
v1.18.x
barisusakli 10 years ago
commit 2781939c50

@ -40,7 +40,7 @@
"mmmagic": "^0.3.13",
"morgan": "^1.3.2",
"nconf": "~0.7.1",
"nodebb-plugin-composer-default": "1.0.9",
"nodebb-plugin-composer-default": "1.0.11",
"nodebb-plugin-dbsearch": "0.2.15",
"nodebb-plugin-emoji-extended": "0.4.9",
"nodebb-plugin-markdown": "4.0.4",
@ -48,9 +48,9 @@
"nodebb-plugin-soundpack-default": "0.1.3",
"nodebb-plugin-spam-be-gone": "0.4.1",
"nodebb-rewards-essentials": "0.0.3",
"nodebb-theme-lavender": "1.0.49",
"nodebb-theme-lavender": "1.0.52",
"nodebb-theme-persona": "2.0.19",
"nodebb-theme-vanilla": "3.0.8",
"nodebb-theme-vanilla": "3.0.11",
"nodebb-widget-essentials": "1.0.5",
"npm": "^2.1.4",
"passport": "^0.2.1",

@ -23,5 +23,9 @@
"composer.user_said": "%1 said:",
"composer.discard": "Are you sure you wish to discard this post?",
"composer.submit_and_lock": "Submit and Lock",
"composer.toggle_dropdown": "Toggle Dropdown"
"composer.toggle_dropdown": "Toggle Dropdown",
"bootbox.ok": "OK",
"bootbox.cancel": "Cancel",
"bootbox.confirm": "Confirm"
}

@ -1,40 +1,63 @@
@import "./bootstrap/bootstrap";
@import "./bootswatch";
@import "./mixins";
@import "./vars";
@import "./header";
@import "./mobile";
@import "./general/dashboard";
@import "./general/navigation";
@import "./manage/categories";
@import "./manage/tags";
@import "./manage/flags";
@import "./manage/groups";
@import "./manage/users";
@import "./appearance/customise";
@import "./appearance/themes";
@import "./extend/plugins";
@import "./extend/rewards";
@import "./advanced/database";
@import "./settings";
@import "./modules/alerts";
@import "./modules/selectable";
@import "./modules/checkboxes";
@import "./modules/snackbar";
.admin {
padding-top: 70px;
background: #f0f0f0;
background: #fff;
font-size: 14px;
.container {
width: 100% !important;
padding: 0px 15px;
h1 {
font-size: 35px;
margin-bottom: 50px;
}
.jumbotron {
padding: @jumbotron-padding;
label {
font-weight: 700;
}
.btn {
border-radius: 0;
}
.btn-link {
color: @link-color;
}
.floating-button {
background: @brand-primary !important;
position: fixed;
right: 30px;
bottom: 30px;
}
.dropdown-menu {
margin-top: -35px;
margin-right: -2px;
}
.user-img {
width:24px;
height:24px;
@ -52,129 +75,10 @@
color: #fff;
}
&.mobile {
#content {
padding-left: 20px;
}
#main-menu {
width: 200px;
height: 100%;
-webkit-transform: translateX(-190px);
transform: translateX(-190px);
&.transitioning {
.transition(.3s ease all);
}
&.open {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}
}
#main-menu {
position: fixed;
width: 200px;
height: 100%;
padding-top: 50px;
top: 0px;
left: 0px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQMAAACxAfVuAAAAA3NCSVQICAjb4U/gAAAABlBMVEU5OTk1NTVxIqOYAAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABZ0RVh0Q3JlYXRpb24gVGltZQAxNC8xMS8xMc34jO8AAAFQSURBVEiJ7ZUxbsMwDEV/68Fbc4M4aC+QsYOhXstDELg3c9CLqPAFNHYo4tKkEBoMhxgoPEkD8aRBIkV+Enh4VRFvswkLwu4HY09m6pXQ/D6NA5lpUMLHtRojmSkq4RyqS2xD9Z2U0DX1Zzo19ZCU6KW6Tx2ZJT1+SDddZuQ7MyEEcqTdk1ECO0b7KSqBQ9i3ElEmcLAv7xJ7JvmW54P8Uqbtlrx5vL1+zDm699ONyI09NDX/zVdUwmlHmeGvVEJHHvB/J6UVh3wTZbtPSpKjMBeHEkwZMcEUHBNMaTLdivh1QRvnyIjJ99ONyI3dSIgJRkJMsMKQdKw5XEpI8m4kxARTRqJ3U3DSGUxpSg8xEpJus9kyEpLXXT/diNzYjYSYYCTEBCMMphWHRkJyp5GQ5MjtyW73dvu8kdDGOSrzqMyjMo/+KUdlHpV5VObR/foD6jrYlpchAFAAAAAASUVORK5CYII=);
z-index: 1;
overflow-y: auto;
.nano-content {
top: 51px !important;
}
.sidebar-nav {
overflow: hidden;
.transition(.4s ease-in-out max-height);
max-height: 100%;
cursor: pointer;
max-height: 38px;
&.open {
max-height: 500px;
}
.nav-header {
color: #fff;
border-top: 1px solid #32353E;
border-bottom: 1px solid #1A1C20;
background-color: #272727;
text-shadow: 0px 0px 2px #111;
padding: 10px;
.user-select(none);
}
.nav-list {
background: #232323;
li {
i {
margin-right: 6px;
}
&:hover a {
background-color: #3f3f3f;
span {
opacity: 0.8;
}
}
&.active a {
padding-left: 20px;
background-color: #3f3f3f;
span {
opacity: 0;
}
}
a {
color: white;
padding: 7px 15px;
font-size: 13px;
padding-left: 11px;
outline: 0;
span {
opacity: 0;
margin-right: -8px;
.transition(.3s ease-in opacity);
}
-webkit-transition: background-color .3s ease-in, padding-left .3s ease-in;
-moz-transition: background-color .3s ease-in, padding-left .3s ease-in;
-o-transition: background-color .3s ease-in, padding-left .3s ease-in;
transition: background-color .3s ease-in, padding-left .3s ease-in;
}
}
}
}
}
#content {
padding-left: 215px;
padding-right: 15px;
}
#breadcrumbs {
cursor: default;
}
.wrapper {
width: 100%;
overflow-y: hidden;
}
.acp-panel-heading {
padding: 7px 14px;
border: 0;
@ -203,20 +107,6 @@
.box-header-font
}
#user_label {
a {
padding-top: 13px;
padding-bottom: 13px;
img {
width: 24px;
height: 24px;
border-radius: 50%;
border: 1px solid #454;
}
}
}
.icon-container {
.row {
margin: 0;
@ -271,30 +161,6 @@
}
}
#acp-search {
input {
background: black;
border: 0;
color: white;
box-shadow: none;
.transition(.4s ease width);
font-family: @font-family-monospace;
width: 30px;
height: 30px;
vertical-align: -30%;
border-radius: 0;
&:focus {
width: 200px;
}
}
.search-match {
font-weight: 700;
color: black;
}
}
#taskbar {
display: none; /* not sure why I have to do this, but it only seems to show up on prod */
}
@ -311,16 +177,6 @@
display: inline-block;
}
@media (min-width: 1200px) {
.acp-sidebar {
position: fixed;
top: 70px;
right: 15px;
width: initial;
max-width: calc( ~"(100% - 200px)/4" );
}
}
.category-settings-form {
h3 {
margin-top: 0;
@ -364,4 +220,20 @@
max-width: 24px;
max-height: 24px;
}
}
.mdl-switch.is-checked .mdl-switch__ripple-container {
cursor: pointer !important;
}
.mdl-switch.is-checked .mdl-switch__thumb {
background: @brand-primary !important;
}
.mdl-switch.is-checked .mdl-switch__track {
background: lighten(@brand-primary, 20%) !important;
}
* > .checkbox:first-child {
margin-top: 0px;
}

@ -8,14 +8,6 @@
margin: 0.25em 1em;
list-style-type: none;
.pointer;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
-webkit-transition: background-color 250ms linear;
-moz-transition: background-color 250ms linear;
-ms-transition: background-color 250ms linear;
-o-transition: background-color 250ms linear;
transition: background-color 250ms linear;
img {
max-width: 150px;
@ -30,16 +22,39 @@
font-size: 0.9em;
}
&:hover {
background-color: rgba(128, 128, 128, 0.2);
}
&.no-themes {
font-style: italic;
}
}
}
.theme-card {
margin-bottom: 30px;
.mdl-card__title {
height: 223px;
background-size: contain;
}
.mdl-card__supporting-text h2 {
margin-bottom: 15px;
}
}
[data-theme].selected .mdl-button {
color: black;
}
[data-type="bootswatch"] {
.mdl-card__title {
height: 198px;
}
.mdl-card__title-text {
display: none;
}
}
textarea[data-field] {
min-height: 450px;
width: 100%;

@ -1,4 +1,4 @@
//
// Paper 3.3.5
// Variables
// --------------------------------------------------
@ -9,16 +9,16 @@
@gray-base: #000;
@gray-darker: lighten(@gray-base, 13.5%); // #222
@gray-dark: lighten(@gray-base, 20%); // #333
@gray: lighten(@gray-base, 33.5%); // #555
@gray-light: lighten(@gray-base, 46.7%); // #777
@gray-dark: #212121;
@gray: #666;
@gray-light: #bbb;
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
@brand-primary: darken(#428bca, 6.5%);
@brand-success: #5cb85c;
@brand-info: #5bc0de;
@brand-warning: #f0ad4e;
@brand-danger: #d9534f;
@brand-primary: #2196F3;
@brand-success: #4CAF50;
@brand-info: #9C27B0;
@brand-warning: #ff9800;
@brand-danger: #e51c23;
//== Scaffolding
@ -28,7 +28,7 @@
//** Background color for `<body>`.
@body-bg: #fff;
//** Global text color on `<body>`.
@text-color: @gray-dark;
@text-color: @gray;
//** Global textual link color.
@link-color: @brand-primary;
@ -42,33 +42,33 @@
//
//## Font, line-height, and color for body text, headings, and more.
@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-family-serif: Georgia, "Times New Roman", Times, serif;
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
@font-family-base: @font-family-sans-serif;
@font-size-base: 14px;
@font-size-base: 13px;
@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
@font-size-h1: floor((@font-size-base * 2.6)); // ~36px
@font-size-h2: floor((@font-size-base * 2.15)); // ~30px
@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
@font-size-h5: @font-size-base;
@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
@font-size-h1: 56px;
@font-size-h2: 45px;
@font-size-h3: 34px;
@font-size-h4: 24px;
@font-size-h5: 20px;
@font-size-h6: 14px;
//** Unit-less `line-height` for use in components like buttons.
@line-height-base: 1.428571429; // 20/14
@line-height-base: 1.846; // 20/14
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
//** By default, this inherits from the `<body>`.
@headings-font-family: inherit;
@headings-font-weight: 500;
@headings-font-weight: 400;
@headings-line-height: 1.1;
@headings-color: inherit;
@headings-color: #444;
//== Iconography
@ -88,7 +88,7 @@
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
@padding-base-vertical: 6px;
@padding-base-horizontal: 12px;
@padding-base-horizontal: 16px;
@padding-large-vertical: 10px;
@padding-large-horizontal: 16px;
@ -99,12 +99,12 @@
@padding-xs-vertical: 1px;
@padding-xs-horizontal: 5px;
@line-height-large: 1.33;
@line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
@line-height-small: 1.5;
@border-radius-base: 4px;
@border-radius-large: 6px;
@border-radius-small: 3px;
@border-radius-base: 0px;
@border-radius-large: 0px;
@border-radius-small: 0px;
//** Global color for active items (e.g., navs or dropdowns).
@component-active-color: #fff;
@ -144,49 +144,55 @@
@btn-font-weight: normal;
@btn-default-color: #333;
@btn-default-color: #444;
@btn-default-bg: #fff;
@btn-default-border: #ccc;
@btn-default-border: transparent;
@btn-primary-color: #fff;
@btn-primary-bg: @brand-primary;
@btn-primary-border: darken(@btn-primary-bg, 5%);
@btn-primary-border: transparent;
@btn-success-color: #fff;
@btn-success-bg: @brand-success;
@btn-success-border: darken(@btn-success-bg, 5%);
@btn-success-border: transparent;
@btn-info-color: #fff;
@btn-info-bg: @brand-info;
@btn-info-border: darken(@btn-info-bg, 5%);
@btn-info-border: transparent;
@btn-warning-color: #fff;
@btn-warning-bg: @brand-warning;
@btn-warning-border: darken(@btn-warning-bg, 5%);
@btn-warning-border: transparent;
@btn-danger-color: #fff;
@btn-danger-bg: @brand-danger;
@btn-danger-border: darken(@btn-danger-bg, 5%);
@btn-danger-border: transparent;
@btn-link-disabled-color: @gray-light;
// Allows for customizing button radius independently from global border radius
@btn-border-radius-base: @border-radius-base;
@btn-border-radius-large: @border-radius-large;
@btn-border-radius-small: @border-radius-small;
//== Forms
//
//##
//** `<input>` background color
@input-bg: #fff;
@input-bg: transparent;
//** `<input disabled>` background color
@input-bg-disabled: @gray-lighter;
@input-bg-disabled: transparent;
//** Text color for `<input>`s
@input-color: @gray;
//** `<input>` border color
@input-border: #ccc;
@input-border: transparent;
// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
//** Default `.form-control` border radius
// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
@input-border-radius: @border-radius-base;
//** Large `.form-control` border radius
@input-border-radius-large: @border-radius-large;
@ -197,7 +203,7 @@
@input-border-focus: #66afe9;
//** Placeholder text color
@input-color-placeholder: #999;
@input-color-placeholder: @gray-light;
//** Default `.form-control` height
@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
@ -206,11 +212,14 @@
//** Small `.form-control` height
@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
//** `.form-group` margin
@form-group-margin-bottom: 15px;
@legend-color: @gray-dark;
@legend-border-color: #e5e5e5;
//** Background color for textual input addons
@input-group-addon-bg: @gray-lighter;
@input-group-addon-bg: transparent;
//** Border color for textual input addons
@input-group-addon-border-color: @input-border;
@ -232,11 +241,11 @@
@dropdown-divider-bg: #e5e5e5;
//** Dropdown link text color.
@dropdown-link-color: @gray-dark;
@dropdown-link-color: @text-color;
//** Hover color for dropdown links.
@dropdown-link-hover-color: darken(@gray-dark, 5%);
//** Hover background for dropdown links.
@dropdown-link-hover-bg: #f5f5f5;
@dropdown-link-hover-bg: @gray-lighter;
//** Active dropdown menu item text color.
@dropdown-link-active-color: @component-active-color;
@ -250,7 +259,7 @@
@dropdown-header-color: @gray-light;
//** Deprecated `@dropdown-caret-color` as of v3.1.0
@dropdown-caret-color: #000;
@dropdown-caret-color: @gray-light;
//-- Z-index master list
@ -265,7 +274,8 @@
@zindex-popover: 1060;
@zindex-tooltip: 1070;
@zindex-navbar-fixed: 1030;
@zindex-modal: 1040;
@zindex-modal-background: 1040;
@zindex-modal: 1050;
//== Media queries breakpoints
@ -347,45 +357,45 @@
//##
// Basics of a navbar
@navbar-height: 50px;
@navbar-height: 64px;
@navbar-margin-bottom: @line-height-computed;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
@navbar-collapse-max-height: 340px;
@navbar-default-color: #777;
@navbar-default-bg: #f8f8f8;
@navbar-default-border: darken(@navbar-default-bg, 6.5%);
@navbar-default-color: @gray-light;
@navbar-default-bg: #fff;
@navbar-default-border: transparent;
// Navbar links
@navbar-default-link-color: #777;
@navbar-default-link-hover-color: #333;
@navbar-default-link-color: @gray;
@navbar-default-link-hover-color: @gray-dark;
@navbar-default-link-hover-bg: transparent;
@navbar-default-link-active-color: #555;
@navbar-default-link-active-color: @gray-dark;
@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
@navbar-default-link-disabled-color: #ccc;
@navbar-default-link-disabled-bg: transparent;
// Navbar brand label
@navbar-default-brand-color: @navbar-default-link-color;
@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);
@navbar-default-brand-hover-color: @navbar-default-link-hover-color;
@navbar-default-brand-hover-bg: transparent;
// Navbar toggle
@navbar-default-toggle-hover-bg: #ddd;
@navbar-default-toggle-icon-bar-bg: #888;
@navbar-default-toggle-border-color: #ddd;
@navbar-default-toggle-hover-bg: transparent;
@navbar-default-toggle-icon-bar-bg: rgba(0,0,0,0.5);
@navbar-default-toggle-border-color: transparent;
// Inverted navbar
//=== Inverted navbar
// Reset inverted navbar basics
@navbar-inverse-color: lighten(@gray-light, 15%);
@navbar-inverse-bg: #222;
@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
@navbar-inverse-color: @gray-light;
@navbar-inverse-bg: @brand-primary;
@navbar-inverse-border: transparent;
// Inverted navbar links
@navbar-inverse-link-color: lighten(@gray-light, 15%);
@navbar-inverse-link-color: lighten(@brand-primary, 30%);
@navbar-inverse-link-hover-color: #fff;
@navbar-inverse-link-hover-bg: transparent;
@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
@ -398,10 +408,10 @@
@navbar-inverse-brand-hover-color: #fff;
@navbar-inverse-brand-hover-bg: transparent;
// Inverted navbar toggle
@navbar-inverse-toggle-hover-bg: #333;
@navbar-inverse-toggle-icon-bar-bg: #fff;
@navbar-inverse-toggle-border-color: #333;
// Inverted navbar toggle\
@navbar-inverse-toggle-hover-bg: transparent;
@navbar-inverse-toggle-icon-bar-bg: rgba(0,0,0,0.5);
@navbar-inverse-toggle-border-color: transparent;
//== Navs
@ -416,15 +426,15 @@
@nav-disabled-link-hover-color: @gray-light;
//== Tabs
@nav-tabs-border-color: #ddd;
@nav-tabs-border-color: transparent;
@nav-tabs-link-hover-border-color: @gray-lighter;
@nav-tabs-active-link-hover-bg: @body-bg;
@nav-tabs-active-link-hover-bg: transparent;
@nav-tabs-active-link-hover-color: @gray;
@nav-tabs-active-link-hover-border-color: #ddd;
@nav-tabs-active-link-hover-border-color: transparent;
@nav-tabs-justified-link-border-color: #ddd;
@nav-tabs-justified-link-border-color: @nav-tabs-border-color;
@nav-tabs-justified-active-link-border-color: @body-bg;
//== Pills
@ -476,29 +486,30 @@
@jumbotron-padding: 30px;
@jumbotron-color: inherit;
@jumbotron-bg: @gray-lighter;
@jumbotron-heading-color: inherit;
@jumbotron-bg: #f9f9f9;
@jumbotron-heading-color: @headings-color;
@jumbotron-font-size: ceil((@font-size-base * 1.5));
@jumbotron-heading-font-size: ceil((@font-size-base * 4.5));
//== Form states and alerts
//
//## Define colors for form feedback states and, by default, alerts.
@state-success-text: #3c763d;
@state-success-text: @brand-success;
@state-success-bg: #dff0d8;
@state-success-border: darken(spin(@state-success-bg, -10), 5%);
@state-info-text: #31708f;
@state-info-bg: #d9edf7;
@state-info-text: @brand-info;
@state-info-bg: #e1bee7;
@state-info-border: darken(spin(@state-info-bg, -10), 7%);
@state-warning-text: #8a6d3b;
@state-warning-bg: #fcf8e3;
@state-warning-text: @brand-warning;
@state-warning-bg: #ffe0b2;
@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
@state-danger-text: #a94442;
@state-danger-bg: #f2dede;
@state-danger-text: @brand-danger;
@state-danger-bg: #f9bdbb;
@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
@ -511,7 +522,7 @@
//** Tooltip text color
@tooltip-color: #fff;
//** Tooltip background color
@tooltip-bg: #000;
@tooltip-bg: #727272;
@tooltip-opacity: .9;
//** Tooltip arrow width
@ -529,9 +540,9 @@
//** Popover maximum width
@popover-max-width: 276px;
//** Popover border color
@popover-border-color: rgba(0,0,0,.2);
@popover-border-color: transparent;
//** Popover fallback border color
@popover-fallback-border-color: #ccc;
@popover-fallback-border-color: transparent;
//** Popover title background color
@popover-title-bg: darken(@popover-bg, 3%);
@ -544,7 +555,7 @@
//** Popover outer arrow width
@popover-arrow-outer-width: (@popover-arrow-width + 1);
//** Popover outer arrow color
@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
@popover-arrow-outer-color: fadein(@popover-border-color, 7.5%);
//** Popover outer arrow fallback color
@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
@ -587,7 +598,7 @@
//** Background color of modal content area
@modal-content-bg: #fff;
//** Modal content border color
@modal-content-border-color: rgba(0,0,0,.2);
@modal-content-border-color: transparent;
//** Modal content border color **for IE8**
@modal-content-fallback-border-color: #999;
@ -596,7 +607,7 @@
//** Modal backdrop opacity
@modal-backdrop-opacity: .5;
//** Modal header border color
@modal-header-border-color: #e5e5e5;
@modal-header-border-color: transparent;
//** Modal footer border color
@modal-footer-border-color: @modal-header-border-color;
@ -709,21 +720,21 @@
@panel-primary-border: @brand-primary;
@panel-primary-heading-bg: @brand-primary;
@panel-success-text: @state-success-text;
@panel-success-text: #fff;
@panel-success-border: @state-success-border;
@panel-success-heading-bg: @state-success-bg;
@panel-success-heading-bg: @brand-success;
@panel-info-text: @state-info-text;
@panel-info-text: #fff;
@panel-info-border: @state-info-border;
@panel-info-heading-bg: @state-info-bg;
@panel-info-heading-bg: @brand-info;
@panel-warning-text: @state-warning-text;
@panel-warning-text: #fff;
@panel-warning-border: @state-warning-border;
@panel-warning-heading-bg: @state-warning-bg;
@panel-warning-heading-bg: @brand-warning;
@panel-danger-text: @state-danger-text;
@panel-danger-text: #fff;
@panel-danger-border: @state-danger-border;
@panel-danger-heading-bg: @state-danger-bg;
@panel-danger-heading-bg: @brand-danger;
//== Thumbnails
@ -749,8 +760,8 @@
//
//##
@well-bg: #f5f5f5;
@well-border: darken(@well-bg, 7%);
@well-bg: #f9f9f9;
@well-border: transparent;
//== Badges
@ -767,7 +778,7 @@
//** Badge background color in active nav link
@badge-active-bg: #fff;
@badge-font-weight: bold;
@badge-font-weight: normal;
@badge-line-height: 1;
@badge-border-radius: 10px;
@ -809,9 +820,9 @@
//
//##
@close-font-weight: bold;
@close-font-weight: normal;
@close-color: #000;
@close-text-shadow: 0 1px 0 #fff;
@close-text-shadow: none;
//== Code

@ -0,0 +1,607 @@
// Paper 3.3.5
// Bootswatch
// -----------------------------------------------------
@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
// Navbar =====================================================================
.navbar {
border: none;
.box-shadow(0 1px 2px rgba(0,0,0,.3));
&-brand {
font-size: 24px;
}
&-inverse {
.form-control {
color: #fff;
.placeholder(@navbar-inverse-link-color);
&[type=text],
&[type=password] {
.box-shadow(inset 0 -1px 0 @navbar-inverse-link-color);
&:focus {
.box-shadow(inset 0 -2px 0 #fff);
}
}
}
}
}
// Buttons ====================================================================
#btn(@class,@bg) {
.btn-@{class} {
background-size: 200%;
background-position: 50%;
&:focus {
background-color: @bg;
}
&:hover,
&:active:hover {
background-color: darken(@bg, 6%);
}
&:active {
background-color: darken(@bg, 12%);
#gradient > .radial(darken(@bg, 12%) 10%, @bg 11%);
background-size: 1000%;
.box-shadow(2px 2px 4px rgba(0,0,0,.4));
}
}
}
#btn(default,@btn-default-bg);
#btn(primary,@btn-primary-bg);
#btn(success,@btn-success-bg);
#btn(info,@btn-info-bg);
#btn(warning,@btn-warning-bg);
#btn(danger,@btn-danger-bg);
#btn(link,#fff);
.btn {
text-transform: uppercase;
border: none;
.box-shadow(1px 1px 4px rgba(0,0,0,.4));
.transition(all 0.4s);
&-link {
border-radius: @btn-border-radius-base;
.box-shadow(none);
color: @btn-default-color;
&:hover,
&:focus {
.box-shadow(none);
color: @btn-default-color;
text-decoration: none;
}
}
&-default {
&.disabled {
background-color: rgba(0, 0, 0, 0.1);
color: rgba(0, 0, 0, 0.4);
opacity: 1;
}
}
}
.btn-group {
.btn + .btn,
.btn + .btn-group,
.btn-group + .btn,
.btn-group + .btn-group {
margin-left: 0;
}
&-vertical {
> .btn + .btn,
> .btn + .btn-group,
> .btn-group + .btn,
> .btn-group + .btn-group {
margin-top: 0;
}
}
}
// Typography =================================================================
body {
-webkit-font-smoothing: antialiased;
letter-spacing: .1px;
}
p {
margin: 0 0 1em;
}
input,
button {
-webkit-font-smoothing: antialiased;
letter-spacing: .1px;
}
a {
.transition(all 0.2s);
}
// Tables =====================================================================
.table-hover {
> tbody > tr,
> tbody > tr > th,
> tbody > tr > td {
.transition(all 0.2s);
}
}
// Forms ======================================================================
label {
font-weight: normal;
}
textarea,
textarea.form-control,
input.form-control,
input[type=text],
input[type=password],
input[type=email],
input[type=number],
[type=text].form-control,
[type=password].form-control,
[type=email].form-control,
[type=tel].form-control,
[contenteditable].form-control {
padding: 0;
border: none;
border-radius: 0;
-webkit-appearance: none;
.box-shadow(inset 0 -1px 0 #ddd);
font-size: 16px;
&:focus {
.box-shadow(inset 0 -2px 0 @brand-primary);
}
&[disabled],
&[readonly] {
.box-shadow(none);
border-bottom: 1px dotted #ddd;
}
&.input {
&-sm {
font-size: @font-size-small;
}
&-lg {
font-size: @font-size-large;
}
}
}
select,
select.form-control {
border: 0;
border-radius: 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding-left: 0;
padding-right: 0\9; // remove padding for < ie9 since default arrow can't be removed
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
background-size: 13px;
background-repeat: no-repeat;
background-position: right center;
.box-shadow(inset 0 -1px 0 #ddd);
font-size: 16px;
line-height: 1.5;
&::-ms-expand {
display: none;
}
&.input {
&-sm {
font-size: @font-size-small;
}
&-lg {
font-size: @font-size-large;
}
}
&:focus {
.box-shadow(inset 0 -2px 0 @brand-primary);
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
}
&[multiple] {
background: none;
}
}
.radio,
.radio-inline,
.checkbox,
.checkbox-inline {
label {
padding-left: 25px;
}
input[type="radio"],
input[type="checkbox"] {
margin-left: -25px;
}
}
input[type="radio"],
.radio input[type="radio"],
.radio-inline input[type="radio"] {
position: relative;
margin-top: 6px;
margin-right: 4px;
vertical-align: top;
border: none;
background-color: transparent;
-webkit-appearance: none;
appearance: none;
cursor: pointer;
&:focus {
outline: none;
}
&:before,
&:after {
content: "";
display: block;
width: 18px;
height: 18px;
border-radius: 50%;
.transition(240ms);
}
&:before {
position: absolute;
left: 0;
top: -3px;
background-color: @brand-primary;
.scale(0);
}
&:after {
position: relative;
top: -3px;
border: 2px solid @gray;
}
&:checked:before {
.scale(0.5);
}
&:disabled:checked:before {
background-color: @gray-light;
}
&:checked:after {
border-color: @brand-primary;
}
&:disabled:after,
&:disabled:checked:after {
border-color: @gray-light;
}
}
input[type="checkbox"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
position: relative;
border: none;
margin-bottom: -4px;
-webkit-appearance: none;
appearance: none;
cursor: pointer;
&:focus {
outline: none;
}
&:after {
content: "";
display: block;
width: 18px;
height: 18px;
margin-top: -2px;
margin-right: 5px;
border: 2px solid @gray;
border-radius: 2px;
.transition(240ms);
}
&:checked:before {
content: "";
position: absolute;
top: 0;
left: 6px;
display: table;
width: 6px;
height: 12px;
border: 2px solid #fff;
border-top-width: 0;
border-left-width: 0;
.rotate(45deg);
}
&:checked:after {
background-color: @brand-primary;
border-color: @brand-primary;
}
&:disabled:after {
border-color: @gray-light;
}
&:disabled:checked:after {
background-color: @gray-light;
border-color: transparent;
}
}
.has-warning {
input:not([type=checkbox]),
.form-control,
input.form-control[readonly],
input[type=text][readonly],
[type=text].form-control[readonly],
input:not([type=checkbox]):focus,
.form-control:focus {
border-bottom: none;
.box-shadow(inset 0 -2px 0 @brand-warning);
}
}
.has-error {
input:not([type=checkbox]),
.form-control,
input.form-control[readonly],
input[type=text][readonly],
[type=text].form-control[readonly],
input:not([type=checkbox]):focus,
.form-control:focus {
border-bottom: none;
.box-shadow(inset 0 -2px 0 @brand-danger);
}
}
.has-success {
input:not([type=checkbox]),
.form-control,
input.form-control[readonly],
input[type=text][readonly],
[type=text].form-control[readonly],
input:not([type=checkbox]):focus,
.form-control:focus {
border-bottom: none;
.box-shadow(inset 0 -2px 0 @brand-success);
}
}
// Remove the Bootstrap feedback styles for input addons
.input-group-addon {
.has-warning &, .has-error &, .has-success & {
color: @input-color;
border-color: @input-group-addon-border-color;
background-color: @input-group-addon-bg;
}
}
// Navs =======================================================================
.nav-tabs {
> li > a,
> li > a:focus {
margin-right: 0;
background-color: transparent;
border: none;
color: @navbar-default-link-color;
.box-shadow(inset 0 -1px 0 #ddd);
.transition(all 0.2s);
&:hover {
background-color: transparent;
.box-shadow(inset 0 -2px 0 @brand-primary);
color: @brand-primary;
}
}
& > li.active > a,
& > li.active > a:focus {
border: none;
.box-shadow(inset 0 -2px 0 @brand-primary);
color: @brand-primary;
&:hover {
border: none;
color: @brand-primary;
}
}
& > li.disabled > a {
.box-shadow(inset 0 -1px 0 #ddd);
}
&.nav-justified {
& > li > a,
& > li > a:hover,
& > li > a:focus,
& > .active > a,
& > .active > a:hover,
& > .active > a:focus {
border: none;
}
}
.dropdown-menu {
margin-top: 0;
}
}
.dropdown-menu {
margin-top: 0;
border: none;
.box-shadow(0 1px 4px rgba(0,0,0,.3));
}
// Indicators =================================================================
.alert {
border: none;
color: #fff;
&-success {
background-color: @brand-success;
}
&-info {
background-color: @brand-info;
}
&-warning {
background-color: @brand-warning;
}
&-danger {
background-color: @brand-danger;
}
a:not(.close),
.alert-link {
color: #fff;
font-weight: bold;
}
.close {
color: #fff;
}
}
.badge {
padding: 3px 6px 5px;
}
.progress {
position: relative;
z-index: 1;
height: 6px;
border-radius: 0;
.box-shadow(none);
&-bar {
.box-shadow(none);
&:last-child {
border-radius: 0 3px 3px 0;
}
&:last-child {
&:before {
display: block;
content: "";
position: absolute;
width: 100%;
height: 100%;
left: 0;
right: 0;
z-index: -1;
background-color: lighten(@progress-bar-bg, 35%);
}
}
&-success:last-child.progress-bar:before {
background-color: lighten(@brand-success, 35%);
}
&-info:last-child.progress-bar:before {
background-color: lighten(@brand-info, 45%);
}
&-warning:last-child.progress-bar:before {
background-color: lighten(@brand-warning, 35%);
}
&-danger:last-child.progress-bar:before {
background-color: lighten(@brand-danger, 25%);
}
}
}
// Progress bars ==============================================================
// Containers =================================================================
.close {
font-size: 34px;
font-weight: 300;
line-height: 24px;
opacity: 0.6;
.transition(all 0.2s);
&:hover {
opacity: 1;
}
}
.list-group {
&-item {
padding: 15px;
}
&-item-text {
color: @gray-light;
}
}
.well {
border-radius: 0;
.box-shadow(none);
}
.panel {
border: none;
border-radius: 2px;
.box-shadow(0 1px 4px rgba(0,0,0,.3));
&-heading {
border-bottom: none;
}
&-footer {
border-top: none;
}
}
.popover {
border: none;
.box-shadow(0 1px 4px rgba(0,0,0,.3));
}
.carousel {
&-caption {
h1, h2, h3, h4, h5, h6 {
color: inherit;
}
}
}

@ -0,0 +1,83 @@
.header {
position: relative;
background: #333;
width: 100%;
height: 200px;
margin-bottom: 50px;
font-size: 16px;
#main-page-title {
position: absolute;
left: 48px;
bottom: 17px;
color: #aaa;
font-size: 47px;
font-weight: 300;
}
#user_label {
position: absolute;
right: 30px;
bottom: 125px;
#user_dropdown {
font-size: 25px;
color: #eee;
i {
margin-top: 12px;
display: block;
}
}
}
#acp-search {
margin-top: 2px;
margin-right: 20px;
input {
padding: 10px 20px;
width: 250px;
height: 44px;
background-color: rgba(0, 0, 0, 0.2);
border-radius: 3px;
box-shadow: none;
.transition(.4s ease background-color);
&:focus {
background-color: #eee;
color: #333;
}
}
.search-match {
font-weight: 700;
color: black;
}
}
> ul {
list-style-type: none;
padding: 0px;
position: absolute;
bottom: -11px;
left: 50px;
> li {
float: left;
margin-right: 30px;
&.active {
border-bottom: 4px solid @brand-primary;
padding-bottom: 10px;
}
> a {
color: white;
text-transform: uppercase;
text-decoration: none;
outline: none;
}
}
}
}

@ -16,6 +16,12 @@ div.categories {
padding-bottom: 12px;
margin-bottom: 12px;
}
> li li:last-child {
.row {
border-bottom: 0px;
}
}
}
.stats {
@ -32,6 +38,7 @@ div.categories {
li {
min-height: @acp-line-height;
margin: @acp-base-line 0;
margin-top: 28px;
&.placeholder {
border: 1px dashed #2196F3;
@ -41,7 +48,7 @@ div.categories {
.disabled {
.icon, .header, .description {
.icon, .category-header, .description {
opacity: 0.5;
}
@ -67,7 +74,7 @@ div.categories {
float: left;
}
.header {
.category-header {
margin-top: 0;
margin-bottom: @acp-base-line;
}

@ -0,0 +1,5 @@
.group {
.current_members {
padding: 0;
}
}

@ -18,8 +18,6 @@
.tag-item {
border: solid 1px @gray-light;
border-bottom-left-radius: 5px;
border-top-left-radius: 5px;
background-color: transparent;
color: @gray-light;
padding: .2em .6em .3em;
@ -31,15 +29,14 @@
.tag-topic-count {
border: solid 1px lighten(@brand-primary, 20%);
background-color: lighten(@brand-primary, 20%);
padding: .2em .6em .3em;
padding: 6px;
font-size: 75%;
font-weight: 700;
white-space: nowrap;
border-left: none;
padding-right: 5px;
padding-left: 5px;
border-bottom-right-radius: 5px;
border-top-right-radius: 5px;
border-width: 1px 1px 2px medium;
a {
color: #FFFFFF;

@ -0,0 +1,173 @@
#mobile-menu {
display: none;
}
@media (max-width: 1200px) {
}
@media (max-width: 980px) {
body {
height: 100%;
}
.header {
height: 58px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.26);
position: fixed;
top: 0px;
z-index: 5;
#main-page-title {
bottom: -31px;
font-size: 20px;
color: #FFF;
left: 52px;
font-weight: 400;
}
#user_label {
right: 0px;
bottom: 7px;
}
#main-menu {
display: none;
}
}
#mobile-menu {
width: 31px;
background: none;
border: none;
vertical-align: 10%;
margin-right: 10px;
margin-left: -15px;
outline: none !important;
display: block;
position: absolute;
top: 22px;
left: 22px;
.bar {
width: 100%;
height: 2px;
background: #fff;
margin-bottom: 3px;
border-radius: 10px;
}
}
#menu {
background-color: #1D1F20;
background-image: linear-gradient(145deg, #1D1F20, #404348);
a {
color: #fff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
}
.menu-header-title {
font-weight: 400;
letter-spacing: 0.5px;
margin: 0;
}
.menu-section {
margin: 25px 0;
}
.menu-section-title {
text-transform: uppercase;
color: #85888d;
font-weight: 200;
font-size: 13px;
letter-spacing: 1px;
padding: 0 20px;
margin:0;
}
.menu-section-list {
padding:0;
margin: 10px 0;
list-style:none;
a {
display: block;
padding: 10px 20px;
}
a:hover {
background-color: rgba(255, 255, 255, 0.1);
text-decoration: none;
}
}
#panel {
background: white;
min-height: 100%;
padding-top: 80px;
}
.slideout-menu {
position: fixed;
left: 0;
top: 0;
bottom: 0;
right: 0;
z-index: 0;
width: 256px;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
display: none;
}
.slideout-panel {
position: relative;
z-index: 1;
}
.slideout-open,
.slideout-open body,
.slideout-open .slideout-panel {
overflow: hidden;
overflow-y: hidden !important;
}
.slideout-open .slideout-menu {
display: block;
}
html {
height: 100%;
overflow-y: hidden;
}
.slideout-open {
overflow-y: hidden;
height: 100%;
}
body {
overflow-y: scroll;
overflow-x: hidden;
}
}
@media (max-width: 768px) {
.content-header, .settings-header {
font-size: 200%;
margin-bottom: 20px;
margin-left: -2px;
}
}

@ -1,18 +0,0 @@
label {
cursor: pointer;
}
.checkbox label {
padding-left: 2px;
}
.admin {
.fa-toggle-on, .fa-toggle-off {
font-size: 21px;
vertical-align: -3px;
}
.fa-toggle-on {
color: @brand-success;
}
}

@ -0,0 +1,65 @@
#snackbar-container {
position:fixed;
left:20px;
bottom:0;
z-index:99999;
strong {
margin-right: 30px;
}
}
.snackbar {
overflow:hidden;
clear:both;
min-width:288px;
max-width:568px;
cursor:pointer;
opacity:0;
}
.snackbar.snackbar-opened {
height:auto;
opacity:1;
}
@media (max-width:767px) {
#snackbar-container {
left:0!important;
right:0;
width:100%;
strong {
display: block;
}
}
#snackbar-container .snackbar {
min-width:100%;
}
#snackbar-container [class="snackbar snackbar-opened"]~.snackbar.toast {
margin-top:20px;
}
#snackbar-container [class="snackbar snackbar-opened"] {
border-radius:0;
margin-bottom:0;
}
}
.snackbar {
background-color: #323232;
color: #FFFFFF;
font-size: 14px;
border-radius: 2px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
height: 0;
.transition(.25s ease-in-out opacity);
}
.snackbar.snackbar-opened {
padding: 10px 15px;
margin-bottom: 20px;
height: auto;
}

@ -0,0 +1,19 @@
.settings {
.row {
margin-bottom: 30px;
}
.section-content {
border-left: 3px solid @brand-primary;
ul {
list-style-type: none;
font-size: 16px;
padding-left: 20px;
}
}
[data-action="upload"][type="text"] {
width: 95%;
}
}

@ -1,32 +1,29 @@
"use strict";
/*global define, socket, app, ajaxify, utils, bootbox, Mousetrap, Hammer, RELATIVE_PATH*/
/*global componentHandler, define, socket, app, ajaxify, utils, bootbox, Mousetrap, Hammer, RELATIVE_PATH*/
(function() {
$(document).ready(function() {
setupMenu();
setupKeybindings();
if(!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
require(['admin/modules/search'], function(search) {
search.init();
});
} else {
activateMobile();
}
$(window).on('action:ajaxify.contentLoaded', function(ev, data) {
var url = data.url;
selectMenuItem(data.url);
setupHeaderMenu();
setupRestartLinks();
});
$(window).on('action:admin.settingsLoaded', setupCheckboxes);
componentHandler.upgradeDom();
});
$('[component="logout"]').on('click', app.logout);
app.alert = launchSnackbar;
$(window).resize(setupHeaderMenu);
configureSlidemenu();
});
socket.emit('admin.config.get', function(err, config) {
@ -45,27 +42,6 @@
$(window).trigger('action:config.loaded');
});
function setupMenu() {
var listElements = $('.sidebar-nav li');
listElements.on('click', function() {
var $this = $(this);
if ($this.hasClass('nav-header')) {
$this.parents('.sidebar-nav').toggleClass('open').bind('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', function (ev) {
$('.nano').nanoScroller();
});
} else {
listElements.removeClass('active');
$this.addClass('active');
}
});
$('.nano').nanoScroller();
$('#main-menu .nav-list > li a').append('<span class="pull-right"><i class="fa fa-inverse fa-arrow-circle-right"></i>&nbsp;</span>');
}
function setupKeybindings() {
Mousetrap.bind('ctrl+shift+a r', function() {
require(['admin/modules/instance'], function(instance) {
@ -84,73 +60,30 @@
});
}
function activateMobile() {
$('.admin').addClass('mobile');
$('#main-menu').addClass('transitioning');
Hammer(document.body).on('swiperight', function(e) {
$('#main-menu').addClass('open');
});
Hammer(document.body).on('swipeleft', function(e) {
$('#main-menu').removeClass('open');
});
Hammer($('#main-menu')[0]).on('swiperight', function(e) {
$('#main-menu').addClass('open');
});
Hammer($('#main-menu')[0]).on('swipeleft', function(e) {
$('#main-menu').removeClass('open');
});
$(window).on('scroll', function() {
$('#main-menu').height($(window).height() + 20);
});
}
function selectMenuItem(url) {
url = url.replace(/\/\d+$/, '');
url = url
.replace(/\/\d+$/, '')
.split('/').slice(0, 3).join('/');
// If index is requested, load the dashboard
if (url === 'admin') {
url = 'admin/general/dashboard';
}
$('#main-menu .nav-list > li').removeClass('active').each(function() {
$('#main-menu li').removeClass('active');
$('#main-menu a').removeClass('active').each(function() {
var menu = $(this),
category = menu.parents('.sidebar-nav'),
href = menu.children('a').attr('href'),
isLink = menu.attr('data-link') === '1';
if (!isLink && href && href.slice(1) === url) {
category.addClass('open');
menu.addClass('active');
modifyBreadcrumb(category.find('.nav-header').text(), menu.text());
}
});
}
function modifyBreadcrumb() {
var caret = ' <i class="fa fa-angle-right"></i> ';
$('#breadcrumbs').html(caret + Array.prototype.slice.call(arguments).join(caret));
}
href = menu.attr('href'),
isLink = menu.parent().attr('data-link') === '1';
function setupHeaderMenu() {
var env = utils.findBootstrapEnvironment();
if (!isLink && href && href === [config.relative_path, url].join('/')) {
menu
.parent().addClass('active')
.parents('.menu-item').addClass('active');
if (env !== 'lg') {
if ($('.mobile-header').length || $('#content .col-lg-9').first().height() < 2000) {
return;
$('#main-page-title').text(menu.text() + (menu.parents('.menu-item').children('a').text() === 'Settings' ? ' Settings' : ''));
}
($('#content .col-lg-3').first().clone().addClass('mobile-header'))
.insertBefore($('#content .col-lg-9').first());
} else {
$('.mobile-header').remove();
}
});
}
function setupRestartLinks() {
@ -171,37 +104,54 @@
});
}
function setupCheckboxes() {
if (ajaxify.currentPage.match(/^admin\/manage\/categories/)) {
return $('[type=checkbox]').show();
function launchSnackbar(params) {
var bar = $.snackbar({
content: "<strong>" + params.title + "</strong>" + params.message,
timeout: 3000,
htmlAllowed: true
});
if (params.clickfn) {
bar.on('click', clickfn);
}
}
$('[type=checkbox]').change(function() {
var checked = $(this).is(':checked');
function configureSlidemenu() {
var slideout = new Slideout({
'panel': document.getElementById('panel'),
'menu': document.getElementById('menu'),
'padding': 256,
'tolerance': 70
});
$(this).siblings('[class*=fa-]').toggleClass('fa-toggle-off', !checked)
.toggleClass('fa-toggle-on', checked);
$('#mobile-menu').on('click', function() {
slideout.toggle();
});
$('[type=checkbox]').each(function() {
var checkbox = $(this),
checked = checkbox.is(':checked');
$('#menu a').on('click', function() {
slideout.close();
});
if (checkbox.attr('data-toggle-added')) {
return;
}
$(window).on('resize', function() {
slideout.close();
});
checkbox.hide();
function onOpeningMenu() {
$('#header').css({
'top': $('#panel').position().top * -1 + 'px',
'position': 'absolute'
});
}
if (checked) {
checkbox.after('<i class="fa fa-toggle-on"></i>');
}
else {
checkbox.after('<i class="fa fa-toggle-off"></i>');
}
slideout.on('beforeopen', onOpeningMenu);
slideout.on('open', onOpeningMenu);
slideout.on('translate', onOpeningMenu);
checkbox.attr('data-toggle-added', true);
slideout.on('close', function() {
$('#header').css({
'top': '0px',
'position': 'fixed'
});
});
}
}());

@ -9,12 +9,12 @@ define('admin/appearance/skins', function() {
scriptEl.attr('src', '//bootswatch.aws.af.cm/3/?callback=bootswatchListener');
$('body').append(scriptEl);
$('#bootstrap_themes').on('click', function(e){
$('#skins').on('click', function(e){
var target = $(e.target),
action = target.attr('data-action');
if (action && action === 'use') {
var parentEl = target.parents('li'),
var parentEl = target.parents('[data-theme]'),
themeType = parentEl.attr('data-type'),
cssSrc = parentEl.attr('data-css'),
themeId = parentEl.attr('data-theme');
@ -59,12 +59,37 @@ define('admin/appearance/skins', function() {
showRevert: true
}, function(html) {
themeContainer.html(html);
var skin = config['theme:src']
.match(/latest\/(\S+)\/bootstrap.min.css/)[1]
.replace(/(^|\s)([a-z])/g , function(m,p1,p2){return p1+p2.toUpperCase();});
highlightSelectedTheme(skin);
});
};
function highlightSelectedTheme(themeId) {
$('.themes li[data-theme]').removeClass('btn-warning');
$('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning');
$('[data-theme]')
.removeClass('selected')
.find('[data-action="use"]').each(function() {
if ($(this).parents('[data-theme]').attr('data-theme')) {
$(this)
.html('Select Theme')
.removeClass('btn-success')
.addClass('btn-primary');
}
});
if (!themeId) {
return;
}
$('[data-theme="' + themeId + '"]')
.addClass('selected')
.find('[data-action="use"]')
.html('Current Theme')
.removeClass('btn-primary')
.addClass('btn-success');
}
return Skins;

@ -10,7 +10,7 @@ define('admin/appearance/themes', function() {
action = target.attr('data-action');
if (action && action === 'use') {
var parentEl = target.parents('li'),
var parentEl = target.parents('[data-theme]'),
themeType = parentEl.attr('data-type'),
cssSrc = parentEl.attr('data-css'),
themeId = parentEl.attr('data-theme');
@ -40,16 +40,16 @@ define('admin/appearance/themes', function() {
});
$('#revert_theme').on('click', function() {
bootbox.confirm('Are you sure you wish to remove the custom theme and restore the NodeBB default theme?', function(confirm) {
bootbox.confirm('Are you sure you wish to restore the default NodeBB theme?', function(confirm) {
if (confirm) {
socket.emit('admin.themes.set', {
type: 'local',
id: 'nodebb-theme-vanilla'
id: 'nodebb-theme-persona'
}, function(err) {
if (err) {
return app.alertError(err.message);
}
highlightSelectedTheme('nodebb-theme-vanilla');
highlightSelectedTheme('nodebb-theme-persona');
app.alert({
alert_id: 'admin:theme',
type: 'success',
@ -84,8 +84,19 @@ define('admin/appearance/themes', function() {
};
function highlightSelectedTheme(themeId) {
$('.themes li[data-theme]').removeClass('btn-warning');
$('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning');
$('[data-theme]')
.removeClass('selected')
.find('[data-action="use"]')
.html('Select Theme')
.removeClass('btn-success')
.addClass('btn-primary');
$('[data-theme="' + themeId + '"]')
.addClass('selected')
.find('[data-action="use"]')
.html('Current Theme')
.removeClass('btn-primary')
.addClass('btn-success');
}
return Themes;

@ -13,6 +13,8 @@ define('admin/extend/plugins', function() {
return;
}
$('#plugin-search').val('');
pluginsList.on('click', 'button[data-action="toggleActive"]', function() {
pluginID = $(this).parents('li').attr('data-plugin-id');
var btn = $(this);

@ -17,6 +17,13 @@ define('admin/extend/widgets', function() {
return false;
});
$('#widget-selector').on('change', function() {
$('.available-widgets [data-widget]').addClass('hide');
$('.available-widgets [data-widget="' + $(this).val() + '"]').removeClass('hide');
});
$('#widget-selector').trigger('change');
loadWidgetData();
};
@ -64,7 +71,7 @@ define('admin/extend/widgets', function() {
}
});
$('#widgets .save').on('click', saveWidgets);
$('#save').on('click', saveWidgets);
function saveWidgets() {
var total = $('#widgets [data-template][data-location]').length;

@ -63,21 +63,6 @@ define('admin/manage/category', [
});
}
function setupEditTargets() {
$('[data-edit-target]').on('click', function() {
var $this = $(this),
target = $($this.attr('data-edit-target'));
$this.addClass('hide');
target.removeClass('hide').on('blur', function() {
$this.removeClass('hide').children('span').text(this.value).html();
$(this).addClass('hide');
}).val($this.children('span').html().text());
target.focus();
});
}
// If any inputs have changed, prepare it for saving
$('form.category input, form.category select').on('change', function(ev) {
modified(ev.target);
@ -91,12 +76,11 @@ define('admin/manage/category', [
// Colour Picker
$('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker);
$('.save').on('click', save);
$('.revert').on('click', ajaxify.refresh);
$('#save').on('click', save);
$('.purge').on('click', function(e) {
e.preventDefault();
bootbox.confirm('<p class="lead">Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?</p><p><strong class="text-danger">Warning!</strong> All topics and posts in this category will be purged!</p>', function(confirm) {
bootbox.confirm('<p class="lead">Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?</p><h5><strong class="text-danger">Warning!</strong> All topics and posts in this category will be purged!</h5> <p class="help-block">Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category <em>temporarily</em>, you\'ll want to "disable" the category instead.</p>', function(confirm) {
if (!confirm) {
return;
}
@ -158,7 +142,6 @@ define('admin/manage/category', [
});
});
setupEditTargets();
Category.setupPrivilegeTable();
};

@ -50,14 +50,10 @@ define(function() {
return false;
});
$('.sidebar-nav a').each(function(idx, link) {
$('#main-menu a').each(function(idx, link) {
routes.push($(link).attr('href'));
});
input.on('blur', function() {
$(this).val('').attr('placeholder', '/');
});
input.on('keyup focus', function() {
var $input = $(this),
value = $input.val().toLowerCase(),
@ -67,8 +63,6 @@ define(function() {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
$input.attr('placeholder', '');
firstResult = null;
if (value.length >= 3) {
@ -101,15 +95,14 @@ define(function() {
}
}
if (menuItems.html() !== '') {
menuItems.append('<li role="presentation" class="divider"></li>');
} else {
if (menuItems.html() === '') {
menuItems.append('<li role="presentation"><a role="menuitem" href="#">No results...</a></li>');
}
}
if (value.length > 0) {
if (config.searchEnabled) {
menuItems.append('<li role="presentation" class="divider"></li>');
menuItems.append('<li role="presentation"><a role="menuitem" target="_top" href="' + RELATIVE_PATH + '/search/' + value + '">Search the forum for <strong>' + value + '</strong></a></li>');
} else if (value.length < 3) {
menuItems.append('<li role="presentation"><a role="menuitem" href="#">Type more to see results...</a></li>');

@ -5,7 +5,21 @@ define('admin/settings', ['uploader', 'sounds'], function(uploader, sounds) {
var Settings = {};
Settings.init = function() {
$(window).on('action:config.loaded', Settings.prepare);
if (!app.config) {
$(window).on('action:config.loaded', Settings.prepare);
} else {
Settings.prepare();
}
};
Settings.populateTOC = function() {
$('.settings-header').each(function() {
var header = $(this).text(),
anchor = header.toLowerCase().replace(/ /g, '-').trim();
$(this).prepend('<a name="' + anchor + '"></a>');
$('.section-content ul').append('<li><a href="#' + anchor + '">' + header + '</a></li>');
});
};
Settings.prepare = function(callback) {

@ -130,6 +130,49 @@ app.cacheBuster = null;
}
}
function overrideBootbox() {
var dialog = bootbox.dialog,
prompt = bootbox.prompt,
confirm = bootbox.confirm;
function translate(modal) {
translator.translate(modal.html(), function(html) {
modal.html(html);
});
}
bootbox.dialog = function() {
var modal = $(dialog.apply(this, arguments)[0]);
translate(modal);
return modal;
}
bootbox.prompt = function() {
var modal = $(prompt.apply(this, arguments)[0]);
translate(modal);
return modal;
}
bootbox.confirm = function() {
var modal = $(confirm.apply(this, arguments)[0]);
translate(modal);
return modal;
}
}
function overrideTimeago() {
var timeagoFn = $.fn.timeago;
$.fn.timeago = function() {
var els = timeagoFn.apply(this, arguments);
if (els) {
els.each(function() {
$(this).attr('title', (new Date($(this).attr('title'))).toString());
});
}
};
}
app.logout = function() {
require(['csrf'], function(csrf) {
$.ajax(RELATIVE_PATH + '/logout', {
@ -241,8 +284,6 @@ app.cacheBuster = null;
app.processPage = function () {
highlightNavigationLink();
utils.overrideTimeago();
$('.timeago').timeago();
utils.makeNumbersHumanReadable($('.human-readable-number'));
@ -491,6 +532,9 @@ app.cacheBuster = null;
if (err) {
return app.alertError(err.message);
}
categories = categories.filter(function(category) {
return !category.link && !parseInt(category.parentCid, 10);
});
if (categories.length) {
$(window).trigger('action:composer.topic.new', {
cid: categories[0].cid
@ -525,6 +569,8 @@ app.cacheBuster = null;
}
});
overrideBootbox();
overrideTimeago();
createHeaderTooltips();
app.showEmailConfirmWarning();

@ -203,19 +203,6 @@
return text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
},
overrideTimeago: function() {
var timeagoFn = $.fn.timeago;
$.fn.timeago = function() {
var els = timeagoFn.apply(this, arguments);
if (els) {
els.each(function() {
$(this).attr('title', (new Date($(this).attr('title'))).toString());
});
}
};
},
toISOString: function(timestamp) {
if (!timestamp || !Date.prototype.toISOString) {
return '';

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -1,54 +0,0 @@
/** initial setup **/
.nano {
position : relative;
width : 100%;
height : 100%;
overflow : hidden;
}
.nano > .nano-content {
position : absolute;
overflow : scroll;
overflow-x : hidden;
top : 0;
right : 0;
bottom : 0;
left : 0;
}
.nano > .nano-content:focus {
outline: thin dotted;
}
.nano > .nano-content::-webkit-scrollbar {
display: none;
}
.has-scrollbar > .nano-content::-webkit-scrollbar {
display: block;
}
.nano > .nano-pane {
background : rgba(0,0,0,.25);
position : absolute;
width : 10px;
right : 0;
top : 0;
bottom : 0;
visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
opacity : .01;
-webkit-transition : .2s;
-moz-transition : .2s;
-o-transition : .2s;
transition : .2s;
-moz-border-radius : 5px;
-webkit-border-radius : 5px;
border-radius : 5px;
}
.nano > .nano-pane > .nano-slider {
background: rgba(255, 255, 255, 0.3);
position : relative;
margin : 0 1px;
-moz-border-radius : 3px;
-webkit-border-radius : 3px;
border-radius : 3px;
}
.nano:hover > .nano-pane, .nano-pane.active, .nano-pane.flashed {
visibility : visible\9; /* Target only IE7 and IE8 with this hack */
opacity : 0.99;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,2 @@
/* SnackbarJS - MIT LICENSE (https://github.com/FezVrasta/snackbarjs/blob/master/LICENSE.md) */
!function(t){"function"==typeof define&&define.amd&&t(jQuery)}(function(t){function a(t){return"undefined"!=typeof t&&null!==t?!0:!1}t(document).ready(function(){t("body").append("<div id=snackbar-container/>")}),t(document).on("click","[data-toggle=snackbar]",function(){t(this).snackbar("toggle")}).on("click","#snackbar-container .snackbar",function(){t(this).snackbar("hide")}),t.snackbar=function(n){if(a(n)&&n===Object(n)){var e,o=!1;a(n.id)?t("#"+n.id).length?e=t("#"+n.id):(e=t("<div/>").attr("id",""+n.id).attr("class","snackbar"),o=!0):(e=t("<div/>").attr("id","snackbar"+Date.now()).attr("class","snackbar"),o=!0);var i=e.hasClass("snackbar-opened");a(n.style)?(i?e.attr("class","snackbar snackbar-opened "+n.style):e.attr("class","snackbar "+n.style),e.attr("data-style",n.style)):i?e.attr("class","snackbar snackbar-opened"):e.attr("class","snackbar"),n.htmlAllowed=a(n.htmlAllowed)?n.htmlAllowed:!1,n.timeout=a(n.timeout)?n.timeout:3e3,e.attr("data-timeout",n.timeout),n.content=n.htmlAllowed?n.content:t("<p>"+n.content+"</p>").text(),a(n.htmlAllowed)&&e.attr("data-html-allowed",n.htmlAllowed),a(n.content)&&(e.find(".snackbar-content").length?e.find(".snackbar-content").html(n.content):e.prepend("<span class=snackbar-content>"+n.content+"</span>"),e.attr("data-content",n.content)),o?e.appendTo("#snackbar-container"):e.insertAfter("#snackbar-container .snackbar:last-child"),a(n.action)&&"toggle"==n.action&&(n.action=i?"hide":"show");var s=Date.now();e.data("animationId1",s),setTimeout(function(){e.data("animationId1")===s&&(a(n.action)&&"show"!=n.action?a(n.action)&&"hide"==n.action&&e.removeClass("snackbar-opened"):e.addClass("snackbar-opened"))},50);var c=Date.now();return e.data("animationId2",c),0!==n.timeout&&setTimeout(function(){e.data("animationId2")===c&&e.removeClass("snackbar-opened")},n.timeout),e}return!1},t.fn.snackbar=function(n){if("undefined"!=typeof n){var e={};if(this.hasClass("snackbar"))return e={id:this.attr("id"),content:t(this).attr("data-content"),style:t(this).attr("data-style"),timeout:t(this).attr("data-timeout"),htmlAllowed:t(this).attr("data-html-allowed")},("show"===n||"hide"===n||"toggle"==n)&&(e.action=n),t.snackbar(e);a(n)&&"show"!==n&&"hide"!==n&&"toggle"!=n||(e={content:t(this).attr("data-content"),style:t(this).attr("data-style"),timeout:t(this).attr("data-timeout"),htmlAllowed:t(this).attr("data-html-allowed")}),a(n)&&(e.id=this.attr("data-snackbar-id"),("show"===n||"hide"===n||"toggle"==n)&&(e.action=n));var o=t.snackbar(e);return this.attr("data-snackbar-id",o.attr("id")),o}}});

@ -175,6 +175,10 @@ accountsController.getAccount = function(req, res, next) {
return next(err);
}
if (parseInt(meta.config['reputation:disabled'], 10) === 1) {
delete userData.reputation;
}
userData.posts = results.posts.posts.filter(function (p) {
return p && parseInt(p.deleted, 10) !== 1;
});

@ -58,7 +58,7 @@ function addRoutes(router, middleware, controllers) {
router.get('/manage/users/sort-posts', controllers.admin.users.sortByPosts);
router.get('/manage/users/sort-reputation', controllers.admin.users.sortByReputation);
router.get('/manage/users/banned', controllers.admin.users.banned);
router.get('/manage/users/registration', controllers.admin.users.registrationQueue);
router.get('/manage/registration', controllers.admin.users.registrationQueue);
router.get('/manage/groups', controllers.admin.groups.list);
router.get('/manage/groups/:name', controllers.admin.groups.get);

@ -310,7 +310,8 @@ SocketUser.follow = function(socket, data, callback) {
notifications.create({
bodyShort: '[[notifications:user_started_following_you, ' + userData.username + ']]',
nid: 'follow:' + data.uid + ':uid:' + socket.uid,
from: socket.uid
from: socket.uid,
path: '/user/' + userData.userslug
}, next);
},
function(notification, next) {

@ -48,7 +48,7 @@ module.exports = function(User) {
notifications.create({
bodyShort: '[[notifications:new_register, ' + username + ']]',
nid: 'new_register:' + username,
path: '/admin/manage/users/registration'
path: '/admin/manage/registration'
}, function(err, notification) {
if (err) {
return callback(err);
@ -157,6 +157,9 @@ module.exports = function(User) {
return next(null, user);
}
// temporary: see http://www.stopforumspam.com/forum/viewtopic.php?id=6392
user.ip = user.ip.replace('::ffff:', '');
request('http://api.stopforumspam.org/api?ip=' + user.ip + '&email=' + user.email + '&username=' + user.username + '&f=json', function (err, response, body) {
if (err) {
return next(null, user);

@ -1,7 +1,11 @@
<div id="customise" class="customise">
<div class="panel panel-default">
<div class="panel-heading">Custom CSS</div>
<div class="panel-body">
<ul class="nav nav-pills">
<li class="active"><a href="#custom-css" data-toggle="tab">Custom CSS</a></li>
<li><a href="#custom-header" data-toggle="tab">Custom Header</a></li>
</ul>
<br />
<div class="tab-content">
<div class="tab-pane fade active in" id="custom-css">
<p>
Enter your own CSS declarations here, which will be applied after all other styles.
</p>
@ -11,18 +15,14 @@
<br />
<form class="form">
<div class="form-group">
<label for="useCustomCSS">
Use Custom CSS?
<input id="useCustomCSS" type="checkbox" data-field="useCustomCSS" />
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="useCustomCSS">
<input class="mdl-switch__input" id="useCustomCSS" type="checkbox" data-field="useCustomCSS" />
<span class="mdl-switch__label">Enable Custom CSS</span>
</label>
</div>
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Custom Header</div>
<div class="panel-body">
<div class="tab-pane fade" id="custom-header">
<p>
Enter custom HTML here (ex. JavaScript, Meta Tags, etc.), which will be appended to the <code>&lt;head&gt;</code> section of your forum's markup.
</p>
@ -33,14 +33,16 @@
<br />
<form class="form">
<div class="form-group">
<label for="useCustomJS">
Use Custom Header?
<input id="useCustomJS" type="checkbox" data-field="useCustomJS" />
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="useCustomJS">
<input class="mdl-switch__input" id="useCustomJS" type="checkbox" data-field="useCustomJS" />
<span class="mdl-switch__label">Enable Custom Header</span>
</label>
</div>
</form>
</div>
</div>
</div>
<button class="btn btn-primary" id="save">Save</button>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -1,25 +1,12 @@
<div id="skins" class="row skins">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading">Bootswatch Themes</div>
<div class="panel-body">
<p>
NodeBB's skins are powered by Bootswatch, a repository containing themes built with Bootstrap as a base theme. Currently, the Vanilla theme is best optimized for use with Bootswatch.
</p>
<ul class="directory" id="bootstrap_themes">
<li><i class="fa fa-refresh fa-spin"></i> Loading Themes</li>
</ul>
</div>
</div>
<div class="directory row" id="bootstrap_themes">
<i class="fa fa-refresh fa-spin"></i> Loading Themes
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Revert to Default</div>
<div class="panel-body">
<p>This will remove any custom Bootswatch skin applied to your NodeBB, and restore the base theme.</p>
<button class="btn btn-warning btn-md" id="revert_theme">Revert to Default</button>
</div>
</div>
<div data-type="bootswatch" data-theme="" data-css="">
<button data-action="use" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">undo</i>
</button>
</div>
</div>

@ -1,14 +1,9 @@
<div id="themes" class="themes">
<div class="panel panel-default">
<div class="panel-heading">Installed Themes</div>
<div class="panel-body">
<p>
The following themes are currently installed on your forum.
</p>
<ul class="directory" id="installed_themes">
<li><i class="fa fa-refresh fa-spin"></i> Checking for installed themes...</li>
</ul>
</div>
<div class="directory row" id="installed_themes">
<i class="fa fa-refresh fa-spin"></i> Checking for installed themes...
</div>
</div>
</div>
<button id="revert_theme" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">undo</i>
</button>

@ -1,24 +1,27 @@
<div class="plugins">
<ul class="nav nav-pills">
<li class="active"><a href="#installed" data-toggle="tab">Installed Plugins</a></li>
<li><a href="#download" data-toggle="tab">Download Plugins</a></li>
</ul>
<br />
<div class="plugins row">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-code-fork"></i> Installed Plugins</div>
<div class="panel-body">
<div class="tab-content">
<div class="tab-pane fade active in" id="installed">
<ul class="installed">
<!-- BEGIN installed -->
<!-- IMPORT admin/partials/installed_plugin_item.tpl -->
<!-- END installed -->
</ul>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-code-fork"></i> Download Plugins</div>
<div class="panel-body">
<ul class="download">
<!-- BEGIN download -->
<!-- IMPORT admin/partials/download_plugin_item.tpl -->
<!-- END download -->
</ul>
<div class="tab-pane fade" id="download">
<div class="panel-body">
<ul class="download">
<!-- BEGIN download -->
<!-- IMPORT admin/partials/download_plugin_item.tpl -->
<!-- END download -->
</ul>
</div>
</div>
</div>
</div>
@ -35,9 +38,6 @@
<div class="panel-heading">Re-order Plugins</div>
<div class="panel-body">
<button class="btn btn-default btn-block" id="plugin-order"><i class="fa fa-exchange"></i> Order Active Plugins</button>
<p class="help-block">
Certain plugins work ideally when they are initialised before/after other plugins. You can alter this loading behaviour here.
</p>
</div>
</div>
@ -60,10 +60,13 @@
<h4 class="modal-title">Order Active Plugins</h4>
</div>
<div class="modal-body">
<p>Plugins load in the order specified here, from top to bottom</p>
<ul class="plugin-list">
</ul>
<p>
Certain plugins work ideally when they are initialised before/after other plugins.
</p>
<p>
Plugins load in the order specified here, from top to bottom
</p>
<ul class="plugin-list"></ul>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

@ -1,33 +1,26 @@
<div id="widgets">
<div id="widgets" class="row">
<div class="col-md-7">
<div class="panel panel-default">
<div class="panel-heading">Widget Areas</div>
<div class="panel-body">
<ul class="nav nav-pills">
<!-- BEGIN templates -->
<li class="<!-- IF @first -->active<!-- ENDIF @first -->"><a href="#" data-template="{../template}" data-toggle="pill">{../template}</a></li>
<!-- END templates -->
</ul>
<ul class="nav nav-pills">
<div class="row">
<div class="col-xs-12">
<div class="tab-content">
<!-- BEGIN templates -->
<li class="<!-- IF @first -->active<!-- ENDIF @first -->"><a href="#" data-template="{../template}" data-toggle="pill">{../template}</a></li>
<!-- END templates -->
</ul>
<div class="row">
<div class="col-xs-12">
<div class="tab-content">
<!-- BEGIN templates -->
<div class="tab-pane <!-- IF @first -->active<!-- ENDIF @first -->" data-template="{../template}">
<!-- BEGIN areas -->
<div class="area" data-template="{templates.template}" data-location="{../location}">
<h4>{../name} <small>{templates.template} / {../location}</small></h4>
<div class="well widget-area">
<div class="tab-pane <!-- IF @first -->active<!-- ENDIF @first -->" data-template="{../template}">
<!-- BEGIN areas -->
<div class="area" data-template="{templates.template}" data-location="{../location}">
<h4>{../name} <small>{templates.template} / {../location}</small></h4>
<div class="well widget-area">
</div>
</div>
<!-- END areas -->
</div>
<!-- END templates -->
</div>
<button class="btn btn-success save pull-right">Save</button>
<!-- END areas -->
</div>
<!-- END templates -->
</div>
</div>
</div>
@ -38,14 +31,21 @@
<div class="panel-heading">Available Widgets</div>
<div class="panel-body">
<div class="available-widgets">
<p>Drag and drop widgets into templates</p>
<p>Select a widget and then drag and drop it into a template's widget area on the left.</p>
<!-- IF !widgets.length -->
<div class="alert alert-info">No widgets found! Activate the essential widgets plugin in the <a href="/admin/extend/plugins">plugins</a> control panel.</div>
<!-- ENDIF !widgets.length -->
<p>
<select id="widget-selector" class="form-control">
<!-- BEGIN widgets -->
<option value="{widgets.widget}">{widgets.name}</option>
<!-- END widgets -->
</select>
</p>
<div class="row">
<!-- BEGIN widgets -->
<div class="col-md-6 col-sm-12">
<div data-widget="{widgets.widget}" class="panel widget-panel panel-default pointer">
<div class="col-xs-12">
<div data-widget="{widgets.widget}" class="panel widget-panel panel-default pointer hide">
<div class="panel-heading">
<strong>{widgets.name}</strong>
<small><br />{widgets.description}</small>
@ -67,7 +67,6 @@
<div class="panel-body">
<p>Drag and drop on top of any active widget</p>
<div class="available-containers">
<h4>Available Containers <small>Drag and drop on top of any widget</small></h4>
<div class="containers">
<div class="pointer" style="padding: 20px; border: 1px dotted #dedede; margin-bottom: 20px;" data-container-html=" ">
None
@ -114,4 +113,8 @@
</div>
</div>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -1,4 +1,4 @@
</div>
</div>
</div>

@ -1,28 +1,25 @@
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading">Home Page</div>
<div class="panel-body">
<form>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Home Page</div>
<div class="col-sm-10 col-xs-12">
<p>
Choose what page is shown when users navigate to the root URL of your forum.
</p>
<form class="row">
<div class="col-xs-6">
<label>Home Page Route</label>
<select class="form-control" data-field="homePageRoute">
<!-- BEGIN routes -->
<option value="{routes.route}">{routes.name}</option>
<!-- END routes -->
</select>
</form>
</div>
</div>
</form>
</div>
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Save Settings</div>
<div class="panel-body">
<button class="btn btn-primary btn-md" id="save">Save Changes</button>
<button class="btn btn-warning btn-md" id="revert">Revert Changes</button>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>
<script>
require(['admin/settings'], function(Settings) {

@ -1,38 +1,27 @@
<div class="languages">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading">Language Settings</div>
<div class="panel-body">
<p>
The default language determines the language settings for all users who
are visiting your forum. <br />
Individual users can override the default language on their account settings page.
</p>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Language Settings</div>
<div class="col-sm-10 col-xs-12">
<p>
The default language determines the language settings for all users who
are visiting your forum. <br />
Individual users can override the default language on their account settings page.
</p>
<form class="row">
<div class="form-group col-sm-6">
<label for="defaultLang">Default Language</label>
<select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages -->
</select>
</div>
</form>
</div>
</div>
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Languages Control Panel</div>
<div class="panel-body">
<button class="btn btn-primary" id="save">Save Language Settings</button>
</div>
<form class="row">
<div class="form-group col-sm-6">
<label for="defaultLang">Default Language</label>
<select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages -->
</select>
</div>
</form>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -1,5 +1,5 @@
<div id="navigation">
<div class="col-lg-6">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading">Active Navigation</div>
<div class="panel-body">
@ -87,13 +87,8 @@
</div>
</div>
</div>
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Navigation Control</div>
<div class="panel-body">
<button class="btn btn-primary btn-md" id="save">Save Changes</button>
</div>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -1,69 +1,62 @@
<div class="sounds" class="row">
<div class="col-lg-9">
<form role="form">
<div class="panel panel-default">
<div class="panel-heading">General</div>
<div class="panel-body">
<label for="notification">Notifications</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="notification" name="notification">
<option value=""></option>
<!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds -->
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
</div>
<div class="sounds settings" class="row">
<form role="form">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Notifications</div>
<div class="col-sm-10 col-xs-12">
<label for="notification">Notifications</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="notification" name="notification">
<option value=""></option>
<!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds -->
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Chat</div>
<div class="panel-body">
<label for="chat-incoming">Incoming Message</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="chat-incoming" name="chat-incoming">
<option value=""></option>
<!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds -->
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Chat Messages</div>
<div class="col-sm-10 col-xs-12">
<label for="chat-incoming">Incoming Message</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="chat-incoming" name="chat-incoming">
<option value=""></option>
<!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds -->
</select>
</div>
<label for="chat-outgoing">Outgoing Message</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="chat-outgoing" name="chat-outgoing">
<option value=""></option>
<!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds -->
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
</div>
</div>
</div>
</form>
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Sounds Control Panel</div>
<div class="panel-body">
<button class="btn btn-primary" id="save">Save Sound Settings</button>
<label for="chat-outgoing">Outgoing Message</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="chat-outgoing" name="chat-outgoing">
<option value=""></option>
<!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds -->
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -5,8 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{relative_path}/vendor/jquery/css/smoothness/jquery-ui-1.10.4.custom.min.css?{cache-buster}">
<link rel="stylesheet" type="text/css" href="{relative_path}/vendor/nanoscroller/nanoscroller.css?{cache-buster}">
<link rel="stylesheet" type="text/css" href="{relative_path}/admin.css?{cache-buster}" />
<link rel="stylesheet" type="text/css" href="{relative_path}/vendor/mdl/mdl.min.css?{cache-buster}" />
<link rel="stylesheet" type="text/css" href="{relative_path}/vendor/snackbar/snackbar.min.css?{cache-buster}" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<script>
var RELATIVE_PATH = "{relative_path}";
@ -24,6 +26,7 @@
<script>__lt_ie_9__ = 1;</script>
<![endif]-->
<script src="https://storage.googleapis.com/code.getmdl.io/1.0.3/material.min.js"></script>
<script type="text/javascript" src="{relative_path}/vendor/chart.js/chart.min.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/hammer/hammer.min.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/jquery/sortable/Sortable.js?{cache-buster}"></script>
@ -45,7 +48,6 @@
<script type="text/javascript" src="{relative_path}/vendor/colorpicker/colorpicker.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/src/admin/admin.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/ace/ace.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/nanoscroller/nanoscroller.min.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/jquery/event/jquery.event.drag.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/jquery/event/jquery.event.drop.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/semver/semver.browser.js?{cache-buster}"></script>
@ -53,6 +55,8 @@
<script type="text/javascript" src="{relative_path}/vendor/jquery/deserialize/jquery.deserialize.min.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/mousetrap/mousetrap.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/jquery/js/jquery-ui-1.10.4.custom.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/snackbar/snackbar.min.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/slideout/slideout.min.js?{cache-buster}"></script>
<!-- BEGIN scripts -->
<script type="text/javascript" src="{scripts.src}"></script>
@ -60,99 +64,5 @@
</head>
<body class="admin">
<nav class="navbar navbar-inverse navbar-fixed-top header">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand nodebb-logo" href="{relative_path}/admin/general/dashboard"><img src="{relative_path}/images/logo.png" alt="NodeBB ACP" /> Admin Control Panel <span id="breadcrumbs" class="hidden-xs"></span></a>
<ul class="nav navbar-nav pull-left">
<li>
<a href="#" id="reconnect"></a>
</li>
</ul>
</div>
<div class="navbar-collapse collapse">
<ul id="logged-in-menu" class="navbar-nav nav navbar-right">
<li class="hidden-lg hidden-md hidden-sm">
<a href="{relative_path}/" target="_blank" title="View Forum">
View Forum
</a>
</li>
<li class="hidden-lg hidden-md hidden-sm">
<a id="user-profile-link" href="{relative_path}/user/{user.userslug}" target="_top">
View Profile
</a>
</li>
<li role="presentation" class="hidden-lg hidden-md hidden-sm divider"></li>
<li class="hidden-lg hidden-md hidden-sm">
<a href="#" class="reload" title="Reload Forum">
Reload Forum
</a>
</li>
<li class="hidden-lg hidden-md hidden-sm">
<a href="#" class="restart" title="Restart Forum">
Restart Forum
</a>
</li>
<li role="presentation" class="hidden-lg hidden-md hidden-sm divider"></li>
<li component="logout" class="hidden-lg hidden-md hidden-sm">
<a href="#">Log out</a>
</li>
<li style="float:left;">
<form class="navbar-form hidden-xs" role="search">
<div class="form-group" id="acp-search" >
<div class="dropdown" >
<input type="text" data-toggle="dropdown" class="form-control" placeholder="/">
<ul class="dropdown-menu" role="menu"></ul>
</div>
</div>
</form>
</li>
<li id="user_label" class="dropdown pull-right hidden-xs">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="user_dropdown">
<img src="{user.picture}"/>
</a>
<ul id="user-control-list" class="dropdown-menu" aria-labelledby="user_dropdown">
<li>
<a href="{relative_path}/" target="_blank" title="View Forum">
View Forum
</a>
</li>
<li>
<a id="user-profile-link" href="{relative_path}/user/{user.userslug}" target="_top">
View Profile
</a>
</li>
<li role="presentation" class="divider"></li>
<li>
<a href="#" class="reload" title="Reload Forum">
Reload Forum
</a>
</li>
<li>
<a href="#" class="restart" title="Restart Forum">
Restart Forum
</a>
</li>
<li role="presentation" class="divider"></li>
<li component="logout">
<a href="#">Log out</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="wrapper">
<div id="main-menu" class="nano">
<div class="nano-content">
<!-- IMPORT admin/partials/menu.tpl -->
</div>
</div>
<div class="col-sm-12" id="content">
<!-- IMPORT admin/partials/menu.tpl -->
<div class="container" id="content">

@ -1,20 +1,5 @@
<div class="row">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-folder"></i> Categories</div>
<div class="panel-body">
<div class="categories"></div>
</div>
</div>
</div>
<div class="categories"></div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Categories Control Panel</div>
<div class="panel-body">
<button type="button" class="btn btn-primary btn-block" data-action="create">Create New Category
</button>
</div>
</div>
</div>
</div>
<button data-action="create" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">add</i>
</button>

@ -1,143 +1,134 @@
<div class="row">
<form role="form" class="category" data-cid="{category.cid}">
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-folder"></i> Category Settings</div>
<div class="panel-body category-settings-form">
<fieldset>
<div class="col-xs-12">
<h3 data-edit-target="#cid-{category.cid}-name"><span>{category.name}</span> <small><i class="fa fa-edit"></i></small></h3>
<input id="cid-{category.cid}-name" type="text" class="form-control hide" placeholder="Category Name" data-name="name" value="{category.name}" />
<h4 data-edit-target="#cid-{category.cid}-description"><span>{category.description}</span> <small><i class="fa fa-edit"></i></small></h4>
<input id="cid-{category.cid}-description" data-name="description" placeholder="Category Description" value="{category.description}" class="form-control category_description input-sm description hide"></input>
</div>
</fieldset>
<ul class="nav nav-pills">
<li class="active"><a href="#category-settings" data-toggle="tab">Category Settings</a></li>
<li><a href="#privileges" data-toggle="tab">Privileges</a></li>
</ul>
<br />
<div class="tab-content">
<div class="tab-pane fade active in row" id="category-settings">
<div class="col-md-9">
<div class="category-settings-form">
<fieldset>
<label for="cid-{category.cid}-name">Category Name</label>
<input id="cid-{category.cid}-name" type="text" class="form-control" placeholder="Category Name" data-name="name" value="{category.name}" /><br />
<label for="cid-{category.cid}-description">Category Description</label>
<input id="cid-{category.cid}-description" data-name="description" placeholder="Category Description" value="{category.description}" class="form-control category_description description"></input><br />
</fieldset>
<fieldset>
<div class="col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-parentCid">Parent Category</label>
<br/>
<div class="btn-group <!-- IF !category.parent.name -->hide<!-- ENDIF !category.parent.name-->">
<button type="button" class="btn btn-default" data-action="changeParent" data-parentCid="{category.parent.cid}"><i class="fa {category.parent.icon}"></i> {category.parent.name}</button>
<button type="button" class="btn btn-warning" data-action="removeParent" data-parentCid="{category.parent.cid}"><i class="fa fa-times"></i></button>
<fieldset class="row">
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-bgColor">Background Colour</label>
<input id="cid-{category.cid}-bgColor" placeholder="#0059b2" data-name="bgColor" value="{category.bgColor}" class="form-control category_bgColor" />
</div>
<button type="button" class="btn btn-default form-control <!-- IF category.parent.name -->hide<!-- ENDIF category.parent.name-->" data-action="setParent"><i class="fa fa-sitemap"></i> (None)</button>
</div>
</div>
</fieldset>
<fieldset>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-bgColor">Background Colour</label>
<input id="cid-{category.cid}-bgColor" placeholder="#0059b2" data-name="bgColor" value="{category.bgColor}" class="form-control category_bgColor" />
</div>
</div>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-color">Text Colour</label>
<input id="cid-{category.cid}-color" placeholder="#fff" data-name="color" value="{category.color}" class="form-control category_color" />
</div>
</div>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-imageClass">Background Image Size</label>
<select id="cid-{category.cid}-imageClass" class="form-control" data-name="imageClass" data-value="{category.imageClass}">
<option value="auto">auto</option>
<option value="cover">cover</option>
<option value="contain">contain</option>
</select>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-color">Text Colour</label>
<input id="cid-{category.cid}-color" placeholder="#fff" data-name="color" value="{category.color}" class="form-control category_color" />
</div>
</div>
</div>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-class">Custom Class</label>
<input id="cid-{category.cid}-class" type="text" class="form-control" placeholder="col-md-6 col-xs-6" data-name="class" value="{category.class}" />
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-imageClass">Background Image Size</label>
<select id="cid-{category.cid}-imageClass" class="form-control" data-name="imageClass" data-value="{category.imageClass}">
<option value="auto">auto</option>
<option value="cover">cover</option>
<option value="contain">contain</option>
</select>
</div>
</div><br />
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-class">Custom Class</label>
<input id="cid-{category.cid}-class" type="text" class="form-control" placeholder="col-md-6 col-xs-6" data-name="class" value="{category.class}" />
</div>
</div>
</div>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-numRecentReplies"># of Recent Replies</label>
<input id="cid-{category.cid}-numRecentReplies" type="text" class="form-control" placeholder="2" data-name="numRecentReplies" value="{category.numRecentReplies}" />
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-numRecentReplies"># of Recent Replies</label>
<input id="cid-{category.cid}-numRecentReplies" type="text" class="form-control" placeholder="2" data-name="numRecentReplies" value="{category.numRecentReplies}" />
</div>
</div>
</div>
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-link">External Link</label>
<input id="cid-{category.cid}-link" type="text" class="form-control" placeholder="http://domain.com" data-name="link" value="{category.link}" />
<div class="col-sm-4 col-xs-12">
<div class="form-group">
<label for="cid-{category.cid}-link">External Link</label>
<input id="cid-{category.cid}-link" type="text" class="form-control" placeholder="http://domain.com" data-name="link" value="{category.link}" />
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-key"></i> Privileges / Access Control</div>
<div class="panel-body">
<p>
You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or
a per-group basis. You can add a new user to this table by searching for them in the form below.
</p>
<p class="text-warning">
<strong>Note</strong>: Privilege settings take effect immediately. It is not necessary to save the category after adjusting
these settings.
</p>
<hr />
<div class="privilege-table-container">
<!-- IMPORT admin/partials/categories/privileges.tpl -->
</fieldset>
</div>
</div>
</div>
</div>
<div class="col-md-3 options acp-sidebar">
<div class="panel panel-default hidden-sm">
<div class="panel-heading">Preview</div>
<div class="panel-body">
<div class="category-preview" style="
<!-- IF category.backgroundImage -->background-image: url({category.backgroundImage});<!-- ENDIF category.backgroundImage -->
<!-- IF category.bgColor -->background-color: {category.bgColor};<!-- ENDIF category.bgColor -->
<!-- IF category.imageClass -->background-size: {category.imageClass};<!-- ENDIF category.imageClass -->
color: {category.color};
">
<div class="icon">
<i data-name="icon" value="{category.icon}" class="fa {category.icon} fa-2x"></i>
</div>
</div>
<div class="btn-group btn-group-justified">
<div class="btn-group">
<button type="button" data-cid="{category.cid}" data-name="image" data-value="{category.image}" class="btn btn-default upload-button"><i class="fa fa-upload"></i> Upload</button>
</div>
<!-- IF category.image -->
<div class="btn-group">
<button class="btn btn-warning delete-image"><i data-name="icon" value="fa-times" class="fa fa-times"></i> Remove</button>
<div class="col-md-3 options acp-sidebar">
<div class="panel panel-default">
<div class="panel-body">
<div class="category-preview" style="
<!-- IF category.backgroundImage -->background-image: url({category.backgroundImage});<!-- ENDIF category.backgroundImage -->
<!-- IF category.bgColor -->background-color: {category.bgColor};<!-- ENDIF category.bgColor -->
<!-- IF category.imageClass -->background-size: {category.imageClass};<!-- ENDIF category.imageClass -->
color: {category.color};
">
<div class="icon">
<i data-name="icon" value="{category.icon}" class="fa {category.icon} fa-2x"></i>
</div>
</div>
<div class="btn-group btn-group-justified">
<div class="btn-group">
<button type="button" data-cid="{category.cid}" data-name="image" data-value="{category.image}" class="btn btn-default upload-button"><i class="fa fa-upload"></i> Upload</button>
</div>
<!-- IF category.image -->
<div class="btn-group">
<button class="btn btn-warning delete-image"><i data-name="icon" value="fa-times" class="fa fa-times"></i> Remove</button>
</div>
<!-- ENDIF category.image -->
</div><br />
<fieldset>
<div class="form-group text-center">
<label for="cid-{category.cid}-parentCid">Parent Category</label>
<br/>
<div class="btn-group <!-- IF !category.parent.name -->hide<!-- ENDIF !category.parent.name-->">
<button type="button" class="btn btn-default" data-action="changeParent" data-parentCid="{category.parent.cid}"><i class="fa {category.parent.icon}"></i> {category.parent.name}</button>
<button type="button" class="btn btn-warning" data-action="removeParent" data-parentCid="{category.parent.cid}"><i class="fa fa-times"></i></button>
</div>
<button type="button" class="btn btn-default btn-block <!-- IF category.parent.name -->hide<!-- ENDIF category.parent.name-->" data-action="setParent"><i class="fa fa-sitemap"></i> (None)</button>
</div>
</fieldset>
<hr />
<button class="btn btn-danger btn-block purge"><i class="fa fa-eraser"></i> Purge Category</button>
</div>
<!-- ENDIF category.image -->
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Categories Control Panel</div>
<div class="panel-body">
<div class="btn-group btn-group-justified">
<div class="btn-group">
<button class="btn btn-primary save">Save</button>
</div>
<div class="btn-group">
<button class="btn btn-default revert">Revert</button>
<div class="tab-pane fade col-xs-12" id="privileges">
<div class="panel panel-default">
<div class="panel-body">
<p>
You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or
a per-group basis. You can add a new user to this table by searching for them in the form below.
</p>
<p class="text-warning">
<strong>Note</strong>: Privilege settings take effect immediately. It is not necessary to save the category after adjusting
these settings.
</p>
<hr />
<div class="privilege-table-container">
<!-- IMPORT admin/partials/categories/privileges.tpl -->
</div>
</div>
<hr />
<button class="btn btn-danger btn-block btn-xs purge"><i class="fa fa-eraser"></i> Purge Category</button>
<p class="help-block">
Purging a category will remove all topics and posts, and delete the category from the database. If you want to
remove a category <em>temporarily</em>, you'll want to "disable" the category instead.
</p>
</div>
</div>
</div>
</form>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>
<input type="hidden" template-variable="cid" value="{category.cid}" />

@ -1,73 +1,72 @@
<div class="flags">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-flag"></i> Flags</div>
<div class="panel-body" data-next="{next}">
<form id="flag-search" method="GET" action="flags">
<div class="form-group">
<div class="row">
<div class="col-md-6">
<label>Flags by user</label>
<input type="text" class="form-control" id="byUsername" placeholder="Search flagged posts by username" name="byUsername" value="{byUsername}">
</div>
<div data-next="{next}">
<form id="flag-search" method="GET" action="flags">
<div class="form-group">
<div class="row">
<div class="col-md-6">
<label>Flags by user</label>
<input type="text" class="form-control" id="byUsername" placeholder="Search flagged posts by username" name="byUsername" value="{byUsername}">
</div>
</div>
</div>
<div class="form-group">
<label>Sort By</label>
<div class="row">
<div class="col-md-6">
<select id="flag-sort-by" class="form-control" name="sortBy">
<option value="count">Most Flags</option>
<option value="time">Most Recent</option>
</select>
</div>
<div class="form-group">
<label>Sort By</label>
<div class="row">
<div class="col-md-6">
<select id="flag-sort-by" class="form-control" name="sortBy">
<option value="count">Most Flags</option>
<option value="time">Most Recent</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-default">[[global:search]]</button>
</form>
<hr/>
<button type="submit" class="btn btn-primary">[[global:search]]</button>
</form>
<br />
<hr/>
<div class="post-container" data-next="{next}">
<!-- IF !posts.length -->
No flagged posts!
<!-- ENDIF !posts.length-->
<div class="post-container" data-next="{next}">
<!-- IF !posts.length -->
No flagged posts!
<!-- ENDIF !posts.length-->
<!-- BEGIN posts -->
<div>
<div class="panel panel-default" data-pid="{posts.pid}" data-tid="{posts.topic.tid}">
<div class="panel-body">
<a href="{config.relative_path}/user/{posts.user.userslug}">
<img title="{posts.user.username}" class="img-rounded user-img" src="{posts.user.picture}">
</a>
<!-- BEGIN posts -->
<div>
<div class="panel panel-default" data-pid="{posts.pid}" data-tid="{posts.topic.tid}">
<div class="panel-body">
<a href="{config.relative_path}/user/{posts.user.userslug}">
<img title="{posts.user.username}" class="img-rounded user-img" src="{posts.user.picture}">
</a>
<a href="{config.relative_path}/user/{posts.user.userslug}">
<strong><span>{posts.user.username}</span></strong>
</a>
<div class="content">
<p>{posts.content}</p>
<p class="fade-out"></p>
</div>
<small>
<span class="pull-right">
Posted in <a href="{config.relative_path}/category/{posts.category.slug}" target="_blank"><i class="fa {posts.category.icon}"></i> {posts.category.name}</a>, <span class="timeago" title="{posts.relativeTime}"></span> &bull;
<a href="{config.relative_path}/topic/{posts.topic.slug}/{posts.index}" target="_blank">Read More</a>
</span>
</small>
<a href="{config.relative_path}/user/{posts.user.userslug}">
<strong><span>{posts.user.username}</span></strong>
</a>
<div class="content">
<p>{posts.content}</p>
<p class="fade-out"></p>
</div>
<small>
<span class="pull-right">
Posted in <a href="{config.relative_path}/category/{posts.category.slug}" target="_blank"><i class="fa {posts.category.icon}"></i> {posts.category.name}</a>, <span class="timeago" title="{posts.relativeTime}"></span> &bull;
<a href="{config.relative_path}/topic/{posts.topic.slug}/{posts.index}" target="_blank">Read More</a>
</span>
</small>
</div>
<span class="badge badge-warning"><i class="fa fa-flag"></i> {posts.flags}</span>
<button class="btn btn-warning dismiss">Dismiss</button>
<button class="btn btn-danger delete">Delete</button>
<br/><br/>
</div>
<!-- END posts -->
<span class="badge badge-warning"><i class="fa fa-flag"></i> {posts.flags}</span>
<button class="btn btn-warning dismiss">Dismiss</button>
<button class="btn btn-danger delete">Delete</button>
<br/><br/>
</div>
<!-- END posts -->
</div>
</div>
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Flags Control Panel</div>

@ -1,97 +1,78 @@
<div class="row">
<form role="form" class="group" data-groupname="{group.displayName}">
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-folder"></i> Group Settings</div>
<div class="panel-body group-settings-form">
<div class="group-settings-form">
<fieldset>
<div class="col-xs-12">
<label for="change-group-name">Name</label>
<input type="text" class="form-control" id="change-group-name" placeholder="Group Name" value="{group.displayName}" <!-- IF group.system -->readonly<!-- ENDIF group.system -->/>
</div>
<label for="change-group-name">Name</label>
<input type="text" class="form-control" id="change-group-name" placeholder="Group Name" value="{group.displayName}" <!-- IF group.system -->readonly<!-- ENDIF group.system -->/><br />
</fieldset>
<fieldset>
<div class="col-xs-12">
<label for="change-group-desc">Description</label>
<input type="text" class="form-control" id="change-group-desc" placeholder="A short description about your group" value="{group.description}" />
</div>
<label for="change-group-desc">Description</label>
<input type="text" class="form-control" id="change-group-desc" placeholder="A short description about your group" value="{group.description}" /><br />
</fieldset>
<fieldset>
<div class="col-xs-12">
<label for="change-group-user-title">Title of Members</label>
<input type="text" class="form-control" id="change-group-user-title" placeholder="The title of users if they are a member of this group" value="{group.userTitle}"/>
</div>
<label for="change-group-user-title">Title of Members</label>
<input type="text" class="form-control" id="change-group-user-title" placeholder="The title of users if they are a member of this group" value="{group.userTitle}"/><br />
</fieldset>
<fieldset>
<div class="col-xs-12">
<label for="change-group-icon">Group Icon</label><br/>
<i id="group-icon" class="fa fa-2x <!-- IF group.icon -->{group.icon}<!-- ELSE -->fa-shield<!-- ENDIF group.icon -->" value="{group.icon}"></i>
</div>
<label for="change-group-icon">Group Icon</label><br/>
<i id="group-icon" class="fa fa-2x <!-- IF group.icon -->{group.icon}<!-- ELSE -->fa-shield<!-- ENDIF group.icon -->" value="{group.icon}"></i><br />
</fieldset>
<fieldset>
<div class="col-xs-12">
<label for="change-group-label-color">Group Label Color</label>
<span id="group-label-preview" class="label label-default" style="background:<!-- IF group.labelColor -->{group.labelColor}<!-- ELSE -->#000000<!-- ENDIF group.labelColor -->;">{group.userTitle}</span>
<input id="change-group-label-color" placeholder="#0059b2" data-name="bgColor" value="{group.labelColor}" class="form-control" />
</div>
<label for="change-group-label-color">Group Label Color</label>
<span id="group-label-preview" class="label label-default" style="background:<!-- IF group.labelColor -->{group.labelColor}<!-- ELSE -->#000000<!-- ENDIF group.labelColor -->;">{group.userTitle}</span>
<input id="change-group-label-color" placeholder="#0059b2" data-name="bgColor" value="{group.labelColor}" class="form-control" /><br />
</fieldset>
<fieldset>
<div class="col-xs-12">
<div class="checkbox">
<label>
<input id="group-private" name="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private-->> <strong>[[groups:details.private]]</strong>
<p class="help-block">
[[groups:details.private_help]]
</p>
</label>
</div>
<div class="checkbox">
<label>
<input id="group-private" name="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private-->> <strong>[[groups:details.private]]</strong>
<p class="help-block">
[[groups:details.private_help]]
</p>
</label>
</div>
</fieldset>
<fieldset>
<div class="col-xs-12">
<div class="checkbox">
<label>
<input id="group-hidden" name="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden-->> <strong>[[groups:details.hidden]]</strong>
<p class="help-block">
[[groups:details.hidden_help]]
</p>
</label>
</div>
<div class="checkbox">
<label>
<input id="group-hidden" name="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden-->> <strong>[[groups:details.hidden]]</strong>
<p class="help-block">
[[groups:details.hidden_help]]
</p>
</label>
</div>
</fieldset>
<fieldset>
<div class="col-xs-12">
<label for="add-member">Add User to Group</label>
<input type="text" class="form-control" id="group-details-search" placeholder="Search Users" />
<ul class="members user-list" id="group-details-search-results"></ul>
</div>
<label for="add-member">Add User to Group</label>
<input type="text" class="form-control" id="group-details-search" placeholder="Search Users" />
<ul class="members user-list" id="group-details-search-results"></ul>
</fieldset>
<fieldset>
<div class="col-xs-12">
<label>Members</label>
<p>Click on a user to remove them from the group</p>
<ul class="members current_members user-list">
<!-- BEGIN group.members -->
<li data-uid="{group.members.uid}">
<img src="{group.members.picture}" />
<span>{group.members.username}</span>
</li>
<!-- END group.members -->
</ul>
<label>Members</label>
<p>Click on a user to remove them from the group</p>
<div class="panel panel-default">
<div class="panel-body">
<ul class="members current_members user-list">
<!-- BEGIN group.members -->
<li data-uid="{group.members.uid}">
<img src="{group.members.picture}" />
<span>{group.members.username}</span>
</li>
<!-- END group.members -->
</ul>
</div>
</div>
</fieldset>
</div>
</div>

@ -1,55 +1,53 @@
<div class="registration">
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-group"></i> Registration Queue</div>
<div class="panel-body">
<table class="table table-striped users-list">
<tr>
<th>Name</th>
<th>Email</th>
<th>IP</th>
<th>Time</th>
<th></th>
</tr>
<!-- BEGIN users -->
<tr data-username="{users.username}">
<td>
<!-- IF users.usernameSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.username.frequency} Appears: {users.spamData.username.appears} Confidence: {users.spamData.username.confidence}"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.usernameSpam -->
{users.username}
</td>
<td>
<!-- IF users.emailSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.email.frequency} Appears: {users.spamData.email.appears}"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.emailSpam -->
{users.email}
</td>
<td>
<!-- IF users.ipSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.ip.frequency} Appears: {users.spamData.ip.appears}"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.ipSpam -->
{users.ip}
</td>
<td>
<span class="timeago" title="{users.timestamp}"></span>
</td>
<td>
<div class="btn-group pull-right">
<button class="btn btn-success btn-xs" data-action="accept"><i class="fa fa-check"></i></button>
<button class="btn btn-danger btn-xs" data-action="delete"><i class="fa fa-times"></i></button>
</div>
</td>
</tr>
<!-- END users -->
</table>
</div>
</div>
</div>
<table class="table table-striped users-list">
<tr>
<th>Name</th>
<th>Email</th>
<th>IP</th>
<th>Time</th>
<th></th>
</tr>
<!-- IF !users.length -->
<p>
There are no users in the registration queue. To enable this feature go to <a href="{config.relative_path}/admin/settings/user">Settings -> User -> Authentication</a> and set <strong>Registration Type</strong> to "Admin Approval".
</p>
<!-- ENDIF !users.length -->
<!-- BEGIN users -->
<tr data-username="{users.username}">
<td>
<!-- IF users.usernameSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.username.frequency} Appears: {users.spamData.username.appears} Confidence: {users.spamData.username.confidence}"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.usernameSpam -->
{users.username}
</td>
<td>
<!-- IF users.emailSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.email.frequency} Appears: {users.spamData.email.appears}"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.emailSpam -->
{users.email}
</td>
<td>
<!-- IF users.ipSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.ip.frequency} Appears: {users.spamData.ip.appears}"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.ipSpam -->
{users.ip}
</td>
<td>
<span class="timeago" title="{users.timestamp}"></span>
</td>
<td>
<div class="btn-group pull-right">
<button class="btn btn-success btn-xs" data-action="accept"><i class="fa fa-check"></i></button>
<button class="btn btn-danger btn-xs" data-action="delete"><i class="fa fa-times"></i></button>
</div>
</td>
</tr>
<!-- END users -->
</table>
</div>

@ -1,34 +1,30 @@
<div class="tags">
<div class="tags row">
<div class="col-lg-9">
<!-- IF !tags.length -->
<div class="alert alert-warning">
<strong>Your forum does not have any topics with tags yet!</strong>
</div>
<!-- ENDIF !tags.length -->
<div class="panel panel-default tag-management">
<div class="panel-heading">Tag Management</div>
<div class="panel-body">
<div class="row">
<div class="tag-list">
<!-- BEGIN tags -->
<div class="tag-row" data-tag="{tags.value}">
<div data-value="{tags.value}">
<span class="tag-item" data-tag="{tags.value}" style="<!-- IF tags.color -->color: {tags.color};<!-- ENDIF tags.color --><!-- IF tags.bgColor -->background-color: {tags.bgColor};<!-- ENDIF tags.bgColor -->">{tags.value}</span><span class="tag-topic-count"><a href="{config.relative_path}/tags/{tags.value}" target="_blank">{tags.score}</a></span>
<!-- IF !tags.length -->
Your forum does not have any topics with tags yet.
<!-- ENDIF !tags.length -->
<div class="tag-list">
<!-- BEGIN tags -->
<div class="tag-row" data-tag="{tags.value}">
<div data-value="{tags.value}">
<span class="tag-item" data-tag="{tags.value}" style="<!-- IF tags.color -->color: {tags.color};<!-- ENDIF tags.color --><!-- IF tags.bgColor -->background-color: {tags.bgColor};<!-- ENDIF tags.bgColor -->">{tags.value}</span><span class="tag-topic-count"><a href="{config.relative_path}/tags/{tags.value}" target="_blank">{tags.score}</a></span>
</div>
<div class="tag-modal hidden">
<div class="form-group">
<label for="bgColor">Background Colour</label>
<input id="bgColor" placeholder="#ffffff" data-name="bgColor" value="{tags.bgColor}" class="form-control category_bgColor" />
</div>
<div class="tag-modal hidden">
<div class="form-group">
<label for="bgColor">Background Colour</label>
<input id="bgColor" placeholder="#ffffff" data-name="bgColor" value="{tags.bgColor}" class="form-control category_bgColor" />
</div>
<div class="form-group">
<label for="color">Text Colour</label>
<input id="color" placeholder="#a2a2a2" data-name="color" value="{tags.color}" class="form-control category_color" />
</div>
<div class="form-group">
<label for="color">Text Colour</label>
<input id="color" placeholder="#a2a2a2" data-name="color" value="{tags.color}" class="form-control category_color" />
</div>
</div>
<!-- END tags -->
</div>
<!-- END tags -->
</div>
</div>
</div>
@ -39,8 +35,8 @@
<div class="panel-heading">Modify Tag</div>
<div class="panel-body">
<p>Select tags via clicking and/or dragging, use shift to select multiple.</p>
<button class="btn btn-primary btn-md" id="modify">Modify Tags</button>
<button class="btn btn-warning btn-md" id="deleteSelected">Delete Tags</button>
<button class="btn btn-primary btn-block" id="modify">Modify Tags</button>
<button class="btn btn-warning btn-block" id="deleteSelected">Delete Tags</button>
</div>
</div>

@ -4,12 +4,11 @@
<div class="panel-heading"><i class="fa fa-user"></i> Users</div>
<div class="panel-body">
<ul class="nav nav-pills">
<li class='active'><a href='{config.relative_path}/admin/manage/users/latest'>Latest Users</a></li>
<li class=''><a href='{config.relative_path}/admin/manage/users/sort-posts'>Top Posters</a></li>
<li class=''><a href='{config.relative_path}/admin/manage/users/sort-reputation'>Most Reputation</a></li>
<li class=''><a href='{config.relative_path}/admin/manage/users/banned'>Banned</a></li>
<li class=''><a href='{config.relative_path}/admin/manage/users/registration'>Registration Queue</a></li>
<li class=''><a href='{config.relative_path}/admin/manage/users/search'>User Search</a></li>
<li><a href='{config.relative_path}/admin/manage/users/latest'>Latest Users</a></li>
<li><a href='{config.relative_path}/admin/manage/users/sort-posts'>Top Posters</a></li>
<li><a href='{config.relative_path}/admin/manage/users/sort-reputation'>Most Reputation</a></li>
<li><a href='{config.relative_path}/admin/manage/users/banned'>Banned</a></li>
<li><a href='{config.relative_path}/admin/manage/users/search'>User Search</a></li>
<div class="btn-group pull-right">

@ -8,7 +8,7 @@
<i data-name="icon" value="{categories.icon}" class="fa {categories.icon}"></i>
</div>
<div class="information">
<h5 class="header">{categories.name}</h5>
<h5 class="category-header">{categories.name}</h5>
<p class="description">{categories.descriptionParsed}</p>
</div>
</div>
@ -16,10 +16,10 @@
<div class="col-md-3">
<div class="clearfix pull-right text-right">
<div class="btn-group">
<button data-action="toggle" data-disabled="{categories.disabled}" class="btn btn-xs <!-- IF categories.disabled -->btn-primary<!-- ELSE -->btn-danger<!-- ENDIF categories.disabled -->">
<button data-action="toggle" data-disabled="{categories.disabled}" class="btn <!-- IF categories.disabled -->btn-primary<!-- ELSE -->btn-danger<!-- ENDIF categories.disabled -->">
<!-- IF categories.disabled -->Enable<!-- ELSE -->Disable<!-- ENDIF categories.disabled -->
</button>
<a href="./categories/{categories.cid}" class="btn btn-default btn-xs">Edit</a>
<a href="./categories/{categories.cid}" class="btn btn-default">Edit</a>
</div>
</div>
</div>

@ -15,16 +15,14 @@
<!-- END privileges.users -->
<tr>
<td colspan="{privileges.columnCount}">
<button type="button" class="btn btn-primary btn-xs pull-right" data-ajaxify="false" data-action="search.user"><i class="fa fa-plus"></i> Add User</button>
<button type="button" class="btn btn-primary pull-right" data-ajaxify="false" data-action="search.user"> Add User</button>
</td>
</tr>
<!-- ELSE -->
<tr>
<td colspan="{privileges.columnCount}">
<div class="alert alert-info">
<button type="button" class="btn btn-primary btn-xs pull-right" data-ajaxify="false" data-action="search.user"><i class="fa fa-plus"></i> Add User</button>
No user-specific privileges in this category.
</div>
<button type="button" class="btn btn-primary pull-right" data-ajaxify="false" data-action="search.user"> Add User</button>
No user-specific privileges in this category.
</td>
</tr>
<!-- ENDIF privileges.users.length -->
@ -52,16 +50,14 @@
<!-- END privileges.groups -->
<tr>
<td colspan="{privileges.columnCount}">
<button type="button" class="btn btn-primary btn-xs pull-right" data-ajaxify="false" data-action="search.group"><i class="fa fa-plus"></i> Add Group</button>
<button type="button" class="btn btn-primary pull-right" data-ajaxify="false" data-action="search.group"> Add Group</button>
</td>
</tr>
<!-- ELSE -->
<tr>
<td colspan="{privileges.columnCount}">
<div class="alert alert-info">
<button type="button" class="btn btn-primary btn-xs pull-right" data-ajaxify="false" data-action="search.group"><i class="fa fa-plus"></i> Add Group</button>
No group-specific privileges in this category.
</div>
<button type="button" class="btn btn-primary pull-right" data-ajaxify="false" data-action="search.group"> Add Group</button>
No group-specific privileges in this category.
</td>
</tr>
<!-- ENDIF privileges.groups.length -->

@ -1,103 +1,250 @@
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-dashboard"></i> General</li>
<li class="active"><a href="{relative_path}/admin/general/dashboard">Dashboard</a></li>
<li><a href="{relative_path}/admin/general/homepage">Home Page</a></li>
<li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<li><a href="{relative_path}/admin/general/languages">Languages</a></li>
<li><a href="{relative_path}/admin/general/sounds">Sounds</a></li>
</ul>
<nav id="menu" class="visible-xs visible-sm">
<section class="menu-section">
<h3 class="menu-section-title">General</h3>
<ul class="menu-section-list">
<a href="{relative_path}/admin/general/dashboard">Dashboard</a>
<li><a href="{relative_path}/admin/general/homepage">Home Page</a></li>
<li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<li><a href="{relative_path}/admin/general/languages">Languages</a></li>
<li><a href="{relative_path}/admin/general/sounds">Sounds</a></li>
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">Manage</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/manage/categories">Categories</a></li>
<li><a href="{relative_path}/admin/manage/tags">Tags</a></li>
<li><a href="{relative_path}/admin/manage/users">Users</a></li>
<li><a href="{relative_path}/admin/manage/registration">Registration Queue</a></li>
<li><a href="{relative_path}/admin/manage/groups">Groups</a></li>
<li><a href="{relative_path}/admin/manage/flags">Flags</a></li>
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">Settings</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/settings/general">General</a></li>
<li><a href="{relative_path}/admin/settings/reputation">Reputation</a></li>
<li><a href="{relative_path}/admin/settings/email">Email</a></li>
<li><a href="{relative_path}/admin/settings/user">User</a></li>
<li><a href="{relative_path}/admin/settings/group">Group</a></li>
<li><a href="{relative_path}/admin/settings/guest">Guests</a></li>
<li><a href="{relative_path}/admin/settings/post">Post</a></li>
<li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li>
<li><a href="{relative_path}/admin/settings/tags">Tags</a></li>
<li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li>
<li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li>
<li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li>
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">Appearance</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/appearance/themes">Themes</a></li>
<li><a href="{relative_path}/admin/appearance/skins">Skins</a></li>
<li><a href="{relative_path}/admin/appearance/customise">Custom HTML &amp; CSS</a></li>
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">Extend</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/extend/plugins">Plugins</a></li>
<li><a href="{relative_path}/admin/extend/widgets">Widgets</a></li>
<li><a href="{relative_path}/admin/extend/rewards">Rewards</a></li>
</ul>
</section>
<!-- IF authentication.length -->
<section class="menu-section">
<h3 class="menu-section-title">Social Authentication</h3>
<ul class="menu-section-list">
<!-- BEGIN authentication -->
<li>
<a href="{relative_path}/admin{authentication.route}">{authentication.name}</a>
</li>
<!-- END authentication -->
</ul>
</section>
<!-- ENDIF authentication.length -->
<!-- IF plugins.length -->
<section class="menu-section">
<h3 class="menu-section-title">Plugins</h3>
<ul class="menu-section-list">
<!-- BEGIN plugins -->
<li>
<a href="{relative_path}/admin{plugins.route}">{plugins.name}</a>
</li>
<!-- END plugins -->
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">Advanced</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/advanced/database">Database</a></li>
<li><a href="{relative_path}/admin/advanced/events">Events</a></li>
<li><a href="{relative_path}/admin/advanced/logs">Logs</a></li>
<li><a href="{relative_path}/admin/advanced/post-cache">Post Cache</a></li>
<!-- IF env -->
<li><a href="{relative_path}/admin/development/logger">Logger</a></li>
<!-- ENDIF env -->
</ul>
</section>
</nav>
<main id="panel">
<nav class="header" id="header">
<div class="pull-left">
<button id="mobile-menu">
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
</button>
<h1 id="main-page-title"></h1>
</div>
<ul id="user_label" class="pull-right">
<li class="dropdown pull-right">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="user_dropdown">
<i class="fa fa-ellipsis-v"></i>
</a>
<ul id="user-control-list" class="dropdown-menu" aria-labelledby="user_dropdown">
<li>
<a href="{relative_path}/" target="_blank" title="View Forum">
View Forum
</a>
</li>
<li role="presentation" class="divider"></li>
<li>
<a href="#" class="reload" title="Reload Forum">
Reload Forum
</a>
</li>
<li>
<a href="#" class="restart" title="Restart Forum">
Restart Forum
</a>
</li>
<li role="presentation" class="divider"></li>
<li component="logout">
<a href="#">Log out</a>
</li>
</ul>
</li>
<form class="pull-right hidden-sm hidden-xs" role="search">
<div class="" id="acp-search" >
<div class="dropdown">
<input type="text" data-toggle="dropdown" class="form-control" placeholder="Search...">
<ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
</div>
</div>
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-comments-o"></i> Manage</li>
<li><a href="{relative_path}/admin/manage/categories">Categories</a></li>
<li><a href="{relative_path}/admin/manage/tags">Tags</a></li>
<li><a href="{relative_path}/admin/manage/users">Users</a></li>
<li><a href="{relative_path}/admin/manage/groups">Groups</a></li>
<li><a href="{relative_path}/admin/manage/flags">Flags</a></li>
</ul>
</div>
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-cogs"></i> Settings</li>
<li><a href="{relative_path}/admin/settings/general">General</a></li>
<li><a href="{relative_path}/admin/settings/reputation">Reputation</a></li>
<li><a href="{relative_path}/admin/settings/email">Email</a></li>
<li><a href="{relative_path}/admin/settings/user">User</a></li>
<li><a href="{relative_path}/admin/settings/group">Group</a></li>
<li><a href="{relative_path}/admin/settings/guest">Guests</a></li>
<li><a href="{relative_path}/admin/settings/post">Post</a></li>
<li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li>
<li><a href="{relative_path}/admin/settings/tags">Tags</a></li>
<li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li>
<li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li>
<li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li>
</ul>
</div>
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-paint-brush"></i> Appearance</li>
<li><a href="{relative_path}/admin/appearance/themes">Themes</a></li>
<li><a href="{relative_path}/admin/appearance/skins">Skins</a></li>
<li><a href="{relative_path}/admin/appearance/customise">Custom HTML &amp; CSS</a></li>
</ul>
</div>
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-wrench"></i> Extend</li>
<li><a href="{relative_path}/admin/extend/plugins">Plugins</a></li>
<li><a href="{relative_path}/admin/extend/widgets">Widgets</a></li>
<li><a href="{relative_path}/admin/extend/rewards">Rewards</a></li>
</ul>
</div>
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-hdd-o"></i> Advanced</li>
<li><a href="{relative_path}/admin/advanced/database">Database</a></li>
<li><a href="{relative_path}/admin/advanced/events">Events</a></li>
<li><a href="{relative_path}/admin/advanced/logs">Logs</a></li>
<li><a href="{relative_path}/admin/advanced/post-cache">Post Cache</a></li>
</ul>
</div>
<!-- IF authentication.length -->
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-facebook-square"></i> Social Authentication</li>
<!-- BEGIN authentication -->
<li>
<a href="{relative_path}/admin{authentication.route}">{authentication.name}</a>
</li>
<!-- END authentication -->
</ul>
</div>
<!-- ENDIF authentication.length -->
<!-- IF plugins.length -->
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-th"></i> Installed Plugins</li>
<!-- BEGIN plugins -->
<li>
<a href="{relative_path}/admin{plugins.route}">
<!-- IF plugins.icon -->
<i class="fa {plugins.icon}"></i>
<!-- ENDIF plugins.icon -->
{plugins.name}
</a>
</li>
<!-- END plugins -->
<li data-link="1">
<a href="{relative_path}/admin/extend/plugins"><i class="fa fa-plus"></i> Install Plugins</a>
</li>
</ul>
</div>
<!-- ENDIF plugins.length -->
<!-- IF env -->
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><i class="fa fa-fw fa-th"></i> Development</li>
<li><a href="{relative_path}/admin/development/logger">Logger</a></li>
</ul>
</div>
<!-- ENDIF env -->
</form>
</ul>
<ul id="main-menu">
<li class="menu-item">
<a href="{relative_path}/admin/general/dashboard">Dashboard</a>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">General</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/general/homepage">Home Page</a></li>
<li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<li><a href="{relative_path}/admin/general/languages">Languages</a></li>
<li><a href="{relative_path}/admin/general/sounds">Sounds</a></li>
</ul>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Manage</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/manage/categories">Categories</a></li>
<li><a href="{relative_path}/admin/manage/tags">Tags</a></li>
<li><a href="{relative_path}/admin/manage/users">Users</a></li>
<li><a href="{relative_path}/admin/manage/registration">Registration Queue</a></li>
<li><a href="{relative_path}/admin/manage/groups">Groups</a></li>
<li><a href="{relative_path}/admin/manage/flags">Flags</a></li>
</ul>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Settings</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/settings/general">General</a></li>
<li><a href="{relative_path}/admin/settings/reputation">Reputation</a></li>
<li><a href="{relative_path}/admin/settings/email">Email</a></li>
<li><a href="{relative_path}/admin/settings/user">User</a></li>
<li><a href="{relative_path}/admin/settings/group">Group</a></li>
<li><a href="{relative_path}/admin/settings/guest">Guests</a></li>
<li><a href="{relative_path}/admin/settings/post">Post</a></li>
<li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li>
<li><a href="{relative_path}/admin/settings/tags">Tags</a></li>
<li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li>
<li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li>
<li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li>
</ul>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Appearance</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/appearance/themes">Themes</a></li>
<li><a href="{relative_path}/admin/appearance/skins">Skins</a></li>
<li><a href="{relative_path}/admin/appearance/customise">Custom HTML &amp; CSS</a></li>
</ul>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Extend</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/extend/plugins">Plugins</a></li>
<li><a href="{relative_path}/admin/extend/widgets">Widgets</a></li>
<li><a href="{relative_path}/admin/extend/rewards">Rewards</a></li>
</ul>
</li>
<!-- IF authentication.length -->
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Social Authentication</a>
<ul class="dropdown-menu" role="menu">
<!-- BEGIN authentication -->
<li>
<a href="{relative_path}/admin{authentication.route}">{authentication.name}</a>
</li>
<!-- END authentication -->
</ul>
</li>
<!-- ENDIF authentication.length -->
<!-- IF plugins.length -->
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Plugins</a>
<ul class="dropdown-menu" role="menu">
<!-- BEGIN plugins -->
<li>
<a href="{relative_path}/admin{plugins.route}">{plugins.name}</a>
</li>
<!-- END plugins -->
<li class="divider"></li>
<li data-link="1">
<a href="{relative_path}/admin/extend/plugins">Install Plugins</a>
</li>
</ul>
</li>
<!-- ENDIF plugins.length -->
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Advanced</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/advanced/database">Database</a></li>
<li><a href="{relative_path}/admin/advanced/events">Events</a></li>
<li><a href="{relative_path}/admin/advanced/logs">Logs</a></li>
<li><a href="{relative_path}/admin/advanced/post-cache">Post Cache</a></li>
<!-- IF env -->
<li><a href="{relative_path}/admin/development/logger">Logger</a></li>
<!-- ENDIF env -->
</ul>
</li>
</ul>
</nav>

@ -1,27 +1,24 @@
<!-- BEGIN themes -->
<li data-type="{themes.type}" data-theme="{themes.id}"<!-- IF themes.css --> data-css="{themes.css}"<!-- ENDIF themes.css -->>
<img title="{themes.id}" src="{themes.screenshot_url}" />
<div>
<div class="pull-right">
<button class="btn btn-primary" data-action="use">Use</button>
</div>
<h4>{themes.name}</h4>
<p>
{themes.description}
<div class="col-xs-4" data-type="{themes.type}" data-theme="{themes.id}"<!-- IF themes.css --> data-css="{themes.css}"<!-- ENDIF themes.css -->>
<div class="theme-card mdl-card mdl-shadow--2dp">
<div class="mdl-card__title mdl-card--expand" style="background-image: url('{themes.screenshot_url}');"></div>
<div class="mdl-card__supporting-text">
<h2 class="mdl-card__title-text">{themes.name}</h2>
<p>
{themes.description}
</p>
<!-- IF themes.url -->
(<a href="{themes.url}" target="_blank">Homepage</a>)
<p>
<a href="{themes.url}" target="_blank">Homepage</a>
</p>
<!-- ENDIF themes.url -->
</p>
</div>
<div class="clear"></div>
</li>
<!-- END themes -->
<!-- IF showRevert -->
<li data-type="bootswatch" data-theme="" data-css="">
<div class="pull-right">
<button class="btn btn-primary pull-right" data-action="use">Revert</button>
</div>
<div class="mdl-card__actions mdl-card--border">
<a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect" data-action="use">
Select Theme
</a>
</div>
</div>
<h4>No Skin</h4>
<p>Remove applied skin and revert back to the base colours</p>
</li>
<!-- ENDIF showRevert -->
</div>
<!-- END themes -->

@ -1,12 +1,13 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Maintenance Mode</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Maintenance Mode</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="maintenanceMode"> <strong>Maintenance Mode</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="maintenanceMode">
<span class="mdl-switch__label"><strong>Maintenance Mode</strong></span>
</label>
</div>
<p class="help-block">
@ -21,9 +22,9 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Domain Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Domain Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label for="allow-from-uri">Set ALLOW-FROM to Place NodeBB in an iFrame:</label>

@ -1,8 +1,8 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Email Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Email Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<p>
Please ensure that you have installed a third-party emailer (e.g. PostageApp, Mailgun, Mandrill, SendGrid, etc), otherwise emails will not be sent by NodeBB
@ -21,7 +21,7 @@
</p>
<input type="text" class="form-control input-lg" id="email:from_name" data-field="email:from_name" placeholder="NodeBB" /><br />
</div>
<button class="btn btn-block btn-default" type="button" data-action="email.test">Send Test Email</button>
<button class="btn btn-primary" type="button" data-action="email.test">Send Test Email</button>
<p class="help-block">
The test email will be sent to the currently logged in user's email address.
</p>
@ -29,13 +29,14 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Email Subscriptions</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Email Subscriptions</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label for="disableEmailSubscriptions">
<input type="checkbox" id="disableEmailSubscriptions" data-field="disableEmailSubscriptions" name="disableEmailSubscriptions" /> Disable subscriber notification emails
<label for="disableEmailSubscriptions" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="disableEmailSubscriptions" data-field="disableEmailSubscriptions" name="disableEmailSubscriptions" />
<span class="mdl-switch__label">Disable subscriber notification emails</span>
</label>
</div>
</form>

@ -1,17 +1,12 @@
</div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Save Settings</div>
<div class="panel-body">
<button class="btn btn-primary btn-md" id="save">Save Changes</button>
<button class="btn btn-warning btn-md" id="revert">Revert Changes</button>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>
<script>
require(['admin/settings'], function(Settings) {
Settings.prepare();
Settings.init();
Settings.populateTOC();
});
</script>

@ -1,15 +1,18 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Site Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">
Site Settings
</div>
<div class="col-sm-10 col-xs-12">
<form>
<label>Site Title</label>
<input class="form-control" type="text" placeholder="Your Community Name" data-field="title" />
<div class="checkbox">
<label for="showSiteTitle">
<input type="checkbox" id="showSiteTitle" data-field="showSiteTitle" name="showSiteTitle" /> Show Site Title in Header
<label for="showSiteTitle" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" id="showSiteTitle" data-field="showSiteTitle" name="showSiteTitle" />
<span class="mdl-switch__label">Show Site Title in Header</span>
</label>
</div>
@ -28,9 +31,9 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Site Logo</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Site Logo</div>
<div class="col-sm-10 col-xs-12">
<div class="form-group">
<label for="logoUrl">Image</label>
<div class="input-group">
@ -54,9 +57,11 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Favicon</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">
Favicon
</div>
<div class="col-sm-10 col-xs-12">
<div class="form-group">
<div class="input-group">
<input id="faviconUrl" type="text" class="form-control" placeholder="favicon.ico" data-field="brand:favicon" data-action="upload" data-target="faviconUrl" data-route="{config.relative_path}/api/admin/uploadfavicon" readonly />
@ -68,23 +73,26 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Miscellaneous</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Miscellaneous</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="useOutgoingLinksPage"> <strong>Use Outgoing Links Warning Page</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" id="showSiteTitle" data-field="useOutgoingLinksPage">
<span class="mdl-switch__label"><strong>Use Outgoing Links Warning Page</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="disableSocialButtons"> <strong>Disable social buttons</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" id="showSiteTitle" data-field="disableSocialButtons">
<span class="mdl-switch__label"><strong>Disable social buttons</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="disableChat"> <strong>Disable chat</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" id="showSiteTitle" data-field="disableChat">
<span class="mdl-switch__label"><strong>Disable chat</strong></span>
</label>
</div>
</form>

@ -1,29 +1,33 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">General</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">General</div>
<div class="col-sm-10 col-xs-12">
<form role="form">
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowPrivateGroups" checked> <strong>Private Groups</strong>
<p class="help-block">
If enabled, joining of groups requires the approval of the group owner <em>(Default: enabled)</em>
</p>
<p class="help-block">
<strong>Beware!</strong> If this option is disabled and you have private groups, they automatically become public.
</p>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowPrivateGroups" checked>
<span class="mdl-switch__label"><strong>Private Groups</strong></span>
</label>
</div>
<p class="help-block">
If enabled, joining of groups requires the approval of the group owner <em>(Default: enabled)</em>
</p>
<p class="help-block">
<strong>Beware!</strong> If this option is disabled and you have private groups, they automatically become public.
</p>
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowGroupCreation"> <strong>Allow Group Creation</strong>
<p class="help-block">
If enabled, users can create groups <em>(Default: disabled)</em>
</p>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowGroupCreation">
<span class="mdl-switch__label"><strong>Allow Group Creation</strong></span>
</label>
</div>
<p class="help-block">
If enabled, users can create groups <em>(Default: disabled)</em>
</p>
</form>
</div>
</div>

@ -1,38 +1,42 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Guests</div>
<div class="panel-body">
<p class="alert alert-info">
These options affect guest users as a whole. Control over which categories a guest can see or post to is handled in
the categories themselves
</p>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Guest Handles</div>
<div class="col-sm-10 col-xs-12">
<form role="form">
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowGuestHandles"> <strong>Allow guest handles</strong>
<p class="help-block">
This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled,
the will simply be called "Guest" (or the equivalent in the forum&apos;s selected language)
</p>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowGuestHandles">
<span class="mdl-switch__label"><strong>Allow guest handles</strong></span>
</label>
</div>
<p class="help-block">
This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled,
the will simply be called "Guest"
</p>
</form>
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Guest Privileges</div>
<div class="col-sm-10 col-xs-12">
<form role="form">
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowGuestSearching"> <strong>Allow guests to search without logging in</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowGuestSearching">
<span class="mdl-switch__label"><strong>Allow guests to search without logging in</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowGuestUserSearching"> <strong>Allow guests to search users without logging in</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowGuestUserSearching">
<span class="mdl-switch__label"><strong>Allow guests to search users without logging in</strong></span>
</label>
</div>
</form>
</div>
</div>

@ -1 +1,11 @@
<div class="col-lg-9">
<div class="settings">
<div class="row">
<div class="col-sm-2 col-xs-12 content-header">
Contents
</div>
<div class="col-sm-10 col-xs-12">
<nav class="section-content">
<ul></ul>
</nav>
</div>
</div>

@ -1,8 +1,8 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Notifications</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Notifications</div>
<div class="col-sm-10 col-xs-12">
<form>
<strong>Welcome Notification</strong><br /> <textarea class="form-control" data-field="welcomeNotification"></textarea><br />
<strong>Welcome Notification Link</strong><br /> <input type="text" class="form-control" data-field="welcomeLink"><br />

@ -1,30 +1,31 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Pagination Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Pagination Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="usePagination"> <strong>Paginate topics and posts instead of using infinite scroll.</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="usePagination">
<span class="mdl-switch__label"><strong>Paginate topics and posts instead of using infinite scroll.</strong></span>
</label>
</div>
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Topic Pagination</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Topic Pagination</div>
<div class="col-sm-10 col-xs-12">
<form>
<strong>Posts per Page</strong><br /> <input type="text" class="form-control" value="20" data-field="postsPerPage">
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Category Pagination</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Category Pagination</div>
<div class="col-sm-10 col-xs-12">
<form>
<strong>Topics per Page</strong><br /> <input type="text" class="form-control" value="20" data-field="topicsPerPage"><br />
<strong>Initial Number of Topics to Load on Unread, Recent, and Popular</strong><br /> <input type="text" class="form-control" value="20" data-field="topicsPerList">

@ -1,8 +1,8 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Post Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Post Sorting</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label>Default Post Sorting</label>
@ -20,55 +20,57 @@
<option value="most_posts">Most Posts</option>
</select>
</div>
</form>
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Posting Restrictions</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label>Seconds between Posts</label>
<input type="number" class="form-control" value="10" data-field="postDelay">
<input type="text" class="form-control" value="10" data-field="postDelay">
</div>
<div class="form-group col-sm-6">
<div class="form-group">
<label>Seconds between Posts for New Users</label>
<input type="number" class="form-control" value="120" data-field="newbiePostDelay">
<input type="text" class="form-control" value="120" data-field="newbiePostDelay">
</div>
<div class="form-group col-sm-6">
<div class="form-group">
<label>Reputation threshold before this restriction is lifted</label>
<input type="number" class="form-control" value="3" data-field="newbiePostDelayThreshold">
<input type="text" class="form-control" value="3" data-field="newbiePostDelayThreshold">
</div>
<div class="form-group">
<label>Seconds before new user can post</label>
<input type="number" class="form-control" value="10" data-field="initialPostDelay">
<input type="text" class="form-control" value="10" data-field="initialPostDelay">
</div>
<div class="form-group">
<label>Number of seconds users are allowed to edit posts after posting. (0 disabled)</label>
<input type="number" class="form-control" value="0" data-field="postEditDuration">
<input type="text" class="form-control" value="0" data-field="postEditDuration">
</div>
<div class="form-group">
<label>Minimum Title Length</label>
<input type="number" class="form-control" value="3" data-field="minimumTitleLength">
<input type="text" class="form-control" value="3" data-field="minimumTitleLength">
</div>
<div class="form-group">
<label>Maximum Title Length</label>
<input type="number" class="form-control" value="255" data-field="maximumTitleLength">
<input type="text" class="form-control" value="255" data-field="maximumTitleLength">
</div>
<div class="form-group">
<label>Minimum Post Length</label>
<input type="number" class="form-control" value="8" data-field="minimumPostLength">
<input type="text" class="form-control" value="8" data-field="minimumPostLength">
</div>
<div class="form-group">
<label>Maximum Post Length</label>
<input type="number" class="form-control" value="32767" data-field="maximumPostLength">
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="trackIpPerPost"> <strong>Track IP Address for each post</strong>
</label>
<input type="text" class="form-control" value="32767" data-field="maximumPostLength">
</div>
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Teaser Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Teaser Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label>Teaser Post</label>
@ -82,23 +84,26 @@
</div>
<div class="panel panel-default">
<div class="panel-heading">Signature Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Signature Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="disableSignatures"> <strong>Disable signatures</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="disableSignatures">
<span class="mdl-switch__label"><strong>Disable signatures</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="signatures:disableLinks"> <strong>Disable links in signatures</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="signatures:disableLinks">
<span class="mdl-switch__label"><strong>Disable links in signatures</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="signatures:disableImages"> <strong>Disable images in signatures</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="signatures:disableImages">
<span class="mdl-switch__label"><strong>Disable images in signatures</strong></span>
</label>
</div>
<div class="form-group">
@ -109,34 +114,37 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Chat Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Chat Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<strong>Chat Message Inbox Size</strong><br /> <input type="text" class="form-control" value="250" data-field="chatMessageInboxSize">
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Upload Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Upload Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowFileUploads"> <strong>Allow users to upload regular files</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowFileUploads">
<span class="mdl-switch__label"><strong>Allow users to upload regular files</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="privateUploads"> <strong>Make uploaded files private</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="privateUploads">
<span class="mdl-switch__label"><strong>Make uploaded files private</strong></span>
</label>
</div>
<strong>Maximum File Size</strong><br /> <input type="text" class="form-control" value="2048" data-field="maximumFileSize"><br />
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowTopicsThumbnail"> <strong>Allow users to upload topic thumbnails</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowTopicsThumbnail">
<span class="mdl-switch__label"><strong>Allow users to upload topic thumbnails</strong></span>
</label>
</div>
<strong>Topic Thumb Size</strong><br /> <input type="text" class="form-control" value="120" data-field="topicThumbSize"> <br />
@ -147,24 +155,24 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Composer Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Composer Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<p>
The following settings govern the functionality and/or appearance of the post composer shown
to users when they create new topics, or reply to existing topics.
</p>
<div class="checkbox">
<label for="composer:showHelpTab">
<input type="checkbox" id="composer:showHelpTab" data-field="composer:showHelpTab" checked />
Show "Help" tab
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="composer:showHelpTab">
<input class="mdl-switch__input" type="checkbox" id="composer:showHelpTab" data-field="composer:showHelpTab" checked />
<span class="mdl-switch__label">Show "Help" tab</span>
</label>
</div>
<div class="checkbox">
<label for="composer:allowPluginHelp">
<input type="checkbox" id="composer:allowPluginHelp" data-field="composer:allowPluginHelp" checked />
Allow plugins to add content to the help tab
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="composer:allowPluginHelp">
<input class="mdl-switch__input" type="checkbox" id="composer:allowPluginHelp" data-field="composer:allowPluginHelp" checked />
<span class="mdl-switch__label">Allow plugins to add content to the help tab</span>
</label>
</div>
<div class="form-group">
@ -175,4 +183,17 @@
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">IP Tracking</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="trackIpPerPost">
<span class="mdl-switch__label"><strong>Track IP Address for each post</strong></span>
</label>
</div>
</form>
</div>
</div>
<!-- IMPORT admin/settings/footer.tpl -->

@ -1,17 +1,20 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Reputation Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Reputation Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="reputation:disabled"> <strong>Disable Reputation System</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" data-field="reputation:disabled">
<span class="mdl-switch__label"><strong>Disable Reputation System</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="downvote:disabled"> <strong>Disable Down Voting</trong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" data-field="downvote:disabled">
<span class="mdl-switch__label"><strong>Disable Down Voting</trong></strong>
</label>
</div>
</form>
@ -19,12 +22,12 @@
</div>
<div class="panel panel-default">
<div class="panel-heading">Activity Thresholds</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Activity Thresholds</div>
<div class="col-sm-10 col-xs-12">
<form>
<strong>Minimum reputation to downvote posts</strong><br /> <input type="text" class="form-control" data-field="privileges:downvote"><br />
<strong>Minimum reputation to flag posts</strong><br /> <input type="text" class="form-control" data-field="privileges:flag"><br />
<strong>Minimum reputation to downvote posts</strong><br /> <input type="text" class="form-control" placeholder="0" data-field="privileges:downvote"><br />
<strong>Minimum reputation to flag posts</strong><br /> <input type="text" class="form-control" placeholder="0" data-field="privileges:flag"><br />
</form>
</div>
</div>

@ -1,8 +1,8 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Web Socket Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Reconnection Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label for="maxReconnectionAttempts">Max Reconnection Attempts</label>

@ -1,12 +1,13 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Tag Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Tag Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="privateTagListing"> Make the tags list private
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="privateTagListing">
<span class="mdl-switch__label">Make the tags list private</span>
</label>
</div>
<div class="form-group">

@ -1,27 +1,20 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">User List</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Authentication</div>
<div class="col-sm-10 col-xs-12">
<form role="form">
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowLocalLogin" checked> <strong>Allow local login</strong>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowAccountDelete" checked> <strong>Allow account deletion</strong>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="privateUserInfo"> <strong>Make user info private</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowLocalLogin" checked>
<span class="mdl-switch__label"><strong>Allow local login</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="requireEmailConfirmation"> <strong>Require Email Confirmation</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="requireEmailConfirmation">
<span class="mdl-switch__label"><strong>Require Email Confirmation</strong></span>
</label>
</div>
@ -47,19 +40,41 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Avatars</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Account Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowAccountDelete" checked>
<span class="mdl-switch__label"><strong>Allow account deletion</strong></span>
</label>
</div>
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="privateUserInfo">
<span class="mdl-switch__label"><strong>Make user info private</strong></span>
</label>
</div>
</form>
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Avatars</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="allowProfileImageUploads"> <strong>Allow users to upload profile images</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowProfileImageUploads">
<span class="mdl-switch__label"><strong>Allow users to upload profile images</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="profile:convertProfileImageToPNG"> <strong>Convert profile image uploads to PNG</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="profile:convertProfileImageToPNG">
<span class="mdl-switch__label"><strong>Convert profile image uploads to PNG</strong></span>
</label>
</div>
@ -77,8 +92,12 @@
<div class="form-group">
<label>Custom Gravatar Default Image</label>
<input id="customGravatarDefaultImage" type="text" class="form-control" placeholder="A custom image to use instead of gravatar defaults" data-field="customGravatarDefaultImage" /><br />
<input data-action="upload" data-target="customGravatarDefaultImage" data-route="{config.relative_path}/api/admin/uploadgravatardefault" type="button" class="btn btn-default" value="Upload"></input>
<div class="input-group">
<input id="customGravatarDefaultImage" type="text" class="form-control" placeholder="A custom image to use instead of gravatar defaults" data-field="customGravatarDefaultImage" />
<span class="input-group-btn">
<input data-action="upload" data-target="customGravatarDefaultImage" data-route="{config.relative_path}/api/admin/uploadgravatardefault" type="button" class="btn btn-default" value="Upload"></input>
</span>
</div>
</div>
<div class="form-group">
@ -94,9 +113,9 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Account Protection</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Account Protection</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label for="loginAttempts">Login attempts per hour</label>
@ -121,9 +140,9 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">User Registration</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">User Registration</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label>Minimum Username Length</label>
@ -149,9 +168,9 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">User Search</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">User Search</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="form-group">
<label>Number of results to display</label>

@ -1,8 +1,8 @@
<!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default">
<div class="panel-heading">Crawlability Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Crawlability Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<strong>Custom Robots.txt <small>Leave blank for default</small></strong><br />
<textarea class="form-control" data-field="robots.txt"></textarea>
@ -10,19 +10,21 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Sitemap & Feed Settings</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Sitemap & Feed Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label>
<input type="checkbox" data-field="feeds:disableRSS"> <strong>Disable RSS Feeds</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="feeds:disableRSS">
<span class="mdl-switch__label"><strong>Disable RSS Feeds</strong></span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" data-field="feeds:disableSitemap"> <strong>Disable Sitemap.xml</strong>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="feeds:disableSitemap">
<span class="mdl-switch__label"><strong>Disable Sitemap.xml</strong></span>
</label>
</div>
@ -31,8 +33,11 @@
<input class="form-control" type="text" data-field="sitemapTopics" />
</div>
<button id="clear-sitemap-cache" class="btn btn-warning">Clear Sitemap Cache</button>
<a href="/sitemap.xml" target="_blank" class="btn btn-info">View Sitemap</a>
<br />
<p>
<button id="clear-sitemap-cache" class="btn btn-warning">Clear Sitemap Cache</button>
<a href="/sitemap.xml" target="_blank" class="btn btn-link">View Sitemap</a>
</p>
</form>
</div>

Loading…
Cancel
Save