diff options
author | Thomas Steur <thomas.steur@gmail.com> | 2015-10-15 16:43:35 +0300 |
---|---|---|
committer | Thomas Steur <thomas.steur@gmail.com> | 2015-10-15 16:43:35 +0300 |
commit | bb80b8f831e10f037c8d2722c9967943defef95e (patch) | |
tree | 3ce0a28cb1d15148cd15d48b83a39e0c92bf38b8 /plugins/Dashboard | |
parent | 713a124cc2c118697f3f2801679bc0e2bb5c5dc3 (diff) | |
parent | 1e139be2c8c3c6f974e740dd1c9f905e8f673f98 (diff) |
Merge branch 'master' into 3.0
Conflicts:
CHANGELOG.md
core/Plugin/Controller.php
core/Version.php
plugins/API/ProcessedReport.php
plugins/CoreHome/CoreHome.php
plugins/CoreHome/javascripts/corehome.js
plugins/CoreHome/javascripts/menu.js
plugins/CoreHome/javascripts/menu_init.js
plugins/CoreHome/lang/en.json
plugins/CoreHome/stylesheets/zen-mode.less
plugins/CoreHome/templates/ReportsByDimension/_reportsByDimension.twig
plugins/CoreHome/templates/_indexContent.twig
plugins/CoreHome/templates/getDefaultIndexView.twig
plugins/Dashboard/Menu.php
plugins/Dashboard/javascripts/dashboard.js
plugins/Dashboard/javascripts/dashboardObject.js
plugins/Goals/templates/_titleAndEvolutionGraph.twig
plugins/Goals/templates/getOverviewView.twig
plugins/Morpheus/javascripts/piwikHelper.js
plugins/Referrers/templates/index.twig
plugins/UserCountry/templates/index.twig
plugins/VisitFrequency/templates/_sparklines.twig
plugins/ZenMode/ZenMode.php
plugins/ZenMode/javascripts/zen-mode.js
tests/PHPUnit/Fixtures/UITestFixture.php
tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
tests/UI/expected-ui-screenshots
tests/UI/specs/Dashboard_spec.js
tests/UI/specs/Menus_spec.js
tests/UI/specs/UIIntegration_spec.js
Diffstat (limited to 'plugins/Dashboard')
-rw-r--r-- | plugins/Dashboard/Categories/DashboardCategory.php | 1 | ||||
-rw-r--r-- | plugins/Dashboard/Dashboard.php | 81 | ||||
-rw-r--r-- | plugins/Dashboard/DashboardManagerControl.php | 2 | ||||
-rw-r--r-- | plugins/Dashboard/DashboardSettingsControlBase.php | 3 | ||||
-rw-r--r-- | plugins/Dashboard/javascripts/dashboard.js | 10 | ||||
-rw-r--r-- | plugins/Dashboard/javascripts/dashboardObject.js | 10 | ||||
-rw-r--r-- | plugins/Dashboard/javascripts/widgetMenu.js | 9 | ||||
-rw-r--r-- | plugins/Dashboard/lang/ko.json | 3 | ||||
-rw-r--r-- | plugins/Dashboard/stylesheets/dashboard.less | 47 | ||||
-rw-r--r-- | plugins/Dashboard/stylesheets/standalone.css | 9 | ||||
-rw-r--r-- | plugins/Dashboard/stylesheets/widget.less | 2 | ||||
-rw-r--r-- | plugins/Dashboard/templates/_dashboardSettings.twig | 8 | ||||
-rw-r--r-- | plugins/Dashboard/templates/index.twig | 5 |
13 files changed, 106 insertions, 84 deletions
diff --git a/plugins/Dashboard/Categories/DashboardCategory.php b/plugins/Dashboard/Categories/DashboardCategory.php index 99a3785c84..4fb9952385 100644 --- a/plugins/Dashboard/Categories/DashboardCategory.php +++ b/plugins/Dashboard/Categories/DashboardCategory.php @@ -14,4 +14,5 @@ class DashboardCategory extends Category { protected $id = 'Dashboard_Dashboard'; protected $order = 0; + protected $icon = 'icon-reporting-dashboard'; } diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php index 5a0a7cc0ec..f46bf1526f 100644 --- a/plugins/Dashboard/Dashboard.php +++ b/plugins/Dashboard/Dashboard.php @@ -35,35 +35,73 @@ class Dashboard extends \Piwik\Plugin public function addWidgetConfigs(&$widgets) { - $dashboards = API::getInstance()->getDashboards(); - - foreach ($dashboards as $dashboard) { - $config = new WidgetConfig(); - $config->setIsNotWidgetizable(); - $config->setModule('Dashboard'); - $config->setAction('embeddedIndex'); - $config->setCategoryId('Dashboard_Dashboard'); - $config->setSubcategoryId($dashboard['id']); - $config->setParameters(array('idDashboard' => $dashboard['id'])); - $widgets[] = $config; + if (Piwik::isUserIsAnonymous()) { + $this->addDefaultDashboard($widgets); + } else { + $dashboards = API::getInstance()->getDashboards(); + + if (empty($dashboards)) { + $this->addDefaultDashboard($widgets); + } else { + foreach ($dashboards as $dashboard) { + $config = new WidgetConfig(); + $config->setIsNotWidgetizable(); + $config->setModule('Dashboard'); + $config->setAction('embeddedIndex'); + $config->setCategoryId('Dashboard_Dashboard'); + $config->setSubcategoryId($dashboard['id']); + $config->setParameters(array('idDashboard' => $dashboard['id'])); + $widgets[] = $config; + } + } } } + private function addDefaultDashboard(&$widgets) + { + $config = new WidgetConfig(); + $config->setIsNotWidgetizable(); + $config->setModule('Dashboard'); + $config->setAction('embeddedIndex'); + $config->setCategoryId('Dashboard_Dashboard'); + $config->setSubcategoryId('1'); + $config->setParameters(array('idDashboard' => 1)); + $widgets[] = $config; + } + public function addSubcategories(&$subcategories) { - $dashboards = API::getInstance()->getDashboards(); - - $order = 0; - foreach ($dashboards as $dashboard) { - $subcategory = new Subcategory(); - $subcategory->setName($dashboard['name']); - $subcategory->setCategoryId('Dashboard_Dashboard'); - $subcategory->setId($dashboard['id']); - $subcategory->setOrder($order++); - $subcategories[] = $subcategory; + if (Piwik::isUserIsAnonymous()) { + $this->addDefaultSubcategory($subcategories); + } else { + $dashboards = API::getInstance()->getDashboards(); + + if (empty($dashboards)) { + $this->addDefaultSubcategory($subcategories); + } else { + $order = 0; + foreach ($dashboards as $dashboard) { + $subcategory = new Subcategory(); + $subcategory->setName($dashboard['name']); + $subcategory->setCategoryId('Dashboard_Dashboard'); + $subcategory->setId($dashboard['id']); + $subcategory->setOrder($order++); + $subcategories[] = $subcategory; + } + } } } + private function addDefaultSubcategory(&$subcategories) + { + $subcategory = new Subcategory(); + $subcategory->setName('Dashboard_Dashboard'); + $subcategory->setCategoryId('Dashboard_Dashboard'); + $subcategory->setId('1'); + $subcategory->setOrder(1); + $subcategories[] = $subcategory; + } + /** * Returns the layout in the DB for the given user, or false if the layout has not been set yet. * Parameters must be checked BEFORE this function call @@ -258,6 +296,7 @@ class Dashboard extends \Piwik\Plugin $translationKeys[] = 'Dashboard_LoadingWidget'; $translationKeys[] = 'Dashboard_WidgetNotFound'; $translationKeys[] = 'Dashboard_DashboardCopied'; + $translationKeys[] = 'Dashboard_Dashboard'; $translationKeys[] = 'General_Close'; $translationKeys[] = 'General_Refresh'; } diff --git a/plugins/Dashboard/DashboardManagerControl.php b/plugins/Dashboard/DashboardManagerControl.php index fb119e0083..df573903b3 100644 --- a/plugins/Dashboard/DashboardManagerControl.php +++ b/plugins/Dashboard/DashboardManagerControl.php @@ -20,7 +20,7 @@ class DashboardManagerControl extends DashboardSettingsControlBase parent::__construct(); $this->jsClass = "DashboardManagerControl"; - $this->cssIdentifier = "dashboard-manager"; + $this->cssIdentifier = "dashboard-manager piwikSelector"; $this->addDashboardActions(); $this->addGeneralActions(); diff --git a/plugins/Dashboard/DashboardSettingsControlBase.php b/plugins/Dashboard/DashboardSettingsControlBase.php index 7275224082..c47ece211a 100644 --- a/plugins/Dashboard/DashboardSettingsControlBase.php +++ b/plugins/Dashboard/DashboardSettingsControlBase.php @@ -23,7 +23,8 @@ abstract class DashboardSettingsControlBase extends UIControl { parent::__construct(); - $this->cssClass = "piwikTopControl dashboardSettings"; + $this->cssClass = "borderedControl piwikTopControl dashboardSettings"; + $this->htmlAttributes = array('piwik-expand-on-click' => ''); $this->dashboardActions = array(); $this->generalActions = array(); } diff --git a/plugins/Dashboard/javascripts/dashboard.js b/plugins/Dashboard/javascripts/dashboard.js index 039f243c42..5a0396e6b3 100644 --- a/plugins/Dashboard/javascripts/dashboard.js +++ b/plugins/Dashboard/javascripts/dashboard.js @@ -161,7 +161,7 @@ function copyDashboardToUser() { // on menu item click, trigger action event on this var self = this; this.$element.on('click', 'ul.submenu li[data-action]', function (e) { - self.$element.toggleClass('visible'); + self.$element.toggleClass('expanded'); $(self).trigger($(this).attr('data-action')); }); @@ -169,7 +169,7 @@ function copyDashboardToUser() { // open manager on open this.$element.on('click', function (e) { if ($(e.target).is('.dashboardSettings,.dashboardSettings>span')) { - self.$element.toggleClass('visible'); + self.$element.toggleClass('expanded'); // fix position self.$element @@ -186,7 +186,7 @@ function copyDashboardToUser() { && !$(e.target).is('.dashboardSettings') ) { self.$element.widgetPreview('reset'); - self.$element.removeClass('visible'); + self.$element.removeClass('expanded'); } }; @@ -199,7 +199,7 @@ function copyDashboardToUser() { }, onSelect: function (widgetUniqueId) { var widget = widgetsHelper.getWidgetObjectFromUniqueId(widgetUniqueId); - self.$element.removeClass('visible'); + self.$element.removeClass('expanded'); self.widgetSelected(widget); }, @@ -280,7 +280,7 @@ function copyDashboardToUser() { }, hide: function () { - this.$element.removeClass('visible'); + this.$element.removeClass('expanded'); }, isWidgetAvailable: function (widgetUniqueId) { diff --git a/plugins/Dashboard/javascripts/dashboardObject.js b/plugins/Dashboard/javascripts/dashboardObject.js index 32c6c01a94..beb590c4f6 100644 --- a/plugins/Dashboard/javascripts/dashboardObject.js +++ b/plugins/Dashboard/javascripts/dashboardObject.js @@ -509,24 +509,26 @@ return $(this).attr('id').indexOf('Dashboard_embeddedIndex') == 0; }).remove(); + if (dashboards.length === 0) { + dashboards = [{iddashboard: 1, name: _pk_translate('Dashboard_Dashboard')}]; + } + if (dashboards.length > 1 || dashboardMenuListItems.length >= 1 ) { var items = []; for (var i = 0; i < dashboards.length; i++) { - var $link = $('<a/>').attr('data-idDashboard', dashboards[i].iddashboard).text(dashboards[i].name); + var $link = $('<a/>').attr('data-idDashboard', dashboards[i].iddashboard).text(dashboards[i].name).addClass('item title'); var $li = $('<li/>').attr('id', 'Dashboard_embeddedIndex_' + dashboards[i].iddashboard) .addClass('dashboardMenuItem').append($link); items.push($li); if (dashboards[i].iddashboard == dashboardId) { dashboardName = dashboards[i].name; - $li.addClass('sfHover'); + $li.addClass('active'); } } dashboardMenuList.prepend(items); - } else { - dashboardMenuList.hide(); } dashboardMenuList.find('a[data-idDashboard]').click(function (e) { diff --git a/plugins/Dashboard/javascripts/widgetMenu.js b/plugins/Dashboard/javascripts/widgetMenu.js index 169768eb03..7190f342a5 100644 --- a/plugins/Dashboard/javascripts/widgetMenu.js +++ b/plugins/Dashboard/javascripts/widgetMenu.js @@ -288,7 +288,12 @@ widgetsHelper.loadWidgetAjax = function (widgetUniqueId, widgetParameters, onWid if ($('.' + settings.categorylistClass + ' .' + settings.choosenClass, widgetPreview).length) { var position = $('.' + settings.categorylistClass + ' .' + settings.choosenClass, widgetPreview).position().top - - $('.' + settings.categorylistClass, widgetPreview).position().top; + $('.' + settings.categorylistClass, widgetPreview).position().top + + $('.dashboard-manager .addWidget').outerHeight(); + + if (!$('#content.admin').length) { + position += 10; // + padding defined in dashboard view + } $('.' + settings.widgetlistClass, widgetPreview).css('top', position); $('.' + settings.widgetlistClass, widgetPreview).css('marginBottom', position); @@ -344,6 +349,7 @@ widgetsHelper.loadWidgetAjax = function (widgetUniqueId, widgetParameters, onWid $('li', widgetList).on('click', function () { if (!$('.widgetLoading', widgetPreview).length) { settings.onSelect($(this).attr('uniqueid')); + $(widgetPreview).closest('.dashboard-manager').removeClass('expanded'); if (settings.resetOnSelect) { resetWidgetPreview(widgetPreview); } @@ -405,6 +411,7 @@ widgetsHelper.loadWidgetAjax = function (widgetUniqueId, widgetParameters, onWid settings.onPreviewLoaded(widgetUniqueId, widgetElement); $('.' + settings.widgetpreviewClass + ' .widgetTop', widgetPreview).on('click', function () { settings.onSelect(widgetUniqueId); + $(widgetPreview).closest('.dashboard-manager').removeClass('expanded'); if (settings.resetOnSelect) { resetWidgetPreview(widgetPreview); } diff --git a/plugins/Dashboard/lang/ko.json b/plugins/Dashboard/lang/ko.json index 995d08d2f3..535fe10319 100644 --- a/plugins/Dashboard/lang/ko.json +++ b/plugins/Dashboard/lang/ko.json @@ -10,7 +10,7 @@ "DashboardEmptyNotification": "대시보드에 위젯이 하나도 없습니다. 대시 보드 위젯을 추가하거나 대시 보드를 기본 위젯으로 재설정하세요.", "DashboardName": "대시보드 이름:", "DashboardOf": "%s의 대시보드", - "DefaultDashboard": "기본 대시보드 - 기본 위젯과 열로 구성된 레이아웃을 사용합니다", + "DefaultDashboard": "기본 대시보드 - 기본 위젯으로 구성된 레이아웃을 사용합니다", "DeleteWidgetConfirm": "대시보드에서 이 위젯을 삭제하시겠습니까?", "EmptyDashboard": "빈 대시보드 - 원하는 위젯을 선택하세요", "LoadingWidget": "위젯 로딩중, 잠시만 기다리세요...", @@ -18,6 +18,7 @@ "Maximise": "최대화", "Minimise": "최소화", "NotUndo": "이 작업은 취소할 수 없습니다.", + "PluginDescription": "당신의 사이트를 분석한 대시보드입니다. 드래그 앤 드롭으로 새로운 위젯을 추가하거나 대시보드 레이아웃을 바꾸는 기능을 통해 당신만의 대시보드를 꾸며보세요. 모든 사용자들은 자신만의 대시보드를 가질 수 있습니다.", "RemoveDashboard": "대시보드 삭제", "RemoveDashboardConfirm": "정말 대시보드 \"%s\"를 삭제 하시겠습니까?", "RenameDashboard": "대시보드 이름 변경", diff --git a/plugins/Dashboard/stylesheets/dashboard.less b/plugins/Dashboard/stylesheets/dashboard.less index fad10183e7..39ad2e3ed7 100644 --- a/plugins/Dashboard/stylesheets/dashboard.less +++ b/plugins/Dashboard/stylesheets/dashboard.less @@ -1,40 +1,21 @@ #dashboard { - margin: 0 -7px; + margin: 0 -6px; } -#root>.top_controls { - margin-left:15px; - margin-right:15px; +#standalone #dashboard { + margin: -10px -6px 0; } -.top_controls { - position: relative; - height: 32px; - clear: left; -} - -@media all and (max-width: 749px) { - .top_controls { - height: auto; - } - .top_controls #periodString, - .top_controls .dashboardSettings, - .top_controls .segmentEditorPanel { - position: static !important; - margin: 0 0 10px; - float: none; - } -} #dashboard { .col { min-height: 100px; // Customize Bootstrap gutter between columns - padding-right: 7px; - padding-left: 7px; + padding-right: 6px; + padding-left: 6px; >.sortable { - padding: 5px 0 10px 0; + padding: 5px 0 8px 0; } } } @@ -152,10 +133,8 @@ z-index: 120; background: #f7f7f7; border: 1px solid #e4e5e4; - padding: 5px 10px 6px 10px; border-radius: 4px; color: @theme-color-text-light; - font-size: 14px; cursor: pointer; overflow: hidden; } @@ -165,9 +144,9 @@ border-color: #a9a399; } -.dashboardSettings.visible { +.dashboardSettings.expanded { z-index: 1020; /* More than .jqplot-seriespicker-popover (1010) */ - min-width: 700px; + min-width: 800px; } .dashboardSettings > span { @@ -182,10 +161,9 @@ float: left; } -.dashboardSettings.visible ul.submenu { +.dashboardSettings.expanded ul.submenu { display: block; list-style: square outside none; - margin-left: 15px; } .dashboardSettings > ul.submenu > li { @@ -328,7 +306,6 @@ div.widgetpreview-preview { min-height: 0; height: auto; margin-right: 10px; - min-width: 180px; } .dashboardSettings .submenu { @@ -372,8 +349,8 @@ div.widgetpreview-preview { display: none; } -.dashboardSettings.visible .widgetpreview-widgetlist, -.dashboardSettings.visible .widgetpreview-preview { +.dashboardSettings.expanded .widgetpreview-widgetlist, +.dashboardSettings.expanded .widgetpreview-preview { display: block; } @@ -416,7 +393,7 @@ div.widgetpreview-preview { } #dashboardWidgetsArea { - margin-top: 5px; + margin-top: -5px; } @media all and (max-width: 749px) { diff --git a/plugins/Dashboard/stylesheets/standalone.css b/plugins/Dashboard/stylesheets/standalone.css index 5a2b0d90d9..292d3e63c0 100644 --- a/plugins/Dashboard/stylesheets/standalone.css +++ b/plugins/Dashboard/stylesheets/standalone.css @@ -45,17 +45,10 @@ body { } #Dashboard > ul > li:hover, -#Dashboard > ul > li:hover a, -#Dashboard > ul > li.sfHover, -#Dashboard > ul > li.sfHover a { +#Dashboard > ul > li:hover a { color: #e87500; } -#Dashboard > ul > li.sfHover, -#Dashboard > ul > li.sfHover a { - font-weight: bold; -} - .top_controls > #Dashboard, .top_controls > #periodString, .top_controls > .dashboardSettings { diff --git a/plugins/Dashboard/stylesheets/widget.less b/plugins/Dashboard/stylesheets/widget.less index a06564f033..558da41ab9 100644 --- a/plugins/Dashboard/stylesheets/widget.less +++ b/plugins/Dashboard/stylesheets/widget.less @@ -16,7 +16,7 @@ font-weight: normal; font-size: 15px; margin: 0; - color: #0D0D0D; + color: @theme-color-text; text-shadow: none; padding: 15px 15px 10px 12px; } diff --git a/plugins/Dashboard/templates/_dashboardSettings.twig b/plugins/Dashboard/templates/_dashboardSettings.twig index dc05a6dae1..b82e913743 100644 --- a/plugins/Dashboard/templates/_dashboardSettings.twig +++ b/plugins/Dashboard/templates/_dashboardSettings.twig @@ -1,12 +1,12 @@ -<span>{{ 'Dashboard_Dashboard'|translate }}</span> -<ul class="submenu"> +<a class="title" title="{{ 'Dashboard_ManageDashboard'|translate|e('html_attr') }}"><span class="icon icon-arrow-bottom"></span>{{ 'Dashboard_Dashboard'|translate }} </a> +<ul class="dropdown submenu"> <li> - <div class="addWidget">{{ 'Dashboard_AddAWidget'|translate }} ↓</div> + <div class="addWidget">{{ 'Dashboard_AddAWidget'|translate }}</div> <ul class="widgetpreview-categorylist"></ul> </li> {% if dashboardActions|length > 0 %} <li> - <div class="manageDashboard">{{ 'Dashboard_ManageDashboard'|translate }} ↓</div> + <div class="manageDashboard">{{ 'Dashboard_ManageDashboard'|translate }}</div> <ul> {% for action, title in dashboardActions %} <li data-action="{{ action }}">{{ title|translate }}</li> diff --git a/plugins/Dashboard/templates/index.twig b/plugins/Dashboard/templates/index.twig index 0a8831fe3f..ddaac2428c 100644 --- a/plugins/Dashboard/templates/index.twig +++ b/plugins/Dashboard/templates/index.twig @@ -3,11 +3,12 @@ {% include "@CoreHome/_periodSelect.twig" %} {{ postEvent("Template.nextToCalendar") }} {% render dashboardSettingsControl %} - <div id="Dashboard" class="piwikTopControl"> + <div id="Dashboard" class="piwikTopControl borderedControl piwikSelector"> <ul> {% for dashboard in dashboards %} <li class="dashboardMenuItem" id="Dashboard_embeddedIndex_{{ dashboard.iddashboard }}"> - <a href="javascript:$('#dashboardWidgetsArea').dashboard('loadDashboard', {{ dashboard.iddashboard }});">{{ dashboard.name|escape }}</a> + <a href="javascript:$('#dashboardWidgetsArea').dashboard('loadDashboard', {{ dashboard.iddashboard }});" + class="title">{{ dashboard.name|escape }}</a> </li> {% endfor %} </ul> |