diff --git a/modules/system/assets/js/lang/lang.es.js b/modules/system/assets/js/lang/lang.es.js
index f75ba0115..b47683deb 100644
--- a/modules/system/assets/js/lang/lang.es.js
+++ b/modules/system/assets/js/lang/lang.es.js
@@ -5,5 +5,5 @@ if ($.oc === undefined) $.oc = {}
if ($.oc.langMessages === undefined) $.oc.langMessages = {}
$.oc.langMessages['es'] = $.extend(
$.oc.langMessages['es'] || {},
- {"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":"Formateo","quote":"Cita","code":"C\u00f3digo","header1":"Encabezado 1","header2":"Encabezado 2","header3":"Encabezado 3","header4":"Encabezado 4","header5":"Encabezado 5","header6":"Encabezado 6","bold":"Negrita","italic":"Cursiva","unorderedlist":"Lista Desordenada","orderedlist":"Lista Ordenada","video":"Video","image":"Imagen","link":"V\u00ednculo","horizontalrule":"Insertar Regla Horizontal","fullscreen":"Pantalla completa","preview":"Previsualizar"},"mediamanager":{"insert_link":"Insertar Media V\u00ednculo","insert_image":"Insertar Media Imagen","insert_video":"Insertar Media Video","insert_audio":"Insertar Media Audio","invalid_file_empty_insert":"Por favor seleccione archivo para insertar v\u00ednculo.","invalid_file_single_insert":"Por favor seleccione un solo archivo.","invalid_image_empty_insert":"Por favor seleccione una imagen(es) para insertar.","invalid_video_empty_insert":"Por favor seleccione un archivo de video para insertar.","invalid_audio_empty_insert":"Por favor seleccione un archivo de audio para insertar."},"alert":{"confirm_button_text":"OK","cancel_button_text":"Cancelar"}}
);
\ No newline at end of file
diff --git a/modules/system/assets/ui/docs/list.md b/modules/system/assets/ui/docs/list.md
index 1285c48f6..521cac1ab 100644
--- a/modules/system/assets/ui/docs/list.md
+++ b/modules/system/assets/ui/docs/list.md
@@ -175,7 +175,7 @@ Lists are responsive by default and will collapse at a breakpoint of `980px`. Th
### Row classes
-The following classes are available to use on the table row elements.
+The following colored classes are available to use on the table row elements.
@@ -246,4 +246,37 @@ It might be fun to include a status column!
-
\ No newline at end of file
+
+
+### Button column
+
+You may add a small button to a list column by adding the `column-button` class to the table data (TD) element.
+
+
+
diff --git a/modules/system/assets/ui/less/list.less b/modules/system/assets/ui/less/list.less
index c3e35a373..5d4d66599 100644
--- a/modules/system/assets/ui/less/list.less
+++ b/modules/system/assets/ui/less/list.less
@@ -84,7 +84,7 @@ table.table.data {
color: @color-list-text;
border-color: @color-list-grid;
- a {
+ a:not(.btn) {
color: @color-list-text;
&:hover {
text-decoration: none;
@@ -135,7 +135,7 @@ table.table.data {
background: @color-list-hover-bg !important;
color: white;
- a, span, i[class^="icon-"] {
+ a:not(.btn), span, i[class^="icon-"] {
color: white;
}
}
@@ -211,6 +211,14 @@ table.table.data {
padding-right: 0;
}
+ td.column-compact {
+ padding: 0;
+ }
+
+ td.column-button {
+ padding: 5px;
+ }
+
&.icons {
td i[class^="icon-"] {
display: inline-block;
@@ -226,10 +234,6 @@ table.table.data {
cursor: pointer;
.user-select(none);
}
-
- td.column-compact {
- padding: 0;
- }
}
&.no-active-indicator tbody {
diff --git a/modules/system/assets/ui/storm-min.js b/modules/system/assets/ui/storm-min.js
index 681f251b7..dc60aa294 100644
--- a/modules/system/assets/ui/storm-min.js
+++ b/modules/system/assets/ui/storm-min.js
@@ -2682,9 +2682,8 @@ var href=link.attr('href'),onclick=(typeof link.get(0).onclick=="function")?link
$(this).find('td').not('.'+options.excludeClass).click(function(){if(onclick)
onclick.apply(link.get(0))
else
-window.location=href;})
-$(this).addClass(options.linkedClass)
-link.hide().after(link.html())})}
+window.location=href})
+$(this).addClass(options.linkedClass)})}
RowLink.DEFAULTS={target:'a',excludeClass:'nolink',linkedClass:'rowlink'}
var old=$.fn.rowLink
$.fn.rowLink=function(option){var args=Array.prototype.slice.call(arguments,1)
@@ -3455,7 +3454,8 @@ if(propertyEditor&&!propertyEditor.supportsExternalParameterEditor()){continue}
var cell=row.querySelector('td'),propertyDefinition=this.findPropertyDefinition(property),editor=new $.oc.inspector.externalParameterEditor(this,propertyDefinition,cell)
this.externalParameterEditors.push(editor)}}
Surface.prototype.applyGroupIndexAttribute=function(property,row,group,isGroupedControl){if(property.itemType=='group'||isGroupedControl){row.setAttribute('data-group-index',this.getGroupManager().getGroupIndex(group))
-row.setAttribute('data-parent-group-index',this.getGroupManager().getGroupIndex(group.parentGroup))}else{if(group.parentGroup){row.setAttribute('data-parent-group-index',this.getGroupManager().getGroupIndex(group))}}}
+row.setAttribute('data-parent-group-index',this.getGroupManager().getGroupIndex(group.parentGroup))}
+else{if(group.parentGroup){row.setAttribute('data-parent-group-index',this.getGroupManager().getGroupIndex(group))}}}
Surface.prototype.applyGroupLevelToRow=function(row,group){if(row.hasAttribute('data-group-level')){return}
var th=this.getRowHeadElement(row)
if(th===null){throw new Error('Cannot find TH element for the Inspector row')}
@@ -3474,7 +3474,8 @@ if(row){this.toggleGroup(row,true)}}}
Surface.prototype.expandOrCollapseRows=function(rows,collapse,duration,noAnimation){var row=rows.pop(),self=this
if(row){if(!noAnimation){setTimeout(function toggleRow(){$.oc.foundation.element.toggleClass(row,'collapsed',collapse)
$.oc.foundation.element.toggleClass(row,'expanded',!collapse)
-self.expandOrCollapseRows(rows,collapse,duration,noAnimation)},duration)}else{$.oc.foundation.element.toggleClass(row,'collapsed',collapse)
+self.expandOrCollapseRows(rows,collapse,duration,noAnimation)},duration)}
+else{$.oc.foundation.element.toggleClass(row,'collapsed',collapse)
$.oc.foundation.element.toggleClass(row,'expanded',!collapse)
self.expandOrCollapseRows(rows,collapse,duration,noAnimation)}}}
Surface.prototype.getGroupManager=function(){return this.getRootSurface().groupManager}
@@ -3511,11 +3512,9 @@ $.oc.foundation.element.addClass(cell,'active')}
Surface.prototype.markPropertyChanged=function(property,changed){var row=this.tableContainer.querySelector('tr[data-property="'+property+'"]')
if(changed){$.oc.foundation.element.addClass(row,'changed')}
else{$.oc.foundation.element.removeClass(row,'changed')}}
-Surface.prototype.findPropertyEditor=function(property){for(var i=0,len=this.editors.length;i0){var valuesStr=$.trim($valuesField.val())
-try{return valuesStr.length===0?{}:$.parseJSON(valuesStr)}catch(err){throw new Error('Error parsing Inspector field values. '+err)}}
+try{return valuesStr.length===0?{}:$.parseJSON(valuesStr)}
+catch(err){throw new Error('Error parsing Inspector field values. '+err)}}
var values={},attributes=this.$element.get(0).attributes
for(var i=0,len=attributes.length;i
\
\
'}
PopupBase.prototype.updateDisplayedValue=function(value){this.setLinkText(this.getLink(),value)}
@@ -4296,7 +4292,7 @@ TextEditor.prototype.getPopupContent=function(){return''}
TextEditor.prototype.configurePopup=function(popup){var $textarea=$(popup).find('textarea'),value=this.inspector.getPropertyValue(this.propertyDefinition.property)
@@ -4334,7 +4330,8 @@ if(value===undefined){value=this.propertyDefinition.default}
if(value!==undefined&&value.length!==undefined&&value.length>0&&typeof value!=='string'){var textValues=[]
for(var i=0,len=value.length;i
\
\
'}
ObjectListEditor.prototype.buildPopupContents=function(popup){this.buildItemsTable(popup)}
@@ -4546,7 +4543,8 @@ if(!selectedRow){throw new Exception('A row is not found for the updated data')}
if(property!==this.propertyDefinition.titleProperty){return}
value=$.trim(value)
if(value.length===0){value='[No title]'
-$.oc.foundation.element.addClass(selectedRow,'disabled')}else{$.oc.foundation.element.removeClass(selectedRow,'disabled')}
+$.oc.foundation.element.addClass(selectedRow,'disabled')}
+else{$.oc.foundation.element.removeClass(selectedRow,'disabled')}
selectedRow.firstChild.textContent=value}
ObjectListEditor.prototype.getSelectedRow=function(){if(!this.popup){throw new Error('Trying to get selected row without a popup reference.')}
var rows=this.getTableBody().children
@@ -4571,7 +4569,8 @@ var nextRow=selectedRow.nextElementSibling,prevRow=selectedRow.previousElementSi
this.disposeInspector()
tbody.removeChild(selectedRow)
var newSelectedRow=nextRow?nextRow:prevRow
-if(newSelectedRow){this.selectRow(newSelectedRow)}else{tbody.appendChild(this.buildEmptyRow())}
+if(newSelectedRow){this.selectRow(newSelectedRow)}
+else{tbody.appendChild(this.buildEmptyRow())}
this.updateScrollpads()}
ObjectListEditor.prototype.applyDataToParentInspector=function(){var selectedRow=this.getSelectedRow(),tbody=this.getTableBody(),dataRows=tbody.querySelectorAll('tr[data-inspector-values]'),link=this.getLink(),result=this.getEmptyValue()
if(selectedRow){if(!this.validateKeyValue()){return}
@@ -4681,7 +4680,7 @@ ObjectEditor.prototype.getUndefinedValue=function(){var result={}
for(var i=0,len=this.propertyDefinition.properties.length;i \
@@ -4780,7 +4778,7 @@ DictionaryEditor.prototype.getPopupContent=function(){return''}
DictionaryEditor.prototype.configurePopup=function(popup){this.buildItemsTable(popup.get(0))
@@ -4885,10 +4883,8 @@ DictionaryEditor.prototype.onCommand=function(ev){var command=ev.currentTarget.g
switch(command){case'create-item':this.createItem()
break;case'delete-item':this.deleteItem()
break;}}
-DictionaryEditor.prototype.onKeyDown=function(ev){if(ev.keyCode==40)
-return this.navigateDown(ev)
-else if(ev.keyCode==38)
-return this.navigateUp(ev)}
+DictionaryEditor.prototype.onKeyDown=function(ev){if(ev.keyCode==40){return this.navigateDown(ev)}
+else if(ev.keyCode==38){return this.navigateUp(ev)}}
$.oc.inspector.propertyEditors.dictionary=DictionaryEditor}(window.jQuery);+function($){"use strict";var Base=$.oc.inspector.propertyEditors.string,BaseProto=Base.prototype
var AutocompleteEditor=function(inspector,propertyDefinition,containerCell,group){Base.call(this,inspector,propertyDefinition,containerCell,group)}
AutocompleteEditor.prototype=Object.create(BaseProto)
@@ -4991,18 +4987,15 @@ BaseValidator.prototype.getMessage=function(defaultMessage){if(this.options.mess
if(defaultMessage!==undefined){return defaultMessage}
return this.defaultMessage}
BaseValidator.prototype.isScalar=function(value){if(value===undefined||value===null){return true}
-if(typeof value==='string'||typeof value=='number'||typeof value=='boolean'){return true}
-return false}
+return!!(typeof value==='string'||typeof value=='number'||typeof value=='boolean');}
BaseValidator.prototype.isValid=function(value){return null}
$.oc.inspector.validators.base=BaseValidator}(window.jQuery);+function($){"use strict";var Base=$.oc.inspector.validators.base,BaseProto=Base.prototype
var BaseNumber=function(options){Base.call(this,options)}
BaseNumber.prototype=Object.create(BaseProto)
BaseNumber.prototype.constructor=Base
-BaseNumber.prototype.doCommonChecks=function(value){if(this.options.min!==undefined||this.options.max!==undefined){if(this.options.min!==undefined){if(this.options.min.value===undefined)
-throw new Error('The min.value parameter is not defined in the Inspector validator configuration')
+BaseNumber.prototype.doCommonChecks=function(value){if(this.options.min!==undefined||this.options.max!==undefined){if(this.options.min!==undefined){if(this.options.min.value===undefined){throw new Error('The min.value parameter is not defined in the Inspector validator configuration')}
if(valuethis.options.max.value){return this.options.max.message!==undefined?this.options.max.message:"The value should not be greater than "+this.options.max.value}}}}
$.oc.inspector.validators.baseNumber=BaseNumber}(window.jQuery);+function($){"use strict";var Base=$.oc.inspector.validators.base,BaseProto=Base.prototype
var RequiredValidator=function(options){Base.call(this,options)
@@ -5055,8 +5048,7 @@ if(typeof value=='boolean'){this.throwError('The Length Inspector validator cann
var length=null
if(Object.prototype.toString.call(value)==='[object Array]'||typeof value==='string'){length=value.length}
else if(typeof value==='object'){length=this.getObjectLength(value)}
-if(this.options.min!==undefined||this.options.max!==undefined){if(this.options.min!==undefined){if(this.options.min.value===undefined)
-throw new Error('The min.value parameter is not defined in the Length Inspector validator configuration.')
+if(this.options.min!==undefined||this.options.max!==undefined){if(this.options.min!==undefined){if(this.options.min.value===undefined){throw new Error('The min.value parameter is not defined in the Length Inspector validator configuration.')}
if(length span:after,table.table.data thead th.active >
table.table.data thead tr th:first-child{padding-left:5px}
table.table.data tbody tr:nth-child(even) td,table.table.data tbody tr:nth-child(even) th{background-color:#f5f5f5}
table.table.data tbody td,table.table.data tbody th{padding:11px 15px;color:#666666;border-color:#eeeeee}
-table.table.data tbody td a,table.table.data tbody th a{color:#666666}
-table.table.data tbody td a:hover,table.table.data tbody th a:hover{text-decoration:none}
+table.table.data tbody td a:not(.btn),table.table.data tbody th a:not(.btn){color:#666666}
+table.table.data tbody td a:not(.btn):hover,table.table.data tbody th a:not(.btn):hover{text-decoration:none}
table.table.data tbody td div.progress,table.table.data tbody th div.progress{position:relative;overflow:visible;height:auto;margin-bottom:0;background-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}
table.table.data tbody td div.progress div.bar,table.table.data tbody th div.progress div.bar{position:absolute;left:-15px;top:-11px;bottom:-11px;background:#0181b9;opacity:0.3;filter:alpha(opacity=30)}
table.table.data tbody td div.progress a,table.table.data tbody th div.progress a{position:relative}
@@ -2355,7 +2355,7 @@ table.table.data tbody tr td:first-child{border-left:3px solid transparent;paddi
table.table.data tbody tr.active td{color:#000000}
table.table.data tbody tr.active td:first-child{border-left:3px solid #ff9933}
table.table.data tbody tr:not(.no-data):hover td,table.table.data tbody tr:not(.no-data).selected td{background:#4da7e8 !important;color:white}
-table.table.data tbody tr:not(.no-data):hover td a,table.table.data tbody tr:not(.no-data).selected td a,table.table.data tbody tr:not(.no-data):hover td span,table.table.data tbody tr:not(.no-data).selected td span,table.table.data tbody tr:not(.no-data):hover td i[class^="icon-"],table.table.data tbody tr:not(.no-data).selected td i[class^="icon-"]{color:white}
+table.table.data tbody tr:not(.no-data):hover td a:not(.btn),table.table.data tbody tr:not(.no-data).selected td a:not(.btn),table.table.data tbody tr:not(.no-data):hover td span,table.table.data tbody tr:not(.no-data).selected td span,table.table.data tbody tr:not(.no-data):hover td i[class^="icon-"],table.table.data tbody tr:not(.no-data).selected td i[class^="icon-"]{color:white}
table.table.data tbody tr.hidden td,table.table.data tbody tr.hidden th,table.table.data tbody tr.hidden td a,table.table.data tbody tr.hidden th a{display:none}
table.table.data tbody tr.strike td,table.table.data tbody tr.strike th,table.table.data tbody tr.strike td a,table.table.data tbody tr.strike th a{text-decoration:line-through}
table.table.data tbody tr.frozen td,table.table.data tbody tr.frozen th,table.table.data tbody tr.frozen td a,table.table.data tbody tr.frozen th a{color:#337ab7}
@@ -2368,9 +2368,10 @@ table.table.data tbody tr.safe td,table.table.data tbody tr.special td,table.tab
table.table.data tbody td.column-break-word{word-wrap:break-word;word-break:break-all}
table.table.data tbody td.column-single-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.table.data tbody td.column-slim{padding-left:0;padding-right:0}
+table.table.data tbody td.column-compact{padding:0}
+table.table.data tbody td.column-button{padding:5px}
table.table.data tbody.icons td i[class^="icon-"]{display:inline-block;margin-right:7px;font-size:15px;color:#95a5a6;position:relative;top:1px}
table.table.data tbody.clickable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
-table.table.data tbody td.column-compact{padding:0}
table.table.data.no-active-indicator tbody tr td:first-child{border-left:none}
table.table.data tfoot a{color:#666666;text-decoration:none}
table.table.data tfoot td,table.table.data tfoot th{border-color:#e2e2e2;padding:10px 15px}