Commit ad7d6b71 authored by Julia Radzhabova's avatar Julia Radzhabova

Merge pull request #8 from ONLYOFFICE/feature/sse-filter-settings

Feature/sse filter settings
parents cfa19d3a a52c65e6
/**
* ColorPaletteExt.js
*
* Created by Julia Radzhabova on 07/21/15
* Copyright (c) 2014 Ascensio System SIA. All rights reserved.
*
*/
if (Common === undefined)
var Common = {};
define([
'common/main/lib/component/BaseView'
], function () { 'use strict';
Common.UI.ColorPaletteExt = Common.UI.BaseView.extend({
options: {
dynamiccolors: 10,
allowReselect: true,
cls: '',
style: ''
},
template:
_.template([
'<div class="palette-color-ext">',
'<% var me = this; %>',
'<% $(colors).each(function(num, item) { %>',
'<% if (me.isColor(item)) { %>',
'<div class="palette-color-item palette-color color-<%=item%>" style="background:#<%=item%>" hidefocus="on">',
'<em><span style="background:#<%=item%>;" unselectable="on">&#160;</span></em>',
'</div>',
'<% } else if (me.isTransparent(item)) { %>',
'<div class="palette-color-item color-<%=item%>" hidefocus="on">',
'<em><span unselectable="on">&#160;</span></em>',
'</div>',
'<% } else if (me.isEffect(item)) { %>',
'<div effectid="<%=item.effectId%>" effectvalue="<%=item.effectValue%>" class="palette-color-item palette-color-effect color-<%=item.color%>" style="background:#<%=item.color%>" hidefocus="on">',
'<em><span style="background:#<%=item.color%>;" unselectable="on">&#160;</span></em>',
'</div>',
'<% } %>',
'<% }); %>',
'</div>'].join('')),
colorRe: /(?:^|\s)color-(.{6})(?:\s|$)/,
selectedCls: 'selected',
initialize : function(options) {
Common.UI.BaseView.prototype.initialize.call(this, options);
this.id = this.options.id;
this.cls = this.options.cls;
this.style = this.options.style;
this.colors = this.options.colors || [];
this.value = this.options.value;
if (this.options.el)
this.render();
if (this.options.value)
this.select(this.options.value, true);
},
render: function (parentEl) {
var me = this;
if (!me.rendered) {
this.cmpEl = $(this.template({
id : this.id,
cls : this.cls,
style : this.style,
colors : this.colors
}));
if (parentEl) {
this.setElement(parentEl, false);
parentEl.html(this.cmpEl);
} else {
$(this.el).html(this.cmpEl);
}
this.cmpEl.on('click', _.bind(this.handleClick, this));
} else {
this.cmpEl = $(this.el);
}
me.rendered = true;
return this;
},
isColor: function(v) {
return typeof(v) == 'string' && (/[0-9A-F]{6}/).test(v);
},
isTransparent: function(v) {
return typeof(v) == 'string' && (v=='transparent');
},
isEffect: function(v) {
return (typeof(v) == 'object' && v.effectId !== undefined);
},
getColor: function() {
return this.value;
},
handleClick: function(e) {
var me = this;
var target = $(e.target).closest('div.palette-color-item');
var color, cmp;
if (target.length==0) return;
if (target.hasClass('color-transparent') ) {
$(me.el).find('div.' + me.selectedCls).removeClass(me.selectedCls);
target.addClass(me.selectedCls);
me.value = 'transparent';
me.trigger('select', me, 'transparent');
} else {
if (!/^[a-fA-F0-9]{6}$/.test(me.value) || _.indexOf(me.colors, me.value)<0 )
me.value = false;
$(me.el).find('div.' + me.selectedCls).removeClass(me.selectedCls);
target.addClass(me.selectedCls);
color = target[0].className.match(me.colorRe)[1];
if ( target.hasClass('palette-color-effect') ) {
var effectId = parseInt(target.attr('effectid'));
if (color) {
me.value = color.toUpperCase();
me.trigger('select', me, {color: color, effectId: effectId});
}
} else {
if (/#?[a-fA-F0-9]{6}/.test(color)) {
color = /#?([a-fA-F0-9]{6})/.exec(color)[1].toUpperCase();
me.value = color;
me.trigger('select', me, color);
}
}
}
},
select: function(color, suppressEvent) {
var el = $(this.el);
el.find('div.' + this.selectedCls).removeClass(this.selectedCls);
if (!color) return;
if (typeof(color) == 'object' ) {
var effectEl;
if (color.effectId !== undefined) {
effectEl = el.find('div[effectid="'+color.effectId+'"]').first();
if (effectEl.length>0) {
effectEl.addClass(this.selectedCls);
this.value = effectEl[0].className.match(this.colorRe)[1].toUpperCase();
} else
this.value = false;
} else if (color.effectValue !== undefined) {
effectEl = el.find('div[effectvalue="'+color.effectValue+'"].color-' + color.color.toUpperCase()).first();
if (effectEl.length>0) {
effectEl.addClass(this.selectedCls);
this.value = effectEl[0].className.match(this.colorRe)[1].toUpperCase();
} else
this.value = false;
}
} else {
if (/#?[a-fA-F0-9]{6}/.test(color)) {
color = /#?([a-fA-F0-9]{6})/.exec(color)[1].toUpperCase();
this.value = color;
}
if (/^[a-fA-F0-9]{6}|transparent$/.test(color) && _.indexOf(this.colors, color)>=0 ) {
if (_.indexOf(this.colors, this.value)<0) this.value = false;
if (color != this.value || this.options.allowReselect) {
(color == 'transparent') ? el.find('div.color-transparent').addClass(this.selectedCls) : el.find('div.palette-color.color-' + color).first().addClass(this.selectedCls);
this.value = color;
if (suppressEvent !== true) {
this.fireEvent('select', this, color);
}
}
} else {
var co = el.find('#'+color).first();
if (co.length==0)
co = el.find('div[color="'+color+'"]').first();
if (co.length>0) {
co.addClass(this.selectedCls);
this.value = color.toUpperCase();
}
}
}
},
updateColors: function(effectcolors) {
if (effectcolors===undefined) return;
this.colors = effectcolors;
this.cmpEl = $(this.template({
id : this.id,
cls : this.cls,
style : this.style,
colors : this.colors
}));
$(this.el).html(this.cmpEl);
this.cmpEl.on('click', _.bind(this.handleClick, this));
},
clearSelection: function(suppressEvent) {
$(this.el).find('div.' + this.selectedCls).removeClass(this.selectedCls);
this.value = undefined;
}
});
});
\ No newline at end of file
......@@ -138,7 +138,7 @@
@common-controls-width: 100px;
.img-commonctrl,
.theme-colorpalette .color-transparent, .dropdown-menu li .checked:before, .input-error:before {
.theme-colorpalette .color-transparent, .palette-color-ext .color-transparent, .dropdown-menu li .checked:before, .input-error:before {
background: e(%("url(%s)",'@{common-image-path}/@{common-controls}')) no-repeat;
@media
......
......@@ -10,4 +10,46 @@
.box-shadow(0 0 0 1px @primary);
}
}
}
.palette-color-ext {
padding: 10px;
.palette-color-item {
padding: 0;
border: 1px solid #fff;
display: inline-block;
text-decoration: none;
-moz-outline: 0 none;
outline: 0 none;
cursor: pointer;
vertical-align: middle;
em {
border: none;
display: block;
span{
height: 12px;
width: 12px;
cursor: pointer;
display: block;
border: 1px solid rgba(0, 0, 0, 0.2);
}
}
&:hover, &.selected {
border-color: #000;
em span {
border-color: #fff;
}
}
}
.color-transparent {
background-position: @nocolor-offset-x @nocolor-offset-y;
em span {
border:solid 1px #C0C0C0;
}
}
}
\ No newline at end of file
......@@ -152,6 +152,8 @@ define([
view.pmiInsertCells.menu.on('item:click', _.bind(me.onInsertCells, me));
view.pmiDeleteCells.menu.on('item:click', _.bind(me.onDeleteCells, me));
view.pmiSortCells.menu.on('item:click', _.bind(me.onSortCells, me));
view.pmiFilterCells.menu.on('item:click', _.bind(me.onFilterCells, me));
view.pmiReapply.on('click', _.bind(me.onReapply, me));
view.pmiClear.menu.on('item:click', _.bind(me.onClear, me));
view.pmiSelectTable.menu.on('item:click', _.bind(me.onSelectTable, me));
view.pmiInsertTable.menu.on('item:click', _.bind(me.onInsertTable, me));
......@@ -336,13 +338,48 @@ define([
onSortCells: function(menu, item) {
if (this.api) {
this.api.asc_sortColFilter(item.value, '');
this.api.asc_sortColFilter(item.value, '', undefined, (item.value==Asc.c_oAscSortOptions.ByColorFill) ? this.documentHolder.ssMenu.cellColor : this.documentHolder.ssMenu.fontColor);
Common.NotificationCenter.trigger('edit:complete', this.documentHolder);
Common.component.Analytics.trackEvent('DocumentHolder', 'Sort Cells');
}
},
onFilterCells: function(menu, item) {
if (this.api) {
var autoFilterObject = new Asc.AutoFiltersOptions(),
filterObj = new Asc.AutoFilterObj();
if (item.value>0) {
filterObj.asc_setFilter(new Asc.ColorFilter());
filterObj.asc_setType(Asc.c_oAscAutoFilterTypes.ColorFilter);
var colorFilter = filterObj.asc_getFilter();
colorFilter.asc_setCellColor((item.value==1) ? null : false);
colorFilter.asc_setCColor((item.value==1) ? this.documentHolder.ssMenu.cellColor : this.documentHolder.ssMenu.fontColor);
} else {
filterObj.asc_setFilter(new Asc.CustomFilters());
filterObj.asc_setType(Asc.c_oAscAutoFilterTypes.CustomFilters);
var customFilter = filterObj.asc_getFilter();
customFilter.asc_setCustomFilters([new Asc.CustomFilter()]);
customFilter.asc_setAnd(true);
var customFilters = customFilter.asc_getCustomFilters();
customFilters[0].asc_setOperator(Asc.c_oAscCustomAutoFilter.equals);
// customFilters[0].asc_setVal('');
}
autoFilterObject.asc_setFilterObj(filterObj);
this.api.asc_applyAutoFilterByType(autoFilterObject);
Common.NotificationCenter.trigger('edit:complete', this.documentHolder);
Common.component.Analytics.trackEvent('DocumentHolder', 'Filter Cells');
}
},
onReapply: function() {
this.api.asc_reapplyAutoFilter(this.documentHolder.ssMenu.formatTableName);
},
onClear: function(menu, item) {
if (this.api) {
this.api.asc_emptyCells(item.value);
......@@ -1181,6 +1218,8 @@ define([
formatTableInfo = cellinfo.asc_getFormatTableInfo(),
isintable = (formatTableInfo !== null);
documentHolder.ssMenu.formatTableName = (isintable) ? formatTableInfo.asc_getTableName() : null;
documentHolder.ssMenu.cellColor = cellinfo.asc_getFill().asc_getColor();
documentHolder.ssMenu.fontColor = cellinfo.asc_getFont().asc_getColor();
documentHolder.pmiInsertEntire.setVisible(isrowmenu||iscolmenu);
documentHolder.pmiInsertEntire.setCaption((isrowmenu) ? this.textInsertTop : this.textInsertLeft);
......@@ -1190,7 +1229,10 @@ define([
documentHolder.pmiSelectTable.setVisible(iscellmenu && !iscelledit && isintable);
documentHolder.pmiInsertTable.setVisible(iscellmenu && !iscelledit && isintable);
documentHolder.pmiDeleteTable.setVisible(iscellmenu && !iscelledit && isintable);
documentHolder.pmiSortCells.setVisible((iscellmenu||isallmenu||cansort) && !iscelledit && !isintable);
documentHolder.pmiSortCells.setVisible((iscellmenu||isallmenu||cansort) && !iscelledit);
documentHolder.pmiFilterCells.setVisible((iscellmenu||cansort) && !iscelledit);
documentHolder.pmiReapply.setVisible((iscellmenu||isallmenu||cansort) && !iscelledit);
documentHolder.ssMenu.items[12].setVisible((iscellmenu||isallmenu||cansort) && !iscelledit);
documentHolder.pmiInsFunction.setVisible(iscellmenu||insfunc);
documentHolder.pmiAddNamedRange.setVisible(iscellmenu && !iscelledit);
......@@ -1218,7 +1260,7 @@ define([
documentHolder.pmiFreezePanes.setCaption(this.api.asc_getSheetViewSettings().asc_getIsFreezePane() ? documentHolder.textUnFreezePanes : documentHolder.textFreezePanes);
/** coauthoring begin **/
documentHolder.ssMenu.items[13].setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments);
documentHolder.ssMenu.items[16].setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments);
documentHolder.pmiAddComment.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments);
/** coauthoring end **/
documentHolder.pmiCellMenuSeparator.setVisible(iscellmenu || isrowmenu || iscolmenu || isallmenu || insfunc);
......@@ -1236,17 +1278,20 @@ define([
documentHolder.pmiClear.menu.items[3].setVisible(!this.permissions.isEditDiagram);
documentHolder.pmiClear.menu.items[4].setVisible(!this.permissions.isEditDiagram);
var filterInfo = cellinfo.asc_getAutoFilterInfo();
filterInfo = (filterInfo) ? filterInfo.asc_getIsApplyAutoFilter() : false;
documentHolder.pmiInsertCells.menu.items[0].setDisabled(filterInfo);
documentHolder.pmiDeleteCells.menu.items[0].setDisabled(filterInfo);
documentHolder.pmiInsertCells.menu.items[1].setDisabled(filterInfo);
documentHolder.pmiDeleteCells.menu.items[1].setDisabled(filterInfo);
var filterInfo = cellinfo.asc_getAutoFilterInfo(),
isApplyAutoFilter = (filterInfo) ? filterInfo.asc_getIsApplyAutoFilter() : false;
filterInfo = (filterInfo) ? filterInfo.asc_getIsAutoFilter() : null;
documentHolder.pmiInsertCells.menu.items[0].setDisabled(isApplyAutoFilter);
documentHolder.pmiDeleteCells.menu.items[0].setDisabled(isApplyAutoFilter);
documentHolder.pmiInsertCells.menu.items[1].setDisabled(isApplyAutoFilter);
documentHolder.pmiDeleteCells.menu.items[1].setDisabled(isApplyAutoFilter);
_.each(documentHolder.ssMenu.items, function(item) {
item.setDisabled(isCellLocked);
});
documentHolder.pmiCopy.setDisabled(false);
documentHolder.pmiSortCells.setDisabled(isCellLocked || (filterInfo==null));
documentHolder.pmiReapply.setDisabled(isCellLocked || (isApplyAutoFilter!==true));
if (showMenu) this.showPopupMenu(documentHolder.ssMenu, {}, event);
} else if (this.permissions.isEditDiagram && seltype == Asc.c_oAscSelectionType.RangeChartText) {
if (!showMenu && !documentHolder.textInShapeMenu.isVisible()) return;
......
......@@ -206,10 +206,10 @@ define([
toolbar.btnInsertText.on('click', _.bind(this.onBtnInsertTextClick, this));
toolbar.btnInsertText.menu.on('item:click', _.bind(this.onInsertTextClick, this));
toolbar.btnInsertShape.menu.on('hide:after', _.bind(this.onInsertShapeHide, this));
toolbar.btnSortDown.on('click', _.bind(this.onSortType, this, 'ascending'));
toolbar.btnSortUp.on('click', _.bind(this.onSortType, this, 'descending'));
toolbar.mnuitemSortAZ.on('click', _.bind(this.onSortType, this, 'ascending'));
toolbar.mnuitemSortZA.on('click', _.bind(this.onSortType, this, 'descending'));
toolbar.btnSortDown.on('click', _.bind(this.onSortType, this, Asc.c_oAscSortOptions.Ascending));
toolbar.btnSortUp.on('click', _.bind(this.onSortType, this, Asc.c_oAscSortOptions.Descending));
toolbar.mnuitemSortAZ.on('click', _.bind(this.onSortType, this, Asc.c_oAscSortOptions.Ascending));
toolbar.mnuitemSortZA.on('click', _.bind(this.onSortType, this, Asc.c_oAscSortOptions.Descending));
toolbar.btnSetAutofilter.on('click', _.bind(this.onAutoFilter, this));
toolbar.mnuitemAutoFilter.on('click', _.bind(this.onAutoFilter, this));
toolbar.btnClearAutofilter.on('click', _.bind(this.onClearFilter, this));
......
......@@ -230,15 +230,44 @@ define([
items: [
{
caption : me.txtAscending,
value : 'ascending'
value : Asc.c_oAscSortOptions.Ascending
},{
caption : me.txtDescending,
value : 'descending'
value : Asc.c_oAscSortOptions.Descending
},{
caption : me.txtSortCellColor,
value : Asc.c_oAscSortOptions.ByColorFill
},{
caption : me.txtSortFontColor,
value : Asc.c_oAscSortOptions.ByColorFont
}
]
})
});
me.pmiFilterCells = new Common.UI.MenuItem({
caption : me.txtFilter,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
items: [
{
caption : me.txtFilterValue,
value : 0
},{
caption : me.txtFilterCellColor,
value : 1
},{
caption : me.txtFilterFontColor,
value : 2
}
]
})
});
me.pmiReapply = new Common.UI.MenuItem({
caption : me.txtReapply
});
me.pmiInsFunction = new Common.UI.MenuItem({
caption : me.txtFormula
});
......@@ -319,7 +348,10 @@ define([
me.pmiDeleteCells,
me.pmiDeleteTable,
me.pmiClear,
{caption: '--'},
me.pmiSortCells,
me.pmiFilterCells,
me.pmiReapply,
{caption: '--'},
me.pmiAddComment,
me.pmiCellMenuSeparator,
......@@ -629,7 +661,13 @@ define([
insertColumnRightText : 'Insert Column Right',
deleteRowText : 'Delete Row',
deleteColumnText : 'Delete Column',
deleteTableText : 'Delete Table'
deleteTableText : 'Delete Table',
txtFilter: 'Filter',
txtFilterValue: 'Filter by Selected cell\'s value',
txtFilterCellColor: 'Filter by cell\'s color',
txtFilterFontColor: 'Filter by font color',
txtReapply: 'Reapply',
txtSortCellColor: 'Selected Cell Color on top',
txtSortFontColor: 'Selected Font Color on top'
}, SSE.Views.DocumentHolder || {}));
});
\ No newline at end of file
......@@ -1454,13 +1454,13 @@ define([
caption : me.txtSortAZ,
iconCls : 'mnu-sort-asc',
lock : [_set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.coAuth, _set.ruleFilter],
value : 'ascending'
value : Asc.c_oAscSortOptions.Ascending
}),
me.mnuitemSortZA = new Common.UI.MenuItem({
caption : me.txtSortZA,
iconCls : 'mnu-sort-desc',
lock : [_set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.coAuth, _set.ruleFilter],
value : 'descending'
value : Asc.c_oAscSortOptions.Descending
}),
me.mnuitemAutoFilter = new Common.UI.MenuItem({
caption : me.txtFilter,
......
......@@ -245,6 +245,34 @@
"SSE.Views.AutoFilterDialog.txtEmpty": "Enter cell filter",
"SSE.Views.AutoFilterDialog.txtTitle": "Filter",
"SSE.Views.AutoFilterDialog.warnNoSelected": "You must choose at least one value",
"SSE.Views.AutoFilterDialog.txtSortLow2High": "Sort Lowest to Highest",
"SSE.Views.AutoFilterDialog.txtSortHigh2Low": "Sort Highest to Lowest",
"SSE.Views.AutoFilterDialog.txtSortCellColor": "Sort by cells color",
"SSE.Views.AutoFilterDialog.txtSortFontColor": "Sort by font color",
"SSE.Views.AutoFilterDialog.txtNumFilter": "Number filter",
"SSE.Views.AutoFilterDialog.txtTextFilter": "Text filter",
"SSE.Views.AutoFilterDialog.txtFilterCellColor": "Filter by cells color",
"SSE.Views.AutoFilterDialog.txtFilterFontColor": "Filter by font color",
"SSE.Views.AutoFilterDialog.txtClear": "Clear",
"SSE.Views.AutoFilterDialog.txtReapply": "Reapply",
"SSE.Views.AutoFilterDialog.txtEquals": "Equals...",
"SSE.Views.AutoFilterDialog.txtNotEquals": "Does not equal...",
"SSE.Views.AutoFilterDialog.txtGreater": "Greater than...",
"SSE.Views.AutoFilterDialog.txtGreaterEquals": "Greater than or equal to...",
"SSE.Views.AutoFilterDialog.txtLess": "Less than...",
"SSE.Views.AutoFilterDialog.txtLessEquals": "Less than or equal to...",
"SSE.Views.AutoFilterDialog.txtBetween": "Between...",
"SSE.Views.AutoFilterDialog.txtTop10": "Top 10",
"SSE.Views.AutoFilterDialog.txtAboveAve": "Above average",
"SSE.Views.AutoFilterDialog.txtBelowAve": "Below average",
"SSE.Views.AutoFilterDialog.txtBegins": "Begins with...",
"SSE.Views.AutoFilterDialog.txtNotBegins": "Does not begin with...",
"SSE.Views.AutoFilterDialog.txtEnds": "Ends with...",
"SSE.Views.AutoFilterDialog.txtNotEnds": "Does not end with...",
"SSE.Views.AutoFilterDialog.txtContains": "Contains...",
"SSE.Views.AutoFilterDialog.txtNotContains": "Does not contain...",
"SSE.Views.AutoFilterDialog.textSelectAllResults": "Select All Search Results",
"SSE.Views.AutoFilterDialog.textAddSelection": "Add current selection to filter",
"SSE.Views.CellEditor.textManager": "Name Manager",
"SSE.Views.CellEditor.tipFormula": "Insert Function",
"SSE.Views.CellRangeDialog.errorMaxRows": "ERROR! The maximum number of data series per chart is 255",
......@@ -458,6 +486,13 @@
"SSE.Views.DocumentHolder.deleteRowText": "Delete Row",
"SSE.Views.DocumentHolder.deleteColumnText": "Delete Column",
"SSE.Views.DocumentHolder.deleteTableText": "Delete Table",
"SSE.Views.DocumentHolder.txtFilter": "Filter",
"SSE.Views.DocumentHolder.txtFilterValue": "Filter by Selected cell's value",
"SSE.Views.DocumentHolder.txtFilterCellColor": "Filter by cell's color",
"SSE.Views.DocumentHolder.txtFilterFontColor": "Filter by font color",
"SSE.Views.DocumentHolder.txtReapply": "Reapply",
"SSE.Views.DocumentHolder.txtSortCellColor": "Selected Cell Color on top",
"SSE.Views.DocumentHolder.txtSortFontColor": "Selected Font Color on top",
"SSE.Views.FileMenu.btnBackCaption": "Go to Documents",
"SSE.Views.FileMenu.btnCreateNewCaption": "Create New",
"SSE.Views.FileMenu.btnDownloadCaption": "Download as...",
......@@ -1087,5 +1122,13 @@
"SSE.Views.Toolbar.txtText": "Text",
"SSE.Views.Toolbar.txtTime": "Time",
"SSE.Views.Toolbar.txtUnmerge": "Unmerge Cells",
"SSE.Views.Toolbar.txtYen": "¥ Yen"
"SSE.Views.Toolbar.txtYen": "¥ Yen",
"SSE.Views.Top10FilterDialog.cancelButtonText": "Cancel",
"SSE.Views.Top10FilterDialog.okButtonText": "OK",
"SSE.Views.Top10FilterDialog.txtTitle": "Top 10 AutoFilter",
"SSE.Views.Top10FilterDialog.textType": "Show",
"SSE.Views.Top10FilterDialog.txtTop": "Top",
"SSE.Views.Top10FilterDialog.txtBottom": "Bottom",
"SSE.Views.Top10FilterDialog.txtItems": "Item",
"SSE.Views.Top10FilterDialog.txtPercent": "Percent"
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
.combo-values {
width: 100%;
height: 265px;
height: 162px;
overflow: hidden;
.list-item {
......@@ -53,6 +53,16 @@
}
}
#menu-container-filters > .dropdown-menu {
position: inherit !important;
left: 0 !important;
top: 0 !important;
width: 100%;
display: inline-block;
.box-shadow(none);
border: none;
}
.btn-placeholder {
// background-color: red;
display: inline-block;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment