Allows BookStack to be installed at a non-root location on a domain.
Closes #40.
APP_DEBUG=false
APP_KEY=SomeRandomString
+# The below url has to be set if using social auth options
+# or if you are not using BookStack at the root path of your domain.
+# APP_URL=http://bookstack.dev
+
# Database details
DB_HOST=localhost
DB_DATABASE=database_database
GITHUB_APP_SECRET=false
GOOGLE_APP_ID=false
GOOGLE_APP_SECRET=false
-# URL used for social login redirects, NO TRAILING SLASH
-APP_URL=http://bookstack.dev
# External services such as Gravatar
DISABLE_EXTERNAL_SERVICES=false
/**
* Get the url for this book.
+ * @param string|bool $path
* @return string
*/
- public function getUrl()
+ public function getUrl($path = false)
{
+ if ($path !== false) {
+ return baseUrl('/books/' . $this->slug . '/' . trim($path, '/'));
+ }
return baseUrl('/books/' . $this->slug);
}
/**
* Get the url of this chapter.
+ * @param string|bool $path
* @return string
*/
- public function getUrl()
+ public function getUrl($path = false)
{
$bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug;
+ if ($path !== false) {
+ return baseUrl('/books/' . $bookSlug. '/chapter/' . $this->slug . '/' . trim($path, '/'));
+ }
return baseUrl('/books/' . $bookSlug. '/chapter/' . $this->slug);
}
// Handle notify exceptions which will redirect to the
// specified location then show a notification message.
if ($e instanceof NotifyException) {
- \Session::flash('error', $e->message);
- return response()->redirectTo($e->redirectLocation);
+ session()->flash('error', $e->message);
+ return redirect($e->redirectLocation);
}
// Handle pretty exceptions which will show a friendly application-fitting page
-<?php
-
-namespace BookStack\Http\Controllers\Auth;
+<?php namespace BookStack\Http\Controllers\Auth;
use BookStack\Exceptions\AuthException;
-use BookStack\Exceptions\PrettyException;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Http\Request;
use BookStack\Exceptions\SocialSignInException;
protected $redirectAfterLogout = '/login';
protected $username = 'email';
-
protected $socialAuthService;
protected $emailConfirmationService;
protected $userRepo;
$this->socialAuthService = $socialAuthService;
$this->emailConfirmationService = $emailConfirmationService;
$this->userRepo = $userRepo;
+ $this->redirectPath = baseUrl('/');
+ $this->redirectAfterLogout = baseUrl('/login');
$this->username = config('auth.method') === 'standard' ? 'email' : 'username';
parent::__construct();
}
*/
public function showRecentlyCreated()
{
- $pages = $this->pageRepo->getRecentlyCreatedPaginated(20);
+ $pages = $this->pageRepo->getRecentlyCreatedPaginated(20)->setPath(baseUrl('/pages/recently-created'));
return view('pages/detailed-listing', [
'title' => 'Recently Created Pages',
'pages' => $pages
*/
public function showRecentlyUpdated()
{
- $pages = $this->pageRepo->getRecentlyUpdatedPaginated(20);
+ $pages = $this->pageRepo->getRecentlyUpdatedPaginated(20)->setPath(baseUrl('/pages/recently-updated'));
return view('pages/detailed-listing', [
'title' => 'Recently Updated Pages',
'pages' => $pages
public function handle($request, Closure $next)
{
if ($this->auth->check() && setting('registration-confirmation') && !$this->auth->user()->email_confirmed) {
- return redirect()->guest('/register/confirm/awaiting');
+ return redirect()->guest(baseUrl('/register/confirm/awaiting'));
}
if ($this->auth->guest() && !setting('app-public')) {
/**
* Get the url for this page.
+ * @param string|bool $path
* @return string
*/
- public function getUrl()
+ public function getUrl($path = false)
{
$bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug;
$midText = $this->draft ? '/draft/' : '/page/';
$idComponent = $this->draft ? $this->id : $this->slug;
+
+ if ($path !== false) {
+ return baseUrl('/books/' . $bookSlug . $midText . $idComponent . '/' . trim($path, '/'));
+ }
+
return baseUrl('/books/' . $bookSlug . $midText . $idComponent);
}
--- /dev/null
+<?php namespace BookStack\Providers;
+
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Pagination\Paginator;
+
+class PaginationServiceProvider extends ServiceProvider
+{
+ /**
+ * Register the service provider.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ Paginator::currentPathResolver(function () {
+ return baseUrl($this->app['request']->path());
+ });
+
+ Paginator::currentPageResolver(function ($pageName = 'page') {
+ $page = $this->app['request']->input($pageName);
+
+ if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) {
+ return $page;
+ }
+
+ return 1;
+ });
+ }
+}
\ No newline at end of file
protected $image;
protected $imageService;
- protected $restictionService;
+ protected $restrictionService;
protected $page;
/**
{
$this->image = $image;
$this->imageService = $imageService;
- $this->restictionService = $permissionService;
+ $this->restrictionService = $permissionService;
$this->page = $page;
}
*/
private function returnPaginated($query, $page = 0, $pageSize = 24)
{
- $images = $this->restictionService->filterRelatedPages($query, 'images', 'uploaded_to');
+ $images = $this->restrictionService->filterRelatedPages($query, 'images', 'uploaded_to');
$images = $images->orderBy('created_at', 'desc')->skip($pageSize * $page)->take($pageSize + 1)->get();
$hasMore = count($images) > $pageSize;
$this->storageUrl = $storageUrl;
}
- return ($this->storageUrl == false ? '' : rtrim($this->storageUrl, '/')) . $filePath;
+ return ($this->storageUrl == false ? rtrim(baseUrl(''), '/') : rtrim($this->storageUrl, '/')) . $filePath;
}
if ($isLoggedIn && $socialAccount === null) {
$this->fillSocialAccount($socialDriver, $socialUser);
$currentUser->socialAccounts()->save($this->socialAccount);
- \Session::flash('success', title_case($socialDriver) . ' account was successfully attached to your profile.');
+ session()->flash('success', title_case($socialDriver) . ' account was successfully attached to your profile.');
return redirect($currentUser->getEditUrl());
}
// When a user is logged in and the social account exists and is already linked to the current user.
if ($isLoggedIn && $socialAccount !== null && $socialAccount->user->id === $currentUser->id) {
- \Session::flash('error', 'This ' . title_case($socialDriver) . ' account is already attached to your profile.');
+ session()->flash('error', 'This ' . title_case($socialDriver) . ' account is already attached to your profile.');
return redirect($currentUser->getEditUrl());
}
// When a user is logged in, A social account exists but the users do not match.
// Change the user that the social account is assigned to.
if ($isLoggedIn && $socialAccount !== null && $socialAccount->user->id != $currentUser->id) {
- \Session::flash('success', 'This ' . title_case($socialDriver) . ' account is already used by another user.');
+ session()->flash('success', 'This ' . title_case($socialDriver) . ' account is already used by another user.');
return redirect($currentUser->getEditUrl());
}
if (setting('registration-enabled')) {
$message .= ' or, If you do not yet have an account, You can register an account using the ' . $socialDriver . ' option';
}
+
throw new SocialSignInException($message . '.', '/login');
}
return baseUrl('/settings/users/' . $this->id);
}
+ /**
+ * Get the url that links to this user's profile.
+ * @return mixed
+ */
+ public function getProfileUrl()
+ {
+ return baseUrl('/user/' . $this->id);
+ }
+
/**
* Get a shortened version of the user's name.
* @param int $chars
*/
function baseUrl($path)
{
+ if (strpos($path, 'http') === 0) return $path;
$path = trim($path, '/');
return rtrim(config('app.url'), '/') . '/' . $path;
}
+/**
+ * Get an instance of the redirector.
+ * Overrides the default laravel redirect helper.
+ * Ensures it redirects even when the app is in a subdirectory.
+ *
+ * @param string|null $to
+ * @param int $status
+ * @param array $headers
+ * @param bool $secure
+ * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
+ */
+function redirect($to = null, $status = 302, $headers = [], $secure = null)
+{
+ if (is_null($to)) {
+ return app('redirect');
+ }
+
+ $to = baseUrl($to);
+
+ return app('redirect')->to($to, $status, $headers, $secure);
+}
+
/**
* Generate a url with multiple parameters for sorting purposes.
* Works out the logic to set the correct sorting direction
if (count($queryStringSections) === 0) return $path;
- return $path . '?' . implode('&', $queryStringSections);
+ return baseUrl($path . '?' . implode('&', $queryStringSections));
}
\ No newline at end of file
|
*/
+require __DIR__.'/../app/helpers.php';
require __DIR__.'/../vendor/autoload.php';
/*
],
"psr-4": {
"BookStack\\": "app/"
- },
- "files": [
- "app/helpers.php"
- ]
+ }
},
"autoload-dev": {
"classmap": [
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
- Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
/*
* Application Service Providers...
*/
+ BookStack\Providers\PaginationServiceProvider::class,
+
BookStack\Providers\AuthServiceProvider::class,
BookStack\Providers\AppServiceProvider::class,
BookStack\Providers\EventServiceProvider::class,
*/
return [
- 'app-editor' => 'wysiwyg',
- 'app-color' => '#0288D1',
+ 'app-name' => 'BookStack',
+ 'app-editor' => 'wysiwyg',
+ 'app-color' => '#0288D1',
'app-color-light' => 'rgba(21, 101, 192, 0.15)'
];
\ No newline at end of file
* [ZeroClipboard](http://zeroclipboard.org/)
* [TinyColorPicker](http://www.dematte.at/tinyColorPicker/index.html)
* [Marked](https://github.com/chjj/marked)
+* [Moment.js](http://momentjs.com/)
"use strict";
-var moment = require('moment');
+const moment = require('moment');
module.exports = function (ngApp, events) {
* @returns {string}
*/
$scope.getUploadUrl = function () {
- return '/images/' + $scope.imageType + '/upload';
+ return window.baseUrl('/images/' + $scope.imageType + '/upload');
};
/**
$scope.showing = false;
};
- var baseUrl = '/images/' + $scope.imageType + '/all/'
+ var baseUrl = window.baseUrl('/images/' + $scope.imageType + '/all/');
/**
* Fetch the list image data from the server.
$scope.images = [];
$scope.hasMore = false;
page = 0;
- baseUrl = '/images/' + $scope.imageType + '/search/';
+ baseUrl = window.baseUrl('/images/' + $scope.imageType + '/search/');
fetchData();
};
$scope.hasMore = false;
page = 0;
$scope.view = viewName;
- baseUrl = '/images/' + $scope.imageType + '/' + viewName + '/';
+ baseUrl = window.baseUrl('/images/' + $scope.imageType + '/' + viewName + '/');
fetchData();
}
*/
$scope.saveImageDetails = function (event) {
event.preventDefault();
- var url = '/images/update/' + $scope.selectedImage.id;
+ var url = window.baseUrl('/images/update/' + $scope.selectedImage.id);
$http.put(url, this.selectedImage).then((response) => {
events.emit('success', 'Image details updated');
}, (response) => {
$scope.deleteImage = function (event) {
event.preventDefault();
var force = $scope.dependantPages !== false;
- var url = '/images/' + $scope.selectedImage.id;
+ var url = window.baseUrl('/images/' + $scope.selectedImage.id);
if (force) url += '?force=true';
$http.delete(url).then((response) => {
$scope.images.splice($scope.images.indexOf($scope.selectedImage), 1);
if (term.length == 0) return;
$scope.searching = true;
$scope.searchResults = '';
- var searchUrl = '/search/book/' + $attrs.bookId;
+ var searchUrl = window.baseUrl('/search/book/' + $attrs.bookId);
searchUrl += '?term=' + encodeURIComponent(term);
$http.get(searchUrl).then((response) => {
$scope.searchResults = $sce.trustAsHtml(response.data);
if (isMarkdown) data.markdown = $scope.editContent;
- $http.put('/ajax/page/' + pageId + '/save-draft', data).then((responseData) => {
+ let url = window.baseUrl('/ajax/page/' + pageId + '/save-draft');
+ $http.put(url, data).then((responseData) => {
var updateTime = moment.utc(moment.unix(responseData.data.timestamp)).toDate();
$scope.draftText = responseData.data.message + moment(updateTime).format('HH:mm');
if (!$scope.isNewPageDraft) $scope.isUpdateDraft = true;
* content from the system via an AJAX request.
*/
$scope.discardDraft = function () {
- $http.get('/ajax/page/' + pageId).then((responseData) => {
+ let url = window.baseUrl('/ajax/page/' + pageId);
+ $http.get(url).then((responseData) => {
if (autoSave) $interval.cancel(autoSave);
$scope.draftText = 'Editing Page';
$scope.isUpdateDraft = false;
* Get all tags for the current book and add into scope.
*/
function getTags() {
- $http.get('/ajax/tags/get/page/' + pageId).then((responseData) => {
+ let url = window.baseUrl('/ajax/tags/get/page/' + pageId);
+ $http.get(url).then((responseData) => {
$scope.tags = responseData.data;
addEmptyTag();
});
$scope.saveTags = function() {
setTagOrder();
let postData = {tags: $scope.tags};
- $http.post('/ajax/tags/update/page/' + pageId, postData).then((responseData) => {
+ let url = window.baseUrl('/ajax/tags/update/page/' + pageId);
+ $http.post(url, postData).then((responseData) => {
$scope.tags = responseData.data.tags;
addEmptyTag();
events.emit('success', responseData.data.message);
"use strict";
-var DropZone = require('dropzone');
-var markdown = require('marked');
+const DropZone = require('dropzone');
+const markdown = require('marked');
-var toggleSwitchTemplate = require('./components/toggle-switch.html');
-var imagePickerTemplate = require('./components/image-picker.html');
-var dropZoneTemplate = require('./components/drop-zone.html');
+const toggleSwitchTemplate = require('./components/toggle-switch.html');
+const imagePickerTemplate = require('./components/image-picker.html');
+const dropZoneTemplate = require('./components/drop-zone.html');
module.exports = function (ngApp, events) {
imageClass: '@'
},
link: function (scope, element, attrs) {
- var usingIds = typeof scope.currentId !== 'undefined' || scope.currentId === 'false';
+ let usingIds = typeof scope.currentId !== 'undefined' || scope.currentId === 'false';
scope.image = scope.currentImage;
scope.value = scope.currentImage || '';
if (usingIds) scope.value = scope.currentId;
};
scope.updateImageFromModel = function (model) {
- var isResized = scope.resizeWidth && scope.resizeHeight;
+ let isResized = scope.resizeWidth && scope.resizeHeight;
if (!isResized) {
scope.$apply(() => {
return;
}
- var cropped = scope.resizeCrop ? 'true' : 'false';
- var requestString = '/images/thumb/' + model.id + '/' + scope.resizeWidth + '/' + scope.resizeHeight + '/' + cropped;
+ let cropped = scope.resizeCrop ? 'true' : 'false';
+ let requestString = '/images/thumb/' + model.id + '/' + scope.resizeWidth + '/' + scope.resizeHeight + '/' + cropped;
+ requestString = window.baseUrl(requestString);
$http.get(requestString).then((response) => {
setImage(model, response.data.url);
});
// Insert image shortcut
if (event.which === 73 && event.ctrlKey && event.shiftKey) {
event.preventDefault();
- var caretPos = input[0].selectionStart;
- var currentContent = input.val();
- var mdImageText = "";
+ let caretPos = input[0].selectionStart;
+ let currentContent = input.val();
+ const mdImageText = "";
input.val(currentContent.substring(0, caretPos) + mdImageText + currentContent.substring(caretPos));
input.focus();
input[0].selectionStart = caretPos + (";
// Insert image from image manager
insertImage.click(event => {
window.ImageManager.showExternal(image => {
- var caretPos = currentCaretPos;
- var currentContent = input.val();
- var mdImageText = "";
+ let caretPos = currentCaretPos;
+ let currentContent = input.val();
+ let mdImageText = "";
input.val(currentContent.substring(0, caretPos) + mdImageText + currentContent.substring(caretPos));
input.change();
});
// Get search url with correct types
function getSearchUrl() {
let types = (attrs.entityTypes) ? encodeURIComponent(attrs.entityTypes) : encodeURIComponent('page,book,chapter');
- return `/ajax/search/entities?types=${types}`;
+ return window.baseUrl(`/ajax/search/entities?types=${types}`);
}
// Get initial contents
var ngSanitize = require('angular-sanitize');
require('angular-ui-sortable');
+// Url retrieval function
+window.baseUrl = function(path) {
+ let basePath = document.querySelector('meta[name="base-url"]').getAttribute('content');
+ if (basePath[basePath.length-1] === '/') basePath = basePath.slice(0, basePath.length-1);
+ if (path[0] === '/') path = path.slice(1);
+ return basePath + '/' + path;
+};
+
var ngApp = angular.module('bookStack', ['ngResource', 'ngAnimate', 'ngSanitize', 'ui.sortable']);
// Global Event System
};
window.Events = Events;
+
var services = require('./services')(ngApp, Events);
var directives = require('./directives')(ngApp, Events);
var controllers = require('./controllers')(ngApp, Events);
var mceOptions = module.exports = {
selector: '#html-editor',
content_css: [
- '/css/styles.css',
- '/libs/material-design-iconic-font/css/material-design-iconic-font.min.css'
+ window.baseUrl('/css/styles.css'),
+ window.baseUrl('/libs/material-design-iconic-font/css/material-design-iconic-font.min.css')
],
body_class: 'page-content',
relative_urls: false,
formData.append('file', file, remoteFilename);
formData.append('_token', document.querySelector('meta[name="token"]').getAttribute('content'));
- xhr.open('POST', '/images/gallery/upload');
+ xhr.open('POST', window.baseUrl('/images/gallery/upload'));
xhr.onload = function () {
if (xhr.status === 200 || xhr.status === 201) {
var result = JSON.parse(xhr.responseText);
// Configure ZeroClipboard
var zeroClipBoard = require('zeroclipboard');
zeroClipBoard.config({
- swfPath: '/ZeroClipboard.swf'
+ swfPath: window.baseUrl('/ZeroClipboard.swf')
});
window.setupPageShow = module.exports = function (pageId) {
// Show pointer and set link
var $elem = $(this);
- var link = window.location.protocol + "//" + window.location.host + '/link/' + pageId + '#' + $elem.attr('id');
+ let link = window.baseUrl('/link/' + pageId + '#' + $elem.attr('id'));
+ if (link.indexOf('http') !== 0) link = window.location.protocol + "//" + window.location.host + link;
$pointer.find('input').val(link);
$pointer.find('button').first().attr('data-clipboard-text', link);
$elem.before($pointer);
font-style: normal;
font-weight: 100;
src: local('Roboto Thin'), local('Roboto-Thin'),
- url('/fonts/roboto-v15-cyrillic_latin-100.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-100.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-100.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-100.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-100italic - cyrillic_latin */
@font-face {
font-style: italic;
font-weight: 100;
src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'),
- url('/fonts/roboto-v15-cyrillic_latin-100italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-100italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-100italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-100italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-300 - cyrillic_latin */
@font-face {
font-style: normal;
font-weight: 300;
src: local('Roboto Light'), local('Roboto-Light'),
- url('/fonts/roboto-v15-cyrillic_latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-300italic - cyrillic_latin */
@font-face {
font-style: italic;
font-weight: 300;
src: local('Roboto Light Italic'), local('Roboto-LightItalic'),
- url('/fonts/roboto-v15-cyrillic_latin-300italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-300italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-300italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-300italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-regular - cyrillic_latin */
@font-face {
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'),
- url('/fonts/roboto-v15-cyrillic_latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-italic - cyrillic_latin */
@font-face {
font-style: italic;
font-weight: 400;
src: local('Roboto Italic'), local('Roboto-Italic'),
- url('/fonts/roboto-v15-cyrillic_latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-500 - cyrillic_latin */
@font-face {
font-style: normal;
font-weight: 500;
src: local('Roboto Medium'), local('Roboto-Medium'),
- url('/fonts/roboto-v15-cyrillic_latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-500italic - cyrillic_latin */
@font-face {
font-style: italic;
font-weight: 500;
src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'),
- url('/fonts/roboto-v15-cyrillic_latin-500italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-500italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-500italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-500italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-700 - cyrillic_latin */
@font-face {
font-style: normal;
font-weight: 700;
src: local('Roboto Bold'), local('Roboto-Bold'),
- url('/fonts/roboto-v15-cyrillic_latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-700italic - cyrillic_latin */
@font-face {
font-style: italic;
font-weight: 700;
src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'),
- url('/fonts/roboto-v15-cyrillic_latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-v15-cyrillic_latin-700italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-v15-cyrillic_latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-v15-cyrillic_latin-700italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-mono-regular - latin */
font-style: normal;
font-weight: 400;
src: local('Roboto Mono'), local('RobotoMono-Regular'),
- url('/fonts/roboto-mono-v4-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
- url('/fonts/roboto-mono-v4-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+ url('../fonts/roboto-mono-v4-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+ */
+ url('../fonts/roboto-mono-v4-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
\ No newline at end of file
<div class="form-group">
<label for="password">Password</label>
@include('form/password', ['name' => 'password', 'tabindex' => 2])
- <span class="block small"><a href="/password/email">Forgot Password?</a></span>
+ <span class="block small"><a href="{{ baseUrl('/password/email') }}">Forgot Password?</a></span>
</div>
\ No newline at end of file
@extends('public')
@section('header-buttons')
- @if(Setting::get('registration-enabled'))
- <a href="/register"><i class="zmdi zmdi-account-add"></i>Sign up</a>
+ @if(setting('registration-enabled', false))
+ <a href="{{ baseUrl("/register") }}"><i class="zmdi zmdi-account-add"></i>Sign up</a>
@endif
@stop
<div class="center-box">
<h1>Log In</h1>
- <form action="/login" method="POST" id="login-form">
+ <form action="{{ baseUrl("/login") }}" method="POST" id="login-form">
{!! csrf_field() !!}
<hr class="margin-top">
<h3 class="text-muted">Social Login</h3>
@if(isset($socialDrivers['google']))
- <a href="/login/service/google" style="color: #DC4E41;"><i class="zmdi zmdi-google-plus-box zmdi-hc-4x"></i></a>
+ <a href="{{ baseUrl("/login/service/google") }}" style="color: #DC4E41;"><i class="zmdi zmdi-google-plus-box zmdi-hc-4x"></i></a>
@endif
@if(isset($socialDrivers['github']))
- <a href="/login/service/github" style="color:#444;"><i class="zmdi zmdi-github zmdi-hc-4x"></i></a>
+ <a href="{{ baseUrl("/login/service/github") }}" style="color:#444;"><i class="zmdi zmdi-github zmdi-hc-4x"></i></a>
@endif
@endif
</div>
@extends('public')
-@section('body-class', 'image-cover login')
-
@section('content')
<p class="muted small">Enter your email below and you will be sent an email with a password reset link.</p>
- <form action="/password/email" method="POST">
+ <form action="{{ baseUrl("/password/email") }}" method="POST">
{!! csrf_field() !!}
<div class="form-group">
@section('header-buttons')
@if(!$signedIn)
- <a href="/login"><i class="zmdi zmdi-sign-in"></i>Sign in</a>
+ <a href="{{ baseUrl("/login") }}"><i class="zmdi zmdi-sign-in"></i>Sign in</a>
@endif
@stop
<div class="text-center">
<div class="center-box">
<h2>Thanks for registering!</h2>
- <p>Please check your email and click the confirmation button to access {{ \Setting::get('app-name') }}.</p>
+ <p>Please check your email and click the confirmation button to access {{ setting('app-name', 'BookStack') }}.</p>
</div>
</div>
@extends('public')
@section('header-buttons')
- <a href="/login"><i class="zmdi zmdi-sign-in"></i>Sign in</a>
+ <a href="{{ baseUrl("/login") }}"><i class="zmdi zmdi-sign-in"></i>Sign in</a>
@stop
@section('content')
<div class="center-box">
<h1>Sign Up</h1>
- <form action="/register" method="POST">
+ <form action="{{ baseUrl("/register") }}" method="POST">
{!! csrf_field() !!}
<div class="form-group">
<h3 class="text-muted">Social Registration</h3>
<p class="text-small">Register and sign in using another service.</p>
@if(isset($socialDrivers['google']))
- <a href="/register/service/google" style="color: #DC4E41;"><i class="zmdi zmdi-google-plus-box zmdi-hc-4x"></i></a>
+ <a href="{{ baseUrl("/register/service/google") }}" style="color: #DC4E41;"><i class="zmdi zmdi-google-plus-box zmdi-hc-4x"></i></a>
@endif
@if(isset($socialDrivers['github']))
- <a href="/register/service/github" style="color:#444;"><i class="zmdi zmdi-github zmdi-hc-4x"></i></a>
+ <a href="{{ baseUrl("/register/service/github") }}" style="color:#444;"><i class="zmdi zmdi-github zmdi-hc-4x"></i></a>
@endif
@endif
</div>
<div class="center-box text-left">
<h1>Reset Password</h1>
- <form action="/password/reset" method="POST">
+ <form action="{{ baseUrl("/password/reset") }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="token" value="{{ $token }}">
If you cannot find the email you can re-send the confirmation email by submitting the form below.
</p>
<hr>
- <form action="/register/confirm/resend" method="POST">
+ <form action="{{ baseUrl("/register/confirm/resend") }}" method="POST">
{!! csrf_field() !!}
<div class="form-group">
<label for="email">Email Address</label>
<!DOCTYPE html>
<html class="@yield('body-class')">
<head>
- <title>{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name', 'BookStack') }}</title>
+ <title>{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name') }}</title>
<!-- Meta -->
<meta name="viewport" content="width=device-width">
<meta name="token" content="{{ csrf_token() }}">
+ <meta name="base-url" content="{{ baseUrl('/') }}">
<meta charset="utf-8">
<!-- Styles and Fonts -->
@if(setting('app-logo', '') !== 'none')
<img class="logo-image" src="{{ setting('app-logo', '') === '' ? baseUrl('/logo.png') : baseUrl(setting('app-logo', '')) }}" alt="Logo">
@endif
- <span class="logo-text">{{ setting('app-name', 'BookStack') }}</span>
+ <span class="logo-text">{{ setting('app-name') }}</span>
</a>
</div>
<div class="col-lg-4 col-sm-3 text-center">
<div class="container small" ng-non-bindable>
<h1>Create New Book</h1>
- <form action="/books" method="POST">
+ <form action="{{ baseUrl("/books") }}" method="POST">
@include('books/form')
</form>
</div>
<div class="container small" ng-non-bindable>
<h1>Edit Book</h1>
- <form action="/books/{{$book->slug}}" method="POST">
+ <form action="{{ $book->getUrl() }}" method="POST">
<input type="hidden" name="_method" value="PUT">
@include('books/form', ['model' => $book])
</form>
<div class="col-xs-11 faded">
<div class="action-buttons">
@if($currentUser->can('book-create-all'))
- <a href="/books/create" class="text-pos text-button"><i class="zmdi zmdi-plus"></i>Add new book</a>
+ <a href="{{ baseUrl("/books/create") }}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i>Add new book</a>
@endif
</div>
</div>
@else
<p class="text-muted">No books have been created.</p>
@if(userCan('books-create-all'))
- <a href="/books/create" class="text-pos"><i class="zmdi zmdi-edit"></i>Create one now</a>
+ <a href="{{ baseUrl("/books/create") }}" class="text-pos"><i class="zmdi zmdi-edit"></i>Create one now</a>
@endif
@endif
</div>
<div class="col-md-12">
<div class="action-buttons faded">
@if(userCan('page-create', $book))
- <a href="{{$book->getUrl() . '/page/create'}}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i> New Page</a>
+ <a href="{{ $book->getUrl('/page/create') }}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i> New Page</a>
@endif
@if(userCan('chapter-create', $book))
- <a href="{{$book->getUrl() . '/chapter/create'}}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i> New Chapter</a>
+ <a href="{{ $book->getUrl('/chapter/create') }}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i> New Chapter</a>
@endif
@if(userCan('book-update', $book))
<a href="{{$book->getEditUrl()}}" class="text-primary text-button"><i class="zmdi zmdi-edit"></i>Edit</a>
<a dropdown-toggle class="text-primary text-button"><i class="zmdi zmdi-more-vert"></i></a>
<ul>
@if(userCan('book-update', $book))
- <li><a href="{{ $book->getUrl() }}/sort" class="text-primary"><i class="zmdi zmdi-sort"></i>Sort</a></li>
+ <li><a href="{{ $book->getUrl('/sort') }}" class="text-primary"><i class="zmdi zmdi-sort"></i>Sort</a></li>
@endif
@if(userCan('restrictions-manage', $book))
- <li><a href="{{$book->getUrl()}}/permissions" class="text-primary"><i class="zmdi zmdi-lock-outline"></i>Permissions</a></li>
+ <li><a href="{{ $book->getUrl('/permissions') }}" class="text-primary"><i class="zmdi zmdi-lock-outline"></i>Permissions</a></li>
@endif
@if(userCan('book-delete', $book))
- <li><a href="{{ $book->getUrl() }}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a></li>
+ <li><a href="{{ $book->getUrl('/delete') }}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a></li>
@endif
</ul>
</div>
@else
<p class="text-muted">No pages or chapters have been created for this book.</p>
<p>
- <a href="{{$book->getUrl() . '/page/create'}}" class="text-page"><i class="zmdi zmdi-file-text"></i>Create a new page</a>
+ <a href="{{ $book->getUrl('/page/create') }}" class="text-page"><i class="zmdi zmdi-file-text"></i>Create a new page</a>
<em class="text-muted">-or-</em>
- <a href="{{$book->getUrl() . '/chapter/create'}}" class="text-chapter"><i class="zmdi zmdi-collection-bookmark"></i>Add a chapter</a>
+ <a href="{{ $book->getUrl('/chapter/create') }}" class="text-chapter"><i class="zmdi zmdi-collection-bookmark"></i>Add a chapter</a>
</p>
<hr>
@endif
<p class="text-muted small">
- Created {{$book->created_at->diffForHumans()}} @if($book->createdBy) by <a href="/user/{{ $book->createdBy->id }}">{{$book->createdBy->name}}</a> @endif
+ Created {{$book->created_at->diffForHumans()}} @if($book->createdBy) by <a href="{{ $book->createdBy->getProfileUrl() }}">{{$book->createdBy->name}}</a> @endif
<br>
- Last Updated {{$book->updated_at->diffForHumans()}} @if($book->updatedBy) by <a href="/user/{{ $book->updatedBy->id }}">{{$book->updatedBy->name}}</a> @endif
+ Last Updated {{$book->updated_at->diffForHumans()}} @if($book->updatedBy) by <a href="{{ $book->updatedBy->getProfileUrl() }}">{{$book->updatedBy->name}}</a> @endif
</p>
</div>
</div>
@if($book->restricted)
<p class="text-muted">
@if(userCan('restrictions-manage', $book))
- <a href="{{ $book->getUrl() }}/permissions"><i class="zmdi zmdi-lock-outline"></i>Book Permissions Active</a>
+ <a href="{{ $book->getUrl('/permissions') }}"><i class="zmdi zmdi-lock-outline"></i>Book Permissions Active</a>
@else
<i class="zmdi zmdi-lock-outline"></i>Book Permissions Active
@endif
@extends('base')
@section('head')
- <script src="/libs/jquery-sortable/jquery-sortable.min.js"></script>
+ <script src="{{ baseUrl("/libs/jquery-sortable/jquery-sortable.min.js") }}"></script>
@stop
@section('content')
@foreach($books as $otherBook)
@if($otherBook->id !== $book->id)
<div>
- <a href="/books/{{ $otherBook->slug }}/sort-item" class="text-book"><i class="zmdi zmdi-book"></i>{{ $otherBook->name }}</a>
+ <a href="{{ $otherBook->getUrl('/sort-item') }}" class="text-book"><i class="zmdi zmdi-book"></i>{{ $otherBook->name }}</a>
</div>
@endif
@endforeach
</div>
- <form action="{{$book->getUrl()}}/sort" method="POST">
+ <form action="{{ $book->getUrl('/sort') }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="PUT">
<input type="hidden" id="sort-tree-input" name="sort-tree">
<div class="list">
- <a href="{{$book->getUrl()}}" class="button muted">Cancel</a>
+ <a href="{{ $book->getUrl() }}" class="button muted">Cancel</a>
<button class="button pos" type="submit">Save Order</button>
</div>
</form>
<div class="container small" ng-non-bindable>
<h1>Create New Chapter</h1>
- <form action="{{$book->getUrl()}}/chapter/create" method="POST">
+ <form action="{{ $book->getUrl('/chapter/create') }}" method="POST">
@include('chapters/form')
</form>
</div>
and added directly to the book.</p>
<p class="text-neg">Are you sure you want to delete this chapter?</p>
- <form action="{{$chapter->getUrl()}}" method="POST">
+ <form action="{{ $chapter->getUrl() }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="DELETE">
- <a href="{{$chapter->getUrl()}}" class="button primary">Cancel</a>
+ <a href="{{ $chapter->getUrl() }}" class="button primary">Cancel</a>
<button type="submit" class="button neg">Confirm</button>
</form>
</div>
<div class="container small" ng-non-bindable>
<h1>Edit Chapter</h1>
- <form action="{{$chapter->getUrl()}}" method="POST">
+ <form action="{{ $chapter->getUrl() }}" method="POST">
<input type="hidden" name="_method" value="PUT">
@include('chapters/form', ['model' => $chapter])
</form>
<p class="text-muted chapter-toggle"><i class="zmdi zmdi-caret-right"></i> <i class="zmdi zmdi-file-text"></i> <span>{{ count($chapter->pages) }} Pages</span></p>
<div class="inset-list">
@foreach($chapter->pages as $page)
- <h4 class="@if($page->draft) draft @endif"><a href="{{$page->getUrl()}}" class="text-page @if($page->draft) draft @endif"><i class="zmdi zmdi-file-text"></i>{{$page->name}}</a></h4>
+ <h4 class="@if($page->draft) draft @endif"><a href="{{ $page->getUrl() }}" class="text-page @if($page->draft) draft @endif"><i class="zmdi zmdi-file-text"></i>{{$page->name}}</a></h4>
@endforeach
</div>
@endif
<div class="row">
<div class="col-sm-12 faded">
<div class="breadcrumbs">
- <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
+ <a href="{{ $book->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
<span class="sep">»</span>
- <a href="{{$chapter->getUrl()}}" class="text-chapter text-button"><i class="zmdi zmdi-collection-bookmark"></i>{{ $chapter->getShortName() }}</a>
+ <a href="{{ $chapter->getUrl() }}" class="text-chapter text-button"><i class="zmdi zmdi-collection-bookmark"></i>{{ $chapter->getShortName() }}</a>
</div>
</div>
</div>
<div class="container">
<h1>Move Chapter <small class="subheader">{{$chapter->name}}</small></h1>
- <form action="{{ $chapter->getUrl() }}/move" method="POST">
+ <form action="{{ $chapter->getUrl('/move') }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="PUT">
<div class="row">
<div class="col-sm-12 faded">
<div class="breadcrumbs">
- <a href="{{$chapter->book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $chapter->book->getShortName() }}</a>
+ <a href="{{ $chapter->book->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $chapter->book->getShortName() }}</a>
<span class="sep">»</span>
<a href="{{ $chapter->getUrl() }}" class="text-chapter text-button"><i class="zmdi zmdi-collection-bookmark"></i>{{$chapter->getShortName()}}</a>
</div>
<div class="row">
<div class="col-sm-8 faded" ng-non-bindable>
<div class="breadcrumbs">
- <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
+ <a href="{{ $book->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
</div>
</div>
<div class="col-sm-4 faded">
<div class="action-buttons">
@if(userCan('page-create', $chapter))
- <a href="{{$chapter->getUrl() . '/create-page'}}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i>New Page</a>
+ <a href="{{ $chapter->getUrl('/create-page') }}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i>New Page</a>
@endif
@if(userCan('chapter-update', $chapter))
- <a href="{{$chapter->getUrl() . '/edit'}}" class="text-primary text-button"><i class="zmdi zmdi-edit"></i>Edit</a>
+ <a href="{{ $chapter->getUrl('/edit') }}" class="text-primary text-button"><i class="zmdi zmdi-edit"></i>Edit</a>
@endif
@if(userCan('chapter-update', $chapter) || userCan('restrictions-manage', $chapter) || userCan('chapter-delete', $chapter))
<div dropdown class="dropdown-container">
<a dropdown-toggle class="text-primary text-button"><i class="zmdi zmdi-more-vert"></i></a>
<ul>
@if(userCan('chapter-update', $chapter))
- <li><a href="{{$chapter->getUrl() . '/move'}}" class="text-primary"><i class="zmdi zmdi-folder"></i>Move</a></li>
+ <li><a href="{{ $chapter->getUrl('/move') }}" class="text-primary"><i class="zmdi zmdi-folder"></i>Move</a></li>
@endif
@if(userCan('restrictions-manage', $chapter))
- <li><a href="{{$chapter->getUrl()}}/permissions" class="text-primary"><i class="zmdi zmdi-lock-outline"></i>Permissions</a></li>
+ <li><a href="{{ $chapter->getUrl('/permissions') }}" class="text-primary"><i class="zmdi zmdi-lock-outline"></i>Permissions</a></li>
@endif
@if(userCan('chapter-delete', $chapter))
- <li><a href="{{$chapter->getUrl() . '/delete'}}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a></li>
+ <li><a href="{{ $chapter->getUrl('/delete') }}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a></li>
@endif
</ul>
</div>
<p class="text-muted">No pages are currently in this chapter.</p>
<p>
@if(userCan('page-create', $chapter))
- <a href="{{$chapter->getUrl() . '/create-page'}}" class="text-page"><i class="zmdi zmdi-file-text"></i>Create a new page</a>
+ <a href="{{ $chapter->getUrl('/create-page') }}" class="text-page"><i class="zmdi zmdi-file-text"></i>Create a new page</a>
@endif
@if(userCan('page-create', $chapter) && userCan('book-update', $book))
<em class="text-muted">-or-</em>
@endif
@if(userCan('book-update', $book))
- <a href="{{$book->getUrl() . '/sort'}}" class="text-book"><i class="zmdi zmdi-book"></i>Sort the current book</a>
+ <a href="{{ $book->getUrl('/sort') }}" class="text-book"><i class="zmdi zmdi-book"></i>Sort the current book</a>
@endif
</p>
<hr>
@endif
<p class="text-muted small">
- Created {{$chapter->created_at->diffForHumans()}} @if($chapter->createdBy) by <a href="/user/{{ $chapter->createdBy->id }}">{{ $chapter->createdBy->name}}</a> @endif
+ Created {{ $chapter->created_at->diffForHumans() }} @if($chapter->createdBy) by <a href="{{ $chapter->createdBy->getProfileUrl() }}">{{ $chapter->createdBy->name}}</a> @endif
<br>
- Last Updated {{$chapter->updated_at->diffForHumans()}} @if($chapter->updatedBy) by <a href="/user/{{ $chapter->updatedBy->id }}">{{ $chapter->updatedBy->name}}</a> @endif
+ Last Updated {{ $chapter->updated_at->diffForHumans() }} @if($chapter->updatedBy) by <a href="{{ $chapter->updatedBy->getProfileUrl() }}">{{ $chapter->updatedBy->name}}</a> @endif
</p>
</div>
<div class="col-md-3 col-md-offset-1">
@if($book->restricted)
@if(userCan('restrictions-manage', $book))
- <a href="{{ $book->getUrl() }}/permissions"><i class="zmdi zmdi-lock-outline"></i>Book Permissions Active</a>
+ <a href="{{ $book->getUrl('/permissions') }}"><i class="zmdi zmdi-lock-outline"></i>Book Permissions Active</a>
@else
<i class="zmdi zmdi-lock-outline"></i>Book Permissions Active
@endif
@if($chapter->restricted)
@if(userCan('restrictions-manage', $chapter))
- <a href="{{ $chapter->getUrl() }}/permissions"><i class="zmdi zmdi-lock-outline"></i>Chapter Permissions Active</a>
+ <a href="{{ $chapter->getUrl('/permissions') }}"><i class="zmdi zmdi-lock-outline"></i>Chapter Permissions Active</a>
@else
<i class="zmdi zmdi-lock-outline"></i>Chapter Permissions Active
@endif
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
<head style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
- <meta name="viewport" content="width=device-width" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;" />
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;" />
- <title>Confirm Your Email At {{ Setting::get('app-name')}}</title>
+ <meta name="viewport" content="width=device-width"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"/>
+ <title>Confirm Your Email At {{ setting('app-name')}}</title>
<style style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
* {
- margin: 0;
- padding: 0;
- font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
- font-size: 100%;
- line-height: 1.6;
+ margin: 0;
+ padding: 0;
+ font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ line-height: 1.6;
}
img {
- max-width: 100%;
+ max-width: 100%;
}
body {
- -webkit-font-smoothing: antialiased;
- -webkit-text-size-adjust: none;
- width: 100%!important;
- height: 100%;
+ -webkit-font-smoothing: antialiased;
+ -webkit-text-size-adjust: none;
+ width: 100% !important;
+ height: 100%;
}
a {
- color: #348eda;
+ color: #348eda;
}
.btn-primary {
- text-decoration: none;
- color: #FFF;
- background-color: #348eda;
- border: solid #348eda;
- border-width: 10px 20px;
- line-height: 2;
- font-weight: bold;
- margin-right: 10px;
- text-align: center;
- cursor: pointer;
- display: inline-block;
- border-radius: 4px;
+ text-decoration: none;
+ color: #FFF;
+ background-color: #348eda;
+ border: solid #348eda;
+ border-width: 10px 20px;
+ line-height: 2;
+ font-weight: bold;
+ margin-right: 10px;
+ text-align: center;
+ cursor: pointer;
+ display: inline-block;
+ border-radius: 4px;
}
.btn-secondary {
- text-decoration: none;
- color: #FFF;
- background-color: #aaa;
- border: solid #aaa;
- border-width: 10px 20px;
- line-height: 2;
- font-weight: bold;
- margin-right: 10px;
- text-align: center;
- cursor: pointer;
- display: inline-block;
- border-radius: 25px;
+ text-decoration: none;
+ color: #FFF;
+ background-color: #aaa;
+ border: solid #aaa;
+ border-width: 10px 20px;
+ line-height: 2;
+ font-weight: bold;
+ margin-right: 10px;
+ text-align: center;
+ cursor: pointer;
+ display: inline-block;
+ border-radius: 25px;
}
.last {
- margin-bottom: 0;
+ margin-bottom: 0;
}
.first {
- margin-top: 0;
+ margin-top: 0;
}
.padding {
- padding: 10px 0;
+ padding: 10px 0;
}
table.body-wrap {
- width: 100%;
- padding: 20px;
+ width: 100%;
+ padding: 20px;
}
table.body-wrap .container {
- border: 1px solid #f0f0f0;
+ border: 1px solid #f0f0f0;
}
h1,
h2,
h3 {
- font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
- color: #444;
- margin: 10px 0 10px;
- line-height: 1.2;
- font-weight: 200;
+ font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ color: #444;
+ margin: 10px 0 10px;
+ line-height: 1.2;
+ font-weight: 200;
}
h1 {
- font-size: 36px;
+ font-size: 36px;
}
h2 {
- font-size: 28px;
+ font-size: 28px;
}
h3 {
- font-size: 22px;
+ font-size: 22px;
}
p,
ul,
ol {
- margin-bottom: 10px;
- font-weight: normal;
- font-size: 14px;
- color: #888888;
+ margin-bottom: 10px;
+ font-weight: normal;
+ font-size: 14px;
+ color: #888888;
}
ul li,
ol li {
- margin-left: 5px;
- list-style-position: inside;
+ margin-left: 5px;
+ list-style-position: inside;
}
.container {
- display: block!important;
- max-width: 600px!important;
- margin: 0 auto!important;
- clear: both!important;
+ display: block !important;
+ max-width: 600px !important;
+ margin: 0 auto !important;
+ clear: both !important;
}
.body-wrap .container {
- padding: 20px;
+ padding: 20px;
}
.content {
- max-width: 600px;
- margin: 0 auto;
- display: block;
+ max-width: 600px;
+ margin: 0 auto;
+ display: block;
}
.content table {
- width: 100%;
+ width: 100%;
}
</style>
- </head>
+</head>
- <body bgcolor="#f6f6f6" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:none;width:100%!important;height:100%;">
- <!-- body -->
- <table class="body-wrap" bgcolor="#f6f6f6" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;">
+<body bgcolor="#f6f6f6"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:none;width:100%!important;height:100%;">
+<!-- body -->
+<table class="body-wrap" bgcolor="#f6f6f6"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;">
<tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
- <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>
- <td class="container" bgcolor="#FFFFFF" style="font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;display:block!important;max-width:600px!important;margin-top:0 !important;margin-bottom:0 !important;margin-right:auto !important;margin-left:auto !important;clear:both!important;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;border-width:1px;border-style:solid;border-color:#f0f0f0;">
- <!-- content -->
- <div class="content" style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;max-width:600px;margin-top:0;margin-bottom:0;margin-right:auto;margin-left:auto;display:block;">
- <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">
- <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
- <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
- <h1 style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;color:#444;margin-top:10px;margin-bottom:10px;margin-right:0;margin-left:0;line-height:1.2;font-weight:200;font-size:36px;">Email Confirmation</h1>
- <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;">Thanks for joining <a href="{{ url('/') }}">{{ Setting::get('app-name')}}</a>. <br />
- Please confirm your email address by clicking the button below.</p>
- <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">
- <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
- <td class="padding" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;padding-top:10px;padding-bottom:10px;padding-right:0;padding-left:0;">
- <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;"><a class="btn-primary" href="{{ url('/register/confirm/'.$token) }}" style="margin-top:0;margin-bottom:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;text-decoration:none;color:#FFF;background-color:#348eda;border-style:solid;border-color:#348eda;border-width:10px 20px;line-height:2;font-weight:bold;margin-right:10px;text-align:center;cursor:pointer;display:inline-block;border-radius:4px;">Confirm Email</a></p>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- <!-- /content -->
- </td>
- <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>
- </tr>
- </table>
- <!-- /body -->
- </body>
-
- </html>
+ <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>
+ <td class="container" bgcolor="#FFFFFF"
+ style="font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;display:block!important;max-width:600px!important;margin-top:0 !important;margin-bottom:0 !important;margin-right:auto !important;margin-left:auto !important;clear:both!important;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;border-width:1px;border-style:solid;border-color:#f0f0f0;">
+ <!-- content -->
+ <div class="content"
+ style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;max-width:600px;margin-top:0;margin-bottom:0;margin-right:auto;margin-left:auto;display:block;">
+ <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">
+ <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
+ <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
+ <h1 style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;color:#444;margin-top:10px;margin-bottom:10px;margin-right:0;margin-left:0;line-height:1.2;font-weight:200;font-size:36px;">
+ Email Confirmation</h1>
+ <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;">
+ Thanks for joining <a href="{{ baseUrl('/') }}">{{ setting('app-name')}}</a>. <br/>
+ Please confirm your email address by clicking the button below.</p>
+ <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">
+ <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">
+ <td class="padding"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;padding-top:10px;padding-bottom:10px;padding-right:0;padding-left:0;">
+ <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;">
+ <a class="btn-primary" href="{{ baseUrl('/register/confirm/' . $token) }}"
+ style="margin-top:0;margin-bottom:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;text-decoration:none;color:#FFF;background-color:#348eda;border-style:solid;border-color:#348eda;border-width:10px 20px;line-height:2;font-weight:bold;margin-right:10px;text-align:center;cursor:pointer;display:inline-block;border-radius:4px;">Confirm
+ Email</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <!-- /content -->
+ </td>
+ <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>
+ </tr>
+</table>
+<!-- /body -->
+</body>
+
+</html>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r<html xmlns="http://www.w3.org/1999/xhtml" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r\r<head style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <meta name="viewport" content="width=device-width" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;" />\r <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;" />\r <title>Password Reset From {{ Setting::get('app-name')}}</title>\r <style style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r * {\r margin: 0;\r padding: 0;\r font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;\r font-size: 100%;\r line-height: 1.6;\r }\r\r img {\r max-width: 100%;\r }\r\r body {\r -webkit-font-smoothing: antialiased;\r -webkit-text-size-adjust: none;\r width: 100%!important;\r height: 100%;\r }\r\r a {\r color: #348eda;\r }\r\r .btn-primary {\r text-decoration: none;\r color: #FFF;\r background-color: #348eda;\r border: solid #348eda;\r border-width: 10px 20px;\r line-height: 2;\r font-weight: bold;\r margin-right: 10px;\r text-align: center;\r cursor: pointer;\r display: inline-block;\r border-radius: 4px;\r }\r\r .btn-secondary {\r text-decoration: none;\r color: #FFF;\r background-color: #aaa;\r border: solid #aaa;\r border-width: 10px 20px;\r line-height: 2;\r font-weight: bold;\r margin-right: 10px;\r text-align: center;\r cursor: pointer;\r display: inline-block;\r border-radius: 25px;\r }\r\r .last {\r margin-bottom: 0;\r }\r\r .first {\r margin-top: 0;\r }\r\r .padding {\r padding: 10px 0;\r }\r\r table.body-wrap {\r width: 100%;\r padding: 20px;\r }\r\r table.body-wrap .container {\r border: 1px solid #f0f0f0;\r }\r\r h1,\r h2,\r h3 {\r font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;\r color: #444;\r margin: 10px 0 10px;\r line-height: 1.2;\r font-weight: 200;\r }\r\r h1 {\r font-size: 36px;\r }\r\r h2 {\r font-size: 28px;\r }\r\r h3 {\r font-size: 22px;\r }\r\r p,\r ul,\r ol {\r margin-bottom: 10px;\r font-weight: normal;\r font-size: 14px;\r color: #888888;\r }\r\r ul li,\r ol li {\r margin-left: 5px;\r list-style-position: inside;\r }\r\r .container {\r display: block!important;\r max-width: 600px!important;\r margin: 0 auto!important;\r clear: both!important;\r }\r\r .body-wrap .container {\r padding: 20px;\r }\r\r .content {\r max-width: 600px;\r margin: 0 auto;\r display: block;\r }\r\r .content table {\r width: 100%;\r }\r </style>\r </head>\r\r <body bgcolor="#f6f6f6" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:none;width:100%!important;height:100%;">\r <!-- body -->\r <table class="body-wrap" bgcolor="#f6f6f6" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;">\r <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>\r <td class="container" bgcolor="#FFFFFF" style="font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;display:block!important;max-width:600px!important;margin-top:0 !important;margin-bottom:0 !important;margin-right:auto !important;margin-left:auto !important;clear:both!important;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;border-width:1px;border-style:solid;border-color:#f0f0f0;">\r <!-- content -->\r <div class="content" style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;max-width:600px;margin-top:0;margin-bottom:0;margin-right:auto;margin-left:auto;display:block;">\r <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">\r <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <h1 style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;color:#444;margin-top:10px;margin-bottom:10px;margin-right:0;margin-left:0;line-height:1.2;font-weight:200;font-size:36px;">Password Reset</h1>\r <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;">A password reset was requested for this email address on <a href="{{ url('/') }}">{{ Setting::get('app-name')}}</a>. If you did not request a password change please ignore this email.</p>\r <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">\r <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <td class="padding" style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;padding-top:10px;padding-bottom:10px;padding-right:0;padding-left:0;">\r <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;"><a class="btn-primary" href="{{ url('password/reset/'.$token) }}" style="margin-top:0;margin-bottom:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;text-decoration:none;color:#FFF;background-color:#348eda;border-style:solid;border-color:#348eda;border-width:10px 20px;line-height:2;font-weight:bold;margin-right:10px;text-align:center;cursor:pointer;display:inline-block;border-radius:4px;">Click here to reset your password</a></p>\r </td>\r </tr>\r </table>\r </td>\r </tr>\r </table>\r </div>\r <!-- /content -->\r </td>\r <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>\r </tr>\r </table>\r <!-- /body -->\r </body>\r\r </html>\r
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r<html xmlns="http://www.w3.org/1999/xhtml"\r style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r\r<head style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <meta name="viewport" content="width=device-width"\r style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"/>\r <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"\r style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"/>\r <title>Password Reset From {{ setting('app-name')}}</title>\r <style style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r * {\r margin: 0;\r padding: 0;\r font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;\r font-size: 100%;\r line-height: 1.6;\r }\r\r img {\r max-width: 100%;\r }\r\r body {\r -webkit-font-smoothing: antialiased;\r -webkit-text-size-adjust: none;\r width: 100% !important;\r height: 100%;\r }\r\r a {\r color: #348eda;\r }\r\r .btn-primary {\r text-decoration: none;\r color: #FFF;\r background-color: #348eda;\r border: solid #348eda;\r border-width: 10px 20px;\r line-height: 2;\r font-weight: bold;\r margin-right: 10px;\r text-align: center;\r cursor: pointer;\r display: inline-block;\r border-radius: 4px;\r }\r\r .btn-secondary {\r text-decoration: none;\r color: #FFF;\r background-color: #aaa;\r border: solid #aaa;\r border-width: 10px 20px;\r line-height: 2;\r font-weight: bold;\r margin-right: 10px;\r text-align: center;\r cursor: pointer;\r display: inline-block;\r border-radius: 25px;\r }\r\r .last {\r margin-bottom: 0;\r }\r\r .first {\r margin-top: 0;\r }\r\r .padding {\r padding: 10px 0;\r }\r\r table.body-wrap {\r width: 100%;\r padding: 20px;\r }\r\r table.body-wrap .container {\r border: 1px solid #f0f0f0;\r }\r\r h1,\r h2,\r h3 {\r font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;\r color: #444;\r margin: 10px 0 10px;\r line-height: 1.2;\r font-weight: 200;\r }\r\r h1 {\r font-size: 36px;\r }\r\r h2 {\r font-size: 28px;\r }\r\r h3 {\r font-size: 22px;\r }\r\r p,\r ul,\r ol {\r margin-bottom: 10px;\r font-weight: normal;\r font-size: 14px;\r color: #888888;\r }\r\r ul li,\r ol li {\r margin-left: 5px;\r list-style-position: inside;\r }\r\r .container {\r display: block !important;\r max-width: 600px !important;\r margin: 0 auto !important;\r clear: both !important;\r }\r\r .body-wrap .container {\r padding: 20px;\r }\r\r .content {\r max-width: 600px;\r margin: 0 auto;\r display: block;\r }\r\r .content table {\r width: 100%;\r }\r </style>\r</head>\r\r<body bgcolor="#f6f6f6"\r style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:none;width:100%!important;height:100%;">\r<!-- body -->\r<table class="body-wrap" bgcolor="#f6f6f6"\r style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;">\r <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>\r <td class="container" bgcolor="#FFFFFF"\r style="font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;display:block!important;max-width:600px!important;margin-top:0 !important;margin-bottom:0 !important;margin-right:auto !important;margin-left:auto !important;clear:both!important;padding-top:20px;padding-bottom:20px;padding-right:20px;padding-left:20px;border-width:1px;border-style:solid;border-color:#f0f0f0;">\r <!-- content -->\r <div class="content"\r style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;max-width:600px;margin-top:0;margin-bottom:0;margin-right:auto;margin-left:auto;display:block;">\r <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">\r <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <h1 style="padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;color:#444;margin-top:10px;margin-bottom:10px;margin-right:0;margin-left:0;line-height:1.2;font-weight:200;font-size:36px;">\r Password Reset</h1>\r <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;">\r A password reset was requested for this email address on <a\r href="{{ baseUrl('/') }}">{{ setting('app-name')}}</a>. If you did not request\r a password change please ignore this email.</p>\r <table style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;width:100%;">\r <tr style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;">\r <td class="padding"\r style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;padding-top:10px;padding-bottom:10px;padding-right:0;padding-left:0;">\r <p style="margin-top:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;line-height:1.6;margin-bottom:10px;font-weight:normal;font-size:14px;color:#888888;">\r <a class="btn-primary" href="{{ baseUrl('/password/reset/' . $token) }}"\r style="margin-top:0;margin-bottom:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;text-decoration:none;color:#FFF;background-color:#348eda;border-style:solid;border-color:#348eda;border-width:10px 20px;line-height:2;font-weight:bold;margin-right:10px;text-align:center;cursor:pointer;display:inline-block;border-radius:4px;">Click\r here to reset your password</a></p>\r </td>\r </tr>\r </table>\r </td>\r </tr>\r </table>\r </div>\r <!-- /content -->\r </td>\r <td style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;font-size:100%;line-height:1.6;"></td>\r </tr>\r</table>\r<!-- /body -->\r</body>\r\r</html>\r
\ No newline at end of file
<div class="container">
<h1 class="text-muted">{{ $message or 'Page Not Found' }}</h1>
<p>Sorry, The page you were looking for could not be found.</p>
- <a href="/" class="button">Return To Home</a>
+ <a href="{{ baseUrl('/') }}" class="button">Return To Home</a>
</div>
@stop
\ No newline at end of file
-<!DOCTYPE html>
-<html>
- <head>
- <title>Be right back.</title>
+@extends('public')
- <link href="//fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">
+@section('content')
- <style>
- html, body {
- height: 100%;
- }
+ <div class="container">
+ <h1 class="text-muted">{{ setting('app-name') }} is down right now</h1>
+ <p>It will be back up soon.</p>
+ </div>
- body {
- margin: 0;
- padding: 0;
- width: 100%;
- color: #B0BEC5;
- display: table;
- font-weight: 100;
- font-family: 'Lato';
- }
-
- .container {
- text-align: center;
- display: table-cell;
- vertical-align: middle;
- }
-
- .content {
- text-align: center;
- display: inline-block;
- }
-
- .title {
- font-size: 72px;
- margin-bottom: 40px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="content">
- <div class="title">Be right back.</div>
- </div>
- </div>
- </body>
-</html>
+@stop
\ No newline at end of file
-<form action="{{ $model->getUrl() }}/permissions" method="POST">
+<form action="{{ $model->getUrl('/permissions') }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="PUT">
</div>
<div class="col-sm-4">
- <h3><a class="no-color" href="/pages/recently-created">Recently Created Pages</a></h3>
+ <h3><a class="no-color" href="{{ baseUrl("/pages/recently-created") }}">Recently Created Pages</a></h3>
<div id="recently-created-pages">
@include('partials/entity-list', [
'entities' => $recentlyCreatedPages,
])
</div>
- <h3><a class="no-color" href="/pages/recently-updated">Recently Updated Pages</a></h3>
+ <h3><a class="no-color" href="{{ baseUrl("/pages/recently-updated") }}">Recently Updated Pages</a></h3>
<div id="recently-updated-pages">
@include('partials/entity-list', [
'entities' => $recentlyUpdatedPages,
<h1>Delete {{ $page->draft ? 'Draft' : '' }} Page</h1>
<p class="text-neg">Are you sure you want to delete this {{ $page->draft ? 'draft' : '' }} page?</p>
- <form action="{{$page->getUrl()}}" method="POST">
+ <form action="{{ $page->getUrl() }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="DELETE">
- <a href="{{$page->getUrl()}}" class="button primary">Cancel</a>
+ <a href="{{ $page->getUrl() }}" class="button primary">Cancel</a>
<button type="submit" class="button neg">Confirm</button>
</form>
</div>
@extends('base')
@section('head')
- <script src="/libs/tinymce/tinymce.min.js?ver=4.3.7"></script>
+ <script src="{{ baseUrl('/libs/tinymce/tinymce.min.js?ver=4.3.7') }}"></script>
@stop
@section('body-class', 'flexbox')
@section('content')
<div class="flex-fill flex">
- <form action="{{$page->getUrl()}}" autocomplete="off" data-page-id="{{ $page->id }}" method="POST" class="flex flex-fill">
+ <form action="{{ $page->getUrl() }}" autocomplete="off" data-page-id="{{ $page->id }}" method="POST" class="flex flex-fill">
@if(!isset($isDraft))
<input type="hidden" name="_method" value="PUT">
@endif
<tbody ui-sortable="sortOptions" ng-model="tags" >
<tr ng-repeat="tag in tags track by $index">
<td width="20" ><i class="handle zmdi zmdi-menu"></i></td>
- <td><input autosuggest="/ajax/tags/suggest/names" autosuggest-type="name" class="outline" ng-attr-name="tags[@{{$index}}][name]" type="text" ng-model="tag.name" ng-change="tagChange(tag)" ng-blur="tagBlur(tag)" placeholder="Tag"></td>
- <td><input autosuggest="/ajax/tags/suggest/values" autosuggest-type="value" class="outline" ng-attr-name="tags[@{{$index}}][value]" type="text" ng-model="tag.value" ng-change="tagChange(tag)" ng-blur="tagBlur(tag)" placeholder="Tag Value (Optional)"></td>
+ <td><input autosuggest="{{ baseUrl('/ajax/tags/suggest/names') }}" autosuggest-type="name" class="outline" ng-attr-name="tags[@{{$index}}][name]" type="text" ng-model="tag.name" ng-change="tagChange(tag)" ng-blur="tagBlur(tag)" placeholder="Tag"></td>
+ <td><input autosuggest="{{ baseUrl('/ajax/tags/suggest/values') }}" autosuggest-type="value" class="outline" ng-attr-name="tags[@{{$index}}][value]" type="text" ng-model="tag.value" ng-change="tagChange(tag)" ng-blur="tagBlur(tag)" placeholder="Tag Value (Optional)"></td>
<td width="10" ng-show="tags.length != 1" class="text-center text-neg" style="padding: 0;" ng-click="removeTag(tag)"><i class="zmdi zmdi-close"></i></td>
</tr>
</tbody>
<a ng-click="forceDraftSave()" class="text-pos"><i class="zmdi zmdi-save"></i>Save Draft</a>
</li>
<li ng-if="isNewPageDraft">
- <a href="{{$model->getUrl()}}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete Draft</a>
+ <a href="{{ $model->getUrl('/delete') }}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete Draft</a>
</li>
</ul>
</div>
<div class="row">
<div class="col-sm-12 faded">
<div class="breadcrumbs">
- <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
+ <a href="{{ $book->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
@if($page->hasChapter())
<span class="sep">»</span>
<a href="{{ $page->chapter->getUrl() }}" class="text-chapter text-button">
<i class="zmdi zmdi-collection-bookmark"></i>
- {{$page->chapter->getShortName()}}
+ {{ $page->chapter->getShortName() }}
</a>
@endif
<span class="sep">»</span>
- <a href="{{$page->getUrl()}}" class="text-page text-button"><i class="zmdi zmdi-file-text"></i>{{ $page->getShortName() }}</a>
+ <a href="{{ $page->getUrl() }}" class="text-page text-button"><i class="zmdi zmdi-file-text"></i>{{ $page->getShortName() }}</a>
</div>
</div>
</div>
<div class="container">
<h1>Move Page <small class="subheader">{{$page->name}}</small></h1>
- <form action="{{ $page->getUrl() }}/move" method="POST">
+ <form action="{{ $page->getUrl('/move') }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="PUT">
<table>
@foreach($page->tags as $tag)
<tr class="tag">
- <td @if(!$tag->value) colspan="2" @endif><a href="/search/all?term=%5B{{ urlencode($tag->name) }}%5D">{{ $tag->name }}</a></td>
- @if($tag->value) <td class="tag-value"><a href="/search/all?term=%5B{{ urlencode($tag->name) }}%3D{{ urlencode($tag->value) }}%5D">{{$tag->value}}</a></td> @endif
+ <td @if(!$tag->value) colspan="2" @endif><a href="{{ baseUrl('/search/all?term=%5B' . urlencode($tag->name) .'%5D') }}">{{ $tag->name }}</a></td>
+ @if($tag->value) <td class="tag-value"><a href="{{ baseUrl('/search/all?term=%5B' . urlencode($tag->name) .'%3D' . urlencode($tag->value) . '%5D') }}">{{$tag->value}}</a></td> @endif
</tr>
@endforeach
</table>
<div class="row">
<div class="col-sm-12 faded">
<div class="breadcrumbs">
- <a href="{{$page->book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $page->book->getShortName() }}</a>
+ <a href="{{ $page->book->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $page->book->getShortName() }}</a>
@if($page->hasChapter())
<span class="sep">»</span>
<a href="{{ $page->chapter->getUrl() }}" class="text-chapter text-button">
<i class="zmdi zmdi-collection-bookmark"></i>
- {{$page->chapter->getShortName()}}
+ {{ $page->chapter->getShortName() }}
</a>
@endif
<span class="sep">»</span>
- <a href="{{$page->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-file"></i>{{ $page->getShortName() }}</a>
+ <a href="{{ $page->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-file"></i>{{ $page->getShortName() }}</a>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 faded">
<div class="breadcrumbs">
- <a href="{{$page->getUrl()}}" class="text-primary text-button"><i class="zmdi zmdi-arrow-left"></i>Back to page</a>
+ <a href="{{ $page->getUrl() }}" class="text-primary text-button"><i class="zmdi zmdi-arrow-left"></i>Back to page</a>
</div>
</div>
<div class="col-md-6 faded">
<td> @if($revision->createdBy) {{$revision->createdBy->name}} @else Deleted User @endif</td>
<td><small>{{$revision->created_at->format('jS F, Y H:i:s')}} <br> ({{$revision->created_at->diffForHumans()}})</small></td>
<td>
- <a href="{{$revision->getUrl()}}" target="_blank">Preview</a>
+ <a href="{{ $revision->getUrl() }}" target="_blank">Preview</a>
<span class="text-muted"> | </span>
- <a href="{{$revision->getUrl()}}/restore">Restore</a>
+ <a href="{{ $revision->getUrl('/restore') }}">Restore</a>
</td>
</tr>
@endforeach
<div class="row">
<div class="col-sm-6 faded">
<div class="breadcrumbs">
- <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
+ <a href="{{ $book->getUrl() }}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
@if($page->hasChapter())
<span class="sep">»</span>
<a href="{{ $page->chapter->getUrl() }}" class="text-chapter text-button">
<i class="zmdi zmdi-collection-bookmark"></i>
- {{$page->chapter->getShortName()}}
+ {{ $page->chapter->getShortName() }}
</a>
@endif
</div>
<span dropdown class="dropdown-container">
<div dropdown-toggle class="text-button text-primary"><i class="zmdi zmdi-open-in-new"></i>Export</div>
<ul class="wide">
- <li><a href="{{$page->getUrl()}}/export/html" target="_blank">Contained Web File <span class="text-muted float right">.html</span></a></li>
- <li><a href="{{$page->getUrl()}}/export/pdf" target="_blank">PDF File <span class="text-muted float right">.pdf</span></a></li>
- <li><a href="{{$page->getUrl()}}/export/plaintext" target="_blank">Plain Text File <span class="text-muted float right">.txt</span></a></li>
+ <li><a href="{{ $page->getUrl('/export/html') }}" target="_blank">Contained Web File <span class="text-muted float right">.html</span></a></li>
+ <li><a href="{{ $page->getUrl('/export/pdf') }}" target="_blank">PDF File <span class="text-muted float right">.pdf</span></a></li>
+ <li><a href="{{ $page->getUrl('/export/plaintext') }}" target="_blank">Plain Text File <span class="text-muted float right">.txt</span></a></li>
</ul>
</span>
@if(userCan('page-update', $page))
- <a href="{{$page->getUrl()}}/edit" class="text-primary text-button" ><i class="zmdi zmdi-edit"></i>Edit</a>
+ <a href="{{ $page->getUrl('/edit') }}" class="text-primary text-button" ><i class="zmdi zmdi-edit"></i>Edit</a>
@endif
@if(userCan('page-update', $page) || userCan('restrictions-manage', $page) || userCan('page-delete', $page))
<div dropdown class="dropdown-container">
<a dropdown-toggle class="text-primary text-button"><i class="zmdi zmdi-more-vert"></i></a>
<ul>
@if(userCan('page-update', $page))
- <li><a href="{{$page->getUrl()}}/move" class="text-primary" ><i class="zmdi zmdi-folder"></i>Move</a></li>
- <li><a href="{{$page->getUrl()}}/revisions" class="text-primary"><i class="zmdi zmdi-replay"></i>Revisions</a></li>
+ <li><a href="{{ $page->getUrl('/move') }}" class="text-primary" ><i class="zmdi zmdi-folder"></i>Move</a></li>
+ <li><a href="{{ $page->getUrl('/revisions') }}" class="text-primary"><i class="zmdi zmdi-replay"></i>Revisions</a></li>
@endif
@if(userCan('restrictions-manage', $page))
- <li><a href="{{$page->getUrl()}}/permissions" class="text-primary"><i class="zmdi zmdi-lock-outline"></i>Permissions</a></li>
+ <li><a href="{{ $page->getUrl('/permissions') }}" class="text-primary"><i class="zmdi zmdi-lock-outline"></i>Permissions</a></li>
@endif
@if(userCan('page-delete', $page))
- <li><a href="{{$page->getUrl()}}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a></li>
+ <li><a href="{{ $page->getUrl('/delete') }}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a></li>
@endif
</ul>
</div>
<hr>
<p class="text-muted small">
- Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by <a href="/user/{{ $page->createdBy->id }}">{{$page->createdBy->name}}</a> @endif
+ Created {{ $page->created_at->diffForHumans() }} @if($page->createdBy) by <a href="{{ $page->createdBy->getProfileUrl() }}">{{$page->createdBy->name}}</a> @endif
<br>
- Last Updated {{$page->updated_at->diffForHumans()}} @if($page->updatedBy) by <a href="/user/{{ $page->updatedBy->id }}">{{$page->updatedBy->name}}</a> @endif
+ Last Updated {{ $page->updated_at->diffForHumans() }} @if($page->updatedBy) by <a href="{{ $page->updatedBy->getProfileUrl() }}">{{$page->updatedBy->name}}</a> @endif
</p>
</div>
</div>
+
<div class="col-md-3 print-hidden">
<div class="margin-top large"></div>
@if($book->restricted || ($page->chapter && $page->chapter->restricted) || $page->restricted)
@if($book->restricted)
@if(userCan('restrictions-manage', $book))
- <a href="{{ $book->getUrl() }}/permissions"><i class="zmdi zmdi-lock-outline"></i>Book Permissions Active</a>
+ <a href="{{ $book->getUrl('/permissions') }}"><i class="zmdi zmdi-lock-outline"></i>Book Permissions Active</a>
@else
<i class="zmdi zmdi-lock-outline"></i>Book Permissions Active
@endif
@if($page->chapter && $page->chapter->restricted)
@if(userCan('restrictions-manage', $page->chapter))
- <a href="{{ $page->chapter->getUrl() }}/permissions"><i class="zmdi zmdi-lock-outline"></i>Chapter Permissions Active</a>
+ <a href="{{ $page->chapter->getUrl('/permissions') }}"><i class="zmdi zmdi-lock-outline"></i>Chapter Permissions Active</a>
@else
<i class="zmdi zmdi-lock-outline"></i>Chapter Permissions Active
@endif
@if($page->restricted)
@if(userCan('restrictions-manage', $page))
- <a href="{{ $page->getUrl() }}/permissions"><i class="zmdi zmdi-lock-outline"></i>Page Permissions Active</a>
+ <a href="{{ $page->getUrl('/permissions') }}"><i class="zmdi zmdi-lock-outline"></i>Page Permissions Active</a>
@else
<i class="zmdi zmdi-lock-outline"></i>Page Permissions Active
@endif
</div>
@endif
@include('pages/sidebar-tree-list', ['book' => $book, 'sidebarTree' => $sidebarTree])
-
</div>
+
</div>
</div>
<div class="book-tree" ng-non-bindable>
<h6 class="text-muted">Book Navigation</h6>
<ul class="sidebar-page-list menu">
- <li class="book-header"><a href="{{$book->getUrl()}}" class="book {{ $current->matches($book)? 'selected' : '' }}"><i class="zmdi zmdi-book"></i>{{$book->name}}</a></li>
+ <li class="book-header"><a href="{{ $book->getUrl() }}" class="book {{ $current->matches($book)? 'selected' : '' }}"><i class="zmdi zmdi-book"></i>{{$book->name}}</a></li>
@foreach($sidebarTree as $bookChild)
<li class="list-item-{{ $bookChild->getClassName() }} {{ $bookChild->getClassName() }} {{ $bookChild->isA('page') && $bookChild->draft ? 'draft' : '' }}">
- <a href="{{$bookChild->getUrl()}}" class="{{ $bookChild->getClassName() }} {{ $current->matches($bookChild)? 'selected' : '' }}">
+ <a href="{{ $bookChild->getUrl() }}" class="{{ $bookChild->getClassName() }} {{ $current->matches($bookChild)? 'selected' : '' }}">
@if($bookChild->isA('chapter'))<i class="zmdi zmdi-collection-bookmark"></i>@else <i class="zmdi zmdi-file-text"></i>@endif{{ $bookChild->name }}
</a>
<ul class="menu sub-menu inset-list @if($bookChild->matchesOrContains($current)) open @endif">
@foreach($bookChild->pages as $childPage)
<li class="list-item-page {{ $childPage->isA('page') && $childPage->draft ? 'draft' : '' }}">
- <a href="{{$childPage->getUrl()}}" class="page {{ $current->matches($childPage)? 'selected' : '' }}">
+ <a href="{{ $childPage->getUrl() }}" class="page {{ $current->matches($childPage)? 'selected' : '' }}">
<i class="zmdi zmdi-file-text"></i> {{ $childPage->name }}
</a>
</li>
@if($activity->user)
<div class="left">
- <img class="avatar" src="{{ $activity->user->getAvatar(30) }}" alt="{{$activity->user->name}}">
+ <img class="avatar" src="{{ $activity->user->getAvatar(30) }}" alt="{{ $activity->user->name }}">
</div>
@endif
<div class="right" ng-non-bindable>
@if($activity->user)
- <a href="/user/{{ $activity->user->id }}">{{$activity->user->name}}</a>
+ <a href="{{ $activity->user->getProfileUrl() }}">{{ $activity->user->name }}</a>
@else
A deleted user
@endif
<a href="{{ $activity->entity->getUrl() }}">{{ $activity->entity->name }}</a>
@endif
- @if($activity->extra) "{{$activity->extra}}" @endif
+ @if($activity->extra) "{{ $activity->extra }}" @endif
<br>
<style>
header, #back-to-top, .primary-background {
- background-color: {{ Setting::get('app-color') }} !important;
+ background-color: {{ setting('app-color') }} !important;
}
.faded-small, .primary-background-light {
- background-color: {{ Setting::get('app-color-light') }};
+ background-color: {{ setting('app-color-light') }};
}
.button-base, .button, input[type="button"], input[type="submit"] {
- background-color: {{ Setting::get('app-color') }};
+ background-color: {{ setting('app-color') }};
}
.button-base:hover, .button:hover, input[type="button"]:hover, input[type="submit"]:hover, .button:focus {
- background-color: {{ Setting::get('app-color') }};
+ background-color: {{ setting('app-color') }};
}
.nav-tabs a.selected, .nav-tabs .tab-item.selected {
- border-bottom-color: {{ Setting::get('app-color') }};
+ border-bottom-color: {{ setting('app-color') }};
}
p.primary:hover, p .primary:hover, span.primary:hover, .text-primary:hover, a, a:hover, a:focus, .text-button, .text-button:hover, .text-button:focus {
- color: {{ Setting::get('app-color') }};
+ color: {{ setting('app-color') }};
}
</style>
\ No newline at end of file
-<script src="/libs/highlightjs/highlight.min.js"></script>
+<script src="{{ baseUrl('/libs/highlightjs/highlight.min.js') }}"></script>
<script>
$(function() {
var aCodes = document.getElementsByTagName('pre');
<!DOCTYPE html>
<html>
<head>
- <title>BookStack</title>
+ <title>{{ setting('app-name') }}</title>
<!-- Meta -->
<meta name="viewport" content="width=device-width">
<meta name="token" content="{{ csrf_token() }}">
+ <meta name="base-url" content="{{ baseUrl('/') }}">
<meta charset="utf-8">
<!-- Styles and Fonts -->
<link rel="stylesheet" href="{{ versioned_asset('css/styles.css') }}">
<link rel="stylesheet" media="print" href="{{ versioned_asset('css/print-styles.css') }}">
- <link rel="stylesheet" href="/libs/material-design-iconic-font/css/material-design-iconic-font.min.css">
+ <link rel="stylesheet" href="{{ baseUrl("/libs/material-design-iconic-font/css/material-design-iconic-font.min.css") }}">
<!-- Scripts -->
- <script src="/libs/jquery/jquery.min.js?version=2.1.4"></script>
+ <script src="{{ baseUrl("/libs/jquery/jquery.min.js?version=2.1.4") }}"></script>
@include('partials/custom-styles')
</head>
<body class="@yield('body-class')" ng-app="bookStack">
<div class="row">
<div class="col-md-6">
- <a href="/" class="logo">
- <img class="logo-image" src="/logo.png" alt="Logo">
- <span class="logo-text">{{ Setting::get('app-name', 'BookStack') }}</span>
+ <a href="{{ baseUrl('/') }}" class="logo">
+ @if(setting('app-logo', '') !== 'none')
+ <img class="logo-image" src="{{ setting('app-logo', '') === '' ? baseUrl('/logo.png') : baseUrl(setting('app-logo', '')) }}" alt="Logo">
+ @endif
+ <span class="logo-text">{{ setting('app-name') }}</span>
</a>
</div>
<div class="col-md-6">
</div>
@if(isset($signedIn) && $signedIn)
<div class="dropdown-container" dropdown>
- <span class="user-name" dropdown-toggle>
- <img class="avatar" src="{{$currentUser->getAvatar(30)}}" alt="{{ $currentUser->name }}">
- <span class="name" ng-non-bindable>{{ $currentUser->name }}</span> <i class="zmdi zmdi-caret-down"></i>
- </span>
+ <span class="user-name" dropdown-toggle>
+ <img class="avatar" src="{{$currentUser->getAvatar(30)}}" alt="{{ $currentUser->name }}">
+ <span class="name" ng-non-bindable>{{ $currentUser->getShortName(9) }}</span> <i class="zmdi zmdi-caret-down"></i>
+ </span>
<ul>
<li>
- <a href="/users/{{$currentUser->id}}" class="text-primary"><i class="zmdi zmdi-edit zmdi-hc-lg"></i>Edit Profile</a>
+ <a href="{{ baseUrl("/user/{$currentUser->id}") }}" class="text-primary"><i class="zmdi zmdi-account zmdi-hc-fw zmdi-hc-lg"></i>View Profile</a>
+ </li>
+ <li>
+ <a href="{{ baseUrl("/settings/users/{$currentUser->id}") }}" class="text-primary"><i class="zmdi zmdi-edit zmdi-hc-fw zmdi-hc-lg"></i>Edit Profile</a>
</li>
<li>
- <a href="/logout" class="text-neg"><i class="zmdi zmdi-run zmdi-hc-lg"></i>Logout</a>
+ <a href="{{ baseUrl('/logout') }}" class="text-neg"><i class="zmdi zmdi-run zmdi-hc-fw zmdi-hc-lg"></i>Logout</a>
</li>
</ul>
</div>
<div class="container anim fadeIn" ng-non-bindable>
- <h1>Search Results <span class="text-muted">{{$searchTerm}}</span></h1>
+ <h1>Search Results <span class="text-muted">{{ $searchTerm }}</span></h1>
<p>
@if(count($pages) > 0)
- <a href="/search/pages?term={{$searchTerm}}" class="text-page"><i class="zmdi zmdi-file-text"></i>View all matched pages</a>
+ <a href="{{ baseUrl("/search/pages?term={$searchTerm}") }}" class="text-page"><i class="zmdi zmdi-file-text"></i>View all matched pages</a>
@endif
@if(count($chapters) > 0)
- <a href="/search/chapters?term={{$searchTerm}}" class="text-chapter"><i class="zmdi zmdi-collection-bookmark"></i>View all matched chapters</a>
+ <a href="{{ baseUrl("/search/chapters?term={$searchTerm}") }}" class="text-chapter"><i class="zmdi zmdi-collection-bookmark"></i>View all matched chapters</a>
@endif
@if(count($books) > 0)
- <a href="/search/books?term={{$searchTerm}}" class="text-book"><i class="zmdi zmdi-book"></i>View all matched books</a>
+ <a href="{{ baseUrl("/search/books?term={$searchTerm}") }}" class="text-book"><i class="zmdi zmdi-book"></i>View all matched books</a>
@endif
</p>
<div class="row">
<div class="col-md-6">
- <h3><a href="/search/pages?term={{$searchTerm}}" class="no-color">Matching Pages</a></h3>
+ <h3><a href="{{ baseUrl("/search/pages?term={$searchTerm}") }}" class="no-color">Matching Pages</a></h3>
@include('partials/entity-list', ['entities' => $pages, 'style' => 'detailed'])
</div>
<div class="col-md-5 col-md-offset-1">
@if(count($books) > 0)
- <h3><a href="/search/books?term={{$searchTerm}}" class="no-color">Matching Books</a></h3>
+ <h3><a href="{{ baseUrl("/search/books?term={$searchTerm}") }}" class="no-color">Matching Books</a></h3>
@include('partials/entity-list', ['entities' => $books])
@endif
@if(count($chapters) > 0)
- <h3><a href="/search/chapters?term={{$searchTerm}}" class="no-color">Matching Chapters</a></h3>
+ <h3><a href="{{ baseUrl("/search/chapters?term={$searchTerm}") }}" class="no-color">Matching Chapters</a></h3>
@include('partials/entity-list', ['entities' => $chapters])
@endif
<div class="row">
<div class="col-sm-7">
- <h1>{{ $title }} <small>{{$searchTerm}}</small></h1>
+ <h1>{{ $title }} <small>{{ $searchTerm }}</small></h1>
@include('partials.entity-list', ['entities' => $entities, 'style' => 'detailed'])
{!! $entities->links() !!}
</div>
<h1>Settings</h1>
- <form action="/settings" method="POST" ng-cloak>
+ <form action="{{ baseUrl("/settings") }}" method="POST" ng-cloak>
{!! csrf_field() !!}
<h3>App Settings</h3>
<div class="form-group" id="logo-control">
<label for="setting-app-logo">Application logo</label>
<p class="small">This image should be 43px in height. <br>Large images will be scaled down.</p>
- <image-picker resize-height="43" show-remove="true" resize-width="200" current-image="{{ setting('app-logo', '') }}" default-image="/logo.png" name="setting-app-logo" image-class="logo-image"></image-picker>
+ <image-picker resize-height="43" show-remove="true" resize-width="200" current-image="{{ setting('app-logo', '') }}" default-image="{{ baseUrl('/logo.png') }}" name="setting-app-logo" image-class="logo-image"></image-picker>
</div>
<div class="form-group" id="color-control">
<label for="setting-app-color">Application primary color</label>
@stop
@section('scripts')
- <script src="/libs/jq-color-picker/tiny-color-picker.min.js?version=1.0.0"></script>
+ <script src="{{ baseUrl("/libs/jq-color-picker/tiny-color-picker.min.js?version=1.0.0") }}"></script>
<script type="text/javascript">
$('#setting-app-color').colorPicker({
opacity: false,
if (!isEmpty) $elm.val(hexVal);
$('#setting-app-color-light').val(isEmpty ? '' : rgbLightVal);
// Set page elements to provide preview
- $('#header, .image-picker .button').css('background-color', hexVal);
+ $('#header, .image-picker .button').attr('style', 'background-color:'+ hexVal+'!important;');
$('.faded-small').css('background-color', rgbLightVal);
- $('.setting-nav a.selected').css('border-bottom-color', hexVal);
+ $('.setting-nav a.selected').css('border-bottom-color', hexVal + '!important');
}
});
</script>
<div class="row">
<div class="col-md-12 setting-nav nav-tabs">
@if($currentUser->can('settings-manage'))
- <a href="/settings" @if($selected == 'settings') class="selected text-button" @endif><i class="zmdi zmdi-settings"></i>Settings</a>
+ <a href="{{ baseUrl('/settings') }}" @if($selected == 'settings') class="selected text-button" @endif><i class="zmdi zmdi-settings"></i>Settings</a>
@endif
@if($currentUser->can('users-manage'))
- <a href="/settings/users" @if($selected == 'users') class="selected text-button" @endif><i class="zmdi zmdi-accounts"></i>Users</a>
+ <a href="{{ baseUrl('/settings/users') }}" @if($selected == 'users') class="selected text-button" @endif><i class="zmdi zmdi-accounts"></i>Users</a>
@endif
@if($currentUser->can('user-roles-manage'))
- <a href="/settings/roles" @if($selected == 'roles') class="selected text-button" @endif><i class="zmdi zmdi-lock-open"></i>Roles</a>
+ <a href="{{ baseUrl('/settings/roles') }}" @if($selected == 'roles') class="selected text-button" @endif><i class="zmdi zmdi-lock-open"></i>Roles</a>
@endif
</div>
</div>
<div class="container">
<h1>Create New Role</h1>
- <form action="/settings/roles/new" method="POST">
+ <form action="{{ baseUrl("/settings/roles/new") }}" method="POST">
@include('settings/roles/form')
</form>
</div>
<div class="container small" ng-non-bindable>
<h1>Delete Role</h1>
- <p>This will delete the role with the name '{{$role->display_name}}'.</p>
+ <p>This will delete the role with the name '{{ $role->display_name }}'.</p>
- <form action="/settings/roles/delete/{{$role->id}}" method="POST">
+ <form action="{{ baseUrl("/settings/roles/delete/{$role->id}") }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="DELETE">
@endif
<p class="text-neg">Are you sure you want to delete this role?</p>
- <a href="/settings/roles/{{ $role->id }}" class="button">Cancel</a>
+ <a href="{{ baseUrl("/settings/roles/{$role->id}") }}" class="button">Cancel</a>
<button type="submit" class="button neg">Confirm</button>
</form>
</div>
</div>
<div class="col-sm-6">
<p></p>
- <a href="/settings/roles/delete/{{ $role->id }}" class="button neg float right">Delete Role</a>
+ <a href="{{ baseUrl("/settings/roles/delete/{$role->id}") }}" class="button neg float right">Delete Role</a>
</div>
</div>
- <form action="/settings/roles/{{ $role->id }}" method="POST">
+ <form action="{{ baseUrl("/settings/roles/{$role->id}") }}" method="POST">
<input type="hidden" name="_method" value="PUT">
@include('settings/roles/form', ['model' => $role])
</form>
</table>
</div>
</div>
- <a href="/settings/roles" class="button muted">Cancel</a>
+ <a href="{{ baseUrl("/settings/roles") }}" class="button muted">Cancel</a>
<button type="submit" class="button pos">Save Role</button>
</div>
<div class="col-md-3">
<table class="list-table">
@foreach($role->users as $user)
<tr>
- <td style="line-height: 0;"><img class="avatar small" src="{{$user->getAvatar(40)}}" alt="{{$user->name}}"></td>
+ <td style="line-height: 0;"><img class="avatar small" src="{{ $user->getAvatar(40) }}" alt="{{ $user->name }}"></td>
<td>
@if(userCan('users-manage') || $currentUser->id == $user->id)
- <a href="/settings/users/{{$user->id}}">
+ <a href="{{ baseUrl("/settings/users/{$user->id}") }}">
@endif
{{ $user->name }}
@if(userCan('users-manage') || $currentUser->id == $user->id)
</div>
<div class="col-sm-4">
<p></p>
- <a href="/settings/roles/new" class="button float right pos"><i class="zmdi zmdi-lock-open"></i>Add new role</a>
+ <a href="{{ baseUrl("/settings/roles/new") }}" class="button float right pos"><i class="zmdi zmdi-lock-open"></i>Add new role</a>
</div>
</div>
</tr>
@foreach($roles as $role)
<tr>
- <td><a href="/settings/roles/{{ $role->id }}">{{ $role->display_name }}</a></td>
+ <td><a href="{{ baseUrl("/settings/roles/{$role->id}") }}">{{ $role->display_name }}</a></td>
<td>{{ $role->description }}</td>
<td class="text-right">{{ $role->users->count() }}</td>
</tr>
<div class="container small" ng-non-bindable>
<h1>Create User</h1>
- <form action="/settings/users/create" method="post">
+ <form action="{{ baseUrl("/settings/users/create") }}" method="post">
{!! csrf_field() !!}
- @include('users.forms.' . $authMethod)
+ @include('users/forms/' . $authMethod)
</form>
</div>
<div class="container small" ng-non-bindable>
<h1>Delete User</h1>
- <p>This will fully delete this user with the name '<span class="text-neg">{{$user->name}}</span>' from the system.</p>
+ <p>This will fully delete this user with the name '<span class="text-neg">{{ $user->name }}</span>' from the system.</p>
<p class="text-neg">Are you sure you want to delete this user?</p>
- <form action="/settings/users/{{$user->id}}" method="POST">
+ <form action="{{ baseUrl("/settings/users/{$user->id}") }}" method="POST">
{!! csrf_field() !!}
<input type="hidden" name="_method" value="DELETE">
- <a href="/settings/users/{{$user->id}}" class="button muted">Cancel</a>
+ <a href="{{ baseUrl("/settings/users/{$user->id}") }}" class="button muted">Cancel</a>
<button type="submit" class="button neg">Confirm</button>
</form>
</div>
<div class="container small">
- <form action="/settings/users/{{$user->id}}" method="post">
+ <form action="{{ baseUrl("/settings/users/{$user->id}") }}" method="post">
<div class="row">
<div class="col-sm-8">
<h1>Edit {{ $user->id === $currentUser->id ? 'Profile' : 'User' }}</h1>
</div>
<div class="col-sm-4">
<p></p>
- <a href="/settings/users/{{$user->id}}/delete" class="neg button float right">Delete User</a>
+ <a href="{{ baseUrl("/settings/users/{$user->id}/delete") }}" class="neg button float right">Delete User</a>
</div>
</div>
<div class="row">
<div class="form-group" id="logo-control">
<label for="user-avatar">User Avatar</label>
<p class="small">This image should be approx 256px square.</p>
- <image-picker resize-height="512" resize-width="512" current-image="{{ $user->getAvatar(80) }}" current-id="{{ $user->image_id }}" default-image="/user_avatar.png" name="image_id" show-remove="false" image-class="['avatar' ,'large']"></image-picker>
+ <image-picker resize-height="512" resize-width="512" current-image="{{ $user->getAvatar(80) }}" current-id="{{ $user->image_id }}" default-image="{{ baseUrl("/user_avatar.png") }}" name="image_id" show-remove="false" image-class="['avatar' ,'large']"></image-picker>
</div>
</div>
</div>
<div><i class="zmdi zmdi-google-plus-box zmdi-hc-4x" style="color: #DC4E41;"></i></div>
<div>
@if($user->hasSocialAccount('google'))
- <a href="/login/service/google/detach" class="button neg">Disconnect Account</a>
+ <a href="{{ baseUrl("/login/service/google/detach") }}" class="button neg">Disconnect Account</a>
@else
- <a href="/login/service/google" class="button pos">Attach Account</a>
+ <a href="{{ baseUrl("/login/service/google") }}" class="button pos">Attach Account</a>
@endif
</div>
</div>
<div><i class="zmdi zmdi-github zmdi-hc-4x" style="color: #444;"></i></div>
<div>
@if($user->hasSocialAccount('github'))
- <a href="/login/service/github/detach" class="button neg">Disconnect Account</a>
+ <a href="{{ baseUrl("/login/service/github/detach") }}" class="button neg">Disconnect Account</a>
@else
- <a href="/login/service/github" class="button pos">Attach Account</a>
+ <a href="{{ baseUrl("/login/service/github") }}" class="button pos">Attach Account</a>
@endif
</div>
</div>
@endif
<div class="form-group">
- <a href="/settings/users" class="button muted">Cancel</a>
+ <a href="{{ baseUrl("/settings/users") }}" class="button muted">Cancel</a>
<button class="button pos" type="submit">Save</button>
</div>
\ No newline at end of file
</div>
<div class="form-group">
- <a href="/settings/users" class="button muted">Cancel</a>
+ <a href="{{ baseUrl("/settings/users") }}" class="button muted">Cancel</a>
<button class="button pos" type="submit">Save</button>
</div>
<div class="col-sm-4">
<p></p>
@if(userCan('users-manage'))
- <a href="/settings/users/create" class="pos button float right"><i class="zmdi zmdi-account-add"></i>Add new user</a>
+ <a href="{{ baseUrl("/settings/users/create") }}" class="pos button float right"><i class="zmdi zmdi-account-add"></i>Add new user</a>
@endif
</div>
</div>
</div>
</div>
<div class="col-sm-4">
- <form method="get" class="float right" action="/settings/users">
+ <form method="get" class="float right" action="{{ baseUrl("/settings/users") }}">
@foreach(collect($listDetails)->except('search') as $name => $val)
- <input type="hidden" name="{{$name}}" value="{{$val}}">
+ <input type="hidden" name="{{ $name }}" value="{{ $val }}">
@endforeach
<input type="text" name="search" placeholder="Search Users" @if($listDetails['search']) value="{{$listDetails['search']}}" @endif>
</form>
</tr>
@foreach($users as $user)
<tr>
- <td style="line-height: 0;"><img class="avatar med" src="{{$user->getAvatar(40)}}" alt="{{$user->name}}"></td>
+ <td style="line-height: 0;"><img class="avatar med" src="{{ $user->getAvatar(40)}}" alt="{{ $user->name }}"></td>
<td>
@if(userCan('users-manage') || $currentUser->id == $user->id)
- <a href="/settings/users/{{$user->id}}">
+ <a href="{{ baseUrl("/settings/users/{$user->id}") }}">
@endif
{{ $user->name }}
@if(userCan('users-manage') || $currentUser->id == $user->id)
</td>
<td>
@if(userCan('users-manage') || $currentUser->id == $user->id)
- <a href="/settings/users/{{$user->id}}">
+ <a href="{{ baseUrl("/settings/users/{$user->id}") }}">
@endif
{{ $user->email }}
@if(userCan('users-manage') || $currentUser->id == $user->id)
</td>
<td>
@foreach($user->roles as $index => $role)
- <small><a href="/settings/roles/{{$role->id}}">{{$role->display_name}}</a>@if($index !== count($user->roles) -1),@endif</small>
+ <small><a href="{{ baseUrl("/settings/roles/{$role->id}") }}">{{$role->display_name}}</a>@if($index !== count($user->roles) -1),@endif</small>
@endforeach
</td>
</tr>
<div class="col-md-7">
<div class="clearfix">
<div class="padded-right float left">
- <img class="avatar square huge" src="{{$user->getAvatar(120)}}" alt="{{ $user->name }}">
+ <img class="avatar square huge" src="{{ $user->getAvatar(120) }}" alt="{{ $user->name }}">
</div>
<div>
<h3 style="margin-top: 0;">{{ $user->name }}</h3>