diff --git a/application/dashboard.class.inc.php b/application/dashboard.class.inc.php index 49302f467..dc4173673 100644 --- a/application/dashboard.class.inc.php +++ b/application/dashboard.class.inc.php @@ -442,11 +442,11 @@ abstract class Dashboard public function RenderProperties($oPage, $aExtraParams = array()) { // menu to pick a layout and edit other properties of the dashboard - $oPage->add('
'.Dict::S('UI:DashboardEdit:Properties').'
'); + $oPage->add('
'.Dict::S('UI:DashboardEdit:Properties').'
'); $sUrl = utils::GetAbsoluteUrlAppRoot(); - $oPage->add('
'.Dict::S('UI:DashboardEdit:Layout').'
'); - $oPage->add('
'); + $oPage->add('
'.Dict::S('UI:DashboardEdit:Layout').'
'); + $oPage->add('
'); foreach( get_declared_classes() as $sLayoutClass) { if (is_subclass_of($sLayoutClass, 'DashboardLayout')) @@ -457,7 +457,7 @@ abstract class Dashboard $aCallSpec = array($sLayoutClass, 'GetInfo'); $aInfo = call_user_func($aCallSpec); $sChecked = ($this->sLayoutClass == $sLayoutClass) ? 'checked' : ''; - $oPage->add(''); // title="" on either the img or the label does nothing ! + $oPage->add(''); // title="" on either the img or the label does nothing ! } } } @@ -488,7 +488,8 @@ abstract class Dashboard $oPage->add_ready_script( <<add('
'.Dict::S('UI:DashboardEdit:Dashlets').'
'); + $oPage->add('
'.Dict::S('UI:DashboardEdit:Dashlets').'
'); $sUrl = utils::GetAbsoluteUrlAppRoot(); - $oPage->add('
'); + $oPage->add('
'); $aAvailableDashlets = $this->GetAvailableDashlets(); foreach($aAvailableDashlets as $sDashletClass => $aInfo) { - $oPage->add(''); + $oPage->add(''); } $oPage->add('
'); $oPage->add('
'); - $oPage->add_ready_script("$('.dashlet_icon').draggable({helper: 'clone', appendTo: 'body', zIndex: 10000, revert:'invalid'});"); + $oPage->add_ready_script("$('.dashlet_icon').draggable({cursor: 'move', helper: 'clone', appendTo: 'body', zIndex: 10000, revert:'invalid'});"); } /** @@ -600,12 +601,12 @@ JS public function RenderDashletsProperties(WebPage $oPage, $aExtraParams = array()) { // Toolbox/palette to edit the properties of each dashlet - $oPage->add('
'.Dict::S('UI:DashboardEdit:DashletProperties').'
'); + $oPage->add('
'.Dict::S('UI:DashboardEdit:DashletProperties').'
'); /** @var \DashboardLayoutMultiCol $oLayout */ $oLayout = new $this->sLayoutClass(); - $oPage->add('
'); + $oPage->add('
'); foreach($this->aCells as $iCellIdx => $aCell) { /** @var \Dashlet $oDashlet */ @@ -1221,12 +1222,12 @@ EOF } $aRenderParams['dashboard_div_id'] = $aExtraParams['dashboard_div_id']; $sJSExtraParams = json_encode($aExtraParams); - $oPage->add('
'); + $oPage->add('
'); $oPage->add('
'); $this->SetCustomFlag(true); $this->Render($oPage, true, $aRenderParams); $oPage->add('
'); - $oPage->add('
'); + $oPage->add('
'); $this->RenderProperties($oPage, $aExtraParams); $this->RenderDashletsSelection($oPage); $this->RenderDashletsProperties($oPage, $aExtraParams); @@ -1261,7 +1262,24 @@ $('#dashboard_editor').dialog({ modal: true, title: '$sDialogTitle', buttons: [ - { text: "$sOkButtonLabel", click: function() { + { text: "$sCancelButtonLabel", + class: "ibo-is-alternative", + click: function() { + var oDashboard = $('.itop-dashboard').data('itopRuntimedashboard'); + if (oDashboard.is_modified()) + { + if (!confirm('$sCancelConfirmationMessage')) + { + return; + } + } + window.bLeavingOnUserAction = true; + $(this).dialog( "close" ); + $(this).remove(); + } }, + { text: "$sOkButtonLabel", + class: "ibo-is-primary", + click: function() { var oDashboard = $('.itop-dashboard').data('itopRuntimedashboard'); if (oDashboard.is_dirty()) { @@ -1277,19 +1295,6 @@ $('#dashboard_editor').dialog({ window.bLeavingOnUserAction = true; oDashboard.save($(this)); } }, - { text: "$sCancelButtonLabel", click: function() { - var oDashboard = $('.itop-dashboard').data('itopRuntimedashboard'); - if (oDashboard.is_modified()) - { - if (!confirm('$sCancelConfirmationMessage')) - { - return; - } - } - window.bLeavingOnUserAction = true; - $(this).dialog( "close" ); - $(this).remove(); - } }, ], close: function() { $(this).remove(); } }); @@ -1307,20 +1312,16 @@ $('#dashboard_editor .ui-layout-center').runtimedashboard({ new_dashlet_parameters: {operation: 'new_dashlet'} }); -dashboard_prop_size = GetUserPreference('dashboard_prop_size', 350); -$('#dashboard_editor').layout({ - east: { - minSize: 200, - size: dashboard_prop_size, - togglerLength_open: 0, - togglerLength_closed: 0, - onresize_end: function(name, elt, state, options, layout) - { - if (state.isSliding == false) - { - SetUserPreference('dashboard_prop_size', state.size, true); - } - }, +var dashboard_prop_size = GetUserPreference('dashboard_prop_size', 400); +$('#dashboard_editor > .itop-dashboard').width($('#dashboard_editor').width() - dashboard_prop_size); + +// We check when we finish click on the pane with the resize slider +// if the pane size changed (% 5px), if it's the case we save the value in userpref +$('#dashboard_editor > .itop-dashboard').on('mouseup',function (){ + var iWidthDiff = $(this).width() - ($('#dashboard_editor').width() - dashboard_prop_size); + if( Math.abs(iWidthDiff) > 5){ + dashboard_prop_size = iWidthDiff; + SetUserPreference('dashboard_prop_size', $('#dashboard_editor').width() - $(this).width(), true); } }); diff --git a/application/dashlet.class.inc.php b/application/dashlet.class.inc.php index 19826ff97..89f9adfad 100644 --- a/application/dashlet.class.inc.php +++ b/application/dashlet.class.inc.php @@ -872,7 +872,7 @@ class DashletPlainText extends Dashlet { return array( 'label' => Dict::S('UI:DashletPlainText:Label'), - 'icon' => 'images/dashlet-text.png', + 'icon' => 'images/dashlets/icons8-text-box-48.png', 'description' => Dict::S('UI:DashletPlainText:Description'), ); } @@ -981,7 +981,7 @@ class DashletObjectList extends Dashlet { return array( 'label' => Dict::S('UI:DashletObjectList:Label'), - 'icon' => 'images/dashlet-list.png', + 'icon' => 'images/dashlets/icons8-list-48.png', 'description' => Dict::S('UI:DashletObjectList:Description'), ); } @@ -1581,7 +1581,7 @@ abstract class DashletGroupBy extends Dashlet // Note: no need to translate, should never be visible to the end-user! return array( 'label' => 'Objects grouped by...', - 'icon' => 'images/dashlet-object-grouped.png', + 'icon' => 'images/dashlets/icons8-transaction-list-48.png', 'description' => 'Grouped objects dashlet (abstract)', ); } @@ -1645,7 +1645,7 @@ class DashletGroupByPie extends DashletGroupBy { return array( 'label' => Dict::S('UI:DashletGroupByPie:Label'), - 'icon' => 'images/dashlet-pie-chart.png', + 'icon' => 'images/dashlets/icons8-pie-chart-48.png', 'description' => Dict::S('UI:DashletGroupByPie:Description'), ); } @@ -1720,7 +1720,7 @@ class DashletGroupByBars extends DashletGroupBy { return array( 'label' => Dict::S('UI:DashletGroupByBars:Label'), - 'icon' => 'images/dashlet-bar-chart.png', + 'icon' => 'images/dashlets/icons8-bar-chart-48.png', 'description' => Dict::S('UI:DashletGroupByBars:Description'), ); } @@ -1821,7 +1821,7 @@ class DashletGroupByTable extends DashletGroupBy return array( 'label' => Dict::S('UI:DashletGroupByTable:Label'), 'description' => Dict::S('UI:DashletGroupByTable:Description'), - 'icon' => 'images/dashlet-groupby-table.png', + 'icon' => 'images/dashlets/icons8-transaction-list-48.png', ); } @@ -1950,7 +1950,7 @@ class DashletHeaderStatic extends Dashlet { return array( 'label' => Dict::S('UI:DashletHeaderStatic:Label'), - 'icon' => 'images/dashlet-header.png', + 'icon' => 'images/dashlets/icons8-header-48.png', 'description' => Dict::S('UI:DashletHeaderStatic:Description'), ); } @@ -2256,7 +2256,7 @@ class DashletHeaderDynamic extends Dashlet { return array( 'label' => Dict::S('UI:DashletHeaderDynamic:Label'), - 'icon' => 'images/dashlet-header-stats.png', + 'icon' => 'images/dashlets/icons8-header-altered-48.png', 'description' => Dict::S('UI:DashletHeaderDynamic:Description'), ); } @@ -2368,7 +2368,7 @@ class DashletBadge extends Dashlet { return array( 'label' => Dict::S('UI:DashletBadge:Label'), - 'icon' => 'images/dashlet-badge.png', + 'icon' => 'images/dashlets/icons8-badge-48.png', 'description' => Dict::S('UI:DashletBadge:Description'), ); } diff --git a/application/forms.class.inc.php b/application/forms.class.inc.php index eadd1661b..4a6d2dc7e 100644 --- a/application/forms.class.inc.php +++ b/application/forms.class.inc.php @@ -107,7 +107,7 @@ class DesignerForm $aRow = $oField->Render($oP, $sFormId); if ($oField->IsVisible()) { - $sValidation = ' '.$this->GetValidationArea($oField->GetFieldId()).''; + $sValidation = ''.$this->GetValidationArea($oField->GetFieldId()).''; $sField = $aRow['value'].$sValidation; $aDetails[] = array('label' => $aRow['label'], 'value' => $sField); } @@ -230,18 +230,18 @@ class DesignerForm if ($oField->IsVisible()) { $sFieldId = $this->GetFieldId($oField->GetCode()); - $sValidation = $this->GetValidationArea($sFieldId, ''); - $sValidationFields = ''.$sValidation.''.$this->EndRow(); + $sValidation = $this->GetValidationArea($sFieldId, ''); + $sValidationFields = ''.$sValidation.''.$this->EndRow(); $sPath = $this->GetHierarchyPath().'/'.$oField->GetCode(); if (is_null($aRow['label'])) { - $sReturn .= $this->StartRow($sFieldId).''.$aRow['value']; + $sReturn .= $this->StartRow($sFieldId).''.$aRow['value']; } else { - $sReturn .= $this->StartRow($sFieldId).''.$aRow['label'].''.$aRow['value']; + $sReturn .= $this->StartRow($sFieldId).''.$aRow['label'].''.$aRow['value']; } if (!($oField instanceof DesignerFormSelectorField) && !($oField instanceof DesignerMultipleSubFormField)) { @@ -266,6 +266,7 @@ class DesignerForm $this->AddReadyScript( <<$sContent"; + return "$sContent"; } public function GetAsyncActionClass() { @@ -716,7 +717,7 @@ class DesignerFormField $this->bMandatory = false; $this->bReadOnly = false; $this->bAutoApply = false; - $this->aCSSClasses = array(); + $this->aCSSClasses = array('ibo-input'); $this->bDisplayed = true; $this->aWidgetExtraParams = array(); } @@ -1055,6 +1056,12 @@ EOF class DesignerLongTextField extends DesignerTextField { + public function __construct($sCode, $sLabel = '', $defaultValue = '') + { + parent::__construct($sCode, $sLabel, $defaultValue); + $this->aCSSClasses[] = 'ibo-input-text-area'; + } + public function Render(WebPage $oP, $sFormId, $sRenderMode='dialog') { $sId = $this->oForm->GetFieldId($this->sCode); @@ -1178,6 +1185,7 @@ class DesignerComboField extends DesignerFormField $this->bMultipleSelection = false; $this->bOtherChoices = false; $this->sNullLabel = Dict::S('UI:SelectOne'); + $this->aCSSClasses[] = 'ibo-input-select'; $this->bAutoApply = true; $this->bSorted = true; // Sorted by default @@ -1315,6 +1323,7 @@ class DesignerBooleanField extends DesignerFormField { parent::__construct($sCode, $sLabel, $defaultValue); $this->bAutoApply = true; + $this->aCSSClasses[] = 'ibo-input-checkbox'; } public function Render(WebPage $oP, $sFormId, $sRenderMode='dialog') @@ -1597,6 +1606,7 @@ class DesignerFormSelectorField extends DesignerFormField $this->defaultRealValue = $defaultValue; $this->aSubForms = array(); $this->bSorted = true; + $this->aCSSClasses[] = 'ibo-input-select'; } public function IsSorted() diff --git a/css/backoffice/components/_all.scss b/css/backoffice/components/_all.scss index a010f7df1..0378b8493 100644 --- a/css/backoffice/components/_all.scss +++ b/css/backoffice/components/_all.scss @@ -17,6 +17,7 @@ @import "modal"; @import "dashlet/all"; @import "input/all"; +@import "prop"; @import "title"; @import "datatable"; diff --git a/css/backoffice/components/_prop.scss b/css/backoffice/components/_prop.scss new file mode 100644 index 000000000..521fb59c4 --- /dev/null +++ b/css/backoffice/components/_prop.scss @@ -0,0 +1,28 @@ +$ibo-prop--apply--padding-left: 12px !default; +$ibo-prop--cancel--padding-left: 7px !default; + +$ibo-prop--apply-cancel--span--height: 28px !default; +$ibo-prop--apply-cancel--span--width: 32px !default; + +.ibo-prop--apply{ + padding-left: $ibo-prop--apply--padding-left; + > span{ + @extend .ibo-is-green; + } +} +.ibo-prop--cancel{ + padding-left: $ibo-prop--cancel--padding-left; + > span{ + @extend .ibo-is-red; + } +} +.ibo-prop--apply, .ibo-prop--cancel{ + > span{ + display: block; + height: $ibo-prop--apply-cancel--span--height; + width: $ibo-prop--apply-cancel--span--width; + text-align: center; + @extend .ibo-button; + @extend .ibo-is-alternative; + } +} diff --git a/css/backoffice/components/input/_all.scss b/css/backoffice/components/input/_all.scss index 58001e1f0..615c9ecdf 100644 --- a/css/backoffice/components/input/_all.scss +++ b/css/backoffice/components/input/_all.scss @@ -5,8 +5,11 @@ @import "input"; @import "input-select"; +@import "input-checkbox"; @import "input-date"; @import "input-datetime"; @import "input-duration"; +@import "input-select-icon"; @import "input-string"; @import "input-tagset"; +@import "input-textarea"; diff --git a/css/backoffice/components/input/_input-checkbox.scss b/css/backoffice/components/input/_input-checkbox.scss new file mode 100644 index 000000000..c03476a30 --- /dev/null +++ b/css/backoffice/components/input/_input-checkbox.scss @@ -0,0 +1,7 @@ +$ibo-input-checkbox--height: 16px !default; +$ibo-input-checkbox--width: auto !default; + +.ibo-input-checkbox{ + height: $ibo-input-checkbox--height; + width: $ibo-input-checkbox--width; +} \ No newline at end of file diff --git a/css/backoffice/components/input/_input-select-icon.scss b/css/backoffice/components/input/_input-select-icon.scss new file mode 100644 index 000000000..0725869c8 --- /dev/null +++ b/css/backoffice/components/input/_input-select-icon.scss @@ -0,0 +1,44 @@ +$ibo-input-select-icon--icon--padding-right: 4px !default; + +$ibo-input-select-icon--menu--z-index: 21 !default; +$ibo-input-select-icon--menu--max-height: 300px !default; + +$ibo-input-select-icon--menu--icon--max-height: 80px !default; +$ibo-input-select-icon--menu--icon--max-width: 45px !default; +$ibo-input-select-icon--menu--icon--margin-right: 10px !default; + +.ibo-input-select-icon{ + >img{ + max-height: 100%; + max-width: 100%; + padding-right: $ibo-input-select-icon--icon--padding-right; + } +} + +.ibo-input-select-icon--menu { + position: absolute; + z-index: $ibo-input-select-icon--menu--z-index; + max-height: $ibo-input-select-icon--menu--max-height; + overflow-x: hidden; + overflow-y: auto; + @extend .ibo-popover-menu; + @extend .ibo-is-opened; + flex-wrap: nowrap; +} + +.ibo-input-select-icon--menu--item { + @extend .ibo-popover-menu--item; + + > * { + width: 100%; + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; + + > .ibo-input-select-icon--menu--icon { + max-width: $ibo-input-select-icon--menu--icon--max-height; + max-height: $ibo-input-select-icon--menu--icon--max-width; + margin-right: $ibo-input-select-icon--menu--icon--margin-right; + } + } +} diff --git a/css/backoffice/components/input/_input-textarea.scss b/css/backoffice/components/input/_input-textarea.scss new file mode 100644 index 000000000..b50d4d30a --- /dev/null +++ b/css/backoffice/components/input/_input-textarea.scss @@ -0,0 +1,5 @@ +$ibo-input-text-area--min-height: 4rem !default; + +.ibo-input-text-area{ + min-height: $ibo-input-text-area--min-height; +} \ No newline at end of file diff --git a/css/backoffice/layout/_all.scss b/css/backoffice/layout/_all.scss index ccd51e0a8..bf935712e 100644 --- a/css/backoffice/layout/_all.scss +++ b/css/backoffice/layout/_all.scss @@ -23,7 +23,7 @@ @import "tab-container/tab"; @import "multi-column/multi-column"; @import "multi-column/column"; -@import "dashboard/dashboard"; +@import "dashboard/all"; @import "wizard-container/wizard-container"; @import "object-details"; @import "activity-panel/activity-panel"; diff --git a/css/backoffice/layout/dashboard/_all.scss b/css/backoffice/layout/dashboard/_all.scss new file mode 100644 index 000000000..763057787 --- /dev/null +++ b/css/backoffice/layout/dashboard/_all.scss @@ -0,0 +1,20 @@ +/*! + * Copyright (C) 2013-2020 Combodo SARL + * + * This file is part of iTop. + * + * iTop is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * iTop is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + */ + +@import "dashboard"; +@import "dashboard-editor"; \ No newline at end of file diff --git a/css/backoffice/layout/dashboard/_dashboard-editor.scss b/css/backoffice/layout/dashboard/_dashboard-editor.scss new file mode 100644 index 000000000..d3767d8ec --- /dev/null +++ b/css/backoffice/layout/dashboard/_dashboard-editor.scss @@ -0,0 +1,104 @@ +$ibo-dashboard-editor--pane-padding: 16px 30px 16px 15px !default; + +$ibo-dashlet--icon--height: 34px !default; +$ibo-dashlet--icon--width: $ibo-dashlet--icon--height !default; +$ibo-dashlet--icon--margin: 2px 5px !default; + +$ibo-dashboard--properties--title--padding-bottom: 2rem !default; + +$ibo-dashboard--properties--layout-list--padding-bottom: 12px !default; + +$ibo-dashboard--properties--layout-list--button--margin: 0 15px 0 5px !default; + +$ibo-dashboard-editor--padding: 0 !default; + +$ibo-dashboard-editor--dashboard--border-right: solid 1px $ibo-color-grey-200 !default; +$ibo-dashboard-editor--dashboard--padding: 16px 15px 16px 30px !default; + +$ibo-dashlet--delete--top: 7px !default; +$ibo-dashlet--delete--right: 9px !default; +$ibo-dashlet--delete--padding: 2px 6px !default; +$ibo-dashlet--delete--z-index: 21 !default; + + +.ibo-dashboard-editor--pane{ + flex-grow: 1; + padding: $ibo-dashboard-editor--pane-padding; + overflow: auto; +} + +.ibo-dashlet--icon{ + display: inline-block; + height: $ibo-dashlet--icon--height; + width: $ibo-dashlet--icon--width; + margin: $ibo-dashlet--icon--margin; + cursor: grab; + &:active{ + cursor: move; + } +} +.ibo-dashboard--properties, +.ibo-dashboard--available-dashlets, +.ibo-dashlet--properties{ + display: flex; + flex-direction: column; + padding-bottom: 20px; + table{ + width: 100%; + text-align: left; + td{ + margin-bottom: 14px; + .ibo-field{ + @extend %ibo-font-ral-med-100; + } + } + } +} +.ibo-dashboard--properties--title{ + padding-bottom: $ibo-dashboard--properties--title--padding-bottom; + @extend %ibo-font-ral-med-250; +} +.ibo-dashboard--properties--subtitle, +.ibo-dashboard--available-dashlet--title, +.ibo-dashlet--properties--title{ + @extend .ibo-fieldset-legend; + @extend %ibo-font-ral-med-150; +} + +.ibo-dashboard--properties--layout-list { + display: flex; + justify-content: center; + padding-bottom: $ibo-dashboard--properties--layout-list--padding-bottom; + > .ui-button { + display: inline-block; + height: auto; + margin: $ibo-dashboard--properties--layout-list--button--margin; + } +} +.ibo-dashboard--available-dashlets--list{ + display: flex; + justify-content: center; + flex-wrap: wrap; +} + +#dashboard_editor{ + display: flex; + flex-direction: row; + padding: $ibo-dashboard-editor--padding; + > .itop-dashboard{ + resize: horizontal; + overflow: scroll; + border-right: $ibo-dashboard-editor--dashboard--border-right; + padding: $ibo-dashboard-editor--dashboard--padding; + } +} +.ibo-dashlet--delete{ + position: absolute; + top: $ibo-dashlet--delete--top; + right: $ibo-dashlet--delete--right; + padding: $ibo-dashlet--delete--padding; + z-index: $ibo-dashlet--delete--z-index; + @extend .ibo-button; + @extend .ibo-is-alternative; + @extend .ibo-is-danger; +} \ No newline at end of file diff --git a/css/backoffice/vendors/_jqueryui.scss b/css/backoffice/vendors/_jqueryui.scss index 8cbea762b..5f4735192 100644 --- a/css/backoffice/vendors/_jqueryui.scss +++ b/css/backoffice/vendors/_jqueryui.scss @@ -54,7 +54,7 @@ $ibo-input-date--ui-datepicker-header--border-radius: 4px !default; float: left; margin: .1em 0; white-space: nowrap; - width: 90%; + width: 100%; overflow: hidden; text-overflow: ellipsis; } @@ -252,6 +252,12 @@ $ibo-input-date--ui-datepicker-header--border-radius: 4px !default; top: -5px; } +// Layout + +.ui-layout-pane { + overflow: auto; +} + // Date picker .ui-datepicker{ @@ -471,4 +477,42 @@ $ibo-input-date--ui-datepicker-header--border-radius: 4px !default; border-left-width: 1px; } } +} + +// Helper + +.ui-helper-hidden { + display: none; +} +.ui-helper-reset { + margin: 0; + padding: 0; + // border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix { + &:before { + content: ""; + display: table; + border-collapse: collapse; + } + &:after { + content: ""; + display: table; + border-collapse: collapse; + clear: both; + } +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0); } \ No newline at end of file diff --git a/images/dashlets/icons8-badge-48.png b/images/dashlets/icons8-badge-48.png new file mode 100644 index 000000000..820a781ba Binary files /dev/null and b/images/dashlets/icons8-badge-48.png differ diff --git a/images/dashlets/icons8-bar-chart-48.png b/images/dashlets/icons8-bar-chart-48.png new file mode 100644 index 000000000..89812df5c Binary files /dev/null and b/images/dashlets/icons8-bar-chart-48.png differ diff --git a/images/dashlets/icons8-header-1-48.png b/images/dashlets/icons8-header-1-48.png new file mode 100644 index 000000000..bb4cfce8f Binary files /dev/null and b/images/dashlets/icons8-header-1-48.png differ diff --git a/images/dashlets/icons8-header-48.png b/images/dashlets/icons8-header-48.png new file mode 100644 index 000000000..e46cbea9c Binary files /dev/null and b/images/dashlets/icons8-header-48.png differ diff --git a/images/dashlets/icons8-header-altered-48.png b/images/dashlets/icons8-header-altered-48.png new file mode 100644 index 000000000..f67b9c374 Binary files /dev/null and b/images/dashlets/icons8-header-altered-48.png differ diff --git a/images/dashlets/icons8-list-48.png b/images/dashlets/icons8-list-48.png new file mode 100644 index 000000000..d2b808b34 Binary files /dev/null and b/images/dashlets/icons8-list-48.png differ diff --git a/images/dashlets/icons8-pie-chart-48.png b/images/dashlets/icons8-pie-chart-48.png new file mode 100644 index 000000000..47d4bdff0 Binary files /dev/null and b/images/dashlets/icons8-pie-chart-48.png differ diff --git a/images/dashlets/icons8-text-box-48.png b/images/dashlets/icons8-text-box-48.png new file mode 100644 index 000000000..2e3f3a5c1 Binary files /dev/null and b/images/dashlets/icons8-text-box-48.png differ diff --git a/images/dashlets/icons8-transaction-list-48.png b/images/dashlets/icons8-transaction-list-48.png new file mode 100644 index 000000000..3496ec0c8 Binary files /dev/null and b/images/dashlets/icons8-transaction-list-48.png differ diff --git a/js/dashlet.js b/js/dashlet.js index 46d1b9e25..511e87ade 100644 --- a/js/dashlet.js +++ b/js/dashlet.js @@ -30,7 +30,7 @@ $(function() { var me = this; - this.closeBox = $('
'); + this.closeBox = $('
').append(''); this.closeBox .click(function() { me._remove_dashlet(); }) .prependTo(this.element); diff --git a/js/icon_select.js b/js/icon_select.js index e06a47444..51bc3c4f6 100644 --- a/js/icon_select.js +++ b/js/icon_select.js @@ -44,7 +44,7 @@ $(function() } this.oImg = $(''); this.oLabel = $(''+sLabel+''); - this.oButton = $(''); + this.oButton = $(''); this.oButton.prepend(this.oLabel).prepend(this.oImg); this.oButton.click(function(event, ui) { //me._cleanAllMenus(); @@ -105,10 +105,10 @@ $(function() me._cleanAllMenus(); }); var oMenu = - $('