Merge branch 'develop' into builder-ui
Conflicts: modules/backend/widgets/table/assets/js/build-min.js modules/backend/widgets/table/assets/js/table.js
This commit is contained in:
commit
a5b217ff0b
19
CHANGELOG.md
19
CHANGELOG.md
|
|
@ -1,3 +1,22 @@
|
|||
* **Build 304** (2015-10-09)
|
||||
- Added new `where` and `whereComponent` methods for querying CMS template properties.
|
||||
|
||||
* **Build 300** (2015-10-03)
|
||||
- **Happy 2nd Birthday October!**
|
||||
- Page settings now support infinite array nesting with October flavored INI syntax via `Ini::parse` and `Ini::render`.
|
||||
- Added new helper `Twig::parse` for parsing Twig (see Services > Parser docs).
|
||||
|
||||
* **Build 298** (2015-09-24)
|
||||
- Added the ability to use a wildcard URL parameter in CMS pages (see CMS > Pages docs).
|
||||
|
||||
* **Build 297** (2015-09-19)
|
||||
- Introduced new `Revisionable` trait for storing model history (see Database > Traits docs).
|
||||
- Added `timetense` list column type (see Backend > Lists docs), along with `|time_since` and `|time_tense` Twig filters.
|
||||
- Fixed a bug in deferred binding that allowed repeat bindings and ignored add/delete pairs.
|
||||
|
||||
* **Build 293** (2015-09-07)
|
||||
- Corrected a flaw in the Behavior/Extension logic that previously made protected methods and properties accessible as if they were public.
|
||||
|
||||
* **Build 292** (2015-08-28)
|
||||
- Added a new controller method `fireViewEvent()` for extending views and partials (see Plugins > Events docs).
|
||||
- Fixes a bug where the database falls asleep during an update.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ The best place to learn October is by [reading the documentation](http://october
|
|||
|
||||
### Installing October
|
||||
|
||||
Instructions on how to install October can be found at the [installation guide](http://octobercms.com/docs/help/install).
|
||||
Instructions on how to install October can be found at the [installation guide](http://octobercms.com/docs/setup/installation).
|
||||
|
||||
### Development Team
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,14 @@ class ServiceProvider extends ModuleServiceProvider
|
|||
'label' => 'system::lang.permissions.manage_other_administrators',
|
||||
'tab' => 'system::lang.permissions.name'
|
||||
],
|
||||
'backend.manage_preferences' => [
|
||||
'label' => 'system::lang.permissions.manage_preferences',
|
||||
'tab' => 'system::lang.permissions.name'
|
||||
],
|
||||
'backend.manage_editor' => [
|
||||
'label' => 'system::lang.permissions.manage_editor',
|
||||
'tab' => 'system::lang.permissions.name'
|
||||
],
|
||||
'backend.manage_branding' => [
|
||||
'label' => 'system::lang.permissions.manage_branding',
|
||||
'tab' => 'system::lang.permissions.name'
|
||||
|
|
@ -208,6 +216,7 @@ class ServiceProvider extends ModuleServiceProvider
|
|||
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
||||
'icon' => 'icon-laptop',
|
||||
'class' => 'Backend\Models\BackendPreferences',
|
||||
'permissions' => ['backend.manage_preferences'],
|
||||
'order' => 510,
|
||||
'context' => 'mysettings'
|
||||
],
|
||||
|
|
@ -217,6 +226,7 @@ class ServiceProvider extends ModuleServiceProvider
|
|||
'category' => SettingsManager::CATEGORY_MYSETTINGS,
|
||||
'icon' => 'icon-code',
|
||||
'url' => Backend::URL('backend/editorpreferences'),
|
||||
'permissions' => ['backend.manage_editor'],
|
||||
'order' => 520,
|
||||
'context' => 'mysettings'
|
||||
],
|
||||
|
|
|
|||
|
|
@ -85,7 +85,6 @@
|
|||
.pulseWarningIns{-webkit-animation:pulseWarningIns 0.75s infinite alternate;animation:pulseWarningIns 0.75s infinite alternate}
|
||||
.sweet-overlay{background-color:rgba(0,0,0,0.4);position:fixed;left:0;right:0;top:0;bottom:0;display:none;z-index:8050}
|
||||
.sweet-alert{background-color:#f9f9f9;width:478px;padding:17px;border-radius:5px;text-align:center;position:fixed;left:50%;top:50%;margin-left:-256px;margin-top:-200px;overflow:hidden;display:none;z-index:9050}
|
||||
.sweet-alert h4{margin:30px 0;word-wrap:break-word}
|
||||
@media all and (max-width:767px){.sweet-alert{width:auto;margin-left:0;margin-right:0;left:15px;right:15px}
|
||||
}
|
||||
.sweet-alert .icon{width:80px;height:80px;border:4px solid gray;border-radius:50%;margin:20px auto;position:relative;box-sizing:content-box}
|
||||
|
|
@ -117,7 +116,7 @@
|
|||
.sweet-alert .btn-warning:focus{border-color:#eea236;outline:0}
|
||||
.sweet-alert button::-moz-focus-inner{border:0}
|
||||
.sweet-alert{text-align:right}
|
||||
.sweet-alert h4{word-break:word-break;word-wrap:break-word;max-height:350px;overflow-y:auto;margin:10px 0 17px 0;color:#2b3e50;text-align:left;font-size:15px;line-height:23px}
|
||||
.sweet-alert h2{word-break:word-break;word-wrap:break-word;max-height:350px;overflow-y:auto;margin:10px 0 17px 0;color:#2b3e50;text-align:left;font-size:15px;line-height:23px}
|
||||
.sweet-alert p{margin:0}
|
||||
.sweet-alert p.text-muted{margin-bottom:20px;color:#555555}
|
||||
.control-simplelist{font-size:13px}
|
||||
|
|
@ -395,7 +394,7 @@
|
|||
.control-treeview ol > li.drop-target.has-subitems > div:before{background-position:0px -102px}
|
||||
}
|
||||
.sidenav-tree{width:280px;background:#34495e}
|
||||
.sidenav-tree .control-toolbar{height:auto;padding:20px 0 20px 20px}
|
||||
.sidenav-tree .control-toolbar{padding:20px 0 20px 20px}
|
||||
.sidenav-tree .control-toolbar input.form-control{border:none}
|
||||
.sidenav-tree ul{padding:0;margin:0;list-style:none}
|
||||
.sidenav-tree div.scrollbar-thumb{background:#2b3e50 !important}
|
||||
|
|
@ -629,7 +628,7 @@ body.slim-container .layout.layout-container,body.slim-container .layout .layout
|
|||
.layout.responsive-sidebar > .layout-cell:last-child .layout-absolute{position:static}
|
||||
}
|
||||
body.mainmenu-open{overflow:hidden}
|
||||
nav#layout-mainmenu.navbar{background-color:#111111;height:auto;padding:0 0 0 20px;line-height:0;white-space:nowrap}
|
||||
nav#layout-mainmenu.navbar{background-color:#111111;padding:0 0 0 20px;line-height:0;white-space:nowrap}
|
||||
nav#layout-mainmenu.navbar a{text-decoration:none}
|
||||
nav#layout-mainmenu.navbar a:focus{background:transparent}
|
||||
nav#layout-mainmenu.navbar ul{margin:0;padding:0;list-style:none;float:left;font-weight:600;white-space:nowrap;overflow:hidden}
|
||||
|
|
@ -666,6 +665,8 @@ nav#layout-mainmenu.navbar ul li a,nav#layout-mainmenu .menu-toggle,.mainmenu-co
|
|||
nav#layout-mainmenu.navbar ul li a:hover,nav#layout-mainmenu .menu-toggle:hover,.mainmenu-collapsed li a:hover{background-color:transparent !important}
|
||||
nav#layout-mainmenu.navbar ul li a:active,nav#layout-mainmenu .menu-toggle:active,.mainmenu-collapsed li a:active,nav#layout-mainmenu.navbar ul li a:focus,nav#layout-mainmenu .menu-toggle:focus,.mainmenu-collapsed li a:focus{text-decoration:none;color:#555555}
|
||||
nav#layout-mainmenu.navbar ul li a i,nav#layout-mainmenu .menu-toggle i,.mainmenu-collapsed li a i{line-height:1;font-size:35px;vertical-align:middle;margin-right:10px}
|
||||
nav#layout-mainmenu.navbar ul li a i{font-size:28px}
|
||||
nav#layout-mainmenu.navbar ul li.active a i{font-size:35px}
|
||||
.mainmenu-collapsed li a i{width:40px;text-align:left;display:inline-block}
|
||||
nav#layout-mainmenu.navbar ul li:hover a:active,.mainmenu-collapsed li:hover a:active,nav#layout-mainmenu.navbar ul li:hover a:focus,.mainmenu-collapsed li:hover a:focus{color:#ffffff !important}
|
||||
.touch .mainmenu-collapsed li a:hover{color:#555555}
|
||||
|
|
|
|||
|
|
@ -415,15 +415,15 @@ ratio=py/ih;if(ratio===0){return 1;}else{return ratio;}};drawImageIOSFix=functio
|
|||
(e.type==="load"?win:doc)[rem](pre+e.type,init,false);if(!done&&(done=true)){return fn.call(win,e.type||e);}};poll=function(){var e;try{root.doScroll("left");}catch(_error){e=_error;setTimeout(poll,50);return;}
|
||||
return init("poll");};if(doc.readyState!=="complete"){if(doc.createEventObject&&root.doScroll){try{top=!win.frameElement;}catch(_error){}
|
||||
if(top){poll();}}
|
||||
doc[add](pre+"DOMContentLoaded",init,false);doc[add](pre+"readystatechange",init,false);return win[add](pre+"load",init,false);}};Dropzone._autoDiscoverFunction=function(){if(Dropzone.autoDiscover){return Dropzone.discover();}};contentLoaded(window,Dropzone._autoDiscoverFunction);}).call(this);(function(window,document){var modalClass='.sweet-alert',overlayClass='.sweet-overlay',alertTypes=['error','warning','info','success'],defaultParams={title:'',text:'',type:null,allowOutsideClick:false,showCancelButton:false,closeOnConfirm:true,closeOnCancel:true,confirmButtonText:'OK',confirmButtonClass:'btn-primary',cancelButtonText:'Cancel',cancelButtonClass:'btn-default',imageUrl:null,imageSize:null,timer:null};var getModal=function(){return document.querySelector(modalClass);},getOverlay=function(){return document.querySelector(overlayClass);},hasClass=function(elem,className){return new RegExp(' '+className+' ').test(' '+elem.className+' ');},addClass=function(elem,className){if(!hasClass(elem,className)){elem.className+=' '+className;}},removeClass=function(elem,className){var newClass=' '+elem.className.replace(/[\t\r\n]/g,' ')+' ';if(hasClass(elem,className)){while(newClass.indexOf(' '+className+' ')>=0){newClass=newClass.replace(' '+className+' ',' ');}
|
||||
doc[add](pre+"DOMContentLoaded",init,false);doc[add](pre+"readystatechange",init,false);return win[add](pre+"load",init,false);}};Dropzone._autoDiscoverFunction=function(){if(Dropzone.autoDiscover){return Dropzone.discover();}};contentLoaded(window,Dropzone._autoDiscoverFunction);}).call(this);(function(window,document){var modalClass='.sweet-alert',overlayClass='.sweet-overlay',alertTypes=['error','warning','info','success'],defaultParams={title:'',text:'',type:null,allowOutsideClick:false,showCancelButton:false,showConfirmButton:true,closeOnConfirm:true,closeOnCancel:true,confirmButtonText:'OK',confirmButtonClass:'btn-primary',cancelButtonText:'Cancel',cancelButtonClass:'btn-default',containerClass:'',titleClass:'',textClass:'',imageUrl:null,imageSize:null,timer:null};var getModal=function(){return document.querySelector(modalClass);},getOverlay=function(){return document.querySelector(overlayClass);},hasClass=function(elem,className){return new RegExp(' '+className+' ').test(' '+elem.className+' ');},addClass=function(elem,className){if(className&&!hasClass(elem,className)){elem.className+=' '+className;}},removeClass=function(elem,className){var newClass=' '+elem.className.replace(/[\t\r\n]/g,' ')+' ';if(hasClass(elem,className)){while(newClass.indexOf(' '+className+' ')>=0){newClass=newClass.replace(' '+className+' ',' ');}
|
||||
elem.className=newClass.replace(/^\s+|\s+$/g,'');}},escapeHtml=function(str){var div=document.createElement('div');div.appendChild(document.createTextNode(str));return div.innerHTML;},_show=function(elem){elem.style.opacity='';elem.style.display='block';},show=function(elems){if(elems&&!elems.length){return _show(elems);}
|
||||
for(var i=0;i<elems.length;++i){_show(elems[i]);}},_hide=function(elem){elem.style.opacity='';elem.style.display='none';},hide=function(elems){if(elems&&!elems.length){return _hide(elems);}
|
||||
for(var i=0;i<elems.length;++i){_hide(elems[i]);}},isDescendant=function(parent,child){var node=child.parentNode;while(node!==null){if(node===parent){return true;}
|
||||
node=node.parentNode;}
|
||||
return false;},getTopMargin=function(elem){elem.style.left='-9999px';elem.style.display='block';var height=elem.clientHeight;var padding=parseInt(getComputedStyle(elem).getPropertyValue('padding'),10);elem.style.left='';elem.style.display='none';return('-'+parseInt(height/2+padding)+'px');},fadeIn=function(elem,interval){if(+elem.style.opacity<1){interval=interval||16;elem.style.opacity=0;elem.style.display='block';var last=+new Date();var tick=function(){elem.style.opacity=+elem.style.opacity+(new Date()-last)/100;last=+new Date();if(+elem.style.opacity<1){setTimeout(tick,interval);}};tick();}},fadeOut=function(elem,interval){interval=interval||16;elem.style.opacity=1;var last=+new Date();var tick=function(){elem.style.opacity=+elem.style.opacity-(new Date()-last)/100;last=+new Date();if(+elem.style.opacity>0){setTimeout(tick,interval);}else{elem.style.display='none';}};tick();},fireClick=function(node){if(MouseEvent){var mevt=new MouseEvent('click',{view:window,bubbles:false,cancelable:true});node.dispatchEvent(mevt);}else if(document.createEvent){var evt=document.createEvent('MouseEvents');evt.initEvent('click',false,false);node.dispatchEvent(evt);}else if(document.createEventObject){node.fireEvent('onclick');}else if(typeof node.onclick==='function'){node.onclick();}},stopEventPropagation=function(e){if(typeof e.stopPropagation==='function'){e.stopPropagation();e.preventDefault();}else if(window.event&&window.event.hasOwnProperty('cancelBubble')){window.event.cancelBubble=true;}};var previousActiveElement,previousDocumentClick,previousWindowKeyDown,lastFocusedButton;window.sweetAlertInitialize=function(){var sweetHTML='<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h4>Title</h4><p class="text-muted">Text</p><p><button class="cancel btn" tabIndex="2">Cancel</button> <button class="confirm btn" tabIndex="1">OK</button></p></div>',sweetWrap=document.createElement('div');sweetWrap.innerHTML=sweetHTML;document.body.appendChild(sweetWrap);}
|
||||
return false;},getTopMargin=function(elem){elem.style.left='-9999px';elem.style.display='block';var height=elem.clientHeight;var padding=parseInt(getComputedStyle(elem).getPropertyValue('padding'),10);elem.style.left='';elem.style.display='none';return('-'+parseInt(height/2+padding)+'px');},fadeIn=function(elem,interval){if(+elem.style.opacity<1){interval=interval||16;elem.style.opacity=0;elem.style.display='block';var last=+new Date();var tick=function(){elem.style.opacity=+elem.style.opacity+(new Date()-last)/100;last=+new Date();if(+elem.style.opacity<1){setTimeout(tick,interval);}};tick();}},fadeOut=function(elem,interval){interval=interval||16;elem.style.opacity=1;var last=+new Date();var tick=function(){elem.style.opacity=+elem.style.opacity-(new Date()-last)/100;last=+new Date();if(+elem.style.opacity>0){setTimeout(tick,interval);}else{elem.style.display='none';}};tick();},fireClick=function(node){if(MouseEvent){var mevt=new MouseEvent('click',{view:window,bubbles:false,cancelable:true});node.dispatchEvent(mevt);}else if(document.createEvent){var evt=document.createEvent('MouseEvents');evt.initEvent('click',false,false);node.dispatchEvent(evt);}else if(document.createEventObject){node.fireEvent('onclick');}else if(typeof node.onclick==='function'){node.onclick();}},stopEventPropagation=function(e){if(typeof e.stopPropagation==='function'){e.stopPropagation();e.preventDefault();}else if(window.event&&window.event.hasOwnProperty('cancelBubble')){window.event.cancelBubble=true;}};var previousActiveElement,previousDocumentClick,previousWindowKeyDown,lastFocusedButton;window.sweetAlertInitialize=function(){var sweetHTML='<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h2>Title</h2><p class="lead text-muted">Text</p><p><button class="cancel btn" tabIndex="2">Cancel</button> <button class="confirm btn" tabIndex="1">OK</button></p></div>',sweetWrap=document.createElement('div');sweetWrap.innerHTML=sweetHTML;document.body.appendChild(sweetWrap);}
|
||||
window.sweetAlert=window.swal=function(){if(arguments[0]===undefined){window.console.error('sweetAlert expects at least 1 attribute!');return false;}
|
||||
var params=extend({},defaultParams);switch(typeof arguments[0]){case'string':params.title=arguments[0];params.text=arguments[1]||'';params.type=arguments[2]||'';break;case'object':if(arguments[0].title===undefined){window.console.error('Missing "title" argument!');return false;}
|
||||
params.title=arguments[0].title;params.text=arguments[0].text||defaultParams.text;params.type=arguments[0].type||defaultParams.type;params.allowOutsideClick=arguments[0].allowOutsideClick||defaultParams.allowOutsideClick;params.showCancelButton=arguments[0].showCancelButton!==undefined?arguments[0].showCancelButton:defaultParams.showCancelButton;params.closeOnConfirm=arguments[0].closeOnConfirm!==undefined?arguments[0].closeOnConfirm:defaultParams.closeOnConfirm;params.closeOnCancel=arguments[0].closeOnCancel!==undefined?arguments[0].closeOnCancel:defaultParams.closeOnCancel;params.timer=arguments[0].timer||defaultParams.timer;params.confirmButtonText=(defaultParams.showCancelButton)?'Confirm':defaultParams.confirmButtonText;params.confirmButtonText=arguments[0].confirmButtonText||defaultParams.confirmButtonText;params.confirmButtonClass=arguments[0].confirmButtonClass||defaultParams.confirmButtonClass;params.cancelButtonText=arguments[0].cancelButtonText||defaultParams.cancelButtonText;params.cancelButtonClass=arguments[0].cancelButtonClass||defaultParams.cancelButtonClass;params.imageUrl=arguments[0].imageUrl||defaultParams.imageUrl;params.imageSize=arguments[0].imageSize||defaultParams.imageSize;params.doneFunction=arguments[1]||null;break;default:window.console.error('Unexpected type of argument! Expected "string" or "object", got '+typeof arguments[0]);return false;}
|
||||
params.title=arguments[0].title;params.text=arguments[0].text||defaultParams.text;params.type=arguments[0].type||defaultParams.type;params.allowOutsideClick=arguments[0].allowOutsideClick||defaultParams.allowOutsideClick;params.showCancelButton=arguments[0].showCancelButton!==undefined?arguments[0].showCancelButton:defaultParams.showCancelButton;params.showConfirmButton=arguments[0].showConfirmButton!==undefined?arguments[0].showConfirmButton:defaultParams.showConfirmButton;params.closeOnConfirm=arguments[0].closeOnConfirm!==undefined?arguments[0].closeOnConfirm:defaultParams.closeOnConfirm;params.closeOnCancel=arguments[0].closeOnCancel!==undefined?arguments[0].closeOnCancel:defaultParams.closeOnCancel;params.timer=arguments[0].timer||defaultParams.timer;params.confirmButtonText=(defaultParams.showCancelButton)?'Confirm':defaultParams.confirmButtonText;params.confirmButtonText=arguments[0].confirmButtonText||defaultParams.confirmButtonText;params.confirmButtonClass=arguments[0].confirmButtonClass||(arguments[0].type?'btn-'+arguments[0].type:null)||defaultParams.confirmButtonClass;params.cancelButtonText=arguments[0].cancelButtonText||defaultParams.cancelButtonText;params.cancelButtonClass=arguments[0].cancelButtonClass||defaultParams.cancelButtonClass;params.containerClass=arguments[0].containerClass||defaultParams.containerClass;params.titleClass=arguments[0].titleClass||defaultParams.titleClass;params.textClass=arguments[0].textClass||defaultParams.textClass;params.imageUrl=arguments[0].imageUrl||defaultParams.imageUrl;params.imageSize=arguments[0].imageSize||defaultParams.imageSize;params.doneFunction=arguments[1]||null;break;default:window.console.error('Unexpected type of argument! Expected "string" or "object", got '+typeof arguments[0]);return false;}
|
||||
setParameters(params);fixVerticalPosition();openModal();var modal=getModal();var onButtonEvent=function(e){var target=e.target||e.srcElement,targetedConfirm=(target.className.indexOf('confirm')>-1),modalIsVisible=hasClass(modal,'visible'),doneFunctionExists=(params.doneFunction&&modal.getAttribute('data-has-done-function')==='true');switch(e.type){case("click"):if(targetedConfirm&&doneFunctionExists&&modalIsVisible){params.doneFunction(true);if(params.closeOnConfirm){closeModal();}}else if(doneFunctionExists&&modalIsVisible){var functionAsStr=String(params.doneFunction).replace(/\s/g,'');var functionHandlesCancel=functionAsStr.substring(0,9)==="function("&&functionAsStr.substring(9,10)!==")";if(functionHandlesCancel){params.doneFunction(false);}
|
||||
if(params.closeOnCancel){closeModal();}}else{closeModal();}
|
||||
break;}};var $buttons=modal.querySelectorAll('button');for(var i=0;i<$buttons.length;i++){$buttons[i].onclick=onButtonEvent;}
|
||||
|
|
@ -437,17 +437,19 @@ if(modalIsVisible){var btnIndex=-1;if($focusElement!==null){for(var i=0;i<$modal
|
|||
if(btnIndex===-1){$targetElement.focus();}}else{lastFocusedButton=$targetElement;}}}
|
||||
$okButton.onblur=handleOnBlur;$cancelButton.onblur=handleOnBlur;window.onfocus=function(){window.setTimeout(function(){if(lastFocusedButton!==undefined){lastFocusedButton.focus();lastFocusedButton=undefined;}},0);};};window.swal.setDefaults=function(userParams){if(!userParams){throw new Error('userParams is required');}
|
||||
if(typeof userParams!=='object'){throw new Error('userParams has to be a object');}
|
||||
extend(defaultParams,userParams);};function setParameters(params){var modal=getModal();var $title=modal.querySelector('h4'),$text=modal.querySelector('p'),$cancelBtn=modal.querySelector('button.cancel'),$confirmBtn=modal.querySelector('button.confirm');$title.innerHTML=escapeHtml(params.title).split("\n").join("<br>");$text.innerHTML=escapeHtml(params.text||'').split("\n").join("<br>");if(params.text){show($text);}
|
||||
extend(defaultParams,userParams);};window.swal.close=function(){closeModal();}
|
||||
function setParameters(params){var modal=getModal();var $title=modal.querySelector('h2'),$text=modal.querySelector('p'),$cancelBtn=modal.querySelector('button.cancel'),$confirmBtn=modal.querySelector('button.confirm');$title.innerHTML=escapeHtml(params.title).split("\n").join("<br>");$text.innerHTML=escapeHtml(params.text||'').split("\n").join("<br>");if(params.text){show($text);}
|
||||
hide(modal.querySelectorAll('.icon'));if(params.type){var validType=false;for(var i=0;i<alertTypes.length;i++){if(params.type===alertTypes[i]){validType=true;break;}}
|
||||
if(!validType){window.console.error('Unknown alert type: '+params.type);return false;}
|
||||
var $icon=modal.querySelector('.icon.'+params.type);show($icon);switch(params.type){case"success":addClass($icon,'animate');addClass($icon.querySelector('.tip'),'animateSuccessTip');addClass($icon.querySelector('.long'),'animateSuccessLong');break;case"error":addClass($icon,'animateErrorIcon');addClass($icon.querySelector('.x-mark'),'animateXMark');break;case"warning":addClass($icon,'pulseWarning');addClass($icon.querySelector('.body'),'pulseWarningIns');addClass($icon.querySelector('.dot'),'pulseWarningIns');break;}}
|
||||
if(params.imageUrl){var $customIcon=modal.querySelector('.icon.custom');$customIcon.style.backgroundImage='url('+params.imageUrl+')';show($customIcon);var _imgWidth=80,_imgHeight=80;if(params.imageSize){var imgWidth=params.imageSize.split('x')[0];var imgHeight=params.imageSize.split('x')[1];if(!imgWidth||!imgHeight){window.console.error("Parameter imageSize expects value with format WIDTHxHEIGHT, got "+params.imageSize);}else{_imgWidth=imgWidth;_imgHeight=imgHeight;$customIcon.css({'width':imgWidth+'px','height':imgHeight+'px'});}}
|
||||
$customIcon.setAttribute('style',$customIcon.getAttribute('style')+'width:'+_imgWidth+'px; height:'+_imgHeight+'px');}
|
||||
modal.setAttribute('data-has-cancel-button',params.showCancelButton);if(params.showCancelButton){$cancelBtn.style.display='inline-block';}else{hide($cancelBtn);}
|
||||
modal.setAttribute('data-has-confirm-button',params.showConfirmButton);if(params.showConfirmButton){$confirmBtn.style.display='inline-block';}else{hide($confirmBtn);}
|
||||
if(params.cancelButtonText){$cancelBtn.innerHTML=escapeHtml(params.cancelButtonText);}
|
||||
if(params.confirmButtonText){$confirmBtn.innerHTML=escapeHtml(params.confirmButtonText);}
|
||||
$confirmBtn.className='confirm btn'
|
||||
addClass($confirmBtn,params.confirmButtonClass);addClass($cancelBtn,params.cancelButtonClass);modal.setAttribute('data-allow-ouside-click',params.allowOutsideClick);var hasDoneFunction=(params.doneFunction)?true:false;modal.setAttribute('data-has-done-function',hasDoneFunction);modal.setAttribute('data-timer',params.timer);}
|
||||
addClass(modal,params.containerClass);addClass($confirmBtn,params.confirmButtonClass);addClass($cancelBtn,params.cancelButtonClass);addClass($title,params.titleClass);addClass($text,params.textClass);modal.setAttribute('data-allow-ouside-click',params.allowOutsideClick);var hasDoneFunction=(params.doneFunction)?true:false;modal.setAttribute('data-has-done-function',hasDoneFunction);modal.setAttribute('data-timer',params.timer);}
|
||||
function colorLuminance(hex,lum){hex=String(hex).replace(/[^0-9a-f]/gi,'');if(hex.length<6){hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];}
|
||||
lum=lum||0;var rgb="#",c,i;for(i=0;i<3;i++){c=parseInt(hex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+(c*lum)),255)).toString(16);rgb+=("00"+c).substr(c.length);}
|
||||
return rgb;}
|
||||
|
|
@ -459,7 +461,7 @@ function openModal(){var modal=getModal();fadeIn(getOverlay(),10);show(modal);ad
|
|||
function closeModal(){var modal=getModal();fadeOut(getOverlay(),5);fadeOut(modal,5);removeClass(modal,'showSweetAlert');addClass(modal,'hideSweetAlert');removeClass(modal,'visible');var $successIcon=modal.querySelector('.icon.success');removeClass($successIcon,'animate');removeClass($successIcon.querySelector('.tip'),'animateSuccessTip');removeClass($successIcon.querySelector('.long'),'animateSuccessLong');var $errorIcon=modal.querySelector('.icon.error');removeClass($errorIcon,'animateErrorIcon');removeClass($errorIcon.querySelector('.x-mark'),'animateXMark');var $warningIcon=modal.querySelector('.icon.warning');removeClass($warningIcon,'pulseWarning');removeClass($warningIcon.querySelector('.body'),'pulseWarningIns');removeClass($warningIcon.querySelector('.dot'),'pulseWarningIns');window.onkeydown=previousWindowKeyDown;document.onclick=previousDocumentClick;if(previousActiveElement){previousActiveElement.focus();}
|
||||
lastFocusedButton=undefined;}
|
||||
function fixVerticalPosition(){var modal=getModal();modal.style.marginTop=getTopMargin(getModal());}
|
||||
(function(){if(document.readyState==="complete"||document.readyState==="interactive"&&document.body){sweetAlertInitialize();}else{if(document.addEventListener){document.addEventListener('DOMContentLoaded',function factorial(){document.removeEventListener('DOMContentLoaded',arguments.callee,false);sweetAlertInitialize();},false);}else if(document.attachEvent){document.attachEvent('onreadystatechange',function(){if(document.readyState==='complete'){document.detachEvent('onreadystatechange',arguments.callee);sweetAlertInitialize();}});}}})();})(window,document);(function($){$.Jcrop=function(obj,opt){var options=$.extend({},$.Jcrop.defaults),docOffset,_ua=navigator.userAgent.toLowerCase(),is_msie=/msie/.test(_ua),ie6mode=/msie [1-6]\./.test(_ua);function px(n){return Math.round(n)+'px';}
|
||||
(function(){if(document.readyState==="complete"||document.readyState==="interactive"&&document.body){sweetAlertInitialize();}else{if(document.addEventListener){document.addEventListener('DOMContentLoaded',function handler(){document.removeEventListener('DOMContentLoaded',handler,false);sweetAlertInitialize();},false);}else if(document.attachEvent){document.attachEvent('onreadystatechange',function handler(){if(document.readyState==='complete'){document.detachEvent('onreadystatechange',handler);sweetAlertInitialize();}});}}})();})(window,document);(function($){$.Jcrop=function(obj,opt){var options=$.extend({},$.Jcrop.defaults),docOffset,_ua=navigator.userAgent.toLowerCase(),is_msie=/msie/.test(_ua),ie6mode=/msie [1-6]\./.test(_ua);function px(n){return Math.round(n)+'px';}
|
||||
function cssClass(cl){return options.baseClass+'-'+cl;}
|
||||
function supportsColorFade(){return $.fx.step.hasOwnProperty('backgroundColor');}
|
||||
function getPos(obj)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
* JavaScript API:
|
||||
* $('#simplelist').simplelist()
|
||||
*
|
||||
* Dependences:
|
||||
* Dependences:
|
||||
* - Sortable (jquery-sortable.js)
|
||||
*/
|
||||
+function ($) { "use strict";
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
.sweet-alert {
|
||||
text-align: right;
|
||||
|
||||
h4 {
|
||||
h2 {
|
||||
word-break: word-break;
|
||||
word-wrap: break-word;
|
||||
max-height: 350px;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
background: @color-sidebarnav-bg;
|
||||
|
||||
.control-toolbar {
|
||||
height: auto;
|
||||
padding: 20px 0 20px 20px;
|
||||
|
||||
input.form-control {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ body.mainmenu-open {
|
|||
|
||||
nav#layout-mainmenu.navbar {
|
||||
background-color: @color-mainmenu;
|
||||
height: auto;
|
||||
padding: 0 0 0 20px;
|
||||
line-height: 0;
|
||||
white-space: nowrap;
|
||||
|
|
@ -84,7 +83,9 @@ nav#layout-mainmenu.navbar {
|
|||
.toolbar-item {
|
||||
padding-right: 0;
|
||||
|
||||
&:before, &:after { margin-top: 0; }
|
||||
&:before, &:after {
|
||||
margin-top: 0;
|
||||
}
|
||||
&:before { left: -12px; }
|
||||
&:after { right: -12px; }
|
||||
|
||||
|
|
@ -174,6 +175,15 @@ nav#layout-mainmenu .menu-toggle,
|
|||
}
|
||||
}
|
||||
|
||||
nav#layout-mainmenu.navbar ul li {
|
||||
a {
|
||||
i { font-size: 28px; }
|
||||
}
|
||||
&.active a {
|
||||
i { font-size: 35px; }
|
||||
}
|
||||
}
|
||||
|
||||
.mainmenu-collapsed li a i {
|
||||
width: 40px;
|
||||
text-align: left;
|
||||
|
|
@ -189,7 +199,9 @@ nav#layout-mainmenu.navbar ul li:hover,
|
|||
}
|
||||
}
|
||||
|
||||
.touch .mainmenu-collapsed li a:hover {color: @color-mainmenu-inactive;}
|
||||
.touch .mainmenu-collapsed li a:hover {
|
||||
color: @color-mainmenu-inactive;
|
||||
}
|
||||
|
||||
nav#layout-mainmenu.navbar ul li,
|
||||
.mainmenu-collapsed li {
|
||||
|
|
@ -197,7 +209,9 @@ nav#layout-mainmenu.navbar ul li,
|
|||
color: @color-mainmenu-active !important;
|
||||
font-weight: 600;
|
||||
|
||||
a {color: @color-mainmenu-active !important;}
|
||||
a {
|
||||
color: @color-mainmenu-active !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,16 @@
|
|||
type: null,
|
||||
allowOutsideClick: false,
|
||||
showCancelButton: false,
|
||||
showConfirmButton: true,
|
||||
closeOnConfirm: true,
|
||||
closeOnCancel: true,
|
||||
confirmButtonText: 'OK',
|
||||
confirmButtonClass: 'btn-primary',
|
||||
cancelButtonText: 'Cancel',
|
||||
cancelButtonClass: 'btn-default',
|
||||
containerClass: '',
|
||||
titleClass: '',
|
||||
textClass: '',
|
||||
imageUrl: null,
|
||||
imageSize: null,
|
||||
timer: null
|
||||
|
|
@ -38,7 +42,7 @@
|
|||
return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
|
||||
},
|
||||
addClass = function(elem, className) {
|
||||
if (!hasClass(elem, className)) {
|
||||
if (className && !hasClass(elem, className)) {
|
||||
elem.className += ' ' + className;
|
||||
}
|
||||
},
|
||||
|
|
@ -177,7 +181,7 @@
|
|||
*/
|
||||
|
||||
window.sweetAlertInitialize = function() {
|
||||
var sweetHTML = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h4>Title</h4><p class="text-muted">Text</p><p><button class="cancel btn" tabIndex="2">Cancel</button> <button class="confirm btn" tabIndex="1">OK</button></p></div>',
|
||||
var sweetHTML = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h2>Title</h2><p class="lead text-muted">Text</p><p><button class="cancel btn" tabIndex="2">Cancel</button> <button class="confirm btn" tabIndex="1">OK</button></p></div>',
|
||||
sweetWrap = document.createElement('div');
|
||||
|
||||
sweetWrap.innerHTML = sweetHTML;
|
||||
|
|
@ -227,6 +231,7 @@
|
|||
params.type = arguments[0].type || defaultParams.type;
|
||||
params.allowOutsideClick = arguments[0].allowOutsideClick || defaultParams.allowOutsideClick;
|
||||
params.showCancelButton = arguments[0].showCancelButton !== undefined ? arguments[0].showCancelButton : defaultParams.showCancelButton;
|
||||
params.showConfirmButton = arguments[0].showConfirmButton !== undefined ? arguments[0].showConfirmButton : defaultParams.showConfirmButton;
|
||||
params.closeOnConfirm = arguments[0].closeOnConfirm !== undefined ? arguments[0].closeOnConfirm : defaultParams.closeOnConfirm;
|
||||
params.closeOnCancel = arguments[0].closeOnCancel !== undefined ? arguments[0].closeOnCancel : defaultParams.closeOnCancel;
|
||||
params.timer = arguments[0].timer || defaultParams.timer;
|
||||
|
|
@ -234,9 +239,12 @@
|
|||
// Show "Confirm" instead of "OK" if cancel button is visible
|
||||
params.confirmButtonText = (defaultParams.showCancelButton) ? 'Confirm' : defaultParams.confirmButtonText;
|
||||
params.confirmButtonText = arguments[0].confirmButtonText || defaultParams.confirmButtonText;
|
||||
params.confirmButtonClass = arguments[0].confirmButtonClass || defaultParams.confirmButtonClass;
|
||||
params.confirmButtonClass = arguments[0].confirmButtonClass || (arguments[0].type ? 'btn-' + arguments[0].type : null) || defaultParams.confirmButtonClass;
|
||||
params.cancelButtonText = arguments[0].cancelButtonText || defaultParams.cancelButtonText;
|
||||
params.cancelButtonClass = arguments[0].cancelButtonClass || defaultParams.cancelButtonClass;
|
||||
params.containerClass = arguments[0].containerClass || defaultParams.containerClass;
|
||||
params.titleClass = arguments[0].titleClass || defaultParams.titleClass;
|
||||
params.textClass = arguments[0].textClass || defaultParams.textClass;
|
||||
params.imageUrl = arguments[0].imageUrl || defaultParams.imageUrl;
|
||||
params.imageSize = arguments[0].imageSize || defaultParams.imageSize;
|
||||
params.doneFunction = arguments[1] || null;
|
||||
|
|
@ -449,6 +457,13 @@
|
|||
extend(defaultParams, userParams);
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the current modal
|
||||
*/
|
||||
window.swal.close = function() {
|
||||
closeModal();
|
||||
}
|
||||
|
||||
/*
|
||||
* Set type, text and actions on modal
|
||||
*/
|
||||
|
|
@ -456,7 +471,7 @@
|
|||
function setParameters(params) {
|
||||
var modal = getModal();
|
||||
|
||||
var $title = modal.querySelector('h4'),
|
||||
var $title = modal.querySelector('h2'),
|
||||
$text = modal.querySelector('p'),
|
||||
$cancelBtn = modal.querySelector('button.cancel'),
|
||||
$confirmBtn = modal.querySelector('button.confirm');
|
||||
|
|
@ -543,6 +558,15 @@
|
|||
} else {
|
||||
hide($cancelBtn);
|
||||
}
|
||||
|
||||
// Confirm button
|
||||
modal.setAttribute('data-has-confirm-button', params.showConfirmButton);
|
||||
if (params.showConfirmButton) {
|
||||
$confirmBtn.style.display = 'inline-block';
|
||||
} else {
|
||||
hide($confirmBtn);
|
||||
}
|
||||
|
||||
|
||||
// Edit text on cancel and confirm buttons
|
||||
if (params.cancelButtonText) {
|
||||
|
|
@ -555,12 +579,21 @@
|
|||
// Reset confirm buttons to default class (Ugly fix)
|
||||
$confirmBtn.className = 'confirm btn'
|
||||
|
||||
// Attach selected class to the sweet alert modal
|
||||
addClass(modal, params.containerClass);
|
||||
|
||||
// Set confirm button to selected class
|
||||
addClass($confirmBtn, params.confirmButtonClass);
|
||||
|
||||
// Set cancel button to selected class
|
||||
addClass($cancelBtn, params.cancelButtonClass);
|
||||
|
||||
// Set title to selected class
|
||||
addClass($title, params.titleClass);
|
||||
|
||||
// Set text to selected class
|
||||
addClass($text, params.textClass);
|
||||
|
||||
// Allow outside click?
|
||||
modal.setAttribute('data-allow-ouside-click', params.allowOutsideClick);
|
||||
|
||||
|
|
@ -700,14 +733,14 @@
|
|||
sweetAlertInitialize();
|
||||
} else {
|
||||
if (document.addEventListener) {
|
||||
document.addEventListener('DOMContentLoaded', function factorial() {
|
||||
document.removeEventListener('DOMContentLoaded', arguments.callee, false);
|
||||
document.addEventListener('DOMContentLoaded', function handler() {
|
||||
document.removeEventListener('DOMContentLoaded', handler, false);
|
||||
sweetAlertInitialize();
|
||||
}, false);
|
||||
} else if (document.attachEvent) {
|
||||
document.attachEvent('onreadystatechange', function() {
|
||||
document.attachEvent('onreadystatechange', function handler() {
|
||||
if (document.readyState === 'complete') {
|
||||
document.detachEvent('onreadystatechange', arguments.callee);
|
||||
document.detachEvent('onreadystatechange', handler);
|
||||
sweetAlertInitialize();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -37,11 +37,6 @@
|
|||
display: none;
|
||||
z-index: @zindex-modal + 8000;
|
||||
|
||||
h4 {
|
||||
margin: 30px 0;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
@media all and (max-width: @screen-xs-max) {
|
||||
width: auto;
|
||||
margin-left: 0;
|
||||
|
|
|
|||
|
|
@ -693,7 +693,7 @@ class FormController extends ControllerBehavior
|
|||
if (!is_a($widget->getController(), $calledClass)) {
|
||||
return;
|
||||
}
|
||||
$callback($widget, $widget->model, $widget->getContext());
|
||||
call_user_func_array($callback, [$widget, $widget->model, $widget->getContext()]);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ use Lang;
|
|||
use View;
|
||||
use Response;
|
||||
use Backend;
|
||||
use BackendAuth;
|
||||
use Backend\Classes\ControllerBehavior;
|
||||
use League\Csv\Reader as CsvReader;
|
||||
use League\Csv\Writer as CsvWriter;
|
||||
|
|
@ -620,7 +621,7 @@ class ImportExportController extends ControllerBehavior
|
|||
{
|
||||
if (
|
||||
($permissions = $this->getConfig($type.'[permissions]')) &&
|
||||
(!$this->controller->user->hasAnyAccess((array) $permissions))
|
||||
(!BackendAuth::getUser()->hasAnyAccess((array) $permissions))
|
||||
) {
|
||||
return Response::make(View::make('backend::access_denied'), 403);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -411,7 +411,7 @@ class ListController extends ControllerBehavior
|
|||
if (!is_a($widget->getController(), $calledClass)) {
|
||||
return;
|
||||
}
|
||||
$callback($widget, $widget->model);
|
||||
call_user_func_array($callback, [$widget, $widget->model]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,11 @@
|
|||
use Db;
|
||||
use Lang;
|
||||
use Event;
|
||||
use Request;
|
||||
use Form as FormHelper;
|
||||
use Backend\Classes\ControllerBehavior;
|
||||
use ApplicationException;
|
||||
use October\Rain\Database\Model;
|
||||
use ApplicationException;
|
||||
|
||||
/**
|
||||
* Relation Controller Behavior
|
||||
|
|
@ -318,6 +319,13 @@ class RelationController extends ControllerBehavior
|
|||
$this->toolbarWidget->bindToController();
|
||||
}
|
||||
|
||||
/*
|
||||
* Search widget
|
||||
*/
|
||||
if ($this->searchWidget = $this->makeSearchWidget()) {
|
||||
$this->searchWidget->bindToController();
|
||||
}
|
||||
|
||||
/*
|
||||
* View widget
|
||||
*/
|
||||
|
|
@ -484,17 +492,6 @@ class RelationController extends ControllerBehavior
|
|||
// Widgets
|
||||
//
|
||||
|
||||
protected function makeSearchWidget()
|
||||
{
|
||||
$config = $this->makeConfig();
|
||||
$config->alias = $this->alias . 'ManageSearch';
|
||||
$config->growable = false;
|
||||
$config->prompt = 'backend::lang.list.search_prompt';
|
||||
$widget = $this->makeWidget('Backend\Widgets\Search', $config);
|
||||
$widget->cssClasses[] = 'recordfinder-search';
|
||||
return $widget;
|
||||
}
|
||||
|
||||
protected function makeToolbarWidget()
|
||||
{
|
||||
$defaultConfig = [];
|
||||
|
|
@ -539,6 +536,29 @@ class RelationController extends ControllerBehavior
|
|||
return $toolbarWidget;
|
||||
}
|
||||
|
||||
protected function makeSearchWidget()
|
||||
{
|
||||
if (!$this->getConfig('manage[showSearch]')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$config = $this->makeConfig();
|
||||
$config->alias = $this->alias . 'ManageSearch';
|
||||
$config->growable = false;
|
||||
$config->prompt = 'backend::lang.list.search_prompt';
|
||||
$widget = $this->makeWidget('Backend\Widgets\Search', $config);
|
||||
$widget->cssClasses[] = 'recordfinder-search';
|
||||
|
||||
/*
|
||||
* Persist the search term across AJAX requests only
|
||||
*/
|
||||
if (!Request::ajax()) {
|
||||
$widget->setActiveTerm(null);
|
||||
}
|
||||
|
||||
return $widget;
|
||||
}
|
||||
|
||||
protected function makeViewWidget()
|
||||
{
|
||||
/*
|
||||
|
|
@ -555,7 +575,8 @@ class RelationController extends ControllerBehavior
|
|||
$config->recordUrl = $this->getConfig('view[recordUrl]', null);
|
||||
|
||||
$defaultOnClick = sprintf(
|
||||
"$.oc.relationBehavior.clickViewListRecord(':id', '%s', '%s')",
|
||||
"$.oc.relationBehavior.clickViewListRecord(':%s', '%s', '%s')",
|
||||
$this->relationModel->getKeyName(),
|
||||
$this->field,
|
||||
$this->relationGetSessionKey()
|
||||
);
|
||||
|
|
@ -613,7 +634,15 @@ class RelationController extends ControllerBehavior
|
|||
return $widget->onRefresh();
|
||||
});
|
||||
|
||||
$searchWidget->setActiveTerm(null);
|
||||
/*
|
||||
* Persist the search term across AJAX requests only
|
||||
*/
|
||||
if (Request::ajax()) {
|
||||
$widget->setSearchTerm($searchWidget->getActiveTerm());
|
||||
}
|
||||
else {
|
||||
$searchWidget->setActiveTerm(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -680,15 +709,18 @@ class RelationController extends ControllerBehavior
|
|||
/*
|
||||
* Link the Search Widget to the List Widget
|
||||
*/
|
||||
if ($this->getConfig('manage[showSearch]')) {
|
||||
$this->searchWidget = $this->makeSearchWidget();
|
||||
$this->searchWidget->bindToController();
|
||||
if ($this->searchWidget) {
|
||||
$this->searchWidget->bindEvent('search.submit', function () use ($widget) {
|
||||
$widget->setSearchTerm($this->searchWidget->getActiveTerm());
|
||||
return $widget->onRefresh();
|
||||
});
|
||||
|
||||
$this->searchWidget->setActiveTerm(null);
|
||||
/*
|
||||
* Persist the search term across AJAX requests only
|
||||
*/
|
||||
if (Request::ajax()) {
|
||||
$widget->setSearchTerm($this->searchWidget->getActiveTerm());
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
|
@ -1112,24 +1144,29 @@ class RelationController extends ControllerBehavior
|
|||
$this->beforeAjax();
|
||||
|
||||
/*
|
||||
* Add the checked IDs to the pivot table
|
||||
* If the pivot model fails for some reason, abort the sync
|
||||
*/
|
||||
$foreignIds = (array) $this->foreignId;
|
||||
$this->relationObject->sync($foreignIds, false);
|
||||
Db::transaction(function () {
|
||||
/*
|
||||
* Add the checked IDs to the pivot table
|
||||
*/
|
||||
$foreignIds = (array) $this->foreignId;
|
||||
$this->relationObject->sync($foreignIds, false);
|
||||
|
||||
/*
|
||||
* Save data to models
|
||||
*/
|
||||
$foreignKeyName = $this->relationModel->getQualifiedKeyName();
|
||||
$hyrdatedModels = $this->relationObject->whereIn($foreignKeyName, $foreignIds)->get();
|
||||
$saveData = $this->pivotWidget->getSaveData();
|
||||
/*
|
||||
* Save data to models
|
||||
*/
|
||||
$foreignKeyName = $this->relationModel->getQualifiedKeyName();
|
||||
$hyrdatedModels = $this->relationObject->whereIn($foreignKeyName, $foreignIds)->get();
|
||||
$saveData = $this->pivotWidget->getSaveData();
|
||||
|
||||
foreach ($hyrdatedModels as $hydratedModel) {
|
||||
$modelsToSave = $this->prepareModelsToSave($hydratedModel, $saveData);
|
||||
foreach ($modelsToSave as $modelToSave) {
|
||||
$modelToSave->save();
|
||||
foreach ($hyrdatedModels as $hydratedModel) {
|
||||
$modelsToSave = $this->prepareModelsToSave($hydratedModel, $saveData);
|
||||
foreach ($modelsToSave as $modelToSave) {
|
||||
$modelToSave->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return ['#'.$this->relationGetId('view') => $this->relationRenderView()];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use Lang;
|
||||
use Backend;
|
||||
use ApplicationException;
|
||||
use Backend\Classes\ControllerBehavior;
|
||||
|
||||
/**
|
||||
|
|
@ -263,4 +264,4 @@ class ReorderController extends ControllerBehavior
|
|||
return $contents;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class UserPreferencesModel extends SettingsModel
|
|||
{
|
||||
parent::__construct($model);
|
||||
|
||||
$this->model->table = 'backend_user_preferences';
|
||||
$this->model->setTable('backend_user_preferences');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -38,3 +38,9 @@
|
|||
</div>
|
||||
<?= Form::close() ?>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(
|
||||
function(){ $('#relationManagePivotPopup input.form-control:first').focus() },
|
||||
310
|
||||
)
|
||||
</script>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<?= Form::ajax('onRelationManagePivotUpdate', [
|
||||
'data' => ['_relation_field' => $relationField, 'manage_id' => $relationManageId],
|
||||
'data-stripe-load-indicator' => true
|
||||
'data-popup-load-indicator' => true
|
||||
]) ?>
|
||||
|
||||
<div class="modal-header">
|
||||
|
|
@ -23,8 +23,7 @@
|
|||
<?php else: ?>
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup">
|
||||
class="btn btn-primary">
|
||||
<?= e(trans('backend::lang.relation.update')) ?>
|
||||
</button>
|
||||
<button
|
||||
|
|
@ -42,7 +41,7 @@
|
|||
|
||||
<?= Form::ajax('onRelationManagePivotCreate', [
|
||||
'data' => ['_relation_field' => $relationField, 'foreign_id' => $foreignId],
|
||||
'data-stripe-load-indicator' => true
|
||||
'data-popup-load-indicator' => true
|
||||
]) ?>
|
||||
|
||||
<div class="modal-header">
|
||||
|
|
@ -55,8 +54,7 @@
|
|||
<div class="modal-footer">
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
data-dismiss="popup">
|
||||
class="btn btn-primary">
|
||||
<?= e(trans('backend::lang.relation.add')) ?>
|
||||
</button>
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -144,7 +144,10 @@ class AuthManager extends RainAuthManager
|
|||
$tabs = [];
|
||||
|
||||
foreach ($this->listPermissions() as $permission) {
|
||||
$tab = isset($permission->tab) ? $permission->tab : null;
|
||||
$tab = isset($permission->tab)
|
||||
? $permission->tab
|
||||
: 'backend::lang.form.undefined_tab';
|
||||
|
||||
if (!array_key_exists($tab, $tabs)) {
|
||||
$tabs[$tab] = [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -553,6 +553,14 @@ class Controller extends Extendable
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the controllers public actions.
|
||||
*/
|
||||
public function getPublicActions()
|
||||
{
|
||||
return $this->publicActions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a unique ID for the controller and route. Useful in creating HTML markup.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -246,6 +246,15 @@ class NavigationManager
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a single main menu item
|
||||
*/
|
||||
public function removeMainMenuItem($owner, $code)
|
||||
{
|
||||
$itemKey = $this->makeItemKey($owner, $code);
|
||||
unset($this->items[$itemKey]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dynamically add an array of side menu items
|
||||
* @param string $owner
|
||||
|
|
@ -287,6 +296,20 @@ class NavigationManager
|
|||
$this->items[$itemKey]->sideMenu[$sideCode] = $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a single main menu item
|
||||
*/
|
||||
public function removeSideMenuItem($owner, $code, $sideCode)
|
||||
{
|
||||
$itemKey = $this->makeItemKey($owner, $code);
|
||||
if (!isset($this->items[$itemKey])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$mainItem = $this->items[$itemKey];
|
||||
unset($mainItem->sideMenu[$sideCode]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of the main menu items.
|
||||
* @return array
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ class Auth extends Controller
|
|||
{
|
||||
$rules = [
|
||||
'login' => 'required|min:2|max:32',
|
||||
'password' => 'required|min:2'
|
||||
'password' => 'required|min:4'
|
||||
];
|
||||
|
||||
$validation = Validator::make(post(), $rules);
|
||||
|
|
@ -96,7 +96,7 @@ class Auth extends Controller
|
|||
BackendAuth::logout();
|
||||
return Backend::redirect('backend');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Request a password reset verification code.
|
||||
*/
|
||||
|
|
@ -176,7 +176,7 @@ class Auth extends Controller
|
|||
}
|
||||
|
||||
$rules = [
|
||||
'password' => 'required|min:2'
|
||||
'password' => 'required|min:4'
|
||||
];
|
||||
|
||||
$validation = Validator::make(post(), $rules);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ class EditorPreferences extends Controller
|
|||
|
||||
public $formConfig = 'config_form.yaml';
|
||||
|
||||
public $requiredPermissions = ['backend.manage_editor'];
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ class UserGroups extends Controller
|
|||
/**
|
||||
* Add available permission fields to the Group form.
|
||||
*/
|
||||
protected function formExtendFields($form)
|
||||
public function formExtendFields($form)
|
||||
{
|
||||
/*
|
||||
* Add permissions tab
|
||||
|
|
|
|||
|
|
@ -88,12 +88,16 @@ class Users extends Controller
|
|||
* Add available permission fields to the User form.
|
||||
* Mark default groups as checked for new Users.
|
||||
*/
|
||||
protected function formExtendFields($form)
|
||||
public function formExtendFields($form)
|
||||
{
|
||||
if ($form->getContext() == 'myaccount') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->user->isSuperUser()) {
|
||||
$form->removeField('permissions[superuser]');
|
||||
}
|
||||
|
||||
/*
|
||||
* Add permissions tab
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -26,10 +26,10 @@
|
|||
autocomplete="off"
|
||||
maxlength="255" />
|
||||
|
||||
<!-- Submit Login -->
|
||||
<button type="submit" class="btn btn-primary login-button">
|
||||
<?= e(trans('backend::lang.account.login')) ?>
|
||||
</button>
|
||||
<!-- Submit Login -->
|
||||
<button type="submit" class="btn btn-primary login-button">
|
||||
<?= e(trans('backend::lang.account.login')) ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<p class="oc-icon-lock pull-right forgot-password">
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
class="btn btn-primary">
|
||||
<?= e(trans('backend::lang.form.save')) ?>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
data-request="onSave"
|
||||
data-request-data="close:1"
|
||||
data-hotkey="ctrl+enter, cmd+enter"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
|
||||
class="btn btn-default">
|
||||
<?= e(trans('backend::lang.form.save_and_close')) ?>
|
||||
</button>
|
||||
<?php if ($this->user->hasAccess('backend.manage_users')): ?>
|
||||
<button
|
||||
type="button"
|
||||
data-request="onSave"
|
||||
data-request-data="close:1"
|
||||
data-hotkey="ctrl+enter, cmd+enter"
|
||||
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
|
||||
class="btn btn-default">
|
||||
<?= e(trans('backend::lang.form.save_and_close')) ?>
|
||||
</button>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -389,6 +389,24 @@
|
|||
// ===============
|
||||
$(document).render(function () {
|
||||
$('[data-control="codeeditor"]').codeEditor()
|
||||
})
|
||||
});
|
||||
|
||||
// FIX EMMET HTML WHEN SYNTAX IS TWIG
|
||||
// ==================================
|
||||
|
||||
+function (exports) {
|
||||
if (exports.ace && typeof exports.ace.require == 'function') {
|
||||
var emmetExt = exports.ace.require('ace/ext/emmet')
|
||||
|
||||
if (emmetExt && emmetExt.AceEmmetEditor && emmetExt.AceEmmetEditor.prototype.getSyntax) {
|
||||
var coreGetSyntax = emmetExt.AceEmmetEditor.prototype.getSyntax
|
||||
|
||||
emmetExt.AceEmmetEditor.prototype.getSyntax = function () {
|
||||
var $syntax = $.proxy(coreGetSyntax, this)()
|
||||
return $syntax == 'twig' ? 'html' : $syntax
|
||||
};
|
||||
}
|
||||
}
|
||||
}(window)
|
||||
|
||||
}(window.jQuery);
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ var SnippetManager = function() {
|
|||
|
||||
(function() {
|
||||
oop.implement(this, EventEmitter);
|
||||
|
||||
|
||||
this.getTokenizer = function() {
|
||||
function TabstopToken(str, _, stack) {
|
||||
str = str.substr(1);
|
||||
|
|
@ -239,7 +239,7 @@ var SnippetManager = function() {
|
|||
var line = editor.session.getLine(cursor.row);
|
||||
var tabString = editor.session.getTabString();
|
||||
var indentString = line.match(/^\s*/)[0];
|
||||
|
||||
|
||||
if (cursor.column < indentString.length)
|
||||
indentString = indentString.slice(0, cursor.column);
|
||||
|
||||
|
|
@ -271,7 +271,7 @@ var SnippetManager = function() {
|
|||
return;
|
||||
|
||||
var value = tokens.slice(i + 1, i1);
|
||||
var isNested = value.some(function(t) {return typeof t === "object"});
|
||||
var isNested = value.some(function(t) {return typeof t === "object"});
|
||||
if (isNested && !ts.value) {
|
||||
ts.value = value;
|
||||
} else if (value.length && (!ts.value || typeof ts.value !== "string")) {
|
||||
|
|
@ -305,7 +305,7 @@ var SnippetManager = function() {
|
|||
expanding[id] = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
var ts = tabstops[id];
|
||||
var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value);
|
||||
arg.unshift(i + 1, Math.max(0, i1 - i));
|
||||
|
|
@ -340,16 +340,16 @@ var SnippetManager = function() {
|
|||
var selectionId = editor.inVirtualSelectionMode && editor.selection.index;
|
||||
tabstopManager.addTabstops(tabstops, range.start, end, selectionId);
|
||||
};
|
||||
|
||||
|
||||
this.insertSnippet = function(editor, snippetText) {
|
||||
var self = this;
|
||||
if (editor.inVirtualSelectionMode)
|
||||
return self.insertSnippetForSelection(editor, snippetText);
|
||||
|
||||
|
||||
editor.forEachSelection(function() {
|
||||
self.insertSnippetForSelection(editor, snippetText);
|
||||
}, null, {keepOrder: true});
|
||||
|
||||
|
||||
if (editor.tabstopManager)
|
||||
editor.tabstopManager.tabNext();
|
||||
};
|
||||
|
|
@ -358,7 +358,7 @@ var SnippetManager = function() {
|
|||
var scope = editor.session.$mode.$id || "";
|
||||
scope = scope.split("/").pop();
|
||||
if (scope === "html" || scope === "php") {
|
||||
if (scope === "php" && !editor.session.$mode.inlinePhp)
|
||||
if (scope === "php" && !editor.session.$mode.inlinePhp)
|
||||
scope = "html";
|
||||
var c = editor.getCursorPosition();
|
||||
var state = editor.session.getState(c.row);
|
||||
|
|
@ -374,7 +374,7 @@ var SnippetManager = function() {
|
|||
scope = "php";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return scope;
|
||||
};
|
||||
|
||||
|
|
@ -398,7 +398,7 @@ var SnippetManager = function() {
|
|||
editor.tabstopManager.tabNext();
|
||||
return result;
|
||||
};
|
||||
|
||||
|
||||
this.expandSnippetForSelection = function(editor, options) {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = editor.session.getLine(cursor.row);
|
||||
|
|
@ -454,10 +454,10 @@ var SnippetManager = function() {
|
|||
var snippetMap = this.snippetMap;
|
||||
var snippetNameMap = this.snippetNameMap;
|
||||
var self = this;
|
||||
|
||||
if (!snippets)
|
||||
|
||||
if (!snippets)
|
||||
snippets = [];
|
||||
|
||||
|
||||
function wrapRegexp(src) {
|
||||
if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
|
||||
src = "(?:" + src + ")";
|
||||
|
|
@ -514,7 +514,7 @@ var SnippetManager = function() {
|
|||
addSnippet(snippets);
|
||||
else if (Array.isArray(snippets))
|
||||
snippets.forEach(addSnippet);
|
||||
|
||||
|
||||
this._signal("registerSnippets", {scope: scope});
|
||||
};
|
||||
this.unregister = function(snippets, scope) {
|
||||
|
|
@ -731,9 +731,9 @@ var TabstopManager = function(editor) {
|
|||
ts = this.tabstops[this.index];
|
||||
if (!ts || !ts.length)
|
||||
return;
|
||||
|
||||
|
||||
this.selectedTabstop = ts;
|
||||
if (!this.editor.inVirtualSelectionMode) {
|
||||
if (!this.editor.inVirtualSelectionMode) {
|
||||
var sel = this.editor.multiSelect;
|
||||
sel.toSingleRange(ts.firstNonLinked.clone());
|
||||
for (var i = ts.length; i--;) {
|
||||
|
|
@ -746,7 +746,7 @@ var TabstopManager = function(editor) {
|
|||
} else {
|
||||
this.editor.selection.setRange(ts.firstNonLinked);
|
||||
}
|
||||
|
||||
|
||||
this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
|
||||
};
|
||||
this.addTabstops = function(tabstops, start, end) {
|
||||
|
|
@ -765,7 +765,7 @@ var TabstopManager = function(editor) {
|
|||
var ranges = this.ranges;
|
||||
tabstops.forEach(function(ts, index) {
|
||||
var dest = this.$openTabstops[index] || ts;
|
||||
|
||||
|
||||
for (var i = ts.length; i--;) {
|
||||
var p = ts[i];
|
||||
var range = Range.fromPoints(p.start, p.end || p.start);
|
||||
|
|
@ -792,7 +792,7 @@ var TabstopManager = function(editor) {
|
|||
}
|
||||
this.addTabstopMarkers(dest);
|
||||
}, this);
|
||||
|
||||
|
||||
if (arg.length > 2) {
|
||||
if (this.tabstops.length)
|
||||
arg.push(arg.splice(2, 1)[0]);
|
||||
|
|
@ -860,7 +860,7 @@ changeTracker.setPosition = function(row, column) {
|
|||
};
|
||||
changeTracker.update = function(pos, delta, $insertRight) {
|
||||
this.$insertRight = $insertRight;
|
||||
this.pos = pos;
|
||||
this.pos = pos;
|
||||
this.onChange(delta);
|
||||
};
|
||||
|
||||
|
|
@ -961,15 +961,15 @@ AceEmmetEditor.prototype = {
|
|||
if (end == null)
|
||||
end = start == null ? this.getContent().length : start;
|
||||
if (start == null)
|
||||
start = 0;
|
||||
|
||||
start = 0;
|
||||
|
||||
var editor = this.ace;
|
||||
var doc = editor.session.doc;
|
||||
var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));
|
||||
editor.session.remove(range);
|
||||
|
||||
|
||||
range.end = range.start;
|
||||
|
||||
|
||||
value = this.$updateTabstops(value);
|
||||
snippetManager.insertSnippet(editor, value);
|
||||
},
|
||||
|
|
@ -1061,7 +1061,7 @@ AceEmmetEditor.prototype = {
|
|||
} else if (lastZero) {
|
||||
value = emmet.require('utils').replaceSubstring(value, '${0}', lastZero);
|
||||
}
|
||||
|
||||
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
|
@ -1101,23 +1101,23 @@ exports.runEmmetCommand = function(editor) {
|
|||
if (editorProxy.getSyntax() == "php")
|
||||
return false;
|
||||
var actions = emmet.require("actions");
|
||||
|
||||
|
||||
if (this.action == "expand_abbreviation_with_tab") {
|
||||
if (!editor.selection.isEmpty())
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (this.action == "wrap_with_abbreviation") {
|
||||
return setTimeout(function() {
|
||||
actions.run("wrap_with_abbreviation", editorProxy);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
|
||||
var pos = editor.selection.lead;
|
||||
var token = editor.session.getTokenAt(pos.row, pos.column);
|
||||
if (token && /\btag\b/.test(token.type))
|
||||
return false;
|
||||
|
||||
|
||||
var result = actions.run(this.action, editorProxy);
|
||||
} catch(e) {
|
||||
editor._signal("changeStatus", typeof e == "string" ? e : e.message);
|
||||
|
|
@ -1187,4 +1187,3 @@ exports.setCore = function(e) {
|
|||
(function() {
|
||||
ace.require(["ace/ext/emmet"], function() {});
|
||||
})();
|
||||
|
||||
|
|
@ -614,11 +614,11 @@ var _ = (function() {
|
|||
// Retrieve the names of an object's properties.
|
||||
// Delegates to **ECMAScript 5**'s native `Object.keys`
|
||||
_.keys = nativeKeys || function(obj) {
|
||||
if (obj !== Object(obj)) throw new TypeError('Invalid object');
|
||||
var keys = [];
|
||||
for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
|
||||
return keys;
|
||||
};
|
||||
if (obj !== Object(obj)) throw new TypeError('Invalid object');
|
||||
var keys = [];
|
||||
for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
|
||||
return keys;
|
||||
};
|
||||
|
||||
// Retrieve the values of an object's properties.
|
||||
_.values = function(obj) {
|
||||
|
|
@ -788,8 +788,8 @@ var _ = (function() {
|
|||
// Is a given value an array?
|
||||
// Delegates to ECMA5's native Array.isArray
|
||||
_.isArray = nativeIsArray || function(obj) {
|
||||
return toString.call(obj) == '[object Array]';
|
||||
};
|
||||
return toString.call(obj) == '[object Array]';
|
||||
};
|
||||
|
||||
// Is a given variable an object?
|
||||
_.isObject = function(obj) {
|
||||
|
|
@ -975,8 +975,8 @@ var _ = (function() {
|
|||
if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
|
||||
|
||||
source = "var __p='';" +
|
||||
"var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n" +
|
||||
source + "return __p;\n";
|
||||
"var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n" +
|
||||
source + "return __p;\n";
|
||||
|
||||
var render = new Function(settings.variable || 'obj', '_', source);
|
||||
if (data) return render(data, _);
|
||||
|
|
@ -987,7 +987,7 @@ var _ = (function() {
|
|||
// Provide the compiled function source as a convenience for build time
|
||||
// precompilation.
|
||||
template.source = 'function(' + (settings.variable || 'obj') + '){\n' +
|
||||
source + '}';
|
||||
source + '}';
|
||||
|
||||
return template;
|
||||
};
|
||||
|
|
@ -1144,7 +1144,7 @@ var emmet = (function(global) {
|
|||
var moduleLoader = null;
|
||||
|
||||
/**
|
||||
* Generic Emmet module loader (actually, it doesnât load anything, just
|
||||
* Generic Emmet module loader (actually, it doesn’t load anything, just
|
||||
* returns module reference). Not using `require` name to avoid conflicts
|
||||
* with Node.js and RequireJS
|
||||
*/
|
||||
|
|
@ -1395,7 +1395,7 @@ emmet.define('abbreviationParser', function(require, _) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Removes current node from parentâs child list
|
||||
* Removes current node from parent‘s child list
|
||||
* @returns {AbbreviationNode} Current node itself
|
||||
*/
|
||||
remove: function() {
|
||||
|
|
@ -1407,7 +1407,7 @@ emmet.define('abbreviationParser', function(require, _) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Replaces current node in parentâs children list with passed nodes
|
||||
* Replaces current node in parent‘s children list with passed nodes
|
||||
* @param {AbbreviationNode} node Replacement node or array of nodes
|
||||
*/
|
||||
replace: function() {
|
||||
|
|
@ -1572,7 +1572,7 @@ emmet.define('abbreviationParser', function(require, _) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Returns index of current node in parentâs children list
|
||||
* Returns index of current node in parent‘s children list
|
||||
* @returns {Number}
|
||||
*/
|
||||
index: function() {
|
||||
|
|
@ -1739,7 +1739,7 @@ emmet.define('abbreviationParser', function(require, _) {
|
|||
|
||||
/**
|
||||
* Returns stripped string: a string without first and last character.
|
||||
* Used for âunquotingâ strings
|
||||
* Used for “unquoting” strings
|
||||
* @param {String} str
|
||||
* @returns {String}
|
||||
*/
|
||||
|
|
@ -2027,7 +2027,7 @@ emmet.define('abbreviationParser', function(require, _) {
|
|||
}
|
||||
|
||||
/**
|
||||
* âUn-rollsâ contents of current node: recursively replaces all repeating
|
||||
* “Un-rolls“ contents of current node: recursively replaces all repeating
|
||||
* children with their repeated clones
|
||||
* @param {AbbreviationNode} node
|
||||
* @returns {AbbreviationNode}
|
||||
|
|
@ -2110,7 +2110,7 @@ emmet.define('abbreviationParser', function(require, _) {
|
|||
var tree = parseAbbreviation(abbr);
|
||||
|
||||
if (options.contextNode) {
|
||||
// add info about context node â
|
||||
// add info about context node –
|
||||
// a parent XHTML node in editor inside which abbreviation is
|
||||
// expanded
|
||||
tree._name = options.contextNode.name;
|
||||
|
|
@ -2244,7 +2244,7 @@ emmet.exec(function(require, _) {
|
|||
if (_.isString(r)) {
|
||||
child.data('resource', elements.create('snippet', r));
|
||||
} else if (elements.is(r, 'reference')) {
|
||||
// itâs a reference to another abbreviation:
|
||||
// it’s a reference to another abbreviation:
|
||||
// parse it and insert instead of current child
|
||||
/** @type AbbreviationNode */
|
||||
var subtree = parser.parse(r.data, {
|
||||
|
|
@ -2264,7 +2264,7 @@ emmet.exec(function(require, _) {
|
|||
});
|
||||
}
|
||||
|
||||
// move childâs children into the deepest child of new subtree
|
||||
// move child‘s children into the deepest child of new subtree
|
||||
var deepestChild = subtree.deepestChild();
|
||||
if (deepestChild) {
|
||||
_.each(child.children, function(c) {
|
||||
|
|
@ -2301,7 +2301,7 @@ emmet.exec(function(require, _) {
|
|||
});/**
|
||||
* Pasted content abbreviation processor. A pasted content is a content that
|
||||
* should be inserted into implicitly repeated abbreviation nodes.
|
||||
* This processor powers âWrap With Abbreviationâ action
|
||||
* This processor powers “Wrap With Abbreviation” action
|
||||
* @param {Function} require
|
||||
* @param {Underscore} _
|
||||
*/
|
||||
|
|
@ -2357,7 +2357,7 @@ emmet.exec(function(require, _) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Check if parsed node contains output placeholder â a target where
|
||||
* Check if parsed node contains output placeholder – a target where
|
||||
* pasted content should be inserted
|
||||
* @param {AbbreviationNode} node
|
||||
* @returns {Boolean}
|
||||
|
|
@ -4226,7 +4226,7 @@ emmet.define('handlerList', function(require, _) {
|
|||
* Adds function handler
|
||||
* @param {Function} fn Handler
|
||||
* @param {Object} options Handler options. Possible values are:<br><br>
|
||||
* <b>order</b> : (<code>Number</code>) â order in handler list. Handlers
|
||||
* <b>order</b> : (<code>Number</code>) – order in handler list. Handlers
|
||||
* with higher order value will be executed earlier.
|
||||
*/
|
||||
add: function(fn, options) {
|
||||
|
|
@ -4527,8 +4527,8 @@ emmet.define('stringStream', function(require, _) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Act like a multi-character <code>eat</code>âif <code>consume</code> is true or
|
||||
* not givenâor a look-ahead that doesn't update the stream positionâif
|
||||
* Act like a multi-character <code>eat</code>—if <code>consume</code> is true or
|
||||
* not given—or a look-ahead that doesn't update the stream position—if
|
||||
* it is false. <code>pattern</code> can be either a string or a
|
||||
* regular expression starting with ^. When it is a string,
|
||||
* <code>caseInsensitive</code> can be set to true to make the match
|
||||
|
|
@ -4883,7 +4883,6 @@ emmet.define('resources', function(require, _) {
|
|||
sectionKey = section['extends'];
|
||||
} while (sectionKey && !_.include(memo, sectionKey));
|
||||
|
||||
|
||||
cache[cacheKey] = _.extend.apply(_, stack.reverse());
|
||||
}
|
||||
|
||||
|
|
@ -4900,15 +4899,15 @@ emmet.define('actions', function(require, _, zc) {
|
|||
var actions = {};
|
||||
|
||||
/**
|
||||
* âHumanizesâ action name, makes it more readable for people
|
||||
* “Humanizes” action name, makes it more readable for people
|
||||
* @param {String} name Action name (like 'expand_abbreviation')
|
||||
* @return Humanized name (like 'Expand Abbreviation')
|
||||
*/
|
||||
function humanizeActionName(name) {
|
||||
return require('utils').trim(name.charAt(0).toUpperCase()
|
||||
+ name.substring(1).replace(/_[a-z]/g, function(str) {
|
||||
return ' ' + str.charAt(1).toUpperCase();
|
||||
}));
|
||||
+ name.substring(1).replace(/_[a-z]/g, function(str) {
|
||||
return ' ' + str.charAt(1).toUpperCase();
|
||||
}));
|
||||
}
|
||||
|
||||
return {
|
||||
|
|
@ -4917,9 +4916,9 @@ emmet.define('actions', function(require, _, zc) {
|
|||
* @param {String} name Action name
|
||||
* @param {Function} fn Action function
|
||||
* @param {Object} options Custom action options:<br>
|
||||
* <b>label</b> : (<code>String</code>) â Human-readable action name.
|
||||
* <b>label</b> : (<code>String</code>) – Human-readable action name.
|
||||
* May contain '/' symbols as submenu separators<br>
|
||||
* <b>hidden</b> : (<code>Boolean</code>) â Indicates whether action
|
||||
* <b>hidden</b> : (<code>Boolean</code>) – Indicates whether action
|
||||
* should be displayed in menu (<code>getMenu()</code> method)
|
||||
*
|
||||
* @memberOf actions
|
||||
|
|
@ -5575,7 +5574,7 @@ emmet.define('actionUtils', function(require, _) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Common syntax detection method for editors that doesnât provide any
|
||||
* Common syntax detection method for editors that doesn’t provide any
|
||||
* info about current syntax scope.
|
||||
* @param {IEmmetEditor} editor Current editor
|
||||
* @param {String} hint Any syntax hint that editor can provide
|
||||
|
|
@ -5882,7 +5881,7 @@ emmet.define('base64', function(require, _) {
|
|||
});/**
|
||||
* HTML matcher: takes string and searches for HTML tag pairs for given position
|
||||
*
|
||||
* Unlike âclassicâ matchers, it parses content from the specified
|
||||
* Unlike “classic” matchers, it parses content from the specified
|
||||
* position, not from the start, so it may work even outside HTML documents
|
||||
* (for example, inside strings of programming languages like JavaScript, Python
|
||||
* etc.)
|
||||
|
|
@ -6234,23 +6233,23 @@ emmet.define('tabStops', function(require, _) {
|
|||
* @param {String} text Text to process
|
||||
* @param {Object} options List of processor options:<br>
|
||||
*
|
||||
* <b>replaceCarets</b> : <code>Boolean</code> â replace all default
|
||||
* <b>replaceCarets</b> : <code>Boolean</code> — replace all default
|
||||
* caret placeholders (like <i>{%::emmet-caret::%}</i>) with <i>${0:caret}</i><br>
|
||||
*
|
||||
* <b>escape</b> : <code>Function</code> â function that handle escaped
|
||||
* <b>escape</b> : <code>Function</code> — function that handle escaped
|
||||
* characters (mostly '$'). By default, it returns the character itself
|
||||
* to be displayed as is in output, but sometimes you will use
|
||||
* <code>extract</code> method as intermediate solution for further
|
||||
* processing and want to keep character escaped. Thus, you should override
|
||||
* <code>escape</code> method to return escaped symbol (e.g. '\\$')<br>
|
||||
*
|
||||
* <b>tabstop</b> : <code>Function</code> â a tabstop handler. Receives
|
||||
* a single argument â an object describing token: its position, number
|
||||
* <b>tabstop</b> : <code>Function</code> – a tabstop handler. Receives
|
||||
* a single argument – an object describing token: its position, number
|
||||
* group, placeholder and token itself. Should return a replacement
|
||||
* string that will appear in final output
|
||||
*
|
||||
* <b>variable</b> : <code>Function</code> â variable handler. Receives
|
||||
* a single argument â an object describing token: its position, name
|
||||
* <b>variable</b> : <code>Function</code> – variable handler. Receives
|
||||
* a single argument – an object describing token: its position, name
|
||||
* and original token itself. Should return a replacement
|
||||
* string that will appear in final output
|
||||
*
|
||||
|
|
@ -6439,7 +6438,7 @@ emmet.define('tabStops', function(require, _) {
|
|||
var placeholderMemo = {};
|
||||
var res = require('resources');
|
||||
return function(str, varName) {
|
||||
// do not mark `child` variable as placeholder â itâs a reserved
|
||||
// do not mark `child` variable as placeholder – it‘s a reserved
|
||||
// variable name
|
||||
if (varName == 'child')
|
||||
return str;
|
||||
|
|
@ -6938,13 +6937,13 @@ emmet.define('elements', function(require, _) {
|
|||
return result;
|
||||
});/**
|
||||
* Abstract implementation of edit tree interface.
|
||||
* Edit tree is a named container of editable âname-valueâ child elements,
|
||||
* Edit tree is a named container of editable “name-value” child elements,
|
||||
* parsed from <code>source</code>. This container provides convenient methods
|
||||
* for editing/adding/removing child elements. All these update actions are
|
||||
* instantly reflected in the <code>source</code> code with respect of formatting.
|
||||
* <br><br>
|
||||
* For example, developer can create an edit tree from CSS rule and add or
|
||||
* remove properties from itâall changes will be immediately reflected in the
|
||||
* remove properties from it–all changes will be immediately reflected in the
|
||||
* original source.
|
||||
* <br><br>
|
||||
* All classes defined in this module should be extended the same way as in
|
||||
|
|
@ -7114,7 +7113,7 @@ emmet.define('editTree', function(require, _, core) {
|
|||
return element.value(value);
|
||||
|
||||
if (!_.isUndefined(value)) {
|
||||
// no such element â create it
|
||||
// no such element — create it
|
||||
return this.add(name, value, pos);
|
||||
}
|
||||
},
|
||||
|
|
@ -7479,7 +7478,7 @@ emmet.define('cssEditTree', function(require, _) {
|
|||
if (token.type == '}' || token.type == ';') {
|
||||
// found value end
|
||||
trimWhitespaceTokens(tokens, WHITESPACE_REMOVE_FROM_START
|
||||
| (token.type == '}' ? WHITESPACE_REMOVE_FROM_END : 0));
|
||||
| (token.type == '}' ? WHITESPACE_REMOVE_FROM_END : 0));
|
||||
|
||||
if (tokens.length) {
|
||||
start = tokens[0].start;
|
||||
|
|
@ -7634,7 +7633,7 @@ emmet.define('cssEditTree', function(require, _) {
|
|||
// characters between rules may lead to undesired behavior,
|
||||
// especially when current rule is duplicated or used as a donor
|
||||
// to create new rule.
|
||||
// To solve this issue, weâll take only last newline indentation
|
||||
// To solve this issue, we‘ll take only last newline indentation
|
||||
var lines = utils.splitByLines(p.styleBefore);
|
||||
if (lines.length > 1) {
|
||||
p.styleBefore = '\n' + _.last(lines);
|
||||
|
|
@ -7982,7 +7981,7 @@ emmet.define('xmlEditTree', function(require, _) {
|
|||
var attribute = new XMLEditElement(this,
|
||||
editTree.createToken(start + styles.styleBefore.length, name),
|
||||
editTree.createToken(start + styles.styleBefore.length + name.length
|
||||
+ styles.styleSeparator.length, value)
|
||||
+ styles.styleSeparator.length, value)
|
||||
);
|
||||
|
||||
_.extend(attribute, styles);
|
||||
|
|
@ -8350,7 +8349,7 @@ emmet.define('wrapWithAbbreviation', function(require, _) {
|
|||
});/**
|
||||
* Toggles HTML and CSS comments depending on current caret context. Unlike
|
||||
* the same action in most editors, this action toggles comment on currently
|
||||
* matched itemâHTML tag or CSS selectorâwhen nothing is selected.
|
||||
* matched item—HTML tag or CSS selector—when nothing is selected.
|
||||
*
|
||||
* @param {Function} require
|
||||
* @param {Underscore} _
|
||||
|
|
@ -8424,7 +8423,7 @@ emmet.exec(function(require, _) {
|
|||
return _.find(rule.list(), function(item) {
|
||||
if (item.range().end === relPos) {
|
||||
// at the end of property, but outside of it
|
||||
// if thereâs a space character at current position,
|
||||
// if there’s a space character at current position,
|
||||
// use current property
|
||||
return reSafeChar.test(rule.source.charAt(relPos));
|
||||
}
|
||||
|
|
@ -8514,9 +8513,9 @@ emmet.exec(function(require, _) {
|
|||
// should add comment
|
||||
// make sure that there's no comment inside selection
|
||||
newContent = commentStart + ' ' +
|
||||
range.substring(content)
|
||||
.replace(new RegExp(utils.escapeForRegexp(commentStart) + '\\s*|\\s*' + utils.escapeForRegexp(commentEnd), 'g'), '') +
|
||||
' ' + commentEnd;
|
||||
range.substring(content)
|
||||
.replace(new RegExp(utils.escapeForRegexp(commentStart) + '\\s*|\\s*' + utils.escapeForRegexp(commentEnd), 'g'), '') +
|
||||
' ' + commentEnd;
|
||||
|
||||
// adjust caret position
|
||||
caretPos += commentStart.length + 1;
|
||||
|
|
@ -8569,7 +8568,7 @@ emmet.exec(function(require, _) {
|
|||
/**
|
||||
* Search for new caret insertion point
|
||||
* @param {IEmmetEditor} editor Editor instance
|
||||
* @param {Number} inc Search increment: -1 â search left, 1 â search right
|
||||
* @param {Number} inc Search increment: -1 — search left, 1 — search right
|
||||
* @param {Number} offset Initial offset relative to current caret position
|
||||
* @return {Number} Returns -1 if insertion point wasn't found
|
||||
*/
|
||||
|
|
@ -8949,9 +8948,9 @@ emmet.exec(function(require, _) {
|
|||
|
||||
// locate parts of complex values.
|
||||
// some examples:
|
||||
// â 1px solid red: 3 parts
|
||||
// â arial, sans-serif: enumeration, 2 parts
|
||||
// â url(image.png): function value part
|
||||
// – 1px solid red: 3 parts
|
||||
// – arial, sans-serif: enumeration, 2 parts
|
||||
// – url(image.png): function value part
|
||||
var value = property.value();
|
||||
_.each(property.valueParts(), function(r) {
|
||||
// add absolute range
|
||||
|
|
@ -9277,8 +9276,8 @@ emmet.exec(function(require, _) {
|
|||
});
|
||||
/**
|
||||
* Splits or joins tag, e.g. transforms it into a short notation and vice versa:<br>
|
||||
* <div></div> â <div /> : join<br>
|
||||
* <div /> â <div></div> : split
|
||||
* <div></div> → <div /> : join<br>
|
||||
* <div /> → <div></div> : split
|
||||
* @param {Function} require
|
||||
* @param {Underscore} _
|
||||
* @memberOf __splitJoinTagAction
|
||||
|
|
@ -9435,7 +9434,7 @@ emmet.define('reflectCSSValue', function(require, _) {
|
|||
* Returns value that should be reflected for <code>refName</code> CSS property
|
||||
* from <code>curName</code> property. This function is used for special cases,
|
||||
* when the same result must be achieved with different properties for different
|
||||
* browsers. For example: opаcity:0.5; â filter:alpha(opacity=50);<br><br>
|
||||
* browsers. For example: opаcity:0.5; → filter:alpha(opacity=50);<br><br>
|
||||
*
|
||||
* This function does value conversion between different CSS properties
|
||||
*
|
||||
|
|
@ -9629,10 +9628,10 @@ emmet.exec(function(require, _) {
|
|||
prefs.define('css.closeBraceIndentation', '\n',
|
||||
'Indentation before closing brace of CSS rule. Some users prefere '
|
||||
+ 'indented closing brace of CSS rule for better readability. '
|
||||
+ 'This preferenceâs value will be automatically inserted before '
|
||||
+ 'This preference’s value will be automatically inserted before '
|
||||
+ 'closing brace when user adds newline in newly created CSS rule '
|
||||
+ '(e.g. when âInsert formatted linebreakâ action will be performed '
|
||||
+ 'in CSS file). If youâre such user, you may want to write put a value '
|
||||
+ '(e.g. when “Insert formatted linebreak” action will be performed '
|
||||
+ 'in CSS file). If you’re such user, you may want to write put a value '
|
||||
+ 'like <code>\\n\\t</code> in this preference.');
|
||||
|
||||
/**
|
||||
|
|
@ -9872,7 +9871,7 @@ emmet.exec(function(require, _) {
|
|||
}
|
||||
|
||||
b64 = 'data:' + (actionUtils.mimeTypes[String(file.getExt(realImgPath))] || defaultMimeType) +
|
||||
';base64,' + b64;
|
||||
';base64,' + b64;
|
||||
|
||||
editor.replaceContent('$0' + b64, pos, pos + imgPath.length);
|
||||
});
|
||||
|
|
@ -10002,7 +10001,7 @@ emmet.exec(function(require, _) {
|
|||
}
|
||||
|
||||
require('actions').add('update_image_size', function(editor) {
|
||||
// this action will definitely wonât work in SASS dialect,
|
||||
// this action will definitely won’t work in SASS dialect,
|
||||
// but may work in SCSS or LESS
|
||||
if (_.include(['css', 'less', 'scss'], String(editor.getSyntax()))) {
|
||||
updateImageSizeCSS(editor);
|
||||
|
|
@ -10134,23 +10133,23 @@ emmet.define('cssResolver', function(require, _) {
|
|||
'Automatically generate vendor-prefixed copies of expanded CSS '
|
||||
+ 'property. By default, Emmet will generate vendor-prefixed '
|
||||
+ 'properties only when you put dash before abbreviation '
|
||||
+ '(e.g. <code>-bxsh</code>). With this option enabled, you donât '
|
||||
+ '(e.g. <code>-bxsh</code>). With this option enabled, you don’t '
|
||||
+ 'need dashes before abbreviations: Emmet will produce '
|
||||
+ 'vendor-prefixed properties for you.');
|
||||
|
||||
var descTemplate = _.template('A comma-separated list of CSS properties that may have '
|
||||
+ '<code><%= vendor %></code> vendor prefix. This list is used to generate '
|
||||
+ 'a list of prefixed properties when expanding <code>-property</code> '
|
||||
+ 'abbreviations. Empty list means that all possible CSS values may '
|
||||
+ 'have <code><%= vendor %></code> prefix.');
|
||||
+ '<code><%= vendor %></code> vendor prefix. This list is used to generate '
|
||||
+ 'a list of prefixed properties when expanding <code>-property</code> '
|
||||
+ 'abbreviations. Empty list means that all possible CSS values may '
|
||||
+ 'have <code><%= vendor %></code> prefix.');
|
||||
|
||||
var descAddonTemplate = _.template('A comma-separated list of <em>additional</em> CSS properties '
|
||||
+ 'for <code>css.<%= vendor %>Preperties</code> preference. '
|
||||
+ 'You should use this list if you want to add or remove a few CSS '
|
||||
+ 'properties to original set. To add a new property, simply write its name, '
|
||||
+ 'to remove it, precede property with hyphen.<br>'
|
||||
+ 'For example, to add <em>foo</em> property and remove <em>border-radius</em> one, '
|
||||
+ 'the preference value will look like this: <code>foo, -border-radius</code>.');
|
||||
+ 'for <code>css.<%= vendor %>Preperties</code> preference. '
|
||||
+ 'You should use this list if you want to add or remove a few CSS '
|
||||
+ 'properties to original set. To add a new property, simply write its name, '
|
||||
+ 'to remove it, precede property with hyphen.<br>'
|
||||
+ 'For example, to add <em>foo</em> property and remove <em>border-radius</em> one, '
|
||||
+ 'the preference value will look like this: <code>foo, -border-radius</code>.');
|
||||
|
||||
// properties list is created from cssFeatures.html file
|
||||
var props = {
|
||||
|
|
@ -10166,7 +10165,7 @@ emmet.define('cssResolver', function(require, _) {
|
|||
});
|
||||
|
||||
prefs.define('css.unitlessProperties', 'z-index, line-height, opacity, font-weight, zoom',
|
||||
'The list of properties whose values ââmust not contain units.');
|
||||
'The list of properties whose values must not contain units.');
|
||||
|
||||
prefs.define('css.intUnit', 'px', 'Default unit for integer values');
|
||||
prefs.define('css.floatUnit', 'em', 'Default unit for float values');
|
||||
|
|
@ -10391,8 +10390,8 @@ emmet.define('cssResolver', function(require, _) {
|
|||
function formatProperty(property, syntax) {
|
||||
var ix = property.indexOf(':');
|
||||
property = property.substring(0, ix).replace(/\s+$/, '')
|
||||
+ getSyntaxPreference('valueSeparator', syntax)
|
||||
+ require('utils').trim(property.substring(ix + 1));
|
||||
+ getSyntaxPreference('valueSeparator', syntax)
|
||||
+ require('utils').trim(property.substring(ix + 1));
|
||||
|
||||
return property.replace(/\s*;\s*$/, getSyntaxPreference('propertyEnd', syntax));
|
||||
}
|
||||
|
|
@ -10776,7 +10775,7 @@ emmet.define('cssResolver', function(require, _) {
|
|||
}
|
||||
|
||||
if (!snippet && prefs.get('css.fuzzySearch')) {
|
||||
// letâs try fuzzy search
|
||||
// let’s try fuzzy search
|
||||
snippet = resources.fuzzyFindSnippet(syntax, abbrData.property, parseFloat(prefs.get('css.fuzzySearchMinScore')));
|
||||
}
|
||||
|
||||
|
|
@ -10794,8 +10793,8 @@ emmet.define('cssResolver', function(require, _) {
|
|||
var result = [];
|
||||
if (!value && abbrData.values) {
|
||||
value = _.map(abbrData.values, function(val) {
|
||||
return this.normalizeValue(val, snippetObj.name);
|
||||
}, this).join(' ') + ';';
|
||||
return this.normalizeValue(val, snippetObj.name);
|
||||
}, this).join(' ') + ';';
|
||||
}
|
||||
|
||||
snippetObj.value = value || snippetObj.value;
|
||||
|
|
@ -11085,7 +11084,7 @@ emmet.define('cssGradient', function(require, _) {
|
|||
direction = textualDirection(direction);
|
||||
|
||||
if(reDeg.test(direction))
|
||||
throw "The direction is an angle that canât be converted.";
|
||||
throw "The direction is an angle that can’t be converted.";
|
||||
|
||||
var v = function(pos) {
|
||||
return ~direction.indexOf(pos) ? '100%' : '0';
|
||||
|
|
@ -11330,7 +11329,7 @@ emmet.define('cssGradient', function(require, _) {
|
|||
cssProp = cssRule.itemFromPosition(pos, true);
|
||||
if (!cssProp) {
|
||||
// in case user just started writing CSS property
|
||||
// and didn't include semicolonâtry another approach
|
||||
// and didn't include semicolon–try another approach
|
||||
cssProp = _.find(cssRule.list(), function(elem) {
|
||||
return elem.range(true).end == pos;
|
||||
});
|
||||
|
|
@ -11672,7 +11671,7 @@ emmet.define('tagName', function(require, _) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Adds new parentâchild mapping
|
||||
* Adds new parent–child mapping
|
||||
* @param {String} parent
|
||||
* @param {String} child
|
||||
*/
|
||||
|
|
@ -11735,11 +11734,11 @@ emmet.define('tagName', function(require, _) {
|
|||
*/
|
||||
emmet.exec(function(require, _) {
|
||||
var prefs = require('preferences');
|
||||
prefs.define('bem.elementSeparator', '__', 'Class nameâs element separator.');
|
||||
prefs.define('bem.modifierSeparator', '_', 'Class nameâs modifier separator.');
|
||||
prefs.define('bem.elementSeparator', '__', 'Class name’s element separator.');
|
||||
prefs.define('bem.modifierSeparator', '_', 'Class name’s modifier separator.');
|
||||
prefs.define('bem.shortElementPrefix', '-',
|
||||
'Symbol for describing short âblock-elementâ notation. Class names '
|
||||
+ 'prefixed with this symbol will be treated as element name for parentâs '
|
||||
'Symbol for describing short “block-element” notation. Class names '
|
||||
+ 'prefixed with this symbol will be treated as element name for parent‘s '
|
||||
+ 'block name. Each symbol instance traverses one level up in parsed '
|
||||
+ 'tree for block name lookup. Empty value will disable short notation.');
|
||||
|
||||
|
|
@ -11778,8 +11777,8 @@ emmet.exec(function(require, _) {
|
|||
if (!item.__bem.block) {
|
||||
reBlockName = /^[a-z]/i;
|
||||
item.__bem.block = _.find(classNames, function(name) {
|
||||
return reBlockName.test(name);
|
||||
}) || '';
|
||||
return reBlockName.test(name);
|
||||
}) || '';
|
||||
}
|
||||
|
||||
classNames = _.chain(classNames)
|
||||
|
|
@ -11937,16 +11936,16 @@ emmet.exec(function(require, _) {
|
|||
* It does several things:<br>
|
||||
* <ul>
|
||||
* <li>Expands complex class name (according to BEM symbol semantics):
|
||||
* .block__elem_modifier â .block.block__elem.block__elem_modifier
|
||||
* .block__elem_modifier → .block.block__elem.block__elem_modifier
|
||||
* </li>
|
||||
* <li>Inherits block name on child elements:
|
||||
* .b-block > .__el > .__el â .b-block > .b-block__el > .b-block__el__el
|
||||
* .b-block > .__el > .__el → .b-block > .b-block__el > .b-block__el__el
|
||||
* </li>
|
||||
* <li>Treats first dash symbol as '__'</li>
|
||||
* <li>Double underscore (or typographic 'â') is also treated as an element
|
||||
* level lookup, e.g. ____el will search for element definition in parentâs
|
||||
* <li>Double underscore (or typographic '–') is also treated as an element
|
||||
* level lookup, e.g. ____el will search for element definition in parent’s
|
||||
* parent element:
|
||||
* .b-block > .__el1 > .____el2 â .b-block > .b-block__el1 > .b-block__el2
|
||||
* .b-block > .__el1 > .____el2 → .b-block > .b-block__el1 > .b-block__el2
|
||||
* </li>
|
||||
* </ul>
|
||||
*
|
||||
|
|
@ -12003,16 +12002,16 @@ emmet.exec(function(require, _) {
|
|||
+ 'the following properties and functions are availabe:\n'
|
||||
+ '<ul>'
|
||||
|
||||
+ '<li><code>attr(name, before, after)</code> â a function that outputs'
|
||||
+ '<li><code>attr(name, before, after)</code> – a function that outputs'
|
||||
+ 'specified attribute value concatenated with <code>before</code> '
|
||||
+ 'and <code>after</code> strings. If attribute doesn\'t exists, the '
|
||||
+ 'empty string will be returned.</li>'
|
||||
|
||||
+ '<li><code>node</code> â current node (instance of <code>AbbreviationNode</code>)</li>'
|
||||
+ '<li><code>node</code> – current node (instance of <code>AbbreviationNode</code>)</li>'
|
||||
|
||||
+ '<li><code>name</code> â name of current tag</li>'
|
||||
+ '<li><code>name</code> – name of current tag</li>'
|
||||
|
||||
+ '<li><code>padding</code> â current string padding, can be used '
|
||||
+ '<li><code>padding</code> – current string padding, can be used '
|
||||
+ 'for formatting</li>'
|
||||
|
||||
+'</ul>');
|
||||
|
|
@ -12223,7 +12222,7 @@ emmet.exec(function(require, _){
|
|||
function processSnippet(item, profile, level) {
|
||||
item.start = item.end = '';
|
||||
if (!isVeryFirstChild(item) && profile.tag_nl !== false && shouldAddLineBreak(item, profile)) {
|
||||
// check if weâre not inside inline element
|
||||
// check if we’re not inside inline element
|
||||
if (isRoot(item.parent) || !require('abbreviationUtils').isInline(item.parent)) {
|
||||
item.start = require('utils').getNewline() + item.start;
|
||||
}
|
||||
|
|
@ -12658,11 +12657,11 @@ emmet.exec(function(require, _) {
|
|||
* https://code.djangoproject.com/browser/django/trunk/django/contrib/webdesign/lorem_ipsum.py
|
||||
* <br><br>
|
||||
* Examples to test:<br>
|
||||
* <code>lipsum</code> â generates 30 words text.<br>
|
||||
* <code>lipsum*6</code> â generates 6 paragraphs (autowrapped with <p> element) of text.<br>
|
||||
* <code>ol>lipsum10*5</code> â generates ordered list with 5 list items (autowrapped with <li> tag)
|
||||
* <code>lipsum</code> – generates 30 words text.<br>
|
||||
* <code>lipsum*6</code> – generates 6 paragraphs (autowrapped with <p> element) of text.<br>
|
||||
* <code>ol>lipsum10*5</code> — generates ordered list with 5 list items (autowrapped with <li> tag)
|
||||
* with text of 10 words on each line<br>
|
||||
* <code>span*3>lipsum20</code> â generates 3 paragraphs of 20-words text, each wrapped with <span> element .
|
||||
* <code>span*3>lipsum20</code> – generates 3 paragraphs of 20-words text, each wrapped with <span> element .
|
||||
* Each paragraph phrase is unique
|
||||
* @param {Function} require
|
||||
* @param {Underscore} _
|
||||
|
|
@ -12704,33 +12703,33 @@ emmet.define('lorem', function(require, _) {
|
|||
'maxime', 'corrupti']
|
||||
},
|
||||
ru: {
|
||||
common: ['даНокО-даНокО', 'Са', 'ŃНОвоŃĐ˝ŃПи', 'гОŃаПи', 'в ŃŃŃано', 'гНаŃĐ˝ŃŃ
', 'и ŃОгНаŃĐ˝ŃŃ
', 'МивŃŃ', 'ŃŃйнŃĐľ', 'ŃокŃŃŃ'],
|
||||
words: ['вдаНи', 'ĐžŃ Đ˛ŃĐľŃ
', 'Они', 'ĐąŃквоннŃŃ
', 'дОПаŃ
', 'на йоŃогŃ', 'ŃоПанŃика',
|
||||
'йОНŃŃОгО', 'ŃСŃкОвОгО', 'Окоана', 'ПаНонŃкиК', 'ŃŃŃоок', 'даНŃ',
|
||||
'ĐśŃŃŃиŃ', 'пО вŃоК', 'ОйоŃпоŃиваоŃ', 'оо','вŃоПи', 'ноОйŃ
ОдиПŃПи',
|
||||
'ĐżŃавиНаПи', 'ŃŃа', 'паŃадигПаŃиŃĐľŃкаŃ', 'ŃŃŃана', 'кОŃĐžŃОК', 'МаŃоннŃĐľ',
|
||||
'ĐżŃодНОМониŃ', 'СаНоŃаŃŃ', 'ĐżŃŃПО', 'ŃĐžŃ', 'даМо', 'вŃоПОгŃŃаŃ',
|
||||
'ĐżŃнкŃŃаŃиŃ', 'но', 'иПооŃ', 'вНаŃŃи', 'над', 'ŃŃйнŃПи', 'ŃокŃŃаПи',
|
||||
'водŃŃиПи', 'йоСОŃŃОгŃаŃиŃĐ˝ŃĐš', 'ОйŃаС', 'МиСни', 'ОднаМдŃ', 'Одна',
|
||||
'ПаНонŃкаŃ', 'ŃŃŃĐžŃка','ŃŃйнОгО', 'ŃокŃŃа', 'иПони', 'lorem', 'ipsum',
|
||||
'ŃĐľŃиНа', 'вŃĐšŃи', 'йОНŃŃОК', 'ПиŃ', 'ĐłŃаППаŃики', 'воНикиК', 'ОкŃПОкŃ',
|
||||
'ĐżŃодŃĐżŃоМдаН', 'Đž', 'СНŃŃ
', 'СапŃŃŃŃ
', 'дикиŃ
', 'СнакаŃ
', 'вОпŃĐžŃа',
|
||||
'кОваŃĐ˝ŃŃ
', 'ŃĐžŃкаŃ
', 'СапŃŃОК', 'нО', 'ŃокŃŃ', 'даН', 'ŃйиŃŃ',
|
||||
'ŃойŃ', 'ŃОНкŃ', 'Он', 'ŃОйŃаН', 'ŃоПŃ', 'ŃвОиŃ
', 'СагНавнŃŃ
', 'ĐąŃкв',
|
||||
'пОдпОŃŃаН', 'иниŃиаН', 'Са', 'пОŃŃ', 'ĐżŃŃŃиНŃŃ', 'Đ´ĐžŃОгŃ',
|
||||
'вСОйŃавŃиŃŃ', 'поŃвŃŃ', 'воŃŃинŃ', 'ĐşŃŃŃивнŃŃ
', 'гОŃ', 'ĐąŃĐžŃиН',
|
||||
'пОŃНодниК', 'вСгНŃĐ´', 'наСад', 'ŃиНŃŃŃ', 'ŃвОогО', 'ŃОднОгО', 'гОŃОда',
|
||||
'ĐąŃквОгŃад', 'СагОНОвОк', 'Đ´ĐľŃовни', 'аНŃавиŃ', 'пОдСагОНОвОк', 'ŃвОогО',
|
||||
'поŃĐľŃНка', 'ĐłŃŃŃŃĐ˝ŃĐš', 'ŃĐľŃĐžŃиŃĐľŃкиК', 'вОпŃĐžŃ', 'ŃкаŃиНŃŃ', 'огО',
|
||||
'Ńоко', 'ĐżŃОдОНМиН', 'ŃвОК', 'ĐżŃŃŃ', 'Đ´ĐžŃОго', 'вŃŃŃĐľŃиН', 'ŃŃкОпиŃŃ',
|
||||
'Она', 'ĐżŃодŃĐżŃодиНа', 'ПОоК', 'вŃĐľ', 'поŃопиŃŃваоŃŃŃ', 'ноŃкОНŃкО',
|
||||
'ŃаС', 'одинŃŃвоннОо', 'ŃŃĐž', 'ПонŃ', 'ĐžŃŃаНОŃŃ', 'ŃŃĐž', 'ĐżŃиŃŃавка',
|
||||
'вОСвŃаŃаКŃŃ', 'ŃŃ', 'ĐťŃŃŃĐľ', 'ŃвОŃ', 'йоСОпаŃĐ˝ŃŃ', 'ŃŃŃанŃ', 'пОŃĐťŃŃавŃиŃŃ',
|
||||
'ŃŃкОпиŃи', 'наŃ', 'ĐżŃОдОНМиН', 'ŃвОК', 'ĐżŃŃŃ', 'вŃкОŃĐľ', 'оПŃ',
|
||||
'пОвŃŃŃĐľŃаНŃŃ', 'кОваŃĐ˝ŃĐš', 'ŃĐžŃŃавиŃоНŃ', 'ŃокНаПнŃŃ
', 'ŃокŃŃОв',
|
||||
'напОивŃиК', 'ŃСŃкОП', 'ŃĐľŃŃŃ', 'СаПанивŃиК', 'ŃвОо', 'агонŃŃвО',
|
||||
'кОŃĐžŃОо', 'иŃпОНŃСОваНО', 'ŃнОва', 'ŃнОва', 'ŃвОиŃ
', 'ĐżŃОокŃаŃ
',
|
||||
'ĐľŃНи', 'поŃопиŃаНи', 'ŃĐž', 'МивоŃ', 'ŃаП', 'Đ´Đž', 'ŃиŃ
', 'пОŃ']
|
||||
common: ['далеко-далеко', 'за', 'словесными', 'горами', 'в стране', 'гласных', 'и согласных', 'живут', 'рыбные', 'тексты'],
|
||||
words: ['вдали', 'от всех', 'они', 'буквенных', 'домах', 'на берегу', 'семантика',
|
||||
'большого', 'языкового', 'океана', 'маленький', 'ручеек', 'даль',
|
||||
'журчит', 'по всей', 'обеспечивает', 'ее','всеми', 'необходимыми',
|
||||
'правилами', 'эта', 'парадигматическая', 'страна', 'которой', 'жаренные',
|
||||
'предложения', 'залетают', 'прямо', 'рот', 'даже', 'всемогущая',
|
||||
'пунктуация', 'не', 'имеет', 'власти', 'над', 'рыбными', 'текстами',
|
||||
'ведущими', 'безорфографичный', 'образ', 'жизни', 'однажды', 'одна',
|
||||
'маленькая', 'строчка','рыбного', 'текста', 'имени', 'lorem', 'ipsum',
|
||||
'решила', 'выйти', 'большой', 'мир', 'грамматики', 'великий', 'оксмокс',
|
||||
'предупреждал', 'о', 'злых', 'запятых', 'диких', 'знаках', 'вопроса',
|
||||
'коварных', 'точках', 'запятой', 'но', 'текст', 'дал', 'сбить',
|
||||
'себя', 'толку', 'он', 'собрал', 'семь', 'своих', 'заглавных', 'букв',
|
||||
'подпоясал', 'инициал', 'за', 'пояс', 'пустился', 'дорогу',
|
||||
'взобравшись', 'первую', 'вершину', 'курсивных', 'гор', 'бросил',
|
||||
'последний', 'взгляд', 'назад', 'силуэт', 'своего', 'родного', 'города',
|
||||
'буквоград', 'заголовок', 'деревни', 'алфавит', 'подзаголовок', 'своего',
|
||||
'переулка', 'грустный', 'реторический', 'вопрос', 'скатился', 'его',
|
||||
'щеке', 'продолжил', 'свой', 'путь', 'дороге', 'встретил', 'рукопись',
|
||||
'она', 'предупредила', 'моей', 'все', 'переписывается', 'несколько',
|
||||
'раз', 'единственное', 'что', 'меня', 'осталось', 'это', 'приставка',
|
||||
'возвращайся', 'ты', 'лучше', 'свою', 'безопасную', 'страну', 'послушавшись',
|
||||
'рукописи', 'наш', 'продолжил', 'свой', 'путь', 'вскоре', 'ему',
|
||||
'повстречался', 'коварный', 'составитель', 'рекламных', 'текстов',
|
||||
'напоивший', 'языком', 'речью', 'заманивший', 'свое', 'агенство',
|
||||
'которое', 'использовало', 'снова', 'снова', 'своих', 'проектах',
|
||||
'если', 'переписали', 'то', 'живет', 'там', 'до', 'сих', 'пор']
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -516,6 +516,9 @@
|
|||
publicUrl = items[i].publicUrl
|
||||
}
|
||||
|
||||
// Spaces in URLs break Markdown syntax
|
||||
publicUrl = publicUrl.replace(/\s/g, '%20')
|
||||
|
||||
onSuccess(publicUrl)
|
||||
|
||||
this.hide()
|
||||
|
|
|
|||
|
|
@ -200,7 +200,8 @@ to{background-position:0 0}
|
|||
.redactor-editor video,.redactor-editor img{height:auto}
|
||||
.redactor-editor div,.redactor-editor p,.redactor-editor ul,.redactor-editor ol,.redactor-editor table,.redactor-editor dl,.redactor-editor figure,.redactor-editor blockquote,.redactor-editor pre{margin:0;margin-bottom:15px;border:none;background:none;box-shadow:none}
|
||||
.redactor-editor iframe,.redactor-editor object,.redactor-editor hr{margin-bottom:15px}
|
||||
.redactor-editor blockquote{margin-left:1.6em !important;padding-left:0;color:#777;font-style:italic}
|
||||
.redactor-editor blockquote{margin-left:1.6em !important;padding:0;text-align:left;color:#777;font-style:italic}
|
||||
.redactor-editor blockquote:before,.redactor-editor blockquote:after{content:''}
|
||||
.redactor-editor ul,.redactor-editor ol{padding-left:2em}
|
||||
.redactor-editor ul ul,.redactor-editor ol ol,.redactor-editor ul ol,.redactor-editor ol ul{margin:2px;padding:0;padding-left:2em;border:none}
|
||||
.redactor-editor ol ol li{list-style-type:lower-alpha}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -72,6 +72,7 @@
|
|||
imageResizable: true,
|
||||
buttonSource: true,
|
||||
removeDataAttr: false,
|
||||
toolbarFixed: false,
|
||||
syncBeforeCallback: this.proxy(this.onSyncBefore),
|
||||
focusCallback: this.proxy(this.onFocus),
|
||||
blurCallback: this.proxy(this.onBlur),
|
||||
|
|
|
|||
|
|
@ -841,10 +841,15 @@ body .redactor-box-fullscreen {
|
|||
}
|
||||
.redactor-editor blockquote {
|
||||
margin-left: 1.6em !important;
|
||||
padding-left: 0;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
color: #777;
|
||||
font-style: italic;
|
||||
}
|
||||
.redactor-editor blockquote:before,
|
||||
.redactor-editor blockquote:after {
|
||||
content: '';
|
||||
}
|
||||
.redactor-editor ul,
|
||||
.redactor-editor ol {
|
||||
padding-left: 2em;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
Redactor 10.2.2
|
||||
Updated: July 15, 2015
|
||||
Redactor 10.2.5
|
||||
Updated: October 1, 2015
|
||||
|
||||
http://imperavi.com/redactor/
|
||||
|
||||
|
|
@ -92,7 +92,7 @@
|
|||
|
||||
// Functionality
|
||||
$.Redactor = Redactor;
|
||||
$.Redactor.VERSION = '10.2.2';
|
||||
$.Redactor.VERSION = '10.2.5';
|
||||
$.Redactor.modules = ['alignment', 'autosave', 'block', 'buffer', 'build', 'button',
|
||||
'caret', 'clean', 'code', 'core', 'dropdown', 'file', 'focus',
|
||||
'image', 'indent', 'inline', 'insert', 'keydown', 'keyup',
|
||||
|
|
@ -477,15 +477,18 @@
|
|||
set: function(type)
|
||||
{
|
||||
// focus
|
||||
if (!this.utils.browser('msie')) this.$editor.focus();
|
||||
|
||||
this.buffer.set();
|
||||
this.selection.save();
|
||||
if (!this.utils.browser('msie') && !this.opts.linebreaks)
|
||||
{
|
||||
this.$editor.focus();
|
||||
}
|
||||
|
||||
// get blocks
|
||||
this.alignment.blocks = this.selection.getBlocks();
|
||||
this.alignment.type = type;
|
||||
|
||||
this.buffer.set();
|
||||
this.selection.save();
|
||||
|
||||
// set alignment
|
||||
if (this.alignment.isLinebreaksOrNoBlocks())
|
||||
{
|
||||
|
|
@ -562,6 +565,8 @@
|
|||
},
|
||||
load: function()
|
||||
{
|
||||
if (!this.opts.autosave) return;
|
||||
|
||||
this.autosave.source = this.code.get();
|
||||
|
||||
if (this.autosave.html === this.autosave.source) return;
|
||||
|
|
@ -715,7 +720,6 @@
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
var block = this.block.blocks[0];
|
||||
if (block === false) return;
|
||||
|
||||
|
|
@ -784,6 +788,7 @@
|
|||
setMultiple: function(tag)
|
||||
{
|
||||
var block = this.block.blocks[0];
|
||||
|
||||
var isContainerTable = (this.block.containerTag == 'TD' || this.block.containerTag == 'TH');
|
||||
|
||||
if (block !== false && this.block.blocksSize === 1)
|
||||
|
|
@ -1236,6 +1241,8 @@
|
|||
build: function()
|
||||
{
|
||||
return {
|
||||
focused: false,
|
||||
blured: true,
|
||||
run: function()
|
||||
{
|
||||
this.build.createContainerBox();
|
||||
|
|
@ -1361,6 +1368,12 @@
|
|||
setEvents: function()
|
||||
{
|
||||
// drop
|
||||
this.$editor.on('dragover.redactor dragenter.redactor', function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
this.$editor.on('drop.redactor', $.proxy(function(e)
|
||||
{
|
||||
e = e.originalEvent || e;
|
||||
|
|
@ -1419,33 +1432,50 @@
|
|||
}
|
||||
|
||||
// focus
|
||||
if ($.isFunction(this.opts.focusCallback))
|
||||
this.$editor.on('focus.redactor', $.proxy(function(e)
|
||||
{
|
||||
this.$editor.on('focus.redactor', $.proxy(this.opts.focusCallback, this));
|
||||
}
|
||||
if ($.isFunction(this.opts.focusCallback))
|
||||
{
|
||||
this.core.setCallback('focus', e);
|
||||
}
|
||||
|
||||
$(document).on('mousedown.redactor.' + this.uuid, $.proxy(function(e) { this.blurClickedElement = e.target; }, this));
|
||||
this.build.focused = true;
|
||||
this.build.blured = false;
|
||||
|
||||
if (this.selection.getCurrent() === false)
|
||||
{
|
||||
this.selection.get();
|
||||
this.range.setStart(this.$editor[0], 0);
|
||||
this.range.setEnd(this.$editor[0], 0);
|
||||
this.selection.addRange();
|
||||
}
|
||||
|
||||
|
||||
}, this));
|
||||
|
||||
|
||||
// blur
|
||||
this.$editor.on('blur.redactor', $.proxy(function(e)
|
||||
$(document).on('mousedown.redactor-blur.' + this.uuid, $.proxy(function(e)
|
||||
{
|
||||
if (this.start) return;
|
||||
if (this.rtePaste) return;
|
||||
if (!this.build.isBlured()) return;
|
||||
|
||||
if ($(e.target).closest('.redactor-editor, .redactor-toolbar, .redactor-dropdown').size() !== 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this.utils.disableSelectAll();
|
||||
if ($.isFunction(this.opts.blurCallback)) this.core.setCallback('blur', e);
|
||||
if (!this.build.blured && $.isFunction(this.opts.blurCallback))
|
||||
{
|
||||
this.core.setCallback('blur', e);
|
||||
}
|
||||
|
||||
this.build.focused = false;
|
||||
this.build.blured = true;
|
||||
|
||||
}, this));
|
||||
},
|
||||
isBlured: function()
|
||||
{
|
||||
if (this.blurClickedElement === true) return true;
|
||||
|
||||
var $el = $(this.blurClickedElement);
|
||||
|
||||
return (!$el.hasClass('redactor-toolbar, redactor-dropdown') && !$el.is('#redactor-modal') && $el.parents('.redactor-toolbar, .redactor-dropdown, #redactor-modal').length === 0);
|
||||
},
|
||||
setHelpers: function()
|
||||
{
|
||||
|
|
@ -1578,15 +1608,19 @@
|
|||
|
||||
$button.on('mouseover', function()
|
||||
{
|
||||
if ($(this).hasClass('redactor-button-disabled')) return;
|
||||
if ($(this).hasClass('redactor-button-disabled'))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var pos = $button.offset();
|
||||
|
||||
$tooltip.show();
|
||||
$tooltip.css({
|
||||
top: (pos.top + $button.innerHeight()) + 'px',
|
||||
left: (pos.left + $button.innerWidth()/2 - $tooltip.innerWidth()/2) + 'px'
|
||||
});
|
||||
$tooltip.show();
|
||||
|
||||
});
|
||||
|
||||
$button.on('mouseout', function()
|
||||
|
|
@ -1601,6 +1635,8 @@
|
|||
|
||||
e.preventDefault();
|
||||
|
||||
$(document).find('.redactor-toolbar-tooltip').hide();
|
||||
|
||||
if (this.utils.browser('msie')) e.returnValue = false;
|
||||
|
||||
if (type == 'command') this.inline.format(callback);
|
||||
|
|
@ -1611,9 +1647,6 @@
|
|||
{
|
||||
var func;
|
||||
|
||||
// blur
|
||||
this.blurClickedElement = true;
|
||||
|
||||
if ($.isFunction(callback)) callback.call(this, btnName);
|
||||
else if (callback.search(/\./) != '-1')
|
||||
{
|
||||
|
|
@ -1939,7 +1972,7 @@
|
|||
var node, offset = 0;
|
||||
var walker = document.createTreeWalker(this.$editor[0], NodeFilter.SHOW_TEXT, null, null);
|
||||
|
||||
while (node == walker.nextNode())
|
||||
while (node = walker.nextNode())
|
||||
{
|
||||
offset += node.nodeValue.length;
|
||||
if (offset > start)
|
||||
|
|
@ -1974,7 +2007,7 @@
|
|||
return {
|
||||
onSet: function(html)
|
||||
{
|
||||
//html = this.clean.savePreCode(html);
|
||||
html = this.clean.savePreCode(html);
|
||||
|
||||
// convert script tag
|
||||
html = html.replace(/<script(.*?[^>]?)>([\w\W]*?)<\/script>/gi, '<pre class="redactor-script-tag" style="display: none;" $1>$2</pre>');
|
||||
|
|
@ -1985,7 +2018,7 @@
|
|||
// replace special characters in links
|
||||
html = html.replace(/<a href="(.*?[^>]?)®(.*?[^>]?)">/gi, '<a href="$1®$2">');
|
||||
|
||||
if (this.opts.replaceDivs) html = this.clean.replaceDivs(html);
|
||||
if (this.opts.replaceDivs && !this.opts.linebreaks) html = this.clean.replaceDivs(html);
|
||||
if (this.opts.linebreaks) html = this.clean.replaceParagraphsToBr(html);
|
||||
|
||||
// save form tag
|
||||
|
|
@ -2010,7 +2043,7 @@
|
|||
$div.remove();
|
||||
|
||||
// remove font tag
|
||||
html = html.replace(/<font(.*?[^<])>/gi, '');
|
||||
html = html.replace(/<font(.*?)>/gi, '');
|
||||
html = html.replace(/<\/font>/gi, '');
|
||||
|
||||
// tidy html
|
||||
|
|
@ -2070,7 +2103,7 @@
|
|||
html = html.replace(/<br\s?\/?>$/gi, '');
|
||||
}
|
||||
|
||||
// remove br in the of li
|
||||
// remove br in|of li tags
|
||||
html = html.replace(new RegExp('<br\\s?/?></li>', 'gi'), '</li>');
|
||||
html = html.replace(new RegExp('</li><br\\s?/?>', 'gi'), '</li>');
|
||||
|
||||
|
|
@ -2082,7 +2115,7 @@
|
|||
html = html.replace(/"">/gi, '">');
|
||||
|
||||
// remove verified
|
||||
html = html.replace(/<div(.*?[^>]) data-tagblock="redactor"(.*?[^>])>/gi, '<div$1$2>');
|
||||
html = html.replace(/<div(.*?)data-tagblock="redactor"(.*?[^>])>/gi, '<div$1$2>');
|
||||
html = html.replace(/<(.*?) data-verified="redactor"(.*?[^>])>/gi, '<$1$2>');
|
||||
|
||||
var $div = $("<div/>").html($.parseHTML(html, document, true));
|
||||
|
|
@ -2107,7 +2140,7 @@
|
|||
html = html.replace(/<span(.*?)id="redactor-image-editter"(.*?[^>])>(.*?)<\/span>/gi, '');
|
||||
|
||||
// remove font tag
|
||||
html = html.replace(/<font(.*?[^<])>/gi, '');
|
||||
html = html.replace(/<font(.*?)>/gi, '');
|
||||
html = html.replace(/<\/font>/gi, '');
|
||||
|
||||
// tidy html
|
||||
|
|
@ -2602,6 +2635,8 @@
|
|||
getPlainText: function(html, paragraphize)
|
||||
{
|
||||
html = this.clean.getTextFromHtml(html);
|
||||
html = html.replace(/\n\s*\n/g, "\n");
|
||||
html = html.replace(/\n\n/g, "\n");
|
||||
html = html.replace(/\n/g, '<br />');
|
||||
|
||||
if (this.opts.paragraphize && typeof paragraphize == 'undefined' && !this.utils.browser('mozilla'))
|
||||
|
|
@ -2831,7 +2866,7 @@
|
|||
|
||||
if (this.utils.browser('msie'))
|
||||
{
|
||||
html = html.replace(/<span(.*?)id="selection-marker-(1|2)"(.*?)><\/span>;/gi, '');
|
||||
html = html.replace(/<span(.*?)id="selection-marker-(1|2)"(.*?)><\/span>/gi, '');
|
||||
}
|
||||
|
||||
this.$editor.html(html);
|
||||
|
|
@ -2864,7 +2899,7 @@
|
|||
var html = this.$editor.html();
|
||||
|
||||
// is there a need to synchronize
|
||||
if (this.code.syncCode && this.code.syncCode == html)
|
||||
if (this.code.syncCode && this.code.syncCode == html || (this.start && html == '' ))
|
||||
{
|
||||
// do not sync
|
||||
return;
|
||||
|
|
@ -3213,6 +3248,7 @@
|
|||
this.$element.off('.redactor').removeData('redactor');
|
||||
this.$editor.off('.redactor');
|
||||
|
||||
$(document).off('mousedown.redactor-blur.' + this.uuid);
|
||||
$(document).off('mousedown.redactor.' + this.uuid);
|
||||
$(document).off('click.redactor-image-delete.' + this.uuid);
|
||||
$(document).off('click.redactor-image-resize-hide.' + this.uuid);
|
||||
|
|
@ -3425,7 +3461,6 @@
|
|||
// disable scroll whan dropdown scroll
|
||||
$dropdown.on('mouseover.redactor-dropdown', $.proxy(this.utils.disableBodyScroll, this)).on('mouseout.redactor-dropdown', $.proxy(this.utils.enableBodyScroll, this));
|
||||
|
||||
|
||||
e.stopPropagation();
|
||||
},
|
||||
closeHandler: function(e)
|
||||
|
|
@ -3459,8 +3494,11 @@
|
|||
|
||||
if (!$dropdown.hasClass('dropact') && !$dropdown.hasClass('redactor-dropdown-link-inactive'))
|
||||
{
|
||||
$dropdown.removeClass('dropact');
|
||||
$dropdown.off('mouseover mouseout');
|
||||
if ($dropdown.hasClass('redactor-dropdown'))
|
||||
{
|
||||
$dropdown.removeClass('dropact');
|
||||
$dropdown.off('mouseover mouseout');
|
||||
}
|
||||
|
||||
this.dropdown.hideAll();
|
||||
}
|
||||
|
|
@ -3603,13 +3641,7 @@
|
|||
},
|
||||
isFocused: function()
|
||||
{
|
||||
var focusNode = document.getSelection().focusNode;
|
||||
if (focusNode === null) return false;
|
||||
|
||||
if (this.opts.linebreaks && $(focusNode.parentNode).hasClass('redactor-linebreaks')) return true;
|
||||
else if (!this.utils.isRedactorParent(focusNode.parentNode)) return false;
|
||||
|
||||
return this.$editor.is(':focus');
|
||||
return this.$editor[0] === document.activeElement;
|
||||
}
|
||||
};
|
||||
},
|
||||
|
|
@ -4255,9 +4287,6 @@
|
|||
var current = this.selection.getCurrent();
|
||||
if (current && current.tagName === 'TR') return;
|
||||
|
||||
// blur
|
||||
this.blurClickedElement = true;
|
||||
|
||||
// Stop formatting pre and headers
|
||||
if (this.utils.isCurrentOrParent('PRE') || this.utils.isCurrentOrParentHeader()) return;
|
||||
|
||||
|
|
@ -4284,7 +4313,7 @@
|
|||
|
||||
this.buffer.set();
|
||||
|
||||
if (!this.utils.browser('msie'))
|
||||
if (!this.utils.browser('msie') && !this.opts.linebreaks)
|
||||
{
|
||||
this.$editor.focus();
|
||||
}
|
||||
|
|
@ -4363,7 +4392,7 @@
|
|||
var $parent = $span.parent();
|
||||
|
||||
// remove U tag if selected link + node
|
||||
if ($parent && $parent[0].tagName === 'U')
|
||||
if ($span[0].tagName === 'A' && $parent && $parent[0].tagName === 'U')
|
||||
{
|
||||
$span.parent().replaceWith($span);
|
||||
}
|
||||
|
|
@ -4424,6 +4453,15 @@
|
|||
});
|
||||
}
|
||||
|
||||
if (tag != 'u')
|
||||
{
|
||||
var _this = this;
|
||||
this.$editor.find('unline').each(function(i,s)
|
||||
{
|
||||
_this.utils.replaceToTag(s, 'u');
|
||||
});
|
||||
}
|
||||
|
||||
this.selection.restore();
|
||||
this.code.sync();
|
||||
|
||||
|
|
@ -4483,6 +4521,14 @@
|
|||
});
|
||||
}
|
||||
|
||||
if (tag != 'u')
|
||||
{
|
||||
this.$editor.find('u').each(function(i,s)
|
||||
{
|
||||
self.utils.replaceToTag(s, 'unline');
|
||||
});
|
||||
}
|
||||
|
||||
if (tag != 'span')
|
||||
{
|
||||
this.$editor.find(tag).each(function()
|
||||
|
|
@ -4722,7 +4768,10 @@
|
|||
|
||||
if (typeof clean == 'undefined') clean = true;
|
||||
|
||||
this.$editor.focus();
|
||||
if (!this.opts.linebreaks)
|
||||
{
|
||||
this.$editor.focus();
|
||||
}
|
||||
|
||||
html = this.clean.setVerified(html);
|
||||
|
||||
|
|
@ -4817,6 +4866,7 @@
|
|||
{
|
||||
node = node[0] || node;
|
||||
|
||||
var offset = this.caret.getOffset();
|
||||
var html = this.utils.getOuterHtml(node);
|
||||
html = this.clean.setVerified(html);
|
||||
|
||||
|
|
@ -4836,6 +4886,8 @@
|
|||
this.range.collapse(false);
|
||||
this.selection.addRange();
|
||||
|
||||
this.caret.setOffset(offset);
|
||||
|
||||
return node;
|
||||
},
|
||||
nodeToPoint: function(node, x, y)
|
||||
|
|
@ -5175,7 +5227,6 @@
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
// remove hr in FF
|
||||
if (this.utils.browser('mozilla'))
|
||||
{
|
||||
|
|
@ -5206,7 +5257,7 @@
|
|||
checkKeyEvents: function(key)
|
||||
{
|
||||
var k = this.keyCode;
|
||||
var keys = [k.BACKSPACE, k.DELETE, k.ENTER, k.SPACE, k.ESC, k.TAB, k.CTRL, k.META, k.ALT, k.SHIFT];
|
||||
var keys = [k.BACKSPACE, k.DELETE, k.ENTER, k.ESC, k.TAB, k.CTRL, k.META, k.ALT, k.SHIFT];
|
||||
|
||||
return ($.inArray(key, keys) == -1) ? true : false;
|
||||
|
||||
|
|
@ -5240,7 +5291,7 @@
|
|||
}
|
||||
else if (!this.keydown.ctrl)
|
||||
{
|
||||
if (key == this.keyCode.BACKSPACE || key == this.keyCode.DELETE || (key == this.keyCode.ENTER && !e.ctrlKey && !e.shiftKey) || key == this.keyCode.SPACE)
|
||||
if (key == this.keyCode.BACKSPACE || key == this.keyCode.DELETE || (key == this.keyCode.ENTER && !e.ctrlKey && !e.shiftKey))
|
||||
{
|
||||
this.buffer.set();
|
||||
}
|
||||
|
|
@ -5506,7 +5557,9 @@
|
|||
space.innerHTML = '​';
|
||||
|
||||
$(br1).after(space);
|
||||
this.caret.setAfter(space);
|
||||
|
||||
this.range.setStartAfter(space);
|
||||
this.range.setEndAfter(space);
|
||||
$(space).remove();
|
||||
}
|
||||
else
|
||||
|
|
@ -5517,7 +5570,6 @@
|
|||
var selection = window.getSelection();
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5557,6 +5609,7 @@
|
|||
return {
|
||||
init: function(e)
|
||||
{
|
||||
|
||||
if (this.rtePaste) return;
|
||||
|
||||
var key = e.which;
|
||||
|
|
@ -5574,7 +5627,7 @@
|
|||
}
|
||||
|
||||
// replace to p before / after the table or body
|
||||
if (!this.opts.linebreaks && this.keyup.current.nodeType == 3 && this.keyup.current.length <= 1 && (this.keyup.parent === false || this.keyup.parent.tagName == 'BODY'))
|
||||
if (!this.opts.linebreaks && this.keyup.current.nodeType === 3 && this.keyup.current.length <= 1 && (this.keyup.parent === false || this.keyup.parent.tagName == 'BODY'))
|
||||
{
|
||||
this.keyup.replaceToParagraph();
|
||||
}
|
||||
|
|
@ -5637,6 +5690,8 @@
|
|||
$(this.keyup.current).remove();
|
||||
}
|
||||
|
||||
this.keyup.removeEmptyLists();
|
||||
|
||||
// if empty
|
||||
return this.keyup.formatEmpty(e);
|
||||
}
|
||||
|
|
@ -5664,6 +5719,20 @@
|
|||
|
||||
this.caret.setEnd(node);
|
||||
},
|
||||
removeEmptyLists: function()
|
||||
{
|
||||
var removeIt = function()
|
||||
{
|
||||
var html = $.trim(this.innerHTML).replace(/\/t\/n/g, '');
|
||||
if (html === '')
|
||||
{
|
||||
$(this).remove();
|
||||
}
|
||||
};
|
||||
|
||||
this.$editor.find('li').each(removeIt);
|
||||
this.$editor.find('ul, ol').each(removeIt);
|
||||
},
|
||||
formatEmpty: function(e)
|
||||
{
|
||||
var html = $.trim(this.$editor.html());
|
||||
|
|
@ -5915,6 +5984,7 @@
|
|||
// mailto
|
||||
if (link.search('@') != -1 && /(http|ftp|https):\/\//i.test(link) === false)
|
||||
{
|
||||
link = link.replace('mailto:', '');
|
||||
link = 'mailto:' + link;
|
||||
}
|
||||
// url, not anchor
|
||||
|
|
@ -5993,7 +6063,13 @@
|
|||
var $a = $('<a />').attr('href', link).text(text);
|
||||
if (target !== '') $a.attr('target', target);
|
||||
|
||||
this.insert.node($a);
|
||||
$a = $(this.insert.node($a));
|
||||
|
||||
if (this.opts.linebreaks)
|
||||
{
|
||||
$a.after(' ');
|
||||
}
|
||||
|
||||
this.selection.selectElement($a);
|
||||
}
|
||||
else
|
||||
|
|
@ -6037,6 +6113,10 @@
|
|||
{
|
||||
$a.text(text);
|
||||
}
|
||||
else if (this.opts.linebreaks)
|
||||
{
|
||||
$a.text(text);
|
||||
}
|
||||
|
||||
this.selection.selectElement($a);
|
||||
}
|
||||
|
|
@ -6170,7 +6250,11 @@
|
|||
});
|
||||
|
||||
// callback
|
||||
this.core.setCallback('linkify', objects);
|
||||
setTimeout($.proxy(function()
|
||||
{
|
||||
this.observe.load();
|
||||
this.core.setCallback('linkify', objects);
|
||||
}, this), 100);
|
||||
|
||||
// sync
|
||||
this.code.sync();
|
||||
|
|
@ -6239,7 +6323,10 @@
|
|||
text = text.substring(0, this.opts.linkSize) + '...';
|
||||
}
|
||||
|
||||
text = decodeURIComponent(text);
|
||||
if (text.search('%') === -1)
|
||||
{
|
||||
text = decodeURIComponent(text);
|
||||
}
|
||||
|
||||
var regexB = "\\b";
|
||||
|
||||
|
|
@ -6265,7 +6352,11 @@
|
|||
toggle: function(cmd)
|
||||
{
|
||||
this.placeholder.remove();
|
||||
if (!this.utils.browser('msie')) this.$editor.focus();
|
||||
|
||||
if (!this.utils.browser('msie') && !this.opts.linebreaks)
|
||||
{
|
||||
this.$editor.focus();
|
||||
}
|
||||
|
||||
this.buffer.set();
|
||||
this.selection.save();
|
||||
|
|
@ -6335,6 +6426,7 @@
|
|||
$td.after(newTd).remove('');
|
||||
}
|
||||
|
||||
|
||||
if (this.utils.isEmpty($list.find('li').text()))
|
||||
{
|
||||
var $children = $list.children('li');
|
||||
|
|
@ -7198,7 +7290,9 @@
|
|||
$(window).off('scroll.redactor-freeze');
|
||||
|
||||
if (this.linkify.isEnabled())
|
||||
{
|
||||
this.linkify.format();
|
||||
}
|
||||
|
||||
}, this), 1);
|
||||
},
|
||||
|
|
@ -7213,18 +7307,18 @@
|
|||
else
|
||||
{
|
||||
// bootstrap modal
|
||||
if ($('.modal-body').length > 0)
|
||||
var $visibleModals = $('.modal-body:visible');
|
||||
if ($visibleModals.length > 0)
|
||||
{
|
||||
$('.modal-body').append(this.$pasteBox);
|
||||
$visibleModals.append(this.$pasteBox);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('body').append(this.$pasteBox);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.$pasteBox.focus();
|
||||
this.$pasteBox.get(0).focus();
|
||||
},
|
||||
insert: function(html)
|
||||
{
|
||||
|
|
@ -7261,6 +7355,7 @@
|
|||
});
|
||||
|
||||
}, this), 10);
|
||||
|
||||
}
|
||||
};
|
||||
},
|
||||
|
|
@ -7457,11 +7552,11 @@
|
|||
|
||||
var blocks = [];
|
||||
nodes = (typeof nodes == 'undefined') ? this.selection.getNodes() : nodes;
|
||||
|
||||
$.each(nodes, $.proxy(function(i,node)
|
||||
{
|
||||
if (this.utils.isBlock(node))
|
||||
{
|
||||
this.selection.lastBlock = node;
|
||||
blocks.push(node);
|
||||
}
|
||||
|
||||
|
|
@ -7626,7 +7721,6 @@
|
|||
{
|
||||
this.selection.get();
|
||||
|
||||
|
||||
var node1 = this.selection.getMarker(1);
|
||||
|
||||
this.selection.setMarker(this.range, node1, true);
|
||||
|
|
@ -8064,6 +8158,12 @@
|
|||
return {
|
||||
setupAllowed: function()
|
||||
{
|
||||
var index = $.inArray('span', this.opts.removeEmpty);
|
||||
if (index !== -1)
|
||||
{
|
||||
this.opts.removeEmpty.splice(index, 1);
|
||||
}
|
||||
|
||||
if (this.opts.allowedTags) this.opts.deniedTags = false;
|
||||
if (this.opts.allowedAttr) this.opts.removeAttr = false;
|
||||
|
||||
|
|
@ -8950,9 +9050,7 @@
|
|||
s3executeOnSignedUrl: function(file, callback)
|
||||
{
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
var mark = '?';
|
||||
if (this.opts.s3.search(/\?/) != '-1') mark = '&';
|
||||
var mark = (this.opts.s3.search(/\?/) !== '-1') ? '?' : '&';
|
||||
|
||||
xhr.open('GET', this.opts.s3 + mark + 'name=' + file.name + '&type=' + file.type, true);
|
||||
|
||||
|
|
@ -9042,21 +9140,9 @@
|
|||
}
|
||||
}, this);
|
||||
|
||||
xhr.onerror = function()
|
||||
{
|
||||
//setProgress(0, 'XHR error.');
|
||||
};
|
||||
xhr.onerror = function() {};
|
||||
|
||||
xhr.upload.onprogress = function(e)
|
||||
{
|
||||
/*
|
||||
if (e.lengthComputable)
|
||||
{
|
||||
var percentLoaded = Math.round((e.loaded / e.total) * 100);
|
||||
setProgress(percentLoaded, percentLoaded == 100 ? 'Finalizing.' : 'Uploading.');
|
||||
}
|
||||
*/
|
||||
};
|
||||
xhr.upload.onprogress = function(e) {};
|
||||
|
||||
xhr.setRequestHeader('Content-Type', file.type);
|
||||
xhr.setRequestHeader('x-amz-acl', 'public-read');
|
||||
|
|
@ -9261,6 +9347,12 @@
|
|||
|
||||
return (offset == text.length) ? true : false;
|
||||
},
|
||||
isStartOfEditor: function()
|
||||
{
|
||||
var offset = this.caret.getOffsetOfElement(this.$editor[0]);
|
||||
|
||||
return (offset === 0) ? true : false;
|
||||
},
|
||||
isEndOfEditor: function()
|
||||
{
|
||||
var block = this.$editor[0];
|
||||
|
|
|
|||
|
|
@ -898,9 +898,14 @@ body .redactor-box-fullscreen {
|
|||
}
|
||||
blockquote {
|
||||
margin-left: 1.6em !important;
|
||||
padding-left: 0;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
color: #777;
|
||||
font-style: italic;
|
||||
&:before,
|
||||
&:after {
|
||||
content: '';
|
||||
}
|
||||
}
|
||||
ul,
|
||||
ol {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,322 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'auth' => [
|
||||
'title' => 'Administrace'
|
||||
],
|
||||
'field' => [
|
||||
'invalid_type' => 'Byl použitý špatný typ :type.',
|
||||
'options_method_not_exists' => "Modelová třída :model musí implementovat metodu :method(), která vrací volby pro formulářové pole ':field'"
|
||||
],
|
||||
'widget' => [
|
||||
'not_registered' => "Třída widgetu se jménem ':name' není zaregistrovaná.",
|
||||
'not_bound' => "Widget s názvem třídy ':name' není navázaná na kontroler."
|
||||
],
|
||||
'page' => [
|
||||
'untitled' => 'Bez názvu',
|
||||
'access_denied' => [
|
||||
'label' => 'Přístup odmítnut',
|
||||
'help' => 'Nemáte potřebná oprávnění k prohlížení této stránky.',
|
||||
'cms_link' => 'Zpět do administrace'
|
||||
],
|
||||
'invalid_token' => [
|
||||
'label' => 'Neplatný bezpečností token'
|
||||
]
|
||||
],
|
||||
'partial' => [
|
||||
'not_found_name' => "Dílčí šablona ':name' nebyla nalezena."
|
||||
],
|
||||
'account' => [
|
||||
'sign_out' => 'Odhlásit',
|
||||
'login' => 'Přihlásit se',
|
||||
'reset' => 'Resetovat',
|
||||
'restore' => 'Obnovit',
|
||||
'login_placeholder' => 'login',
|
||||
'password_placeholder' => 'heslo',
|
||||
'forgot_password' => 'Zapomněli jste heslo?',
|
||||
'enter_email' => 'Zadejte váš e-mail',
|
||||
'enter_login' => 'Zadejte váš login',
|
||||
'email_placeholder' => 'e-mail',
|
||||
'enter_new_password' => 'Zadejte nové heslo',
|
||||
'password_reset' => 'Obnova hesla',
|
||||
'restore_success' => 'E-mail byl zaslán na vaší e-mailovou adresu s heslem a instrukcemi k obnově.',
|
||||
'restore_error' => "Uživatel s přihlašovacím jménem ':login' nebyl nalezen",
|
||||
'reset_success' => 'Vaše heslo bylo úspěšně obnoveno. Nyní se můžete přihlásit.',
|
||||
'reset_error' => 'Data pro obnovu hesla nejsou správná. Prosím zkuste to znovu!',
|
||||
'reset_fail' => 'Obnova hesla selhala!',
|
||||
'apply' => 'Použít',
|
||||
'cancel' => 'Zrušit',
|
||||
'delete' => 'Smazat',
|
||||
'ok' => 'OK'
|
||||
],
|
||||
'dashboard' => [
|
||||
'menu_label' => 'Plocha',
|
||||
'widget_label' => 'Widget',
|
||||
'widget_width' => 'Šířka',
|
||||
'full_width' => 'plná šířka',
|
||||
'add_widget' => 'Přidat widget',
|
||||
'widget_inspector_title' => 'Nastavení widgetu',
|
||||
'widget_inspector_description' => 'Zde si upravte všechna nastavení widgetu',
|
||||
'widget_columns_label' => 'Šířka :columns',
|
||||
'widget_columns_description' => 'Šířka widgetu, zadejte číslo mezi 1 a 10.',
|
||||
'widget_columns_error' => 'Zadejte prosím šířku widgetu jako číslo mezi 1 a 10.',
|
||||
'columns' => '{1} sloupec|[2,Inf] sloupce',
|
||||
'widget_new_row_label' => 'Vždy na novém řádku',
|
||||
'widget_new_row_description' => 'Vloží widget do nového řádku.',
|
||||
'widget_title_label' => 'Název widgetu',
|
||||
'widget_title_error' => 'Musíte zadat název widgetu',
|
||||
'status' => [
|
||||
'widget_title_default' => 'Status systému',
|
||||
'online' => 'online',
|
||||
'maintenance' => 'v údržbě',
|
||||
'update_available' => '{0} dostupných aktualizací!|{1} dostupná aktualizace!|[2,Inf] dostupných aktualizací!'
|
||||
]
|
||||
],
|
||||
'user' => [
|
||||
'name' => 'Administrátor',
|
||||
'menu_label' => 'Administrátoři',
|
||||
'menu_description' => 'Správa uživatelů administrace, jejich skupin a opravnění.',
|
||||
'list_title' => 'Správa administrátorů',
|
||||
'new' => 'Nový administrátor',
|
||||
'login' => 'Přihlašovací jméno',
|
||||
'first_name' => 'Křestní jméno',
|
||||
'last_name' => 'Příjmení',
|
||||
'full_name' => 'Celé jméno',
|
||||
'email' => 'E-mail',
|
||||
'groups' => 'Skupiny',
|
||||
'groups_comment' => 'Vyberte do jakých skupin uživatel patří.',
|
||||
'avatar' => 'Avatar',
|
||||
'password' => 'Heslo',
|
||||
'password_confirmation' => 'Potvrzení hesla',
|
||||
'permissions' => 'Oprávnění',
|
||||
'account' => 'Účet',
|
||||
'superuser' => 'Super uživatel',
|
||||
'superuser_comment' => 'Má neomezený přístup do všech stránek administrace.',
|
||||
'send_invite' => 'Zaslat pozvánku e-mailem',
|
||||
'send_invite_comment' => 'Odešle uvítací e-mail s údaji pro přihlášení.',
|
||||
'delete_confirm' => 'Opravdu chcete smazat tohoto administrátora?',
|
||||
'return' => 'Návrat na seznam administrátorů',
|
||||
'allow' => 'Povolit',
|
||||
'inherit' => 'Podědit',
|
||||
'deny' => 'Odmítnout',
|
||||
'group' => [
|
||||
'name' => 'Skupina',
|
||||
'name_field' => 'Jméno',
|
||||
'description_field' => 'Popis',
|
||||
'is_new_user_default_field' => 'Zařadit nové administrátory automaticky do této skupiny.',
|
||||
'code_field' => 'Kód',
|
||||
'code_comment' => 'Zadejte unikátní kód pro přístup přes API.',
|
||||
'menu_label' => 'Skupiny',
|
||||
'list_title' => 'Správa skupin',
|
||||
'new' => 'Nová skupina',
|
||||
'delete_confirm' => 'Opravdu chcete smazat tuto skupinu administrátorů?',
|
||||
'return' => 'Návrat na seznam skupin',
|
||||
'users_count' => 'Uživatelů'
|
||||
],
|
||||
'preferences' => [
|
||||
'not_authenticated' => 'Nebyl nalezen žádný přihlášený uživatel pro načtení, nebo uložení nastavení.'
|
||||
]
|
||||
],
|
||||
'list' => [
|
||||
'default_title' => 'Seznam',
|
||||
'search_prompt' => 'Hledat...',
|
||||
'no_records' => 'Žádné záznamy v tomto pohledu.',
|
||||
'missing_model' => 'List behavior used in :class does not have a model defined.',
|
||||
'missing_column' => 'There are no column definitions for :columns.',
|
||||
'missing_columns' => 'List used in :class has no list columns defined.',
|
||||
'missing_definition' => "List behavior does not contain a column for ':field'.",
|
||||
'behavior_not_ready' => 'List behavior has not been initialized, check that you have called makeLists() in your controller.',
|
||||
'invalid_column_datetime' => "Column value ':column' is not a DateTime object, are you missing a \$dates reference in the Model?",
|
||||
'pagination' => 'Zobrazuji záznamy: :from-:to z :total',
|
||||
'prev_page' => 'Předchozí stránka',
|
||||
'next_page' => 'Další stránka',
|
||||
'loading' => 'Načítám...',
|
||||
'setup_title' => 'Nastavení výpisu',
|
||||
'setup_help' => 'Pomocí checkboxů si vyberte, které sloupce chcete ve výpisu vidět. Pozici změníte chytnutím a posunem nahorů, nebo dolů.',
|
||||
'records_per_page' => 'Záznamů na stránku',
|
||||
'records_per_page_help' => 'Vyberte kolik chcete vidět záznamů na jedné stránce. Vysoký počet záznamů může negativně ovlivnit rychlost stránek.',
|
||||
'delete_selected' => 'Smazat vybrané',
|
||||
'delete_selected_empty' => 'Nebyl vybrán žádný záznam ke smazání.',
|
||||
'delete_selected_confirm' => 'Smazat vybrané záznamy?',
|
||||
'delete_selected_success' => 'Vybrané záznamy byly úspěšně smazány.'
|
||||
],
|
||||
'fileupload' => [
|
||||
'attachment' => 'Příloha',
|
||||
'help' => 'Přidat název a popisek k příloze.',
|
||||
'title_label' => 'Název',
|
||||
'description_label' => 'Popis',
|
||||
'default_prompt' => 'Click the %s or drag a file here to upload',
|
||||
'attachment_url' => 'URL přílohy',
|
||||
'upload_file' => 'Nahrát soubor',
|
||||
'upload_error' => 'Chyba nahrávání',
|
||||
'remove_confirm' => 'Jste si jistí?',
|
||||
'remove_file' => 'Odstranit soubor'
|
||||
],
|
||||
'form' => [
|
||||
'create_title' => 'Nový :name',
|
||||
'update_title' => 'Upravit :name',
|
||||
'preview_title' => 'Náhled :name',
|
||||
'create_success' => ':name byl úspěšně vytvořen',
|
||||
'update_success' => ':name byl úspěšně upraven',
|
||||
'delete_success' => ':name byl úspěšně smazán',
|
||||
'missing_id' => 'Musíte uvést ID záznamu.',
|
||||
'missing_model' => 'Form behavior used in :class does not have a model defined.',
|
||||
'missing_definition' => "Form behavior does not contain a field for ':field'.",
|
||||
'not_found' => 'Form record with an ID of :id could not be found.',
|
||||
'action_confirm' => 'Jste si jistí?',
|
||||
'create' => 'Vytvořit',
|
||||
'create_and_close' => 'Vytvořit a zavřít',
|
||||
'creating' => 'Vytváření...',
|
||||
'creating_name' => 'Vytváření :name...',
|
||||
'save' => 'Uložit',
|
||||
'save_and_close' => 'Uložit a zavřít',
|
||||
'saving' => 'Ukládání...',
|
||||
'saving_name' => 'Ukládání :name...',
|
||||
'delete' => 'Smazat',
|
||||
'deleting' => 'Mazání...',
|
||||
'deleting_name' => 'Mazání :name...',
|
||||
'reset_default' => 'Obnovit výchozí',
|
||||
'resetting' => 'Obnovování',
|
||||
'resetting_name' => 'Obnovování :name',
|
||||
'undefined_tab' => 'Ostatní',
|
||||
'field_off' => 'Off',
|
||||
'field_on' => 'On',
|
||||
'add' => 'Přidat',
|
||||
'apply' => 'Použít',
|
||||
'cancel' => 'Zrušit',
|
||||
'close' => 'Zavřít',
|
||||
'confirm' => 'Potvrdit',
|
||||
'reload' => 'Znovu načíst',
|
||||
'complete' => 'Kompletní',
|
||||
'ok' => 'OK',
|
||||
'or' => 'nebo',
|
||||
'confirm_tab_close' => 'Opravdu chcete zavřít záložku? Neuložené změny budou ztraceny.',
|
||||
'behavior_not_ready' => 'Chování formuláře není inicializováno, zkontrolujte jestli voláte metodu initForm() ve vašem kontroléru.',
|
||||
'preview_no_files_message' => 'Žádný soubor nebyl nahrán.',
|
||||
'preview_no_record_message' => 'Žádný záznam není vybraný.',
|
||||
'select' => 'Vybrat',
|
||||
'select_all' => 'vše',
|
||||
'select_none' => 'nic',
|
||||
'select_placeholder' => 'prosím vyberte',
|
||||
'insert_row' => 'Vložit řádek',
|
||||
'delete_row' => 'Smazat řádek',
|
||||
'concurrency_file_changed_title' => 'Soubor byl změněn',
|
||||
'concurrency_file_changed_description' => 'Soubor který upravujete byl na disku změněn jiným uživatelem. Můžete buď obnovit soubor a ztratit svoje změny, nebo přepsat soubor na disku.'
|
||||
],
|
||||
'relation' => [
|
||||
'missing_config' => "Relation behavior does not have any configuration for ':config'.",
|
||||
'missing_definition' => "Relation behavior does not contain a definition for ':field'.",
|
||||
'missing_model' => 'Relation behavior used in :class does not have a model defined.',
|
||||
'invalid_action_single' => 'This action cannot be performed on a singular relationship.',
|
||||
'invalid_action_multi' => 'This action cannot be performed on a multiple relationship.',
|
||||
'help' => 'Pro přidání klikněte na položku',
|
||||
'related_data' => 'Related :name data',
|
||||
'add' => 'Přidat',
|
||||
'add_selected' => 'Přidat vybrané',
|
||||
'add_a_new' => 'Přidat nový :name',
|
||||
'link_selected' => 'Link selected',
|
||||
'link_a_new' => 'Link a new :name',
|
||||
'cancel' => 'Zrušit',
|
||||
'close' => 'Zavřít',
|
||||
'add_name' => 'Přidat :name',
|
||||
'create' => 'Vytvořit',
|
||||
'create_name' => 'Vytvořit :name',
|
||||
'update' => 'Upravit',
|
||||
'update_name' => 'Upravit :name',
|
||||
'preview' => 'Náhled',
|
||||
'preview_name' => 'Náhled :name',
|
||||
'remove' => 'Odstranit',
|
||||
'remove_name' => 'Odstranit :name',
|
||||
'delete' => 'Smazat',
|
||||
'delete_name' => 'Smazat :name',
|
||||
'delete_confirm' => 'Jste si jistí?',
|
||||
'link' => 'Link',
|
||||
'link_name' => 'Link :name',
|
||||
'unlink' => 'Unlink',
|
||||
'unlink_name' => 'Unlink :name',
|
||||
'unlink_confirm' => 'Jste si jistí?'
|
||||
],
|
||||
'reorder' => [
|
||||
'default_title' => 'Seřadit záznamy',
|
||||
'no_records' => 'Nenašli jsme žádné záznamy k seřazení.',
|
||||
],
|
||||
'model' => [
|
||||
'name' => 'Model',
|
||||
'not_found' => "Model ':class' s ID :id nebyl nalezen",
|
||||
'missing_id' => 'Není specifikované ID pro hledání záznamu v modelu.',
|
||||
'missing_relation' => "Model ':class' neobsahuje definici pro ':relation'.",
|
||||
'missing_method' => "Model ':class' nemá implementovanou metodu ':method'.",
|
||||
'invalid_class' => "Model :model použitý ve třídě :class není validní, musí dědit ze třídy Model.",
|
||||
'mass_assignment_failed' => "Mass assignment failed for Model attribute ':attribute'."
|
||||
],
|
||||
'warnings' => [
|
||||
'tips' => 'Tipy pro konfiguraci systému',
|
||||
'tips_description' => 'Některé problémy s nastavením systému si vyžadují vaší pozornost.',
|
||||
'permissions' => 'Složka :name nebo její podsložky nejsou pro PHP zapisovatelné. Nastavte prosím odpovídající oprávnění webového serveru pro tuto složku.',
|
||||
'extension' => 'PHP rozšíření :name není nainstalované. Nainstalujte prosím knihovnu a aktivujte rozšíření.'
|
||||
],
|
||||
'editor' => [
|
||||
'menu_label' => 'Nastavení editoru kódu',
|
||||
'menu_description' => 'Nastavení editoru kódu, velikosti písma a barevného schématu.',
|
||||
'font_size' => 'Velikost písma',
|
||||
'tab_size' => 'Počet znaků odsazení',
|
||||
'use_hard_tabs' => 'Odsazení tabulátory',
|
||||
'code_folding' => 'Skládání kódu',
|
||||
'word_wrap' => 'Zalamování řádek',
|
||||
'highlight_active_line' => 'Zvýraznění aktivního řádku',
|
||||
'auto_closing' => 'Automatické doplňování tagů a speciálních znaků',
|
||||
'show_invisibles' => 'Zobrazit neviditelné znaky',
|
||||
'show_gutter' => 'Zobrazit číslování řádků',
|
||||
'theme' => 'Barevné schéma'
|
||||
],
|
||||
'tooltips' => [
|
||||
'preview_website' => 'Náhled stránek'
|
||||
],
|
||||
'mysettings' => [
|
||||
'menu_label' => 'Moje nastavení',
|
||||
'menu_description' => 'Nastavení vašeho administrátorského účtu'
|
||||
],
|
||||
'myaccount' => [
|
||||
'menu_label' => 'Můj účet',
|
||||
'menu_description' => 'Nastavte si svoje jméno, e-mailovou adresu a heslo.',
|
||||
'menu_keywords' => 'bezpečnost login'
|
||||
],
|
||||
'branding' => [
|
||||
'menu_label' => 'Nastavení administrace',
|
||||
'menu_description' => 'Nastavte si název, logo a barvy použité v administraci.',
|
||||
'brand' => 'Značka',
|
||||
'logo' => 'Logo',
|
||||
'logo_description' => 'Nahrajte vlastní logo, které bude použité v administraci.',
|
||||
'app_name' => 'Jméno aplikace',
|
||||
'app_name_description' => 'Toto jméno se zobrazí v titulní liště stránek.',
|
||||
'app_tagline' => 'Motto aplikace',
|
||||
'app_tagline_description' => 'Toto motto se zobrazí na přihlašovací stránce administrace.',
|
||||
'colors' => 'Barvy',
|
||||
'primary_light' => 'Primární (světlá)',
|
||||
'primary_dark' => 'Primární (tmavá)',
|
||||
'secondary_light' => 'Sekundární (světlá)',
|
||||
'secondary_dark' => 'Sekundární (tmavá)',
|
||||
'styles' => 'Styly',
|
||||
'custom_stylesheet' => 'Vlastní kaskádové styly'
|
||||
],
|
||||
'backend_preferences' => [
|
||||
'menu_label' => 'Nastavení administrace',
|
||||
'menu_description' => 'Nastavte si svůj účet, jako třeba jazyk.',
|
||||
'locale' => 'Jazyk',
|
||||
'locale_comment' => 'Vyberte si jazyk administrace, který chcete používat.'
|
||||
],
|
||||
'access_log' => [
|
||||
'hint' => 'Tento záznam zobrazuje seznam úspěšných přihlášení do administrace. Záznamy jsou uchovávány :days dní.',
|
||||
'menu_label' => 'Log přístupů',
|
||||
'menu_description' => 'Zobrazit seznam úspěšných přihlášení do administrace.',
|
||||
'created_at' => 'Datum & čas',
|
||||
'login' => 'Login',
|
||||
'ip_address' => 'IP adresa',
|
||||
'first_name' => 'Jméno',
|
||||
'last_name' => 'Příjmení',
|
||||
'email' => 'E-mail'
|
||||
],
|
||||
'filter' => [
|
||||
'all' => 'vše'
|
||||
]
|
||||
];
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
/* Greek Language Updated on 2015-08-07 v1.04 */
|
||||
/* Greek Language Updated on 2015-08-29 v1.05 */
|
||||
return [
|
||||
'auth' => [
|
||||
'title' => 'Περιοχή Διαχείρισης',
|
||||
|
|
@ -236,6 +236,10 @@ return [
|
|||
'unlink_name' => 'Αποσύνδεση :name',
|
||||
'unlink_confirm' => 'Είστε σίγουροι;',
|
||||
],
|
||||
'reorder' => [
|
||||
'default_title' => 'Αναδιάταξη εγγραφών',
|
||||
'no_records' => 'Δεν υπάρχουν διαθέσιμες εγγραφές για ταξινόμηση.',
|
||||
],
|
||||
'model' => [
|
||||
'name' => 'Μοντέλο',
|
||||
'not_found' => "Η κλάση ':class' του μοντέλου με ID :id δεν μπόρεσε να βρεθεί",
|
||||
|
|
@ -260,6 +264,7 @@ return [
|
|||
'code_folding' => 'Αναδίπλωση κώδικα',
|
||||
'word_wrap' => 'Αναδίπλωση κειμένου',
|
||||
'highlight_active_line' => 'Επισήμανση ενεργής σειράς',
|
||||
'auto_closing' => 'Αυτόματο κλείσιμο ετικετών και ειδικών χαρακτήρων',
|
||||
'show_invisibles' => 'Εμφάνιση αόρατων χαρακτήρων',
|
||||
'show_gutter' => 'Εμφάνιση περιθωρίου',
|
||||
'theme' => 'Χρωματική απεικόνιση',
|
||||
|
|
|
|||
|
|
@ -5,267 +5,284 @@ return [
|
|||
'title' => 'بخش مدیریت',
|
||||
],
|
||||
'field' => [
|
||||
'invalid_type' => 'نوع فیلد :type نا معتبر می باشد.',
|
||||
'invalid_type' => 'نوع فیلد :type نا معتبر می باشد.',
|
||||
'options_method_not_exists' => 'کلاس مدل :model باید شامل متد :method() باشد و گزینه های مورد نیاز ":field" را بازگرداند.',
|
||||
],
|
||||
'widget' => [
|
||||
'not_registered' => "کلاس مربوط به ابزارک ':name' به سیستم معرفی نشده است",
|
||||
'not_bound' => "ابزارکی تعریف شده در کلاس با نام ':name' به هیچ کنترلری ارتباط داده نشده است",
|
||||
'not_bound' => "ابزارکی تعریف شده در کلاس با نام ':name' به هیچ کنترلری ارتباط داده نشده است",
|
||||
],
|
||||
'page' => [
|
||||
'untitled' => "بدون عنوان",
|
||||
'untitled' => "بدون عنوان",
|
||||
'access_denied' => [
|
||||
'label' => "شما مجوز دسترسی ندارید",
|
||||
'help' => "شما مجوز لازم براس دسترسی به این صفحه را ندارید.",
|
||||
'label' => "شما مجوز دسترسی ندارید",
|
||||
'help' => "شما مجوز لازم براس دسترسی به این صفحه را ندارید.",
|
||||
'cms_link' => "بازگشت به مدیریت",
|
||||
],
|
||||
'invalid_token' => [
|
||||
'label' => 'کلید امنیتی معتبر نمی باشد'
|
||||
]
|
||||
],
|
||||
'partial' => [
|
||||
'not_found_name' => "بخشی با نام ':name' یافت نشد.",
|
||||
],
|
||||
'account' => [
|
||||
'sign_out' => 'خروج',
|
||||
'login' => 'ورود',
|
||||
'reset' => 'تنظیم مجدد',
|
||||
'restore' => 'بازگرداندن',
|
||||
'login_placeholder' => 'ورود',
|
||||
'sign_out' => 'خروج',
|
||||
'login' => 'ورود',
|
||||
'reset' => 'تنظیم مجدد',
|
||||
'restore' => 'بازگرداندن',
|
||||
'login_placeholder' => 'ورود',
|
||||
'password_placeholder' => 'کلمه عبور',
|
||||
'forgot_password' => "کلمه عبور خود را فراموش کرده اید؟",
|
||||
'enter_email' => "پست الکترونیکی خود را وارد نمایید",
|
||||
'enter_login' => "نام کاربری خود را وارد نمایید",
|
||||
'email_placeholder' => "پست الکترونیکی",
|
||||
'enter_new_password' => "کلمه عبور جدید را وارد نمایید",
|
||||
'password_reset' => "بازگرداندن کلمه عبور",
|
||||
'restore_success' => "یک نامه به پست الکترونیکی شما جهت شروع عملیات بارگرداندن کلمه عبور ارسال شد.",
|
||||
'restore_error' => "کاربری با نام کاریری ':login' یافت نشد.",
|
||||
'reset_success' => "کلمه عبور شما بارگردانی شد و شما هم اکنون میتوانید وارد سیستم شوید.",
|
||||
'reset_error' => "اطلاعات رمز عبور نا معتبر است , لطفا مجددا تلاش نمایید!",
|
||||
'reset_fail' => "عدم توانایی در بازگرداندن کلمه عبور شما!",
|
||||
'apply' => 'اعمال کردن',
|
||||
'cancel' => 'انصراف',
|
||||
'delete' => 'حذف',
|
||||
'ok' => 'تایید',
|
||||
'forgot_password' => "کلمه عبور خود را فراموش کرده اید؟",
|
||||
'enter_email' => "پست الکترونیکی خود را وارد نمایید",
|
||||
'enter_login' => "نام کاربری خود را وارد نمایید",
|
||||
'email_placeholder' => "پست الکترونیکی",
|
||||
'enter_new_password' => "کلمه عبور جدید را وارد نمایید",
|
||||
'password_reset' => "بازگرداندن کلمه عبور",
|
||||
'restore_success' => "یک نامه به پست الکترونیکی شما جهت شروع عملیات بارگرداندن کلمه عبور ارسال شد.",
|
||||
'restore_error' => "کاربری با نام کاریری ':login' یافت نشد.",
|
||||
'reset_success' => "کلمه عبور شما بارگردانی شد و شما هم اکنون میتوانید وارد سیستم شوید.",
|
||||
'reset_error' => "اطلاعات رمز عبور نا معتبر است , لطفا مجددا تلاش نمایید!",
|
||||
'reset_fail' => "عدم توانایی در بازگرداندن کلمه عبور شما!",
|
||||
'apply' => 'اعمال کردن',
|
||||
'cancel' => 'انصراف',
|
||||
'delete' => 'حذف',
|
||||
'ok' => 'تایید',
|
||||
],
|
||||
'dashboard' => [
|
||||
'menu_label' => 'میز کار',
|
||||
'widget_label' => 'ابزارک',
|
||||
'widget_width' => 'عرض',
|
||||
'full_width' => 'عرض کامل',
|
||||
'add_widget' => 'افزودن ابزارک',
|
||||
'widget_inspector_title' => 'تنظیمات ابزارک',
|
||||
'menu_label' => 'میز کار',
|
||||
'widget_label' => 'ابزارک',
|
||||
'widget_width' => 'عرض',
|
||||
'full_width' => 'عرض کامل',
|
||||
'add_widget' => 'افزودن ابزارک',
|
||||
'widget_inspector_title' => 'تنظیمات ابزارک',
|
||||
'widget_inspector_description' => 'پیکر بندی ابزارک گزارشگیری',
|
||||
'widget_columns_label' => 'عرض :columns',
|
||||
'widget_columns_description' => 'عرض ابزارک باید عددی مابین 1 تا 10 باشد.',
|
||||
'widget_columns_error' => 'لطفا عرض ابزارک را عددی مابین 1 تا 10 وارد نمایید.',
|
||||
'columns' => '{1} ستون|[2,Inf] ستون ها',
|
||||
'widget_new_row_label' => 'تحمیل سطر جدید',
|
||||
'widget_new_row_description' => 'افزودن ابزارک در سطر جدید.',
|
||||
'widget_title_label' => 'عنوان ابزارک',
|
||||
'widget_title_error' => 'گزینه "عنوان ابزارک" حتما باید وارد شود.',
|
||||
'status' => [
|
||||
'widget_columns_label' => 'عرض :columns',
|
||||
'widget_columns_description' => 'عرض ابزارک باید عددی مابین 1 تا 10 باشد.',
|
||||
'widget_columns_error' => 'لطفا عرض ابزارک را عددی مابین 1 تا 10 وارد نمایید.',
|
||||
'columns' => '{1} ستون|[2,Inf] ستون ها',
|
||||
'widget_new_row_label' => 'تحمیل سطر جدید',
|
||||
'widget_new_row_description' => 'افزودن ابزارک در سطر جدید.',
|
||||
'widget_title_label' => 'عنوان ابزارک',
|
||||
'widget_title_error' => 'گزینه "عنوان ابزارک" حتما باید وارد شود.',
|
||||
'status' => [
|
||||
'widget_title_default' => 'وضعیت سیستم',
|
||||
'online' => 'online',
|
||||
'online' => 'online',
|
||||
'maintenance' => 'در حال به روز رسانی',
|
||||
'update_available' => '{0} به روز رسانی موجود است!|{1} به روز رسانی موجود است!|[2,Inf] به روز رسانی موجود است!',
|
||||
'update_available' => '{0} به روز رسانی موجود است!|{1} به روز رسانی موجود است!|[2,Inf] به روز رسانی موجود است!',
|
||||
]
|
||||
],
|
||||
'user' => [
|
||||
'name' => 'مدیریت',
|
||||
'menu_label' => 'مدیران',
|
||||
'menu_description' => 'مدیریت کاربران , گروه ها و دسترسی های مدیران.',
|
||||
'list_title' => 'مدیریت مدیران',
|
||||
'new' => 'مدیر جدید',
|
||||
'login' => "ورود",
|
||||
'first_name' => "نام",
|
||||
'last_name' => "نام خانوادگی",
|
||||
'full_name' => "نام کامل",
|
||||
'email' => "پست الکترونیکی",
|
||||
'groups' => "گروه ها",
|
||||
'groups_comment' => "مختص گروهی که این شخص به آن تعلق دارد.",
|
||||
'avatar' => "نمایه",
|
||||
'password' => "کلمه عبور",
|
||||
'name' => 'مدیریت',
|
||||
'menu_label' => 'مدیران',
|
||||
'menu_description' => 'مدیریت کاربران , گروه ها و دسترسی های مدیران.',
|
||||
'list_title' => 'مدیریت مدیران',
|
||||
'new' => 'مدیر جدید',
|
||||
'login' => "ورود",
|
||||
'first_name' => "نام",
|
||||
'last_name' => "نام خانوادگی",
|
||||
'full_name' => "نام کامل",
|
||||
'email' => "پست الکترونیکی",
|
||||
'groups' => "گروه ها",
|
||||
'groups_comment' => "مختص گروهی که این شخص به آن تعلق دارد.",
|
||||
'avatar' => "نمایه",
|
||||
'password' => "کلمه عبور",
|
||||
'password_confirmation' => "تکرار کلمه عبور",
|
||||
'permissions' => 'مجوز های دسترسی',
|
||||
'account' => 'حساب کاربری',
|
||||
'superuser' => "کاربر ممتاز",
|
||||
'superuser_comment' => "اگر میخواهید این شخص به تمام قسمت ها دسترسی داشته باشد این گزینه را فعال نمایید.",
|
||||
'send_invite' => 'دعوت نامه توسط پست الکترونیکی ارسال شود',
|
||||
'send_invite_comment' => 'جهت ارسال دعوت نامه به پست الکترونیکی این شخص این گزینه را فعال نمایید',
|
||||
'delete_confirm' => 'آیا از حذف این مدیر اطمینان دارید؟',
|
||||
'return' => 'بازگشت به لیست مدیران',
|
||||
'allow' => 'اجازه دسترسی',
|
||||
'inherit' => 'ارث بری',
|
||||
'deny' => 'عدم دسترسی',
|
||||
'group' => [
|
||||
'name' => 'گروه',
|
||||
'name_field' => 'نام',
|
||||
'superuser' => "کاربر ممتاز",
|
||||
'superuser_comment' => "اگر میخواهید این شخص به تمام قسمت ها دسترسی داشته باشد این گزینه را فعال نمایید.",
|
||||
'send_invite' => 'دعوت نامه توسط پست الکترونیکی ارسال شود',
|
||||
'send_invite_comment' => 'جهت ارسال دعوت نامه به پست الکترونیکی این شخص این گزینه را فعال نمایید',
|
||||
'delete_confirm' => 'آیا از حذف این مدیر اطمینان دارید؟',
|
||||
'return' => 'بازگشت به لیست مدیران',
|
||||
'allow' => 'اجازه دسترسی',
|
||||
'inherit' => 'ارث بری',
|
||||
'deny' => 'عدم دسترسی',
|
||||
'group' => [
|
||||
'name' => 'گروه',
|
||||
'name_field' => 'نام',
|
||||
'description_field' => 'توضیحات',
|
||||
'is_new_user_default_field' => 'بطور پیشفرض مدیران جدید را در این گروه ایجاد کن.',
|
||||
'code_field' => 'کد',
|
||||
'code_comment' => 'کد یکتایی را جهت دسترسی به آن توسط API وارد نمایید.',
|
||||
'menu_label' => 'گروه ها',
|
||||
'list_title' => 'مدیریت گروه ها',
|
||||
'new' => 'گروه مدیریت جدید',
|
||||
'list_title' => 'مدیریت گروه ها',
|
||||
'new' => 'گروه مدیریت جدید',
|
||||
'delete_confirm' => 'آیا از حذف این گروه از مدیران اطمینان دارید?',
|
||||
'return' => 'بازگشت به لیست گروه ها',
|
||||
'return' => 'بازگشت به لیست گروه ها',
|
||||
'users_count' => 'کاربران'
|
||||
],
|
||||
'preferences' => [
|
||||
'not_authenticated' => 'هیچ کاربر ثبت شده ای جهت بارگذاری یا ذخیره تنظیمات وجود ندارد.'
|
||||
]
|
||||
],
|
||||
'list' => [
|
||||
'default_title' => 'لیست',
|
||||
'search_prompt' => 'جستجو...',
|
||||
'no_records' => 'چیزی یافت نشد.',
|
||||
'missing_model' => 'هیچ مدلی برای لیست استفاده شده در کلاس :class تعریف نشده است.',
|
||||
'missing_column' => 'ستونی برای :columns تعریف نشده است.',
|
||||
'missing_columns' => 'ستونی برای لیست عریف شده در :class موجود نیست.',
|
||||
'missing_definition' => "در لیست تعریف شده ستونی برای ':field' موجود نیست.",
|
||||
'behavior_not_ready' => 'لسیت مقدار دهی اولیه شده است ، لطفا بررسی نمایید که متد makeLists() در کنترلر خود فراخوانی کرده باشید.',
|
||||
'default_title' => 'لیست',
|
||||
'search_prompt' => 'جستجو...',
|
||||
'no_records' => 'چیزی یافت نشد.',
|
||||
'missing_model' => 'هیچ مدلی برای لیست استفاده شده در کلاس :class تعریف نشده است.',
|
||||
'missing_column' => 'ستونی برای :columns تعریف نشده است.',
|
||||
'missing_columns' => 'ستونی برای لیست عریف شده در :class موجود نیست.',
|
||||
'missing_definition' => "در لیست تعریف شده ستونی برای ':field' موجود نیست.",
|
||||
'behavior_not_ready' => 'لسیت مقدار دهی اولیه شده است ، لطفا بررسی نمایید که متد makeLists() در کنترلر خود فراخوانی کرده باشید.',
|
||||
'invalid_column_datetime' => "ستون ':column' از نوع شی تاریخ نمی باشد ، لطفا بررسی نمایید که این ستون در مدل از نوع تاریخ تعریف شده باشد.",
|
||||
'pagination' => 'نمایش :from تا :to از :total مورد',
|
||||
'prev_page' => 'صفحه قبل',
|
||||
'next_page' => 'صفحه بعد',
|
||||
'loading' => 'در حال بارگذاری...',
|
||||
'setup_title' => 'راه اندازی لیست',
|
||||
'setup_help' => 'ستون هایی را که میخواهید مشاهده نمایید را انتخاب نمایید. میتوانید محل قرار گیری ستونها را با جابجا نمودن آنها به .',
|
||||
'records_per_page' => 'مورد در هر صفحه',
|
||||
'records_per_page_help' => 'تعداد موارد نمایش داده شده در هر صفحه را انتخاب نمایید. لطفا توجه نمایید نمایش تعداد زیادی از موارد در هر صفحه از کارایی سیستم میکاهد.',
|
||||
'delete_selected' => 'حذف انتخاب شده ها',
|
||||
'pagination' => 'نمایش :from تا :to از :total مورد',
|
||||
'prev_page' => 'صفحه قبل',
|
||||
'next_page' => 'صفحه بعد',
|
||||
'loading' => 'در حال بارگذاری...',
|
||||
'setup_title' => 'راه اندازی لیست',
|
||||
'setup_help' => 'ستون هایی را که میخواهید مشاهده نمایید را انتخاب نمایید. میتوانید محل قرار گیری ستونها را با جابجا نمودن آنها به .',
|
||||
'records_per_page' => 'مورد در هر صفحه',
|
||||
'records_per_page_help' => 'تعداد موارد نمایش داده شده در هر صفحه را انتخاب نمایید. لطفا توجه نمایید نمایش تعداد زیادی از موارد در هر صفحه از کارایی سیستم میکاهد.',
|
||||
'delete_selected' => 'حذف انتخاب شده ها',
|
||||
'delete_selected_empty' => 'مورد جهت حذف انتخاب نشده است.',
|
||||
'delete_selected_confirm' => 'آیا میخواهید موارد انتخابی را حذف کنید؟',
|
||||
'delete_selected_success' => 'حدف موارد انخابی انجام شد.',
|
||||
],
|
||||
'fileupload' => [
|
||||
'attachment' => 'فایل ضمیمه',
|
||||
'help' => 'برای فایل ضمیمه عنوان و توضیح مختصری وارد نمایید.',
|
||||
'title_label' => 'عنوان',
|
||||
'description_label' => 'توضیحات'
|
||||
'attachment' => 'فایل ضمیمه',
|
||||
'help' => 'برای فایل ضمیمه عنوان و توضیح مختصری وارد نمایید.',
|
||||
'title_label' => 'عنوان',
|
||||
'description_label' => 'توضیحات',
|
||||
'default_prompt' => 'فایل را جهت ارسال به این نقطه بکشید و یا %s را کلیک کنیید',
|
||||
'attachment_url' => 'آدرس پیوست',
|
||||
'upload_file' => 'ارسال فایل',
|
||||
'upload_error' => 'خطا در ارسال فایل',
|
||||
'remove_confirm' => 'آیا اطمینان دارید؟',
|
||||
'remove_file' => 'حذف فایل'
|
||||
],
|
||||
'form' => [
|
||||
'create_title' => ":name جدید",
|
||||
'update_title' => "ویرایش :name",
|
||||
'preview_title' => "پیش نمایش :name",
|
||||
'create_success' => ':name با موفقیت ایجاد شد.',
|
||||
'update_success' => ':name با موفقیت به روز رسانی شد.',
|
||||
'delete_success' => ':name با موفقیت حذف شد.',
|
||||
'missing_id' => "رکورد مشخصه (ID) برای فرم انتخاب نشده است.",
|
||||
'missing_model' => 'مدلی برای فرن تعریف شده در کلاس :class مشخص نشده است.',
|
||||
'missing_definition' => "فرم مورد نظر شامل فیلدی برای ':field' نمی باشد.",
|
||||
'not_found' => 'فرمی با مشخصه :id یافت نشد.',
|
||||
'action_confirm' => "آیا اطمینان دارید؟",
|
||||
'create' => 'ایجاد',
|
||||
'create_and_close' => 'ایجاد و خروج',
|
||||
'creating' => 'در حال ایجاد...',
|
||||
'creating_name' => 'درحال ایجاد :name...',
|
||||
'save' => 'ذخیره',
|
||||
'save_and_close' => 'ذخیره و خروج',
|
||||
'saving' => 'در حال ذخیره...',
|
||||
'saving_name' => 'درحال ذخیره :name...',
|
||||
'delete' => 'حذف',
|
||||
'deleting' => 'در حال حذف...',
|
||||
'deleting_name' => 'درحال حذف :name...',
|
||||
'create_title' => ":name جدید",
|
||||
'update_title' => "ویرایش :name",
|
||||
'preview_title' => "پیش نمایش :name",
|
||||
'create_success' => ':name با موفقیت ایجاد شد.',
|
||||
'update_success' => ':name با موفقیت به روز رسانی شد.',
|
||||
'delete_success' => ':name با موفقیت حذف شد.',
|
||||
'missing_id' => "رکورد مشخصه (ID) برای فرم انتخاب نشده است.",
|
||||
'missing_model' => 'مدلی برای فرن تعریف شده در کلاس :class مشخص نشده است.',
|
||||
'missing_definition' => "فرم مورد نظر شامل فیلدی برای ':field' نمی باشد.",
|
||||
'not_found' => 'فرمی با مشخصه :id یافت نشد.',
|
||||
'action_confirm' => "آیا اطمینان دارید؟",
|
||||
'create' => 'ایجاد',
|
||||
'create_and_close' => 'ایجاد و خروج',
|
||||
'creating' => 'در حال ایجاد...',
|
||||
'creating_name' => 'درحال ایجاد :name...',
|
||||
'save' => 'ذخیره',
|
||||
'save_and_close' => 'ذخیره و خروج',
|
||||
'saving' => 'در حال ذخیره...',
|
||||
'saving_name' => 'درحال ذخیره :name...',
|
||||
'delete' => 'حذف',
|
||||
'deleting' => 'در حال حذف...',
|
||||
'deleting_name' => 'درحال حذف :name...',
|
||||
'reset_default' => 'بازگشت به پیش فرض',
|
||||
'resetting' => 'بازگذاری مجدد',
|
||||
'resetting_name' => 'بارگذاری :name',
|
||||
'undefined_tab' => 'متفرقه',
|
||||
'field_off' => 'خاموش',
|
||||
'field_on' => 'روشن',
|
||||
'add' => 'افزودن',
|
||||
'apply' => 'اعمال',
|
||||
'cancel' => 'انصراف',
|
||||
'close' => 'خروج',
|
||||
'confirm' => 'تایید',
|
||||
'reload' => 'بارگذاری مجدد',
|
||||
'ok' => 'تایید',
|
||||
'or' => 'یا',
|
||||
'confirm_tab_close' => 'در صورت بستن این پنجره موارد ذخیره نشده از بین خواهند رفت. آیا از حذف شدن این پنجره اطمینان دارید؟',
|
||||
'behavior_not_ready' => 'فرم مور نظر مقدار دهی اولیه نشده است ، بررسی کنید که متد initForm() در کنترلر فرتخوانی شده باشد.',
|
||||
'preview_no_files_message' => 'فایل ها ارسال نشدند',
|
||||
'select' => 'انتخاب',
|
||||
'select_all' => 'همه',
|
||||
'select_none' => 'هیچ',
|
||||
'select_placeholder' => 'لطفا انتخاب نمایید',
|
||||
'insert_row' => 'افزودن سطر',
|
||||
'delete_row' => 'حذف سطر',
|
||||
'concurrency_file_changed_title' => 'فایل تغییر کرد',
|
||||
'undefined_tab' => 'متفرقه',
|
||||
'field_off' => 'خاموش',
|
||||
'field_on' => 'روشن',
|
||||
'add' => 'افزودن',
|
||||
'apply' => 'اعمال',
|
||||
'cancel' => 'انصراف',
|
||||
'close' => 'خروج',
|
||||
'confirm' => 'تایید',
|
||||
'reload' => 'بارگذاری مجدد',
|
||||
'complete' => 'تکمیل',
|
||||
'ok' => 'تایید',
|
||||
'or' => 'یا',
|
||||
'confirm_tab_close' => 'در صورت بستن این پنجره موارد ذخیره نشده از بین خواهند رفت. آیا از حذف شدن این پنجره اطمینان دارید؟',
|
||||
'behavior_not_ready' => 'فرم مور نظر مقدار دهی اولیه نشده است ، بررسی کنید که متد initForm() در کنترلر فرتخوانی شده باشد.',
|
||||
'preview_no_files_message' => 'فایلی جهت ارسال وجود ندارد',
|
||||
'preview_no_record_message' => 'موردی انتخاب نشده است',
|
||||
'select' => 'انتخاب',
|
||||
'select_all' => 'همه',
|
||||
'select_none' => 'هیچ',
|
||||
'select_placeholder' => 'لطفا انتخاب نمایید',
|
||||
'insert_row' => 'افزودن سطر',
|
||||
'delete_row' => 'حذف سطر',
|
||||
'concurrency_file_changed_title' => 'فایل تغییر کرد',
|
||||
'concurrency_file_changed_description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.',
|
||||
],
|
||||
'relation' => [
|
||||
'missing_config' => "Relation behavior does not have any configuration for ':config'.",
|
||||
'missing_definition' => "در ارتباط مورد نظر فیلد ':field' وجود ندارد.",
|
||||
'missing_model' => "مدلی برای ارتباط موجود در :class وجود ندارد.",
|
||||
'missing_config' => "کنترل کننده ارتباطات پایگاه داده شامل تعریفی برای ':config' نمی باشد.",
|
||||
'missing_definition' => "در ارتباط مورد نظر فیلد ':field' وجود ندارد.",
|
||||
'missing_model' => "مدلی برای ارتباط موجود در :class وجود ندارد.",
|
||||
'invalid_action_single' => "این عمل در ارتباط یک تعرفه نمبتواند اعمال شود.",
|
||||
'invalid_action_multi' => "این عمل در ارتباط چند طرفه نمیتواند اعمال شود.",
|
||||
'help' => "بر روی یک گزینه کلیک کنید تا افزوده شود",
|
||||
'related_data' => "اعلاعات :name مرتبط",
|
||||
'add' => "افزودن",
|
||||
'add_selected' => "افرودن انتخاب شده ها",
|
||||
'add_a_new' => ":name جدید",
|
||||
'invalid_action_multi' => "این عمل در ارتباط چند طرفه نمیتواند اعمال شود.",
|
||||
'help' => "بر روی یک گزینه کلیک کنید تا افزوده شود",
|
||||
'related_data' => "اعلاعات :name مرتبط",
|
||||
'add' => "افزودن",
|
||||
'add_selected' => "افرودن انتخاب شده ها",
|
||||
'add_a_new' => ":name جدید",
|
||||
'link_selected' => "لینک انتخاب شده ها",
|
||||
'link_a_new' => "لینک :name جدید",
|
||||
'cancel' => "انصراف",
|
||||
'cancel' => "انصراف",
|
||||
'close' => "بستن",
|
||||
'add_name' => "افزودن :name",
|
||||
'create' => "ایجاد",
|
||||
'create_name' => "ایجاد :name",
|
||||
'update' => "بروز رسانی",
|
||||
'update_name' => "بروز رسانی :name",
|
||||
'add_name' => "افزودن :name",
|
||||
'create' => "ایجاد",
|
||||
'create_name' => "ایجاد :name",
|
||||
'update' => "بروز رسانی",
|
||||
'update_name' => "بروز رسانی :name",
|
||||
'preview' => "پیش نمایش",
|
||||
'preview_name' => "پیش نمایش :name",
|
||||
'remove' => "حذف",
|
||||
'remove_name' => "حذف :name",
|
||||
'delete' => "حذف",
|
||||
'delete_name' => "حذف :name",
|
||||
'delete_confirm' => "آیا اطمینان دارید؟",
|
||||
'remove' => "حذف",
|
||||
'remove_name' => "حذف :name",
|
||||
'delete' => "حذف",
|
||||
'delete_name' => "حذف :name",
|
||||
'delete_confirm' => "آیا اطمینان دارید؟",
|
||||
'link' => "لینک",
|
||||
'link_name' => "لینک :name",
|
||||
'unlink' => "حذف لینک",
|
||||
'unlink_name' => "حذف لینک :name",
|
||||
'unlink_confirm' => "آبا اطمینان دارید؟",
|
||||
],
|
||||
'reorder' => [
|
||||
'default_title' => 'مرتب سازی موارد',
|
||||
'no_records' => 'موردی جهت مرتب سازی یافت نشد.',
|
||||
],
|
||||
'model' => [
|
||||
'name' => "مدل",
|
||||
'not_found' => "مدل ':class' با مشخصه ی :id یافت نشد",
|
||||
'missing_id' => "مشخصه ای برای مودل مورد نظر یافت نشد.",
|
||||
'missing_relation' => "مدل ':class' شامل تعریفی از ':relation'.",
|
||||
'name' => "مدل",
|
||||
'not_found' => "مدل ':class' با مشخصه ی :id یافت نشد",
|
||||
'missing_id' => "مشخصه ای برای مودل مورد نظر یافت نشد.",
|
||||
'missing_relation' => "مدل ':class' شامل تعریفی از ':relation'.",
|
||||
'missing_method' => "مدل ':class' متدی با نام ':method' ندارد.",
|
||||
'invalid_class' => "مدل :model استفاده شده در :class معتبر نمی باشد، این مدل باید از کلاس \Model ارث برده باشد.",
|
||||
'invalid_class' => "مدل :model استفاده شده در :class معتبر نمی باشد، این مدل باید از کلاس \Model ارث برده باشد.",
|
||||
'mass_assignment_failed' => "Mass assignment failed for Model attribute ':attribute'.",
|
||||
],
|
||||
'warnings' => [
|
||||
'tips' => 'راهنمایی پیکر بندی سیستم',
|
||||
'tips' => 'راهنمایی پیکر بندی سیستم',
|
||||
'tips_description' => 'مشکلاتی در پیکربندی سیستم وجود دارد، شما باید تنظیمات زیر را بررسی نمایید.',
|
||||
'permissions' => 'پوشه :name یا یکی از زیر پوشه های آن برای PHP قابل نوشتن نیستند. لطفا تنظیمات این پوشه را تعییر دهید.',
|
||||
'extension' => 'افزونه PHP با نام :name نصب نشده است. لطفن این افزونه را نصب کرده و فعال نمایید.'
|
||||
'permissions' => 'پوشه :name یا یکی از زیر پوشه های آن برای PHP قابل نوشتن نیستند. لطفا تنظیمات این پوشه را تعییر دهید.',
|
||||
'extension' => 'افزونه PHP با نام :name نصب نشده است. لطفن این افزونه را نصب کرده و فعال نمایید.'
|
||||
],
|
||||
'editor' => [
|
||||
'menu_label' => 'تنظیمات ویرایشگر کد',
|
||||
'menu_description' => 'سفارشی سازی ویرایشگر کد، مانند اندازه فونت و رنگ بندی آن.',
|
||||
'font_size' => 'اندازه فونت',
|
||||
'tab_size' => 'اندازه کاراکتر TAB',
|
||||
'use_hard_tabs' => 'فاصله گذاری با استفاده از TAB',
|
||||
'code_folding' => 'بلاک بندی کدها',
|
||||
'word_wrap' => 'چیدمان کلمات',
|
||||
'menu_label' => 'تنظیمات ویرایشگر کد',
|
||||
'menu_description' => 'سفارشی سازی ویرایشگر کد، مانند اندازه فونت و رنگ بندی آن.',
|
||||
'font_size' => 'اندازه فونت',
|
||||
'tab_size' => 'اندازه کاراکتر TAB',
|
||||
'use_hard_tabs' => 'فاصله گذاری با استفاده از TAB',
|
||||
'code_folding' => 'بلاک بندی کدها',
|
||||
'word_wrap' => 'چیدمان کلمات',
|
||||
'highlight_active_line' => 'مشخص نودن خط فعال',
|
||||
'show_invisibles' => 'نمایش کاراکتر های مخفی',
|
||||
'show_gutter' => 'نمایش نشانگر',
|
||||
'theme' => 'رنگ بندی',
|
||||
'auto_closing' => 'نشانه ها و کاراکترهای خاص بصورت خودکار بسته شوند',
|
||||
'show_invisibles' => 'نمایش کاراکتر های مخفی',
|
||||
'show_gutter' => 'نمایش نشانگر',
|
||||
'theme' => 'رنگ بندی',
|
||||
],
|
||||
'tooltips' => [
|
||||
'preview_website' => 'پیش نماسش وب سایت'
|
||||
],
|
||||
'mysettings' => [
|
||||
'menu_label' => 'تنظیمات من',
|
||||
'menu_label' => 'تنظیمات من',
|
||||
'menu_description' => 'تنظیمات مربوط به حساب کاربری شما',
|
||||
],
|
||||
'myaccount' => [
|
||||
'menu_label' => 'حساب کاربری من',
|
||||
'menu_label' => 'حساب کاربری من',
|
||||
'menu_description' => 'به روز رسانی اطلاعات حساب کار بری شما مانند نام و کلمه عبور و ... .',
|
||||
'menu_keywords' => 'ورود امن'
|
||||
'menu_keywords' => 'ورود امن'
|
||||
],
|
||||
'branding' => [
|
||||
'menu_label' => 'شخصی سازی بخش مدیریت',
|
||||
'menu_label' => 'شخصی سازی بخش مدیریت',
|
||||
'menu_description' => 'شخصی سازی بخش مدیریت مانند نام، رنگ ها و لوگو.',
|
||||
'brand' => 'برند',
|
||||
'logo' => 'لوگو',
|
||||
|
|
@ -283,21 +300,21 @@ return [
|
|||
'custom_stylesheet' => 'شیوه نامه های سفارشی'
|
||||
],
|
||||
'backend_preferences' => [
|
||||
'menu_label' => 'تنظیمات مدیریت',
|
||||
'menu_label' => 'تنظیمات مدیریت',
|
||||
'menu_description' => 'تنظیمات مربوط به زبان مربوط به قسمت مدیریت.',
|
||||
'locale' => 'زبان',
|
||||
'locale_comment' => 'زبان مورد نظر خود را انتخاب نمایید.',
|
||||
'locale' => 'زبان',
|
||||
'locale_comment' => 'زبان مورد نظر خود را انتخاب نمایید.',
|
||||
],
|
||||
'access_log' => [
|
||||
'hint' => 'این لیست نشاندهنده ورود کاربران مدیر به سیستم می باشد. موارد برای مدت :days روز نگهداری می شوند.',
|
||||
'menu_label' => 'ثبت دسترسی ها',
|
||||
'hint' => 'این لیست نشاندهنده ورود کاربران مدیر به سیستم می باشد. موارد برای مدت :days روز نگهداری می شوند.',
|
||||
'menu_label' => 'ثبت دسترسی ها',
|
||||
'menu_description' => 'نمایش لیست ورود موفقیت آمیز کاربران مدیر.',
|
||||
'created_at' => 'زمان و تاریخ',
|
||||
'login' => 'ورود',
|
||||
'ip_address' => 'آدرس آی پی',
|
||||
'first_name' => 'نام',
|
||||
'last_name' => 'نام خوانوادگی',
|
||||
'email' => 'پست الکترونیکی',
|
||||
'created_at' => 'زمان و تاریخ',
|
||||
'login' => 'ورود',
|
||||
'ip_address' => 'آدرس آی پی',
|
||||
'first_name' => 'نام',
|
||||
'last_name' => 'نام خوانوادگی',
|
||||
'email' => 'پست الکترونیکی',
|
||||
],
|
||||
'filter' => [
|
||||
'all' => 'همه'
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ return [
|
|||
'close' => "Zamknij",
|
||||
'add_name' => "Dodaj :name",
|
||||
'create' => "Stwórz",
|
||||
'create_name' => "Create :name",
|
||||
'create_name' => "Stwórz :name",
|
||||
'update' => "Aktualizuj",
|
||||
'update_name' => "Aktualizuj :name",
|
||||
'preview' => "Podgląd",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
return [
|
||||
'auth' => [
|
||||
'title' => 'Administrations område'
|
||||
'title' => 'Administrationsområde'
|
||||
],
|
||||
'field' => [
|
||||
'invalid_type' => 'Felaktig fälttyp använd :type.',
|
||||
|
|
@ -31,12 +31,12 @@ return [
|
|||
'login_placeholder' => 'användarnamn',
|
||||
'password_placeholder' => 'lösenord',
|
||||
'forgot_password' => "Glömt ditt lösenord?",
|
||||
'enter_email' => "Ange din epost-adress",
|
||||
'enter_email' => "Ange din e-postadress",
|
||||
'enter_login' => "Ange ditt användarnamn",
|
||||
'email_placeholder' => "epost",
|
||||
'email_placeholder' => "e-post",
|
||||
'enter_new_password' => "Välj ett nytt lösenord",
|
||||
'password_reset' => "Återställ lösenord",
|
||||
'restore_success' => "Ett meddelande har sänts till din epost-adress med instruktioner om hur du återställer ditt lösenord",
|
||||
'restore_success' => "Ett meddelande har sänts till din e-postadress med instruktioner om hur du återställer ditt lösenord",
|
||||
'restore_error' => "En användare med användarnamnet ':login' kunde ej hittas",
|
||||
'reset_success' => "Ditt lösenord har blivit återställt. Du kan nu logga in",
|
||||
'reset_error' => "Felaktig data för lösenordsåterställning. Var vänlig prova igen",
|
||||
|
|
@ -60,10 +60,10 @@ return [
|
|||
'columns' => '{1} column|[2,Inf] kolonner',
|
||||
'widget_new_row_label' => 'Forcera en ny rad',
|
||||
'widget_new_row_description' => 'Lägg widgeten på en ny rad.',
|
||||
'widget_title_label' => 'Widget titel',
|
||||
'widget_title_label' => 'Widget-titel',
|
||||
'widget_title_error' => 'En widgets titel är tvingande.',
|
||||
'status' => [
|
||||
'widget_title_default' => 'System status',
|
||||
'widget_title_default' => 'Systemstatus',
|
||||
'online' => 'online',
|
||||
'maintenance' => 'i underhåll',
|
||||
'update_available' => '{0} uppdateringar tillgängliga!|{1} uppdatering tillgänglig!|[2,Inf] uppdateringar tillgängliga!'
|
||||
|
|
@ -86,6 +86,7 @@ return [
|
|||
'password' => "Lösenord",
|
||||
'password_confirmation' => "Bekräfta lösenord",
|
||||
'permissions' => 'Rättigheter',
|
||||
'account' => 'Konto',
|
||||
'superuser' => "Superanvändare",
|
||||
'superuser_comment' => "Markera denna checkbox för att ge denna person tillgång till alla områden",
|
||||
'send_invite' => 'Inbjudan är sänd via e-post',
|
||||
|
|
@ -107,6 +108,7 @@ return [
|
|||
'new' => 'Ny administratörsgrupp',
|
||||
'delete_confirm' => 'Vill du verkligen radera denna administratörgrupp?',
|
||||
'return' => 'Återgå till grupplistan',
|
||||
'users_count' => 'Användare'
|
||||
],
|
||||
'preferences' => [
|
||||
'not_authenticated' => 'Det finns ingen autentiserad användare att ladda eller spara inställningar för',
|
||||
|
|
@ -139,7 +141,13 @@ return [
|
|||
'attachment' => 'Bilaga',
|
||||
'help' => 'Lägg till en och beskriving för denna bilagan.',
|
||||
'title_label' => 'Titel',
|
||||
'description_label' => 'Beskriving'
|
||||
'description_label' => 'Beskriving',
|
||||
'default_prompt' => 'Klicka på %s eller dra en fil hit för att ladda upp',
|
||||
'attachment_url' => 'Bilage-URL',
|
||||
'upload_file' => 'Ladda upp fil',
|
||||
'upload_error' => 'Fel vid uppladdning',
|
||||
'remove_confirm' => 'Är du säker?',
|
||||
'remove_file' => 'Radera fil'
|
||||
],
|
||||
'form' => [
|
||||
'create_title' => "Ny :name",
|
||||
|
|
@ -148,10 +156,10 @@ return [
|
|||
'create_success' => ':name är nu skapad',
|
||||
'update_success' => ':name har blivit uppdaterad',
|
||||
'delete_success' => ':name kunde ej raderas',
|
||||
'missing_id' => "Record ID för formuläret har ej blivit specificerat",
|
||||
'missing_id' => "Rad-ID för formuläret har ej blivit specificerat",
|
||||
'missing_model' => 'Formuläregenskapen som används i :class har ingen modell definierad',
|
||||
'missing_definition' => "Formuläregenskapen saknar ett fält för ':field'",
|
||||
'not_found' => 'Record ID :id för formuläret kunde ej hittas',
|
||||
'not_found' => 'Rad-ID :id för formuläret kunde ej hittas',
|
||||
'action_confirm' => 'Är du säker?',
|
||||
'create' => 'Skapa',
|
||||
'create_and_close' => 'Skapa och stäng',
|
||||
|
|
@ -176,11 +184,13 @@ return [
|
|||
'close' => 'Stäng',
|
||||
'confirm' => 'Bekräfta',
|
||||
'reload' => 'Ladda om',
|
||||
'complete' => 'Slutför',
|
||||
'ok' => 'OK',
|
||||
'or' => 'eller',
|
||||
'confirm_tab_close' => 'Vill du verkligen stänga fliken? Ej sparade ändringar kommer gå förlorade',
|
||||
'behavior_not_ready' => 'Formuläregenskap har ej blivit initierad, kontrollera att du anropat initForm() i din controller',
|
||||
'preview_no_files_message' => 'Filen är inte uppladdad',
|
||||
'preview_no_record_message' => 'Ingen rad är vald.',
|
||||
'select' => 'Välj',
|
||||
'select_all' => 'alla',
|
||||
'select_none' => 'ingen',
|
||||
|
|
@ -223,6 +233,10 @@ return [
|
|||
'unlink_name' => "Avlänka :name",
|
||||
'unlink_confirm' => "Är du säker?",
|
||||
],
|
||||
'reorder' => [
|
||||
'default_title' => 'Ordna om rader',
|
||||
'no_records' => 'Det finns inga rader att sortera.',
|
||||
],
|
||||
'model' => [
|
||||
'name' => "Modell",
|
||||
'not_found' => "Modellen ':class' med ID :id kunde ej hittas",
|
||||
|
|
@ -247,6 +261,7 @@ return [
|
|||
'code_folding' => 'Dölj kod',
|
||||
'word_wrap' => 'Radbryting',
|
||||
'highlight_active_line' => 'Markera aktiv rad',
|
||||
'auto_closing' => 'Stäng taggar och specialtecken automatiskt',
|
||||
'show_invisibles' => 'Visa dolda tecken',
|
||||
'show_gutter' => 'Visa ränna',
|
||||
'theme' => 'Färgschema'
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ return [
|
|||
'label' => "Giriş engellendi",
|
||||
'help' => "Bu sayfayı görüntülemek için gerekli izinlere sahip değilsiniz.",
|
||||
'cms_link' => "Ana sayfaya dön"
|
||||
],
|
||||
'invalid_token' => [
|
||||
'label' => 'Geçersiz güvenlik anahtarı'
|
||||
]
|
||||
],
|
||||
'partial' => [
|
||||
|
|
@ -86,6 +89,7 @@ return [
|
|||
'password' => "Parola",
|
||||
'password_confirmation' => "Parola (Tekrar)",
|
||||
'permissions' => 'İzinler',
|
||||
'account' => 'Hesap',
|
||||
'superuser' => "Süper Kullanıcı",
|
||||
'superuser_comment' => "Kullanıcıya her alanda yetki vermek için burayı işaretleyin.",
|
||||
'send_invite' => 'Email ile davet gönder',
|
||||
|
|
@ -98,15 +102,16 @@ return [
|
|||
'group' => [
|
||||
'name' => 'Grup',
|
||||
'name_field' => 'Adı',
|
||||
'description_field' => 'Açıklama',
|
||||
'is_new_user_default_field' => 'Yeni kullanıcılar bu gruba dahil edilsin mi?',
|
||||
'code_field' => 'Grup kodu',
|
||||
'code_comment' => 'Grup kodunu yazın',
|
||||
'menu_label' => 'Gruplar',
|
||||
'list_title' => 'Grupları Yönet',
|
||||
'new' => 'Yeni Yönetici Grubu',
|
||||
'delete_confirm' => 'Bu yönetici grubunu silmek istiyor musunuz?',
|
||||
'return' => 'Grup listesine dön',
|
||||
'description_field' => 'Adı',
|
||||
'is_new_user_default_field' => 'Yeni kullanıcılar bu gruba dahil edilsin mi?',
|
||||
'code_field' => 'Grup kodu',
|
||||
'code_comment' => 'Grup kodunu yazın'
|
||||
'users_count' => 'Users'
|
||||
],
|
||||
'preferences' => [
|
||||
'not_authenticated' => 'Ayarları görüntülemek veya düzenlemek için yetkili bir kullanıcı yok.'
|
||||
|
|
@ -129,13 +134,23 @@ return [
|
|||
'setup_title' => 'Liste Ayarları',
|
||||
'setup_help' => 'Listede görmek istediğiniz sütunları seçmek için onay kutularını kullanın. Sütunları yukarı veya aşağı sürükleyerek konumlarını değiştirebilirsiniz.',
|
||||
'records_per_page' => 'Sayfa başına kayıt sayısı',
|
||||
'records_per_page_help' => 'Sayfa başına görüntülenecek kayıt sayısını seçin. Tek sayfada yüksek miktarda kayıt görüntülemek sistem performansını azaltabilir.'
|
||||
'records_per_page_help' => 'Sayfa başına görüntülenecek kayıt sayısını seçin. Tek sayfada yüksek miktarda kayıt görüntülemek sistem performansını azaltabilir.',
|
||||
'delete_selected' => 'Seçili olanı sil',
|
||||
'delete_selected_empty' => 'Silinecek seçili kayıt bulunamadı.',
|
||||
'delete_selected_confirm' => 'Seçili kayıtları silmek istediğize emin misiniz?',
|
||||
'delete_selected_success' => 'Seçili kayıtlar başarıyla silindi.'
|
||||
],
|
||||
'fileupload' => [
|
||||
'attachment' => 'Dosya Eki',
|
||||
'help' => 'Bu ek için bir başlık ve tanım girin.',
|
||||
'title_label' => 'Başlık',
|
||||
'description_label' => 'Tanım'
|
||||
'description_label' => 'Tanım',
|
||||
'default_prompt' => '%s e tıkla ya da bir dosya sürükleyin',
|
||||
'attachment_url' => 'Ek URLsi',
|
||||
'upload_file' => 'Dosya yükle',
|
||||
'upload_error' => 'Dosya yükleme hatası',
|
||||
'remove_confirm' => 'Emin misiniz?',
|
||||
'remove_file' => 'Dosyayı sil'
|
||||
],
|
||||
'form' => [
|
||||
'create_title' => ":name Oluştur",
|
||||
|
|
@ -172,11 +187,13 @@ return [
|
|||
'close' => 'Kapat',
|
||||
'confirm' => 'Onayla',
|
||||
'reload' => 'Yenile',
|
||||
'complete' => 'Tamamla',
|
||||
'ok' => 'Tamam',
|
||||
'or' => 'veya',
|
||||
'confirm_tab_close' => 'Bu sekmeyi kapatmak istediğinize emin misiniz? Kaydedilmemiş değişiklikleri kaybedeceksiniz.',
|
||||
'behavior_not_ready' => 'Form oluşturulamadı, controller da initForm() metodunu kontrol edin.',
|
||||
'preview_no_files_message' => 'Dosyalar yüklenmedi',
|
||||
'preview_no_record_message' => 'Seçili kayıt yok.',
|
||||
'select' => 'Seç',
|
||||
'select_all' => 'tümü',
|
||||
'select_none' => 'hiçbiri',
|
||||
|
|
@ -196,6 +213,8 @@ return [
|
|||
'add' => "Ekle",
|
||||
'add_selected' => 'Seçilenleri ekle',
|
||||
'add_a_new' => 'Yeni bir :name ekle',
|
||||
'link_selected' => 'Seçileni bağla',
|
||||
'link_a_new' => 'Yeni bir :name bağla',
|
||||
'cancel' => 'İptal',
|
||||
'close' => "Kapat",
|
||||
'add_name' => ":name Ekle",
|
||||
|
|
@ -209,7 +228,16 @@ return [
|
|||
'remove_name' => ":name Kaldır",
|
||||
'delete' => "Sil",
|
||||
'delete_name' => ":name Sil",
|
||||
'delete_confirm' => 'Emin misiniz?'
|
||||
'delete_confirm' => 'Emin misiniz?',
|
||||
'link' => 'Bağla',
|
||||
'link_name' => ':name bağla',
|
||||
'unlink' => 'Bağlamayı kaldır',
|
||||
'unlink_name' => ':name bağlamasını kaldır',
|
||||
'unlink_confirm' => 'Emin misiniz?'
|
||||
],
|
||||
'reorder' => [
|
||||
'default_title' => 'Kayıtları yeniden sırala',
|
||||
'no_records' => 'Sıralamak için bir kayıt bulunamadı.',
|
||||
],
|
||||
'model' => [
|
||||
'name' => "Model",
|
||||
|
|
@ -235,6 +263,7 @@ return [
|
|||
'code_folding' => 'Kod katlama (Alt satıra inme)',
|
||||
'word_wrap' => 'Uzun kelimeleri yeni satırda göster',
|
||||
'highlight_active_line' => 'Aktif satırı vurgula',
|
||||
'auto_closing' => 'Etiketleri ve özel karakterleri otomatik kapat',
|
||||
'show_invisibles' => 'Gizli karakterleri göster',
|
||||
'show_gutter' => 'Satır numarasını göster',
|
||||
'theme' => 'Renk şeması',
|
||||
|
|
@ -287,6 +316,6 @@ return [
|
|||
'email' => 'Email'
|
||||
],
|
||||
'filter' => [
|
||||
'all' => 'tümü'
|
||||
'all' => 'tümü'
|
||||
]
|
||||
];
|
||||
];
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ class BackendPreferences extends Model
|
|||
public function getLocaleOptions()
|
||||
{
|
||||
$locales = Config::get('app.localeOptions', [
|
||||
'cs' => [Lang::get('system::lang.locale.cs'), 'flag-cz'],
|
||||
'en' => [Lang::get('system::lang.locale.en'), 'flag-gb'],
|
||||
'de' => [Lang::get('system::lang.locale.de'), 'flag-de'],
|
||||
'es' => [Lang::get('system::lang.locale.es'), 'flag-es'],
|
||||
|
|
@ -51,7 +52,7 @@ class BackendPreferences extends Model
|
|||
'pt-br' => [Lang::get('system::lang.locale.pt-br'), 'flag-br'],
|
||||
'ro' => [Lang::get('system::lang.locale.ro'), 'flag-ro'],
|
||||
'ru' => [Lang::get('system::lang.locale.ru'), 'flag-ru'],
|
||||
'se' => [Lang::get('system::lang.locale.se'), 'flag-se'],
|
||||
'sv' => [Lang::get('system::lang.locale.sv'), 'flag-se'],
|
||||
'tr' => [Lang::get('system::lang.locale.tr'), 'flag-tr'],
|
||||
'pl' => [Lang::get('system::lang.locale.pl'), 'flag-pl'],
|
||||
'sk' => [Lang::get('system::lang.locale.sk'), 'flag-sk'],
|
||||
|
|
|
|||
|
|
@ -22,9 +22,9 @@ class User extends UserBase
|
|||
*/
|
||||
public $rules = [
|
||||
'login' => 'required|between:2,24|unique:backend_users',
|
||||
'email' => 'required|between:3,64|email|unique:backend_users',
|
||||
'password' => 'required:create|between:4,64|confirmed',
|
||||
'password_confirmation' => 'required_with:password|between:4,64'
|
||||
'email' => 'required|between:3,255|email|unique:backend_users',
|
||||
'password' => 'required:create|between:4,255|confirmed',
|
||||
'password_confirmation' => 'required_with:password|between:4,255'
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -16,3 +16,4 @@ columns:
|
|||
relation: users_count
|
||||
valueFrom: count
|
||||
default: 0
|
||||
sortable: false
|
||||
|
|
|
|||
|
|
@ -832,28 +832,36 @@ class Form extends WidgetBase
|
|||
*/
|
||||
public function getSaveData()
|
||||
{
|
||||
$data = ($this->arrayName) ? post($this->arrayName) : post();
|
||||
$this->defineFormFields();
|
||||
|
||||
$result = [];
|
||||
|
||||
/*
|
||||
* Source data
|
||||
*/
|
||||
$data = $this->arrayName ? post($this->arrayName) : post();
|
||||
if (!$data) {
|
||||
$data = [];
|
||||
}
|
||||
|
||||
/*
|
||||
* Number fields should be converted to integers
|
||||
* Spin over each field and extract the postback value
|
||||
*/
|
||||
foreach ($this->allFields as $field) {
|
||||
if ($field->type != 'number') {
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle HTML array, eg: item[key][another]
|
||||
*/
|
||||
$parts = HtmlHelper::nameToArray($field->fieldName);
|
||||
$dotted = implode('.', $parts);
|
||||
if (($value = array_get($data, $dotted)) !== null) {
|
||||
$value = !strlen(trim($value)) ? null : (float) $value;
|
||||
array_set($data, $dotted, $value);
|
||||
if (($value = $this->dataArrayGet($data, $parts)) !== null) {
|
||||
|
||||
/*
|
||||
* Number fields should be converted to integers
|
||||
*/
|
||||
if ($field->type == 'number') {
|
||||
$value = !strlen(trim($value)) ? null : (float) $value;
|
||||
}
|
||||
|
||||
$this->dataArraySet($result, $parts, $value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -862,46 +870,12 @@ class Form extends WidgetBase
|
|||
*/
|
||||
foreach ($this->formWidgets as $field => $widget) {
|
||||
$parts = HtmlHelper::nameToArray($field);
|
||||
$dotted = implode('.', $parts);
|
||||
|
||||
$widgetValue = $widget->getSaveValue(array_get($data, $dotted));
|
||||
|
||||
array_set($data, $dotted, $widgetValue);
|
||||
$widgetValue = $widget->getSaveValue($this->dataArrayGet($result, $parts));
|
||||
$this->dataArraySet($result, $parts, $widgetValue);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle fields that differ by fieldName and valueFrom
|
||||
* @todo @deprecated / Not needed? Remove if year >= 2016
|
||||
*/
|
||||
// $remappedFields = [];
|
||||
// foreach ($this->allFields as $field) {
|
||||
// if ($field->fieldName == $field->valueFrom) {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// /*
|
||||
// * Get the value, remove it from the data collection
|
||||
// */
|
||||
// $parts = HtmlHelper::nameToArray($field->fieldName);
|
||||
// $dotted = implode('.', $parts);
|
||||
// $value = array_get($data, $dotted);
|
||||
// array_forget($data, $dotted);
|
||||
|
||||
// /*
|
||||
// * Set the new value to the data collection
|
||||
// */
|
||||
// $parts = HtmlHelper::nameToArray($field->valueFrom);
|
||||
// $dotted = implode('.', $parts);
|
||||
// array_set($remappedFields, $dotted, $value);
|
||||
// }
|
||||
|
||||
// if (count($remappedFields) > 0) {
|
||||
// $data = array_merge($remappedFields, $data);
|
||||
// // Could be useful one day for field name collisions
|
||||
// // $data['X_OCTOBER_REMAPPED_FIELDS'] = $remappedFields;
|
||||
// }
|
||||
|
||||
return $data;
|
||||
return $result;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1005,4 +979,59 @@ class Form extends WidgetBase
|
|||
|
||||
return method_exists($object, $method);
|
||||
}
|
||||
|
||||
/**
|
||||
* Variant to array_get() but preserves dots in key names.
|
||||
*/
|
||||
protected function dataArrayGet(array $array, array $parts, $default = null)
|
||||
{
|
||||
if (is_null($parts)) {
|
||||
return $array;
|
||||
}
|
||||
|
||||
if (count($parts) === 1) {
|
||||
$key = array_shift($parts);
|
||||
if (isset($array[$key])) {
|
||||
return $array[$key];
|
||||
}
|
||||
else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($parts as $segment) {
|
||||
if (!is_array($array) || !array_key_exists($segment, $array)) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
$array = $array[$segment];
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Variant to array_set() but preserves dots in key names.
|
||||
*/
|
||||
protected function dataArraySet(array &$array, array $parts, $value)
|
||||
{
|
||||
if (is_null($parts)) {
|
||||
return $array = $value;
|
||||
}
|
||||
|
||||
while (count($parts) > 1) {
|
||||
$key = array_shift($parts);
|
||||
|
||||
if (!isset($array[$key]) || !is_array($array[$key])) {
|
||||
$array[$key] = [];
|
||||
}
|
||||
|
||||
$array =& $array[$key];
|
||||
}
|
||||
|
||||
$array[array_shift($parts)] = $value;
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ use DbDongle;
|
|||
use Carbon\Carbon;
|
||||
use October\Rain\Html\Helper as HtmlHelper;
|
||||
use October\Rain\Router\Helper as RouterHelper;
|
||||
use System\Helpers\DateTime as DateTimeHelper;
|
||||
use Backend\Classes\ListColumn;
|
||||
use Backend\Classes\WidgetBase;
|
||||
use ApplicationException;
|
||||
|
|
@ -53,7 +54,7 @@ class Lists extends WidgetBase
|
|||
/**
|
||||
* @var string Message to display when there are no records in the list.
|
||||
*/
|
||||
public $noRecordsMessage = 'No records found';
|
||||
public $noRecordsMessage = 'backend::lang.list.no_records';
|
||||
|
||||
/**
|
||||
* @var int Maximum rows to display for each page.
|
||||
|
|
@ -767,7 +768,7 @@ class Lists extends WidgetBase
|
|||
$value = implode(', ', $record->{$columnName}->lists($column->valueFrom));
|
||||
}
|
||||
elseif ($this->isColumnRelated($column) || $this->isColumnPivot($column)) {
|
||||
$value = $record->{$columnName}->{$column->valueFrom};
|
||||
$value = $record->{$columnName} ? $record->{$columnName}->{$column->valueFrom} : null;
|
||||
}
|
||||
else {
|
||||
$value = null;
|
||||
|
|
@ -804,7 +805,7 @@ class Lists extends WidgetBase
|
|||
/*
|
||||
* Apply default value.
|
||||
*/
|
||||
if (empty($value)) {
|
||||
if ($value === '' || $value === null) {
|
||||
$value = $column->defaults;
|
||||
}
|
||||
|
||||
|
|
@ -946,7 +947,21 @@ class Lists extends WidgetBase
|
|||
|
||||
$value = $this->validateDateTimeValue($value, $column);
|
||||
|
||||
return $value->diffForHumans();
|
||||
return DateTimeHelper::timeSince($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process as time as current tense (Today at 0:00)
|
||||
*/
|
||||
protected function evalTimetenseTypeValue($record, $column, $value)
|
||||
{
|
||||
if ($value === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$value = $this->validateDateTimeValue($value, $column);
|
||||
|
||||
return DateTimeHelper::timeTense($value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -954,9 +969,7 @@ class Lists extends WidgetBase
|
|||
*/
|
||||
protected function validateDateTimeValue($value, $column)
|
||||
{
|
||||
if ($value instanceof DateTime) {
|
||||
$value = Carbon::instance($value);
|
||||
}
|
||||
$value = DateTimeHelper::instance()->makeCarbon($value, false);
|
||||
|
||||
if (!$value instanceof Carbon) {
|
||||
throw new ApplicationException(Lang::get(
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
this.toggleEmptyTabs()
|
||||
this.bindCollapsibleSections()
|
||||
|
||||
this.$el.on('oc.triggerOn.afterUpdate', this.proxy(this.toggleEmptyTabs))
|
||||
this.$el.one('dispose-control', this.proxy(this.dispose))
|
||||
}
|
||||
|
||||
|
|
@ -132,18 +133,44 @@
|
|||
}
|
||||
|
||||
/*
|
||||
* Hides tabs that have no content
|
||||
* Hides tabs that have no content, it is possible this can be
|
||||
* called multiple times in a single cycle due to input.trigger.
|
||||
*/
|
||||
FormWidget.prototype.toggleEmptyTabs = function() {
|
||||
var tabControl = $('[data-control=tab]', this.$el)
|
||||
var self = this,
|
||||
form = this.$el
|
||||
|
||||
if (!tabControl.length)
|
||||
return
|
||||
if (this.toggleEmptyTabsTimer !== undefined) {
|
||||
window.clearTimeout(this.toggleEmptyTabsTimer)
|
||||
}
|
||||
|
||||
$('.tab-pane', tabControl).each(function() {
|
||||
$('[data-target="#' + $(this).attr('id') + '"]', tabControl)
|
||||
.toggle(!!$('.form-group:not(:empty)', $(this)).length)
|
||||
})
|
||||
this.toggleEmptyTabsTimer = window.setTimeout(function() {
|
||||
|
||||
var tabControl = $('[data-control=tab]', this.$el),
|
||||
tabContainer = $('.nav-tabs', tabControl)
|
||||
|
||||
if (!tabControl.length || !$.contains(form.get(0), tabControl.get(0)))
|
||||
return
|
||||
|
||||
/*
|
||||
* Check each tab pane for form field groups
|
||||
*/
|
||||
$('.tab-pane', tabControl).each(function() {
|
||||
$('[data-target="#' + $(this).attr('id') + '"]', tabControl)
|
||||
.closest('li')
|
||||
.toggle(!!$('.form-group:not(:empty):not(.hide)', $(this)).length)
|
||||
})
|
||||
|
||||
/*
|
||||
* If a hidden tab was selected, select the first visible tab
|
||||
*/
|
||||
if (!$('> li.active:visible', tabContainer).length) {
|
||||
$('> li:visible:first', tabContainer)
|
||||
.find('> a:first')
|
||||
.tab('show')
|
||||
}
|
||||
|
||||
}, 1)
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -137,17 +137,17 @@
|
|||
background: white;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
.control-table .toolbar a {
|
||||
.control-table .toolbar a.btn {
|
||||
color: #323e50;
|
||||
padding: 10px;
|
||||
opacity: 0.5;
|
||||
filter: alpha(opacity=50);
|
||||
}
|
||||
.control-table .toolbar a:hover {
|
||||
.control-table .toolbar a.btn:hover {
|
||||
opacity: 1;
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
.control-table .toolbar a:before {
|
||||
.control-table .toolbar a.table-icon:before {
|
||||
display: inline-block;
|
||||
content: ' ';
|
||||
width: 16px;
|
||||
|
|
@ -159,10 +159,10 @@
|
|||
background-position: 0 0;
|
||||
background-size: 32px auto;
|
||||
}
|
||||
.control-table .toolbar a.add-table-row-above:before {
|
||||
.control-table .toolbar a.table-icon.add-table-row-above:before {
|
||||
background-position: 0 -56px;
|
||||
}
|
||||
.control-table .toolbar a.delete-table-row:before {
|
||||
.control-table .toolbar a.table-icon.delete-table-row:before {
|
||||
background-position: 0 -113px;
|
||||
}
|
||||
.control-table.active .toolbar {
|
||||
|
|
|
|||
|
|
@ -78,17 +78,17 @@ return
|
|||
this.toolbar=document.createElement('div')
|
||||
this.toolbar.setAttribute('class','toolbar')
|
||||
if(this.options.adding){var addBelowButton=document.createElement('a')
|
||||
addBelowButton.setAttribute('class','btn add-table-row-below')
|
||||
addBelowButton.setAttribute('class','btn table-icon add-table-row-below')
|
||||
addBelowButton.setAttribute('data-cmd','record-add-below')
|
||||
this.toolbar.appendChild(addBelowButton)
|
||||
if(this.navigation.paginationEnabled()||!this.options.rowSorting){addBelowButton.textContent=this.options.btnAddRowLabel}else{addBelowButton.textContent=this.options.btnAddRowBelowLabel
|
||||
var addAboveButton=document.createElement('a')
|
||||
addAboveButton.setAttribute('class','btn add-table-row-above')
|
||||
addAboveButton.setAttribute('class','btn table-icon add-table-row-above')
|
||||
addAboveButton.textContent='Add row above'
|
||||
addAboveButton.setAttribute('data-cmd','record-add-above')
|
||||
this.toolbar.appendChild(addAboveButton)}}
|
||||
if(this.options.deleting){var deleteButton=document.createElement('a')
|
||||
deleteButton.setAttribute('class','btn delete-table-row')
|
||||
deleteButton.setAttribute('class','btn table-icon delete-table-row')
|
||||
deleteButton.textContent=this.options.btnDeleteRowLabel
|
||||
deleteButton.setAttribute('data-cmd','record-delete')
|
||||
this.toolbar.appendChild(deleteButton)}
|
||||
|
|
@ -291,6 +291,8 @@ if(!this.validate()){ev.preventDefault()
|
|||
return}
|
||||
var fieldName=this.options.alias.indexOf('[')>-1?this.options.alias+'[TableData]':this.options.alias+'TableData';data.options.data[fieldName]=this.dataSource.getAllData()}}
|
||||
Table.prototype.onToolbarClick=function(ev){var target=this.getEventTarget(ev),cmd=target.getAttribute('data-cmd')
|
||||
if(!cmd)
|
||||
return
|
||||
switch(cmd){case'record-add-below':this.addRecord('below')
|
||||
break
|
||||
case'record-add-above':this.addRecord('above')
|
||||
|
|
@ -414,12 +416,11 @@ var paginationContainer=this.tableObj.getElement().querySelector('.pagination'),
|
|||
this.pageCount=this.calculatePageCount(recordCount,this.tableObj.options.recordsPerPage)
|
||||
if(!paginationContainer){paginationContainer=document.createElement('div')
|
||||
paginationContainer.setAttribute('class','pagination')
|
||||
newPaginationContainer=true}else
|
||||
curRecordCount=this.getRecordCount(paginationContainer)
|
||||
newPaginationContainer=true}
|
||||
else{curRecordCount=this.getRecordCount(paginationContainer)}
|
||||
if(newPaginationContainer||curRecordCount!=recordCount){paginationContainer.setAttribute('data-record-count',recordCount)
|
||||
var pageList=this.buildPaginationLinkList(recordCount,this.tableObj.options.recordsPerPage,this.pageIndex)
|
||||
if(!newPaginationContainer)
|
||||
paginationContainer.replaceChild(pageList,paginationContainer.children[0])
|
||||
if(!newPaginationContainer){paginationContainer.replaceChild(pageList,paginationContainer.children[0])}
|
||||
else{paginationContainer.appendChild(pageList)
|
||||
this.tableObj.getElement().appendChild(paginationContainer)}}else{this.markActiveLinkItem(paginationContainer,this.pageIndex)}}
|
||||
Navigation.prototype.calculatePageCount=function(recordCount,recordsPerPage){var pageCount=Math.ceil(recordCount/recordsPerPage)
|
||||
|
|
@ -432,6 +433,7 @@ Navigation.prototype.buildPaginationLinkList=function(recordCount,recordsPerPage
|
|||
for(var i=0;i<pageCount;i++){var item=document.createElement('li'),link=document.createElement('a')
|
||||
if(i==pageIndex)
|
||||
item.setAttribute('class','active')
|
||||
$(item).addClass('pagination-link')
|
||||
link.innerText=i+1
|
||||
link.setAttribute('data-page-index',i)
|
||||
link.setAttribute('href','#')
|
||||
|
|
@ -440,8 +442,7 @@ pageList.appendChild(item)}
|
|||
return pageList}
|
||||
Navigation.prototype.markActiveLinkItem=function(paginationContainer,pageIndex){var activeItem=paginationContainer.querySelector('.active'),list=paginationContainer.children[0]
|
||||
activeItem.setAttribute('class','')
|
||||
for(var i=0,len=list.children.length;i<len;i++){if(i==pageIndex)
|
||||
list.children[i].setAttribute('class','active')}}
|
||||
for(var i=0,len=list.children.length;i<len;i++){if(i==pageIndex){list.children[i].setAttribute('class','active')}}}
|
||||
Navigation.prototype.gotoPage=function(pageIndex,onSuccess){this.tableObj.unfocusTable()
|
||||
if(!this.tableObj.validate())
|
||||
return
|
||||
|
|
@ -467,7 +468,8 @@ return
|
|||
var row=this.tableObj.activeCell.parentNode,newRow=!ev.shiftKey?row.nextElementSibling:row.parentNode.children[row.parentNode.children.length-1],cellIndex=forceCellIndex!==undefined?forceCellIndex:this.tableObj.activeCell.cellIndex
|
||||
if(newRow){var cell=newRow.children[cellIndex]
|
||||
if(cell)
|
||||
this.tableObj.focusCell(cell)}else{if(!this.paginationEnabled())
|
||||
this.tableObj.focusCell(cell)}
|
||||
else{if(!this.paginationEnabled())
|
||||
return
|
||||
if(this.pageIndex<this.pageCount-1){var self=this
|
||||
this.gotoPage(this.pageIndex+1,function navDownPageSuccess(){self.focusCell('top',cellIndex)
|
||||
|
|
@ -541,7 +543,7 @@ return this.navigateRight(ev)
|
|||
if(ev.keyCode==9)
|
||||
return this.navigateNext(ev)}
|
||||
Navigation.prototype.onClick=function(ev){var target=this.tableObj.getEventTarget(ev,'A')
|
||||
if(!target)
|
||||
if(!target||!$(target).hasClass('pagination-link'))
|
||||
return
|
||||
var pageIndex=parseInt(target.getAttribute('data-page-index'))
|
||||
if(pageIndex===null)
|
||||
|
|
@ -569,7 +571,8 @@ this.data=JSON.parse(dataString)};Client.prototype=Object.create(BaseProto)
|
|||
Client.prototype.constructor=Client
|
||||
Client.prototype.dispose=function(){BaseProto.dispose.call(this)
|
||||
this.data=null}
|
||||
Client.prototype.getRecords=function(offset,count,onSuccess){if(!count){onSuccess(this.data,this.data.length)}else{onSuccess(this.data.slice(offset,offset+count),this.data.length)}}
|
||||
Client.prototype.getRecords=function(offset,count,onSuccess){if(!count){onSuccess(this.data,this.data.length)}
|
||||
else{onSuccess(this.data.slice(offset,offset+count),this.data.length)}}
|
||||
Client.prototype.createRecord=function(recordData,placement,relativeToKey,offset,count,onSuccess){if(placement==='bottom'){this.data.push(recordData)}
|
||||
else if(placement=='above'||placement=='below'){var recordIndex=this.getIndexOfKey(relativeToKey)
|
||||
if(placement=='below')
|
||||
|
|
|
|||
|
|
@ -49,7 +49,8 @@
|
|||
if (!count) {
|
||||
// Return all records
|
||||
onSuccess(this.data, this.data.length)
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// Return a subset of records
|
||||
onSuccess(this.data.slice(offset, offset+count), this.data.length)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,19 +66,24 @@
|
|||
paginationContainer = document.createElement('div')
|
||||
paginationContainer.setAttribute('class', 'pagination')
|
||||
newPaginationContainer = true
|
||||
} else
|
||||
}
|
||||
else {
|
||||
curRecordCount = this.getRecordCount(paginationContainer)
|
||||
}
|
||||
|
||||
// Generate the new page list only if the record count has changed
|
||||
if (newPaginationContainer || curRecordCount != recordCount) {
|
||||
paginationContainer.setAttribute('data-record-count', recordCount)
|
||||
|
||||
var pageList = this.buildPaginationLinkList(recordCount,
|
||||
this.tableObj.options.recordsPerPage,
|
||||
this.pageIndex)
|
||||
var pageList = this.buildPaginationLinkList(
|
||||
recordCount,
|
||||
this.tableObj.options.recordsPerPage,
|
||||
this.pageIndex
|
||||
)
|
||||
|
||||
if (!newPaginationContainer)
|
||||
if (!newPaginationContainer) {
|
||||
paginationContainer.replaceChild(pageList, paginationContainer.children[0])
|
||||
}
|
||||
else {
|
||||
paginationContainer.appendChild(pageList)
|
||||
this.tableObj.getElement().appendChild(paginationContainer)
|
||||
|
|
@ -120,6 +125,8 @@
|
|||
if (i == pageIndex)
|
||||
item.setAttribute('class', 'active')
|
||||
|
||||
$(item).addClass('pagination-link')
|
||||
|
||||
link.innerText = i+1
|
||||
link.setAttribute('data-page-index', i)
|
||||
link.setAttribute('href', '#')
|
||||
|
|
@ -141,8 +148,9 @@
|
|||
activeItem.setAttribute('class', '')
|
||||
|
||||
for (var i=0, len = list.children.length; i < len; i++) {
|
||||
if (i == pageIndex)
|
||||
if (i == pageIndex) {
|
||||
list.children[i].setAttribute('class', 'active')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -200,9 +208,9 @@
|
|||
return
|
||||
|
||||
var row = this.tableObj.activeCell.parentNode,
|
||||
newRow = !ev.shiftKey ?
|
||||
row.nextElementSibling :
|
||||
row.parentNode.children[row.parentNode.children.length - 1],
|
||||
newRow = !ev.shiftKey
|
||||
? row.nextElementSibling
|
||||
: row.parentNode.children[row.parentNode.children.length - 1],
|
||||
cellIndex = forceCellIndex !== undefined ?
|
||||
forceCellIndex :
|
||||
this.tableObj.activeCell.cellIndex
|
||||
|
|
@ -212,7 +220,8 @@
|
|||
|
||||
if (cell)
|
||||
this.tableObj.focusCell(cell)
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// Try to switch to the next page if that's possible
|
||||
|
||||
if (!this.paginationEnabled())
|
||||
|
|
@ -377,8 +386,10 @@
|
|||
return this.navigateUp(ev)
|
||||
else if (ev.keyCode == 37)
|
||||
return this.navigateLeft(ev)
|
||||
|
||||
if (ev.keyCode == 39)
|
||||
return this.navigateRight(ev)
|
||||
|
||||
if (ev.keyCode == 9)
|
||||
return this.navigateNext(ev)
|
||||
}
|
||||
|
|
@ -389,7 +400,7 @@
|
|||
|
||||
var target = this.tableObj.getEventTarget(ev, 'A')
|
||||
|
||||
if (!target)
|
||||
if (!target || !$(target).hasClass('pagination-link'))
|
||||
return
|
||||
|
||||
var pageIndex = parseInt(target.getAttribute('data-page-index'))
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@
|
|||
|
||||
if (this.options.adding) {
|
||||
var addBelowButton = document.createElement('a')
|
||||
addBelowButton.setAttribute('class', 'btn add-table-row-below')
|
||||
addBelowButton.setAttribute('class', 'btn table-icon add-table-row-below')
|
||||
addBelowButton.setAttribute('data-cmd', 'record-add-below')
|
||||
this.toolbar.appendChild(addBelowButton)
|
||||
|
||||
|
|
@ -236,7 +236,7 @@
|
|||
addBelowButton.textContent = this.options.btnAddRowBelowLabel
|
||||
|
||||
var addAboveButton = document.createElement('a')
|
||||
addAboveButton.setAttribute('class', 'btn add-table-row-above')
|
||||
addAboveButton.setAttribute('class', 'btn table-icon add-table-row-above')
|
||||
addAboveButton.textContent = 'Add row above'
|
||||
addAboveButton.setAttribute('data-cmd', 'record-add-above')
|
||||
this.toolbar.appendChild(addAboveButton)
|
||||
|
|
@ -245,8 +245,10 @@
|
|||
|
||||
if (this.options.deleting) {
|
||||
var deleteButton = document.createElement('a')
|
||||
deleteButton.setAttribute('class', 'btn delete-table-row')
|
||||
|
||||
deleteButton.setAttribute('class', 'btn table-icon delete-table-row')
|
||||
deleteButton.textContent = this.options.btnDeleteRowLabel
|
||||
|
||||
deleteButton.setAttribute('data-cmd', 'record-delete')
|
||||
this.toolbar.appendChild(deleteButton)
|
||||
}
|
||||
|
|
@ -776,6 +778,9 @@
|
|||
var target = this.getEventTarget(ev),
|
||||
cmd = target.getAttribute('data-cmd')
|
||||
|
||||
if (!cmd)
|
||||
return
|
||||
|
||||
switch (cmd) {
|
||||
case 'record-add-below':
|
||||
this.addRecord('below')
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@
|
|||
background: white;
|
||||
border-bottom: 1px solid @table-inactive-border;
|
||||
|
||||
a {
|
||||
a.btn {
|
||||
color: #323e50;
|
||||
padding: 10px;
|
||||
.opacity(0.5);
|
||||
|
|
@ -185,14 +185,16 @@
|
|||
&:hover {
|
||||
.opacity(1);
|
||||
}
|
||||
}
|
||||
|
||||
a.table-icon {
|
||||
&:before {
|
||||
display: inline-block;
|
||||
content: ' ';
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
position: relative;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
background: transparent url(../images/table-icons.gif) no-repeat;
|
||||
background-position: 0 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?php namespace Cms\Classes;
|
||||
|
||||
use Ini;
|
||||
use Cache;
|
||||
use Config;
|
||||
use Validator;
|
||||
|
|
@ -7,7 +8,6 @@ use SystemException;
|
|||
use ValidationException;
|
||||
use Cms\Classes\ViewBag;
|
||||
use Cms\Classes\CodeBase;
|
||||
use Cms\Classes\FileHelper;
|
||||
use Cms\Twig\Loader as TwigLoader;
|
||||
use Cms\Twig\Extension as CmsTwigExtension;
|
||||
use System\Twig\Extension as SystemTwigExtension;
|
||||
|
|
@ -227,7 +227,7 @@ class CmsCompoundObject extends CmsObject
|
|||
$content = [];
|
||||
|
||||
if ($this->settings) {
|
||||
$content[] = FileHelper::formatIniString($this->settings);
|
||||
$content[] = Ini::render($this->settings);
|
||||
}
|
||||
|
||||
if ($this->code) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ use Lang;
|
|||
use Cache;
|
||||
use Config;
|
||||
use Validator;
|
||||
use Cms\Helpers\File as FileHelper;
|
||||
use ApplicationException;
|
||||
use ValidationException;
|
||||
use RecursiveDirectoryIterator;
|
||||
|
|
|
|||
|
|
@ -16,14 +16,81 @@ class CmsObjectCollection extends CollectionBase
|
|||
* @param string|array $components
|
||||
* @return static
|
||||
*/
|
||||
public function withComponent($components)
|
||||
public function withComponent($components, $callback = null)
|
||||
{
|
||||
return $this->filter(function($object) use ($components) {
|
||||
return $this->filter(function($object) use ($components, $callback) {
|
||||
|
||||
$hasComponent = false;
|
||||
|
||||
foreach ((array) $components as $component) {
|
||||
if ($object->hasComponent($component)) {
|
||||
foreach ((array) $components as $componentName) {
|
||||
|
||||
if (!$callback && $object->hasComponent($componentName)) {
|
||||
$hasComponent = true;
|
||||
}
|
||||
|
||||
if ($callback && ($component = $object->getComponent($componentName))) {
|
||||
$hasComponent = call_user_func($callback, $component) ?: $hasComponent;
|
||||
}
|
||||
}
|
||||
|
||||
return $hasComponent;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns objects whose properties match the supplied value.
|
||||
* @param string $property
|
||||
* @param string $value
|
||||
* @return static
|
||||
*/
|
||||
public function where($property, $value, $strict = true)
|
||||
{
|
||||
return $this->filter(function($object) use ($property, $value, $strict) {
|
||||
|
||||
if (!array_key_exists($property, $object->settings)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $strict
|
||||
? $object->settings[$property] === $value
|
||||
: $object->settings[$property] == $value;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns objects whose component properties match the supplied value.
|
||||
* @param string $property
|
||||
* @param string $value
|
||||
* @return static
|
||||
*/
|
||||
public function whereComponent($components, $property, $value, $strict = false)
|
||||
{
|
||||
return $this->filter(function($object) use ($components, $property, $value, $strict) {
|
||||
|
||||
$hasComponent = false;
|
||||
|
||||
foreach ((array) $components as $componentName) {
|
||||
|
||||
if (!$componentAlias = $object->hasComponent($componentName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$componentSettings = array_get($object->settings, 'components', []);
|
||||
|
||||
if (!array_key_exists($componentAlias, $componentSettings)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$settings = $componentSettings[$componentAlias];
|
||||
|
||||
if (!array_key_exists($property, $settings)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (
|
||||
($strict && $settings[$property] === $value) ||
|
||||
(!$strict && $settings[$property] == $value)
|
||||
) {
|
||||
$hasComponent = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -31,4 +98,5 @@ class CmsObjectCollection extends CollectionBase
|
|||
return $hasComponent;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ class CmsObjectQuery
|
|||
*/
|
||||
public function inTheme($theme)
|
||||
{
|
||||
if (is_string($theme)) {
|
||||
$theme = Theme::load($theme);
|
||||
}
|
||||
|
||||
$this->theme = $theme;
|
||||
return $this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,7 +140,9 @@ abstract class ComponentBase extends Extendable
|
|||
public function renderPartial()
|
||||
{
|
||||
$this->controller->setComponentContext($this);
|
||||
return call_user_func_array([$this->controller, 'renderPartial'], func_get_args());
|
||||
$result = call_user_func_array([$this->controller, 'renderPartial'], func_get_args());
|
||||
$this->controller->setComponentContext(null);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ use Twig_Environment;
|
|||
use Cms\Twig\Loader as TwigLoader;
|
||||
use Cms\Twig\DebugExtension;
|
||||
use Cms\Twig\Extension as CmsTwigExtension;
|
||||
use Cms\Classes\FileHelper as CmsFileHelper;
|
||||
use Cms\Models\MaintenanceSettings;
|
||||
use System\Models\RequestLog;
|
||||
use System\Classes\ErrorHandler;
|
||||
|
|
@ -106,7 +105,7 @@ class Controller
|
|||
/**
|
||||
* @var Cms\Classes\ComponentBase Object of the active component, used internally.
|
||||
*/
|
||||
protected $componentContext;
|
||||
protected $componentContext = null;
|
||||
|
||||
/**
|
||||
* @var array Component partial stack, used internally.
|
||||
|
|
@ -903,7 +902,6 @@ class Controller
|
|||
}
|
||||
|
||||
$this->vars = $vars;
|
||||
$this->componentContext = null;
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
|
@ -1287,7 +1285,7 @@ class Controller
|
|||
* @param ComponentBase $component
|
||||
* @return void
|
||||
*/
|
||||
public function setComponentContext(ComponentBase $component)
|
||||
public function setComponentContext(ComponentBase $component = null)
|
||||
{
|
||||
$this->componentContext = $component;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
use File;
|
||||
use Config;
|
||||
use Backend\Models\UserPreferences;
|
||||
use Carbon\Carbon;
|
||||
|
||||
/**
|
||||
* Represents a file or folder in the Media Library.
|
||||
|
|
@ -48,7 +50,7 @@ class MediaLibraryItem
|
|||
|
||||
/**
|
||||
* @var array Contains a default list of files and directories to ignore.
|
||||
* The list can be customized with the following configuration options:
|
||||
* The list can be customized with the following configuration options:
|
||||
* - cms.storage.media.image_extensions
|
||||
* - cms.storage.media.video_extensions
|
||||
* - cms.storage.media.audo_extensions
|
||||
|
|
@ -129,10 +131,14 @@ class MediaLibraryItem
|
|||
|
||||
/**
|
||||
* Returns the item last modification date as string.
|
||||
* @return string Returns the item last modification date as string.
|
||||
* @return string Returns the item's last modification date as string.
|
||||
*/
|
||||
public function lastModifiedAsString()
|
||||
{
|
||||
return $this->lastModified ? date('M d, Y', $this->lastModified) : null;
|
||||
if (!($date = $this->lastModified)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Carbon::createFromTimestamp($date)->toFormattedDateString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
<?php namespace Cms\Classes;
|
||||
|
||||
use ApplicationException;
|
||||
|
||||
/**
|
||||
* Helper class for processing video and audio tags inserted by the Media Manager.
|
||||
*
|
||||
|
|
@ -80,7 +82,7 @@ class MediaViewHelper
|
|||
|
||||
$controller = Controller::getController();
|
||||
if (!$controller) {
|
||||
throw new Phpr_ApplicationException('Media tags can only be processed for front-end requests.');
|
||||
throw new ApplicationException('Media tags can only be processed for front-end requests.');
|
||||
}
|
||||
|
||||
$partial = Partial::loadCached($controller->getTheme(), $name);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class Page extends CmsCompoundObject
|
|||
|
||||
protected $settingsValidationRules = [
|
||||
'title' => 'required',
|
||||
'url' => ['required', 'regex:/^\/[a-z0-9\/\:_\-\*\[\]\+\?\|\.\^\$]*$/i']
|
||||
'url' => ['required', 'regex:/^\/[a-z0-9\/\:_\-\*\[\]\+\?\|\.\^\\\$]*$/i']
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?php namespace Cms\Classes;
|
||||
|
||||
use Ini;
|
||||
use Str;
|
||||
|
||||
/**
|
||||
|
|
@ -46,7 +47,7 @@ class SectionParser
|
|||
];
|
||||
|
||||
if ($count >= 3) {
|
||||
$result['settings'] = parse_ini_string($sections[0], true);
|
||||
$result['settings'] = Ini::parse($sections[0], true);
|
||||
$result['code'] = $sections[1];
|
||||
|
||||
$result['code'] = preg_replace('/^\s*\<\?php/', '', $result['code']);
|
||||
|
|
@ -56,7 +57,7 @@ class SectionParser
|
|||
$result['markup'] = $sections[2];
|
||||
}
|
||||
elseif ($count == 2) {
|
||||
$result['settings'] = parse_ini_string($sections[0], true);
|
||||
$result['settings'] = Ini::parse($sections[0], true);
|
||||
$result['markup'] = $sections[1];
|
||||
}
|
||||
elseif ($count == 1) {
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ class Index extends Controller
|
|||
|
||||
$this->bodyClass = 'compact-container side-panel-not-fixed';
|
||||
$this->pageTitle = 'cms::lang.cms.menu_label';
|
||||
$this->pageTitleTemplate = '%s CMS';
|
||||
$this->pageTitleTemplate = '%s '.trans($this->pageTitle);
|
||||
|
||||
if (Request::ajax() && Request::input('formWidgetAlias')) {
|
||||
$this->bindFormWidgetToController();
|
||||
|
|
@ -307,6 +307,7 @@ class Index extends Controller
|
|||
$partial = ComponentPartial::load($componentObj, 'default');
|
||||
$content = $partial->getContent();
|
||||
$content = str_replace('__SELF__', $alias, $content);
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
|
|
@ -328,7 +329,7 @@ class Index extends Controller
|
|||
'partial' => '\Cms\Classes\Partial',
|
||||
'layout' => '\Cms\Classes\Layout',
|
||||
'content' => '\Cms\Classes\Content',
|
||||
'asset' => '\Cms\Classes\Asset',
|
||||
'asset' => '\Cms\Classes\Asset'
|
||||
];
|
||||
|
||||
if (!array_key_exists($type, $types)) {
|
||||
|
|
@ -392,7 +393,7 @@ class Index extends Controller
|
|||
'partial' => '~/modules/cms/classes/partial/fields.yaml',
|
||||
'layout' => '~/modules/cms/classes/layout/fields.yaml',
|
||||
'content' => '~/modules/cms/classes/content/fields.yaml',
|
||||
'asset' => '~/modules/cms/classes/asset/fields.yaml',
|
||||
'asset' => '~/modules/cms/classes/asset/fields.yaml'
|
||||
];
|
||||
|
||||
if (!array_key_exists($type, $formConfigs)) {
|
||||
|
|
@ -427,7 +428,7 @@ class Index extends Controller
|
|||
throw new ApplicationException(trans('cms::lang.component.invalid_request'));
|
||||
}
|
||||
|
||||
for ($index = 0; $index < $count; $index ++) {
|
||||
for ($index = 0; $index < $count; $index++) {
|
||||
$componentName = $componentNames[$index];
|
||||
$componentAlias = $componentAliases[$index];
|
||||
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ class Themes extends Controller
|
|||
/**
|
||||
* Add form fields defined in theme.yaml
|
||||
*/
|
||||
protected function formExtendFields($form)
|
||||
public function formExtendFields($form)
|
||||
{
|
||||
$model = $form->model;
|
||||
$theme = $this->findThemeObject($model->theme);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<?php namespace Cms\Classes;
|
||||
<?php namespace Cms\Helpers;
|
||||
|
||||
/**
|
||||
* Defines some file-system helpers for the CMS system.
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
* @package october\system
|
||||
* @author Alexey Bobkov, Samuel Georges
|
||||
*/
|
||||
class FileHelper
|
||||
class File
|
||||
{
|
||||
/**
|
||||
* Validates a CMS object file or directory name.
|
||||
|
|
@ -68,48 +68,4 @@ class FileHelper
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats an INI file string from an array
|
||||
* @param array $data Data to format.
|
||||
* @param int $level Specifies the level of array value.
|
||||
* @return string Returns the INI file string.
|
||||
*/
|
||||
public static function formatIniString($data, $level = 1)
|
||||
{
|
||||
$content = null;
|
||||
$sections = [];
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
if ($level == 1) {
|
||||
$sections[$key] = self::formatIniString($value, $level+1);
|
||||
}
|
||||
else {
|
||||
foreach ($value as $val) {
|
||||
$content .= $key.'[] = "'.self::escapeIniString($val).'"'.PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (strlen($value)) {
|
||||
$content .= $key.' = "'.self::escapeIniString($value).'"'.PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($sections as $key => $section) {
|
||||
$content .= PHP_EOL.'['.$key.']'.PHP_EOL.$section.PHP_EOL;
|
||||
}
|
||||
|
||||
return trim($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes a string for saving in INI format
|
||||
* @param string $string Specifies the string to escape
|
||||
* @return string Returns the processed string
|
||||
*/
|
||||
public static function escapeIniString($string)
|
||||
{
|
||||
return str_replace('"', '\"', $string);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,300 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'cms_object' => [
|
||||
'invalid_file' => 'Invalid file name: :name. File names can contain only alphanumeric symbols, underscores, dashes and dots. Some examples of correct file names: page.htm, page, subdirectory/page',
|
||||
'invalid_property' => "Parametr ':name' není možno nastavit",
|
||||
'file_already_exists' => "Soubor ':name' již existuje.",
|
||||
'error_saving' => "Chyba ukládání souboru ':name'. Zkontrolujte práva k zápisu.",
|
||||
'error_creating_directory' => 'Chyba vytváření složky :name. Zkontrolujte práva k zápisu.',
|
||||
'invalid_file_extension'=>'Chybná přípona souboru: :invalid. Povolené přípony jsou: :allowed.',
|
||||
'error_deleting' => "Chyba mazání souboru s šablonou ':name'. Zkontrolujte práva k zápisu.",
|
||||
'delete_success' => 'Šablony úspěšně smazány: :count.',
|
||||
'file_name_required' => 'Je nutno vyplnit Název souboru.'
|
||||
],
|
||||
'theme' => [
|
||||
'not_found_name' => "Téma ':name' nebylo nalezeno.",
|
||||
'active' => [
|
||||
'not_set' => 'Aktivní téma nebylo nastaveno.',
|
||||
'not_found' => 'Aktivní téma nebylo nalezeno.'
|
||||
],
|
||||
'edit' => [
|
||||
'not_set' => 'Editované téma nebylo uloženo.',
|
||||
'not_found' => 'Editované téma nebylo nalezeno.',
|
||||
'not_match' => "Objekt který chcete právě zobrazit nepatří do téma, které nyní editujete. Prosím obnovte stránku."
|
||||
],
|
||||
'settings_menu' => 'Témata vzhledu',
|
||||
'settings_menu_description' => 'Náhledy instalovaných témat a výběr aktivního téma.',
|
||||
'default_tab' => 'Parametry',
|
||||
'name_label' => 'Název',
|
||||
'name_create_placeholder' => 'Název nového téma',
|
||||
'author_label' => 'Autor',
|
||||
'author_placeholder' => 'Jméno osoby, nebo firmy',
|
||||
'description_label' => 'Popisek',
|
||||
'description_placeholder' => 'Popište svoje téma',
|
||||
'homepage_label' => 'Domovská stránka',
|
||||
'homepage_placeholder' => 'URL domovské stránky',
|
||||
'code_label' => 'Kód',
|
||||
'code_placeholder' => 'Unikátní kód téma pro distribuci aktualizační sítí',
|
||||
'dir_name_label' => 'Název složky',
|
||||
'dir_name_create_label' => 'Název cílové složky pro uložení téma',
|
||||
'theme_label' => 'Téma',
|
||||
'theme_title' => 'Téma',
|
||||
'activate_button' => 'Aktivovat',
|
||||
'active_button' => 'Aktivní',
|
||||
'customize_theme' => 'Přizpůsobení téma',
|
||||
'customize_button' => 'Přizpůsobit',
|
||||
'duplicate_button' => 'Duplikovat',
|
||||
'duplicate_title' => 'Duplikovat téma',
|
||||
'duplicate_theme_success' => 'Duplikace téma byla úspěšná!',
|
||||
'manage_button' => 'Správa téma',
|
||||
'manage_title' => 'Správa témat',
|
||||
'edit_properties_title' => 'Téma',
|
||||
'edit_properties_button' => 'Nastavit',
|
||||
'save_properties' => 'Uložit nastavení',
|
||||
'import_button' => 'Importovat',
|
||||
'import_title' => 'Importovat téma',
|
||||
'import_theme_success' => 'Téma úspěšně importováno!',
|
||||
'import_uploaded_file' => 'Soubor s tématem',
|
||||
'import_overwrite_label' => 'Přepsat existující soubory',
|
||||
'import_overwrite_comment' => 'Odškrtněte tento box pokud chcete importovat pouze nové soubory.',
|
||||
'import_folders_label' => 'Složky',
|
||||
'import_folders_comment' => 'Vyberte prosím složky, které chcete importovat',
|
||||
'export_button' => 'Exportovat',
|
||||
'export_title' => 'Exportovat téma',
|
||||
'export_folders_label' => 'Složky',
|
||||
'export_folders_comment' => 'Vyberte prosím složky, které chcete exportovat',
|
||||
'delete_button' => 'Smazat',
|
||||
'delete_confirm' => 'Jste si jistí, že chcete smazat toto téma? Tuto akci nelze vrátit zpět!',
|
||||
'delete_active_theme_failed' => 'Nelze smazat aktivní téma. Nejdříve aktivujte jiné téma.',
|
||||
'delete_theme_success' => 'Téma úspěšně smazáno!',
|
||||
'create_title' => 'Vytvořit téma',
|
||||
'create_button' => 'Vytvořit',
|
||||
'create_new_blank_theme' => 'Vytvořit nové čisté téma',
|
||||
'create_theme_success' => 'Téma úspěšně vytvořeno!',
|
||||
'create_theme_required_name' => 'Napište jméno pro nové téma.',
|
||||
'new_directory_name_label' => 'Složka téma',
|
||||
'new_directory_name_comment' => 'Zadejte název nové složky pro duplikaci téma.',
|
||||
'dir_name_invalid' => 'Název může obsahovat pouze čísla, písmena a následující symboly: _-',
|
||||
'dir_name_taken' => 'Tato složka s tématem již existuje.',
|
||||
'find_more_themes' => 'Vyhledat více témat',
|
||||
'saving' => 'Ukládám téma...',
|
||||
'return' => 'Zpět na seznam témat',
|
||||
],
|
||||
'maintenance' => [
|
||||
'settings_menu' => 'Režim údržby',
|
||||
'settings_menu_description' => 'Nastavte stránku režimu údržby a její nastavení.',
|
||||
'is_enabled' => 'Aktivovat režim údržby',
|
||||
'is_enabled_comment' => 'Pokud je režim údržby aktivní, uživatelé uvidí stránku vybranou níže.'
|
||||
],
|
||||
'page' => [
|
||||
'not_found_name' => "Stránka ':name' nebyla nalezena",
|
||||
'not_found' => [
|
||||
'label' => 'Stránka nenalezena',
|
||||
'help' => 'Požadovaná stránka nebyla nalezena.'
|
||||
],
|
||||
'custom_error' => [
|
||||
'label' => 'Chyba stránky',
|
||||
'help' => "Omlouváme se, ale požadovaná stránka nelze zobrazit z důvodu nějaké chyby."
|
||||
],
|
||||
'menu_label' => 'Stránky',
|
||||
'unsaved_label' => 'Neuložené stránky',
|
||||
'no_list_records' => 'Žádné stránky',
|
||||
'new' => 'Nová stránka',
|
||||
'invalid_url' => 'Špatný formát URL. URL musí začínat lomítkem a může obsahovat pouze číslice, písmena a následující znaky: ._-[]:?|/+*^$',
|
||||
'delete_confirm_multiple' => 'Opravdu chcete odstranit vybrané stránky?',
|
||||
'delete_confirm_single' => 'Opravdu chcete odstranit tuto stránku?',
|
||||
'no_layout' => '-- žádný layout --'
|
||||
],
|
||||
'layout' => [
|
||||
'not_found_name' => "Layout ':name' nebyl nalezen",
|
||||
'menu_label' => 'Layouty',
|
||||
'unsaved_label' => 'Neuložený layout(y)',
|
||||
'no_list_records' => 'Žádné layouty nebyly nalezeny',
|
||||
'new' => 'Nový layout',
|
||||
'delete_confirm_multiple' => 'Opravdu chcete odstranit vybrané layouty?',
|
||||
'delete_confirm_single' => 'Opravdu chcete odstranit tento layout?'
|
||||
],
|
||||
'partial' => [
|
||||
'not_found_name' => "Dílčí šablona ':name' nebyla nalezena.",
|
||||
'invalid_name' => 'Chybný název dílčí šablony: :name.',
|
||||
'menu_label' => 'Dílčí šablony',
|
||||
'unsaved_label' => 'Neuložené dílčí šablony',
|
||||
'no_list_records' => 'Žádné dílčí šablony',
|
||||
'delete_confirm_multiple' => 'Opravdu chcete smazat tyto dílčí šablony?',
|
||||
'delete_confirm_single' => 'Opravdu chcete smazat tuto dílčí šablonu?',
|
||||
'new' => 'Nová šablona'
|
||||
],
|
||||
'content' => [
|
||||
'not_found_name' => "Obsahový soubor ':name' nebyl nalezen.",
|
||||
'menu_label' => 'Obsahy',
|
||||
'unsaved_label' => 'Neuložený obsah',
|
||||
'no_list_records' => 'Žádné obsahové soubory',
|
||||
'delete_confirm_multiple' => 'Opravdu chcete smazat tyto obsahové soubory nebo složky?',
|
||||
'delete_confirm_single' => 'Opravdu chcete smazat tento obsahový soubor?',
|
||||
'new' => 'Žádný obsahový soubor'
|
||||
],
|
||||
'ajax_handler' => [
|
||||
'invalid_name' => 'Invalid AJAX handler name: :name.',
|
||||
'not_found' => "AJAX handler ':name' was not found."
|
||||
],
|
||||
'cms' => [
|
||||
'menu_label' => 'CMS'
|
||||
],
|
||||
'sidebar' => [
|
||||
'add' => 'Přidat',
|
||||
'search' => 'Hledat...'
|
||||
],
|
||||
'editor' => [
|
||||
'settings' => 'Nastavení',
|
||||
'title' => 'Název souboru',
|
||||
'new_title' => 'Nový název souboru',
|
||||
'url' => 'URL',
|
||||
'filename' => 'Název souboru',
|
||||
'layout' => 'Layout',
|
||||
'description' => 'Popisek',
|
||||
'preview' => 'Náhled',
|
||||
'meta' => 'Meta údaje',
|
||||
'meta_title' => 'Meta Title',
|
||||
'meta_description' => 'Meta Description',
|
||||
'markup' => 'Markup',
|
||||
'code' => 'PHP kód',
|
||||
'content' => 'Obsah',
|
||||
'hidden' => 'Skrytý',
|
||||
'hidden_comment' => 'Skryté stránky jsou dostupné pouze přihlášeným administrátorům pro náhled.',
|
||||
'enter_fullscreen' => 'Zapnout režim celé obrazovky',
|
||||
'exit_fullscreen' => 'Opustit režim celé obrazovky'
|
||||
],
|
||||
'asset' => [
|
||||
'menu_label' => 'Soubory',
|
||||
'unsaved_label' => 'Neuložené soubory',
|
||||
'drop_down_add_title' => 'Přidat...',
|
||||
'drop_down_operation_title' => 'Akce...',
|
||||
'upload_files' => 'Nahrát soubor(y)',
|
||||
'create_file' => 'Vytvořit soubor',
|
||||
'create_directory' => 'Vytvořit složku',
|
||||
'directory_popup_title' => 'Vytvoření nové složky',
|
||||
'directory_name' => 'Název složky',
|
||||
'rename' => 'Přejmenovat',
|
||||
'delete' => 'Smazat',
|
||||
'move' => 'Přesunout',
|
||||
'select' => 'Vybrat',
|
||||
'new' => 'Nový soubor',
|
||||
'rename_popup_title' => 'Přejmenovat',
|
||||
'rename_new_name' => 'Nový název',
|
||||
'invalid_path' => 'Cesta může obsahovat pouze číslice, písmena, mezery nebo následující znaky: ._-/',
|
||||
'error_deleting_file' => 'Chyba mazání souboru :name.',
|
||||
'error_deleting_dir_not_empty' => 'Chyba mazání složky :name. Složka není prázdná.',
|
||||
'error_deleting_dir' => 'Chyba mazání souboru :name.',
|
||||
'invalid_name' => 'Název může obsahovat pouze číslice, písmena, mezery a následující soubory: ._-',
|
||||
'original_not_found' => 'Původní soubor nebo složka neexistují',
|
||||
'already_exists' => 'Soubor nebo složka s tímto názvem již existují',
|
||||
'error_renaming' => 'Chyba přejmenovávání souboru nebo složky',
|
||||
'name_cant_be_empty' => 'Název nemůže být prázdný',
|
||||
'too_large' => 'Nahrávaný soubor je příliš veliký. Maximální povolená velikost je :max_size',
|
||||
'type_not_allowed' => 'Je možno nahrávat pouze tyto typy souborů: :allowed_types',
|
||||
'file_not_valid' => 'Soubor není validní',
|
||||
'error_uploading_file' => "Chyba nahrávání souboru ':name': :error",
|
||||
'move_please_select' => 'prosím vyberte',
|
||||
'move_destination' => 'Cílová složka',
|
||||
'move_popup_title' => 'Přesunutí souborů',
|
||||
'move_button' => 'Přesunout',
|
||||
'selected_files_not_found' => 'Vybrané soubory nebyly nalezeny',
|
||||
'select_destination_dir' => 'Vyberte cílovou složku',
|
||||
'destination_not_found' => 'Cílová složka nebyla nalezena',
|
||||
'error_moving_file' => 'Chyba přesunu souboru :file',
|
||||
'error_moving_directory' => 'Chyba přesunu složky :dir',
|
||||
'error_deleting_directory' => 'Chyba přesunu původní složky :dir',
|
||||
'path' => 'Cesta'
|
||||
],
|
||||
'component' => [
|
||||
'menu_label' => 'Komponenty',
|
||||
'unnamed' => 'Bez jména',
|
||||
'no_description' => 'Popis nevyplněn',
|
||||
'alias' => 'Alias',
|
||||
'alias_description' => 'Unikátní název komponenty pro použití ve stránkách, nebo kodéch layoutu.',
|
||||
'validation_message' => 'Alias komponenty je povinný a může obsahovat pouze písmena, čísla a podtržítka. Alias by měl začínat písmenem.',
|
||||
'invalid_request' => 'Šablona nemohla být uložena, protože jedna z komponent nemá správně vyplněná data.',
|
||||
'no_records' => 'Žádná komponenta',
|
||||
'not_found' => "Komponenta ':name' nebyla nalezena.",
|
||||
'method_not_found' => "Komponenta ':name' nemá metodu ':method'."
|
||||
],
|
||||
'template' => [
|
||||
'invalid_type' => 'Neznámý typ šablony.',
|
||||
'not_found' => 'Požadovaná šablona nebyla nalezena.',
|
||||
'saved'=> 'Šablona byla úspěšně uložena.'
|
||||
],
|
||||
'permissions' => [
|
||||
'name' => 'Cms',
|
||||
'manage_content' => 'Správa obsahu',
|
||||
'manage_assets' => 'Správa souborů',
|
||||
'manage_pages' => 'Správa stránek',
|
||||
'manage_layouts' => 'Správa layoutů',
|
||||
'manage_partials' => 'Správa dílčích šablon',
|
||||
'manage_themes' => 'Správa témat',
|
||||
'manage_media' => 'Správa médií'
|
||||
],
|
||||
'mediafinder' => [
|
||||
'default_prompt' => 'Klikněte na tlačítko %s pro hledání souboru'
|
||||
],
|
||||
'media' => [
|
||||
'invalid_path' => "Chybně zadaná cesta: ':path'.",
|
||||
'menu_label' => 'Media',
|
||||
'upload' => 'Nahrát',
|
||||
'move' => 'Přesunout',
|
||||
'delete' => 'Smazat',
|
||||
'add_folder' => 'Přidat složku',
|
||||
'search' => 'Vyhledat',
|
||||
'display' => 'Zobrazit',
|
||||
'filter_everything' => 'Vše',
|
||||
'filter_images' => 'Obrázky',
|
||||
'filter_video' => 'Video',
|
||||
'filter_audio' => 'Audio',
|
||||
'filter_documents' => 'Dokumenty',
|
||||
'library' => 'Knihovna',
|
||||
'folder_size_items' => 'soubor(ů)',
|
||||
'size' => 'Velikost',
|
||||
'title' => 'Název',
|
||||
'last_modified' => 'Naposledy upraveno',
|
||||
'public_url' => 'Veřejná URL',
|
||||
'click_here' => 'Klikněte zde',
|
||||
'thumbnail_error' => 'Chyba generování náhledu.',
|
||||
'return_to_parent' => 'Zpět do nadřazené složky',
|
||||
'return_to_parent_label' => 'Go up ..',
|
||||
'nothing_selected' => 'Nic nevybráno.',
|
||||
'multiple_selected' => 'Vybráno více položek.',
|
||||
'uploading_file_num' => 'Nahrávám :number soubor(y)...',
|
||||
'uploading_complete' => 'Nahrávání kompletní',
|
||||
'order_by' => 'Seřadit dle',
|
||||
'folder' => 'Složka',
|
||||
'no_files_found' => 'No files found by your request.',
|
||||
'delete_empty' => 'Vyberte položky ke smazání.',
|
||||
'delete_confirm' => 'Opravu chcete smazat vybrané položky?',
|
||||
'error_renaming_file' => 'Přejmenování se nezdařilo.',
|
||||
'new_folder_title' => 'Nová složka',
|
||||
'folder_name' => 'Název složky',
|
||||
'error_creating_folder' => 'Chyba vytváření složky',
|
||||
'folder_or_file_exist' => 'A folder or file with the specified name already exists.',
|
||||
'move_empty' => 'Vyberte položky k přesunutí.',
|
||||
'move_popup_title' => 'Přesun souborů nebo složek',
|
||||
'move_destination' => 'Cílová složka',
|
||||
'please_select_move_dest' => 'Prosím vyberte cílovou složku.',
|
||||
'move_dest_src_match' => 'Prosím vyberte jinou cílovou složku.',
|
||||
'empty_library' => 'Knihovna médií je prázdná. Nahrajte prosím soubory, nebo vytvořte složky.',
|
||||
'insert' => 'Vložit',
|
||||
'crop_and_insert' => 'Oříznout & vložit',
|
||||
'select_single_image' => 'Prosím vyberte pouze jeden obrázek.',
|
||||
'selection_not_image' => 'Vybraná položka není obrázek.',
|
||||
'restore' => 'Zpět všechny změny',
|
||||
'resize' => 'Změnit velikost...',
|
||||
'selection_mode_normal' => 'Normální',
|
||||
'selection_mode_fixed_ratio' => 'Pevný poměr stran',
|
||||
'selection_mode_fixed_size' => 'Pevná velikost',
|
||||
'height' => 'Výška',
|
||||
'width' => 'Šířka',
|
||||
'selection_mode' => 'Selection mode',
|
||||
'resize_image' => 'Změna rozměrů obrázku',
|
||||
'image_size' => 'Velikost obrázku:',
|
||||
'selected_size' => 'Vybrané:'
|
||||
]
|
||||
];
|
||||
|
|
@ -253,7 +253,6 @@ return [
|
|||
'uploading_file_num' => 'Lade :number Datei(en)...',
|
||||
'uploading_complete' => 'Upload vollständig',
|
||||
'order_by' => 'Sortieren nach',
|
||||
'search' => 'Suchen',
|
||||
'folder' => 'Ordner',
|
||||
'no_files_found' => 'Keine entsprechenden Dateien gefunden.',
|
||||
'delete_empty' => 'Bitte Wählen Sie Dateien zum Löschen aus.',
|
||||
|
|
|
|||
|
|
@ -263,7 +263,6 @@ return [
|
|||
'uploading_file_num' => 'Ανέβασμα :number αρχείων...',
|
||||
'uploading_complete' => 'Το ανέβασμα ολοκληρώθηκε',
|
||||
'order_by' => 'Ταξινόμηση κατά',
|
||||
'search' => 'Αναζήτηση',
|
||||
'folder' => 'Κατάλογος',
|
||||
'no_files_found' => 'Δεν βρέθηκαν αρχεία από το αίτημα σας.',
|
||||
'delete_empty' => 'παρακαλούμε επιλέξτε αντικείμενά για να τα σβήσετε.',
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'Uploading :number file(s)...',
|
||||
'uploading_complete' => 'Upload complete',
|
||||
'order_by' => 'Order by',
|
||||
'search' => 'Search',
|
||||
'folder' => 'Folder',
|
||||
'no_files_found' => 'No files found by your request.',
|
||||
'delete_empty' => 'Please select items to delete.',
|
||||
|
|
|
|||
|
|
@ -256,7 +256,6 @@ return [
|
|||
'uploading_file_num' => 'Subiendo :number archivo(s)...',
|
||||
'uploading_complete' => 'Subida completada',
|
||||
'order_by' => 'Ordenar por',
|
||||
'search' => 'Buscar',
|
||||
'folder' => 'Carpeta',
|
||||
'no_files_found' => 'No se han encontrado archivos.',
|
||||
'delete_empty' => 'Por favor, selecciona los elementos que quieres eliminar.',
|
||||
|
|
|
|||
|
|
@ -231,7 +231,11 @@ return [
|
|||
'manage_pages' => 'مدیریت صفحات',
|
||||
'manage_layouts' => 'مدیریت طرح بندی ها',
|
||||
'manage_partials' => 'مدیریت بخش ها',
|
||||
'manage_themes' => 'مدیریت قالب ها'
|
||||
'manage_themes' => 'مدیریت قالب ها',
|
||||
'manage_media' => 'مدیریت چند رسانه ها'
|
||||
],
|
||||
'mediafinder' => [
|
||||
'default_prompt' => '%s را جهت انتخاب فایل چند رسانه ای انتخاب کنید'
|
||||
],
|
||||
'media' => [
|
||||
'invalid_path' => "آدرس فایل ':path' معتبر نیست.",
|
||||
|
|
@ -262,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'ارسال :number فایل(ها)...',
|
||||
'uploading_complete' => 'ارسال انجام شد',
|
||||
'order_by' => 'مرتب سازی با',
|
||||
'search' => 'جستجو',
|
||||
'folder' => 'پوشه',
|
||||
'no_files_found' => 'فایلی با درخواست شما یافت نشد',
|
||||
'delete_empty' => 'لطفا موارد را جهت حذف انتخاب نمایید',
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'Téléchargement de :number fichier(s)…',
|
||||
'uploading_complete' => 'Téléchargement complet',
|
||||
'order_by' => 'Trier par',
|
||||
'search' => 'Rechercher',
|
||||
'folder' => 'Répertoire',
|
||||
'no_files_found' => 'Aucun fichier trouvé.',
|
||||
'delete_empty' => 'Sélectionner les articles à supprimer.',
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'Feltöltve :number fájl...',
|
||||
'uploading_complete' => 'Feltöltés sikeresen befejezve',
|
||||
'order_by' => 'Rendezés',
|
||||
'search' => 'Keresés',
|
||||
'folder' => 'Könyvtárak',
|
||||
'no_files_found' => 'Nem található fájl a lekérésben.',
|
||||
'delete_empty' => 'Kérjük, válassza ki a törölni kívánt fájlokat.',
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'Caricamento in corso di :number file(s)...',
|
||||
'uploading_complete' => 'Caricamento completato',
|
||||
'order_by' => 'Ordina per',
|
||||
'search' => 'Cerca',
|
||||
'folder' => 'Cartella',
|
||||
'no_files_found' => 'Nessun file corrisponde alla tua richiesta.',
|
||||
'delete_empty' => 'Seleziona elementi da eliminare.',
|
||||
|
|
|
|||
|
|
@ -258,7 +258,6 @@ return [
|
|||
'uploading_file_num' => 'Laster opp :number fil(er)...',
|
||||
'uploading_complete' => 'Opplasting fullført',
|
||||
'order_by' => 'Sorter etter',
|
||||
'search' => 'Søk',
|
||||
'folder' => 'Mappe',
|
||||
'no_files_found' => 'Ingen filer ble funnet.',
|
||||
'delete_empty' => 'Ingen filer er valgt.',
|
||||
|
|
|
|||
|
|
@ -7,35 +7,95 @@ return [
|
|||
'file_already_exists' => 'Bestand ":name" bestaat al.',
|
||||
'error_saving' => 'Bestand opslaan mislukt: ":name". Controleer de schrijfrechten.',
|
||||
'error_creating_directory' => 'Map aanmaken mislukt: ":name". Controleer de schrijfrechten.',
|
||||
'invalid_file_extension'=>'Ongeldige bestandsextensie: :invalid. Toegestane extensies zijn: :allowed.',
|
||||
'invalid_file_extension' => 'Ongeldige bestandsextensie: :invalid. Toegestane extensies zijn: :allowed.',
|
||||
'error_deleting' => 'Fout bij het verwijderen van template: ":name". Controleer de schrijfrechten.',
|
||||
'delete_success' => 'Templates zijn succesvol verwijderd: :count.',
|
||||
'file_name_required' => 'Het invullen van een bestandsnaam is verplicht.'
|
||||
],
|
||||
'theme' => [
|
||||
'not_found_name' => 'Het thema \':name\' is niet gevonden.',
|
||||
'active' => [
|
||||
'not_set' => "Er is geen actief thema geselecteerd.",
|
||||
'not_found' => "Het actieve thema is niet gevonden.",
|
||||
'not_set' => 'Er is geen actief thema geselecteerd.',
|
||||
'not_found' => 'Het actieve thema is niet gevonden.',
|
||||
],
|
||||
'edit' => [
|
||||
'not_set' => "Er is geen thema ingesteld om te kunnen bewerken.",
|
||||
'not_found' => "Het te bewerken thema is niet gevonden.",
|
||||
'not_match' => "Het object dat je probeert te openen behoort niet tot het te bewerken thema. Herlaad de pagina."
|
||||
'not_set' => 'Er is geen thema ingesteld om te kunnen bewerken.',
|
||||
'not_found' => 'Het te bewerken thema is niet gevonden.',
|
||||
'not_match' => 'Het object dat je probeert te openen behoort niet tot het te bewerken thema. Herlaad de pagina.'
|
||||
],
|
||||
'settings_menu' => 'Front-end thema',
|
||||
'settings_menu_description' => 'Bekijk de lijst met geïnstalleerde themas en selecteer een beschikbaar thema.',
|
||||
'settings_menu_description' => 'Bekijk de lijst met geïnstalleerde thema\'s en selecteer een beschikbaar thema.',
|
||||
'find_more_themes' => 'Vind meer thema\'s op de OctoberCMS thema marktplaats.',
|
||||
'activate_button' => 'Activeer',
|
||||
'active_button' => 'Activeer',
|
||||
'default_tab' => 'Eigenschappen',
|
||||
'name_label' => 'Naam',
|
||||
'name_create_placeholder' => 'Thema naam',
|
||||
'author_label' => 'Auteur',
|
||||
'author_placeholder' => 'Naam of bedrijfsnaam',
|
||||
'description_label' => 'Omschrijving',
|
||||
'description_placeholder' => 'Thema omschrijving',
|
||||
'homepage_label' => 'Website',
|
||||
'homepage_placeholder' => 'Website URL',
|
||||
'code_label' => 'Code',
|
||||
'code_placeholder' => 'Een unieke code voor dit thema (wordt gebruikt voor distributie)',
|
||||
'dir_name_label' => 'Mapnaam',
|
||||
'dir_name_create_label' => 'Mapnaam van het thema',
|
||||
'theme_label' => 'Thema',
|
||||
'theme_title' => 'Thema\'s',
|
||||
'customize_theme' => 'Thema aanpassen',
|
||||
'customize_button' => 'Aanpassen',
|
||||
'duplicate_button' => 'Dupliceren',
|
||||
'duplicate_title' => 'Dupliceer thema',
|
||||
'duplicate_theme_success' => 'Thema succesvol gedupliceerd!',
|
||||
'manage_button' => 'Beheer',
|
||||
'manage_title' => 'Beheer thema',
|
||||
'edit_properties_title' => 'Thema',
|
||||
'edit_properties_button' => 'Wijzig eigenschappen',
|
||||
'save_properties' => 'Eigenschappen opslaan',
|
||||
'import_button' => 'Importeren',
|
||||
'import_title' => 'Importeer thema',
|
||||
'import_theme_success' => 'Thema succesvol geïmporteerd!',
|
||||
'import_uploaded_file' => 'Thema archiefbestand',
|
||||
'import_overwrite_label' => 'Overschijf bestaande bestanden',
|
||||
'import_overwrite_comment' => 'Untick this box to only import new files',
|
||||
'import_folders_label' => 'Mappen',
|
||||
'import_folders_comment' => 'Selecteer de mappen die je wilt importeren:',
|
||||
'export_button' => 'Exporteren',
|
||||
'export_title' => 'Exporteer thema',
|
||||
'export_folders_label' => 'Mappen',
|
||||
'export_folders_comment' => 'Selecteer de mappen die je wilt exporteren:',
|
||||
'delete_button' => 'Verwijderen',
|
||||
'delete_confirm' => 'Weet je zeker dat je dit thema wilt verwijderen? Dit kan niet ongedaan worden gemaakt!',
|
||||
'delete_active_theme_failed' => 'Kan het actieve thema niet verwijderen, maak eerst een ander thema actief.',
|
||||
'delete_theme_success' => 'Thema succesvol verwijderd!',
|
||||
'create_title' => 'Thema aanmaken',
|
||||
'create_button' => 'Aanmaken',
|
||||
'create_new_blank_theme' => 'Maak een nieuw leeg thema',
|
||||
'create_theme_success' => 'Thema succesvol aangemaakt!',
|
||||
'create_theme_required_name' => 'Geef a.u.b. een naam op voor dit thema.',
|
||||
'new_directory_name_label' => 'Thema mapnaam',
|
||||
'new_directory_name_comment' => 'Geef een nieuwe mapnaam op voor het gedupliceerde thema.',
|
||||
'dir_name_invalid' => 'Naam mag alleen cijfers, letters en de volgende symbolen bevatten: _-',
|
||||
'dir_name_taken' => 'Opgegeven mapnaam bestaat reeds.',
|
||||
'saving' => 'Thema opslaan...',
|
||||
'return' => 'Terug naar thema lijst',
|
||||
],
|
||||
'maintenance' => [
|
||||
'settings_menu' => 'Onderhoudsmodus',
|
||||
'settings_menu_description' => 'Instellingen voor de onderhoudsmodus pagina.',
|
||||
'is_enabled' => 'Onderhoudsmodus inschakelen',
|
||||
'is_enabled_comment' => 'Toon de volgende pagina als onderhoudsmodus is ingeschakeld:'
|
||||
],
|
||||
'page' => [
|
||||
'not_found_name' => 'De pagina \':name\' is niet gevonden.',
|
||||
'not_found' => [
|
||||
'label' => "Pagina niet gevonden",
|
||||
'help' => "De opgevraagde pagina kan niet worden gevonden.",
|
||||
'label' => 'Pagina niet gevonden',
|
||||
'help' => 'De opgevraagde pagina kan niet worden gevonden.',
|
||||
],
|
||||
'custom_error' => [
|
||||
'label' => "Paginafout",
|
||||
'help' => "Onze excuses, er is iets mis gegaan. De opgevraagde pagina kan niet worden getoond.",
|
||||
'label' => 'Paginafout',
|
||||
'help' => 'Onze excuses, er is iets mis gegaan. De opgevraagde pagina kan niet worden getoond.',
|
||||
],
|
||||
'menu_label' => 'Pagina\'s',
|
||||
'no_list_records' => 'Geen pagina\'s gevonden',
|
||||
|
|
@ -43,39 +103,43 @@ return [
|
|||
'invalid_url' => 'Ongeldig URL formaat. De URL moet beginnen met een schuine streep en mag enkel bestaan uit letters, cijfers en de volgende tekens: ._-[]:?|/+*^$',
|
||||
'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde pagina\'s wilt verwijderen?',
|
||||
'delete_confirm_single' => 'Weet je zeker dat je deze pagina wilt verwijderen?',
|
||||
'no_layout' => '-- geen layout --'
|
||||
'no_layout' => '-- geen layout --',
|
||||
'unsaved_label' => 'Niet opgeslagen pagina\'s',
|
||||
],
|
||||
'layout' => [
|
||||
'unsaved_label' => 'Niet opgeslagen layouts',
|
||||
'not_found_name' => "De layout ':name' is niet gevonden",
|
||||
'menu_label' => 'Layouts',
|
||||
'no_list_records' => 'Geen layouts gevonden',
|
||||
'new' => 'Nieuwe layout',
|
||||
'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde layouts wilt verwijderen?',
|
||||
'delete_confirm_single' => 'Weet je zeker dat je deze layout wilt verwijderen?'
|
||||
'delete_confirm_single' => 'Weet je zeker dat je deze layout wilt verwijderen?',
|
||||
],
|
||||
'partial' => [
|
||||
'not_found_name' => "Het sjabloon (partial) ':name' is niet gevonden.",
|
||||
'invalid_name' => "Ongeldige naam voor sjabloon (partial): :name.",
|
||||
'unsaved_label' => 'Niet opgeslagen sjablonen',
|
||||
'not_found_name' => 'Het sjabloon (partial) \':name\' is niet gevonden.',
|
||||
'invalid_name' => 'Ongeldige naam voor sjabloon (partial): :name.',
|
||||
'menu_label' => 'Sjablonen',
|
||||
'no_list_records' => 'Geen sjablonen (partial) gevonden',
|
||||
'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde sjablonen wilt verwijderen?',
|
||||
'delete_confirm_single' => 'Weet je zeker dat je dit sjabloon wilt verwijderen?',
|
||||
'new' => 'Nieuw sjabloon'
|
||||
'new' => 'Nieuw sjabloon',
|
||||
],
|
||||
'content' => [
|
||||
'unsaved_label' => 'Niet opgeslagen tekstblokken',
|
||||
'not_found_name' => "Het tekstblok (content) ':name' is niet gevonden.",
|
||||
'menu_label' => 'Tekstblokken',
|
||||
'no_list_records' => 'Geen tekstblokken (content) gevonden',
|
||||
'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde tekstblokken of mappen wilt verwijderen?',
|
||||
'delete_confirm_single' => 'Weet je zeker dat je dit tekstblok wilt verwijderen?',
|
||||
'new' => 'Nieuw tekstblok'
|
||||
'new' => 'Nieuw tekstblok',
|
||||
],
|
||||
'ajax_handler' => [
|
||||
'invalid_name' => "Ongeldige AJAX handlernaam: :name.",
|
||||
'not_found' => "AJAX handler ':name' is niet gevonden.",
|
||||
'invalid_name' => 'Ongeldige AJAX handlernaam: :name.',
|
||||
'not_found' => 'AJAX handler \':name\' is niet gevonden.',
|
||||
],
|
||||
'cms' => [
|
||||
'menu_label' => "CMS"
|
||||
'menu_label' => 'CMS'
|
||||
],
|
||||
'sidebar' => [
|
||||
'add' => 'Toevoegen',
|
||||
|
|
@ -102,7 +166,8 @@ return [
|
|||
'exit_fullscreen' => 'Volledig scherm afsluiten',
|
||||
],
|
||||
'asset' => [
|
||||
'menu_label' => "Middelen",
|
||||
'menu_label' => 'Middelen',
|
||||
'unsaved_label' => 'Niet opgeslagen middelen',
|
||||
'drop_down_add_title' => 'Toevoegen...',
|
||||
'drop_down_operation_title' => 'Actie...',
|
||||
'upload_files' => 'Bestand(en) uploaden',
|
||||
|
|
@ -140,31 +205,96 @@ return [
|
|||
'error_moving_file' => 'Fout bij verplaatsen bestand :file',
|
||||
'error_moving_directory' => 'Fout bij verplaatsen map :dir',
|
||||
'error_deleting_directory' => 'Fout bij het verwijderen van de oorspronkelijke map :dir',
|
||||
'path' => 'Pad'
|
||||
'path' => 'Pad',
|
||||
],
|
||||
'component' => [
|
||||
'menu_label' => "Componenten",
|
||||
'unnamed' => "Naamloos",
|
||||
'no_description' => "Geen beschrijving opgegeven",
|
||||
'alias' => "Alias",
|
||||
'alias_description' => "Een unieke naam voor dit component voor gebruik in de code van een pagina of layout.",
|
||||
'validation_message' => "Een alias voor het component is verplicht en mag alleen bestaan uit letters, cijfers en underscores. De alias moet beginnen met een letter.",
|
||||
'invalid_request' => "De template kan niet worden opgeslagen vanwege ongeldige componentgegevens.",
|
||||
'menu_label' => 'Componenten',
|
||||
'unnamed' => 'Naamloos',
|
||||
'no_description' => 'Geen beschrijving opgegeven',
|
||||
'alias' => 'Alias',
|
||||
'alias_description' => 'Een unieke naam voor dit component voor gebruik in de code van een pagina of layout.',
|
||||
'validation_message' => 'Een alias voor het component is verplicht en mag alleen bestaan uit letters, cijfers en underscores. De alias moet beginnen met een letter.',
|
||||
'invalid_request' => 'De template kan niet worden opgeslagen vanwege ongeldige componentgegevens.',
|
||||
'no_records' => 'Geen componenten gevonden',
|
||||
'not_found' => "Het component ':name' is niet gevonden.",
|
||||
'method_not_found' => "Het component ':name' bevat geen ':method' methode.",
|
||||
'not_found' => 'Het component \':name\' is niet gevonden.',
|
||||
'method_not_found' => 'Het component \':name\' bevat geen \':method\' methode.',
|
||||
],
|
||||
'template' => [
|
||||
'invalid_type' => "Onbekend type template.",
|
||||
'not_found' => "De opgevraagde template is niet gevonden.",
|
||||
'saved'=> "De template is succesvol opgeslagen."
|
||||
'invalid_type' => 'Onbekend type template.',
|
||||
'not_found' => 'De opgevraagde template is niet gevonden.',
|
||||
'saved' => 'De template is succesvol opgeslagen.'
|
||||
],
|
||||
'permissions' => [
|
||||
'name' => 'Cms',
|
||||
'manage_content' => 'Beheer inhoud',
|
||||
'manage_assets' => 'Beheer middelen',
|
||||
'manage_pages' => 'Beheer pagina\'s',
|
||||
'manage_layouts' => 'Beheer layouts',
|
||||
'manage_partials' => 'Beheer sjablonen',
|
||||
'manage_themes' => 'Beheer thema\'s'
|
||||
'manage_themes' => 'Beheer thema\'s',
|
||||
'manage_media' => 'Beheer media',
|
||||
],
|
||||
'mediafinder' => [
|
||||
'default_prompt' => 'Klik op de %s knop om een media item te vinden'
|
||||
],
|
||||
'media' => [
|
||||
'invalid_path' => 'Ongeldig pad opgegeven: \':path\'.',
|
||||
'menu_label' => 'Media',
|
||||
'upload' => 'Uploaden',
|
||||
'move' => 'Verplaatsen',
|
||||
'delete' => 'Verwijderen',
|
||||
'add_folder' => 'Map toevoegen',
|
||||
'search' => 'Zoeken',
|
||||
'display' => 'Weergeven',
|
||||
'filter_everything' => 'Alles',
|
||||
'filter_images' => 'Afbeeldingen',
|
||||
'filter_video' => 'Video\'s',
|
||||
'filter_audio' => 'Audio',
|
||||
'filter_documents' => 'Documenten',
|
||||
'library' => 'Bibliotheek',
|
||||
'folder_size_items' => 'item(s)',
|
||||
'size' => 'Grootte',
|
||||
'title' => 'Titel',
|
||||
'last_modified' => 'Laatst gewijzigd',
|
||||
'public_url' => 'URL',
|
||||
'click_here' => 'Klik hier',
|
||||
'thumbnail_error' => 'Fout opgetreden bij genereren miniatuurweergave.',
|
||||
'return_to_parent' => 'Terug naar bovenliggende map',
|
||||
'return_to_parent_label' => 'Naar bovenliggende ...',
|
||||
'nothing_selected' => 'Er is niets geselecteerd.',
|
||||
'multiple_selected' => 'Meerdere items geselecteerd.',
|
||||
'uploading_file_num' => 'Uploaden van :number bestanden...',
|
||||
'uploading_complete' => 'Uploaden voltooid',
|
||||
'order_by' => 'Sorteer op',
|
||||
'folder' => 'Map',
|
||||
'no_files_found' => 'Er zijn geen bestanden gevonden.',
|
||||
'delete_empty' => 'Selecteer items om te verwijderen.',
|
||||
'delete_confirm' => 'Weet je zeker dat je de geselecteerde items wilt verwijderen?',
|
||||
'error_renaming_file' => 'Fout bij wijzigen naam.',
|
||||
'new_folder_title' => 'Nieuwe map',
|
||||
'folder_name' => 'Mapnaam',
|
||||
'error_creating_folder' => 'Fout bij maken van map',
|
||||
'folder_or_file_exist' => 'Er bestaat reeds een map of bestand met deze naam.',
|
||||
'move_empty' => 'Selecteer de items om te verplaatsen.',
|
||||
'move_popup_title' => 'Verplaats bestanden of mappen',
|
||||
'move_destination' => 'Doelmap',
|
||||
'please_select_move_dest' => 'Selecteer een doelmap.',
|
||||
'move_dest_src_match' => 'Selecteer een andere doelmap.',
|
||||
'empty_library' => 'De media bibliotheek is leeg. Upload bestanden of maak mappen aan om te beginnen.',
|
||||
'insert' => 'Invoegen',
|
||||
'crop_and_insert' => 'Uitsnijden & Invoegen',
|
||||
'select_single_image' => 'Selecteer één afbeelding.',
|
||||
'selection_not_image' => 'Het geselecteerde item is geen afbeelding.',
|
||||
'restore' => 'Alle wijzigingen ongedaan maken',
|
||||
'resize' => 'Wijzig grootte...',
|
||||
'selection_mode_normal' => 'Normaal',
|
||||
'selection_mode_fixed_ratio' => 'Vaste ratio',
|
||||
'selection_mode_fixed_size' => 'Vaste grootte',
|
||||
'height' => 'Hoogte',
|
||||
'width' => 'Breedte',
|
||||
'selection_mode' => 'Selectie modus',
|
||||
'resize_image' => 'Wijzig grootte van afbeelding',
|
||||
'image_size' => 'Grootte afbeelding:',
|
||||
'selected_size' => 'Geselecteerd:'
|
||||
]
|
||||
];
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ return [
|
|||
'export_folders_comment' => 'Proszę zaznaczyć foldery do eksportu',
|
||||
'delete_button' => 'Usuń',
|
||||
'delete_confirm' => 'Czy na pewno usunąć ten motyw? Tej operacji nie można cofnąć!',
|
||||
'delete_active_theme_failed' => 'Cannot delete the active theme, try making another theme active first.',
|
||||
'delete_active_theme_failed' => 'Nie można usunąć aktywnego motywu. Spróbuj zmienić aktywny motyw na inny.',
|
||||
'delete_theme_success' => 'Pomyślnie usunięto motyw!',
|
||||
'create_title' => 'Utwórz motyw',
|
||||
|
|
@ -266,7 +265,6 @@ return [
|
|||
'uploading_file_num' => 'Przesyłanie :number pliku(ów)...',
|
||||
'uploading_complete' => 'Przesyłanie zakończone',
|
||||
'order_by' => 'Sortowanie',
|
||||
'search' => 'Szukaj',
|
||||
'folder' => 'Folder',
|
||||
'no_files_found' => 'Nie znaleziono żadnych pasujących elementów.',
|
||||
'delete_empty' => 'Wybierz elementy do usunięcia.',
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'Enviando :number arquivo(s)...',
|
||||
'uploading_complete' => 'Envio finalizado',
|
||||
'order_by' => 'Ordenar por',
|
||||
'search' => 'Buscar',
|
||||
'folder' => 'Pasta',
|
||||
'no_files_found' => 'Nenhum arquivo encontrado.',
|
||||
'delete_empty' => 'Por favor, selecione um item para excluir.',
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ return [
|
|||
'uploading_file_num' => 'Загрузка файлов: :number',
|
||||
'uploading_complete' => 'Загрузка файлов завершена!',
|
||||
'order_by' => 'Сортировать по',
|
||||
'search' => 'Поиск',
|
||||
'folder' => 'Папка',
|
||||
'no_files_found' => 'Ни один из файлов не удовлетворяет вашему запросу.',
|
||||
'delete_empty' => 'Пожалуйста, выберите объекты для удаления.',
|
||||
|
|
|
|||
|
|
@ -38,8 +38,10 @@ return [
|
|||
'dir_name_label' => 'Katalognamn',
|
||||
'dir_name_create_label' => 'Destinationen för temakatalogen',
|
||||
'theme_label' => 'Tema',
|
||||
'theme_title' => 'Teman',
|
||||
'activate_button' => 'Aktivera',
|
||||
'active_button' => 'Aktivera',
|
||||
'customize_theme' => 'Anpassa tema',
|
||||
'customize_button' => 'Anpassa',
|
||||
'duplicate_button' => 'Duplicera',
|
||||
'duplicate_title' => 'Duplicera temat',
|
||||
|
|
@ -75,6 +77,7 @@ return [
|
|||
'dir_name_invalid' => 'Namn kan bara innehålla siffror, latinska bokstäver och följande symboler: _-',
|
||||
'dir_name_taken' => 'Den önskade temakatalogen finns redan.',
|
||||
'find_more_themes' => 'Hitta fler teman på OctoberCMS Theme Marketplace',
|
||||
'saving' => 'Sparar tema...',
|
||||
'return' => 'Återvänd till temalistan',
|
||||
],
|
||||
'maintenance' => [
|
||||
|
|
@ -227,6 +230,70 @@ return [
|
|||
'manage_pages' => 'Hantera sidor',
|
||||
'manage_layouts' => 'Hantera layouts',
|
||||
'manage_partials' => 'Hantera partials',
|
||||
'manage_themes' => 'Hantera teman'
|
||||
'manage_themes' => 'Hantera teman',
|
||||
'manage_media' => 'Hantera media'
|
||||
],
|
||||
'mediafinder' => [
|
||||
'default_prompt' => 'Klicka på %s knappen för att hitta ett mediaföremål'
|
||||
],
|
||||
'media' => [
|
||||
'invalid_path' => "Felaktig filsökväg angiven: ':path'.",
|
||||
'menu_label' => 'Media',
|
||||
'upload' => 'Ladda upp',
|
||||
'move' => 'Flytta',
|
||||
'delete' => 'Radera',
|
||||
'add_folder' => 'Ny mapp',
|
||||
'search' => 'Sök',
|
||||
'display' => 'Visa',
|
||||
'filter_everything' => 'Allt',
|
||||
'filter_images' => 'Bilder',
|
||||
'filter_video' => 'Videor',
|
||||
'filter_audio' => 'Ljud',
|
||||
'filter_documents' => 'Dokument',
|
||||
'library' => 'Bibliotek',
|
||||
'folder_size_items' => 'föremål',
|
||||
'size' => 'Storlek',
|
||||
'title' => 'Titel',
|
||||
'last_modified' => 'Senast ändrad',
|
||||
'public_url' => 'Publik URL',
|
||||
'click_here' => 'Klicka här',
|
||||
'thumbnail_error' => 'Fel vid generering av thumbnail.',
|
||||
'return_to_parent' => 'Återgå till mappens förälder',
|
||||
'return_to_parent_label' => 'Upp ..',
|
||||
'nothing_selected' => 'Inget är valt.',
|
||||
'multiple_selected' => 'Flera föremål valda.',
|
||||
'uploading_file_num' => 'Laddar upp :number fil(er)...',
|
||||
'uploading_complete' => 'Uppladdning slutförd',
|
||||
'order_by' => 'Ordna efter',
|
||||
'folder' => 'Mapp',
|
||||
'no_files_found' => 'Inga filer kunde hittas baserat på din sökning.',
|
||||
'delete_empty' => 'Vänligen välj föremål att radera.',
|
||||
'delete_confirm' => 'Är du säker att du vill radera de valda föremålen?',
|
||||
'error_renaming_file' => 'Fel vid namnbyte av föremålet.',
|
||||
'new_folder_title' => 'Ny mapp',
|
||||
'folder_name' => 'Mappnamn',
|
||||
'error_creating_folder' => 'Fel vid skapande av mapp',
|
||||
'folder_or_file_exist' => 'En mapp eller fil med det angivna namnet existerar redan.',
|
||||
'move_empty' => 'Vänligen välj föremål att flytta.',
|
||||
'move_popup_title' => 'Flytta filer eller mappar',
|
||||
'move_destination' => 'Destinationsmapp',
|
||||
'please_select_move_dest' => 'Vänligen välj en destinationsmapp.',
|
||||
'move_dest_src_match' => 'Vänligen välj en annan destinationsmapp.',
|
||||
'empty_library' => 'Mediabiblioteket är tomt. Ladda upp filer eller skapa mappar för att börja.',
|
||||
'insert' => 'Infoga',
|
||||
'crop_and_insert' => 'Beskär & infoga',
|
||||
'select_single_image' => 'Vänligen välj en enskild bild.',
|
||||
'selection_not_image' => 'Det valda föremålet är inte en bild.',
|
||||
'restore' => 'Ångra alla ändringar',
|
||||
'resize' => 'Anpassa storlek...',
|
||||
'selection_mode_normal' => 'Normal',
|
||||
'selection_mode_fixed_ratio' => 'Fast proportion',
|
||||
'selection_mode_fixed_size' => 'Fast storlek',
|
||||
'height' => 'Höjd',
|
||||
'width' => 'Bredd',
|
||||
'selection_mode' => 'Urvalsläge',
|
||||
'resize_image' => 'Anpassa bildstorlek',
|
||||
'image_size' => 'Bildstorlek:',
|
||||
'selected_size' => 'Vald:'
|
||||
]
|
||||
];
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ return [
|
|||
'file_name_required' => 'Dosya adı alanı gereklidir.'
|
||||
],
|
||||
'theme' => [
|
||||
'not_found_name' => "':name' isimli tema bulunamadı.",
|
||||
'active' => [
|
||||
'not_set' => "Aktif tema belirtilmedi.",
|
||||
'not_found' => 'Aktif tema bulunamadı.'
|
||||
|
|
@ -24,10 +25,61 @@ return [
|
|||
],
|
||||
'settings_menu' => 'Temalar',
|
||||
'settings_menu_description' => 'Yüklü temalar listesini önizleyebilir, bir tema seçip aktifleştirebilirsiniz.',
|
||||
'find_more_themes' => 'Medanis Tema Marketi\'nden başka tema alabilirsiniz.',
|
||||
'default_tab' => 'Özellikler',
|
||||
'name_label' => 'İsim',
|
||||
'name_create_placeholder' => 'Yeni tema ismi',
|
||||
'author_label' => 'Yazar',
|
||||
'author_placeholder' => 'Kişi yada şirket ismi',
|
||||
'description_label' => 'Açıklama',
|
||||
'description_placeholder' => 'Tema açıklaması',
|
||||
'homepage_label' => 'Anasayfa',
|
||||
'homepage_placeholder' => 'Anasayfa Adresi(URL)',
|
||||
'code_label' => 'Kod',
|
||||
'code_placeholder' => 'Temanın dağıtımında kullanılmak üzere benzersiz bir kod.',
|
||||
'dir_name_label' => 'Klasör ismi',
|
||||
'dir_name_create_label' => 'Hedef tema dizini',
|
||||
'theme_label' => 'Tema',
|
||||
'theme_title' => 'Temalar',
|
||||
'activate_button' => 'Aktifleştir',
|
||||
'active_button' => 'Aktifleştir',
|
||||
'customize_button' => 'Düzenle'
|
||||
'customize_theme' => 'Temayı Özelleştir',
|
||||
'customize_button' => 'Düzenle',
|
||||
'duplicate_button' => 'Kopyala',
|
||||
'duplicate_title' => 'Temayı kopyala',
|
||||
'duplicate_theme_success' => 'Tema başarıyla kopyalandı!',
|
||||
'manage_button' => 'Yönet',
|
||||
'manage_title' => 'Temayı yönet',
|
||||
'edit_properties_title' => 'Tema',
|
||||
'edit_properties_button' => 'Özellikleri düzenle',
|
||||
'save_properties' => 'Özellikleri kaydet',
|
||||
'import_button' => 'İçe aktar',
|
||||
'import_title' => 'Temayı içe aktar',
|
||||
'import_theme_success' => 'Tema başarıyla içe aktarıldı!',
|
||||
'import_uploaded_file' => 'Tema arşiv dosyası',
|
||||
'import_overwrite_label' => 'Mevcut dosyaların üstüne yaz',
|
||||
'import_overwrite_comment' => 'Sadece yeni dosyaları almak için bu kutucuğu boşaltın',
|
||||
'import_folders_label' => 'Klasörler',
|
||||
'import_folders_comment' => 'Lütfen içe aktarmak istediğiniz tema klasörlerini seçiniz.',
|
||||
'export_button' => 'Dışa aktar',
|
||||
'export_title' => 'Temayı dışa aktar',
|
||||
'export_folders_label' => 'Klasörler',
|
||||
'export_folders_comment' => 'Lütfen dışa aktarmak istediğiniz tema klasörlerini seçiniz',
|
||||
'delete_button' => 'Sil',
|
||||
'delete_confirm' => 'Bu temayı silmek istediniğize emin misiniz? Bu işlem geri alınamaz!',
|
||||
'delete_active_theme_failed' => 'Aktif tema silinemez. Lütfen başka bir temayı aktif tema olarak seçiniz.',
|
||||
'delete_theme_success' => 'Tema başarıyla silindi!',
|
||||
'create_title' => 'Tema oluştur',
|
||||
'create_button' => 'Oluştur',
|
||||
'create_new_blank_theme' => 'Yeni boş bir tema oluştur',
|
||||
'create_theme_success' => 'Tema başarıyla oluşturuldu!',
|
||||
'create_theme_required_name' => 'Please specify a name for the theme.',
|
||||
'new_directory_name_label' => 'Tema dizini',
|
||||
'new_directory_name_comment' => 'Kopyalanacak tema için yeni bir tema dizini giriniz.',
|
||||
'dir_name_invalid' => 'İsim sadece sayı, latin harfleri ve şu sembolleri içerebilir: _- ',
|
||||
'dir_name_taken' => 'İstenen tema dizini zaten mevcut.',
|
||||
'find_more_themes' => 'Daha fazla tema bulun',
|
||||
'saving' => 'Tema kaydediliyor...',
|
||||
'return' => 'Tema listesine geri dön'
|
||||
],
|
||||
'maintenance' => [
|
||||
'settings_menu' => 'Bakım modu',
|
||||
|
|
@ -36,6 +88,7 @@ return [
|
|||
'is_enabled_comment' => 'Aktifleştirildiğinde, web sitesi ziyaretçileri aşağıdaki seçtiğiniz sayfayı görecektir.'
|
||||
],
|
||||
'page' => [
|
||||
'not_found_name' => "':name' sayfası bulunamadı",
|
||||
'not_found' => [
|
||||
'label' => "Sayfa bulunamadı",
|
||||
'help' => "İstenilen sayfa bulunamadı.",
|
||||
|
|
@ -178,6 +231,70 @@ return [
|
|||
'manage_pages' => 'Sayfaları düzenleyebilsin',
|
||||
'manage_layouts' => 'Şablonları düzenleyebilsin',
|
||||
'manage_partials' => 'Parça Kodları düzenleyebilsin',
|
||||
'manage_themes' => 'Temaları düzenleyebilsin'
|
||||
'manage_themes' => 'Temaları düzenleyebilsin',
|
||||
'manage_media' => 'Medyaları düzenleyebilsin'
|
||||
],
|
||||
'mediafinder' => [
|
||||
'default_prompt' => 'Bir medya öğesi bulmak için %s butonuna tıklayın'
|
||||
],
|
||||
'media' => [
|
||||
'invalid_path' => "Geçersiz dosya dizini belirtildi: ':path'.",
|
||||
'menu_label' => 'Medya',
|
||||
'upload' => 'Yükle',
|
||||
'move' => 'Taşı',
|
||||
'delete' => 'Sil',
|
||||
'add_folder' => 'Yeni Klasör',
|
||||
'search' => 'Ara',
|
||||
'display' => 'Görüntüle',
|
||||
'filter_everything' => 'Her şey',
|
||||
'filter_images' => 'Resimler',
|
||||
'filter_video' => 'Video',
|
||||
'filter_audio' => 'Ses',
|
||||
'filter_documents' => 'Belgeler',
|
||||
'library' => 'Kütüphane',
|
||||
'folder_size_items' => 'öğe(ler)',
|
||||
'size' => 'Boyut',
|
||||
'title' => 'Başlık',
|
||||
'last_modified' => 'Son düzenleme tarihi',
|
||||
'public_url' => 'Public URL',
|
||||
'click_here' => 'Buraya tıkla',
|
||||
'thumbnail_error' => 'Önizleme oluşturulurken hata.',
|
||||
'return_to_parent' => 'Ana klasöre geri dön',
|
||||
'return_to_parent_label' => 'Yukarı git..',
|
||||
'nothing_selected' => 'Hiçbir şey seçilmedi.',
|
||||
'multiple_selected' => 'Birden fazla öğe seçildi.',
|
||||
'uploading_file_num' => ':number adet dosya yükleniyor...',
|
||||
'uploading_complete' => 'Yükleme tamamlandı',
|
||||
'order_by' => 'Sırala',
|
||||
'folder' => 'Klasör',
|
||||
'no_files_found' => 'İsteğiniz doğrultusunda hiçbir dosya bulunamadı.',
|
||||
'delete_empty' => 'Lütfen silinecek öğeleri seçiniz.',
|
||||
'delete_confirm' => 'Bu öğe veya öğeleri gerçekten silmek istediğinize emin misiniz?',
|
||||
'error_renaming_file' => 'Öğeyi yeniden isimlendirirken hata.',
|
||||
'new_folder_title' => 'Yeni Klasör',
|
||||
'folder_name' => 'Klasör ismi',
|
||||
'error_creating_folder' => 'Klasör oluştururken hata',
|
||||
'folder_or_file_exist' => 'Belirtilen isimde bir klasör ya da dosya zaten mevcut.',
|
||||
'move_empty' => 'Lütfen taşınacak öğeleri seçiniz.',
|
||||
'move_popup_title' => 'Dosyaları veya klasörleri taşı',
|
||||
'move_destination' => 'Hedef klasör',
|
||||
'please_select_move_dest' => 'Lütfen hedef klasörü seçiniz.',
|
||||
'move_dest_src_match' => 'Lütfen başka bir hedef klasör seçiniz.',
|
||||
'empty_library' => 'Medya kütüphanesi boş. Başlamak için dosya yükleyin yada klasör oluşturun.',
|
||||
'insert' => 'Ekle',
|
||||
'crop_and_insert' => 'Kırp ve Ekle',
|
||||
'select_single_image' => 'Lütfen sadece bir tane resim seçiniz.',
|
||||
'selection_not_image' => 'Seçili öğe bir resim değil.',
|
||||
'restore' => 'Tüm değişiklikleri geri al',
|
||||
'resize' => 'Yeniden boyutlandırma...',
|
||||
'selection_mode_normal' => 'Normal',
|
||||
'selection_mode_fixed_ratio' => 'Sabit oran',
|
||||
'selection_mode_fixed_size' => 'Sabit boyut',
|
||||
'height' => 'Yükseklik',
|
||||
'width' => 'Genişlik',
|
||||
'selection_mode' => 'Seçim modu',
|
||||
'resize_image' => 'Resimi yeniden boyutlandırs',
|
||||
'image_size' => 'Resim boyutu:',
|
||||
'selected_size' => 'Seçili:'
|
||||
]
|
||||
];
|
||||
];
|
||||
|
|
|
|||
|
|
@ -262,7 +262,6 @@ return [
|
|||
'uploading_file_num' => '上传 :number 文件...',
|
||||
'uploading_complete' => '上传完毕',
|
||||
'order_by' => '排序',
|
||||
'search' => '搜索',
|
||||
'folder' => '文件夹',
|
||||
'no_files_found' => '没找到你请求的文件.',
|
||||
'delete_empty' => '请选择删除项.',
|
||||
|
|
|
|||
|
|
@ -262,7 +262,6 @@ return [
|
|||
'uploading_file_num' => '上傳 :number 檔案...',
|
||||
'uploading_complete' => '上傳完畢',
|
||||
'order_by' => '排序',
|
||||
'search' => '搜尋',
|
||||
'folder' => '檔案夾',
|
||||
'no_files_found' => '沒找到您請求的檔案.',
|
||||
'delete_empty' => '請選擇刪除項.',
|
||||
|
|
|
|||
|
|
@ -86,10 +86,10 @@ class ThemeExport extends Model
|
|||
$zipName = uniqid('oc');
|
||||
$zipPath = temp_path().'/'.$zipName;
|
||||
|
||||
if (!@mkdir($tempPath))
|
||||
if (!File::makeDirectory($tempPath))
|
||||
throw new ApplicationException('Unable to create directory '.$tempPath);
|
||||
|
||||
if (!@mkdir($metaPath = $tempPath . '/meta'))
|
||||
if (!File::makeDirectory($metaPath = $tempPath . '/meta'))
|
||||
throw new ApplicationException('Unable to create directory '.$metaPath);
|
||||
|
||||
File::copy($themePath.'/theme.yaml', $tempPath.'/theme.yaml');
|
||||
|
|
@ -133,7 +133,7 @@ class ThemeExport extends Model
|
|||
$headers = Response::download($zipPath, $outputName)->headers->all();
|
||||
$result = Response::make(File::get($zipPath), 200, $headers);
|
||||
|
||||
@unlink($zipPath);
|
||||
@File::delete($zipPath);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ class ThemeImport extends Model
|
|||
|
||||
File::put($zipPath, $file->getContents());
|
||||
|
||||
if (!@mkdir($tempPath))
|
||||
if (!File::makeDirectory($tempPath))
|
||||
throw new ApplicationException('Unable to create directory '.$tempPath);
|
||||
|
||||
Zip::extract($zipPath, $tempPath);
|
||||
|
|
|
|||
|
|
@ -293,7 +293,7 @@ class AssetList extends WidgetBase
|
|||
throw new ApplicationException(Lang::get('cms::lang.asset.already_exists'));
|
||||
}
|
||||
|
||||
if (!@mkdir($newFullPath)) {
|
||||
if (!File::makeDirectory($newFullPath)) {
|
||||
throw new ApplicationException(Lang::get(
|
||||
'cms::lang.cms_object.error_creating_directory',
|
||||
['name' => $newName]
|
||||
|
|
@ -422,7 +422,7 @@ class AssetList extends WidgetBase
|
|||
$assetsPath = $this->getAssetsPath();
|
||||
|
||||
if (!file_exists($assetsPath) || !is_dir($assetsPath)) {
|
||||
if (!@mkdir($assetsPath)) {
|
||||
if (!File::makeDirectory($assetsPath)) {
|
||||
throw new ApplicationException(Lang::get(
|
||||
'cms::lang.cms_object.error_creating_directory',
|
||||
['name'=>$assetsPath]
|
||||
|
|
|
|||
|
|
@ -964,10 +964,15 @@ class MediaManager extends WidgetBase
|
|||
$fileName = $uploadedFile->getClientOriginalName();
|
||||
|
||||
/*
|
||||
* File name contains non-latin characters, attempt to slug the value
|
||||
* Convert uppcare case file extensions to lower case
|
||||
*/
|
||||
$extension = strtolower($uploadedFile->getClientOriginalExtension());
|
||||
$fileName = File::name($fileName).'.'.$extension;
|
||||
|
||||
/*
|
||||
* File name contains non-latin characters, attempt to slug the value
|
||||
*/
|
||||
if (!$this->validateFileName($fileName)) {
|
||||
$extension = $uploadedFile->getClientOriginalExtension();
|
||||
$fileNameSlug = Str::slug(File::name($fileName), '-');
|
||||
$fileName = $fileNameSlug.'.'.$extension;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,16 @@
|
|||
<div class="layout-row min-size">
|
||||
<div class="layout control-toolbar">
|
||||
<div class="layout-cell">
|
||||
<div class="relative toolbar-item loading-indicator-container size-input-text">
|
||||
<input placeholder="<?= e(trans('cms::lang.sidebar.search')) ?>" type="text" name="search" value="<?= e($this->getSearchTerm()) ?>"
|
||||
class="form-control icon search" autocomplete="off"
|
||||
data-track-input
|
||||
data-load-indicator
|
||||
data-load-indicator-opaque
|
||||
data-request="<?= $this->getEventHandler('onSearch') ?>"
|
||||
/>
|
||||
</div>
|
||||
<div class="control-toolbar toolbar-padded">
|
||||
|
||||
<!-- Component Search -->
|
||||
<div class="relative toolbar-item loading-indicator-container size-input-text">
|
||||
<input placeholder="<?= e(trans('cms::lang.sidebar.search')) ?>" type="text" name="search" value="<?= e($this->getSearchTerm()) ?>"
|
||||
class="form-control icon search" autocomplete="off"
|
||||
data-track-input
|
||||
data-load-indicator
|
||||
data-load-indicator-opaque
|
||||
data-request="<?= $this->getEventHandler('onSearch') ?>"
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -178,6 +178,8 @@ class ServiceProvider extends ModuleServiceProvider
|
|||
'trans' => ['Lang', 'get'],
|
||||
'transchoice' => ['Lang', 'choice'],
|
||||
'md' => ['Markdown', 'parse'],
|
||||
'time_since' => ['System\Helpers\DateTime', 'timeSince'],
|
||||
'time_tense' => ['System\Helpers\DateTime', 'timeTense'],
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
|
@ -255,10 +257,10 @@ class ServiceProvider extends ModuleServiceProvider
|
|||
protected function registerTwigParser()
|
||||
{
|
||||
/*
|
||||
* Register basic Twig
|
||||
* Register system Twig environment
|
||||
*/
|
||||
App::singleton('twig', function ($app) {
|
||||
$twig = new Twig_Environment(new TwigLoader(), ['auto_reload' => true]);
|
||||
App::singleton('twig.environment', function ($app) {
|
||||
$twig = new Twig_Environment(new TwigLoader, ['auto_reload' => true]);
|
||||
$twig->addExtension(new TwigExtension);
|
||||
return $twig;
|
||||
});
|
||||
|
|
@ -267,16 +269,7 @@ class ServiceProvider extends ModuleServiceProvider
|
|||
* Register .htm extension for Twig views
|
||||
*/
|
||||
App::make('view')->addExtension('htm', 'twig', function () {
|
||||
return new TwigEngine(App::make('twig'));
|
||||
});
|
||||
|
||||
/*
|
||||
* Register Twig that will parse strings
|
||||
*/
|
||||
App::singleton('twig.string', function ($app) {
|
||||
$twig = $app['twig'];
|
||||
$twig->setLoader(new Twig_Loader_String);
|
||||
return $twig;
|
||||
return new TwigEngine(App::make('twig.environment'));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,10 +51,13 @@ return [
|
|||
'Str' => 'October\Rain\Support\Facades\Str',
|
||||
'Markdown' => 'October\Rain\Support\Facades\Markdown',
|
||||
'Yaml' => 'October\Rain\Support\Facades\Yaml',
|
||||
'Ini' => 'October\Rain\Support\Facades\Ini',
|
||||
'Twig' => 'October\Rain\Support\Facades\Twig',
|
||||
'DbDongle' => 'October\Rain\Support\Facades\DbDongle',
|
||||
'Backend' => 'Backend\Facades\Backend',
|
||||
'BackendMenu' => 'Backend\Facades\BackendMenu',
|
||||
'BackendAuth' => 'Backend\Facades\BackendAuth',
|
||||
'AjaxException' => 'October\Rain\Exception\AjaxException',
|
||||
'SystemException' => 'October\Rain\Exception\SystemException',
|
||||
'ApplicationException' => 'October\Rain\Exception\ApplicationException',
|
||||
'ValidationException' => 'October\Rain\Exception\ValidationException',
|
||||
|
|
|
|||
|
|
@ -1004,6 +1004,11 @@ button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-ap
|
|||
[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}
|
||||
[class^="oc-icon-"]:before,[class*=" oc-icon-"]:before{display:inline-block;margin-right:8px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;vertical-align:baseline}
|
||||
[class^="oc-icon-"].empty:before,[class*=" oc-icon-"].empty:before{margin-right:0}
|
||||
.icon-lg{font-size:1.33333333em;line-height:0.75em;vertical-align:-15%}
|
||||
.icon-2x{font-size:2em}
|
||||
.icon-3x{font-size:3em}
|
||||
.icon-4x{font-size:4em}
|
||||
.icon-5x{font-size:5em}
|
||||
@font-face{font-family:'Open Sans';src:url('../../../backend/assets/font/OpenSans-Light.eot');src:url('../../../backend/assets/font/OpenSans-Light.eot?#iefix') format('embedded-opentype'),url('../../../backend/assets/font/OpenSans-Light.svg#open_sanslight') format('svg'),url('../../../backend/assets/font/OpenSans-Light.woff') format('woff'),url('../../../backend/assets/font/OpenSans-Light.ttf') format('truetype');font-style:normal;font-weight:300}
|
||||
@font-face{font-family:'Open Sans';src:url('../../../backend/assets/font/OpenSans-Regular.eot');src:url('../../../backend/assets/font/OpenSans-Regular.eot?#iefix') format('embedded-opentype'),url('../../../backend/assets/font/OpenSans-Regular.svg#open_sansregular') format('svg'),url('../../../backend/assets/font/OpenSans-Regular.woff') format('woff'),url('../../../backend/assets/font/OpenSans-Regular.ttf') format('truetype');font-style:normal;font-weight:400}
|
||||
@font-face{font-family:'Open Sans';src:url('../../../backend/assets/font/OpenSans-Semibold.eot');src:url('../../../backend/assets/font/OpenSans-Semibold.eot?#iefix') format('embedded-opentype'),url('../../../backend/assets/font/OpenSans-Semibold.svg#open_sanssemibold') format('svg'),url('../../../backend/assets/font/OpenSans-Semibold.woff') format('woff'),url('../../../backend/assets/font/OpenSans-Semibold.ttf') format('truetype');font-style:normal;font-weight:600}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* This file has been compiled from: /modules/system/lang/cs/client.php
|
||||
*/
|
||||
if ($.oc === undefined) $.oc = {}
|
||||
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
|
||||
$.oc.langMessages['cs'] = $.extend(
|
||||
$.oc.langMessages['cs'] || {},
|
||||
{"markdowneditor":{"formatting":"Form\u00e1tov\u00e1n\u00ed","quote":"Citace","code":"K\u00f3d","header1":"Nadpis 1","header2":"Nadpis 2","header3":"Nadpis 3","header4":"Nadpis 4","header5":"Nadpis 5","header6":"Nadpis 6","bold":"Tu\u010dn\u011b","italic":"Kurz\u00edvou","unorderedlist":"Ne\u010d\u00edslovan\u00fd seznam","orderedlist":"\u010c\u00edslovan\u00fd seznam","video":"Video","image":"Obr\u00e1zek","link":"Odkaz","horizontalrule":"Vlo\u017eit horizont\u00e1ln\u00ed linku","fullscreen":"Cel\u00e1 obrazovka","preview":"N\u00e1hled"},"mediamanager":{"insert_link":"Vlo\u017eit odkaz","insert_image":"Vlo\u017eit obr\u00e1zek","insert_video":"Vlo\u017eit video","insert_audio":"Vlo\u017eit zvuk","invalid_file_empty_insert":"Pros\u00edm vyberte soubor, na kter\u00fd se vlo\u017e\u00ed odkaz.","invalid_file_single_insert":"Vyberte jeden soubor.","invalid_image_empty_insert":"Vyberte soubor(y) pro vlo\u017een\u00ed.","invalid_video_empty_insert":"Vyberte video soubor pro vlo\u017een\u00ed.","invalid_audio_empty_insert":"Vyberte audio soubor pro vlo\u017een\u00ed."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Zru\u0161it"}}
|
||||
);
|
||||
|
|
@ -5,5 +5,5 @@ if ($.oc === undefined) $.oc = {}
|
|||
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
|
||||
$.oc.langMessages['de'] = $.extend(
|
||||
$.oc.langMessages['de'] || {},
|
||||
{"markdowneditor":{"formatting":"Formatting","quote":"Quote","code":"Code","header1":"Header 1","header2":"Header 2","header3":"Header 3","header4":"Header 4","header5":"Header 5","header6":"Header 6","bold":"Bold","italic":"Italic","unorderedlist":"Unordered List","orderedlist":"Ordered List","video":"Video","image":"Image","link":"Link","horizontalrule":"Insert Horizontal Rule","fullscreen":"Full screen","preview":"Preview"},"mediamanager":{"insert_link":"Insert Media Link","insert_image":"Insert Media Image","insert_video":"Insert Media Video","insert_audio":"Insert Media Audio","invalid_file_empty_insert":"Please select file to insert a links to.","invalid_file_single_insert":"Please select a single file.","invalid_image_empty_insert":"Please select image(s) to insert.","invalid_video_empty_insert":"Please select a video file to insert.","invalid_audio_empty_insert":"Please select an audio file to insert."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Cancel"}}
|
||||
{"markdowneditor":{"formatting":"Formatierung","quote":"Zitat","code":"Code","header1":"\u00dcberschrift 1","header2":"\u00dcberschrift 2","header3":"\u00dcberschrift 3","header4":"\u00dcberschrift 4","header5":"\u00dcberschrift 5","header6":"\u00dcberschrift 6","bold":"Fett","italic":"Kursiv","unorderedlist":"Normale Liste","orderedlist":"Nummerierte Liste","video":"Video","image":"Bild","link":"Link","horizontalrule":"Horizontale Linie","fullscreen":"Vollbild","preview":"Vorschau"},"mediamanager":{"insert_link":"Link aus Medienbibliothek","insert_image":"Bild aus Medienbibliothek","insert_video":"Video aus Medienbibliothek","insert_audio":"Audio aus Medienbibliothek","invalid_file_empty_insert":"Bitte Datei ausw\u00e4hlen.","invalid_file_single_insert":"Bitte nur eine Datei w\u00e4hlen.","invalid_image_empty_insert":"Bitte ein Bild ausw\u00e4hlen.","invalid_video_empty_insert":"Bitte ein Video ausw\u00e4hlen.","invalid_audio_empty_insert":"Bitte eine Audiodatei ausw\u00e4hlen."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Abbrechen"}}
|
||||
);
|
||||
|
|
@ -5,5 +5,5 @@ if ($.oc === undefined) $.oc = {}
|
|||
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
|
||||
$.oc.langMessages['el'] = $.extend(
|
||||
$.oc.langMessages['el'] || {},
|
||||
{"markdowneditor":{"formatting":"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","quote":"\u03a0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7","code":"\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2","header1":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1","header2":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2","header3":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3","header4":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4","header5":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5","header6":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6","bold":"\u0388\u03bd\u03c4\u03bf\u03bd\u03b1","italic":"\u0399\u03c4\u03b1\u03bb\u03b9\u03ba\u03ac","unorderedlist":"\u039c\u03b7 \u03c4\u03b1\u03be\u03b9\u03bd\u03bf\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1","orderedlist":"\u03a4\u03b1\u03be\u03b9\u03bd\u03bf\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1","video":"\u0392\u03af\u03bd\u03c4\u03b5\u03bf","image":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1","link":"\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2","horizontalrule":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","fullscreen":"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7","preview":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7"},"mediamanager":{"insert_link":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","insert_image":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0395\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2 \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","insert_video":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0392\u03af\u03bd\u03c4\u03b5\u03bf \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","insert_audio":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0389\u03c7\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","invalid_file_empty_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5\u03c2 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc.","invalid_file_single_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bc\u03bf\u03bd\u03b1\u03b4\u03b9\u03ba\u03cc \u03b1\u03c1\u03c7\u03b5\u03af\u03bf.","invalid_image_empty_insert":"Please select image(s) to insert.","invalid_video_empty_insert":"Please select a video file to insert.","invalid_audio_empty_insert":"Please select an audio file to insert."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Cancel"}}
|
||||
{"markdowneditor":{"formatting":"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","quote":"\u03a0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7","code":"\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2","header1":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1","header2":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2","header3":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3","header4":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4","header5":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5","header6":"\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6","bold":"\u0388\u03bd\u03c4\u03bf\u03bd\u03b1","italic":"\u0399\u03c4\u03b1\u03bb\u03b9\u03ba\u03ac","unorderedlist":"\u039c\u03b7 \u03c4\u03b1\u03be\u03b9\u03bd\u03bf\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1","orderedlist":"\u03a4\u03b1\u03be\u03b9\u03bd\u03bf\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1","video":"\u0392\u03af\u03bd\u03c4\u03b5\u03bf","image":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1","link":"\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2","horizontalrule":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","fullscreen":"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7","preview":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7"},"mediamanager":{"insert_link":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","insert_image":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0395\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2 \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","insert_video":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0392\u03af\u03bd\u03c4\u03b5\u03bf \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","insert_audio":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0389\u03c7\u03bf\u03c5 \u03b1\u03c0\u03cc \u03c4\u03b1 \u039c\u03ad\u03c3\u03b1","invalid_file_empty_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5\u03c2 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc.","invalid_file_single_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bc\u03bf\u03bd\u03b1\u03b4\u03b9\u03ba\u03cc \u03b1\u03c1\u03c7\u03b5\u03af\u03bf.","invalid_image_empty_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03ae \u03c4\u03b9\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03b7.","invalid_video_empty_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03b3\u03b9\u03b1 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae.","invalid_audio_empty_insert":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ae\u03c7\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae."},"alert":{"confirm_button_text":"\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9","cancel_button_text":"\u0386\u03ba\u03c5\u03c1\u03bf"}}
|
||||
);
|
||||
|
|
@ -5,5 +5,5 @@ if ($.oc === undefined) $.oc = {}
|
|||
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
|
||||
$.oc.langMessages['fa'] = $.extend(
|
||||
$.oc.langMessages['fa'] || {},
|
||||
{"markdowneditor":{"formatting":"Formatting","quote":"Quote","code":"Code","header1":"Header 1","header2":"Header 2","header3":"Header 3","header4":"Header 4","header5":"Header 5","header6":"Header 6","bold":"Bold","italic":"Italic","unorderedlist":"Unordered List","orderedlist":"Ordered List","video":"Video","image":"Image","link":"Link","horizontalrule":"Insert Horizontal Rule","fullscreen":"Full screen","preview":"Preview"},"mediamanager":{"insert_link":"Insert Media Link","insert_image":"Insert Media Image","insert_video":"Insert Media Video","insert_audio":"Insert Media Audio","invalid_file_empty_insert":"Please select file to insert a links to.","invalid_file_single_insert":"Please select a single file.","invalid_image_empty_insert":"Please select image(s) to insert.","invalid_video_empty_insert":"Please select a video file to insert.","invalid_audio_empty_insert":"Please select an audio file to insert."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Cancel"}}
|
||||
{"markdowneditor":{"formatting":"\u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc","quote":"\u0646\u0642\u0644 \u0642\u0648\u0644","code":"\u06a9\u062f","header1":"\u0633\u0631\u062e\u0637 1","header2":"\u0633\u0631\u062e\u0637 2","header3":"\u0633\u0631\u062e\u0637 3","header4":"\u0633\u0631\u062e\u0637 4","header5":"\u0633\u0631\u062e\u0637 5","header6":"\u0633\u0631\u062e\u0637 6","bold":"\u0638\u062e\u06cc\u0645","italic":"\u0645\u0648\u0631\u0628","unorderedlist":"\u0644\u06cc\u0633\u062a \u0628\u062f\u0648\u0646 \u062a\u0631\u062a\u06cc\u0628","orderedlist":"\u0644\u06cc\u0633\u062a \u0628\u0627 \u062a\u0631\u062a\u06cc\u0628","video":"\u0648\u06cc\u062f\u06cc\u0648","image":"\u062a\u0635\u0648\u06cc\u0631","link":"\u0644\u06cc\u0646\u06a9","horizontalrule":"\u062f\u0631\u062c \u062e\u0637 \u0627\u0641\u0642\u06cc","fullscreen":"\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647","preview":"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634"},"mediamanager":{"insert_link":"\u062f\u0631\u062c \u0622\u062f\u0631\u0633 \u0631\u0633\u0627\u0646\u0647","insert_image":"\u062f\u0631\u062c \u062a\u0635\u0648\u06cc\u0631","insert_video":"\u062f\u0631\u062c \u0648\u06cc\u062f\u06cc\u0648","insert_audio":"\u062f\u0631\u062c \u0635\u0648\u062a","invalid_file_empty_insert":"\u0644\u0637\u0641\u0627 \u0641\u0627\u06cc\u0644\u06cc \u0631\u0627 \u062c\u0647\u062a \u062f\u0631\u062c \u0644\u06cc\u0646\u06a9 \u0622\u0646 \u0648\u0627\u0631\u062f \u0646\u0645\u0627\u06cc\u06cc\u062f","invalid_file_single_insert":"\u0644\u0637\u0641\u0627 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0627\u06cc\u06cc\u062f","invalid_image_empty_insert":"\u0644\u0637\u0641\u0627 \u062a\u0635\u0648\u06cc\u0631(\u0647\u0627) \u0631\u0627 \u062c\u0647\u062a \u062f\u0631\u062c \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u0645\u0627\u06cc\u06cc\u062f","invalid_video_empty_insert":"\u0644\u0637\u0641\u0627 \u0648\u06cc\u062f\u06cc\u0648 \u0631\u0627 \u062c\u0647\u062a \u062f\u0631\u062c \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u0645\u0627\u06cc\u06cc\u062f.","invalid_audio_empty_insert":"\u0644\u0637\u0641\u0627 \u0641\u0627\u06cc\u0644 \u0635\u0648\u062a\u06cc \u0631\u0627 \u062c\u0647\u062a \u062f\u0631\u062c \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u0645\u0627\u06cc\u06cc\u062f"},"alert":{"confirm_button_text":"\u062a\u0627\u06cc\u06cc\u062f","cancel_button_text":"\u0627\u0646\u0635\u0631\u0627\u0641"}}
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue