├── .gitattributes
├── .gitignore
├── .travis.yml
├── LICENSE.md
├── README.md
├── composer.json
├── phpunit.xml
├── public
├── css
│ ├── animate.css
│ ├── bootstrap-rtl.min.css
│ ├── bootstrap.css
│ ├── bootstrap.min.css
│ ├── fa-fonts.css
│ ├── font-icon
│ │ └── icomoon
│ │ │ ├── Read Me.txt
│ │ │ ├── demo-files
│ │ │ ├── demo.css
│ │ │ └── demo.js
│ │ │ ├── fonts
│ │ │ ├── icomoon.eot
│ │ │ ├── icomoon.svg
│ │ │ ├── icomoon.ttf
│ │ │ └── icomoon.woff
│ │ │ ├── selection.json
│ │ │ └── style.css
│ ├── fonts
│ │ ├── Gandom-Bold.eot
│ │ ├── Gandom-Bold.ttf
│ │ ├── Gandom-Bold.woff
│ │ ├── Gandom.eot
│ │ ├── Gandom.ttf
│ │ ├── Gandom.woff
│ │ ├── Gandom.woff2
│ │ ├── Vazir-Bold.eot
│ │ ├── Vazir-Bold.ttf
│ │ ├── Vazir-Bold.woff
│ │ ├── Vazir.eot
│ │ ├── Vazir.ttf
│ │ ├── Vazir.woff
│ │ └── Vazir.woff2
│ ├── global.less
│ ├── less
│ │ ├── .csscomb.json
│ │ ├── .csslintrc
│ │ ├── alerts.less
│ │ ├── badges.less
│ │ ├── bootstrap.less
│ │ ├── breadcrumbs.less
│ │ ├── button-groups.less
│ │ ├── buttons.less
│ │ ├── carousel.less
│ │ ├── close.less
│ │ ├── code.less
│ │ ├── component-animations.less
│ │ ├── dropdowns.less
│ │ ├── font-awesome
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── spinning.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ ├── forms.less
│ │ ├── fuelux
│ │ │ ├── checkbox.less
│ │ │ ├── combobox.less
│ │ │ ├── datepicker.less
│ │ │ ├── fuelux.less
│ │ │ ├── icons.less
│ │ │ ├── infinite-scroll.less
│ │ │ ├── intelligent-dropdown.less
│ │ │ ├── loader.less
│ │ │ ├── misc.less
│ │ │ ├── mixins.less
│ │ │ ├── pillbox.less
│ │ │ ├── placard.less
│ │ │ ├── preloader.less
│ │ │ ├── radio.less
│ │ │ ├── repeater-list.less
│ │ │ ├── repeater-thumbnail.less
│ │ │ ├── repeater.less
│ │ │ ├── scheduler.less
│ │ │ ├── search.less
│ │ │ ├── selectlist.less
│ │ │ ├── spinbox.less
│ │ │ ├── tree.less
│ │ │ ├── variables.less
│ │ │ └── wizard.less
│ │ ├── glyphicons.less
│ │ ├── grid.less
│ │ ├── input-groups.less
│ │ ├── jumbotron.less
│ │ ├── labels.less
│ │ ├── list-group.less
│ │ ├── media.less
│ │ ├── mixins.less
│ │ ├── mixins
│ │ │ ├── alerts.less
│ │ │ ├── background-variant.less
│ │ │ ├── border-radius.less
│ │ │ ├── buttons.less
│ │ │ ├── center-block.less
│ │ │ ├── clearfix.less
│ │ │ ├── forms.less
│ │ │ ├── gradients.less
│ │ │ ├── grid-framework.less
│ │ │ ├── grid.less
│ │ │ ├── hide-text.less
│ │ │ ├── image.less
│ │ │ ├── labels.less
│ │ │ ├── list-group.less
│ │ │ ├── nav-divider.less
│ │ │ ├── nav-vertical-align.less
│ │ │ ├── opacity.less
│ │ │ ├── pagination.less
│ │ │ ├── panels.less
│ │ │ ├── progress-bar.less
│ │ │ ├── reset-filter.less
│ │ │ ├── resize.less
│ │ │ ├── responsive-visibility.less
│ │ │ ├── size.less
│ │ │ ├── tab-focus.less
│ │ │ ├── table-row.less
│ │ │ ├── text-emphasis.less
│ │ │ ├── text-overflow.less
│ │ │ └── vendor-prefixes.less
│ │ ├── modals.less
│ │ ├── navbar.less
│ │ ├── navs.less
│ │ ├── normalize.less
│ │ ├── pager.less
│ │ ├── pagination.less
│ │ ├── panels.less
│ │ ├── popovers.less
│ │ ├── print.less
│ │ ├── progress-bars.less
│ │ ├── responsive-embed.less
│ │ ├── responsive-utilities.less
│ │ ├── scaffolding.less
│ │ ├── tables.less
│ │ ├── theme.less
│ │ ├── thumbnails.less
│ │ ├── tooltip.less
│ │ ├── type.less
│ │ ├── utilities.less
│ │ ├── variables.less
│ │ └── wells.less
│ ├── login.less
│ ├── plugins
│ │ ├── dataTables.bootstrap.css
│ │ ├── metisMenu
│ │ │ ├── metisMenu.css
│ │ │ └── metisMenu.min.css
│ │ ├── morris.css
│ │ ├── social-buttons.css
│ │ └── timeline.css
│ ├── rapyd-styles.css
│ ├── rtl.css
│ ├── sb-admin-2-rtl.css
│ ├── sb-admin-2.css
│ ├── styles-rtl.css
│ ├── styles.css
│ ├── styles.less
│ └── variables.less
├── favicon.ico
├── font-awesome-4.1.0
│ ├── css
│ │ ├── font-awesome.css
│ │ └── font-awesome.min.css
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.ttf
│ │ └── fontawesome-webfont.woff
│ ├── less
│ │ ├── bordered-pulled.less
│ │ ├── core.less
│ │ ├── fixed-width.less
│ │ ├── font-awesome.less
│ │ ├── icons.less
│ │ ├── larger.less
│ │ ├── list.less
│ │ ├── mixins.less
│ │ ├── path.less
│ │ ├── rotated-flipped.less
│ │ ├── spinning.less
│ │ ├── stacked.less
│ │ └── variables.less
│ └── scss
│ │ ├── _bordered-pulled.scss
│ │ ├── _core.scss
│ │ ├── _fixed-width.scss
│ │ ├── _icons.scss
│ │ ├── _larger.scss
│ │ ├── _list.scss
│ │ ├── _mixins.scss
│ │ ├── _path.scss
│ │ ├── _rotated-flipped.scss
│ │ ├── _spinning.scss
│ │ ├── _stacked.scss
│ │ ├── _variables.scss
│ │ └── font-awesome.scss
├── font-icon
│ ├── icomoon.zip
│ └── icomoon
│ │ ├── Read Me.txt
│ │ ├── demo-files
│ │ ├── demo.css
│ │ └── demo.js
│ │ ├── demo.html
│ │ ├── fonts
│ │ ├── icomoon.eot
│ │ ├── icomoon.svg
│ │ ├── icomoon.ttf
│ │ └── icomoon.woff
│ │ ├── selection.json
│ │ └── style.css
├── fonts
│ ├── FontAwesome.otf
│ ├── fontawesome-webfont.eot
│ ├── fontawesome-webfont.svg
│ ├── fontawesome-webfont.ttf
│ ├── fontawesome-webfont.woff
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ └── glyphicons-halflings-regular.woff
├── img
│ ├── Dashboard_full.png
│ ├── all_categories.png
│ ├── all_categories_left.png
│ ├── bg-login.jpg
│ ├── categories_all.png
│ ├── dashboard.png
│ ├── edit.png
│ ├── edit_category.png
│ ├── editpages.png
│ ├── loading.png
│ ├── login.png
│ ├── logo.png
│ ├── pages.png
│ ├── serverfire-panel-crud-edit.jpg
│ ├── serverfire-panel-crud.jpg
│ ├── serverfire-panel-dashboard.jpg
│ └── serverfire-panel-login.jpg
├── js
│ ├── bootstrap.js
│ ├── bootstrap.min.js
│ ├── jquery-1.11.0.js
│ ├── plugins
│ │ ├── dataTables
│ │ │ ├── dataTables.bootstrap.js
│ │ │ └── jquery.dataTables.js
│ │ ├── flot
│ │ │ ├── excanvas.min.js
│ │ │ ├── flot-data.js
│ │ │ ├── jquery.flot.js
│ │ │ ├── jquery.flot.pie.js
│ │ │ ├── jquery.flot.resize.js
│ │ │ └── jquery.flot.tooltip.min.js
│ │ ├── metisMenu
│ │ │ ├── metisMenu.js
│ │ │ └── metisMenu.min.js
│ │ └── morris
│ │ │ ├── morris-data.js
│ │ │ ├── morris.js
│ │ │ ├── morris.min.js
│ │ │ └── raphael.min.js
│ └── sb-admin-2.js
└── less
│ ├── mixins.less
│ ├── sb-admin-2.less
│ └── variables.less
├── src
├── Serverfireteam
│ └── Panel
│ │ ├── Commands
│ │ ├── CreateControllerPanelCommand.php
│ │ ├── CreateModelCommand.php
│ │ ├── CreateModelObserverCommand.php
│ │ ├── CrudCommand.php
│ │ └── PanelCommand.php
│ │ ├── Facades
│ │ └── LinksFacade.php
│ │ ├── LinkRepository.php
│ │ ├── Links
│ │ ├── ConfigLinkProvider.php
│ │ ├── DbLinkProvider.php
│ │ └── LinkProvider.php
│ │ ├── PanelServiceProvider.php
│ │ ├── config
│ │ ├── elfinder.php
│ │ └── panel.php
│ │ ├── libs
│ │ ├── AppHelper.php
│ │ ├── AuthAdmin.php
│ │ ├── AuthMiddleware.php
│ │ ├── PanelElements.php
│ │ ├── PermissionCheckMiddleware.php
│ │ └── dashboard.php
│ │ └── stubs
│ │ ├── model.stub
│ │ ├── observer.stub
│ │ └── panelController.stub
├── controllers
│ ├── AdminController.php
│ ├── AuthController.php
│ ├── CrudController.php
│ ├── ExportImportController.php
│ ├── LinkController.php
│ ├── MainController.php
│ ├── PermissionController.php
│ ├── ProfileController.php
│ ├── RemindersController.php
│ ├── RoleController.php
│ └── UsersController.php
├── database
│ ├── migrations
│ │ ├── 2014_11_16_205658_create_admins_table.php
│ │ ├── 2014_12_02_152920_create_password_reminders_table.php
│ │ ├── 2015_02_20_130902_create_url_table.php
│ │ ├── 2015_03_15_123956_edit_url_table.php
│ │ ├── 2016_02_10_181651_create_roles_tables.php
│ │ ├── 2016_09_20_123956_edit_url_menu_table.php
│ │ ├── 2016_09_20_143956_edit_roles_table.php
│ │ └── 2019_06_04_092344_edit_admin_table.php
│ └── seeds
│ │ ├── AdminSeeder.php
│ │ └── UrlSeeder.php
├── lang
│ ├── en
│ │ └── fields.php
│ ├── es
│ │ └── fields.php
│ ├── fa
│ │ └── fields.php
│ ├── fr
│ │ └── fields.php
│ ├── hy
│ │ └── fields.php
│ ├── it
│ │ └── fields.php
│ ├── nl
│ │ └── fields.php
│ ├── pl
│ │ └── fields.php
│ ├── pt
│ │ └── fields.php
│ ├── ru
│ │ └── fields.php
│ ├── tr
│ │ └── fields.php
│ └── uk
│ │ └── fields.php
├── models
│ ├── Admin.php
│ ├── AdminCanResetPassword.php
│ ├── AdminResetPassword.php
│ ├── EntityExport.php
│ ├── EntityImport.php
│ ├── HasRoles.php
│ ├── Link.php
│ ├── LinkSeeder.php
│ ├── ObservantTrait.php
│ ├── Permission.php
│ └── Role.php
├── routes.php
├── serverfireteam_panel.php
└── views
│ ├── 404.blade.php
│ ├── all.blade.php
│ ├── configError.blade.php
│ ├── createUser.blade.php
│ ├── dashboard.blade.php
│ ├── edit.blade.php
│ ├── editProfile.blade.php
│ ├── login.blade.php
│ ├── mainTemplate.blade.php
│ ├── master.blade.php
│ ├── noController.blade.php
│ ├── passwordChange.blade.php
│ ├── passwordReminder.blade.php
│ ├── passwordReset.blade.php
│ └── resetPassword.blade.php
└── tests
├── AuthAdminTest.php
└── TestCase.php
/.gitattributes:
--------------------------------------------------------------------------------
1 | public/css/styles.css -diff
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor
2 | composer.phar
3 | composer.lock
4 | .DS_Store
5 | /nbproject/private/
6 | /.vs
7 | /.idea
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - 5.4
5 | - 5.5
6 | - 5.6
7 | - hhvm
8 |
9 | before_script:
10 | - travis_retry composer self-update
11 | - travis_retry composer install --prefer-source --no-interaction --dev
12 |
13 | script: phpunit
14 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Alireza Aboutalebi and Siavash Izadkhasti
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "serverfireteam/panel",
3 | "description": "Admin panel for Laravel applications",
4 | "keywords": ["LaravelPanel","Laravel", "Panel", "Crud", "Admin Panel","CMS","administrator", "admin", "backend"],
5 | "license": "MIT",
6 | "authors": [
7 | {
8 | "name": "Alireza Aboutalebi",
9 | "email": "ali@serverfire.net"
10 | }
11 | ],
12 | "require": {
13 | "php": ">=7.1.3",
14 | "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*",
15 | "serverfireteam/rapyd-laravel" : "1.5.*",
16 | "maatwebsite/excel": "~3.1.13",
17 | "barryvdh/laravel-elfinder": "0.4.*"
18 | },
19 | "autoload": {
20 | "classmap": [
21 | "src/controllers",
22 | "src/views",
23 | "src/models",
24 | "src/database/migrations",
25 | "src/Serverfireteam/Panel/Commands"
26 | ],
27 | "psr-0": {
28 | "Serverfireteam\\Panel": "src/"
29 | }
30 | },
31 | "minimum-stability": "dev"
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 | ./tests/
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/public/css/fa-fonts.css:
--------------------------------------------------------------------------------
1 | html {
2 | font-family: 'Vazir', 'Lato', sans-serif;
3 | -webkit-text-size-adjust: 100%;
4 | -ms-text-size-adjust: 100%;
5 | }
6 |
7 | body {
8 | margin: 0;
9 | font-family: 'Vazir', 'Lato', sans-serif;
10 | }
11 |
12 |
13 | a p h1 h2 h3 h4 h5 span body html * {
14 | font-family: 'Gandom', 'Vazir';
15 | }
16 |
--------------------------------------------------------------------------------
/public/css/font-icon/icomoon/Read Me.txt:
--------------------------------------------------------------------------------
1 | Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
2 |
3 | You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
4 |
5 | You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu > Manage Projects) to retrieve your icon selection.
6 |
--------------------------------------------------------------------------------
/public/css/font-icon/icomoon/demo-files/demo.js:
--------------------------------------------------------------------------------
1 | if (!('boxShadow' in document.body.style)) {
2 | document.body.setAttribute('class', 'noBoxShadow');
3 | }
4 |
5 | document.body.addEventListener("click", function(e) {
6 | var target = e.target;
7 | if (target.tagName === "INPUT" &&
8 | target.getAttribute('class').indexOf('liga') === -1) {
9 | target.select();
10 | }
11 | });
12 |
13 | (function() {
14 | var fontSize = document.getElementById('fontSize'),
15 | testDrive = document.getElementById('testDrive'),
16 | testText = document.getElementById('testText');
17 | function updateTest() {
18 | testDrive.innerHTML = testText.value || String.fromCharCode(160);
19 | if (window.icomoonLiga) {
20 | window.icomoonLiga(testDrive);
21 | }
22 | }
23 | function updateSize() {
24 | testDrive.style.fontSize = fontSize.value + 'px';
25 | }
26 | fontSize.addEventListener('change', updateSize, false);
27 | testText.addEventListener('input', updateTest, false);
28 | testText.addEventListener('change', updateTest, false);
29 | updateSize();
30 | }());
31 |
--------------------------------------------------------------------------------
/public/css/fonts/Gandom-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom-Bold.eot
--------------------------------------------------------------------------------
/public/css/fonts/Gandom-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom-Bold.ttf
--------------------------------------------------------------------------------
/public/css/fonts/Gandom-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom-Bold.woff
--------------------------------------------------------------------------------
/public/css/fonts/Gandom.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom.eot
--------------------------------------------------------------------------------
/public/css/fonts/Gandom.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom.ttf
--------------------------------------------------------------------------------
/public/css/fonts/Gandom.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom.woff
--------------------------------------------------------------------------------
/public/css/fonts/Gandom.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Gandom.woff2
--------------------------------------------------------------------------------
/public/css/fonts/Vazir-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir-Bold.eot
--------------------------------------------------------------------------------
/public/css/fonts/Vazir-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir-Bold.ttf
--------------------------------------------------------------------------------
/public/css/fonts/Vazir-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir-Bold.woff
--------------------------------------------------------------------------------
/public/css/fonts/Vazir.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir.eot
--------------------------------------------------------------------------------
/public/css/fonts/Vazir.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir.ttf
--------------------------------------------------------------------------------
/public/css/fonts/Vazir.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir.woff
--------------------------------------------------------------------------------
/public/css/fonts/Vazir.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/css/fonts/Vazir.woff2
--------------------------------------------------------------------------------
/public/css/less/.csslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "adjoining-classes": false,
3 | "box-sizing": false,
4 | "box-model": false,
5 | "compatible-vendor-prefixes": false,
6 | "floats": false,
7 | "font-sizes": false,
8 | "gradients": false,
9 | "important": false,
10 | "known-properties": false,
11 | "outline-none": false,
12 | "qualified-headings": false,
13 | "regex-selectors": false,
14 | "shorthand": false,
15 | "text-indent": false,
16 | "unique-headings": false,
17 | "universal-selector": false,
18 | "unqualified-attributes": false
19 | }
20 |
--------------------------------------------------------------------------------
/public/css/less/alerts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: @alert-padding;
11 | margin-bottom: @line-height-computed;
12 | border: 1px solid transparent;
13 | border-radius: @alert-border-radius;
14 |
15 | // Headings for larger alerts
16 | h4 {
17 | margin-top: 0;
18 | // Specified for the h4 to prevent conflicts of changing @headings-color
19 | color: inherit;
20 | }
21 | // Provide class for links that match alerts
22 | .alert-link {
23 | font-weight: @alert-link-font-weight;
24 | }
25 |
26 | // Improve alignment and spacing of inner content
27 | > p,
28 | > ul {
29 | margin-bottom: 0;
30 | }
31 | > p + p {
32 | margin-top: 5px;
33 | }
34 | }
35 |
36 | // Dismissible alerts
37 | //
38 | // Expand the right padding and account for the close button's positioning.
39 |
40 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
41 | .alert-dismissible {
42 | padding-right: (@alert-padding + 20);
43 |
44 | // Adjust close link position
45 | .close {
46 | position: relative;
47 | top: -2px;
48 | right: -21px;
49 | color: inherit;
50 | }
51 | }
52 |
53 | // Alternate styles
54 | //
55 | // Generate contextual modifier classes for colorizing the alert.
56 |
57 | .alert-success {
58 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
59 | }
60 | .alert-info {
61 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
62 | }
63 | .alert-warning {
64 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
65 | }
66 | .alert-danger {
67 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
68 | }
69 |
--------------------------------------------------------------------------------
/public/css/less/badges.less:
--------------------------------------------------------------------------------
1 | //
2 | // Badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .badge {
8 | display: inline-block;
9 | min-width: 10px;
10 | padding: 3px 7px;
11 | font-size: @font-size-small;
12 | font-weight: @badge-font-weight;
13 | color: @badge-color;
14 | line-height: @badge-line-height;
15 | vertical-align: baseline;
16 | white-space: nowrap;
17 | text-align: center;
18 | background-color: @badge-bg;
19 | border-radius: @badge-border-radius;
20 |
21 | // Empty badges collapse automatically (not available in IE8)
22 | &:empty {
23 | display: none;
24 | }
25 |
26 | // Quick fix for badges in buttons
27 | .btn & {
28 | position: relative;
29 | top: -1px;
30 | }
31 | .btn-xs & {
32 | top: 0;
33 | padding: 1px 5px;
34 | }
35 |
36 | // Hover state, but only for links
37 | a& {
38 | &:hover,
39 | &:focus {
40 | color: @badge-link-hover-color;
41 | text-decoration: none;
42 | cursor: pointer;
43 | }
44 | }
45 |
46 | // Account for badges in navs
47 | a.list-group-item.active > &,
48 | .nav-pills > .active > a > & {
49 | color: @badge-active-color;
50 | background-color: @badge-active-bg;
51 | }
52 | .nav-pills > li > a > & {
53 | margin-left: 3px;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/public/css/less/bootstrap.less:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "variables.less";
3 | @import "mixins.less";
4 |
5 | // Reset and dependencies
6 | @import "normalize.less";
7 | @import "print.less";
8 | @import "glyphicons.less";
9 |
10 | // Core CSS
11 | @import "scaffolding.less";
12 | @import "type.less";
13 | @import "code.less";
14 | @import "grid.less";
15 | @import "tables.less";
16 | @import "forms.less";
17 | @import "buttons.less";
18 |
19 | // Components
20 | @import "component-animations.less";
21 | @import "dropdowns.less";
22 | @import "button-groups.less";
23 | @import "input-groups.less";
24 | @import "navs.less";
25 | @import "navbar.less";
26 | @import "breadcrumbs.less";
27 | @import "pagination.less";
28 | @import "pager.less";
29 | @import "labels.less";
30 | @import "badges.less";
31 | @import "jumbotron.less";
32 | @import "thumbnails.less";
33 | @import "alerts.less";
34 | @import "progress-bars.less";
35 | @import "media.less";
36 | @import "list-group.less";
37 | @import "panels.less";
38 | @import "responsive-embed.less";
39 | @import "wells.less";
40 | @import "close.less";
41 |
42 | // Components w/ JavaScript
43 | @import "modals.less";
44 | @import "tooltip.less";
45 | @import "popovers.less";
46 | @import "carousel.less";
47 |
48 | // Utility classes
49 | @import "utilities.less";
50 | @import "responsive-utilities.less";
51 |
--------------------------------------------------------------------------------
/public/css/less/breadcrumbs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Breadcrumbs
3 | // --------------------------------------------------
4 |
5 |
6 | .breadcrumb {
7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
8 | margin-bottom: @line-height-computed;
9 | list-style: none;
10 | background-color: @breadcrumb-bg;
11 | border-radius: @border-radius-base;
12 |
13 | > li {
14 | display: inline-block;
15 |
16 | + li:before {
17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18 | padding: 0 5px;
19 | color: @breadcrumb-color;
20 | }
21 | }
22 |
23 | > .active {
24 | color: @breadcrumb-active-color;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/public/css/less/close.less:
--------------------------------------------------------------------------------
1 | //
2 | // Close icons
3 | // --------------------------------------------------
4 |
5 |
6 | .close {
7 | float: right;
8 | font-size: (@font-size-base * 1.5);
9 | font-weight: @close-font-weight;
10 | line-height: 1;
11 | color: @close-color;
12 | text-shadow: @close-text-shadow;
13 | .opacity(.2);
14 |
15 | &:hover,
16 | &:focus {
17 | color: @close-color;
18 | text-decoration: none;
19 | cursor: pointer;
20 | .opacity(.5);
21 | }
22 |
23 | // Additional properties for button version
24 | // iOS requires the button element instead of an anchor tag.
25 | // If you want the anchor version, it requires `href="#"`.
26 | button& {
27 | padding: 0;
28 | cursor: pointer;
29 | background: transparent;
30 | border: 0;
31 | -webkit-appearance: none;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/public/css/less/code.less:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and block)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | kbd,
9 | pre,
10 | samp {
11 | font-family: @font-family-monospace;
12 | }
13 |
14 | // Inline code
15 | code {
16 | padding: 2px 4px;
17 | font-size: 90%;
18 | color: @code-color;
19 | background-color: @code-bg;
20 | border-radius: @border-radius-base;
21 | }
22 |
23 | // User input typically entered via keyboard
24 | kbd {
25 | padding: 2px 4px;
26 | font-size: 90%;
27 | color: @kbd-color;
28 | background-color: @kbd-bg;
29 | border-radius: @border-radius-small;
30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
31 |
32 | kbd {
33 | padding: 0;
34 | font-size: 100%;
35 | box-shadow: none;
36 | }
37 | }
38 |
39 | // Blocks of code
40 | pre {
41 | display: block;
42 | padding: ((@line-height-computed - 1) / 2);
43 | margin: 0 0 (@line-height-computed / 2);
44 | font-size: (@font-size-base - 1); // 14px to 13px
45 | line-height: @line-height-base;
46 | word-break: break-all;
47 | word-wrap: break-word;
48 | color: @pre-color;
49 | background-color: @pre-bg;
50 | border: 1px solid @pre-border-color;
51 | border-radius: @border-radius-base;
52 |
53 | // Account for some code outputs that place code tags in pre tags
54 | code {
55 | padding: 0;
56 | font-size: inherit;
57 | color: inherit;
58 | white-space: pre-wrap;
59 | background-color: transparent;
60 | border-radius: 0;
61 | }
62 | }
63 |
64 | // Enable scrollable blocks of code
65 | .pre-scrollable {
66 | max-height: @pre-scrollable-max-height;
67 | overflow-y: scroll;
68 | }
69 |
--------------------------------------------------------------------------------
/public/css/less/component-animations.less:
--------------------------------------------------------------------------------
1 | //
2 | // Component animations
3 | // --------------------------------------------------
4 |
5 | // Heads up!
6 | //
7 | // We don't use the `.opacity()` mixin here since it causes a bug with text
8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
9 |
10 | .fade {
11 | opacity: 0;
12 | .transition(opacity .15s linear);
13 | &.in {
14 | opacity: 1;
15 | }
16 | }
17 |
18 | .collapse {
19 | display: none;
20 |
21 | &.in { display: block; }
22 | tr&.in { display: table-row; }
23 | tbody&.in { display: table-row-group; }
24 | }
25 |
26 | .collapsing {
27 | position: relative;
28 | height: 0;
29 | overflow: hidden;
30 | .transition(height .35s ease);
31 | }
32 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font-family: FontAwesome;
7 | font-style: normal;
8 | font-weight: normal;
9 | line-height: 1;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | }
13 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "spinning";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: -@fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon-rotate(@degrees, @rotation) {
5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
6 | -webkit-transform: rotate(@degrees);
7 | -moz-transform: rotate(@degrees);
8 | -ms-transform: rotate(@degrees);
9 | -o-transform: rotate(@degrees);
10 | transform: rotate(@degrees);
11 | }
12 |
13 | .fa-icon-flip(@horiz, @vert, @rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
15 | -webkit-transform: scale(@horiz, @vert);
16 | -moz-transform: scale(@horiz, @vert);
17 | -ms-transform: scale(@horiz, @vert);
18 | -o-transform: scale(@horiz, @vert);
19 | transform: scale(@horiz, @vert);
20 | }
21 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/spinning.less:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: spin 2s infinite linear;
6 | -moz-animation: spin 2s infinite linear;
7 | -o-animation: spin 2s infinite linear;
8 | animation: spin 2s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @-ms-keyframes spin {
24 | 0% { -ms-transform: rotate(0deg); }
25 | 100% { -ms-transform: rotate(359deg); }
26 | }
27 | @keyframes spin {
28 | 0% { transform: rotate(0deg); }
29 | 100% { transform: rotate(359deg); }
30 | }
31 |
--------------------------------------------------------------------------------
/public/css/less/font-awesome/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/public/css/less/fuelux/checkbox.less:
--------------------------------------------------------------------------------
1 | .checkbox {
2 |
3 | &.highlight {
4 | padding: 4px;
5 |
6 | &.checked {
7 | background: #e9e9e9;
8 | border-radius: @baseBorderRadius;
9 | }
10 | }
11 |
12 | /* for keyboard tabbing */
13 | input[type="checkbox"]:focus + .checkbox-label,
14 | input[type="checkbox"]:hover + .checkbox-label,
15 | .checkbox-label:hover {
16 | color: @grayLight;
17 | }
18 |
19 | }
20 |
21 | .checkbox-custom {
22 | position: relative;
23 |
24 | &:before
25 | {
26 | .iconBaseStyles("Glyphicons Halflings");
27 |
28 | border: 1px solid #adadad;
29 | border-radius: @baseBorderRadius;
30 | color: #fff;
31 | content: " ";
32 | font-size: 9px;
33 | height: 14px;
34 | left: 0px;
35 | padding: 1px 0 0 1px;
36 | position: absolute;
37 | top: 3px;
38 | width: 14px;
39 | }
40 |
41 | &.checked {
42 | &:before {
43 | background: #39b3d7;
44 | border-color: #39b3d7;
45 | content: "\e013";
46 | }
47 | }
48 |
49 | &.disabled {
50 | cursor: not-allowed;
51 |
52 | &:before
53 | {
54 | cursor: not-allowed;
55 | opacity: .5;
56 | }
57 | }
58 |
59 | &.checkbox-inline {
60 | &:before {
61 | left: 0;
62 | top: 3px;
63 | }
64 |
65 | &.highlight {
66 | padding: 4px 4px 4px 24px;
67 |
68 | &:before {
69 | left: 4px;
70 | top: 7px;
71 | }
72 |
73 | &.checked {
74 | background: #e9e9e9;
75 | border-radius: @baseBorderRadius;
76 | }
77 | }
78 | }
79 |
80 | /* for keyboard tabbing */
81 | input[type="checkbox"]:focus + .checkbox-label {
82 | color: @grayLight;
83 | }
84 |
85 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/combobox.less:
--------------------------------------------------------------------------------
1 | .combobox {
2 | &.disabled {
3 | .input-group-btn {
4 | cursor: not-allowed;
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/fuelux.less:
--------------------------------------------------------------------------------
1 | .fuelux {
2 |
3 | // Core variables, mixins, and icons
4 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc
5 | @import "mixins.less";
6 | @import "icons.less";
7 |
8 | // Fuel UX controls
9 | @import "checkbox.less";
10 | @import "combobox.less";
11 | @import "datepicker.less";
12 | @import "infinite-scroll.less";
13 | @import "intelligent-dropdown.less";
14 | @import "loader.less";
15 | @import "misc.less";
16 | @import "pillbox.less";
17 | @import "placard.less";
18 | @import "radio.less";
19 | @import "repeater.less";
20 | @import "repeater-list.less";
21 | @import "repeater-thumbnail.less";
22 | @import "spinbox.less";
23 | @import "scheduler.less";
24 | @import "search.less";
25 | @import "selectlist.less";
26 | @import "tree.less";
27 | @import "wizard.less";
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/public/css/less/fuelux/icons.less:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | @font-face {
4 | font-family: "fuelux";
5 | src:url("@{fueluxFontPath}fuelux.eot");
6 | src:url("@{fueluxFontPath}fuelux.eot?#iefix") format("embedded-opentype"),
7 | url("@{fueluxFontPath}fuelux.woff") format("woff"),
8 | url("@{fueluxFontPath}fuelux.ttf") format("truetype"),
9 | url("@{fueluxFontPath}fuelux.svg#fuelux") format("svg");
10 | font-weight: normal;
11 | font-style: normal;
12 | }
13 |
14 | //This could be an interesting addition...
15 | //[data-icon]:before {
16 | // .iconBaseStyles();
17 | // content: attr(data-icon);
18 | //}
19 |
20 | [class^="fueluxicon-"]:before,
21 | [class*=" fueluxicon-"]:before {
22 | .iconBaseStyles();
23 | }
24 |
25 | .fueluxicon-loader-full:before {
26 | content: "\e000";
27 | }
28 |
29 | .fueluxicon-loader-1:before {
30 | content: "\e001";
31 | }
32 |
33 | .fueluxicon-loader-2:before {
34 | content: "\e002";
35 | }
36 |
37 | .fueluxicon-loader-3:before {
38 | content: "\e003";
39 | }
40 |
41 | .fueluxicon-loader-4:before {
42 | content: "\e004";
43 | }
44 |
45 | .fueluxicon-loader-5:before {
46 | content: "\e005";
47 | }
48 |
49 | .fueluxicon-loader-6:before {
50 | content: "\e006";
51 | }
52 |
53 | .fueluxicon-loader-7:before {
54 | content: "\e007";
55 | }
56 |
57 | .fueluxicon-loader-8:before {
58 | content: "\e008";
59 | }
60 |
61 | //tree
62 |
63 | .fueluxicon-bullet:before {
64 | content: "\e009";
65 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/infinite-scroll.less:
--------------------------------------------------------------------------------
1 | .infinitescroll {
2 | overflow-y: auto;
3 |
4 | .infinitescroll-end {
5 | clear: both;
6 | font-style: italic;
7 | padding: 6px;
8 | text-align: center;
9 | }
10 |
11 | .infinitescroll-load {
12 | clear: both;
13 | padding: 6px;
14 |
15 | button {
16 | padding: 5px 12px;
17 | width: 100%;
18 | }
19 |
20 | .loader {
21 | font-size: 32px;
22 | height: 32px;
23 | margin: 0 auto;
24 | width: 32px;
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/intelligent-dropdown.less:
--------------------------------------------------------------------------------
1 | .dropUp {
2 | -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
3 | -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
4 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
5 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/loader.less:
--------------------------------------------------------------------------------
1 | .loader {
2 | height: 64px;
3 | font-size: 64px;
4 | position: relative;
5 | width: 64px;
6 |
7 | &:after, &:before {
8 | .iconBaseStyles();
9 |
10 | bottom: 0;
11 | display: block;
12 | left: 0;
13 | position: absolute;
14 | right: 0;
15 | top: 0;
16 | }
17 |
18 | &:before {
19 | content: '\e000';
20 | opacity: 0.33;
21 | }
22 |
23 | &.iefix:before{
24 | color: #bcbcbc;
25 | opacity: 1;
26 | }
27 |
28 | &[data-frame="1"]:after {
29 | content: '\e001';
30 | }
31 |
32 | &[data-frame="2"]:after {
33 | content: '\e002';
34 | }
35 |
36 | &[data-frame="3"]:after {
37 | content: '\e003';
38 | }
39 |
40 | &[data-frame="4"]:after {
41 | content: '\e004';
42 | }
43 |
44 | &[data-frame="5"]:after {
45 | content: '\e005';
46 | }
47 |
48 | &[data-frame="6"]:after {
49 | content: '\e006';
50 | }
51 |
52 | &[data-frame="7"]:after {
53 | content: '\e007';
54 | }
55 |
56 | &[data-frame="8"]:after {
57 | content: '\e008';
58 | }
59 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/misc.less:
--------------------------------------------------------------------------------
1 | input, textarea {
2 | &.glass {
3 | background: transparent;
4 | border: 1px solid #fff;
5 | box-shadow: none;
6 |
7 | &:hover {
8 | background: #d9edf7;
9 | border-color: #66afe9;
10 | cursor: pointer;
11 |
12 | &[disabled] {
13 | background: transparent;
14 | border-color: #fff;
15 | cursor: not-allowed;
16 | }
17 | }
18 |
19 | &:focus {
20 | background: #fff;
21 | border-color: #66afe9;
22 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6);
23 | cursor: auto;
24 |
25 | &[disabled] {
26 | background: transparent;
27 | border-color: #fff;
28 | cursor: not-allowed;
29 | }
30 | }
31 |
32 | &[disabled] {
33 | cursor: not-allowed;
34 | }
35 | }
36 | }
37 |
38 | // makes radios and checkboxes that use Bootstrap button plugin accessible (tabbable)
39 | [data-toggle="buttons"] > .btn > input[type="radio"],
40 | [data-toggle="buttons"] > .btn > input[type="checkbox"] {
41 | display:inline;
42 | position:absolute;
43 | left:-9999px;
44 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/mixins.less:
--------------------------------------------------------------------------------
1 | // For clearing floats
2 | .clearfix {
3 | *zoom: 1;
4 | &:before,
5 | &:after {
6 | display: table;
7 | content: "";
8 | // Fixes Opera/contenteditable bug:
9 | // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
10 | line-height: 0;
11 | }
12 | &:after {
13 | clear: both;
14 | }
15 | }
16 |
17 | // Single side border-radius
18 | .border-top-radius(@radius) {
19 | border-top-right-radius: @radius;
20 | border-top-left-radius: @radius;
21 | }
22 | .border-right-radius(@radius) {
23 | border-bottom-right-radius: @radius;
24 | border-top-right-radius: @radius;
25 | }
26 | .border-bottom-radius(@radius) {
27 | border-bottom-right-radius: @radius;
28 | border-bottom-left-radius: @radius;
29 | }
30 | .border-left-radius(@radius) {
31 | border-bottom-left-radius: @radius;
32 | border-top-left-radius: @radius;
33 | }
34 |
35 | // Gradient Bar Colors for buttons and alerts
36 | .gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
37 | color: @textColor;
38 | text-shadow: @textShadow;
39 | #gradient > .vertical(@primaryColor, @secondaryColor);
40 | border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
41 | border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
42 | }
43 |
44 | // Gradients
45 | #gradient {
46 | .vertical(@startColor: #555, @endColor: #333) {
47 | background-color: mix(@startColor, @endColor, 60%);
48 | background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
49 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
50 | background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
51 | background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
52 | background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
53 | background-repeat: repeat-x;
54 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
55 | }
56 | }
57 |
58 | // Icon Base Styles
59 | .iconBaseStyles(@fontFamily: "fuelux"){
60 | font-family: @fontFamily !important;
61 | font-style: normal !important;
62 | font-weight: normal !important;
63 | font-variant: normal !important;
64 | text-transform: none !important;
65 | line-height: 1;
66 | speak: none;
67 | -webkit-font-smoothing: antialiased;
68 | -moz-osx-font-smoothing: grayscale;
69 | }
70 |
71 | // Opacity
72 | .opacity(@opacity) {
73 | opacity: @opacity / 100;
74 | filter: ~"alpha(opacity=@{opacity})";
75 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/placard.less:
--------------------------------------------------------------------------------
1 | .placard {
2 | display: inline-block;
3 | position: relative;
4 |
5 | &[data-ellipsis="true"] {
6 | &.showing {
7 | input.placard-field {
8 | overflow: visible;
9 | text-overflow: clip;
10 | white-space: normal;
11 | }
12 | }
13 |
14 | input.placard-field {
15 | overflow: hidden;
16 | text-overflow: ellipsis;
17 | white-space: nowrap;
18 | }
19 |
20 | textarea.placard-field {
21 | &[readonly] {
22 | overflow: hidden;
23 | }
24 | }
25 | }
26 |
27 | &.showing {
28 | .placard-footer,
29 | .placard-header,
30 | .placard-popup {
31 | display: block;
32 | z-index: 1;
33 | }
34 |
35 | input.placard-field, textarea.placard-field {
36 | background: #fff;
37 | border: 1px solid #CCCCCC;
38 | box-shadow: none;
39 | position: relative;
40 | z-index: 1;
41 | }
42 | }
43 |
44 | input.placard-field, textarea.placard-field {
45 | resize: none;
46 |
47 | &[readonly] {
48 | background: #fff;
49 | cursor: auto;
50 |
51 | &.glass {
52 | background: none;
53 |
54 | &:hover {
55 | background: #d9edf7;
56 | cursor: pointer;
57 | }
58 | }
59 | }
60 |
61 | &:focus {
62 | border: 1px solid #CCCCCC;
63 | box-shadow: none;
64 | }
65 | }
66 |
67 | &-cancel {
68 | font-size: 12px;
69 | margin-right: 4px;
70 | vertical-align: middle;
71 | }
72 |
73 | &-footer,
74 | &-header {
75 | display: none;
76 | left: 0;
77 | line-height: 1;
78 | position: absolute;
79 | right: 0;
80 | }
81 |
82 | &-footer {
83 | padding: 4px 0 8px 0;
84 | text-align: right;
85 | top: 100%;
86 | }
87 |
88 | &-header {
89 | bottom: 100%;
90 | padding: 8px 0 4px 0;
91 |
92 | h1, h2, h3, h4, h5, h6 {
93 | margin: 0;
94 | }
95 | }
96 |
97 | &-popup {
98 | background: #d9edf7;
99 | background-clip: padding-box;
100 | border: 1px solid #ccc;
101 | border-radius: 4px;
102 | bottom: -8px;
103 | box-shadow: 0 0 0 1px #fff inset;
104 | display: none;
105 | left: -8px;
106 | position: absolute;
107 | right: -8px;
108 | top: -8px;
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/public/css/less/fuelux/radio.less:
--------------------------------------------------------------------------------
1 | .radio {
2 | &.highlight {
3 | padding: 4px;
4 |
5 | &.checked {
6 | background: #e9e9e9;
7 | border-radius: @baseBorderRadius;
8 | }
9 | }
10 |
11 | /* for keyboard tabbing */
12 | input[type="radio"]:focus + .radio-label,
13 | input[type="radio"]:hover + .radio-label,
14 | .radio-label:hover {
15 | color: @grayLight;
16 | }
17 |
18 | }
19 |
20 | .radio-custom {
21 | position: relative;
22 |
23 | &:after {
24 | background: transparent;
25 | border-radius: 6px;
26 | content: " ";
27 | height: 6px;
28 | left: 4px;
29 | position: absolute;
30 | top: 7px;
31 | width: 6px;
32 | }
33 |
34 | &:before
35 | {
36 | border: 1px solid #adadad;
37 | border-radius: 14px;
38 | content: " ";
39 | height: 14px;
40 | left: 0px;
41 | position: absolute;
42 | top: 3px;
43 | width: 14px;
44 | }
45 |
46 | &.checked {
47 | &:after {
48 | background: #fff;
49 | }
50 |
51 | &:before {
52 | background: #39b3d7;
53 | border-color: #39b3d7;
54 | }
55 | }
56 |
57 | &.disabled {
58 | cursor: not-allowed;
59 |
60 | &:after {
61 | cursor: not-allowed;
62 | }
63 |
64 | &:before {
65 | cursor: not-allowed;
66 | opacity: .5;
67 | }
68 | }
69 |
70 | &.radio-inline {
71 | &:after {
72 | left: 4px;
73 | top: 7px;
74 | }
75 |
76 | &:before {
77 | left: 0;
78 | top: 3px;
79 | }
80 |
81 | &.highlight {
82 | padding: 4px 4px 4px 24px;
83 |
84 | &:after {
85 | left: 8px;
86 | top: 11px;
87 | }
88 |
89 | &:before {
90 | left: 4px;
91 | top: 7px;
92 | }
93 |
94 | &.checked {
95 | background: #e9e9e9;
96 | border-radius: @baseBorderRadius;
97 | }
98 | }
99 | }
100 |
101 | /* for keyboard tabbing */
102 | input[type="radio"]:focus + .radio-label {
103 | color: @grayLight;
104 | }
105 |
106 | }
107 |
--------------------------------------------------------------------------------
/public/css/less/fuelux/repeater-list.less:
--------------------------------------------------------------------------------
1 | .repeater[data-currentview="list"] {
2 | .repeater-loader {
3 | margin-top: -12px;
4 |
5 | &.noHeader {
6 | margin-top: -32px;
7 | }
8 | }
9 | }
10 |
11 | .repeater-list {
12 | &-check {
13 | display: inline-block;
14 | height: 0;
15 | line-height: 0;
16 | position: relative;
17 | vertical-align: top;
18 | width: 0;
19 |
20 | span.glyphicon {
21 | left: -22px;
22 | position: absolute;
23 | top: 2px;
24 | }
25 | }
26 |
27 | &-header,
28 | &-items {
29 | margin-bottom: 0;
30 | width: 100%;
31 |
32 | td {
33 | border-bottom: 1px solid #ddd;
34 | border-left: 1px solid #ddd;
35 | border-top: none;
36 |
37 | &:first-child {
38 | border-left: none;
39 | }
40 | }
41 | }
42 |
43 | &-header {
44 | background: #F9F9F9;
45 |
46 | td {
47 | font-weight: bold;
48 |
49 | &.sortable {
50 | &:hover,
51 | &.sorted
52 | {
53 | background: #F1F1F1;
54 | cursor: pointer;
55 | #gradient > .vertical(@startColor: #F9F9F9; @endColor: #E5E5E5);
56 | }
57 |
58 | &.sorted {
59 | span.glyphicon {
60 | display: block;
61 | }
62 | }
63 | }
64 |
65 | span.glyphicon {
66 | display: none;
67 | float: right;
68 | margin-top: 2px;
69 | }
70 | }
71 | }
72 |
73 | &-items {
74 | tr {
75 | &.empty {
76 | td {
77 | border-bottom: none;
78 | font-style: italic;
79 | padding: 20px;
80 | text-align: center;
81 | width: 100%;
82 | }
83 | }
84 |
85 | &.selectable{
86 | &:hover {
87 | background: #d9edf7;
88 | cursor: pointer;
89 | }
90 | }
91 |
92 | &.selected {
93 | background: #66AFE9;
94 | color: #fff;
95 |
96 | &:hover {
97 | background: #428bca;
98 | }
99 |
100 | td:first-child {
101 | padding-left: 30px;
102 | }
103 | }
104 | }
105 | }
106 |
107 | &-wrapper {
108 | overflow-y: auto;
109 | }
110 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/repeater-thumbnail.less:
--------------------------------------------------------------------------------
1 | .repeater-thumbnail {
2 | border: 1px solid #ddd;
3 | color: #666;
4 | float: left;
5 | font-size: 12px;
6 | height: 130px;
7 | line-height: 36px;
8 | margin: 10px 12px;
9 | text-align: center;
10 | width: 100px;
11 |
12 | -webkit-box-shadow: 0 1px 4px 0 #ddd;
13 | box-shadow: 0 1px 4px 0 #ddd;
14 |
15 | img {
16 | display: block;
17 | margin-top: 12px;
18 | }
19 |
20 | &-cont {
21 | height: 100%;
22 | overflow-y: auto;
23 | padding: 10px;
24 | width: 100%;
25 |
26 | div.empty {
27 | font-style: italic;
28 | padding: 20px 10px;
29 | text-align: center;
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/repeater.less:
--------------------------------------------------------------------------------
1 | .repeater {
2 | border: 1px solid #ddd;
3 | border-radius: 4px;
4 |
5 | &-canvas {
6 | &.scrolling{
7 | bottom: 0;
8 | left: 0;
9 | overflow-y: auto;
10 | position: absolute;
11 | right: 0;
12 | top: 0;
13 | }
14 | }
15 |
16 | &-header,
17 | &-footer
18 | {
19 | background: #f9f9f9;
20 | min-height: 50px;
21 | padding: 8px;
22 | .clearfix;
23 |
24 | &-left {
25 | float: left;
26 | }
27 |
28 | &-right {
29 | float: right;
30 | }
31 |
32 | @media (max-width: 625px) {
33 | &-left,
34 | &-right {
35 | float: none;
36 | .clearfix;
37 | }
38 |
39 | &-left {
40 | margin-bottom: 8px;
41 | }
42 | }
43 | }
44 |
45 | &-header {
46 | border-bottom: 1px solid #ddd;
47 | .border-top-radius(4px);
48 | }
49 |
50 | &-footer {
51 | border-top: 1px solid #ddd;
52 | .border-bottom-radius(4px);
53 | }
54 |
55 | &-loader {
56 | display: none;
57 | left: 50%;
58 | position: absolute;
59 | margin: -32px 0 0 -32px;
60 | top: 50%;
61 | }
62 |
63 | &-viewport {
64 | min-height: 80px;
65 | position: relative;
66 | }
67 |
68 | &-pagination {
69 |
70 | label {
71 | font-weight: normal;
72 | }
73 |
74 | .repeater-primaryPaging {
75 | display: none;
76 | vertical-align: middle;
77 | width: 116px;
78 |
79 | &.active {
80 | display: inline-block;
81 | }
82 |
83 | ul.dropdown-menu {
84 | min-width: 116px;
85 | }
86 | }
87 |
88 | .repeater-secondaryPaging {
89 | display: none;
90 | width: 82px;
91 |
92 | &.active {
93 | display: inline-block;
94 | }
95 | }
96 | }
97 |
98 | &-search {
99 | float: left;
100 | width: 200px;
101 | }
102 |
103 | &-title {
104 | display: block;
105 | float: left;
106 | line-height: 34px;
107 | margin-right: 10px;
108 | }
109 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/search.less:
--------------------------------------------------------------------------------
1 | .search {
2 | &.disabled {
3 | .input-group-btn {
4 | cursor: not-allowed;
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/selectlist.less:
--------------------------------------------------------------------------------
1 | .selectlist {
2 |
3 | &.disabled {
4 | cursor: not-allowed;
5 | }
6 |
7 | &-sizer {
8 | display: inline-block;
9 | position: absolute;
10 | visibility: hidden;
11 | top: 0;
12 | }
13 |
14 | .selected-label {
15 | overflow: hidden; // helps with text flow on small screens
16 | min-width: 2em;
17 | }
18 |
19 | .btn.dropdown-toggle {
20 | white-space: normal;
21 |
22 | .selected-label {
23 | padding-right: 10px;
24 | text-align: left;
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/public/css/less/fuelux/spinbox.less:
--------------------------------------------------------------------------------
1 | .spinbox {
2 | display: inline-block;
3 | position: relative;
4 |
5 | &.digits-3 {
6 | width: 60px;
7 | }
8 |
9 | &.disabled {
10 | .spinbox-buttons {
11 | cursor: not-allowed;
12 | }
13 | }
14 |
15 | .spinbox-input {
16 | float: left;
17 | padding-bottom: 3px; /* Magic number */
18 | padding: 0px 25px 0px 7px;
19 | }
20 |
21 | .btn {
22 | position: relative;
23 | width: 20px;
24 | height: 13px;
25 | padding-top: 0;
26 | padding-right: 9px;
27 | padding-left: 9px;
28 |
29 | &.disabled {
30 | cursor: not-allowed;
31 | }
32 | }
33 |
34 | .spinbox-buttons {
35 | position: absolute;
36 | height: 28px;
37 | width: 20px;
38 | right: 2px;
39 | }
40 |
41 | .spinbox-up {
42 | padding: 0 0 14px 1px;
43 | top: 2px;
44 |
45 | .glyphicon-chevron-up {
46 | position:relative;
47 | top: 0px;
48 | }
49 | }
50 |
51 | // fix radius from BS btn-group
52 | .btn-group > .btn.spinbox-up {
53 | border-top-right-radius: 4px;
54 | }
55 |
56 | .spinbox-down {
57 | padding: 0 0 8px 1px;
58 | top: 2px;
59 | height: 15px;
60 | border-bottom-left-radius: 4px;
61 |
62 | .glyphicon-chevron-down {
63 | position: relative;
64 | left: -1px;
65 | top: 0px;
66 | }
67 | }
68 | }
--------------------------------------------------------------------------------
/public/css/less/grid.less:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Container widths
7 | //
8 | // Set the container width, and override it for fixed navbars in media queries.
9 |
10 | .container {
11 | .container-fixed();
12 |
13 | @media (min-width: @screen-sm-min) {
14 | width: @container-sm;
15 | }
16 | @media (min-width: @screen-md-min) {
17 | width: @container-md;
18 | }
19 | @media (min-width: @screen-lg-min) {
20 | width: @container-lg;
21 | }
22 | }
23 |
24 |
25 | // Fluid container
26 | //
27 | // Utilizes the mixin meant for fixed width containers, but without any defined
28 | // width for fluid, full width layouts.
29 |
30 | .container-fluid {
31 | .container-fixed();
32 | }
33 |
34 |
35 | // Row
36 | //
37 | // Rows contain and clear the floats of your columns.
38 |
39 | .row {
40 | .make-row();
41 | }
42 |
43 |
44 | // Columns
45 | //
46 | // Common styles for small and large grid columns
47 |
48 | .make-grid-columns();
49 |
50 |
51 | // Extra small grid
52 | //
53 | // Columns, offsets, pushes, and pulls for extra small devices like
54 | // smartphones.
55 |
56 | .make-grid(xs);
57 |
58 |
59 | // Small grid
60 | //
61 | // Columns, offsets, pushes, and pulls for the small device range, from phones
62 | // to tablets.
63 |
64 | @media (min-width: @screen-sm-min) {
65 | .make-grid(sm);
66 | }
67 |
68 |
69 | // Medium grid
70 | //
71 | // Columns, offsets, pushes, and pulls for the desktop device range.
72 |
73 | @media (min-width: @screen-md-min) {
74 | .make-grid(md);
75 | }
76 |
77 |
78 | // Large grid
79 | //
80 | // Columns, offsets, pushes, and pulls for the large desktop device range.
81 |
82 | @media (min-width: @screen-lg-min) {
83 | .make-grid(lg);
84 | }
85 |
--------------------------------------------------------------------------------
/public/css/less/jumbotron.less:
--------------------------------------------------------------------------------
1 | //
2 | // Jumbotron
3 | // --------------------------------------------------
4 |
5 |
6 | .jumbotron {
7 | padding: @jumbotron-padding;
8 | margin-bottom: @jumbotron-padding;
9 | color: @jumbotron-color;
10 | background-color: @jumbotron-bg;
11 |
12 | h1,
13 | .h1 {
14 | color: @jumbotron-heading-color;
15 | }
16 | p {
17 | margin-bottom: (@jumbotron-padding / 2);
18 | font-size: @jumbotron-font-size;
19 | font-weight: 200;
20 | }
21 |
22 | > hr {
23 | border-top-color: darken(@jumbotron-bg, 10%);
24 | }
25 |
26 | .container & {
27 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
28 | }
29 |
30 | .container {
31 | max-width: 100%;
32 | }
33 |
34 | @media screen and (min-width: @screen-sm-min) {
35 | padding-top: (@jumbotron-padding * 1.6);
36 | padding-bottom: (@jumbotron-padding * 1.6);
37 |
38 | .container & {
39 | padding-left: (@jumbotron-padding * 2);
40 | padding-right: (@jumbotron-padding * 2);
41 | }
42 |
43 | h1,
44 | .h1 {
45 | font-size: (@font-size-base * 4.5);
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/public/css/less/labels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Labels
3 | // --------------------------------------------------
4 |
5 | .label {
6 | display: inline;
7 | padding: .2em .6em .3em;
8 | font-size: 75%;
9 | font-weight: bold;
10 | line-height: 1;
11 | color: @label-color;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | border-radius: .25em;
16 |
17 | // Add hover effects, but only for links
18 | a& {
19 | &:hover,
20 | &:focus {
21 | color: @label-link-hover-color;
22 | text-decoration: none;
23 | cursor: pointer;
24 | }
25 | }
26 |
27 | // Empty labels collapse automatically (not available in IE8)
28 | &:empty {
29 | display: none;
30 | }
31 |
32 | // Quick fix for labels in buttons
33 | .btn & {
34 | position: relative;
35 | top: -1px;
36 | }
37 | }
38 |
39 | // Colors
40 | // Contextual variations (linked labels get darker on :hover)
41 |
42 | .label-default {
43 | .label-variant(@label-default-bg);
44 | }
45 |
46 | .label-primary {
47 | .label-variant(@label-primary-bg);
48 | }
49 |
50 | .label-success {
51 | .label-variant(@label-success-bg);
52 | }
53 |
54 | .label-info {
55 | .label-variant(@label-info-bg);
56 | }
57 |
58 | .label-warning {
59 | .label-variant(@label-warning-bg);
60 | }
61 |
62 | .label-danger {
63 | .label-variant(@label-danger-bg);
64 | }
65 |
--------------------------------------------------------------------------------
/public/css/less/media.less:
--------------------------------------------------------------------------------
1 | // Media objects
2 | // Source: http://stubbornella.org/content/?p=497
3 | // --------------------------------------------------
4 |
5 |
6 | // Common styles
7 | // -------------------------
8 |
9 | // Clear the floats
10 | .media,
11 | .media-body {
12 | overflow: hidden;
13 | zoom: 1;
14 | }
15 |
16 | // Proper spacing between instances of .media
17 | .media,
18 | .media .media {
19 | margin-top: 15px;
20 | }
21 | .media:first-child {
22 | margin-top: 0;
23 | }
24 |
25 | // For images and videos, set to block
26 | .media-object {
27 | display: block;
28 | }
29 |
30 | // Reset margins on headings for tighter default spacing
31 | .media-heading {
32 | margin: 0 0 5px;
33 | }
34 |
35 |
36 | // Media image alignment
37 | // -------------------------
38 |
39 | .media {
40 | > .pull-left {
41 | margin-right: 10px;
42 | }
43 | > .pull-right {
44 | margin-left: 10px;
45 | }
46 | }
47 |
48 |
49 | // Media list variation
50 | // -------------------------
51 |
52 | // Undo default ul/ol styles
53 | .media-list {
54 | padding-left: 0;
55 | list-style: none;
56 | }
57 |
--------------------------------------------------------------------------------
/public/css/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------------------------------
3 |
4 | // Utilities
5 | @import "mixins/hide-text.less";
6 | @import "mixins/opacity.less";
7 | @import "mixins/image.less";
8 | @import "mixins/labels.less";
9 | @import "mixins/reset-filter.less";
10 | @import "mixins/resize.less";
11 | @import "mixins/responsive-visibility.less";
12 | @import "mixins/size.less";
13 | @import "mixins/tab-focus.less";
14 | @import "mixins/text-emphasis.less";
15 | @import "mixins/text-overflow.less";
16 | @import "mixins/vendor-prefixes.less";
17 |
18 | // Components
19 | @import "mixins/alerts.less";
20 | @import "mixins/buttons.less";
21 | @import "mixins/panels.less";
22 | @import "mixins/pagination.less";
23 | @import "mixins/list-group.less";
24 | @import "mixins/nav-divider.less";
25 | @import "mixins/forms.less";
26 | @import "mixins/progress-bar.less";
27 | @import "mixins/table-row.less";
28 |
29 | // Skins
30 | @import "mixins/background-variant.less";
31 | @import "mixins/border-radius.less";
32 | @import "mixins/gradients.less";
33 |
34 | // Layout
35 | @import "mixins/clearfix.less";
36 | @import "mixins/center-block.less";
37 | @import "mixins/nav-vertical-align.less";
38 | @import "mixins/grid-framework.less";
39 | @import "mixins/grid.less";
40 |
--------------------------------------------------------------------------------
/public/css/less/mixins/alerts.less:
--------------------------------------------------------------------------------
1 | // Alerts
2 |
3 | .alert-variant(@background; @border; @text-color) {
4 | background-color: @background;
5 | border-color: @border;
6 | color: @text-color;
7 |
8 | hr {
9 | border-top-color: darken(@border, 5%);
10 | }
11 | .alert-link {
12 | color: darken(@text-color, 10%);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/public/css/less/mixins/background-variant.less:
--------------------------------------------------------------------------------
1 | // Contextual backgrounds
2 |
3 | .bg-variant(@color) {
4 | background-color: @color;
5 | a&:hover {
6 | background-color: darken(@color, 10%);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/public/css/less/mixins/border-radius.less:
--------------------------------------------------------------------------------
1 | // Single side border-radius
2 |
3 | .border-top-radius(@radius) {
4 | border-top-right-radius: @radius;
5 | border-top-left-radius: @radius;
6 | }
7 | .border-right-radius(@radius) {
8 | border-bottom-right-radius: @radius;
9 | border-top-right-radius: @radius;
10 | }
11 | .border-bottom-radius(@radius) {
12 | border-bottom-right-radius: @radius;
13 | border-bottom-left-radius: @radius;
14 | }
15 | .border-left-radius(@radius) {
16 | border-bottom-left-radius: @radius;
17 | border-top-left-radius: @radius;
18 | }
19 |
--------------------------------------------------------------------------------
/public/css/less/mixins/buttons.less:
--------------------------------------------------------------------------------
1 | // Button variants
2 | //
3 | // Easily pump out default styles, as well as :hover, :focus, :active,
4 | // and disabled options for all buttons
5 |
6 | .button-variant(@color; @background; @border) {
7 | color: @color;
8 | background-color: @background;
9 | border-color: @border;
10 |
11 | &:hover,
12 | &:focus,
13 | &:active,
14 | &.active,
15 | .open > .dropdown-toggle& {
16 | color: @color;
17 | background-color: darken(@background, 10%);
18 | border-color: darken(@border, 12%);
19 | }
20 | &:active,
21 | &.active,
22 | .open > .dropdown-toggle& {
23 | background-image: none;
24 | }
25 | &.disabled,
26 | &[disabled],
27 | fieldset[disabled] & {
28 | &,
29 | &:hover,
30 | &:focus,
31 | &:active,
32 | &.active {
33 | background-color: @background;
34 | border-color: @border;
35 | }
36 | }
37 |
38 | .badge {
39 | color: @background;
40 | background-color: @color;
41 | }
42 | }
43 |
44 | // Button sizes
45 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
46 | padding: @padding-vertical @padding-horizontal;
47 | font-size: @font-size;
48 | line-height: @line-height;
49 | border-radius: @border-radius;
50 | }
51 |
--------------------------------------------------------------------------------
/public/css/less/mixins/center-block.less:
--------------------------------------------------------------------------------
1 | // Center-align a block level element
2 |
3 | .center-block() {
4 | display: block;
5 | margin-left: auto;
6 | margin-right: auto;
7 | }
8 |
--------------------------------------------------------------------------------
/public/css/less/mixins/clearfix.less:
--------------------------------------------------------------------------------
1 | // Clearfix
2 | //
3 | // For modern browsers
4 | // 1. The space content is one way to avoid an Opera bug when the
5 | // contenteditable attribute is included anywhere else in the document.
6 | // Otherwise it causes space to appear at the top and bottom of elements
7 | // that are clearfixed.
8 | // 2. The use of `table` rather than `block` is only necessary if using
9 | // `:before` to contain the top-margins of child elements.
10 | //
11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/
12 |
13 | .clearfix() {
14 | &:before,
15 | &:after {
16 | content: " "; // 1
17 | display: table; // 2
18 | }
19 | &:after {
20 | clear: both;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/public/css/less/mixins/hide-text.less:
--------------------------------------------------------------------------------
1 | // CSS image replacement
2 | //
3 | // Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
4 | // mixins being reused as classes with the same name, this doesn't hold up. As
5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
6 | //
7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
8 |
9 | // Deprecated as of v3.0.1 (will be removed in v4)
10 | .hide-text() {
11 | font: ~"0/0" a;
12 | color: transparent;
13 | text-shadow: none;
14 | background-color: transparent;
15 | border: 0;
16 | }
17 |
18 | // New mixin to use as of v3.0.1
19 | .text-hide() {
20 | .hide-text();
21 | }
22 |
--------------------------------------------------------------------------------
/public/css/less/mixins/image.less:
--------------------------------------------------------------------------------
1 | // Image Mixins
2 | // - Responsive image
3 | // - Retina image
4 |
5 |
6 | // Responsive image
7 | //
8 | // Keep images from scaling beyond the width of their parents.
9 | .img-responsive(@display: block) {
10 | display: @display;
11 | width: 100% \9; // Force IE10 and below to size SVG images correctly
12 | max-width: 100%; // Part 1: Set a maximum relative to the parent
13 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
14 | }
15 |
16 |
17 | // Retina image
18 | //
19 | // Short retina mixin for setting background-image and -size. Note that the
20 | // spelling of `min--moz-device-pixel-ratio` is intentional.
21 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
22 | background-image: url("@{file-1x}");
23 |
24 | @media
25 | only screen and (-webkit-min-device-pixel-ratio: 2),
26 | only screen and ( min--moz-device-pixel-ratio: 2),
27 | only screen and ( -o-min-device-pixel-ratio: 2/1),
28 | only screen and ( min-device-pixel-ratio: 2),
29 | only screen and ( min-resolution: 192dpi),
30 | only screen and ( min-resolution: 2dppx) {
31 | background-image: url("@{file-2x}");
32 | background-size: @width-1x @height-1x;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/public/css/less/mixins/labels.less:
--------------------------------------------------------------------------------
1 | // Labels
2 |
3 | .label-variant(@color) {
4 | background-color: @color;
5 |
6 | &[href] {
7 | &:hover,
8 | &:focus {
9 | background-color: darken(@color, 10%);
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/public/css/less/mixins/list-group.less:
--------------------------------------------------------------------------------
1 | // List Groups
2 |
3 | .list-group-item-variant(@state; @background; @color) {
4 | .list-group-item-@{state} {
5 | color: @color;
6 | background-color: @background;
7 |
8 | a& {
9 | color: @color;
10 |
11 | .list-group-item-heading {
12 | color: inherit;
13 | }
14 |
15 | &:hover,
16 | &:focus {
17 | color: @color;
18 | background-color: darken(@background, 5%);
19 | }
20 | &.active,
21 | &.active:hover,
22 | &.active:focus {
23 | color: #fff;
24 | background-color: @color;
25 | border-color: @color;
26 | }
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/public/css/less/mixins/nav-divider.less:
--------------------------------------------------------------------------------
1 | // Horizontal dividers
2 | //
3 | // Dividers (basically an hr) within dropdowns and nav lists
4 |
5 | .nav-divider(@color: #e5e5e5) {
6 | height: 1px;
7 | margin: ((@line-height-computed / 2) - 1) 0;
8 | overflow: hidden;
9 | background-color: @color;
10 | }
11 |
--------------------------------------------------------------------------------
/public/css/less/mixins/nav-vertical-align.less:
--------------------------------------------------------------------------------
1 | // Navbar vertical align
2 | //
3 | // Vertically center elements in the navbar.
4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
5 |
6 | .navbar-vertical-align(@element-height) {
7 | margin-top: ((@navbar-height - @element-height) / 2);
8 | margin-bottom: ((@navbar-height - @element-height) / 2);
9 | }
10 |
--------------------------------------------------------------------------------
/public/css/less/mixins/opacity.less:
--------------------------------------------------------------------------------
1 | // Opacity
2 |
3 | .opacity(@opacity) {
4 | opacity: @opacity;
5 | // IE8 filter
6 | @opacity-ie: (@opacity * 100);
7 | filter: ~"alpha(opacity=@{opacity-ie})";
8 | }
9 |
--------------------------------------------------------------------------------
/public/css/less/mixins/pagination.less:
--------------------------------------------------------------------------------
1 | // Pagination
2 |
3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {
4 | > li {
5 | > a,
6 | > span {
7 | padding: @padding-vertical @padding-horizontal;
8 | font-size: @font-size;
9 | }
10 | &:first-child {
11 | > a,
12 | > span {
13 | .border-left-radius(@border-radius);
14 | }
15 | }
16 | &:last-child {
17 | > a,
18 | > span {
19 | .border-right-radius(@border-radius);
20 | }
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/public/css/less/mixins/panels.less:
--------------------------------------------------------------------------------
1 | // Panels
2 |
3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
4 | border-color: @border;
5 |
6 | & > .panel-heading {
7 | color: @heading-text-color;
8 | background-color: @heading-bg-color;
9 | border-color: @heading-border;
10 |
11 | + .panel-collapse > .panel-body {
12 | border-top-color: @border;
13 | }
14 | .badge {
15 | color: @heading-bg-color;
16 | background-color: @heading-text-color;
17 | }
18 | }
19 | & > .panel-footer {
20 | + .panel-collapse > .panel-body {
21 | border-bottom-color: @border;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/public/css/less/mixins/progress-bar.less:
--------------------------------------------------------------------------------
1 | // Progress bars
2 |
3 | .progress-bar-variant(@color) {
4 | background-color: @color;
5 |
6 | // Deprecated parent class requirement as of v3.2.0
7 | .progress-striped & {
8 | #gradient > .striped();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/public/css/less/mixins/reset-filter.less:
--------------------------------------------------------------------------------
1 | // Reset filters for IE
2 | //
3 | // When you need to remove a gradient background, do not forget to use this to reset
4 | // the IE filter for IE9 and below.
5 |
6 | .reset-filter() {
7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
8 | }
9 |
--------------------------------------------------------------------------------
/public/css/less/mixins/resize.less:
--------------------------------------------------------------------------------
1 | // Resize anything
2 |
3 | .resizable(@direction) {
4 | resize: @direction; // Options: horizontal, vertical, both
5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
6 | }
7 |
--------------------------------------------------------------------------------
/public/css/less/mixins/responsive-visibility.less:
--------------------------------------------------------------------------------
1 | // Responsive utilities
2 |
3 | //
4 | // More easily include all the states for responsive-utilities.less.
5 | .responsive-visibility() {
6 | display: block !important;
7 | table& { display: table; }
8 | tr& { display: table-row !important; }
9 | th&,
10 | td& { display: table-cell !important; }
11 | }
12 |
13 | .responsive-invisibility() {
14 | display: none !important;
15 | }
16 |
--------------------------------------------------------------------------------
/public/css/less/mixins/size.less:
--------------------------------------------------------------------------------
1 | // Sizing shortcuts
2 |
3 | .size(@width; @height) {
4 | width: @width;
5 | height: @height;
6 | }
7 |
8 | .square(@size) {
9 | .size(@size; @size);
10 | }
11 |
--------------------------------------------------------------------------------
/public/css/less/mixins/tab-focus.less:
--------------------------------------------------------------------------------
1 | // WebKit-style focus
2 |
3 | .tab-focus() {
4 | // Default
5 | outline: thin dotted;
6 | // WebKit
7 | outline: 5px auto -webkit-focus-ring-color;
8 | outline-offset: -2px;
9 | }
10 |
--------------------------------------------------------------------------------
/public/css/less/mixins/table-row.less:
--------------------------------------------------------------------------------
1 | // Tables
2 |
3 | .table-row-variant(@state; @background) {
4 | // Exact selectors below required to override `.table-striped` and prevent
5 | // inheritance to nested tables.
6 | .table > thead > tr,
7 | .table > tbody > tr,
8 | .table > tfoot > tr {
9 | > td.@{state},
10 | > th.@{state},
11 | &.@{state} > td,
12 | &.@{state} > th {
13 | background-color: @background;
14 | }
15 | }
16 |
17 | // Hover states for `.table-hover`
18 | // Note: this is not available for cells or rows within `thead` or `tfoot`.
19 | .table-hover > tbody > tr {
20 | > td.@{state}:hover,
21 | > th.@{state}:hover,
22 | &.@{state}:hover > td,
23 | &:hover > .@{state},
24 | &.@{state}:hover > th {
25 | background-color: darken(@background, 5%);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/public/css/less/mixins/text-emphasis.less:
--------------------------------------------------------------------------------
1 | // Typography
2 |
3 | .text-emphasis-variant(@color) {
4 | color: @color;
5 | a&:hover {
6 | color: darken(@color, 10%);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/public/css/less/mixins/text-overflow.less:
--------------------------------------------------------------------------------
1 | // Text overflow
2 | // Requires inline-block or block for proper styling
3 |
4 | .text-overflow() {
5 | overflow: hidden;
6 | text-overflow: ellipsis;
7 | white-space: nowrap;
8 | }
9 |
--------------------------------------------------------------------------------
/public/css/less/pager.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pager pagination
3 | // --------------------------------------------------
4 |
5 |
6 | .pager {
7 | padding-left: 0;
8 | margin: @line-height-computed 0;
9 | list-style: none;
10 | text-align: center;
11 | &:extend(.clearfix all);
12 | li {
13 | display: inline;
14 | > a,
15 | > span {
16 | display: inline-block;
17 | padding: 5px 14px;
18 | background-color: @pager-bg;
19 | border: 1px solid @pager-border;
20 | border-radius: @pager-border-radius;
21 | }
22 |
23 | > a:hover,
24 | > a:focus {
25 | text-decoration: none;
26 | background-color: @pager-hover-bg;
27 | }
28 | }
29 |
30 | .next {
31 | > a,
32 | > span {
33 | float: right;
34 | }
35 | }
36 |
37 | .previous {
38 | > a,
39 | > span {
40 | float: left;
41 | }
42 | }
43 |
44 | .disabled {
45 | > a,
46 | > a:hover,
47 | > a:focus,
48 | > span {
49 | color: @pager-disabled-color;
50 | background-color: @pager-bg;
51 | cursor: not-allowed;
52 | }
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/public/css/less/pagination.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pagination (multiple pages)
3 | // --------------------------------------------------
4 | .pagination {
5 | display: inline-block;
6 | padding-left: 0;
7 | margin: @line-height-computed 0;
8 | border-radius: @border-radius-base;
9 |
10 | > li {
11 | display: inline; // Remove list-style and block-level defaults
12 | > a,
13 | > span {
14 | position: relative;
15 | float: left; // Collapse white-space
16 | padding: @padding-base-vertical @padding-base-horizontal;
17 | line-height: @line-height-base;
18 | text-decoration: none;
19 | color: @pagination-color;
20 | background-color: @pagination-bg;
21 | border: 1px solid @pagination-border;
22 | margin-left: -1px;
23 | }
24 | &:first-child {
25 | > a,
26 | > span {
27 | margin-left: 0;
28 | .border-left-radius(@border-radius-base);
29 | }
30 | }
31 | &:last-child {
32 | > a,
33 | > span {
34 | .border-right-radius(@border-radius-base);
35 | }
36 | }
37 | }
38 |
39 | > li > a,
40 | > li > span {
41 | &:hover,
42 | &:focus {
43 | color: @pagination-hover-color;
44 | background-color: @pagination-hover-bg;
45 | border-color: @pagination-hover-border;
46 | }
47 | }
48 |
49 | > .active > a,
50 | > .active > span {
51 | &,
52 | &:hover,
53 | &:focus {
54 | z-index: 2;
55 | color: @pagination-active-color;
56 | background-color: @pagination-active-bg;
57 | border-color: @pagination-active-border;
58 | cursor: default;
59 | }
60 | }
61 |
62 | > .disabled {
63 | > span,
64 | > span:hover,
65 | > span:focus,
66 | > a,
67 | > a:hover,
68 | > a:focus {
69 | color: @pagination-disabled-color;
70 | background-color: @pagination-disabled-bg;
71 | border-color: @pagination-disabled-border;
72 | cursor: not-allowed;
73 | }
74 | }
75 | }
76 |
77 | // Sizing
78 | // --------------------------------------------------
79 |
80 | // Large
81 | .pagination-lg {
82 | .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);
83 | }
84 |
85 | // Small
86 | .pagination-sm {
87 | .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);
88 | }
89 |
--------------------------------------------------------------------------------
/public/css/less/print.less:
--------------------------------------------------------------------------------
1 | //
2 | // Basic print styles
3 | // --------------------------------------------------
4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
5 |
6 | @media print {
7 |
8 | * {
9 | text-shadow: none !important;
10 | color: #000 !important; // Black prints faster: h5bp.com/s
11 | background: transparent !important;
12 | box-shadow: none !important;
13 | }
14 |
15 | a,
16 | a:visited {
17 | text-decoration: underline;
18 | }
19 |
20 | a[href]:after {
21 | content: " (" attr(href) ")";
22 | }
23 |
24 | abbr[title]:after {
25 | content: " (" attr(title) ")";
26 | }
27 |
28 | // Don't show links for images, or javascript/internal links
29 | a[href^="javascript:"]:after,
30 | a[href^="#"]:after {
31 | content: "";
32 | }
33 |
34 | pre,
35 | blockquote {
36 | border: 1px solid #999;
37 | page-break-inside: avoid;
38 | }
39 |
40 | thead {
41 | display: table-header-group; // h5bp.com/t
42 | }
43 |
44 | tr,
45 | img {
46 | page-break-inside: avoid;
47 | }
48 |
49 | img {
50 | max-width: 100% !important;
51 | }
52 |
53 | p,
54 | h2,
55 | h3 {
56 | orphans: 3;
57 | widows: 3;
58 | }
59 |
60 | h2,
61 | h3 {
62 | page-break-after: avoid;
63 | }
64 |
65 | // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
66 | // Once fixed, we can just straight up remove this.
67 | select {
68 | background: #fff !important;
69 | }
70 |
71 | // Bootstrap components
72 | .navbar {
73 | display: none;
74 | }
75 | .table {
76 | td,
77 | th {
78 | background-color: #fff !important;
79 | }
80 | }
81 | .btn,
82 | .dropup > .btn {
83 | > .caret {
84 | border-top-color: #000 !important;
85 | }
86 | }
87 | .label {
88 | border: 1px solid #000;
89 | }
90 |
91 | .table {
92 | border-collapse: collapse !important;
93 | }
94 | .table-bordered {
95 | th,
96 | td {
97 | border: 1px solid #ddd !important;
98 | }
99 | }
100 |
101 | }
102 |
--------------------------------------------------------------------------------
/public/css/less/progress-bars.less:
--------------------------------------------------------------------------------
1 | //
2 | // Progress bars
3 | // --------------------------------------------------
4 |
5 |
6 | // Bar animations
7 | // -------------------------
8 |
9 | // WebKit
10 | @-webkit-keyframes progress-bar-stripes {
11 | from { background-position: 40px 0; }
12 | to { background-position: 0 0; }
13 | }
14 |
15 | // Spec and IE10+
16 | @keyframes progress-bar-stripes {
17 | from { background-position: 40px 0; }
18 | to { background-position: 0 0; }
19 | }
20 |
21 |
22 |
23 | // Bar itself
24 | // -------------------------
25 |
26 | // Outer container
27 | .progress {
28 | overflow: hidden;
29 | height: @line-height-computed;
30 | margin-bottom: @line-height-computed;
31 | background-color: @progress-bg;
32 | border-radius: @border-radius-base;
33 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
34 | }
35 |
36 | // Bar of progress
37 | .progress-bar {
38 | float: left;
39 | width: 0%;
40 | height: 100%;
41 | font-size: @font-size-small;
42 | line-height: @line-height-computed;
43 | color: @progress-bar-color;
44 | text-align: center;
45 | background-color: @progress-bar-bg;
46 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
47 | .transition(width .6s ease);
48 | }
49 |
50 | // Striped bars
51 | //
52 | // `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the
53 | // `.progress-bar-striped` class, which you just add to an existing
54 | // `.progress-bar`.
55 | .progress-striped .progress-bar,
56 | .progress-bar-striped {
57 | #gradient > .striped();
58 | background-size: 40px 40px;
59 | }
60 |
61 | // Call animation for the active one
62 | //
63 | // `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the
64 | // `.progress-bar.active` approach.
65 | .progress.active .progress-bar,
66 | .progress-bar.active {
67 | .animation(progress-bar-stripes 2s linear infinite);
68 | }
69 |
70 | // Account for lower percentages
71 | .progress-bar {
72 | &[aria-valuenow="1"],
73 | &[aria-valuenow="2"] {
74 | min-width: 30px;
75 | }
76 |
77 | &[aria-valuenow="0"] {
78 | color: @gray-light;
79 | min-width: 30px;
80 | background-color: transparent;
81 | background-image: none;
82 | box-shadow: none;
83 | }
84 | }
85 |
86 |
87 |
88 | // Variations
89 | // -------------------------
90 |
91 | .progress-bar-success {
92 | .progress-bar-variant(@progress-bar-success-bg);
93 | }
94 |
95 | .progress-bar-info {
96 | .progress-bar-variant(@progress-bar-info-bg);
97 | }
98 |
99 | .progress-bar-warning {
100 | .progress-bar-variant(@progress-bar-warning-bg);
101 | }
102 |
103 | .progress-bar-danger {
104 | .progress-bar-variant(@progress-bar-danger-bg);
105 | }
106 |
--------------------------------------------------------------------------------
/public/css/less/responsive-embed.less:
--------------------------------------------------------------------------------
1 | // Embeds responsive
2 | //
3 | // Credit: Nicolas Gallagher and SUIT CSS.
4 |
5 | .embed-responsive {
6 | position: relative;
7 | display: block;
8 | height: 0;
9 | padding: 0;
10 | overflow: hidden;
11 |
12 | .embed-responsive-item,
13 | iframe,
14 | embed,
15 | object {
16 | position: absolute;
17 | top: 0;
18 | left: 0;
19 | bottom: 0;
20 | height: 100%;
21 | width: 100%;
22 | border: 0;
23 | }
24 |
25 | // Modifier class for 16:9 aspect ratio
26 | &.embed-responsive-16by9 {
27 | padding-bottom: 56.25%;
28 | }
29 |
30 | // Modifier class for 4:3 aspect ratio
31 | &.embed-responsive-4by3 {
32 | padding-bottom: 75%;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/public/css/less/thumbnails.less:
--------------------------------------------------------------------------------
1 | //
2 | // Thumbnails
3 | // --------------------------------------------------
4 |
5 |
6 | // Mixin and adjust the regular image class
7 | .thumbnail {
8 | display: block;
9 | padding: @thumbnail-padding;
10 | margin-bottom: @line-height-computed;
11 | line-height: @line-height-base;
12 | background-color: @thumbnail-bg;
13 | border: 1px solid @thumbnail-border;
14 | border-radius: @thumbnail-border-radius;
15 | .transition(all .2s ease-in-out);
16 |
17 | > img,
18 | a > img {
19 | &:extend(.img-responsive);
20 | margin-left: auto;
21 | margin-right: auto;
22 | }
23 |
24 | // Add a hover state for linked versions only
25 | a&:hover,
26 | a&:focus,
27 | a&.active {
28 | border-color: @link-color;
29 | }
30 |
31 | // Image captions
32 | .caption {
33 | padding: @thumbnail-caption-padding;
34 | color: @thumbnail-caption-color;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/public/css/less/utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // Floats
7 | // -------------------------
8 |
9 | .clearfix {
10 | .clearfix();
11 | }
12 | .center-block {
13 | .center-block();
14 | }
15 | .pull-right {
16 | float: right !important;
17 | }
18 | .pull-left {
19 | float: left !important;
20 | }
21 |
22 |
23 | // Toggling content
24 | // -------------------------
25 |
26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
27 | .hide {
28 | display: none !important;
29 | }
30 | .show {
31 | display: block !important;
32 | }
33 | .invisible {
34 | visibility: hidden;
35 | }
36 | .text-hide {
37 | .text-hide();
38 | }
39 |
40 |
41 | // Hide from screenreaders and browsers
42 | //
43 | // Credit: HTML5 Boilerplate
44 |
45 | .hidden {
46 | display: none !important;
47 | visibility: hidden !important;
48 | }
49 |
50 |
51 | // For Affix plugin
52 | // -------------------------
53 |
54 | .affix {
55 | position: fixed;
56 | .translate3d(0, 0, 0);
57 | }
58 |
--------------------------------------------------------------------------------
/public/css/less/wells.less:
--------------------------------------------------------------------------------
1 | //
2 | // Wells
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .well {
8 | min-height: 20px;
9 | padding: 19px;
10 | margin-bottom: 20px;
11 | background-color: @well-bg;
12 | border: 1px solid @well-border;
13 | border-radius: @border-radius-base;
14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15 | blockquote {
16 | border-color: #ddd;
17 | border-color: rgba(0,0,0,.15);
18 | }
19 | }
20 |
21 | // Sizes
22 | .well-lg {
23 | padding: 24px;
24 | border-radius: @border-radius-large;
25 | }
26 | .well-sm {
27 | padding: 9px;
28 | border-radius: @border-radius-small;
29 | }
30 |
--------------------------------------------------------------------------------
/public/css/login.less:
--------------------------------------------------------------------------------
1 | /*
2 | To change this license header, choose License Headers in Project Properties.
3 | To change this template file, choose Tools | Templates
4 | and open the template in the editor.
5 | */
6 | /*
7 | Created on : Nov 11, 2014, 4:27:44 PM
8 | Author : alireza
9 | */
10 |
11 | .login{
12 | background-image: url('../img/bg-login.jpg');
13 | background-repeat: no-repeat;
14 | background-size: cover;
15 | }
16 | .mes-box
17 | {
18 | margin-top:30%;
19 |
20 | .error-box{
21 | span{
22 | position: absolute;
23 | top:5px;
24 | left:4px;
25 | font-size:22px;
26 | }
27 | position: relative;
28 | background-color: #e74c3c;
29 | color: #fff;
30 | border:2px solid #e74c3c;
31 | padding: 7px;
32 | padding-left:36px;
33 | box-shadow:0px 1px 1px rgba(0,0,0,.4);
34 | border-radius: 5px;
35 | }
36 | .info-box{
37 | span{
38 | position: absolute;
39 | top:5px;
40 | left:4px;
41 | font-size:22px;
42 | }
43 | position: relative;
44 | background-color: #3498db;
45 | color: #fff;
46 | border:2px solid #3498db;
47 | padding: 7px;
48 | padding-left:36px;
49 | box-shadow:0px 1px 1px rgba(0,0,0,.4);
50 | border-radius: 5px;
51 | }
52 | }
--------------------------------------------------------------------------------
/public/css/plugins/metisMenu/metisMenu.css:
--------------------------------------------------------------------------------
1 | /*
2 | * metismenu - v1.0.3
3 | * Easy menu jQuery plugin for Twitter Bootstrap 3
4 | * https://github.com/onokumus/metisMenu
5 | *
6 | * Made by Osman Nuri Okumuş
7 | * Under MIT License
8 | */
9 | .arrow {
10 | float: right;
11 | }
12 |
13 | .glyphicon.arrow:before {
14 | content: "\e079";
15 | }
16 |
17 | .active > a > .glyphicon.arrow:before {
18 | content: "\e114";
19 | }
20 |
21 |
22 | /*
23 | * Require Font-Awesome
24 | * http://fortawesome.github.io/Font-Awesome/
25 | */
26 |
27 |
28 | .fa.arrow:before {
29 | content: "\f104";
30 | }
31 |
32 | .active > a > .fa.arrow:before {
33 | content: "\f107";
34 | }
35 |
36 | .plus-times {
37 | float: right;
38 | }
39 |
40 | .fa.plus-times:before {
41 | content: "\f067";
42 | }
43 |
44 | .active > a > .fa.plus-times {
45 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
46 | -webkit-transform: rotate(45deg);
47 | -moz-transform: rotate(45deg);
48 | -ms-transform: rotate(45deg);
49 | -o-transform: rotate(45deg);
50 | transform: rotate(45deg);
51 | }
52 |
53 | .plus-minus {
54 | float: right;
55 | }
56 |
57 | .fa.plus-minus:before {
58 | content: "\f067";
59 | }
60 |
61 | .active > a > .fa.plus-minus:before {
62 | content: "\f068";
63 | }
--------------------------------------------------------------------------------
/public/css/plugins/metisMenu/metisMenu.min.css:
--------------------------------------------------------------------------------
1 | .arrow{float:right}.glyphicon.arrow:before{content:"\e079"}.active>a>.glyphicon.arrow:before{content:"\e114"}.fa.arrow:before{content:"\f104"}.active>a>.fa.arrow:before{content:"\f107"}.plus-times{float:right}.fa.plus-times:before{content:"\f067"}.active>a>.fa.plus-times{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.plus-minus{float:right}.fa.plus-minus:before{content:"\f067"}.active>a>.fa.plus-minus:before{content:"\f068"}
--------------------------------------------------------------------------------
/public/css/plugins/morris.css:
--------------------------------------------------------------------------------
1 | .morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}
3 |
--------------------------------------------------------------------------------
/public/css/rtl.css:
--------------------------------------------------------------------------------
1 | .powered-by {
2 | left: 20px;
3 | right: inherit;
4 | }
5 |
6 | .sidebar ul li.active{
7 | border-left: none;
8 | border-right: 7px solid #f26101;
9 | }
10 |
11 | .top-icon-bar {
12 | text-align: left;
13 | }
14 |
15 | .sidebar ul li {
16 | text-align: right;
17 | }
18 |
19 | #side-menu .badge {
20 | left: 0px !IMPORTANT;
21 | }
22 |
23 |
24 | @media (min-width: 768px) {
25 | .sidebar {
26 | right: 0px;
27 | }
28 | #page-wrapper {
29 | margin: 0px 210px 0px 0px;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/public/css/styles-rtl.css:
--------------------------------------------------------------------------------
1 | .top-icon-bar {
2 | text-align: left;
3 | }
4 |
5 | .dashboard .icon-bg {
6 | right: 5px;
7 | left: 0;
8 | }
9 |
10 | .top-icon-bar a.main-link .caret {
11 | margin-left: 0;
12 | margin-right: 25px;
13 | }
14 |
15 | .sidebar ul li.active {
16 | border-left: none;
17 | border-right: 7px solid #f26101;
18 | }
19 |
20 | #side-menu .badge {
21 | float: left;
22 | right: inherit;
23 | left: 0;
24 | }
25 |
26 | a.btn.btn-default.main-link span.icon {
27 | padding-left: 0;
28 | padding-right: 15px;
29 | float: left;
30 | }
31 |
32 | .top-icon-bar .dropdown-menu > li > a span {
33 | padding: 0 5px;
34 | }
35 |
36 | .top-icon-bar .icon {
37 | float: right;
38 | }
39 |
40 | a.btn.btn-default.main-link {
41 | text-align: right;
42 | }
43 |
44 | .page-header {
45 | margin: 34px 0 30px;
46 | }
--------------------------------------------------------------------------------
/public/css/styles.less:
--------------------------------------------------------------------------------
1 | /*
2 | To change this license header, choose License Headers in Project Properties.
3 | To change this template file, choose Tools | Templates
4 | and open the template in the editor.
5 | */
6 | /*
7 | Created on : Nov 11, 2014, 4:27:28 PM
8 | Author : alireza
9 | */
10 |
11 | @import "/less/bootstrap.less";
12 | @import "/less/font-awesome/font-awesome.less";
13 | @import "plugins/metisMenu/metisMenu.min.css";
14 | @import "plugins/timeline.css";
15 | @import "plugins/morris.css";
16 | @import "animate.css";
17 | @import "login.less";
18 | @import "rapyd-styles.css";
19 | @import "sb-admin-2.css";
20 |
21 | @import "global.less";
22 |
23 | @import "variables.less";
24 |
--------------------------------------------------------------------------------
/public/css/variables.less:
--------------------------------------------------------------------------------
1 | /*
2 | To change this license header, choose License Headers in Project Properties.
3 | To change this template file, choose Tools | Templates
4 | and open the template in the editor.
5 | */
6 | /*
7 | Created on : Nov 18, 2014, 3:42:08 PM
8 | Author : alireza
9 | */
10 |
11 |
12 | /*color.adobe.com*/
13 | /*https://color.adobe.com/Colors-of-Rio-color-theme-1785951/edit/?copy=true&base=3&rule=Custom&selected=0&name=Copy%20of%20Colors%20of%20Rio&mode=rgb&rgbvalues=0.91,0.228392,0.146314,1,0.913725,0.639216,0.596078,0.8,0.588235,0,0.2694440000000001,0.39,0.098039,0.105882,0.156863&swatchOrder=0,1,2,3,4*/
14 |
15 | @color-1 : #191B28; // blue
16 | @color-2 : #004563; // light blue
17 | @color-3 : #98CC96; // ultra light blue
18 | @color-4 : #FFE9A3; // close white
19 | @color-5 : #E83A25; // orange
20 |
21 |
22 | @font-family-base: @font-family-sans-serif;
23 | @font-size-base: 12px;
24 | @body-bg: #304269;
25 | @navbar-height: 0px;
26 |
27 |
28 | @brand-success: #59CC8C;
29 | @btn-success-color: #fff;
30 | @btn-success-bg: #59CC8C;
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/favicon.ico
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-awesome-4.1.0/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-awesome-4.1.0/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-awesome-4.1.0/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-awesome-4.1.0/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font-family: FontAwesome;
7 | font-style: normal;
8 | font-weight: normal;
9 | line-height: 1;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | }
13 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "spinning.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: -@fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon-rotate(@degrees, @rotation) {
5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
6 | -webkit-transform: rotate(@degrees);
7 | -moz-transform: rotate(@degrees);
8 | -ms-transform: rotate(@degrees);
9 | -o-transform: rotate(@degrees);
10 | transform: rotate(@degrees);
11 | }
12 |
13 | .fa-icon-flip(@horiz, @vert, @rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
15 | -webkit-transform: scale(@horiz, @vert);
16 | -moz-transform: scale(@horiz, @vert);
17 | -ms-transform: scale(@horiz, @vert);
18 | -o-transform: scale(@horiz, @vert);
19 | transform: scale(@horiz, @vert);
20 | }
21 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: ~"url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}')";
7 | src: ~"url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype')",
8 | ~"url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff')",
9 | ~"url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype')",
10 | ~"url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg')";
11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/spinning.less:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: spin 2s infinite linear;
6 | -moz-animation: spin 2s infinite linear;
7 | -o-animation: spin 2s infinite linear;
8 | animation: spin 2s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @keyframes spin {
24 | 0% {
25 | -webkit-transform: rotate(0deg);
26 | transform: rotate(0deg);
27 | }
28 | 100% {
29 | -webkit-transform: rotate(359deg);
30 | transform: rotate(359deg);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font-family: FontAwesome;
7 | font-style: normal;
8 | font-weight: normal;
9 | line-height: 1;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | }
13 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon-rotate($degrees, $rotation) {
5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
6 | -webkit-transform: rotate($degrees);
7 | -moz-transform: rotate($degrees);
8 | -ms-transform: rotate($degrees);
9 | -o-transform: rotate($degrees);
10 | transform: rotate($degrees);
11 | }
12 |
13 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
15 | -webkit-transform: scale($horiz, $vert);
16 | -moz-transform: scale($horiz, $vert);
17 | -ms-transform: scale($horiz, $vert);
18 | -o-transform: scale($horiz, $vert);
19 | transform: scale($horiz, $vert);
20 | }
21 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_spinning.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: spin 2s infinite linear;
6 | -moz-animation: spin 2s infinite linear;
7 | -o-animation: spin 2s infinite linear;
8 | animation: spin 2s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @keyframes spin {
24 | 0% {
25 | -webkit-transform: rotate(0deg);
26 | transform: rotate(0deg);
27 | }
28 | 100% {
29 | -webkit-transform: rotate(359deg);
30 | transform: rotate(359deg);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/public/font-awesome-4.1.0/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "spinning";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/public/font-icon/icomoon.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-icon/icomoon.zip
--------------------------------------------------------------------------------
/public/font-icon/icomoon/Read Me.txt:
--------------------------------------------------------------------------------
1 | Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
2 |
3 | You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
4 |
5 | You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu > Manage Projects) to retrieve your icon selection.
6 |
--------------------------------------------------------------------------------
/public/font-icon/icomoon/demo-files/demo.js:
--------------------------------------------------------------------------------
1 | if (!('boxShadow' in document.body.style)) {
2 | document.body.setAttribute('class', 'noBoxShadow');
3 | }
4 |
5 | document.body.addEventListener("click", function(e) {
6 | var target = e.target;
7 | if (target.tagName === "INPUT" &&
8 | target.getAttribute('class').indexOf('liga') === -1) {
9 | target.select();
10 | }
11 | });
12 |
13 | (function() {
14 | var fontSize = document.getElementById('fontSize'),
15 | testDrive = document.getElementById('testDrive'),
16 | testText = document.getElementById('testText');
17 | function updateTest() {
18 | testDrive.innerHTML = testText.value || String.fromCharCode(160);
19 | if (window.icomoonLiga) {
20 | window.icomoonLiga(testDrive);
21 | }
22 | }
23 | function updateSize() {
24 | testDrive.style.fontSize = fontSize.value + 'px';
25 | }
26 | fontSize.addEventListener('change', updateSize, false);
27 | testText.addEventListener('input', updateTest, false);
28 | testText.addEventListener('change', updateTest, false);
29 | updateSize();
30 | }());
31 |
--------------------------------------------------------------------------------
/public/font-icon/icomoon/fonts/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-icon/icomoon/fonts/icomoon.eot
--------------------------------------------------------------------------------
/public/font-icon/icomoon/fonts/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-icon/icomoon/fonts/icomoon.ttf
--------------------------------------------------------------------------------
/public/font-icon/icomoon/fonts/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/font-icon/icomoon/fonts/icomoon.woff
--------------------------------------------------------------------------------
/public/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/public/img/Dashboard_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/Dashboard_full.png
--------------------------------------------------------------------------------
/public/img/all_categories.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/all_categories.png
--------------------------------------------------------------------------------
/public/img/all_categories_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/all_categories_left.png
--------------------------------------------------------------------------------
/public/img/bg-login.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/bg-login.jpg
--------------------------------------------------------------------------------
/public/img/categories_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/categories_all.png
--------------------------------------------------------------------------------
/public/img/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/dashboard.png
--------------------------------------------------------------------------------
/public/img/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/edit.png
--------------------------------------------------------------------------------
/public/img/edit_category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/edit_category.png
--------------------------------------------------------------------------------
/public/img/editpages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/editpages.png
--------------------------------------------------------------------------------
/public/img/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/loading.png
--------------------------------------------------------------------------------
/public/img/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/login.png
--------------------------------------------------------------------------------
/public/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/logo.png
--------------------------------------------------------------------------------
/public/img/pages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/pages.png
--------------------------------------------------------------------------------
/public/img/serverfire-panel-crud-edit.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/serverfire-panel-crud-edit.jpg
--------------------------------------------------------------------------------
/public/img/serverfire-panel-crud.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/serverfire-panel-crud.jpg
--------------------------------------------------------------------------------
/public/img/serverfire-panel-dashboard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/serverfire-panel-dashboard.jpg
--------------------------------------------------------------------------------
/public/img/serverfire-panel-login.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/serverfireteam/panel/2519c0d328fd9306d8f94bdfb3aadf6186e2e28e/public/img/serverfire-panel-login.jpg
--------------------------------------------------------------------------------
/public/js/plugins/flot/jquery.flot.resize.js:
--------------------------------------------------------------------------------
1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes.
2 |
3 | Copyright (c) 2007-2013 IOLA and Ole Laursen.
4 | Licensed under the MIT license.
5 |
6 | It works by listening for changes on the placeholder div (through the jQuery
7 | resize event plugin) - if the size changes, it will redraw the plot.
8 |
9 | There are no options. If you need to disable the plugin for some plots, you
10 | can just fix the size of their placeholders.
11 |
12 | */
13 |
14 | /* Inline dependency:
15 | * jQuery resize event - v1.1 - 3/14/2010
16 | * http://benalman.com/projects/jquery-resize-plugin/
17 | *
18 | * Copyright (c) 2010 "Cowboy" Ben Alman
19 | * Dual licensed under the MIT and GPL licenses.
20 | * http://benalman.com/about/license/
21 | */
22 |
23 | (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
24 |
25 | (function ($) {
26 | var options = { }; // no options
27 |
28 | function init(plot) {
29 | function onResize() {
30 | var placeholder = plot.getPlaceholder();
31 |
32 | // somebody might have hidden us and we can't plot
33 | // when we don't have the dimensions
34 | if (placeholder.width() == 0 || placeholder.height() == 0)
35 | return;
36 |
37 | plot.resize();
38 | plot.setupGrid();
39 | plot.draw();
40 | }
41 |
42 | function bindEvents(plot, eventHolder) {
43 | plot.getPlaceholder().resize(onResize);
44 | }
45 |
46 | function shutdown(plot, eventHolder) {
47 | plot.getPlaceholder().unbind("resize", onResize);
48 | }
49 |
50 | plot.hooks.bindEvents.push(bindEvents);
51 | plot.hooks.shutdown.push(shutdown);
52 | }
53 |
54 | $.plot.plugins.push({
55 | init: init,
56 | options: options,
57 | name: 'resize',
58 | version: '1.0'
59 | });
60 | })(jQuery);
--------------------------------------------------------------------------------
/public/js/plugins/metisMenu/metisMenu.js:
--------------------------------------------------------------------------------
1 | /*
2 | * metismenu - v1.0.3
3 | * Easy menu jQuery plugin for Twitter Bootstrap 3
4 | * https://github.com/onokumus/metisMenu
5 | *
6 | * Made by Osman Nuri Okumuş
7 | * Under MIT License
8 | */
9 | ;(function ($, window, document, undefined) {
10 |
11 | var pluginName = "metisMenu",
12 | defaults = {
13 | toggle: true
14 | };
15 |
16 | function Plugin(element, options) {
17 | this.element = element;
18 | this.settings = $.extend({}, defaults, options);
19 | this._defaults = defaults;
20 | this._name = pluginName;
21 | this.init();
22 | }
23 |
24 | Plugin.prototype = {
25 | init: function () {
26 |
27 | var $this = $(this.element),
28 | $toggle = this.settings.toggle;
29 |
30 | if (this.isIE() <= 9) {
31 | $this.find("li.active").has("ul").children("ul").collapse("show");
32 | $this.find("li").not(".active").has("ul").children("ul").collapse("hide");
33 | } else {
34 | $this.find("li.active").has("ul").children("ul").addClass("collapse in");
35 | $this.find("li").not(".active").has("ul").children("ul").addClass("collapse");
36 | }
37 |
38 | $this.find("li").has("ul").children("a").on("click", function (e) {
39 | e.preventDefault();
40 |
41 | $(this).parent("li").toggleClass("active").children("ul").collapse("toggle");
42 |
43 | if ($toggle) {
44 | $(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide");
45 | }
46 | });
47 | },
48 |
49 | isIE: function() {//https://gist.github.com/padolsey/527683
50 | var undef,
51 | v = 3,
52 | div = document.createElement("div"),
53 | all = div.getElementsByTagName("i");
54 |
55 | while (
56 | div.innerHTML = "",
57 | all[0]
58 | ) {
59 | return v > 4 ? v : undef;
60 | }
61 | }
62 | };
63 |
64 | $.fn[ pluginName ] = function (options) {
65 | return this.each(function () {
66 | if (!$.data(this, "plugin_" + pluginName)) {
67 | $.data(this, "plugin_" + pluginName, new Plugin(this, options));
68 | }
69 | });
70 | };
71 |
72 | })(jQuery, window, document);
73 |
--------------------------------------------------------------------------------
/public/js/plugins/metisMenu/metisMenu.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * metismenu - v1.0.3
3 | * Easy menu jQuery plugin for Twitter Bootstrap 3
4 | * https://github.com/onokumus/metisMenu
5 | *
6 | * Made by Osman Nuri Okumuş
7 | * Under MIT License
8 | */
9 | !function(a,b,c){function d(b,c){this.element=b,this.settings=a.extend({},f,c),this._defaults=f,this._name=e,this.init()}var e="metisMenu",f={toggle:!0};d.prototype={init:function(){var b=a(this.element),c=this.settings.toggle;this.isIE()<=9?(b.find("li.active").has("ul").children("ul").collapse("show"),b.find("li").not(".active").has("ul").children("ul").collapse("hide")):(b.find("li.active").has("ul").children("ul").addClass("collapse in"),b.find("li").not(".active").has("ul").children("ul").addClass("collapse")),b.find("li").has("ul").children("a").on("click",function(b){b.preventDefault(),a(this).parent("li").toggleClass("active").children("ul").collapse("toggle"),c&&a(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide")})},isIE:function(){for(var a,b=3,d=c.createElement("div"),e=d.getElementsByTagName("i");d.innerHTML="",e[0];)return b>4?b:a}},a.fn[e]=function(b){return this.each(function(){a.data(this,"plugin_"+e)||a.data(this,"plugin_"+e,new d(this,b))})}}(jQuery,window,document);
--------------------------------------------------------------------------------
/public/js/sb-admin-2.js:
--------------------------------------------------------------------------------
1 | //Loads the correct sidebar on window load,
2 | //collapses the sidebar on window resize.
3 | // Sets the min-height of #page-wrapper to window size
4 | $(function() {
5 | $(window).bind("load resize", function() {
6 | topOffset = 50;
7 | width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width;
8 | if (width < 768) {
9 | $('div.navbar-collapse').addClass('collapse')
10 | topOffset = 100; // 2-row-menu
11 | } else {
12 | $('div.navbar-collapse').removeClass('collapse')
13 | }
14 |
15 | height = $(document).height();
16 | if (height < 1) height = 1;
17 | if (height > topOffset) {
18 | $("#page-wrapper").css("min-height", (height) + "px");
19 | }
20 | })
21 | })
22 | $(document ).ready(function(){
23 |
24 | $('.loading').fadeOut('normal');
25 | // $('.box-holder,.table').addClass('animated fadeInRight');
26 | // $('.dashboard-title').addClass('animated fadeInUp');
27 |
28 |
29 | })
30 |
--------------------------------------------------------------------------------
/public/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 |
--------------------------------------------------------------------------------
/public/less/variables.less:
--------------------------------------------------------------------------------
1 | // Variables
2 |
3 | @main-color :#304269;
4 | @second-color :#91BED4;
5 | @third-color :#D9E8F5;
6 | @text-color :#FFFFFF;
7 | @hover-color :#F26101;
8 |
9 |
10 | /*--------*/
11 | @sidebar-textColor:@second-color;
12 | @sidebar-hover-BG : inherit !important;
13 | @sidebar-hover-text : @text-color;
14 | @sidebar-active-text : @text-color;
15 | @sidebar-active-BG : darken(@main-color,10%);
16 |
17 |
18 | @gray-darker: lighten(#000, 13.5%);
19 | @gray-dark: lighten(#000, 20%);
20 | @gray: lighten(#000, 33.5%);
21 | @gray-light: lighten(#000, 60%);
22 | @gray-lighter: lighten(#000, 93.5%);
23 | @gray-lightest: lighten(#000, 97.25%);
24 | @brand-primary: #428bca;
25 | @brand-success: #5cb85c;
26 | @brand-info: #5bc0de;
27 | @brand-warning: #f0ad4e;
28 | @brand-danger: #d9534f;
29 |
30 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Commands/CreateControllerPanelCommand.php:
--------------------------------------------------------------------------------
1 | option('plain'))
35 | {
36 | return __DIR__.'/stubs/controller.plain.stub';
37 | }
38 |
39 | return __DIR__.'/../stubs/panelController.stub';
40 | }
41 |
42 | /**
43 | * Get the default namespace for the class.
44 | *
45 | * @param string $rootNamespace
46 | * @return string The namespace of the panel's controllers
47 | */
48 | protected function getDefaultNamespace($rootNamespace)
49 | {
50 | $controllersPath = \Config::get('panel.controllers');
51 | if ( isset($controllersPath) && $controllersPath != NULL ){
52 | return $controllersPath;
53 | } else {
54 | return $rootNamespace.'\Http\Controllers';
55 | }
56 | }
57 |
58 | /**
59 | * Execute the console command.
60 | *
61 | * @return void
62 | */
63 | public function handle()
64 | {
65 | $name = $this->qualifyClass($this->getNameInput()) . 'Controller';
66 |
67 | if ($this->files->exists($path = $this->getPath($name)))
68 | {
69 | return $this->error($this->type.' already exists!');
70 | }
71 |
72 | $this->makeDirectory($path);
73 |
74 | $this->files->put($path, $this->buildClass($name));
75 |
76 | $this->info($this->type.' created successfully.');
77 | }
78 |
79 | /**
80 | * Get the console command options.
81 | *
82 | * @return array
83 | */
84 | protected function getOptions()
85 | {
86 | return array(
87 | array('plain', null, InputOption::VALUE_NONE, 'Generate an empty controller class.'),
88 | );
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Commands/CreateModelCommand.php:
--------------------------------------------------------------------------------
1 | call('panel:createobserver', ['name' => $this->argument('name')]);
47 | }
48 |
49 | /**
50 | * Get the default namespace for the class.
51 | *
52 | * @param string $rootNamespace
53 | * @return string
54 | */
55 | protected function getDefaultNamespace($rootNamespace)
56 | {
57 | if (!empty(\Config::get('panel.modelPath'))) {
58 | return $rootNamespace . '\\' . \Config::get('panel.modelPath');
59 | }
60 | else {
61 | return $rootNamespace;
62 | }
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Commands/CreateModelObserverCommand.php:
--------------------------------------------------------------------------------
1 | qualifyClass($this->getNameInput());
57 |
58 | if ($this->files->exists($path = $this->getPath($name . 'Observer')))
59 | {
60 | return $this->error($this->type.' already exists!');
61 | }
62 |
63 | $this->makeDirectory($path);
64 |
65 | $this->files->put($path, $this->buildClass($name));
66 |
67 | $this->info($this->type.' created successfully.');
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Commands/CrudCommand.php:
--------------------------------------------------------------------------------
1 | info(' [ ServerFireTeam Panel Crud Generator ] ');
39 |
40 | $crudName = $this->argument('name');
41 |
42 | $this->call('panel:createmodel', ['name' => $crudName]);
43 |
44 | $this->call('panel:createcontroller', ['name' => $crudName]);
45 |
46 | Link::create([
47 | 'url' => $crudName,
48 | 'display' => $crudName . 's',
49 | 'show_menu' => true,
50 | ]);
51 |
52 | if ( !\Schema::hasTable($crudName) ){
53 | $this->info(' The Table Corresponding to this Model does not exist in Database!! ');
54 | $this->info(' Please Create this table ');
55 | }
56 |
57 | }
58 |
59 | /**
60 | * Get the console command arguments.
61 | *
62 | * @return array
63 | */
64 | protected function getArguments()
65 | {
66 | return [
67 | ['name', InputArgument::REQUIRED, 'required argument names']
68 | ];
69 | }
70 |
71 | /**
72 | * Get the console command options.
73 | *
74 | * @return array
75 | */
76 | protected function getOptions()
77 | {
78 | return [];
79 | }
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Facades/LinksFacade.php:
--------------------------------------------------------------------------------
1 | linkProvider = $linkProvider;
23 | }
24 |
25 | /**
26 | * @return Collection
27 | */
28 | public function all ()
29 | {
30 | // @TODO cache
31 | return $this->linkProvider->getAll();
32 | }
33 |
34 | /**
35 | * Get all the links where "main" is true
36 | * @return Collection
37 | */
38 | public function main ()
39 | {
40 | // @TODO cache
41 | return $this->linkProvider->getMain();
42 | }
43 |
44 | /**
45 | * Return whether the given URL (model name) exists amongst the "main" links
46 | * @param $url
47 | * @return bool
48 | */
49 | public function isMain ($url)
50 | {
51 | return $this->main()->pluck('url')->contains($url);
52 | }
53 | }
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Links/ConfigLinkProvider.php:
--------------------------------------------------------------------------------
1 | map(function ($spec, $label) {
26 | if (is_int($label)) { // This is just a string without a key (short notation)
27 | $label = $spec;
28 | $spec = null;
29 | }
30 | return [
31 | 'display' => $label,
32 | 'url' => data_get($spec, 'model', Str::singular($label)),
33 | 'show_menu' => data_get($spec, 'show_menu', true),
34 | 'main' => !data_get($spec, 'custom', true),
35 | ];
36 | })->values();
37 | }
38 |
39 | /**
40 | * @return Collection
41 | */
42 | public function getMain ()
43 | {
44 | return $this->getAll()->filter(function ($link) {
45 | return $link['main'];
46 | });
47 | }
48 | }
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Links/DbLinkProvider.php:
--------------------------------------------------------------------------------
1 | get();
31 | }
32 | }
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/Links/LinkProvider.php:
--------------------------------------------------------------------------------
1 | array(
11 | 'Admin',
12 | 'Permission',
13 | 'Role',
14 | 'Link'
15 | ),
16 | 'logo'=>'packages/serverfireteam/panel/img/logo.png', // logo of Panel
17 | 'modelPath' => '', // specific model path in the app folder e.g. 'Models'
18 |
19 | // Uncomment the section below to use links specified here rather than in the DB table "links"
20 | // 'links' => [
21 | // 'Links' => [ // use the display name as the key
22 | // 'model' => 'Link', // model name, same as "url" in the database
23 | // 'custom' => false, // not "main"? defaults to true
24 | // 'show_menu' => true, // defaults to true
25 | // ],
26 | // 'Roles' => [
27 | // 'model' => 'Role',
28 | // 'custom' => false,
29 | // 'show_menu' => true,
30 | // ],
31 | // 'Permissions' => [
32 | // 'model' => 'Permission',
33 | // 'custom' => false,
34 | // 'show_menu' => true,
35 | // ],
36 | // 'Admins' => [
37 | // 'model' => 'Admin',
38 | // 'custom' => false,
39 | // 'show_menu' => true,
40 | // ],
41 | // ],
42 |
43 | // Example of short notation style:
44 | // 'links' => [
45 | // 'Customers'
46 | // ],
47 |
48 | // This is equivalent to
49 | // 'links' => [
50 | // 'Customers' => [
51 | // 'model' => 'Customer',
52 | // 'custom' => true,
53 | // 'show_menu' => true,
54 | // ],
55 | // ],
56 | );
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/libs/AppHelper.php:
--------------------------------------------------------------------------------
1 | getAppNamespace();
15 | }
16 |
17 | public static function validName($name) {
18 | return strpos($name, '.') !== 0;
19 | }
20 |
21 | public static function access($attr, $path, $data, $volume) {
22 | if (strpos(basename($path), '.') === 0) {
23 | return !($attr == 'read');
24 | } else {
25 | return null;
26 | }
27 | }
28 |
29 | /**
30 | * For the given entity name, the the corresponding Model's class
31 | * @param string $entity
32 | * @return string
33 | */
34 | public function getModel($entity) {
35 | if ( \Links::isMain($entity) ) {
36 | $modelClass = 'Serverfireteam\\Panel\\'.$entity;
37 | } else {
38 | if (!empty(\Config::get('panel.modelPath'))) {
39 | $modelClass = $this->getNameSpace() . \Config::get('panel.modelPath') . '\\' . $entity;
40 | }
41 | else {
42 | $modelClass = $this->getNameSpace() . $entity;
43 | }
44 |
45 | }
46 | return $modelClass;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/libs/AuthAdmin.php:
--------------------------------------------------------------------------------
1 | guest();
12 | \Config::set('auth.model', $temp);
13 | return $access;
14 | }
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/libs/AuthMiddleware.php:
--------------------------------------------------------------------------------
1 | user())) {
21 | $message = session('message', Lang::get('panel::fields.enterEmail'));
22 |
23 | return redirect('/panel/login')
24 | ->with('message', $message)
25 | ->with('mesType', 'message');
26 | }
27 |
28 | return $next($request);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/libs/PanelElements.php:
--------------------------------------------------------------------------------
1 | array(
10 | 'Admin' ,
11 | 'Link' ,
12 | 'Permission',
13 | 'Role'
14 | ),
15 | );
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/libs/PermissionCheckMiddleware.php:
--------------------------------------------------------------------------------
1 | user()->id));
26 |
27 | $urlSegments = $request->segments();
28 |
29 | if ($admin->hasRole('super')){
30 |
31 | return $next($request);
32 | }else{
33 | if (key_exists(2 , $urlSegments)){
34 |
35 | $PermissionToCheck = '/' . $urlSegments[1] . '/' . $urlSegments[2];
36 |
37 | if($admin->hasPermission($PermissionToCheck)){
38 |
39 | return $next($request);
40 | }else{
41 | /**
42 | * Show Access denied page to User
43 | */
44 |
45 | abort(403);
46 | }
47 | }
48 | return $next($request);
49 |
50 | }
51 |
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/libs/dashboard.php:
--------------------------------------------------------------------------------
1 | user();
42 |
43 | return $user->hasRole('super') || $user->hasPermission('/' . $link['url'] . '/all');
44 | }
45 |
46 | /**
47 | * Return the array of entity types (models / links)
48 | * to show CRUD interfaces for in the panel
49 | *
50 | * @param AppHelper $appHelper
51 | * @param LinkRepository $linkRepository
52 | *
53 | * @return array
54 | */
55 | public function create (AppHelper $appHelper, LinkRepository $linkRepository)
56 | {
57 | // @TODO cache
58 |
59 | return $linkRepository->all()
60 |
61 | ->filter(function ($link) {
62 | return $this->showLink($link);
63 | })
64 |
65 | ->map(function ($link) use ($appHelper) {
66 |
67 | $modelName = $link['url'];
68 |
69 | $model = $appHelper->getModel($modelName);
70 |
71 | return [
72 | 'modelName' => $modelName,
73 | 'title' => $link['display'],
74 | 'count' => $model::count(),
75 | 'showListUrl' => 'panel/' . $modelName . '/all',
76 | 'addUrl' => 'panel/' . $modelName . '/edit',
77 | ];
78 | })
79 |
80 | ->toArray();
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/Serverfireteam/Panel/stubs/model.stub:
--------------------------------------------------------------------------------
1 | filter = \DataFilter::source(new \App\Category);
20 | $this->filter->add('name', 'Name', 'text');
21 | $this->filter->submit('search');
22 | $this->filter->reset('reset');
23 | $this->filter->build();
24 |
25 | $this->grid = \DataGrid::source($this->filter);
26 | $this->grid->add('name', 'Name');
27 | $this->grid->add('code', 'Code');
28 | $this->addStylesToGrid();
29 |
30 | */
31 |
32 | return $this->returnView();
33 | }
34 |
35 | public function edit($entity){
36 |
37 | parent::edit($entity);
38 |
39 | /* Simple code of edit part , List of all fields here : https://github.com/serverfireteam/panel/wiki/CRUD-Fields
40 |
41 | $this->edit = \DataEdit::source(new \App\Category());
42 |
43 | $this->edit->label('Edit Category');
44 |
45 | $this->edit->add('name', 'Name', 'text');
46 |
47 | $this->edit->add('code', 'Code', 'text')->rule('required');
48 |
49 |
50 | */
51 |
52 | return $this->returnEditView();
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/controllers/AdminController.php:
--------------------------------------------------------------------------------
1 | filter = \DataFilter::source(Admin::with('roles'));
22 | $this->filter->add('id', 'ID', 'text');
23 | $this->filter->add('first_name', 'First name', 'text');
24 | $this->filter->add('last_name', 'Last Name', 'text');
25 | $this->filter->add('email', 'Email', 'text');
26 | $this->filter->submit('search');
27 | $this->filter->reset('reset');
28 | $this->filter->build();
29 |
30 | $this->grid = \DataGrid::source($this->filter);
31 | $this->grid->add('id','ID', true)->style("width:100px");
32 | $this->grid->add('{{ $first_name }} {{ $last_name}}','first name');
33 | $this->grid->add('email','Email');
34 | $this->grid->add('{{ implode(", ", $roles->pluck("name")->all()) }}', 'Role');
35 |
36 | $this->addStylesToGrid();
37 | return $this->returnView();
38 | }
39 |
40 | public function edit($entity){
41 |
42 | if (\Request::input('password') != null )
43 | {
44 | $new_input = array('password' => \Hash::make(\Request::input('password')));
45 | \Request::merge($new_input);
46 | }
47 |
48 | parent::edit($entity);
49 |
50 | $this->edit = \DataEdit::source(new Admin());
51 |
52 | $this->edit->label('Edit Admin');
53 | $this->edit->link("rapyd-demo/filter","Articles", "TR")->back();
54 | $this->edit->add('email','Email', 'text')->rule('required|min:5');
55 | $this->edit->add('first_name', 'firstname', 'text');
56 | $this->edit->add('last_name', 'lastname', 'text');
57 | $this->edit->add('password', 'password', 'password')->rule('required');
58 | $this->edit->add('roles','Roles','checkboxgroup')->options(Role::pluck('name', 'id')->all());
59 |
60 | return $this->returnEditView();
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/src/controllers/AuthController.php:
--------------------------------------------------------------------------------
1 | Input::get('email'),
21 | 'password' => Input::get('password')
22 | );
23 | // attempt to do the login
24 | if (\Auth::guard('panel')->attempt($userdata,filter_var(Input::get('remember'), FILTER_VALIDATE_BOOLEAN))) {
25 | return \Redirect::to('panel');
26 | } else {
27 | // validation not successful, send back to form
28 | return \Redirect::to('panel/login')->with('message', \Lang::get('panel::fields.passwordNotCorrect') )->with('mesType','error');
29 | }
30 | }
31 |
32 | public function getLogin(){
33 |
34 | $message = (\Session::has('message') ? \Session::get('message') : \Lang::get('panel::fields.signIn'));
35 | $mesType = (\Session::has('mesType') ? \Session::get('mesType') : 'message');
36 | return \View::make('panelViews::login')->with('message', $message)->with('mesType', $mesType);
37 | }
38 |
39 | public function doLogout(){
40 |
41 | \Auth::guard('panel')->logout();
42 | return \Redirect::to('panel/login');
43 | }
44 | }
--------------------------------------------------------------------------------
/src/controllers/LinkController.php:
--------------------------------------------------------------------------------
1 | filter = \DataFilter::source(new Link());
14 | $this->filter->add('id', 'ID', 'text');
15 | $this->filter->add('display', 'Display', 'text');
16 | $this->filter->submit('search');
17 | $this->filter->reset('reset');
18 | $this->filter->build();
19 |
20 | $this->grid = \DataGrid::source($this->filter);
21 | $this->grid->add('id', 'ID', true)->style("width:100px");
22 | $this->grid->add('display', 'Display');
23 | $this->grid->add('url', 'Model');
24 | $this->grid->add('show_menu','Show in Menu')->cell( function( $value, $row) {
25 | return ($value) ? "True" : "False";
26 | });
27 |
28 | $this->addStylesToGrid();
29 |
30 | return $this->returnView();
31 | }
32 |
33 | public function edit($entity) {
34 |
35 | parent::edit($entity);
36 |
37 | $this->edit = \DataEdit::source(new Link());
38 |
39 | Link::creating(function($link)
40 | {
41 | $appHelper = new libs\AppHelper();
42 | return ( class_exists( $appHelper->getModel($link['url']) ));
43 | });
44 |
45 | $helpMessage = \Lang::get('panel::fields.links_help');
46 |
47 | $this->edit->label('Edit Links');
48 | $this->edit->link("rapyd-demo/filter", "Articles", "TR")->back();
49 | $this->edit->add('display', 'Display', 'text')->rule('required');
50 | $this->edit->add('url', 'link', 'text')->rule('required');
51 | $this->edit->add('show_menu','Show in Menu','checkbox');
52 |
53 | $this->edit->saved(function () use ($entity) {
54 | $this->edit->message(\Lang::get('panel::fields.dataSavedSuccessfull'));
55 | $this->edit->link('panel/Permission/all', \Lang::get('panel::fields.back'));
56 | });
57 | $this->addHelperMessage($helpMessage);
58 |
59 | return $this->returnEditView();
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/controllers/MainController.php:
--------------------------------------------------------------------------------
1 | getRoutes())->reduce(function ($carry = [], $route) {
22 | starts_with($route->uri(), 'panel/{entity}') ?: $carry[] = $route;
23 |
24 | return $carry;
25 | });
26 | try {
27 | // If we find a match, take the user there.
28 | foreach ($routes as $route){
29 | if ($uri == $route->uri()){
30 | $controller_path = $route->getAction()['controller'];
31 | $controller_action = explode('@',$controller_path);
32 | $controller = \App::make($controller_action[0]);
33 | return $controller->callAction($controller_action[1], array());
34 | break;
35 | }
36 | }
37 | }
38 | catch (Exception $e){
39 | // Otherwise, we didn't find a match so take the user to the admin page.
40 | return redirect('/panel');
41 | }
42 |
43 | $appHelper = new libs\AppHelper();
44 |
45 | if ( \Links::isMain($entity)){
46 | $controller_path = 'Serverfireteam\Panel\\'.$entity.'Controller';
47 | } else {
48 | $panel_path = \Config::get('panel.controllers');
49 | if ( isset($panel_path) ){
50 | $controller_path = '\\'.$panel_path.'\\'.$entity.'Controller';
51 | } else {
52 | $controller_path = $appHelper->getNameSpace().'Http\Controllers\\'.$entity.'Controller';
53 | }
54 | }
55 |
56 | try{
57 | $controller = \App::make($controller_path);
58 | }catch(\Exception $ex){
59 | throw new \Exception("Controller not found ( $controller_path ) ");
60 | }
61 | if (!method_exists($controller, $methods)){
62 | throw new \Exception('Controller does not implement the CrudController methods!');
63 | } else {
64 | return $controller->callAction($methods, array('entity' => $entity));
65 | }
66 |
67 | }
68 | }
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/controllers/PermissionController.php:
--------------------------------------------------------------------------------
1 | filter = \DataFilter::source(new Permission());
14 | $this->filter->add('id', 'ID', 'text');
15 | $this->filter->add('name', 'Name', 'text');
16 | $this->filter->submit('search');
17 | $this->filter->reset('reset');
18 | $this->filter->build();
19 |
20 | $this->grid = \DataGrid::source($this->filter);
21 | $this->grid->add('id', 'ID', true)->style("width:100px");
22 | $this->grid->add('name', 'Url')->style('width:100px');
23 | $this->grid->add('label', 'Description');
24 |
25 | $this->addStylesToGrid();
26 |
27 | return $this->returnView();
28 | }
29 |
30 | public function edit($entity) {
31 |
32 | parent::edit($entity);
33 |
34 | $this->edit = \DataEdit::source(new Permission());
35 |
36 | $helpMessage = (\Lang::get('panel::fields.roleHelp'));
37 |
38 | $this->edit->label('Edit Permission');
39 | $this->edit->link("rapyd-demo/filter", "Articles", "TR")->back();
40 | $this->edit->add('name', 'Url', 'text')->rule('required');
41 | $this->edit->add('label', 'Description', 'text')->rule('required');
42 |
43 | $this->edit->saved(function () use ($entity) {
44 | $this->edit->message('Awesome, Data Saved successfully');
45 | $this->edit->link('panel/Permission/all', 'Back');
46 | });
47 |
48 | $this->addHelperMessage($helpMessage);
49 |
50 | return $this->returnEditView();
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/controllers/RoleController.php:
--------------------------------------------------------------------------------
1 | filter = \DataFilter::source(Role::with('permissions'));
14 | $this->filter->add('id', 'ID', 'text');
15 | $this->filter->add('name', 'Name', 'text');
16 | $this->filter->submit('search');
17 | $this->filter->reset('reset');
18 | $this->filter->build();
19 |
20 | $this->grid = \DataGrid::source($this->filter);
21 | $this->grid->add('id', 'ID', true)->style("width:100px");
22 | $this->grid->add('name', 'Name')->style('width:100px');
23 | $this->grid->add('label', 'Description');
24 | $this->grid->add('{{ implode(", ", $permissions->pluck("name")->all()) }}', 'name' );
25 |
26 |
27 | $this->addStylesToGrid();
28 |
29 | return $this->returnView();
30 | }
31 |
32 | public function edit($entity) {
33 |
34 | parent::edit($entity);
35 |
36 | $this->edit = \DataEdit::source(new Role());
37 |
38 | $helpMessage = \Lang::get('panel::fields.roleHelp');
39 |
40 | $this->edit->label('Edit Role');
41 | $this->edit->link("rapyd-demo/filter", "Role", "TR")->back();
42 | $this->edit->add('name', 'Name', 'text')->rule('required');
43 | $this->edit->add('label', 'Description', 'text')->rule('required');
44 | $this->edit->add('permissions','Permissions','checkboxgroup')->options(Permission::pluck('name', 'id')->all());
45 | $this->edit->saved(function () use ($entity) {
46 | $this->edit->message(\Lang::get('panel::fields.dataSavedSuccessfull'));
47 | $this->edit->link('panel/Permission/all', \Lang::get('panel::fields.back'));
48 | });
49 |
50 |
51 | $this->addHelperMessage($helpMessage);
52 |
53 | return $this->returnEditView();
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/controllers/UsersController.php:
--------------------------------------------------------------------------------
1 | filter = \DataFilter::source(new \User());
19 | $this->filter->add('id', 'ID', 'text');
20 | $this->filter->add('name', 'Name', 'text');
21 | $this->filter->submit('search');
22 | $this->filter->reset('reset');
23 | $this->filter->build();
24 |
25 | $this->grid = \DataGrid::source($this->filter);
26 | $this->grid->add('id','ID', true)->style("width:100px");
27 | $this->grid->add('name','Name');
28 | $this->addStylesToGrid();
29 |
30 | return $this->returnView();
31 | }
32 |
33 |
34 |
35 |
36 | public function edit($entity){
37 |
38 | parent::edit($entity);
39 |
40 | $this->edit = \DataEdit::source(new \User());
41 |
42 | $this->edit->label('Edit User');
43 | $this->edit->link("rapyd-demo/filter","Articles", "TR")->back();
44 | $this->edit->add('name','Name', 'text')->rule('required|min:5');
45 | $this->edit->add('username','userame', 'text')->rule('required|min:5');
46 | return $this->returnEditView();
47 | }
48 |
49 | public function getCreateUser(){
50 | return \View::make('panelViews::createUser');
51 | }
52 |
53 | public function postCreateUser(){
54 |
55 | }
56 | }
--------------------------------------------------------------------------------
/src/database/migrations/2014_11_16_205658_create_admins_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
19 | $table->string('email');
20 | $table->string('password');
21 | $table->text('permissions')->nullable();
22 | $table->boolean('activated')->default(0);
23 | $table->string('activation_code')->nullable();
24 | $table->timestamp('activated_at')->nullable();
25 | $table->timestamp('last_login')->nullable();
26 | $table->string('persist_code')->nullable();
27 | $table->string('reset_password_code')->nullable();
28 | $table->string('remember_token', 100)->nullable();
29 | $table->string('first_name')->nullable();
30 | $table->string('last_name')->nullable();
31 | $table->timestamps();
32 | // We'll need to ensure that MySQL uses the InnoDB engine to
33 | // support the indexes, other engines aren't affected.
34 | $table->engine = 'InnoDB';
35 | $table->unique('email');
36 | $table->index('activation_code');
37 | $table->index('reset_password_code');
38 | });
39 | Admin::create(array(
40 | 'email' => 'admin@change.me',
41 | 'password' => Hash::make('12345')
42 | ));
43 |
44 | }
45 |
46 | /**
47 | * Reverse the migrations.
48 | *
49 | * @return void
50 | */
51 | public function down()
52 | {
53 | Schema::drop('admins');
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/src/database/migrations/2014_12_02_152920_create_password_reminders_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token')->index();
19 | $table->timestamp('created_at');
20 | $table->engine = 'InnoDB';
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('password_reminders');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/database/migrations/2015_02_20_130902_create_url_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('display');
19 | $table->string('url');
20 | $table->timestamps();
21 | // We'll need to ensure that MySQL uses the InnoDB engine to
22 | // support the indexes, other engines aren't affected.
23 | $table->engine = 'InnoDB';
24 | });
25 |
26 | Serverfireteam\Panel\Link::create(array(
27 | 'display' => 'Links',
28 | 'url' => 'Link'
29 | ));
30 |
31 | }
32 |
33 | /**
34 | * Reverse the migrations.
35 | *
36 | * @return void
37 | */
38 | public function down()
39 | {
40 | Schema::drop('links');
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/database/migrations/2015_03_15_123956_edit_url_table.php:
--------------------------------------------------------------------------------
1 | boolean('main')->nullable();
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | *
24 | * @return void
25 | */
26 | public function down()
27 | {
28 |
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/database/migrations/2016_09_20_123956_edit_url_menu_table.php:
--------------------------------------------------------------------------------
1 | boolean('show_menu')->nullable();
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | *
24 | * @return void
25 | */
26 | public function down()
27 | {
28 |
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/database/migrations/2016_09_20_143956_edit_roles_table.php:
--------------------------------------------------------------------------------
1 | update(['show_menu' => 1]);
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | *
22 | * @return void
23 | */
24 | public function down()
25 | {
26 |
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/database/migrations/2019_06_04_092344_edit_admin_table.php:
--------------------------------------------------------------------------------
1 | json('extradata');
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | *
24 | * @return void
25 | */
26 | public function down()
27 | {
28 | Schema::table('admins', function($table) {
29 | $table->dropColumn('extradata');
30 | });
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/database/seeds/AdminSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
14 |
15 | DB::table('admins')->insert(
16 | array('email'=>'admin@admin.com',
17 | 'password'=>'123')
18 | );
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/src/database/seeds/UrlSeeder.php:
--------------------------------------------------------------------------------
1 | take(1)->get();
14 | var_dump($link);
15 | exit();*/
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/lang/en/fields.php:
--------------------------------------------------------------------------------
1 | 'Settings',
5 | 'logout' => 'Log out',
6 | 'ProfileEdit' => 'Profile Edit',
7 | 'Add' => 'ADD',
8 | 'edit' => 'Edit',
9 | 'back' => 'Back',
10 | 'search' => 'Search',
11 | 'reset' => 'Reset',
12 | 'enterEmail' => 'Please Enter Email Address',
13 | 'signIn' => 'Please Sign In',
14 | 'forgetPassword' => 'Forgot Password',
15 | 'rememberMe' => 'Remember Me',
16 | 'login' => 'Login',
17 | 'sendReminder' => 'Send Reminder',
18 | 'passwordNotCorrect' => 'Either Password or username is not correct!!',
19 | 'FirstName' => 'First Name',
20 | 'LastName' => 'Last Name',
21 | 'emailAddress' => 'Email Address',
22 | 'thankYouNote' => 'Thank you for using LaravelPanel.',
23 | 'updateProfile' => 'Update Profile',
24 | 'currentPassword' => 'Current Password',
25 | 'password' => 'Password',
26 | 'email' => 'Email',
27 | 'rePassword' => 'Re-Type Password',
28 | 'resetPassword' => 'Reset Password',
29 | 'ChangePassword' => 'Change Password',
30 | 'dashboard' => 'Dashboard',
31 | 'visiteSite' => 'Visit Site',
32 | 'change' => 'change',
33 | 'showList' => 'Show List',
34 | 'exportAsExcel' => 'Export As Excel',
35 | 'importData' => 'Import Data',
36 | 'deletePreviousData' => 'Delete Previous Data',
37 | 'keepOverwriteData' => 'Keep Previous Data and Overwrite Matching Keys',
38 | 'keepNotOverwriteData' => 'Keep Previous Data and Don\'t Overwrite Matching Keys',
39 | 'close' => 'Close',
40 | 'importDataSuccess' => 'Data is imported successfully.',
41 | 'importDataFailure' => 'Data import failed, please check the validation of data.',
42 | 'successfullReset' => 'Your password has been reset successfully!',
43 | 'successfullEditProfile' => 'Your profile is edited successfully.',
44 | 'permissionHelp' => 'Permissions work with urls, in order to using for ** http://Serverfire.net/panel/url/access ** , Url field should be : urlaccess .',
45 | 'roleHelp' => 'Role can have many permission.',
46 | 'links_help' => "The 'Edit Links' form is used for adding a link in the sidebar menu of panel. The value of 'Display' field specifies the label of the link to be displayed in the menu and the value of 'Link' field specifies the name of the model.",
47 | 'dataSavedSuccessfull' => 'Awesome!, data saved, to save again with new data click on save.',
48 |
49 |
50 |
51 | );
52 |
--------------------------------------------------------------------------------
/src/lang/es/fields.php:
--------------------------------------------------------------------------------
1 | 'Configuración',
5 | 'logout' => 'Salir',
6 | 'ProfileEdit' => 'Editar perfil',
7 | 'Add' => 'Agregar',
8 | 'edit' => 'Editar',
9 | 'back' => 'Back',
10 | 'search' => 'Buscar',
11 | 'reset' => 'Limpiar',
12 | 'enterEmail' => 'Por favor ingresa una dirección de email',
13 | 'signIn' => 'Por favor ingresa',
14 | 'forgetPassword' => 'Olvidé mi contraseña',
15 | 'rememberMe' => 'Recordarme',
16 | 'login' => 'Ingresar',
17 | 'sendReminder' => 'Enviar recordatorio',
18 | 'passwordNotCorrect' => '¡El usuario o la contraseña son incorrectos!',
19 | 'FirstName' => 'Nombre',
20 | 'LastName' => 'Apellido',
21 | 'emailAddress' => 'Dirección de Email',
22 | 'thankYouNote' => 'Gracias por usar LaravelPanel.',
23 | 'updateProfile' => 'Actualizar perfil',
24 | 'currentPassword' => 'Contraseña actual',
25 | 'password' => 'Contraseña',
26 | 'email' => 'Email',
27 | 'rePassword' => 'Confirmar contraseña',
28 | 'resetPassword' => 'Cambiar contraseña',
29 | 'ChangePassword' => 'Cambiar contraseña',
30 | 'dashboard' => 'Panel de control',
31 | 'visiteSite' => 'Visitar sitio',
32 | 'change' => 'Cambiar',
33 | 'showList' => 'Mostrar lista',
34 | 'exportAsExcel' => 'Exportar a Excel',
35 | 'importData' => 'Importar datos',
36 | 'deletePreviousData' => 'Borrar datos existentes',
37 | 'keepOverwriteData' => 'Mantener los datos existentes y actualizarlos',
38 | 'keepNotOverwriteData' => 'Mantener los datos existentes y no actualizarlos',
39 | 'close' => 'Cerrar',
40 | 'importDataSuccess' => 'Los datos fueron importados exitosamente',
41 | 'importDataFailure' => 'La importación de datos falló, por favor revisa la validez de los datos',
42 | 'successfullReset' => '¡Tu contraseña se actualizó exitosamente!',
43 | 'successfullEditProfile' => 'Tu perfil se actualizó exitosamente',
44 | 'permissionHelp' => 'Permissions funciona con urls, con el fin de usar con ** http://Serverfire.net/panel/url/access ** , el campo Url debe ser : urlaccess .',
45 | 'roleHelp' => 'Role puede tener muchos permisos.',
46 | 'links_help' => "El formulario 'Editar Links' es usado para agregar un link en el sidebar menu del panel. El valor del campo 'Display' especifica la etiqueta del link para ser mostrado en el menu y el valor del campo 'link' especifica el nombre del modelo.",
47 | 'dataSavedSuccessfull' => 'Grandioso!, información guardada, para guardar nuevamente con nueva información click en Guardar.',
48 | );
49 |
--------------------------------------------------------------------------------
/src/lang/fa/fields.php:
--------------------------------------------------------------------------------
1 | 'تنظیمات',
5 | 'logout' => 'خروج',
6 | 'ProfileEdit' => 'ویرایش پروفایل',
7 | 'Add' => 'ایجاد',
8 | 'search' => 'جستجو',
9 | 'reset' => 'تنظیم مجدد',
10 | 'enterEmail' => 'لطفا ایمیل خود را وارد کنید',
11 | 'signIn' => 'لطفا وارد شوید',
12 | 'forgetPassword' => 'فراموش کردن کلمه عبور',
13 | 'rememberMe' => 'من را به خاطر بسپار',
14 | 'login' => 'ورود',
15 | 'sendReminder' => 'ارسال یادآور',
16 | 'passwordNotCorrect' => 'نام کاربری یا کلمه عبور اشتباه می باشد',
17 | 'FirstName' => 'نام',
18 | 'LastName' => 'نام خانوادگی',
19 | 'emailAddress' => 'آدرس ایمیل',
20 | 'thankYouNote' => 'از اینکه از لاراول پنل استفاده میکنید از شما متشکریم',
21 | 'updateProfile' => 'ویرایش پروفایل',
22 | 'currentPassword' => 'کلمه عبور قدیمی',
23 | 'password' => 'کلمه عبور',
24 | 'email' => 'ایمیل',
25 | 'rePassword' => 'تایپ مجدد کلمه عبور',
26 | 'resetPassword' => 'تعویض کلمه عبور',
27 | 'ChangePassword' => 'تغییر کلمه عبور',
28 | 'dashboard' => 'داشبورد',
29 | 'visiteSite' => 'مشاهده سایت',
30 | 'change' => 'تغییر',
31 | 'showList' => 'نمایش لیست',
32 | 'exportAsExcel' => 'خروجی اکسل',
33 | 'importData' => 'وارد کردن اطلاعات',
34 | 'deletePreviousData' => 'پاک کردن اطلاعات قبلی',
35 | 'keepOverwriteData' => 'اطلاعات قبلی رو نگه دار و اطلاعاتی که کلید مشابه دارن رو جایگزین بکن',
36 | 'keepNotOverwriteData' => 'اطلاعات قبلی رو نگه دار و کلید های مشابه رو جایگزین نکن',
37 | 'close' => 'بستن',
38 | 'importDataSuccess' => 'اطلاعات با موفقیت وارد شد.',
39 | 'importDataFailure' => ' اطلاعات وارد نشد ، لطفا از درست بودن اطلاعات مطمئن شوید',
40 | 'successfullReset' => 'کلمه عبور شما با موفقیت عوض شد',
41 | 'successfullEditProfile' => 'پروفایل شما با موفقیت تغییر کرد'
42 | );
43 |
--------------------------------------------------------------------------------
/src/lang/fr/fields.php:
--------------------------------------------------------------------------------
1 | 'Paramètres',
5 | 'logout' => 'Sortir',
6 | 'ProfileEdit' => 'Modifier mon profil',
7 | 'Add' => 'AJOUTER',
8 | 'edit' => 'Modifier',
9 | 'search' => 'Rechercher',
10 | 'reset' => 'Réinitialiser',
11 | 'enterEmail' => 'Saisissez vos identifiants',
12 | 'signIn' => 'Saisissez vos identifiants',
13 | 'forgetPassword' => 'Mot de passe oublié ?',
14 | 'rememberMe' => 'Rester authentifié',
15 | 'login' => 'Se connecter',
16 | 'sendReminder' => 'Envoyer le mail de réinitialisation',
17 | 'passwordNotCorrect' => 'Le mot de passe ou l\'email n\'est pas valide',
18 | 'FirstName' => 'Prénom',
19 | 'LastName' => 'Nom',
20 | 'updateProfile' => 'Mettre à jour',
21 | 'currentPassword' => 'Mot de passe actuel',
22 | 'password' => 'mot de passe',
23 | 'email' => 'Email',
24 | 'rePassword' => 'Confirmer le nouveau mot de passe',
25 | 'resetPassword' => 'Réinitialiser le mot de passe',
26 | 'ChangePassword' => 'Changer de mot de passe',
27 | 'dashboard' => 'Tableau de bord',
28 | 'visiteSite' => 'Voir le site',
29 | 'change' => 'changer',
30 | 'showList' => 'Voir la liste',
31 | 'exportAsExcel' => 'Exporter au format Excel',
32 | 'importData' => 'Importer',
33 | 'deletePreviousData' => 'Effacer les entrées existantes',
34 | 'keepOverwriteData' => 'Conserver les entrées existantes et mettre à jour les entrées communes',
35 | 'keepNotOverwriteData' => 'Conserver les entrées existantes et ignorer les entrées communes',
36 | 'close' => 'Fermer',
37 | 'importDataSuccess' => 'L\'import a été effectué correctement.',
38 | 'importDataFailure' => 'L\'import a échoué, merci de vérifier le fichier d\'entrée.',
39 | 'successfullReset' => 'Votre mot de passe a bien été réinitialisé !',
40 | 'successfullEditProfile' => 'Votre profil a été mis à jour.'
41 | );
42 |
--------------------------------------------------------------------------------
/src/lang/hy/fields.php:
--------------------------------------------------------------------------------
1 | 'Կարգավորումներ',
5 | 'logout' => 'Ելք',
6 | 'ProfileEdit' => 'Խմբագրել Անձնագիրը',
7 | 'Add' => 'Ավելացնել',
8 | 'edit' => 'Խմբագրել',
9 | 'search' => 'Փնտրել',
10 | 'reset' => 'Վերականգնել',
11 | 'enterEmail' => 'Խնդրում ենք մուտքագրել Ձեր էլեկտրոնային փոստի հասցեն',
12 | 'signIn' => 'Խնդրում ենք մուտք գործել',
13 | 'forgetPassword' => 'Մոռացել ե՞ք գաղտնաբառը',
14 | 'rememberMe' => 'Հիշիր ինձ',
15 | 'login' => 'Մուտք գործել',
16 | 'sendReminder' => 'Ուղարկել հիշեցում',
17 | 'passwordNotCorrect' => 'Գաղտնաբառը կամ մասնակցի անունը ճիշտ չէ !!',
18 | 'FirstName' => 'Անուն',
19 | 'LastName' => 'Ազգանուն',
20 | 'updateProfile' => 'Թարմացնել Անձնագիրը',
21 | 'currentPassword' => 'Ընթացիկ Գաղտնաբառ',
22 | 'password' => 'Գաղտնաբառ',
23 | 'email' => 'փոստի հասցեն',
24 | 'rePassword' => 'Կրկնել Գաղտնաբառը',
25 | 'resetPassword' => 'Վերականգնել Գաղտնաբառը',
26 | 'ChangePassword' => 'Վերականգնել Գաղտնաբառը',
27 | 'dashboard' => 'Վահանակ',
28 | 'visiteSite' => 'Այցելել Կայքը',
29 | 'change' => 'Փոխել',
30 | 'showList' => 'Ցուցադրել Ցանկը',
31 | 'exportAsExcel' => 'Արտահանել Excel Արդյունքներ',
32 | 'importData' => 'Ներմուծել Տվյալներ',
33 | 'deletePreviousData' => 'Ջնջել Նախորդ Տվյալները',
34 | 'keepOverwriteData' => 'ՊահպանելՆախորդ Տվյալները և Փոխարինել Համապատասխան Բանալիները',
35 | 'keepNotOverwriteData' => 'ՊահպանելՆախորդ Տվյալները և Չը Փոխարինել Համապատասխան Բանալիները',
36 | 'close' => 'Փակել',
37 | 'importDataSuccess' => 'Տվյալները հաջողութեամբ Ներմուծվել են:',
38 | 'importDataFailure' => 'Տվյալների ներմուծումը ձախողվեց, խնդրում ենք ստուգել տվյալների վավերացումը:',
39 | 'successfullReset' => 'Ձեր գաղտնաբառը հաջողությամբ վերականգնվել է:',
40 | 'successfullEditProfile' => 'Ձեր անձնագիրը հաջողությամբ խմբագրվել է:'
41 | );
42 |
--------------------------------------------------------------------------------
/src/lang/it/fields.php:
--------------------------------------------------------------------------------
1 | 'Settaggi',
5 | 'logout' => 'Esci',
6 | 'ProfileEdit' => 'Modifica il profilo',
7 | 'Add' => 'Aggiungi',
8 | 'edit' => 'Modifica',
9 | 'search' => 'Ricerca',
10 | 'reset' => 'Inizializza',
11 | 'enterEmail' => 'Inserire l\'indirizzo Email',
12 | 'signIn' => 'Registrati',
13 | 'forgetPassword' => 'Password dimenticata',
14 | 'rememberMe' => 'Ricordami',
15 | 'login' => 'Collegati',
16 | 'sendReminder' => 'Invia un Avviso',
17 | 'passwordNotCorrect' => 'Nome utente o password errati!!',
18 | 'FirstName' => 'Nome',
19 | 'LastName' => 'Cognome',
20 | 'updateProfile' => 'Aggiorna il profilo',
21 | 'currentPassword' => 'Password attuale',
22 | 'password' => 'Password',
23 | 'email' => 'Email',
24 | 'rePassword' => 'Reinserisci la Password',
25 | 'resetPassword' => 'Inizializza la Password',
26 | 'ChangePassword' => 'Resetta la Password',
27 | 'dashboard' => 'Pannello di controllo',
28 | 'visiteSite' => 'Visita il Sito',
29 | 'change' => 'cambia',
30 | 'showList' => 'Mostra la Lista',
31 | 'exportAsExcel' => 'Esporta in Excel',
32 | 'importData' => 'Importa Dati',
33 | 'deletePreviousData' => 'Cancella i Dati Precedenti',
34 | 'keepOverwriteData' => 'Mantieni i Dati Precedenti e Sovrascrivi le voci che coincidono',
35 | 'keepNotOverwriteData' => 'Mantieni i Dati Precedenti e non Sovrascrivere le voci che coincidono',
36 | 'close' => 'Chiudi',
37 | 'importDataSuccess' => 'I Dati sono stati importati con successo.',
38 | 'importDataFailure' => 'Importazione Dati fallita, per favore controlla che i dati siano validati.',
39 | 'successfullReset' => 'La tua password è stata resettata con successo!',
40 | 'successfullEditProfile' => 'Il tuo profilo è stato modificato con successo.'
41 | );
42 |
--------------------------------------------------------------------------------
/src/lang/nl/fields.php:
--------------------------------------------------------------------------------
1 | 'Instellingen',
5 | 'logout' => 'Log uit',
6 | 'ProfileEdit' => 'Bewerk profiel',
7 | 'Add' => 'Toevoegen',
8 | 'edit' => 'Bewerken',
9 | 'back' => 'Terug',
10 | 'search' => 'Zoeken',
11 | 'reset' => 'Reset',
12 | 'enterEmail' => 'Vul uw e-mailadres in',
13 | 'signIn' => 'Inloggen',
14 | 'forgetPassword' => 'Wachtwoord vergeten',
15 | 'rememberMe' => 'Onthoudt wachtwoord',
16 | 'login' => 'Login',
17 | 'sendReminder' => 'Verzend herinneringen',
18 | 'passwordNotCorrect' => 'Wachtwoord of gebruiksnaam is incorrect',
19 | 'FirstName' => 'Voornaam',
20 | 'LastName' => 'Achternaam',
21 | 'emailAddress' => 'e-mailadres',
22 | 'thankYouNote' => 'Bedankt voor het gebruiken van LaravelPanel.',
23 | 'updateProfile' => 'Bewerk profiel',
24 | 'currentPassword' => 'Huidig wachtwoord',
25 | 'password' => 'wachtwoord',
26 | 'email' => 'E-mailadres',
27 | 'rePassword' => 'Herhaal wachtwoord',
28 | 'resetPassword' => 'Reset wachtwoord',
29 | 'ChangePassword' => 'Verander wachtwoord',
30 | 'dashboard' => 'Dashboard',
31 | 'visiteSite' => 'Bezoek site',
32 | 'change' => 'wijzig',
33 | 'showList' => 'bekijk lijst',
34 | 'exportAsExcel' => 'Exporteer als Excel',
35 | 'importData' => 'Importeer gegevens',
36 | 'deletePreviousData' => 'Verwijder vorige gegevens',
37 | 'keepOverwriteData' => 'Verwijder vorige gegevens en overschrijf overeenkomende sleutels',
38 | 'keepNotOverwriteData' => 'Verwijder vorige gegevens en overschrijf overeenkomende sleutels NIET',
39 | 'close' => 'Sluiten',
40 | 'importDataSuccess' => 'Gegevens zijn succesvol geïmporteerd.',
41 | 'importDataFailure' => 'Gegevensimport is mislukt, controleer of de gegevens juist zijn.',
42 | 'successfullReset' => 'Uw wachtwoord is succesvol gewijzigd.',
43 | 'successfullEditProfile' => 'Uw profiel is succesvol gewijzigd.',
44 | 'permissionHelp' => 'Permissions work with urls, in order to using for ** http://Serverfire.net/panel/url/access ** , Url field should be : urlaccess .',
45 | 'roleHelp' => 'Rollen kunnen veel permissies hebben.',
46 | 'links_help' => "The 'Edit Links' form is used for adding a link in the sidebar menu of panel. The value of 'Display' field specifies the label of the link to be displayed in the menu and the value of 'Link' field specifies the name of the model.",
47 | 'dataSavedSuccessfull' => 'Awesome!, data saved, to save again with new data click on save.',
48 |
49 |
50 | );
51 |
--------------------------------------------------------------------------------
/src/lang/pl/fields.php:
--------------------------------------------------------------------------------
1 | 'Ustawienia',
5 | 'logout' => 'Wyloguj',
6 | 'ProfileEdit' => 'Edytuj Profil',
7 | 'ResetPassword' => 'Resetuj Hasło',
8 | 'Add' => 'DODAJ',
9 | 'edit' => 'Edytuj',
10 | 'search' => 'Szukaj',
11 | 'reset' => 'Resetuj',
12 | 'enterEmail' => 'Wpisz Adres Email',
13 | 'signIn' => 'Zaloguj się',
14 | 'forgetPassword' => 'Przypomnij Hasło',
15 | 'rememberMe' => 'Zapamiętaj Mnie',
16 | 'login' => 'Zaloguj',
17 | 'sendReminder' => 'Wyślij Przypomnienie',
18 | 'passwordNotCorrect' => 'Login lub hasło jest nie poprawne!!',
19 | 'FirstName' => 'Imię',
20 | 'LastName' => 'Nazwisko',
21 | 'updateProfile' => 'Aktualizuj Profil',
22 | 'currentPassword' => 'Obecne Hasło',
23 | 'password' => 'Hasło',
24 | 'email' => 'Email',
25 | 'rePassword' => 'Powtórz Hasło',
26 | 'resetPassword' => 'Resetuj Hasło',
27 | 'ChangePassword' => 'Zmień Hasło',
28 | 'dashboard' => 'Pulpit',
29 | 'visiteSite' => 'Przejdź do strony',
30 | 'change' => 'zmień',
31 | 'showList' => 'Pokaż Listę',
32 | 'exportAsExcel' => 'Eksportuj jako Excel',
33 | 'importData' => 'Importuj Dane',
34 | 'deletePreviousData' => 'Usuń Poprzednie Dane',
35 | 'keepOverwriteData' => 'Zachowaj Poprzednie Dane i Nadpisz Pasujące Klucze',
36 | 'keepNotOverwriteData' => 'Zachowaj Poprzednie Dane i Nie Nadpisuj Pasujących Kluczy',
37 | 'close' => 'Zamknij',
38 | 'importDataSuccess' => 'Dane zaimportowane poprawnie.',
39 | 'importDataFailure' => 'Import niepoprawny, proszę sprawdzić poprawność danych.',
40 | 'successfullReset' => 'Twoje hasło zostało zresetowane pomyślnie!',
41 | 'successfullEditProfile' => 'Twój profil został zmieniony pomyślnie.'
42 | );
43 |
--------------------------------------------------------------------------------
/src/lang/pt/fields.php:
--------------------------------------------------------------------------------
1 | 'Configurações',
5 | 'logout' => 'Sair',
6 | 'ProfileEdit' => 'Editar Perfil',
7 | 'Add' => 'Adicionar',
8 | 'edit' => 'Editar',
9 | 'search' => 'Pesquisar',
10 | 'reset' => 'Reset',
11 | 'enterEmail' => 'Por Favor Digite Seu Email',
12 | 'signIn' => 'Por Favor Faça Login',
13 | 'forgetPassword' => 'Esqueci Minha Senha',
14 | 'rememberMe' => 'Lembrar-me',
15 | 'login' => 'Login',
16 | 'sendReminder' => 'Enviar Lembrete',
17 | 'passwordNotCorrect' => 'Usuário ou Senha Incorretos!!',
18 | 'FirstName' => 'Nome',
19 | 'LastName' => 'Sobrenome',
20 | 'updateProfile' => 'Atualizar Perfil',
21 | 'currentPassword' => 'Senha Atual',
22 | 'password' => 'Senha',
23 | 'email' => 'Email',
24 | 'rePassword' => 'Confirmar Senha',
25 | 'resetPassword' => 'Resetar Senha',
26 | 'ChangePassword' => 'Alterar Senha',
27 | 'dashboard' => 'Dashboard',
28 | 'visiteSite' => 'Visitar Site',
29 | 'change' => 'Alterar',
30 | 'showList' => 'Mostrar Lista',
31 | 'exportAsExcel' => 'Exportar Como Excel',
32 | 'importData' => 'Importar Dados',
33 | 'deletePreviousData' => 'Deletar Dados Anteriores',
34 | 'keepOverwriteData' => 'Manter Dados Anteriores e Sobrescrever Chaves Iguais',
35 | 'keepNotOverwriteData' => 'Manter Dados Anteriores e Não Sobrescrever Chaves Iguais',
36 | 'close' => 'Fechar',
37 | 'importDataSuccess' => 'Dados importados com sucesso.',
38 | 'importDataFailure' => 'Falha ao importar dados, por favor verifique a validação das informações',
39 | 'successfullReset' => 'Senha resetada com sucesso!',
40 | 'successfullEditProfile' => 'Seu perfil foi alterado com sucesso.',
41 | );
42 |
--------------------------------------------------------------------------------
/src/lang/ru/fields.php:
--------------------------------------------------------------------------------
1 | 'Настройки',
5 | 'logout' => 'Выход',
6 | 'ProfileEdit' => 'Редактирование профиля',
7 | 'Add' => 'Добавить',
8 | 'edit' => 'Изменить',
9 | 'search' => 'Поиск',
10 | 'reset' => 'Сбросить',
11 | 'enterEmail' => 'Пожалуйста, введите E-mail',
12 | 'signIn' => 'Пожалуйста авторизуйтесь',
13 | 'forgetPassword' => 'Забыли пароль',
14 | 'rememberMe' => 'Запомнить меня',
15 | 'login' => 'Войти',
16 | 'sendReminder' => 'Отправить уведомление',
17 | 'passwordNotCorrect' => 'Неверное имя пользователя или пароль.',
18 | 'FirstName' => 'Имя',
19 | 'LastName' => 'Фамилия',
20 | 'updateProfile' => 'Изменить профиль',
21 | 'currentPassword' => 'Текущий пароль',
22 | 'password' => 'Пароль',
23 | 'email' => 'E-mail',
24 | 'rePassword' => 'Повторите пароль',
25 | 'resetPassword' => 'Сбросить пароль',
26 | 'ChangePassword' => 'Изменить пароль',
27 | 'dashboard' => 'Главная',
28 | 'visiteSite' => 'Перейти на сайт',
29 | 'change' => 'Изменить',
30 | 'showList' => 'Показать список',
31 | 'exportAsExcel' => 'Экспортировать в Excel',
32 | 'importData' => 'Импорт',
33 | 'deletePreviousData' => 'Удалить текущие данные',
34 | 'keepOverwriteData' => 'Оставить текущие данные и перезаписать совпадающие ключи.',
35 | 'keepNotOverwriteData' => 'Оставить текущие данные и НЕ перезаписывать совпадающие ключи.',
36 | 'close' => 'Закрыть',
37 | 'importDataSuccess' => 'Информация импортирована успешно.',
38 | 'importDataFailure' => 'Импорт не удался, пожалуйста перепроверьте входящие данные.',
39 | 'successfullReset' => 'Пароль успешно сброшен.',
40 | 'successfullEditProfile' => 'Профиль успешно изменен.'
41 | );
42 |
--------------------------------------------------------------------------------
/src/lang/uk/fields.php:
--------------------------------------------------------------------------------
1 | 'Налаштування',
5 | 'logout' => 'Вихід',
6 | 'ProfileEdit' => 'Редагування профілю',
7 | 'Add' => 'Додати',
8 | 'edit' => 'Змінити',
9 | 'back' => 'Назад',
10 | 'search' => 'Пошук',
11 | 'reset' => 'Скинути',
12 | 'enterEmail' => 'Будь ласка, введіть E-mail',
13 | 'signIn' => 'Будь ласка авторизуйтесь',
14 | 'forgetPassword' => 'Забули пароль',
15 | 'rememberMe' => 'Запам\'ятати мене',
16 | 'login' => 'Ввійти',
17 | 'sendReminder' => 'Надіслати повідомлення',
18 | 'passwordNotCorrect' => 'Неправильне ім\'я користувача або пароль.',
19 | 'FirstName' => 'Ім\'я',
20 | 'LastName' => 'Прізвище',
21 | 'emailAddress' => 'Адреса електронної пошти',
22 | 'thankYouNote' => 'Дякуємо Вам за використання LaravelPanel.',
23 | 'updateProfile' => 'Змінити профіль',
24 | 'currentPassword' => 'Поточний пароль',
25 | 'password' => 'Пароль',
26 | 'email' => 'E-mail',
27 | 'rePassword' => 'Повторіть пароль',
28 | 'resetPassword' => 'Скинути пароль',
29 | 'ChangePassword' => 'Змінити пароль',
30 | 'dashboard' => 'Головна',
31 | 'visiteSite' => 'Перейти на сайт',
32 | 'change' => 'Змінити',
33 | 'showList' => 'Показати список',
34 | 'exportAsExcel' => 'Експортувати в Excel',
35 | 'importData' => 'Імпорт',
36 | 'deletePreviousData' => 'Видалити поточні дані',
37 | 'keepOverwriteData' => 'Залишити поточні дані і перезаписати збігаються ключі.',
38 | 'keepNotOverwriteData' => 'Залишити поточні дані і НЕ перезаписувати збігаються ключі.',
39 | 'close' => 'Закрити',
40 | 'importDataSuccess' => 'Інформація імпортована успішно.',
41 | 'importDataFailure' => 'Імпорт не вдався, будь ласка перевірте вхідні дані.',
42 | 'successfullReset' => 'Пароль успішно скинуто.',
43 | 'successfullEditProfile' => 'Профіль успішно змінено.',
44 | 'permissionHelp' => 'Права доступу працюють з URL-адресами, для того, щоб, використовуючи для ** http://Serverfire.net/panel/url/access **, URL поле повинно бути: urlaccess.',
45 | 'roleHelp' => 'Роль може мати багато дозволів.',
46 | 'links_help' => "Форма 'Edit Links' використовується для додавання посилання в меню на бічній панелі панелі. Значення поля 'Display' вказує мітка посилання, яке буде відображатися в меню і значення поля 'Link' вказує ім'я моделі.",
47 | 'dataSavedSuccessfull' => 'Чудово!, Дані збережені, щоб знову зберегти нові дані натисніть на кнопку Зберегти.',
48 | );
49 |
--------------------------------------------------------------------------------
/src/models/AdminCanResetPassword.php:
--------------------------------------------------------------------------------
1 | email;
16 | }
17 |
18 | /**
19 | * Send the password reset notification.
20 | *
21 | * @param string $token
22 | * @return void
23 | */
24 | public function sendPasswordResetNotification($token)
25 | {
26 | $this->notify(new AdminResetPassword($token));
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/models/AdminResetPassword.php:
--------------------------------------------------------------------------------
1 | token = $token;
26 | }
27 |
28 | /**
29 | * Get the notification's channels.
30 | *
31 | * @param mixed $notifiable
32 | * @return array|string
33 | */
34 | public function via($notifiable)
35 | {
36 | return ['mail'];
37 | }
38 |
39 | /**
40 | * Build the mail representation of the notification.
41 | *
42 | * @param mixed $notifiable
43 | * @return \Illuminate\Notifications\Messages\MailMessage
44 | */
45 | public function toMail($notifiable)
46 | {
47 | return (new MailMessage)
48 | ->line('You are receiving this email because we received a password reset request for your account.')
49 | ->action('Reset Password', url('panel/password/reset', $this->token))
50 | ->line('If you did not request a password reset, no further action is required.');
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/models/EntityExport.php:
--------------------------------------------------------------------------------
1 | entity = $entity;
17 | }
18 |
19 | public function array(): array
20 | {
21 | $appHelper = new libs\AppHelper();
22 | $className = $appHelper->getModel($this->entity);
23 | $data = $className::all()->ToArray();
24 | $data= json_decode( json_encode($data), true);
25 | return $data;
26 | }
27 | public function headings(): array
28 | {
29 | $appHelper = new libs\AppHelper();
30 | $className = $appHelper->getModel($this->entity);
31 | $model = new $className;
32 | $tablePrefix = \DB::getTablePrefix();
33 | $table = $model->getTable();
34 | $columns = \Schema::getColumnListing($table);
35 | return (array)$columns;
36 | }
37 | }
--------------------------------------------------------------------------------
/src/models/HasRoles.php:
--------------------------------------------------------------------------------
1 | belongsToMany('Serverfireteam\Panel\Role');
15 | }
16 |
17 | /**
18 | * Assign the given role to the user.
19 | *
20 | * @param string $role
21 | * @return mixed
22 | */
23 | public function assignRole($role)
24 | {
25 | return $this->roles()->save(
26 | Role::whereName($role)->firstOrFail()
27 | );
28 | }
29 |
30 | /**
31 | * Determine if the user has the given role.
32 | *
33 | * @param mixed $role
34 | * @return boolean
35 | */
36 | public function hasRole($role)
37 | {
38 | if (is_string($role)) {
39 | return $this->roles->contains('name', $role);
40 | }
41 |
42 | return !! $role->intersect($this->roles)->count();
43 | }
44 |
45 | /**
46 | * Determine if the user may perform the given permission.
47 | *
48 | * @param Permission $permission
49 | * @return boolean
50 | */
51 | public function hasPermission($permission)
52 | {
53 | $permission = Permission::whereName($permission)->first();
54 | if (is_null($permission)){
55 | return false;
56 | }
57 | return $this->hasRole($permission->roles);
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/models/LinkSeeder.php:
--------------------------------------------------------------------------------
1 | take(1)->get();
16 | $admin = Link::where('url', '=', 'Admin')->take(1)->get();
17 | if ( isset($link) ){
18 | Link::where('url', '=', 'Link')->update(['main' => true]);
19 | Link::where('url', '=', 'Admin')->update(['main' => true]);
20 | } else {
21 | Serverfireteam\Panel\Link::create(array(
22 | 'display' => 'Links',
23 | 'url' => 'Link',
24 | 'main' => true,
25 | 'show_menu' => true
26 | ));
27 | Serverfireteam\Panel\Link::create(array(
28 | 'display' => 'Admins',
29 | 'url' => 'Admin',
30 | 'main' => true,
31 | 'show_menu' => true
32 | ));
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/models/ObservantTrait.php:
--------------------------------------------------------------------------------
1 | make($namespace));
14 | }
15 | }
--------------------------------------------------------------------------------
/src/models/Permission.php:
--------------------------------------------------------------------------------
1 | belongsToMany(Role::class);
20 | }
21 |
22 | public function getAndSave($name, $label){
23 | $this->name = $name;
24 | $this->label = $label;
25 | $this->save();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/models/Role.php:
--------------------------------------------------------------------------------
1 | belongsToMany(Permission::class);
17 | }
18 |
19 | /**
20 | * Grant the given permission to a role.
21 | *
22 | * @param Permission $permission
23 | * @return mixed
24 | */
25 | public function givePermissionTo(Permission $permission)
26 | {
27 | return $this->permissions()->save($permission);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/serverfireteam_panel.php:
--------------------------------------------------------------------------------
1 |
8 | {!! \Lang::get('panel::fields.exportAsExcel') !!}
9 |
10 | {!! \Lang::get('panel::fields.importData') !!}
11 |
12 |
13 |
42 |
43 | @if ($import_message)
44 |
45 | {{ $import_message }}
46 | @endif
47 |
48 | {!! $grid !!}
49 |
50 | @stop
51 |
--------------------------------------------------------------------------------
/src/views/configError.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::master')
2 | @section('bodyClass')
3 | dashboard
4 | @stop
5 | @section('body')
6 |
7 |
8 |
9 |
{{ $message }}
10 |
11 |
12 |
13 | @stop
--------------------------------------------------------------------------------
/src/views/createUser.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::mainTemplate')
2 | @section('page-wrapper')
3 |
4 | @if(Session::has('message'))
5 |
6 |
{{ Session::get('message') }}
7 |
8 | @endif
9 |
10 |
22 |
23 | @stop
24 |
25 |
--------------------------------------------------------------------------------
/src/views/dashboard.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::mainTemplate')
2 | @section('page-wrapper')
3 |
4 |
12 |
13 |
14 |
15 | @foreach (Serverfireteam\Panel\libs\dashboard::getItems() as $box)
16 |
17 |
18 |
19 |
20 |
21 | {{$box['title']}}
22 |
23 |
24 |
{{$box['count']}}
25 |
26 |
27 |
28 |
29 |
30 |
37 |
38 |
39 | @endforeach
40 |
41 |
42 |
43 |
48 |
49 |
62 | @stop
63 |
--------------------------------------------------------------------------------
/src/views/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::mainTemplate')
2 | @section('page-wrapper')
3 |
4 | @if ($helper_message)
5 |
6 |
7 |
{{ trans('rapyd::rapyd.help') }}
8 | {{ $helper_message }}
9 |
10 | @endif
11 |
12 |
13 | {!! $edit !!}
14 |
15 | @stop
16 |
--------------------------------------------------------------------------------
/src/views/editProfile.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @extends('panelViews::mainTemplate')
3 | @section('page-wrapper')
4 |
5 | @if (!empty($message))
6 |
7 |
{{ $message }}
8 |
9 | @endif
10 |
11 | @if ($demo_status == true)
12 | You are not allowed to edit the profile in demo version of panel.
13 | @else
14 |
15 |
16 |
17 |
18 | {!!
19 | Form::model($admin, array( $admin->id, 'files' => true))
20 | !!}
21 |
22 | {!! Form::label('first_name', \Lang::get('panel::fields.FirstName')) !!}
23 | {!! Form::text('first_name', $admin->first_name, array('class' => 'form-control')) !!}
24 |
25 | {!! Form::label('last_name', \Lang::get('panel::fields.LastName')) !!}
26 | {!! Form::text('last_name', $admin->last_name, array('class' => 'form-control')) !!}
27 |
28 |
29 | {!! Form::label('email', \Lang::get('panel::fields.email')) !!}
30 | {!! Form::email('email', $admin->email, array('class' => 'form-control')) !!}
31 |
32 | @if (!empty($admin->getAdminPicture()))
33 |
34 |
delete
35 | @else
36 |
37 | {!! Form::label('picture', \Lang::get('panel::fields.picture')) !!}
38 | {!! Form::file('picture') !!}
39 | @endif
40 |
41 |
42 | {!! Form::submit(\Lang::get('panel::fields.updateProfile'), array('class' => 'btn btn-primary')) !!}
43 |
44 | {!! Form::close() !!}
45 |
46 | @endif
47 |
48 |
49 |
50 |
51 | @stop
52 |
--------------------------------------------------------------------------------
/src/views/noController.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::master')
2 | @section('bodyClass')
3 | dashboard
4 | @stop
5 | @section('body')
6 |
7 |
8 | @if(Session::has('message'))
9 |
10 |
{{ Session::get('message') }}
11 |
12 | @endif
13 |
14 |
15 | @stop
--------------------------------------------------------------------------------
/src/views/passwordChange.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::mainTemplate')
2 | @section('page-wrapper')
3 |
4 | @if(Session::has('message'))
5 |
6 |
{{ Session::get('message') }}
7 |
8 | @endif
9 |
10 | @if ($demo_status == true)
11 | You are not allowed to change the password in demo version of panel.
12 | @else
13 |
14 |
30 |
31 | @endif
32 | @stop
33 |
--------------------------------------------------------------------------------
/src/views/passwordReminder.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @extends('panelViews::master')
3 | @section('bodyClass')
4 | login
5 | @stop
6 | @section('body')
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | @if($mesType=='error')
{{$message}}
@endif
16 | @if($mesType=='info')
{{$message}}
@endif
17 |
18 |
19 |
20 | {{ ($mesType=='message')?'
'.$message.' ':'' }}
21 |
22 |
23 |
24 |
25 |
26 |
37 |
38 |
39 |
40 |
41 |
42 | @stop
43 |
44 |
--------------------------------------------------------------------------------
/src/views/passwordReset.blade.php:
--------------------------------------------------------------------------------
1 | @extends('panelViews::master')
2 | @section('bodyClass')
3 | login
4 | @stop
5 | @section('body')
6 |
7 |
8 |
9 |
10 | @if(Session::get('mesType')=='error')
{{Session::get('message')}}
@endif
11 | @if(Session::get('mesType')=='info')
{{Session::get('message')}}
@endif
12 |
13 |
14 |
15 |
Enter New Password
16 |
17 |
18 |
19 |
20 |
21 |
37 |
38 |
39 |
40 |
41 |
42 | @stop
43 |
--------------------------------------------------------------------------------
/src/views/resetPassword.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Password Reset
8 |
9 |
10 | To reset your password, complete this form: {{ URL::to('/panel/password/reset', array($token)) }}.
11 | This link will expire in {{ Config::get('auth.reminder.expire', 60) }} minutes.
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | make('Illuminate\Contracts\Console\Kernel')->bootstrap();
20 |
21 | return $app;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------