Merge branch 'develop' into wip/laravel-5.9

This commit is contained in:
Ben Thomson 2020-01-18 21:00:40 +08:00
commit 5d3d4ad0b2
No known key found for this signature in database
GPG Key ID: B2BAFACC5ED68F87
107 changed files with 4280 additions and 397 deletions

3
.github/FUNDING.yml vendored
View File

@ -1,5 +1,4 @@
# These are supported funding model platforms
custom: ['https://octobercms.com/fundraising']
custom: ['https://octobercms.com/premium-support']
open_collective: octobercms
github: LukeTowers
patreon: LukeTowers

View File

@ -13,8 +13,16 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 30
days-before-close: 3
stale-issue-message: 'This issue will be closed and archived in 3 days, as there has been no activity in the last 30 days. If this issue is still relevant or you would like to see action on it, please respond and we will get the ball rolling.'
stale-pr-message: 'This pull request will be closed and archived in 3 days, as there has been no activity in the last 30 days. If this is still being worked on, please respond and we will re-open this pull request.'
stale-issue-message: >
This issue will be closed and archived in 3 days, as there has been no activity in the last 30 days.
- If this issue is still relevant or you would like to see it actioned, please respond and we will re-open this issue.
- If this issue is critical to your business, consider joining the [Premium Support Program](https://octobercms.com/premium-support) where a Service Level Agreement is offered.
stale-pr-message: >
This pull request will be closed and archived in 3 days, as there has been no activity in the last 30 days.
- If this is still being worked on, please respond and we will re-open this pull request.
- If this pull request is critical to your business, consider joining the [Premium Support Program](https://octobercms.com/premium-support) where a Service Level Agreement is offered.
stale-issue-label: 'Status: Archived'
stale-pr-label: 'Status: Archived'
exempt-issue-label: 'Status: In Progress'

View File

@ -13,7 +13,7 @@ jobs:
strategy:
max-parallel: 6
matrix:
phpVersions: ['7.1', '7.2', '7.3']
phpVersions: ['7.1', '7.2', '7.3', '7.4']
fail-fast: false
name: PHP ${{ matrix.phpVersions }}
steps:
@ -23,8 +23,9 @@ jobs:
uses: shivammathur/setup-php@master
with:
php-version: ${{ matrix.phpVersions }}
extension-csv: mbstring, intl, gd, xml, sqlite
- name: Install Composer dependencies
run: composer install --no-interaction --no-progress --no-suggest
run: composer install --no-interaction --no-progress --no-suggest --no-scripts
- name: Reset October modules and library
run: |
git reset --hard HEAD
@ -33,6 +34,10 @@ jobs:
unzip ./vendor/october/develop.zip -d ./vendor/october
mv ./vendor/october/library-develop ./vendor/october/rain
composer dump-autoload
- name: Run post-update Composer scripts
run: |
php artisan october:util set build
php artisan package:discover
- name: Run Linting and Tests
run: |
./vendor/bin/parallel-lint --exclude vendor --exclude storage --exclude tests/fixtures/plugins/testvendor/goto/Plugin.php .

View File

@ -14,16 +14,8 @@ jobs:
- name: Alert submitter
run: |
export ISSUE_NUMBER=$(echo '${{ github.ref }}' | cut -d'/' -f3)
curl -s --request POST \
--url https://api.github.com/repos/${{ github.repository }}/issues/${ISSUE_NUMBER}/comments \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
--data '{"body": "This pull request has been made to the wrong branch. Please review [the contributing guidelines](https://github.com/octobercms/october/blob/master/.github/CONTRIBUTING.md#making-a-pull-request) as all PRs need to be made to the `develop` branch.\n\nWe'\''ll fix it for you this time, but please ensure you make any future PRs to the `develop` branch, not the `master` branch."}' > /dev/null
curl -s --request POST --url https://api.github.com/repos/${{ github.repository }}/issues/${ISSUE_NUMBER}/comments --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' --header 'content-type: application/json' --data '{"body": "This pull request has been made to the wrong branch. Please review [the contributing guidelines](https://github.com/octobercms/october/blob/master/.github/CONTRIBUTING.md#making-a-pull-request) as all PRs need to be made to the `develop` branch.\n\nWe'\''ll fix it for you this time, but please ensure you make any future PRs to the `develop` branch, not the `master` branch."}' > /dev/null
- name: Change base branch
run: |
export ISSUE_NUMBER=$(echo '${{ github.ref }}' | cut -d'/' -f3)
curl -s --request PATCH \
--url https://api.github.com/repos/${{ github.repository }}/pulls/${ISSUE_NUMBER} \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
--data '{"base": "develop"}' > /dev/null
curl -s --request PATCH --url https://api.github.com/repos/${{ github.repository }}/pulls/${ISSUE_NUMBER} --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' --header 'content-type: application/json' --data '{"base": "develop"}' > /dev/null

View File

@ -2,7 +2,7 @@
<img src="https://github.com/octobercms/october/blob/master/themes/demo/assets/images/october.png?raw=true" alt="October" width="25%" height="25%" />
</p>
[October](https://octobercms.com) is a Content Management Framework (CMF) and web platform whose sole purpose is to make your development workflow simple again. It was born out of frustration with existing systems. We feel building websites has become a convoluted and confusing process that leaves developers unsatisfied. We want to turn you around to the simpler side and get back to basics.
[October](https://octobercms.com) is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of frustration with existing systems. We feel building websites has become a convoluted and confusing process that leaves developers unsatisfied. We want to turn you around to the simpler side and get back to basics.
October's mission is to show the world that web development is not rocket science.
@ -29,38 +29,24 @@ php artisan october:install
## Learning October
The best place to learn October is by [reading the documentation](https://octobercms.com/docs) or [following some tutorials](https://octobercms.com/support/articles/tutorials).
The best place to learn October is by [reading the documentation](https://octobercms.com/docs), [watching some screencasts](https://octobercms.com/support/topic/screencast) or [following some tutorials](https://octobercms.com/support/articles/tutorials).
You may also watch these introductory videos for [beginners](https://vimeo.com/79963873) and [advanced users](https://vimeo.com/172202661). There is also the excellent video series by [Watch & Learn](https://watch-learn.com/series/making-websites-with-october-cms).
## Contributing
Before sending a Pull Request, be sure to review the [Contributing Guidelines](.github/CONTRIBUTING.md) first.
### Help and support this project
You can also help the project by reviewing and testing open Pull Requests with the "**Status: Testing Needed**" tag.
[Read more...](https://github.com/octobercms/october/blob/master/.github/CONTRIBUTING.md#testing-pull-requests)
## Coding standards
Please follow the following guides and code standards:
* [PSR 4 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md)
* [PSR 2 Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
* [PSR 1 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
## Code of Conduct
In order to ensure that the OctoberCMS community is welcoming to all, please review and abide by the [Code of Conduct](CODE_OF_CONDUCT.md).
## Security Vulnerabilities
Please review [our security policy](https://github.com/octobercms/october/security/policy) on how to report security vulnerabilities.
You may also watch these introductory videos for [beginners](https://vimeo.com/79963873) and [advanced users](https://vimeo.com/172202661).
## Development Team
October was created by [Alexey Bobkov](http://ca.linkedin.com/pub/aleksey-bobkov/2b/ba0/232) and [Samuel Georges](https://www.linkedin.com/in/samuel-georges-0a964131/). The core maintainer is [Luke Towers](https://luketowers.ca/) and other maintainers include [Ben Thomson](https://github.com/bennothommo) and [Denis Denisov](https://github.com/w20k).
October was created by [Alexey Bobkov](https://www.linkedin.com/in/alexey-bobkov-232ba02b/) and [Samuel Georges](https://www.linkedin.com/in/samuel-georges-0a964131/), who both continue to develop the platform.
The maintenance of October is lead by [Luke Towers](https://luketowers.ca/), along with many wonderful people that dedicate their time to help support and grow the community.
<table>
<tr>
<td align="center"><a href="https://luketowers.ca/"><img src="https://avatars.githubusercontent.com/u/7253840?v=3" width="100px;" alt="Luke Towers"/><br /><sub><b>Luke Towers</b></sub></a></td>
<td align="center"><a href="https://github.com/bennothommo"><img src="https://avatars.githubusercontent.com/u/15900351?v=3" width="100px;" alt="Ben Thomson"/><br /><sub><b>Ben Thomson</b></sub></a></td>
<td align="center"><a href="https://github.com/w20k"><img src="https://avatars.githubusercontent.com/u/1053320?v=3" width="100px;" alt="Denis Denisov"/><br /><sub><b>Denis Denisov</b></sub></a></td>
<td align="center"><a href="https://github.com/mjauvin"><img src="https://avatars.githubusercontent.com/u/2013630?v=3" width="100px;" alt="Marc Jauvin"/><br /><sub><b>Marc Jauvin</b></sub></a></td>
</tr>
</table>
## Foundation library
@ -72,9 +58,33 @@ You can communicate with us using the following mediums:
* [Follow us on Twitter](https://twitter.com/octobercms) for announcements and updates.
* [Follow us on Facebook](https://facebook.com/octobercms) for announcements and updates.
* [Join us on Slack](https://octobercms-slack.herokuapp.com/) to chat with us.
* [Join us on IRC](https://octobercms.com/chat) to chat with us.
* [Join the Official Forum](https://octobercms.com/forum) to engage with the community.
* [Join us on Discord](https://octobercms.com/chat) to chat with us.
### Premium Support
October CMS can provide premium support for a monthly fee. Find out more via the [Premium Support Program](https://octobercms.com/premium-support).
## Contributing
Before sending or reviewing Pull Requests, be sure to review the [Contributing Guidelines](.github/CONTRIBUTING.md) first.
### Coding standards
Please follow the following guides and code standards:
* [PSR 4 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md)
* [PSR 2 Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
* [PSR 1 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
### Code of Conduct
In order to ensure that the October CMS community is welcoming to all, please review and abide by the [Code of Conduct](CODE_OF_CONDUCT.md).
## License
The OctoberCMS platform is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
The October CMS platform is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
## Security Vulnerabilities
Please review [our security policy](https://github.com/octobercms/october/security/policy) on how to report security vulnerabilities.

View File

@ -31,14 +31,14 @@
"source": "https://github.com/octobercms/october"
},
"require": {
"php": ">=7.0",
"php": ">=7.0.8",
"ext-mbstring": "*",
"ext-openssl": "*",
"october/rain": "~1.0",
"october/system": "~1.0",
"october/backend": "~1.0",
"october/cms": "~1.0",
"laravel/framework": "5.5.*",
"laravel/framework": "^5.5.40",
"wikimedia/composer-merge-plugin": "dev-master"
},
"require-dev": {
@ -71,7 +71,7 @@
"config": {
"preferred-install": "dist",
"platform": {
"php": "7.0"
"php": "7.0.8"
}
},
"minimum-stability": "dev",

View File

@ -44,12 +44,12 @@ return [
|--------------------------------------------------------------------------
|
| Use this setting to force a secure protocol when accessing any back-end
| pages, including the authentication pages. If set to null, this setting
| is enabled when debug mode (app.debug) is disabled.
| pages, including the authentication pages. This is usually handled by
| web server config, but can be handled by the app for added security.
|
*/
'backendForceSecure' => null,
'backendForceSecure' => false,
/*
|--------------------------------------------------------------------------

View File

@ -53,15 +53,17 @@ return [
],
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'port' => 3306,
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'driver' => 'mysql',
'engine' => 'InnoDB',
'host' => 'localhost',
'port' => 3306,
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'varcharmax' => 191,
],
'pgsql' => [

View File

@ -137,6 +137,19 @@ return [
'domain' => null,
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. You are free to modify this option if needed.
|
*/
'http_only' => true,
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies

View File

@ -115,8 +115,7 @@
.control-simplelist.is-selectable-box li a:hover .image >i {color:rgba(0,0,0,0.45)}
.list-preview .control-simplelist.is-selectable ul {margin-bottom:0}
.drag-noselect {-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
.control-scrollbar {position:relative;overflow:hidden;height:100%;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}
.control-scrollbar >div {-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}
.control-scrollbar {position:relative;overflow:hidden;height:100%}
.control-scrollbar >.scrollbar-scrollbar {position:absolute;z-index:100}
.control-scrollbar >.scrollbar-scrollbar .scrollbar-track {background-color:transparent;position:relative;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
.control-scrollbar >.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb {background-color:rgba(0,0,0,0.35);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer;overflow:hidden;position:absolute}

View File

@ -4,13 +4,13 @@
* Data attributes:
* - data-group-status-handler - AJAX handler to execute when an item is collapsed or expanded by a user
* - data-reorder-handler - AJAX handler to execute when items are reordered
*
*
* Events
* - open.oc.treeview - this event is triggered on the list element when an item is clicked.
*
*
* Dependences:
* - Tree list (october.treelist.js)
*
*
*/
+function ($) { "use strict";
var Base = $.oc.foundation.base,
@ -65,8 +65,11 @@
* Mark previously active item, if it was set
*/
var dataId = this.$el.data('oc.active-item')
if (dataId !== undefined)
if (dataId !== undefined) {
this.markActive(dataId)
}
this.$scrollbar.on('oc.scrollEnd', this.proxy(this.onScroll))
}
TreeView.prototype.dispose = function() {
@ -83,6 +86,7 @@
}
TreeView.prototype.unregisterHandlers = function() {
this.$scrollbar.off('oc.scrollEnd', this.proxy(this.onScroll))
this.$el.off('.treeview')
this.$el.off('move.oc.treelist', this.proxy(this.onNodeMove))
this.$el.off('aftermove.oc.treelist', this.proxy(this.onAfterNodeMove))
@ -163,9 +167,9 @@
TreeView.prototype.toggleGroup = function(group) {
var $group = $(group);
$group.attr('data-status') == 'expanded' ?
this.collapseGroup($group) :
this.expandGroup($group)
$group.attr('data-status') == 'expanded'
? this.collapseGroup($group)
: this.expandGroup($group)
}
TreeView.prototype.sendGroupStatusRequest = function($group, status) {
@ -229,7 +233,7 @@
}
// It seems the method is not used anymore as we re-create the control
// instead of updating it. Remove later if nothing weird is noticed.
// instead of updating it. Remove later if nothing weird is noticed.
// -ab Apr 26 2015
//
TreeView.prototype.update = function() {
@ -238,8 +242,9 @@
//this.initSortable()
var dataId = this.$el.data('oc.active-item')
if (dataId !== undefined)
if (dataId !== undefined) {
this.markActive(dataId)
}
}
TreeView.prototype.handleMovedNode = function() {
@ -250,11 +255,13 @@
}
TreeView.prototype.tweakCursorAdjustment = function(adjustment) {
if (!adjustment)
if (!adjustment) {
return adjustment
}
if (this.$scrollbar.length > 0)
if (this.$scrollbar.length > 0) {
adjustment.top -= this.$scrollbar.scrollTop()
}
return adjustment
}
@ -297,60 +304,84 @@
this.toggleGroup($(ev.currentTarget).closest('li'))
return false
}
// TREEVIEW SCROLL ON DRAG
// ============================
TreeView.prototype.onScroll = function () {
if (!$('body').hasClass('dragging')) {
return
}
var changed = this.lastScrollPos - this.$scrollbar.scrollTop()
this.$el.children('ol').each(function() {
var sortable = $(this).data('oc.sortable')
sortable.refresh()
sortable.cursorAdjustment.top += changed // Keep cursor adjustment in sync with scroll
});
this.dragCallback()
this.lastScrollPos = this.$scrollbar.scrollTop()
}
TreeView.prototype.onDrag = function ($item, position, _super, event) {
this.lastScrollPos = this.$scrollbar.scrollTop()
this.dragCallback = function() {
_super($item, position, null, event)
};
this.clearScrollTimeout()
this.dragCallback()
if (!this.$scrollbar || this.$scrollbar.length === 0)
return
if (position.top < 0)
if (position.top < 0) {
this.scrollOffset = -10 + Math.floor(position.top / 5)
else if (position.top > this.$scrollbar.height())
}
else if (position.top > this.$scrollbar.height()) {
this.scrollOffset = 10 + Math.ceil((position.top - this.$scrollbar.height()) / 5)
else
}
else {
return
this.scrollMax = function() {
return this.$el.height() - this.$scrollbar.height()
};
}
this.dragScroll()
}
TreeView.prototype.scrollMax = function() {
return this.$el.height() - this.$scrollbar.height()
}
TreeView.prototype.dragScroll = function() {
var startScrollTop = this.$scrollbar.scrollTop()
var changed
this.scrollTimeout = null
this.$scrollbar.scrollTop( Math.min(startScrollTop + this.scrollOffset, this.scrollMax()) )
this.$scrollbar.scrollTop(Math.min(startScrollTop + this.scrollOffset, this.scrollMax()))
changed = this.$scrollbar.scrollTop() - startScrollTop
if (changed === 0)
if (changed === 0) {
return
}
this.$el.children('ol').each(function() {
var sortable = $(this).data('oc.sortable')
sortable.refresh()
sortable.cursorAdjustment.top -= changed // Keep cursor adjustment in sync with scroll
});
this.dragCallback()
this.$scrollbar.data('oc.scrollbar').setThumbPosition() // Update scrollbar position
this.scrollTimeout = window.setTimeout(this.proxy(this.dragScroll), 100)
}
TreeView.prototype.clearScrollTimeout = function() {
if (this.scrollTimeout) {
window.clearTimeout(this.scrollTimeout)
@ -372,7 +403,7 @@
var options = $.extend({}, TreeView.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('oc.treeView', (data = new TreeView(this, options)))
if (typeof option == 'string' && data) {
if (typeof option == 'string' && data) {
var methodArgs = [];
for (var i=1; i<args.length; i++)
methodArgs.push(args[i])
@ -403,4 +434,4 @@
$('[data-control=treeview]').treeView()
})
}(window.jQuery);
}(window.jQuery);

View File

@ -12,11 +12,6 @@
position: relative;
overflow: hidden;
height: 100%;
.transform( ~'translateZ(0)');
> div {
.transform( ~'translateZ(0)');
}
>.scrollbar-scrollbar {
position: absolute;
@ -127,4 +122,4 @@ html.mobile {
}
}
}
}
}

View File

@ -629,7 +629,7 @@ class ImportExportController extends ControllerBehavior
$headers = [];
$columns = $widget->getVisibleColumns();
foreach ($columns as $column) {
$headers[] = Lang::get($column->label);
$headers[] = $widget->getHeaderValue($column);
}
$csv->insertOne($headers);

View File

@ -290,6 +290,10 @@ class RelationController extends ControllerBehavior
}
$this->controller->pageAction();
if ($fatalError = $this->controller->getFatalError()) {
throw new ApplicationException($fatalError);
}
$this->validateField();
$this->prepareVars();
$this->initialized = true;
@ -666,6 +670,7 @@ class RelationController extends ControllerBehavior
$config->recordsPerPage = $this->getConfig('view[recordsPerPage]');
$config->showCheckboxes = $this->getConfig('view[showCheckboxes]', !$this->readOnly);
$config->recordUrl = $this->getConfig('view[recordUrl]', null);
$config->customViewPath = $this->getConfig('view[customViewPath]', null);
$defaultOnClick = sprintf(
"$.oc.relationBehavior.clickViewListRecord(':%s', '%s', '%s')",
@ -706,8 +711,11 @@ class RelationController extends ControllerBehavior
});
}
else {
$widget->bindEvent('list.extendQueryBefore', function ($query) {
$widget->bindEvent('list.extendQueryBefore', function ($query) use ($widget) {
$this->relationObject->addDefinedConstraintsToQuery($query);
if ($widget->getSortColumn()) {
$query->getQuery()->orders = [];
}
});
}
@ -1183,6 +1191,9 @@ class RelationController extends ControllerBehavior
$relatedModel->delete();
}
// Reinitialise the form with a blank model
$this->initRelation($this->model);
$this->viewWidget->setFormValues([]);
$this->viewModel = $this->relationModel;
}
@ -1277,6 +1288,12 @@ class RelationController extends ControllerBehavior
if ($this->relationType == 'belongsTo') {
$this->relationObject->dissociate();
$this->relationObject->getParent()->save();
// If the relation manager isn't using deferred binding, reinitialise the form with a blank model
if (is_null($sessionKey)) {
$this->model->refresh();
$this->initRelation($this->model);
}
}
elseif ($this->relationType == 'hasOne' || $this->relationType == 'morphOne') {
if ($obj = $relatedModel->find($recordId)) {

View File

@ -242,8 +242,24 @@ class Controller extends ControllerBase
}
}
/*
* Extensibility
/**
* @event backend.page.beforeDisplay
* Provides an opportunity to override backend page content
*
* Example usage:
*
* Event::listen('backend.page.beforeDisplay', function ((\Backend\Classes\Controller) $backendController, (string) $action, (array) $params) {
* trace_log('redirect all backend pages to google');
* return \Redirect::to('https://google.com');
* });
*
* Or
*
* $backendController->bindEvent('page.beforeDisplay', function ((string) $action, (array) $params) {
* trace_log('redirect all backend pages to google');
* return \Redirect::to('https://google.com');
* });
*
*/
if ($event = $this->fireSystemEvent('backend.page.beforeDisplay', [$action, $params])) {
return $event;
@ -261,6 +277,7 @@ class Controller extends ControllerBase
if ($ajaxResponse = $this->execAjaxHandlers()) {
$result = $ajaxResponse;
}
/*
* Execute postback handler
*/
@ -271,6 +288,7 @@ class Controller extends ControllerBase
) {
$result = $handlerResponse;
}
/*
* Execute page action
*/

View File

@ -27,6 +27,11 @@ class FormTabs implements IteratorAggregate, ArrayAccess
*/
public $fields = [];
/**
* @var array Names of tabs to lazy load.
*/
public $lazy = [];
/**
* @var string Default tab label to use when none is specified.
*/
@ -106,6 +111,10 @@ class FormTabs implements IteratorAggregate, ArrayAccess
if (array_key_exists('paneCssClass', $config)) {
$this->paneCssClass = $config['paneCssClass'];
}
if (array_key_exists('lazy', $config)) {
$this->lazy = $config['lazy'];
}
}
/**

View File

@ -100,8 +100,18 @@ class NavigationManager
$this->registerMenuItems($id, $items);
}
/*
* Extensibility
/**
* @event backend.menu.extendItems
* Provides an opportunity to manipulate the backend navigation
*
* Example usage:
*
* Event::listen('backend.menu.extendItems', function ((\Backend\Classes\NavigationManager) $navigationManager) {
* $navigationManager->addMainMenuItems(...)
* $navigationManager->addSideMenuItems(...)
* $navigationManager->removeMainMenuItem(...)
* });
*
*/
Event::fire('backend.menu.extendItems', [$this]);

View File

@ -98,7 +98,7 @@ class Repeater extends FormWidgetBase
public function init()
{
$this->prompt = Lang::get('backend::lang.repeater.add_new_item');
$this->fillFromConfig([
'form',
'prompt',
@ -404,15 +404,15 @@ class Repeater extends FormWidgetBase
if ($this->alias === $widgetName) {
// This repeater has made the AJAX request
self::$onAddItemCalled = true;
} else if (strpos($widgetName, $this->alias) === 0) {
} else if (strpos($widgetName, $this->alias . 'Form') === 0) {
// A child repeater has made the AJAX request
// Get index from AJAX handler
$handlerSuffix = str_replace($this->alias . 'Form', '', $widgetName);
preg_match('/^[0-9]+/', $handlerSuffix, $matches);
$this->childAddItemCalled = true;
$this->childIndexCalled = (int) $matches[0];
if (preg_match('/^[0-9]+/', $handlerSuffix, $matches)) {
$this->childAddItemCalled = true;
$this->childIndexCalled = (int) $matches[0];
}
}
}

View File

@ -104,6 +104,7 @@
previewsContainer: this.$filesContainer.get(0),
maxFiles: !this.options.isMulti ? 1 : null,
maxFilesize: this.options.maxFilesize,
timeout: 0,
headers: {}
}

View File

@ -28,7 +28,7 @@
class="btn btn-default clear-record"
data-request="<?= $this->getEventHandler('onClearRecord') ?>"
data-request-confirm="<?= e(trans('backend::lang.form.action_confirm')) ?>"
data-request-success="$('#<?= $field->getId() ?>').trigger('change')"
data-request-success="var $locker = $('#<?= $field->getId() ?>'); $locker.val(''); $locker.trigger('change')"
aria-label="Remove">
<i class="icon-times"></i>
</button>

View File

@ -0,0 +1,280 @@
/*!
* froala_editor v2.9.3 (https://www.froala.com/wysiwyg-editor)
* License https://froala.com/wysiwyg-editor/terms/
* Copyright 2014-2019 Froala Labs
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof module === 'object' && module.exports) {
// Node/CommonJS
module.exports = function( root, jQuery ) {
if ( jQuery === undefined ) {
// require('jQuery') returns a factory that requires window to
// build a jQuery instance, we normalize how we use modules
// that require this pattern but the window provided is a noop
// if it's defined (how jquery works)
if ( typeof window !== 'undefined' ) {
jQuery = require('jquery');
}
else {
jQuery = require('jquery')(root);
}
}
return factory(jQuery);
};
} else {
// Browser globals
factory(window.jQuery);
}
}(function ($) {
/**
* Slovenian
*/
$.FE.LANGUAGE['sl'] = {
translation: {
// Place holder
"Type something": "Nekaj vtipkajte",
// Basic formatting
"Bold": "Krepko",
"Italic": "Poševno",
"Underline": "Podčrtano",
"Strikethrough": "Prečrtano",
// Main buttons
"Insert": "Vstavi",
"Delete": "Izbriši",
"Cancel": "Prekliči",
"OK": "OK",
"Back": "Nazaj",
"Remove": "Odstrani",
"More": "Več",
"Update": "Posodobi",
"Style": "Slog",
// Font
"Font Family": "Oblika pisave",
"Font Size": "Velikost pisave",
// Colors
"Colors": "Barve",
"Background": "Ozadje",
"Text": "Besedilo",
"HEX Color": "HEX barva",
// Paragraphs
"Paragraph Format": "Oblika odstavka",
"Normal": "Normalno",
"Code": "Koda",
"Heading 1": "Naslov 1",
"Heading 2": "Naslov 2",
"Heading 3": "Naslov 3",
"Heading 4": "Naslov 4",
// Style
"Paragraph Style": "Slog odstavka",
"Inline Style": "Vrstični slog",
// Alignment
"Align": "Poravnava",
"Align Left": "Leva poravnava",
"Align Center": "Sredinska poravnava",
"Align Right": "Desna poravnava",
"Align Justify": "Obojestranska poravnava",
"None": "Brez poravnave",
// Lists
"Ordered List": "Številčni seznam",
"Default": "Privzeto",
"Lower Alpha": "Latinica male",
"Lower Greek": "Grške male",
"Lower Roman": "Rimske male",
"Upper Alpha": "Latinica velike",
"Upper Roman": "Rimske velike",
"Unordered List": "Neštevilčni seznam",
"Circle": "Krog",
"Disc": "Disk",
"Square": "Kvadrat",
// Line height
"Line Height": "Višina vrstice",
"Single": "Enojna",
"Double": "Dvojna",
// Indent
"Decrease Indent": "Zmanjšaj zamik",
"Increase Indent": "Povečaj zamik",
// Links
"Insert Link": "Vstavi povezavo",
"Open in new tab": "Odpri povezavo v novem zavihku",
"Open Link": "Odpri povezavo",
"Edit Link": "Uredi povezavo",
"Unlink": "Odstrani povezavo",
"Choose Link": "Izberi povezavo",
// Images
"Insert Image": "Vstavi sliko",
"Upload Image": "Naloži sliko",
"By URL": "Iz URL povezave",
"Browse": "Prebrskaj",
"Drop image": "Spustite sliko sem",
"or click": "ali kliknite",
"Manage Images": "Urejaj slike",
"Loading": "Nalaganje",
"Deleting": "Brisanje",
"Tags": "Značke",
"Are you sure? Image will be deleted.": "Ali ste prepričani? Slika bo izbrisana.",
"Replace": "Zamenjaj",
"Uploading": "Nalaganje",
"Loading image": "Nalagam sliko",
"Display": "Prikaži",
"Inline": "Vrstično",
"Break Text": "Prelomi besedilo",
"Alternative Text": "Nadomestno besedilo",
"Change Size": "Spremeni velikost",
"Width": "Širina",
"Height": "Višina",
"Something went wrong. Please try again.": "Nekaj je šlo narobe. Prosimo, poskusite ponovno.",
"Image Caption": "Opis slike",
"Advanced Edit": "Napredno urejanje",
// Video
"Insert Video": "Vstavi video posnetek",
"Embedded Code": "Vdelana koda",
"Paste in a video URL": "Prilepite URL video posnetka",
"Drop video": "Spustite video posnetek sem",
"Your browser does not support HTML5 video.": "Vaš brskalnik ne podpira HTML5 video funkcionalnosti.",
"Upload Video": "Naloži video posnetek",
// Tables
"Insert Table": "Vstavi tabelo",
"Table Header": "Glava tabele",
"Remove Table": "Odstrani tabelo",
"Table Style": "Slog tabele",
"Horizontal Align": "Horizontalna poravnava",
"Row": "Vrstica",
"Insert row above": "Vstavi vrstico nad",
"Insert row below": "Vstavi vrstico pod",
"Delete row": "Izbriši vrstico",
"Column": "Stolpec",
"Insert column before": "Vstavi stolpec pred",
"Insert column after": "Vstavi stolpec po",
"Delete column": "Izbriši stolpec",
"Cell": "Celica",
"Merge cells": "Združi celice",
"Horizontal split": "Horizontalni razcep",
"Vertical split": "Vertikalni razcep",
"Cell Background": "Ozadje celice",
"Vertical Align": "Vertikalna poravnava",
"Top": "Vrh",
"Middle": "Sredina",
"Bottom": "Dno",
"Align Top": "Vrhnja poravnava",
"Align Middle": "Sredinska poravnava",
"Align Bottom": "Spodnja poravnava",
"Cell Style": "Slog celice",
// Files
"Upload File": "Naloži datoteko",
"Drop file": "Spustite datoteko sem",
// Emoticons
"Emoticons": "Emotikoni",
// Line breaker
"Break": "Prelom",
// Math
"Subscript": "Podpisano",
"Superscript": "Nadpisano",
// Full screen
"Fullscreen": "Celozaslonski način",
// Horizontal line
"Insert Horizontal Line": "Vstavi vodoravno črto",
// Clear formatting
"Clear Formatting": "Počisti oblikovanje",
// Save
"Save": "Shrani",
// Undo, redo
"Undo": "Razveljavi",
"Redo": "Ponovno uveljavi",
// Select all
"Select All": "Izberi vse",
// Code view
"Code View": "Pogled kode",
// Quote
"Quote": "Citat",
"Increase": "Povečaj",
"Decrease": "Zmanjšaj",
// Quick Insert
"Quick Insert": "Hitro vstavljanje",
// Special Characters
"Special Characters": "Posebni znaki",
"Latin": "Latinica",
"Greek": "Grščina",
"Cyrillic": "Cirilica",
"Punctuation": "Ločila",
"Currency": "Valute",
"Arrows": "Puščice",
"Math": "Matematika",
"Misc": "Razno",
// Print.
"Print": "Natisni",
// Spell Checker.
"Spell Checker": "Črkovalnik",
// Help
"Help": "Pomoč",
"Shortcuts": "Bližnjice",
"Inline Editor": "Vdelani urejevalnik",
"Show the editor": "Pokaži urejevalnik",
"Common actions": "Skupna dejanja",
"Copy": "Kopiraj",
"Cut": "Izreži",
"Paste": "Prilepi",
"Basic Formatting": "Osnovno oblikovanje",
"Increase quote level": "Povečaj raven citata",
"Decrease quote level": "Zmanjšaj raven citata",
"Image / Video": "Slika / Video",
"Resize larger": "Povečaj",
"Resize smaller": "Pomanjšaj",
"Table": "Tabela",
"Select table cell": "Izberi celico tabele",
"Extend selection one cell": "Razširi izbor za eno celico",
"Extend selection one row": "Razširi izbor za eno vrstico",
"Navigation": "Navigacija",
"Focus popup / toolbar": "Fokusiraj pojavno okno / orodno vrstico",
"Return focus to previous position": "Vrni fokus v prejšnji položaj",
// Embed.ly
"Embed URL": "Vdelaj URL",
"Paste in a URL to embed": "Prilepite URL za vdelavo",
// Word Paste.
"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?": "Prilepljena vsebina prihaja iz dokumenta Microsoft Word. Ali želite obliko obdržati ali jo želite očistiti?",
"Keep": "Obdrži",
"Clean": "Počisti",
"Word Paste Detected": "Zaznano je lepljenje s programa Word"
},
direction: "ltr"
};
}));

View File

@ -0,0 +1,628 @@
<?php
return [
'auth' => [
'title' => 'Nadzorna plošča',
'invalid_login' => 'Podatki, ki ste jih vnesli, se ne ujemajo z našimi zapisi. Prosimo, ponovno preverite podatke in poskusite znova.',
],
'field' => [
'invalid_type' => 'Uporabljen je neveljaven tip polja :type.',
'options_method_invalid_model' => "Atribut ':field' ne ustreza veljavnemu modelu. Poskusite natančno določiti možnosti metode za model :model.",
'options_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača možnosti za polje ':field' na obrazcu.",
'colors_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača HTML barvne kode v HEX formatu za polje ':field' na obrazcu.",
],
'widget' => [
'not_registered' => "Ime vtičnika ':name' ni bilo registrirano",
'not_bound' => "Vtičnik z imenom ':name' ni vezan na kontroler",
],
'page' => [
'untitled' => 'Brez naslova',
'404' => [
'label' => 'Stran ne obstaja',
'help' => 'Kljub intenzivnemu iskanju, zahtevanega URL-ja preprosto ni mogoče najti. Ste morda iskali kaj drugega?',
'back_link' => 'Vrni se na prejšnjo stran',
],
'access_denied' => [
'label' => 'Dostop zavrnjen',
'help' => 'Nimate potrebnih dovoljenj za ogled te strani.',
'cms_link' => 'Vrni se v administracijo',
],
'no_database' => [
'label' => 'Podatkovna zbirka manjka',
'help' => 'Za dostop do administracije je potrebna podatkovna zbirka. Preverite, če je podatkovna zbirka pravilno nastavljena in če so bile migracije pognane ter poskusite ponovno.',
'cms_link' => 'Vrni se na domačo stran',
],
],
'partial' => [
'not_found_name' => "Predloge ':name' ni mogoče najti.",
'invalid_name' => 'Neveljavno ime predloge: :name.',
],
'ajax_handler' => [
'invalid_name' => 'Neveljavno ime AJAX akcije: :name.',
'not_found' => "Ni mogoče najti AJAX akcije ':name'.",
],
'account' => [
'impersonate' => 'Oponašaj uporabnika',
'impersonate_confirm' => 'Ali ste prepričani, da želite oponašati tega uporabnika? V prvotno stanje se lahko vrnete tako, da se odjavite.',
'impersonate_success' => 'Sedaj oponašate tega uporabnika',
'impersonate_working' => 'Oponašam...',
'impersonating' => 'Oponašanje :full_name',
'stop_impersonating' => 'Prekliči oponašanje',
'signed_in_as' => 'Prijavljen kot :full_name',
'sign_out' => 'Odjava',
'login' => 'Prijava',
'reset' => 'Ponastavi',
'restore' => 'Obnovi',
'login_placeholder' => 'uporabniško ime',
'password_placeholder' => 'geslo',
'remember_me' => 'Ostanite prijavljeni',
'forgot_password' => 'Ste pozabili svoje geslo?',
'enter_email' => 'Vnesite svoj e-poštni naslov',
'enter_login' => 'Vnesite svoje uporabniško ime',
'email_placeholder' => 'e-pošta',
'enter_new_password' => 'Vnesite novo geslo',
'password_reset' => 'Ponastavitev gesla',
'restore_success' => 'Na vaš e-poštni naslov je bilo poslano sporočilo z navodili.',
'restore_error' => "Uporabnika z uporabniškim imenom ':login' ni mogoče najti.",
'reset_success' => 'Geslo je bilo ponastavljeno. Sedaj se lahko prijavite.',
'reset_error' => 'Posredovani so bili neveljavni podatki za ponastavitev gesla. Prosimo, poskusite znova!',
'reset_fail' => 'Gesla ni bilo mogoče ponastaviti!',
'apply' => 'Sprejmi',
'cancel' => 'Prekliči',
'delete' => 'Izbriši',
'ok' => 'OK',
],
'dashboard' => [
'menu_label' => 'Nadzorna plošča',
'widget_label' => 'Vtičnik',
'widget_width' => 'Širina',
'full_width' => 'Celotna širina',
'manage_widgets' => 'Upravljanje vtičnikov',
'add_widget' => 'Dodaj vtičnik',
'widget_inspector_title' => 'Nastavitve vtičnika',
'widget_inspector_description' => 'Nastavitve prikaza vtičnika',
'widget_columns_label' => 'Širina :columns',
'widget_columns_description' => 'Širina vtičnika, število med 1 in 10.',
'widget_columns_error' => 'Prosimo, vnesite širino vtičnika v obliki števila med 1 in 10.',
'columns' => '{1} stolpec|{2} stolpca|[3,4] stolpci|[5,Inf] stolpcev',
'widget_new_row_label' => 'Vsili novo vrstico',
'widget_new_row_description' => 'Postavi vtičnik v novo vrstico',
'widget_title_label' => 'Naslov vtičnika',
'widget_title_error' => 'Potreben je vnos naslova vtičnika.',
'reset_layout' => 'Ponastavi postavitev',
'reset_layout_confirm' => 'Želite postavitev ponastaviti nazaj na privzeto obliko?',
'reset_layout_success' => 'Postavitev je bila ponastavljena',
'make_default' => 'Nastavi za privzeto',
'make_default_confirm' => 'Želite trenutno postavitev nastaviti za privzeto?',
'make_default_success' => 'Trenutna postavitev je nastavljena kot privzeta',
'collapse_all' => 'Strni vse',
'expand_all' => 'Razširi vse',
'status' => [
'widget_title_default' => 'Status sistema',
'update_available' => '[0,1] posodobitev na voljo!|{2} posodobitvi na voljo!|[3,4] posodobitve na voljo!|[5,Inf] posodobitev na voljo!',
'updates_pending' => 'Posodobitev programske opreme je na voljo',
'updates_nil' => 'Programska oprema je posodobljena',
'updates_link' => 'Posodobi',
'warnings_pending' => 'Nekatere težave potrebujejo vašo pozornost',
'warnings_nil' => 'Ni opozoril za prikaz',
'warnings_link' => 'Prikaži',
'core_build' => 'Različica sistema',
'event_log' => 'Dnevnik dogodkov',
'request_log' => 'Dnevnik zahtev',
'app_birthday' => 'Na spletu od',
],
'welcome' => [
'widget_title_default' => 'Dobrodošli!',
'welcome_back_name' => 'Dobrodošli nazaj v :app, :name.',
'welcome_to_name' => 'Dobrodošli v :app, :name.',
'first_sign_in' => 'To je vaša prva prijava.',
'last_sign_in' => 'Vaša zadnja prijava je zabeležena.',
'view_access_logs' => 'Prikaži dnevnik prijav',
'nice_message' => 'Imejte lep dan!',
],
],
'user' => [
'name' => 'Administrator',
'menu_label' => 'Administratorji',
'menu_description' => 'Upravljanje z administratorji, skupinami in dovoljenji.',
'list_title' => 'Upravljanje administratorjev',
'new' => 'Nov administrator',
'login' => 'Uporabniško ime',
'first_name' => 'Ime',
'last_name' => 'Priimek',
'full_name' => 'Polno ime',
'email' => 'E-poštni naslov',
'role_field' => 'Vloga',
'role_comment' => 'Vloge določajo uporabniška dovoljenja, ki jih je možno spremeniti na ravni uporabnika, na zavihku Dovoljenja.',
'groups' => 'Skupine',
'groups_comment' => 'Določite, katerim skupinam pripada ta uporabniški račun.',
'avatar' => 'Avatar',
'password' => 'Geslo',
'password_confirmation' => 'Potrdite geslo',
'permissions' => 'Dovoljenja',
'account' => 'Uporabniški račun',
'superuser' => 'Super administrator',
'superuser_comment' => 'Temu uporabniškemu računu omogoča neomejen dostop do vseh področij sistema. Super administrator lahko dodaja in upravlja druge uporabnike.',
'send_invite' => 'Pošlji vabilo po e-pošti',
'send_invite_comment' => 'Pošlje pozdravno e-poštno sporočilo s podatki o uporabniškem imenu in geslu.',
'delete_confirm' => 'Želite izbrisati tega administratorja?',
'return' => 'Vrni se na seznam administratorjev',
'allow' => 'Dovoli',
'inherit' => 'Podeduj',
'deny' => 'Ne dovoli',
'activated' => 'Aktiviran',
'last_login' => 'Zadnja prijava',
'created_at' => 'Ustvarjen',
'updated_at' => 'Posodobljen',
'deleted_at' => 'Izbrisan',
'show_deleted' => 'Prikaži izbrisane',
'group' => [
'name' => 'Skupina',
'name_field' => 'Ime',
'name_comment' => 'Ime je prikazano na seznamu skupin na administratorskem obrazcu.',
'description_field' => 'Opis',
'is_new_user_default_field_label' => 'Privzeta skupina',
'is_new_user_default_field_comment' => 'Nove administratorje vedno vključi v to skupino.',
'code_field' => 'Koda',
'code_comment' => 'Vnesite unikatno kodo, če želite dostopati do objekta skupine preko API klica.',
'menu_label' => 'Upravljanje s skupinami',
'list_title' => 'Upravljanje s skupinami',
'new' => 'Nova skupina',
'delete_confirm' => 'Želite odstraniti to administratorsko skupino?',
'return' => 'Vrni se na seznam skupin',
'users_count' => 'Uporabniki',
],
'role' => [
'name' => 'Vloga ',
'name_field' => 'Ime',
'name_comment' => 'Ime je prikazano na seznamu vlog na administratorskem obrazcu.',
'description_field' => 'Opis',
'code_field' => 'Koda',
'code_comment' => 'Vnesite unikatno kodo, če želite dostopati do objekta vloge preko API klica.',
'menu_label' => 'Upravljanje z vlogami',
'list_title' => 'Upravljanje z vlogami',
'new' => 'Nova vloga',
'delete_confirm' => 'Želite odstraniti to administratorsko vlogo?',
'return' => 'Vrni se na seznam vlog',
'users_count' => 'Uporabniki',
],
'preferences' => [
'not_authenticated' => 'Ni overjenega uporabnika, za katerega bi lahko naložili ali shranili nastavitve.',
],
'trashed_hint_title' => 'Ta uporabniški račun je bil izbrisan',
'trashed_hint_desc' => 'Ta uporabniški račun je bil izbrisan in prijava z njim ni več mogoča. Če ga želite obnoviti, kliknite ikono za obnovitev uporabnika v spodnjem desnem kotu',
],
'list' => [
'default_title' => 'Seznam',
'search_prompt' => 'Iskanje...',
'no_records' => 'Ni najdenih zapisov.',
'missing_model' => 'Seznam, uporabljen v :class, nima definiranega modela.',
'missing_column' => 'Manjkajo definicije stolpcev za stolpce :columns.',
'missing_columns' => 'Seznam, uporabljen v :class, nima definiranih stolpcev seznama.',
'missing_definition' => "Seznam ne vsebuje stolpca za ':field'.",
'missing_parent_definition' => "Seznam ne vsebuje definicije za ':definition'.",
'behavior_not_ready' => 'Seznam se ni inicializiral. Preverite, ali ste v kontrolerju poklicali metodo makeLists().',
'invalid_column_datetime' => "Vrednost stolpca ':column' ni DateTime objekt. Preverite, ali imate v vašem Modelu definirano referenco \$dates.",
'pagination' => 'Prikazani zapisi: :from-:to od :total',
'first_page' => 'Prva stran',
'last_page' => 'Zadnja stran',
'prev_page' => 'Prejšnja stran',
'next_page' => 'Naslednja stran',
'refresh' => 'Osveži',
'updating' => 'Posodabljanje...',
'loading' => 'Nalaganje...',
'setup_title' => 'Nastavitve seznama',
'setup_help' => 'Izberite stolpce, ki jih želite prikazati na seznamu. Položaj stolpcev lahko spremenite tako, da jih povlečete gor ali dol.',
'records_per_page' => 'Število zapisov na strani',
'records_per_page_help' => 'Izberite koliko zapisov želite prikazati na eni strani. Upoštevajte, da lahko večje število zapisov na eni strani zmanjša hitrost delovanja.',
'check' => 'Označi',
'delete_selected' => 'Izbriši izbrano',
'delete_selected_empty' => 'Ni izbranih zapisov za izbris.',
'delete_selected_confirm' => 'Želite izbrisati izbrane zapise?',
'delete_selected_success' => 'Izbrani zapisi so izbrisani.',
'column_switch_true' => 'Da',
'column_switch_false' => 'Ne',
],
'fileupload' => [
'attachment' => 'Priponka',
'help' => 'Dodajte naslov in opis za to priponko.',
'title_label' => 'Naslov',
'description_label' => 'Opis',
'default_prompt' => 'Če želite naložiti datoteko, kliknite %s ali povlecite datoteko v to polje',
'attachment_url' => 'URL priloge',
'upload_file' => 'Naloži datoteko',
'upload_error' => 'Napaka pri nalaganju',
'remove_confirm' => 'Ali ste prepričani?',
'remove_file' => 'Odstrani datoteko',
],
'repeater' => [
'add_new_item' => 'Dodaj nov element',
'min_items_failed' => ':name zahteva najmanj :min elementov, zagotovljenih je le :items elementov',
'max_items_failed' => ':name dovoli največ :max elementov, :items elementov je bilo podanih',
],
'form' => [
'create_title' => 'Ustvari element ":name"',
'update_title' => 'Uredi element ":name"',
'preview_title' => 'Predogled elementa ":name"',
'create_success' => 'Element ":name" je ustvarjen',
'update_success' => 'Element ":name" je posodobljen',
'delete_success' => 'Element ":name" je izbrisan',
'restore_success' => 'Element ":name" je obnovljen',
'reset_success' => 'Ponastavitev je zaključena',
'missing_id' => 'ID obrazca ni bil določen.',
'missing_model' => 'Obrazec, uporabljen v :class, nima definiranega modela.',
'missing_definition' => "Obrazec ne vsebuje stolpca za ':field'.",
'not_found' => 'Obrazca z ID-jem :id ni mogoče najti.',
'action_confirm' => 'Ali ste prepričani?',
'create' => 'Ustvari',
'create_and_close' => 'Ustvari in zapri',
'creating' => 'Ustvarjanje...',
'creating_name' => 'Ustvarjanje :name...',
'save' => 'Shrani',
'save_and_close' => 'Shrani in zapri',
'saving' => 'Shranjevanje...',
'saving_name' => 'Shranjevanje :name...',
'delete' => 'Izbriši',
'deleting' => 'Brisanje...',
'confirm_delete' => 'Želite izbrisati zapis?',
'confirm_delete_multiple' => 'Želite izbrisati izbrane zapise?',
'deleting_name' => 'Brisanje :name...',
'restore' => 'Obnovi',
'restoring' => 'Obnavljanje',
'confirm_restore' => 'Ali ste prepričani, da želite obnoviti ta zapis?',
'reset_default' => 'Ponastavi na privzeto',
'resetting' => 'Ponastavljanje',
'resetting_name' => 'Ponastavljanje :name',
'undefined_tab' => 'Razno',
'field_off' => 'Ne',
'field_on' => 'Da',
'add' => 'Dodaj',
'apply' => 'Uporabi',
'cancel' => 'Prekliči',
'close' => 'Zapri',
'confirm' => 'Potrdi',
'reload' => 'Ponovno naloži',
'complete' => 'Zaključi',
'ok' => 'OK',
'or' => 'ali',
'confirm_tab_close' => 'Zaprem zavihek? Neshranjene spremembe bodo izgubljene.',
'behavior_not_ready' => 'Obrazec se ni inicializiral. Preverite, ali ste v kontrolerju poklicali metodo initForm().',
'preview_no_files_message' => 'Ni naloženih datotek.',
'preview_no_media_message' => 'Ni izbranih media datotek.',
'preview_no_record_message' => 'Ni izbranih zapisov.',
'select' => 'Izberi',
'select_all' => 'vse',
'select_none' => 'nobenega',
'select_placeholder' => 'izberite',
'insert_row' => 'Vstavi vrstico',
'insert_row_below' => 'Vstavi vrstico spodaj',
'delete_row' => 'Izbriši vrstico',
'concurrency_file_changed_title' => 'Datoteka je bila spremenjena',
'concurrency_file_changed_description' => 'Datoteka, ki jo urejate, je bila spremenjena s strani drugega uporabnika. Datoteko lahko znova naložite in izgubite vaše spremembe ali pa jo prepišete s svojimi spremembami.',
'return_to_list' => 'Vrni se na seznam',
],
'recordfinder' => [
'find_record' => 'Poišči zapis',
'invalid_model_class' => 'Model ":modelClass", podan za iskalnik zapisov, je neveljaven',
'cancel' => 'Prekliči',
],
'pagelist' => [
'page_link' => 'Povezava do strani',
'select_page' => 'Izberite stran...',
],
'relation' => [
'missing_config' => "Relacija ne vsebuje nastavitev za ':config'.",
'missing_definition' => "Relacija ne vsebuje definicije za ':field'.",
'missing_model' => 'Relacija, uporabljena v :class, nima definiranega modela.',
'invalid_action_single' => 'Tega dejanja ni mogoče izvesti na relaciji ena proti ena.',
'invalid_action_multi' => 'Tega dejanja ni mogoče izvesti na relaciji mnogo proti mnogo.',
'help' => 'Kliknite na element, ki ga želite dodati',
'related_data' => 'Povezani podatki :name',
'add' => 'Dodaj',
'add_selected' => 'Dodaj izbrano',
'add_a_new' => 'Dodaj novo :name',
'link_selected' => 'Povezava je izbrana',
'link_a_new' => 'Poveži novo :name',
'cancel' => 'Prekliči',
'close' => 'Zapri',
'add_name' => 'Dodaj :name',
'create' => 'Ustvari',
'create_name' => 'Ustvari :name',
'update' => 'Posodobi',
'update_name' => 'Posodobi :name',
'preview' => 'Predogled',
'preview_name' => 'Predogled za :name',
'remove' => 'Odstrani',
'remove_name' => 'Odstrani :name',
'delete' => 'Izbriši',
'delete_name' => 'Izbriši :name',
'delete_confirm' => 'Ali ste prepričani?',
'link' => 'Povezava',
'link_name' => 'Povezava za :name',
'unlink' => 'Odstrani povezavo',
'unlink_name' => 'Odstrani povezavo :name',
'unlink_confirm' => 'Ali ste prepričani?',
],
'reorder' => [
'default_title' => 'Razvrsti zapise',
'no_records' => 'Na voljo ni nobenih zapisov za razvrščanje.',
],
'model' => [
'name' => 'Model',
'not_found' => "Modela ':class' z ID-jem :id ni mogoče najti",
'missing_id' => 'Za iskanje modela ni določen noben ID.',
'missing_relation' => "Model ':class' nima definirane relacije ':relation'.",
'missing_method' => "Model ':class' ne vsebuje metode ':method'.",
'invalid_class' => "Model :model, uporabljen v :class ni veljaven. Dedovati mora objekt \Model.",
'mass_assignment_failed' => "Masovna dodelitev je bila neuspešna za atribut ':attribute' na modelu.",
],
'warnings' => [
'tips' => 'Nasveti glede nastavitev sistema',
'tips_description' => 'Za pravilno nastavitev sistema morate biti pozorni na določene podrobnosti.',
'permissions' => 'PHP ne more pisati v mapo :name in njene podmape. Prosimo, nastavite spletnemu strežniku ustrezna dovoljenja za to mapo.',
'extension' => 'PHP razširitev (extension) :name ni nameščena. Prosimo, namestite ustrezno knjižnico in aktivirajte razširitev.',
'plugin_missing' => 'Za delovanje je potreben vtičnik :name, vendar ni nameščen. Prosimo, namestite ta vtičnik.',
'debug' => 'Način za odpravljanje napak je omogočen. Ta način ni priporočljiv za produkcijsko okolje.',
'decompileBackendAssets' => 'Oblikovne datoteke (CSS, JavaSrcipt) v administraciji so trenutno nestisnjene. To ni priporočljivo za produkcijsko okolje.',
],
'editor' => [
'menu_label' => 'Nastavitve urejevalnika',
'menu_description' => 'Splošne nastavitve urejevalnika, kot npr. velikost pisave in barvna shema.',
'font_size' => 'Velikost pisave',
'tab_size' => 'Širina tabulatorja',
'use_hard_tabs' => 'Odmik s tabulatorjem',
'code_folding' => 'Strnjevanje kode',
'code_folding_begin' => 'Označi začetek',
'code_folding_begin_end' => 'Označi začetek in konec',
'autocompletion' => 'Samodejno dokončanje',
'word_wrap' => 'Prelom besed',
'highlight_active_line' => 'Označi aktivno vrstico',
'auto_closing' => 'Samodejno zapri označbe',
'show_invisibles' => 'Prikaži nevidne znake',
'show_gutter' => 'Prikaži odmike',
'basic_autocompletion' => 'Osnovno samodejno dokončanje (Ctrl + Space)',
'live_autocompletion' => 'Instantno samodejno dokončanje',
'enable_snippets' => 'Omogoči odseke kode (Tab)',
'display_indent_guides' => 'Prikaži vodila za odmike',
'show_print_margin' => 'Prikaži rob tiskanja',
'mode_off' => 'Izključi',
'mode_fluid' => 'Fluidno',
'40_characters' => '40 znakov',
'80_characters' => '80 znakov',
'theme' => 'Barvna shema',
'markup_styles' => 'Označevalni slogi',
'custom_styles' => 'Slog po meri',
'custom styles_comment' => 'Slogi, ki jih želite vključiti v urejevalnik HTML.',
'markup_classes' => 'Označevalni razredi',
'paragraph' => 'Odstavek',
'link' => 'Povezava',
'table' => 'Tabela',
'table_cell' => 'Celica tabele',
'image' => 'Slika',
'label' => 'Opis',
'class_name' => 'Oznaka razreda',
'markup_tags' => 'Označevalne oznake',
'allowed_empty_tags' => 'Dovoljene prazne oznake',
'allowed_empty_tags_comment' => 'Seznam oznak, ki niso odstranjene, če v njih ni vsebine.',
'allowed_tags' => 'Dovoljene oznake',
'allowed_tags_comment' => 'Seznam dovoljenih oznak.',
'no_wrap' => 'Nezavite oznake',
'no_wrap_comment' => 'Seznam oznak, ki naj ne bodo zavite znotraj blokovskih oznak.',
'remove_tags' => 'Odstrani oznake',
'remove_tags_comment' => 'Seznam oznak, ki so odstranjene skupaj z njihovo vsebino.',
'line_breaker_tags' => 'Oznake prekinitve vrstic',
'line_breaker_tags_comment' => 'Seznam oznak, ki se uporabljajo za postavitev elementa prekinitve med vrstice.',
'toolbar_buttons' => 'Gumbi orodne vrstice',
'toolbar_buttons_comment' => 'Gumbi orodne vrstice, ki se privzeto prikažejo v urejevalniku. [fullscreen, bold, italic, underline, strikeThrough, subscript, superscript, fontFamily, fontSize, |, color, emoticons, inlineStyle, paragraphStyle, |, paragraphFormat, align, formatOL, formatUL, outdent, indent, quote, insertHR, -, insertLink, insertImage, insertVideo, insertAudio, insertFile, insertTable, undo, redo, clearFormatting, selectAll, html]',
],
'tooltips' => [
'preview_website' => 'Ogled spletne strani',
],
'mysettings' => [
'menu_label' => 'Moje nastavitve',
'menu_description' => 'Nastavitve, povezane z vašim administratorskim računom',
],
'myaccount' => [
'menu_label' => 'Moj profil',
'menu_description' => 'Urejanje podatkov vašega profila, kot so ime, e-pošta in geslo.',
'menu_keywords' => 'varnostna prijava',
],
'branding' => [
'menu_label' => 'Prilagoditev administracije',
'menu_description' => 'Prilagoditev okolja administracije, kot so npr. ime, barve in logotip.',
'brand' => 'Splošno',
'logo' => 'Logo',
'logo_description' => 'Naložite poljuben logotip, ki ga želite prikazati v administraciji.',
'favicon' => 'Ikona zaznamka (favicon)',
'favicon_description' => 'Naložite poljubno ikono zaznamka administracijo.',
'app_name' => 'Ime aplikacije',
'app_name_description' => 'Ime je prikazano v naslovni vrstici administracije.',
'app_tagline' => 'Slogan aplikacije',
'app_tagline_description' => 'Slogan je prikazan na prijavnem oknu administracije.',
'colors' => 'Barve',
'primary_color' => 'Primarna barva',
'secondary_color' => 'Sekundarna barva',
'accent_color' => 'Poudarjena barva',
'styles' => 'CSS slogi',
'custom_stylesheet' => 'CSS slogi po meri',
'navigation' => 'Navigacija',
'menu_mode' => 'Slog menija',
'menu_mode_inline' => 'Vrstični',
'menu_mode_inline_no_icons' => 'Vrstični (brez ikon)',
'menu_mode_tile' => 'Ploščice',
'menu_mode_collapsed' => 'Strnjen',
],
'backend_preferences' => [
'menu_label' => 'Nastavitve administracije',
'menu_description' => 'Upravljajte nastavitve vašega profila, kot je npr. jezik.',
'region' => 'Regija',
'code_editor' => 'Urejevalnik kode',
'timezone' => 'Časovni pas',
'timezone_comment' => 'Prikazani datumi se prilagodijo glede na izbran časovni pas.',
'locale' => 'Jezik',
'locale_comment' => 'Izberite želeni jezik za uporabo v administraciji.',
],
'access_log' => [
'hint' => 'Ta dnevnik beleži seznam uspešnih prijav administratorjev. Zapisi se hranijo :days dni.',
'menu_label' => 'Dnevnik dostopa',
'menu_description' => 'Prikaz seznama uspešnih prijav administratorjev.',
'id' => 'ID',
'created_at' => 'Datum in čas',
'type' => 'Tip',
'login' => 'Uporabniško ime',
'ip_address' => 'IP naslov',
'first_name' => 'Ime',
'last_name' => 'Priimek',
'email' => 'E-pošta',
],
'filter' => [
'all' => 'vsi',
'options_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača možnosti za filter ':filter'.",
'date_all' => 'vse periode',
'number_all' => 'vsa števila',
],
'import_export' => [
'upload_csv_file' => '1. Naložite CSV datoteko',
'import_file' => 'Uvozi datoteko',
'row' => 'Vrstica :row',
'first_row_contains_titles' => 'Prva vrstica vsebuje naslove stolpcev',
'first_row_contains_titles_desc' => 'To polje pustite označeno, če prva vrstica v vaši CSV datoteki vsebuje naslove stolpcev.',
'match_columns' => '2. Povežite stolce v datoteki s polji v podatkovni zbirki',
'file_columns' => 'Stolpci v datoteki',
'database_fields' => 'Polja v podatkovni zbirki',
'set_import_options' => '3. Nastavite možnosti uvoza',
'export_output_format' => '1. Izberite format izvozne datoteke',
'file_format' => 'Format datoteke',
'standard_format' => 'Standardni format',
'custom_format' => 'Format po meri',
'delimiter_char' => 'Znak ločila',
'enclosure_char' => 'Znak zaključka',
'escape_char' => 'Izhodni znak',
'select_columns' => '2. Označite stolpce za izvoz',
'column' => 'Stolpec',
'columns' => 'Stolpci',
'set_export_options' => '3. Nastavitve možnosti izvoza',
'show_ignored_columns' => 'Prikaži prezrte stolpce',
'auto_match_columns' => 'Samodejno poveži stolpce',
'created' => 'Ustvarjeno',
'updated' => 'Posodobljeno',
'skipped' => 'Izpuščeno',
'warnings' => 'Opozorila',
'errors' => 'Napake',
'skipped_rows' => 'Izpuščene vrstice',
'import_progress' => 'Napredek uvoza',
'processing' => 'Procesiranje',
'import_error' => 'Napaka pri uvozu',
'upload_valid_csv' => 'Prosimo, naložite veljavno CSV datoteko.',
'drop_column_here' => 'Spustite stolpec sem...',
'ignore_this_column' => 'Prezri ta stolpec',
'processing_successful_line1' => 'Izvoz datoteke je zaključen!',
'processing_successful_line2' => 'Brskalnik vas bo sedaj preusmeril na prenos datoteke.',
'export_progress' => 'Napredek izvoza',
'export_error' => 'Napaka pri izvozu',
'column_preview' => 'Predogled stolpca',
'file_not_found_error' => 'Datoteke ni mogoče najti',
'empty_error' => 'Ni podanih podatkov za izvoz',
'empty_import_columns_error' => 'Prosimo, določite nekaj stolpcev za uvoz.',
'match_some_column_error' => 'Prosimo, najprej povežite nekaj stolpcev.',
'required_match_column_error' => 'Prosimo, določite povezavo za zahtevano polje :label.',
'empty_export_columns_error' => 'Prosimo, določite nekaj stolpcev za izvoz.',
'behavior_missing_uselist_error' => 'Implementirati morate kontroler ListController z omogočeno možnostjo izvoza "useList".',
'missing_model_class_error' => 'Prosimo, določite modelClass lastnost za :type',
'missing_column_id_error' => 'Manjka identifikator stolpca',
'unknown_column_error' => 'Neznan stolpec',
'encoding_not_supported_error' => 'Kodiranje izvorne datoteke ni prepoznano. Za uspešen uvoz vaše datoteke izberite ustrezno kodiranje.',
'encoding_format' => 'Kodiranje datoteke',
'encodings' => [
'utf_8' => 'UTF-8',
'us_ascii' => 'US-ASCII',
'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',
'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',
'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',
'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',
'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',
'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',
'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',
'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',
'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',
'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',
'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',
'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',
'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',
'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',
'windows_1251' => 'Windows-1251 (CP1251)',
'windows_1252' => 'Windows-1252 (CP1252)'
]
],
'permissions' => [
'manage_media' => 'Nalaganje in upravljanje z media vsebinami - slike, video posnetki, zvočni posnetki, dokumenti',
],
'mediafinder' => [
'label' => 'Media brskalnik',
'default_prompt' => 'Kliknite gumb %s za iskanje media elementa',
'no_image' => 'Slike ni mogoče najti',
],
'media' => [
'menu_label' => 'Media',
'upload' => 'Naloži',
'move' => 'Premakni',
'delete' => 'Izbriši',
'add_folder' => 'Dodaj mapo',
'search' => 'Iskanje',
'display' => 'Prikaz',
'filter_everything' => 'Vse',
'filter_images' => 'Slike',
'filter_video' => 'Video',
'filter_audio' => 'Audio',
'filter_documents' => 'Dokumenti',
'library' => 'Knjižnica',
'size' => 'Velikost',
'title' => 'Naslov',
'last_modified' => 'Zadnja sprememba',
'public_url' => 'URL',
'click_here' => 'Kliknite tukaj',
'thumbnail_error' => 'Napaka pri ustvarjanju sličice.',
'return_to_parent' => 'Vrni se v nadrejeno mapo',
'return_to_parent_label' => 'Pojdi gor ..',
'nothing_selected' => 'Nič ni izbrano.',
'multiple_selected' => 'Izbranih je več elementov.',
'uploading_file_num' => 'Nalaganje :number datotek(e)...',
'uploading_complete' => 'Nalaganje zaključeno',
'uploading_error' => 'Nalaganje ni uspelo',
'type_blocked' => 'Izbrani tip datoteke je blokiran iz varnostnih razlogov.',
'order_by' => 'Razvrsti po',
'direction' => 'Smer',
'direction_asc' => 'Naraščajoče',
'direction_desc' => 'Padajoče',
'folder' => 'Mapa',
'no_files_found' => 'Vaše iskanje se ne ujema z nobeno datoteko.',
'delete_empty' => 'Prosimo, izberite elemente, ki jih želite izbrisati.',
'delete_confirm' => 'Želite izbrisati izbrane elemente?',
'error_renaming_file' => 'Napaka pri preimenovanju elementa.',
'new_folder_title' => 'Nova mapa',
'folder_name' => 'Ime mape',
'error_creating_folder' => 'Napaka pri ustvarjanju mape',
'folder_or_file_exist' => 'Datoteka ali mapa z izbranim imenom že obstaja.',
'move_empty' => 'Prosimo, izberite elemente, ki jih želite premakniti.',
'move_popup_title' => 'Premakni datoteke ali mape',
'move_destination' => 'Ciljna mapa',
'please_select_move_dest' => 'Prosimo, izberite ciljno mapo.',
'move_dest_src_match' => 'Prosimo, izberite drugo ciljno mapo.',
'empty_library' => 'Tukaj izgleda malo prazno. Za začetek naložite datoteke ali ustvarite mape.',
'insert' => 'Vstavi',
'crop_and_insert' => 'Obreži in vstavi',
'select_single_image' => 'Prosimo, izberite samo eno sliko.',
'selection_not_image' => 'Izbrani element ni slika.',
'restore' => 'Razveljavi vse spremembe',
'resize' => 'Spremeni velikost...',
'selection_mode_normal' => 'Normalno',
'selection_mode_fixed_ratio' => 'Fiksno razmerje',
'selection_mode_fixed_size' => 'Fiksna velikost',
'height' => 'Višina',
'width' => 'Širina',
'selection_mode' => 'Izbirni način',
'resize_image' => 'Spremeni velikost slike',
'image_size' => 'Velikost slike:',
'selected_size' => 'Izbrano:',
],
];

View File

@ -212,6 +212,7 @@ class Preference extends Model
'ro' => [Lang::get('system::lang.locale.ro'), 'flag-ro'],
'ru' => [Lang::get('system::lang.locale.ru'), 'flag-ru'],
'sk' => [Lang::get('system::lang.locale.sk'), 'flag-sk'],
'sl' => [Lang::get('system::lang.locale.sl'), 'flag-si'],
'sv' => [Lang::get('system::lang.locale.sv'), 'flag-se'],
'th' => [Lang::get('system::lang.locale.th'), 'flag-th'],
'tr' => [Lang::get('system::lang.locale.tr'), 'flag-tr'],

View File

@ -136,6 +136,18 @@ class User extends UserBase
public function afterLogin()
{
parent::afterLogin();
/**
* @event backend.user.login
* Provides an opportunity to interact with the Backend User model after the user has logged in
*
* Example usage:
*
* Event::listen('backend.user.login', function ((\Backend\Models\User) $user) {
* Flash::success(sprintf('Welcome %s!', $user->getFullNameAttribute()));
* });
*
*/
Event::fire('backend.user.login', [$this]);
}

View File

@ -185,3 +185,11 @@ div.control-componentlist {
}
}
}
//
// Media
//
.nav.selector-group li.active {
border-left-color: @brand-secondary;
}

View File

@ -4,8 +4,17 @@
* Register Backend routes before all user routes.
*/
App::before(function ($request) {
/*
* Extensibility
/**
* @event backend.beforeRoute
* Fires before backend routes get added
*
* Example usage:
*
* Event::listen('backend.beforeRoute', function () {
* // your code here
* });
*
*/
Event::fire('backend.beforeRoute');
@ -25,8 +34,16 @@ App::before(function ($request) {
*/
Route::any(Config::get('cms.backendUri', 'backend'), 'Backend\Classes\BackendController@run')->middleware('web');
/*
* Extensibility
/**
* @event backend.route
* Fires after backend routes have been added
*
* Example usage:
*
* Event::listen('backend.route', function () {
* // your code here
* });
*
*/
Event::fire('backend.route');
});

View File

@ -54,7 +54,7 @@ trait PreferenceMaker
*
* @return array
*/
public function getUserPreferences(): array
public function getUserPreferences()
{
if (isset(self::$preferenceCache[$this->getPreferenceKey()])) {
return self::$preferenceCache[$this->getPreferenceKey()];
@ -112,7 +112,7 @@ trait PreferenceMaker
*
* @return string
*/
protected function getPreferenceKey(): string
protected function getPreferenceKey()
{
$controller = (property_exists($this, 'controller') && $this->controller)
? $this->controller

View File

@ -145,18 +145,19 @@ class Filter extends WidgetBase
break;
case 'numberrange':
if ($scope->value && is_array($scope->value) && count($scope->value) === 2 &&
$scope->value[0] &&
$scope->value[1]
if (
$scope->value
&& (is_array($scope->value) && count($scope->value) === 2)
&& (isset($scope->value[0]) || isset($scope->value[1]))
) {
$min = $scope->value[0];
$max = $scope->value[1];
$params['minStr'] = $min ?: '';
$params['min'] = $min ?: null;
$params['minStr'] = $min ?? '-∞';
$params['min'] = $min ?? null;
$params['maxStr'] = $max ?: '∞';
$params['max'] = $max ?: null;
$params['maxStr'] = $max ?? '∞';
$params['max'] = $max ?? null;
}
break;
@ -790,15 +791,14 @@ class Filter extends WidgetBase
if (is_array($scope->value) && count($scope->value) > 1) {
list($min, $max) = array_values($scope->value);
if ($min && $max) {
if (isset($min) || isset($max)) {
/*
* Condition
*
*/
if ($scopeConditions = $scope->conditions) {
$query->whereRaw(DbDongle::parse(strtr($scopeConditions, [
':min' => $min,
':max' => $max
':min' => $min === null ? -2147483647 : $min,
':max' => $max === null ? 2147483647 : $max
])));
}
/*
@ -1049,8 +1049,7 @@ class Filter extends WidgetBase
if (preg_match($numberRegex, $number)) {
$numbers[] = $number;
} else {
$numbers = [];
break;
$numbers[] = null;
}
}
}

View File

@ -456,6 +456,36 @@ class Form extends WidgetBase
return $result;
}
/**
* Renders all fields of a tab in the target tab-pane.
*
* @return array
*/
public function onLazyLoadTab()
{
$target = post('target');
$tabName = post('name');
$tabSection = post('section');
$fields = array_get(optional($this->getTab($tabSection))->fields, $tabName);
return [
$target => $this->makePartial('form_fields', ['fields' => $fields]),
];
}
/**
* Helper method to convert a field name to a valid ID attribute.
*
* @param $input
*
* @return string
*/
public function nameToId($input)
{
return HtmlHelper::nameToId($input);
}
/**
* Creates a flat array of form fields from the configuration.
* Also slots fields in to their respective tabs.
@ -935,7 +965,7 @@ class Form extends WidgetBase
}
$widgetConfig = $this->makeConfig($field->config);
$widgetConfig->alias = $this->alias . studly_case(HtmlHelper::nameToId($field->fieldName));
$widgetConfig->alias = $this->alias . studly_case($this->nameToId($field->fieldName));
$widgetConfig->sessionKey = $this->getSessionKey();
$widgetConfig->previewMode = $this->previewMode;
$widgetConfig->model = $this->model;

View File

@ -1496,21 +1496,27 @@ class Lists extends WidgetBase
$this->sortColumn = $sortOptions['column'] = $column;
$this->putSession('sort', $sortOptions);
/*
* Persist the page number
*/
$this->currentPageNumber = post('page');
return $this->onRefresh();
/*
* Try to refresh the list with the new sortOptions. Put the
* new sortOptions in to the session if the query succeeded.
*/
$result = $this->onRefresh();
$this->putSession('sort', $sortOptions);
return $result;
}
}
/**
* Returns the current sorting column, saved in a session or cached.
*/
protected function getSortColumn()
public function getSortColumn()
{
if (!$this->isSortable()) {
return false;
@ -1557,6 +1563,14 @@ class Lists extends WidgetBase
return $this->sortColumn;
}
/*
* Returns the current sort direction or default of 'asc'
*/
public function getSortDirection()
{
return $this->sortDirection ?? 'asc';
}
/**
* Returns true if the column can be sorted.
*/

View File

@ -160,8 +160,8 @@ class Table extends WidgetBase
* Converts the columns associative array to a regular array and translates column headers and drop-down options.
* Working with regular arrays is much faster in JavaScript.
* References:
* - http://www.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/
* - http://jsperf.com/performance-of-array-vs-object/3
* - https://www.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/
* - https://jsperf.com/performance-of-array-vs-object/3
*/
protected function prepareColumnsArray()
{

View File

@ -34,6 +34,7 @@
this.bindDependants()
this.bindCheckboxlist()
this.toggleEmptyTabs()
this.bindLazyTabs()
this.bindCollapsibleSections()
this.$el.on('oc.triggerOn.afterUpdate', this.proxy(this.toggleEmptyTabs))
@ -161,6 +162,37 @@
})
}
/*
* Render tab form fields once a lazy tab is selected.
*/
FormWidget.prototype.bindLazyTabs = function() {
this.$el.on('click', '.tab-lazy [data-toggle="tab"]', function() {
var $el = $(this),
handlerName = $el.data('tab-lazy-handler')
$.request(handlerName, {
data: {
target: $el.data('target'),
name: $el.data('tab-name'),
section: $el.data('tab-section'),
},
success: function(data) {
this.success(data)
$el.parent().removeClass('tab-lazy')
// Trigger all input presets to populate new fields.
setTimeout(function() {
$('[data-input-preset]').each(function() {
var preset = $(this).data('oc.inputPreset')
if (preset && preset.$src) {
preset.$src.trigger('input')
}
})
}, 0)
}
})
})
}
/*
* Hides tabs that have no content, it is possible this can be
* called multiple times in a single cycle due to input.trigger.
@ -184,7 +216,7 @@
/*
* Check each tab pane for form field groups
*/
$('.tab-pane', tabControl).each(function() {
$('.tab-pane:not(.lazy)', tabControl).each(function() {
$('[data-target="#' + $(this).attr('id') + '"]', tabControl)
.closest('li')
.toggle(!!$('> .form-group:not(:empty):not(.hide)', $(this)).length)

View File

@ -13,9 +13,18 @@
?>
<div class="<?= $navCss ?>">
<ul class="nav nav-tabs">
<?php $index = 0; foreach ($tabs as $name => $fields): ?>
<li class="<?= $index++ == 0 ? 'active' : '' ?>">
<a href="#<?= $type . 'tab-' . $index ?>">
<?php $index = 0; foreach ($tabs as $name => $fields):
$lazy = in_array($name, $tabs->lazy);
?>
<li class="<?= ($index++ === 0) ? 'active' : '' ?> <?= $lazy ? 'tab-lazy' : '' ?>">
<a
href="#<?= $type . 'tab-' . $index ?>"
<?php if ($lazy): ?>
data-tab-name="<?= e($name) ?>"
data-tab-section="<?= $type ?>"
data-tab-lazy-handler="<?= $this->getEventHandler('onLazyLoadTab') ?>"
<?php endif ?>
>
<span class="title">
<span>
<?php if ($tabs->getIcon($name)): ?><span class="<?= $tabs->getIcon($name) ?>"></span><?php endif; ?>
@ -29,11 +38,19 @@
</div>
<div class="tab-content <?= $contentCss ?>">
<?php $index = 0; foreach ($tabs as $name => $fields): ?>
<div
class="tab-pane <?= e($tabs->getPaneCssClass($index, $name)) ?> <?= $index++ == 0 ? 'active' : '' ?> <?= $paneCss ?>"
id="<?= $type . 'tab-' . $index ?>">
<?= $this->makePartial('form_fields', ['fields' => $fields]) ?>
</div>
<?php
$index = 0;
foreach ($tabs as $name => $fields):
$lazy = in_array($name, $tabs->lazy);
?>
<div
class="tab-pane <?= $lazy ? 'lazy' : '' ?> <?= e($tabs->getPaneCssClass($index, $name)) ?> <?= ($index++ === 0) ? 'active' : '' ?> <?= $paneCss ?>"
id="<?= $type . 'tab-' . $index ?>">
<?php if ($lazy): ?>
<?= $this->makePartial('form_tabs_lazy', ['fields' => $fields]) ?>
<?php else: ?>
<?= $this->makePartial('form_fields', ['fields' => $fields]) ?>
<?php endif ?>
</div>
<?php endforeach ?>
</div>

View File

@ -0,0 +1,33 @@
<div class="loading-indicator-container m-t">
<div class="loading-indicator indicator-center">
<span></span>
</div>
</div>
<?php
// Do not create a hidden field for these field types since
// they don't contain any form data.
$ignoredTypes = ['section', 'partial'];
foreach ($fields as $field):
if (in_array($field->type, $ignoredTypes)) continue;
$isMultiValue = is_array($field->value);
foreach (array_wrap($field->value) as $index => $value):
// Use array field names if the field has multiple values (repeater, checkboxlist, etc.).
$fieldName = $isMultiValue ? sprintf('%s[%s]', $field->getName(), $index) : $field->getName();
$valueIsArray = is_array($value);
foreach (array_wrap($value) as $index => $value):
// Set the correct array keys if the value is an array (repeater form fields).
$currentFieldName = $valueIsArray ? sprintf('%s[%s]', $fieldName, $index) : $fieldName;
?>
<input
type="hidden"
name="<?= $currentFieldName ?>"
id="<?= $this->nameToId($currentFieldName) ?>"
value="<?= e($value) ?>"
<?= $field->getAttributes() ?>
/>
<?php endforeach ?>
<?php endforeach ?>
<?php endforeach ?>

View File

@ -73,7 +73,7 @@ div[data-control="media-manager"] .list-container p.no-data {padding:0 20px 20px
div[data-control="media-manager"] .list-container li.no-data {padding-top:20px;display:block !important;width:100% !important;border:none !important;background:transparent !important;cursor:default !important}
div[data-control="media-manager"] .list-container table.table.data tbody tr:not(.no-data):active td {background:#4ea5e0 !important}
div[data-control="media-manager"] [data-control="item-list"] {position:relative;display:table-cell}
div[data-control="media-manager"] .control-scrollpad {position:absolute;left:0;top:0}
div[data-control="media-manager"] .control-scrollpad {position:absolute;left:0;top:0;min-height:300px}
div[data-control="media-manager"] .scroll-wrapper {position:relative}
div[data-control="media-manager"] table.table {table-layout:fixed;margin-bottom:0;white-space:nowrap}
div[data-control="media-manager"] table.table div.no-wrap-text {overflow:hidden;text-overflow:ellipsis}

View File

@ -276,7 +276,7 @@ this.scrollContentElement.insertBefore(this.selectionMarker,this.scrollContentEl
MediaManager.prototype.doObjectsCollide=function(aTop,aLeft,aWidth,aHeight,bTop,bLeft,bWidth,bHeight){return!(((aTop+aHeight)<(bTop))||(aTop>(bTop+bHeight))||((aLeft+aWidth)<bLeft)||(aLeft>(bLeft+bWidth)))}
MediaManager.prototype.initUploader=function(){if(!this.itemListElement||this.options.readOnly)
return
var uploaderOptions={clickable:this.$el.find('[data-control="upload"]').get(0),url:this.options.url,paramName:'file_data',headers:{},createImageThumbnails:false}
var uploaderOptions={clickable:this.$el.find('[data-control="upload"]').get(0),url:this.options.url,paramName:'file_data',timeout:0,headers:{},createImageThumbnails:false}
if(this.options.uniqueId){uploaderOptions.headers['X-OCTOBER-FILEUPLOAD']=this.options.uniqueId}
var token=$('meta[name="csrf-token"]').attr('content')
if(token){uploaderOptions.headers['X-CSRF-TOKEN']=token}

View File

@ -715,6 +715,7 @@
clickable: this.$el.find('[data-control="upload"]').get(0),
url: this.options.url,
paramName: 'file_data',
timeout: 0,
headers: {},
createImageThumbnails: false
// fallback: implement method that would set a flag that the uploader is not supported by the browser

View File

@ -395,6 +395,10 @@ div[data-control="media-manager"] {
position: absolute;
left: 0;
top: 0;
// Prevents erratic rendering issues when the height is
// sometimes calculated as 0 then repeatedly redrawn
min-height: 300px;
}
.scroll-wrapper {

View File

@ -871,7 +871,8 @@ return cachingKey}
DropdownProcessor.prototype.getAbsolutePosition=function(element){var top=document.body.scrollTop,left=0
do{top+=element.offsetTop||0;top-=element.scrollTop||0;left+=element.offsetLeft||0;element=element.offsetParent;}while(element)
return{top:top,left:left}}
DropdownProcessor.prototype.updateCellFromFocusedItem=function(){var focusedItem=this.findFocusedItem();this.setSelectedItem(focusedItem);}
DropdownProcessor.prototype.updateCellFromFocusedItem=function(focusedItem){if(!focusedItem){focusedItem=this.findFocusedItem();}
this.setSelectedItem(focusedItem);}
DropdownProcessor.prototype.findSelectedItem=function(){if(this.itemListElement)
return this.itemListElement.querySelector('ul li.selected')
return null}
@ -883,7 +884,7 @@ DropdownProcessor.prototype.findFocusedItem=function(){if(this.itemListElement)
return this.itemListElement.querySelector('ul li:focus')
return null}
DropdownProcessor.prototype.onItemClick=function(ev){var target=this.tableObj.getEventTarget(ev)
if(target.tagName=='LI'){target.focus();this.updateCellFromFocusedItem()
if(target.tagName=='LI'){target.focus();this.updateCellFromFocusedItem(target)
this.hideDropdown()}}
DropdownProcessor.prototype.onItemKeyDown=function(ev){if(!this.itemListElement)
return

View File

@ -270,8 +270,10 @@
}
}
DropdownProcessor.prototype.updateCellFromFocusedItem = function() {
var focusedItem = this.findFocusedItem();
DropdownProcessor.prototype.updateCellFromFocusedItem = function(focusedItem) {
if (!focusedItem) {
focusedItem = this.findFocusedItem();
}
this.setSelectedItem(focusedItem);
}
@ -309,7 +311,7 @@
if (target.tagName == 'LI') {
target.focus();
this.updateCellFromFocusedItem()
this.updateCellFromFocusedItem(target)
this.hideDropdown()
}
}

View File

@ -7,6 +7,7 @@ use Config;
use Cms\Twig\Loader as TwigLoader;
use Cms\Twig\Extension as CmsTwigExtension;
use Cms\Components\ViewBag;
use Cms\Helpers\Cms as CmsHelpers;
use System\Twig\Extension as SystemTwigExtension;
use October\Rain\Halcyon\Processors\SectionParser;
use Twig\Source as TwigSource;
@ -143,12 +144,7 @@ class CmsCompoundObject extends CmsObject
*/
protected function checkSafeMode()
{
$safeMode = Config::get('cms.enableSafeMode', null);
if ($safeMode === null) {
$safeMode = !Config::get('app.debug', false);
}
if ($safeMode && $this->isDirty('code') && strlen(trim($this->code))) {
if (CmsHelpers::safeModeEnabled() && $this->isDirty('code') && strlen(trim($this->code))) {
throw new ApplicationException(Lang::get('cms::lang.cms_object.safe_mode_enabled'));
}
}

View File

@ -24,6 +24,7 @@ use System\Classes\CombineAssets;
use System\Twig\Extension as SystemTwigExtension;
use October\Rain\Exception\AjaxException;
use October\Rain\Exception\ValidationException;
use October\Rain\Exception\ApplicationException;
use October\Rain\Parse\Bracket as TextParser;
use Illuminate\Http\RedirectResponse;
@ -146,17 +147,6 @@ class Controller
$url = '/';
}
/*
* Check security token.
*
* Note: Ignore AJAX requests until a CSRF policy introduced.
*
* @see \System\Traits\SecurityController
*/
if (!Request::ajax() && !$this->verifyCsrfToken()) {
return Response::make(Lang::get('system::lang.page.invalid_token.label'), 403);
}
/*
* Hidden page
*/
@ -389,6 +379,7 @@ class Controller
if (
$useAjax &&
($handler = post('_handler')) &&
$this->verifyCsrfToken() &&
($handlerResponse = $this->runAjaxHandler($handler)) &&
$handlerResponse !== true
) {
@ -1006,9 +997,7 @@ class Controller
/*
* Check if the theme has an override
*/
if (strpos($partialName, '/') === false) {
$partial = ComponentPartial::loadOverrideCached($this->theme, $componentObj, $partialName);
}
$partial = ComponentPartial::loadOverrideCached($this->theme, $componentObj, $partialName);
/*
* Check the component partial

View File

@ -32,6 +32,12 @@ secondaryTabs:
type: codeeditor
language: twig
safemode_notice:
tab: cms::lang.editor.code
type: partial
hidden: true
cssClass: p-b-0
code:
tab: cms::lang.editor.code
stretch: true

View File

@ -74,6 +74,12 @@ secondaryTabs:
type: codeeditor
language: twig
safemode_notice:
tab: cms::lang.editor.code
type: partial
hidden: true
cssClass: p-b-0
code:
tab: cms::lang.editor.code
stretch: true

View File

@ -32,6 +32,12 @@ secondaryTabs:
type: codeeditor
language: twig
safemode_notice:
tab: cms::lang.editor.code
type: partial
hidden: true
cssClass: p-b-0
code:
tab: cms::lang.editor.code
stretch: true

View File

@ -4,6 +4,7 @@ use Url;
use Lang;
use Flash;
use Config;
use Event;
use Request;
use Exception;
use BackendMenu;
@ -20,6 +21,7 @@ use Cms\Classes\CmsObject;
use Cms\Classes\CmsCompoundObject;
use Cms\Classes\ComponentManager;
use Cms\Classes\ComponentPartial;
use Cms\Helpers\Cms as CmsHelpers;
use Backend\Classes\Controller;
use System\Helpers\DateTime;
use October\Rain\Router\Router as RainRouter;
@ -59,6 +61,24 @@ class Index extends Controller
{
parent::__construct();
Event::listen('backend.form.extendFieldsBefore', function ($widget) {
if (!$widget->getController() instanceof Index) {
return;
}
if (!$widget->model instanceof CmsCompoundObject) {
return;
}
if (empty($widget->secondaryTabs['fields'])) {
return;
}
if (array_key_exists('code', $widget->secondaryTabs['fields']) && CmsHelpers::safeModeEnabled()) {
$widget->secondaryTabs['fields']['safemode_notice']['hidden'] = false;
$widget->secondaryTabs['fields']['code']['readOnly'] = true;
};
});
BackendMenu::setContext('October.Cms', 'cms', true);
try {

View File

@ -0,0 +1,6 @@
<div class="callout callout-warning no-subheader">
<div class="header" style="border-radius: 0">
<i class="icon-warning"></i>
<h3><?= e(trans('cms::lang.cms_object.safe_mode_enabled')) ?></h3>
</div>
</div>

View File

@ -2,6 +2,7 @@
use Url;
use Route;
use Config;
/**
* CMS Helper
@ -35,4 +36,13 @@ class Cms
return Url::to($path);
}
public static function safeModeEnabled()
{
$safeMode = Config::get('cms.enableSafeMode', null);
if ($safeMode === null) {
$safeMode = !Config::get('app.debug', false);
}
return $safeMode;
}
}

View File

@ -1,5 +1,8 @@
<?php namespace Cms\Helpers;
use Config;
use File as Filesystem;
/**
* Defines some file-system helpers for the CMS system.
*

View File

@ -11,7 +11,7 @@ return [
'error_deleting' => "Error deleting the template file ':name'. Please check write permissions.",
'delete_success' => 'Templates deleted: :count.',
'file_name_required' => 'The File Name field is required.',
'safe_mode_enabled' => 'Safe mode is currently enabled.'
'safe_mode_enabled' => 'Safe mode is currently enabled. Editing the PHP code of CMS templates is disabled.'
],
'dashboard' => [
'active_theme' => [

View File

@ -0,0 +1,301 @@
<?php
return [
'cms_object' => [
'invalid_file' => 'Neveljavno ime datoteke :name. Imena datotek lahko vsebujejo le alfanumerične simbole, podčrtaje, pomišljaje in pike. Nekaj primerov pravilnih imen datotek: page.htm, page, subdirectory/page',
'invalid_property' => "Lastnost ':name' ne more biti nastavljena",
'file_already_exists' => "Datoteka ':name' že obstaja",
'error_saving' => "Napaka pri shranjevanju datoteke ':name'. Prosimo, preverite vaša uporabniška dovoljenja.",
'error_creating_directory' => 'Napaka pri ustvarjanju mape :name. Prosimo, preverite vaša uporabniška dovoljenja.',
'invalid_file_extension' => "Neveljaven format datoteke :invalid'. Veljavni formati so :allowed.",
'error_deleting' => "Napaka pri brisanju predloge ':name'. Prosimo, preverite vaša uporabniška dovoljenja.",
'delete_success' => 'Izbrisanih predlog: :count.',
'file_name_required' => 'Obvezno polje: Ime datoteke',
'safe_mode_enabled' => 'Varnostni način je trenutno vključen.',
],
'dashboard' => [
'active_theme' => [
'widget_title_default' => 'Spletna stran',
'online' => 'Aktivna',
'maintenance' => 'V vzdrževanju',
'manage_themes' => 'Upravljaj teme',
'customize_theme' => 'Prilagodi temo',
],
],
'theme' => [
'not_found_name' => "Teme ':name' ni bilo mogoče najti.",
'by_author' => 'Od :name',
'active' => [
'not_set' => 'Aktivna tema ni nastavljena.',
'not_found' => 'Aktivne teme ni mogoče najti.',
],
'edit' => [
'not_set' => 'Urejana tema ni nastavljena.',
'not_found' => 'Urejane teme ni mogoče najti.',
'not_match' => "Objekt, do katerega poskušate dostopati, ne pripada urejani temi. Prosimo, osvežite stran.",
],
'settings_menu' => 'Tema spletne strani',
'settings_menu_description' => 'Upravljanje s temo spletne strani in možnostmi prilagoditve.',
'default_tab' => 'Lastnosti',
'name_label' => 'Ime',
'name_create_placeholder' => 'Novo ime teme',
'author_label' => 'Avtor',
'author_placeholder' => 'Oseba ali ime podjetja',
'description_label' => 'Opis',
'description_placeholder' => 'Opis teme',
'homepage_label' => 'Spletna stran',
'homepage_placeholder' => 'URL spletne strani',
'code_label' => 'Koda',
'code_placeholder' => 'Unikatna koda teme, ki se uporablja za distribucijo',
'preview_image_label' => 'Slika za predogled',
'preview_image_placeholder' => 'Lokacija slike za predogled teme.',
'dir_name_label' => 'Ime mape',
'dir_name_create_label' => 'Ciljna mapa teme',
'theme_label' => 'Tema',
'theme_title' => 'Teme',
'activate_button' => 'Aktiviraj',
'active_button' => 'Aktiviraj',
'customize_theme' => 'Prilagodi temo',
'customize_button' => 'Prilagodi',
'duplicate_button' => 'Podvoji',
'duplicate_title' => 'Podvoji temo',
'duplicate_theme_success' => 'Tema podvojena!',
'manage_button' => 'Upravljanje',
'manage_title' => 'Upravljanje s temo',
'edit_properties_title' => 'Tema',
'edit_properties_button' => 'Uredi lastnosti',
'save_properties' => 'Shrani lastnosti',
'import_button' => 'Uvozi',
'import_title' => 'Uvozi temo',
'import_theme_success' => 'Tema uvožena!',
'import_uploaded_file' => 'Datoteka z arhivom teme',
'import_overwrite_label' => 'Prepiši obstoječe datoteke',
'import_overwrite_comment' => 'Odkljukajte to polje, če želite uvoziti le nove datoteke',
'import_folders_label' => 'Mape',
'import_folders_comment' => 'Prosimo, izberite mape tem, ki jih želite uvoziti',
'export_button' => 'Izvozi',
'export_title' => 'Izvozi temo',
'export_folders_label' => 'Mape',
'export_folders_comment' => 'Prosimo, izberite mape tem, ki jih želite izvoziti',
'delete_button' => 'Izbriši',
'delete_confirm' => 'Želite izbrisati to temo? Ukaza ni mogoče razveljaviti!',
'delete_active_theme_failed' => 'Aktivne teme ni mogoče izbrisati. Najprej je potrebno zamenjati aktivno temo.',
'delete_theme_success' => 'Tema izbrisana!',
'create_title' => 'Ustvari temo',
'create_button' => 'Ustvari',
'create_new_blank_theme' => 'Ustvari novo prazno temo',
'create_theme_success' => 'Tema ustvarjena!',
'create_theme_required_name' => 'Prosimo, navedite ime teme.',
'new_directory_name_label' => 'Mapa za temo',
'new_directory_name_comment' => 'Podajte novo ime mape za podvojeno temo.',
'dir_name_invalid' => 'Ime lahko vsebuje samo številke, latinične črke in naslednje simbole: _-',
'dir_name_taken' => 'Želena mapa za temo že obstaja.',
'find_more_themes' => 'Poišči več tem',
'saving' => 'Shranjevanje teme...',
'return' => 'Nazaj na seznam tem',
],
'maintenance' => [
'settings_menu' => 'Način vzdrževanja',
'settings_menu_description' => 'Nastavitve načina vzdrževanja in preklop na način vzdrževanja.',
'is_enabled' => 'Omogoči način vzdrževanja',
'is_enabled_comment' => 'Izberite stran, ki bo prikazana ob vključenem načinu vzdrževanja.',
'hint' => 'V načinu vzdrževanja bo stran o vzdrževanju prikazana obiskovalcem, ki niso prijavljeni v administracijo.',
],
'page' => [
'not_found_name' => "Strani ':name' ni mogoče najti.",
'not_found' => [
'label' => 'Stran ne obstaja',
'help' => 'Zahtevane strani ni bilo mogoče najti.',
],
'custom_error' => [
'label' => 'Napaka strani',
'help' => 'Žal je šlo nekaj narobe in strani ni mogoče prikazati.',
],
'menu_label' => 'Strani',
'unsaved_label' => 'Neshranjene strani',
'no_list_records' => 'Ni najdenih strani.',
'new' => 'Nova stran',
'invalid_url' => 'Neveljavna oblika URL formata. URL se mora začeti z znakom za desno poševnico in lahko vsebuje številke, latinične črke in naslednje znake: ._-[]:?|/+*^$',
'delete_confirm_multiple' => 'Želite izbrisati izbrane strani?',
'delete_confirm_single' => 'Želite izbrisati to stran?',
'no_layout' => '-- brez postavitve --',
'cms_page' => 'CMS stran',
'title' => 'Naslov strani',
'url' => 'URL strani',
'file_name' => 'Ime datoteke strani',
],
'layout' => [
'not_found_name' => "Postavitve ':name' ni mogoče najti.",
'menu_label' => 'Postavitve',
'unsaved_label' => 'Neshranjene postavitve',
'no_list_records' => 'Ni najdenih postavitev.',
'new' => 'Nova postavitev',
'delete_confirm_multiple' => 'Želite izbrisati izbrane postavitve?',
'delete_confirm_single' => 'Želite izbrisati to postavitev?',
],
'partial' => [
'not_found_name' => "Predloge ':name' ni mogoče najti.",
'invalid_name' => 'Neveljavno ime predloge :name.',
'menu_label' => 'Predloge',
'unsaved_label' => 'Neshranjene predloge',
'no_list_records' => 'Ni najdenih predlog.',
'delete_confirm_multiple' => 'Želite izbrisati izbrane predloge?',
'delete_confirm_single' => 'Želite izbrisati to predlogo?',
'new' => 'Nova predloga',
],
'content' => [
'not_found_name' => "Datoteke z vsebino ':name' ni mogoče najti.",
'menu_label' => 'Vsebine',
'unsaved_label' => 'Neshranjena vsebina',
'no_list_records' => 'Ni najdenih datotek z vsebino.',
'delete_confirm_multiple' => 'Ali želite izbrisati izbrane datoteke ali mape z vsebino?',
'delete_confirm_single' => 'Želite izbrisati to datoteko z vsebino?',
'new' => 'Nova datoteka z vsebino',
],
'ajax_handler' => [
'invalid_name' => 'Neveljavno ime AJAX akcije: :name.',
'not_found' => "Ni mogoče najti AJAX akcije ':name'.",
],
'cms' => [
'menu_label' => 'CMS'
],
'sidebar' => [
'add' => 'Dodaj',
'search' => 'Iskanje...',
],
'editor' => [
'settings' => 'Nastavitve',
'title' => 'Naslov',
'new_title' => 'Nov naslov strani',
'url' => 'URL',
'filename' => 'Ime datoteke',
'layout' => 'Postavitev',
'description' => 'Opis',
'preview' => 'Predogled',
'meta' => 'Meta podatki',
'meta_title' => 'Meta naslov',
'meta_description' => 'Meta opis',
'markup' => 'Označevalni jezik',
'code' => 'Koda',
'content' => 'Vsebina',
'hidden' => 'Skrito',
'hidden_comment' => 'Skrite strani so dostopne le uporabnikom, ki so prijavljeni v administracijo.',
'enter_fullscreen' => 'Celozaslonski način',
'exit_fullscreen' => 'Zapri celozaslonski način',
'open_searchbox' => 'Odpri iskalnik',
'close_searchbox' => 'Zapri iskalnik',
'open_replacebox' => 'Odpri "Najdi in zamenjaj"',
'close_replacebox' => 'Zapri "Najdi in zamenjaj"',
'commit' => 'Shrani spremembe',
'reset' => 'Ponastavi',
'commit_confirm' => 'Ali ste prepričani, da želite shraniti spremembe datoteke v datotečni sistem? To bo prepisalo obstoječo datoteko v datotečnem sistemu',
'reset_confirm' => 'Ali ste prepričani, da želite datoteko ponastaviti na kopijo, ki se nahaja v datotečnem sistemu? To bo datoteko v celoti nadomestilo z datoteko, ki se nahaja v datotečnem sistemu',
'committing' => 'Shranjujem spremembe',
'resetting' => 'Ponastavljam',
'commit_success' => 'Sprememba :type je bila shranjena v datotečni sistem',
'reset_success' => 'Sprememba :type je bila ponastavljena na različico iz datotečnega sistema',
],
'asset' => [
'menu_label' => 'Oblikovne datoteke',
'unsaved_label' => 'Neshranjene datoteke',
'drop_down_add_title' => 'Dodaj...',
'drop_down_operation_title' => 'Dejanje...',
'upload_files' => 'Naloži datoteke',
'create_file' => 'Ustvari datoteko',
'create_directory' => 'Ustvari mapo',
'directory_popup_title' => 'Nova mapa',
'directory_name' => 'Ime mape',
'rename' => 'Preimenuj',
'delete' => 'Izbriši',
'move' => 'Premakni',
'select' => 'Izberi',
'new' => 'Nova datoteka',
'rename_popup_title' => 'Preimenuj',
'rename_new_name' => 'Novo ime',
'invalid_path' => 'Lokacija lahko vsebuje le številke, latinične črke, presledke in naslednje znake: ._-/',
'error_deleting_file' => 'Napaka pri brisanju datoteke :name.',
'error_deleting_dir_not_empty' => 'Napaka pri brisanju mape :name. Mapa ni prazna.',
'error_deleting_dir' => 'Napaka pri brisanju mape :name.',
'invalid_name' => 'Ime lahko vsebuje le številke, latinične črke, presledke in naslednje znake: ._-',
'original_not_found' => 'Originalne datoteke oziroma mape ni mogoče najti',
'already_exists' => 'Datoteka oziroma mapa s tem imenom že obstaja',
'error_renaming' => 'Napaka pri preimenovanju datoteke oziroma mape',
'name_cant_be_empty' => 'Ime ne more biti prazno',
'too_large' => 'Naložena datoteka je prevelika. Največja dovoljena velikost datoteke je :max_size',
'type_not_allowed' => 'Dovoljeni so le formati datotek: :alowed_types',
'file_not_valid' => 'Neveljavna datoteka',
'error_uploading_file' => "Napaka pri nalaganju datoteke ':name': :error",
'move_please_select' => 'izberite',
'move_destination' => 'Ciljna mapa',
'move_popup_title' => 'Premakni oblikovne datoteke',
'move_button' => 'Premakni',
'selected_files_not_found' => 'Izbranih datotek ni mogoče najti',
'select_destination_dir' => 'Prosimo, izberite ciljno mapo',
'destination_not_found' => 'Ciljne mape ni mogoče najti',
'error_moving_file' => 'Napaka pri premikanju datoteke :file',
'error_moving_directory' => 'Napaka pri premikanju mape :dir',
'error_deleting_directory' => 'Napaka pri brisanju originalne mape :dir',
'no_list_records' => 'Ni najdenih datotek.',
'delete_confirm' => 'Želite izbrisati izbrane datoteke ali mape?',
'path' => 'Lokacija',
],
'component' => [
'menu_label' => 'Komponente',
'unnamed' => 'Neimenovano',
'no_description' => 'Opis ni podan',
'alias' => 'Vzdevek',
'alias_description' => 'Unikatno ime komponente, ki se uporablja na strani ali v kodi postavitve.',
'validation_message' => 'Vzdevki komponent so obvezni in lahko vsebujejo le latinične znake, številke in podčrtaje. Vzdevki naj se začnejo z latiničnim znakom.',
'invalid_request' => 'Predloge ni bilo mogoče shraniti zaradi neveljavnih podatkov komponente.',
'no_records' => 'Ni najdenih komponent.',
'not_found' => "Komponente :name ni mogoče najti.",
'method_not_found' => "Komponenta ':name' ne vsebuje metode ':method'.",
],
'template' => [
'invalid_type' => 'Neznan format predloge.',
'not_found' => 'Predloge ni mogoče najti.',
'saved' => 'Predloga je shranjena.',
'no_list_records' => 'Ni najdenih zapisov.',
'delete_confirm' => 'Želite izbrisati izbrane predloge?',
'order_by' => 'Razvrsti po',
],
'permissions' => [
'name' => 'CMS',
'manage_content' => 'Upravljanje datotek z vsebino spletne strani',
'manage_assets' => 'Upravljanje z oblikovnimi datotekami - slike, JavaScript, CSS datoteke',
'manage_pages' => 'Ustvarjanje, spremeninjanje ali brisanje strani',
'manage_layouts' => 'Ustvarjanje, spremeninjanje ali brisanje CMS postavitev',
'manage_partials' => 'Ustvarjanje, spremeninjanje ali brisanje CMS predlog',
'manage_themes' => 'Aktiviranje, deaktiviranje ali konfiguriranje CMS tem',
'manage_theme_options' => 'Konfiguriranje možnosti prilagajanja za aktivno temo',
],
'theme_log' => [
'hint' => 'V tem dnevniku so prikazane vse spremembe teme, ki so jih naredili administratorji v administraciji.',
'menu_label' => 'Dnevnik sprememb teme',
'menu_description' => 'Pokaži spremembe aktivne teme.',
'empty_link' => 'Sprazni dnevnik sprememb teme',
'empty_loading' => 'Praznjenje dnevnika sprememb...',
'empty_success' => 'Dnevnik sprememb je izpraznjen',
'return_link' => 'Vrni se na dnevnik sprememb teme',
'id' => 'ID',
'id_label' => 'ID dnevnika',
'created_at' => 'Čas in datum',
'user' => 'Uporabnik',
'type' => 'Tip',
'type_create' => 'Ustvari',
'type_update' => 'Posodobi',
'type_delete' => 'Izbriši',
'theme_name' => 'Tema',
'theme_code' => 'Koda teme',
'old_template' => 'Predloga (stara)',
'new_template' => 'Predloga (nova)',
'template' => 'Predloga',
'diff' => 'Spremembe',
'old_value' => 'Stara vrednost',
'new_value' => 'Nova vrednost',
'preview_title' => 'Spremembe predloge',
'template_updated' => 'Predloga je posodobljena',
'template_created' => 'Predloga je ustvarjena',
'template_deleted' => 'Predloga je izbrisana',
],
];

View File

@ -4,8 +4,17 @@
* Register CMS routes before all user routes.
*/
App::before(function ($request) {
/*
* Extensibility
/**
* @event cms.beforeRoute
* Fires before cms routes get added
*
* Example usage:
*
* Event::listen('cms.beforeRoute', function () {
* // your code here
* });
*
*/
Event::fire('cms.beforeRoute');
@ -15,8 +24,16 @@ App::before(function ($request) {
*/
Route::any('{slug}', 'Cms\Classes\CmsController@run')->where('slug', '(.*)?')->middleware('web');
/*
* Extensibility
/**
* @event cms.route
* Fires after cms routes get added
*
* Example usage:
*
* Event::listen('cms.route', function () {
* // your code here
* });
*
*/
Event::fire('cms.route');
});

View File

@ -193,6 +193,19 @@ class Extension extends TwigExtension
return $default;
}
/**
* @event cms.block.render
* Provides an opportunity to modify the rendered block content
*
* Example usage:
*
* Event::listen('cms.block.render', function ((string) $name, (string) $result) {
* if ($name === 'myBlockName') {
* return 'my custom content';
* }
* });
*
*/
if ($event = Event::fire('cms.block.render', [$name, $result], true)) {
$result = $event;
}

View File

@ -150,6 +150,7 @@
paramName: 'file_data',
previewsContainer: $('<div />').get(0),
clickable: $link.get(0),
timeout: 0,
headers: {}
}

View File

@ -1,5 +1,6 @@
<?php namespace System;
use Db;
use App;
use View;
use Event;
@ -84,9 +85,7 @@ class ServiceProvider extends ModuleServiceProvider
public function boot()
{
// Fix UTF8MB4 support for MariaDB < 10.2 and MySQL < 5.7
if (Config::get('database.connections.mysql.charset') === 'utf8mb4') {
Schema::defaultStringLength(191);
}
$this->applyDatabaseDefaultStringLength();
// Fix use of Storage::url() for local disks that haven't been configured correctly
foreach (Config::get('filesystems.disks') as $key => $config) {
@ -247,6 +246,7 @@ class ServiceProvider extends ModuleServiceProvider
$this->registerConsoleCommand('october.fresh', 'System\Console\OctoberFresh');
$this->registerConsoleCommand('october.env', 'System\Console\OctoberEnv');
$this->registerConsoleCommand('october.install', 'System\Console\OctoberInstall');
$this->registerConsoleCommand('october.passwd', 'System\Console\OctoberPasswd');
$this->registerConsoleCommand('plugin.install', 'System\Console\PluginInstall');
$this->registerConsoleCommand('plugin.remove', 'System\Console\PluginRemove');
@ -563,4 +563,24 @@ class ServiceProvider extends ModuleServiceProvider
{
View::share('appName', Config::get('app.name'));
}
/**
* Fix UTF8MB4 support for old versions of MariaDB (<10.2) and MySQL (<5.7)
*/
protected function applyDatabaseDefaultStringLength()
{
if (Db::getDriverName() !== 'mysql') {
return;
}
$defaultStrLen = Db::getConfig('varcharmax');
if ($defaultStrLen === null && Db::getConfig('charset') === 'utf8mb4') {
$defaultStrLen = 191;
}
if ($defaultStrLen !== null) {
Schema::defaultStringLength((int) $defaultStrLen);
}
}
}

View File

@ -40,7 +40,7 @@
}
})
markup = self.parseSource(self.$el.text())
markup = self.parseSource(self.$el.html())
self.$el
.addClass('plugin-exception-beautifier')
@ -274,7 +274,10 @@
}
}
else {
markup += $.oc.escapeHtmlString(str)
// Allow HTML entities
str = str.replace(/&amp;([^\s&;]+?);/g, '&$1;')
markup += str
.replace(/\{x-newline\}/g, '<br>')
.replace(/\{x-tabulation\}/g, '&nbsp;&nbsp;')
}
@ -353,7 +356,7 @@
tabs.find('#beautifier-tab-formatted').append(markup)
}
tabs.find('#beautifier-tab-raw').append('<div class="beautifier-raw-content">' + $.oc.escapeHtmlString(source.trim()).replace(/\r\n|\r|\n/g, '<br>').replace(/ {2}/g, '&nbsp;&nbsp;') + '</div>')
tabs.find('#beautifier-tab-raw').append('<div class="beautifier-raw-content">' + source.trim().replace(/\r\n|\r|\n/g, '<br>').replace(/ {2}/g, '&nbsp;&nbsp;') + '</div>')
tabs.ocTab({
closable: false

View File

@ -5,7 +5,7 @@ if ($.oc === undefined) $.oc = {}
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
$.oc.langMessages['cs'] = $.extend(
$.oc.langMessages['cs'] || {},
{"markdowneditor":{"formatting":"Form\u00e1tov\u00e1n\u00ed","quote":"Citace","code":"K\u00f3d","header1":"Nadpis 1","header2":"Nadpis 2","header3":"Nadpis 3","header4":"Nadpis 4","header5":"Nadpis 5","header6":"Nadpis 6","bold":"Tu\u010dn\u011b","italic":"Kurz\u00edvou","unorderedlist":"Ne\u010d\u00edslovan\u00fd seznam","orderedlist":"\u010c\u00edslovan\u00fd seznam","video":"Video","image":"Obr\u00e1zek","link":"Odkaz","horizontalrule":"Vlo\u017eit horizont\u00e1ln\u00ed linku","fullscreen":"Cel\u00e1 obrazovka","preview":"N\u00e1hled"},"mediamanager":{"insert_link":"Vlo\u017eit odkaz","insert_image":"Vlo\u017eit obr\u00e1zek","insert_video":"Vlo\u017eit video","insert_audio":"Vlo\u017eit zvuk","invalid_file_empty_insert":"Pros\u00edm vyberte soubor, na kter\u00fd se vlo\u017e\u00ed odkaz.","invalid_file_single_insert":"Vyberte jeden soubor.","invalid_image_empty_insert":"Vyberte soubor(y) pro vlo\u017een\u00ed.","invalid_video_empty_insert":"Vyberte video soubor pro vlo\u017een\u00ed.","invalid_audio_empty_insert":"Vyberte audio soubor pro vlo\u017een\u00ed."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Zru\u0161it","widget_remove_confirm":"Odstranit widget?"},"datepicker":{"previousMonth":"P\u0159edchoz\u00ed m\u011bs\u00edc","nextMonth":"N\u00e1sleduj\u00edc\u00ed m\u011bs\u00edc","months":["Leden","\u00danor","B\u0159ezen","Duben","Kv\u011bten","\u010cerven","\u010cervenec","Srpen","Z\u00e1\u0159\u00ed","\u0158\u00edjen","Listopad","Prosinec"],"weekdays":["Ned\u011ble","Pond\u011bl\u00ed","\u00dater\u00fd","St\u0159eda","\u010ctvrtek","P\u00e1tek","Sobota"],"weekdaysShort":["Ne","Po","\u00dat","St","\u010ct","P\u00e1","So"]},"colorpicker":{"choose":"Ok"},"filter":{"group":{"all":"V\u0161e"},"scopes":{"apply_button_text":"Apply","clear_button_text":"Clear"},"dates":{"all":"V\u0161e","filter_button_text":"Filtrovat","reset_button_text":"Zru\u0161it","date_placeholder":"Datum","after_placeholder":"Po","before_placeholder":"P\u0159ed"},"numbers":{"all":"all","filter_button_text":"Filter","reset_button_text":"Reset","min_placeholder":"Min","max_placeholder":"Max"}},"eventlog":{"show_stacktrace":"Zobrazit stacktrace","hide_stacktrace":"Skr\u00fdt stacktrace","tabs":{"formatted":"Form\u00e1tov\u00e1no","raw":"P\u016fvodn\u00ed (raw)"},"editor":{"title":"Editor zdrojov\u00e9ho k\u00f3du","description":"V\u00e1\u0161 opera\u010dn\u00ed syst\u00e9m by m\u011bl b\u00fdt konfigurov\u00e1n tak, aby naslouchal jednomu z t\u011bchto sch\u00e9mat adres URL.","openWith":"Otev\u0159\u00edt v","remember_choice":"Zapamatovat si vybranou volbu pro tuto relaci","open":"Otev\u0159\u00edt","cancel":"Zru\u0161it"}}}
{"markdowneditor":{"formatting":"Form\u00e1tov\u00e1n\u00ed","quote":"Citace","code":"K\u00f3d","header1":"Nadpis 1","header2":"Nadpis 2","header3":"Nadpis 3","header4":"Nadpis 4","header5":"Nadpis 5","header6":"Nadpis 6","bold":"Tu\u010dn\u011b","italic":"Kurz\u00edvou","unorderedlist":"Ne\u010d\u00edslovan\u00fd seznam","orderedlist":"\u010c\u00edslovan\u00fd seznam","video":"Video","image":"Obr\u00e1zek","link":"Odkaz","horizontalrule":"Vlo\u017eit horizont\u00e1ln\u00ed linku","fullscreen":"Cel\u00e1 obrazovka","preview":"N\u00e1hled"},"mediamanager":{"insert_link":"Vlo\u017eit odkaz","insert_image":"Vlo\u017eit obr\u00e1zek","insert_video":"Vlo\u017eit video","insert_audio":"Vlo\u017eit zvuk","invalid_file_empty_insert":"Pros\u00edm vyberte soubor, na kter\u00fd se vlo\u017e\u00ed odkaz.","invalid_file_single_insert":"Vyberte jeden soubor.","invalid_image_empty_insert":"Vyberte soubor(y) pro vlo\u017een\u00ed.","invalid_video_empty_insert":"Vyberte video soubor pro vlo\u017een\u00ed.","invalid_audio_empty_insert":"Vyberte audio soubor pro vlo\u017een\u00ed."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Zru\u0161it","widget_remove_confirm":"Odstranit widget?"},"datepicker":{"previousMonth":"P\u0159edchoz\u00ed m\u011bs\u00edc","nextMonth":"N\u00e1sleduj\u00edc\u00ed m\u011bs\u00edc","months":["Leden","\u00danor","B\u0159ezen","Duben","Kv\u011bten","\u010cerven","\u010cervenec","Srpen","Z\u00e1\u0159\u00ed","\u0158\u00edjen","Listopad","Prosinec"],"weekdays":["Ned\u011ble","Pond\u011bl\u00ed","\u00dater\u00fd","St\u0159eda","\u010ctvrtek","P\u00e1tek","Sobota"],"weekdaysShort":["Ne","Po","\u00dat","St","\u010ct","P\u00e1","So"]},"colorpicker":{"choose":"Ok"},"filter":{"group":{"all":"V\u0161e"},"scopes":{"apply_button_text":"Filtrovat","clear_button_text":"Zru\u0161it"},"dates":{"all":"V\u0161e","filter_button_text":"Filtrovat","reset_button_text":"Zru\u0161it","date_placeholder":"Datum","after_placeholder":"Po","before_placeholder":"P\u0159ed"},"numbers":{"all":"V\u0161e","filter_button_text":"Filtrovat","reset_button_text":"Zru\u0161it","min_placeholder":"Minimum","max_placeholder":"Maximum"}},"eventlog":{"show_stacktrace":"Zobrazit stacktrace","hide_stacktrace":"Skr\u00fdt stacktrace","tabs":{"formatted":"Form\u00e1tov\u00e1no","raw":"P\u016fvodn\u00ed (raw)"},"editor":{"title":"Editor zdrojov\u00e9ho k\u00f3du","description":"V\u00e1\u0161 opera\u010dn\u00ed syst\u00e9m by m\u011bl b\u00fdt konfigurov\u00e1n tak, aby naslouchal jednomu z t\u011bchto sch\u00e9mat adres URL.","openWith":"Otev\u0159\u00edt v","remember_choice":"Zapamatovat si vybranou volbu pro tuto relaci","open":"Otev\u0159\u00edt","cancel":"Zru\u0161it"}}}
);
//! moment.js locale configuration v2.22.2

View File

@ -5,62 +5,61 @@ if ($.oc === undefined) $.oc = {}
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
$.oc.langMessages['fr'] = $.extend(
$.oc.langMessages['fr'] || {},
{ "markdowneditor": { "formatting": "Formatage", "quote": "Citation", "code": "Code", "header1": "Ent\u00eate 1", "header2": "Ent\u00eate 2", "header3": "Ent\u00eate 3", "header4": "Ent\u00eate 4", "header5": "Ent\u00eate 5", "header6": "Ent\u00eate 6", "bold": "Gras", "italic": "Italique", "unorderedlist": "Liste non ordonn\u00e9e", "orderedlist": "Liste ordonn\u00e9e", "video": "Vid\u00e9o", "image": "Image", "link": "Lien", "horizontalrule": "Ins\u00e9rer la r\u00e8gle horizontalement", "fullscreen": "Plein \u00e9cran", "preview": "Aper\u00e7u" }, "mediamanager": { "insert_link": "Ins\u00e9rer un lien vers un fichier du gestionnaire de m\u00e9dia", "insert_image": "Ins\u00e9rer une image du gestionnaire de m\u00e9dia", "insert_video": "Ins\u00e9rer une vid\u00e9o du gestionnaire de m\u00e9dia", "insert_audio": "Ins\u00e9rer un document audio du gestionnaire de m\u00e9dia", "invalid_file_empty_insert": "Veuillez s\u00e9lectionner un fichier \u00e0 lier.", "invalid_file_single_insert": "Veuillez s\u00e9lectionner un seul fichier.", "invalid_image_empty_insert": "Veuillez s\u00e9lectionner au moins une image \u00e0 ins\u00e9rer.", "invalid_video_empty_insert": "Veuillez s\u00e9lectionner une vid\u00e9o \u00e0 ins\u00e9rer.", "invalid_audio_empty_insert": "Veuillez s\u00e9lectionner un document audio \u00e0 ins\u00e9rer." }, "alert": { "confirm_button_text": "OK", "cancel_button_text": "Annuler", "widget_remove_confirm": "Retirer ce widget ?" }, "datepicker": { "previousMonth": "Mois pr\u00e9c\u00e9dent", "nextMonth": "Mois suivant", "months": ["Janvier", "F\u00e9vrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Ao\u00fbt", "Septembre", "Octobre", "Novembre", "D\u00e9cembre"], "weekdays": ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"], "weekdaysShort": ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"] }, "colorpicker": { "choose": "Ok" }, "filter": { "group": { "all": "tous" }, "scopes": { "apply_button_text": "Appliquer", "clear_button_text": "Annuler" }, "dates": { "all": "toute la p\u00e9riode", "filter_button_text": "Filtrer", "reset_button_text": "Effacer", "date_placeholder": "Date", "after_placeholder": "Apr\u00e8s le", "before_placeholder": "Avant le" }, "numbers": { "all": "tous", "filter_button_text": "Filtres", "reset_button_text": "R\u00e9initialiser", "min_placeholder": "Min", "max_placeholder": "Max" } }, "eventlog": { "show_stacktrace": "Afficher la pile d\u2019ex\u00e9cution", "hide_stacktrace": "Masquer la pile d\u2019ex\u00e9cution", "tabs": { "formatted": "Message format\u00e9", "raw": "Message brut" }, "editor": { "title": "S\u00e9lectionnez l\u2019\u00e9diteur de code source \u00e0 utiliser", "description": "L\u2019environnement de votre syst\u00e8me d\u2019exploitation doit \u00eatre configur\u00e9 pour ouvrir l\u2019un des sch\u00e9mas d\u2019URL ci-dessous.", "openWith": "Ouvrir avec", "remember_choice": "Se souvenir de la s\u00e9lection pour la dur\u00e9e de la session dans ce navigateur", "open": "Ouvrir", "cancel": "Annuler" } } }
{"markdowneditor":{"formatting":"Formatage","quote":"Citation","code":"Code","header1":"Ent\u00eate 1","header2":"Ent\u00eate 2","header3":"Ent\u00eate 3","header4":"Ent\u00eate 4","header5":"Ent\u00eate 5","header6":"Ent\u00eate 6","bold":"Gras","italic":"Italique","unorderedlist":"Liste non ordonn\u00e9e","orderedlist":"Liste ordonn\u00e9e","video":"Vid\u00e9o","image":"Image","link":"Lien","horizontalrule":"Ins\u00e9rer la r\u00e8gle horizontalement","fullscreen":"Plein \u00e9cran","preview":"Aper\u00e7u"},"mediamanager":{"insert_link":"Ins\u00e9rer un lien vers un fichier du gestionnaire de m\u00e9dia","insert_image":"Ins\u00e9rer une image du gestionnaire de m\u00e9dia","insert_video":"Ins\u00e9rer une vid\u00e9o du gestionnaire de m\u00e9dia","insert_audio":"Ins\u00e9rer un document audio du gestionnaire de m\u00e9dia","invalid_file_empty_insert":"Veuillez s\u00e9lectionner un fichier \u00e0 lier.","invalid_file_single_insert":"Veuillez s\u00e9lectionner un seul fichier.","invalid_image_empty_insert":"Veuillez s\u00e9lectionner au moins une image \u00e0 ins\u00e9rer.","invalid_video_empty_insert":"Veuillez s\u00e9lectionner une vid\u00e9o \u00e0 ins\u00e9rer.","invalid_audio_empty_insert":"Veuillez s\u00e9lectionner un document audio \u00e0 ins\u00e9rer."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Annuler","widget_remove_confirm":"Retirer ce widget ?"},"datepicker":{"previousMonth":"Mois pr\u00e9c\u00e9dent","nextMonth":"Mois suivant","months":["Janvier","F\u00e9vrier","Mars","Avril","Mai","Juin","Juillet","Ao\u00fbt","Septembre","Octobre","Novembre","D\u00e9cembre"],"weekdays":["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],"weekdaysShort":["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"]},"colorpicker":{"choose":"Ok"},"filter":{"group":{"all":"tous"},"scopes":{"apply_button_text":"Appliquer","clear_button_text":"Annuler"},"dates":{"all":"toute la p\u00e9riode","filter_button_text":"Filtrer","reset_button_text":"Effacer","date_placeholder":"Date","after_placeholder":"Apr\u00e8s le","before_placeholder":"Avant le"},"numbers":{"all":"tous","filter_button_text":"Filtres","reset_button_text":"R\u00e9initialiser","min_placeholder":"Min","max_placeholder":"Max"}},"eventlog":{"show_stacktrace":"Afficher la pile d\u2019ex\u00e9cution","hide_stacktrace":"Masquer la pile d\u2019ex\u00e9cution","tabs":{"formatted":"Message format\u00e9","raw":"Message brut"},"editor":{"title":"S\u00e9lectionnez l\u2019\u00e9diteur de code source \u00e0 utiliser","description":"L\u2019environnement de votre syst\u00e8me d\u2019exploitation doit \u00eatre configur\u00e9 pour ouvrir l\u2019un des sch\u00e9mas d\u2019URL ci-dessous.","openWith":"Ouvrir avec","remember_choice":"Se souvenir de la s\u00e9lection pour la dur\u00e9e de la session dans ce navigateur","open":"Ouvrir","cancel":"Annuler"}}}
);
//! moment.js locale configuration v2.22.2
; (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined'
&& typeof require === 'function' ? factory(require('../moment')) :
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
factory(global.moment)
}(this, (function (moment) {
'use strict';
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined'
&& typeof require === 'function' ? factory(require('../moment')) :
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
factory(global.moment)
}(this, (function (moment) { 'use strict';
var fr = moment.defineLocale('fr', {
months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
monthsParseExact: true,
weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm'
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
monthsParseExact : true,
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),
weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY HH:mm',
LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[Aujourdhui à] LT',
nextDay: '[Demain à] LT',
nextWeek: 'dddd [à] LT',
lastDay: '[Hier à] LT',
lastWeek: 'dddd [dernier à] LT',
sameElse: 'L'
calendar : {
sameDay : '[Aujourdhui à] LT',
nextDay : '[Demain à] LT',
nextWeek : 'dddd [à] LT',
lastDay : '[Hier à] LT',
lastWeek : 'dddd [dernier à] LT',
sameElse : 'L'
},
relativeTime: {
future: 'dans %s',
past: 'il y a %s',
s: 'quelques secondes',
ss: '%d secondes',
m: 'une minute',
mm: '%d minutes',
h: 'une heure',
hh: '%d heures',
d: 'un jour',
dd: '%d jours',
M: 'un mois',
MM: '%d mois',
y: 'un an',
yy: '%d ans'
relativeTime : {
future : 'dans %s',
past : 'il y a %s',
s : 'quelques secondes',
ss : '%d secondes',
m : 'une minute',
mm : '%d minutes',
h : 'une heure',
hh : '%d heures',
d : 'un jour',
dd : '%d jours',
M : 'un mois',
MM : '%d mois',
y : 'un an',
yy : '%d ans'
},
dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
ordinal: function (number, period) {
ordinal : function (number, period) {
switch (period) {
// TODO: Return 'e' when day of month > 1. Move this case inside
// block for masculine words below.
@ -82,9 +81,9 @@ $.oc.langMessages['fr'] = $.extend(
return number + (number === 1 ? 're' : 'e');
}
},
week: {
dow: 1, // Monday is the first day of the week.
doy: 4 // The week that contains Jan 4th is the first week of the year.
week : {
dow : 1, // Monday is the first day of the week.
doy : 4 // The week that contains Jan 4th is the first week of the year.
}
});

View File

@ -0,0 +1,183 @@
/*
* This file has been compiled from: /modules/system/lang/sl/client.php
*/
if ($.oc === undefined) $.oc = {}
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
$.oc.langMessages['sl'] = $.extend(
$.oc.langMessages['sl'] || {},
{"markdowneditor":{"formatting":"Oblikovanje","quote":"Citat","code":"Koda","header1":"Naslov 1","header2":"Naslov 2","header3":"Naslov 3","header4":"Naslov 4","header5":"Naslov 5","header6":"Naslov 6","bold":"Krepko","italic":"Le\u017ee\u010de","unorderedlist":"Ne\u0161tevil\u010dni seznam","orderedlist":"\u0160tevil\u010dni seznam","video":"Video","image":"Slika","link":"Povezava","horizontalrule":"Vstavi vodoravno \u010drto","fullscreen":"Celozaslonski na\u010din","preview":"Predogled"},"mediamanager":{"insert_link":"Vstavi povezavo","insert_image":"Vstavi sliko","insert_video":"Vstavi video posnetek","insert_audio":"Vstavi zvo\u010dni posnetek","invalid_file_empty_insert":"Izberite datoteko, do katere \u017eelite vstaviti povezavo.","invalid_file_single_insert":"Izberite eno samo datoteko.","invalid_image_empty_insert":"Izberite slike za vstavljanje.","invalid_video_empty_insert":"Izberite video posnetek za vstavljanje.","invalid_audio_empty_insert":"Izberite zvo\u010dni posnetek za vstavljanje."},"alert":{"confirm_button_text":"V redu","cancel_button_text":"Prekli\u010di","widget_remove_confirm":"Odstrani ta vti\u010dnik?"},"datepicker":{"previousMonth":"Prej\u0161nji mesec","nextMonth":"Naslednji mesec","months":["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],"weekdays":["Nedelja","Ponedeljek","Torek","Sreda","\u010cetrtek","Petek","Sobota"],"weekdaysShort":["Ned","Pon","Tor","Sre","\u010cet","Pet","Sob"]},"colorpicker":{"choose":"Ok"},"filter":{"group":{"all":"vsi"},"scopes":{"apply_button_text":"Uporabi","clear_button_text":"Po\u010disti"},"dates":{"all":"vsi","filter_button_text":"Filtriraj","reset_button_text":"Ponastavi","date_placeholder":"Datum","after_placeholder":"Po","before_placeholder":"Pred"},"numbers":{"all":"vsi","filter_button_text":"Filtriraj","reset_button_text":"Ponastavi","min_placeholder":"Min","max_placeholder":"Max"}},"eventlog":{"show_stacktrace":"Prika\u017ei sled dogodkov","hide_stacktrace":"Skrij sled dogodkov","tabs":{"formatted":"Oblikovano","raw":"Brez oblikovanja"},"editor":{"title":"Urejevalnik izvorne kode","description":"Va\u0161 operacijski sistem mora biti nastavljen tako, da upo\u0161teva eno od teh URL shem.","openWith":"Za odpiranje uporabi","remember_choice":"Zapomni si izbrane nastavitve za to sejo","open":"Odpri","cancel":"Prekli\u010di"}}}
);
//! moment.js locale configuration v2.22.2
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined'
&& typeof require === 'function' ? factory(require('../moment')) :
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
factory(global.moment)
}(this, (function (moment) { 'use strict';
function processRelativeTime(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
case 's':
return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
case 'ss':
if (number === 1) {
result += withoutSuffix ? 'sekundo' : 'sekundi';
} else if (number === 2) {
result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
} else if (number < 5) {
result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
} else {
result += withoutSuffix || isFuture ? 'sekund' : 'sekund';
}
return result;
case 'm':
return withoutSuffix ? 'ena minuta' : 'eno minuto';
case 'mm':
if (number === 1) {
result += withoutSuffix ? 'minuta' : 'minuto';
} else if (number === 2) {
result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
} else if (number < 5) {
result += withoutSuffix || isFuture ? 'minute' : 'minutami';
} else {
result += withoutSuffix || isFuture ? 'minut' : 'minutami';
}
return result;
case 'h':
return withoutSuffix ? 'ena ura' : 'eno uro';
case 'hh':
if (number === 1) {
result += withoutSuffix ? 'ura' : 'uro';
} else if (number === 2) {
result += withoutSuffix || isFuture ? 'uri' : 'urama';
} else if (number < 5) {
result += withoutSuffix || isFuture ? 'ure' : 'urami';
} else {
result += withoutSuffix || isFuture ? 'ur' : 'urami';
}
return result;
case 'd':
return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
case 'dd':
if (number === 1) {
result += withoutSuffix || isFuture ? 'dan' : 'dnem';
} else if (number === 2) {
result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
} else {
result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
}
return result;
case 'M':
return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
case 'MM':
if (number === 1) {
result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
} else if (number === 2) {
result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
} else if (number < 5) {
result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
} else {
result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
}
return result;
case 'y':
return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
case 'yy':
if (number === 1) {
result += withoutSuffix || isFuture ? 'leto' : 'letom';
} else if (number === 2) {
result += withoutSuffix || isFuture ? 'leti' : 'letoma';
} else if (number < 5) {
result += withoutSuffix || isFuture ? 'leta' : 'leti';
} else {
result += withoutSuffix || isFuture ? 'let' : 'leti';
}
return result;
}
}
var sl = moment.defineLocale('sl', {
months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
monthsParseExact: true,
weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY H:mm',
LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danes ob] LT',
nextDay : '[jutri ob] LT',
nextWeek : function () {
switch (this.day()) {
case 0:
return '[v] [nedeljo] [ob] LT';
case 3:
return '[v] [sredo] [ob] LT';
case 6:
return '[v] [soboto] [ob] LT';
case 1:
case 2:
case 4:
case 5:
return '[v] dddd [ob] LT';
}
},
lastDay : '[včeraj ob] LT',
lastWeek : function () {
switch (this.day()) {
case 0:
return '[prejšnjo] [nedeljo] [ob] LT';
case 3:
return '[prejšnjo] [sredo] [ob] LT';
case 6:
return '[prejšnjo] [soboto] [ob] LT';
case 1:
case 2:
case 4:
case 5:
return '[prejšnji] dddd [ob] LT';
}
},
sameElse : 'L'
},
relativeTime : {
future : 'čez %s',
past : 'pred %s',
s : processRelativeTime,
ss : processRelativeTime,
m : processRelativeTime,
mm : processRelativeTime,
h : processRelativeTime,
hh : processRelativeTime,
d : processRelativeTime,
dd : processRelativeTime,
M : processRelativeTime,
MM : processRelativeTime,
y : processRelativeTime,
yy : processRelativeTime
},
dayOfMonthOrdinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
doy : 7 // The week that contains Jan 1st is the first week of the year.
}
});
return sl;
})));

View File

@ -27,10 +27,10 @@ The next example shows a line chart markup. Data sets are defined with the SPAN
<div
data-control="chart-line"
data-time-mode="weeks"
class="height-200"
style="height: 200px"
data-chart-options="xaxis: {mode: 'time'}">
<span
data-chart="dataset"
<span
data-chart="dataset"
data-set-color="#008dc9"
data-set-data="[1477857082000, 400], [1477943482000, 380], [1478029882000, 340], [1478116282000, 540], [1478202682000, 440], [1478289082000, 360], [1478375482000, 220]"
data-set-name="Visits">

View File

@ -190,8 +190,8 @@
autoclose: 'true',
placement: 'auto',
align: 'right',
twelvehour: this.isTimeTwelveHour()
// afterDone: this.proxy(this.onSelectTimePicker)
twelvehour: this.isTimeTwelveHour(),
afterDone: this.proxy(this.onChangeTimePicker)
})
this.$timePicker.val(this.getDataLockerValue(this.getTimeFormat()))
@ -213,6 +213,11 @@
this.$dataLocker.val(lockerValue)
}
DatePicker.prototype.onChangeTimePicker = function() {
// Trigger a change event when the time is changed, to allow dependent fields to refresh
this.$timePicker.trigger('change')
}
// Returns in user preference timezone
DatePicker.prototype.getTimePickerValue = function() {
var value = this.$timePicker.val()

View File

@ -43,14 +43,14 @@
this.$el.on('show.oc.popover', 'a.filter-scope-date', function (event) {
self.initDatePickers($(this).hasClass('range'))
$(event.relatedTarget).on('click', '#controlFilterPopoverDate [data-trigger="filter"]', function (e) {
$(event.relatedTarget).on('click', '#controlFilterPopoverDate [data-filter-action="filter"]', function (e) {
e.preventDefault()
e.stopPropagation()
self.filterByDate()
})
$(event.relatedTarget).on('click', '#controlFilterPopoverDate [data-trigger="clear"]', function (e) {
$(event.relatedTarget).on('click', '#controlFilterPopoverDate [data-filter-action="clear"]', function (e) {
e.preventDefault()
e.stopPropagation()
@ -121,7 +121,7 @@
</div> \
</div> \
<div class="filter-buttons"> \
<button class="btn btn-block btn-secondary" data-trigger="clear"> \
<button class="btn btn-block btn-secondary" data-filter-action="clear"> \
{{ reset_button_text }} \
</button> \
</div> \
@ -159,16 +159,16 @@
type="text" \
name="date" \
value="{{ date }}" \
class="form-control align-right popup-allow-focus" \
class="form-control align-right popup-allow-focus" \
autocomplete="off" \
placeholder="{{ before_placeholder }}" /> \
</div> \
</div> \
<div class="filter-buttons"> \
<button class="btn btn-block btn-primary" data-trigger="filter"> \
<button class="btn btn-block btn-primary" data-filter-action="filter"> \
{{ filter_button_text }} \
</button> \
<button class="btn btn-block btn-secondary" data-trigger="clear"> \
<button class="btn btn-block btn-secondary" data-filter-action="clear"> \
{{ reset_button_text }} \
</button> \
</div> \

View File

@ -78,10 +78,10 @@
</ul> \
</div> \
<div class="filter-buttons"> \
<button class="btn btn-block btn-primary oc-icon-filter" data-trigger="apply"> \
<button class="btn btn-block btn-primary oc-icon-filter" data-filter-action="apply"> \
{{ apply_button_text }} \
</button> \
<button class="btn btn-block btn-secondary oc-icon-eraser" data-trigger="clear"> \
<button class="btn btn-block btn-secondary oc-icon-eraser" data-filter-action="clear"> \
{{ clear_button_text }} \
</button> \
</div> \
@ -146,12 +146,12 @@
self.filterAvailable(data.scopeName, data.options.available)
})
$(event.relatedTarget).on('click', '#controlFilterPopover [data-trigger="apply"]', function (e) {
$(event.relatedTarget).on('click', '#controlFilterPopover [data-filter-action="apply"]', function (e) {
e.preventDefault()
self.filterScope()
})
$(event.relatedTarget).on('click', '#controlFilterPopover [data-trigger="clear"]', function (e) {
$(event.relatedTarget).on('click', '#controlFilterPopover [data-filter-action="clear"]', function (e) {
e.preventDefault()
self.filterScope(true)
})

View File

@ -42,13 +42,13 @@
this.$el.on('show.oc.popover', 'a.filter-scope-number', function (event) {
self.initNumberInputs($(this).hasClass('range'))
$(event.relatedTarget).on('click', '#controlFilterPopoverNum [data-trigger="filter"]', function (e) {
$(event.relatedTarget).on('click', '#controlFilterPopoverNum [data-filter-action="filter"]', function (e) {
e.preventDefault()
e.stopPropagation()
self.filterByNumber()
})
$(event.relatedTarget).on('click', '#controlFilterPopoverNum [data-trigger="clear"]', function (e) {
$(event.relatedTarget).on('click', '#controlFilterPopoverNum [data-filter-action="clear"]', function (e) {
e.preventDefault()
e.stopPropagation()
@ -111,10 +111,10 @@
placeholder="{{ number_placeholder }}" /> \
</div> \
<div class="filter-buttons"> \
<button class="btn btn-block btn-primary" data-trigger="filter"> \
<button class="btn btn-block btn-primary" data-filter-action="filter"> \
{{ filter_button_text }} \
</button> \
<button class="btn btn-block btn-secondary" data-trigger="clear"> \
<button class="btn btn-block btn-secondary" data-filter-action="clear"> \
{{ reset_button_text }} \
</button> \
</div> \
@ -157,10 +157,10 @@
</div> \
</div> \
<div class="filter-buttons"> \
<button class="btn btn-block btn-primary" data-trigger="filter"> \
<button class="btn btn-block btn-primary" data-filter-action="filter"> \
{{ filter_button_text }} \
</button> \
<button class="btn btn-block btn-secondary" data-trigger="clear"> \
<button class="btn btn-block btn-secondary" data-filter-action="clear"> \
{{ reset_button_text }} \
</button> \
</div> \
@ -257,7 +257,7 @@
numbers[1] = numbers[1] && numbers[1].match(numberRegex) ? numbers[1] : null
if(numbers[0] || numbers[1]) {
var min = numbers[0] ? numbers[0] : '',
var min = numbers[0] ? numbers[0] : '',
max = numbers[1] ? numbers[1] : '∞'
$setting.text(min + ' → ' + max)

View File

@ -62,11 +62,11 @@
}
}
$(this).find('td').not('.' + options.excludeClass).click(function(e) {
$(this).not('.' + options.excludeClass).find('td').not('.' + options.excludeClass).click(function(e) {
handleClick(e)
})
$(this).on('keypress', function(e) {
$(this).not('.' + options.excludeClass).on('keypress', function(e) {
if (e.key === '(Space character)' || e.key === 'Spacebar' || e.key === ' ') {
handleClick(e)
return false

View File

@ -123,10 +123,13 @@
if ($element.hasClass('select-no-dropdown')) {
extraOptions.selectOnClose = true
extraOptions.closeOnSelect = false
extraOptions.minimumInputLength = 1
$element.on('select2:closing', function() {
$('.select2-dropdown.select-no-dropdown:first .select2-results__option--highlighted').removeClass('select2-results__option--highlighted')
$('.select2-dropdown.select-no-dropdown:first .select2-results__option:first').addClass('select2-results__option--highlighted')
if ($('.select2-dropdown.select-no-dropdown:first .select2-results__option--highlighted').length > 0) {
$('.select2-dropdown.select-no-dropdown:first .select2-results__option--highlighted').removeClass('select2-results__option--highlighted')
$('.select2-dropdown.select-no-dropdown:first .select2-results__option:first').addClass('select2-results__option--highlighted')
}
})
}
}

View File

@ -100,7 +100,7 @@
.attr('data-toggle', 'tab')
if (!$anchor.attr('title'))
$anchor.attr('title', $anchor.text())
$anchor.attr('title', $anchor.text().trim())
// Setup the required tabs markup if it does not exist already.
if ($anchor.find('> span.title > span').length < 1) {
@ -422,4 +422,4 @@
$el.focus()
})
}(window.jQuery);
}(window.jQuery);

View File

@ -197,7 +197,7 @@ input[type="date"] {
display: block;
min-height: @line-height-computed; // clear the floating input if there is no label text
margin-top: 10px;
margin-bottom: 10px;
margin-bottom: 15px;
padding-left: 20px;
label {
display: inline;

View File

@ -329,13 +329,15 @@
}
.field-checkboxlist {
&:not(.is-scrollable) {
.field-checkboxlist-inner {
.border-radius(@border-radius-base);
background: @color-form-checkboxlist-background;
border: 1px solid @color-form-checkboxlist-border;
}
&:not(.is-scrollable) {
.field-checkboxlist-inner {
padding: 20px 20px 2px 20px;
padding: 15px 15px 2px 15px;
}
}
@ -368,17 +370,14 @@
}
}
.field-checkboxlist-scrollable {
background: @color-form-checkboxlist-background;
border: 1px solid @color-form-checkboxlist-border;
padding-left: 15px;
height: @size-large + 100;
// First checkbox
.checkbox {
margin-top: 15px;
margin-bottom: 5px;
margin-bottom: 10px;
}
// All others
@ -555,4 +554,4 @@ body.slim-container {
select.form-control.custom-select {
display: none;
}
}
}

View File

@ -153,7 +153,7 @@ table.table.data {
}
}
tr.rowlink:hover td, tr:not(.no-data).selected td {
tr.rowlink:not(.nolink):hover td, tr:not(.no-data).selected td {
background: @color-list-hover-bg !important;
color: @highlight-hover-text;
@ -162,7 +162,7 @@ table.table.data {
}
}
tr.rowlink:active td {
tr.rowlink:not(.nolink):active td {
background: @color-list-active-bg !important;
color: @color-list-active-text;
}

View File

@ -2,7 +2,7 @@
// CSS for rowlink plugin
// ----------------------
tr.rowlink td {
tr.rowlink:not(.nolink) td {
cursor: pointer;
&.nolink {
cursor: auto;

View File

@ -113,6 +113,10 @@
.control-popup {
&.fade {
&:not(.in) {
pointer-events: none;
}
.modal-dialog {
.opacity(0);
.transition(~'all 0.3s, width 0s');

File diff suppressed because one or more lines are too long

View File

@ -3705,7 +3705,7 @@ input[type="search"] {-webkit-appearance:none}
input[type="date"] {line-height:38px}
.form-group {margin-bottom:15px}
.radio,
.checkbox {display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}
.checkbox {display:block;min-height:20px;margin-top:10px;margin-bottom:15px;padding-left:20px}
.radio label,
.checkbox label {display:inline;font-weight:normal;cursor:pointer}
.radio input[type="radio"],
@ -4242,15 +4242,15 @@ html.cssanimations .cursor-loading-indicator.hide {display:none}
.field-textarea.size-large {min-height:200px}
.field-textarea.size-huge {min-height:250px}
.field-textarea.size-giant {min-height:350px}
.field-checkboxlist:not(.is-scrollable) {-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#fff;border:1px solid #e2e2e2}
.field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner {padding:20px 20px 2px 20px}
.field-checkboxlist .field-checkboxlist-inner {-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#fff;border:1px solid #e2e2e2}
.field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner {padding:15px 15px 2px 15px}
.field-checkboxlist .checkboxlist-controls {display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}
.field-checkboxlist .checkboxlist-controls >div {padding-bottom:7px}
.field-checkboxlist .checkboxlist-controls >div >a {font-size:13px;margin-right:20px;text-decoration:none}
.field-checkboxlist .checkboxlist-controls >div >a >i {color:#999;margin:0 4px}
.field-checkboxlist .checkboxlist-controls >div >a:hover >i {color:#2a3e51}
.field-checkboxlist-scrollable {background:#fff;border:1px solid #e2e2e2;padding-left:15px;height:300px}
.field-checkboxlist-scrollable .checkbox {margin-top:15px;margin-bottom:5px}
.field-checkboxlist-scrollable {padding-left:15px;height:300px}
.field-checkboxlist-scrollable .checkbox {margin-top:15px;margin-bottom:10px}
.field-checkboxlist-scrollable .checkbox ~ .checkbox {margin-top:0}
.field-recordfinder {background-color:#fff;border:1px solid #d1d6d9;overflow:hidden;position:relative;-webkit-box-shadow:inset 0 1px 0 rgba(209,214,217,0.25),0 1px 0 rgba(255,255,255,.5);box-shadow:inset 0 1px 0 rgba(209,214,217,0.25),0 1px 0 rgba(255,255,255,.5);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
.field-recordfinder .form-control {background:transparent;border-color:transparent;height:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding:7px 30px 7px 11px;-webkit-box-shadow:none;box-shadow:none}
@ -4288,8 +4288,8 @@ body.slim-container .form-buttons {padding:0 20px 20px}
[data-control=toolbar] .select2-container .select2-selection__rendered {line-height:17px}
[data-control=toolbar] .select2-container .select2-selection--single {height:36px}
[data-control=toolbar] select.form-control.custom-select {display:none}
tr.rowlink td {cursor:pointer}
tr.rowlink td.nolink {cursor:auto}
tr.rowlink:not(.nolink) td {cursor:pointer}
tr.rowlink:not(.nolink) td.nolink {cursor:auto}
.table tbody tr.rowlink:hover td {background-color:#f5f5f5}
a.rowlink {color:inherit;font:inherit;text-decoration:inherit}
table {max-width:100%;background-color:transparent}
@ -4472,15 +4472,15 @@ table.table.data tbody tr:last-child td {border-bottom-width:0}
table.table.data tbody tr td:first-child {border-left:3px solid transparent;padding-left:22px}
table.table.data tbody tr.active td {color:#000}
table.table.data tbody tr.active td:first-child {border-left:3px solid #f93}
table.table.data tbody tr.rowlink:hover td,
table.table.data tbody tr.rowlink:not(.nolink):hover td,
table.table.data tbody tr:not(.no-data).selected td {background:#4ea5e0 !important;color:#fff}
table.table.data tbody tr.rowlink:hover td a:not(.btn),
table.table.data tbody tr.rowlink:not(.nolink):hover td a:not(.btn),
table.table.data tbody tr:not(.no-data).selected td a:not(.btn),
table.table.data tbody tr.rowlink:hover td span,
table.table.data tbody tr.rowlink:not(.nolink):hover td span,
table.table.data tbody tr:not(.no-data).selected td span,
table.table.data tbody tr.rowlink:hover td i[class^="icon-"],
table.table.data tbody tr.rowlink:not(.nolink):hover td i[class^="icon-"],
table.table.data tbody tr:not(.no-data).selected td i[class^="icon-"] {color:#fff}
table.table.data tbody tr.rowlink:active td {background:#3498db !important;color:#fff}
table.table.data tbody tr.rowlink:not(.nolink):active td {background:#3498db !important;color:#fff}
table.table.data tbody tr.hidden td,
table.table.data tbody tr.hidden th,
table.table.data tbody tr.hidden td a,
@ -4883,6 +4883,7 @@ ul.autocomplete.dropdown-menu.inspector-autocomplete li a {padding:5px 12px;whit
@media (min-width:768px) {.modal-dialog.size-tiny {width:300px }.modal-dialog.size-small {width:400px }}
@media (min-width:992px) {.modal-dialog.size-large {width:750px }.modal-dialog.size-huge {width:900px }.modal-dialog.size-giant {width:982px }}
@media (max-width:768px) {.modal-dialog.size-adaptive {width:auto;padding:5px 0;margin:0 }}
.control-popup.fade:not(.in) {pointer-events:none}
.control-popup.fade .modal-dialog {opacity:0;filter:alpha(opacity=0);-webkit-transition:all 0.3s,width 0s;transition:all 0.3s,width 0s;-webkit-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7)}
.control-popup.fade.in .modal-dialog {opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}
.popup-backdrop {position:fixed;top:0;right:0;bottom:0;left:0;z-index:490;background-color:rgba(0,0,0,0.2);opacity:1;filter:alpha(opacity=100)}

File diff suppressed because one or more lines are too long

View File

@ -85,6 +85,7 @@
// The Placeholder has not been moved yet.
onDrag: function ($item, position, _super, event) {
$item.css(position)
event.preventDefault()
},
// Called after the drag has been started,
// that is the mouse button is being held down and
@ -108,7 +109,7 @@
// Ignore if element clicked is input, select or textarea
onMousedown: function ($item, _super, event) {
if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {
event.preventDefault()
if (event.type.match(/^mouse/)) event.preventDefault()
return true
}
},
@ -126,8 +127,9 @@
serialize: function ($parent, $children, parentIsContainer) {
var result = $.extend({}, $parent.data())
if(parentIsContainer)
if (parentIsContainer) {
return [$children]
}
else if ($children[0]){
result.children = $children
}
@ -253,7 +255,7 @@
this.item = closestItem;
this.itemContainer = itemContainer;
if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) {
return;
return;
}
this.setPointer(e);
this.toggleListeners('on');
@ -400,10 +402,11 @@
) >= this.options.distance)
},
getPointer: function(e) {
var o = e.originalEvent || e.originalEvent.touches && e.originalEvent.touches[0]
var o = e.originalEvent,
t = (e.originalEvent.touches && e.originalEvent.touches[0]) || {}
return {
left: e.pageX || o.pageX,
top: e.pageY || o.pageY
left: e.pageX || o.pageX || t.pageX,
top: e.pageY || o.pageY || t.pageY
}
},
setupDelayTimer: function () {
@ -689,4 +692,4 @@
});
};
}(jQuery, window, 'jqSortable');
}(jQuery, window, 'jqSortable');

View File

@ -400,7 +400,7 @@ class CombineAssets
$this->putCache($cacheKey, $cacheInfo);
}
return $this->getCombinedUrl($cacheInfo['version'] . '.' . $extension);
return $this->getCombinedUrl($cacheInfo['version']);
}
/**
@ -411,8 +411,17 @@ class CombineAssets
*/
protected function prepareCombiner(array $assets, $rewritePath = null)
{
/*
* Extensibility
/**
* @event cms.combiner.beforePrepare
* Provides an opportunity to interact with the asset combiner before assets are combined.
* >**NOTE**: Plugin's must be elevated (`$elevated = true` on Plugin.php) to be run on the /combine route and thus listen to this event
*
* Example usage:
*
* Event::listen('cms.combiner.beforePrepare', function ((\System\Classes\CombineAssets) $assetCombiner, (array) $assets) {
* $assetCombiner->registerFilter(...)
* });
*
*/
Event::fire('cms.combiner.beforePrepare', [$this, $assets]);
@ -420,7 +429,7 @@ class CombineAssets
$filesSalt = null;
foreach ($assets as $asset) {
$filters = $this->getFilters(File::extension($asset)) ?: [];
$path = file_exists($asset) ? $asset : File::symbolizePath($asset, null) ?: $this->localPath . $asset;
$path = file_exists($asset) ? $asset : (File::symbolizePath($asset, null) ?: $this->localPath . $asset);
$files[] = new FileAsset($path, $filters, public_path());
$filesSalt .= $this->localPath . $asset;
}
@ -474,7 +483,7 @@ class CombineAssets
$key = '';
$assetFiles = array_map(function ($file) {
return file_exists($file) ? $file : File::symbolizePath($file, null) ?: $this->localPath . $file;
return file_exists($file) ? $file : (File::symbolizePath($file, null) ?: $this->localPath . $file);
}, $assets);
foreach ($assetFiles as $file) {
@ -809,10 +818,19 @@ class CombineAssets
$cacheKey .= $this->getDeepHashFromAssets($assets);
}
/*
* Extensibility
*/
$dataHolder = (object) ['key' => $cacheKey];
/**
* @event cms.combiner.getCacheKey
* Provides an opportunity to modify the asset combiner's cache key
*
* Example usage:
*
* Event::listen('cms.combiner.getCacheKey', function ((\System\Classes\CombineAssets) $assetCombiner, (stdClass) $dataHolder) {
* $dataHolder->key = rand();
* });
*
*/
Event::fire('cms.combiner.getCacheKey', [$this, $dataHolder]);
$cacheKey = $dataHolder->key;

View File

@ -7,7 +7,7 @@ use Cms\Classes\Theme;
use Cms\Classes\Router;
use Cms\Classes\Controller as CmsController;
use October\Rain\Exception\ErrorHandler as ErrorHandlerBase;
use October\Rain\Exception\ApplicationException;
use October\Rain\Exception\SystemException;
/**
* System Error Handler, this class handles application exception events.
@ -36,12 +36,12 @@ class ErrorHandler extends ErrorHandlerBase
/**
* We are about to display an error page to the user,
* if it is an ApplicationException, this event should be logged.
* if it is an SystemException, this event should be logged.
* @return void
*/
public function beforeHandleError($exception)
{
if ($exception instanceof ApplicationException) {
if ($exception instanceof SystemException) {
Log::error($exception);
}
}

View File

@ -487,6 +487,8 @@ class MediaLibrary
preg_quote(']', '/'),
preg_quote(',', '/'),
preg_quote('=', '/'),
preg_quote("'", '/'),
preg_quote('&', '/'),
];
if (!preg_match('/^[' . implode('', $regexWhitelist) . ']+$/iu', $path)) {

View File

@ -1,5 +1,6 @@
<?php namespace System\Classes;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Support\ServiceProvider as ServiceProviderBase;
use ReflectionClass;
use SystemException;
@ -148,7 +149,7 @@ class PluginBase extends ServiceProviderBase
/**
* Registers scheduled tasks that are executed on a regular basis.
*
* @param string $schedule
* @param Schedule $schedule
* @return void
*/
public function registerSchedule($schedule)

View File

@ -11,7 +11,7 @@ use Config;
use Schema;
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;
use ApplicationException;
use SystemException;
/**
* Plugin manager
@ -108,6 +108,8 @@ class PluginManager
$this->loadPlugin($namespace, $path);
}
$this->sortDependencies();
return $this->plugins;
}
@ -674,43 +676,25 @@ class PluginManager
}
}
/**
* Returns the plugin identifiers that are required by the supplied plugin.
* @param string $plugin Plugin identifier, object or class
* @return array
*/
public function getDependencies($plugin)
{
if (is_string($plugin) && (!$plugin = $this->findByIdentifier($plugin))) {
return false;
}
if (!isset($plugin->require) || !$plugin->require) {
return null;
}
return is_array($plugin->require) ? $plugin->require : [$plugin->require];
}
/**
* Sorts a collection of plugins, in the order that they should be actioned,
* according to their given dependencies. Least dependent come first.
* @param array $plugins Object collection to sort, or null to sort all.
* @return array Collection of sorted plugin identifiers
*/
public function sortByDependencies($plugins = null)
protected function sortDependencies()
{
if (!is_array($plugins)) {
$plugins = $this->getPlugins();
}
ksort($this->plugins);
/*
* Canvas the dependency tree
*/
$checklist = $this->plugins;
$result = [];
$checklist = $plugins;
$loopCount = 0;
while (count($checklist)) {
if (++$loopCount > 999) {
throw new ApplicationException('Too much recursion');
if (++$loopCount > 2048) {
throw new SystemException('Too much recursion! Check for circular dependencies in your plugins.');
}
foreach ($checklist as $code => $plugin) {
@ -718,8 +702,8 @@ class PluginManager
* Get dependencies and remove any aliens
*/
$depends = $this->getDependencies($plugin) ?: [];
$depends = array_filter($depends, function ($pluginCode) use ($plugins) {
return isset($plugins[$pluginCode]);
$depends = array_filter($depends, function ($pluginCode) {
return isset($this->plugins[$pluginCode]);
});
/*
@ -746,7 +730,46 @@ class PluginManager
unset($checklist[$code]);
}
}
return $result;
/*
* Reassemble plugin map
*/
$sortedPlugins = [];
foreach ($result as $code) {
$sortedPlugins[$code] = $this->plugins[$code];
}
return $this->plugins = $sortedPlugins;
}
/**
* Returns the plugin identifiers that are required by the supplied plugin.
* @param string $plugin Plugin identifier, object or class
* @return array
*/
public function getDependencies($plugin)
{
if (is_string($plugin) && (!$plugin = $this->findByIdentifier($plugin))) {
return false;
}
if (!isset($plugin->require) || !$plugin->require) {
return null;
}
return is_array($plugin->require) ? $plugin->require : [$plugin->require];
}
/**
* @deprecated Plugins are now sorted by default. See getPlugins()
* Remove if year >= 2022
*/
public function sortByDependencies($plugins = null)
{
traceLog('PluginManager::sortByDependencies is deprecated. Plugins are now sorted by default. Use PluginManager::getPlugins()');
return array_keys($plugins ?: $this->getPlugins());
}
//

View File

@ -109,8 +109,17 @@ class SettingsManager
$this->registerSettingItems($id, $items);
}
/*
* Extensibility
/**
* @event system.settings.extendItems
* Provides an opportunity to manipulate the system settings manager
*
* Example usage:
*
* Event::listen('system.settings.extendItems', function ((\System\Classes\SettingsManager) $settingsManager) {
* $settingsManager->addSettingItem(...)
* $settingsManager->removeSettingItem(...)
* });
*
*/
Event::fire('system.settings.extendItems', [$this]);

View File

@ -149,9 +149,9 @@ class UpdateManager
/*
* Update plugins
*/
$plugins = $this->pluginManager->sortByDependencies();
foreach ($plugins as $plugin) {
$this->updatePlugin($plugin);
$plugins = $this->pluginManager->getPlugins();
foreach ($plugins as $code => $plugin) {
$this->updatePlugin($code);
}
Parameter::set('system::update.count', 0);

View File

@ -0,0 +1,110 @@
<?php namespace System\Console;
use Str;
use Backend\Models\User;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Question\Question;
/**
* Console command to change the password of a Backend user via CLI.
*
* @package october\system
*/
class OctoberPasswd extends Command
{
/**
* @var string The console command name.
*/
protected $name = 'october:passwd';
/**
* @var string The console command description.
*/
protected $description = 'Change the password of a Backend user.';
/**
* @var bool Was the password automatically generated?
*/
protected $generatedPassword = false;
/**
* Execute the console command.
*/
public function handle()
{
$username = $this->argument('username')
?? $this->ask('Username to reset');
// Check that the user exists
try {
$user = User::where('login', $username)
->orWhere('email', $username)
->firstOrFail();
} catch (ModelNotFoundException $e) {
$this->error('The specified user does not exist.');
exit(1);
}
$password = $this->argument('password')
?? (
$this->optionalSecret(
'Enter new password (leave blank for generated password)',
false,
false
) ?: $this->generatePassword()
);
// Change password
$user->password = $password;
$user->forceSave();
$this->info('Password successfully changed.');
if ($this->generatedPassword) {
$this->output->writeLn('Password set to <info>' . $password . '</info>.');
}
exit(0);
}
/**
* Get the console command options.
*/
protected function getArguments()
{
return [
['username', InputArgument::OPTIONAL, 'The username of the Backend user'],
['password', InputArgument::OPTIONAL, 'The new password']
];
}
/**
* Prompt the user for input but hide the answer from the console.
*
* Also allows for a default to be specified.
*
* @param string $question
* @param bool $fallback
* @return string
*/
protected function optionalSecret($question, $fallback = true, $default = null)
{
$question = new Question($question, $default);
$question->setHidden(true)->setHiddenFallback($fallback);
return $this->output->askQuestion($question);
}
/**
* Generate a password and flag it as an automatically-generated password.
*
* @return string
*/
protected function generatePassword()
{
$this->generatedPassword = true;
return Str::random(22);
}
}

View File

@ -0,0 +1 @@
<?= e($value, true); ?>

View File

@ -40,6 +40,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',

View File

@ -41,6 +41,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'th' => 'ไทย',
'tr' => 'Türkçe',
'uk' => 'Українська мова',

View File

@ -36,6 +36,7 @@ return [
'ru' => 'Русский',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'zh-cn' => '简体中文',
'zh-tw' => '繁體中文',

View File

@ -39,6 +39,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',

View File

@ -39,6 +39,7 @@ return [
'ru' => 'Русский',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',

View File

@ -35,6 +35,7 @@ return [
'ru' => 'Русский',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türk',
'zh-cn' => '简体中文',
'zh-tw' => '繁體中文',

View File

@ -41,6 +41,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',

View File

@ -35,6 +35,7 @@ return [
'ru' => 'Russo',
'sv' => 'Suéco',
'sk' => 'Esloveno',
'sl' => 'Slovenščina',
'tr' => 'Turco',
'zh-cn' => 'Chinês',
'zh-tw' => 'Tailandês',

View File

@ -39,6 +39,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',
@ -398,7 +399,7 @@ return [
'return_link' => 'Späť na záznam udalostí',
'id' => 'ID',
'id_label' => 'ID udalosti',
'created_at' => 'D8tum a čas',
'created_at' => 'Dátum a čas',
'message' => 'Správa',
'level' => 'Úroveň',
'preview_title' => 'Udalosť'

View File

@ -0,0 +1,115 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Client-side Language Lines
|--------------------------------------------------------------------------
|
| These are messages made available to the client browser via JavaScript.
| To compile this file run: php artisan october:util compile lang
|
*/
'markdowneditor' => [
'formatting' => 'Oblikovanje',
'quote' => 'Citat',
'code' => 'Koda',
'header1' => 'Naslov 1',
'header2' => 'Naslov 2',
'header3' => 'Naslov 3',
'header4' => 'Naslov 4',
'header5' => 'Naslov 5',
'header6' => 'Naslov 6',
'bold' => 'Krepko',
'italic' => 'Ležeče',
'unorderedlist' => 'Neštevilčni seznam',
'orderedlist' => 'Številčni seznam',
'video' => 'Video',
'image' => 'Slika',
'link' => 'Povezava',
'horizontalrule' => 'Vstavi vodoravno črto',
'fullscreen' => 'Celozaslonski način',
'preview' => 'Predogled',
],
'mediamanager' => [
'insert_link' => 'Vstavi povezavo',
'insert_image' => 'Vstavi sliko',
'insert_video' => 'Vstavi video posnetek',
'insert_audio' => 'Vstavi zvočni posnetek',
'invalid_file_empty_insert' => 'Izberite datoteko, do katere želite vstaviti povezavo.',
'invalid_file_single_insert' => 'Izberite eno samo datoteko.',
'invalid_image_empty_insert' => 'Izberite slike za vstavljanje.',
'invalid_video_empty_insert' => 'Izberite video posnetek za vstavljanje.',
'invalid_audio_empty_insert' => 'Izberite zvočni posnetek za vstavljanje.',
],
'alert' => [
'confirm_button_text' => 'V redu',
'cancel_button_text' => 'Prekliči',
'widget_remove_confirm' => 'Odstrani ta vtičnik?',
],
'datepicker' => [
'previousMonth' => 'Prejšnji mesec',
'nextMonth' => 'Naslednji mesec',
'months' => [
'Januar',
'Februar',
'Marec',
'April',
'Maj',
'Junij',
'Julij',
'Avgust',
'September',
'Oktober',
'November',
'December'
],
'weekdays' => ['Nedelja', 'Ponedeljek', 'Torek', 'Sreda', 'Četrtek', 'Petek', 'Sobota'],
'weekdaysShort' => ['Ned', 'Pon', 'Tor', 'Sre', 'Čet', 'Pet', 'Sob'],
],
'colorpicker' => [
'choose' => 'Ok',
],
'filter' => [
'group' => [
'all' => 'vsi',
],
'scopes' => [
'apply_button_text' => 'Uporabi',
'clear_button_text' => 'Počisti',
],
'dates' => [
'all' => 'vsi',
'filter_button_text' => 'Filtriraj',
'reset_button_text' => 'Ponastavi',
'date_placeholder' => 'Datum',
'after_placeholder' => 'Po',
'before_placeholder' => 'Pred',
],
'numbers' => [
'all' => 'vsi',
'filter_button_text' => 'Filtriraj',
'reset_button_text' => 'Ponastavi',
'min_placeholder' => 'Min',
'max_placeholder' => 'Max',
]
],
'eventlog' => [
'show_stacktrace' => 'Prikaži sled dogodkov',
'hide_stacktrace' => 'Skrij sled dogodkov',
'tabs' => [
'formatted' => 'Oblikovano',
'raw' => 'Brez oblikovanja',
],
'editor' => [
'title' => 'Urejevalnik izvorne kode',
'description' => 'Vaš operacijski sistem mora biti nastavljen tako, da upošteva eno od teh URL shem.',
'openWith' => 'Za odpiranje uporabi',
'remember_choice' => 'Zapomni si izbrane nastavitve za to sejo',
'open' => 'Odpri',
'cancel' => 'Prekliči',
],
],
];

View File

@ -0,0 +1,478 @@
<?php
return [
'app' => [
'name' => 'OctoberCMS',
'tagline' => 'Nazaj k osnovam',
],
'locale' => [
'ar' => 'العربية',
'be' => 'Беларуская',
'bg' => 'Български',
'ca' => 'Català',
'cs' => 'Čeština',
'da' => 'Dansk',
'en' => 'English (United States)',
'en-au' => 'English (Australia)',
'en-ca' => 'English (Canada)',
'en-gb' => 'English (United Kingdom)',
'et' => 'Eesti',
'de' => 'Deutsch',
'el' => 'Ελληνικά',
'es' => 'Español',
'es-ar' => 'Español (Argentina)',
'fa' => 'فارسی',
'fr' => 'Français',
'fr-ca' => 'Français (Canada)',
'hu' => 'Magyar',
'id' => 'Bahasa Indonesia',
'it' => 'Italiano',
'ja' => '日本語',
'kr' => '한국어',
'lt' => 'Lietuvių',
'lv' => 'Latviešu',
'nb-no' => 'Norsk (Bokmål)',
'nl' => 'Nederlands',
'pl' => 'Polski',
'pt-br' => 'Português (Brasil)',
'pt-pt' => 'Português (Portugal)',
'ro' => 'Română',
'ru' => 'Русский',
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'th' => 'ไทย',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',
'zh-tw' => '繁體中文',
'vn' => 'Tiếng việt',
],
'directory' => [
'create_fail' => 'Mape :name ni mogoče ustvariti',
],
'file' => [
'create_fail' => 'Datoteke :name ni mogoče ustvariti',
],
'combiner' => [
'not_found' => "Datoteke za kombiniranje ':name' ni mogoče najti.",
],
'system' => [
'name' => 'Sistem',
'menu_label' => 'Sistem',
'categories' => [
'misc' => 'Razno',
'logs' => 'Dnevniki',
'mail' => 'E-pošta',
'shop' => 'Trgovina',
'team' => 'Ekipa',
'users' => 'Uporabniki',
'system' => 'Sistem',
'social' => 'Družbeno',
'backend' => 'Administracija',
'events' => 'Dogodki',
'customers' => 'Stranke',
'my_settings' => 'Moje nastavitve',
'notifications' => 'Obvestila',
],
],
'theme' => [
'label' => 'Tema',
'unnamed' => 'Neimenovana tema',
'name' => [
'label' => 'Ime teme',
'help' => 'Poimenujte temo po njeni unikatni kodi, npr. RainLab.Vanilla',
],
],
'themes' => [
'install' => 'Namesti teme',
'search' => 'išči teme za namestitev...',
'installed' => 'Nameščene teme',
'no_themes' => 'Ni nameščenih tem iz trga.',
'recommended' => 'Priporočeno',
'remove_confirm' => 'Ali ste prepričani, da želite odstraniti to temo?',
],
'plugin' => [
'label' => 'Vtičnik',
'unnamed' => 'Neimenovan vtičnik',
'name' => [
'label' => 'Ime vtičnika',
'help' => 'Poimenujte vtičnik po njegovi unikatni kodi, npr. RainLab.Blog',
],
'by_author' => 'Od :name',
],
'plugins' => [
'manage' => 'Upravljanje vtičnikov',
'install' => 'Namesti vtičnike in teme',
'install_products' => 'Namesti produkte',
'search' => 'išči vtičnike za namestitev...',
'installed' => 'Nameščeni vtičniki',
'no_plugins' => 'Ni nameščenih vtičnikov iz trga.',
'recommended' => 'Priporočeno',
'plugin_label' => 'Vtičnik',
'unknown_plugin' => 'Vtičnik je bil odstranjen iz datotečnega sistema.',
'select_label' => 'Izberite dejanje...',
'bulk_actions_label' => 'Skupna dejanja',
'check_yes' => 'Da',
'check_no' => 'Ne',
'unfrozen' => 'Posodobitve so omogočene',
'enabled' => 'Vtičnik je omogočen',
'freeze' => 'onemogoči posodobitve za',
'unfreeze' => 'omogoči posodobitve za',
'enable' => 'omogoči',
'disable' => 'onemogoči',
'refresh' => 'ponastavi',
'remove' => 'Odstrani',
'freeze_label' => 'Onemogoči posodobitve',
'unfreeze_label' => 'Omogoči posodobitve',
'enable_label' => 'Omogoči vtičnike',
'disable_label' => 'Onemogoči vtičnike',
'refresh_label' => 'Ponastavi podatke vtičnikov',
'action_confirm' => 'Ali ste prepričani, da želite :action-ti te vtičnike?',
'freeze_success' => 'Posodobitve za izbrane vtičnike so onemogočene.',
'unfreeze_success' => 'Posodobitve za izbrane vtičnike so omogočene.',
'enable_success' => 'Izbrani vtičniki so omogočeni.',
'disable_success' => 'Izbrani vtičniki so onemogočeni.',
'refresh_confirm' => 'Ali ste prepričani, da želite ponastaviti izbrane vtičnike? S tem boste ponastavili podatke vsakega posameznega vtičnika in ga obnovili v začetno stanje namestitve.',
'refresh_success' => 'Izbrani vtičniki so bili ponastavljeni.',
'remove_confirm' => 'Ali ste prepričani, da želite odstraniti izbrane vtičnike? S tem boste odstranili tudi vse povezane podatke.',
'remove_success' => 'Izbrani vtičniki so bili odstranjeni.',
],
'project' => [
'name' => 'Projekt',
'owner_label' => 'Lastnik',
'attach' => 'Pripni projekt',
'detach' => 'Odpni projekt',
'none' => 'Nobeden',
'id' => [
'label' => 'ID projekta',
'help' => 'Kako poiskati ID vašega projekta',
'missing' => 'Določite ID projekta za uporabo.',
],
'detach_confirm' => 'Ali ste prepričani, da želite odpeti ta projekt?',
'unbind_success' => 'Projekt je bil odpet.',
],
'settings' => [
'menu_label' => 'Nastavitve',
'not_found' => 'Navedenih nastavitev ni mogoče najti.',
'missing_model' => 'Na strani z nastavitvami manjka definicija Modela.',
'update_success' => 'Nastavitve za ":name" so shranjene.',
'return' => 'Vrni se na sistemske nastavitve',
'search' => 'Iskanje',
],
'mail' => [
'log_file' => 'Dnevniška datoteka',
'menu_label' => 'Nastavitve e-pošte',
'menu_description' => 'Upravljanje z nastavitvami za pošiljanje e-pošte.',
'general' => 'Splošno',
'method' => 'Način za e-pošto',
'sender_name' => 'Ime pošiljatelja',
'sender_email' => 'E-pošta pošiljatelja',
'php_mail' => 'PHP mail',
'smtp' => 'SMTP',
'smtp_address' => 'SMTP naslov',
'smtp_authorization' => 'Obvezna SMTP avtorizacija',
'smtp_authorization_comment' => 'Označite, če vaš SMTP strežnik zahteva avtorizacijo.',
'smtp_username' => 'Uporabniško ime',
'smtp_password' => 'Geslo',
'smtp_port' => 'SMTP vrata (port)',
'smtp_ssl' => 'Obvezna SSL povezava',
'smtp_encryption' => 'Enkripcijski protokol za SMTP',
'smtp_encryption_none' => 'Brez enkripcije',
'smtp_encryption_tls' => 'TLS',
'smtp_encryption_ssl' => 'SSL',
'sendmail' => 'Sendmail',
'sendmail_path' => 'Sendmail lokacija',
'sendmail_path_comment' => 'Določite lokacijo Sendmail programa.',
'mailgun' => 'Mailgun',
'mailgun_domain' => 'Mailgun domena',
'mailgun_domain_comment' => 'Določite domensko ime za Mailgun (Mailgun domain name).',
'mailgun_secret' => 'Mailgun geslo',
'mailgun_secret_comment' => 'Vnesite API ključ za Mailgun (Mailgun API key).',
'mandrill' => 'Mandrill',
'mandrill_secret' => 'Mandrill geslo',
'mandrill_secret_comment' => 'Vnesite API ključ za Mandrill (Mandrill API key).',
'ses' => 'SES',
'ses_key' => 'SES ključ',
'ses_key_comment' => 'Vnesite API ključ za SES.',
'ses_secret' => 'SES geslo',
'ses_secret_comment' => 'Vnesite API ključ za SES (SES API secret key).',
'sparkpost' => 'SparkPost',
'sparkpost_secret' => 'SparkPost geslo',
'sparkpost_secret_comment' => 'Vnesite skrivni API ključ za SparkPost (SparkPost API secret key).',
'ses_region' => 'SES regija',
'ses_region_comment' => 'Vnesite SES regijo (SES region, npr. us-east-1).',
'drivers_hint_header' => 'Gonilniki niso nameščeni',
'drivers_hint_content' => 'Ta način pošiljanja potrebuje namestitev vtičnika ":plugin".',
],
'mail_templates' => [
'menu_label' => 'E-poštne predloge',
'menu_description' => 'Urejanje predlog in vsebin, ki se pošiljajo uporabnikom.',
'new_template' => 'Nova predloga',
'new_layout' => 'Nova postavitev',
'new_partial' => 'Nova podpredloga',
'template' => 'Predloga',
'templates' => 'Predloge',
'partial' => 'Podpredloga',
'partials' => 'Podpredloge',
'menu_layouts_label' => 'E-poštne postavitve',
'menu_partials_label' => 'E-poštne predloge',
'layout' => 'Postavitev',
'layouts' => 'Postavitve',
'no_layout' => '-- brez postavitve --',
'name' => 'Ime',
'name_comment' => 'Unikatno ime, ki se nanaša na to predlogo.',
'code' => 'Koda',
'code_comment' => 'Unikatna koda, ki se nanaša na to predlogo.',
'subject' => 'Zadeva',
'subject_comment' => 'Zadeva e-poštnega sporočila.',
'description' => 'Opis',
'content_html' => 'HTML',
'content_css' => 'CSS',
'content_text' => 'Neformatirano',
'test_send' => 'Pošlji testno sporočilo',
'test_success' => 'Testno sporočilo poslano.',
'test_confirm' => 'Testno sporočilo bo poslano na :email. Nadaljujem?',
'creating' => 'Ustvarjanje predloge...',
'creating_layout' => 'Ustvarjanje postavitve...',
'saving' => 'Shranjevanje predloge...',
'saving_layout' => 'Shranjevane postavitve...',
'delete_confirm' => 'Želite izbristi to predlogo?',
'delete_layout_confirm' => 'Želite izbrisati to postavitev?',
'deleting' => 'Brisanje predloge...',
'deleting_layout' => 'Brisanje postavitve...',
'sending' => 'Pošiljanje testnega sporočila...',
'return' => 'Vrni se na seznam predlog',
'options' => 'Možnosti',
'disable_auto_inline_css' => 'Onemogoči vgrajeni CSS (inline)',
],
'mail_brand' => [
'menu_label' => 'Oblikovanje e-pošte',
'menu_description' => 'Spremeninjanje barvne sheme in izgleda e-poštnih predlog.',
'page_title' => 'Prilagoditev videza e-pošte',
'sample_template' => [
'heading' => 'Naslov',
'paragraph' => 'To je odstavek, ki vsebuje Lorem Ipsum tekst in povezavo. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',
'table' => [
'item' => 'Element',
'description' => 'Opis',
'price' => 'Cena',
'centered' => 'Centrirano',
'right_aligned' => 'Desno-ravnano',
],
'buttons' => [
'primary' => 'Primarni gumb',
'positive' => 'Pozitivni gumb',
'negative' => 'Negativni gumb',
],
'panel' => 'Kako dobro izgleda ta barvni okvir?',
'more' => 'Še nekaj besedila za konec.',
'promotion' => 'Koda kupona: OCTOBER',
'subcopy' => 'Noga sporočila na koncu e-poštne predloge.',
'thanks' => 'Hvala',
],
'fields' => [
'_section_background' => 'Ozadje',
'body_bg' => 'Ozadje strani',
'content_bg' => 'Ozadje vsebine',
'content_inner_bg' => 'Ozadje notranje vsebine',
'_section_buttons' => 'Gumbi',
'button_text_color' => 'Barva pisave gumba',
'button_primary_bg' => 'Ozadje primarnega gumba',
'button_positive_bg' => 'Ozadje pozitivnega gumba',
'button_negative_bg' => 'Ozadje negativnega gumba',
'_section_type' => 'Tipografija',
'header_color' => 'Barva glave',
'heading_color' => 'Barva naslovov',
'text_color' => 'Barva besedila',
'link_color' => 'Barva povezav',
'footer_color' => 'Barva noge',
'_section_borders' => 'Robovi',
'body_border_color' => 'Barva roba strani',
'subcopy_border_color' => 'Barva roba noge sporočila',
'table_border_color' => 'Barva robov tabel',
'_section_components' => 'Komponente',
'panel_bg' => 'Ozadje barvnega okvira',
'promotion_bg' => 'Ozadje promocije',
'promotion_border_color' => 'Barva robov promocije',
],
],
'install' => [
'project_label' => 'Pripni na projekt',
'plugin_label' => 'Namesti vtičnik',
'theme_label' => 'Namesti temo',
'missing_plugin_name' => 'Podajte ime vtičnika, ki ga želite namestiti.',
'missing_theme_name' => 'Podajte ime teme, ki jo želite namestiti.',
'install_completing' => 'Zaključevanje namestitvenega postopka',
'install_success' => 'Produkt je bil uspešno nameščen',
],
'updates' => [
'title' => 'Upravljanje posodobitev',
'name' => 'Posodobitev programske opreme',
'menu_label' => 'Posodobitve in vtičniki',
'menu_description' => 'Posodobitev sistema, upravljanje in nameščanje vtičnikov in tem.',
'return_link' => 'Vrni se na sistemske posodobitve',
'check_label' => 'Preveri za nove posodobitve',
'retry_label' => 'Poskusi ponovno',
'plugin_name' => 'Ime',
'plugin_code' => 'Koda',
'plugin_description' => 'Opis',
'plugin_version' => 'Različica',
'plugin_author' => 'Avtor',
'plugin_not_found' => 'Vtičnika ni mogoče najti',
'core_current_build' => 'Trenutna različica',
'core_view_changelog' => 'Pokaži dnevnik sprememb',
'core_build' => 'Različica :build',
'core_build_help' => 'Na voljo je najnovejša različica.',
'core_downloading' => 'Prenašanje datotek aplikacije',
'core_extracting' => 'Ekstrahiranje datotek aplikacije',
'core_set_build' => 'Nastavljanje številke različice',
'changelog' => 'Dnevnik sprememb',
'changelog_view_details' => 'Pokaži podrobnosti',
'plugins' => 'Vtičniki',
'themes' => 'Teme',
'disabled' => 'Onemogočenih',
'plugin_downloading' => 'Prenašanje vtičnika :name',
'plugin_extracting' => 'Ekstrahiranje vtičnika :name',
'plugin_version_none' => 'Nov vtičnik',
'plugin_current_version' => 'Trenutna verzija',
'theme_new_install' => 'Namestitev nove teme.',
'theme_downloading' => 'Prenašanje teme :name',
'theme_extracting' => 'Ekstrahiranje teme :name',
'update_label' => 'Posodobitev programske opreme',
'update_completing' => 'Zaključevanje posodabljanja',
'update_loading' => 'Nalaganje razpoložljivih posodobitev...',
'update_success' => 'Posodabljanje končano',
'update_failed_label' => 'Posodabljanje ni bilo uspešno',
'force_label' => 'Vsili posodobitev',
'found' => [
'label' => 'Nove posodobitve so na voljo!',
'help' => "Kliknite 'Posodobitev programske opreme' za začetek posodabljanja.",
],
'none' => [
'label' => 'Ni posodobitev',
'help' => 'Nove posodobitve niso na voljo.',
],
'important_action' => [
'empty' => 'Izberite dejanje',
'confirm' => 'Potrdi posodobitev',
'skip' => 'Preskoči to posodobitev (le tokrat)',
'ignore' => 'Preskoči to posodobitev (vedno)',
],
'important_action_required' => 'Potrebno je ukrepanje',
'important_view_guide' => 'Oglejte si navodila za nadgradnjo',
'important_view_release_notes' => 'Oglejte si opombe ob izdaji',
'important_alert_text' => 'Nekatere posodobitve potrebujejo vašo pozornost.',
'details_title' => 'Podrobnosti vtičnika',
'details_view_homepage' => 'Odpri spletno stran',
'details_readme' => 'Dokumentacija',
'details_readme_missing' => 'Dokumentacija ni na voljo.',
'details_changelog' => 'Dnevnik sprememb',
'details_changelog_missing' => 'Dnevnik sprememb ni na voljo.',
'details_upgrades' => 'Navodila za nadgradnjo',
'details_upgrades_missing' => 'Navodila za nadgradnjo niso na voljo.',
'details_licence' => 'Licenca',
'details_licence_missing' => 'Licenca ni na voljo.',
'details_current_version' => 'Trenutna različica',
'details_author' => 'Avtor',
],
'server' => [
'connect_error' => 'Napaka pri povezavi s strežnikom.',
'response_not_found' => 'Strežnika za posodobitve ni bilo mogoče najti.',
'response_invalid' => 'Neveljaven odgovor s strani strežnika.',
'response_empty' => 'Prazen odgovor s strani strežnika.',
'file_error' => 'Strežniku ni uspelo dostaviti paketa.',
'file_corrupt' => 'Datoteka s strežnika je poškodovana.',
],
'behavior' => [
'missing_property' => 'Objekt :class mora imeti definirano lastnost $:property, ki jo uporablja :behavior.',
],
'config' => [
'not_found' => 'Datoteke z nastavitvami :file, definirane za :location ni mogoče najti.',
'required' => "Nastavitve uporabljene v :location morajo vsebovati vrednost ':property'.",
],
'zip' => [
'extract_failed' => "Datoteke ':file' ni mogoče ekstrahirati.",
],
'event_log' => [
'hint' => 'Ta dnevnik prikaže napake, ki se lahko pojavijo v aplikaciji in informacije za odpravljanje napak.',
'menu_label' => 'Dnevnik dogodkov',
'menu_description' => 'Prikaz dnevnika sistemskih sporočil z zabeležinimi časi in podrobnostmi.',
'empty_link' => 'Počisti dnevnik dogodkov',
'empty_loading' => 'Čiščenje dnevnika dogodkov...',
'empty_success' => 'Dnevnik dogodkov je izpraznjen',
'return_link' => 'Vrni se na dnevnik dogokov',
'id' => 'ID',
'id_label' => 'ID dogodka',
'created_at' => 'Datum in čas',
'message' => 'Sporočilo',
'level' => 'Tip dogodka',
'preview_title' => 'Dogodek',
],
'request_log' => [
'hint' => 'Ta dnevnik prikaže zahteve brskalnika, ki lahko potrebujejo pozornost. Če npr. obiskovalec odpre stran v CMS, ki je ni mogoče najti, se ustvari zapis s statusno kodo 404.',
'menu_label' => 'Dnevnik zahtev',
'menu_description' => 'Ogled slabih ali preusmerjenih zahtev, kot npr. Strani ni bilo mogoče najti (404).',
'empty_link' => 'Počisti dnevnik zahtev',
'empty_loading' => 'Čiščenje dnevnika zahtev...',
'empty_success' => 'Dnevnik zahtev je izpraznjen',
'return_link' => 'Vrni se na seznam zahtev',
'id' => 'ID',
'id_label' => 'ID dnevnika',
'count' => 'Števec',
'referer' => 'Reference',
'url' => 'URL',
'status_code' => 'Status',
'preview_title' => 'Zahteva',
],
'permissions' => [
'name' => 'Sistem',
'manage_system_settings' => 'Upravljanje sistemskih nastavitev',
'manage_software_updates' => 'Upravljanje posodobitev programske opreme',
'access_logs' => 'Prikaz sistemskih dnevnikov',
'manage_mail_templates' => 'Upravljanje e-poštnih predlog',
'manage_mail_settings' => 'Upravljanje e-poštnih nastavitev',
'manage_other_administrators' => 'Upravljanje ostalih administratorjev',
'impersonate_users' => 'Oponašanje uporabnikov',
'manage_preferences' => 'Upravljanje z nastavitvami administracije',
'manage_editor' => 'Upravljanje z nastavitvami urejevalnika kode',
'view_the_dashboard' => 'Prikaz nadzorne plošče',
'manage_default_dashboard' => 'Upravljanje s privzeto nadzorno ploščo',
'manage_branding' => 'Prilaganje administracije',
],
'log' => [
'menu_label' => 'Nastavitve dnevnikov',
'menu_description' => 'Določanje področji, ki naj uporabljajo dnevnike.',
'default_tab' => 'Dnevniki',
'log_events' => 'Dnevnik sistemskih dogodkov',
'log_events_comment' => 'Shrani sistemske dogodke tudi v podatkovno bazo in ne samo v dnevniško datoteko.',
'log_requests' => 'Beleži neuspešne zahteve',
'log_requests_comment' => 'Zahteve brskalnika, ki lahko potrebujejo pozornost, kot na primer napake 404.',
'log_theme' => 'Beleži spremembe tem',
'log_theme_comment' => 'Kadar je sprememba teme narejena v administraciji.',
],
'media' => [
'invalid_path' => "Podana je nepravilna lokacija datoteke: ':path'.",
'folder_size_items' => 'element(i)',
],
'page' => [
'custom_error' => [
'label' => 'Napaka strani',
'help' => "Žal je prišlo do napake in strani ni mogoče prikazati.",
],
'invalid_token' => [
'label' => 'Neveljaven varnostni ključ',
],
'maintenance' => [
'label' => "Takoj bomo nazaj!",
'help' => "Trenutno potekajo vzdrževalna dela, kmalu se vrnemo!",
'message' => "Sporočilo:",
'available_at' => "Poskusite znova po:",
],
],
'pagination' => [
'previous' => 'Prejšnja',
'next' => 'Naslednja',
],
];

View File

@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => '":attribute" mora biti sprejet.',
'active_url' => '":attribute" ni veljaven URL naslov.',
'after' => '":attribute" mora biti datum po :date.',
'after_or_equal' => '":attribute" mora biti datum, enak ali kasnejši kot :date.',
'alpha' => '":attribute" lahko vsebuje le črke.',
'alpha_dash' => '":attribute" lahko vsebuje le črke, številke in pomišljaje.',
'alpha_num' => '":attribute" lahko vsebuje le črke in številke.',
'array' => '":attribute" mora biti niz elementov.',
'before' => '":attribute" mora biti datum pred :date.',
'before_or_equal' => '":attribute" mora biti datum pred ali enak datumu :date.',
'between' => [
'numeric' => '":attribute" mora biti med :min in :max.',
'file' => '":attribute" mora biti med :min in max: kB.',
'string' => '":attribute" mora vsebovati med :min in :max znakov.',
'array' => '":attribute" mora vsebovati med :min in :max elementov.',
],
'boolean' => '":attribute" mora biti Da (true) ali Ne (false).',
'confirmed' => 'Potrditev polja ":attribute" se ne ujema.',
'date' => '":attribute" ni veljaven datum.',
'date_format' => '":attribute" se ne ujema s formatom :format.',
'different' => '":attribute" in :other morata biti različna.',
'digits' => '":attribute" mora vsebovati :digits številk.',
'digits_between' => '":attribute" mora vsebovati med :min in :max številk.',
'dimensions' => '":attribute" vsebuje neveljavne dimenzije slike.',
'distinct' => '":attribute" polje ima podvojeno vrednost.',
'email' => '":attribute" mora biti veljaven e-poštni naslov.',
'exists' => 'Izbran element ":attribute" je neveljaven.',
'file' => '":attribute" mora biti datoteka.',
'filled' => '":attribute" polje mora vsebovati vrednost.',
'image' => '":attribute" mora biti slika.',
'in' => 'Izbran element ":attribute" je neveljaven.',
'in_array' => 'Element ":attribute" ne obstaja v ":other".',
'integer' => '":attribute" mora biti celo število.',
'ip' => '":attribute" mora biti veljaven IP naslov.',
'ipv4' => '":attribute" mora biti veljaven IPv4 naslov.',
'ipv6' => '":attribute" mora biti veljaven IPv6 naslov.',
'json' => '":attribute" mora biti veljaven JSON format.',
'max' => [
'numeric' => ':attribute ne sme biti večji od :max.',
'file' => ':attribute ne sme biti večji od :max kB.',
'string' => ':attribute ne sme biti večji od :max znakov.',
'array' => ':attribute ne sme vsebovati več kot :max elementov.',
],
'mimes' => ':attribute mora biti datoteka tipa :values.',
'mimetypes' => ':attribute mora biti datoteka tipa :values.',
'min' => [
'numeric' => ':attribute mora biti vsaj :min.',
'file' => ':attribute mora imeti vsaj :min kB.',
'string' => ':attribute mora imeti vsaj :min znakov.',
'array' => ':attribute mora vsebovati vsaj :min elementov.',
],
'not_in' => 'Izbrani element ":attribute" je neveljaven.',
'numeric' => '":attribute" mora biti število.',
'present' => 'Polje za ":attribute" mora obstajati.',
'regex' => 'Format za ":attribute" je neveljaven.',
'required' => 'Polje za ":attribute" je obvezno.',
'required_if' => 'Polje za ":attribute" je obvezno, kadar ima :other vrednost :value.',
'required_unless' => 'Polje za ":attribute" je obvezno, razen kadar ima :other vrednosti :values.',
'required_with' => 'Polje za ":attribute" je obvezno, kadar :values obstaja.',
'required_with_all' => 'Polje za ":attribute" je obvezno, kadar :values obstaja.',
'required_without' => 'Polje za ":attribute" je obvezno, kadar :values ne obstaja.',
'required_without_all' => 'Polje za ":attribute" je obvezno, kadar :values ne obstaja.',
'same' => '":attribute" in ":other" se morata ujemati.',
'size' => [
'numeric' => ':attribute mora biti :size.',
'file' => ':attribute mora imeti :size kB.',
'string' => ':attribute mora vsebovati :size znakov.',
'array' => ':attribute mora vsebovati :size elementov.',
],
'string' => ':attribute mora biti veljaven znakovni niz.',
'timezone' => ':attribute mora biti veljavno območje.',
'unique' => 'Element :attribute je že uporabljen.',
'uploaded' => 'Elementa :attribute ni bilo mogoče naložiti.',
'url' => 'Format elementa :attribute je neveljaven.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@ -41,6 +41,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',

View File

@ -39,6 +39,7 @@ return [
'fi' => 'Suomi',
'sv' => 'Svenska',
'sk' => 'Slovenský',
'sl' => 'Slovenščina',
'tr' => 'Türkçe',
'uk' => 'Українська мова',
'zh-cn' => '简体中文',

View File

@ -85,6 +85,9 @@ class EventLog extends Model
return $match[1];
}
return Str::limit($this->message, 100);
// Get first line of message
preg_match('/^([^\n\r]+)/m', $this->message, $matches);
return Str::limit($matches[1] ?? '', 500);
}
}

Some files were not shown because too many files have changed in this diff Show More