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", "mmmagic": "^0.3.13",
"morgan": "^1.3.2", "morgan": "^1.3.2",
"nconf": "~0.7.1", "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-dbsearch": "0.2.15",
"nodebb-plugin-emoji-extended": "0.4.9", "nodebb-plugin-emoji-extended": "0.4.9",
"nodebb-plugin-markdown": "4.0.4", "nodebb-plugin-markdown": "4.0.4",
@ -48,9 +48,9 @@
"nodebb-plugin-soundpack-default": "0.1.3", "nodebb-plugin-soundpack-default": "0.1.3",
"nodebb-plugin-spam-be-gone": "0.4.1", "nodebb-plugin-spam-be-gone": "0.4.1",
"nodebb-rewards-essentials": "0.0.3", "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-persona": "2.0.19",
"nodebb-theme-vanilla": "3.0.8", "nodebb-theme-vanilla": "3.0.11",
"nodebb-widget-essentials": "1.0.5", "nodebb-widget-essentials": "1.0.5",
"npm": "^2.1.4", "npm": "^2.1.4",
"passport": "^0.2.1", "passport": "^0.2.1",

@ -23,5 +23,9 @@
"composer.user_said": "%1 said:", "composer.user_said": "%1 said:",
"composer.discard": "Are you sure you wish to discard this post?", "composer.discard": "Are you sure you wish to discard this post?",
"composer.submit_and_lock": "Submit and Lock", "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 "./bootstrap/bootstrap";
@import "./bootswatch";
@import "./mixins"; @import "./mixins";
@import "./vars"; @import "./vars";
@import "./header";
@import "./mobile";
@import "./general/dashboard"; @import "./general/dashboard";
@import "./general/navigation"; @import "./general/navigation";
@import "./manage/categories"; @import "./manage/categories";
@import "./manage/tags"; @import "./manage/tags";
@import "./manage/flags"; @import "./manage/flags";
@import "./manage/groups";
@import "./manage/users"; @import "./manage/users";
@import "./appearance/customise"; @import "./appearance/customise";
@import "./appearance/themes"; @import "./appearance/themes";
@import "./extend/plugins"; @import "./extend/plugins";
@import "./extend/rewards"; @import "./extend/rewards";
@import "./advanced/database"; @import "./advanced/database";
@import "./settings";
@import "./modules/alerts"; @import "./modules/alerts";
@import "./modules/selectable"; @import "./modules/selectable";
@import "./modules/checkboxes"; @import "./modules/snackbar";
.admin { .admin {
padding-top: 70px; background: #fff;
background: #f0f0f0; font-size: 14px;
.container { h1 {
width: 100% !important; font-size: 35px;
padding: 0px 15px; margin-bottom: 50px;
} }
.jumbotron { label {
padding: @jumbotron-padding; font-weight: 700;
} }
.btn { .btn {
border-radius: 0; 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 { .user-img {
width:24px; width:24px;
height:24px; height:24px;
@ -52,129 +75,10 @@
color: #fff; 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 { #breadcrumbs {
cursor: default; cursor: default;
} }
.wrapper {
width: 100%;
overflow-y: hidden;
}
.acp-panel-heading { .acp-panel-heading {
padding: 7px 14px; padding: 7px 14px;
border: 0; border: 0;
@ -203,20 +107,6 @@
.box-header-font .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 { .icon-container {
.row { .row {
margin: 0; 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 { #taskbar {
display: none; /* not sure why I have to do this, but it only seems to show up on prod */ 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; 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 { .category-settings-form {
h3 { h3 {
margin-top: 0; margin-top: 0;
@ -365,3 +221,19 @@
max-height: 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; margin: 0.25em 1em;
list-style-type: none; list-style-type: none;
.pointer; .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 { img {
max-width: 150px; max-width: 150px;
@ -30,16 +22,39 @@
font-size: 0.9em; font-size: 0.9em;
} }
&:hover {
background-color: rgba(128, 128, 128, 0.2);
}
&.no-themes { &.no-themes {
font-style: italic; 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] { textarea[data-field] {
min-height: 450px; min-height: 450px;
width: 100%; width: 100%;

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

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

@ -18,8 +18,6 @@
.tag-item { .tag-item {
border: solid 1px @gray-light; border: solid 1px @gray-light;
border-bottom-left-radius: 5px;
border-top-left-radius: 5px;
background-color: transparent; background-color: transparent;
color: @gray-light; color: @gray-light;
padding: .2em .6em .3em; padding: .2em .6em .3em;
@ -31,15 +29,14 @@
.tag-topic-count { .tag-topic-count {
border: solid 1px lighten(@brand-primary, 20%); border: solid 1px lighten(@brand-primary, 20%);
background-color: lighten(@brand-primary, 20%); background-color: lighten(@brand-primary, 20%);
padding: .2em .6em .3em; padding: 6px;
font-size: 75%; font-size: 75%;
font-weight: 700; font-weight: 700;
white-space: nowrap; white-space: nowrap;
border-left: none; border-left: none;
padding-right: 5px; padding-right: 5px;
padding-left: 5px; padding-left: 5px;
border-bottom-right-radius: 5px; border-width: 1px 1px 2px medium;
border-top-right-radius: 5px;
a { a {
color: #FFFFFF; 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"; "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() { (function() {
$(document).ready(function() { $(document).ready(function() {
setupMenu();
setupKeybindings(); setupKeybindings();
if(!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { if(!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
require(['admin/modules/search'], function(search) { require(['admin/modules/search'], function(search) {
search.init(); search.init();
}); });
} else {
activateMobile();
} }
$(window).on('action:ajaxify.contentLoaded', function(ev, data) { $(window).on('action:ajaxify.contentLoaded', function(ev, data) {
var url = data.url; var url = data.url;
selectMenuItem(data.url); selectMenuItem(data.url);
setupHeaderMenu();
setupRestartLinks(); setupRestartLinks();
});
$(window).on('action:admin.settingsLoaded', setupCheckboxes); componentHandler.upgradeDom();
});
$('[component="logout"]').on('click', app.logout); $('[component="logout"]').on('click', app.logout);
app.alert = launchSnackbar;
$(window).resize(setupHeaderMenu); configureSlidemenu();
}); });
socket.emit('admin.config.get', function(err, config) { socket.emit('admin.config.get', function(err, config) {
@ -45,27 +42,6 @@
$(window).trigger('action:config.loaded'); $(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() { function setupKeybindings() {
Mousetrap.bind('ctrl+shift+a r', function() { Mousetrap.bind('ctrl+shift+a r', function() {
require(['admin/modules/instance'], function(instance) { 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) { function selectMenuItem(url) {
url = url.replace(/\/\d+$/, ''); url = url
.replace(/\/\d+$/, '')
.split('/').slice(0, 3).join('/');
// If index is requested, load the dashboard // If index is requested, load the dashboard
if (url === 'admin') { if (url === 'admin') {
url = 'admin/general/dashboard'; 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), var menu = $(this),
category = menu.parents('.sidebar-nav'), href = menu.attr('href'),
href = menu.children('a').attr('href'), isLink = menu.parent().attr('data-link') === '1';
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));
}
function setupHeaderMenu() { if (!isLink && href && href === [config.relative_path, url].join('/')) {
var env = utils.findBootstrapEnvironment(); menu
.parent().addClass('active')
.parents('.menu-item').addClass('active');
if (env !== 'lg') { $('#main-page-title').text(menu.text() + (menu.parents('.menu-item').children('a').text() === 'Settings' ? ' Settings' : ''));
if ($('.mobile-header').length || $('#content .col-lg-9').first().height() < 2000) {
return;
} }
});
($('#content .col-lg-3').first().clone().addClass('mobile-header'))
.insertBefore($('#content .col-lg-9').first());
} else {
$('.mobile-header').remove();
}
} }
function setupRestartLinks() { function setupRestartLinks() {
@ -171,37 +104,54 @@
}); });
} }
function setupCheckboxes() { function launchSnackbar(params) {
if (ajaxify.currentPage.match(/^admin\/manage\/categories/)) { var bar = $.snackbar({
return $('[type=checkbox]').show(); content: "<strong>" + params.title + "</strong>" + params.message,
timeout: 3000,
htmlAllowed: true
});
if (params.clickfn) {
bar.on('click', clickfn);
} }
}
$('[type=checkbox]').change(function() { function configureSlidemenu() {
var checked = $(this).is(':checked'); 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) $('#mobile-menu').on('click', function() {
.toggleClass('fa-toggle-on', checked); slideout.toggle();
}); });
$('[type=checkbox]').each(function() { $('#menu a').on('click', function() {
var checkbox = $(this), slideout.close();
checked = checkbox.is(':checked'); });
if (checkbox.attr('data-toggle-added')) { $(window).on('resize', function() {
return; slideout.close();
} });
checkbox.hide(); function onOpeningMenu() {
$('#header').css({
'top': $('#panel').position().top * -1 + 'px',
'position': 'absolute'
});
}
if (checked) { slideout.on('beforeopen', onOpeningMenu);
checkbox.after('<i class="fa fa-toggle-on"></i>'); slideout.on('open', onOpeningMenu);
} slideout.on('translate', onOpeningMenu);
else {
checkbox.after('<i class="fa fa-toggle-off"></i>');
}
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'); scriptEl.attr('src', '//bootswatch.aws.af.cm/3/?callback=bootswatchListener');
$('body').append(scriptEl); $('body').append(scriptEl);
$('#bootstrap_themes').on('click', function(e){ $('#skins').on('click', function(e){
var target = $(e.target), var target = $(e.target),
action = target.attr('data-action'); action = target.attr('data-action');
if (action && action === 'use') { if (action && action === 'use') {
var parentEl = target.parents('li'), var parentEl = target.parents('[data-theme]'),
themeType = parentEl.attr('data-type'), themeType = parentEl.attr('data-type'),
cssSrc = parentEl.attr('data-css'), cssSrc = parentEl.attr('data-css'),
themeId = parentEl.attr('data-theme'); themeId = parentEl.attr('data-theme');
@ -59,12 +59,37 @@ define('admin/appearance/skins', function() {
showRevert: true showRevert: true
}, function(html) { }, function(html) {
themeContainer.html(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) { function highlightSelectedTheme(themeId) {
$('.themes li[data-theme]').removeClass('btn-warning'); $('[data-theme]')
$('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning'); .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; return Skins;

@ -10,7 +10,7 @@ define('admin/appearance/themes', function() {
action = target.attr('data-action'); action = target.attr('data-action');
if (action && action === 'use') { if (action && action === 'use') {
var parentEl = target.parents('li'), var parentEl = target.parents('[data-theme]'),
themeType = parentEl.attr('data-type'), themeType = parentEl.attr('data-type'),
cssSrc = parentEl.attr('data-css'), cssSrc = parentEl.attr('data-css'),
themeId = parentEl.attr('data-theme'); themeId = parentEl.attr('data-theme');
@ -40,16 +40,16 @@ define('admin/appearance/themes', function() {
}); });
$('#revert_theme').on('click', 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) { if (confirm) {
socket.emit('admin.themes.set', { socket.emit('admin.themes.set', {
type: 'local', type: 'local',
id: 'nodebb-theme-vanilla' id: 'nodebb-theme-persona'
}, function(err) { }, function(err) {
if (err) { if (err) {
return app.alertError(err.message); return app.alertError(err.message);
} }
highlightSelectedTheme('nodebb-theme-vanilla'); highlightSelectedTheme('nodebb-theme-persona');
app.alert({ app.alert({
alert_id: 'admin:theme', alert_id: 'admin:theme',
type: 'success', type: 'success',
@ -84,8 +84,19 @@ define('admin/appearance/themes', function() {
}; };
function highlightSelectedTheme(themeId) { function highlightSelectedTheme(themeId) {
$('.themes li[data-theme]').removeClass('btn-warning'); $('[data-theme]')
$('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning'); .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; return Themes;

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

@ -17,6 +17,13 @@ define('admin/extend/widgets', function() {
return false; 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(); loadWidgetData();
}; };
@ -64,7 +71,7 @@ define('admin/extend/widgets', function() {
} }
}); });
$('#widgets .save').on('click', saveWidgets); $('#save').on('click', saveWidgets);
function saveWidgets() { function saveWidgets() {
var total = $('#widgets [data-template][data-location]').length; 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 // If any inputs have changed, prepare it for saving
$('form.category input, form.category select').on('change', function(ev) { $('form.category input, form.category select').on('change', function(ev) {
modified(ev.target); modified(ev.target);
@ -91,12 +76,11 @@ define('admin/manage/category', [
// Colour Picker // Colour Picker
$('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker); $('[data-name="bgColor"], [data-name="color"]').each(enableColorPicker);
$('.save').on('click', save); $('#save').on('click', save);
$('.revert').on('click', ajaxify.refresh);
$('.purge').on('click', function(e) { $('.purge').on('click', function(e) {
e.preventDefault(); 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) { if (!confirm) {
return; return;
} }
@ -158,7 +142,6 @@ define('admin/manage/category', [
}); });
}); });
setupEditTargets();
Category.setupPrivilegeTable(); Category.setupPrivilegeTable();
}; };

@ -50,14 +50,10 @@ define(function() {
return false; return false;
}); });
$('.sidebar-nav a').each(function(idx, link) { $('#main-menu a').each(function(idx, link) {
routes.push($(link).attr('href')); routes.push($(link).attr('href'));
}); });
input.on('blur', function() {
$(this).val('').attr('placeholder', '/');
});
input.on('keyup focus', function() { input.on('keyup focus', function() {
var $input = $(this), var $input = $(this),
value = $input.val().toLowerCase(), value = $input.val().toLowerCase(),
@ -67,8 +63,6 @@ define(function() {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
} }
$input.attr('placeholder', '');
firstResult = null; firstResult = null;
if (value.length >= 3) { if (value.length >= 3) {
@ -101,15 +95,14 @@ define(function() {
} }
} }
if (menuItems.html() !== '') { if (menuItems.html() === '') {
menuItems.append('<li role="presentation" class="divider"></li>');
} else {
menuItems.append('<li role="presentation"><a role="menuitem" href="#">No results...</a></li>'); menuItems.append('<li role="presentation"><a role="menuitem" href="#">No results...</a></li>');
} }
} }
if (value.length > 0) { if (value.length > 0) {
if (config.searchEnabled) { 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>'); 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) { } else if (value.length < 3) {
menuItems.append('<li role="presentation"><a role="menuitem" href="#">Type more to see results...</a></li>'); 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 = {}; var Settings = {};
Settings.init = function() { 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) { 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() { app.logout = function() {
require(['csrf'], function(csrf) { require(['csrf'], function(csrf) {
$.ajax(RELATIVE_PATH + '/logout', { $.ajax(RELATIVE_PATH + '/logout', {
@ -241,8 +284,6 @@ app.cacheBuster = null;
app.processPage = function () { app.processPage = function () {
highlightNavigationLink(); highlightNavigationLink();
utils.overrideTimeago();
$('.timeago').timeago(); $('.timeago').timeago();
utils.makeNumbersHumanReadable($('.human-readable-number')); utils.makeNumbersHumanReadable($('.human-readable-number'));
@ -491,6 +532,9 @@ app.cacheBuster = null;
if (err) { if (err) {
return app.alertError(err.message); return app.alertError(err.message);
} }
categories = categories.filter(function(category) {
return !category.link && !parseInt(category.parentCid, 10);
});
if (categories.length) { if (categories.length) {
$(window).trigger('action:composer.topic.new', { $(window).trigger('action:composer.topic.new', {
cid: categories[0].cid cid: categories[0].cid
@ -525,6 +569,8 @@ app.cacheBuster = null;
} }
}); });
overrideBootbox();
overrideTimeago();
createHeaderTooltips(); createHeaderTooltips();
app.showEmailConfirmWarning(); app.showEmailConfirmWarning();

@ -203,19 +203,6 @@
return text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); 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) { toISOString: function(timestamp) {
if (!timestamp || !Date.prototype.toISOString) { if (!timestamp || !Date.prototype.toISOString) {
return ''; 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); return next(err);
} }
if (parseInt(meta.config['reputation:disabled'], 10) === 1) {
delete userData.reputation;
}
userData.posts = results.posts.posts.filter(function (p) { userData.posts = results.posts.posts.filter(function (p) {
return p && parseInt(p.deleted, 10) !== 1; 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-posts', controllers.admin.users.sortByPosts);
router.get('/manage/users/sort-reputation', controllers.admin.users.sortByReputation); router.get('/manage/users/sort-reputation', controllers.admin.users.sortByReputation);
router.get('/manage/users/banned', controllers.admin.users.banned); 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', controllers.admin.groups.list);
router.get('/manage/groups/:name', controllers.admin.groups.get); router.get('/manage/groups/:name', controllers.admin.groups.get);

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

@ -48,7 +48,7 @@ module.exports = function(User) {
notifications.create({ notifications.create({
bodyShort: '[[notifications:new_register, ' + username + ']]', bodyShort: '[[notifications:new_register, ' + username + ']]',
nid: 'new_register:' + username, nid: 'new_register:' + username,
path: '/admin/manage/users/registration' path: '/admin/manage/registration'
}, function(err, notification) { }, function(err, notification) {
if (err) { if (err) {
return callback(err); return callback(err);
@ -157,6 +157,9 @@ module.exports = function(User) {
return next(null, 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) { request('http://api.stopforumspam.org/api?ip=' + user.ip + '&email=' + user.email + '&username=' + user.username + '&f=json', function (err, response, body) {
if (err) { if (err) {
return next(null, user); return next(null, user);

@ -1,7 +1,11 @@
<div id="customise" class="customise"> <div id="customise" class="customise">
<div class="panel panel-default"> <ul class="nav nav-pills">
<div class="panel-heading">Custom CSS</div> <li class="active"><a href="#custom-css" data-toggle="tab">Custom CSS</a></li>
<div class="panel-body"> <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> <p>
Enter your own CSS declarations here, which will be applied after all other styles. Enter your own CSS declarations here, which will be applied after all other styles.
</p> </p>
@ -11,18 +15,14 @@
<br /> <br />
<form class="form"> <form class="form">
<div class="form-group"> <div class="form-group">
<label for="useCustomCSS"> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="useCustomCSS">
Use Custom CSS? <input class="mdl-switch__input" id="useCustomCSS" type="checkbox" data-field="useCustomCSS" />
<input id="useCustomCSS" type="checkbox" data-field="useCustomCSS" /> <span class="mdl-switch__label">Enable Custom CSS</span>
</label> </label>
</div> </div>
</form> </form>
</div> </div>
</div> <div class="tab-pane fade" id="custom-header">
<div class="panel panel-default">
<div class="panel-heading">Custom Header</div>
<div class="panel-body">
<p> <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. 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> </p>
@ -33,14 +33,16 @@
<br /> <br />
<form class="form"> <form class="form">
<div class="form-group"> <div class="form-group">
<label for="useCustomJS"> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="useCustomJS">
Use Custom Header? <input class="mdl-switch__input" id="useCustomJS" type="checkbox" data-field="useCustomJS" />
<input id="useCustomJS" type="checkbox" data-field="useCustomJS" /> <span class="mdl-switch__label">Enable Custom Header</span>
</label> </label>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<button class="btn btn-primary" id="save">Save</button>
</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,25 +1,12 @@
<div id="skins" class="row skins"> <div id="skins" class="row skins">
<div class="col-lg-9"> <div class="directory row" id="bootstrap_themes">
<div class="panel panel-default"> <i class="fa fa-refresh fa-spin"></i> Loading Themes
<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> </div>
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default"> <div data-type="bootswatch" data-theme="" data-css="">
<div class="panel-heading">Revert to Default</div> <button data-action="use" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<div class="panel-body"> <i class="material-icons">undo</i>
<p>This will remove any custom Bootswatch skin applied to your NodeBB, and restore the base theme.</p> </button>
<button class="btn btn-warning btn-md" id="revert_theme">Revert to Default</button>
</div>
</div>
</div> </div>
</div> </div>

@ -1,14 +1,9 @@
<div id="themes" class="themes"> <div id="themes" class="themes">
<div class="panel panel-default"> <div class="directory row" id="installed_themes">
<div class="panel-heading">Installed Themes</div> <i class="fa fa-refresh fa-spin"></i> Checking for installed themes...
<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> </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="col-lg-9">
<div class="panel panel-default"> <div class="tab-content">
<div class="panel-heading"><i class="fa fa-code-fork"></i> Installed Plugins</div> <div class="tab-pane fade active in" id="installed">
<div class="panel-body">
<ul class="installed"> <ul class="installed">
<!-- BEGIN installed --> <!-- BEGIN installed -->
<!-- IMPORT admin/partials/installed_plugin_item.tpl --> <!-- IMPORT admin/partials/installed_plugin_item.tpl -->
<!-- END installed --> <!-- END installed -->
</ul> </ul>
</div> </div>
</div> <div class="tab-pane fade" id="download">
<div class="panel-body">
<div class="panel panel-default"> <ul class="download">
<div class="panel-heading"><i class="fa fa-code-fork"></i> Download Plugins</div> <!-- BEGIN download -->
<div class="panel-body"> <!-- IMPORT admin/partials/download_plugin_item.tpl -->
<ul class="download"> <!-- END download -->
<!-- BEGIN download --> </ul>
<!-- IMPORT admin/partials/download_plugin_item.tpl --> </div>
<!-- END download -->
</ul>
</div> </div>
</div> </div>
</div> </div>
@ -35,9 +38,6 @@
<div class="panel-heading">Re-order Plugins</div> <div class="panel-heading">Re-order Plugins</div>
<div class="panel-body"> <div class="panel-body">
<button class="btn btn-default btn-block" id="plugin-order"><i class="fa fa-exchange"></i> Order Active Plugins</button> <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>
</div> </div>
@ -60,10 +60,13 @@
<h4 class="modal-title">Order Active Plugins</h4> <h4 class="modal-title">Order Active Plugins</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p>Plugins load in the order specified here, from top to bottom</p> <p>
<ul class="plugin-list"> Certain plugins work ideally when they are initialised before/after other plugins.
</p>
</ul> <p>
Plugins load in the order specified here, from top to bottom
</p>
<ul class="plugin-list"></ul>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <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="col-md-7">
<div class="panel panel-default"> <ul class="nav nav-pills">
<div class="panel-heading">Widget Areas</div> <!-- BEGIN templates -->
<div class="panel-body"> <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 --> <!-- BEGIN templates -->
<li class="<!-- IF @first -->active<!-- ENDIF @first -->"><a href="#" data-template="{../template}" data-toggle="pill">{../template}</a></li> <div class="tab-pane <!-- IF @first -->active<!-- ENDIF @first -->" data-template="{../template}">
<!-- END templates --> <!-- BEGIN areas -->
</ul> <div class="area" data-template="{templates.template}" data-location="{../location}">
<h4>{../name} <small>{templates.template} / {../location}</small></h4>
<div class="row"> <div class="well widget-area">
<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>
</div>
<!-- END areas -->
</div> </div>
<!-- END templates -->
</div> </div>
<button class="btn btn-success save pull-right">Save</button> <!-- END areas -->
</div> </div>
<!-- END templates -->
</div> </div>
</div> </div>
</div> </div>
@ -38,14 +31,21 @@
<div class="panel-heading">Available Widgets</div> <div class="panel-heading">Available Widgets</div>
<div class="panel-body"> <div class="panel-body">
<div class="available-widgets"> <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 --> <!-- 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> <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 --> <!-- 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"> <div class="row">
<!-- BEGIN widgets --> <!-- BEGIN widgets -->
<div class="col-md-6 col-sm-12"> <div class="col-xs-12">
<div data-widget="{widgets.widget}" class="panel widget-panel panel-default pointer"> <div data-widget="{widgets.widget}" class="panel widget-panel panel-default pointer hide">
<div class="panel-heading"> <div class="panel-heading">
<strong>{widgets.name}</strong> <strong>{widgets.name}</strong>
<small><br />{widgets.description}</small> <small><br />{widgets.description}</small>
@ -67,7 +67,6 @@
<div class="panel-body"> <div class="panel-body">
<p>Drag and drop on top of any active widget</p> <p>Drag and drop on top of any active widget</p>
<div class="available-containers"> <div class="available-containers">
<h4>Available Containers <small>Drag and drop on top of any widget</small></h4>
<div class="containers"> <div class="containers">
<div class="pointer" style="padding: 20px; border: 1px dotted #dedede; margin-bottom: 20px;" data-container-html=" "> <div class="pointer" style="padding: 20px; border: 1px dotted #dedede; margin-bottom: 20px;" data-container-html=" ">
None None
@ -115,3 +114,7 @@
</div> </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>
</div> </div>

@ -1,28 +1,25 @@
<div class="col-lg-9"> <div class="row">
<div class="panel panel-default"> <div class="col-sm-2 col-xs-12 settings-header">Home Page</div>
<div class="panel-heading">Home Page</div> <div class="col-sm-10 col-xs-12">
<div class="panel-body"> <p>
<form> 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> <label>Home Page Route</label>
<select class="form-control" data-field="homePageRoute"> <select class="form-control" data-field="homePageRoute">
<!-- BEGIN routes --> <!-- BEGIN routes -->
<option value="{routes.route}">{routes.name}</option> <option value="{routes.route}">{routes.name}</option>
<!-- END routes --> <!-- END routes -->
</select> </select>
</form> </div>
</div> </form>
</div> </div>
</div> </div>
<div class="col-lg-3 acp-sidebar"> <button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<div class="panel panel-default"> <i class="material-icons">save</i>
<div class="panel-heading">Save Settings</div> </button>
<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>
<script> <script>
require(['admin/settings'], function(Settings) { require(['admin/settings'], function(Settings) {

@ -1,38 +1,27 @@
<div class="languages"> <div class="languages">
<div class="col-lg-9"> <div class="row">
<div class="panel panel-default"> <div class="col-sm-2 col-xs-12 settings-header">Language Settings</div>
<div class="panel-heading">Language Settings</div> <div class="col-sm-10 col-xs-12">
<div class="panel-body"> <p>
<p> The default language determines the language settings for all users who
The default language determines the language settings for all users who are visiting your forum. <br />
are visiting your forum. <br /> Individual users can override the default language on their account settings page.
Individual users can override the default language on their account settings page. </p>
</p>
<form class="row"> <form class="row">
<div class="form-group col-sm-6"> <div class="form-group col-sm-6">
<label for="defaultLang">Default Language</label> <label for="defaultLang">Default Language</label>
<select id="language" data-field="defaultLang" class="form-control"> <select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages --> <!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option> <option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages --> <!-- END languages -->
</select> </select>
</div> </div>
</form> </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>
</div> </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,5 +1,5 @@
<div id="navigation"> <div id="navigation">
<div class="col-lg-6"> <div class="col-lg-9">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">Active Navigation</div> <div class="panel-heading">Active Navigation</div>
<div class="panel-body"> <div class="panel-body">
@ -87,13 +87,8 @@
</div> </div>
</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> </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="sounds settings" class="row">
<div class="col-lg-9"> <form role="form">
<form role="form"> <div class="row">
<div class="panel panel-default"> <div class="col-sm-2 col-xs-12 settings-header">Notifications</div>
<div class="panel-heading">General</div> <div class="col-sm-10 col-xs-12">
<div class="panel-body"> <label for="notification">Notifications</label>
<label for="notification">Notifications</label> <div class="row">
<div class="row"> <div class="form-group col-xs-9">
<div class="form-group col-xs-9"> <select class="form-control" id="notification" name="notification">
<select class="form-control" id="notification" name="notification"> <option value=""></option>
<option value=""></option> <!-- BEGIN sounds -->
<!-- BEGIN sounds --> <option value="{sounds.name}">{sounds.name}</option>
<option value="{sounds.name}">{sounds.name}</option> <!-- END sounds -->
<!-- END sounds --> </select>
</select> </div>
</div> <div class="btn-group col-xs-3">
<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>
<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>
</div> </div>
</div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Chat</div> <div class="col-sm-2 col-xs-12 settings-header">Chat Messages</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<label for="chat-incoming">Incoming Message</label> <label for="chat-incoming">Incoming Message</label>
<div class="row"> <div class="row">
<div class="form-group col-xs-9"> <div class="form-group col-xs-9">
<select class="form-control" id="chat-incoming" name="chat-incoming"> <select class="form-control" id="chat-incoming" name="chat-incoming">
<option value=""></option> <option value=""></option>
<!-- BEGIN sounds --> <!-- BEGIN sounds -->
<option value="{sounds.name}">{sounds.name}</option> <option value="{sounds.name}">{sounds.name}</option>
<!-- END sounds --> <!-- END sounds -->
</select> </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 class="btn-group col-xs-3">
<label for="chat-outgoing">Outgoing Message</label> <button type="button" class="form-control btn btn-sm btn-default" data-action="play">Play <i class="fa fa-play"></i></button>
<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>
</div>
</form>
</div>
<div class="col-lg-3 acp-sidebar"> <label for="chat-outgoing">Outgoing Message</label>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Sounds Control Panel</div> <div class="form-group col-xs-9">
<div class="panel-body"> <select class="form-control" id="chat-outgoing" name="chat-outgoing">
<button class="btn btn-primary" id="save">Save Sound Settings</button> <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> </div>
</div> </form>
</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>

@ -5,8 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <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" 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}/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> <script>
var RELATIVE_PATH = "{relative_path}"; var RELATIVE_PATH = "{relative_path}";
@ -24,6 +26,7 @@
<script>__lt_ie_9__ = 1;</script> <script>__lt_ie_9__ = 1;</script>
<![endif]--> <![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/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/hammer/hammer.min.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/jquery/sortable/Sortable.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}/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}/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/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.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/jquery/event/jquery.event.drop.js?{cache-buster}"></script>
<script type="text/javascript" src="{relative_path}/vendor/semver/semver.browser.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/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/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/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 --> <!-- BEGIN scripts -->
<script type="text/javascript" src="{scripts.src}"></script> <script type="text/javascript" src="{scripts.src}"></script>
@ -60,99 +64,5 @@
</head> </head>
<body class="admin"> <body class="admin">
<nav class="navbar navbar-inverse navbar-fixed-top header"> <!-- IMPORT admin/partials/menu.tpl -->
<div class="container"> <div class="container" id="content">
<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">

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

@ -1,143 +1,134 @@
<div class="row"> <div class="row">
<form role="form" class="category" data-cid="{category.cid}"> <form role="form" class="category" data-cid="{category.cid}">
<div class="col-md-9"> <ul class="nav nav-pills">
<div class="panel panel-default"> <li class="active"><a href="#category-settings" data-toggle="tab">Category Settings</a></li>
<div class="panel-heading"><i class="fa fa-folder"></i> Category Settings</div> <li><a href="#privileges" data-toggle="tab">Privileges</a></li>
<div class="panel-body category-settings-form"> </ul>
<fieldset> <br />
<div class="col-xs-12"> <div class="tab-content">
<h3 data-edit-target="#cid-{category.cid}-name"><span>{category.name}</span> <small><i class="fa fa-edit"></i></small></h3> <div class="tab-pane fade active in row" id="category-settings">
<input id="cid-{category.cid}-name" type="text" class="form-control hide" placeholder="Category Name" data-name="name" value="{category.name}" /> <div class="col-md-9">
<h4 data-edit-target="#cid-{category.cid}-description"><span>{category.description}</span> <small><i class="fa fa-edit"></i></small></h4> <div class="category-settings-form">
<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> <fieldset>
</div> <label for="cid-{category.cid}-name">Category Name</label>
</fieldset> <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> <fieldset class="row">
<div class="col-xs-12"> <div class="col-sm-4 col-xs-12">
<div class="form-group"> <div class="form-group">
<label for="cid-{category.cid}-parentCid">Parent Category</label> <label for="cid-{category.cid}-bgColor">Background Colour</label>
<br/> <input id="cid-{category.cid}-bgColor" placeholder="#0059b2" data-name="bgColor" value="{category.bgColor}" class="form-control category_bgColor" />
<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> </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>
</div> <div class="col-sm-4 col-xs-12">
</fieldset> <div class="form-group">
<fieldset> <label for="cid-{category.cid}-color">Text Colour</label>
<div class="col-sm-4 col-xs-12"> <input id="cid-{category.cid}-color" placeholder="#fff" data-name="color" value="{category.color}" class="form-control category_color" />
<div class="form-group"> </div>
<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> </div>
</div> <div class="col-sm-4 col-xs-12">
<div class="col-sm-4 col-xs-12"> <div class="form-group">
<div class="form-group"> <label for="cid-{category.cid}-imageClass">Background Image Size</label>
<label for="cid-{category.cid}-class">Custom Class</label> <select id="cid-{category.cid}-imageClass" class="form-control" data-name="imageClass" data-value="{category.imageClass}">
<input id="cid-{category.cid}-class" type="text" class="form-control" placeholder="col-md-6 col-xs-6" data-name="class" value="{category.class}" /> <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> <div class="col-sm-4 col-xs-12">
<div class="col-sm-4 col-xs-12"> <div class="form-group">
<div class="form-group"> <label for="cid-{category.cid}-numRecentReplies"># of Recent Replies</label>
<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}" />
<input id="cid-{category.cid}-numRecentReplies" type="text" class="form-control" placeholder="2" data-name="numRecentReplies" value="{category.numRecentReplies}" /> </div>
</div> </div>
</div> <div class="col-sm-4 col-xs-12">
<div class="col-sm-4 col-xs-12"> <div class="form-group">
<div class="form-group"> <label for="cid-{category.cid}-link">External Link</label>
<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}" />
<input id="cid-{category.cid}-link" type="text" class="form-control" placeholder="http://domain.com" data-name="link" value="{category.link}" /> </div>
</div> </div>
</div> </fieldset>
</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 -->
</div> </div>
</div> </div>
</div>
</div>
<div class="col-md-3 options acp-sidebar"> <div class="col-md-3 options acp-sidebar">
<div class="panel panel-default hidden-sm"> <div class="panel panel-default">
<div class="panel-heading">Preview</div> <div class="panel-body">
<div class="panel-body"> <div class="category-preview" style="
<div class="category-preview" style=" <!-- IF category.backgroundImage -->background-image: url({category.backgroundImage});<!-- ENDIF category.backgroundImage -->
<!-- IF category.backgroundImage -->background-image: url({category.backgroundImage});<!-- ENDIF category.backgroundImage --> <!-- IF category.bgColor -->background-color: {category.bgColor};<!-- ENDIF category.bgColor -->
<!-- IF category.bgColor -->background-color: {category.bgColor};<!-- ENDIF category.bgColor --> <!-- IF category.imageClass -->background-size: {category.imageClass};<!-- ENDIF category.imageClass -->
<!-- IF category.imageClass -->background-size: {category.imageClass};<!-- ENDIF category.imageClass --> color: {category.color};
color: {category.color}; ">
"> <div class="icon">
<div class="icon"> <i data-name="icon" value="{category.icon}" class="fa {category.icon} fa-2x"></i>
<i data-name="icon" value="{category.icon}" class="fa {category.icon} fa-2x"></i> </div>
</div> </div>
</div> <div class="btn-group btn-group-justified">
<div class="btn-group btn-group-justified"> <div class="btn-group">
<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>
<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>
</div> <!-- IF category.image -->
<!-- IF category.image --> <div class="btn-group">
<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>
<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> </div>
<!-- ENDIF category.image -->
</div> </div>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="tab-pane fade col-xs-12" id="privileges">
<div class="panel-heading">Categories Control Panel</div> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<div class="btn-group btn-group-justified"> <p>
<div class="btn-group"> You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or
<button class="btn btn-primary save">Save</button> a per-group basis. You can add a new user to this table by searching for them in the form below.
</div> </p>
<div class="btn-group"> <p class="text-warning">
<button class="btn btn-default revert">Revert</button> <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>
</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> </div>
</div> </div>
</form> </form>
</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>
<input type="hidden" template-variable="cid" value="{category.cid}" /> <input type="hidden" template-variable="cid" value="{category.cid}" />

@ -1,73 +1,72 @@
<div class="flags"> <div class="flags">
<div class="col-lg-9"> <div class="col-lg-9">
<div class="panel panel-default"> <div data-next="{next}">
<div class="panel-heading"><i class="fa fa-flag"></i> Flags</div> <form id="flag-search" method="GET" action="flags">
<div class="panel-body" data-next="{next}"> <div class="form-group">
<form id="flag-search" method="GET" action="flags"> <div class="row">
<div class="form-group"> <div class="col-md-6">
<div class="row"> <label>Flags by user</label>
<div class="col-md-6"> <input type="text" class="form-control" id="byUsername" placeholder="Search flagged posts by username" name="byUsername" value="{byUsername}">
<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> </div>
</div>
<div class="form-group"> <div class="form-group">
<label>Sort By</label> <label>Sort By</label>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<select id="flag-sort-by" class="form-control" name="sortBy"> <select id="flag-sort-by" class="form-control" name="sortBy">
<option value="count">Most Flags</option> <option value="count">Most Flags</option>
<option value="time">Most Recent</option> <option value="time">Most Recent</option>
</select> </select>
</div>
</div> </div>
</div> </div>
</div>
<button type="submit" class="btn btn-default">[[global:search]]</button> <button type="submit" class="btn btn-primary">[[global:search]]</button>
</form> </form>
<hr/> <br />
<hr/>
<div class="post-container" data-next="{next}"> <div class="post-container" data-next="{next}">
<!-- IF !posts.length --> <!-- IF !posts.length -->
No flagged posts! No flagged posts!
<!-- ENDIF !posts.length--> <!-- ENDIF !posts.length-->
<!-- BEGIN posts --> <!-- BEGIN posts -->
<div> <div>
<div class="panel panel-default" data-pid="{posts.pid}" data-tid="{posts.topic.tid}"> <div class="panel panel-default" data-pid="{posts.pid}" data-tid="{posts.topic.tid}">
<div class="panel-body"> <div class="panel-body">
<a href="{config.relative_path}/user/{posts.user.userslug}"> <a href="{config.relative_path}/user/{posts.user.userslug}">
<img title="{posts.user.username}" class="img-rounded user-img" src="{posts.user.picture}"> <img title="{posts.user.username}" class="img-rounded user-img" src="{posts.user.picture}">
</a> </a>
<a href="{config.relative_path}/user/{posts.user.userslug}"> <a href="{config.relative_path}/user/{posts.user.userslug}">
<strong><span>{posts.user.username}</span></strong> <strong><span>{posts.user.username}</span></strong>
</a> </a>
<div class="content"> <div class="content">
<p>{posts.content}</p> <p>{posts.content}</p>
<p class="fade-out"></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> </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> </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> </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> </div>
<!-- END posts -->
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-3 acp-sidebar"> <div class="col-lg-3 acp-sidebar">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">Flags Control Panel</div> <div class="panel-heading">Flags Control Panel</div>

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

@ -1,55 +1,53 @@
<div class="registration"> <div class="registration">
<div class="col-lg-9"> <table class="table table-striped users-list">
<div class="panel panel-default"> <tr>
<div class="panel-heading"><i class="fa fa-group"></i> Registration Queue</div> <th>Name</th>
<div class="panel-body"> <th>Email</th>
<table class="table table-striped users-list"> <th>IP</th>
<tr> <th>Time</th>
<th>Name</th> <th></th>
<th>Email</th> </tr>
<th>IP</th> <!-- IF !users.length -->
<th>Time</th> <p>
<th></th> 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".
</tr> </p>
<!-- BEGIN users --> <!-- ENDIF !users.length -->
<tr data-username="{users.username}"> <!-- BEGIN users -->
<td> <tr data-username="{users.username}">
<!-- IF users.usernameSpam --> <td>
<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> <!-- IF users.usernameSpam -->
<!-- ELSE --> <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>
<i class="fa fa-check text-success"></i> <!-- ELSE -->
<!-- ENDIF users.usernameSpam --> <i class="fa fa-check text-success"></i>
{users.username} <!-- ENDIF users.usernameSpam -->
</td> {users.username}
<td> </td>
<!-- IF users.emailSpam --> <td>
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.email.frequency} Appears: {users.spamData.email.appears}"></i> <!-- IF users.emailSpam -->
<!-- ELSE --> <i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.email.frequency} Appears: {users.spamData.email.appears}"></i>
<i class="fa fa-check text-success"></i> <!-- ELSE -->
<!-- ENDIF users.emailSpam --> <i class="fa fa-check text-success"></i>
{users.email} <!-- ENDIF users.emailSpam -->
</td> {users.email}
<td> </td>
<!-- IF users.ipSpam --> <td>
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.ip.frequency} Appears: {users.spamData.ip.appears}"></i> <!-- IF users.ipSpam -->
<!-- ELSE --> <i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.ip.frequency} Appears: {users.spamData.ip.appears}"></i>
<i class="fa fa-check text-success"></i> <!-- ELSE -->
<!-- ENDIF users.ipSpam --> <i class="fa fa-check text-success"></i>
{users.ip} <!-- ENDIF users.ipSpam -->
</td> {users.ip}
<td> </td>
<span class="timeago" title="{users.timestamp}"></span> <td>
</td> <span class="timeago" title="{users.timestamp}"></span>
<td> </td>
<div class="btn-group pull-right"> <td>
<button class="btn btn-success btn-xs" data-action="accept"><i class="fa fa-check"></i></button> <div class="btn-group pull-right">
<button class="btn btn-danger btn-xs" data-action="delete"><i class="fa fa-times"></i></button> <button class="btn btn-success btn-xs" data-action="accept"><i class="fa fa-check"></i></button>
</div> <button class="btn btn-danger btn-xs" data-action="delete"><i class="fa fa-times"></i></button>
</td> </div>
</tr> </td>
<!-- END users --> </tr>
</table> <!-- END users -->
</div> </table>
</div>
</div>
</div> </div>

@ -1,34 +1,30 @@
<div class="tags"> <div class="tags row">
<div class="col-lg-9"> <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 panel-default tag-management">
<div class="panel-heading">Tag Management</div>
<div class="panel-body"> <div class="panel-body">
<div class="row"> <!-- IF !tags.length -->
<div class="tag-list"> Your forum does not have any topics with tags yet.
<!-- BEGIN tags --> <!-- ENDIF !tags.length -->
<div class="tag-row" data-tag="{tags.value}">
<div data-value="{tags.value}"> <div class="tag-list">
<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> <!-- 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>
<div class="tag-modal hidden"> <div class="form-group">
<div class="form-group"> <label for="color">Text Colour</label>
<label for="bgColor">Background Colour</label> <input id="color" placeholder="#a2a2a2" data-name="color" value="{tags.color}" class="form-control category_color" />
<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> </div>
</div> </div>
<!-- END tags -->
</div> </div>
<!-- END tags -->
</div> </div>
</div> </div>
</div> </div>
@ -39,8 +35,8 @@
<div class="panel-heading">Modify Tag</div> <div class="panel-heading">Modify Tag</div>
<div class="panel-body"> <div class="panel-body">
<p>Select tags via clicking and/or dragging, use shift to select multiple.</p> <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-primary btn-block" id="modify">Modify Tags</button>
<button class="btn btn-warning btn-md" id="deleteSelected">Delete Tags</button> <button class="btn btn-warning btn-block" id="deleteSelected">Delete Tags</button>
</div> </div>
</div> </div>

@ -4,12 +4,11 @@
<div class="panel-heading"><i class="fa fa-user"></i> Users</div> <div class="panel-heading"><i class="fa fa-user"></i> Users</div>
<div class="panel-body"> <div class="panel-body">
<ul class="nav nav-pills"> <ul class="nav nav-pills">
<li class='active'><a href='{config.relative_path}/admin/manage/users/latest'>Latest Users</a></li> <li><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><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><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><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><a href='{config.relative_path}/admin/manage/users/search'>User Search</a></li>
<li class=''><a href='{config.relative_path}/admin/manage/users/search'>User Search</a></li>
<div class="btn-group pull-right"> <div class="btn-group pull-right">

@ -8,7 +8,7 @@
<i data-name="icon" value="{categories.icon}" class="fa {categories.icon}"></i> <i data-name="icon" value="{categories.icon}" class="fa {categories.icon}"></i>
</div> </div>
<div class="information"> <div class="information">
<h5 class="header">{categories.name}</h5> <h5 class="category-header">{categories.name}</h5>
<p class="description">{categories.descriptionParsed}</p> <p class="description">{categories.descriptionParsed}</p>
</div> </div>
</div> </div>
@ -16,10 +16,10 @@
<div class="col-md-3"> <div class="col-md-3">
<div class="clearfix pull-right text-right"> <div class="clearfix pull-right text-right">
<div class="btn-group"> <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 --> <!-- IF categories.disabled -->Enable<!-- ELSE -->Disable<!-- ENDIF categories.disabled -->
</button> </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> </div>
</div> </div>

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

@ -1,103 +1,250 @@
<div class="sidebar-nav"> <nav id="menu" class="visible-xs visible-sm">
<ul class="nav nav-list"> <section class="menu-section">
<li class="nav-header"><i class="fa fa-fw fa-dashboard"></i> General</li> <h3 class="menu-section-title">General</h3>
<li class="active"><a href="{relative_path}/admin/general/dashboard">Dashboard</a></li> <ul class="menu-section-list">
<li><a href="{relative_path}/admin/general/homepage">Home Page</a></li> <a href="{relative_path}/admin/general/dashboard">Dashboard</a>
<li><a href="{relative_path}/admin/general/navigation">Navigation</a></li> <li><a href="{relative_path}/admin/general/homepage">Home Page</a></li>
<li><a href="{relative_path}/admin/general/languages">Languages</a></li> <li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<li><a href="{relative_path}/admin/general/sounds">Sounds</a></li> <li><a href="{relative_path}/admin/general/languages">Languages</a></li>
</ul> <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>
<div class="sidebar-nav"> </form>
<ul class="nav nav-list"> </ul>
<li class="nav-header"><i class="fa fa-fw fa-comments-o"></i> Manage</li> <ul id="main-menu">
<li><a href="{relative_path}/admin/manage/categories">Categories</a></li> <li class="menu-item">
<li><a href="{relative_path}/admin/manage/tags">Tags</a></li> <a href="{relative_path}/admin/general/dashboard">Dashboard</a>
<li><a href="{relative_path}/admin/manage/users">Users</a></li> </li>
<li><a href="{relative_path}/admin/manage/groups">Groups</a></li> <li class="dropdown menu-item">
<li><a href="{relative_path}/admin/manage/flags">Flags</a></li> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">General</a>
</ul> <ul class="dropdown-menu" role="menu">
</div> <li><a href="{relative_path}/admin/general/homepage">Home Page</a></li>
<div class="sidebar-nav"> <li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<ul class="nav nav-list"> <li><a href="{relative_path}/admin/general/languages">Languages</a></li>
<li class="nav-header"><i class="fa fa-fw fa-cogs"></i> Settings</li> <li><a href="{relative_path}/admin/general/sounds">Sounds</a></li>
<li><a href="{relative_path}/admin/settings/general">General</a></li> </ul>
<li><a href="{relative_path}/admin/settings/reputation">Reputation</a></li> </li>
<li><a href="{relative_path}/admin/settings/email">Email</a></li> <li class="dropdown menu-item">
<li><a href="{relative_path}/admin/settings/user">User</a></li> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Manage</a>
<li><a href="{relative_path}/admin/settings/group">Group</a></li> <ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/settings/guest">Guests</a></li> <li><a href="{relative_path}/admin/manage/categories">Categories</a></li>
<li><a href="{relative_path}/admin/settings/post">Post</a></li> <li><a href="{relative_path}/admin/manage/tags">Tags</a></li>
<li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li> <li><a href="{relative_path}/admin/manage/users">Users</a></li>
<li><a href="{relative_path}/admin/settings/tags">Tags</a></li> <li><a href="{relative_path}/admin/manage/registration">Registration Queue</a></li>
<li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li> <li><a href="{relative_path}/admin/manage/groups">Groups</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li> <li><a href="{relative_path}/admin/manage/flags">Flags</a></li>
<li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li> </ul>
<li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li> </li>
</ul> <li class="dropdown menu-item">
</div> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Settings</a>
<div class="sidebar-nav"> <ul class="dropdown-menu" role="menu">
<ul class="nav nav-list"> <li><a href="{relative_path}/admin/settings/general">General</a></li>
<li class="nav-header"><i class="fa fa-fw fa-paint-brush"></i> Appearance</li> <li><a href="{relative_path}/admin/settings/reputation">Reputation</a></li>
<li><a href="{relative_path}/admin/appearance/themes">Themes</a></li> <li><a href="{relative_path}/admin/settings/email">Email</a></li>
<li><a href="{relative_path}/admin/appearance/skins">Skins</a></li> <li><a href="{relative_path}/admin/settings/user">User</a></li>
<li><a href="{relative_path}/admin/appearance/customise">Custom HTML &amp; CSS</a></li> <li><a href="{relative_path}/admin/settings/group">Group</a></li>
</ul> <li><a href="{relative_path}/admin/settings/guest">Guests</a></li>
</div> <li><a href="{relative_path}/admin/settings/post">Post</a></li>
<div class="sidebar-nav"> <li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li>
<ul class="nav nav-list"> <li><a href="{relative_path}/admin/settings/tags">Tags</a></li>
<li class="nav-header"><i class="fa fa-fw fa-wrench"></i> Extend</li> <li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li>
<li><a href="{relative_path}/admin/extend/plugins">Plugins</a></li> <li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li>
<li><a href="{relative_path}/admin/extend/widgets">Widgets</a></li> <li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li>
<li><a href="{relative_path}/admin/extend/rewards">Rewards</a></li> <li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li>
</ul> </ul>
</div> </li>
<div class="sidebar-nav"> <li class="dropdown menu-item">
<ul class="nav nav-list"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Appearance</a>
<li class="nav-header"><i class="fa fa-fw fa-hdd-o"></i> Advanced</li> <ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/advanced/database">Database</a></li> <li><a href="{relative_path}/admin/appearance/themes">Themes</a></li>
<li><a href="{relative_path}/admin/advanced/events">Events</a></li> <li><a href="{relative_path}/admin/appearance/skins">Skins</a></li>
<li><a href="{relative_path}/admin/advanced/logs">Logs</a></li> <li><a href="{relative_path}/admin/appearance/customise">Custom HTML &amp; CSS</a></li>
<li><a href="{relative_path}/admin/advanced/post-cache">Post Cache</a></li> </ul>
</ul> </li>
</div> <li class="dropdown menu-item">
<!-- IF authentication.length --> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Extend</a>
<div class="sidebar-nav"> <ul class="dropdown-menu" role="menu">
<ul class="nav nav-list"> <li><a href="{relative_path}/admin/extend/plugins">Plugins</a></li>
<li class="nav-header"><i class="fa fa-fw fa-facebook-square"></i> Social Authentication</li> <li><a href="{relative_path}/admin/extend/widgets">Widgets</a></li>
<!-- BEGIN authentication --> <li><a href="{relative_path}/admin/extend/rewards">Rewards</a></li>
<li> </ul>
<a href="{relative_path}/admin{authentication.route}">{authentication.name}</a> </li>
</li> <!-- IF authentication.length -->
<!-- END authentication --> <li class="dropdown menu-item">
</ul> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Social Authentication</a>
</div> <ul class="dropdown-menu" role="menu">
<!-- ENDIF authentication.length --> <!-- BEGIN authentication -->
<!-- IF plugins.length --> <li>
<div class="sidebar-nav"> <a href="{relative_path}/admin{authentication.route}">{authentication.name}</a>
<ul class="nav nav-list"> </li>
<li class="nav-header"><i class="fa fa-fw fa-th"></i> Installed Plugins</li> <!-- END authentication -->
<!-- BEGIN plugins --> </ul>
<li> </li>
<a href="{relative_path}/admin{plugins.route}"> <!-- ENDIF authentication.length -->
<!-- IF plugins.icon --> <!-- IF plugins.length -->
<i class="fa {plugins.icon}"></i> <li class="dropdown menu-item">
<!-- ENDIF plugins.icon --> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Plugins</a>
{plugins.name} <ul class="dropdown-menu" role="menu">
</a> <!-- BEGIN plugins -->
</li> <li>
<!-- END plugins --> <a href="{relative_path}/admin{plugins.route}">{plugins.name}</a>
<li data-link="1"> </li>
<a href="{relative_path}/admin/extend/plugins"><i class="fa fa-plus"></i> Install Plugins</a> <!-- END plugins -->
</li> <li class="divider"></li>
</ul> <li data-link="1">
</div> <a href="{relative_path}/admin/extend/plugins">Install Plugins</a>
<!-- ENDIF plugins.length --> </li>
<!-- IF env --> </ul>
<div class="sidebar-nav"> </li>
<ul class="nav nav-list"> <!-- ENDIF plugins.length -->
<li class="nav-header"><i class="fa fa-fw fa-th"></i> Development</li> <li class="dropdown menu-item">
<li><a href="{relative_path}/admin/development/logger">Logger</a></li> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Advanced</a>
</ul> <ul class="dropdown-menu" role="menu">
</div> <li><a href="{relative_path}/admin/advanced/database">Database</a></li>
<!-- ENDIF env --> <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 --> <!-- BEGIN themes -->
<li data-type="{themes.type}" data-theme="{themes.id}"<!-- IF themes.css --> data-css="{themes.css}"<!-- ENDIF themes.css -->> <div class="col-xs-4" 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 class="theme-card mdl-card mdl-shadow--2dp">
<div> <div class="mdl-card__title mdl-card--expand" style="background-image: url('{themes.screenshot_url}');"></div>
<div class="pull-right"> <div class="mdl-card__supporting-text">
<button class="btn btn-primary" data-action="use">Use</button> <h2 class="mdl-card__title-text">{themes.name}</h2>
</div> <p>
<h4>{themes.name}</h4> {themes.description}
<p> </p>
{themes.description}
<!-- IF themes.url --> <!-- IF themes.url -->
(<a href="{themes.url}" target="_blank">Homepage</a>) <p>
<a href="{themes.url}" target="_blank">Homepage</a>
</p>
<!-- ENDIF themes.url --> <!-- ENDIF themes.url -->
</p> </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> </div>
<div class="clear"></div> </div>
</li>
<!-- END themes --> <!-- 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>
<h4>No Skin</h4>
<p>Remove applied skin and revert back to the base colours</p>
</li>
<!-- ENDIF showRevert -->

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

@ -1,8 +1,8 @@
<!-- IMPORT admin/settings/header.tpl --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Email Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Email Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<p> <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 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> </p>
<input type="text" class="form-control input-lg" id="email:from_name" data-field="email:from_name" placeholder="NodeBB" /><br /> <input type="text" class="form-control input-lg" id="email:from_name" data-field="email:from_name" placeholder="NodeBB" /><br />
</div> </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"> <p class="help-block">
The test email will be sent to the currently logged in user's email address. The test email will be sent to the currently logged in user's email address.
</p> </p>
@ -29,13 +29,14 @@
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Email Subscriptions</div> <div class="col-sm-2 col-xs-12 settings-header">Email Subscriptions</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="checkbox"> <div class="checkbox">
<label for="disableEmailSubscriptions"> <label for="disableEmailSubscriptions" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" id="disableEmailSubscriptions" data-field="disableEmailSubscriptions" name="disableEmailSubscriptions" /> Disable subscriber notification emails <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> </label>
</div> </div>
</form> </form>

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

@ -1,15 +1,18 @@
<!-- IMPORT admin/settings/header.tpl --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Site Settings</div> <div class="col-sm-2 col-xs-12 settings-header">
<div class="panel-body"> Site Settings
</div>
<div class="col-sm-10 col-xs-12">
<form> <form>
<label>Site Title</label> <label>Site Title</label>
<input class="form-control" type="text" placeholder="Your Community Name" data-field="title" /> <input class="form-control" type="text" placeholder="Your Community Name" data-field="title" />
<div class="checkbox"> <div class="checkbox">
<label for="showSiteTitle"> <label for="showSiteTitle" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" id="showSiteTitle" data-field="showSiteTitle" name="showSiteTitle" /> Show Site Title in Header <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> </label>
</div> </div>
@ -28,9 +31,9 @@
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Site Logo</div> <div class="col-sm-2 col-xs-12 settings-header">Site Logo</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<div class="form-group"> <div class="form-group">
<label for="logoUrl">Image</label> <label for="logoUrl">Image</label>
<div class="input-group"> <div class="input-group">
@ -54,9 +57,11 @@
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Favicon</div> <div class="col-sm-2 col-xs-12 settings-header">
<div class="panel-body"> Favicon
</div>
<div class="col-sm-10 col-xs-12">
<div class="form-group"> <div class="form-group">
<div class="input-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 /> <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> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Miscellaneous</div> <div class="col-sm-2 col-xs-12 settings-header">Miscellaneous</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="useOutgoingLinksPage"> <strong>Use Outgoing Links Warning Page</strong> <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> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="disableSocialButtons"> <strong>Disable social buttons</strong> <input type="checkbox" class="mdl-switch__input" id="showSiteTitle" data-field="disableSocialButtons">
<span class="mdl-switch__label"><strong>Disable social buttons</strong></span>
</label> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="disableChat"> <strong>Disable chat</strong> <input type="checkbox" class="mdl-switch__input" id="showSiteTitle" data-field="disableChat">
<span class="mdl-switch__label"><strong>Disable chat</strong></span>
</label> </label>
</div> </div>
</form> </form>

@ -1,29 +1,33 @@
<!-- IMPORT admin/settings/header.tpl --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">General</div> <div class="col-sm-2 col-xs-12 settings-header">General</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form role="form"> <form role="form">
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowPrivateGroups" checked> <strong>Private Groups</strong> <input class="mdl-switch__input" type="checkbox" data-field="allowPrivateGroups" checked>
<p class="help-block"> <span class="mdl-switch__label"><strong>Private Groups</strong></span>
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> </label>
</div> </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"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowGroupCreation"> <strong>Allow Group Creation</strong> <input class="mdl-switch__input" type="checkbox" data-field="allowGroupCreation">
<p class="help-block"> <span class="mdl-switch__label"><strong>Allow Group Creation</strong></span>
If enabled, users can create groups <em>(Default: disabled)</em>
</p>
</label> </label>
</div> </div>
<p class="help-block">
If enabled, users can create groups <em>(Default: disabled)</em>
</p>
</form> </form>
</div> </div>
</div> </div>

@ -1,38 +1,42 @@
<!-- IMPORT admin/settings/header.tpl --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Guests</div> <div class="col-sm-2 col-xs-12 settings-header">Guest Handles</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<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>
<form role="form"> <form role="form">
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowGuestHandles"> <strong>Allow guest handles</strong> <input class="mdl-switch__input" type="checkbox" data-field="allowGuestHandles">
<p class="help-block"> <span class="mdl-switch__label"><strong>Allow guest handles</strong></span>
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> </label>
</div> </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"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowGuestSearching"> <strong>Allow guests to search without logging in</strong> <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> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowGuestUserSearching"> <strong>Allow guests to search users without logging in</strong> <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> </label>
</div> </div>
</form> </form>
</div> </div>
</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 --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Notifications</div> <div class="col-sm-2 col-xs-12 settings-header">Notifications</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<strong>Welcome Notification</strong><br /> <textarea class="form-control" data-field="welcomeNotification"></textarea><br /> <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 /> <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 --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Pagination Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Pagination Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="usePagination"> <strong>Paginate topics and posts instead of using infinite scroll.</strong> <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> </label>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Topic Pagination</div> <div class="col-sm-2 col-xs-12 settings-header">Topic Pagination</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<strong>Posts per Page</strong><br /> <input type="text" class="form-control" value="20" data-field="postsPerPage"> <strong>Posts per Page</strong><br /> <input type="text" class="form-control" value="20" data-field="postsPerPage">
</form> </form>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Category Pagination</div> <div class="col-sm-2 col-xs-12 settings-header">Category Pagination</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<strong>Topics per Page</strong><br /> <input type="text" class="form-control" value="20" data-field="topicsPerPage"><br /> <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"> <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 --> <!-- IMPORT admin/settings/header.tpl -->
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Post Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Post Sorting</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="form-group"> <div class="form-group">
<label>Default Post Sorting</label> <label>Default Post Sorting</label>
@ -20,55 +20,57 @@
<option value="most_posts">Most Posts</option> <option value="most_posts">Most Posts</option>
</select> </select>
</div> </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"> <div class="form-group">
<label>Seconds between Posts</label> <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>
<div class="form-group col-sm-6"> <div class="form-group">
<label>Seconds between Posts for New Users</label> <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>
<div class="form-group col-sm-6"> <div class="form-group">
<label>Reputation threshold before this restriction is lifted</label> <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>
<div class="form-group"> <div class="form-group">
<label>Seconds before new user can post</label> <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>
<div class="form-group"> <div class="form-group">
<label>Number of seconds users are allowed to edit posts after posting. (0 disabled)</label> <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>
<div class="form-group"> <div class="form-group">
<label>Minimum Title Length</label> <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>
<div class="form-group"> <div class="form-group">
<label>Maximum Title Length</label> <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>
<div class="form-group"> <div class="form-group">
<label>Minimum Post Length</label> <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>
<div class="form-group"> <div class="form-group">
<label>Maximum Post Length</label> <label>Maximum Post Length</label>
<input type="number" class="form-control" value="32767" data-field="maximumPostLength"> <input type="text" 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>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Teaser Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Teaser Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="form-group"> <div class="form-group">
<label>Teaser Post</label> <label>Teaser Post</label>
@ -82,23 +84,26 @@
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Signature Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Signature Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="disableSignatures"> <strong>Disable signatures</strong> <input class="mdl-switch__input" type="checkbox" data-field="disableSignatures">
<span class="mdl-switch__label"><strong>Disable signatures</strong></span>
</label> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="signatures:disableLinks"> <strong>Disable links in signatures</strong> <input class="mdl-switch__input" type="checkbox" data-field="signatures:disableLinks">
<span class="mdl-switch__label"><strong>Disable links in signatures</strong></span>
</label> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="signatures:disableImages"> <strong>Disable images in signatures</strong> <input class="mdl-switch__input" type="checkbox" data-field="signatures:disableImages">
<span class="mdl-switch__label"><strong>Disable images in signatures</strong></span>
</label> </label>
</div> </div>
<div class="form-group"> <div class="form-group">
@ -109,34 +114,37 @@
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Chat Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Chat Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<strong>Chat Message Inbox Size</strong><br /> <input type="text" class="form-control" value="250" data-field="chatMessageInboxSize"> <strong>Chat Message Inbox Size</strong><br /> <input type="text" class="form-control" value="250" data-field="chatMessageInboxSize">
</form> </form>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Upload Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Upload Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowFileUploads"> <strong>Allow users to upload regular files</strong> <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> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="privateUploads"> <strong>Make uploaded files private</strong> <input class="mdl-switch__input" type="checkbox" data-field="privateUploads">
<span class="mdl-switch__label"><strong>Make uploaded files private</strong></span>
</label> </label>
</div> </div>
<strong>Maximum File Size</strong><br /> <input type="text" class="form-control" value="2048" data-field="maximumFileSize"><br /> <strong>Maximum File Size</strong><br /> <input type="text" class="form-control" value="2048" data-field="maximumFileSize"><br />
<div class="checkbox"> <div class="checkbox">
<label> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" data-field="allowTopicsThumbnail"> <strong>Allow users to upload topic thumbnails</strong> <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> </label>
</div> </div>
<strong>Topic Thumb Size</strong><br /> <input type="text" class="form-control" value="120" data-field="topicThumbSize"> <br /> <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> </div>
<div class="panel panel-default"> <div class="row">
<div class="panel-heading">Composer Settings</div> <div class="col-sm-2 col-xs-12 settings-header">Composer Settings</div>
<div class="panel-body"> <div class="col-sm-10 col-xs-12">
<form> <form>
<p> <p>
The following settings govern the functionality and/or appearance of the post composer shown 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. to users when they create new topics, or reply to existing topics.
</p> </p>
<div class="checkbox"> <div class="checkbox">
<label for="composer:showHelpTab"> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="composer:showHelpTab">
<input type="checkbox" id="composer:showHelpTab" data-field="composer:showHelpTab" checked /> <input class="mdl-switch__input" type="checkbox" id="composer:showHelpTab" data-field="composer:showHelpTab" checked />
Show "Help" tab <span class="mdl-switch__label">Show "Help" tab</span>
</label> </label>
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label for="composer:allowPluginHelp"> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="composer:allowPluginHelp">
<input type="checkbox" id="composer:allowPluginHelp" data-field="composer:allowPluginHelp" checked /> <input class="mdl-switch__input" type="checkbox" id="composer:allowPluginHelp" data-field="composer:allowPluginHelp" checked />
Allow plugins to add content to the help tab <span class="mdl-switch__label">Allow plugins to add content to the help tab</span>
</label> </label>
</div> </div>
<div class="form-group"> <div class="form-group">
@ -175,4 +183,17 @@
</div> </div>
</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 --> <!-- IMPORT admin/settings/footer.tpl -->

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

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

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

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

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

Loading…
Cancel
Save