Fixed a conflict in framework.js. Closures in the script are named now, for the memory profiling needs.
Conflicts: modules/system/assets/js/framework.js
This commit is contained in:
commit
06e5dce96a
|
|
@ -1,3 +1,6 @@
|
||||||
|
* **Build 239** (2015-04-06)
|
||||||
|
- Installing plugins has a new interface and themes can now be installed using the back-end.
|
||||||
|
|
||||||
* **Build 236** (2015-03-28)
|
* **Build 236** (2015-03-28)
|
||||||
- Default context of `manage` and `pivot` forms is now *create* and *update* respectively, instead of the old value *relation*. Use the `context` option to set it back to the old value (see Backend > Relations docs).
|
- Default context of `manage` and `pivot` forms is now *create* and *update* respectively, instead of the old value *relation*. Use the `context` option to set it back to the old value (see Backend > Relations docs).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,14 +101,15 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'permissions' => ['backend.manage_branding'],
|
'permissions' => ['backend.manage_branding'],
|
||||||
'order' => 500
|
'order' => 500
|
||||||
],
|
],
|
||||||
'editor' => [
|
'myaccount' => [
|
||||||
'label' => 'backend::lang.editor.menu_label',
|
'label' => 'backend::lang.myaccount.menu_label',
|
||||||
'description' => 'backend::lang.editor.menu_description',
|
'description' => 'backend::lang.myaccount.menu_description',
|
||||||
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
||||||
'icon' => 'icon-code',
|
'icon' => 'icon-user',
|
||||||
'url' => Backend::URL('backend/editorpreferences'),
|
'url' => Backend::URL('backend/users/myaccount'),
|
||||||
'order' => 600,
|
'order' => 500,
|
||||||
'context' => 'mysettings'
|
'context' => 'mysettings',
|
||||||
|
'keywords' => 'backend::lang.myaccount.menu_keywords'
|
||||||
],
|
],
|
||||||
'backend_preferences' => [
|
'backend_preferences' => [
|
||||||
'label' => 'backend::lang.backend_preferences.menu_label',
|
'label' => 'backend::lang.backend_preferences.menu_label',
|
||||||
|
|
@ -116,18 +117,17 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
||||||
'icon' => 'icon-laptop',
|
'icon' => 'icon-laptop',
|
||||||
'class' => 'Backend\Models\BackendPreferences',
|
'class' => 'Backend\Models\BackendPreferences',
|
||||||
'order' => 500,
|
'order' => 510,
|
||||||
'context' => 'mysettings'
|
'context' => 'mysettings'
|
||||||
],
|
],
|
||||||
'myaccount' => [
|
'editor' => [
|
||||||
'label' => 'backend::lang.myaccount.menu_label',
|
'label' => 'backend::lang.editor.menu_label',
|
||||||
'description' => 'backend::lang.myaccount.menu_description',
|
'description' => 'backend::lang.editor.menu_description',
|
||||||
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
||||||
'icon' => 'icon-user',
|
'icon' => 'icon-code',
|
||||||
'url' => Backend::URL('backend/users/myaccount'),
|
'url' => Backend::URL('backend/editorpreferences'),
|
||||||
'order' => 400,
|
'order' => 520,
|
||||||
'context' => 'mysettings',
|
'context' => 'mysettings'
|
||||||
'keywords' => 'backend::lang.myaccount.menu_keywords'
|
|
||||||
],
|
],
|
||||||
'access_logs' => [
|
'access_logs' => [
|
||||||
'label' => 'backend::lang.access_log.menu_label',
|
'label' => 'backend::lang.access_log.menu_label',
|
||||||
|
|
@ -136,7 +136,7 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'icon' => 'icon-lock',
|
'icon' => 'icon-lock',
|
||||||
'url' => Backend::url('backend/accesslogs'),
|
'url' => Backend::url('backend/accesslogs'),
|
||||||
'permissions' => ['system.access_logs'],
|
'permissions' => ['system.access_logs'],
|
||||||
'order' => 800
|
'order' => 920
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
@ -183,6 +183,7 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
$combiner->registerBundle('~/modules/backend/formwidgets/datepicker/assets/js/build.js');
|
$combiner->registerBundle('~/modules/backend/formwidgets/datepicker/assets/js/build.js');
|
||||||
$combiner->registerBundle('~/modules/backend/formwidgets/richeditor/assets/less/richeditor.less');
|
$combiner->registerBundle('~/modules/backend/formwidgets/richeditor/assets/less/richeditor.less');
|
||||||
$combiner->registerBundle('~/modules/backend/formwidgets/richeditor/assets/js/build.js');
|
$combiner->registerBundle('~/modules/backend/formwidgets/richeditor/assets/js/build.js');
|
||||||
|
$combiner->registerBundle('~/modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2285,7 +2285,7 @@ nav#layout-mainmenu.navbar ul li.icon a{padding:14px}
|
||||||
nav#layout-mainmenu.navbar ul li.power-off i,nav#layout-mainmenu.navbar ul li.preview i{font-size:20px}
|
nav#layout-mainmenu.navbar ul li.power-off i,nav#layout-mainmenu.navbar ul li.preview i{font-size:20px}
|
||||||
nav#layout-mainmenu.navbar ul li.power-off a,nav#layout-mainmenu.navbar ul li.preview a{padding:22px 20px 20px 20px}
|
nav#layout-mainmenu.navbar ul li.power-off a,nav#layout-mainmenu.navbar ul li.preview a{padding:22px 20px 20px 20px}
|
||||||
nav#layout-mainmenu.navbar ul li.account{margin-right:0;line-height:23px}
|
nav#layout-mainmenu.navbar ul li.account{margin-right:0;line-height:23px}
|
||||||
nav#layout-mainmenu.navbar ul li.account a{padding-right:20px;position:relative;z-index:900}
|
nav#layout-mainmenu.navbar ul li.account a{padding-right:20px;position:relative;z-index:590}
|
||||||
nav#layout-mainmenu.navbar ul li.account img{width:25px;margin-right:7px;position:relative;top:-2px}
|
nav#layout-mainmenu.navbar ul li.account img{width:25px;margin-right:7px;position:relative;top:-2px}
|
||||||
nav#layout-mainmenu.navbar ul.nav{display:inline-block}
|
nav#layout-mainmenu.navbar ul.nav{display:inline-block}
|
||||||
nav#layout-mainmenu.navbar .menu-toggle{display:none}
|
nav#layout-mainmenu.navbar .menu-toggle{display:none}
|
||||||
|
|
@ -2295,7 +2295,7 @@ nav#layout-mainmenu.navbar .toolbar-item:before{left:-12px}
|
||||||
nav#layout-mainmenu.navbar .toolbar-item:after{right:-12px}
|
nav#layout-mainmenu.navbar .toolbar-item:after{right:-12px}
|
||||||
nav#layout-mainmenu.navbar .toolbar-item.scroll-active-before:before{color:#ffffff}
|
nav#layout-mainmenu.navbar .toolbar-item.scroll-active-before:before{color:#ffffff}
|
||||||
nav#layout-mainmenu.navbar .toolbar-item.scroll-active-after:after{color:#ffffff}
|
nav#layout-mainmenu.navbar .toolbar-item.scroll-active-after:after{color:#ffffff}
|
||||||
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu{position:fixed;top:63px;right:0;width:225px;background:#2b3e50;z-index:900;display:none}
|
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu{position:fixed;top:63px;right:0;background:#2b3e50;z-index:590;display:none}
|
||||||
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu.active{display:block}
|
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu.active{display:block}
|
||||||
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu:after{content:'';display:block;width:0;height:0;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:12px solid #2b3e50;right:40px;top:-12px;position:absolute}
|
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu:after{content:'';display:block;width:0;height:0;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:12px solid #2b3e50;right:40px;top:-12px;position:absolute}
|
||||||
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu ul{float:none;display:block}
|
nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu ul{float:none;display:block}
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ nav#layout-mainmenu.navbar {
|
||||||
a {
|
a {
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 900;
|
z-index: 590;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
|
|
@ -98,9 +98,8 @@ nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 63px;
|
top: 63px;
|
||||||
right: 0;
|
right: 0;
|
||||||
width: 225px;
|
|
||||||
background: @color-accountmenu-bg;
|
background: @color-accountmenu-bg;
|
||||||
z-index: 900;
|
z-index: 590;
|
||||||
display: none;
|
display: none;
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
|
|
|
||||||
|
|
@ -561,6 +561,12 @@ class RelationController extends ControllerBehavior
|
||||||
if ($config->recordUrl) {
|
if ($config->recordUrl) {
|
||||||
$defaultOnClick = null;
|
$defaultOnClick = null;
|
||||||
}
|
}
|
||||||
|
elseif (
|
||||||
|
!$this->makeConfigForMode('manage', 'form', false) &&
|
||||||
|
!$this->makeConfigForMode('pivot', 'form', false)
|
||||||
|
) {
|
||||||
|
$defaultOnClick = null;
|
||||||
|
}
|
||||||
|
|
||||||
$config->recordOnClick = $this->getConfig('view[recordOnClick]', $defaultOnClick);
|
$config->recordOnClick = $this->getConfig('view[recordOnClick]', $defaultOnClick);
|
||||||
|
|
||||||
|
|
@ -898,7 +904,7 @@ class RelationController extends ControllerBehavior
|
||||||
$saveData = $this->manageWidget->getSaveData();
|
$saveData = $this->manageWidget->getSaveData();
|
||||||
|
|
||||||
if ($this->viewMode == 'multi') {
|
if ($this->viewMode == 'multi') {
|
||||||
$model = $this->relationObject->find($this->manageId);
|
$model = $this->relationModel->find($this->manageId);
|
||||||
$model->save($saveData, $this->manageWidget->getSessionKey());
|
$model->save($saveData, $this->manageWidget->getSessionKey());
|
||||||
}
|
}
|
||||||
elseif ($this->viewMode == 'single') {
|
elseif ($this->viewMode == 'single') {
|
||||||
|
|
@ -1267,7 +1273,7 @@ class RelationController extends ControllerBehavior
|
||||||
* Returns the configuration for a mode (view, manage, pivot) for an
|
* Returns the configuration for a mode (view, manage, pivot) for an
|
||||||
* expected type (list, form). Uses fallback configuration.
|
* expected type (list, form). Uses fallback configuration.
|
||||||
*/
|
*/
|
||||||
protected function makeConfigForMode($mode = 'view', $type = 'list')
|
protected function makeConfigForMode($mode = 'view', $type = 'list', $throwException = true)
|
||||||
{
|
{
|
||||||
$config = null;
|
$config = null;
|
||||||
|
|
||||||
|
|
@ -1293,13 +1299,17 @@ class RelationController extends ControllerBehavior
|
||||||
* - view.list => manage.list
|
* - view.list => manage.list
|
||||||
*/
|
*/
|
||||||
if (!$config) {
|
if (!$config) {
|
||||||
|
|
||||||
if ($mode == 'manage' && $type == 'list') {
|
if ($mode == 'manage' && $type == 'list') {
|
||||||
return $this->makeConfigForMode('view', $type);
|
return $this->makeConfigForMode('view', $type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($throwException) {
|
||||||
throw new ApplicationException('Missing configuration for '.$mode.'.'.$type.' in RelationController definition '.$this->field);
|
throw new ApplicationException('Missing configuration for '.$mode.'.'.$type.' in RelationController definition '.$this->field);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $this->makeConfig($config);
|
return $this->makeConfig($config);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,20 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function transfers the supplied variables as hidden form inputs,
|
||||||
|
* to any popup that is spawned within the supplied container. The spawned
|
||||||
|
* popup must contain a form element.
|
||||||
|
*/
|
||||||
|
this.bindToPopups = function(container, vars) {
|
||||||
|
$(container).on('show.oc.popup', function(event, $trigger, $modal){
|
||||||
|
var $form = $('form', $modal)
|
||||||
|
$.each(vars, function(name, value){
|
||||||
|
$form.prepend($('<input />').attr({ type: 'hidden', name: name, value: value }))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$.oc.relationBehavior = new RelationBehavior;
|
$.oc.relationBehavior = new RelationBehavior;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
<div id="<?= $relationManageWidget->getId('managePopup') ?>">
|
||||||
<?php if ($relationManageId): ?>
|
<?php if ($relationManageId): ?>
|
||||||
|
|
||||||
<?= Form::ajax('onRelationManageUpdate', ['data-popup-load-indicator' => true, 'sessionKey' => $newSessionKey]) ?>
|
<?= Form::ajax('onRelationManageUpdate', ['data-popup-load-indicator' => true, 'sessionKey' => $newSessionKey]) ?>
|
||||||
|
|
@ -54,6 +55,7 @@
|
||||||
|
|
||||||
<!-- Passable fields -->
|
<!-- Passable fields -->
|
||||||
<input type="hidden" name="_relation_field" value="<?= $relationField ?>" />
|
<input type="hidden" name="_relation_field" value="<?= $relationField ?>" />
|
||||||
|
<input type="hidden" name="_relation_mode" value="form" />
|
||||||
<input type="hidden" name="_relation_session_key" value="<?= $relationSessionKey ?>" />
|
<input type="hidden" name="_relation_session_key" value="<?= $relationSessionKey ?>" />
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
|
|
@ -83,3 +85,12 @@
|
||||||
<?= Form::close() ?>
|
<?= Form::close() ?>
|
||||||
|
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$.oc.relationBehavior.bindToPopups('#<?= $relationManageWidget->getId("managePopup") ?>', {
|
||||||
|
_relation_field: '<?= $relationField ?>',
|
||||||
|
_relation_mode: 'form'
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
@ -1,105 +1,21 @@
|
||||||
.field-codeeditor {
|
.field-codeeditor{width:100%;position:relative;border:2px solid #e0e0e0;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}
|
||||||
width: 100%;
|
.field-codeeditor textarea{opacity:0;filter:alpha(opacity=0)}
|
||||||
position: relative;
|
.field-codeeditor.editor-focus{border:2px solid #808c8d}
|
||||||
border: 2px solid #e0e0e0;
|
.field-codeeditor.size-tiny{min-height:50px}
|
||||||
-webkit-border-radius: 2px;
|
.field-codeeditor.size-small{min-height:100px}
|
||||||
-moz-border-radius: 2px;
|
.field-codeeditor.size-large{min-height:200px}
|
||||||
border-radius: 2px;
|
.field-codeeditor.size-huge{min-height:250px}
|
||||||
}
|
.field-codeeditor.size-giant{min-height:350px}
|
||||||
.field-codeeditor textarea {
|
.field-codeeditor .ace_search{font-family:'Open Sans',Arial,sans-serif;font-size:14px;color:#333333;z-index:603}
|
||||||
opacity: 0;
|
.field-codeeditor .editor-code{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}
|
||||||
filter: alpha(opacity=0);
|
.field-codeeditor .editor-toolbar{position:absolute;top:3px;right:3px;z-index:600}
|
||||||
}
|
.field-codeeditor .editor-toolbar > ul,.field-codeeditor .editor-toolbar ul > li{list-style-type:none;padding:0;margin:0}
|
||||||
.field-codeeditor.editor-focus {
|
.field-codeeditor .editor-toolbar > ul > li{float:left}
|
||||||
border: 2px solid #808c8d;
|
.field-codeeditor .editor-toolbar > ul > li > a{display:block;height:25px;width:25px;color:#666;font-size:20px;text-align:center;text-decoration:none}
|
||||||
}
|
.field-codeeditor .editor-toolbar > ul > li > a > abbr{position:absolute;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}
|
||||||
.field-codeeditor.size-tiny {
|
.field-codeeditor .editor-toolbar > ul > li > a > i{opacity:0.4;filter:alpha(opacity=40);display:block}
|
||||||
min-height: 50px;
|
.field-codeeditor .editor-toolbar > ul > li > a > i:before{font-size:14px}
|
||||||
}
|
.field-codeeditor .editor-toolbar > ul > li > a:hover > i,.field-codeeditor .editor-toolbar > ul > li > a:focus > i{opacity:1;filter:alpha(opacity=100)}
|
||||||
.field-codeeditor.size-small {
|
.field-codeeditor.editor-fullscreen{z-index:601;position:fixed !important;top:0;left:0;height:100%;border-width:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
|
||||||
min-height: 100px;
|
.field-codeeditor.editor-fullscreen .editor-code{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
|
||||||
}
|
.field-codeeditor.editor-fullscreen .editor-toolbar{z-index:602}
|
||||||
.field-codeeditor.size-large {
|
|
||||||
min-height: 200px;
|
|
||||||
}
|
|
||||||
.field-codeeditor.size-huge {
|
|
||||||
min-height: 250px;
|
|
||||||
}
|
|
||||||
.field-codeeditor.size-giant {
|
|
||||||
min-height: 350px;
|
|
||||||
}
|
|
||||||
.field-codeeditor .ace_search {
|
|
||||||
font-family: 'Open Sans', Arial, sans-serif;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #333333;
|
|
||||||
z-index: 153;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-code {
|
|
||||||
-webkit-border-radius: 2px;
|
|
||||||
-moz-border-radius: 2px;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar {
|
|
||||||
position: absolute;
|
|
||||||
top: 3px;
|
|
||||||
right: 3px;
|
|
||||||
z-index: 150;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul,
|
|
||||||
.field-codeeditor .editor-toolbar ul > li {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li > a {
|
|
||||||
display: block;
|
|
||||||
height: 25px;
|
|
||||||
width: 25px;
|
|
||||||
color: #666;
|
|
||||||
font-size: 20px;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li > a > abbr {
|
|
||||||
position: absolute;
|
|
||||||
font: 0/0 a;
|
|
||||||
color: transparent;
|
|
||||||
text-shadow: none;
|
|
||||||
background-color: transparent;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li > a > i {
|
|
||||||
opacity: 0.4;
|
|
||||||
filter: alpha(opacity=40);
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li > a > i:before {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li > a:hover > i,
|
|
||||||
.field-codeeditor .editor-toolbar > ul > li > a:focus > i {
|
|
||||||
opacity: 1;
|
|
||||||
filter: alpha(opacity=100);
|
|
||||||
}
|
|
||||||
.field-codeeditor.editor-fullscreen {
|
|
||||||
z-index: 151;
|
|
||||||
position: fixed!important;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
border-width: 0;
|
|
||||||
-webkit-border-radius: 0;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.field-codeeditor.editor-fullscreen .editor-code {
|
|
||||||
-webkit-border-radius: 0;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.field-codeeditor.editor-fullscreen .editor-toolbar {
|
|
||||||
z-index: 152;
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
@import "../../../../assets/less/core/boot.less";
|
@import "../../../../assets/less/core/boot.less";
|
||||||
|
|
||||||
@codeeditor-zindex: 150;
|
@codeeditor-zindex: 600;
|
||||||
|
|
||||||
.field-codeeditor {
|
.field-codeeditor {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
aria-label="Remove"
|
aria-label="Remove"
|
||||||
data-request="<?= $this->getEventHandler('onRemoveItem') ?>"
|
data-request="<?= $this->getEventHandler('onRemoveItem') ?>"
|
||||||
data-request-data="'index': '<?= $indexValue ?>'"
|
data-request-data="'index': '<?= $indexValue ?>'"
|
||||||
data-request-success="$el.closest('.field-repeater-item').remove()"
|
data-request-success="$(this).closest('.field-repeater-item').remove()"
|
||||||
data-request-confirm="Are you sure?">
|
data-request-confirm="Are you sure?">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,7 @@ to{background-position:0 0}
|
||||||
.redactor-editor figure[data-type=quote] cite:before{content:"\2014\00a0"}
|
.redactor-editor figure[data-type=quote] cite:before{content:"\2014\00a0"}
|
||||||
.redactor-editor figure[data-type=quote] cite:empty:before{opacity:0.4;content:"\2014 Type to add citation (optional)"}
|
.redactor-editor figure[data-type=quote] cite:empty:before{opacity:0.4;content:"\2014 Type to add citation (optional)"}
|
||||||
.redactor-box figcaption:empty:before{opacity:.4;content:"Type to add caption (optional)"}
|
.redactor-box figcaption:empty:before{opacity:.4;content:"Type to add caption (optional)"}
|
||||||
.redactor-box .oc-figure-controls{background:#2b3e50 !important;padding:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;display:none;white-space:nowrap;left:10px;top:-50px;margin:0 auto;font-family:'Open Sans',Arial,sans-serif;line-height:20px;font-style:normal;z-index:800;text-align:center}
|
.redactor-box .oc-figure-controls{background:#2b3e50 !important;padding:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;position:absolute;display:none;white-space:nowrap;left:10px;top:-50px;margin:0 auto;font-family:'Open Sans',Arial,sans-serif;line-height:20px;font-style:normal;z-index:1100;text-align:center}
|
||||||
.redactor-box .oc-figure-controls:after{content:' ';left:0;position:absolute;display:block;height:10px;background:rgba(0,0,0,0.1);width:100%;bottom:-10px;opacity:0.1;filter:alpha(opacity=10);filter:alpha(opacity=0.1);-moz-opacity:0.001;opacity:0.001}
|
.redactor-box .oc-figure-controls:after{content:' ';left:0;position:absolute;display:block;height:10px;background:rgba(0,0,0,0.1);width:100%;bottom:-10px;opacity:0.1;filter:alpha(opacity=10);filter:alpha(opacity=0.1);-moz-opacity:0.001;opacity:0.001}
|
||||||
.redactor-box .oc-figure-controls:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid #2b3e50;border-bottom-width:0;position:absolute;left:14px;bottom:-8px}
|
.redactor-box .oc-figure-controls:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid #2b3e50;border-bottom-width:0;position:absolute;left:14px;bottom:-8px}
|
||||||
.redactor-box figure:hover .oc-figure-controls{display:block}
|
.redactor-box figure:hover .oc-figure-controls{display:block}
|
||||||
|
|
@ -246,9 +246,9 @@ to{background-position:0 0}
|
||||||
.field-richeditor.size-giant .redactor-editor{height:320px !important}
|
.field-richeditor.size-giant .redactor-editor{height:320px !important}
|
||||||
.redactor-box{margin-bottom:0}
|
.redactor-box{margin-bottom:0}
|
||||||
.redactor-box iframe{border:none}
|
.redactor-box iframe{border:none}
|
||||||
.redactor-box-fullscreen{z-index:415 !important}
|
.redactor-box-fullscreen{z-index:715 !important}
|
||||||
.redactor-toolbar,.redactor-dropdown{z-index:410 !important}
|
.redactor-toolbar,.redactor-dropdown{z-index:710 !important}
|
||||||
#redactor-modal-overlay,#redactor-modal-box,#redactor-modal{z-index:420 !important}
|
#redactor-modal-overlay,#redactor-modal-box,#redactor-modal{z-index:720 !important}
|
||||||
.redactor-toolbar{background:#dddddd;-webkit-box-shadow:none;box-shadow:none}
|
.redactor-toolbar{background:#dddddd;-webkit-box-shadow:none;box-shadow:none}
|
||||||
.redactor-toolbar li.redactor-btn-right{float:right;margin-right:2px}
|
.redactor-toolbar li.redactor-btn-right{float:right;margin-right:2px}
|
||||||
.redactor-toolbar li a{color:#404040;font-size:14px;width:20px;line-height:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
|
.redactor-toolbar li a{color:#404040;font-size:14px;width:20px;line-height:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
||||||
@import "../../../../assets/less/core/boot.less";
|
@import "../../../../assets/less/core/boot.less";
|
||||||
|
|
||||||
@richeditor-toolbar-size: 30px;
|
@richeditor-toolbar-size: 30px;
|
||||||
@richeditor-zindex: 300;
|
@richeditor-zindex: 600;
|
||||||
@richeditor-gutter: 20px;
|
@richeditor-gutter: 20px;
|
||||||
|
|
||||||
@import "_redactor.less";
|
@import "_redactor.less";
|
||||||
|
|
|
||||||
|
|
@ -38,29 +38,31 @@
|
||||||
.redactor-box textarea:focus {
|
.redactor-box textarea:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
Z-index setup
|
|
||||||
*/
|
|
||||||
.redactor-editor,
|
.redactor-editor,
|
||||||
.redactor-box {
|
.redactor-box {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
Z-index setup
|
||||||
|
*/
|
||||||
.redactor-editor,
|
.redactor-editor,
|
||||||
.redactor-box,
|
.redactor-box,
|
||||||
.redactor-box textarea {
|
.redactor-box textarea {
|
||||||
z-index: auto !important;
|
z-index: auto;
|
||||||
}
|
}
|
||||||
.redactor-box-fullscreen {
|
.redactor-box-fullscreen {
|
||||||
z-index: 1052 !important;
|
z-index: 1051;
|
||||||
|
}
|
||||||
|
.redactor-toolbar {
|
||||||
|
z-index: 100;
|
||||||
}
|
}
|
||||||
.redactor-toolbar,
|
|
||||||
.redactor-dropdown {
|
.redactor-dropdown {
|
||||||
z-index: 1053 !important;
|
z-index: 1052;
|
||||||
}
|
}
|
||||||
#redactor-modal-overlay,
|
#redactor-modal-overlay,
|
||||||
#redactor-modal-box,
|
#redactor-modal-box,
|
||||||
#redactor-modal {
|
#redactor-modal {
|
||||||
z-index: 1054 !important;
|
z-index: 1053;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Resize
|
Resize
|
||||||
|
|
@ -111,6 +113,9 @@ body .redactor-box-fullscreen {
|
||||||
.redactor-editor:focus {
|
.redactor-editor:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
.toolbar-fixed-box + .redactor-editor {
|
||||||
|
padding-top: 32px !important;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Placeholder
|
Placeholder
|
||||||
*/
|
*/
|
||||||
|
|
@ -650,7 +655,7 @@ body .redactor-box-fullscreen {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
max-height: 250px;
|
max-height: 250px;
|
||||||
overflow-x: scroll;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
#redactor-modal #redactor-modal-list li {
|
#redactor-modal #redactor-modal-list li {
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid #ddd;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -83,32 +83,33 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Z-index setup
|
|
||||||
*/
|
|
||||||
|
|
||||||
.redactor-editor,
|
.redactor-editor,
|
||||||
.redactor-box {
|
.redactor-box {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Z-index setup
|
||||||
|
*/
|
||||||
.redactor-editor,
|
.redactor-editor,
|
||||||
.redactor-box,
|
.redactor-box,
|
||||||
.redactor-box textarea {
|
.redactor-box textarea {
|
||||||
z-index: auto !important;
|
z-index: auto;
|
||||||
}
|
}
|
||||||
.redactor-box-fullscreen {
|
.redactor-box-fullscreen {
|
||||||
z-index: 1052 !important;
|
z-index: 1051;
|
||||||
|
}
|
||||||
|
.redactor-toolbar {
|
||||||
|
z-index: 100;
|
||||||
}
|
}
|
||||||
.redactor-toolbar,
|
|
||||||
.redactor-dropdown {
|
.redactor-dropdown {
|
||||||
z-index: 1053 !important;
|
z-index: 1052;
|
||||||
}
|
}
|
||||||
#redactor-modal-overlay,
|
#redactor-modal-overlay,
|
||||||
#redactor-modal-box,
|
#redactor-modal-box,
|
||||||
#redactor-modal {
|
#redactor-modal {
|
||||||
z-index: 1054 !important;
|
z-index: 1053;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -164,6 +165,9 @@ body .redactor-box-fullscreen {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.toolbar-fixed-box + .redactor-editor {
|
||||||
|
padding-top: 32px !important;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Placeholder
|
Placeholder
|
||||||
|
|
@ -698,7 +702,7 @@ body .redactor-box-fullscreen {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
max-height: 250px;
|
max-height: 250px;
|
||||||
overflow-x: scroll;
|
overflow-x: auto;
|
||||||
& li {
|
& li {
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid #ddd;
|
||||||
&:last-child {
|
&:last-child {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -256,7 +256,7 @@ return [
|
||||||
],
|
],
|
||||||
'mysettings' => [
|
'mysettings' => [
|
||||||
'menu_label' => 'My Settings',
|
'menu_label' => 'My Settings',
|
||||||
'menu_description' => 'Settings relate to your administration account'
|
'menu_description' => 'Settings related to your administration account'
|
||||||
],
|
],
|
||||||
'myaccount' => [
|
'myaccount' => [
|
||||||
'menu_label' => 'My account',
|
'menu_label' => 'My account',
|
||||||
|
|
@ -299,6 +299,6 @@ return [
|
||||||
'email' => 'Email'
|
'email' => 'Email'
|
||||||
],
|
],
|
||||||
'filter' => [
|
'filter' => [
|
||||||
'all' => 'all'
|
'all' => 'all',
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,306 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'auth' => [
|
||||||
|
'title' => 'Administrasjonsområde'
|
||||||
|
],
|
||||||
|
'field' => [
|
||||||
|
'invalid_type' => 'Ugyldig felttype brukt :type.',
|
||||||
|
'options_method_not_exists' => "Modellklassen :model må definere en metode :method() som returnerer vilkår for formfeltet ':field'."
|
||||||
|
],
|
||||||
|
'widget' => [
|
||||||
|
'not_registered' => "En widget med klassenavnet ':name' har ikke blitt registrert",
|
||||||
|
'not_bound' => "En widget med klassenavnet ':name' er ikke bundet til kontrolleren"
|
||||||
|
],
|
||||||
|
'page' => [
|
||||||
|
'untitled' => 'Uten navn',
|
||||||
|
'access_denied' => [
|
||||||
|
'label' => 'Ingen tilgang',
|
||||||
|
'help' => "Du har ikke nødvendig tilgang til å se denne siden.",
|
||||||
|
'cms_link' => 'Tilbake til backend'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'partial' => [
|
||||||
|
'not_found_name' => "En partial ved navn ':name' ble ikke funnet."
|
||||||
|
],
|
||||||
|
'account' => [
|
||||||
|
'sign_out' => 'Logg ut',
|
||||||
|
'login' => 'Logg inn',
|
||||||
|
'reset' => 'Nullstill',
|
||||||
|
'restore' => 'Gjenopprett',
|
||||||
|
'login_placeholder' => 'brukernavn',
|
||||||
|
'password_placeholder' => 'passord',
|
||||||
|
'forgot_password' => 'Glemt passordet ditt?',
|
||||||
|
'enter_email' => 'Din e-postadresse',
|
||||||
|
'enter_login' => 'Ditt brukernavn',
|
||||||
|
'email_placeholder' => 'e-postadresse',
|
||||||
|
'enter_new_password' => 'Skriv inn nytt passord',
|
||||||
|
'password_reset' => 'Gjenopprett passord',
|
||||||
|
'restore_success' => 'En e-post har blitt sendt til din e-postadresse med informasjon om gjenoppretting av passord.',
|
||||||
|
'restore_error' => "Brukernavnet ':login' eksisterer ikke.",
|
||||||
|
'reset_success' => 'Ditt passord har blitt gjenopprettet. Du kan nå logge inn.',
|
||||||
|
'reset_error' => 'Ugyldig data. Vennligst prøv igjen!',
|
||||||
|
'reset_fail' => 'Kunne ikke gjenopprette passord!',
|
||||||
|
'apply' => 'Fortsett',
|
||||||
|
'cancel' => 'Avbryt',
|
||||||
|
'delete' => 'Slett',
|
||||||
|
'ok' => 'OK'
|
||||||
|
],
|
||||||
|
'dashboard' => [
|
||||||
|
'menu_label' => 'Dashboard',
|
||||||
|
'widget_label' => 'Widget',
|
||||||
|
'widget_width' => 'Bredde',
|
||||||
|
'full_width' => 'full bredde',
|
||||||
|
'add_widget' => 'Legg til widget',
|
||||||
|
'widget_inspector_title' => 'Widget-konfigurasjon',
|
||||||
|
'widget_inspector_description' => 'Konfigurer widgeten',
|
||||||
|
'widget_columns_label' => 'Bredde :columns',
|
||||||
|
'widget_columns_description' => 'Bredden på widgeten. Tall mellom 1 og 10.',
|
||||||
|
'widget_columns_error' => 'Vennligst spesifiser bredden på weidgeten som et tall mellom 1 og 10.',
|
||||||
|
'columns' => '{1} kolonne|[2,Inf] kolonner',
|
||||||
|
'widget_new_row_label' => 'Tving ny rad',
|
||||||
|
'widget_new_row_description' => 'Plasserer widgeten i en ny rad.',
|
||||||
|
'widget_title_label' => 'Widget-tittel',
|
||||||
|
'widget_title_error' => 'Tittel er obligatorisk.',
|
||||||
|
'status' => [
|
||||||
|
'widget_title_default' => 'Systemstatus',
|
||||||
|
'online' => 'online',
|
||||||
|
'maintenance' => 'in maintenance',
|
||||||
|
'update_available' => '{0} oppdateringer tilgjengelig!|{1} oppdatering tilgjengelig!|[2,Inf] oppdateringer tilgjengelig!'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'user' => [
|
||||||
|
'name' => 'Administrator',
|
||||||
|
'menu_label' => 'Administratorer',
|
||||||
|
'menu_description' => 'Håndter backend-administratorer, grupper og tilganger.',
|
||||||
|
'list_title' => 'Håndter administratorer',
|
||||||
|
'new' => 'Ny administrator',
|
||||||
|
'login' => 'Brukernavn',
|
||||||
|
'first_name' => 'Fornavn',
|
||||||
|
'last_name' => 'Etternavn',
|
||||||
|
'full_name' => 'Fult navn',
|
||||||
|
'email' => 'E-postadresse',
|
||||||
|
'groups' => 'Grupper',
|
||||||
|
'groups_comment' => 'Spesifiser hvilke grupper personen tilhører.',
|
||||||
|
'avatar' => 'Avatar',
|
||||||
|
'password' => 'Passord',
|
||||||
|
'password_confirmation' => 'Bekreft passord',
|
||||||
|
'permissions' => 'Tilganger',
|
||||||
|
'superuser' => 'Superbruker',
|
||||||
|
'superuser_comment' => 'Kryss av denne boksen for å gi personen tilgang til alle områder.',
|
||||||
|
'send_invite' => 'Send invitasjon via e-post',
|
||||||
|
'send_invite_comment' => 'Kryss av denne boksen for å sende personen en invitasjon via e-post',
|
||||||
|
'delete_confirm' => 'Vil du virkelig slette denne administratoren?',
|
||||||
|
'return' => 'Tilbake til administratoroversikten',
|
||||||
|
'allow' => 'Tillat',
|
||||||
|
'inherit' => 'Arv',
|
||||||
|
'deny' => 'Nekt',
|
||||||
|
'group' => [
|
||||||
|
'name' => 'Gruppe',
|
||||||
|
'name_field' => 'Navn',
|
||||||
|
'description_field' => 'Beskrivelse',
|
||||||
|
'is_new_user_default_field' => 'Legg til nye administratorer til denne gruppen automatisk',
|
||||||
|
'code_field' => 'Kode',
|
||||||
|
'code_comment' => 'Fyll inn en unik kode for å bruke API-en.',
|
||||||
|
'menu_label' => 'Grupper',
|
||||||
|
'list_title' => 'Håndter grupper',
|
||||||
|
'new' => 'New Administrator Group',
|
||||||
|
'delete_confirm' => 'Vil du virkelig slette denne administratorgruppen?',
|
||||||
|
'return' => 'Tilbake til gruppeoversikten',
|
||||||
|
],
|
||||||
|
'preferences' => [
|
||||||
|
'not_authenticated' => 'Det er ingen autentiserte brukere å laste eller lagre innstillinger for.'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'list' => [
|
||||||
|
'default_title' => 'Liste',
|
||||||
|
'search_prompt' => 'Søk...',
|
||||||
|
'no_records' => 'Det er ingen treff i denne visningen.',
|
||||||
|
'missing_model' => 'List-egenskapen brukt i :class mangler en modelldefinisjon.',
|
||||||
|
'missing_column' => 'Det er ingen kolonnedefinisjoner for :columns.',
|
||||||
|
'missing_columns' => 'List brukt i :class har ingen definerte kolonner.',
|
||||||
|
'missing_definition' => "List-egenskapen inneholder ingen kolonner for ':field'.",
|
||||||
|
'behavior_not_ready' => 'List-egenskapen har ikke blir initialisert, sjekk at du har kalt makeList() i kontrolleren.',
|
||||||
|
'invalid_column_datetime' => "Kolonneverdien ':column' er ikke et DateTime-objekt, mangler du en \$dates referanse i modellen?",
|
||||||
|
'pagination' => 'Viser rader: :from-:to av :total',
|
||||||
|
'prev_page' => 'Forrige side',
|
||||||
|
'next_page' => 'Neste side',
|
||||||
|
'loading' => 'Laster...',
|
||||||
|
'setup_title' => 'Listeinnstillinger',
|
||||||
|
'setup_help' => 'Kryss av sjekkboksene for å velge hvilke kolonner du vil ha i listen. Du kan sortere kolonnene ved å dra sjekkboksene opp eller ned.',
|
||||||
|
'records_per_page' => 'Rader per side',
|
||||||
|
'records_per_page_help' => 'Velg antall rader som skal vises på hver side. Vær oppmerksom på at et høyt antall kan redusere ytelsen på siden.',
|
||||||
|
'delete_selected' => 'Slett valgte',
|
||||||
|
'delete_selected_empty' => 'Det er ingen valgte rader å slette.',
|
||||||
|
'delete_selected_confirm' => 'Vil du slette valgte rader?',
|
||||||
|
'delete_selected_success' => 'Rader har blitt slettet.',
|
||||||
|
],
|
||||||
|
'fileupload' => [
|
||||||
|
'attachment' => 'Vedlegg',
|
||||||
|
'help' => 'Legg til tittel og beskrivelse for dette vedlegget.',
|
||||||
|
'title_label' => 'Tittel',
|
||||||
|
'description_label' => 'Beskrivelse'
|
||||||
|
],
|
||||||
|
'form' => [
|
||||||
|
'create_title' => 'Ny :name',
|
||||||
|
'update_title' => 'Endre :name',
|
||||||
|
'preview_title' => 'Forhåndsvis :name',
|
||||||
|
'create_success' => ':name har blitt opprettet',
|
||||||
|
'update_success' => ':name har blitt endret',
|
||||||
|
'delete_success' => ':name har blitt slettet',
|
||||||
|
'missing_id' => 'Record ID for skjemaet har ikke blitt spesifisert.',
|
||||||
|
'missing_model' => 'Skjemaegenskapen brukt i :class mangler en modell.',
|
||||||
|
'missing_definition' => "Skjemaegenskapen mangler et felt for ':field'.",
|
||||||
|
'not_found' => 'Record ID :id ble ikke funnet.',
|
||||||
|
'action_confirm' => 'Er du sikker?',
|
||||||
|
'create' => 'Opprett',
|
||||||
|
'create_and_close' => 'Opprett og lukk',
|
||||||
|
'creating' => 'Oppretter...',
|
||||||
|
'creating_name' => 'Oppretter :name...',
|
||||||
|
'save' => 'Lagre',
|
||||||
|
'save_and_close' => 'Lagre og lukk',
|
||||||
|
'saving' => 'Lagrer...',
|
||||||
|
'saving_name' => 'Lagrer :name...',
|
||||||
|
'delete' => 'Slett',
|
||||||
|
'deleting' => 'Sletter...',
|
||||||
|
'deleting_name' => 'Sletter :name...',
|
||||||
|
'reset_default' => 'Tilbakestill',
|
||||||
|
'resetting' => 'Tilbakestiller',
|
||||||
|
'resetting_name' => 'Tilbakestiller :name',
|
||||||
|
'undefined_tab' => 'Div.',
|
||||||
|
'field_off' => 'Av',
|
||||||
|
'field_on' => 'På',
|
||||||
|
'add' => 'Legg til',
|
||||||
|
'apply' => 'Fortsett',
|
||||||
|
'cancel' => 'Avbryt',
|
||||||
|
'close' => 'Lukk',
|
||||||
|
'confirm' => 'Bekreft',
|
||||||
|
'reload' => 'Oppdater',
|
||||||
|
'ok' => 'OK',
|
||||||
|
'or' => 'eller',
|
||||||
|
'confirm_tab_close' => 'Vil du virkelig lukke fanen? Endringer som ikke er lagret vil gå tapt.',
|
||||||
|
'behavior_not_ready' => 'Skjemaegenskap har ikke blitt initialisert, sjekk at du har kalt initForm() i kontrolleren.',
|
||||||
|
'preview_no_files_message' => 'Filer er ikke opplastet',
|
||||||
|
'select' => 'Velg',
|
||||||
|
'select_all' => 'alle',
|
||||||
|
'select_none' => 'ingen',
|
||||||
|
'select_placeholder' => 'velg',
|
||||||
|
'insert_row' => 'Sett inn rad',
|
||||||
|
'delete_row' => 'Slett rad',
|
||||||
|
'concurrency_file_changed_title' => 'Fil endret',
|
||||||
|
'concurrency_file_changed_description' => "The file you're editing has been changed on disk by another user. You can either reload the file and lose your changes or override the file on the disk.",
|
||||||
|
'concurrency_file_changed_description' => "Filen du endrer på har blitt endret på disken av en annen bruker. Du kan enten oppdatere filen og tape endret data eller overskrive filen på disken.",
|
||||||
|
],
|
||||||
|
'relation' => [
|
||||||
|
'missing_config' => "Relasjonen mangler en konfigurasjon for ':config'.",
|
||||||
|
'missing_definition' => "Relasjonen mangler en definisjon for ':field'.",
|
||||||
|
'missing_model' => "Relasjonen brukt i :class har ingen definert modell.",
|
||||||
|
'invalid_action_single' => "Denne handlingen kan ikke brukes på en enkel relasjon.",
|
||||||
|
'invalid_action_multi' => "Denne relasjonen kan ikke brukes på fler-relasjoner.",
|
||||||
|
'help' => "Klikk på et element for å legge til",
|
||||||
|
'related_data' => "Relatert :name data",
|
||||||
|
'add' => "Legg til",
|
||||||
|
'add_selected' => "Legg til valgte",
|
||||||
|
'add_a_new' => "Legg til ny :name",
|
||||||
|
'link_selected' => "Link valgte",
|
||||||
|
'link_a_new' => "Link en ny :name",
|
||||||
|
'cancel' => "Avbryt",
|
||||||
|
'close' => "Lukk",
|
||||||
|
'add_name' => "Legg til :name",
|
||||||
|
'create' => "Opprett",
|
||||||
|
'create_name' => "Opprett :name",
|
||||||
|
'update' => "Oppdater",
|
||||||
|
'update_name' => "Oppdater :name",
|
||||||
|
'preview' => "Forhåndsvis",
|
||||||
|
'preview_name' => "Forhåndsvis :name",
|
||||||
|
'remove' => "Fjern",
|
||||||
|
'remove_name' => "Fjern :name",
|
||||||
|
'delete' => "Slett",
|
||||||
|
'delete_name' => "Slett :name",
|
||||||
|
'delete_confirm' => "Er du sikker?",
|
||||||
|
'link' => "Link",
|
||||||
|
'link_name' => "Link :name",
|
||||||
|
'unlink' => "Fjern link",
|
||||||
|
'unlink_name' => "Fjern link :name",
|
||||||
|
'unlink_confirm' => "Er du sikker?",
|
||||||
|
],
|
||||||
|
'model' => [
|
||||||
|
'name' => 'Modell',
|
||||||
|
'not_found' => "Modellen ':class' med ID-en :id ble ikke funnet",
|
||||||
|
'missing_id' => 'Det er ingen ID spesifisert for å se opp modellen.',
|
||||||
|
'missing_relation' => "Modellen ':class' mangler en definisjon for ':relation'.",
|
||||||
|
'missing_method' => "Modellen ':class' mangler metoden ':method'.",
|
||||||
|
'invalid_class' => "Modellen :model som brukes i :class er ugyldig, den må arve \Model-klassen.",
|
||||||
|
'mass_assignment_failed' => "Mass assignment feilet for modell-attributten ':attribute'."
|
||||||
|
],
|
||||||
|
'warnings' => [
|
||||||
|
'tips' => 'Tips for systemkonfigurasjon',
|
||||||
|
'tips_description' => 'Det er problemer du må være oppmerksom på for å konfigurere systemet riktig.',
|
||||||
|
'permissions' => 'Mappen :name eller dens undermapper kan ikke skrives på av PHP. Vennligst sjekk skrivetilganger på serveren.',
|
||||||
|
'extension' => 'PHP-extensionen :name er ikke installert..'
|
||||||
|
],
|
||||||
|
'editor' => [
|
||||||
|
'menu_label' => 'Teksteditor-innstillinger',
|
||||||
|
'menu_description' => 'Endre teksteditor-innstillingene dine, for eksemplem tekststørrelse og fargevalg.',
|
||||||
|
'font_size' => 'Tekststørrelse',
|
||||||
|
'tab_size' => 'Tab-størrelse',
|
||||||
|
'use_hard_tabs' => 'Inntrykk med tabs',
|
||||||
|
'code_folding' => 'Code folding',
|
||||||
|
'word_wrap' => 'Word wrap',
|
||||||
|
'highlight_active_line' => 'Fremhev aktiv linje',
|
||||||
|
'show_invisibles' => 'Vis usynlige tegn',
|
||||||
|
'show_gutter' => 'Vis linjenummer',
|
||||||
|
'theme' => 'Fargevalg'
|
||||||
|
],
|
||||||
|
'tooltips' => [
|
||||||
|
'preview_website' => 'Forhåndsvis nettsiden'
|
||||||
|
],
|
||||||
|
'mysettings' => [
|
||||||
|
'menu_label' => 'Mine innstillinger',
|
||||||
|
'menu_description' => 'Innstillinger relatert til din administratorkonto'
|
||||||
|
],
|
||||||
|
'myaccount' => [
|
||||||
|
'menu_label' => 'Min konto',
|
||||||
|
'menu_description' => 'Oppdater dine kontodetaljer, som navn, e-postadresse og passord.',
|
||||||
|
'menu_keywords' => 'sikkerhetsinnlogging'
|
||||||
|
],
|
||||||
|
'branding' => [
|
||||||
|
'menu_label' => 'Tilpass backend',
|
||||||
|
'menu_description' => 'Tilpass administratorområdet, for eksempel navn, farger og logo.',
|
||||||
|
'brand' => 'Merkevare',
|
||||||
|
'logo' => 'Logo',
|
||||||
|
'logo_description' => 'Last opp logo for å bruke backend.',
|
||||||
|
'app_name' => 'App-navn',
|
||||||
|
'app_name_description' => 'Dette navnet vises i tittelområdet backend.',
|
||||||
|
'app_tagline' => 'App Tagline',
|
||||||
|
'app_tagline_description' => 'Denne teksten vises på innloggingssiden backend.',
|
||||||
|
'colors' => 'Farger',
|
||||||
|
'primary_light' => 'Primær (Lys)',
|
||||||
|
'primary_dark' => 'Primær (Mørk)',
|
||||||
|
'secondary_light' => 'Sekundær (Lys)',
|
||||||
|
'secondary_dark' => 'Sekundær (Mørk)',
|
||||||
|
'styles' => 'Stilsett',
|
||||||
|
'custom_stylesheet' => 'Eget stilsett'
|
||||||
|
],
|
||||||
|
'backend_preferences' => [
|
||||||
|
'menu_label' => 'Backend-innstillinger',
|
||||||
|
'menu_description' => 'Håndter kontoinnstillinger som for eksempel språk.',
|
||||||
|
'menu_description' => 'Manage your account preferences such as desired language.',
|
||||||
|
'locale' => 'Språk',
|
||||||
|
'locale_comment' => 'Velg ditt ønsket språk.'
|
||||||
|
],
|
||||||
|
'access_log' => [
|
||||||
|
'hint' => 'Denne loggen viser en liste over vellykkede administratorinnlogginger. Innloggingene blir lagret i 60 dager.',
|
||||||
|
'menu_label' => 'Aksesslogg',
|
||||||
|
'menu_description' => 'Se en liste over vellykkede innlogginger på backend.',
|
||||||
|
'created_at' => 'Tid',
|
||||||
|
'login' => 'Brukernavn',
|
||||||
|
'ip_address' => 'IP-adresse',
|
||||||
|
'first_name' => 'Fornavn',
|
||||||
|
'last_name' => 'Etternavn',
|
||||||
|
'email' => 'E-postadresse'
|
||||||
|
],
|
||||||
|
'filter' => [
|
||||||
|
'all' => 'alle'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
@ -2,26 +2,26 @@
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'auth' => [
|
'auth' => [
|
||||||
'title' => 'Área de Administração'
|
'title' => 'Área Administrativa',
|
||||||
],
|
],
|
||||||
'field' => [
|
'field' => [
|
||||||
'invalid_type' => 'Tipo de campo inválido utilizado :type.',
|
'invalid_type' => 'Tipo de campo inválido :type.',
|
||||||
'options_method_not_exists' => 'A classe do modelo :model deve definir um método :method() retornando opções pro campo ":field".',
|
'options_method_not_exists' => 'A classe :model deve definir um método :method() retornando opções para o campo ":field".',
|
||||||
],
|
],
|
||||||
'widget' => [
|
'widget' => [
|
||||||
'not_registered' => "Uma classe de widget com o nome ':name' não foi definida",
|
'not_registered' => 'Uma classe de widget com o nome ":name" não foi definida',
|
||||||
'not_bound' => "Um widget cuja classe se chama ':name' não foi indexado ao controlador",
|
'not_bound' => 'Um widget da classe ":name" não foi ligado ao controlador',
|
||||||
],
|
],
|
||||||
'page' => [
|
'page' => [
|
||||||
'untitled' => "Sem Título",
|
'untitled' => 'Sem Título',
|
||||||
'access_denied' => [
|
'access_denied' => [
|
||||||
'label' => "Acesso negado",
|
'label' => 'Acesso negado',
|
||||||
'help' => "Você não tem as permissões necessárias para visualizar esta página.",
|
'help' => 'Você não tem as permissões necessárias para visualizar esta página.',
|
||||||
'cms_link' => "Voltar à área de administração",
|
'cms_link' => 'Retornar à área administrativa',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'partial' => [
|
'partial' => [
|
||||||
'not_found_name' => "O bloco ':name' não foi encontrado.",
|
'not_found_name' => 'O bloco ":name" não foi encontrado.',
|
||||||
],
|
],
|
||||||
'account' => [
|
'account' => [
|
||||||
'sign_out' => 'Sair',
|
'sign_out' => 'Sair',
|
||||||
|
|
@ -30,31 +30,31 @@ return [
|
||||||
'restore' => 'Restaurar',
|
'restore' => 'Restaurar',
|
||||||
'login_placeholder' => 'usuário',
|
'login_placeholder' => 'usuário',
|
||||||
'password_placeholder' => 'senha',
|
'password_placeholder' => 'senha',
|
||||||
'forgot_password' => "Esqueceu sua senha?",
|
'forgot_password' => 'Esqueceu sua senha?',
|
||||||
'enter_email' => "Digite seu email",
|
'enter_email' => 'Digite seu email',
|
||||||
'enter_login' => "Digite seu nome de usuário",
|
'enter_login' => 'Digite seu nome de usuário',
|
||||||
'email_placeholder' => "e-mail",
|
'email_placeholder' => 'e-mail',
|
||||||
'enter_new_password' => "Digite uma nova senha",
|
'enter_new_password' => 'Digite uma nova senha',
|
||||||
'password_reset' => "Redefinir sua senha",
|
'password_reset' => 'Redefinir sua senha',
|
||||||
'restore_success' => "Um email com instruções para redfinir sua senha foram enviados para o seu email.",
|
'restore_success' => 'Um email com instruções para redfinir sua senha foram enviados para o seu email.',
|
||||||
'restore_error' => "O usuário ':login' não foi encontrado",
|
'restore_error' => 'O usuário ":login" não foi encontrado',
|
||||||
'reset_success' => "Sua senha foi redefinida com sucesso. Você já pode fazer o login.",
|
'reset_success' => 'Sua senha foi redefinida com sucesso. Você já pode entrar novamente.',
|
||||||
'reset_error' => "Erro ao redefinir sua senha. Por favor, tente de novo.",
|
'reset_error' => 'A senha redefinida é inválida. Por favor, tente de novo!',
|
||||||
'reset_fail' => "Falha ao redefinir sua senha!",
|
'reset_fail' => 'Falha ao redefinir sua senha!',
|
||||||
'apply' => 'Aplicar',
|
'apply' => 'Aplicar',
|
||||||
'cancel' => 'Cancelar',
|
'cancel' => 'Cancelar',
|
||||||
'delete' => 'Excluir',
|
'delete' => 'Excluir',
|
||||||
'ok' => 'OK',
|
'ok' => 'Ok',
|
||||||
],
|
],
|
||||||
'dashboard' => [
|
'dashboard' => [
|
||||||
'menu_label' => 'Painel',
|
'menu_label' => 'Painel',
|
||||||
'widget_label' => 'Widget',
|
'widget_label' => 'Widget',
|
||||||
'widget_width' => 'Largura',
|
'widget_width' => 'Largura',
|
||||||
'full_width' => 'Largura completa',
|
'full_width' => 'Largura total',
|
||||||
'add_widget' => 'Adicionar widget',
|
'add_widget' => 'Adicionar widget',
|
||||||
'widget_inspector_title' => 'Configurações do widget',
|
'widget_inspector_title' => 'Configurações do widget',
|
||||||
'widget_inspector_description' => 'Relatório de configurações do widget',
|
'widget_inspector_description' => 'Configurar widget de relatório',
|
||||||
'widget_columns_label' => 'Largura de :columns',
|
'widget_columns_label' => 'Largura :columns',
|
||||||
'widget_columns_description' => 'Largura do widget, um número entre 1 e 10.',
|
'widget_columns_description' => 'Largura do widget, um número entre 1 e 10.',
|
||||||
'widget_columns_error' => 'Por favor, entre com a largura do widget. Deve ser um número entre 1 e 10.',
|
'widget_columns_error' => 'Por favor, entre com a largura do widget. Deve ser um número entre 1 e 10.',
|
||||||
'columns' => '{1} coluna|[2,Inf] colunas',
|
'columns' => '{1} coluna|[2,Inf] colunas',
|
||||||
|
|
@ -63,11 +63,11 @@ return [
|
||||||
'widget_title_label' => 'Título do widget',
|
'widget_title_label' => 'Título do widget',
|
||||||
'widget_title_error' => 'O título do widget é necessário.',
|
'widget_title_error' => 'O título do widget é necessário.',
|
||||||
'status' => [
|
'status' => [
|
||||||
'widget_title_default' => 'Condição do Sistema',
|
'widget_title_default' => 'Status do Sistema',
|
||||||
'online' => 'online',
|
'online' => 'online',
|
||||||
'maintenance' => 'em manutenção',
|
'maintenance' => 'em manutenção',
|
||||||
'update_available' => '{0} atualizações disponíveis!|{1} atualização disponível!|[2,Inf] atualizações disponíveis!',
|
'update_available' => '{0} atualizações disponíveis!|{1} atualização disponível!|[2,Inf] atualizações disponíveis!',
|
||||||
]
|
],
|
||||||
],
|
],
|
||||||
'user' => [
|
'user' => [
|
||||||
'name' => 'Administrador',
|
'name' => 'Administrador',
|
||||||
|
|
@ -75,22 +75,22 @@ return [
|
||||||
'menu_description' => 'Gerenciar administradores, grupos e permissões.',
|
'menu_description' => 'Gerenciar administradores, grupos e permissões.',
|
||||||
'list_title' => 'Gerenciar administradores',
|
'list_title' => 'Gerenciar administradores',
|
||||||
'new' => 'Novo administrador',
|
'new' => 'Novo administrador',
|
||||||
'login' => "Usuário",
|
'login' => 'Usuário',
|
||||||
'first_name' => "Nome",
|
'first_name' => 'Nome',
|
||||||
'last_name' => "Sobrenome",
|
'last_name' => 'Sobrenome',
|
||||||
'full_name' => "Nome Completo",
|
'full_name' => 'Nome Completo',
|
||||||
'email' => "E-mail",
|
'email' => 'E-mail',
|
||||||
'groups' => "Grupos",
|
'groups' => 'Grupos',
|
||||||
'groups_comment' => "Defina a quais grupos essa pessoa pertence.",
|
'groups_comment' => 'Defina a quais grupos essa pessoa pertence.',
|
||||||
'avatar' => "Foto",
|
'avatar' => 'Foto',
|
||||||
'password' => "Senha",
|
'password' => 'Senha',
|
||||||
'password_confirmation' => "Confirme a senha",
|
'password_confirmation' => 'Confirme a senha',
|
||||||
'permissions' => 'Permissões',
|
'permissions' => 'Permissões',
|
||||||
'superuser' => "Super Usuário",
|
'superuser' => 'Super Usuário',
|
||||||
'superuser_comment' => "Marque essa caixa para liberar o acesso completo para este usuário.",
|
'superuser_comment' => 'Marque para liberar o acesso irrestrito para este usuário.',
|
||||||
'send_invite' => 'Enviar convite por e-mail',
|
'send_invite' => 'Enviar convite por e-mail',
|
||||||
'send_invite_comment' => 'Marque esta caixa para enviar um convite por e-mail',
|
'send_invite_comment' => 'Marque para enviar um convite por e-mail',
|
||||||
'delete_confirm' => 'Você realmente quer apagar este administrador?',
|
'delete_confirm' => 'Você realmente deseja apagar este administrador?',
|
||||||
'return' => 'Retornar à lista de administradores',
|
'return' => 'Retornar à lista de administradores',
|
||||||
'allow' => 'Permitir',
|
'allow' => 'Permitir',
|
||||||
'inherit' => 'Herdar',
|
'inherit' => 'Herdar',
|
||||||
|
|
@ -99,58 +99,58 @@ return [
|
||||||
'name' => 'Grupo',
|
'name' => 'Grupo',
|
||||||
'name_field' => 'Nome',
|
'name_field' => 'Nome',
|
||||||
'description_field' => 'Descrição',
|
'description_field' => 'Descrição',
|
||||||
'is_new_user_default_field' => 'Adicionar novos administradores para este grupo por padrão',
|
'is_new_user_default_field' => 'Adicionar novos administradores a este grupo por padrão',
|
||||||
'code_field' => 'Código',
|
'code_field' => 'Código',
|
||||||
'code_comment' => 'Insira um código único, se você quiser acessá-lo com a API.',
|
'code_comment' => 'Insira um código exclusivo se você quiser acessá-lo com a API.',
|
||||||
'menu_label' => 'Grupos',
|
'menu_label' => 'Grupos',
|
||||||
'list_title' => 'Gerenciar grupos',
|
'list_title' => 'Gerenciar grupos',
|
||||||
'new' => 'Novo grupo administrador',
|
'new' => 'Novo grupo administrador',
|
||||||
'delete_confirm' => 'Você realmente deseja excluir este grupo de administradores?',
|
'delete_confirm' => 'Você realmente deseja excluir este grupo?',
|
||||||
'return' => 'Voltar para a lista de grupos de administradores',
|
'return' => 'Voltar para a lista de grupos',
|
||||||
],
|
],
|
||||||
'preferences' => [
|
'preferences' => [
|
||||||
'not_authenticated' => 'Nenhum usuário autenticado pra carregar as preferências.'
|
'not_authenticated' => 'Nenhum usuário autenticado para carregar as preferências.',
|
||||||
]
|
],
|
||||||
],
|
],
|
||||||
'list' => [
|
'list' => [
|
||||||
'default_title' => 'Lista',
|
'default_title' => 'Lista',
|
||||||
'search_prompt' => 'Buscar...',
|
'search_prompt' => 'Buscar...',
|
||||||
'no_records' => 'Nenhum registro encontrado.',
|
'no_records' => 'Nenhum registro encontrado.',
|
||||||
'missing_model' => 'Lista usado em :class não tem um modelo definido.',
|
'missing_model' => 'Lista usada em :class não tem um model definido.',
|
||||||
'missing_column' => 'Não existe definição de coluna para :columns.',
|
'missing_column' => 'Não existe definição de coluna para :columns.',
|
||||||
'missing_columns' => 'Lista utilizada em :class não possui colunas de lista definidas.',
|
'missing_columns' => 'Lista utilizada em :class não possui colunas de lista definidas.',
|
||||||
'missing_definition' => "Lista não possui uma coluna para o campo ':field'.",
|
'missing_definition' => 'Lista não possui uma coluna para ":field".',
|
||||||
'behavior_not_ready' => 'Lista não foi inicializada. Confira se você chamou makeLists() no seu controlador.',
|
'behavior_not_ready' => 'Lista não foi inicializada. Confira se você chamou makeLists() no controller.',
|
||||||
'invalid_column_datetime' => "Valor da coluna ':column' não é um objeto DateTime, você esqueceu da referência de \$dates no modelo?",
|
'invalid_column_datetime' => 'Valor da coluna ":column" não é um objeto DateTime, você esqueceu registrar \$dates no Model?',
|
||||||
'pagination' => 'Registros exibidos: :from-:to de :total',
|
'pagination' => 'Registros exibidos: :from-:to de :total',
|
||||||
'prev_page' => 'Anterior',
|
'prev_page' => 'Anterior',
|
||||||
'next_page' => 'Próxima',
|
'next_page' => 'Próxima',
|
||||||
'loading' => 'Carregando...',
|
'loading' => 'Carregando...',
|
||||||
'setup_title' => 'Configuração da Lista',
|
'setup_title' => 'Configuração da Lista',
|
||||||
'setup_help' => 'Utilize as caixas para selecionar as colunas que deseja ver na lista. Você pode alterar as posições das colunas arrastando-as para cima ou para baixo.',
|
'setup_help' => 'Selecione as colunas que deseja ver na lista. Você pode alterar as posições das colunas arrastando-as para cima ou para baixo.',
|
||||||
'records_per_page' => 'Registros por página',
|
'records_per_page' => 'Registros por página',
|
||||||
'records_per_page_help' => 'Selecione o número de registros por página a serem exibidos. Mas, atenção! Números elevados podem prejudicar a performance do sistema.',
|
'records_per_page_help' => 'Selecione o número de registros a serem exibidos por página. Note que um número grande pode prejudicar a performance.',
|
||||||
'delete_selected' => 'Deletar selecionado',
|
'delete_selected' => 'Deletar selecionado',
|
||||||
'delete_selected_empty' => 'Não há registros selecionados para excluir.',
|
'delete_selected_empty' => 'Não há registros selecionados para excluir.',
|
||||||
'delete_selected_confirm' => 'Excluir os registros selecionados?',
|
'delete_selected_confirm' => 'Excluir os registros selecionados?',
|
||||||
'delete_selected_success' => 'Registros selecionados excluidos com sucesso.',
|
'delete_selected_success' => 'Registros selecionados excluídos com sucesso.',
|
||||||
],
|
],
|
||||||
'fileupload' => [
|
'fileupload' => [
|
||||||
'attachment' => 'Anexo',
|
'attachment' => 'Anexo',
|
||||||
'help' => 'Adicione um título e descrição a este anexo.',
|
'help' => 'Adicione um título e descrição a este anexo.',
|
||||||
'title_label' => 'Título',
|
'title_label' => 'Título',
|
||||||
'description_label' => 'Descrição'
|
'description_label' => 'Descrição',
|
||||||
],
|
],
|
||||||
'form' => [
|
'form' => [
|
||||||
'create_title' => "Novo :name",
|
'create_title' => 'Novo :name',
|
||||||
'update_title' => "Editar :name",
|
'update_title' => 'Editar :name',
|
||||||
'preview_title' => "Visualizar :name",
|
'preview_title' => 'Visualizar :name',
|
||||||
'create_success' => ':name foi criado com sucesso',
|
'create_success' => ':name foi criado com sucesso',
|
||||||
'update_success' => ':name foi atualizado com sucesso',
|
'update_success' => ':name foi atualizado com sucesso',
|
||||||
'delete_success' => ':name foi apagado com sucesso',
|
'delete_success' => ':name foi apagado com sucesso',
|
||||||
'missing_id' => "ID do registro não especificado",
|
'missing_id' => 'O ID do registro não foi fornecido',
|
||||||
'missing_model' => 'Formulário utilizado na classe :class não tem um modelo definido.',
|
'missing_model' => 'Formulário utilizado na classe :class não tem um model definido.',
|
||||||
'missing_definition' => "Formulário não contém um campo ':field'.",
|
'missing_definition' => 'Formulário não contém um campo ":field".',
|
||||||
'not_found' => 'Nenhum registro encontrado com o ID :id',
|
'not_found' => 'Nenhum registro encontrado com o ID :id',
|
||||||
'action_confirm' => 'Você tem certeza?',
|
'action_confirm' => 'Você tem certeza?',
|
||||||
'create' => 'Criar',
|
'create' => 'Criar',
|
||||||
|
|
@ -179,7 +179,7 @@ return [
|
||||||
'ok' => 'Ok',
|
'ok' => 'Ok',
|
||||||
'or' => 'ou',
|
'or' => 'ou',
|
||||||
'confirm_tab_close' => 'Tem certeza que deseja fechar essa aba? As alterações que não foram salvas serão perdidas',
|
'confirm_tab_close' => 'Tem certeza que deseja fechar essa aba? As alterações que não foram salvas serão perdidas',
|
||||||
'behavior_not_ready' => 'O formulário não foi inicializado. Confira se você chamou initForm() no seu controlador.',
|
'behavior_not_ready' => 'O formulário não foi inicializado. Confira se você chamou initForm() no controller.',
|
||||||
'preview_no_files_message' => 'Os arquivos não foram carregados',
|
'preview_no_files_message' => 'Os arquivos não foram carregados',
|
||||||
'select' => 'Selecionar',
|
'select' => 'Selecionar',
|
||||||
'select_all' => 'todos',
|
'select_all' => 'todos',
|
||||||
|
|
@ -188,55 +188,55 @@ return [
|
||||||
'insert_row' => 'Inserir linha',
|
'insert_row' => 'Inserir linha',
|
||||||
'delete_row' => 'Excluir linha',
|
'delete_row' => 'Excluir linha',
|
||||||
'concurrency_file_changed_title' => 'O arquivo foi alterado',
|
'concurrency_file_changed_title' => 'O arquivo foi alterado',
|
||||||
'concurrency_file_changed_description' => "O arquivo que você está editando foi alterado por outro usuário. Você pode recarregar o arquivo e perder suas alterações ou substituir o arquivo."
|
'concurrency_file_changed_description' => 'O arquivo que você está editando foi alterado em disco. Você pode recarregá-lo e perder suas alterações ou sobrescrever o arquivo do disco.',
|
||||||
],
|
],
|
||||||
'relation' => [
|
'relation' => [
|
||||||
'missing_config' => "Comportamento de relação não tem qualquer configuração ':config'.",
|
'missing_config' => 'Comportamento relation não tem uma configuração para ":config".',
|
||||||
'missing_definition' => "Relacionamento não contém uma definição para ':field'.",
|
'missing_definition' => 'Comportamento relation não contém uma definição para ":field".',
|
||||||
'missing_model' => "Relacionamento utilizado na classe :class não possui um modelo definido.",
|
'missing_model' => 'Comportamento relation utilizado na classe :class não possui um model definido.',
|
||||||
'invalid_action_single' => "Essa ação não pode ser realizada num relacionamento singular.",
|
'invalid_action_single' => 'Essa ação não pode ser realizada num relacionamento singular.',
|
||||||
'invalid_action_multi' => "Essa ação não pode ser realizada num relacionamento múltiplo.",
|
'invalid_action_multi' => 'Essa ação não pode ser realizada num relacionamento múltiplo.',
|
||||||
'help' => "Clique em um item para adicionar",
|
'help' => 'Clique em um item para adicionar',
|
||||||
'related_data' => "Dados do :name relacionados",
|
'related_data' => 'Dados de :name relacionado',
|
||||||
'add' => "Adicionar",
|
'add' => 'Adicionar',
|
||||||
'add_selected' => "Adicionar seleção",
|
'add_selected' => 'Adicionar seleção',
|
||||||
'add_a_new' => "Adicionar um(a) novo(a) :name",
|
'add_a_new' => 'Adicionar um(a) novo(a) :name',
|
||||||
'link_selected' => "Vincular selecionado",
|
'link_selected' => 'Vincular selecionado',
|
||||||
'link_a_new' => "Vincular um novo :name",
|
'link_a_new' => 'Vincular um novo :name',
|
||||||
'cancel' => "Cancelar",
|
'cancel' => 'Cancelar',
|
||||||
'close' => "Fechar",
|
'close' => 'Fechar',
|
||||||
'add_name' => "Adicionar :name",
|
'add_name' => 'Adicionar :name',
|
||||||
'create' => "Criar",
|
'create' => 'Criar',
|
||||||
'create_name' => "Criar :name",
|
'create_name' => 'Criar :name',
|
||||||
'update' => "Atualizar",
|
'update' => 'Atualizar',
|
||||||
'update_name' => "Atualizar :name",
|
'update_name' => 'Atualizar :name',
|
||||||
'preview' => "Visualizar",
|
'preview' => 'Visualizar',
|
||||||
'preview_name' => "Visualizar :name",
|
'preview_name' => 'Visualizar :name',
|
||||||
'remove' => "Remover",
|
'remove' => 'Remover',
|
||||||
'remove_name' => "Remover :name",
|
'remove_name' => 'Remover :name',
|
||||||
'delete' => "Excluir",
|
'delete' => 'Excluir',
|
||||||
'delete_name' => "Excluir :name",
|
'delete_name' => 'Excluir :name',
|
||||||
'delete_confirm' => "Você tem certeza?",
|
'delete_confirm' => 'Você tem certeza?',
|
||||||
'link' => "Vincular",
|
'link' => 'Vincular',
|
||||||
'link_name' => "Vincular :name",
|
'link_name' => 'Vincular :name',
|
||||||
'unlink' => "Desvincular",
|
'unlink' => 'Desvincular',
|
||||||
'unlink_name' => "Desvincular :name",
|
'unlink_name' => 'Desvincular :name',
|
||||||
'unlink_confirm' => "Você tem certeza?",
|
'unlink_confirm' => 'Você tem certeza?',
|
||||||
],
|
],
|
||||||
'model' => [
|
'model' => [
|
||||||
'name' => "Modelo",
|
'name' => 'Model',
|
||||||
'not_found' => "Modelo ':class' com ID :id não foi encontrado",
|
'not_found' => 'Model ":class" com ID :id não foi encontrado',
|
||||||
'missing_id' => "ID do registro não especificado.",
|
'missing_id' => 'ID do registro não especificado.',
|
||||||
'missing_relation' => "Modelo ':class' não contém uma definição para o relacionamento ':relation'.",
|
'missing_relation' => 'Model ":class" não contém uma definição para o relacionamento ":relation".',
|
||||||
'missing_method' => "Modelo ':class' não contém o método ':method'.",
|
'missing_method' => 'Model ":class" não contém o método ":method".',
|
||||||
'invalid_class' => "Modelo :model utilizado na classe :class não é válido. É necessário herdar a classe \Model.",
|
'invalid_class' => 'Model :model utilizado na classe :class não é válido. É necessário herdar a classe \Model.',
|
||||||
'mass_assignment_failed' => "Mass assignment failed for Model attribute ':attribute'.",
|
'mass_assignment_failed' => 'Falha na atribuição em massa do atributo ":attribute" do Model.',
|
||||||
],
|
],
|
||||||
'warnings' => [
|
'warnings' => [
|
||||||
'tips' => 'Dicas de configuração do sistema',
|
'tips' => 'Dicas de configuração do sistema',
|
||||||
'tips_description' => 'Há questões que você precisa prestar atenção, a fim de configurar o sistema corretamente.',
|
'tips_description' => 'Há itens que demandam atenção para configurar o sistema corretamente.',
|
||||||
'permissions' => 'Diretório :name ou em seus subdiretórios não é gravável para o PHP. Por favor, defina permissões para o servidor neste diretório correspondente.',
|
'permissions' => 'Diretório :name ou seus subdiretórios não são graváveis pelo PHP. Por favor, defina permissões de escrita para o servidor neste diretório.',
|
||||||
'extension' => 'A extenção PHP :name não está instalada. Por favor, instale esta biblioteca para ativar a extensão.'
|
'extension' => 'A extensão PHP :name não está instalada. Por favor, instale esta biblioteca para ativar a extensão.',
|
||||||
],
|
],
|
||||||
'editor' => [
|
'editor' => [
|
||||||
'menu_label' => 'Definições do Editor',
|
'menu_label' => 'Definições do Editor',
|
||||||
|
|
@ -260,30 +260,30 @@ return [
|
||||||
],
|
],
|
||||||
'myaccount' => [
|
'myaccount' => [
|
||||||
'menu_label' => 'Minha Conta',
|
'menu_label' => 'Minha Conta',
|
||||||
'menu_description' => 'Atualize os detalhes da sua conta, como nome, endereço de e-mail e senha.',
|
'menu_description' => 'Atualizar detalhes da sua conta, como nome, e-mail e senha.',
|
||||||
'menu_keywords' => 'login de segurança'
|
'menu_keywords' => 'login de segurança'
|
||||||
],
|
],
|
||||||
'branding' => [
|
'branding' => [
|
||||||
'menu_label' => 'Personalize back-end',
|
'menu_label' => 'Personalização',
|
||||||
'menu_description' => 'Personalize a área de administração, tais como nome, cores e logo.',
|
'menu_description' => 'Personalizar detalhes da área administrativa, tais como título, cores e logo.',
|
||||||
'brand' => 'Marca',
|
'brand' => 'Marca',
|
||||||
'logo' => 'Logo',
|
'logo' => 'Logo',
|
||||||
'logo_description' => 'Fazer upload de um logo personalizada para usar no back-end.',
|
'logo_description' => 'Fazer upload de uma logo para usar na área administrativa.',
|
||||||
'app_name' => 'Nome do Aplicativo',
|
'app_name' => 'Nome do Aplicativo',
|
||||||
'app_name_description' => 'Este nome é mostrado no título da área no back-end.',
|
'app_name_description' => 'Este nome é mostrado no título da área administrativa.',
|
||||||
'app_tagline' => 'Slogan do Aplicativo',
|
'app_tagline' => 'Slogan do Aplicativo',
|
||||||
'app_tagline_description' => 'Esta frase é mostrada na tela de login do back-end.',
|
'app_tagline_description' => 'Esta frase é mostrada na tela de login administrativo.',
|
||||||
'colors' => 'Cores',
|
'colors' => 'Cores',
|
||||||
'primary_light' => 'Primária (Clara)',
|
'primary_light' => 'Primária (Clara)',
|
||||||
'primary_dark' => 'Primária (Escura)',
|
'primary_dark' => 'Primária (Escura)',
|
||||||
'secondary_light' => 'Secundária (Clara)',
|
'secondary_light' => 'Secundária (Clara)',
|
||||||
'secondary_dark' => 'Secundária (Escura)',
|
'secondary_dark' => 'Secundária (Escura)',
|
||||||
'styles' => 'Estilos',
|
'styles' => 'Estilos',
|
||||||
'custom_stylesheet' => 'Personalização do estilo CSS'
|
'custom_stylesheet' => 'CSS customizado',
|
||||||
],
|
],
|
||||||
'backend_preferences' => [
|
'backend_preferences' => [
|
||||||
'menu_label' => 'Preferências da Administração',
|
'menu_label' => 'Preferências da Administração',
|
||||||
'menu_description' => 'Gerencie as preferências de idiomas e aparência da administração.',
|
'menu_description' => 'Gerenciar idiomas e aparência da administração.',
|
||||||
'locale' => 'Idioma',
|
'locale' => 'Idioma',
|
||||||
'locale_comment' => 'Selecione o idioma de sua preferência.',
|
'locale_comment' => 'Selecione o idioma de sua preferência.',
|
||||||
],
|
],
|
||||||
|
|
@ -294,11 +294,11 @@ return [
|
||||||
'created_at' => 'Data & Hora',
|
'created_at' => 'Data & Hora',
|
||||||
'login' => 'Login',
|
'login' => 'Login',
|
||||||
'ip_address' => 'Endereço IP',
|
'ip_address' => 'Endereço IP',
|
||||||
'first_name' => 'Primeiro Nome',
|
'first_name' => 'Nome',
|
||||||
'last_name' => 'Sobrenome',
|
'last_name' => 'Sobrenome',
|
||||||
'email' => 'E-mail',
|
'email' => 'E-mail',
|
||||||
],
|
],
|
||||||
'filter' => [
|
'filter' => [
|
||||||
'all' => 'todos'
|
'all' => 'todos',
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,8 @@ class BackendPreferences extends Model
|
||||||
'tr' => [Lang::get('system::lang.locale.tr'), 'flag-tr'],
|
'tr' => [Lang::get('system::lang.locale.tr'), 'flag-tr'],
|
||||||
'pl' => [Lang::get('system::lang.locale.pl'), 'flag-pl'],
|
'pl' => [Lang::get('system::lang.locale.pl'), 'flag-pl'],
|
||||||
'sk' => [Lang::get('system::lang.locale.sk'), 'flag-sk'],
|
'sk' => [Lang::get('system::lang.locale.sk'), 'flag-sk'],
|
||||||
|
'zh-cn' => [Lang::get('system::lang.locale.zh-cn'), 'flag-cn'],
|
||||||
|
'nb-no' => [Lang::get('system::lang.locale.nb-no'), 'flag-no'],
|
||||||
];
|
];
|
||||||
|
|
||||||
// Sort locales alphabetically
|
// Sort locales alphabetically
|
||||||
|
|
|
||||||
|
|
@ -76,14 +76,20 @@ class User extends UserBase
|
||||||
/**
|
/**
|
||||||
* Returns the public image file path to this user's avatar.
|
* Returns the public image file path to this user's avatar.
|
||||||
*/
|
*/
|
||||||
public function getAvatarThumb($size = 25, $default = null)
|
public function getAvatarThumb($size = 25, $options = null)
|
||||||
{
|
{
|
||||||
if (!$default) {
|
if (is_string($options)) {
|
||||||
$default = 'mm'; // Mystery man
|
$options = ['default' => $options];
|
||||||
|
}
|
||||||
|
elseif (!is_array($options)) {
|
||||||
|
$options = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default is "mm" (Mystery man)
|
||||||
|
$default = array_get($options, 'default', 'mm');
|
||||||
|
|
||||||
if ($this->avatar) {
|
if ($this->avatar) {
|
||||||
return $this->avatar->getThumb($size, $size);
|
return $this->avatar->getThumb($size, $size, $options);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return '//www.gravatar.com/avatar/' .
|
return '//www.gravatar.com/avatar/' .
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,26 @@ class Lists extends WidgetBase
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Include any relation constraints
|
* Add eager loads to the query
|
||||||
|
*/
|
||||||
|
if ($withs) {
|
||||||
|
$query->with(array_unique($withs));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Apply search term
|
||||||
|
*/
|
||||||
|
$query->where(function ($innerQuery) use ($primarySearchable, $relationSearchable, $joins) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Search primary columns
|
||||||
|
*/
|
||||||
|
if (count($primarySearchable) > 0) {
|
||||||
|
$innerQuery->orSearchWhere($this->searchTerm, $primarySearchable);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Search relation columns
|
||||||
*/
|
*/
|
||||||
if ($joins) {
|
if ($joins) {
|
||||||
foreach (array_unique($joins) as $join) {
|
foreach (array_unique($joins) as $join) {
|
||||||
|
|
@ -373,19 +392,14 @@ class Lists extends WidgetBase
|
||||||
$columnsToSearch = array_get($relationSearchable, $join, []);
|
$columnsToSearch = array_get($relationSearchable, $join, []);
|
||||||
|
|
||||||
if (count($columnsToSearch) > 0) {
|
if (count($columnsToSearch) > 0) {
|
||||||
$query->whereHas($join, function ($_query) use ($columnsToSearch) {
|
$innerQuery->orWhereHas($join, function ($_query) use ($columnsToSearch) {
|
||||||
$_query->searchWhere($this->searchTerm, $columnsToSearch);
|
$_query->searchWhere($this->searchTerm, $columnsToSearch);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
});
|
||||||
* Add eager loads to the query
|
|
||||||
*/
|
|
||||||
if ($withs) {
|
|
||||||
$query->with(array_unique($withs));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Custom select queries
|
* Custom select queries
|
||||||
|
|
@ -428,15 +442,6 @@ class Lists extends WidgetBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Apply a supplied search term for primary columns
|
|
||||||
*/
|
|
||||||
if (count($primarySearchable) > 0) {
|
|
||||||
$query->where(function ($innerQuery) use ($primarySearchable) {
|
|
||||||
$innerQuery->searchWhere($this->searchTerm, $primarySearchable);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apply sorting
|
* Apply sorting
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
this.options = options || {};
|
this.options = options || {};
|
||||||
|
|
||||||
this.bindDependants()
|
this.bindDependants()
|
||||||
|
this.bindCheckboxlist()
|
||||||
this.toggleEmptyTabs()
|
this.toggleEmptyTabs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -20,6 +21,28 @@
|
||||||
refreshHandler: null
|
refreshHandler: null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Logic for checkboxlist
|
||||||
|
*/
|
||||||
|
FormWidget.prototype.bindCheckboxlist = function() {
|
||||||
|
|
||||||
|
var checkAllBoxes = function($field, flag) {
|
||||||
|
$('input[type=checkbox]', $field)
|
||||||
|
.prop('checked', flag)
|
||||||
|
.first()
|
||||||
|
.trigger('change')
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$el.on('click', '[data-field-checkboxlist-all]', function() {
|
||||||
|
checkAllBoxes($(this).closest('.field-checkboxlist'), true)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.$el.on('click', '[data-field-checkboxlist-none]', function() {
|
||||||
|
checkAllBoxes($(this).closest('.field-checkboxlist'), false)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Bind dependant fields
|
* Bind dependant fields
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -40,12 +40,12 @@
|
||||||
<!-- Quick selection -->
|
<!-- Quick selection -->
|
||||||
<small>
|
<small>
|
||||||
<?= e(trans('backend::lang.form.select')) ?>:
|
<?= e(trans('backend::lang.form.select')) ?>:
|
||||||
<a href="javascript:;" onclick="jQuery('#<?= $field->getId('scrollable') ?> input[type=checkbox]').prop('checked', true)"><?= e(trans('backend::lang.form.select_all')) ?></a>,
|
<a href="javascript:;" data-field-checkboxlist-all><?= e(trans('backend::lang.form.select_all')) ?></a>,
|
||||||
<a href="javascript:;" onclick="jQuery('#<?= $field->getId('scrollable') ?> input[type=checkbox]').prop('checked', false)"><?= e(trans('backend::lang.form.select_none')) ?></a>
|
<a href="javascript:;" data-field-checkboxlist-none><?= e(trans('backend::lang.form.select_none')) ?></a>
|
||||||
</small>
|
</small>
|
||||||
|
|
||||||
<!-- Scrollable Checkbox list -->
|
<!-- Scrollable Checkbox list -->
|
||||||
<div class="field-checkboxlist-scrollable" id="<?= $field->getId('scrollable') ?>">
|
<div class="field-checkboxlist-scrollable">
|
||||||
<div class="control-scrollbar" data-control="scrollbar">
|
<div class="control-scrollbar" data-control="scrollbar">
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?= Form::open([
|
<?= Form::open([
|
||||||
'data-request' => $this->getEventHandler('onAddWidget'),
|
'data-request' => $this->getEventHandler('onAddWidget'),
|
||||||
'data-request-success' => "\$el.trigger('close.oc.popup'); \$(window).trigger('oc.report-widget-added')",
|
'data-request-success' => "\$(this).trigger('close.oc.popup'); \$(window).trigger('oc.report-widget-added')",
|
||||||
'data-popup-load-indicator' => 1
|
'data-popup-load-indicator' => 1
|
||||||
]) ?>
|
]) ?>
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'icon' => 'icon-picture-o',
|
'icon' => 'icon-picture-o',
|
||||||
'url' => Backend::URL('cms/themes'),
|
'url' => Backend::URL('cms/themes'),
|
||||||
'permissions' => ['system.manage_themes'],
|
'permissions' => ['system.manage_themes'],
|
||||||
'order' => 200
|
'order' => 300
|
||||||
],
|
],
|
||||||
'maintenance_settings' => [
|
'maintenance_settings' => [
|
||||||
'label' => 'cms::lang.maintenance.settings_menu',
|
'label' => 'cms::lang.maintenance.settings_menu',
|
||||||
|
|
|
||||||
|
|
@ -362,13 +362,13 @@ class CmsCompoundObject extends CmsObject
|
||||||
$objectComponentMap[$objectCode] = [];
|
$objectComponentMap[$objectCode] = [];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
foreach ($this->settings['components'] as $componentName => $componentSettings) {
|
foreach ($this->settings['components'] as $name => $settings) {
|
||||||
$nameParts = explode(' ', $componentName);
|
$nameParts = explode(' ', $name);
|
||||||
if (count($nameParts > 1)) {
|
if (count($nameParts > 1)) {
|
||||||
$componentName = trim($nameParts[0]);
|
$name = trim($nameParts[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$component = $this->getComponent($componentName);
|
$component = $this->getComponent($name);
|
||||||
if (!$component) {
|
if (!$component) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -379,7 +379,7 @@ class CmsCompoundObject extends CmsObject
|
||||||
$componentProperties[$propertyName] = $component->property($propertyName);
|
$componentProperties[$propertyName] = $component->property($propertyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
$objectComponentMap[$objectCode][$componentName] = $componentProperties;
|
$objectComponentMap[$objectCode][$name] = $componentProperties;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -441,9 +441,10 @@ class CmsCompoundObject extends CmsObject
|
||||||
protected function fillViewBagArray()
|
protected function fillViewBagArray()
|
||||||
{
|
{
|
||||||
$viewBag = $this->getViewBag();
|
$viewBag = $this->getViewBag();
|
||||||
foreach ($viewBag->getProperties() as $name=>$value)
|
foreach ($viewBag->getProperties() as $name => $value) {
|
||||||
$this->viewBag[$name] = $value;
|
$this->viewBag[$name] = $value;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the object properties from the cached data.
|
* Initializes the object properties from the cached data.
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,6 @@
|
||||||
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
||||||
data-request="onDelete"
|
data-request="onDelete"
|
||||||
data-request-confirm="<?= e(trans('cms::lang.content.delete_confirm_single')) ?>"
|
data-request-confirm="<?= e(trans('cms::lang.content.delete_confirm_single')) ?>"
|
||||||
data-request-success="$.oc.cmsPage.updateTemplateList('content'); $(element).trigger('close.oc.tab', [{force: true}])"
|
data-request-success="$.oc.cmsPage.updateTemplateList('content'); $(this).trigger('close.oc.tab', [{force: true}])"
|
||||||
data-control="delete-button"></button>
|
data-control="delete-button"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -13,6 +13,6 @@
|
||||||
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
||||||
data-request="onDelete"
|
data-request="onDelete"
|
||||||
data-request-confirm="<?= e(trans('cms::lang.layout.delete_confirm_single')) ?>"
|
data-request-confirm="<?= e(trans('cms::lang.layout.delete_confirm_single')) ?>"
|
||||||
data-request-success="$.oc.cmsPage.updateTemplateList('layout'); $(element).trigger('close.oc.tab', [{force: true}])"
|
data-request-success="$.oc.cmsPage.updateTemplateList('layout'); $(this).trigger('close.oc.tab', [{force: true}])"
|
||||||
data-control="delete-button"></button>
|
data-control="delete-button"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -24,6 +24,6 @@
|
||||||
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
||||||
data-request="onDelete"
|
data-request="onDelete"
|
||||||
data-request-confirm="<?= e(trans('cms::lang.page.delete_confirm_single')) ?>"
|
data-request-confirm="<?= e(trans('cms::lang.page.delete_confirm_single')) ?>"
|
||||||
data-request-success="$.oc.cmsPage.updateTemplateList('page'); $(element).trigger('close.oc.tab', [{force: true}])"
|
data-request-success="$.oc.cmsPage.updateTemplateList('page'); $(this).trigger('close.oc.tab', [{force: true}])"
|
||||||
data-control="delete-button"></button>
|
data-control="delete-button"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -13,6 +13,6 @@
|
||||||
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
class="btn btn-default empty oc-icon-trash-o <?php if (!$templatePath): ?>hide<?php endif ?>"
|
||||||
data-request="onDelete"
|
data-request="onDelete"
|
||||||
data-request-confirm="<?= e(trans('cms::lang.partial.delete_confirm_single')) ?>"
|
data-request-confirm="<?= e(trans('cms::lang.partial.delete_confirm_single')) ?>"
|
||||||
data-request-success="$.oc.cmsPage.updateTemplateList('partial'); $(element).trigger('close.oc.tab', [{force: true}])"
|
data-request-success="$.oc.cmsPage.updateTemplateList('partial'); $(this).trigger('close.oc.tab', [{force: true}])"
|
||||||
data-control="delete-button"></button>
|
data-control="delete-button"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -60,7 +60,7 @@ return [
|
||||||
'export_button' => 'Export',
|
'export_button' => 'Export',
|
||||||
'export_title' => 'Export theme',
|
'export_title' => 'Export theme',
|
||||||
'export_folders_label' => 'Folders',
|
'export_folders_label' => 'Folders',
|
||||||
'export_folders_comment' => 'Please select the theme folders you would like to import',
|
'export_folders_comment' => 'Please select the theme folders you would like to export',
|
||||||
'delete_button' => 'Delete',
|
'delete_button' => 'Delete',
|
||||||
'delete_confirm' => 'Are you sure you want to delete this theme? It cannot be undone!',
|
'delete_confirm' => 'Are you sure you want to delete this theme? It cannot be undone!',
|
||||||
'delete_active_theme_failed' => 'Cannot delete the active theme, try making another theme active first.',
|
'delete_active_theme_failed' => 'Cannot delete the active theme, try making another theme active first.',
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,232 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'cms_object' => [
|
||||||
|
'invalid_file' => 'Ugyldig filnavn: :name. Filnavn kan kun inneholde alfanumeriske tegn, understrek, bindestrek og punktum. Eksempel: page.htm, page, subdirectory/page',
|
||||||
|
'invalid_property' => "Egenskapen ':name' kan ikke settes",
|
||||||
|
'file_already_exists' => "Filen ':name' eksisterer allerede.",
|
||||||
|
'error_saving' => "Kunne ikke lagre filen ':name'. Vennligst sjekk skriverettigheter på serveren.",
|
||||||
|
'error_creating_directory' => 'Kunne ikke opprette mappen :name. Vennligst sjekk skriverettigheter på serveren.',
|
||||||
|
'invalid_file_extension' => 'Ugyldig filtype: :invalid. Tillatte filtyper er: :allowed.',
|
||||||
|
'error_deleting' => "Kunne ikke slette filen ':name'. Vennligst sjekk skriverettigheter på serveren.",
|
||||||
|
'delete_success' => 'Templates som ble slettet: :count.',
|
||||||
|
'file_name_required' => 'Filnavnfeltet er obligatorisk.'
|
||||||
|
],
|
||||||
|
'theme' => [
|
||||||
|
'not_found_name' => "Tema ':name' ble ikke funnet.",
|
||||||
|
'active' => [
|
||||||
|
'not_set' => 'Aktivt tema er ikke valgt.',
|
||||||
|
'not_found' => 'Aktivt tema ikke funnet.'
|
||||||
|
],
|
||||||
|
'edit' => [
|
||||||
|
'not_set' => 'Redigeringstema er ikke valgt.',
|
||||||
|
'not_found' => 'Redigeringstema ikke funnet.',
|
||||||
|
'not_match' => "Objektet du prøver å åpne tilhører ikke temaet som endres. Vennligst oppdater siden."
|
||||||
|
],
|
||||||
|
'settings_menu' => 'Frontend tema',
|
||||||
|
'settings_menu_description' => 'Forhåndsvis en liste over installerte temaer og velg et aktivt tema.',
|
||||||
|
'name_label' => 'Navn',
|
||||||
|
'name_create_placeholder' => 'Temanavn',
|
||||||
|
'author_label' => 'Forfatter',
|
||||||
|
'author_placeholder' => 'Person eller bedrift',
|
||||||
|
'description_label' => 'Beskrivelse',
|
||||||
|
'description_placeholder' => 'Temabeskrivelse',
|
||||||
|
'homepage_label' => 'Hjemmeside',
|
||||||
|
'homepage_placeholder' => 'Nettside-URL',
|
||||||
|
'code_label' => 'Kode',
|
||||||
|
'code_placeholder' => 'En unik kode som brukes for distribusjon',
|
||||||
|
'dir_name_label' => 'Mappenavn',
|
||||||
|
'dir_name_create_label' => 'Temaets mappenavn',
|
||||||
|
'theme_label' => 'Tema',
|
||||||
|
'activate_button' => 'Aktivér',
|
||||||
|
'active_button' => 'Aktivér',
|
||||||
|
'customize_button' => 'Tilpass',
|
||||||
|
'duplicate_button' => 'Duplisér',
|
||||||
|
'duplicate_title' => 'Duplisér tema',
|
||||||
|
'duplicate_theme_success' => 'Temaet har blitt duplisert!',
|
||||||
|
'manage_button' => 'Administrer',
|
||||||
|
'manage_title' => 'Administrer tema',
|
||||||
|
'edit_properties_title' => 'Tema',
|
||||||
|
'edit_properties_button' => 'Endre egenskaper',
|
||||||
|
'save_properties' => 'Lagre egenskaper',
|
||||||
|
'import_button' => 'Importér',
|
||||||
|
'import_title' => 'Importér tema',
|
||||||
|
'import_theme_success' => 'Temaet har blitt importert!',
|
||||||
|
'import_uploaded_file' => 'Temaets arkivfil',
|
||||||
|
'import_overwrite_label' => 'Overskriv eksisterende filer',
|
||||||
|
'import_overwrite_comment' => 'Fjern kryss for å kun importere nye filer',
|
||||||
|
'import_folders_label' => 'Mapper',
|
||||||
|
'import_folders_comment' => 'Vennligst velg mappene du vil importere',
|
||||||
|
'export_button' => 'Eksportér',
|
||||||
|
'export_title' => 'Eksportér tema',
|
||||||
|
'export_folders_label' => 'Mapper',
|
||||||
|
'export_folders_comment' => 'Vennligst velg mappene du vil eksportere',
|
||||||
|
'delete_button' => 'Slett',
|
||||||
|
'delete_confirm' => 'Vil du virkelig slette dette temaet? Handlingen kan ikke angres!',
|
||||||
|
'delete_active_theme_failed' => 'Kan ikke slette det aktive temaet. Gjør et annet tema aktivt først.',
|
||||||
|
'delete_theme_success' => 'Temaet har blitt slettet!',
|
||||||
|
'create_title' => 'Opprett tema',
|
||||||
|
'create_button' => 'Opprett',
|
||||||
|
'create_new_blank_theme' => 'Lag et nytt blankt tema',
|
||||||
|
'create_theme_success' => 'Temaet har blitt opprettet!',
|
||||||
|
'create_theme_required_name' => 'Vennligst gi temaet et navn.',
|
||||||
|
'new_directory_name_label' => 'Temamappe',
|
||||||
|
'new_directory_name_comment' => 'Oppgi en ny mappe for det dupliserte temaet.',
|
||||||
|
'dir_name_invalid' => 'Navnet kan kun inneholde tall, latinske bokstaver og følgende symbol: _-',
|
||||||
|
'dir_name_taken' => 'Temamappen eksiterer allerede.',
|
||||||
|
'find_more_themes' => 'Finn flere temaer på OctoberCMS Theme Marketplace',
|
||||||
|
'return' => 'Tilbake til temaliste',
|
||||||
|
],
|
||||||
|
'maintenance' => [
|
||||||
|
'settings_menu' => 'Vedlikeholdsmodus',
|
||||||
|
'settings_menu_description' => 'Konfigurer vedlikeholdsmodussiden og endre innstillinger.',
|
||||||
|
'is_enabled' => 'Aktivér vedlikeholdsmodus',
|
||||||
|
'is_enabled_comment' => 'Når aktivert, vil besøkende se følgende side:'
|
||||||
|
],
|
||||||
|
'page' => [
|
||||||
|
'not_found_name' => "Siden ':name' ble ikke funnet",
|
||||||
|
'not_found' => [
|
||||||
|
'label' => 'Side ikke funnet',
|
||||||
|
'help' => 'Den forespurte siden ble ikke funnet.'
|
||||||
|
],
|
||||||
|
'custom_error' => [
|
||||||
|
'label' => 'Side-feil',
|
||||||
|
'help' => "Noe gikk galt. Siden kan ikke vises."
|
||||||
|
],
|
||||||
|
'menu_label' => 'Sider',
|
||||||
|
'unsaved_label' => 'Ulagrede sider',
|
||||||
|
'no_list_records' => 'Ingen sider funnet',
|
||||||
|
'new' => 'Ny side',
|
||||||
|
'invalid_url' => 'Ugyldig URL-format. URL-en skal starte med skråstrek og kan inneholde tall, latinske bokstaver og følgende symbol: ._-[]:?|/+*^$',
|
||||||
|
'delete_confirm_multiple' => 'Vil du virkelig slette valgte sider?',
|
||||||
|
'delete_confirm_single' => 'Vil du virkelig slette denne siden?',
|
||||||
|
'no_layout' => '-- ingen layout --'
|
||||||
|
],
|
||||||
|
'layout' => [
|
||||||
|
'not_found_name' => "Layouten ':name' ble ikke funnet",
|
||||||
|
'menu_label' => 'Layouts',
|
||||||
|
'unsaved_label' => 'Ulagrede layouts',
|
||||||
|
'no_list_records' => 'Ingen layouts funnet',
|
||||||
|
'new' => 'Ny layout',
|
||||||
|
'delete_confirm_multiple' => 'Vil du virkelig slette valgte layouts?',
|
||||||
|
'delete_confirm_single' => 'Vil du virkelig slette denne layout?'
|
||||||
|
],
|
||||||
|
'partial' => [
|
||||||
|
'not_found_name' => "Partial ':name' ble ikke funnet.",
|
||||||
|
'invalid_name' => 'Ugyldig partial navn: :name.',
|
||||||
|
'menu_label' => 'Partials',
|
||||||
|
'unsaved_label' => 'Ulagrede partials',
|
||||||
|
'no_list_records' => 'Ingen partials funnet',
|
||||||
|
'delete_confirm_multiple' => 'Vil du virkelig slette valgte partials?',
|
||||||
|
'delete_confirm_single' => 'Vil du virkelig slette denne partialen?',
|
||||||
|
'new' => 'Ny partial'
|
||||||
|
],
|
||||||
|
'content' => [
|
||||||
|
'not_found_name' => "Innholdsfilen ':name' ble ikke funnet.",
|
||||||
|
'menu_label' => 'Innhold',
|
||||||
|
'unsaved_label' => 'Ulagret innhold',
|
||||||
|
'no_list_records' => 'No content files found',
|
||||||
|
'delete_confirm_multiple' => 'Vil du virkelig slette valgte innholdsfiler eller -mapper?',
|
||||||
|
'delete_confirm_single' => 'Vil du virkelig slette denne innholdsfilen eller -mappen?',
|
||||||
|
'new' => 'Ny innholdsfil'
|
||||||
|
],
|
||||||
|
'ajax_handler' => [
|
||||||
|
'invalid_name' => 'Ugyldig AJAX handler navn: :name.',
|
||||||
|
'not_found' => "AJAX handler ':name' ble ikke funnet."
|
||||||
|
],
|
||||||
|
'cms' => [
|
||||||
|
'menu_label' => 'CMS'
|
||||||
|
],
|
||||||
|
'sidebar' => [
|
||||||
|
'add' => 'Legg til',
|
||||||
|
'search' => 'Søk...'
|
||||||
|
],
|
||||||
|
'editor' => [
|
||||||
|
'settings' => 'Innstillinger',
|
||||||
|
'title' => 'Tittel',
|
||||||
|
'new_title' => 'Ny side tittel',
|
||||||
|
'url' => 'URL',
|
||||||
|
'filename' => 'Filnavn',
|
||||||
|
'layout' => 'Layout',
|
||||||
|
'description' => 'Beskrivelse',
|
||||||
|
'preview' => 'Forhåndsvis',
|
||||||
|
'meta' => 'Meta',
|
||||||
|
'meta_title' => 'Meta-tittel',
|
||||||
|
'meta_description' => 'Meta-beskrivelse',
|
||||||
|
'markup' => 'Markup',
|
||||||
|
'code' => 'Kode',
|
||||||
|
'content' => 'Innhold',
|
||||||
|
'hidden' => 'Skjult',
|
||||||
|
'hidden_comment' => 'Kun backend-brukere har tilgang til skjulte sider.',
|
||||||
|
'enter_fullscreen' => 'Fullskjermmodus',
|
||||||
|
'exit_fullscreen' => 'Avslutt fullskjermmodus'
|
||||||
|
],
|
||||||
|
'asset' => [
|
||||||
|
'menu_label' => 'Ressurser',
|
||||||
|
'unsaved_label' => 'Ulagrede ressurser',
|
||||||
|
'drop_down_add_title' => 'Legg til...',
|
||||||
|
'drop_down_operation_title' => 'Handling...',
|
||||||
|
'upload_files' => 'Last opp fil(er)',
|
||||||
|
'create_file' => 'Opprett fil',
|
||||||
|
'create_directory' => 'Opprett mappe',
|
||||||
|
'directory_popup_title' => 'Ny mappe',
|
||||||
|
'directory_name' => 'Mappenavn',
|
||||||
|
'rename' => 'Nytt navn',
|
||||||
|
'delete' => 'Slett',
|
||||||
|
'move' => 'Flytt',
|
||||||
|
'select' => 'Velg',
|
||||||
|
'new' => 'Ny fil',
|
||||||
|
'rename_popup_title' => 'Nytt navn',
|
||||||
|
'rename_new_name' => 'Nytt navn',
|
||||||
|
'invalid_path' => 'Mappestien kan kun inneholde tall, latinske bokstaver, mellomrom og følgende symbol: ._-/',
|
||||||
|
'error_deleting_file' => 'Kunne ikke slette :name.',
|
||||||
|
'error_deleting_dir_not_empty' => 'Kunne ikke slette :name. Mappen er ikke tom.',
|
||||||
|
'error_deleting_dir' => 'Kunne ikke slette :name.',
|
||||||
|
'invalid_name' => 'Navnet kan kun inneholde tall, latinske bokstaver, mellomrom og følgende symbol: ._-',
|
||||||
|
'original_not_found' => 'Original fil eller mappe ikke funnet',
|
||||||
|
'already_exists' => 'Fil eller mappe med samme navn eksiterer allerede',
|
||||||
|
'error_renaming' => 'Kunne ikke gi filen eller mappen nytt navn',
|
||||||
|
'name_cant_be_empty' => 'Navnet kan ikke være tomt',
|
||||||
|
'too_large' => 'Opplastet fil er for stor. Maksimum filstørrelse er :max_size',
|
||||||
|
'type_not_allowed' => 'Kun følgende filtyper er tillat: :allowed_types',
|
||||||
|
'file_not_valid' => 'Filen er ugyldig',
|
||||||
|
'error_uploading_file' => "Kunne ikke laste opp filen ':name': :error",
|
||||||
|
'move_please_select' => 'velg',
|
||||||
|
'move_destination' => 'Målmappe',
|
||||||
|
'move_popup_title' => 'Flytt ressurser',
|
||||||
|
'move_button' => 'Flytt',
|
||||||
|
'selected_files_not_found' => 'Valgte filer ikke funnet',
|
||||||
|
'select_destination_dir' => 'Vennligst velg en målmappe',
|
||||||
|
'destination_not_found' => 'Målmappe ikke funnet',
|
||||||
|
'error_moving_file' => 'Kunne ikke flytte filen :file',
|
||||||
|
'error_moving_directory' => 'Kunne ikke flytte mappen :dir',
|
||||||
|
'error_deleting_directory' => 'Kunne ikke slette original mappe :dir',
|
||||||
|
'path' => 'Mål'
|
||||||
|
],
|
||||||
|
'component' => [
|
||||||
|
'menu_label' => 'Komponenter',
|
||||||
|
'unnamed' => 'Navnløs',
|
||||||
|
'no_description' => 'Ingen beskrivelse spesifisert',
|
||||||
|
'alias' => 'Alias',
|
||||||
|
'alias_description' => 'Et unikt navn gitt til komponenten for å benytte den i sider og layouts.',
|
||||||
|
'validation_message' => 'Komponentaliaser kan kun inneholde latinske symboler, tall og understreker. Aliaser skal starte med et latinsk symbol.',
|
||||||
|
'invalid_request' => 'Templaten kan ikke lagres på grunn av ugyldig komponentdata.',
|
||||||
|
'no_records' => 'Ingen komponenter funnet',
|
||||||
|
'not_found' => "Komponenten ':name' ble ikke funnet.",
|
||||||
|
'method_not_found' => "Komponenten ':name' inneholder ikke en metode ':method'."
|
||||||
|
],
|
||||||
|
'template' => [
|
||||||
|
'invalid_type' => 'Ukjent template-type.',
|
||||||
|
'not_found' => 'Forespurt template ikke funnet.',
|
||||||
|
'saved' => 'Templaten har blitt lagret.'
|
||||||
|
],
|
||||||
|
'permissions' => [
|
||||||
|
'name' => 'Cms',
|
||||||
|
'manage_content' => 'Håndter innholdsfiler',
|
||||||
|
'manage_assets' => 'Håndter ressurser',
|
||||||
|
'manage_pages' => 'Håndter sider',
|
||||||
|
'manage_layouts' => 'Håndter layouts',
|
||||||
|
'manage_partials' => 'Håndter partials',
|
||||||
|
'manage_themes' => 'Håndter maler'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
@ -2,84 +2,144 @@
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'cms_object' => [
|
'cms_object' => [
|
||||||
'invalid_file' => 'Nome de arquivo inválido: :name. Os nomes de arquivos podem conter apenas símbolos alfa-numéricos, sublinhados, traços e pontos. Veja alguns exemplos de nomes de arquivos corretos: page.htm, página subdiretório/página',
|
'invalid_file' => 'Nome de arquivo inválido: ":name". Os nomes de arquivos podem conter apenas letras, números, sublinhados, traços e pontos. Veja alguns exemplos de nomes de arquivos corretos: pagina.htm, pagina, subdiretorio/pagina',
|
||||||
'invalid_property' => 'A propriedade ":nome" não pode ser definida',
|
'invalid_property' => 'A propriedade ":nome" não pode ser definida',
|
||||||
'file_already_exists' => 'Arquivo ":name" já existe.',
|
'file_already_exists' => 'Arquivo ":name" já existe.',
|
||||||
'error_saving' => 'Erro ao salvar arquivo ":name".',
|
'error_saving' => 'Erro ao salvar arquivo ":name". Verifique as permissões de escrita.',
|
||||||
'error_creating_directory' => 'Erro ao criar o diretório :name',
|
'error_creating_directory' => 'Erro ao criar o diretório :name. Verifique as permissões de escrita.',
|
||||||
'invalid_file_extension'=>'Extenção de arquivo inválido: :invalid. Extenções válidas: :allowed.',
|
'invalid_file_extension'=>'Extensão de arquivo inválida: :invalid. Extensões válidas: :allowed.',
|
||||||
'error_deleting' => 'Erro ao excluir o arquivo de modelo ":name".',
|
'error_deleting' => 'Erro ao excluir o arquivo de template ":name". Verifique as permissões de escrita.',
|
||||||
'delete_success' => 'Modelos apagados com sucesso: :count.',
|
'delete_success' => 'Templates apagados com sucesso: :count.',
|
||||||
'file_name_required' => 'O campo Nome do Arquivo é necessária.'
|
'file_name_required' => 'O campo de Nome do Arquivo é necessário.',
|
||||||
],
|
],
|
||||||
'theme' => [
|
'theme' => [
|
||||||
|
'not_found_name' => 'O tema ":name" não foi encontrado.',
|
||||||
'active' => [
|
'active' => [
|
||||||
'not_set' => "O tema ativo não foi definido.",
|
'not_set' => 'O tema ativo não foi definido.',
|
||||||
'not_found' => "O tema ativo não foi encontrado.",
|
'not_found' => 'O tema ativo não foi encontrado.',
|
||||||
],
|
],
|
||||||
'edit' => [
|
'edit' => [
|
||||||
'not_set' => "O tema de edição não foi definido.",
|
'not_set' => 'O tema de edição não foi definido.',
|
||||||
'not_found' => "O tema de edição não foi encontrado.",
|
'not_found' => 'O tema de edição não foi encontrado.',
|
||||||
'not_match' => "O objeto que você está tentando acessar não pertence ao tema que está sendo editado. Por favor, recarregue a página."
|
'not_match' => 'O objeto que você está tentando acessar não pertence ao tema que está sendo editado. Por favor, recarregue a página.',
|
||||||
],
|
],
|
||||||
'settings_menu' => 'Temas',
|
'settings_menu' => 'Temas',
|
||||||
'settings_menu_description' => 'Veja a lista de temas instalados.',
|
'settings_menu_description' => 'Veja a lista de temas instalados e selecione o tema ativo.',
|
||||||
'find_more_themes' => 'Encontrar mais temas.',
|
'name_label' => 'Nome',
|
||||||
|
'name_create_placeholder' => 'Nome do novo tema',
|
||||||
|
'author_label' => 'Autor',
|
||||||
|
'author_placeholder' => 'Nome do autor',
|
||||||
|
'description_label' => 'Descrição',
|
||||||
|
'description_placeholder' => 'Descrição do tema',
|
||||||
|
'homepage_label' => 'Site',
|
||||||
|
'homepage_placeholder' => 'URL do site',
|
||||||
|
'code_label' => 'Código',
|
||||||
|
'code_placeholder' => 'Um código exclusivo para esse tema a ser usado para distribuição',
|
||||||
|
'dir_name_label' => 'Nome do diretório',
|
||||||
|
'dir_name_create_label' => 'O diretório-alvo de temas',
|
||||||
|
'theme_label' => 'Tema',
|
||||||
'activate_button' => 'Ativar',
|
'activate_button' => 'Ativar',
|
||||||
'active_button' => 'Ativar',
|
'active_button' => 'Ativado',
|
||||||
|
'customize_button' => 'Customizar',
|
||||||
|
'duplicate_button' => 'Duplicar',
|
||||||
|
'duplicate_title' => 'Duplicar tema',
|
||||||
|
'duplicate_theme_success' => 'Tema duplicado com sucesso!',
|
||||||
|
'manage_button' => 'Gerenciar',
|
||||||
|
'manage_title' => 'Gerenciar tema',
|
||||||
|
'edit_properties_title' => 'Tema',
|
||||||
|
'edit_properties_button' => 'Editar propriedades',
|
||||||
|
'save_properties' => 'Salvar propriedades',
|
||||||
|
'import_button' => 'Importar',
|
||||||
|
'import_title' => 'Importar tema',
|
||||||
|
'import_theme_success' => 'Tema importado com sucesso!',
|
||||||
|
'import_uploaded_file' => 'Arquivo de tema',
|
||||||
|
'import_overwrite_label' => 'Sobrescrever arquivos existentes',
|
||||||
|
'import_overwrite_comment' => 'Desmarque para importar apenas arquivos novos',
|
||||||
|
'import_folders_label' => 'Pastas',
|
||||||
|
'import_folders_comment' => 'Por favor selecione as pastas de temas que deseja importar',
|
||||||
|
'export_button' => 'Exportar',
|
||||||
|
'export_title' => 'Exportar tema',
|
||||||
|
'export_folders_label' => 'Pastas',
|
||||||
|
'export_folders_comment' => 'Por favor selecione as pastas de temas que deseja exportar',
|
||||||
|
'delete_button' => 'Deletar',
|
||||||
|
'delete_confirm' => 'Tem certeza que deseja deletar este tema? Isto não pode ser revertido!',
|
||||||
|
'delete_active_theme_failed' => 'Não é possível deletar o tema ativo, torne outro tema ativo antes.',
|
||||||
|
'delete_theme_success' => 'Tema deletado com sucesso!',
|
||||||
|
'create_title' => 'Criar tema',
|
||||||
|
'create_button' => 'Criar',
|
||||||
|
'create_new_blank_theme' => 'Criar novo tema em branco',
|
||||||
|
'create_theme_success' => 'Tema criado com sucesso!',
|
||||||
|
'create_theme_required_name' => 'Por favor forneça um nome para o tema.',
|
||||||
|
'new_directory_name_label' => 'Diretório do tema',
|
||||||
|
'new_directory_name_comment' => 'Forneça um novo nome de diretório para o tema duplicado.',
|
||||||
|
'dir_name_invalid' => 'O nome só pode conter letras, números, e os símbolos: _-',
|
||||||
|
'dir_name_taken' => 'Diretório de tema escolhido já existe.',
|
||||||
|
'find_more_themes' => 'Encontrar mais temas.',
|
||||||
|
'return' => 'Retornar à lista de temas',
|
||||||
|
],
|
||||||
|
'maintenance' => [
|
||||||
|
'settings_menu' => 'Modo de manutenção',
|
||||||
|
'settings_menu_description' => 'Configurar modo de manutenção e a página exibida.',
|
||||||
|
'is_enabled' => 'Ativar modo de manutenção',
|
||||||
|
'is_enabled_comment' => 'Quando ativado visitantes do site vão ver a página selecionada.',
|
||||||
],
|
],
|
||||||
'page' => [
|
'page' => [
|
||||||
|
'not_found_name' => 'A página ":name" não foi encontrada',
|
||||||
'not_found' => [
|
'not_found' => [
|
||||||
'label' => "Página não encontrada",
|
'label' => 'Página não encontrada',
|
||||||
'help' => "A página solicitada não pode ser encontrada.",
|
'help' => 'A página solicitada não pode ser encontrada.',
|
||||||
],
|
],
|
||||||
'custom_error' => [
|
'custom_error' => [
|
||||||
'label' => "Erro na página",
|
'label' => 'Erro na página',
|
||||||
'help' => "Lamentamos, mas algo deu errado e que a página não pode ser exibida.",
|
'help' => 'Lamentamos, mas algo deu errado e que a página não pode ser exibida.',
|
||||||
],
|
],
|
||||||
'menu_label' => 'Páginas',
|
'menu_label' => 'Páginas',
|
||||||
'no_list_records' => 'Nenhuma página foi encontradas',
|
'unsaved_label' => 'Página(s) não salva(s)',
|
||||||
|
'no_list_records' => 'Nenhuma página encontrada',
|
||||||
'new' => 'Nova página',
|
'new' => 'Nova página',
|
||||||
'invalid_url' => 'Formato de URL inválido. O URL deve começar com o símbolo de barra e pode conter dígitos, letras latinas e os seguintes símbolos: _-[]:?|/+*^$',
|
'invalid_url' => 'Formato de URL inválido. A URL deve começar com uma barra e pode conter letras, números e os símbolos: _-[]:?|/+*^$',
|
||||||
'delete_confirm_multiple' => 'Você realmente quer excluir as páginas selecionadas?',
|
'delete_confirm_multiple' => 'Você realmente deseja excluir as páginas selecionadas?',
|
||||||
'delete_confirm_single' => 'Você realmente quer excluir esta página?',
|
'delete_confirm_single' => 'Você realmente deseja excluir esta página?',
|
||||||
'no_layout' => '-- sem layout --'
|
'no_layout' => '-- sem layout --',
|
||||||
],
|
],
|
||||||
'layout' => [
|
'layout' => [
|
||||||
'not_found_name' => "O layout ':name' não foi encontrado",
|
'not_found_name' => 'O layout ":name" não foi encontrado',
|
||||||
'menu_label' => 'Layouts',
|
'menu_label' => 'Layouts',
|
||||||
'no_list_records' => 'Nenhum layout foi encontrado',
|
'unsaved_label' => 'Layout(s) não salvo(s)',
|
||||||
|
'no_list_records' => 'Nenhum layout encontrado',
|
||||||
'new' => 'Novo layout',
|
'new' => 'Novo layout',
|
||||||
'delete_confirm_multiple' => 'Você realmente deseja excluir os layouts selecionados?',
|
'delete_confirm_multiple' => 'Você realmente deseja excluir os layouts selecionados?',
|
||||||
'delete_confirm_single' => 'Você realmente quer excluir este layout?'
|
'delete_confirm_single' => 'Você realmente deseja excluir este layout?',
|
||||||
],
|
],
|
||||||
'partial' => [
|
'partial' => [
|
||||||
'not_found_name' => "O bloco ':name' não foi encontrado.",
|
'not_found_name' => 'O bloco ":name" não foi encontrado.',
|
||||||
'invalid_name' => "Nome bloco inválido: :name.",
|
'invalid_name' => 'Nome de bloco inválido: :name.',
|
||||||
'menu_label' => 'Blocos',
|
'menu_label' => 'Blocos',
|
||||||
'no_list_records' => 'Nenhum bloco foi encontrado',
|
'unsaved_label' => 'Bloco(s) não salvo(s)',
|
||||||
'delete_confirm_multiple' => 'Você realmente quer apagar os blocos selecionados?',
|
'no_list_records' => 'Nenhum bloco encontrado',
|
||||||
'delete_confirm_single' => 'Você realmente quer apagar este bloco?',
|
'delete_confirm_multiple' => 'Você realmente deseja apagar os blocos selecionados?',
|
||||||
'new' => 'Novo bloco'
|
'delete_confirm_single' => 'Você realmente deseja apagar este bloco?',
|
||||||
|
'new' => 'Novo bloco',
|
||||||
],
|
],
|
||||||
'content' => [
|
'content' => [
|
||||||
'not_found_name' => "O arquivo de conteúdo ':name' não foi encontrado.",
|
'not_found_name' => 'O arquivo de conteúdo ":name" não foi encontrado.',
|
||||||
'menu_label' => 'Conteúdo',
|
'menu_label' => 'Conteúdo',
|
||||||
'no_list_records' => 'Nenhum arquivo de conteúdo foi encontrado',
|
'unsaved_label' => 'Conteúdo não salvo',
|
||||||
'delete_confirm_multiple' => 'Você realmente quer apagar arquivos de conteúdo selecionados ou diretórios?',
|
'no_list_records' => 'Nenhum arquivo de conteúdo encontrado',
|
||||||
'delete_confirm_single' => 'Você realmente quer apagar este arquivo de conteúdo?',
|
'delete_confirm_multiple' => 'Você realmente deseja apagar arquivos ou diretórios de conteúdo selecionados?',
|
||||||
'new' => 'Novo arquivo de conteúdo'
|
'delete_confirm_single' => 'Você realmente deseja apagar este arquivo de conteúdo?',
|
||||||
|
'new' => 'Novo arquivo de conteúdo',
|
||||||
],
|
],
|
||||||
'ajax_handler' => [
|
'ajax_handler' => [
|
||||||
'invalid_name' => "O nome do Manipulador AJAX é inválido: :name.",
|
'invalid_name' => 'O nome do manipulador AJAX é inválido: :name.',
|
||||||
'not_found' => "Manipulador AJAX ':name' não foi encontrado.",
|
'not_found' => 'Manipulador AJAX ":name" não encontrado.',
|
||||||
],
|
],
|
||||||
'cms' => [
|
'cms' => [
|
||||||
'menu_label' => "Design"
|
'menu_label' => 'CMS',
|
||||||
],
|
],
|
||||||
'sidebar' => [
|
'sidebar' => [
|
||||||
'add' => 'Adicionar',
|
'add' => 'Adicionar',
|
||||||
'search' => 'Buscar...'
|
'search' => 'Buscar...',
|
||||||
],
|
],
|
||||||
'editor' => [
|
'editor' => [
|
||||||
'settings' => 'Configurações',
|
'settings' => 'Configurações',
|
||||||
|
|
@ -89,7 +149,7 @@ return [
|
||||||
'filename' => 'Nome do Arquivo',
|
'filename' => 'Nome do Arquivo',
|
||||||
'layout' => 'Layout',
|
'layout' => 'Layout',
|
||||||
'description' => 'Descrição',
|
'description' => 'Descrição',
|
||||||
'preview' => 'Pré-visualização',
|
'preview' => 'Visualizar',
|
||||||
'meta' => 'Meta',
|
'meta' => 'Meta',
|
||||||
'meta_title' => 'Meta Título',
|
'meta_title' => 'Meta Título',
|
||||||
'meta_description' => 'Meta Descrição',
|
'meta_description' => 'Meta Descrição',
|
||||||
|
|
@ -99,10 +159,11 @@ return [
|
||||||
'hidden' => 'Oculta',
|
'hidden' => 'Oculta',
|
||||||
'hidden_comment' => 'Páginas ocultas são acessíveis somente para administradores.',
|
'hidden_comment' => 'Páginas ocultas são acessíveis somente para administradores.',
|
||||||
'enter_fullscreen' => 'Entrar no modo de tela cheia',
|
'enter_fullscreen' => 'Entrar no modo de tela cheia',
|
||||||
'exit_fullscreen' => 'Sair do modo de tela cheia'
|
'exit_fullscreen' => 'Sair do modo de tela cheia',
|
||||||
],
|
],
|
||||||
'asset' => [
|
'asset' => [
|
||||||
'menu_label' => "Arquivos",
|
'menu_label' => 'Arquivos',
|
||||||
|
'unsaved_label' => 'Arquivo(s) não salvo(s)',
|
||||||
'drop_down_add_title' => 'Adicionar...',
|
'drop_down_add_title' => 'Adicionar...',
|
||||||
'drop_down_operation_title' => 'Ação...',
|
'drop_down_operation_title' => 'Ação...',
|
||||||
'upload_files' => 'Enviar arquivo(s)',
|
'upload_files' => 'Enviar arquivo(s)',
|
||||||
|
|
@ -117,54 +178,55 @@ return [
|
||||||
'new' => 'Novo arquivo',
|
'new' => 'Novo arquivo',
|
||||||
'rename_popup_title' => 'Renomear',
|
'rename_popup_title' => 'Renomear',
|
||||||
'rename_new_name' => 'Novo nome',
|
'rename_new_name' => 'Novo nome',
|
||||||
'invalid_path' => 'O caminho pode conter apenas dígitos, letras latinas, espaços e os seguintes símbolos: ._-/',
|
'invalid_path' => 'O caminho pode conter apenas letras, números, espaços e os símbolos: ._-/',
|
||||||
'error_deleting_file' => 'Erro ao excluir arquivo :name.',
|
'error_deleting_file' => 'Erro ao excluir arquivo :name.',
|
||||||
'error_deleting_dir_not_empty' => 'Erro ao excluir diretório :name. O diretório não está vazio.',
|
'error_deleting_dir_not_empty' => 'Erro ao excluir diretório :name. O diretório não está vazio.',
|
||||||
'error_deleting_dir' => 'Erro ao excluir diretório :name.',
|
'error_deleting_dir' => 'Erro ao excluir diretório :name.',
|
||||||
'invalid_name' => 'O nome pode conter apenas dígitos, letras latinas, espaços e os seguintes símbolos: ._-',
|
'invalid_name' => 'O nome pode conter apenas letras, números, espaços e os símbolos: ._-',
|
||||||
'original_not_found' => 'O arquivo original ou diretório não foi encontrado',
|
'original_not_found' => 'Arquivo ou diretório original não encontrado',
|
||||||
'already_exists' => 'Arquivo ou diretório com este nome já existe',
|
'already_exists' => 'Um arquivo ou diretório com este nome já existe',
|
||||||
'error_renaming' => 'Erro ao renomear o arquivo ou diretório',
|
'error_renaming' => 'Erro ao renomear o arquivo ou diretório',
|
||||||
'name_cant_be_empty' => 'O nome não pode ser vazio',
|
'name_cant_be_empty' => 'O nome não pode estar vazio',
|
||||||
'too_large' => 'O arquivo enviado é muito grande. O tamanho máximo de envio permitido é :max_size',
|
'too_large' => 'O arquivo enviado é muito grande. O tamanho máximo permitido é :max_size',
|
||||||
'type_not_allowed' => 'Apenas os seguintes tipos de arquivos são permitidos: :allowed_types',
|
'type_not_allowed' => 'Apenas os seguintes tipos de arquivos são permitidos: :allowed_types',
|
||||||
'file_not_valid' => 'O arquivo não é válido',
|
'file_not_valid' => 'O arquivo não é válido',
|
||||||
'error_uploading_file' => 'Erro ao enviar arquivo ":name": :error',
|
'error_uploading_file' => 'Error uploading file ":name": :error',
|
||||||
'move_please_select' => 'por favor, selecione',
|
'move_please_select' => 'por favor selecione',
|
||||||
'move_destination' => 'Diretório de destino',
|
'move_destination' => 'Diretório de destino',
|
||||||
'move_popup_title' => 'Mover arquivo',
|
'move_popup_title' => 'Mover arquivos',
|
||||||
'move_button' => 'Mover',
|
'move_button' => 'Mover',
|
||||||
'selected_files_not_found' => 'Os arquivos selecionados não foram encontrados',
|
'selected_files_not_found' => 'Arquivos selecionados não encontrados',
|
||||||
'select_destination_dir' => 'Por favor, selecione um diretório de destino',
|
'select_destination_dir' => 'Por favor, selecione um diretório de destino',
|
||||||
'destination_not_found' => 'Diretório de destino não foi encontrado',
|
'destination_not_found' => 'Diretório de destino não encontrado',
|
||||||
'error_moving_file' => 'Erro ao mover arquivo :file',
|
'error_moving_file' => 'Erro ao mover arquivo :file',
|
||||||
'error_moving_directory' => 'Erro ao mover diretório :dir',
|
'error_moving_directory' => 'Erro ao mover diretório :dir',
|
||||||
'error_deleting_directory' => 'Erro ao excluir o diretório :dir',
|
'error_deleting_directory' => 'Erro ao excluir o diretório original :dir',
|
||||||
'path' => 'Caminho'
|
'path' => 'Caminho',
|
||||||
],
|
],
|
||||||
'component' => [
|
'component' => [
|
||||||
'menu_label' => "Componentes",
|
'menu_label' => 'Componentes',
|
||||||
'unnamed' => "Não nomeado",
|
'unnamed' => 'Sem nome',
|
||||||
'no_description' => "Sem descrição fornecida",
|
'no_description' => 'Nenhuma descrição fornecida',
|
||||||
'alias' => "Pseudônimo",
|
'alias' => 'Alias',
|
||||||
'alias_description' => "Um nome exclusivo dado a este componente quando usá-lo na página ou layout de código.",
|
'alias_description' => 'Um nome exclusivo dado a este componente quando usá-lo no código de uma página ou layout.',
|
||||||
'validation_message' => "Aliases de componentes são necessários e podem conter apenas símbolos latinos, dígitos e sublinhados. Os aliases deve começar com um símbolo Latina.",
|
'validation_message' => 'Aliases de componentes são necessários e podem conter letras, números e sublinhados. Os aliases deve começar com uma letra.',
|
||||||
'invalid_request' => "O modelo não pode ser salvo por causa de dados de componentes inválidos.",
|
'invalid_request' => 'O template não pode ser salvo devido a dados inválidos nos componentes.',
|
||||||
'no_records' => 'Nenhum dos componentes foi encontrado',
|
'no_records' => 'Nenhum componente encontrado',
|
||||||
'not_found' => "O componente ':name' não foi encontrado.",
|
'not_found' => 'O componente ":name" não foi encontrado.',
|
||||||
'method_not_found' => "o componente ':name' não contém um método ':method'.",
|
'method_not_found' => 'O componente ":name" não tem um método ":method".',
|
||||||
],
|
],
|
||||||
'template' => [
|
'template' => [
|
||||||
'invalid_type' => "Tipo de modelo desconhecido.",
|
'invalid_type' => 'Tipo de template desconhecido.',
|
||||||
'not_found' => "O modelo solicitado não foi encontrado.",
|
'not_found' => 'O template solicitado não foi encontrado.',
|
||||||
'saved'=> "O modelo foi salvo com sucesso."
|
'saved'=> 'O modelo foi salvo com sucesso.',
|
||||||
],
|
],
|
||||||
'permissions' => [
|
'permissions' => [
|
||||||
|
'name' => 'Cms',
|
||||||
'manage_content' => 'Gerenciar conteúdo',
|
'manage_content' => 'Gerenciar conteúdo',
|
||||||
'manage_assets' => 'Gerenciar arquivos',
|
'manage_assets' => 'Gerenciar arquivos',
|
||||||
'manage_pages' => 'Gerenciar páginas',
|
'manage_pages' => 'Gerenciar páginas',
|
||||||
'manage_layouts' => 'Gerenciar layouts',
|
'manage_layouts' => 'Gerenciar layouts',
|
||||||
'manage_partials' => 'Gerenciar blocos',
|
'manage_partials' => 'Gerenciar blocos',
|
||||||
'manage_themes' => 'Gerenciar temas'
|
'manage_themes' => 'Gerenciar temas',
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?= Form::open([
|
<?= Form::open([
|
||||||
'data-request'=>$this->getEventHandler('onMove'),
|
'data-request'=>$this->getEventHandler('onMove'),
|
||||||
'data-request-success'=>"\$el.trigger('close.oc.popup')",
|
'data-request-success'=>"\$(this).trigger('close.oc.popup')",
|
||||||
'data-stripe-load-indicator'=>1,
|
'data-stripe-load-indicator'=>1,
|
||||||
'id'=>'asset-move-popup-form'
|
'id'=>'asset-move-popup-form'
|
||||||
]) ?>
|
]) ?>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?= Form::open([
|
<?= Form::open([
|
||||||
'data-request'=>$this->getEventHandler('onNewDirectory'),
|
'data-request'=>$this->getEventHandler('onNewDirectory'),
|
||||||
'data-request-success'=>"\$el.trigger('close.oc.popup')",
|
'data-request-success'=>"\$(this).trigger('close.oc.popup')",
|
||||||
'data-stripe-load-indicator'=>1,
|
'data-stripe-load-indicator'=>1,
|
||||||
'id'=>'asset-new-dir-popup-form'
|
'id'=>'asset-new-dir-popup-form'
|
||||||
]) ?>
|
]) ?>
|
||||||
|
|
|
||||||
|
|
@ -238,15 +238,6 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
*/
|
*/
|
||||||
SettingsManager::instance()->registerCallback(function ($manager) {
|
SettingsManager::instance()->registerCallback(function ($manager) {
|
||||||
$manager->registerSettingItems('October.System', [
|
$manager->registerSettingItems('October.System', [
|
||||||
'administrators' => [
|
|
||||||
'label' => 'backend::lang.user.menu_label',
|
|
||||||
'description' => 'backend::lang.user.menu_description',
|
|
||||||
'category' => SettingsManager::CATEGORY_SYSTEM,
|
|
||||||
'icon' => 'icon-users',
|
|
||||||
'url' => Backend::url('backend/users'),
|
|
||||||
'permissions' => ['backend.manage_users'],
|
|
||||||
'order' => 600
|
|
||||||
],
|
|
||||||
'updates' => [
|
'updates' => [
|
||||||
'label' => 'system::lang.updates.menu_label',
|
'label' => 'system::lang.updates.menu_label',
|
||||||
'description' => 'system::lang.updates.menu_description',
|
'description' => 'system::lang.updates.menu_description',
|
||||||
|
|
@ -254,25 +245,16 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'icon' => 'icon-cloud-download',
|
'icon' => 'icon-cloud-download',
|
||||||
'url' => Backend::url('system/updates'),
|
'url' => Backend::url('system/updates'),
|
||||||
'permissions' => ['system.manage_updates'],
|
'permissions' => ['system.manage_updates'],
|
||||||
'order' => 700
|
'order' => 300
|
||||||
],
|
],
|
||||||
'event_logs' => [
|
'administrators' => [
|
||||||
'label' => 'system::lang.event_log.menu_label',
|
'label' => 'backend::lang.user.menu_label',
|
||||||
'description' => 'system::lang.event_log.menu_description',
|
'description' => 'backend::lang.user.menu_description',
|
||||||
'category' => SettingsManager::CATEGORY_LOGS,
|
'category' => SettingsManager::CATEGORY_SYSTEM,
|
||||||
'icon' => 'icon-exclamation-triangle',
|
'icon' => 'icon-users',
|
||||||
'url' => Backend::url('system/eventlogs'),
|
'url' => Backend::url('backend/users'),
|
||||||
'permissions' => ['system.access_logs'],
|
'permissions' => ['backend.manage_users'],
|
||||||
'order' => 800
|
'order' => 400
|
||||||
],
|
|
||||||
'request_logs' => [
|
|
||||||
'label' => 'system::lang.request_log.menu_label',
|
|
||||||
'description' => 'system::lang.request_log.menu_description',
|
|
||||||
'category' => SettingsManager::CATEGORY_LOGS,
|
|
||||||
'icon' => 'icon-file-o',
|
|
||||||
'url' => Backend::url('system/requestlogs'),
|
|
||||||
'permissions' => ['system.access_logs'],
|
|
||||||
'order' => 800
|
|
||||||
],
|
],
|
||||||
'mail_settings' => [
|
'mail_settings' => [
|
||||||
'label' => 'system::lang.mail.menu_label',
|
'label' => 'system::lang.mail.menu_label',
|
||||||
|
|
@ -281,7 +263,7 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'icon' => 'icon-envelope',
|
'icon' => 'icon-envelope',
|
||||||
'class' => 'System\Models\MailSettings',
|
'class' => 'System\Models\MailSettings',
|
||||||
'permissions' => ['system.manage_mail_settings'],
|
'permissions' => ['system.manage_mail_settings'],
|
||||||
'order' => 400
|
'order' => 600
|
||||||
],
|
],
|
||||||
'mail_templates' => [
|
'mail_templates' => [
|
||||||
'label' => 'system::lang.mail_templates.menu_label',
|
'label' => 'system::lang.mail_templates.menu_label',
|
||||||
|
|
@ -290,7 +272,25 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
'icon' => 'icon-envelope-square',
|
'icon' => 'icon-envelope-square',
|
||||||
'url' => Backend::url('system/mailtemplates'),
|
'url' => Backend::url('system/mailtemplates'),
|
||||||
'permissions' => ['system.manage_mail_templates'],
|
'permissions' => ['system.manage_mail_templates'],
|
||||||
'order' => 500
|
'order' => 610
|
||||||
|
],
|
||||||
|
'event_logs' => [
|
||||||
|
'label' => 'system::lang.event_log.menu_label',
|
||||||
|
'description' => 'system::lang.event_log.menu_description',
|
||||||
|
'category' => SettingsManager::CATEGORY_LOGS,
|
||||||
|
'icon' => 'icon-exclamation-triangle',
|
||||||
|
'url' => Backend::url('system/eventlogs'),
|
||||||
|
'permissions' => ['system.access_logs'],
|
||||||
|
'order' => 900
|
||||||
|
],
|
||||||
|
'request_logs' => [
|
||||||
|
'label' => 'system::lang.request_log.menu_label',
|
||||||
|
'description' => 'system::lang.request_log.menu_description',
|
||||||
|
'category' => SettingsManager::CATEGORY_LOGS,
|
||||||
|
'icon' => 'icon-file-o',
|
||||||
|
'url' => Backend::url('system/requestlogs'),
|
||||||
|
'permissions' => ['system.access_logs'],
|
||||||
|
'order' => 910
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
@ -309,6 +309,7 @@ class ServiceProvider extends ModuleServiceProvider
|
||||||
$this->registerConsoleCommand('october.down', 'System\Console\OctoberDown');
|
$this->registerConsoleCommand('october.down', 'System\Console\OctoberDown');
|
||||||
$this->registerConsoleCommand('october.update', 'System\Console\OctoberUpdate');
|
$this->registerConsoleCommand('october.update', 'System\Console\OctoberUpdate');
|
||||||
$this->registerConsoleCommand('october.util', 'System\Console\OctoberUtil');
|
$this->registerConsoleCommand('october.util', 'System\Console\OctoberUtil');
|
||||||
|
$this->registerConsoleCommand('october.mirror', 'System\Console\OctoberMirror');
|
||||||
$this->registerConsoleCommand('plugin.install', 'System\Console\PluginInstall');
|
$this->registerConsoleCommand('plugin.install', 'System\Console\PluginInstall');
|
||||||
$this->registerConsoleCommand('plugin.remove', 'System\Console\PluginRemove');
|
$this->registerConsoleCommand('plugin.remove', 'System\Console\PluginRemove');
|
||||||
$this->registerConsoleCommand('plugin.refresh', 'System\Console\PluginRefresh');
|
$this->registerConsoleCommand('plugin.refresh', 'System\Console\PluginRefresh');
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,6 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
/* clearfix */
|
|
||||||
}
|
|
||||||
.product-list li button,
|
|
||||||
.product-list li .image,
|
|
||||||
.product-list li .details {
|
|
||||||
-webkit-transition: opacity .2s linear;
|
|
||||||
-moz-transition: opacity .2s linear;
|
|
||||||
transition: opacity .2s linear;
|
|
||||||
}
|
}
|
||||||
.product-list li button {
|
.product-list li button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
@ -25,6 +17,13 @@
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
.product-list li button,
|
||||||
|
.product-list li .image,
|
||||||
|
.product-list li .details {
|
||||||
|
-webkit-transition: opacity .2s linear;
|
||||||
|
-moz-transition: opacity .2s linear;
|
||||||
|
transition: opacity .2s linear;
|
||||||
|
}
|
||||||
.product-list li:hover button {
|
.product-list li:hover button {
|
||||||
opacity: .3;
|
opacity: .3;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ if (window.jQuery === undefined)
|
||||||
* Halt here if beforeUpdate() or data-request-before-update returns false
|
* Halt here if beforeUpdate() or data-request-before-update returns false
|
||||||
*/
|
*/
|
||||||
if (this.options.beforeUpdate.apply(this, [data, textStatus, jqXHR]) === false) return
|
if (this.options.beforeUpdate.apply(this, [data, textStatus, jqXHR]) === false) return
|
||||||
if (options.evalBeforeUpdate && eval('(function($el, context, data, textStatus, jqXHR) {'+options.evalBeforeUpdate+'}($el, context, data, textStatus, jqXHR))') === false) return
|
if (options.evalBeforeUpdate && eval('(function($el, context, data, textStatus, jqXHR) {'+options.evalBeforeUpdate+'}.call($el.get(0), $el, context, data, textStatus, jqXHR))') === false) return
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Trigger 'ajaxBeforeUpdate' on the form, halt if event.preventDefault() is called
|
* Trigger 'ajaxBeforeUpdate' on the form, halt if event.preventDefault() is called
|
||||||
|
|
@ -107,7 +107,7 @@ if (window.jQuery === undefined)
|
||||||
|
|
||||||
updatePromise.done(function(){
|
updatePromise.done(function(){
|
||||||
form.trigger('ajaxSuccess', [context, data, textStatus, jqXHR])
|
form.trigger('ajaxSuccess', [context, data, textStatus, jqXHR])
|
||||||
options.evalSuccess && eval('(function($el, context, data, textStatus, jqXHR) {'+options.evalSuccess+'}($el, context, data, textStatus, jqXHR))')
|
options.evalSuccess && eval('(function($el, context, data, textStatus, jqXHR) {'+options.evalSuccess+'}.call($el.get(0), $el, context, data, textStatus, jqXHR))')
|
||||||
})
|
})
|
||||||
|
|
||||||
return updatePromise
|
return updatePromise
|
||||||
|
|
@ -154,7 +154,7 @@ if (window.jQuery === undefined)
|
||||||
/*
|
/*
|
||||||
* Halt here if the data-request-error attribute returns false
|
* Halt here if the data-request-error attribute returns false
|
||||||
*/
|
*/
|
||||||
if (options.evalError && eval('(function($el, context, textStatus, jqXHR) {'+options.evalError+'}($el, context, textStatus, jqXHR))') === false)
|
if (options.evalError && eval('(function($el, context, textStatus, jqXHR) {'+options.evalError+'}.call($el.get(0), $el, context, textStatus, jqXHR))') === false)
|
||||||
return
|
return
|
||||||
|
|
||||||
requestOptions.handleErrorMessage(errorMsg)
|
requestOptions.handleErrorMessage(errorMsg)
|
||||||
|
|
@ -162,6 +162,10 @@ if (window.jQuery === undefined)
|
||||||
|
|
||||||
return updatePromise
|
return updatePromise
|
||||||
},
|
},
|
||||||
|
complete: function(data, textStatus, jqXHR) {
|
||||||
|
form.trigger('ajaxComplete', [context, data, textStatus, jqXHR])
|
||||||
|
options.evalComplete && eval('(function($el, context, data, textStatus, jqXHR) {'+options.evalComplete+'}.call($el.get(0), $el, context, data, textStatus, jqXHR))')
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Custom function, display an error message to the user
|
* Custom function, display an error message to the user
|
||||||
|
|
@ -258,6 +262,7 @@ if (window.jQuery === undefined)
|
||||||
*/
|
*/
|
||||||
context.success = requestOptions.success
|
context.success = requestOptions.success
|
||||||
context.error = requestOptions.error
|
context.error = requestOptions.error
|
||||||
|
context.complete = requestOptions.complete
|
||||||
requestOptions = $.extend(requestOptions, options)
|
requestOptions = $.extend(requestOptions, options)
|
||||||
|
|
||||||
requestOptions.data = data.join('&')
|
requestOptions.data = data.join('&')
|
||||||
|
|
@ -290,7 +295,8 @@ if (window.jQuery === undefined)
|
||||||
beforeUpdate: function(data, textStatus, jqXHR) {},
|
beforeUpdate: function(data, textStatus, jqXHR) {},
|
||||||
evalBeforeUpdate: null,
|
evalBeforeUpdate: null,
|
||||||
evalSuccess: null,
|
evalSuccess: null,
|
||||||
evalError: null
|
evalError: null,
|
||||||
|
evalComplete: null,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -318,6 +324,7 @@ if (window.jQuery === undefined)
|
||||||
evalBeforeUpdate: $this.data('request-before-update'),
|
evalBeforeUpdate: $this.data('request-before-update'),
|
||||||
evalSuccess: $this.data('request-success'),
|
evalSuccess: $this.data('request-success'),
|
||||||
evalError: $this.data('request-error'),
|
evalError: $this.data('request-error'),
|
||||||
|
evalComplete: $this.data('request-complete'),
|
||||||
confirm: $this.data('request-confirm'),
|
confirm: $this.data('request-confirm'),
|
||||||
redirect: $this.data('request-redirect'),
|
redirect: $this.data('request-redirect'),
|
||||||
loading: $this.data('request-loading'),
|
loading: $this.data('request-loading'),
|
||||||
|
|
@ -377,7 +384,7 @@ if (window.jQuery === undefined)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$(document).on('keyup', 'input[type=text][data-request][data-track-input], input[type=password][data-request][data-track-input]', function documentOnKeyup(e){
|
$(document).on('keyup', 'input[type=text][data-request][data-track-input], input[type=password][data-request][data-track-input], input[type=number][data-request][data-track-input]', function documentOnKeyup(e){
|
||||||
var
|
var
|
||||||
$el = $(this),
|
$el = $(this),
|
||||||
lastValue = $el.data('oc.lastvalue')
|
lastValue = $el.data('oc.lastvalue')
|
||||||
|
|
|
||||||
|
|
@ -5,19 +5,13 @@
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-list {
|
.product-list {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
overflow: hidden; /* clearfix */
|
overflow: hidden; /* clearfix */
|
||||||
}
|
li {
|
||||||
.product-list li button,
|
button {
|
||||||
.product-list li .image,
|
|
||||||
.product-list li .details {
|
|
||||||
-webkit-transition: opacity .2s linear;
|
|
||||||
-moz-transition: opacity .2s linear;
|
|
||||||
transition: opacity .2s linear;
|
|
||||||
}
|
|
||||||
.product-list li button {
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
|
@ -26,49 +20,60 @@
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
.product-list li:hover button {
|
|
||||||
|
button, .image, .details {
|
||||||
|
-webkit-transition: opacity .2s linear;
|
||||||
|
-moz-transition: opacity .2s linear;
|
||||||
|
transition: opacity .2s linear;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
li:hover {
|
||||||
|
button {
|
||||||
opacity: .3;
|
opacity: .3;
|
||||||
}
|
}
|
||||||
.product-list li:hover button:hover {
|
button:hover {
|
||||||
opacity: .8;
|
opacity: .8;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.plugin-list {
|
.plugin-list {
|
||||||
|
li {
|
||||||
}
|
|
||||||
.plugin-list li {
|
|
||||||
list-style: none;
|
list-style: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
border-bottom: 1px solid #E6E9E9;
|
border-bottom: 1px solid #E6E9E9;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
.image {
|
||||||
.plugin-list li:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.plugin-list li .image {
|
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
img {
|
||||||
.plugin-list li .image img {
|
|
||||||
width: 50px;
|
width: 50px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
}
|
}
|
||||||
.plugin-list li .details p {
|
}
|
||||||
|
.details {
|
||||||
|
p {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 3px 0 0 0;
|
margin: 3px 0 0 0;
|
||||||
color: #808C8D;
|
color: #808C8D;
|
||||||
}
|
}
|
||||||
.plugin-list li h4 {
|
}
|
||||||
|
h4 {
|
||||||
padding: 5px 0 0;
|
padding: 5px 0 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: #C03F31;
|
color: #C03F31;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.theme-list li {
|
li:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.theme-list {
|
||||||
|
li {
|
||||||
float: left;
|
float: left;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0 10px 10px 0;
|
margin: 0 10px 10px 0;
|
||||||
|
|
@ -77,26 +82,17 @@
|
||||||
background: #fff;
|
background: #fff;
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
|
||||||
.theme-list li:hover {
|
|
||||||
border-color: transparent;
|
|
||||||
}
|
|
||||||
.theme-list li {
|
|
||||||
-webkit-transition: border .2s linear;
|
-webkit-transition: border .2s linear;
|
||||||
-moz-transition: border .2s linear;
|
-moz-transition: border .2s linear;
|
||||||
transition: border .2s linear;
|
transition: border .2s linear;
|
||||||
}
|
.image {
|
||||||
.theme-list li .image {
|
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
img {
|
||||||
.theme-list li .image img {
|
|
||||||
width: 210px;
|
width: 210px;
|
||||||
height: 140px;
|
height: 140px;
|
||||||
}
|
}
|
||||||
.theme-list li:hover .image {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
}
|
||||||
.theme-list li .details {
|
.details {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
@ -104,59 +100,57 @@
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.theme-list li:hover .details {
|
h4 {
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
.theme-list li h4 {
|
|
||||||
padding: 15px 0 0;
|
padding: 15px 0 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.theme-list li p {
|
p {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: #999;
|
color: #999;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.suggested-products-container {
|
|
||||||
}
|
}
|
||||||
|
li:hover {
|
||||||
|
border-color: transparent;
|
||||||
|
.image {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.details {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.suggested-products {
|
.suggested-products {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
.product {
|
||||||
.suggested-products .product {
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
.suggested-products .image img {
|
.image {
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
img {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
.suggested-themes .image img {
|
|
||||||
width: 60px;
|
|
||||||
height: 40px;
|
|
||||||
}
|
}
|
||||||
.suggested-products .image {
|
.details {
|
||||||
float: left;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.suggested-products .details {
|
|
||||||
margin-left: 50px;
|
margin-left: 50px;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
}
|
h5 {
|
||||||
.suggested-themes .details {
|
|
||||||
margin-left: 70px;
|
|
||||||
}
|
|
||||||
.suggested-products .details h5 {
|
|
||||||
margin: 0 0 3px;
|
margin: 0 0 3px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #C03F31;
|
color: #C03F31;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
.suggested-products .details p {
|
p {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
.suggested-products a {
|
}
|
||||||
|
a {
|
||||||
color: #777;
|
color: #777;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
|
|
@ -165,13 +159,10 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border-bottom: 1px solid #E6E9E9;
|
border-bottom: 1px solid #E6E9E9;
|
||||||
}
|
}
|
||||||
.suggested-products a:hover {
|
a:hover {
|
||||||
color: #333;
|
color: #333;
|
||||||
background: #f9f9f9;
|
background: #f9f9f9;
|
||||||
}
|
.image:after {
|
||||||
.suggested-products a:hover .image {
|
|
||||||
}
|
|
||||||
.suggested-products a:hover .image:after {
|
|
||||||
content: "+";
|
content: "+";
|
||||||
color: #999;
|
color: #999;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
|
|
@ -184,9 +175,25 @@
|
||||||
top: 7px;
|
top: 7px;
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
.suggested-products a:hover .image img {
|
.image {
|
||||||
|
img {
|
||||||
opacity: .5;
|
opacity: .5;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.suggested-themes {
|
||||||
|
.image {
|
||||||
|
img {
|
||||||
|
width: 60px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.details {
|
||||||
|
margin-left: 70px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Typeahead
|
* Typeahead
|
||||||
|
|
@ -199,12 +206,10 @@
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding-bottom: 15px;
|
padding-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.twitter-typeahead {
|
.twitter-typeahead {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.typeahead,
|
.typeahead, .tt-hint {
|
||||||
.tt-hint {
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 46px;
|
height: 46px;
|
||||||
padding: 8px 12px;
|
padding: 8px 12px;
|
||||||
|
|
@ -242,40 +247,39 @@
|
||||||
.tt-suggestion {
|
.tt-suggestion {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
}
|
+ {
|
||||||
.tt-suggestion + .tt-suggestion {
|
.tt-suggestion {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
border-top: 1px solid #ccc;
|
border-top: 1px solid #ccc;
|
||||||
}
|
}
|
||||||
.tt-suggestions .product-details {
|
}
|
||||||
|
}
|
||||||
|
.tt-suggestions {
|
||||||
|
.product-details {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.tt-suggestions .product-image {
|
.product-image {
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
img {
|
||||||
.tt-suggestions .product-image img {
|
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
}
|
}
|
||||||
.tt-suggestions .product-name {
|
}
|
||||||
|
.product-name {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
}
|
}
|
||||||
.tt-suggestions .product-description {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tt-suggestion.tt-cursor {
|
.tt-suggestion.tt-cursor {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
.product-details {
|
||||||
.tt-suggestion.tt-cursor .product-details {
|
|
||||||
color: #333;
|
color: #333;
|
||||||
background: #f9f9f9;
|
background: #f9f9f9;
|
||||||
border-color: #f0f0f0;
|
border-color: #f0f0f0;
|
||||||
}
|
.product-image:after {
|
||||||
.tt-suggestion.tt-cursor .product-details .product-image:after {
|
|
||||||
content: "+";
|
content: "+";
|
||||||
color: #999;
|
color: #999;
|
||||||
font-size: 38px;
|
font-size: 38px;
|
||||||
|
|
@ -288,6 +292,10 @@
|
||||||
top: 5px;
|
top: 5px;
|
||||||
left: 5px;
|
left: 5px;
|
||||||
}
|
}
|
||||||
.tt-suggestion.tt-cursor .product-details .product-image img {
|
.product-image {
|
||||||
|
img {
|
||||||
opacity: .5;
|
opacity: .5;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,14 @@ class ErrorHandler extends ErrorHandlerBase
|
||||||
|
|
||||||
// Route to the CMS error page.
|
// Route to the CMS error page.
|
||||||
$controller = new Controller($theme);
|
$controller = new Controller($theme);
|
||||||
return $controller->run('/error');
|
$result = $controller->run('/error');
|
||||||
|
|
||||||
|
// Extract content from response object
|
||||||
|
if ($result instanceof \Symfony\Component\HttpFoundation\Response) {
|
||||||
|
$result = $result->getContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,141 @@
|
||||||
|
<?php namespace System\Console;
|
||||||
|
|
||||||
|
use File;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
|
||||||
|
class OctoberMirror extends Command
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command name.
|
||||||
|
*/
|
||||||
|
protected $name = 'october:mirror';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*/
|
||||||
|
protected $description = '(Experimental) Generates a mirrored public folder using symbolic links.';
|
||||||
|
|
||||||
|
protected $files = [
|
||||||
|
'index.php'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $directories = [
|
||||||
|
'storage/app/uploads',
|
||||||
|
'storage/app/media',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $wildcards = [
|
||||||
|
'modules/*/assets',
|
||||||
|
'plugins/*/*/assets',
|
||||||
|
'themes/*/assets',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $destinationPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function fire()
|
||||||
|
{
|
||||||
|
$this->getDestinationPath();
|
||||||
|
|
||||||
|
foreach ($this->files as $file) {
|
||||||
|
$this->mirrorFile($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->directories as $directory) {
|
||||||
|
$this->mirrorDirectory($directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->wildcards as $wildcard) {
|
||||||
|
$this->mirrorWildcard($wildcard);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->output->writeln('<info>Mirror complete!</info>');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function mirrorFile($file)
|
||||||
|
{
|
||||||
|
$this->output->writeln(sprintf('<info> - Mirrored: %s</info>', $file));
|
||||||
|
|
||||||
|
$src = base_path().'/'.$file;
|
||||||
|
$dest = $this->getDestinationPath().'/'.$file;
|
||||||
|
if (!File::isFile($src) || File::isFile($dest)) return false;
|
||||||
|
symlink($src, $dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function mirrorDirectory($directory)
|
||||||
|
{
|
||||||
|
$this->output->writeln(sprintf('<info> - Mirrored: %s</info>', $directory));
|
||||||
|
|
||||||
|
$src = base_path().'/'.$directory;
|
||||||
|
$dest = $this->getDestinationPath().'/'.$directory;
|
||||||
|
if (!File::isDirectory($src) || File::isDirectory($dest)) return false;
|
||||||
|
File::makeDirectory(dirname($dest), 0755, true);
|
||||||
|
symlink($src, $dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function mirrorWildcard($wildcard)
|
||||||
|
{
|
||||||
|
if (strpos($wildcard, '*') === false) {
|
||||||
|
return $this->mirrorDirectory($wildcard);
|
||||||
|
}
|
||||||
|
|
||||||
|
list($start, $end) = explode('*', $wildcard, 2);
|
||||||
|
$startDir = base_path().'/'.$start;
|
||||||
|
if (!File::isDirectory($startDir)) return false;
|
||||||
|
|
||||||
|
foreach (File::directories($startDir) as $directory) {
|
||||||
|
$this->mirrorWildcard($start.basename($directory).$end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getDestinationPath()
|
||||||
|
{
|
||||||
|
if ($this->destinationPath !== null) {
|
||||||
|
return $this->destinationPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
$destPath = $this->argument('destination');
|
||||||
|
if (realpath($destPath) === false) {
|
||||||
|
$destPath = base_path() . '/' . $destPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!File::isDirectory($destPath)) {
|
||||||
|
File::makeDirectory($destPath, 0755, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->output->writeln(sprintf('<info>Destination: %s</info>', $destPath));
|
||||||
|
|
||||||
|
return $this->destinationPath = $destPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the console command arguments.
|
||||||
|
*/
|
||||||
|
protected function getArguments()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['destination', InputArgument::REQUIRED, 'The destination path relative to the current directory. Eg: public/'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the console command options.
|
||||||
|
*/
|
||||||
|
protected function getOptions()
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -711,7 +711,7 @@ class Updates extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $popular;
|
return array_values($popular);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
data-trigger-action="enable"
|
data-trigger-action="enable"
|
||||||
data-trigger=".control-list input[type=checkbox]"
|
data-trigger=".control-list input[type=checkbox]"
|
||||||
data-trigger-condition="checked"
|
data-trigger-condition="checked"
|
||||||
data-request-success="$el.prop('disabled', false)"
|
data-request-success="$(this).prop('disabled', false)"
|
||||||
data-stripe-load-indicator>
|
data-stripe-load-indicator>
|
||||||
<?= e(trans('backend::lang.list.delete_selected')) ?>
|
<?= e(trans('backend::lang.list.delete_selected')) ?>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
data-trigger-action="enable"
|
data-trigger-action="enable"
|
||||||
data-trigger=".control-list input[type=checkbox]"
|
data-trigger=".control-list input[type=checkbox]"
|
||||||
data-trigger-condition="checked"
|
data-trigger-condition="checked"
|
||||||
data-request-success="$el.prop('disabled', false)"
|
data-request-success="$(this).prop('disabled', false)"
|
||||||
data-stripe-load-indicator>
|
data-stripe-load-indicator>
|
||||||
<?= e(trans('backend::lang.list.delete_selected')) ?>
|
<?= e(trans('backend::lang.list.delete_selected')) ?>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
<h4 class="section-header">
|
<h4 class="section-header">
|
||||||
<a href="<?= Backend::url('cms/themes') ?>">Installed themes</a>
|
<a href="<?= Backend::url('cms/themes') ?>">Installed themes</a>
|
||||||
<small>(<span class="product-counter">0</span>)</small>
|
<small>(<span class="product-counter"><?= count($installedThemes) ?></span>)</small>
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<?php if (!count($installedThemes)): ?>
|
<?php if (!count($installedThemes)): ?>
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ return [
|
||||||
'ro' => 'Romana',
|
'ro' => 'Romana',
|
||||||
'pt-br' => 'Brazilian Portuguese',
|
'pt-br' => 'Brazilian Portuguese',
|
||||||
'fa' => 'Persian',
|
'fa' => 'Persian',
|
||||||
|
'nb-no' => 'Norwegisch (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Konnte Verzeichnis: :name nicht erstellen",
|
'create_fail' => "Konnte Verzeichnis: :name nicht erstellen",
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ return [
|
||||||
'ru' => 'Russian',
|
'ru' => 'Russian',
|
||||||
'se' => 'Swedish',
|
'se' => 'Swedish',
|
||||||
'sk' => 'Slovak (Slovakia)',
|
'sk' => 'Slovak (Slovakia)',
|
||||||
'tr' => 'Turkish'
|
'tr' => 'Turkish',
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => 'Cannot create directory: :name'
|
'create_fail' => 'Cannot create directory: :name'
|
||||||
|
|
@ -114,7 +115,6 @@ return [
|
||||||
'sender_name' => 'Sender Name',
|
'sender_name' => 'Sender Name',
|
||||||
'sender_email' => 'Sender Email',
|
'sender_email' => 'Sender Email',
|
||||||
'php_mail' => 'PHP mail',
|
'php_mail' => 'PHP mail',
|
||||||
'sendmail' => 'Sendmail',
|
|
||||||
'smtp' => 'SMTP',
|
'smtp' => 'SMTP',
|
||||||
'smtp_address' => 'SMTP Address',
|
'smtp_address' => 'SMTP Address',
|
||||||
'smtp_authorization' => 'SMTP authorization required',
|
'smtp_authorization' => 'SMTP authorization required',
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ return [
|
||||||
'ro' => 'Romana',
|
'ro' => 'Romana',
|
||||||
'pt-br' => 'Portugués Brasilero',
|
'pt-br' => 'Portugués Brasilero',
|
||||||
'es-Ar' => 'Español Argentino',
|
'es-Ar' => 'Español Argentino',
|
||||||
|
'nb-no' => 'Noruego (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "No se puede crear el directorio: :name",
|
'create_fail' => "No se puede crear el directorio: :name",
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
'pt-br' => 'Portugués Brasilero',
|
'pt-br' => 'Portugués Brasilero',
|
||||||
'es-ar' => 'Español Argentino',
|
'es-ar' => 'Español Argentino',
|
||||||
'es' => 'Español',
|
'es' => 'Español',
|
||||||
|
'nb-no' => 'Noruego (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "No es posible crear el directorio: :name",
|
'create_fail' => "No es posible crear el directorio: :name",
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ return [
|
||||||
'ro' => 'رومانیایی',
|
'ro' => 'رومانیایی',
|
||||||
'pt-br' => 'پرتغالی برزیل',
|
'pt-br' => 'پرتغالی برزیل',
|
||||||
'fa' => 'فارسی',
|
'fa' => 'فارسی',
|
||||||
|
'nb-no' => 'نروژی (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "مشکلی در ایجاد پوشه ی :name به وجود آمده است",
|
'create_fail' => "مشکلی در ایجاد پوشه ی :name به وجود آمده است",
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ return [
|
||||||
'fr' => 'Français',
|
'fr' => 'Français',
|
||||||
'pt-br' => 'Portugais-Brésilien',
|
'pt-br' => 'Portugais-Brésilien',
|
||||||
'fa' => 'Persian',
|
'fa' => 'Persian',
|
||||||
|
'nb-no' => 'Norvégien (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Impossible de créer le répertoire : :name",
|
'create_fail' => "Impossible de créer le répertoire : :name",
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@ return [
|
||||||
'ro' => 'Román',
|
'ro' => 'Román',
|
||||||
'ru' => 'Orosz',
|
'ru' => 'Orosz',
|
||||||
'se' => 'Svéd',
|
'se' => 'Svéd',
|
||||||
'tr' => 'Török'
|
'tr' => 'Török',
|
||||||
|
'nb-no' => 'Norvég (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => 'Nem hozható létre a könyvtár: :name'
|
'create_fail' => 'Nem hozható létre a könyvtár: :name'
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ return [
|
||||||
'ru' => 'Rusia',
|
'ru' => 'Rusia',
|
||||||
'se' => 'Swedia',
|
'se' => 'Swedia',
|
||||||
'sk' => 'Slowakia (Slovakia)',
|
'sk' => 'Slowakia (Slovakia)',
|
||||||
'tr' => 'Turki'
|
'tr' => 'Turki',
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => 'Tidak dapat membuat direktori: :name'
|
'create_fail' => 'Tidak dapat membuat direktori: :name'
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ return [
|
||||||
'it' => 'Italiano',
|
'it' => 'Italiano',
|
||||||
'pt-br' => 'Portoghese (Brasile)',
|
'pt-br' => 'Portoghese (Brasile)',
|
||||||
'fa' => 'Persian',
|
'fa' => 'Persian',
|
||||||
|
'nb-no' => 'Norvegese (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Impossibile creare la cartella: :name",
|
'create_fail' => "Impossibile creare la cartella: :name",
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@ return [
|
||||||
'ro' => 'Romanian',
|
'ro' => 'Romanian',
|
||||||
'ru' => 'Russian',
|
'ru' => 'Russian',
|
||||||
'se' => 'Swedish',
|
'se' => 'Swedish',
|
||||||
'tr' => 'Turkish'
|
'tr' => 'Turkish',
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "ディレクトリ':name'を作成できません。",
|
'create_fail' => "ディレクトリ':name'を作成できません。",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,263 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'app' => [
|
||||||
|
'name' => 'October CMS',
|
||||||
|
'tagline' => 'Getting back to basics'
|
||||||
|
],
|
||||||
|
'locale' => [
|
||||||
|
'en' => 'Engelsk',
|
||||||
|
'de' => 'Tysk',
|
||||||
|
'es' => 'Spansk',
|
||||||
|
'es-ar' => 'Spansk (Argentina)',
|
||||||
|
'fa' => 'Persisk',
|
||||||
|
'fr' => 'Fransk',
|
||||||
|
'hu' => 'Ungarsk',
|
||||||
|
'id' => 'Indonesisk',
|
||||||
|
'it' => 'Italiensk',
|
||||||
|
'ja' => 'Japansk',
|
||||||
|
'nl' => 'Nederlandsk',
|
||||||
|
'pl' => 'Polsk',
|
||||||
|
'pt-br' => 'Brasiliansk Portugisk',
|
||||||
|
'ro' => 'Rumensk',
|
||||||
|
'ru' => 'Russisk',
|
||||||
|
'se' => 'Svensk',
|
||||||
|
'sk' => 'Slovak (Slovakia)',
|
||||||
|
'tr' => 'Tyrkisk',
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
|
],
|
||||||
|
'directory' => [
|
||||||
|
'create_fail' => 'Kan ikke opprette mappen: :name'
|
||||||
|
],
|
||||||
|
'file' => [
|
||||||
|
'create_fail' => 'Kan ikke opprette filen: :name'
|
||||||
|
],
|
||||||
|
'combiner' => [
|
||||||
|
'not_found' => "Kombinasjonsfilen ':name' ble ikke funnet."
|
||||||
|
],
|
||||||
|
'system' => [
|
||||||
|
'name' => 'System',
|
||||||
|
'menu_label' => 'System',
|
||||||
|
'categories' => [
|
||||||
|
'cms' => 'CMS',
|
||||||
|
'misc' => 'Div.',
|
||||||
|
'logs' => 'Logger',
|
||||||
|
'mail' => 'E-post',
|
||||||
|
'shop' => 'Shop',
|
||||||
|
'team' => 'Team',
|
||||||
|
'users' => 'Brukere',
|
||||||
|
'system' => 'System',
|
||||||
|
'social' => 'Sosialt',
|
||||||
|
'events' => 'Hendelser',
|
||||||
|
'customers' => 'Kunder',
|
||||||
|
'my_settings' => 'Mine innstillinger'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'plugin' => [
|
||||||
|
'unnamed' => 'Navnløs plugin',
|
||||||
|
'name' => [
|
||||||
|
'label' => 'Plugin-navn',
|
||||||
|
'help' => 'Navngi pluginen ved et unikt navn. For eksempel, RainLab.Blog'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'plugins' => [
|
||||||
|
'manage' => 'Håndtere plugins',
|
||||||
|
'enable_or_disable' => 'Aktivere eller deaktivere',
|
||||||
|
'enable_or_disable_title' => 'Aktivere eller deaktivere plugins',
|
||||||
|
'remove' => 'Fjern',
|
||||||
|
'refresh' => 'Oppdater',
|
||||||
|
'disabled_label' => 'Deaktivert',
|
||||||
|
'disabled_help' => 'Deaktiverte plugins blir ignorert av applikasjonen.',
|
||||||
|
'selected_amount' => 'Valgte plugins: :amount',
|
||||||
|
'remove_confirm' => 'Er du sikker?',
|
||||||
|
'remove_success' => 'Plugins har blitt fjernet fra systemet.',
|
||||||
|
'refresh_confirm' => 'Er du sikker?',
|
||||||
|
'refresh_success' => 'Plugins har blitt oppdatert i systemet.',
|
||||||
|
'disable_confirm' => 'Er du sikker?',
|
||||||
|
'disable_success' => 'Plugins har blitt deaktivert.',
|
||||||
|
'enable_success' => 'Plugins har blitt aktivert.',
|
||||||
|
'unknown_plugin' => 'Plugins har blitt fjernet fra systemet.'
|
||||||
|
],
|
||||||
|
'project' => [
|
||||||
|
'name' => 'Prosjekt',
|
||||||
|
'owner_label' => 'Eier',
|
||||||
|
'attach' => 'Tilkoble prosjekt',
|
||||||
|
'detach' => 'Avkoble prosjekt',
|
||||||
|
'none' => 'Ingen',
|
||||||
|
'id' => [
|
||||||
|
'label' => 'Prosjekt-ID',
|
||||||
|
'help' => 'Hvordan finne din prosjekt-ID',
|
||||||
|
'missing' => 'Vennligst spesifiser en prosjekt-ID.'
|
||||||
|
],
|
||||||
|
'detach_confirm' => 'Vil du virkelig avkoble dette prosjektet?',
|
||||||
|
'unbind_success' => 'Prosjektet har blitt avkoblet.'
|
||||||
|
],
|
||||||
|
'settings' => [
|
||||||
|
'menu_label' => 'Innstillinger',
|
||||||
|
'not_found' => 'Fant ikke spesifiserte innstilling.',
|
||||||
|
'missing_model' => 'Innstillingssiden mangler en modell-definisjon.',
|
||||||
|
'update_success' => 'Innstillingene for :name har blitt lagret.',
|
||||||
|
'return' => 'Tilbake til systeminnstillinger',
|
||||||
|
'search' => 'Søk'
|
||||||
|
],
|
||||||
|
'mail' => [
|
||||||
|
'log_file' => 'Loggfil',
|
||||||
|
'menu_label' => 'E-postinnstillinger',
|
||||||
|
'menu_description' => 'Administrere e-postinnstillinger.',
|
||||||
|
'general' => 'Generelt',
|
||||||
|
'method' => 'E-postmetode',
|
||||||
|
'sender_name' => 'Avsendernavn',
|
||||||
|
'sender_email' => 'Avsenderens e-postadresse',
|
||||||
|
'php_mail' => 'PHP mail',
|
||||||
|
'sendmail' => 'Sendmail',
|
||||||
|
'smtp' => 'SMTP',
|
||||||
|
'smtp_address' => 'SMTP-adresse',
|
||||||
|
'smtp_authorization' => 'SMTP-autentisering kreves',
|
||||||
|
'smtp_authorization_comment' => 'Kryss av dersom SMTP-tjeneren krever autentisering.',
|
||||||
|
'smtp_username' => 'Brukernavn',
|
||||||
|
'smtp_password' => 'Passord',
|
||||||
|
'smtp_port' => 'SMTP-port',
|
||||||
|
'smtp_ssl' => 'SSL-tilkobling påkrevd',
|
||||||
|
'sendmail' => 'Sendmail',
|
||||||
|
'sendmail_path' => 'Sendmail-sti',
|
||||||
|
'sendmail_path_comment' => 'Vennligst oppgi stien til sendmail-programmet.',
|
||||||
|
'mailgun' => 'Mailgun',
|
||||||
|
'mailgun_domain' => 'Mailgun-domene',
|
||||||
|
'mailgun_domain_comment' => 'Vennligst oppgi Mailgun-domenenavnet.',
|
||||||
|
'mailgun_secret' => 'Mailgun Secret',
|
||||||
|
'mailgun_secret_comment' => 'Oppgi din Mailgun-API-nøkkel.',
|
||||||
|
'mandrill' => 'Mandrill',
|
||||||
|
'mandrill_secret' => 'Mandrill Secret',
|
||||||
|
'mandrill_secret_comment' => 'Enter your Mandrill API key.'
|
||||||
|
],
|
||||||
|
'mail_templates' => [
|
||||||
|
'menu_label' => 'E-postmaler',
|
||||||
|
'menu_description' => 'Modifisere e-postmalene som blir sendt til brukere og administratorer, håndtere e-postlayouts.',
|
||||||
|
'new_template' => 'Ny mal',
|
||||||
|
'new_layout' => 'Ny layout',
|
||||||
|
'template' => 'Mal',
|
||||||
|
'templates' => 'Maler',
|
||||||
|
'menu_layouts_label' => 'E-postlayouts',
|
||||||
|
'layout' => 'Layout',
|
||||||
|
'layouts' => 'Layouts',
|
||||||
|
'name' => 'Navn',
|
||||||
|
'name_comment' => 'Unikt navn som tilknyttes denne layouten',
|
||||||
|
'code' => 'Code',
|
||||||
|
'code_comment' => 'Unik kode som tilknyttes denne malen',
|
||||||
|
'subject' => 'Emne',
|
||||||
|
'subject_comment' => 'Emnet til e-posten',
|
||||||
|
'description' => 'Beskrivelse',
|
||||||
|
'content_html' => 'HTML',
|
||||||
|
'content_css' => 'CSS',
|
||||||
|
'content_text' => 'Klartekst',
|
||||||
|
'test_send' => 'Send testmelding',
|
||||||
|
'test_success' => 'Testmeldingen har blitt sendt.',
|
||||||
|
'return' => 'Tilbake til malliste'
|
||||||
|
],
|
||||||
|
'install' => [
|
||||||
|
'project_label' => 'Tilkoble prosjekt',
|
||||||
|
'plugin_label' => 'Installér',
|
||||||
|
'missing_plugin_name' => 'Vennligst oppgi pluginens navn.',
|
||||||
|
'install_completing' => 'Fullfører installasjonen',
|
||||||
|
'install_success' => 'Plugin har blitt installert.'
|
||||||
|
],
|
||||||
|
'updates' => [
|
||||||
|
'title' => 'Håndtere oppdateringer',
|
||||||
|
'name' => 'Programvareoppdateringer',
|
||||||
|
'menu_label' => 'Oppdateringer',
|
||||||
|
'menu_description' => 'Oppdatere systemet, håndtere og installere plugins og themes.',
|
||||||
|
'check_label' => 'Se etter oppdateringer',
|
||||||
|
'retry_label' => 'Prøv igjen',
|
||||||
|
'plugin_name' => 'Navn',
|
||||||
|
'plugin_description' => 'Beskrivelse',
|
||||||
|
'plugin_version' => 'Versjon',
|
||||||
|
'plugin_author' => 'Utgiver',
|
||||||
|
'core_build' => 'Nåværende build',
|
||||||
|
'core_build_old' => 'Nåværende build :build',
|
||||||
|
'core_build_new' => 'Build :build',
|
||||||
|
'core_build_new_help' => 'Siste build er tilgjengelig.',
|
||||||
|
'core_downloading' => 'Laster ned applikasjonsfiler',
|
||||||
|
'core_extracting' => 'Pakker opp applikasjonsfiler',
|
||||||
|
'plugins' => 'Plugins',
|
||||||
|
'disabled' => 'Deaktivert',
|
||||||
|
'plugin_downloading' => 'Laster ned plugin: :name',
|
||||||
|
'plugin_extracting' => 'Pakker opp plugin: :name',
|
||||||
|
'plugin_version_none' => 'Ny plugin',
|
||||||
|
'plugin_version_old' => 'Nåværende v:version',
|
||||||
|
'plugin_version_new' => 'v:version',
|
||||||
|
'theme_label' => 'Theme',
|
||||||
|
'theme_new_install' => 'New theme installation.', # ---
|
||||||
|
'theme_downloading' => 'Laster ned theme: :name',
|
||||||
|
'theme_extracting' => 'Pakker opp theme: :name',
|
||||||
|
'update_label' => 'Oppdatér programvare',
|
||||||
|
'update_completing' => 'Ferdiggjør oppdatering',
|
||||||
|
'update_loading' => 'Henter tilgjengelige oppdateringer...',
|
||||||
|
'update_success' => 'Oppdatering har fullført.',
|
||||||
|
'update_failed_label' => 'Oppdateringen mislyktes',
|
||||||
|
'force_label' => 'Tving update',
|
||||||
|
'found' => [
|
||||||
|
'label' => 'Fant nye oppdateringer!',
|
||||||
|
'help' => 'Klikk på Oppdatér programvare for å oppdatere.'
|
||||||
|
],
|
||||||
|
'none' => [
|
||||||
|
'label' => 'Ingen oppdateringer',
|
||||||
|
'help' => 'Ingen nye oppdateringer ble funnet.'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'server' => [
|
||||||
|
'connect_error' => 'Kunne ikke koble til serveren.',
|
||||||
|
'response_not_found' => 'Oppdateringsserveren ble ikke funnet.',
|
||||||
|
'response_invalid' => 'Feilaktig respons fra serveren.',
|
||||||
|
'response_empty' => 'Tom respons fra serveren.',
|
||||||
|
'file_error' => 'Serveren kunne ikke levere pakken.',
|
||||||
|
'file_corrupt' => 'Pakken fra serveren er korrupt.'
|
||||||
|
],
|
||||||
|
'behavior' => [
|
||||||
|
'missing_property' => 'Klassen :class må definere egenskapen $:property som brukes av :behavior -egenskapen.'
|
||||||
|
],
|
||||||
|
'config' => [
|
||||||
|
'not_found' => 'Fant ikke konfigurasjonsfilen :file definert for for :location.',
|
||||||
|
'required' => "Konfigurasjon brukt i :location må angi verdien ':property'."
|
||||||
|
],
|
||||||
|
'zip' => [
|
||||||
|
'extract_failed' => "Kunne ikke pakke opp core-fil ':file'."
|
||||||
|
],
|
||||||
|
'event_log' => [
|
||||||
|
'hint' => 'Denne loggen viser en liste over potensielle feilmeldinger som oppstår i applikasjonen, for eksempel unntak og debugginginformasjon.',
|
||||||
|
'menu_label' => 'Hendelseslogg',
|
||||||
|
'menu_description' => 'Se systemloggmeldinger med registrert tid og detaljer.',
|
||||||
|
'empty_link' => 'Tøm hendelseslogg',
|
||||||
|
'empty_loading' => 'Tømmer hendelseslogg...',
|
||||||
|
'empty_success' => 'Hendelsesloggen er tømt.',
|
||||||
|
'return_link' => 'Tilbake til hendelseslogg',
|
||||||
|
'id' => 'ID',
|
||||||
|
'id_label' => 'Hendelses-ID',
|
||||||
|
'created_at' => 'Tid',
|
||||||
|
'message' => 'Melding',
|
||||||
|
'level' => 'Nivå'
|
||||||
|
],
|
||||||
|
'request_log' => [
|
||||||
|
'hint' => 'Denne loggen viser en liste over nettleserforespørsler som kan kreve oppmerksomhet. For eksempel, hvis en bruker besøker en side som ikke eksisterer, vil det bli oppført her med statuskode 404.',
|
||||||
|
'menu_label' => 'Forespørselslogg',
|
||||||
|
'menu_description' => 'Se feilaktige forespørsler, for eksempel Ikke funnet (404).',
|
||||||
|
'empty_link' => 'Tøm forespørselslogg',
|
||||||
|
'empty_loading' => 'Tømmer forespørselslogg...',
|
||||||
|
'empty_success' => 'Forespørselsloggen er tømt.',
|
||||||
|
'return_link' => 'Tilbake til forespørselslogg',
|
||||||
|
'id' => 'ID',
|
||||||
|
'id_label' => 'Logg-ID',
|
||||||
|
'count' => 'Antall',
|
||||||
|
'referer' => 'Referers',
|
||||||
|
'url' => 'URL',
|
||||||
|
'status_code' => 'Status'
|
||||||
|
],
|
||||||
|
'permissions' => [
|
||||||
|
'name' => 'System',
|
||||||
|
'manage_system_settings' => 'Håndtere systeminnstillinger',
|
||||||
|
'manage_software_updates' => 'Håndtere programvareoppdateringer',
|
||||||
|
'manage_mail_templates' => 'Håndtere e-postmaler',
|
||||||
|
'manage_mail_settings' => 'Håndtere e-postinnstillinger',
|
||||||
|
'manage_other_administrators' => 'Håndtere andre administratorer',
|
||||||
|
'view_the_dashboard' => 'Se dashboard'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Status: NOT complete.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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
|
||||||
|
| such as the size rules. Feel free to tweak each of these messages.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
"accepted" => ":attribute må aksepteres.",
|
||||||
|
"active_url" => ":attribute er ikke en gyldig URL.",
|
||||||
|
"after" => ":attribute må være en dato etter :date.",
|
||||||
|
"alpha" => ":attribute kan kun inneholde bokstaver.",
|
||||||
|
"alpha_dash" => ":attribute kan kun inneholde bokstaver, tall og bindestreker.",
|
||||||
|
"alpha_num" => ":attribute kan kun inneholde bokstaver og tall.",
|
||||||
|
"array" => ":attribute må være et array.",
|
||||||
|
"before" => ":attribute må være en dato før :date.",
|
||||||
|
"between" => [
|
||||||
|
"numeric" => ":attribute må være mellom :min - :max.",
|
||||||
|
"file" => ":attribute må være mellom :min - :max kilobytes.",
|
||||||
|
"string" => ":attribute må være mellom :min - :max tegn.",
|
||||||
|
"array" => ":attribute må ha mellom :min - :max elementer.",
|
||||||
|
],
|
||||||
|
"confirmed" => ":attribute bekreftelse samsvarer ikke.",
|
||||||
|
"date" => ":attribute er ikke en gyldig dato.",
|
||||||
|
"date_format" => ":attribute samsvarer ikke med formatet :format.",
|
||||||
|
"different" => ":attribute og :other må være forskjellig.",
|
||||||
|
"digits" => ":attribute må være :digits tall.",
|
||||||
|
"digits_between" => ":attribute må være mellom :min og :max tall.",
|
||||||
|
"email" => ":attribute format ugyldig.",
|
||||||
|
"exists" => "Valgt :attribute er ugyldig.",
|
||||||
|
"image" => ":attribute må være et bilde.",
|
||||||
|
"in" => "Valgt :attribute er ugyldig.",
|
||||||
|
"integer" => ":attribute må være et heltall.",
|
||||||
|
"ip" => ":attribute må være en gyldig IP-adresse.",
|
||||||
|
"max" => [
|
||||||
|
"numeric" => ":attribute kan ikke være større enn :max.",
|
||||||
|
"file" => ":attribute kan ikke være større enn :max kilobytes.",
|
||||||
|
"string" => ":attribute kan ikke inneholde mer enn :max tegn.",
|
||||||
|
"array" => ":attribute kan ikke ha mer enn :max elementer.",
|
||||||
|
],
|
||||||
|
"mimes" => ":attribute må være av filtype: :values.",
|
||||||
|
"min" => [
|
||||||
|
"numeric" => ":attribute må være minst :min.",
|
||||||
|
"file" => ":attribute må være minst :min kilobytes.",
|
||||||
|
"string" => ":attribute må være minst :min tegn.",
|
||||||
|
"array" => ":attribute må ha minst :min elementer.",
|
||||||
|
],
|
||||||
|
"not_in" => "Valgt :attribute er ugyldig.",
|
||||||
|
"numeric" => ":attribute må være et tall.",
|
||||||
|
"regex" => ":attribute format er ugyldig.",
|
||||||
|
"required" => ":attribute felt kreves.",
|
||||||
|
"required_if" => ":attribute felt kreves når :other er :value.",
|
||||||
|
"required_with" => ":attribute felt kreves når :values er til stede.",
|
||||||
|
"required_without" => ":attribute felt kreves når :values ikke er til stede.",
|
||||||
|
"same" => ":attribute og :other må samsvare.",
|
||||||
|
"size" => [
|
||||||
|
"numeric" => ":attribute må være :size.",
|
||||||
|
"file" => ":attribute må være :size kilobytes.",
|
||||||
|
"string" => ":attribute må være :size tegn.",
|
||||||
|
"array" => " :attribute må inneholde :size elementer.",
|
||||||
|
],
|
||||||
|
"unique" => ":attribute er allerede i bruk.",
|
||||||
|
"url" => ":attribute format er ugyldig.",
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| 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' => [],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| 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' => [],
|
||||||
|
|
||||||
|
);
|
||||||
|
|
@ -18,6 +18,7 @@ return [
|
||||||
'ro' => 'Roemeens',
|
'ro' => 'Roemeens',
|
||||||
'pt-br' => 'Braziliaans Portugees',
|
'pt-br' => 'Braziliaans Portugees',
|
||||||
'fa' => 'Persian',
|
'fa' => 'Persian',
|
||||||
|
'nb-no' => 'Noors (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Map aanmaken mislukt: :name",
|
'create_fail' => "Map aanmaken mislukt: :name",
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ return [
|
||||||
'ru' => 'Rosyjski',
|
'ru' => 'Rosyjski',
|
||||||
'se' => 'Szwedzki',
|
'se' => 'Szwedzki',
|
||||||
'tr' => 'Turecki',
|
'tr' => 'Turecki',
|
||||||
'pl' => 'Polski'
|
'pl' => 'Polski',
|
||||||
|
'nb-no' => 'Norweski (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => 'Nie można stworzyć katalogu: :name'
|
'create_fail' => 'Nie można stworzyć katalogu: :name'
|
||||||
|
|
|
||||||
|
|
@ -7,32 +7,39 @@ return [
|
||||||
],
|
],
|
||||||
'locale' => [
|
'locale' => [
|
||||||
'en' => 'Inglês',
|
'en' => 'Inglês',
|
||||||
'nl' => 'Holandês',
|
|
||||||
'ja' => 'Japonês',
|
|
||||||
'se' => 'Sueco',
|
|
||||||
'tr' => 'Turco',
|
|
||||||
'de' => 'Alemão',
|
'de' => 'Alemão',
|
||||||
'ru' => 'Russo',
|
'es' => 'Espanhol',
|
||||||
|
'es-ar' => 'Espanhol da Argentina',
|
||||||
|
'fa' => 'Persa',
|
||||||
'fr' => 'Francês',
|
'fr' => 'Francês',
|
||||||
|
'hu' => 'Húngaro',
|
||||||
|
'id' => 'Indonésio',
|
||||||
'it' => 'Italiano',
|
'it' => 'Italiano',
|
||||||
'ro' => 'Romano',
|
'ja' => 'Japonês',
|
||||||
|
'nl' => 'Holandês ',
|
||||||
|
'pl' => 'Polonês',
|
||||||
'pt-br' => 'Português do Brasil',
|
'pt-br' => 'Português do Brasil',
|
||||||
'fa' => 'Persian',
|
'ro' => 'Romeno',
|
||||||
|
'ru' => 'Russo',
|
||||||
|
'se' => 'Sueco',
|
||||||
|
'sk' => 'Eslovaco',
|
||||||
|
'tr' => 'Turco',
|
||||||
|
'nb-no' => 'Norueguês (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Não é possível criar o diretório: :name",
|
'create_fail' => 'Não é possível criar o diretório: :name',
|
||||||
],
|
],
|
||||||
'file' => [
|
'file' => [
|
||||||
'create_fail' => "Não é possível criar o arquivo: :name",
|
'create_fail' => 'Não é possível criar o arquivo: :name',
|
||||||
],
|
],
|
||||||
'combiner' => [
|
'combiner' => [
|
||||||
'not_found' => "O arquivo combinador ':name' não foi encontrado.",
|
'not_found' => 'O arquivo combinador ":name" não foi encontrado.',
|
||||||
],
|
],
|
||||||
'system' => [
|
'system' => [
|
||||||
'name' => 'Sistema',
|
'name' => 'Sistema',
|
||||||
'menu_label' => 'Sistema',
|
'menu_label' => 'Sistema',
|
||||||
'categories' => [
|
'categories' => [
|
||||||
'cms' => 'Temas',
|
'cms' => 'CMS',
|
||||||
'misc' => 'Diversos',
|
'misc' => 'Diversos',
|
||||||
'logs' => 'Registros',
|
'logs' => 'Registros',
|
||||||
'mail' => 'E-mail',
|
'mail' => 'E-mail',
|
||||||
|
|
@ -44,13 +51,13 @@ return [
|
||||||
'events' => 'Eventos',
|
'events' => 'Eventos',
|
||||||
'customers' => 'Clientes',
|
'customers' => 'Clientes',
|
||||||
'my_settings' => 'Configurações',
|
'my_settings' => 'Configurações',
|
||||||
],
|
]
|
||||||
],
|
],
|
||||||
'plugin' => [
|
'plugin' => [
|
||||||
'unnamed' => 'Plugin não nomeado',
|
'unnamed' => 'Plugin sem nome',
|
||||||
'name' => [
|
'name' => [
|
||||||
'label' => 'Nome do Plugin',
|
'label' => 'Nome do Plugin',
|
||||||
'help' => 'Nome do plugin pelo seu código único. Por exemplo, RainLab.Blog',
|
'help' => 'Nomeie o plugin pelo seu código exclusivo. Por exemplo, RainLab.Blog',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'plugins' => [
|
'plugins' => [
|
||||||
|
|
@ -63,13 +70,13 @@ return [
|
||||||
'disabled_help' => 'Plugins que estão desabilitados são ignorados pela aplicação.',
|
'disabled_help' => 'Plugins que estão desabilitados são ignorados pela aplicação.',
|
||||||
'selected_amount' => 'Plugins selecionados: :amount',
|
'selected_amount' => 'Plugins selecionados: :amount',
|
||||||
'remove_confirm' => 'Você tem certeza?',
|
'remove_confirm' => 'Você tem certeza?',
|
||||||
'remove_success' => "Plugins removidos com sucesso do sistema.",
|
'remove_success' => 'Plugins removidos com sucesso do sistema.',
|
||||||
'refresh_confirm' => 'Você tem certeza?',
|
'refresh_confirm' => 'Você tem certeza?',
|
||||||
'refresh_success' => "Plugins atualizados com sucesso.",
|
'refresh_success' => 'Plugins atualizados com sucesso.',
|
||||||
'disable_confirm' => 'Você tem certeza?',
|
'disable_confirm' => 'Você tem certeza?',
|
||||||
'disable_success' => "Plugins desabilitados com sucesso.",
|
'disable_success' => 'Plugins desabilitados com sucesso.',
|
||||||
'enable_success' => "Plugins habilitados com sucesso.",
|
'enable_success' => 'Plugins habilitados com sucesso.',
|
||||||
'unknown_plugin' => "Plugin removido do sistema de arquivos.",
|
'unknown_plugin' => 'Plugin removido do sistema de arquivos.',
|
||||||
],
|
],
|
||||||
'project' => [
|
'project' => [
|
||||||
'name' => 'Projeto',
|
'name' => 'Projeto',
|
||||||
|
|
@ -79,26 +86,29 @@ return [
|
||||||
'none' => 'Nenhum',
|
'none' => 'Nenhum',
|
||||||
'id' => [
|
'id' => [
|
||||||
'label' => 'ID do Projeto',
|
'label' => 'ID do Projeto',
|
||||||
'help' => 'Como encontrar o ID do seu projeto?',
|
'help' => 'Como encontrar o ID do seu projeto',
|
||||||
'missing' => 'Por favor, especifique um ID de Projeto para usar.',
|
'missing' => 'Por favor, forneça um ID de projeto para usar.',
|
||||||
],
|
],
|
||||||
'detach_confirm' => 'Tem certeza de que deseja desanexar este projeto?',
|
'detach_confirm' => 'Tem certeza que deseja desanexar este projeto?',
|
||||||
'unbind_success' => 'Projeto desanexado com sucesso.',
|
'unbind_success' => 'Projeto desanexado com sucesso.',
|
||||||
],
|
],
|
||||||
'settings' => [
|
'settings' => [
|
||||||
'menu_label' => 'Configurações',
|
'menu_label' => 'Configurações',
|
||||||
'missing_model' => 'A página de configurações está faltando uma definição de modelo.',
|
'not_found' => 'Impossível encontrar as configurações solicitadas.',
|
||||||
|
'missing_model' => 'Falta uma definição de model na página de configurações.',
|
||||||
'update_success' => 'Configurações para :name foram atualizados com sucesso.',
|
'update_success' => 'Configurações para :name foram atualizados com sucesso.',
|
||||||
'return' => 'Retornar para as configurações do sistema',
|
'return' => 'Retornar para as configurações do sistema',
|
||||||
'search' => 'Buscar'
|
'search' => 'Buscar',
|
||||||
],
|
],
|
||||||
'mail' => [
|
'mail' => [
|
||||||
|
'log_file' => 'Arquivo de registro',
|
||||||
'menu_label' => 'Configurações de E-mail',
|
'menu_label' => 'Configurações de E-mail',
|
||||||
'menu_description' => 'Gerenciar configurações de e-mail.',
|
'menu_description' => 'Gerenciar configurações de e-mail.',
|
||||||
'general' => 'Geral',
|
'general' => 'Geral',
|
||||||
'method' => 'Método de Envio',
|
'method' => 'Método de Envio',
|
||||||
'sender_name' => 'Nome do Remetente',
|
'sender_name' => 'Nome do Remetente',
|
||||||
'sender_email' => 'E-mail do Remetente',
|
'sender_email' => 'E-mail do Remetente',
|
||||||
|
'php_mail' => 'PHP mail',
|
||||||
'smtp' => 'SMTP',
|
'smtp' => 'SMTP',
|
||||||
'smtp_address' => 'Endereço SMTP',
|
'smtp_address' => 'Endereço SMTP',
|
||||||
'smtp_authorization' => 'Autenticação SMTP obrigatória',
|
'smtp_authorization' => 'Autenticação SMTP obrigatória',
|
||||||
|
|
@ -110,21 +120,29 @@ return [
|
||||||
'sendmail' => 'Sendmail',
|
'sendmail' => 'Sendmail',
|
||||||
'sendmail_path' => 'Caminho do Sendmail',
|
'sendmail_path' => 'Caminho do Sendmail',
|
||||||
'sendmail_path_comment' => 'Por favor, especifique o caminho do programa sendmail.',
|
'sendmail_path_comment' => 'Por favor, especifique o caminho do programa sendmail.',
|
||||||
|
'mailgun' => 'Mailgun',
|
||||||
|
'mailgun_domain' => 'Domínio do Mailgun',
|
||||||
|
'mailgun_domain_comment' => 'Por favor, forneça o domínio do Mailgun.',
|
||||||
|
'mailgun_secret' => 'Mailgun Secret',
|
||||||
|
'mailgun_secret_comment' => 'Forneça sua chave de API do Mailgun.',
|
||||||
|
'mandrill' => 'Mandrill',
|
||||||
|
'mandrill_secret' => 'Mandrill Secret',
|
||||||
|
'mandrill_secret_comment' => 'Forneça sua chave de API do Mandrill',
|
||||||
],
|
],
|
||||||
'mail_templates' => [
|
'mail_templates' => [
|
||||||
'menu_label' => 'Modelos de E-mail',
|
'menu_label' => 'Templates de E-mail',
|
||||||
'menu_description' => 'Modificar os modelos de e-mail que são enviados para usuários e administradores.',
|
'menu_description' => 'Modificar os templates dos e-mails que são enviados para usuários e administradores.',
|
||||||
'new_template' => 'Novo modelo',
|
'new_template' => 'Novo template',
|
||||||
'new_layout' => 'Novo layout',
|
'new_layout' => 'Novo layout',
|
||||||
'template' => 'Modelo',
|
'template' => 'Template',
|
||||||
'templates' => 'Modelos',
|
'templates' => 'Templates',
|
||||||
'menu_layouts_label' => 'Layouts de E-mail',
|
'menu_layouts_label' => 'Layouts de E-mail',
|
||||||
'layout' => 'Layout',
|
'layout' => 'Layout',
|
||||||
'layouts' => 'Layouts',
|
'layouts' => 'Layouts',
|
||||||
'name' => 'Nome',
|
'name' => 'Nome',
|
||||||
'name_comment' => 'Nome exclusivo usado para se referir à este modelo',
|
'name_comment' => 'Nome exclusivo usado para se referir a este template',
|
||||||
'code' => 'Código',
|
'code' => 'Código',
|
||||||
'code_comment' => 'Código único usado para se referir à este modelo',
|
'code_comment' => 'Código exclusivo usado para se referir a este template',
|
||||||
'subject' => 'Assunto',
|
'subject' => 'Assunto',
|
||||||
'subject_comment' => 'Assunto da mensagem',
|
'subject_comment' => 'Assunto da mensagem',
|
||||||
'description' => 'Descrição',
|
'description' => 'Descrição',
|
||||||
|
|
@ -133,13 +151,13 @@ return [
|
||||||
'content_text' => 'Texto Simples',
|
'content_text' => 'Texto Simples',
|
||||||
'test_send' => 'Enviar mensagem de teste',
|
'test_send' => 'Enviar mensagem de teste',
|
||||||
'test_success' => 'Mensagem de teste enviada com sucesso.',
|
'test_success' => 'Mensagem de teste enviada com sucesso.',
|
||||||
'return' => 'Retornar à lista de modelos'
|
'return' => 'Retornar à lista de templates'
|
||||||
],
|
],
|
||||||
'install' => [
|
'install' => [
|
||||||
'project_label' => 'Anexar ao projeto',
|
'project_label' => 'Anexar ao projeto',
|
||||||
'plugin_label' => 'Instalar plugin',
|
'plugin_label' => 'Instalar plugin',
|
||||||
'missing_plugin_name' => 'Por favor, especifique um nome de plugin para instalar.',
|
'missing_plugin_name' => 'Por favor, especifique um nome de plugin para instalar.',
|
||||||
'install_completing' => 'Finalizando processo de instalação.',
|
'install_completing' => 'Finalizando processo de instalação',
|
||||||
'install_success' => 'O plugin foi instalado com sucesso.',
|
'install_success' => 'O plugin foi instalado com sucesso.',
|
||||||
],
|
],
|
||||||
'updates' => [
|
'updates' => [
|
||||||
|
|
@ -158,7 +176,9 @@ return [
|
||||||
'core_build_new' => 'Compilação :build',
|
'core_build_new' => 'Compilação :build',
|
||||||
'core_build_new_help' => 'Última versão está disponível.',
|
'core_build_new_help' => 'Última versão está disponível.',
|
||||||
'core_downloading' => 'Baixando arquivos do aplicativo',
|
'core_downloading' => 'Baixando arquivos do aplicativo',
|
||||||
'core_extracting' => 'Desempacotando arquivos de aplicativos',
|
'core_extracting' => 'Desempacotando arquivos do aplicativo',
|
||||||
|
'plugins' => 'Plugins',
|
||||||
|
'disabled' => 'Desabilitados',
|
||||||
'plugin_downloading' => 'Baixando o plugin: :name',
|
'plugin_downloading' => 'Baixando o plugin: :name',
|
||||||
'plugin_extracting' => 'Desempacotando o plugin: :name',
|
'plugin_extracting' => 'Desempacotando o plugin: :name',
|
||||||
'plugin_version_none' => 'Novo plugin',
|
'plugin_version_none' => 'Novo plugin',
|
||||||
|
|
@ -171,43 +191,43 @@ return [
|
||||||
'update_label' => 'Atualizar o software',
|
'update_label' => 'Atualizar o software',
|
||||||
'update_completing' => 'Finalizando processo de atualização',
|
'update_completing' => 'Finalizando processo de atualização',
|
||||||
'update_loading' => 'Carregando atualizações disponíveis...',
|
'update_loading' => 'Carregando atualizações disponíveis...',
|
||||||
'update_success' => 'O processo de atualização foi realizada com sucesso.',
|
'update_success' => 'O processo de atualização foi realizado com sucesso.',
|
||||||
'update_failed_label' => 'Falha na atualização',
|
'update_failed_label' => 'Falha na atualização',
|
||||||
'force_label' => 'Forçar atualização',
|
'force_label' => 'Forçar atualização',
|
||||||
'found' => [
|
'found' => [
|
||||||
'label' => 'Encontrado novas atualizações!',
|
'label' => 'Atualizações encontradas!',
|
||||||
'help' => 'Clique Atualizar o software para iniciar o processo de atualização.',
|
'help' => 'Clique Atualizar o software para iniciar o processo de atualização.',
|
||||||
],
|
],
|
||||||
'none' => [
|
'none' => [
|
||||||
'label' => 'Não há atualizações',
|
'label' => 'Nenhuma atualização',
|
||||||
'help' => 'Não há novas atualizações.',
|
'help' => 'Não há novas atualizações.',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'server' => [
|
'server' => [
|
||||||
'connect_error' => 'Erro ao conectar-se ao servidor.',
|
'connect_error' => 'Erro ao conectar-se com o servidor.',
|
||||||
'response_not_found' => 'O servidor de atualização não pôde ser encontrado.',
|
'response_not_found' => 'O servidor de atualização não pôde ser encontrado.',
|
||||||
'response_invalid' => 'Resposta inválida do servidor.',
|
'response_invalid' => 'Resposta inválida do servidor.',
|
||||||
'response_empty' => 'Resposta vazia a partir do servidor.',
|
'response_empty' => 'Resposta vazia do servidor.',
|
||||||
'file_error' => 'Servidor não conseguiu entregar o pacote.',
|
'file_error' => 'Servidor não conseguiu entregar o pacote.',
|
||||||
'file_corrupt' => 'Arquivo do servidor está corrompido.',
|
'file_corrupt' => 'Arquivo do servidor está corrompido.',
|
||||||
],
|
],
|
||||||
'behavior' => [
|
'behavior' => [
|
||||||
'missing_property' => 'Classe :class deve definir a $:property imóvel usado por:behavior comportamento.',
|
'missing_property' => 'Classe :class deve definir a propriedade $:property usada pelo :behavior behavior.',
|
||||||
],
|
],
|
||||||
'config' => [
|
'config' => [
|
||||||
'not_found' => 'Não foi possível localizar arquivos de configuração :file definido para :location.',
|
'not_found' => 'Não foi possível localizar o arquivo de configuração :file definido para :location.',
|
||||||
'required' => 'Configuração usada em :location deve fornecer um valor :property.',
|
'required' => 'Configuração usada em :location deve fornecer um valor :property.',
|
||||||
],
|
],
|
||||||
'zip' => [
|
'zip' => [
|
||||||
'extract_failed' => "Não foi possível extrair arquivo core ':file'.",
|
'extract_failed' => 'Não foi possível extrair arquivo do core ":file".',
|
||||||
],
|
],
|
||||||
'event_log' => [
|
'event_log' => [
|
||||||
'hint' => 'Este registro mostra a lista dos potenciais erros que ocorreram na aplicação, assim como as exceções e informações de depuração.',
|
'hint' => 'Este registro mostra a lista dos potenciais erros que ocorreram na aplicação, como exceções e informações de depuração.',
|
||||||
'menu_label' => 'Registro de Eventos',
|
'menu_label' => 'Registro de Eventos',
|
||||||
'menu_description' => 'Visualize as mensagens do sistema, com o tempo de registro e detalhes.',
|
'menu_description' => 'Visualize as mensagens do sistema, com horário e detalhes.',
|
||||||
'empty_link' => 'Registro de eventos vazio',
|
'empty_link' => 'Esvaziar registro de eventos',
|
||||||
'empty_loading' => 'Limpando registro de eventos...',
|
'empty_loading' => 'Esvaziando registro de eventos...',
|
||||||
'empty_success' => 'Registro de eventos limpo com sucesso.',
|
'empty_success' => 'Registro de eventos esvaziado com sucesso.',
|
||||||
'return_link' => 'Retornar ao registro de eventos',
|
'return_link' => 'Retornar ao registro de eventos',
|
||||||
'id' => 'ID',
|
'id' => 'ID',
|
||||||
'id_label' => 'ID do Evento',
|
'id_label' => 'ID do Evento',
|
||||||
|
|
@ -216,25 +236,27 @@ return [
|
||||||
'level' => 'Nível',
|
'level' => 'Nível',
|
||||||
],
|
],
|
||||||
'request_log' => [
|
'request_log' => [
|
||||||
'hint' => 'Este registro mostra a lista de requisições do navegador que requerem atenção. Por exemplo, se um usuário acessar uma página inexistente, será armazenado o registro nesta lista.',
|
'hint' => 'Este registro mostra uma lista de requisições que requerem atenção. Por exemplo, se um usuário solicitar uma página não encontrada, será registrado com o status 404.',
|
||||||
'menu_label' => 'Registro de Requisições',
|
'menu_label' => 'Registro de Requisições',
|
||||||
'menu_description' => 'Visualize requisições com problema na aplicação, como Página não encontrada (404).',
|
'menu_description' => 'Visualize requisições malsucedidas na aplicação, como Página não encontrada (404).',
|
||||||
'empty_link' => 'Registro de requisições vazio.',
|
'empty_link' => 'Esvaziar registro de requisições.',
|
||||||
'empty_loading' => 'Limpando registro de requisições...',
|
'empty_loading' => 'Esvaziando registro de requisições...',
|
||||||
'empty_success' => 'Registro de requisições limpo com sucesso.',
|
'empty_success' => 'Registro de requisições esvaziado com sucesso.',
|
||||||
'return_link' => 'Retornar ao registro de requisições',
|
'return_link' => 'Retornar ao registro de requisições',
|
||||||
'id' => 'ID',
|
'id' => 'ID',
|
||||||
'id_label' => 'ID',
|
'id_label' => 'ID do registro',
|
||||||
'count' => 'Contador',
|
'count' => 'Contador',
|
||||||
'referer' => 'Referentes',
|
'referer' => 'Referers',
|
||||||
'url' => 'URL',
|
'url' => 'URL',
|
||||||
'status_code' => 'Código',
|
'status_code' => 'Status',
|
||||||
],
|
],
|
||||||
'permissions' => [
|
'permissions' => [
|
||||||
|
'name' => 'System',
|
||||||
'manage_system_settings' => 'Gerenciar configurações do sistema',
|
'manage_system_settings' => 'Gerenciar configurações do sistema',
|
||||||
'manage_software_updates' => 'Gerenciar atualizações',
|
'manage_software_updates' => 'Gerenciar atualizações',
|
||||||
'manage_mail_templates' => 'Gerenciar modelos de e-mail',
|
'manage_mail_templates' => 'Gerenciar templates de e-mail',
|
||||||
|
'manage_mail_settings' => 'Gerenciar configurações de e-mail',
|
||||||
'manage_other_administrators' => 'Gerenciar outros administradores',
|
'manage_other_administrators' => 'Gerenciar outros administradores',
|
||||||
'view_the_dashboard' => 'Visualizar o painel'
|
'view_the_dashboard' => 'Visualizar o painel',
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
@ -13,61 +13,61 @@ return array(
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
"accepted" => "O :attribute deve ser aceito.",
|
'accepted' => ':attribute deve ser aceito.',
|
||||||
"active_url" => "O :attribute não é uma URL válida.",
|
'active_url' => ':attribute não é uma URL válida.',
|
||||||
"after" => "O :attribute deve ser uma data após :date.",
|
'after' => ':attribute deve ser uma data após :date.',
|
||||||
"alpha" => "O :attribute só pode conter letras.",
|
'alpha' => ':attribute só pode conter letras.',
|
||||||
"alpha_dash" => "O :attribute só pode conter letras, números e traços.",
|
'alpha_dash' => ':attribute só pode conter letras, números e traços.',
|
||||||
"alpha_num" => "O :attribute só pode conter letras e números.",
|
'alpha_num' => ':attribute só pode conter letras e números.',
|
||||||
"array" => "O :attribute deve ser uma matriz.",
|
'array' => ':attribute deve ser uma matriz.',
|
||||||
"before" => "O :attribute deve ser uma data antes :date.",
|
'before' => ':attribute deve ser uma data antes :date.',
|
||||||
"between" => array(
|
'between' => [
|
||||||
"numeric" => "O :attribute deve situar-se entre :min - :max.",
|
'numeric' => ':attribute deve situar-se entre :min e :max.',
|
||||||
"file" => "O :attribute deve situar-se entre :min - :max kilobytes.",
|
'file' => ':attribute deve ter entre :min e :max kilobytes.',
|
||||||
"string" => "O :attribute deve situar-se entre :min - :max carácteres.",
|
'string' => ':attribute deve ter entre :min e :max caracteres.',
|
||||||
"array" => "O :attribute tem de ter entre :min - :max itens.",
|
'array' => ':attribute deve ter entre :min e :max itens.',
|
||||||
),
|
],
|
||||||
"confirmed" => "O :attribute confirmação não corresponde.",
|
'confirmed' => 'A confirmação de :attribute não corresponde.',
|
||||||
"date" => "O :attribute não é uma data válida.",
|
'date' => ':attribute não é uma data válida.',
|
||||||
"date_format" => "O :attribute não coincide com o formato :format.",
|
'date_format' => ':attribute não coincide com o formato :format.',
|
||||||
"different" => "O :attribute e :other deve ser diferente.",
|
'different' => ':attribute e :other devem ser diferentes.',
|
||||||
"digits" => "O :attribute deve ser :digits dígitos.",
|
'digits' => ':attribute deve ser :digits dígitos.',
|
||||||
"digits_between" => "O :attribute deve situar-se entre :min e :max dígitos.",
|
'digits_between' => ':attribute deve ter entre :min e :max dígitos.',
|
||||||
"email" => "O :attribute formato é inválido.",
|
'email' => 'Formato de :attribute é inválido.',
|
||||||
"exists" => "O :attribute selecioado é inválido.",
|
'exists' => ':attribute selecionado é inválido.',
|
||||||
"image" => "O :attribute deve ser uma imagem.",
|
'image' => ':attribute deve ser uma imagem.',
|
||||||
"in" => "O :attribute selecioado é inválido.",
|
'in' => ':attribute selecionado é inválido.',
|
||||||
"integer" => "O :attribute deve ser um número inteiro.",
|
'integer' => ':attribute deve ser um número inteiro.',
|
||||||
"ip" => "O :attribute deve ser um endereço IP válido.",
|
'ip' => ':attribute deve ser um endereço IP válido.',
|
||||||
"max" => array(
|
'max' => [
|
||||||
"numeric" => "O :attribute não pode ser maior do que :max.",
|
'numeric' => ':attribute não pode ser maior do que :max.',
|
||||||
"file" => "O :attribute não pode ser maior do que :max kilobytes.",
|
'file' => ':attribute não pode ser maior do que :max kilobytes.',
|
||||||
"string" => "O :attribute não pode ser maior do que :max carácteres.",
|
'string' => ':attribute não pode ser maior do que :max caracteres.',
|
||||||
"array" => "O :attribute não podem ter mais do que :max itens.",
|
'array' => ':attribute não pode ter mais que :max itens.',
|
||||||
),
|
],
|
||||||
"mimes" => "O :attribute deve ser um arquivo do tipo: :values.",
|
'mimes' => ':attribute deve ser um arquivo do tipo: :values.',
|
||||||
"min" => array(
|
'min' => [
|
||||||
"numeric" => "O :attribute deve ser de pelo menos :min.",
|
'numeric' => ':attribute deve ser no mínimo :min.',
|
||||||
"file" => "O :attribute deve ser de pelo menos :min kilobytes.",
|
'file' => ':attribute deve ter pelo menos :min kilobytes.',
|
||||||
"string" => "O :attribute deve ser de pelo menos :min carácteres.",
|
'string' => ':attribute deve ter pelo menos :min caracteres.',
|
||||||
"array" => "O :attribute deve ter pelo menos :min itens.",
|
'array' => ':attribute deve ter pelo menos :min itens.',
|
||||||
),
|
],
|
||||||
"not_in" => "O :attribute selecionado é inválido.",
|
'not_in' => ':attribute selecionado é inválido.',
|
||||||
"numeric" => "O :attribute deve ser um número.",
|
'numeric' => ':attribute deve ser um número.',
|
||||||
"regex" => "O :attribute formato é inválido.",
|
'regex' => 'Formato de :attribute é inválido.',
|
||||||
"required" => "O campo :attribute é obrigatório.",
|
'required' => 'O campo :attribute é obrigatório.',
|
||||||
"required_if" => "O campo :attribute é obrigatório quando :other é :value.",
|
'required_if' => 'O campo :attribute é obrigatório quando :other é :value.',
|
||||||
"required_with" => "O campo :attribute é obrigatório quando :values está presente.",
|
'required_with' => 'O campo :attribute é obrigatório quando :values está presente.',
|
||||||
"required_without" => "O campo :attribute é obrigatório quando :values não está presente.",
|
'required_without' => 'O campo :attribute é obrigatório quando :values não está presente.',
|
||||||
"same" => "O campo :attribute e :other devem corresponder.",
|
'same' => 'O campo :attribute e :other devem corresponder.',
|
||||||
"size" => array(
|
'size' => [
|
||||||
"numeric" => "O :attribute deve ser :size.",
|
'numeric' => ':attribute deve ser :size.',
|
||||||
"file" => "O :attribute deve ser :size kilobytes.",
|
'file' => ':attribute deve ser :size kilobytes.',
|
||||||
"string" => "O :attribute deve ser :size carácteres.",
|
'string' => ':attribute deve ter :size caracteres.',
|
||||||
"array" => "O :attribute deve conter :size itens.",
|
'array' => ':attribute deve conter :size itens.',
|
||||||
),
|
],
|
||||||
"unique" => "O :attribute já foi utilizado.",
|
'unique' => ':attribute já está sendo utilizado.',
|
||||||
"url" => "O :attribute formato é inválido.",
|
'url' => 'Formato de :attribute é inválido.',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
@ -75,12 +75,12 @@ return array(
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| Here you may specify custom validation messages for attributes using the
|
| Here you may specify custom validation messages for attributes using the
|
||||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
| convention 'attribute.rule' to name the lines. This makes it quick to
|
||||||
| specify a specific custom language line for a given attribute rule.
|
| specify a specific custom language line for a given attribute rule.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'custom' => array(),
|
'custom' => [],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
@ -89,10 +89,10 @@ return array(
|
||||||
|
|
|
|
||||||
| The following language lines are used to swap attribute place-holders
|
| The following language lines are used to swap attribute place-holders
|
||||||
| with something more reader friendly such as E-Mail Address instead
|
| with something more reader friendly such as E-Mail Address instead
|
||||||
| of "email". This simply helps us make messages a little cleaner.
|
| of 'email'. This simply helps us make messages a little cleaner.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'attributes' => array(),
|
'attributes' => [],
|
||||||
|
|
||||||
);
|
];
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ return [
|
||||||
'ro' => 'Romana',
|
'ro' => 'Romana',
|
||||||
'pt-br' => 'Portugheza (Brazilia)',
|
'pt-br' => 'Portugheza (Brazilia)',
|
||||||
'fa' => 'Persian',
|
'fa' => 'Persian',
|
||||||
|
'nb-no' => 'Norvegiană (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Nu se poate crea directorul: :name",
|
'create_fail' => "Nu se poate crea directorul: :name",
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ return [
|
||||||
'se' => 'Swedish',
|
'se' => 'Swedish',
|
||||||
'sk' => 'Slovak (Slovakia)',
|
'sk' => 'Slovak (Slovakia)',
|
||||||
'tr' => 'Turkish'
|
'tr' => 'Turkish'
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => 'Невозможно создать директорию: :name',
|
'create_fail' => 'Невозможно создать директорию: :name',
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ return [
|
||||||
'se' => 'Swedish',
|
'se' => 'Swedish',
|
||||||
'sk' => 'Slovak (Slovakia)',
|
'sk' => 'Slovak (Slovakia)',
|
||||||
'tr' => 'Turkish'
|
'tr' => 'Turkish'
|
||||||
|
'nb-no' => 'Norska (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Kunde inte skapa mapp: :name",
|
'create_fail' => "Kunde inte skapa mapp: :name",
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@ return [
|
||||||
'ro' => 'Română (România)',
|
'ro' => 'Română (România)',
|
||||||
'ru' => 'Русский (Россия - Russia)',
|
'ru' => 'Русский (Россия - Russia)',
|
||||||
'se' => 'Svenska (Sverige)',
|
'se' => 'Svenska (Sverige)',
|
||||||
'tr' => 'Türkçe (Türkiye)'
|
'tr' => 'Türkçe (Türkiye)',
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => "Klasör oluşturulamıyor: :name"
|
'create_fail' => "Klasör oluşturulamıyor: :name"
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,8 @@ return [
|
||||||
'se' => 'Swedish',
|
'se' => 'Swedish',
|
||||||
'sk' => 'Slovak (Slovakia)',
|
'sk' => 'Slovak (Slovakia)',
|
||||||
'tr' => 'Turkish',
|
'tr' => 'Turkish',
|
||||||
'zh-cn' => 'Chinese (China)'
|
'zh-cn' => 'Chinese (China)',
|
||||||
|
'nb-no' => 'Norwegian (Bokmål)'
|
||||||
],
|
],
|
||||||
'directory' => [
|
'directory' => [
|
||||||
'create_fail' => '不能创建目录: :name'
|
'create_fail' => '不能创建目录: :name'
|
||||||
|
|
@ -226,8 +227,8 @@ return [
|
||||||
'hint' => '日志显示了程序中的潜在错误, 比如异常和调试信息.',
|
'hint' => '日志显示了程序中的潜在错误, 比如异常和调试信息.',
|
||||||
'menu_label' => '事件日志',
|
'menu_label' => '事件日志',
|
||||||
'menu_description' => '查看系统日志信息, 包括时间和详细信息.',
|
'menu_description' => '查看系统日志信息, 包括时间和详细信息.',
|
||||||
'empty_link' => '空事件日志',
|
'empty_link' => '清空事件日志',
|
||||||
'empty_loading' => '空事件日志...',
|
'empty_loading' => '清空事件日志...',
|
||||||
'empty_success' => '成功清空时间日志.',
|
'empty_success' => '成功清空时间日志.',
|
||||||
'return_link' => '返回时间日志',
|
'return_link' => '返回时间日志',
|
||||||
'id' => 'ID',
|
'id' => 'ID',
|
||||||
|
|
@ -240,8 +241,8 @@ return [
|
||||||
'hint' => '这个日志显示了需要注意的浏览器请求. 比如如果一个访问者打开一个没有的CMS页面, 一条返回状态404的记录被创建.',
|
'hint' => '这个日志显示了需要注意的浏览器请求. 比如如果一个访问者打开一个没有的CMS页面, 一条返回状态404的记录被创建.',
|
||||||
'menu_label' => '请求日志',
|
'menu_label' => '请求日志',
|
||||||
'menu_description' => '查看坏的或者重定向的请求, 比如页面找不到(404).',
|
'menu_description' => '查看坏的或者重定向的请求, 比如页面找不到(404).',
|
||||||
'empty_link' => '空请求日志',
|
'empty_link' => '清空请求日志',
|
||||||
'empty_loading' => '空请求日志...',
|
'empty_loading' => '清空请求日志...',
|
||||||
'empty_success' => '成功清空请求日志.',
|
'empty_success' => '成功清空请求日志.',
|
||||||
'return_link' => '返回请求日志',
|
'return_link' => '返回请求日志',
|
||||||
'id' => 'ID',
|
'id' => 'ID',
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: affix.js v3.1.0
|
* Bootstrap: affix.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#affix
|
* http://getbootstrap.com/javascript/#affix
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -15,28 +15,54 @@
|
||||||
|
|
||||||
var Affix = function (element, options) {
|
var Affix = function (element, options) {
|
||||||
this.options = $.extend({}, Affix.DEFAULTS, options)
|
this.options = $.extend({}, Affix.DEFAULTS, options)
|
||||||
this.$window = $(window)
|
|
||||||
|
this.$target = $(this.options.target)
|
||||||
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
||||||
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
||||||
|
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.affixed =
|
this.affixed = null
|
||||||
this.unpin =
|
this.unpin = null
|
||||||
this.pinnedOffset = null
|
this.pinnedOffset = null
|
||||||
|
|
||||||
this.checkPosition()
|
this.checkPosition()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Affix.VERSION = '3.3.4'
|
||||||
|
|
||||||
Affix.RESET = 'affix affix-top affix-bottom'
|
Affix.RESET = 'affix affix-top affix-bottom'
|
||||||
|
|
||||||
Affix.DEFAULTS = {
|
Affix.DEFAULTS = {
|
||||||
offset: 0
|
offset: 0,
|
||||||
|
target: window
|
||||||
|
}
|
||||||
|
|
||||||
|
Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
|
||||||
|
var scrollTop = this.$target.scrollTop()
|
||||||
|
var position = this.$element.offset()
|
||||||
|
var targetHeight = this.$target.height()
|
||||||
|
|
||||||
|
if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
|
||||||
|
|
||||||
|
if (this.affixed == 'bottom') {
|
||||||
|
if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
|
||||||
|
return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
|
||||||
|
}
|
||||||
|
|
||||||
|
var initializing = this.affixed == null
|
||||||
|
var colliderTop = initializing ? scrollTop : position.top
|
||||||
|
var colliderHeight = initializing ? targetHeight : height
|
||||||
|
|
||||||
|
if (offsetTop != null && scrollTop <= offsetTop) return 'top'
|
||||||
|
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
Affix.prototype.getPinnedOffset = function () {
|
Affix.prototype.getPinnedOffset = function () {
|
||||||
if (this.pinnedOffset) return this.pinnedOffset
|
if (this.pinnedOffset) return this.pinnedOffset
|
||||||
this.$element.removeClass(Affix.RESET).addClass('affix')
|
this.$element.removeClass(Affix.RESET).addClass('affix')
|
||||||
var scrollTop = this.$window.scrollTop()
|
var scrollTop = this.$target.scrollTop()
|
||||||
var position = this.$element.offset()
|
var position = this.$element.offset()
|
||||||
return (this.pinnedOffset = position.top - scrollTop)
|
return (this.pinnedOffset = position.top - scrollTop)
|
||||||
}
|
}
|
||||||
|
|
@ -48,25 +74,20 @@
|
||||||
Affix.prototype.checkPosition = function () {
|
Affix.prototype.checkPosition = function () {
|
||||||
if (!this.$element.is(':visible')) return
|
if (!this.$element.is(':visible')) return
|
||||||
|
|
||||||
var scrollHeight = $(document).height()
|
var height = this.$element.height()
|
||||||
var scrollTop = this.$window.scrollTop()
|
|
||||||
var position = this.$element.offset()
|
|
||||||
var offset = this.options.offset
|
var offset = this.options.offset
|
||||||
var offsetTop = offset.top
|
var offsetTop = offset.top
|
||||||
var offsetBottom = offset.bottom
|
var offsetBottom = offset.bottom
|
||||||
|
var scrollHeight = $(document.body).height()
|
||||||
if (this.affixed == 'top') position.top += scrollTop
|
|
||||||
|
|
||||||
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
||||||
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
||||||
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
||||||
|
|
||||||
var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
|
var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
|
||||||
offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
|
|
||||||
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
|
|
||||||
|
|
||||||
if (this.affixed === affix) return
|
if (this.affixed != affix) {
|
||||||
if (this.unpin) this.$element.css('top', '')
|
if (this.unpin != null) this.$element.css('top', '')
|
||||||
|
|
||||||
var affixType = 'affix' + (affix ? '-' + affix : '')
|
var affixType = 'affix' + (affix ? '-' + affix : '')
|
||||||
var e = $.Event(affixType + '.bs.affix')
|
var e = $.Event(affixType + '.bs.affix')
|
||||||
|
|
@ -81,10 +102,13 @@
|
||||||
this.$element
|
this.$element
|
||||||
.removeClass(Affix.RESET)
|
.removeClass(Affix.RESET)
|
||||||
.addClass(affixType)
|
.addClass(affixType)
|
||||||
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
.trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
|
||||||
|
}
|
||||||
|
|
||||||
if (affix == 'bottom') {
|
if (affix == 'bottom') {
|
||||||
this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
|
this.$element.offset({
|
||||||
|
top: scrollHeight - height - offsetBottom
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,9 +116,7 @@
|
||||||
// AFFIX PLUGIN DEFINITION
|
// AFFIX PLUGIN DEFINITION
|
||||||
// =======================
|
// =======================
|
||||||
|
|
||||||
var old = $.fn.affix
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.affix = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.affix')
|
var data = $this.data('bs.affix')
|
||||||
|
|
@ -105,6 +127,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.affix
|
||||||
|
|
||||||
|
$.fn.affix = Plugin
|
||||||
$.fn.affix.Constructor = Affix
|
$.fn.affix.Constructor = Affix
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -127,10 +152,10 @@
|
||||||
|
|
||||||
data.offset = data.offset || {}
|
data.offset = data.offset || {}
|
||||||
|
|
||||||
if (data.offsetBottom) data.offset.bottom = data.offsetBottom
|
if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
|
||||||
if (data.offsetTop) data.offset.top = data.offsetTop
|
if (data.offsetTop != null) data.offset.top = data.offsetTop
|
||||||
|
|
||||||
$spy.affix(data)
|
Plugin.call($spy, data)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: alert.js v3.1.0
|
* Bootstrap: alert.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#alerts
|
* http://getbootstrap.com/javascript/#alerts
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -18,6 +18,10 @@
|
||||||
$(el).on('click', dismiss, this.close)
|
$(el).on('click', dismiss, this.close)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Alert.VERSION = '3.3.4'
|
||||||
|
|
||||||
|
Alert.TRANSITION_DURATION = 150
|
||||||
|
|
||||||
Alert.prototype.close = function (e) {
|
Alert.prototype.close = function (e) {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var selector = $this.attr('data-target')
|
var selector = $this.attr('data-target')
|
||||||
|
|
@ -32,7 +36,7 @@
|
||||||
if (e) e.preventDefault()
|
if (e) e.preventDefault()
|
||||||
|
|
||||||
if (!$parent.length) {
|
if (!$parent.length) {
|
||||||
$parent = $this.hasClass('alert') ? $this : $this.parent()
|
$parent = $this.closest('.alert')
|
||||||
}
|
}
|
||||||
|
|
||||||
$parent.trigger(e = $.Event('close.bs.alert'))
|
$parent.trigger(e = $.Event('close.bs.alert'))
|
||||||
|
|
@ -42,13 +46,14 @@
|
||||||
$parent.removeClass('in')
|
$parent.removeClass('in')
|
||||||
|
|
||||||
function removeElement() {
|
function removeElement() {
|
||||||
$parent.trigger('closed.bs.alert').remove()
|
// detach from parent, fire event then clean up data
|
||||||
|
$parent.detach().trigger('closed.bs.alert').remove()
|
||||||
}
|
}
|
||||||
|
|
||||||
$.support.transition && $parent.hasClass('fade') ?
|
$.support.transition && $parent.hasClass('fade') ?
|
||||||
$parent
|
$parent
|
||||||
.one($.support.transition.end, removeElement)
|
.one('bsTransitionEnd', removeElement)
|
||||||
.emulateTransitionEnd(150) :
|
.emulateTransitionEnd(Alert.TRANSITION_DURATION) :
|
||||||
removeElement()
|
removeElement()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,9 +61,7 @@
|
||||||
// ALERT PLUGIN DEFINITION
|
// ALERT PLUGIN DEFINITION
|
||||||
// =======================
|
// =======================
|
||||||
|
|
||||||
var old = $.fn.alert
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.alert = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.alert')
|
var data = $this.data('bs.alert')
|
||||||
|
|
@ -68,6 +71,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.alert
|
||||||
|
|
||||||
|
$.fn.alert = Plugin
|
||||||
$.fn.alert.Constructor = Alert
|
$.fn.alert.Constructor = Alert
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: button.js v3.1.0
|
* Bootstrap: button.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#buttons
|
* http://getbootstrap.com/javascript/#buttons
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Button.VERSION = '3.3.4'
|
||||||
|
|
||||||
Button.DEFAULTS = {
|
Button.DEFAULTS = {
|
||||||
loadingText: 'loading...'
|
loadingText: 'loading...'
|
||||||
}
|
}
|
||||||
|
|
@ -31,12 +33,12 @@
|
||||||
|
|
||||||
state = state + 'Text'
|
state = state + 'Text'
|
||||||
|
|
||||||
if (!data.resetText) $el.data('resetText', $el[val]())
|
if (data.resetText == null) $el.data('resetText', $el[val]())
|
||||||
|
|
||||||
$el[val](data[state] || this.options[state])
|
|
||||||
|
|
||||||
// push to event loop to allow forms to submit
|
// push to event loop to allow forms to submit
|
||||||
setTimeout($.proxy(function () {
|
setTimeout($.proxy(function () {
|
||||||
|
$el[val](data[state] == null ? this.options[state] : data[state])
|
||||||
|
|
||||||
if (state == 'loadingText') {
|
if (state == 'loadingText') {
|
||||||
this.isLoading = true
|
this.isLoading = true
|
||||||
$el.addClass(d).attr(d, d)
|
$el.addClass(d).attr(d, d)
|
||||||
|
|
@ -58,6 +60,8 @@
|
||||||
else $parent.find('.active').removeClass('active')
|
else $parent.find('.active').removeClass('active')
|
||||||
}
|
}
|
||||||
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
||||||
|
} else {
|
||||||
|
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed) this.$element.toggleClass('active')
|
if (changed) this.$element.toggleClass('active')
|
||||||
|
|
@ -67,9 +71,7 @@
|
||||||
// BUTTON PLUGIN DEFINITION
|
// BUTTON PLUGIN DEFINITION
|
||||||
// ========================
|
// ========================
|
||||||
|
|
||||||
var old = $.fn.button
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.button = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.button')
|
var data = $this.data('bs.button')
|
||||||
|
|
@ -82,6 +84,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.button
|
||||||
|
|
||||||
|
$.fn.button = Plugin
|
||||||
$.fn.button.Constructor = Button
|
$.fn.button.Constructor = Button
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -97,11 +102,15 @@
|
||||||
// BUTTON DATA-API
|
// BUTTON DATA-API
|
||||||
// ===============
|
// ===============
|
||||||
|
|
||||||
$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
|
$(document)
|
||||||
|
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
||||||
var $btn = $(e.target)
|
var $btn = $(e.target)
|
||||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
||||||
$btn.button('toggle')
|
Plugin.call($btn, 'toggle')
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
})
|
})
|
||||||
|
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
||||||
|
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
||||||
|
})
|
||||||
|
|
||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: carousel.js v3.1.0
|
* Bootstrap: carousel.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#carousel
|
* http://getbootstrap.com/javascript/#carousel
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -17,21 +17,39 @@
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.$indicators = this.$element.find('.carousel-indicators')
|
this.$indicators = this.$element.find('.carousel-indicators')
|
||||||
this.options = options
|
this.options = options
|
||||||
this.paused =
|
this.paused = null
|
||||||
this.sliding =
|
this.sliding = null
|
||||||
this.interval =
|
this.interval = null
|
||||||
this.$active =
|
this.$active = null
|
||||||
this.$items = null
|
this.$items = null
|
||||||
|
|
||||||
this.options.pause == 'hover' && this.$element
|
this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
|
||||||
.on('mouseenter', $.proxy(this.pause, this))
|
|
||||||
.on('mouseleave', $.proxy(this.cycle, this))
|
this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
|
||||||
|
.on('mouseenter.bs.carousel', $.proxy(this.pause, this))
|
||||||
|
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Carousel.VERSION = '3.3.4'
|
||||||
|
|
||||||
|
Carousel.TRANSITION_DURATION = 600
|
||||||
|
|
||||||
Carousel.DEFAULTS = {
|
Carousel.DEFAULTS = {
|
||||||
interval: 5000,
|
interval: 5000,
|
||||||
pause: 'hover',
|
pause: 'hover',
|
||||||
wrap: true
|
wrap: true,
|
||||||
|
keyboard: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Carousel.prototype.keydown = function (e) {
|
||||||
|
if (/input|textarea/i.test(e.target.tagName)) return
|
||||||
|
switch (e.which) {
|
||||||
|
case 37: this.prev(); break
|
||||||
|
case 39: this.next(); break
|
||||||
|
default: return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.prototype.cycle = function (e) {
|
Carousel.prototype.cycle = function (e) {
|
||||||
|
|
@ -46,23 +64,31 @@
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.prototype.getActiveIndex = function () {
|
Carousel.prototype.getItemIndex = function (item) {
|
||||||
this.$active = this.$element.find('.item.active')
|
this.$items = item.parent().children('.item')
|
||||||
this.$items = this.$active.parent().children()
|
return this.$items.index(item || this.$active)
|
||||||
|
}
|
||||||
|
|
||||||
return this.$items.index(this.$active)
|
Carousel.prototype.getItemForDirection = function (direction, active) {
|
||||||
|
var activeIndex = this.getItemIndex(active)
|
||||||
|
var willWrap = (direction == 'prev' && activeIndex === 0)
|
||||||
|
|| (direction == 'next' && activeIndex == (this.$items.length - 1))
|
||||||
|
if (willWrap && !this.options.wrap) return active
|
||||||
|
var delta = direction == 'prev' ? -1 : 1
|
||||||
|
var itemIndex = (activeIndex + delta) % this.$items.length
|
||||||
|
return this.$items.eq(itemIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.prototype.to = function (pos) {
|
Carousel.prototype.to = function (pos) {
|
||||||
var that = this
|
var that = this
|
||||||
var activeIndex = this.getActiveIndex()
|
var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
|
||||||
|
|
||||||
if (pos > (this.$items.length - 1) || pos < 0) return
|
if (pos > (this.$items.length - 1) || pos < 0) return
|
||||||
|
|
||||||
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
|
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
|
||||||
if (activeIndex == pos) return this.pause().cycle()
|
if (activeIndex == pos) return this.pause().cycle()
|
||||||
|
|
||||||
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
|
return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.prototype.pause = function (e) {
|
Carousel.prototype.pause = function (e) {
|
||||||
|
|
@ -90,22 +116,20 @@
|
||||||
|
|
||||||
Carousel.prototype.slide = function (type, next) {
|
Carousel.prototype.slide = function (type, next) {
|
||||||
var $active = this.$element.find('.item.active')
|
var $active = this.$element.find('.item.active')
|
||||||
var $next = next || $active[type]()
|
var $next = next || this.getItemForDirection(type, $active)
|
||||||
var isCycling = this.interval
|
var isCycling = this.interval
|
||||||
var direction = type == 'next' ? 'left' : 'right'
|
var direction = type == 'next' ? 'left' : 'right'
|
||||||
var fallback = type == 'next' ? 'first' : 'last'
|
|
||||||
var that = this
|
var that = this
|
||||||
|
|
||||||
if (!$next.length) {
|
if ($next.hasClass('active')) return (this.sliding = false)
|
||||||
if (!this.options.wrap) return
|
|
||||||
$next = this.$element.find('.item')[fallback]()
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($next.hasClass('active')) return this.sliding = false
|
var relatedTarget = $next[0]
|
||||||
|
var slideEvent = $.Event('slide.bs.carousel', {
|
||||||
var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
|
relatedTarget: relatedTarget,
|
||||||
this.$element.trigger(e)
|
direction: direction
|
||||||
if (e.isDefaultPrevented()) return
|
})
|
||||||
|
this.$element.trigger(slideEvent)
|
||||||
|
if (slideEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
this.sliding = true
|
this.sliding = true
|
||||||
|
|
||||||
|
|
@ -113,30 +137,31 @@
|
||||||
|
|
||||||
if (this.$indicators.length) {
|
if (this.$indicators.length) {
|
||||||
this.$indicators.find('.active').removeClass('active')
|
this.$indicators.find('.active').removeClass('active')
|
||||||
this.$element.one('slid.bs.carousel', function () {
|
var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
|
||||||
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
|
|
||||||
$nextIndicator && $nextIndicator.addClass('active')
|
$nextIndicator && $nextIndicator.addClass('active')
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
|
||||||
if ($.support.transition && this.$element.hasClass('slide')) {
|
if ($.support.transition && this.$element.hasClass('slide')) {
|
||||||
$next.addClass(type)
|
$next.addClass(type)
|
||||||
$next[0].offsetWidth // force reflow
|
$next[0].offsetWidth // force reflow
|
||||||
$active.addClass(direction)
|
$active.addClass(direction)
|
||||||
$next.addClass(direction)
|
$next.addClass(direction)
|
||||||
$active
|
$active
|
||||||
.one($.support.transition.end, function () {
|
.one('bsTransitionEnd', function () {
|
||||||
$next.removeClass([type, direction].join(' ')).addClass('active')
|
$next.removeClass([type, direction].join(' ')).addClass('active')
|
||||||
$active.removeClass(['active', direction].join(' '))
|
$active.removeClass(['active', direction].join(' '))
|
||||||
that.sliding = false
|
that.sliding = false
|
||||||
setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
|
setTimeout(function () {
|
||||||
|
that.$element.trigger(slidEvent)
|
||||||
|
}, 0)
|
||||||
})
|
})
|
||||||
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
.emulateTransitionEnd(Carousel.TRANSITION_DURATION)
|
||||||
} else {
|
} else {
|
||||||
$active.removeClass('active')
|
$active.removeClass('active')
|
||||||
$next.addClass('active')
|
$next.addClass('active')
|
||||||
this.sliding = false
|
this.sliding = false
|
||||||
this.$element.trigger('slid.bs.carousel')
|
this.$element.trigger(slidEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
isCycling && this.cycle()
|
isCycling && this.cycle()
|
||||||
|
|
@ -148,9 +173,7 @@
|
||||||
// CAROUSEL PLUGIN DEFINITION
|
// CAROUSEL PLUGIN DEFINITION
|
||||||
// ==========================
|
// ==========================
|
||||||
|
|
||||||
var old = $.fn.carousel
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.carousel = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.carousel')
|
var data = $this.data('bs.carousel')
|
||||||
|
|
@ -164,6 +187,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.carousel
|
||||||
|
|
||||||
|
$.fn.carousel = Plugin
|
||||||
$.fn.carousel.Constructor = Carousel
|
$.fn.carousel.Constructor = Carousel
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -179,26 +205,32 @@
|
||||||
// CAROUSEL DATA-API
|
// CAROUSEL DATA-API
|
||||||
// =================
|
// =================
|
||||||
|
|
||||||
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
var clickHandler = function (e) {
|
||||||
var $this = $(this), href
|
var href
|
||||||
|
var $this = $(this)
|
||||||
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
||||||
|
if (!$target.hasClass('carousel')) return
|
||||||
var options = $.extend({}, $target.data(), $this.data())
|
var options = $.extend({}, $target.data(), $this.data())
|
||||||
var slideIndex = $this.attr('data-slide-to')
|
var slideIndex = $this.attr('data-slide-to')
|
||||||
if (slideIndex) options.interval = false
|
if (slideIndex) options.interval = false
|
||||||
|
|
||||||
$target.carousel(options)
|
Plugin.call($target, options)
|
||||||
|
|
||||||
if (slideIndex = $this.attr('data-slide-to')) {
|
if (slideIndex) {
|
||||||
$target.data('bs.carousel').to(slideIndex)
|
$target.data('bs.carousel').to(slideIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
})
|
}
|
||||||
|
|
||||||
|
$(document)
|
||||||
|
.on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
|
||||||
|
.on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
|
||||||
|
|
||||||
$(window).on('load', function () {
|
$(window).on('load', function () {
|
||||||
$('[data-ride="carousel"]').each(function () {
|
$('[data-ride="carousel"]').each(function () {
|
||||||
var $carousel = $(this)
|
var $carousel = $(this)
|
||||||
$carousel.carousel($carousel.data())
|
Plugin.call($carousel, $carousel.data())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: collapse.js v3.1.0
|
* Bootstrap: collapse.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#collapse
|
* http://getbootstrap.com/javascript/#collapse
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -16,12 +16,23 @@
|
||||||
var Collapse = function (element, options) {
|
var Collapse = function (element, options) {
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.options = $.extend({}, Collapse.DEFAULTS, options)
|
this.options = $.extend({}, Collapse.DEFAULTS, options)
|
||||||
|
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
|
||||||
|
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
|
||||||
this.transitioning = null
|
this.transitioning = null
|
||||||
|
|
||||||
if (this.options.parent) this.$parent = $(this.options.parent)
|
if (this.options.parent) {
|
||||||
|
this.$parent = this.getParent()
|
||||||
|
} else {
|
||||||
|
this.addAriaAndCollapsedClass(this.$element, this.$trigger)
|
||||||
|
}
|
||||||
|
|
||||||
if (this.options.toggle) this.toggle()
|
if (this.options.toggle) this.toggle()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collapse.VERSION = '3.3.4'
|
||||||
|
|
||||||
|
Collapse.TRANSITION_DURATION = 350
|
||||||
|
|
||||||
Collapse.DEFAULTS = {
|
Collapse.DEFAULTS = {
|
||||||
toggle: true
|
toggle: true
|
||||||
}
|
}
|
||||||
|
|
@ -34,35 +45,43 @@
|
||||||
Collapse.prototype.show = function () {
|
Collapse.prototype.show = function () {
|
||||||
if (this.transitioning || this.$element.hasClass('in')) return
|
if (this.transitioning || this.$element.hasClass('in')) return
|
||||||
|
|
||||||
|
var activesData
|
||||||
|
var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
|
||||||
|
|
||||||
|
if (actives && actives.length) {
|
||||||
|
activesData = actives.data('bs.collapse')
|
||||||
|
if (activesData && activesData.transitioning) return
|
||||||
|
}
|
||||||
|
|
||||||
var startEvent = $.Event('show.bs.collapse')
|
var startEvent = $.Event('show.bs.collapse')
|
||||||
this.$element.trigger(startEvent)
|
this.$element.trigger(startEvent)
|
||||||
if (startEvent.isDefaultPrevented()) return
|
if (startEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
var actives = this.$parent && this.$parent.find('> .panel > .in')
|
|
||||||
|
|
||||||
if (actives && actives.length) {
|
if (actives && actives.length) {
|
||||||
var hasData = actives.data('bs.collapse')
|
Plugin.call(actives, 'hide')
|
||||||
if (hasData && hasData.transitioning) return
|
activesData || actives.data('bs.collapse', null)
|
||||||
actives.collapse('hide')
|
|
||||||
hasData || actives.data('bs.collapse', null)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var dimension = this.dimension()
|
var dimension = this.dimension()
|
||||||
|
|
||||||
this.$element
|
this.$element
|
||||||
.removeClass('collapse')
|
.removeClass('collapse')
|
||||||
.addClass('collapsing')
|
.addClass('collapsing')[dimension](0)
|
||||||
[dimension](0)
|
.attr('aria-expanded', true)
|
||||||
|
|
||||||
|
this.$trigger
|
||||||
|
.removeClass('collapsed')
|
||||||
|
.attr('aria-expanded', true)
|
||||||
|
|
||||||
this.transitioning = 1
|
this.transitioning = 1
|
||||||
|
|
||||||
var complete = function () {
|
var complete = function () {
|
||||||
this.$element
|
this.$element
|
||||||
.removeClass('collapsing')
|
.removeClass('collapsing')
|
||||||
.addClass('collapse in')
|
.addClass('collapse in')[dimension]('')
|
||||||
[dimension]('auto')
|
|
||||||
this.transitioning = 0
|
this.transitioning = 0
|
||||||
this.$element.trigger('shown.bs.collapse')
|
this.$element
|
||||||
|
.trigger('shown.bs.collapse')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$.support.transition) return complete.call(this)
|
if (!$.support.transition) return complete.call(this)
|
||||||
|
|
@ -70,9 +89,8 @@
|
||||||
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
|
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
|
||||||
|
|
||||||
this.$element
|
this.$element
|
||||||
.one($.support.transition.end, $.proxy(complete, this))
|
.one('bsTransitionEnd', $.proxy(complete, this))
|
||||||
.emulateTransitionEnd(350)
|
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
|
||||||
[dimension](this.$element[0][scrollSize])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Collapse.prototype.hide = function () {
|
Collapse.prototype.hide = function () {
|
||||||
|
|
@ -84,55 +102,85 @@
|
||||||
|
|
||||||
var dimension = this.dimension()
|
var dimension = this.dimension()
|
||||||
|
|
||||||
this.$element
|
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
|
||||||
[dimension](this.$element[dimension]())
|
|
||||||
[0].offsetHeight
|
|
||||||
|
|
||||||
this.$element
|
this.$element
|
||||||
.addClass('collapsing')
|
.addClass('collapsing')
|
||||||
.removeClass('collapse')
|
.removeClass('collapse in')
|
||||||
.removeClass('in')
|
.attr('aria-expanded', false)
|
||||||
|
|
||||||
|
this.$trigger
|
||||||
|
.addClass('collapsed')
|
||||||
|
.attr('aria-expanded', false)
|
||||||
|
|
||||||
this.transitioning = 1
|
this.transitioning = 1
|
||||||
|
|
||||||
var complete = function () {
|
var complete = function () {
|
||||||
this.transitioning = 0
|
this.transitioning = 0
|
||||||
this.$element
|
this.$element
|
||||||
.trigger('hidden.bs.collapse')
|
|
||||||
.removeClass('collapsing')
|
.removeClass('collapsing')
|
||||||
.addClass('collapse')
|
.addClass('collapse')
|
||||||
|
.trigger('hidden.bs.collapse')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$.support.transition) return complete.call(this)
|
if (!$.support.transition) return complete.call(this)
|
||||||
|
|
||||||
this.$element
|
this.$element
|
||||||
[dimension](0)
|
[dimension](0)
|
||||||
.one($.support.transition.end, $.proxy(complete, this))
|
.one('bsTransitionEnd', $.proxy(complete, this))
|
||||||
.emulateTransitionEnd(350)
|
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)
|
||||||
}
|
}
|
||||||
|
|
||||||
Collapse.prototype.toggle = function () {
|
Collapse.prototype.toggle = function () {
|
||||||
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collapse.prototype.getParent = function () {
|
||||||
|
return $(this.options.parent)
|
||||||
|
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
|
||||||
|
.each($.proxy(function (i, element) {
|
||||||
|
var $element = $(element)
|
||||||
|
this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
|
||||||
|
}, this))
|
||||||
|
.end()
|
||||||
|
}
|
||||||
|
|
||||||
|
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
|
||||||
|
var isOpen = $element.hasClass('in')
|
||||||
|
|
||||||
|
$element.attr('aria-expanded', isOpen)
|
||||||
|
$trigger
|
||||||
|
.toggleClass('collapsed', !isOpen)
|
||||||
|
.attr('aria-expanded', isOpen)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTargetFromTrigger($trigger) {
|
||||||
|
var href
|
||||||
|
var target = $trigger.attr('data-target')
|
||||||
|
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
|
||||||
|
|
||||||
|
return $(target)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// COLLAPSE PLUGIN DEFINITION
|
// COLLAPSE PLUGIN DEFINITION
|
||||||
// ==========================
|
// ==========================
|
||||||
|
|
||||||
var old = $.fn.collapse
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.collapse = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.collapse')
|
var data = $this.data('bs.collapse')
|
||||||
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
||||||
|
|
||||||
if (!data && options.toggle && option == 'show') option = !option
|
if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
|
||||||
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
|
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
|
||||||
if (typeof option == 'string') data[option]()
|
if (typeof option == 'string') data[option]()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.collapse
|
||||||
|
|
||||||
|
$.fn.collapse = Plugin
|
||||||
$.fn.collapse.Constructor = Collapse
|
$.fn.collapse.Constructor = Collapse
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -148,23 +196,16 @@
|
||||||
// COLLAPSE DATA-API
|
// COLLAPSE DATA-API
|
||||||
// =================
|
// =================
|
||||||
|
|
||||||
$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
|
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
||||||
var $this = $(this), href
|
var $this = $(this)
|
||||||
var target = $this.attr('data-target')
|
|
||||||
|| e.preventDefault()
|
if (!$this.attr('data-target')) e.preventDefault()
|
||||||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
|
||||||
var $target = $(target)
|
var $target = getTargetFromTrigger($this)
|
||||||
var data = $target.data('bs.collapse')
|
var data = $target.data('bs.collapse')
|
||||||
var option = data ? 'toggle' : $this.data()
|
var option = data ? 'toggle' : $this.data()
|
||||||
var parent = $this.attr('data-parent')
|
|
||||||
var $parent = parent && $(parent)
|
|
||||||
|
|
||||||
if (!data || !data.transitioning) {
|
Plugin.call($target, option)
|
||||||
if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
|
|
||||||
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
|
|
||||||
}
|
|
||||||
|
|
||||||
$target.collapse(option)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: dropdown.js v3.1.0
|
* Bootstrap: dropdown.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#dropdowns
|
* http://getbootstrap.com/javascript/#dropdowns
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -14,11 +14,13 @@
|
||||||
// =========================
|
// =========================
|
||||||
|
|
||||||
var backdrop = '.dropdown-backdrop'
|
var backdrop = '.dropdown-backdrop'
|
||||||
var toggle = '[data-toggle=dropdown]'
|
var toggle = '[data-toggle="dropdown"]'
|
||||||
var Dropdown = function (element) {
|
var Dropdown = function (element) {
|
||||||
$(element).on('click.bs.dropdown', this.toggle)
|
$(element).on('click.bs.dropdown', this.toggle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dropdown.VERSION = '3.3.4'
|
||||||
|
|
||||||
Dropdown.prototype.toggle = function (e) {
|
Dropdown.prototype.toggle = function (e) {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
|
|
||||||
|
|
@ -40,18 +42,20 @@
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
$this
|
||||||
|
.trigger('focus')
|
||||||
|
.attr('aria-expanded', 'true')
|
||||||
|
|
||||||
$parent
|
$parent
|
||||||
.toggleClass('open')
|
.toggleClass('open')
|
||||||
.trigger('shown.bs.dropdown', relatedTarget)
|
.trigger('shown.bs.dropdown', relatedTarget)
|
||||||
|
|
||||||
$this.focus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
Dropdown.prototype.keydown = function (e) {
|
Dropdown.prototype.keydown = function (e) {
|
||||||
if (!/(38|40|27)/.test(e.keyCode)) return
|
if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
|
||||||
|
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
|
|
||||||
|
|
@ -63,33 +67,40 @@
|
||||||
var $parent = getParent($this)
|
var $parent = getParent($this)
|
||||||
var isActive = $parent.hasClass('open')
|
var isActive = $parent.hasClass('open')
|
||||||
|
|
||||||
if (!isActive || (isActive && e.keyCode == 27)) {
|
if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
|
||||||
if (e.which == 27) $parent.find(toggle).focus()
|
if (e.which == 27) $parent.find(toggle).trigger('focus')
|
||||||
return $this.click()
|
return $this.trigger('click')
|
||||||
}
|
}
|
||||||
|
|
||||||
var desc = ' li:not(.divider):visible a'
|
var desc = ' li:not(.disabled):visible a'
|
||||||
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
|
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
|
||||||
|
|
||||||
if (!$items.length) return
|
if (!$items.length) return
|
||||||
|
|
||||||
var index = $items.index($items.filter(':focus'))
|
var index = $items.index(e.target)
|
||||||
|
|
||||||
if (e.keyCode == 38 && index > 0) index-- // up
|
if (e.which == 38 && index > 0) index-- // up
|
||||||
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
if (e.which == 40 && index < $items.length - 1) index++ // down
|
||||||
if (!~index) index = 0
|
if (!~index) index = 0
|
||||||
|
|
||||||
$items.eq(index).focus()
|
$items.eq(index).trigger('focus')
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearMenus(e) {
|
function clearMenus(e) {
|
||||||
|
if (e && e.which === 3) return
|
||||||
$(backdrop).remove()
|
$(backdrop).remove()
|
||||||
$(toggle).each(function () {
|
$(toggle).each(function () {
|
||||||
var $parent = getParent($(this))
|
var $this = $(this)
|
||||||
|
var $parent = getParent($this)
|
||||||
var relatedTarget = { relatedTarget: this }
|
var relatedTarget = { relatedTarget: this }
|
||||||
|
|
||||||
if (!$parent.hasClass('open')) return
|
if (!$parent.hasClass('open')) return
|
||||||
|
|
||||||
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
|
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return
|
if (e.isDefaultPrevented()) return
|
||||||
|
|
||||||
|
$this.attr('aria-expanded', 'false')
|
||||||
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -111,9 +122,7 @@
|
||||||
// DROPDOWN PLUGIN DEFINITION
|
// DROPDOWN PLUGIN DEFINITION
|
||||||
// ==========================
|
// ==========================
|
||||||
|
|
||||||
var old = $.fn.dropdown
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.dropdown = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.dropdown')
|
var data = $this.data('bs.dropdown')
|
||||||
|
|
@ -123,6 +132,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.dropdown
|
||||||
|
|
||||||
|
$.fn.dropdown = Plugin
|
||||||
$.fn.dropdown.Constructor = Dropdown
|
$.fn.dropdown.Constructor = Dropdown
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -142,6 +154,8 @@
|
||||||
.on('click.bs.dropdown.data-api', clearMenus)
|
.on('click.bs.dropdown.data-api', clearMenus)
|
||||||
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
||||||
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
||||||
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
|
.on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
|
||||||
|
.on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
|
||||||
|
.on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
|
||||||
|
|
||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: modal.js v3.1.0
|
* Bootstrap: modal.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#modals
|
* http://getbootstrap.com/javascript/#modals
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -15,9 +15,14 @@
|
||||||
|
|
||||||
var Modal = function (element, options) {
|
var Modal = function (element, options) {
|
||||||
this.options = options
|
this.options = options
|
||||||
|
this.$body = $(document.body)
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.$backdrop =
|
this.$dialog = this.$element.find('.modal-dialog')
|
||||||
|
this.$backdrop = null
|
||||||
this.isShown = null
|
this.isShown = null
|
||||||
|
this.originalBodyPad = null
|
||||||
|
this.scrollbarWidth = 0
|
||||||
|
this.ignoreBackdropClick = false
|
||||||
|
|
||||||
if (this.options.remote) {
|
if (this.options.remote) {
|
||||||
this.$element
|
this.$element
|
||||||
|
|
@ -28,6 +33,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Modal.VERSION = '3.3.4'
|
||||||
|
|
||||||
|
Modal.TRANSITION_DURATION = 300
|
||||||
|
Modal.BACKDROP_TRANSITION_DURATION = 150
|
||||||
|
|
||||||
Modal.DEFAULTS = {
|
Modal.DEFAULTS = {
|
||||||
backdrop: true,
|
backdrop: true,
|
||||||
keyboard: true,
|
keyboard: true,
|
||||||
|
|
@ -35,7 +45,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.toggle = function (_relatedTarget) {
|
Modal.prototype.toggle = function (_relatedTarget) {
|
||||||
return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
|
return this.isShown ? this.hide() : this.show(_relatedTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.show = function (_relatedTarget) {
|
Modal.prototype.show = function (_relatedTarget) {
|
||||||
|
|
@ -48,21 +58,34 @@
|
||||||
|
|
||||||
this.isShown = true
|
this.isShown = true
|
||||||
|
|
||||||
|
this.checkScrollbar()
|
||||||
|
this.setScrollbar()
|
||||||
|
this.$body.addClass('modal-open')
|
||||||
|
|
||||||
this.escape()
|
this.escape()
|
||||||
|
this.resize()
|
||||||
|
|
||||||
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
|
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
|
||||||
|
|
||||||
|
this.$dialog.on('mousedown.dismiss.bs.modal', function () {
|
||||||
|
that.$element.one('mouseup.dismiss.bs.modal', function (e) {
|
||||||
|
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
this.backdrop(function () {
|
this.backdrop(function () {
|
||||||
var transition = $.support.transition && that.$element.hasClass('fade')
|
var transition = $.support.transition && that.$element.hasClass('fade')
|
||||||
|
|
||||||
if (!that.$element.parent().length) {
|
if (!that.$element.parent().length) {
|
||||||
that.$element.appendTo(document.body) // don't move modals dom position
|
that.$element.appendTo(that.$body) // don't move modals dom position
|
||||||
}
|
}
|
||||||
|
|
||||||
that.$element
|
that.$element
|
||||||
.show()
|
.show()
|
||||||
.scrollTop(0)
|
.scrollTop(0)
|
||||||
|
|
||||||
|
that.adjustDialog()
|
||||||
|
|
||||||
if (transition) {
|
if (transition) {
|
||||||
that.$element[0].offsetWidth // force reflow
|
that.$element[0].offsetWidth // force reflow
|
||||||
}
|
}
|
||||||
|
|
@ -76,12 +99,12 @@
|
||||||
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
|
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
|
||||||
|
|
||||||
transition ?
|
transition ?
|
||||||
that.$element.find('.modal-dialog') // wait for modal to slide in
|
that.$dialog // wait for modal to slide in
|
||||||
.one($.support.transition.end, function () {
|
.one('bsTransitionEnd', function () {
|
||||||
that.$element.focus().trigger(e)
|
that.$element.trigger('focus').trigger(e)
|
||||||
})
|
})
|
||||||
.emulateTransitionEnd(300) :
|
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
|
||||||
that.$element.focus().trigger(e)
|
that.$element.trigger('focus').trigger(e)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -97,6 +120,7 @@
|
||||||
this.isShown = false
|
this.isShown = false
|
||||||
|
|
||||||
this.escape()
|
this.escape()
|
||||||
|
this.resize()
|
||||||
|
|
||||||
$(document).off('focusin.bs.modal')
|
$(document).off('focusin.bs.modal')
|
||||||
|
|
||||||
|
|
@ -104,11 +128,14 @@
|
||||||
.removeClass('in')
|
.removeClass('in')
|
||||||
.attr('aria-hidden', true)
|
.attr('aria-hidden', true)
|
||||||
.off('click.dismiss.bs.modal')
|
.off('click.dismiss.bs.modal')
|
||||||
|
.off('mouseup.dismiss.bs.modal')
|
||||||
|
|
||||||
|
this.$dialog.off('mousedown.dismiss.bs.modal')
|
||||||
|
|
||||||
$.support.transition && this.$element.hasClass('fade') ?
|
$.support.transition && this.$element.hasClass('fade') ?
|
||||||
this.$element
|
this.$element
|
||||||
.one($.support.transition.end, $.proxy(this.hideModal, this))
|
.one('bsTransitionEnd', $.proxy(this.hideModal, this))
|
||||||
.emulateTransitionEnd(300) :
|
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
|
||||||
this.hideModal()
|
this.hideModal()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -117,18 +144,26 @@
|
||||||
.off('focusin.bs.modal') // guard against infinite focus loop
|
.off('focusin.bs.modal') // guard against infinite focus loop
|
||||||
.on('focusin.bs.modal', $.proxy(function (e) {
|
.on('focusin.bs.modal', $.proxy(function (e) {
|
||||||
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
||||||
this.$element.focus()
|
this.$element.trigger('focus')
|
||||||
}
|
}
|
||||||
}, this))
|
}, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.escape = function () {
|
Modal.prototype.escape = function () {
|
||||||
if (this.isShown && this.options.keyboard) {
|
if (this.isShown && this.options.keyboard) {
|
||||||
this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
|
this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
|
||||||
e.which == 27 && this.hide()
|
e.which == 27 && this.hide()
|
||||||
}, this))
|
}, this))
|
||||||
} else if (!this.isShown) {
|
} else if (!this.isShown) {
|
||||||
this.$element.off('keyup.dismiss.bs.modal')
|
this.$element.off('keydown.dismiss.bs.modal')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.resize = function () {
|
||||||
|
if (this.isShown) {
|
||||||
|
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
|
||||||
|
} else {
|
||||||
|
$(window).off('resize.bs.modal')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -136,7 +171,9 @@
|
||||||
var that = this
|
var that = this
|
||||||
this.$element.hide()
|
this.$element.hide()
|
||||||
this.backdrop(function () {
|
this.backdrop(function () {
|
||||||
that.removeBackdrop()
|
that.$body.removeClass('modal-open')
|
||||||
|
that.resetAdjustments()
|
||||||
|
that.resetScrollbar()
|
||||||
that.$element.trigger('hidden.bs.modal')
|
that.$element.trigger('hidden.bs.modal')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -147,19 +184,24 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.backdrop = function (callback) {
|
Modal.prototype.backdrop = function (callback) {
|
||||||
|
var that = this
|
||||||
var animate = this.$element.hasClass('fade') ? 'fade' : ''
|
var animate = this.$element.hasClass('fade') ? 'fade' : ''
|
||||||
|
|
||||||
if (this.isShown && this.options.backdrop) {
|
if (this.isShown && this.options.backdrop) {
|
||||||
var doAnimate = $.support.transition && animate
|
var doAnimate = $.support.transition && animate
|
||||||
|
|
||||||
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
||||||
.appendTo(document.body)
|
.appendTo(this.$body)
|
||||||
|
|
||||||
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
||||||
|
if (this.ignoreBackdropClick) {
|
||||||
|
this.ignoreBackdropClick = false
|
||||||
|
return
|
||||||
|
}
|
||||||
if (e.target !== e.currentTarget) return
|
if (e.target !== e.currentTarget) return
|
||||||
this.options.backdrop == 'static'
|
this.options.backdrop == 'static'
|
||||||
? this.$element[0].focus.call(this.$element[0])
|
? this.$element[0].focus()
|
||||||
: this.hide.call(this)
|
: this.hide()
|
||||||
}, this))
|
}, this))
|
||||||
|
|
||||||
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
||||||
|
|
@ -170,31 +212,84 @@
|
||||||
|
|
||||||
doAnimate ?
|
doAnimate ?
|
||||||
this.$backdrop
|
this.$backdrop
|
||||||
.one($.support.transition.end, callback)
|
.one('bsTransitionEnd', callback)
|
||||||
.emulateTransitionEnd(150) :
|
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
|
||||||
callback()
|
callback()
|
||||||
|
|
||||||
} else if (!this.isShown && this.$backdrop) {
|
} else if (!this.isShown && this.$backdrop) {
|
||||||
this.$backdrop.removeClass('in')
|
this.$backdrop.removeClass('in')
|
||||||
|
|
||||||
|
var callbackRemove = function () {
|
||||||
|
that.removeBackdrop()
|
||||||
|
callback && callback()
|
||||||
|
}
|
||||||
$.support.transition && this.$element.hasClass('fade') ?
|
$.support.transition && this.$element.hasClass('fade') ?
|
||||||
this.$backdrop
|
this.$backdrop
|
||||||
.one($.support.transition.end, callback)
|
.one('bsTransitionEnd', callbackRemove)
|
||||||
.emulateTransitionEnd(150) :
|
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
|
||||||
callback()
|
callbackRemove()
|
||||||
|
|
||||||
} else if (callback) {
|
} else if (callback) {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// these following methods are used to handle overflowing modals
|
||||||
|
|
||||||
|
Modal.prototype.handleUpdate = function () {
|
||||||
|
this.adjustDialog()
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.adjustDialog = function () {
|
||||||
|
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
|
||||||
|
|
||||||
|
this.$element.css({
|
||||||
|
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
|
||||||
|
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.resetAdjustments = function () {
|
||||||
|
this.$element.css({
|
||||||
|
paddingLeft: '',
|
||||||
|
paddingRight: ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.checkScrollbar = function () {
|
||||||
|
var fullWindowWidth = window.innerWidth
|
||||||
|
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
|
||||||
|
var documentElementRect = document.documentElement.getBoundingClientRect()
|
||||||
|
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
|
||||||
|
}
|
||||||
|
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
|
||||||
|
this.scrollbarWidth = this.measureScrollbar()
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.setScrollbar = function () {
|
||||||
|
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
||||||
|
this.originalBodyPad = document.body.style.paddingRight || ''
|
||||||
|
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.resetScrollbar = function () {
|
||||||
|
this.$body.css('padding-right', this.originalBodyPad)
|
||||||
|
}
|
||||||
|
|
||||||
|
Modal.prototype.measureScrollbar = function () { // thx walsh
|
||||||
|
var scrollDiv = document.createElement('div')
|
||||||
|
scrollDiv.className = 'modal-scrollbar-measure'
|
||||||
|
this.$body.append(scrollDiv)
|
||||||
|
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
|
||||||
|
this.$body[0].removeChild(scrollDiv)
|
||||||
|
return scrollbarWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// MODAL PLUGIN DEFINITION
|
// MODAL PLUGIN DEFINITION
|
||||||
// =======================
|
// =======================
|
||||||
|
|
||||||
var old = $.fn.modal
|
function Plugin(option, _relatedTarget) {
|
||||||
|
|
||||||
$.fn.modal = function (option, _relatedTarget) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.modal')
|
var data = $this.data('bs.modal')
|
||||||
|
|
@ -206,6 +301,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.modal
|
||||||
|
|
||||||
|
$.fn.modal = Plugin
|
||||||
$.fn.modal.Constructor = Modal
|
$.fn.modal.Constructor = Modal
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -229,15 +327,13 @@
|
||||||
|
|
||||||
if ($this.is('a')) e.preventDefault()
|
if ($this.is('a')) e.preventDefault()
|
||||||
|
|
||||||
$target
|
$target.one('show.bs.modal', function (showEvent) {
|
||||||
.modal(option, this)
|
if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
|
||||||
.one('hide', function () {
|
$target.one('hidden.bs.modal', function () {
|
||||||
$this.is(':visible') && $this.focus()
|
$this.is(':visible') && $this.trigger('focus')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Plugin.call($target, option, this)
|
||||||
$(document)
|
})
|
||||||
.on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
|
|
||||||
.on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
|
|
||||||
|
|
||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: popover.js v3.1.0
|
* Bootstrap: popover.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#popovers
|
* http://getbootstrap.com/javascript/#popovers
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -19,11 +19,13 @@
|
||||||
|
|
||||||
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
||||||
|
|
||||||
|
Popover.VERSION = '3.3.4'
|
||||||
|
|
||||||
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
||||||
placement: 'right',
|
placement: 'right',
|
||||||
trigger: 'click',
|
trigger: 'click',
|
||||||
content: '',
|
content: '',
|
||||||
template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -44,7 +46,7 @@
|
||||||
var content = this.getContent()
|
var content = this.getContent()
|
||||||
|
|
||||||
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
||||||
$tip.find('.popover-content')[ // we use append for html objects to maintain js events
|
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
|
||||||
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
||||||
](content)
|
](content)
|
||||||
|
|
||||||
|
|
@ -70,32 +72,28 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Popover.prototype.arrow = function () {
|
Popover.prototype.arrow = function () {
|
||||||
return this.$arrow = this.$arrow || this.tip().find('.arrow')
|
return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
|
||||||
}
|
|
||||||
|
|
||||||
Popover.prototype.tip = function () {
|
|
||||||
if (!this.$tip) this.$tip = $(this.options.template)
|
|
||||||
return this.$tip
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// POPOVER PLUGIN DEFINITION
|
// POPOVER PLUGIN DEFINITION
|
||||||
// =========================
|
// =========================
|
||||||
|
|
||||||
var old = $.fn.popover
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.popover = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.popover')
|
var data = $this.data('bs.popover')
|
||||||
var options = typeof option == 'object' && option
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
if (!data && option == 'destroy') return
|
if (!data && /destroy|hide/.test(option)) return
|
||||||
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
|
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
|
||||||
if (typeof option == 'string') data[option]()
|
if (typeof option == 'string') data[option]()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.popover
|
||||||
|
|
||||||
|
$.fn.popover = Plugin
|
||||||
$.fn.popover.Constructor = Popover
|
$.fn.popover.Constructor = Popover
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: scrollspy.js v3.1.0
|
* Bootstrap: scrollspy.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#scrollspy
|
* http://getbootstrap.com/javascript/#scrollspy
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -14,36 +14,45 @@
|
||||||
// ==========================
|
// ==========================
|
||||||
|
|
||||||
function ScrollSpy(element, options) {
|
function ScrollSpy(element, options) {
|
||||||
var href
|
this.$body = $(document.body)
|
||||||
var process = $.proxy(this.process, this)
|
this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
|
||||||
|
|
||||||
this.$element = $(element).is('body') ? $(window) : $(element)
|
|
||||||
this.$body = $('body')
|
|
||||||
this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
|
|
||||||
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
||||||
this.selector = (this.options.target
|
this.selector = (this.options.target || '') + ' .nav li > a'
|
||||||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
this.offsets = []
|
||||||
|| '') + ' .nav li > a'
|
this.targets = []
|
||||||
this.offsets = $([])
|
|
||||||
this.targets = $([])
|
|
||||||
this.activeTarget = null
|
this.activeTarget = null
|
||||||
|
this.scrollHeight = 0
|
||||||
|
|
||||||
|
this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
|
||||||
this.refresh()
|
this.refresh()
|
||||||
this.process()
|
this.process()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScrollSpy.VERSION = '3.3.4'
|
||||||
|
|
||||||
ScrollSpy.DEFAULTS = {
|
ScrollSpy.DEFAULTS = {
|
||||||
offset: 10
|
offset: 10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScrollSpy.prototype.getScrollHeight = function () {
|
||||||
|
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
||||||
|
}
|
||||||
|
|
||||||
ScrollSpy.prototype.refresh = function () {
|
ScrollSpy.prototype.refresh = function () {
|
||||||
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
|
var that = this
|
||||||
|
var offsetMethod = 'offset'
|
||||||
|
var offsetBase = 0
|
||||||
|
|
||||||
this.offsets = $([])
|
this.offsets = []
|
||||||
this.targets = $([])
|
this.targets = []
|
||||||
|
this.scrollHeight = this.getScrollHeight()
|
||||||
|
|
||||||
var self = this
|
if (!$.isWindow(this.$scrollElement[0])) {
|
||||||
var $targets = this.$body
|
offsetMethod = 'position'
|
||||||
|
offsetBase = this.$scrollElement.scrollTop()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$body
|
||||||
.find(this.selector)
|
.find(this.selector)
|
||||||
.map(function () {
|
.map(function () {
|
||||||
var $el = $(this)
|
var $el = $(this)
|
||||||
|
|
@ -53,36 +62,41 @@
|
||||||
return ($href
|
return ($href
|
||||||
&& $href.length
|
&& $href.length
|
||||||
&& $href.is(':visible')
|
&& $href.is(':visible')
|
||||||
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
|
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
|
||||||
})
|
})
|
||||||
.sort(function (a, b) { return a[0] - b[0] })
|
.sort(function (a, b) { return a[0] - b[0] })
|
||||||
.each(function () {
|
.each(function () {
|
||||||
self.offsets.push(this[0])
|
that.offsets.push(this[0])
|
||||||
self.targets.push(this[1])
|
that.targets.push(this[1])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollSpy.prototype.process = function () {
|
ScrollSpy.prototype.process = function () {
|
||||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||||
var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
|
var scrollHeight = this.getScrollHeight()
|
||||||
var maxScroll = scrollHeight - this.$scrollElement.height()
|
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
|
||||||
var offsets = this.offsets
|
var offsets = this.offsets
|
||||||
var targets = this.targets
|
var targets = this.targets
|
||||||
var activeTarget = this.activeTarget
|
var activeTarget = this.activeTarget
|
||||||
var i
|
var i
|
||||||
|
|
||||||
if (scrollTop >= maxScroll) {
|
if (this.scrollHeight != scrollHeight) {
|
||||||
return activeTarget != (i = targets.last()[0]) && this.activate(i)
|
this.refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTarget && scrollTop <= offsets[0]) {
|
if (scrollTop >= maxScroll) {
|
||||||
return activeTarget != (i = targets[0]) && this.activate(i)
|
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activeTarget && scrollTop < offsets[0]) {
|
||||||
|
this.activeTarget = null
|
||||||
|
return this.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = offsets.length; i--;) {
|
for (i = offsets.length; i--;) {
|
||||||
activeTarget != targets[i]
|
activeTarget != targets[i]
|
||||||
&& scrollTop >= offsets[i]
|
&& scrollTop >= offsets[i]
|
||||||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
&& (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
|
||||||
&& this.activate(targets[i])
|
&& this.activate(targets[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -90,9 +104,7 @@
|
||||||
ScrollSpy.prototype.activate = function (target) {
|
ScrollSpy.prototype.activate = function (target) {
|
||||||
this.activeTarget = target
|
this.activeTarget = target
|
||||||
|
|
||||||
$(this.selector)
|
this.clear()
|
||||||
.parentsUntil(this.options.target, '.active')
|
|
||||||
.removeClass('active')
|
|
||||||
|
|
||||||
var selector = this.selector +
|
var selector = this.selector +
|
||||||
'[data-target="' + target + '"],' +
|
'[data-target="' + target + '"],' +
|
||||||
|
|
@ -111,13 +123,17 @@
|
||||||
active.trigger('activate.bs.scrollspy')
|
active.trigger('activate.bs.scrollspy')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScrollSpy.prototype.clear = function () {
|
||||||
|
$(this.selector)
|
||||||
|
.parentsUntil(this.options.target, '.active')
|
||||||
|
.removeClass('active')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// SCROLLSPY PLUGIN DEFINITION
|
// SCROLLSPY PLUGIN DEFINITION
|
||||||
// ===========================
|
// ===========================
|
||||||
|
|
||||||
var old = $.fn.scrollspy
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.scrollspy = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.scrollspy')
|
var data = $this.data('bs.scrollspy')
|
||||||
|
|
@ -128,6 +144,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.scrollspy
|
||||||
|
|
||||||
|
$.fn.scrollspy = Plugin
|
||||||
$.fn.scrollspy.Constructor = ScrollSpy
|
$.fn.scrollspy.Constructor = ScrollSpy
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -143,10 +162,10 @@
|
||||||
// SCROLLSPY DATA-API
|
// SCROLLSPY DATA-API
|
||||||
// ==================
|
// ==================
|
||||||
|
|
||||||
$(window).on('load', function () {
|
$(window).on('load.bs.scrollspy.data-api', function () {
|
||||||
$('[data-spy="scroll"]').each(function () {
|
$('[data-spy="scroll"]').each(function () {
|
||||||
var $spy = $(this)
|
var $spy = $(this)
|
||||||
$spy.scrollspy($spy.data())
|
Plugin.call($spy, $spy.data())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: tab.js v3.1.0
|
* Bootstrap: tab.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#tabs
|
* http://getbootstrap.com/javascript/#tabs
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -17,6 +17,10 @@
|
||||||
this.element = $(element)
|
this.element = $(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tab.VERSION = '3.3.4'
|
||||||
|
|
||||||
|
Tab.TRANSITION_DURATION = 150
|
||||||
|
|
||||||
Tab.prototype.show = function () {
|
Tab.prototype.show = function () {
|
||||||
var $this = this.element
|
var $this = this.element
|
||||||
var $ul = $this.closest('ul:not(.dropdown-menu)')
|
var $ul = $this.closest('ul:not(.dropdown-menu)')
|
||||||
|
|
@ -29,22 +33,30 @@
|
||||||
|
|
||||||
if ($this.parent('li').hasClass('active')) return
|
if ($this.parent('li').hasClass('active')) return
|
||||||
|
|
||||||
var previous = $ul.find('.active:last a')[0]
|
var $previous = $ul.find('.active:last a')
|
||||||
var e = $.Event('show.bs.tab', {
|
var hideEvent = $.Event('hide.bs.tab', {
|
||||||
relatedTarget: previous
|
relatedTarget: $this[0]
|
||||||
|
})
|
||||||
|
var showEvent = $.Event('show.bs.tab', {
|
||||||
|
relatedTarget: $previous[0]
|
||||||
})
|
})
|
||||||
|
|
||||||
$this.trigger(e)
|
$previous.trigger(hideEvent)
|
||||||
|
$this.trigger(showEvent)
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return
|
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
var $target = $(selector)
|
var $target = $(selector)
|
||||||
|
|
||||||
this.activate($this.parent('li'), $ul)
|
this.activate($this.closest('li'), $ul)
|
||||||
this.activate($target, $target.parent(), function () {
|
this.activate($target, $target.parent(), function () {
|
||||||
|
$previous.trigger({
|
||||||
|
type: 'hidden.bs.tab',
|
||||||
|
relatedTarget: $this[0]
|
||||||
|
})
|
||||||
$this.trigger({
|
$this.trigger({
|
||||||
type: 'shown.bs.tab',
|
type: 'shown.bs.tab',
|
||||||
relatedTarget: previous
|
relatedTarget: $previous[0]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -53,15 +65,21 @@
|
||||||
var $active = container.find('> .active')
|
var $active = container.find('> .active')
|
||||||
var transition = callback
|
var transition = callback
|
||||||
&& $.support.transition
|
&& $.support.transition
|
||||||
&& $active.hasClass('fade')
|
&& (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
|
||||||
|
|
||||||
function next() {
|
function next() {
|
||||||
$active
|
$active
|
||||||
.removeClass('active')
|
.removeClass('active')
|
||||||
.find('> .dropdown-menu > .active')
|
.find('> .dropdown-menu > .active')
|
||||||
.removeClass('active')
|
.removeClass('active')
|
||||||
|
.end()
|
||||||
|
.find('[data-toggle="tab"]')
|
||||||
|
.attr('aria-expanded', false)
|
||||||
|
|
||||||
element.addClass('active')
|
element
|
||||||
|
.addClass('active')
|
||||||
|
.find('[data-toggle="tab"]')
|
||||||
|
.attr('aria-expanded', true)
|
||||||
|
|
||||||
if (transition) {
|
if (transition) {
|
||||||
element[0].offsetWidth // reflow for transition
|
element[0].offsetWidth // reflow for transition
|
||||||
|
|
@ -70,17 +88,22 @@
|
||||||
element.removeClass('fade')
|
element.removeClass('fade')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element.parent('.dropdown-menu')) {
|
if (element.parent('.dropdown-menu').length) {
|
||||||
element.closest('li.dropdown').addClass('active')
|
element
|
||||||
|
.closest('li.dropdown')
|
||||||
|
.addClass('active')
|
||||||
|
.end()
|
||||||
|
.find('[data-toggle="tab"]')
|
||||||
|
.attr('aria-expanded', true)
|
||||||
}
|
}
|
||||||
|
|
||||||
callback && callback()
|
callback && callback()
|
||||||
}
|
}
|
||||||
|
|
||||||
transition ?
|
$active.length && transition ?
|
||||||
$active
|
$active
|
||||||
.one($.support.transition.end, next)
|
.one('bsTransitionEnd', next)
|
||||||
.emulateTransitionEnd(150) :
|
.emulateTransitionEnd(Tab.TRANSITION_DURATION) :
|
||||||
next()
|
next()
|
||||||
|
|
||||||
$active.removeClass('in')
|
$active.removeClass('in')
|
||||||
|
|
@ -90,9 +113,7 @@
|
||||||
// TAB PLUGIN DEFINITION
|
// TAB PLUGIN DEFINITION
|
||||||
// =====================
|
// =====================
|
||||||
|
|
||||||
var old = $.fn.tab
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.tab = function ( option ) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.tab')
|
var data = $this.data('bs.tab')
|
||||||
|
|
@ -102,6 +123,9 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.tab
|
||||||
|
|
||||||
|
$.fn.tab = Plugin
|
||||||
$.fn.tab.Constructor = Tab
|
$.fn.tab.Constructor = Tab
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -117,9 +141,13 @@
|
||||||
// TAB DATA-API
|
// TAB DATA-API
|
||||||
// ============
|
// ============
|
||||||
|
|
||||||
$(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
|
var clickHandler = function (e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
$(this).tab('show')
|
Plugin.call($(this), 'show')
|
||||||
})
|
}
|
||||||
|
|
||||||
|
$(document)
|
||||||
|
.on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
|
||||||
|
.on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
|
||||||
|
|
||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: tooltip.js v3.1.0
|
* Bootstrap: tooltip.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#tooltip
|
* http://getbootstrap.com/javascript/#tooltip
|
||||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -15,26 +15,34 @@
|
||||||
// ===============================
|
// ===============================
|
||||||
|
|
||||||
var Tooltip = function (element, options) {
|
var Tooltip = function (element, options) {
|
||||||
this.type =
|
this.type = null
|
||||||
this.options =
|
this.options = null
|
||||||
this.enabled =
|
this.enabled = null
|
||||||
this.timeout =
|
this.timeout = null
|
||||||
this.hoverState =
|
this.hoverState = null
|
||||||
this.$element = null
|
this.$element = null
|
||||||
|
|
||||||
this.init('tooltip', element, options)
|
this.init('tooltip', element, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tooltip.VERSION = '3.3.4'
|
||||||
|
|
||||||
|
Tooltip.TRANSITION_DURATION = 150
|
||||||
|
|
||||||
Tooltip.DEFAULTS = {
|
Tooltip.DEFAULTS = {
|
||||||
animation: true,
|
animation: true,
|
||||||
placement: 'top',
|
placement: 'top',
|
||||||
selector: false,
|
selector: false,
|
||||||
template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
||||||
trigger: 'hover focus',
|
trigger: 'hover focus',
|
||||||
title: '',
|
title: '',
|
||||||
delay: 0,
|
delay: 0,
|
||||||
html: false,
|
html: false,
|
||||||
container: false
|
container: false,
|
||||||
|
viewport: {
|
||||||
|
selector: 'body',
|
||||||
|
padding: 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.init = function (type, element, options) {
|
Tooltip.prototype.init = function (type, element, options) {
|
||||||
|
|
@ -42,6 +50,11 @@
|
||||||
this.type = type
|
this.type = type
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.options = this.getOptions(options)
|
this.options = this.getOptions(options)
|
||||||
|
this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
|
||||||
|
|
||||||
|
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
|
||||||
|
throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
|
||||||
|
}
|
||||||
|
|
||||||
var triggers = this.options.trigger.split(' ')
|
var triggers = this.options.trigger.split(' ')
|
||||||
|
|
||||||
|
|
@ -94,7 +107,17 @@
|
||||||
|
|
||||||
Tooltip.prototype.enter = function (obj) {
|
Tooltip.prototype.enter = function (obj) {
|
||||||
var self = obj instanceof this.constructor ?
|
var self = obj instanceof this.constructor ?
|
||||||
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
obj : $(obj.currentTarget).data('bs.' + this.type)
|
||||||
|
|
||||||
|
if (self && self.$tip && self.$tip.is(':visible')) {
|
||||||
|
self.hoverState = 'in'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!self) {
|
||||||
|
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
||||||
|
$(obj.currentTarget).data('bs.' + this.type, self)
|
||||||
|
}
|
||||||
|
|
||||||
clearTimeout(self.timeout)
|
clearTimeout(self.timeout)
|
||||||
|
|
||||||
|
|
@ -109,7 +132,12 @@
|
||||||
|
|
||||||
Tooltip.prototype.leave = function (obj) {
|
Tooltip.prototype.leave = function (obj) {
|
||||||
var self = obj instanceof this.constructor ?
|
var self = obj instanceof this.constructor ?
|
||||||
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
obj : $(obj.currentTarget).data('bs.' + this.type)
|
||||||
|
|
||||||
|
if (!self) {
|
||||||
|
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
||||||
|
$(obj.currentTarget).data('bs.' + this.type, self)
|
||||||
|
}
|
||||||
|
|
||||||
clearTimeout(self.timeout)
|
clearTimeout(self.timeout)
|
||||||
|
|
||||||
|
|
@ -128,12 +156,17 @@
|
||||||
if (this.hasContent() && this.enabled) {
|
if (this.hasContent() && this.enabled) {
|
||||||
this.$element.trigger(e)
|
this.$element.trigger(e)
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return
|
var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
|
||||||
var that = this;
|
if (e.isDefaultPrevented() || !inDom) return
|
||||||
|
var that = this
|
||||||
|
|
||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
|
|
||||||
|
var tipId = this.getUID(this.type)
|
||||||
|
|
||||||
this.setContent()
|
this.setContent()
|
||||||
|
$tip.attr('id', tipId)
|
||||||
|
this.$element.attr('aria-describedby', tipId)
|
||||||
|
|
||||||
if (this.options.animation) $tip.addClass('fade')
|
if (this.options.animation) $tip.addClass('fade')
|
||||||
|
|
||||||
|
|
@ -149,6 +182,7 @@
|
||||||
.detach()
|
.detach()
|
||||||
.css({ top: 0, left: 0, display: 'block' })
|
.css({ top: 0, left: 0, display: 'block' })
|
||||||
.addClass(placement)
|
.addClass(placement)
|
||||||
|
.data('bs.' + this.type, this)
|
||||||
|
|
||||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||||
|
|
||||||
|
|
@ -157,18 +191,14 @@
|
||||||
var actualHeight = $tip[0].offsetHeight
|
var actualHeight = $tip[0].offsetHeight
|
||||||
|
|
||||||
if (autoPlace) {
|
if (autoPlace) {
|
||||||
var $parent = this.$element.parent()
|
|
||||||
|
|
||||||
var orgPlacement = placement
|
var orgPlacement = placement
|
||||||
var docScroll = document.documentElement.scrollTop || document.body.scrollTop
|
var $container = this.options.container ? $(this.options.container) : this.$element.parent()
|
||||||
var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
|
var containerDim = this.getPosition($container)
|
||||||
var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
|
|
||||||
var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
|
|
||||||
|
|
||||||
placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
|
placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
|
||||||
placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
|
placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
|
||||||
placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
|
placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
|
||||||
placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
|
placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
|
||||||
placement
|
placement
|
||||||
|
|
||||||
$tip
|
$tip
|
||||||
|
|
@ -179,22 +209,24 @@
|
||||||
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
||||||
|
|
||||||
this.applyPlacement(calculatedOffset, placement)
|
this.applyPlacement(calculatedOffset, placement)
|
||||||
this.hoverState = null
|
|
||||||
|
|
||||||
var complete = function () {
|
var complete = function () {
|
||||||
|
var prevHoverState = that.hoverState
|
||||||
that.$element.trigger('shown.bs.' + that.type)
|
that.$element.trigger('shown.bs.' + that.type)
|
||||||
|
that.hoverState = null
|
||||||
|
|
||||||
|
if (prevHoverState == 'out') that.leave(that)
|
||||||
}
|
}
|
||||||
|
|
||||||
$.support.transition && this.$tip.hasClass('fade') ?
|
$.support.transition && this.$tip.hasClass('fade') ?
|
||||||
$tip
|
$tip
|
||||||
.one($.support.transition.end, complete)
|
.one('bsTransitionEnd', complete)
|
||||||
.emulateTransitionEnd(150) :
|
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
||||||
complete()
|
complete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
||||||
var replace
|
|
||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
var width = $tip[0].offsetWidth
|
var width = $tip[0].offsetWidth
|
||||||
var height = $tip[0].offsetHeight
|
var height = $tip[0].offsetHeight
|
||||||
|
|
@ -228,33 +260,26 @@
|
||||||
var actualHeight = $tip[0].offsetHeight
|
var actualHeight = $tip[0].offsetHeight
|
||||||
|
|
||||||
if (placement == 'top' && actualHeight != height) {
|
if (placement == 'top' && actualHeight != height) {
|
||||||
replace = true
|
|
||||||
offset.top = offset.top + height - actualHeight
|
offset.top = offset.top + height - actualHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/bottom|top/.test(placement)) {
|
var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
|
||||||
var delta = 0
|
|
||||||
|
|
||||||
if (offset.left < 0) {
|
if (delta.left) offset.left += delta.left
|
||||||
delta = offset.left * -2
|
else offset.top += delta.top
|
||||||
offset.left = 0
|
|
||||||
|
var isVertical = /top|bottom/.test(placement)
|
||||||
|
var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
|
||||||
|
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
|
||||||
|
|
||||||
$tip.offset(offset)
|
$tip.offset(offset)
|
||||||
|
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
|
||||||
actualWidth = $tip[0].offsetWidth
|
|
||||||
actualHeight = $tip[0].offsetHeight
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
|
Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
|
||||||
} else {
|
this.arrow()
|
||||||
this.replaceArrow(actualHeight - height, actualHeight, 'top')
|
.css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
|
||||||
}
|
.css(isVertical ? 'top' : 'left', '')
|
||||||
|
|
||||||
if (replace) $tip.offset(offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
|
|
||||||
this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.setContent = function () {
|
Tooltip.prototype.setContent = function () {
|
||||||
|
|
@ -265,14 +290,17 @@
|
||||||
$tip.removeClass('fade in top bottom left right')
|
$tip.removeClass('fade in top bottom left right')
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.hide = function () {
|
Tooltip.prototype.hide = function (callback) {
|
||||||
var that = this
|
var that = this
|
||||||
var $tip = this.tip()
|
var $tip = $(this.$tip)
|
||||||
var e = $.Event('hide.bs.' + this.type)
|
var e = $.Event('hide.bs.' + this.type)
|
||||||
|
|
||||||
function complete() {
|
function complete() {
|
||||||
if (that.hoverState != 'in') $tip.detach()
|
if (that.hoverState != 'in') $tip.detach()
|
||||||
that.$element.trigger('hidden.bs.' + that.type)
|
that.$element
|
||||||
|
.removeAttr('aria-describedby')
|
||||||
|
.trigger('hidden.bs.' + that.type)
|
||||||
|
callback && callback()
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$element.trigger(e)
|
this.$element.trigger(e)
|
||||||
|
|
@ -281,10 +309,10 @@
|
||||||
|
|
||||||
$tip.removeClass('in')
|
$tip.removeClass('in')
|
||||||
|
|
||||||
$.support.transition && this.$tip.hasClass('fade') ?
|
$.support.transition && $tip.hasClass('fade') ?
|
||||||
$tip
|
$tip
|
||||||
.one($.support.transition.end, complete)
|
.one('bsTransitionEnd', complete)
|
||||||
.emulateTransitionEnd(150) :
|
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
||||||
complete()
|
complete()
|
||||||
|
|
||||||
this.hoverState = null
|
this.hoverState = null
|
||||||
|
|
@ -303,12 +331,22 @@
|
||||||
return this.getTitle()
|
return this.getTitle()
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.getPosition = function () {
|
Tooltip.prototype.getPosition = function ($element) {
|
||||||
var el = this.$element[0]
|
$element = $element || this.$element
|
||||||
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
|
|
||||||
width: el.offsetWidth,
|
var el = $element[0]
|
||||||
height: el.offsetHeight
|
var isBody = el.tagName == 'BODY'
|
||||||
}, this.$element.offset())
|
|
||||||
|
var elRect = el.getBoundingClientRect()
|
||||||
|
if (elRect.width == null) {
|
||||||
|
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
||||||
|
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
||||||
|
}
|
||||||
|
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
|
||||||
|
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
||||||
|
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
||||||
|
|
||||||
|
return $.extend({}, elRect, scroll, outerDims, elOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
||||||
|
|
@ -316,6 +354,35 @@
|
||||||
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||||
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
||||||
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
|
||||||
|
var delta = { top: 0, left: 0 }
|
||||||
|
if (!this.$viewport) return delta
|
||||||
|
|
||||||
|
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
|
||||||
|
var viewportDimensions = this.getPosition(this.$viewport)
|
||||||
|
|
||||||
|
if (/right|left/.test(placement)) {
|
||||||
|
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
|
||||||
|
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
|
||||||
|
if (topEdgeOffset < viewportDimensions.top) { // top overflow
|
||||||
|
delta.top = viewportDimensions.top - topEdgeOffset
|
||||||
|
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
|
||||||
|
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var leftEdgeOffset = pos.left - viewportPadding
|
||||||
|
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
|
||||||
|
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
|
||||||
|
delta.left = viewportDimensions.left - leftEdgeOffset
|
||||||
|
} else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
|
||||||
|
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return delta
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.getTitle = function () {
|
Tooltip.prototype.getTitle = function () {
|
||||||
|
|
@ -329,20 +396,18 @@
|
||||||
return title
|
return title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getUID = function (prefix) {
|
||||||
|
do prefix += ~~(Math.random() * 1000000)
|
||||||
|
while (document.getElementById(prefix))
|
||||||
|
return prefix
|
||||||
|
}
|
||||||
|
|
||||||
Tooltip.prototype.tip = function () {
|
Tooltip.prototype.tip = function () {
|
||||||
return this.$tip = this.$tip || $(this.options.template)
|
return (this.$tip = this.$tip || $(this.options.template))
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.arrow = function () {
|
Tooltip.prototype.arrow = function () {
|
||||||
return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
|
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
|
||||||
}
|
|
||||||
|
|
||||||
Tooltip.prototype.validate = function () {
|
|
||||||
if (!this.$element[0].parentNode) {
|
|
||||||
this.hide()
|
|
||||||
this.$element = null
|
|
||||||
this.options = null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.enable = function () {
|
Tooltip.prototype.enable = function () {
|
||||||
|
|
@ -358,33 +423,45 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.toggle = function (e) {
|
Tooltip.prototype.toggle = function (e) {
|
||||||
var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
|
var self = this
|
||||||
|
if (e) {
|
||||||
|
self = $(e.currentTarget).data('bs.' + this.type)
|
||||||
|
if (!self) {
|
||||||
|
self = new this.constructor(e.currentTarget, this.getDelegateOptions())
|
||||||
|
$(e.currentTarget).data('bs.' + this.type, self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.destroy = function () {
|
Tooltip.prototype.destroy = function () {
|
||||||
|
var that = this
|
||||||
clearTimeout(this.timeout)
|
clearTimeout(this.timeout)
|
||||||
this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
|
this.hide(function () {
|
||||||
|
that.$element.off('.' + that.type).removeData('bs.' + that.type)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TOOLTIP PLUGIN DEFINITION
|
// TOOLTIP PLUGIN DEFINITION
|
||||||
// =========================
|
// =========================
|
||||||
|
|
||||||
var old = $.fn.tooltip
|
function Plugin(option) {
|
||||||
|
|
||||||
$.fn.tooltip = function (option) {
|
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.tooltip')
|
var data = $this.data('bs.tooltip')
|
||||||
var options = typeof option == 'object' && option
|
var options = typeof option == 'object' && option
|
||||||
|
|
||||||
if (!data && option == 'destroy') return
|
if (!data && /destroy|hide/.test(option)) return
|
||||||
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
||||||
if (typeof option == 'string') data[option]()
|
if (typeof option == 'string') data[option]()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var old = $.fn.tooltip
|
||||||
|
|
||||||
|
$.fn.tooltip = Plugin
|
||||||
$.fn.tooltip.Constructor = Tooltip
|
$.fn.tooltip.Constructor = Tooltip
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: transition.js v3.1.0
|
* Bootstrap: transition.js v3.3.4
|
||||||
* http://getbootstrap.com/javascript/#transitions
|
* http://getbootstrap.com/javascript/#transitions
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2014 Twitter, Inc.
|
* Copyright 2011-2015 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
@ -17,10 +17,10 @@
|
||||||
var el = document.createElement('bootstrap')
|
var el = document.createElement('bootstrap')
|
||||||
|
|
||||||
var transEndEventNames = {
|
var transEndEventNames = {
|
||||||
'WebkitTransition' : 'webkitTransitionEnd',
|
WebkitTransition : 'webkitTransitionEnd',
|
||||||
'MozTransition' : 'transitionend',
|
MozTransition : 'transitionend',
|
||||||
'OTransition' : 'oTransitionEnd otransitionend',
|
OTransition : 'oTransitionEnd otransitionend',
|
||||||
'transition' : 'transitionend'
|
transition : 'transitionend'
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var name in transEndEventNames) {
|
for (var name in transEndEventNames) {
|
||||||
|
|
@ -34,8 +34,9 @@
|
||||||
|
|
||||||
// http://blog.alexmaccaw.com/css-transitions
|
// http://blog.alexmaccaw.com/css-transitions
|
||||||
$.fn.emulateTransitionEnd = function (duration) {
|
$.fn.emulateTransitionEnd = function (duration) {
|
||||||
var called = false, $el = this
|
var called = false
|
||||||
$(this).one($.support.transition.end, function () { called = true })
|
var $el = this
|
||||||
|
$(this).one('bsTransitionEnd', function () { called = true })
|
||||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||||
setTimeout(callback, duration)
|
setTimeout(callback, duration)
|
||||||
return this
|
return this
|
||||||
|
|
@ -43,6 +44,16 @@
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$.support.transition = transitionEnd()
|
$.support.transition = transitionEnd()
|
||||||
|
|
||||||
|
if (!$.support.transition) return
|
||||||
|
|
||||||
|
$.event.special.bsTransitionEnd = {
|
||||||
|
bindType: $.support.transition.end,
|
||||||
|
delegateType: $.support.transition.end,
|
||||||
|
handle: function (e) {
|
||||||
|
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
// Specified for the h4 to prevent conflicts of changing @headings-color
|
// Specified for the h4 to prevent conflicts of changing @headings-color
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Provide class for links that match alerts
|
// Provide class for links that match alerts
|
||||||
.alert-link {
|
.alert-link {
|
||||||
font-weight: @alert-link-font-weight;
|
font-weight: @alert-link-font-weight;
|
||||||
|
|
@ -28,16 +29,18 @@
|
||||||
> ul {
|
> ul {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
> p + p {
|
> p + p {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dismissable alerts
|
// Dismissible alerts
|
||||||
//
|
//
|
||||||
// Expand the right padding and account for the close button's positioning.
|
// Expand the right padding and account for the close button's positioning.
|
||||||
|
|
||||||
.alert-dismissable {
|
.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
|
||||||
|
.alert-dismissible {
|
||||||
padding-right: (@alert-padding + 20);
|
padding-right: (@alert-padding + 20);
|
||||||
|
|
||||||
// Adjust close link position
|
// Adjust close link position
|
||||||
|
|
@ -56,12 +59,15 @@
|
||||||
.alert-success {
|
.alert-success {
|
||||||
.alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
|
.alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert-info {
|
.alert-info {
|
||||||
.alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
|
.alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert-warning {
|
.alert-warning {
|
||||||
.alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
|
.alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert-danger {
|
.alert-danger {
|
||||||
.alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
|
.alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// Base classes
|
// Base class
|
||||||
.badge {
|
.badge {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
min-width: 10px;
|
min-width: 10px;
|
||||||
|
|
@ -28,14 +28,15 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -1px;
|
top: -1px;
|
||||||
}
|
}
|
||||||
.btn-xs & {
|
|
||||||
|
.btn-xs &,
|
||||||
|
.btn-group-xs > .btn & {
|
||||||
top: 0;
|
top: 0;
|
||||||
padding: 1px 5px;
|
padding: 1px 5px;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Hover state, but only for links
|
// Hover state, but only for links
|
||||||
a.badge {
|
a& {
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: @badge-link-hover-color;
|
color: @badge-link-hover-color;
|
||||||
|
|
@ -44,12 +45,22 @@ a.badge {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Account for counters in navs
|
// Account for badges in navs
|
||||||
a.list-group-item.active > .badge,
|
.list-group-item.active > &,
|
||||||
.nav-pills > .active > a > .badge {
|
.nav-pills > .active > a > & {
|
||||||
color: @badge-active-color;
|
color: @badge-active-color;
|
||||||
background-color: @badge-active-bg;
|
background-color: @badge-active-bg;
|
||||||
}
|
}
|
||||||
.nav-pills > li > a > .badge {
|
|
||||||
|
.list-group-item > & {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-group-item > & + & {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-pills > li > a > & {
|
||||||
margin-left: 3px;
|
margin-left: 3px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,10 @@
|
||||||
@import "variables.less";
|
@import "variables.less";
|
||||||
@import "mixins.less";
|
@import "mixins.less";
|
||||||
|
|
||||||
// Reset
|
// Reset and dependencies
|
||||||
@import "normalize.less";
|
@import "normalize.less";
|
||||||
@import "print.less";
|
@import "print.less";
|
||||||
|
@import "glyphicons.less";
|
||||||
|
|
||||||
// Core CSS
|
// Core CSS
|
||||||
@import "scaffolding.less";
|
@import "scaffolding.less";
|
||||||
|
|
@ -17,7 +18,6 @@
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
@import "component-animations.less";
|
@import "component-animations.less";
|
||||||
@import "glyphicons.less";
|
|
||||||
@import "dropdowns.less";
|
@import "dropdowns.less";
|
||||||
@import "button-groups.less";
|
@import "button-groups.less";
|
||||||
@import "input-groups.less";
|
@import "input-groups.less";
|
||||||
|
|
@ -35,6 +35,7 @@
|
||||||
@import "media.less";
|
@import "media.less";
|
||||||
@import "list-group.less";
|
@import "list-group.less";
|
||||||
@import "panels.less";
|
@import "panels.less";
|
||||||
|
@import "responsive-embed.less";
|
||||||
@import "wells.less";
|
@import "wells.less";
|
||||||
@import "close.less";
|
@import "close.less";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,6 @@
|
||||||
&.active {
|
&.active {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
&:focus {
|
|
||||||
// Remove focus outline when dropdown JS adds it after closing the menu
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -75,13 +71,13 @@
|
||||||
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
|
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
.btn-group > .btn-group:first-child {
|
.btn-group > .btn-group:first-child:not(:last-child) {
|
||||||
> .btn:last-child,
|
> .btn:last-child,
|
||||||
> .dropdown-toggle {
|
> .dropdown-toggle {
|
||||||
.border-right-radius(0);
|
.border-right-radius(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.btn-group > .btn-group:last-child > .btn:first-child {
|
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
|
||||||
.border-left-radius(0);
|
.border-left-radius(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -96,9 +92,9 @@
|
||||||
//
|
//
|
||||||
// Remix the default button sizing classes into new ones for easier manipulation.
|
// Remix the default button sizing classes into new ones for easier manipulation.
|
||||||
|
|
||||||
.btn-group-xs > .btn { .btn-xs(); }
|
.btn-group-xs > .btn { &:extend(.btn-xs); }
|
||||||
.btn-group-sm > .btn { .btn-sm(); }
|
.btn-group-sm > .btn { &:extend(.btn-sm); }
|
||||||
.btn-group-lg > .btn { .btn-lg(); }
|
.btn-group-lg > .btn { &:extend(.btn-lg); }
|
||||||
|
|
||||||
|
|
||||||
// Split button dropdowns
|
// Split button dropdowns
|
||||||
|
|
@ -198,7 +194,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Justified button groups
|
// Justified button groups
|
||||||
// ----------------------
|
// ----------------------
|
||||||
|
|
||||||
|
|
@ -216,11 +211,33 @@
|
||||||
> .btn-group .btn {
|
> .btn-group .btn {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
> .btn-group .dropdown-menu {
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Checkbox and radio options
|
// Checkbox and radio options
|
||||||
[data-toggle="buttons"] > .btn > input[type="radio"],
|
//
|
||||||
[data-toggle="buttons"] > .btn > input[type="checkbox"] {
|
// In order to support the browser's form validation feedback, powered by the
|
||||||
display: none;
|
// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
|
||||||
|
// `display: none;` or `visibility: hidden;` as that also hides the popover.
|
||||||
|
// Simply visually hiding the inputs via `opacity` would leave them clickable in
|
||||||
|
// certain cases which is prevented by using `clip` and `pointer-events`.
|
||||||
|
// This way, we ensure a DOM element is visible to position the popover from.
|
||||||
|
//
|
||||||
|
// See https://github.com/twbs/bootstrap/pull/12794 and
|
||||||
|
// https://github.com/twbs/bootstrap/pull/14559 for more information.
|
||||||
|
|
||||||
|
[data-toggle="buttons"] {
|
||||||
|
> .btn,
|
||||||
|
> .btn-group > .btn {
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
position: absolute;
|
||||||
|
clip: rect(0,0,0,0);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
font-weight: @btn-font-weight;
|
font-weight: @btn-font-weight;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
touch-action: manipulation;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|
@ -19,12 +20,18 @@
|
||||||
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
|
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
|
||||||
.user-select(none);
|
.user-select(none);
|
||||||
|
|
||||||
&:focus {
|
&,
|
||||||
|
&:active,
|
||||||
|
&.active {
|
||||||
|
&:focus,
|
||||||
|
&.focus {
|
||||||
.tab-focus();
|
.tab-focus();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus,
|
||||||
|
&.focus {
|
||||||
color: @btn-default-color;
|
color: @btn-default-color;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
@ -39,7 +46,7 @@
|
||||||
&.disabled,
|
&.disabled,
|
||||||
&[disabled],
|
&[disabled],
|
||||||
fieldset[disabled] & {
|
fieldset[disabled] & {
|
||||||
cursor: not-allowed;
|
cursor: @cursor-disabled;
|
||||||
pointer-events: none; // Future-proof disabling of clicks
|
pointer-events: none; // Future-proof disabling of clicks
|
||||||
.opacity(.65);
|
.opacity(.65);
|
||||||
.box-shadow(none);
|
.box-shadow(none);
|
||||||
|
|
@ -81,11 +88,11 @@
|
||||||
.btn-link {
|
.btn-link {
|
||||||
color: @link-color;
|
color: @link-color;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
|
|
||||||
&,
|
&,
|
||||||
&:active,
|
&:active,
|
||||||
|
&.active,
|
||||||
&[disabled],
|
&[disabled],
|
||||||
fieldset[disabled] & {
|
fieldset[disabled] & {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
|
@ -100,7 +107,7 @@
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: @link-hover-color;
|
color: @link-hover-color;
|
||||||
text-decoration: underline;
|
text-decoration: @link-hover-decoration;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
&[disabled],
|
&[disabled],
|
||||||
|
|
@ -136,8 +143,6 @@
|
||||||
.btn-block {
|
.btn-block {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-left: 0;
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vertically space out multiple block buttons
|
// Vertically space out multiple block buttons
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,40 @@
|
||||||
// Account for jankitude on images
|
// Account for jankitude on images
|
||||||
> img,
|
> img,
|
||||||
> a > img {
|
> a > img {
|
||||||
.img-responsive();
|
&:extend(.img-responsive);
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WebKit CSS3 transforms for supported devices
|
||||||
|
@media all and (transform-3d), (-webkit-transform-3d) {
|
||||||
|
.transition-transform(~'0.6s ease-in-out');
|
||||||
|
.backface-visibility(~'hidden');
|
||||||
|
.perspective(1000);
|
||||||
|
|
||||||
|
&.next,
|
||||||
|
&.active.right {
|
||||||
|
.translate3d(100%, 0, 0);
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
&.prev,
|
||||||
|
&.active.left {
|
||||||
|
.translate3d(-100%, 0, 0);
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
&.next.left,
|
||||||
|
&.prev.right,
|
||||||
|
&.active {
|
||||||
|
.translate3d(0, 0, 0);
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> .active,
|
> .active,
|
||||||
> .next,
|
> .next,
|
||||||
> .prev { display: block; }
|
> .prev {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
> .active {
|
> .active {
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
@ -91,7 +117,7 @@
|
||||||
// Hover/focus state
|
// Hover/focus state
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
outline: none;
|
outline: 0;
|
||||||
color: @carousel-control-color;
|
color: @carousel-control-color;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
.opacity(.9);
|
.opacity(.9);
|
||||||
|
|
@ -110,20 +136,23 @@
|
||||||
.icon-prev,
|
.icon-prev,
|
||||||
.glyphicon-chevron-left {
|
.glyphicon-chevron-left {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
|
margin-left: -10px;
|
||||||
}
|
}
|
||||||
.icon-next,
|
.icon-next,
|
||||||
.glyphicon-chevron-right {
|
.glyphicon-chevron-right {
|
||||||
right: 50%;
|
right: 50%;
|
||||||
|
margin-right: -10px;
|
||||||
}
|
}
|
||||||
.icon-prev,
|
.icon-prev,
|
||||||
.icon-next {
|
.icon-next {
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
margin-top: -10px;
|
margin-top: -10px;
|
||||||
margin-left: -10px;
|
line-height: 1;
|
||||||
font-family: serif;
|
font-family: serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.icon-prev {
|
.icon-prev {
|
||||||
&:before {
|
&:before {
|
||||||
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
|
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
|
||||||
|
|
@ -167,6 +196,7 @@
|
||||||
// Internet Explorer 8-9 does not support clicks on elements without a set
|
// Internet Explorer 8-9 does not support clicks on elements without a set
|
||||||
// `background-color`. We cannot use `filter` since that's not viewed as a
|
// `background-color`. We cannot use `filter` since that's not viewed as a
|
||||||
// background color by the browser. Thus, a hack is needed.
|
// background color by the browser. Thus, a hack is needed.
|
||||||
|
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
|
||||||
//
|
//
|
||||||
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
|
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
|
||||||
// set alpha transparency for the best results possible.
|
// set alpha transparency for the best results possible.
|
||||||
|
|
@ -206,16 +236,23 @@
|
||||||
|
|
||||||
// Scale up the controls a smidge
|
// Scale up the controls a smidge
|
||||||
.carousel-control {
|
.carousel-control {
|
||||||
.glyphicons-chevron-left,
|
.glyphicon-chevron-left,
|
||||||
.glyphicons-chevron-right,
|
.glyphicon-chevron-right,
|
||||||
.icon-prev,
|
.icon-prev,
|
||||||
.icon-next {
|
.icon-next {
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
margin-top: -15px;
|
margin-top: -15px;
|
||||||
margin-left: -15px;
|
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
}
|
}
|
||||||
|
.glyphicon-chevron-left,
|
||||||
|
.icon-prev {
|
||||||
|
margin-left: -15px;
|
||||||
|
}
|
||||||
|
.glyphicon-chevron-right,
|
||||||
|
.icon-next {
|
||||||
|
margin-right: -15px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show and left align the captions
|
// Show and left align the captions
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
// Additional properties for button version
|
// Additional properties for button version
|
||||||
// iOS requires the button element instead of an anchor tag.
|
// iOS requires the button element instead of an anchor tag.
|
||||||
// If you want the anchor version, it requires `href="#"`.
|
// If you want the anchor version, it requires `href="#"`.
|
||||||
|
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
|
||||||
button& {
|
button& {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ code {
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
color: @code-color;
|
color: @code-color;
|
||||||
background-color: @code-bg;
|
background-color: @code-bg;
|
||||||
white-space: nowrap;
|
|
||||||
border-radius: @border-radius-base;
|
border-radius: @border-radius-base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,6 +28,13 @@ kbd {
|
||||||
background-color: @kbd-bg;
|
background-color: @kbd-bg;
|
||||||
border-radius: @border-radius-small;
|
border-radius: @border-radius-small;
|
||||||
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
|
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
padding: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blocks of code
|
// Blocks of code
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
// Heads up!
|
// Heads up!
|
||||||
//
|
//
|
||||||
// We don't use the `.opacity()` mixin here since it causes a bug with text
|
// We don't use the `.opacity()` mixin here since it causes a bug with text
|
||||||
// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
|
// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
|
||||||
|
|
||||||
.fade {
|
.fade {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
|
@ -17,13 +17,17 @@
|
||||||
|
|
||||||
.collapse {
|
.collapse {
|
||||||
display: none;
|
display: none;
|
||||||
&.in {
|
|
||||||
display: block;
|
&.in { display: block; }
|
||||||
}
|
tr&.in { display: table-row; }
|
||||||
|
tbody&.in { display: table-row-group; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.collapsing {
|
.collapsing {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 0;
|
height: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
.transition(height .35s ease);
|
.transition-property(~"height, visibility");
|
||||||
|
.transition-duration(.35s);
|
||||||
|
.transition-timing-function(ease);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,13 @@
|
||||||
height: 0;
|
height: 0;
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
border-top: @caret-width-base solid;
|
border-top: @caret-width-base dashed;
|
||||||
border-right: @caret-width-base solid transparent;
|
border-right: @caret-width-base solid transparent;
|
||||||
border-left: @caret-width-base solid transparent;
|
border-left: @caret-width-base solid transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The dropdown wrapper (div)
|
// The dropdown wrapper (div)
|
||||||
|
.dropup,
|
||||||
.dropdown {
|
.dropdown {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
@ -38,6 +39,7 @@
|
||||||
margin: 2px 0 0; // override default ul
|
margin: 2px 0 0; // override default ul
|
||||||
list-style: none;
|
list-style: none;
|
||||||
font-size: @font-size-base;
|
font-size: @font-size-base;
|
||||||
|
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
|
||||||
background-color: @dropdown-bg;
|
background-color: @dropdown-bg;
|
||||||
border: 1px solid @dropdown-fallback-border; // IE8 fallback
|
border: 1px solid @dropdown-fallback-border; // IE8 fallback
|
||||||
border: 1px solid @dropdown-border;
|
border: 1px solid @dropdown-border;
|
||||||
|
|
@ -102,16 +104,15 @@
|
||||||
&:focus {
|
&:focus {
|
||||||
color: @dropdown-link-disabled-color;
|
color: @dropdown-link-disabled-color;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Nuke hover/focus effects
|
// Nuke hover/focus effects
|
||||||
.dropdown-menu > .disabled > a {
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
background-image: none; // Remove CSS gradient
|
background-image: none; // Remove CSS gradient
|
||||||
.reset-filter();
|
.reset-filter();
|
||||||
cursor: not-allowed;
|
cursor: @cursor-disabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -154,6 +155,7 @@
|
||||||
font-size: @font-size-small;
|
font-size: @font-size-small;
|
||||||
line-height: @line-height-base;
|
line-height: @line-height-base;
|
||||||
color: @dropdown-header-color;
|
color: @dropdown-header-color;
|
||||||
|
white-space: nowrap; // as with > li > a
|
||||||
}
|
}
|
||||||
|
|
||||||
// Backdrop to catch body clicks on mobile, etc.
|
// Backdrop to catch body clicks on mobile, etc.
|
||||||
|
|
@ -189,7 +191,7 @@
|
||||||
.dropdown-menu {
|
.dropdown-menu {
|
||||||
top: auto;
|
top: auto;
|
||||||
bottom: 100%;
|
bottom: 100%;
|
||||||
margin-bottom: 1px;
|
margin-bottom: 2px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,4 +212,3 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ fieldset {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
// Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,
|
// Chrome and Firefox set a `min-width: min-content;` on fieldsets,
|
||||||
// so we reset that to ensure it behaves more like a standard block element.
|
// so we reset that to ensure it behaves more like a standard block element.
|
||||||
// See https://github.com/twbs/bootstrap/issues/12359.
|
// See https://github.com/twbs/bootstrap/issues/12359.
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
|
@ -31,6 +31,7 @@ legend {
|
||||||
|
|
||||||
label {
|
label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
@ -51,7 +52,7 @@ input[type="search"] {
|
||||||
input[type="radio"],
|
input[type="radio"],
|
||||||
input[type="checkbox"] {
|
input[type="checkbox"] {
|
||||||
margin: 4px 0 0;
|
margin: 4px 0 0;
|
||||||
margin-top: 1px \9; /* IE8-9 */
|
margin-top: 1px \9; // IE8-9
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,7 +123,7 @@ output {
|
||||||
background-color: @input-bg;
|
background-color: @input-bg;
|
||||||
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||||
border: 1px solid @input-border;
|
border: 1px solid @input-border;
|
||||||
border-radius: @input-border-radius;
|
border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
|
||||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
|
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
|
||||||
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
|
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
|
||||||
|
|
||||||
|
|
@ -133,15 +134,20 @@ output {
|
||||||
.placeholder();
|
.placeholder();
|
||||||
|
|
||||||
// Disabled and read-only inputs
|
// Disabled and read-only inputs
|
||||||
// Note: HTML5 says that controls under a fieldset > legend:first-child won't
|
//
|
||||||
// be disabled if the fieldset is disabled. Due to implementation difficulty,
|
// HTML5 says that controls under a fieldset > legend:first-child won't be
|
||||||
// we don't honor that edge case; we style them as disabled anyway.
|
// disabled if the fieldset is disabled. Due to implementation difficulty, we
|
||||||
|
// don't honor that edge case; we style them as disabled anyway.
|
||||||
&[disabled],
|
&[disabled],
|
||||||
&[readonly],
|
&[readonly],
|
||||||
fieldset[disabled] & {
|
fieldset[disabled] & {
|
||||||
cursor: not-allowed;
|
|
||||||
background-color: @input-bg-disabled;
|
background-color: @input-bg-disabled;
|
||||||
opacity: 1; // iOS fix for unreadable disabled content
|
opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
|
||||||
|
}
|
||||||
|
|
||||||
|
&[disabled],
|
||||||
|
fieldset[disabled] & {
|
||||||
|
cursor: @cursor-disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset height for `textarea`s
|
// Reset height for `textarea`s
|
||||||
|
|
@ -150,12 +156,43 @@ output {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special styles for iOS date input
|
|
||||||
|
// Search inputs in iOS
|
||||||
//
|
//
|
||||||
// In Mobile Safari, date inputs require a pixel line-height that matches the
|
// This overrides the extra rounded corners on search inputs in iOS so that our
|
||||||
// given height of the input.
|
// `.form-control` class can properly style them. Note that this cannot simply
|
||||||
input[type="date"] {
|
// be added to `.form-control` as it's not specific enough. For details, see
|
||||||
|
// https://github.com/twbs/bootstrap/issues/11586.
|
||||||
|
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Special styles for iOS temporal inputs
|
||||||
|
//
|
||||||
|
// In Mobile Safari, setting `display: block` on temporal inputs causes the
|
||||||
|
// text within the input to become vertically misaligned. As a workaround, we
|
||||||
|
// set a pixel line-height that matches the given height of the input, but only
|
||||||
|
// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
|
||||||
|
|
||||||
|
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
||||||
|
input[type="date"],
|
||||||
|
input[type="time"],
|
||||||
|
input[type="datetime-local"],
|
||||||
|
input[type="month"] {
|
||||||
line-height: @input-height-base;
|
line-height: @input-height-base;
|
||||||
|
|
||||||
|
&.input-sm,
|
||||||
|
.input-group-sm & {
|
||||||
|
line-height: @input-height-small;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.input-lg,
|
||||||
|
.input-group-lg & {
|
||||||
|
line-height: @input-height-large;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -165,7 +202,7 @@ input[type="date"] {
|
||||||
// horizontal forms, use the predefined grid classes.
|
// horizontal forms, use the predefined grid classes.
|
||||||
|
|
||||||
.form-group {
|
.form-group {
|
||||||
margin-bottom: 15px;
|
margin-bottom: @form-group-margin-bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -175,13 +212,15 @@ input[type="date"] {
|
||||||
|
|
||||||
.radio,
|
.radio,
|
||||||
.checkbox {
|
.checkbox {
|
||||||
|
position: relative;
|
||||||
display: block;
|
display: block;
|
||||||
min-height: @line-height-computed; // clear the floating input if there is no label text
|
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
padding-left: 20px;
|
|
||||||
label {
|
label {
|
||||||
display: inline;
|
min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
|
||||||
|
padding-left: 20px;
|
||||||
|
margin-bottom: 0;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
@ -190,9 +229,11 @@ input[type="date"] {
|
||||||
.radio-inline input[type="radio"],
|
.radio-inline input[type="radio"],
|
||||||
.checkbox input[type="checkbox"],
|
.checkbox input[type="checkbox"],
|
||||||
.checkbox-inline input[type="checkbox"] {
|
.checkbox-inline input[type="checkbox"] {
|
||||||
float: left;
|
position: absolute;
|
||||||
margin-left: -20px;
|
margin-left: -20px;
|
||||||
|
margin-top: 4px \9;
|
||||||
}
|
}
|
||||||
|
|
||||||
.radio + .radio,
|
.radio + .radio,
|
||||||
.checkbox + .checkbox {
|
.checkbox + .checkbox {
|
||||||
margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
|
margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
|
||||||
|
|
@ -201,6 +242,7 @@ input[type="date"] {
|
||||||
// Radios and checkboxes on same line
|
// Radios and checkboxes on same line
|
||||||
.radio-inline,
|
.radio-inline,
|
||||||
.checkbox-inline {
|
.checkbox-inline {
|
||||||
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
|
@ -215,17 +257,54 @@ input[type="date"] {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply same disabled cursor tweak as for inputs
|
// Apply same disabled cursor tweak as for inputs
|
||||||
|
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
|
||||||
//
|
//
|
||||||
// Note: Neither radios nor checkboxes can be readonly.
|
// Note: Neither radios nor checkboxes can be readonly.
|
||||||
input[type="radio"],
|
input[type="radio"],
|
||||||
input[type="checkbox"],
|
input[type="checkbox"] {
|
||||||
.radio,
|
|
||||||
.radio-inline,
|
|
||||||
.checkbox,
|
|
||||||
.checkbox-inline {
|
|
||||||
&[disabled],
|
&[disabled],
|
||||||
|
&.disabled,
|
||||||
fieldset[disabled] & {
|
fieldset[disabled] & {
|
||||||
cursor: not-allowed;
|
cursor: @cursor-disabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// These classes are used directly on <label>s
|
||||||
|
.radio-inline,
|
||||||
|
.checkbox-inline {
|
||||||
|
&.disabled,
|
||||||
|
fieldset[disabled] & {
|
||||||
|
cursor: @cursor-disabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// These classes are used on elements with <label> descendants
|
||||||
|
.radio,
|
||||||
|
.checkbox {
|
||||||
|
&.disabled,
|
||||||
|
fieldset[disabled] & {
|
||||||
|
label {
|
||||||
|
cursor: @cursor-disabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Static form control text
|
||||||
|
//
|
||||||
|
// Apply class to a `p` element to make any string of text align with labels in
|
||||||
|
// a horizontal form layout.
|
||||||
|
|
||||||
|
.form-control-static {
|
||||||
|
// Size it appropriately next to real form controls
|
||||||
|
padding-top: (@padding-base-vertical + 1);
|
||||||
|
padding-bottom: (@padding-base-vertical + 1);
|
||||||
|
// Remove default margin from `p`
|
||||||
|
margin-bottom: 0;
|
||||||
|
min-height: (@line-height-computed + @font-size-base);
|
||||||
|
|
||||||
|
&.input-lg,
|
||||||
|
&.input-sm {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,13 +313,40 @@ input[type="checkbox"],
|
||||||
//
|
//
|
||||||
// Build on `.form-control` with modifier classes to decrease or increase the
|
// Build on `.form-control` with modifier classes to decrease or increase the
|
||||||
// height and font-size of form controls.
|
// height and font-size of form controls.
|
||||||
|
//
|
||||||
|
// The `.form-group-* form-control` variations are sadly duplicated to avoid the
|
||||||
|
// issue documented in https://github.com/twbs/bootstrap/issues/15074.
|
||||||
|
|
||||||
.input-sm {
|
.input-sm {
|
||||||
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
|
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
|
||||||
|
}
|
||||||
|
.form-group-sm {
|
||||||
|
.form-control {
|
||||||
|
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
|
||||||
|
}
|
||||||
|
.form-control-static {
|
||||||
|
height: @input-height-small;
|
||||||
|
padding: @padding-small-vertical @padding-small-horizontal;
|
||||||
|
font-size: @font-size-small;
|
||||||
|
line-height: @line-height-small;
|
||||||
|
min-height: (@line-height-computed + @font-size-small);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-lg {
|
.input-lg {
|
||||||
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
|
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
|
||||||
|
}
|
||||||
|
.form-group-lg {
|
||||||
|
.form-control {
|
||||||
|
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
|
||||||
|
}
|
||||||
|
.form-control-static {
|
||||||
|
height: @input-height-large;
|
||||||
|
padding: @padding-large-vertical @padding-large-horizontal;
|
||||||
|
font-size: @font-size-large;
|
||||||
|
line-height: @line-height-large;
|
||||||
|
min-height: (@line-height-computed + @font-size-large);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -256,18 +362,29 @@ input[type="checkbox"],
|
||||||
.form-control {
|
.form-control {
|
||||||
padding-right: (@input-height-base * 1.25);
|
padding-right: (@input-height-base * 1.25);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Feedback icon (requires .glyphicon classes)
|
// Feedback icon (requires .glyphicon classes)
|
||||||
.form-control-feedback {
|
.form-control-feedback {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: (@line-height-computed + 5); // Height of the `label` and its margin
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
z-index: 2; // Ensure icon is above input groups
|
||||||
display: block;
|
display: block;
|
||||||
width: @input-height-base;
|
width: @input-height-base;
|
||||||
height: @input-height-base;
|
height: @input-height-base;
|
||||||
line-height: @input-height-base;
|
line-height: @input-height-base;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
.input-lg + .form-control-feedback {
|
||||||
|
width: @input-height-large;
|
||||||
|
height: @input-height-large;
|
||||||
|
line-height: @input-height-large;
|
||||||
|
}
|
||||||
|
.input-sm + .form-control-feedback {
|
||||||
|
width: @input-height-small;
|
||||||
|
height: @input-height-small;
|
||||||
|
line-height: @input-height-small;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Feedback states
|
// Feedback states
|
||||||
|
|
@ -281,14 +398,15 @@ input[type="checkbox"],
|
||||||
.form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
|
.form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reposition feedback icon if input has visible label above
|
||||||
|
.has-feedback label {
|
||||||
|
|
||||||
// Static form control text
|
& ~ .form-control-feedback {
|
||||||
//
|
top: (@line-height-computed + 5); // Height of the `label` and its margin
|
||||||
// Apply class to a `p` element to make any string of text align with labels in
|
}
|
||||||
// a horizontal form layout.
|
&.sr-only ~ .form-control-feedback {
|
||||||
|
top: 0;
|
||||||
.form-control-static {
|
}
|
||||||
margin-bottom: 0; // Remove default margin from `p`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -305,7 +423,6 @@ input[type="checkbox"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Inline forms
|
// Inline forms
|
||||||
//
|
//
|
||||||
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
|
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
|
||||||
|
|
@ -335,32 +452,52 @@ input[type="checkbox"],
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make static controls behave like regular ones
|
||||||
|
.form-control-static {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
display: inline-table;
|
||||||
|
vertical-align: middle;
|
||||||
|
|
||||||
|
.input-group-addon,
|
||||||
|
.input-group-btn,
|
||||||
|
.form-control {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Input groups need that 100% width though
|
||||||
|
.input-group > .form-control {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.control-label {
|
.control-label {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove default margin on radios/checkboxes that were used for stacking, and
|
// Remove default margin on radios/checkboxes that were used for stacking, and
|
||||||
// then undo the floating of radios and checkboxes to match (which also avoids
|
// then undo the floating of radios and checkboxes to match.
|
||||||
// a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
|
|
||||||
.radio,
|
.radio,
|
||||||
.checkbox {
|
.checkbox {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
padding-left: 0;
|
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
|
||||||
|
label {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.radio input[type="radio"],
|
.radio input[type="radio"],
|
||||||
.checkbox input[type="checkbox"] {
|
.checkbox input[type="checkbox"] {
|
||||||
float: none;
|
position: relative;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validation states
|
// Re-override the feedback icon.
|
||||||
//
|
|
||||||
// Reposition the icon because it's now within a grid column and columns have
|
|
||||||
// `position: relative;` on them. Also accounts for the grid gutter padding.
|
|
||||||
.has-feedback .form-control-feedback {
|
.has-feedback .form-control-feedback {
|
||||||
top: 0;
|
top: 0;
|
||||||
}
|
}
|
||||||
|
|
@ -375,8 +512,9 @@ input[type="checkbox"],
|
||||||
|
|
||||||
.form-horizontal {
|
.form-horizontal {
|
||||||
|
|
||||||
// Consistent vertical alignment of labels, radios, and checkboxes
|
// Consistent vertical alignment of radios and checkboxes
|
||||||
.control-label,
|
//
|
||||||
|
// Labels also get some reset styles, but that is scoped to a media query below.
|
||||||
.radio,
|
.radio,
|
||||||
.checkbox,
|
.checkbox,
|
||||||
.radio-inline,
|
.radio-inline,
|
||||||
|
|
@ -397,14 +535,13 @@ input[type="checkbox"],
|
||||||
.make-row();
|
.make-row();
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control-static {
|
// Reset spacing and right align labels, but scope to media queries so that
|
||||||
padding-top: (@padding-base-vertical + 1);
|
// labels on narrow viewports stack the same as a default form example.
|
||||||
}
|
|
||||||
|
|
||||||
// Only right align form labels here when the columns stop stacking
|
|
||||||
@media (min-width: @screen-sm-min) {
|
@media (min-width: @screen-sm-min) {
|
||||||
.control-label {
|
.control-label {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-top: (@padding-base-vertical + 1); // Default padding plus a border
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -413,7 +550,25 @@ input[type="checkbox"],
|
||||||
// Reposition the icon because it's now within a grid column and columns have
|
// Reposition the icon because it's now within a grid column and columns have
|
||||||
// `position: relative;` on them. Also accounts for the grid gutter padding.
|
// `position: relative;` on them. Also accounts for the grid gutter padding.
|
||||||
.has-feedback .form-control-feedback {
|
.has-feedback .form-control-feedback {
|
||||||
top: 0;
|
|
||||||
right: (@grid-gutter-width / 2);
|
right: (@grid-gutter-width / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Form group sizes
|
||||||
|
//
|
||||||
|
// Quick utility class for applying `.input-lg` and `.input-sm` styles to the
|
||||||
|
// inputs and labels within a `.form-group`.
|
||||||
|
.form-group-lg {
|
||||||
|
@media (min-width: @screen-sm-min) {
|
||||||
|
.control-label {
|
||||||
|
padding-top: ((@padding-large-vertical * @line-height-large) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.form-group-sm {
|
||||||
|
@media (min-width: @screen-sm-min) {
|
||||||
|
.control-label {
|
||||||
|
padding-top: (@padding-small-vertical + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,12 @@
|
||||||
// Import the fonts
|
// Import the fonts
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Glyphicons Halflings';
|
font-family: 'Glyphicons Halflings';
|
||||||
src: ~"url('@{icon-font-path}@{icon-font-name}.eot')";
|
src: url('@{icon-font-path}@{icon-font-name}.eot');
|
||||||
src: ~"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')",
|
src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),
|
||||||
~"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')",
|
url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),
|
||||||
~"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')",
|
url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),
|
||||||
~"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')";
|
url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),
|
||||||
|
url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Catchall baseclass
|
// Catchall baseclass
|
||||||
|
|
@ -33,7 +34,8 @@
|
||||||
// Individual icons
|
// Individual icons
|
||||||
.glyphicon-asterisk { &:before { content: "\2a"; } }
|
.glyphicon-asterisk { &:before { content: "\2a"; } }
|
||||||
.glyphicon-plus { &:before { content: "\2b"; } }
|
.glyphicon-plus { &:before { content: "\2b"; } }
|
||||||
.glyphicon-euro { &:before { content: "\20ac"; } }
|
.glyphicon-euro,
|
||||||
|
.glyphicon-eur { &:before { content: "\20ac"; } }
|
||||||
.glyphicon-minus { &:before { content: "\2212"; } }
|
.glyphicon-minus { &:before { content: "\2212"; } }
|
||||||
.glyphicon-cloud { &:before { content: "\2601"; } }
|
.glyphicon-cloud { &:before { content: "\2601"; } }
|
||||||
.glyphicon-envelope { &:before { content: "\2709"; } }
|
.glyphicon-envelope { &:before { content: "\2709"; } }
|
||||||
|
|
@ -231,3 +233,73 @@
|
||||||
.glyphicon-cloud-upload { &:before { content: "\e198"; } }
|
.glyphicon-cloud-upload { &:before { content: "\e198"; } }
|
||||||
.glyphicon-tree-conifer { &:before { content: "\e199"; } }
|
.glyphicon-tree-conifer { &:before { content: "\e199"; } }
|
||||||
.glyphicon-tree-deciduous { &:before { content: "\e200"; } }
|
.glyphicon-tree-deciduous { &:before { content: "\e200"; } }
|
||||||
|
.glyphicon-cd { &:before { content: "\e201"; } }
|
||||||
|
.glyphicon-save-file { &:before { content: "\e202"; } }
|
||||||
|
.glyphicon-open-file { &:before { content: "\e203"; } }
|
||||||
|
.glyphicon-level-up { &:before { content: "\e204"; } }
|
||||||
|
.glyphicon-copy { &:before { content: "\e205"; } }
|
||||||
|
.glyphicon-paste { &:before { content: "\e206"; } }
|
||||||
|
// The following 2 Glyphicons are omitted for the time being because
|
||||||
|
// they currently use Unicode codepoints that are outside the
|
||||||
|
// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle
|
||||||
|
// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.
|
||||||
|
// Notably, the bug affects some older versions of the Android Browser.
|
||||||
|
// More info: https://github.com/twbs/bootstrap/issues/10106
|
||||||
|
// .glyphicon-door { &:before { content: "\1f6aa"; } }
|
||||||
|
// .glyphicon-key { &:before { content: "\1f511"; } }
|
||||||
|
.glyphicon-alert { &:before { content: "\e209"; } }
|
||||||
|
.glyphicon-equalizer { &:before { content: "\e210"; } }
|
||||||
|
.glyphicon-king { &:before { content: "\e211"; } }
|
||||||
|
.glyphicon-queen { &:before { content: "\e212"; } }
|
||||||
|
.glyphicon-pawn { &:before { content: "\e213"; } }
|
||||||
|
.glyphicon-bishop { &:before { content: "\e214"; } }
|
||||||
|
.glyphicon-knight { &:before { content: "\e215"; } }
|
||||||
|
.glyphicon-baby-formula { &:before { content: "\e216"; } }
|
||||||
|
.glyphicon-tent { &:before { content: "\26fa"; } }
|
||||||
|
.glyphicon-blackboard { &:before { content: "\e218"; } }
|
||||||
|
.glyphicon-bed { &:before { content: "\e219"; } }
|
||||||
|
.glyphicon-apple { &:before { content: "\f8ff"; } }
|
||||||
|
.glyphicon-erase { &:before { content: "\e221"; } }
|
||||||
|
.glyphicon-hourglass { &:before { content: "\231b"; } }
|
||||||
|
.glyphicon-lamp { &:before { content: "\e223"; } }
|
||||||
|
.glyphicon-duplicate { &:before { content: "\e224"; } }
|
||||||
|
.glyphicon-piggy-bank { &:before { content: "\e225"; } }
|
||||||
|
.glyphicon-scissors { &:before { content: "\e226"; } }
|
||||||
|
.glyphicon-bitcoin { &:before { content: "\e227"; } }
|
||||||
|
.glyphicon-btc { &:before { content: "\e227"; } }
|
||||||
|
.glyphicon-xbt { &:before { content: "\e227"; } }
|
||||||
|
.glyphicon-yen { &:before { content: "\00a5"; } }
|
||||||
|
.glyphicon-jpy { &:before { content: "\00a5"; } }
|
||||||
|
.glyphicon-ruble { &:before { content: "\20bd"; } }
|
||||||
|
.glyphicon-rub { &:before { content: "\20bd"; } }
|
||||||
|
.glyphicon-scale { &:before { content: "\e230"; } }
|
||||||
|
.glyphicon-ice-lolly { &:before { content: "\e231"; } }
|
||||||
|
.glyphicon-ice-lolly-tasted { &:before { content: "\e232"; } }
|
||||||
|
.glyphicon-education { &:before { content: "\e233"; } }
|
||||||
|
.glyphicon-option-horizontal { &:before { content: "\e234"; } }
|
||||||
|
.glyphicon-option-vertical { &:before { content: "\e235"; } }
|
||||||
|
.glyphicon-menu-hamburger { &:before { content: "\e236"; } }
|
||||||
|
.glyphicon-modal-window { &:before { content: "\e237"; } }
|
||||||
|
.glyphicon-oil { &:before { content: "\e238"; } }
|
||||||
|
.glyphicon-grain { &:before { content: "\e239"; } }
|
||||||
|
.glyphicon-sunglasses { &:before { content: "\e240"; } }
|
||||||
|
.glyphicon-text-size { &:before { content: "\e241"; } }
|
||||||
|
.glyphicon-text-color { &:before { content: "\e242"; } }
|
||||||
|
.glyphicon-text-background { &:before { content: "\e243"; } }
|
||||||
|
.glyphicon-object-align-top { &:before { content: "\e244"; } }
|
||||||
|
.glyphicon-object-align-bottom { &:before { content: "\e245"; } }
|
||||||
|
.glyphicon-object-align-horizontal{ &:before { content: "\e246"; } }
|
||||||
|
.glyphicon-object-align-left { &:before { content: "\e247"; } }
|
||||||
|
.glyphicon-object-align-vertical { &:before { content: "\e248"; } }
|
||||||
|
.glyphicon-object-align-right { &:before { content: "\e249"; } }
|
||||||
|
.glyphicon-triangle-right { &:before { content: "\e250"; } }
|
||||||
|
.glyphicon-triangle-left { &:before { content: "\e251"; } }
|
||||||
|
.glyphicon-triangle-bottom { &:before { content: "\e252"; } }
|
||||||
|
.glyphicon-triangle-top { &:before { content: "\e253"; } }
|
||||||
|
.glyphicon-console { &:before { content: "\e254"; } }
|
||||||
|
.glyphicon-superscript { &:before { content: "\e255"; } }
|
||||||
|
.glyphicon-subscript { &:before { content: "\e256"; } }
|
||||||
|
.glyphicon-menu-left { &:before { content: "\e257"; } }
|
||||||
|
.glyphicon-menu-right { &:before { content: "\e258"; } }
|
||||||
|
.glyphicon-menu-down { &:before { content: "\e259"; } }
|
||||||
|
.glyphicon-menu-up { &:before { content: "\e260"; } }
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,7 @@
|
||||||
// Columns, offsets, pushes, and pulls for extra small devices like
|
// Columns, offsets, pushes, and pulls for extra small devices like
|
||||||
// smartphones.
|
// smartphones.
|
||||||
|
|
||||||
.make-grid-columns-float(xs);
|
.make-grid(xs);
|
||||||
.make-grid(@grid-columns, xs, width);
|
|
||||||
.make-grid(@grid-columns, xs, pull);
|
|
||||||
.make-grid(@grid-columns, xs, push);
|
|
||||||
.make-grid(@grid-columns, xs, offset);
|
|
||||||
|
|
||||||
|
|
||||||
// Small grid
|
// Small grid
|
||||||
|
|
@ -66,11 +62,7 @@
|
||||||
// to tablets.
|
// to tablets.
|
||||||
|
|
||||||
@media (min-width: @screen-sm-min) {
|
@media (min-width: @screen-sm-min) {
|
||||||
.make-grid-columns-float(sm);
|
.make-grid(sm);
|
||||||
.make-grid(@grid-columns, sm, width);
|
|
||||||
.make-grid(@grid-columns, sm, pull);
|
|
||||||
.make-grid(@grid-columns, sm, push);
|
|
||||||
.make-grid(@grid-columns, sm, offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -79,11 +71,7 @@
|
||||||
// Columns, offsets, pushes, and pulls for the desktop device range.
|
// Columns, offsets, pushes, and pulls for the desktop device range.
|
||||||
|
|
||||||
@media (min-width: @screen-md-min) {
|
@media (min-width: @screen-md-min) {
|
||||||
.make-grid-columns-float(md);
|
.make-grid(md);
|
||||||
.make-grid(@grid-columns, md, width);
|
|
||||||
.make-grid(@grid-columns, md, pull);
|
|
||||||
.make-grid(@grid-columns, md, push);
|
|
||||||
.make-grid(@grid-columns, md, offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -92,9 +80,5 @@
|
||||||
// Columns, offsets, pushes, and pulls for the large desktop device range.
|
// Columns, offsets, pushes, and pulls for the large desktop device range.
|
||||||
|
|
||||||
@media (min-width: @screen-lg-min) {
|
@media (min-width: @screen-lg-min) {
|
||||||
.make-grid-columns-float(lg);
|
.make-grid(lg);
|
||||||
.make-grid(@grid-columns, lg, width);
|
|
||||||
.make-grid(@grid-columns, lg, pull);
|
|
||||||
.make-grid(@grid-columns, lg, push);
|
|
||||||
.make-grid(@grid-columns, lg, offset);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control {
|
.form-control {
|
||||||
|
// Ensure that the input is always above the *appended* addon button for
|
||||||
|
// proper border colors.
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
// IE9 fubars the placeholder attribute in text inputs and the arrows on
|
// IE9 fubars the placeholder attribute in text inputs and the arrows on
|
||||||
// select elements in input groups. To fix it, we float the input. Details:
|
// select elements in input groups. To fix it, we float the input. Details:
|
||||||
// https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
|
// https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
|
||||||
|
|
@ -34,10 +39,14 @@
|
||||||
|
|
||||||
.input-group-lg > .form-control,
|
.input-group-lg > .form-control,
|
||||||
.input-group-lg > .input-group-addon,
|
.input-group-lg > .input-group-addon,
|
||||||
.input-group-lg > .input-group-btn > .btn { .input-lg(); }
|
.input-group-lg > .input-group-btn > .btn {
|
||||||
|
.input-lg();
|
||||||
|
}
|
||||||
.input-group-sm > .form-control,
|
.input-group-sm > .form-control,
|
||||||
.input-group-sm > .input-group-addon,
|
.input-group-sm > .input-group-addon,
|
||||||
.input-group-sm > .input-group-btn > .btn { .input-sm(); }
|
.input-group-sm > .input-group-btn > .btn {
|
||||||
|
.input-sm();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Display as table-cell
|
// Display as table-cell
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
|
|
||||||
.jumbotron {
|
.jumbotron {
|
||||||
padding: @jumbotron-padding;
|
padding: @jumbotron-padding (@jumbotron-padding / 2);
|
||||||
margin-bottom: @jumbotron-padding;
|
margin-bottom: @jumbotron-padding;
|
||||||
color: @jumbotron-color;
|
color: @jumbotron-color;
|
||||||
background-color: @jumbotron-bg;
|
background-color: @jumbotron-bg;
|
||||||
|
|
@ -13,13 +13,19 @@
|
||||||
.h1 {
|
.h1 {
|
||||||
color: @jumbotron-heading-color;
|
color: @jumbotron-heading-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-bottom: (@jumbotron-padding / 2);
|
margin-bottom: (@jumbotron-padding / 2);
|
||||||
font-size: @jumbotron-font-size;
|
font-size: @jumbotron-font-size;
|
||||||
font-weight: 200;
|
font-weight: 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container & {
|
> hr {
|
||||||
|
border-top-color: darken(@jumbotron-bg, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.container &,
|
||||||
|
.container-fluid & {
|
||||||
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
|
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -28,10 +34,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width: @screen-sm-min) {
|
@media screen and (min-width: @screen-sm-min) {
|
||||||
padding-top: (@jumbotron-padding * 1.6);
|
padding: (@jumbotron-padding * 1.6) 0;
|
||||||
padding-bottom: (@jumbotron-padding * 1.6);
|
|
||||||
|
|
||||||
.container & {
|
.container &,
|
||||||
|
.container-fluid & {
|
||||||
padding-left: (@jumbotron-padding * 2);
|
padding-left: (@jumbotron-padding * 2);
|
||||||
padding-right: (@jumbotron-padding * 2);
|
padding-right: (@jumbotron-padding * 2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
border-radius: .25em;
|
border-radius: .25em;
|
||||||
|
|
||||||
// Add hover effects, but only for links
|
// Add hover effects, but only for links
|
||||||
&[href] {
|
a& {
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: @label-link-hover-color;
|
color: @label-link-hover-color;
|
||||||
|
|
|
||||||
|
|
@ -35,14 +35,6 @@
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
.border-bottom-radius(@list-group-border-radius);
|
.border-bottom-radius(@list-group-border-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Align badges within list items
|
|
||||||
> .badge {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
> .badge + .badge {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -62,8 +54,28 @@ a.list-group-item {
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
color: @list-group-link-hover-color;
|
||||||
background-color: @list-group-hover-bg;
|
background-color: @list-group-hover-bg;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-group-item {
|
||||||
|
// Disabled state
|
||||||
|
&.disabled,
|
||||||
|
&.disabled:hover,
|
||||||
|
&.disabled:focus {
|
||||||
|
background-color: @list-group-disabled-bg;
|
||||||
|
color: @list-group-disabled-color;
|
||||||
|
cursor: @cursor-disabled;
|
||||||
|
|
||||||
|
// Force color to inherit for custom content
|
||||||
|
.list-group-item-heading {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
.list-group-item-text {
|
||||||
|
color: @list-group-disabled-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Active class on item itself, not parent
|
// Active class on item itself, not parent
|
||||||
&.active,
|
&.active,
|
||||||
|
|
@ -75,7 +87,9 @@ a.list-group-item {
|
||||||
border-color: @list-group-active-border;
|
border-color: @list-group-active-border;
|
||||||
|
|
||||||
// Force color to inherit for custom content
|
// Force color to inherit for custom content
|
||||||
.list-group-item-heading {
|
.list-group-item-heading,
|
||||||
|
.list-group-item-heading > small,
|
||||||
|
.list-group-item-heading > .small {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
.list-group-item-text {
|
.list-group-item-text {
|
||||||
|
|
|
||||||
|
|
@ -1,54 +1,59 @@
|
||||||
// Media objects
|
.media {
|
||||||
// Source: http://stubbornella.org/content/?p=497
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Common styles
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
// Clear the floats
|
|
||||||
.media,
|
|
||||||
.media-body {
|
|
||||||
overflow: hidden;
|
|
||||||
zoom: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Proper spacing between instances of .media
|
// Proper spacing between instances of .media
|
||||||
.media,
|
|
||||||
.media .media {
|
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
}
|
|
||||||
.media:first-child {
|
&:first-child {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.media,
|
||||||
|
.media-body {
|
||||||
|
zoom: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-body {
|
||||||
|
width: 10000px;
|
||||||
|
}
|
||||||
|
|
||||||
// For images and videos, set to block
|
|
||||||
.media-object {
|
.media-object {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.media-right,
|
||||||
|
.media > .pull-right {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-left,
|
||||||
|
.media > .pull-left {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-left,
|
||||||
|
.media-right,
|
||||||
|
.media-body {
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-middle {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-bottom {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
// Reset margins on headings for tighter default spacing
|
// Reset margins on headings for tighter default spacing
|
||||||
.media-heading {
|
.media-heading {
|
||||||
margin: 0 0 5px;
|
margin-top: 0;
|
||||||
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Media image alignment
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.media {
|
|
||||||
> .pull-left {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
> .pull-right {
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Media list variation
|
// Media list variation
|
||||||
// -------------------------
|
//
|
||||||
|
|
||||||
// Undo default ul/ol styles
|
// Undo default ul/ol styles
|
||||||
.media-list {
|
.media-list {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
|
|
|
||||||
|
|
@ -1,926 +1,39 @@
|
||||||
//
|
|
||||||
// Mixins
|
// Mixins
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// Utilities
|
// Utilities
|
||||||
// -------------------------
|
@import "mixins/hide-text.less";
|
||||||
|
@import "mixins/opacity.less";
|
||||||
// Clearfix
|
@import "mixins/image.less";
|
||||||
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
|
@import "mixins/labels.less";
|
||||||
//
|
@import "mixins/reset-filter.less";
|
||||||
// For modern browsers
|
@import "mixins/resize.less";
|
||||||
// 1. The space content is one way to avoid an Opera bug when the
|
@import "mixins/responsive-visibility.less";
|
||||||
// contenteditable attribute is included anywhere else in the document.
|
@import "mixins/size.less";
|
||||||
// Otherwise it causes space to appear at the top and bottom of elements
|
@import "mixins/tab-focus.less";
|
||||||
// that are clearfixed.
|
@import "mixins/text-emphasis.less";
|
||||||
// 2. The use of `table` rather than `block` is only necessary if using
|
@import "mixins/text-overflow.less";
|
||||||
// `:before` to contain the top-margins of child elements.
|
@import "mixins/vendor-prefixes.less";
|
||||||
.clearfix() {
|
|
||||||
&:before,
|
// Components
|
||||||
&:after {
|
@import "mixins/alerts.less";
|
||||||
content: " "; // 1
|
@import "mixins/buttons.less";
|
||||||
display: table; // 2
|
@import "mixins/panels.less";
|
||||||
}
|
@import "mixins/pagination.less";
|
||||||
&:after {
|
@import "mixins/list-group.less";
|
||||||
clear: both;
|
@import "mixins/nav-divider.less";
|
||||||
}
|
@import "mixins/forms.less";
|
||||||
}
|
@import "mixins/progress-bar.less";
|
||||||
|
@import "mixins/table-row.less";
|
||||||
// WebKit-style focus
|
|
||||||
.tab-focus() {
|
// Skins
|
||||||
// Default
|
@import "mixins/background-variant.less";
|
||||||
outline: thin dotted;
|
@import "mixins/border-radius.less";
|
||||||
// WebKit
|
@import "mixins/gradients.less";
|
||||||
outline: 5px auto -webkit-focus-ring-color;
|
|
||||||
outline-offset: -2px;
|
// Layout
|
||||||
}
|
@import "mixins/clearfix.less";
|
||||||
|
@import "mixins/center-block.less";
|
||||||
// Center-align a block level element
|
@import "mixins/nav-vertical-align.less";
|
||||||
.center-block() {
|
@import "mixins/grid-framework.less";
|
||||||
display: block;
|
@import "mixins/grid.less";
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sizing shortcuts
|
|
||||||
.size(@width; @height) {
|
|
||||||
width: @width;
|
|
||||||
height: @height;
|
|
||||||
}
|
|
||||||
.square(@size) {
|
|
||||||
.size(@size; @size);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placeholder text
|
|
||||||
.placeholder(@color: @input-color-placeholder) {
|
|
||||||
&:-moz-placeholder { color: @color; } // Firefox 4-18
|
|
||||||
&::-moz-placeholder { color: @color; // Firefox 19+
|
|
||||||
opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526
|
|
||||||
&:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
|
|
||||||
&::-webkit-input-placeholder { color: @color; } // Safari and Chrome
|
|
||||||
}
|
|
||||||
|
|
||||||
// Text overflow
|
|
||||||
// Requires inline-block or block for proper styling
|
|
||||||
.text-overflow() {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// CSS image replacement
|
|
||||||
//
|
|
||||||
// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
|
|
||||||
// mixins being reused as classes with the same name, this doesn't hold up. As
|
|
||||||
// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note
|
|
||||||
// that we cannot chain the mixins together in Less, so they are repeated.
|
|
||||||
//
|
|
||||||
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
|
|
||||||
|
|
||||||
// Deprecated as of v3.0.1 (will be removed in v4)
|
|
||||||
.hide-text() {
|
|
||||||
font: ~"0/0" a;
|
|
||||||
color: transparent;
|
|
||||||
text-shadow: none;
|
|
||||||
background-color: transparent;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
// New mixin to use as of v3.0.1
|
|
||||||
.text-hide() {
|
|
||||||
.hide-text();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// CSS3 PROPERTIES
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Single side border-radius
|
|
||||||
.border-top-radius(@radius) {
|
|
||||||
border-top-right-radius: @radius;
|
|
||||||
border-top-left-radius: @radius;
|
|
||||||
}
|
|
||||||
.border-right-radius(@radius) {
|
|
||||||
border-bottom-right-radius: @radius;
|
|
||||||
border-top-right-radius: @radius;
|
|
||||||
}
|
|
||||||
.border-bottom-radius(@radius) {
|
|
||||||
border-bottom-right-radius: @radius;
|
|
||||||
border-bottom-left-radius: @radius;
|
|
||||||
}
|
|
||||||
.border-left-radius(@radius) {
|
|
||||||
border-bottom-left-radius: @radius;
|
|
||||||
border-top-left-radius: @radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Drop shadows
|
|
||||||
//
|
|
||||||
// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
|
|
||||||
// supported browsers that have box shadow capabilities now support the
|
|
||||||
// standard `box-shadow` property.
|
|
||||||
.box-shadow(@shadow) {
|
|
||||||
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
|
|
||||||
box-shadow: @shadow;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transitions
|
|
||||||
.transition(@transition) {
|
|
||||||
-webkit-transition: @transition;
|
|
||||||
transition: @transition;
|
|
||||||
}
|
|
||||||
.transition-property(@transition-property) {
|
|
||||||
-webkit-transition-property: @transition-property;
|
|
||||||
transition-property: @transition-property;
|
|
||||||
}
|
|
||||||
.transition-delay(@transition-delay) {
|
|
||||||
-webkit-transition-delay: @transition-delay;
|
|
||||||
transition-delay: @transition-delay;
|
|
||||||
}
|
|
||||||
.transition-duration(@transition-duration) {
|
|
||||||
-webkit-transition-duration: @transition-duration;
|
|
||||||
transition-duration: @transition-duration;
|
|
||||||
}
|
|
||||||
.transition-transform(@transition) {
|
|
||||||
-webkit-transition: -webkit-transform @transition;
|
|
||||||
-moz-transition: -moz-transform @transition;
|
|
||||||
-o-transition: -o-transform @transition;
|
|
||||||
transition: transform @transition;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transformations
|
|
||||||
.rotate(@degrees) {
|
|
||||||
-webkit-transform: rotate(@degrees);
|
|
||||||
-ms-transform: rotate(@degrees); // IE9 only
|
|
||||||
transform: rotate(@degrees);
|
|
||||||
}
|
|
||||||
.scale(@ratio; @ratio-y...) {
|
|
||||||
-webkit-transform: scale(@ratio, @ratio-y);
|
|
||||||
-ms-transform: scale(@ratio, @ratio-y); // IE9 only
|
|
||||||
transform: scale(@ratio, @ratio-y);
|
|
||||||
}
|
|
||||||
.translate(@x; @y) {
|
|
||||||
-webkit-transform: translate(@x, @y);
|
|
||||||
-ms-transform: translate(@x, @y); // IE9 only
|
|
||||||
transform: translate(@x, @y);
|
|
||||||
}
|
|
||||||
.skew(@x; @y) {
|
|
||||||
-webkit-transform: skew(@x, @y);
|
|
||||||
-ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
|
|
||||||
transform: skew(@x, @y);
|
|
||||||
}
|
|
||||||
.translate3d(@x; @y; @z) {
|
|
||||||
-webkit-transform: translate3d(@x, @y, @z);
|
|
||||||
transform: translate3d(@x, @y, @z);
|
|
||||||
}
|
|
||||||
|
|
||||||
.rotateX(@degrees) {
|
|
||||||
-webkit-transform: rotateX(@degrees);
|
|
||||||
-ms-transform: rotateX(@degrees); // IE9 only
|
|
||||||
transform: rotateX(@degrees);
|
|
||||||
}
|
|
||||||
.rotateY(@degrees) {
|
|
||||||
-webkit-transform: rotateY(@degrees);
|
|
||||||
-ms-transform: rotateY(@degrees); // IE9 only
|
|
||||||
transform: rotateY(@degrees);
|
|
||||||
}
|
|
||||||
.perspective(@perspective) {
|
|
||||||
-webkit-perspective: @perspective;
|
|
||||||
-moz-perspective: @perspective;
|
|
||||||
perspective: @perspective;
|
|
||||||
}
|
|
||||||
.perspective-origin(@perspective) {
|
|
||||||
-webkit-perspective-origin: @perspective;
|
|
||||||
-moz-perspective-origin: @perspective;
|
|
||||||
perspective-origin: @perspective;
|
|
||||||
}
|
|
||||||
.transform-origin(@origin) {
|
|
||||||
-webkit-transform-origin: @origin;
|
|
||||||
-moz-transform-origin: @origin;
|
|
||||||
-ms-transform-origin: @origin; // IE9 only
|
|
||||||
transform-origin: @origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Animations
|
|
||||||
.animation(@animation) {
|
|
||||||
-webkit-animation: @animation;
|
|
||||||
animation: @animation;
|
|
||||||
}
|
|
||||||
.animation-name(@name) {
|
|
||||||
-webkit-animation-name: @name;
|
|
||||||
animation-name: @name;
|
|
||||||
}
|
|
||||||
.animation-duration(@duration) {
|
|
||||||
-webkit-animation-duration: @duration;
|
|
||||||
animation-duration: @duration;
|
|
||||||
}
|
|
||||||
.animation-timing-function(@timing-function) {
|
|
||||||
-webkit-animation-timing-function: @timing-function;
|
|
||||||
animation-timing-function: @timing-function;
|
|
||||||
}
|
|
||||||
.animation-delay(@delay) {
|
|
||||||
-webkit-animation-delay: @delay;
|
|
||||||
animation-delay: @delay;
|
|
||||||
}
|
|
||||||
.animation-iteration-count(@iteration-count) {
|
|
||||||
-webkit-animation-iteration-count: @iteration-count;
|
|
||||||
animation-iteration-count: @iteration-count;
|
|
||||||
}
|
|
||||||
.animation-direction(@direction) {
|
|
||||||
-webkit-animation-direction: @direction;
|
|
||||||
animation-direction: @direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Backface visibility
|
|
||||||
// Prevent browsers from flickering when using CSS 3D transforms.
|
|
||||||
// Default value is `visible`, but can be changed to `hidden`
|
|
||||||
.backface-visibility(@visibility){
|
|
||||||
-webkit-backface-visibility: @visibility;
|
|
||||||
-moz-backface-visibility: @visibility;
|
|
||||||
backface-visibility: @visibility;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Box sizing
|
|
||||||
.box-sizing(@boxmodel) {
|
|
||||||
-webkit-box-sizing: @boxmodel;
|
|
||||||
-moz-box-sizing: @boxmodel;
|
|
||||||
box-sizing: @boxmodel;
|
|
||||||
}
|
|
||||||
|
|
||||||
// User select
|
|
||||||
// For selecting text on the page
|
|
||||||
.user-select(@select) {
|
|
||||||
-webkit-user-select: @select;
|
|
||||||
-moz-user-select: @select;
|
|
||||||
-ms-user-select: @select; // IE10+
|
|
||||||
-o-user-select: @select;
|
|
||||||
user-select: @select;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resize anything
|
|
||||||
.resizable(@direction) {
|
|
||||||
resize: @direction; // Options: horizontal, vertical, both
|
|
||||||
overflow: auto; // Safari fix
|
|
||||||
}
|
|
||||||
|
|
||||||
// CSS3 Content Columns
|
|
||||||
.content-columns(@column-count; @column-gap: @grid-gutter-width) {
|
|
||||||
-webkit-column-count: @column-count;
|
|
||||||
-moz-column-count: @column-count;
|
|
||||||
column-count: @column-count;
|
|
||||||
-webkit-column-gap: @column-gap;
|
|
||||||
-moz-column-gap: @column-gap;
|
|
||||||
column-gap: @column-gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Optional hyphenation
|
|
||||||
.hyphens(@mode: auto) {
|
|
||||||
word-wrap: break-word;
|
|
||||||
-webkit-hyphens: @mode;
|
|
||||||
-moz-hyphens: @mode;
|
|
||||||
-ms-hyphens: @mode; // IE10+
|
|
||||||
-o-hyphens: @mode;
|
|
||||||
hyphens: @mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Opacity
|
|
||||||
.opacity(@opacity) {
|
|
||||||
opacity: @opacity;
|
|
||||||
// IE8 filter
|
|
||||||
@opacity-ie: (@opacity * 100);
|
|
||||||
filter: ~"alpha(opacity=@{opacity-ie})";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// GRADIENTS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
#gradient {
|
|
||||||
|
|
||||||
// Horizontal gradient, from left to right
|
|
||||||
//
|
|
||||||
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
|
||||||
// Color stops are not available in IE9 and below.
|
|
||||||
.horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
|
|
||||||
background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+
|
|
||||||
background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vertical gradient, from top to bottom
|
|
||||||
//
|
|
||||||
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
|
||||||
// Color stops are not available in IE9 and below.
|
|
||||||
.vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
|
|
||||||
background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
|
|
||||||
background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down
|
|
||||||
}
|
|
||||||
|
|
||||||
.directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+
|
|
||||||
background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
|
||||||
}
|
|
||||||
.horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
|
|
||||||
background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
|
|
||||||
background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
|
|
||||||
}
|
|
||||||
.vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
|
|
||||||
background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
|
|
||||||
background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
|
|
||||||
}
|
|
||||||
.radial(@inner-color: #555; @outer-color: #333) {
|
|
||||||
background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
|
|
||||||
background-image: radial-gradient(circle, @inner-color, @outer-color);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
.striped(@color: rgba(255,255,255,.15); @angle: 45deg) {
|
|
||||||
background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
|
|
||||||
background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset filters for IE
|
|
||||||
//
|
|
||||||
// When you need to remove a gradient background, do not forget to use this to reset
|
|
||||||
// the IE filter for IE9 and below.
|
|
||||||
.reset-filter() {
|
|
||||||
filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Retina images
|
|
||||||
//
|
|
||||||
// Short retina mixin for setting background-image and -size
|
|
||||||
|
|
||||||
.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
|
|
||||||
background-image: url("@{file-1x}");
|
|
||||||
|
|
||||||
@media
|
|
||||||
only screen and (-webkit-min-device-pixel-ratio: 2),
|
|
||||||
only screen and ( min--moz-device-pixel-ratio: 2),
|
|
||||||
only screen and ( -o-min-device-pixel-ratio: 2/1),
|
|
||||||
only screen and ( min-device-pixel-ratio: 2),
|
|
||||||
only screen and ( min-resolution: 192dpi),
|
|
||||||
only screen and ( min-resolution: 2dppx) {
|
|
||||||
background-image: url("@{file-2x}");
|
|
||||||
background-size: @width-1x @height-1x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Responsive image
|
|
||||||
//
|
|
||||||
// Keep images from scaling beyond the width of their parents.
|
|
||||||
|
|
||||||
.img-responsive(@display: block) {
|
|
||||||
display: @display;
|
|
||||||
max-width: 100%; // Part 1: Set a maximum relative to the parent
|
|
||||||
height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// COMPONENT MIXINS
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
// Horizontal dividers
|
|
||||||
// -------------------------
|
|
||||||
// Dividers (basically an hr) within dropdowns and nav lists
|
|
||||||
.nav-divider(@color: #e5e5e5) {
|
|
||||||
height: 1px;
|
|
||||||
margin: ((@line-height-computed / 2) - 1) 0;
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: @color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Panels
|
|
||||||
// -------------------------
|
|
||||||
.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
|
|
||||||
border-color: @border;
|
|
||||||
|
|
||||||
& > .panel-heading {
|
|
||||||
color: @heading-text-color;
|
|
||||||
background-color: @heading-bg-color;
|
|
||||||
border-color: @heading-border;
|
|
||||||
|
|
||||||
+ .panel-collapse .panel-body {
|
|
||||||
border-top-color: @border;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
& > .panel-footer {
|
|
||||||
+ .panel-collapse .panel-body {
|
|
||||||
border-bottom-color: @border;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alerts
|
|
||||||
// -------------------------
|
|
||||||
.alert-variant(@background; @border; @text-color) {
|
|
||||||
background-color: @background;
|
|
||||||
border-color: @border;
|
|
||||||
color: @text-color;
|
|
||||||
|
|
||||||
hr {
|
|
||||||
border-top-color: darken(@border, 5%);
|
|
||||||
}
|
|
||||||
.alert-link {
|
|
||||||
color: darken(@text-color, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tables
|
|
||||||
// -------------------------
|
|
||||||
.table-row-variant(@state; @background) {
|
|
||||||
// Exact selectors below required to override `.table-striped` and prevent
|
|
||||||
// inheritance to nested tables.
|
|
||||||
.table > thead > tr,
|
|
||||||
.table > tbody > tr,
|
|
||||||
.table > tfoot > tr {
|
|
||||||
> td.@{state},
|
|
||||||
> th.@{state},
|
|
||||||
&.@{state} > td,
|
|
||||||
&.@{state} > th {
|
|
||||||
background-color: @background;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hover states for `.table-hover`
|
|
||||||
// Note: this is not available for cells or rows within `thead` or `tfoot`.
|
|
||||||
.table-hover > tbody > tr {
|
|
||||||
> td.@{state}:hover,
|
|
||||||
> th.@{state}:hover,
|
|
||||||
&.@{state}:hover > td,
|
|
||||||
&.@{state}:hover > th {
|
|
||||||
background-color: darken(@background, 5%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// List Groups
|
|
||||||
// -------------------------
|
|
||||||
.list-group-item-variant(@state; @background; @color) {
|
|
||||||
.list-group-item-@{state} {
|
|
||||||
color: @color;
|
|
||||||
background-color: @background;
|
|
||||||
|
|
||||||
a& {
|
|
||||||
color: @color;
|
|
||||||
|
|
||||||
.list-group-item-heading { color: inherit; }
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: @color;
|
|
||||||
background-color: darken(@background, 5%);
|
|
||||||
}
|
|
||||||
&.active,
|
|
||||||
&.active:hover,
|
|
||||||
&.active:focus {
|
|
||||||
color: #fff;
|
|
||||||
background-color: @color;
|
|
||||||
border-color: @color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Button variants
|
|
||||||
// -------------------------
|
|
||||||
// Easily pump out default styles, as well as :hover, :focus, :active,
|
|
||||||
// and disabled options for all buttons
|
|
||||||
.button-variant(@color; @background; @border) {
|
|
||||||
color: @color;
|
|
||||||
background-color: @background;
|
|
||||||
border-color: @border;
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus,
|
|
||||||
&:active,
|
|
||||||
&.active,
|
|
||||||
.open .dropdown-toggle& {
|
|
||||||
color: @color;
|
|
||||||
background-color: darken(@background, 8%);
|
|
||||||
border-color: darken(@border, 12%);
|
|
||||||
}
|
|
||||||
&:active,
|
|
||||||
&.active,
|
|
||||||
.open .dropdown-toggle& {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
&.disabled,
|
|
||||||
&[disabled],
|
|
||||||
fieldset[disabled] & {
|
|
||||||
&,
|
|
||||||
&:hover,
|
|
||||||
&:focus,
|
|
||||||
&:active,
|
|
||||||
&.active {
|
|
||||||
background-color: @background;
|
|
||||||
border-color: @border;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.badge {
|
|
||||||
color: @background;
|
|
||||||
background-color: @color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Button sizes
|
|
||||||
// -------------------------
|
|
||||||
.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
|
|
||||||
padding: @padding-vertical @padding-horizontal;
|
|
||||||
font-size: @font-size;
|
|
||||||
line-height: @line-height;
|
|
||||||
border-radius: @border-radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pagination
|
|
||||||
// -------------------------
|
|
||||||
.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {
|
|
||||||
> li {
|
|
||||||
> a,
|
|
||||||
> span {
|
|
||||||
padding: @padding-vertical @padding-horizontal;
|
|
||||||
font-size: @font-size;
|
|
||||||
}
|
|
||||||
&:first-child {
|
|
||||||
> a,
|
|
||||||
> span {
|
|
||||||
.border-left-radius(@border-radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:last-child {
|
|
||||||
> a,
|
|
||||||
> span {
|
|
||||||
.border-right-radius(@border-radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Labels
|
|
||||||
// -------------------------
|
|
||||||
.label-variant(@color) {
|
|
||||||
background-color: @color;
|
|
||||||
&[href] {
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
background-color: darken(@color, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Contextual backgrounds
|
|
||||||
// -------------------------
|
|
||||||
.bg-variant(@color) {
|
|
||||||
background-color: @color;
|
|
||||||
a&:hover {
|
|
||||||
background-color: darken(@color, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Typography
|
|
||||||
// -------------------------
|
|
||||||
.text-emphasis-variant(@color) {
|
|
||||||
color: @color;
|
|
||||||
a&:hover {
|
|
||||||
color: darken(@color, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navbar vertical align
|
|
||||||
// -------------------------
|
|
||||||
// Vertically center elements in the navbar.
|
|
||||||
// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
|
|
||||||
.navbar-vertical-align(@element-height) {
|
|
||||||
margin-top: ((@navbar-height - @element-height) / 2);
|
|
||||||
margin-bottom: ((@navbar-height - @element-height) / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Progress bars
|
|
||||||
// -------------------------
|
|
||||||
.progress-bar-variant(@color) {
|
|
||||||
background-color: @color;
|
|
||||||
.progress-striped & {
|
|
||||||
#gradient > .striped();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Responsive utilities
|
|
||||||
// -------------------------
|
|
||||||
// More easily include all the states for responsive-utilities.less.
|
|
||||||
.responsive-visibility() {
|
|
||||||
display: block !important;
|
|
||||||
table& { display: table; }
|
|
||||||
tr& { display: table-row !important; }
|
|
||||||
th&,
|
|
||||||
td& { display: table-cell !important; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.responsive-invisibility() {
|
|
||||||
&,
|
|
||||||
tr&,
|
|
||||||
th&,
|
|
||||||
td& { display: none !important; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Grid System
|
|
||||||
// -----------
|
|
||||||
|
|
||||||
// Centered container element
|
|
||||||
.container-fixed() {
|
|
||||||
margin-right: auto;
|
|
||||||
margin-left: auto;
|
|
||||||
padding-left: (@grid-gutter-width / 2);
|
|
||||||
padding-right: (@grid-gutter-width / 2);
|
|
||||||
&:extend(.clearfix all);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creates a wrapper for a series of columns
|
|
||||||
.make-row(@gutter: @grid-gutter-width) {
|
|
||||||
margin-left: (@gutter / -2);
|
|
||||||
margin-right: (@gutter / -2);
|
|
||||||
&:extend(.clearfix all);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate the extra small columns
|
|
||||||
.make-xs-column(@columns; @gutter: @grid-gutter-width) {
|
|
||||||
position: relative;
|
|
||||||
float: left;
|
|
||||||
width: percentage((@columns / @grid-columns));
|
|
||||||
min-height: 1px;
|
|
||||||
padding-left: (@gutter / 2);
|
|
||||||
padding-right: (@gutter / 2);
|
|
||||||
}
|
|
||||||
.make-xs-column-offset(@columns) {
|
|
||||||
@media (min-width: @screen-xs-min) {
|
|
||||||
margin-left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-xs-column-push(@columns) {
|
|
||||||
@media (min-width: @screen-xs-min) {
|
|
||||||
left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-xs-column-pull(@columns) {
|
|
||||||
@media (min-width: @screen-xs-min) {
|
|
||||||
right: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Generate the small columns
|
|
||||||
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
|
|
||||||
position: relative;
|
|
||||||
min-height: 1px;
|
|
||||||
padding-left: (@gutter / 2);
|
|
||||||
padding-right: (@gutter / 2);
|
|
||||||
|
|
||||||
@media (min-width: @screen-sm-min) {
|
|
||||||
float: left;
|
|
||||||
width: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-sm-column-offset(@columns) {
|
|
||||||
@media (min-width: @screen-sm-min) {
|
|
||||||
margin-left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-sm-column-push(@columns) {
|
|
||||||
@media (min-width: @screen-sm-min) {
|
|
||||||
left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-sm-column-pull(@columns) {
|
|
||||||
@media (min-width: @screen-sm-min) {
|
|
||||||
right: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Generate the medium columns
|
|
||||||
.make-md-column(@columns; @gutter: @grid-gutter-width) {
|
|
||||||
position: relative;
|
|
||||||
min-height: 1px;
|
|
||||||
padding-left: (@gutter / 2);
|
|
||||||
padding-right: (@gutter / 2);
|
|
||||||
|
|
||||||
@media (min-width: @screen-md-min) {
|
|
||||||
float: left;
|
|
||||||
width: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-md-column-offset(@columns) {
|
|
||||||
@media (min-width: @screen-md-min) {
|
|
||||||
margin-left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-md-column-push(@columns) {
|
|
||||||
@media (min-width: @screen-md-min) {
|
|
||||||
left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-md-column-pull(@columns) {
|
|
||||||
@media (min-width: @screen-md-min) {
|
|
||||||
right: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Generate the large columns
|
|
||||||
.make-lg-column(@columns; @gutter: @grid-gutter-width) {
|
|
||||||
position: relative;
|
|
||||||
min-height: 1px;
|
|
||||||
padding-left: (@gutter / 2);
|
|
||||||
padding-right: (@gutter / 2);
|
|
||||||
|
|
||||||
@media (min-width: @screen-lg-min) {
|
|
||||||
float: left;
|
|
||||||
width: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-lg-column-offset(@columns) {
|
|
||||||
@media (min-width: @screen-lg-min) {
|
|
||||||
margin-left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-lg-column-push(@columns) {
|
|
||||||
@media (min-width: @screen-lg-min) {
|
|
||||||
left: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.make-lg-column-pull(@columns) {
|
|
||||||
@media (min-width: @screen-lg-min) {
|
|
||||||
right: percentage((@columns / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Framework grid generation
|
|
||||||
//
|
|
||||||
// Used only by Bootstrap to generate the correct number of grid classes given
|
|
||||||
// any value of `@grid-columns`.
|
|
||||||
|
|
||||||
.make-grid-columns() {
|
|
||||||
// Common styles for all sizes of grid columns, widths 1-12
|
|
||||||
.col(@index) when (@index = 1) { // initial
|
|
||||||
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
|
|
||||||
.col((@index + 1), @item);
|
|
||||||
}
|
|
||||||
.col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
|
|
||||||
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
|
|
||||||
.col((@index + 1), ~"@{list}, @{item}");
|
|
||||||
}
|
|
||||||
.col(@index, @list) when (@index > @grid-columns) { // terminal
|
|
||||||
@{list} {
|
|
||||||
position: relative;
|
|
||||||
// Prevent columns from collapsing when empty
|
|
||||||
min-height: 1px;
|
|
||||||
// Inner gutter via padding
|
|
||||||
padding-left: (@grid-gutter-width / 2);
|
|
||||||
padding-right: (@grid-gutter-width / 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.col(1); // kickstart it
|
|
||||||
}
|
|
||||||
|
|
||||||
.make-grid-columns-float(@class) {
|
|
||||||
.col(@index) when (@index = 1) { // initial
|
|
||||||
@item: ~".col-@{class}-@{index}";
|
|
||||||
.col((@index + 1), @item);
|
|
||||||
}
|
|
||||||
.col(@index, @list) when (@index =< @grid-columns) { // general
|
|
||||||
@item: ~".col-@{class}-@{index}";
|
|
||||||
.col((@index + 1), ~"@{list}, @{item}");
|
|
||||||
}
|
|
||||||
.col(@index, @list) when (@index > @grid-columns) { // terminal
|
|
||||||
@{list} {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.col(1); // kickstart it
|
|
||||||
}
|
|
||||||
|
|
||||||
.calc-grid(@index, @class, @type) when (@type = width) and (@index > 0) {
|
|
||||||
.col-@{class}-@{index} {
|
|
||||||
width: percentage((@index / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.calc-grid(@index, @class, @type) when (@type = push) {
|
|
||||||
.col-@{class}-push-@{index} {
|
|
||||||
left: percentage((@index / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.calc-grid(@index, @class, @type) when (@type = pull) {
|
|
||||||
.col-@{class}-pull-@{index} {
|
|
||||||
right: percentage((@index / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.calc-grid(@index, @class, @type) when (@type = offset) {
|
|
||||||
.col-@{class}-offset-@{index} {
|
|
||||||
margin-left: percentage((@index / @grid-columns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Basic looping in LESS
|
|
||||||
.make-grid(@index, @class, @type) when (@index >= 0) {
|
|
||||||
.calc-grid(@index, @class, @type);
|
|
||||||
// next iteration
|
|
||||||
.make-grid((@index - 1), @class, @type);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Form validation states
|
|
||||||
//
|
|
||||||
// Used in forms.less to generate the form validation CSS for warnings, errors,
|
|
||||||
// and successes.
|
|
||||||
|
|
||||||
.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
|
|
||||||
// Color the label and help text
|
|
||||||
.help-block,
|
|
||||||
.control-label,
|
|
||||||
.radio,
|
|
||||||
.checkbox,
|
|
||||||
.radio-inline,
|
|
||||||
.checkbox-inline {
|
|
||||||
color: @text-color;
|
|
||||||
}
|
|
||||||
// Set the border and box shadow on specific inputs to match
|
|
||||||
.form-control {
|
|
||||||
border-color: @border-color;
|
|
||||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
|
|
||||||
&:focus {
|
|
||||||
border-color: darken(@border-color, 10%);
|
|
||||||
@shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
|
|
||||||
.box-shadow(@shadow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Set validation states also for addons
|
|
||||||
.input-group-addon {
|
|
||||||
color: @text-color;
|
|
||||||
border-color: @border-color;
|
|
||||||
background-color: @background-color;
|
|
||||||
}
|
|
||||||
// Optional feedback icon
|
|
||||||
.form-control-feedback {
|
|
||||||
color: @text-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Form control focus state
|
|
||||||
//
|
|
||||||
// Generate a customized focus state and for any input with the specified color,
|
|
||||||
// which defaults to the `@input-focus-border` variable.
|
|
||||||
//
|
|
||||||
// We highly encourage you to not customize the default value, but instead use
|
|
||||||
// this to tweak colors on an as-needed basis. This aesthetic change is based on
|
|
||||||
// WebKit's default styles, but applicable to a wider range of browsers. Its
|
|
||||||
// usability and accessibility should be taken into account with any change.
|
|
||||||
//
|
|
||||||
// Example usage: change the default blue border and shadow to white for better
|
|
||||||
// contrast against a dark gray background.
|
|
||||||
|
|
||||||
.form-control-focus(@color: @input-border-focus) {
|
|
||||||
@color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
|
|
||||||
&:focus {
|
|
||||||
border-color: @color;
|
|
||||||
outline: 0;
|
|
||||||
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Form control sizing
|
|
||||||
//
|
|
||||||
// Relative text size, padding, and border-radii changes for form controls. For
|
|
||||||
// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
|
|
||||||
// element gets special love because it's special, and that's a fact!
|
|
||||||
|
|
||||||
.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
|
|
||||||
height: @input-height;
|
|
||||||
padding: @padding-vertical @padding-horizontal;
|
|
||||||
font-size: @font-size;
|
|
||||||
line-height: @line-height;
|
|
||||||
border-radius: @border-radius;
|
|
||||||
|
|
||||||
select& {
|
|
||||||
height: @input-height;
|
|
||||||
line-height: @input-height;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea&,
|
|
||||||
select[multiple]& {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue