*/
Intervention\Image\ImageServiceProvider::class,
Barryvdh\DomPDF\ServiceProvider::class,
- Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
- Barryvdh\Debugbar\ServiceProvider::class,
Barryvdh\Snappy\ServiceProvider::class,
BookStack\Providers\EventServiceProvider::class,
BookStack\Providers\RouteServiceProvider::class,
BookStack\Providers\CustomFacadeProvider::class,
-
],
/*
'ImageTool' => Intervention\Image\Facades\Image::class,
'DomPDF' => Barryvdh\DomPDF\Facade::class,
'SnappyPDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
- 'Debugbar' => Barryvdh\Debugbar\Facade::class,
/**
* Custom
"loader-utils": "1.1.0"
}
},
+ "extract-text-webpack-plugin": {
+ "version": "4.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz",
+ "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==",
+ "dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.4.5",
+ "webpack-sources": "1.1.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ }
+ }
+ },
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"devDependencies": {
"@babel/core": "^7.0.0-beta.40",
"@babel/preset-env": "^7.0.0-beta.40",
+ "autoprefixer": "^8.1.0",
"babel-loader": "^8.0.0-beta.0",
"babel-polyfill": "^6.26.0",
- "autoprefixer": "^8.1.0",
"css-loader": "^0.28.10",
- "extract-loader": "^1.0.2",
- "file-loader": "^1.1.11",
+ "extract-text-webpack-plugin": "^4.0.0-beta.0",
"livereload": "^0.7.0",
"node-sass": "^4.7.2",
"npm-run-all": "^4.1.2",
'editor-toolbox': require('./editor-toolbox'),
'image-picker': require('./image-picker'),
'collapsible': require('./collapsible'),
+ 'toggle-switch': require('./toggle-switch'),
};
window.components = {};
--- /dev/null
+
+class ToggleSwitch {
+
+ constructor(elem) {
+ this.elem = elem;
+ this.input = elem.querySelector('input');
+
+ this.elem.onclick = this.onClick.bind(this);
+ }
+
+ onClick(event) {
+ let checked = this.input.value !== 'true';
+ this.input.value = checked ? 'true' : 'false';
+ checked ? this.elem.classList.add('active') : this.elem.classList.remove('active');
+ }
+
+}
+
+module.exports = ToggleSwitch;
\ No newline at end of file
.button.outline {
background-color: transparent;
color: #888;
+ fill: #888;
border: 1px solid #DDD;
&:hover, &:focus, &:active {
box-shadow: none;
&.page {
border-color: $color-page;
color: $color-page;
+ fill: $color-page;
&:hover, &:focus, &:active {
background-color: $color-page;
color: #FFF;
+ fill: #FFF;
}
}
&.chapter {
border-color: $color-chapter;
color: $color-chapter;
+ fill: $color-chapter;
&:hover, &:focus, &:active {
background-color: $color-chapter;
color: #FFF;
+ fill: #FFF;
}
}
&.book {
border-color: $color-book;
color: $color-book;
+ fill: $color-book;
&:hover, &:focus, &:active {
background-color: $color-book;
color: #FFF;
+ fill: #FFF;
}
}
}
font-size: 0.94em;
font-weight: 400;
color: #999;
- text-transform: uppercase;
padding-bottom: 2px;
margin-bottom: 0.2em;
&.inline {
}
}
+.simple-code-input {
+ background-color: #F8F8F8;
+ font-family: monospace;
+ font-size: 12px;
+ min-height: 100px;
+}
+
.form-group {
.text-pos, .text-neg {
padding: $-xs 0;
'app_settings' => 'App Settings',
'app_name' => 'Application name',
'app_name_desc' => 'This name is shown in the header and any emails.',
- 'app_name_header' => 'Show Application name in header?',
+ 'app_name_header' => 'Show application name in header?',
'app_public_viewing' => 'Allow public viewing?',
'app_secure_images' => 'Enable higher security image uploads?',
'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.',
'app_logo_desc' => 'This image should be 43px in height. <br>Large images will be scaled down.',
'app_primary_color' => 'Application primary color',
'app_primary_color_desc' => 'This should be a hex value. <br>Leave empty to reset to the default color.',
- 'app_homepage' => 'Application Homepage',
+ 'app_homepage' => 'Application homepage',
'app_homepage_desc' => 'Select a page to show on the homepage instead of the default view. Page permissions are ignored for selected pages.',
'app_homepage_default' => 'Default homepage view chosen',
'app_disable_comments' => 'Disable comments',
'recent_activity' => 'Activité récente',
'create_now' => 'En créer un maintenant',
'revisions' => 'Révisions',
+ 'meta_revision' => 'Révision #:revisionCount',
'meta_created' => 'Créé :timeLength',
'meta_created_name' => 'Créé :timeLength par :user',
'meta_updated' => 'Mis à jour :timeLength',
* Search
*/
'search_results' => 'Résultats de recherche',
+ 'search_total_results_found' => ':count résultats trouvés|:count résultats trouvés au total',
'search_clear' => 'Réinitialiser la recherche',
'search_no_pages' => 'Aucune page correspondant à cette recherche',
'search_for_term' => 'recherche pour :term',
+ 'search_more' => 'Plus de résultats',
+ 'search_filters' => 'Filtres de recherche',
+ 'search_content_type' => 'Type de contenu',
+ 'search_exact_matches' => 'Correspondances exactes',
+ 'search_tags' => 'Recherche par tags',
+ 'search_viewed_by_me' => 'Vu par moi',
+ 'search_not_viewed_by_me' => 'Non vu par moi',
+ 'search_permissions_set' => 'Ensemble d\'autorisations',
+ 'search_created_by_me' => 'Créé par moi',
+ 'search_updated_by_me' => 'Mis à jour par moi',
+ 'search_updated_before' => 'Mis à jour avant',
+ 'search_updated_after' => 'Mis à jour après',
+ 'search_created_before' => 'Créé avant',
+ 'search_created_after' => 'Créé après',
+ 'search_set_date' => 'Choisir la date',
+ 'search_update' => 'Actualiser la recherche'
/**
* Books
*/
'book' => 'Livre',
'books' => 'Livres',
+ 'x_books' => ':count livre|:count livres',
'books_empty' => 'Aucun livre n\'a été créé',
'books_popular' => 'Livres populaires',
'books_recent' => 'Livres récents',
+ 'books_new' => 'Nouveaux livres',
'books_popular_empty' => 'Les livres les plus populaires apparaîtront ici.',
+ 'books_new_empty' => 'Les livres les plus récents apparaitront ici.',
'books_create' => 'Créer un nouveau livre',
'books_delete' => 'Supprimer un livre',
'books_delete_named' => 'Supprimer le livre :bookName',
*/
'chapter' => 'Chapitre',
'chapters' => 'Chapitres',
+ 'x_chapters' => ':count chapitre|:count chapitres',
'chapters_popular' => 'Chapitres populaires',
'chapters_new' => 'Nouveau chapitre',
'chapters_create' => 'Créer un nouveau chapitre',
'chapters_empty' => 'Il n\'y a pas de page dans ce chapitre actuellement.',
'chapters_permissions_active' => 'Permissions du chapitre activées',
'chapters_permissions_success' => 'Permissions du chapitre mises à jour',
+ 'chapters_search_this' => 'Rechercher dans ce chapitre',
/**
* Pages
'pages_md_preview' => 'Prévisualisation',
'pages_md_insert_image' => 'Insérer une image',
'pages_md_insert_link' => 'Insérer un lien',
+ 'pages_md_insert_drawing' => 'Insérer un dessin',
'pages_not_in_chapter' => 'La page n\'est pas dans un chapitre',
'pages_move' => 'Déplacer la page',
'pages_move_success' => 'Page déplacée à ":parentName"',
'pages_permissions' => 'Permissions de la page',
'pages_permissions_success' => 'Permissions de la page mises à jour',
+ 'pages_revision' => 'Révision',
'pages_revisions' => 'Révisions de la page',
'pages_revisions_named' => 'Révisions pour :pageName',
'pages_revision_named' => 'Révision pour :pageName',
'pages_revisions_created_by' => 'Créé par',
'pages_revisions_date' => 'Date de révision',
+ 'pages_revisions_number' => '#',
'pages_revisions_changelog' => 'Journal des changements',
'pages_revisions_changes' => 'Changements',
'pages_revisions_current' => 'Version courante',
*/
'comment' => 'Commentaire',
'comments' => 'Commentaires',
+ 'comment_add' => 'Ajouter un commentaire',
'comment_placeholder' => 'Entrez vos commentaires ici',
+ 'comment_count' => '{0} Pas de commentaires|{1} 1 Commentaire|[2,*] :count Commentaires',
'comment_save' => 'Enregistrer le commentaire',
+ 'comment_saving' => 'Enregistrement du commentaire...',
+ 'comment_deleting' => 'Suppression du commentaire...',
+ 'comment_new' => 'Nouveau commentaire',
+ 'comment_created' => 'commenté :createDiff',
+ 'comment_updated' => 'Mis à jour :updateDiff par :username',
+ 'comment_deleted_success' => 'Commentaire supprimé',
+ 'comment_created_success' => 'Commentaire ajouté',
+ 'comment_updated_success' => 'Commentaire mis à jour',
+ 'comment_delete_confirm' => 'Etes-vous sûr de vouloir supprimer ce commentaire?',
+ 'comment_in_reply_to' => 'En réponse à :commentId',
];
*/
'actions' => '実行',
'view' => '表示',
+ 'reply' => '返信',
'create' => '作成',
'update' => '更新',
'edit' => '編集',
'profile_not_created_pages' => ':userNameはページを作成していません',
'profile_not_created_chapters' => ':userNameはチャプターを作成していません',
'profile_not_created_books' => ':userNameはブックを作成していません',
+
+ /**
+ * Comments
+ */
+ 'comment' => 'コメント',
+ 'comments' => 'コメント',
+ 'comment_placeholder' => 'コメントを記入してく下さい',
+ 'comment_count' => '{0} コメントはありません|{1} コメント(1)|[2,*] コメント(:count)',
+ 'comment_save' => 'コメントを保存',
+ 'comment_saving' => 'コメントを保存中...',
+ 'comment_deleting' => 'コメントを削除中...',
+ 'comment_new' => '新規コメント作成',
+ 'comment_created' => 'コメントを作成しました :createDiff',
+ 'comment_updated' => ':username により更新しました :updateDiff',
+ 'comment_deleted_success' => 'コメントを削除しました',
+ 'comment_created_success' => 'コメントを追加しました',
+ 'comment_updated_success' => 'コメントを更新しました',
+ 'comment_delete_confirm' => '本当にこのコメントを削除しますか?',
+ 'comment_in_reply_to' => ':commentIdへ返信',
];
<div toggle-switch="{{$name}}" class="toggle-switch @if($value) active @endif">
<input type="hidden" name="{{$name}}" value="{{$value?'true':'false'}}"/>
<div class="switch-handle"></div>
-</div>
-<script>
- (function() {
- var toggle = document.querySelector('[toggle-switch="{{$name}}"]');
- var toggleInput = toggle.querySelector('input');
- toggle.onclick = function(event) {
- var checked = toggleInput.value !== 'true';
- toggleInput.value = checked ? 'true' : 'false';
- checked ? toggle.classList.add('active') : toggle.classList.remove('active');
- };
- })()
-</script>
\ No newline at end of file
+</div>
\ No newline at end of file
<div class="form-group">
<label for="setting-app-custom-head">{{ trans('settings.app_custom_html') }}</label>
<p class="small">{{ trans('settings.app_custom_html_desc') }}</p>
- <textarea name="setting-app-custom-head" id="setting-app-custom-head">{{ setting('app-custom-head', '') }}</textarea>
+ <textarea class="simple-code-input" name="setting-app-custom-head" id="setting-app-custom-head">{{ setting('app-custom-head', '') }}</textarea>
</div>
<div class="form-group text-right">
const dev = process.env.NODE_ENV !== 'production';
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
+const ExtractTextPlugin = require("extract-text-webpack-plugin");
const config = {
target: 'web',
},
{
test: /\.scss$/,
- use: [{
- loader: 'file-loader',
- options: {
- name: '[name].css',
- context: './src/css/',
- outputPath: './',
- publicPath: 'public/'
- }
- }, {
- loader: 'extract-loader', options: {
- publicPath: '',
- }
- }, {
- loader: "css-loader", options: {
- sourceMap: dev
- }
- }, {
- loader: 'postcss-loader',
- options: {
- ident: 'postcss',
- sourceMap: dev,
- plugins: (loader) => [
- require('autoprefixer')(),
- ]
- }
- }, {
- loader: "sass-loader", options: {
- sourceMap: dev
- }
- }]
+ use: ExtractTextPlugin.extract({
+ fallback: "style-loader",
+ use: [{
+ loader: "css-loader", options: {
+ sourceMap: dev
+ }
+ }, {
+ loader: 'postcss-loader',
+ options: {
+ ident: 'postcss',
+ sourceMap: dev,
+ plugins: (loader) => [
+ require('autoprefixer')(),
+ ]
+ }
+ }, {
+ loader: "sass-loader", options: {
+ sourceMap: dev
+ }
+ }]
+ })
}
]
},
- plugins: []
+ plugins: [
+ new ExtractTextPlugin("[name].css"),
+ ]
};
if (dev) {